MATIC Price: $0.734173 (-1.92%)
Gas: 35 GWei
 

Overview

MATIC Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 MATIC

MATIC Value

$0.00

Token Holdings

Sponsored

Transaction Hash
Method
Block
From
To
Value
Withdraw523914022024-01-16 12:15:24133 days ago1705407324IN
0x08d00087...F22f81336
0 MATIC0.0006600130.00075364
Redeposit521661612024-01-10 16:36:23139 days ago1704904583IN
0x08d00087...F22f81336
0 MATIC0.0327490863.46328043
Redeposit521661212024-01-10 16:34:57139 days ago1704904497IN
0x08d00087...F22f81336
0 MATIC0.0323134662.61910206
Redeposit521660802024-01-10 16:33:31139 days ago1704904411IN
0x08d00087...F22f81336
0 MATIC0.0310125763.37827772
Redeposit521656492024-01-10 16:17:11139 days ago1704903431IN
0x08d00087...F22f81336
0 MATIC0.06158408121.44774829
Withdraw521656262024-01-10 16:16:11139 days ago1704903371IN
0x08d00087...F22f81336
0 MATIC0.0044919994.94813311
Withdraw521656192024-01-10 16:15:43139 days ago1704903343IN
0x08d00087...F22f81336
0 MATIC0.0037905480.12140834
Withdraw521656162024-01-10 16:15:31139 days ago1704903331IN
0x08d00087...F22f81336
0 MATIC0.0036231776.58367721
Redeposit521573212024-01-10 11:01:58139 days ago1704884518IN
0x08d00087...F22f81336
0 MATIC0.0236740577.8710839
Redeposit521562662024-01-10 10:22:44139 days ago1704882164IN
0x08d00087...F22f81336
0 MATIC0.0290932854.91744807
Distribute Predi...521493022024-01-10 6:00:02139 days ago1704866402IN
0x08d00087...F22f81336
0 MATIC0.0129821538.95772363
Redeposit521471832024-01-10 4:39:22139 days ago1704861562IN
0x08d00087...F22f81336
0 MATIC0.0149077130.00198459
Redeposit521450642024-01-10 3:15:43139 days ago1704856543IN
0x08d00087...F22f81336
0 MATIC0.0149771550
Redeposit521450572024-01-10 3:15:29139 days ago1704856529IN
0x08d00087...F22f81336
0 MATIC0.0252533550
Redeposit521306092024-01-09 18:00:52139 days ago1704823252IN
0x08d00087...F22f81336
0 MATIC0.0168044832.60424645
Redeposit521297622024-01-09 17:28:10140 days ago1704821290IN
0x08d00087...F22f81336
0 MATIC0.0230081345.11832436
Redeposit521257672024-01-09 14:57:45140 days ago1704812265IN
0x08d00087...F22f81336
0 MATIC0.08690577169.61030548
Redeposit521245362024-01-09 14:12:21140 days ago1704809541IN
0x08d00087...F22f81336
0 MATIC0.0334157668.25184745
Redeposit521244952024-01-09 14:10:53140 days ago1704809453IN
0x08d00087...F22f81336
0 MATIC0.0425056379.07187308
Withdraw521238212024-01-09 13:45:52140 days ago1704807952IN
0x08d00087...F22f81336
0 MATIC0.0057682168.80275935
Redeposit521238102024-01-09 13:45:30140 days ago1704807930IN
0x08d00087...F22f81336
0 MATIC0.0358348168.80275935
Redeposit521200592024-01-09 11:23:56140 days ago1704799436IN
0x08d00087...F22f81336
0 MATIC0.0428270979.73009013
Redeposit521200412024-01-09 11:23:06140 days ago1704799386IN
0x08d00087...F22f81336
0 MATIC0.0427361880.71273952
Withdraw521186572024-01-09 10:30:26140 days ago1704796226IN
0x08d00087...F22f81336
0 MATIC0.0038542181.46728032
Withdraw521186462024-01-09 10:30:02140 days ago1704796202IN
0x08d00087...F22f81336
0 MATIC0.0041816588.38846006
View all transactions

Parent Transaction Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MSG

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : MSG.sol
// SPDX-License-Identifier: GPLv3

pragma solidity ^0.8.18;

import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract MSG {
    using SafeMath for uint256; 
    uint256 private constant timeStep = 1 days;
    uint256 private constant dayPerCycle = 10 days; 
    uint256 private constant maxAddFreeze = 30 days;
    uint256 private constant predictDuration = 30 minutes;
    uint256 private constant initDayNewbies = 5;
    uint256 private constant incInterval = 2;
    uint256 private constant incNumber = 1;
    uint256 private constant unlimitDay = 365;
    uint256 private constant predictFee = 1e6;
    uint256 private constant dayPredictLimit = 10;
    uint256 private constant maxSearchDepth = 3000;
    uint256 private constant baseDividend = 10000;
    uint256 private constant incomeFeePercents = 700;
    uint256 private constant bonusPercents = 500;
    uint256 private constant splitPercents = 3000;
    uint256 private constant transferFeePercents = 1000;
    uint256 private constant dayRewardPercents = 150;
    uint256 private constant predictPoolPercents = 300;
    uint256 private constant unfreezeWithoutIncomePercents = 15000;
    uint256 private constant unfreezeWithIncomePercents = 20000;
    uint256[5] private levelTeam = [0, 0, 0, 50, 200];
    uint256[5] private levelInvite = [0, 0, 0, 10000e6, 20000e6];
    uint256[5] private levelDeposit = [50e6, 500e6, 1000e6, 2000e6, 3000e6];
    uint256[5] private balReached = [50e10, 100e10, 200e10, 500e10, 1000e10];
    uint256[5] private balFreeze = [35e10, 70e10, 100e10, 300e10, 500e10];
    uint256[5] private balUnfreeze = [80e10, 150e10, 200e10, 500e10, 1000e10];
    uint256[20] private invitePercents = [500, 100, 200, 300, 200, 100, 100, 100, 50, 50, 50, 50, 30, 30, 30, 30, 30, 30, 30, 30];
    uint256[20] private predictWinnerPercents = [3000, 2000, 1000, 500, 500, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200];

    IERC20 private usdt;
    address private feeReceiver;
    address private defaultRefer;
    uint256 private startTime;
    uint256 private lastDistribute;
    uint256 private totalUsers;
    uint256 private totalDeposit;
    uint256 private freezedTimes;
    uint256 private predictPool;
    uint256 private totalPredictPool;
    uint256 private totalWinners;
    bool private isFreezing;
    address[] private depositors;
    mapping(uint256=>bool) private balStatus;
    mapping(uint256=>address[]) private dayNewbies;
    mapping(uint256=>uint256) private freezeTime;
    mapping(uint256=>uint256) private unfreezeTime;
    mapping(uint256=>uint256) private dayPredictPool;
    mapping(uint256=>uint256) private dayDeposits;
    mapping(address=>mapping(uint256=>bool)) private isUnfreezedReward;
    mapping(uint256=>mapping(uint256=>address[])) private dayPredictors;
    mapping(uint256=>mapping(address=>PredictInfo[])) private userPredicts;
    
    struct UserInfo {
        address referrer;
        uint256 level;
        uint256 maxDeposit;
        uint256 maxDepositable;
        uint256 teamNum;
        uint256 teamTotalDeposit;
        uint256 totalFreezed;
        uint256 totalRevenue;
        uint256 unfreezeIndex;
        uint256 startTime;
        bool isMaxFreezing;
    }
    struct RewardInfo{
        uint256 capitals;
        uint256 statics;
        uint256 invited;
        uint256 bonusFreezed;
        uint256 bonusReleased;
        uint256 l5Freezed;
        uint256 l5Released;
        uint256 predictWin;
        uint256 split;
        uint256 lastWithdaw;
    }
    struct OrderInfo {
        uint256 amount;
        uint256 start;
        uint256 unfreeze;
        bool isUnfreezed;
    }
    struct PredictInfo {
        uint256 time;
        uint256 number;
    }
    mapping(address=>UserInfo) private userInfo;
    mapping(address=>RewardInfo) private rewardInfo;
    mapping(address=>OrderInfo[]) private orderInfos;
    mapping(address=>mapping(uint256=>uint256)) private userCycleMax;
    mapping(address=>mapping(uint256=>address[])) private teamUsers;

    event Register(address user, address referral);
    event Deposit(address user, uint256 types, uint256 amount, bool isFreezing);
    event TransferBySplit(address user, uint256 subBal, address receiver, uint256 amount);
    event Withdraw(address user, uint256 incomeFee, uint256 poolFee, uint256 split, uint256 withdraw);
    event Predict(uint256 time, address user, uint256 amount);
    event DistributePredictPool(uint256 day, uint256 reward, uint256 pool, uint256 time);

    constructor(address _usdtAddr, address _defaultRefer, address _feeReceiver, uint256 _startTime) {
        usdt = IERC20(_usdtAddr);
        defaultRefer = _defaultRefer;
        feeReceiver = _feeReceiver;
        startTime = _startTime;
        lastDistribute = _startTime;
    }

    function register(address _referral) external {
        require(userInfo[_referral].maxDeposit > 0 || _referral == defaultRefer, "invalid refer");
        require(userInfo[msg.sender].referrer == address(0), "referrer bonded");
        userInfo[msg.sender].referrer = _referral;
        emit Register(msg.sender, _referral);
    }

    function deposit(uint256 _amount) external {
        _deposit(msg.sender, _amount, 0);
    }

    function depositBySplit(uint256 _amount) public {
        _deposit(msg.sender, _amount, 1);

    }

    function redeposit() public {
        _deposit(msg.sender, 0, 2);
    }

    function _deposit(address _userAddr, uint256 _amount, uint256 _types) private {
        require(block.timestamp >= startTime, "not start");
        UserInfo storage user = userInfo[_userAddr];
        require(user.referrer != address(0), "not register");
        RewardInfo storage userRewards = rewardInfo[_userAddr];
        if(_types == 0){
            usdt.transferFrom(_userAddr, address(this), _amount);
            _balActived();
        }else if(_types == 1){
            require(user.level == 0, "actived");
            require(userRewards.split >= _amount, "insufficient");
            require(_amount.mod(levelDeposit[0].mul(2)) == 0, "amount err");
            userRewards.split = userRewards.split.sub(_amount);
        }else{
            require(user.level > 0, "newbie");
            _amount = orderInfos[_userAddr][user.unfreezeIndex].amount;
        }

        uint256 curCycle = getCurCycle();
        (uint256 userCurMin, uint256 userCurMax) = getUserCycleDepositable(_userAddr, curCycle);
        require(_amount >= userCurMin && _amount <= userCurMax && _amount.mod(levelDeposit[0]) == 0, "amount err");
        if(isFreezing && !isUnfreezedReward[_userAddr][freezedTimes]) isUnfreezedReward[_userAddr][freezedTimes] = true;
        
        uint256 curDay = getCurDay();
        dayDeposits[curDay] = dayDeposits[curDay].add(_amount);
        totalDeposit = totalDeposit.add(_amount);
        depositors.push(_userAddr);

        if(user.level == 0){
            if(curDay < unlimitDay) require(dayNewbies[curDay].length < getMaxDayNewbies(curDay), "reach max");
            dayNewbies[curDay].push(_userAddr);
            totalUsers = totalUsers + 1;
            user.startTime = block.timestamp;
            if(_types == 0) {
                userRewards.bonusFreezed = _amount.mul(bonusPercents).div(baseDividend);
                user.totalRevenue = user.totalRevenue.add(userRewards.bonusFreezed);
            }
        }
        _updateUplineReward(_userAddr, _amount);
        _unfreezeCapitalOrReward(_userAddr, _amount, _types);
        bool isMaxFreezing = _addNewOrder(_userAddr, _amount, _types, user.startTime, user.isMaxFreezing);
        user.isMaxFreezing = isMaxFreezing;
        _updateUserMax(_userAddr, _amount, userCurMax, curCycle);
        _updateLevel(_userAddr);
        if(isFreezing) _setFreezeReward();
        emit Deposit(_userAddr, _types, _amount, isFreezing);
    }

    function _updateUplineReward(address _userAddr, uint256 _amount) private {
        address upline = userInfo[_userAddr].referrer;
        for(uint256 i = 0; i < invitePercents.length; i++){
            if(upline != address(0)){
                if(!isFreezing || isUnfreezedReward[upline][freezedTimes]){
                    OrderInfo[] storage upOrders = orderInfos[upline];
                    if(upOrders.length > 0){
                        uint256 latestUnFreezeTime = getOrderUnfreezeTime(upline, upOrders.length - 1);
                        uint256 maxFreezing = latestUnFreezeTime > block.timestamp ? upOrders[upOrders.length - 1].amount : 0;
                        uint256 newAmount = maxFreezing < _amount ? maxFreezing : _amount;
                        if(newAmount > 0){
                            RewardInfo storage upRewards = rewardInfo[upline];
                            uint256 reward = newAmount.mul(invitePercents[i]).div(baseDividend);
                            if(i == 0 || (i < 4 && userInfo[upline].level >= 4)){
                                upRewards.invited = upRewards.invited.add(reward);
                                userInfo[upline].totalRevenue = userInfo[upline].totalRevenue.add(reward);
                            }else if(userInfo[upline].level >= 5){
                                upRewards.l5Freezed = upRewards.l5Freezed.add(reward);
                            }
                        }
                    }
                }
                if(upline == defaultRefer) break;
                upline = userInfo[upline].referrer;
            }else{
                break;
            }
        }
    }

    function _unfreezeCapitalOrReward(address _userAddr, uint256 _amount, uint256 _types) private {
        (uint256 unfreezed, uint256 rewards) = _unfreezeOrder(_userAddr, _amount);
        if(_types == 0){
            require(_amount > unfreezed, "redeposit only");
        }else if(_types >= 2){
            require(_amount == unfreezed, "redeposit err");
        }

        UserInfo storage user = userInfo[_userAddr];
        RewardInfo storage userRewards = rewardInfo[_userAddr];
        if(unfreezed > 0){
            user.unfreezeIndex = user.unfreezeIndex + 1;
            if(userRewards.bonusFreezed > 0){
                userRewards.bonusReleased = userRewards.bonusFreezed;
                userRewards.bonusFreezed = 0;
            }

            if(rewards > 0) userRewards.statics = userRewards.statics.add(rewards);
            if(_types < 2) userRewards.capitals = userRewards.capitals.add(unfreezed);
        }else{
            uint256 l5Freezed = userRewards.l5Freezed;
            if(l5Freezed > 0){
                rewards = _amount <= l5Freezed ? _amount : l5Freezed;
                userRewards.l5Freezed = l5Freezed.sub(rewards);
                userRewards.l5Released = userRewards.l5Released.add(rewards);
            }
        }
        user.totalRevenue = user.totalRevenue.add(rewards);
        _updateFreezeAndTeamDeposit(_userAddr, _amount, unfreezed);
    }

    function _unfreezeOrder(address _userAddr, uint256 _amount) private returns(uint256 unfreezed, uint256 rewards){
        if(orderInfos[_userAddr].length > 0){
            UserInfo storage user = userInfo[_userAddr];
            OrderInfo storage order = orderInfos[_userAddr][user.unfreezeIndex];
            uint256 orderUnfreezeTime = getOrderUnfreezeTime(_userAddr, user.unfreezeIndex);
            // below lv5, deposit once per cycle
            if(user.level > 0 && user.level < 5) require(block.timestamp >= orderUnfreezeTime, "freezing");
            if(order.isUnfreezed == false && block.timestamp >= orderUnfreezeTime && _amount >= order.amount){
                order.isUnfreezed = true;
                unfreezed = order.amount;
                rewards = order.amount.mul(dayRewardPercents).mul(dayPerCycle).div(timeStep).div(baseDividend);
                if(isFreezing){
                    if(user.totalFreezed > user.totalRevenue){
                        uint256 leftCapital = user.totalFreezed.sub(user.totalRevenue);
                        if(rewards > leftCapital){
                            rewards = leftCapital;
                        }
                    }else{
                        rewards = 0;
                    }
                }
            }
        }
    }

    function _updateFreezeAndTeamDeposit(address _userAddr, uint256 _amount, uint256 _unfreezed) private {
        UserInfo storage user = userInfo[_userAddr];
        if(_amount > _unfreezed){
            uint256 incAmount = _amount.sub(_unfreezed);
            user.totalFreezed = user.totalFreezed.add(incAmount);
            address upline = user.referrer;
            for(uint256 i = 0; i < invitePercents.length; i++){
                if(upline != address(0)){
                    UserInfo storage upUser = userInfo[upline];
                    if(user.level == 0 && _userAddr != upline){
                        upUser.teamNum = upUser.teamNum + 1;
                        teamUsers[upline][i].push(_userAddr);
                    }
                    upUser.teamTotalDeposit = upUser.teamTotalDeposit.add(incAmount);
                    if(upline == defaultRefer) break;
                    upline = upUser.referrer;
                }else{
                    break;
                }
            }
        }
    }

    function _addNewOrder(address _userAddr, uint256 _amount, uint256 _types, uint256 _startTime, bool _isMaxFreezing) private returns(bool isMaxFreezing){
        uint256 addFreeze;
        OrderInfo[] storage orders = orderInfos[_userAddr];
        if(_isMaxFreezing){
            isMaxFreezing = true;
        }else{
            if((freezedTimes > 0 && _types == 1) || (!isFreezing && _startTime < freezeTime[freezedTimes])){
                isMaxFreezing = true;
            }else{
                addFreeze = (orders.length).mul(timeStep);
                if(addFreeze > maxAddFreeze) isMaxFreezing = true;
            }
        }
        uint256 unfreeze = isMaxFreezing ? block.timestamp.add(dayPerCycle).add(maxAddFreeze) : block.timestamp.add(dayPerCycle).add(addFreeze);
        orders.push(OrderInfo(_amount, block.timestamp, unfreeze, false));
    }

    function _updateUserMax(address _userAddr, uint256 _amount, uint256 _userCurMax, uint256 _curCycle) internal {
        UserInfo storage user = userInfo[_userAddr];
        if(_amount > user.maxDeposit) user.maxDeposit = _amount;
        userCycleMax[_userAddr][_curCycle] = _userCurMax;
        uint256 nextMaxDepositable;
        if(_amount == _userCurMax){
            uint256 curMaxDepositable = getCurMaxDepositable();
            if(_userCurMax >= curMaxDepositable){
                nextMaxDepositable = curMaxDepositable;
            }else{
                if(_userCurMax < levelDeposit[3]){
                    nextMaxDepositable = _userCurMax.add(levelDeposit[1]);
                }else{
                    nextMaxDepositable = _userCurMax.add(levelDeposit[2]);
                }
            }
        }else{
            nextMaxDepositable = _userCurMax;
        }
        userCycleMax[_userAddr][_curCycle + 1] = nextMaxDepositable;
        user.maxDepositable = nextMaxDepositable;
    }

    function _updateLevel(address _userAddr) private {
        UserInfo storage user = userInfo[_userAddr];
        for(uint256 i = user.level; i < levelDeposit.length; i++){
            if(user.maxDeposit >= levelDeposit[i]){
                if(i < 3){
                    user.level = i + 1;
                }else{
                    (uint256 maxTeam, uint256 otherTeam, ) = getTeamDeposit(_userAddr);
                    if(maxTeam >= levelInvite[i] && otherTeam >= levelInvite[i] && user.teamNum >= levelTeam[i]){
                        user.level = i + 1;
                    }
                }
            }
        }
    }

    function withdraw() external {
        RewardInfo storage userRewards = rewardInfo[msg.sender];
        uint256 rewardsStatic = userRewards.statics.add(userRewards.invited).add(userRewards.bonusReleased).add(userRewards.predictWin);
        uint256 incomeFee = rewardsStatic.mul(incomeFeePercents).div(baseDividend);
        usdt.transfer(feeReceiver, incomeFee);
        uint256 predictPoolFee = rewardsStatic.mul(predictPoolPercents).div(baseDividend);
        predictPool = predictPool.add(predictPoolFee);
        totalPredictPool = totalPredictPool.add(predictPoolFee);
        uint256 leftReward = rewardsStatic.add(userRewards.l5Released).sub(incomeFee).sub(predictPoolFee);
        uint256 split = leftReward.mul(splitPercents).div(baseDividend);
        uint256 withdrawable = leftReward.sub(split);
        uint256 capitals = userRewards.capitals;
        userRewards.capitals = 0;
        userRewards.statics = 0;
        userRewards.invited = 0;
        userRewards.bonusReleased = 0;
        userRewards.l5Released = 0;
        userRewards.predictWin = 0;
        userRewards.split = userRewards.split.add(split);
        userRewards.lastWithdaw = block.timestamp;
        withdrawable = withdrawable.add(capitals);
        usdt.transfer(msg.sender, withdrawable);
        if(!isFreezing) _setFreezeReward();
        emit Withdraw(msg.sender, incomeFee, predictPoolFee, split, withdrawable);
    }

    function predict(uint256 _amount) external {
        require(userInfo[msg.sender].referrer != address(0), "not register");
        require(_amount.mod(levelDeposit[0]) == 0, "amount err");
        uint256 curDay = getCurDay();
        require(userPredicts[curDay][msg.sender].length < dayPredictLimit, "reached day limit");
        uint256 predictEnd = startTime.add(curDay.mul(timeStep)).add(predictDuration);
        require(block.timestamp < predictEnd, "today is over");
        usdt.transferFrom(msg.sender, address(this), predictFee);
        dayPredictors[curDay][_amount].push(msg.sender);
        userPredicts[curDay][msg.sender].push(PredictInfo(block.timestamp, _amount));
        if(isFreezing) _setFreezeReward();
        emit Predict(block.timestamp, msg.sender, _amount);
    }

    function transferBySplit(address _receiver, uint256 _amount) external {
        uint256 minTransfer = levelDeposit[0].mul(2);
        require(_amount >= minTransfer && _amount.mod(minTransfer) == 0, "amount err");
        uint256 subBal = _amount.add(_amount.mul(transferFeePercents).div(baseDividend));
        RewardInfo storage userRewards = rewardInfo[msg.sender];
        require(userRewards.split >= subBal, "insufficient split");
        userRewards.split = userRewards.split.sub(subBal);
        rewardInfo[_receiver].split = rewardInfo[_receiver].split.add(_amount);
        emit TransferBySplit(msg.sender, subBal, _receiver, _amount);
    }

    function distributePredictPool() external {
        if(block.timestamp >= lastDistribute.add(timeStep)){
            uint256 curDay = getCurDay();
            uint256 lastDay = curDay - 1;
            uint256 totalReward;
            if(predictPool > 0){
                address[] memory winners = getPredictWinners(lastDay);
                for(uint256 i = 0; i < winners.length; i++){
                    if(winners[i] != address(0)){
                        uint256 reward = predictPool.mul(predictWinnerPercents[i]).div(baseDividend);
                        totalReward = totalReward.add(reward);
                        rewardInfo[winners[i]].predictWin = rewardInfo[winners[i]].predictWin.add(reward);
                        userInfo[winners[i]].totalRevenue = userInfo[winners[i]].totalRevenue.add(reward);
                        totalWinners++;
                    }else{
                        break;
                    }
                }
                dayPredictPool[lastDay] = predictPool;
                predictPool = predictPool > totalReward ? predictPool.sub(totalReward) : 0;
            }
            lastDistribute = startTime.add(curDay.mul(timeStep));
            emit DistributePredictPool(lastDay, totalReward, predictPool, lastDistribute);
        }
    }

    function _balActived() private {
        uint256 bal = usdt.balanceOf(address(this));
        for(uint256 i = balReached.length; i > 0; i--){
            if(bal >= balReached[i - 1]){
                balStatus[balReached[i - 1]] = true;
                break;
            }
        }
    }

    function _setFreezeReward() private {
        uint256 bal = usdt.balanceOf(address(this));
        for(uint256 i = balReached.length; i > 0; i--){
            if(balStatus[balReached[i - 1]]){
                if(!isFreezing){
                    if(bal < balFreeze[i - 1]){
                        isFreezing = true;
                        freezedTimes = freezedTimes + 1;
                        freezeTime[freezedTimes] = block.timestamp;
                    }
                }else{
                    if(bal >= balUnfreeze[i - 1]){
                        isFreezing = false;
                        unfreezeTime[freezedTimes] = block.timestamp;
                    }
                }
                break;
            }
        }
    }

    function getOrderUnfreezeTime(address _userAddr, uint256 _index) public view returns(uint256 orderUnfreezeTime) {
        OrderInfo storage order = orderInfos[_userAddr][_index];
        orderUnfreezeTime = order.unfreeze;
        if(!isFreezing && !order.isUnfreezed && userInfo[_userAddr].startTime < freezeTime[freezedTimes]){
            orderUnfreezeTime =  order.start.add(dayPerCycle).add(maxAddFreeze);
        }
    }

    function getUserCycleDepositable(address _userAddr, uint256 _cycle) public view returns(uint256 cycleMin, uint256 cycleMax) {
        UserInfo storage user = userInfo[_userAddr];
        if(user.maxDeposit > 0){
            cycleMin = user.maxDeposit;
            cycleMax = userCycleMax[_userAddr][_cycle];
            if(cycleMax == 0) cycleMax = user.maxDepositable;
            uint256 curMaxDepositable = getCurMaxDepositable();
            if(isFreezing){
                if(user.startTime < freezeTime[freezedTimes] && !isUnfreezedReward[_userAddr][freezedTimes]){
                    cycleMin = user.totalFreezed > user.totalRevenue ? cycleMin.mul(unfreezeWithoutIncomePercents).div(baseDividend) : cycleMin.mul(unfreezeWithIncomePercents).div(baseDividend);
                    cycleMax = curMaxDepositable;
                }
            }else{
                if(user.startTime < freezeTime[freezedTimes]) cycleMax = curMaxDepositable;
            }
        }else{
            cycleMin = levelDeposit[0];
            cycleMax = levelDeposit[1];
        }

        if(cycleMin > cycleMax) cycleMin = cycleMax;
    }

    function getPredictWinners(uint256 _day) public view returns(address[] memory winners) {
        uint256 steps = dayDeposits[_day].div(levelDeposit[0]);
        uint256 maxWinners = predictWinnerPercents.length;
        winners = new address[](maxWinners);
        uint256 counter;
        for(uint256 i = steps; i >= 0; i--){
            uint256 winAmount = i.mul(levelDeposit[0]);
            for(uint256 j = 0; j < dayPredictors[_day][winAmount].length; j++){
                address predictUser = dayPredictors[_day][winAmount][j];
                if(predictUser != address(0)){
                    winners[counter] = predictUser;
                    counter++;
                    if(counter >= maxWinners) break;
                }
            }
            if(counter >= maxWinners || i == 0 || steps.sub(i) >= maxSearchDepth) break;
        }
    }

    function getTeamDeposit(address _userAddr) public view returns(uint256 maxTeam, uint256 otherTeam, uint256 totalTeam){
        address[] memory directTeamUsers = teamUsers[_userAddr][0];
        for(uint256 i = 0; i < directTeamUsers.length; i++){
            UserInfo storage user = userInfo[directTeamUsers[i]];
            uint256 userTotalTeam = user.teamTotalDeposit.add(user.totalFreezed);
            totalTeam = totalTeam.add(userTotalTeam);
            if(userTotalTeam > maxTeam) maxTeam = userTotalTeam;
            if(i >= maxSearchDepth) break;
        }
        otherTeam = totalTeam.sub(maxTeam);
    }

    function getCurDay() public view returns(uint256) {
        return (block.timestamp.sub(startTime)).div(timeStep);
    }

    function getCurCycle() public view returns(uint256) {
        return (block.timestamp.sub(startTime)).div(dayPerCycle);
    }

    function getCurMaxDepositable() public view returns(uint256) {
        return levelDeposit[4].mul(2**freezedTimes);
    }

    function getMaxDayNewbies(uint256 _day) public pure returns(uint256) {
        return initDayNewbies + _day.mul(incNumber).div(incInterval);
    }

    function getOrderLength(address _userAddr) public view returns(uint256) {
        return orderInfos[_userAddr].length;
    }

    function getLatestDepositors(uint256 _length) public view returns(address[] memory latestDepositors) {
        uint256 totalCount = depositors.length;
        if(_length > totalCount) _length = totalCount;
        latestDepositors = new address[](_length);
        for(uint256 i = totalCount; i > totalCount - _length; i--){
            latestDepositors[totalCount - i] = depositors[i - 1];
        }
    }

    function getTeamUsers(address _userAddr, uint256 _layer) public view returns(address[] memory) {
        return teamUsers[_userAddr][_layer];
    }

    function getUserDayPredicts(address _userAddr, uint256 _day) public view returns(PredictInfo[] memory) {
        return userPredicts[_day][_userAddr];
    }

    function getDayPredictors(uint256 _day, uint256 _number) external view returns(address[] memory) {
        return dayPredictors[_day][_number];
    }

    function getDayInfos(uint256 _day) external view returns(address[] memory newbies, uint256 deposits, uint256 pool){
        return (dayNewbies[_day], dayDeposits[_day], dayPredictPool[_day]);
    }

    function getBalStatus(uint256 _bal) external view returns(bool) {
        return balStatus[_bal];
    }

    function getUserCycleMax(address _userAddr, uint256 _cycle) external view returns(uint256){
        return userCycleMax[_userAddr][_cycle];
    }

    function getUserInfos(address _userAddr) external view returns(UserInfo memory user, RewardInfo memory reward, OrderInfo[] memory orders, bool unfreeze) {
        user = userInfo[_userAddr];
        reward = rewardInfo[_userAddr];
        orders = orderInfos[_userAddr];
        unfreeze = isUnfreezedReward[_userAddr][freezedTimes];
    }

    function getContractInfos() external view returns(address[3] memory infos0, uint256[10] memory infos1, bool freezing) {
        infos0[0] = address(usdt);
        infos0[1] = feeReceiver;
        infos0[2] = defaultRefer;
        infos1[0] = startTime;
        infos1[1] = lastDistribute;
        infos1[2] = totalUsers;
        infos1[3] = totalDeposit;
        infos1[4] = predictPool;
        infos1[5] = totalPredictPool;
        infos1[6] = totalWinners;
        infos1[7] = freezedTimes;
        infos1[8] = freezeTime[freezedTimes];
        infos1[9] = unfreezeTime[freezedTimes];
        freezing = isFreezing;
    }
}

File 2 of 3 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 2 of 3 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "paris",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_usdtAddr","type":"address"},{"internalType":"address","name":"_defaultRefer","type":"address"},{"internalType":"address","name":"_feeReceiver","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"types","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isFreezing","type":"bool"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"day","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"DistributePredictPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Predict","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"referral","type":"address"}],"name":"Register","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"subBal","type":"uint256"},{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferBySplit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"incomeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"split","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdraw","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositBySplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributePredictPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bal","type":"uint256"}],"name":"getBalStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractInfos","outputs":[{"internalType":"address[3]","name":"infos0","type":"address[3]"},{"internalType":"uint256[10]","name":"infos1","type":"uint256[10]"},{"internalType":"bool","name":"freezing","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurCycle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurMaxDepositable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getDayInfos","outputs":[{"internalType":"address[]","name":"newbies","type":"address[]"},{"internalType":"uint256","name":"deposits","type":"uint256"},{"internalType":"uint256","name":"pool","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"},{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"getDayPredictors","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"getLatestDepositors","outputs":[{"internalType":"address[]","name":"latestDepositors","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getMaxDayNewbies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getOrderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getOrderUnfreezeTime","outputs":[{"internalType":"uint256","name":"orderUnfreezeTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getPredictWinners","outputs":[{"internalType":"address[]","name":"winners","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getTeamDeposit","outputs":[{"internalType":"uint256","name":"maxTeam","type":"uint256"},{"internalType":"uint256","name":"otherTeam","type":"uint256"},{"internalType":"uint256","name":"totalTeam","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"},{"internalType":"uint256","name":"_layer","type":"uint256"}],"name":"getTeamUsers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"},{"internalType":"uint256","name":"_cycle","type":"uint256"}],"name":"getUserCycleDepositable","outputs":[{"internalType":"uint256","name":"cycleMin","type":"uint256"},{"internalType":"uint256","name":"cycleMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"},{"internalType":"uint256","name":"_cycle","type":"uint256"}],"name":"getUserCycleMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"},{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getUserDayPredicts","outputs":[{"components":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"}],"internalType":"struct MSG.PredictInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddr","type":"address"}],"name":"getUserInfos","outputs":[{"components":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"maxDeposit","type":"uint256"},{"internalType":"uint256","name":"maxDepositable","type":"uint256"},{"internalType":"uint256","name":"teamNum","type":"uint256"},{"internalType":"uint256","name":"teamTotalDeposit","type":"uint256"},{"internalType":"uint256","name":"totalFreezed","type":"uint256"},{"internalType":"uint256","name":"totalRevenue","type":"uint256"},{"internalType":"uint256","name":"unfreezeIndex","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"bool","name":"isMaxFreezing","type":"bool"}],"internalType":"struct MSG.UserInfo","name":"user","type":"tuple"},{"components":[{"internalType":"uint256","name":"capitals","type":"uint256"},{"internalType":"uint256","name":"statics","type":"uint256"},{"internalType":"uint256","name":"invited","type":"uint256"},{"internalType":"uint256","name":"bonusFreezed","type":"uint256"},{"internalType":"uint256","name":"bonusReleased","type":"uint256"},{"internalType":"uint256","name":"l5Freezed","type":"uint256"},{"internalType":"uint256","name":"l5Released","type":"uint256"},{"internalType":"uint256","name":"predictWin","type":"uint256"},{"internalType":"uint256","name":"split","type":"uint256"},{"internalType":"uint256","name":"lastWithdaw","type":"uint256"}],"internalType":"struct MSG.RewardInfo","name":"reward","type":"tuple"},{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"unfreeze","type":"uint256"},{"internalType":"bool","name":"isUnfreezed","type":"bool"}],"internalType":"struct MSG.OrderInfo[]","name":"orders","type":"tuple[]"},{"internalType":"bool","name":"unfreeze","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"predict","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referral","type":"address"}],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferBySplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060a00160405280600060ff168152602001600060ff168152602001600060ff168152602001603260ff16815260200160c860ff16815250600090600562000051929190620005a9565b506040518060a00160405280600064ffffffffff168152602001600064ffffffffff168152602001600064ffffffffff1681526020016402540be40064ffffffffff1681526020016404a817c80064ffffffffff168152506005906005620000bb929190620005f3565b506040518060a001604052806302faf08063ffffffff168152602001631dcd650063ffffffff168152602001633b9aca0063ffffffff168152602001637735940063ffffffff16815260200163b2d05e0063ffffffff16815250600a9060056200012792919062000641565b506040518060a0016040528064746a52880065ffffffffffff16815260200164e8d4a5100065ffffffffffff1681526020016501d1a94a200065ffffffffffff16815260200165048c2739500065ffffffffffff1681526020016509184e72a00065ffffffffffff16815250600f906005620001a59291906200068e565b506040518060a0016040528064517da02c0065ffffffffffff16815260200164a2fb40580065ffffffffffff16815260200164e8d4a5100065ffffffffffff1681526020016502ba7def300065ffffffffffff16815260200165048c2739500065ffffffffffff168152506014906005620002229291906200068e565b506040518060a0016040528064ba43b7400065ffffffffffff16815260200165015d3ef7980065ffffffffffff1681526020016501d1a94a200065ffffffffffff16815260200165048c2739500065ffffffffffff1681526020016509184e72a00065ffffffffffff168152506019906005620002a19291906200068e565b506040518061028001604052806101f461ffff168152602001606461ffff16815260200160c861ffff16815260200161012c61ffff16815260200160c861ffff168152602001606461ffff168152602001606461ffff168152602001606461ffff168152602001603261ffff168152602001603261ffff168152602001603261ffff168152602001603261ffff168152602001601e61ffff168152602001601e61ffff168152602001601e61ffff168152602001601e61ffff168152602001601e61ffff168152602001601e61ffff168152602001601e61ffff168152602001601e61ffff16815250601e9060146200039c929190620006dd565b50604051806102800160405280610bb861ffff1681526020016107d061ffff1681526020016103e861ffff1681526020016101f461ffff1681526020016101f461ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff16815260200160c861ffff1681525060329060146200049a929190620006dd565b50348015620004a857600080fd5b506040516200675e3803806200675e8339818101604052810190620004ce9190620007ec565b83604660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082604860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081604760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060498190555080604a81905550505050506200085e565b8260058101928215620005e0579160200282015b82811115620005df578251829060ff16905591602001919060010190620005bd565b5b509050620005ef919062000728565b5090565b82600581019282156200062e579160200282015b828111156200062d578251829064ffffffffff1690559160200191906001019062000607565b5b5090506200063d919062000728565b5090565b82600581019282156200067b579160200282015b828111156200067a578251829063ffffffff1690559160200191906001019062000655565b5b5090506200068a919062000728565b5090565b8260058101928215620006ca579160200282015b82811115620006c9578251829065ffffffffffff16905591602001919060010190620006a2565b5b509050620006d9919062000728565b5090565b826014810192821562000715579160200282015b8281111562000714578251829061ffff16905591602001919060010190620006f1565b5b50905062000724919062000728565b5090565b5b808211156200074357600081600090555060010162000729565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000779826200074c565b9050919050565b6200078b816200076c565b81146200079757600080fd5b50565b600081519050620007ab8162000780565b92915050565b6000819050919050565b620007c681620007b1565b8114620007d257600080fd5b50565b600081519050620007e681620007bb565b92915050565b6000806000806080858703121562000809576200080862000747565b5b600062000819878288016200079a565b94505060206200082c878288016200079a565b93505060406200083f878288016200079a565b92505060606200085287828801620007d5565b91505092959194509250565b615ef0806200086e6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806395d895e1116100de578063b705ba9e11610097578063de6b8a2e11610071578063de6b8a2e146104c4578063e7ada314146104f4578063ea46dfef14610524578063ed0a3528146105545761018d565b8063b705ba9e14610445578063c511b34514610475578063cc56f581146104915761018d565b806395d895e11461036f5780639824294a146103a15780639cf62aad146103d1578063ad923505146103ef578063b2df5582146103f9578063b6b55f25146104295761018d565b80634f299df41161014b578063700de9be11610125578063700de9be146102c157806371a6b69d146102f15780637647e0ff1461030d57806393df73fd1461033f5761018d565b80634f299df41461025757806352ef348a146102875780635f23656e146102a35761018d565b8062a7a56e1461019257806305495b0d146101b057806327893a1c146101d057806332308a17146102015780633ccfd60b146102315780634420e4861461023b575b600080fd5b61019a61055e565b6040516101a79190614947565b60405180910390f35b6101b861058f565b6040516101c793929190614b05565b60405180910390f35b6101ea60048036038101906101e59190614b9b565b610868565b6040516101f8929190614bdb565b60405180910390f35b61021b60048036038101906102169190614b9b565b610ab5565b6040516102289190614947565b60405180910390f35b610239610bec565b005b61025560048036038101906102509190614c04565b610fd9565b005b610271600480360381019061026c9190614b9b565b611244565b60405161027e9190614947565b60405180910390f35b6102a1600480360381019061029c9190614c31565b61129f565b005b6102ab61172e565b6040516102b89190614947565b60405180910390f35b6102db60048036038101906102d69190614b9b565b61175f565b6040516102e89190614d3c565b60405180910390f35b61030b60048036038101906103069190614b9b565b611823565b005b61032760048036038101906103229190614c04565b611a79565b60405161033693929190614d5e565b60405180910390f35b61035960048036038101906103549190614d95565b611c42565b6040516103669190614e6c565b60405180910390f35b61038960048036038101906103849190614c31565b611cf5565b60405161039893929190614e8e565b60405180910390f35b6103bb60048036038101906103b69190614b9b565b611dca565b6040516103c89190614e6c565b60405180910390f35b6103d9611ea8565b6040516103e69190614947565b60405180910390f35b6103f7611ee6565b005b610413600480360381019061040e9190614c31565b611ef5565b6040516104209190614e6c565b60405180910390f35b610443600480360381019061043e9190614c31565b61202e565b005b61045f600480360381019061045a9190614c31565b61203d565b60405161046c9190614e6c565b60405180910390f35b61048f600480360381019061048a9190614c31565b6122ac565b005b6104ab60048036038101906104a69190614c04565b6122bb565b6040516104bb949392919061518c565b60405180910390f35b6104de60048036038101906104d99190614c04565b6125d1565b6040516104eb9190614947565b60405180910390f35b61050e60048036038101906105099190614c31565b61261d565b60405161051b9190614947565b60405180910390f35b61053e60048036038101906105399190614c31565b612659565b60405161054b91906151dc565b60405180910390f35b61055c612683565b005b600061058a6201518061057c60495442612a1c90919063ffffffff16565b612a3290919063ffffffff16565b905090565b610597614824565b61059f614846565b6000604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000600381106105d8576105d76151f7565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050604760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600160038110610646576106456151f7565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836002600381106106b4576106b36151f7565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050604954826000600a8110610702576107016151f7565b5b602002018181525050604a54826001600a8110610722576107216151f7565b5b602002018181525050604b54826002600a8110610742576107416151f7565b5b602002018181525050604c54826003600a8110610762576107616151f7565b5b602002018181525050604e54826004600a8110610782576107816151f7565b5b602002018181525050604f54826005600a81106107a2576107a16151f7565b5b602002018181525050605054826006600a81106107c2576107c16151f7565b5b602002018181525050604d54826007600a81106107e2576107e16151f7565b5b60200201818152505060556000604d54815260200190815260200160002054826008600a8110610815576108146151f7565b5b60200201818152505060566000604d54815260200190815260200160002054826009600a8110610848576108476151f7565b5b602002018181525050605160009054906101000a900460ff169050909192565b6000806000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600201541115610a6e5780600201549250605f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205491506000820361092557806003015491505b600061092f611ea8565b9050605160009054906101000a900460ff1615610a425760556000604d5481526020019081526020016000205482600901541080156109cb5750605960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff16155b15610a3d578160070154826006015411610a0d57610a086127106109fa614e2087612a4890919063ffffffff16565b612a3290919063ffffffff16565b610a37565b610a36612710610a28613a9887612a4890919063ffffffff16565b612a3290919063ffffffff16565b5b93508092505b610a68565b60556000604d5481526020019081526020016000205482600901541015610a67578092505b5b50610aa1565b600a600060058110610a8357610a826151f7565b5b01549250600a600160058110610a9c57610a9b6151f7565b5b015491505b81831115610aad578192505b509250929050565b600080605e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610b0957610b086151f7565b5b9060005260206000209060040201905080600201549150605160009054906101000a900460ff16158015610b4c57508060030160009054906101000a900460ff16155b8015610bae575060556000604d54815260200190815260200160002054605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090154105b15610be557610be262278d00610bd4620d2f008460010154612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b91505b5092915050565b6000605d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610c788260070154610c6a8460040154610c5c86600201548760010154612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b90506000610ca5612710610c976102bc85612a4890919063ffffffff16565b612a3290919063ffffffff16565b9050604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb604760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610d26929190615235565b6020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061528a565b506000610d95612710610d8761012c86612a4890919063ffffffff16565b612a3290919063ffffffff16565b9050610dac81604e54612a5e90919063ffffffff16565b604e81905550610dc781604f54612a5e90919063ffffffff16565b604f819055506000610e0a82610dfc85610dee896006015489612a5e90919063ffffffff16565b612a1c90919063ffffffff16565b612a1c90919063ffffffff16565b90506000610e37612710610e29610bb885612a4890919063ffffffff16565b612a3290919063ffffffff16565b90506000610e4e8284612a1c90919063ffffffff16565b9050600087600001549050600088600001819055506000886001018190555060008860020181905550600088600401819055506000886006018190555060008860070181905550610eac838960080154612a5e90919063ffffffff16565b8860080181905550428860090181905550610ed08183612a5e90919063ffffffff16565b9150604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610f2f929190615235565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061528a565b50605160009054906101000a900460ff16610f9057610f8f612a74565b5b7fe08737ac48a1dab4b1a46c7dc9398bd5bfc6d7ad6fabb7cd8caa254de14def353387878686604051610fc79594939291906152b7565b60405180910390a15050505050505050565b6000605c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411806110775750604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16605c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e906153d3565b60405180910390fd5b80605c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151933826040516112399291906153f3565b60405180910390a150565b6000605f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff16605c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790615468565b60405180910390fd5b600061139b600a60006005811061138a576113896151f7565b5b015483612c7390919063ffffffff16565b146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d2906154d4565b60405180910390fd5b60006113e561055e565b9050600a605b600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501061147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490615540565b60405180910390fd5b60006114bd6107086114af61149e6201518086612a4890919063ffffffff16565b604954612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b9050804210611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906155ac565b60405180910390fd5b604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330620f42406040518463ffffffff1660e01b8152600401611563939291906155cc565b6020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a6919061528a565b50605a60008381526020019081526020016000206000848152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550605b600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040528042815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050605160009054906101000a900460ff16156116ee576116ed612a74565b5b7fc7927633b98eb46165638e5c6079b0cfd9bb2f64249ade35d558ec2b57dbab7f42338560405161172193929190615603565b60405180910390a1505050565b600061175a620d2f0061174c60495442612a1c90919063ffffffff16565b612a3290919063ffffffff16565b905090565b6060605b600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611817578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906117d1565b50505050905092915050565b600061184f6002600a60006005811061183f5761183e6151f7565b5b0154612a4890919063ffffffff16565b9050808210158015611873575060006118718284612c7390919063ffffffff16565b145b6118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a9906154d4565b60405180910390fd5b60006118ef6118e06127106118d26103e887612a4890919063ffffffff16565b612a3290919063ffffffff16565b84612a5e90919063ffffffff16565b90506000605d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160080154101561197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290615686565b60405180910390fd5b611992828260080154612a1c90919063ffffffff16565b81600801819055506119ef84605d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154612a5e90919063ffffffff16565b605d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801819055507f8bc1cae08861f9f4ba95103ac33c0b0dc0dc6a22f20c73adaedc96fd27e70de533838787604051611a6a94939291906156a6565b60405180910390a15050505050565b600080600080606060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611b4f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b05575b5050505050905060005b8151811015611c24576000605c6000848481518110611b7b57611b7a6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611bdc82600601548360050154612a5e90919063ffffffff16565b9050611bf18186612a5e90919063ffffffff16565b945086811115611bff578096505b610bb88310611c0f575050611c24565b50508080611c1c9061571a565b915050611b59565b50611c388483612a1c90919063ffffffff16565b9250509193909250565b6060605a60008481526020019081526020016000206000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611ce857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611c9e575b5050505050905092915050565b6060600080605460008581526020019081526020016000206058600086815260200190815260200160002054605760008781526020019081526020016000205482805480602002602001604051908101604052809291908181526020018280548015611db657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611d6c575b505050505092509250925092509193909250565b60608060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611e9b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611e51575b5050505050905092915050565b6000611ee1604d546002611ebc9190615895565b600a600460058110611ed157611ed06151f7565b5b0154612a4890919063ffffffff16565b905090565b611ef33360006002612c89565b565b60606000605280549050905080831115611f0d578092505b8267ffffffffffffffff811115611f2757611f266158e0565b5b604051908082528060200260200182016040528015611f555781602001602082028036833780820191505090505b50915060008190505b8382611f6a919061590f565b811115612027576052600182611f80919061590f565b81548110611f9157611f906151f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838284611fc9919061590f565b81518110611fda57611fd96151f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061201f90615943565b915050611f5e565b5050919050565b61203a33826000612c89565b50565b6060600061207d600a600060058110612059576120586151f7565b5b01546058600086815260200190815260200160002054612a3290919063ffffffff16565b90506000601490508067ffffffffffffffff81111561209f5761209e6158e0565b5b6040519080825280602002602001820160405280156120cd5781602001602082028036833780820191505090505b5092506000808390505b600081106122a357600061210a600a6000600581106120f9576120f86151f7565b5b015483612a4890919063ffffffff16565b905060005b605a6000898152602001908152602001600020600083815260200190815260200160002080549050811015612255576000605a60008a815260200190815260200160002060008481526020019081526020016000208281548110612176576121756151f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461224157808886815181106121eb576121ea6151f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084806122309061571a565b9550508585106122405750612255565b5b50808061224d9061571a565b91505061210f565b5083831015806122655750600082145b806122845750610bb86122818387612a1c90919063ffffffff16565b10155b1561228f57506122a3565b50808061229b90615943565b9150506120d7565b50505050919050565b6122b833826001612c89565b50565b6122c3614869565b6122cb6148db565b60606000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff1615151515815250509350605d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101400160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820154815250509250605e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561256257838290600052602060002090600402016040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581525050815260200190600101906124f7565b505050509150605960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff1690509193509193565b6000605e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60006126466002612638600185612a4890919063ffffffff16565b612a3290919063ffffffff16565b6005612652919061596c565b9050919050565b60006053600083815260200190815260200160002060009054906101000a900460ff169050919050565b61269b62015180604a54612a5e90919063ffffffff16565b4210612a1a5760006126ab61055e565b905060006001826126bc919061590f565b9050600080604e5411156129a55760006126d58361203d565b905060005b815181101561295c57600073ffffffffffffffffffffffffffffffffffffffff1682828151811061270e5761270d6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612944576000612771612710612763603285601481106127505761274f6151f7565b5b0154604e54612a4890919063ffffffff16565b612a3290919063ffffffff16565b90506127868185612a5e90919063ffffffff16565b93506127f781605d60008686815181106127a3576127a26151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612a5e90919063ffffffff16565b605d600085858151811061280e5761280d6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701819055506128c681605c6000868681518110612872576128716151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612a5e90919063ffffffff16565b605c60008585815181106128dd576128dc6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070181905550605060008154809291906129399061571a565b919050555050612949565b61295c565b80806129549061571a565b9150506126da565b50604e54605760008581526020019081526020016000208190555081604e541161298757600061299d565b61299c82604e54612a1c90919063ffffffff16565b5b604e81905550505b6129cf6129be6201518085612a4890919063ffffffff16565b604954612a5e90919063ffffffff16565b604a819055507f8244371a2781a50bcb2b2e36d449454403d4d2da24ae08d5ffca86313041c83e8282604e54604a54604051612a0e94939291906159a0565b60405180910390a15050505b565b60008183612a2a919061590f565b905092915050565b60008183612a409190615a14565b905092915050565b60008183612a569190615a45565b905092915050565b60008183612a6c919061596c565b905092915050565b6000604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ad19190615a87565b602060405180830381865afa158015612aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b129190615ab7565b90506000600590505b6000811115612c6f5760536000600f600184612b37919061590f565b60058110612b4857612b476151f7565b5b0154815260200190815260200160002060009054906101000a900460ff1615612c5c57605160009054906101000a900460ff16612bf8576014600182612b8e919061590f565b60058110612b9f57612b9e6151f7565b5b0154821015612bf3576001605160006101000a81548160ff0219169083151502179055506001604d54612bd2919061596c565b604d819055504260556000604d548152602001908152602001600020819055505b612c57565b6019600182612c07919061590f565b60058110612c1857612c176151f7565b5b01548210612c56576000605160006101000a81548160ff0219169083151502179055504260566000604d548152602001908152602001600020819055505b5b612c6f565b8080612c6790615943565b915050612b1b565b5050565b60008183612c819190615ae4565b905092915050565b604954421015612cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc590615b61565b60405180910390fd5b6000605c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9b90615468565b60405180910390fd5b6000605d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008303612e9f57604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8630876040518463ffffffff1660e01b8152600401612e4e939291906155cc565b6020604051808303816000875af1158015612e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e91919061528a565b50612e9a613523565b613089565b60018303612fd7576000826001015414612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590615bcd565b60405180910390fd5b8381600801541015612f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2c90615c39565b60405180910390fd5b6000612f73612f646002600a600060058110612f5457612f536151f7565b5b0154612a4890919063ffffffff16565b86612c7390919063ffffffff16565b14612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906154d4565b60405180910390fd5b612fca848260080154612a1c90919063ffffffff16565b8160080181905550613088565b600082600101541161301e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301590615ca5565b60405180910390fd5b605e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020826008015481548110613073576130726151f7565b5b90600052602060002090600402016000015493505b5b600061309361172e565b90506000806130a28884610868565b915091508187101580156130b65750808711155b80156130ea575060006130e8600a6000600581106130d7576130d66151f7565b5b015489612c7390919063ffffffff16565b145b613129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613120906154d4565b60405180910390fd5b605160009054906101000a900460ff1680156131a25750605960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff16155b15613213576001605960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061321d61055e565b9050613245886058600084815260200190815260200160002054612a5e90919063ffffffff16565b605860008381526020019081526020016000208190555061327188604c54612a5e90919063ffffffff16565b604c819055506052899080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008660010154036134415761016d811015613351576132f98161261d565b605460008381526020019081526020016000208054905010613350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334790615d11565b60405180910390fd5b5b60546000828152602001908152602001600020899080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001604b546133d4919061596c565b604b8190555042866009018190555060008703613440576134146127106134066101f48b612a4890919063ffffffff16565b612a3290919063ffffffff16565b856003018190555061343785600301548760070154612a5e90919063ffffffff16565b86600701819055505b5b61344b8989613664565b613456898989613b51565b600061347a8a8a8a8a600901548b600a0160009054906101000a900460ff16613db5565b90508087600a0160006101000a81548160ff0219169083151502179055506134a48a8a8588613f8c565b6134ad8a614155565b605160009054906101000a900460ff16156134cb576134ca612a74565b5b7f6dbb6056a2fff319358e6dd7d0d72cb3baa992cdcc7e120fb0a32cd1601840e58a898b605160009054906101000a900460ff1660405161350f9493929190615d31565b60405180910390a150505050505050505050565b6000604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135809190615a87565b602060405180830381865afa15801561359d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c19190615ab7565b90506000600590505b600081111561366057600f6001826135e2919061590f565b600581106135f3576135f26151f7565b5b0154821061364d57600160536000600f600185613610919061590f565b60058110613621576136206151f7565b5b0154815260200190815260200160002060006101000a81548160ff021916908315150217905550613660565b808061365890615943565b9150506135ca565b5050565b6000605c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b6014811015613b4b57600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613b3357605160009054906101000a900460ff1615806137835750605960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff165b15613a73576000605e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081805490501115613a715760006137f484600184805490506137ef919061590f565b610ab5565b9050600042821161380657600061383c565b8260018480549050613818919061590f565b81548110613829576138286151f7565b5b9060005260206000209060040201600001545b9050600086821061384d578661384f565b815b90506000811115613a6d576000605d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006138db6127106138cd601e8a601481106138bc576138bb6151f7565b5b015486612a4890919063ffffffff16565b612a3290919063ffffffff16565b9050600087148061393b575060048710801561393a57506004605c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b5b156139ff57613957818360020154612a5e90919063ffffffff16565b82600201819055506139b481605c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612a5e90919063ffffffff16565b605c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070181905550613a6a565b6005605c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410613a6957613a60818360050154612a5e90919063ffffffff16565b82600501819055505b5b50505b5050505b505b604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315613b4b57605c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150613b38565b613b4b565b8080613b439061571a565b9150506136ce565b50505050565b600080613b5e8585614295565b9150915060008303613bb157818411613bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba390615dc2565b60405180910390fd5b613bfd565b60028310613bfc57818414613bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf290615e2e565b60405180910390fd5b5b5b6000605c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000605d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000841115613d215760018260080154613c9d919061596c565b8260080181905550600081600301541115613cca5780600301548160040181905550600081600301819055505b6000831115613cf357613cea838260010154612a5e90919063ffffffff16565b81600101819055505b6002851015613d1c57613d13848260000154612a5e90919063ffffffff16565b81600001819055505b613d82565b6000816005015490506000811115613d805780871115613d415780613d43565b865b9350613d588482612a1c90919063ffffffff16565b8260050181905550613d77848360060154612a5e90919063ffffffff16565b82600601819055505b505b613d99838360070154612a5e90919063ffffffff16565b8260070181905550613dac87878661451e565b50505050505050565b6000806000605e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508315613e0a5760019250613e90565b6000604d54118015613e1c5750600186145b80613e545750605160009054906101000a900460ff16158015613e53575060556000604d5481526020019081526020016000205485105b5b15613e625760019250613e8f565b613e7c620151808280549050612a4890919063ffffffff16565b915062278d00821115613e8e57600192505b5b5b600083613ec457613ebf83613eb1620d2f0042612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b613ef0565b613eef62278d00613ee1620d2f0042612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b5b90508160405180608001604052808a815260200142815260200183815260200160001515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550505050505095945050505050565b6000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020154841115613fe5578381600201819055505b82605f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555060008385036140df57600061404d611ea8565b905080851061405e578091506140d9565b600a600360058110614073576140726151f7565b5b01548510156140ac576140a5600a600160058110614094576140936151f7565b5b015486612a5e90919063ffffffff16565b91506140d8565b6140d5600a6002600581106140c4576140c36151f7565b5b015486612a5e90919063ffffffff16565b91505b5b506140e3565b8390505b80605f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600186614132919061596c565b815260200190815260200160002081905550808260030181905550505050505050565b6000605c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816001015490505b600581101561429057600a81600581106141bf576141be6151f7565b5b015482600201541061427d5760038110156141ee576001816141e1919061596c565b826001018190555061427c565b6000806141fa85611a79565b509150915060058360058110614213576142126151f7565b5b01548210158015614239575060058360058110614233576142326151f7565b5b01548110155b801561425e575060008360058110614254576142536151f7565b5b0154846004015410155b1561427957600183614270919061596c565b84600101819055505b50505b5b80806142889061571a565b9150506141a2565b505050565b6000806000605e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115614517576000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000605e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600801548154811061437d5761437c6151f7565b5b90600052602060002090600402019050600061439d878460080154610ab5565b9050600083600101541180156143b7575060058360010154105b1561440057804210156143ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143f690615e9a565b60405180910390fd5b5b600015158260030160009054906101000a900460ff1615151480156144255750804210155b8015614435575081600001548610155b156145135760018260030160006101000a81548160ff021916908315150217905550816000015494506144b46127106144a662015180614498620d2f0061448a60968960000154612a4890919063ffffffff16565b612a4890919063ffffffff16565b612a3290919063ffffffff16565b612a3290919063ffffffff16565b9350605160009054906101000a900460ff16156145125782600701548360060154111561450c5760006144f884600701548560060154612a1c90919063ffffffff16565b905080851115614506578094505b50614511565b600093505b5b5b5050505b9250929050565b6000605c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508183111561481e57600061457e8385612a1c90919063ffffffff16565b9050614597818360060154612a5e90919063ffffffff16565b826006018190555060008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b601481101561481a57600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614614802576000605c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000856001015414801561468b57508273ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561475b57600181600401546146a1919061596c565b8160040181905550606060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020889080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b614772848260050154612a5e90919063ffffffff16565b8160050181905550604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036147d5575061481a565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925050614807565b61481a565b80806148129061571a565b9150506145cb565b5050505b50505050565b6040518060600160405280600390602082028036833780820191505090505090565b604051806101400160405280600a90602082028036833780820191505090505090565b604051806101600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000819050919050565b6149418161492e565b82525050565b600060208201905061495c6000830184614938565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149ad82614982565b9050919050565b6149bd816149a2565b82525050565b60006149cf83836149b4565b60208301905092915050565b6000602082019050919050565b6149f181614962565b6149fb818461496d565b9250614a0682614978565b8060005b83811015614a37578151614a1e87826149c3565b9650614a29836149db565b925050600181019050614a0a565b505050505050565b6000600a9050919050565b600081905092915050565b6000819050919050565b614a688161492e565b82525050565b6000614a7a8383614a5f565b60208301905092915050565b6000602082019050919050565b614a9c81614a3f565b614aa68184614a4a565b9250614ab182614a55565b8060005b83811015614ae2578151614ac98782614a6e565b9650614ad483614a86565b925050600181019050614ab5565b505050505050565b60008115159050919050565b614aff81614aea565b82525050565b60006101c082019050614b1b60008301866149e8565b614b286060830185614a93565b614b366101a0830184614af6565b949350505050565b600080fd5b614b4c816149a2565b8114614b5757600080fd5b50565b600081359050614b6981614b43565b92915050565b614b788161492e565b8114614b8357600080fd5b50565b600081359050614b9581614b6f565b92915050565b60008060408385031215614bb257614bb1614b3e565b5b6000614bc085828601614b5a565b9250506020614bd185828601614b86565b9150509250929050565b6000604082019050614bf06000830185614938565b614bfd6020830184614938565b9392505050565b600060208284031215614c1a57614c19614b3e565b5b6000614c2884828501614b5a565b91505092915050565b600060208284031215614c4757614c46614b3e565b5b6000614c5584828501614b86565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b604082016000820151614ca06000850182614a5f565b506020820151614cb36020850182614a5f565b50505050565b6000614cc58383614c8a565b60408301905092915050565b6000602082019050919050565b6000614ce982614c5e565b614cf38185614c69565b9350614cfe83614c7a565b8060005b83811015614d2f578151614d168882614cb9565b9750614d2183614cd1565b925050600181019050614d02565b5085935050505092915050565b60006020820190508181036000830152614d568184614cde565b905092915050565b6000606082019050614d736000830186614938565b614d806020830185614938565b614d8d6040830184614938565b949350505050565b60008060408385031215614dac57614dab614b3e565b5b6000614dba85828601614b86565b9250506020614dcb85828601614b86565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000602082019050919050565b6000614e1982614dd5565b614e238185614de0565b9350614e2e83614df1565b8060005b83811015614e5f578151614e4688826149c3565b9750614e5183614e01565b925050600181019050614e32565b5085935050505092915050565b60006020820190508181036000830152614e868184614e0e565b905092915050565b60006060820190508181036000830152614ea88186614e0e565b9050614eb76020830185614938565b614ec46040830184614938565b949350505050565b614ed581614aea565b82525050565b61016082016000820151614ef260008501826149b4565b506020820151614f056020850182614a5f565b506040820151614f186040850182614a5f565b506060820151614f2b6060850182614a5f565b506080820151614f3e6080850182614a5f565b5060a0820151614f5160a0850182614a5f565b5060c0820151614f6460c0850182614a5f565b5060e0820151614f7760e0850182614a5f565b50610100820151614f8c610100850182614a5f565b50610120820151614fa1610120850182614a5f565b50610140820151614fb6610140850182614ecc565b50505050565b61014082016000820151614fd36000850182614a5f565b506020820151614fe66020850182614a5f565b506040820151614ff96040850182614a5f565b50606082015161500c6060850182614a5f565b50608082015161501f6080850182614a5f565b5060a082015161503260a0850182614a5f565b5060c082015161504560c0850182614a5f565b5060e082015161505860e0850182614a5f565b5061010082015161506d610100850182614a5f565b50610120820151615082610120850182614a5f565b50505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6080820160008201516150ca6000850182614a5f565b5060208201516150dd6020850182614a5f565b5060408201516150f06040850182614a5f565b5060608201516151036060850182614ecc565b50505050565b600061511583836150b4565b60808301905092915050565b6000602082019050919050565b600061513982615088565b6151438185615093565b935061514e836150a4565b8060005b8381101561517f5781516151668882615109565b975061517183615121565b925050600181019050615152565b5085935050505092915050565b60006102e0820190506151a26000830187614edb565b6151b0610160830186614fbc565b8181036102a08301526151c3818561512e565b90506151d36102c0830184614af6565b95945050505050565b60006020820190506151f16000830184614af6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61522f816149a2565b82525050565b600060408201905061524a6000830185615226565b6152576020830184614938565b9392505050565b61526781614aea565b811461527257600080fd5b50565b6000815190506152848161525e565b92915050565b6000602082840312156152a05761529f614b3e565b5b60006152ae84828501615275565b91505092915050565b600060a0820190506152cc6000830188615226565b6152d96020830187614938565b6152e66040830186614938565b6152f36060830185614938565b6153006080830184614938565b9695505050505050565b600082825260208201905092915050565b7f696e76616c696420726566657200000000000000000000000000000000000000600082015250565b6000615351600d8361530a565b915061535c8261531b565b602082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f726566657272657220626f6e6465640000000000000000000000000000000000600082015250565b60006153bd600f8361530a565b91506153c882615387565b602082019050919050565b600060208201905081810360008301526153ec816153b0565b9050919050565b60006040820190506154086000830185615226565b6154156020830184615226565b9392505050565b7f6e6f742072656769737465720000000000000000000000000000000000000000600082015250565b6000615452600c8361530a565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f616d6f756e742065727200000000000000000000000000000000000000000000600082015250565b60006154be600a8361530a565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f7265616368656420646179206c696d6974000000000000000000000000000000600082015250565b600061552a60118361530a565b9150615535826154f4565b602082019050919050565b600060208201905081810360008301526155598161551d565b9050919050565b7f746f646179206973206f76657200000000000000000000000000000000000000600082015250565b6000615596600d8361530a565b91506155a182615560565b602082019050919050565b600060208201905081810360008301526155c581615589565b9050919050565b60006060820190506155e16000830186615226565b6155ee6020830185615226565b6155fb6040830184614938565b949350505050565b60006060820190506156186000830186614938565b6156256020830185615226565b6156326040830184614938565b949350505050565b7f696e73756666696369656e742073706c69740000000000000000000000000000600082015250565b600061567060128361530a565b915061567b8261563a565b602082019050919050565b6000602082019050818103600083015261569f81615663565b9050919050565b60006080820190506156bb6000830187615226565b6156c86020830186614938565b6156d56040830185615226565b6156e26060830184614938565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157258261492e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615757576157566156eb565b5b600182019050919050565b60008160011c9050919050565b6000808291508390505b60018511156157b957808604811115615795576157946156eb565b5b60018516156157a45780820291505b80810290506157b285615762565b9450615779565b94509492505050565b6000826157d2576001905061588e565b816157e0576000905061588e565b81600181146157f657600281146158005761582f565b600191505061588e565b60ff841115615812576158116156eb565b5b8360020a915084821115615829576158286156eb565b5b5061588e565b5060208310610133831016604e8410600b84101617156158645782820a90508381111561585f5761585e6156eb565b5b61588e565b615871848484600161576f565b92509050818404811115615888576158876156eb565b5b81810290505b9392505050565b60006158a08261492e565b91506158ab8361492e565b92506158d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846157c2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061591a8261492e565b91506159258361492e565b925082820390508181111561593d5761593c6156eb565b5b92915050565b600061594e8261492e565b915060008203615961576159606156eb565b5b600182039050919050565b60006159778261492e565b91506159828361492e565b925082820190508082111561599a576159996156eb565b5b92915050565b60006080820190506159b56000830187614938565b6159c26020830186614938565b6159cf6040830185614938565b6159dc6060830184614938565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a1f8261492e565b9150615a2a8361492e565b925082615a3a57615a396159e5565b5b828204905092915050565b6000615a508261492e565b9150615a5b8361492e565b9250828202615a698161492e565b91508282048414831517615a8057615a7f6156eb565b5b5092915050565b6000602082019050615a9c6000830184615226565b92915050565b600081519050615ab181614b6f565b92915050565b600060208284031215615acd57615acc614b3e565b5b6000615adb84828501615aa2565b91505092915050565b6000615aef8261492e565b9150615afa8361492e565b925082615b0a57615b096159e5565b5b828206905092915050565b7f6e6f742073746172740000000000000000000000000000000000000000000000600082015250565b6000615b4b60098361530a565b9150615b5682615b15565b602082019050919050565b60006020820190508181036000830152615b7a81615b3e565b9050919050565b7f6163746976656400000000000000000000000000000000000000000000000000600082015250565b6000615bb760078361530a565b9150615bc282615b81565b602082019050919050565b60006020820190508181036000830152615be681615baa565b9050919050565b7f696e73756666696369656e740000000000000000000000000000000000000000600082015250565b6000615c23600c8361530a565b9150615c2e82615bed565b602082019050919050565b60006020820190508181036000830152615c5281615c16565b9050919050565b7f6e65776269650000000000000000000000000000000000000000000000000000600082015250565b6000615c8f60068361530a565b9150615c9a82615c59565b602082019050919050565b60006020820190508181036000830152615cbe81615c82565b9050919050565b7f7265616368206d61780000000000000000000000000000000000000000000000600082015250565b6000615cfb60098361530a565b9150615d0682615cc5565b602082019050919050565b60006020820190508181036000830152615d2a81615cee565b9050919050565b6000608082019050615d466000830187615226565b615d536020830186614938565b615d606040830185614938565b615d6d6060830184614af6565b95945050505050565b7f72656465706f736974206f6e6c79000000000000000000000000000000000000600082015250565b6000615dac600e8361530a565b9150615db782615d76565b602082019050919050565b60006020820190508181036000830152615ddb81615d9f565b9050919050565b7f72656465706f7369742065727200000000000000000000000000000000000000600082015250565b6000615e18600d8361530a565b9150615e2382615de2565b602082019050919050565b60006020820190508181036000830152615e4781615e0b565b9050919050565b7f667265657a696e67000000000000000000000000000000000000000000000000600082015250565b6000615e8460088361530a565b9150615e8f82615e4e565b602082019050919050565b60006020820190508181036000830152615eb381615e77565b905091905056fea264697066735822122043d899ae851292ecf4a50ff7ea6b85877bd6d6fa2d77d6b25359c88abad9c44a64736f6c63430008120033000000000000000000000000c2132d05d31c914a87c6611c10748aeb04b58e8f0000000000000000000000004db82c97997217c9dc3bb79d540a59f73dc26cae000000000000000000000000c2700bea30430ccdf7b1ee0d5d6295175ba0c83e00000000000000000000000000000000000000000000000000000000644b60e0

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806395d895e1116100de578063b705ba9e11610097578063de6b8a2e11610071578063de6b8a2e146104c4578063e7ada314146104f4578063ea46dfef14610524578063ed0a3528146105545761018d565b8063b705ba9e14610445578063c511b34514610475578063cc56f581146104915761018d565b806395d895e11461036f5780639824294a146103a15780639cf62aad146103d1578063ad923505146103ef578063b2df5582146103f9578063b6b55f25146104295761018d565b80634f299df41161014b578063700de9be11610125578063700de9be146102c157806371a6b69d146102f15780637647e0ff1461030d57806393df73fd1461033f5761018d565b80634f299df41461025757806352ef348a146102875780635f23656e146102a35761018d565b8062a7a56e1461019257806305495b0d146101b057806327893a1c146101d057806332308a17146102015780633ccfd60b146102315780634420e4861461023b575b600080fd5b61019a61055e565b6040516101a79190614947565b60405180910390f35b6101b861058f565b6040516101c793929190614b05565b60405180910390f35b6101ea60048036038101906101e59190614b9b565b610868565b6040516101f8929190614bdb565b60405180910390f35b61021b60048036038101906102169190614b9b565b610ab5565b6040516102289190614947565b60405180910390f35b610239610bec565b005b61025560048036038101906102509190614c04565b610fd9565b005b610271600480360381019061026c9190614b9b565b611244565b60405161027e9190614947565b60405180910390f35b6102a1600480360381019061029c9190614c31565b61129f565b005b6102ab61172e565b6040516102b89190614947565b60405180910390f35b6102db60048036038101906102d69190614b9b565b61175f565b6040516102e89190614d3c565b60405180910390f35b61030b60048036038101906103069190614b9b565b611823565b005b61032760048036038101906103229190614c04565b611a79565b60405161033693929190614d5e565b60405180910390f35b61035960048036038101906103549190614d95565b611c42565b6040516103669190614e6c565b60405180910390f35b61038960048036038101906103849190614c31565b611cf5565b60405161039893929190614e8e565b60405180910390f35b6103bb60048036038101906103b69190614b9b565b611dca565b6040516103c89190614e6c565b60405180910390f35b6103d9611ea8565b6040516103e69190614947565b60405180910390f35b6103f7611ee6565b005b610413600480360381019061040e9190614c31565b611ef5565b6040516104209190614e6c565b60405180910390f35b610443600480360381019061043e9190614c31565b61202e565b005b61045f600480360381019061045a9190614c31565b61203d565b60405161046c9190614e6c565b60405180910390f35b61048f600480360381019061048a9190614c31565b6122ac565b005b6104ab60048036038101906104a69190614c04565b6122bb565b6040516104bb949392919061518c565b60405180910390f35b6104de60048036038101906104d99190614c04565b6125d1565b6040516104eb9190614947565b60405180910390f35b61050e60048036038101906105099190614c31565b61261d565b60405161051b9190614947565b60405180910390f35b61053e60048036038101906105399190614c31565b612659565b60405161054b91906151dc565b60405180910390f35b61055c612683565b005b600061058a6201518061057c60495442612a1c90919063ffffffff16565b612a3290919063ffffffff16565b905090565b610597614824565b61059f614846565b6000604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000600381106105d8576105d76151f7565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050604760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600160038110610646576106456151f7565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836002600381106106b4576106b36151f7565b5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050604954826000600a8110610702576107016151f7565b5b602002018181525050604a54826001600a8110610722576107216151f7565b5b602002018181525050604b54826002600a8110610742576107416151f7565b5b602002018181525050604c54826003600a8110610762576107616151f7565b5b602002018181525050604e54826004600a8110610782576107816151f7565b5b602002018181525050604f54826005600a81106107a2576107a16151f7565b5b602002018181525050605054826006600a81106107c2576107c16151f7565b5b602002018181525050604d54826007600a81106107e2576107e16151f7565b5b60200201818152505060556000604d54815260200190815260200160002054826008600a8110610815576108146151f7565b5b60200201818152505060566000604d54815260200190815260200160002054826009600a8110610848576108476151f7565b5b602002018181525050605160009054906101000a900460ff169050909192565b6000806000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600201541115610a6e5780600201549250605f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205491506000820361092557806003015491505b600061092f611ea8565b9050605160009054906101000a900460ff1615610a425760556000604d5481526020019081526020016000205482600901541080156109cb5750605960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff16155b15610a3d578160070154826006015411610a0d57610a086127106109fa614e2087612a4890919063ffffffff16565b612a3290919063ffffffff16565b610a37565b610a36612710610a28613a9887612a4890919063ffffffff16565b612a3290919063ffffffff16565b5b93508092505b610a68565b60556000604d5481526020019081526020016000205482600901541015610a67578092505b5b50610aa1565b600a600060058110610a8357610a826151f7565b5b01549250600a600160058110610a9c57610a9b6151f7565b5b015491505b81831115610aad578192505b509250929050565b600080605e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610b0957610b086151f7565b5b9060005260206000209060040201905080600201549150605160009054906101000a900460ff16158015610b4c57508060030160009054906101000a900460ff16155b8015610bae575060556000604d54815260200190815260200160002054605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060090154105b15610be557610be262278d00610bd4620d2f008460010154612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b91505b5092915050565b6000605d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000610c788260070154610c6a8460040154610c5c86600201548760010154612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b90506000610ca5612710610c976102bc85612a4890919063ffffffff16565b612a3290919063ffffffff16565b9050604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb604760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610d26929190615235565b6020604051808303816000875af1158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d69919061528a565b506000610d95612710610d8761012c86612a4890919063ffffffff16565b612a3290919063ffffffff16565b9050610dac81604e54612a5e90919063ffffffff16565b604e81905550610dc781604f54612a5e90919063ffffffff16565b604f819055506000610e0a82610dfc85610dee896006015489612a5e90919063ffffffff16565b612a1c90919063ffffffff16565b612a1c90919063ffffffff16565b90506000610e37612710610e29610bb885612a4890919063ffffffff16565b612a3290919063ffffffff16565b90506000610e4e8284612a1c90919063ffffffff16565b9050600087600001549050600088600001819055506000886001018190555060008860020181905550600088600401819055506000886006018190555060008860070181905550610eac838960080154612a5e90919063ffffffff16565b8860080181905550428860090181905550610ed08183612a5e90919063ffffffff16565b9150604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401610f2f929190615235565b6020604051808303816000875af1158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f72919061528a565b50605160009054906101000a900460ff16610f9057610f8f612a74565b5b7fe08737ac48a1dab4b1a46c7dc9398bd5bfc6d7ad6fabb7cd8caa254de14def353387878686604051610fc79594939291906152b7565b60405180910390a15050505050505050565b6000605c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015411806110775750604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90615367565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16605c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e906153d3565b60405180910390fd5b80605c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f98ada70a1cb506dc4591465e1ee9be3fd7a2b6c73ecf3b949009718c9a35151933826040516112399291906153f3565b60405180910390a150565b6000605f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff16605c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790615468565b60405180910390fd5b600061139b600a60006005811061138a576113896151f7565b5b015483612c7390919063ffffffff16565b146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d2906154d4565b60405180910390fd5b60006113e561055e565b9050600a605b600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501061147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490615540565b60405180910390fd5b60006114bd6107086114af61149e6201518086612a4890919063ffffffff16565b604954612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b9050804210611501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f8906155ac565b60405180910390fd5b604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330620f42406040518463ffffffff1660e01b8152600401611563939291906155cc565b6020604051808303816000875af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a6919061528a565b50605a60008381526020019081526020016000206000848152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550605b600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040528042815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050605160009054906101000a900460ff16156116ee576116ed612a74565b5b7fc7927633b98eb46165638e5c6079b0cfd9bb2f64249ade35d558ec2b57dbab7f42338560405161172193929190615603565b60405180910390a1505050565b600061175a620d2f0061174c60495442612a1c90919063ffffffff16565b612a3290919063ffffffff16565b905090565b6060605b600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015611817578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906117d1565b50505050905092915050565b600061184f6002600a60006005811061183f5761183e6151f7565b5b0154612a4890919063ffffffff16565b9050808210158015611873575060006118718284612c7390919063ffffffff16565b145b6118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a9906154d4565b60405180910390fd5b60006118ef6118e06127106118d26103e887612a4890919063ffffffff16565b612a3290919063ffffffff16565b84612a5e90919063ffffffff16565b90506000605d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160080154101561197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197290615686565b60405180910390fd5b611992828260080154612a1c90919063ffffffff16565b81600801819055506119ef84605d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154612a5e90919063ffffffff16565b605d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801819055507f8bc1cae08861f9f4ba95103ac33c0b0dc0dc6a22f20c73adaedc96fd27e70de533838787604051611a6a94939291906156a6565b60405180910390a15050505050565b600080600080606060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000808152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611b4f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b05575b5050505050905060005b8151811015611c24576000605c6000848481518110611b7b57611b7a6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000611bdc82600601548360050154612a5e90919063ffffffff16565b9050611bf18186612a5e90919063ffffffff16565b945086811115611bff578096505b610bb88310611c0f575050611c24565b50508080611c1c9061571a565b915050611b59565b50611c388483612a1c90919063ffffffff16565b9250509193909250565b6060605a60008481526020019081526020016000206000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611ce857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611c9e575b5050505050905092915050565b6060600080605460008581526020019081526020016000206058600086815260200190815260200160002054605760008781526020019081526020016000205482805480602002602001604051908101604052809291908181526020018280548015611db657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611d6c575b505050505092509250925092509193909250565b60608060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611e9b57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611e51575b5050505050905092915050565b6000611ee1604d546002611ebc9190615895565b600a600460058110611ed157611ed06151f7565b5b0154612a4890919063ffffffff16565b905090565b611ef33360006002612c89565b565b60606000605280549050905080831115611f0d578092505b8267ffffffffffffffff811115611f2757611f266158e0565b5b604051908082528060200260200182016040528015611f555781602001602082028036833780820191505090505b50915060008190505b8382611f6a919061590f565b811115612027576052600182611f80919061590f565b81548110611f9157611f906151f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838284611fc9919061590f565b81518110611fda57611fd96151f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061201f90615943565b915050611f5e565b5050919050565b61203a33826000612c89565b50565b6060600061207d600a600060058110612059576120586151f7565b5b01546058600086815260200190815260200160002054612a3290919063ffffffff16565b90506000601490508067ffffffffffffffff81111561209f5761209e6158e0565b5b6040519080825280602002602001820160405280156120cd5781602001602082028036833780820191505090505b5092506000808390505b600081106122a357600061210a600a6000600581106120f9576120f86151f7565b5b015483612a4890919063ffffffff16565b905060005b605a6000898152602001908152602001600020600083815260200190815260200160002080549050811015612255576000605a60008a815260200190815260200160002060008481526020019081526020016000208281548110612176576121756151f7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461224157808886815181106121eb576121ea6151f7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084806122309061571a565b9550508585106122405750612255565b5b50808061224d9061571a565b91505061210f565b5083831015806122655750600082145b806122845750610bb86122818387612a1c90919063ffffffff16565b10155b1561228f57506122a3565b50808061229b90615943565b9150506120d7565b50505050919050565b6122b833826001612c89565b50565b6122c3614869565b6122cb6148db565b60606000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff1615151515815250509350605d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806101400160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152602001600882015481526020016009820154815250509250605e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561256257838290600052602060002090600402016040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900460ff161515151581525050815260200190600101906124f7565b505050509150605960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff1690509193509193565b6000605e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b60006126466002612638600185612a4890919063ffffffff16565b612a3290919063ffffffff16565b6005612652919061596c565b9050919050565b60006053600083815260200190815260200160002060009054906101000a900460ff169050919050565b61269b62015180604a54612a5e90919063ffffffff16565b4210612a1a5760006126ab61055e565b905060006001826126bc919061590f565b9050600080604e5411156129a55760006126d58361203d565b905060005b815181101561295c57600073ffffffffffffffffffffffffffffffffffffffff1682828151811061270e5761270d6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614612944576000612771612710612763603285601481106127505761274f6151f7565b5b0154604e54612a4890919063ffffffff16565b612a3290919063ffffffff16565b90506127868185612a5e90919063ffffffff16565b93506127f781605d60008686815181106127a3576127a26151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612a5e90919063ffffffff16565b605d600085858151811061280e5761280d6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701819055506128c681605c6000868681518110612872576128716151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612a5e90919063ffffffff16565b605c60008585815181106128dd576128dc6151f7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070181905550605060008154809291906129399061571a565b919050555050612949565b61295c565b80806129549061571a565b9150506126da565b50604e54605760008581526020019081526020016000208190555081604e541161298757600061299d565b61299c82604e54612a1c90919063ffffffff16565b5b604e81905550505b6129cf6129be6201518085612a4890919063ffffffff16565b604954612a5e90919063ffffffff16565b604a819055507f8244371a2781a50bcb2b2e36d449454403d4d2da24ae08d5ffca86313041c83e8282604e54604a54604051612a0e94939291906159a0565b60405180910390a15050505b565b60008183612a2a919061590f565b905092915050565b60008183612a409190615a14565b905092915050565b60008183612a569190615a45565b905092915050565b60008183612a6c919061596c565b905092915050565b6000604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ad19190615a87565b602060405180830381865afa158015612aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b129190615ab7565b90506000600590505b6000811115612c6f5760536000600f600184612b37919061590f565b60058110612b4857612b476151f7565b5b0154815260200190815260200160002060009054906101000a900460ff1615612c5c57605160009054906101000a900460ff16612bf8576014600182612b8e919061590f565b60058110612b9f57612b9e6151f7565b5b0154821015612bf3576001605160006101000a81548160ff0219169083151502179055506001604d54612bd2919061596c565b604d819055504260556000604d548152602001908152602001600020819055505b612c57565b6019600182612c07919061590f565b60058110612c1857612c176151f7565b5b01548210612c56576000605160006101000a81548160ff0219169083151502179055504260566000604d548152602001908152602001600020819055505b5b612c6f565b8080612c6790615943565b915050612b1b565b5050565b60008183612c819190615ae4565b905092915050565b604954421015612cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc590615b61565b60405180910390fd5b6000605c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9b90615468565b60405180910390fd5b6000605d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008303612e9f57604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8630876040518463ffffffff1660e01b8152600401612e4e939291906155cc565b6020604051808303816000875af1158015612e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e91919061528a565b50612e9a613523565b613089565b60018303612fd7576000826001015414612eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee590615bcd565b60405180910390fd5b8381600801541015612f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2c90615c39565b60405180910390fd5b6000612f73612f646002600a600060058110612f5457612f536151f7565b5b0154612a4890919063ffffffff16565b86612c7390919063ffffffff16565b14612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906154d4565b60405180910390fd5b612fca848260080154612a1c90919063ffffffff16565b8160080181905550613088565b600082600101541161301e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301590615ca5565b60405180910390fd5b605e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020826008015481548110613073576130726151f7565b5b90600052602060002090600402016000015493505b5b600061309361172e565b90506000806130a28884610868565b915091508187101580156130b65750808711155b80156130ea575060006130e8600a6000600581106130d7576130d66151f7565b5b015489612c7390919063ffffffff16565b145b613129576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613120906154d4565b60405180910390fd5b605160009054906101000a900460ff1680156131a25750605960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff16155b15613213576001605960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061321d61055e565b9050613245886058600084815260200190815260200160002054612a5e90919063ffffffff16565b605860008381526020019081526020016000208190555061327188604c54612a5e90919063ffffffff16565b604c819055506052899080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008660010154036134415761016d811015613351576132f98161261d565b605460008381526020019081526020016000208054905010613350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334790615d11565b60405180910390fd5b5b60546000828152602001908152602001600020899080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001604b546133d4919061596c565b604b8190555042866009018190555060008703613440576134146127106134066101f48b612a4890919063ffffffff16565b612a3290919063ffffffff16565b856003018190555061343785600301548760070154612a5e90919063ffffffff16565b86600701819055505b5b61344b8989613664565b613456898989613b51565b600061347a8a8a8a8a600901548b600a0160009054906101000a900460ff16613db5565b90508087600a0160006101000a81548160ff0219169083151502179055506134a48a8a8588613f8c565b6134ad8a614155565b605160009054906101000a900460ff16156134cb576134ca612a74565b5b7f6dbb6056a2fff319358e6dd7d0d72cb3baa992cdcc7e120fb0a32cd1601840e58a898b605160009054906101000a900460ff1660405161350f9493929190615d31565b60405180910390a150505050505050505050565b6000604660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016135809190615a87565b602060405180830381865afa15801561359d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c19190615ab7565b90506000600590505b600081111561366057600f6001826135e2919061590f565b600581106135f3576135f26151f7565b5b0154821061364d57600160536000600f600185613610919061590f565b60058110613621576136206151f7565b5b0154815260200190815260200160002060006101000a81548160ff021916908315150217905550613660565b808061365890615943565b9150506135ca565b5050565b6000605c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b6014811015613b4b57600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613b3357605160009054906101000a900460ff1615806137835750605960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000604d54815260200190815260200160002060009054906101000a900460ff165b15613a73576000605e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081805490501115613a715760006137f484600184805490506137ef919061590f565b610ab5565b9050600042821161380657600061383c565b8260018480549050613818919061590f565b81548110613829576138286151f7565b5b9060005260206000209060040201600001545b9050600086821061384d578661384f565b815b90506000811115613a6d576000605d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006138db6127106138cd601e8a601481106138bc576138bb6151f7565b5b015486612a4890919063ffffffff16565b612a3290919063ffffffff16565b9050600087148061393b575060048710801561393a57506004605c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b5b156139ff57613957818360020154612a5e90919063ffffffff16565b82600201819055506139b481605c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612a5e90919063ffffffff16565b605c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070181905550613a6a565b6005605c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410613a6957613a60818360050154612a5e90919063ffffffff16565b82600501819055505b5b50505b5050505b505b604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315613b4b57605c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150613b38565b613b4b565b8080613b439061571a565b9150506136ce565b50505050565b600080613b5e8585614295565b9150915060008303613bb157818411613bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba390615dc2565b60405180910390fd5b613bfd565b60028310613bfc57818414613bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf290615e2e565b60405180910390fd5b5b5b6000605c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000605d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000841115613d215760018260080154613c9d919061596c565b8260080181905550600081600301541115613cca5780600301548160040181905550600081600301819055505b6000831115613cf357613cea838260010154612a5e90919063ffffffff16565b81600101819055505b6002851015613d1c57613d13848260000154612a5e90919063ffffffff16565b81600001819055505b613d82565b6000816005015490506000811115613d805780871115613d415780613d43565b865b9350613d588482612a1c90919063ffffffff16565b8260050181905550613d77848360060154612a5e90919063ffffffff16565b82600601819055505b505b613d99838360070154612a5e90919063ffffffff16565b8260070181905550613dac87878661451e565b50505050505050565b6000806000605e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508315613e0a5760019250613e90565b6000604d54118015613e1c5750600186145b80613e545750605160009054906101000a900460ff16158015613e53575060556000604d5481526020019081526020016000205485105b5b15613e625760019250613e8f565b613e7c620151808280549050612a4890919063ffffffff16565b915062278d00821115613e8e57600192505b5b5b600083613ec457613ebf83613eb1620d2f0042612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b613ef0565b613eef62278d00613ee1620d2f0042612a5e90919063ffffffff16565b612a5e90919063ffffffff16565b5b90508160405180608001604052808a815260200142815260200183815260200160001515815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff021916908315150217905550505050505095945050505050565b6000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020154841115613fe5578381600201819055505b82605f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555060008385036140df57600061404d611ea8565b905080851061405e578091506140d9565b600a600360058110614073576140726151f7565b5b01548510156140ac576140a5600a600160058110614094576140936151f7565b5b015486612a5e90919063ffffffff16565b91506140d8565b6140d5600a6002600581106140c4576140c36151f7565b5b015486612a5e90919063ffffffff16565b91505b5b506140e3565b8390505b80605f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600186614132919061596c565b815260200190815260200160002081905550808260030181905550505050505050565b6000605c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816001015490505b600581101561429057600a81600581106141bf576141be6151f7565b5b015482600201541061427d5760038110156141ee576001816141e1919061596c565b826001018190555061427c565b6000806141fa85611a79565b509150915060058360058110614213576142126151f7565b5b01548210158015614239575060058360058110614233576142326151f7565b5b01548110155b801561425e575060008360058110614254576142536151f7565b5b0154846004015410155b1561427957600183614270919061596c565b84600101819055505b50505b5b80806142889061571a565b9150506141a2565b505050565b6000806000605e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501115614517576000605c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000605e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600801548154811061437d5761437c6151f7565b5b90600052602060002090600402019050600061439d878460080154610ab5565b9050600083600101541180156143b7575060058360010154105b1561440057804210156143ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143f690615e9a565b60405180910390fd5b5b600015158260030160009054906101000a900460ff1615151480156144255750804210155b8015614435575081600001548610155b156145135760018260030160006101000a81548160ff021916908315150217905550816000015494506144b46127106144a662015180614498620d2f0061448a60968960000154612a4890919063ffffffff16565b612a4890919063ffffffff16565b612a3290919063ffffffff16565b612a3290919063ffffffff16565b9350605160009054906101000a900460ff16156145125782600701548360060154111561450c5760006144f884600701548560060154612a1c90919063ffffffff16565b905080851115614506578094505b50614511565b600093505b5b5b5050505b9250929050565b6000605c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508183111561481e57600061457e8385612a1c90919063ffffffff16565b9050614597818360060154612a5e90919063ffffffff16565b826006018190555060008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b601481101561481a57600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614614802576000605c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000856001015414801561468b57508273ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b1561475b57600181600401546146a1919061596c565b8160040181905550606060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020889080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b614772848260050154612a5e90919063ffffffff16565b8160050181905550604860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036147d5575061481a565b8060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925050614807565b61481a565b80806148129061571a565b9150506145cb565b5050505b50505050565b6040518060600160405280600390602082028036833780820191505090505090565b604051806101400160405280600a90602082028036833780820191505090505090565b604051806101600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000819050919050565b6149418161492e565b82525050565b600060208201905061495c6000830184614938565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006149ad82614982565b9050919050565b6149bd816149a2565b82525050565b60006149cf83836149b4565b60208301905092915050565b6000602082019050919050565b6149f181614962565b6149fb818461496d565b9250614a0682614978565b8060005b83811015614a37578151614a1e87826149c3565b9650614a29836149db565b925050600181019050614a0a565b505050505050565b6000600a9050919050565b600081905092915050565b6000819050919050565b614a688161492e565b82525050565b6000614a7a8383614a5f565b60208301905092915050565b6000602082019050919050565b614a9c81614a3f565b614aa68184614a4a565b9250614ab182614a55565b8060005b83811015614ae2578151614ac98782614a6e565b9650614ad483614a86565b925050600181019050614ab5565b505050505050565b60008115159050919050565b614aff81614aea565b82525050565b60006101c082019050614b1b60008301866149e8565b614b286060830185614a93565b614b366101a0830184614af6565b949350505050565b600080fd5b614b4c816149a2565b8114614b5757600080fd5b50565b600081359050614b6981614b43565b92915050565b614b788161492e565b8114614b8357600080fd5b50565b600081359050614b9581614b6f565b92915050565b60008060408385031215614bb257614bb1614b3e565b5b6000614bc085828601614b5a565b9250506020614bd185828601614b86565b9150509250929050565b6000604082019050614bf06000830185614938565b614bfd6020830184614938565b9392505050565b600060208284031215614c1a57614c19614b3e565b5b6000614c2884828501614b5a565b91505092915050565b600060208284031215614c4757614c46614b3e565b5b6000614c5584828501614b86565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b604082016000820151614ca06000850182614a5f565b506020820151614cb36020850182614a5f565b50505050565b6000614cc58383614c8a565b60408301905092915050565b6000602082019050919050565b6000614ce982614c5e565b614cf38185614c69565b9350614cfe83614c7a565b8060005b83811015614d2f578151614d168882614cb9565b9750614d2183614cd1565b925050600181019050614d02565b5085935050505092915050565b60006020820190508181036000830152614d568184614cde565b905092915050565b6000606082019050614d736000830186614938565b614d806020830185614938565b614d8d6040830184614938565b949350505050565b60008060408385031215614dac57614dab614b3e565b5b6000614dba85828601614b86565b9250506020614dcb85828601614b86565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000602082019050919050565b6000614e1982614dd5565b614e238185614de0565b9350614e2e83614df1565b8060005b83811015614e5f578151614e4688826149c3565b9750614e5183614e01565b925050600181019050614e32565b5085935050505092915050565b60006020820190508181036000830152614e868184614e0e565b905092915050565b60006060820190508181036000830152614ea88186614e0e565b9050614eb76020830185614938565b614ec46040830184614938565b949350505050565b614ed581614aea565b82525050565b61016082016000820151614ef260008501826149b4565b506020820151614f056020850182614a5f565b506040820151614f186040850182614a5f565b506060820151614f2b6060850182614a5f565b506080820151614f3e6080850182614a5f565b5060a0820151614f5160a0850182614a5f565b5060c0820151614f6460c0850182614a5f565b5060e0820151614f7760e0850182614a5f565b50610100820151614f8c610100850182614a5f565b50610120820151614fa1610120850182614a5f565b50610140820151614fb6610140850182614ecc565b50505050565b61014082016000820151614fd36000850182614a5f565b506020820151614fe66020850182614a5f565b506040820151614ff96040850182614a5f565b50606082015161500c6060850182614a5f565b50608082015161501f6080850182614a5f565b5060a082015161503260a0850182614a5f565b5060c082015161504560c0850182614a5f565b5060e082015161505860e0850182614a5f565b5061010082015161506d610100850182614a5f565b50610120820151615082610120850182614a5f565b50505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6080820160008201516150ca6000850182614a5f565b5060208201516150dd6020850182614a5f565b5060408201516150f06040850182614a5f565b5060608201516151036060850182614ecc565b50505050565b600061511583836150b4565b60808301905092915050565b6000602082019050919050565b600061513982615088565b6151438185615093565b935061514e836150a4565b8060005b8381101561517f5781516151668882615109565b975061517183615121565b925050600181019050615152565b5085935050505092915050565b60006102e0820190506151a26000830187614edb565b6151b0610160830186614fbc565b8181036102a08301526151c3818561512e565b90506151d36102c0830184614af6565b95945050505050565b60006020820190506151f16000830184614af6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61522f816149a2565b82525050565b600060408201905061524a6000830185615226565b6152576020830184614938565b9392505050565b61526781614aea565b811461527257600080fd5b50565b6000815190506152848161525e565b92915050565b6000602082840312156152a05761529f614b3e565b5b60006152ae84828501615275565b91505092915050565b600060a0820190506152cc6000830188615226565b6152d96020830187614938565b6152e66040830186614938565b6152f36060830185614938565b6153006080830184614938565b9695505050505050565b600082825260208201905092915050565b7f696e76616c696420726566657200000000000000000000000000000000000000600082015250565b6000615351600d8361530a565b915061535c8261531b565b602082019050919050565b6000602082019050818103600083015261538081615344565b9050919050565b7f726566657272657220626f6e6465640000000000000000000000000000000000600082015250565b60006153bd600f8361530a565b91506153c882615387565b602082019050919050565b600060208201905081810360008301526153ec816153b0565b9050919050565b60006040820190506154086000830185615226565b6154156020830184615226565b9392505050565b7f6e6f742072656769737465720000000000000000000000000000000000000000600082015250565b6000615452600c8361530a565b915061545d8261541c565b602082019050919050565b6000602082019050818103600083015261548181615445565b9050919050565b7f616d6f756e742065727200000000000000000000000000000000000000000000600082015250565b60006154be600a8361530a565b91506154c982615488565b602082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f7265616368656420646179206c696d6974000000000000000000000000000000600082015250565b600061552a60118361530a565b9150615535826154f4565b602082019050919050565b600060208201905081810360008301526155598161551d565b9050919050565b7f746f646179206973206f76657200000000000000000000000000000000000000600082015250565b6000615596600d8361530a565b91506155a182615560565b602082019050919050565b600060208201905081810360008301526155c581615589565b9050919050565b60006060820190506155e16000830186615226565b6155ee6020830185615226565b6155fb6040830184614938565b949350505050565b60006060820190506156186000830186614938565b6156256020830185615226565b6156326040830184614938565b949350505050565b7f696e73756666696369656e742073706c69740000000000000000000000000000600082015250565b600061567060128361530a565b915061567b8261563a565b602082019050919050565b6000602082019050818103600083015261569f81615663565b9050919050565b60006080820190506156bb6000830187615226565b6156c86020830186614938565b6156d56040830185615226565b6156e26060830184614938565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006157258261492e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615757576157566156eb565b5b600182019050919050565b60008160011c9050919050565b6000808291508390505b60018511156157b957808604811115615795576157946156eb565b5b60018516156157a45780820291505b80810290506157b285615762565b9450615779565b94509492505050565b6000826157d2576001905061588e565b816157e0576000905061588e565b81600181146157f657600281146158005761582f565b600191505061588e565b60ff841115615812576158116156eb565b5b8360020a915084821115615829576158286156eb565b5b5061588e565b5060208310610133831016604e8410600b84101617156158645782820a90508381111561585f5761585e6156eb565b5b61588e565b615871848484600161576f565b92509050818404811115615888576158876156eb565b5b81810290505b9392505050565b60006158a08261492e565b91506158ab8361492e565b92506158d87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846157c2565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061591a8261492e565b91506159258361492e565b925082820390508181111561593d5761593c6156eb565b5b92915050565b600061594e8261492e565b915060008203615961576159606156eb565b5b600182039050919050565b60006159778261492e565b91506159828361492e565b925082820190508082111561599a576159996156eb565b5b92915050565b60006080820190506159b56000830187614938565b6159c26020830186614938565b6159cf6040830185614938565b6159dc6060830184614938565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a1f8261492e565b9150615a2a8361492e565b925082615a3a57615a396159e5565b5b828204905092915050565b6000615a508261492e565b9150615a5b8361492e565b9250828202615a698161492e565b91508282048414831517615a8057615a7f6156eb565b5b5092915050565b6000602082019050615a9c6000830184615226565b92915050565b600081519050615ab181614b6f565b92915050565b600060208284031215615acd57615acc614b3e565b5b6000615adb84828501615aa2565b91505092915050565b6000615aef8261492e565b9150615afa8361492e565b925082615b0a57615b096159e5565b5b828206905092915050565b7f6e6f742073746172740000000000000000000000000000000000000000000000600082015250565b6000615b4b60098361530a565b9150615b5682615b15565b602082019050919050565b60006020820190508181036000830152615b7a81615b3e565b9050919050565b7f6163746976656400000000000000000000000000000000000000000000000000600082015250565b6000615bb760078361530a565b9150615bc282615b81565b602082019050919050565b60006020820190508181036000830152615be681615baa565b9050919050565b7f696e73756666696369656e740000000000000000000000000000000000000000600082015250565b6000615c23600c8361530a565b9150615c2e82615bed565b602082019050919050565b60006020820190508181036000830152615c5281615c16565b9050919050565b7f6e65776269650000000000000000000000000000000000000000000000000000600082015250565b6000615c8f60068361530a565b9150615c9a82615c59565b602082019050919050565b60006020820190508181036000830152615cbe81615c82565b9050919050565b7f7265616368206d61780000000000000000000000000000000000000000000000600082015250565b6000615cfb60098361530a565b9150615d0682615cc5565b602082019050919050565b60006020820190508181036000830152615d2a81615cee565b9050919050565b6000608082019050615d466000830187615226565b615d536020830186614938565b615d606040830185614938565b615d6d6060830184614af6565b95945050505050565b7f72656465706f736974206f6e6c79000000000000000000000000000000000000600082015250565b6000615dac600e8361530a565b9150615db782615d76565b602082019050919050565b60006020820190508181036000830152615ddb81615d9f565b9050919050565b7f72656465706f7369742065727200000000000000000000000000000000000000600082015250565b6000615e18600d8361530a565b9150615e2382615de2565b602082019050919050565b60006020820190508181036000830152615e4781615e0b565b9050919050565b7f667265657a696e67000000000000000000000000000000000000000000000000600082015250565b6000615e8460088361530a565b9150615e8f82615e4e565b602082019050919050565b60006020820190508181036000830152615eb381615e77565b905091905056fea264697066735822122043d899ae851292ecf4a50ff7ea6b85877bd6d6fa2d77d6b25359c88abad9c44a64736f6c63430008120033

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

000000000000000000000000c2132d05d31c914a87c6611c10748aeb04b58e8f0000000000000000000000004db82c97997217c9dc3bb79d540a59f73dc26cae000000000000000000000000c2700bea30430ccdf7b1ee0d5d6295175ba0c83e00000000000000000000000000000000000000000000000000000000644b60e0

-----Decoded View---------------
Arg [0] : _usdtAddr (address): 0xc2132D05D31c914a87C6611C10748AEb04B58e8F
Arg [1] : _defaultRefer (address): 0x4dB82C97997217C9DC3bb79D540A59f73dc26cae
Arg [2] : _feeReceiver (address): 0xC2700Bea30430cCDF7b1EE0D5d6295175Ba0c83E
Arg [3] : _startTime (uint256): 1682661600

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c2132d05d31c914a87c6611c10748aeb04b58e8f
Arg [1] : 0000000000000000000000004db82c97997217c9dc3bb79d540a59f73dc26cae
Arg [2] : 000000000000000000000000c2700bea30430ccdf7b1ee0d5d6295175ba0c83e
Arg [3] : 00000000000000000000000000000000000000000000000000000000644b60e0


Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.