Contract

0xBCA8294E350F5247ce0eFb590F9C97cC27127361

Overview
0.0000 Trust Bitcoin
$0.0000
More Info
 
Contract Source Code (Solidity Standard Json-Input format)

File 1 of 6 : Address.sol

pragma solidity ^0.8.1; // SPDX-License-Identifier: MIT library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }

File 2 of 6 : Context.sol

pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }

File 3 of 6 : IERC20.sol

pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); }

File 4 of 6 : InvestmentPlan.sol

pragma solidity 0.8.10; // SPDX-License-Identifier: MIT import "./SafeERC20.sol"; import "./Ownable.sol"; interface IReferrals { function addMember(address investor, address sponsor) external; function getSponsor(address investor) external view returns (address); function getTeam(address sponsor, uint256 level) external view returns (uint256); } interface IVersion { function mapUserInfo(address investor) external view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, bool); function totalBusiness(address investor) external view returns (uint256); function workingBonus(address investor) external view returns (uint256); function monthlySale(address investor, uint256 months) external view returns (uint256); function positionWiseTBC(uint256 stage, uint256 position) external view returns (uint256); function positionWiseWallet(uint256 stage, uint256 position) external view returns (address); function stageWiseUserTBC(uint256 stage, address investor) external view returns (uint256); function stageWiseAvailableTBC(uint256 stage) external view returns (uint256); function stageWiseCurrentSellPosition(uint256 stage) external view returns (uint256); function statusPerStage(uint256 stage) external view returns (bool); } contract InvestmentPlan is Ownable { using SafeERC20 for IERC20; address public TUSD; address public FundWallet; address public TreasuryWallet; IReferrals public Referrals; IVersion private V1; struct UserInfo { uint256 investedAmount; uint256 levelIncome; uint256 foreignTour; uint256 monthlyReward; uint256 workingBonus; uint256 royaltyBonus; uint256 receivedFromSale; uint256 extraBonus; uint256 claimedAmount; uint256 claimedTBC; bool royalty; } struct TBCHoldingInfo { uint256 totalTBC; uint256 claimedTBC; } uint256 public royaltyIncentive; uint256 public nextRewardDrain; uint256 public workingBonusLoop; uint256 public monthlyBonusLoop; bool public saleEnable; uint256[10] public referralBonus = [500, 300, 200, 100, 100, 50, 50, 50, 50, 50]; uint256[10] public teamRequiredForBonus = [0, 3, 3, 3, 3, 3, 3, 3, 3, 3]; uint256[6] public investmentPackages = [100 * 10**18, 500 * 10**18, 1000 * 10**18, 2500 * 10**18, 5000 * 10**18, 10000 * 10**18]; uint256[5] public pricePerStage = [1 * 10**18, 10 * 10**18, 100 * 10**18, 1000 * 10**18, 10000 * 10**18]; uint256[6] public stageWiseAvailableTBC = [2500000 * 10**18, 2500000 * 10**18, 5000000 * 10**18, 5000000 * 10**18, 5000000 * 10**18]; uint256[6] public stageWiseCurrentSellPosition = [0, 0, 0, 0, 0, 0]; uint256[6] public incentivePerStage = [0, 4000, 4000, 5000, 5000, 5000]; bool[6] public statusPerStage; mapping(address => TBCHoldingInfo) public mapTBCHoldingInfo; mapping(address => UserInfo) public mapUserInfo; mapping(address => uint256) public totalBusiness; mapping(address => uint256) public workingBonus; mapping(address => mapping(uint256 => uint256)) public monthlyPurchase; mapping(address => mapping(uint256 => uint256)) public monthlySale; mapping(address => mapping(uint256 => uint256)) public monthlySaleClaimed; mapping(uint256 => uint256[]) public positionWiseTBC; mapping(uint256 => address[]) public positionWiseWallet; mapping(uint256 => mapping(address => uint256)) public stageWiseUserTBC; mapping(uint256 => mapping(address => uint256[])) public stageWiseUserPosition; mapping(address => address) public mapNewAddress; constructor(address TUSDAddress, address fundWallet, address treasuryWallet, address VIAddress) { require(TUSDAddress != address(0) && fundWallet != address(0) && treasuryWallet != address(0), "Zero address"); royaltyIncentive = 1000; nextRewardDrain = 1729974532; workingBonusLoop = 512; monthlyBonusLoop = 512; TUSD = address(TUSDAddress); FundWallet = address(fundWallet); TreasuryWallet = address(treasuryWallet); V1 = IVersion(VIAddress); } function buy(uint256 packages, uint256 buyStage, address investor, address sponsor, address communitySeller, uint256 stage2Share, uint256 stage3Share, uint256 stage4Share, uint256 stage5Share, uint256 stage6Share, uint256 holding) external { require(sponsor != address(0), "Zero address"); require(address(Referrals) != address(0), "Referral address not added yet"); require(packages < investmentPackages.length, "Investment packages is not correct"); require(IERC20(TUSD).balanceOf(msg.sender) >= investmentPackages[packages], "TUSD balance not available for investment"); require(address(sponsor) != address(investor), "Investor and sponsor can't be same wallet"); if(!saleEnable) { require(address(msg.sender) == owner(), "Sale is not started yet, only onwer can buy"); } uint256 investmentAmount = investmentPackages[packages]; IERC20(TUSD).safeTransferFrom(address(msg.sender), address(this), investmentAmount); if(address(Referrals.getSponsor(address(investor))) == address(0)) { require(mapUserInfo[address(sponsor)].investedAmount > 0, "Sponsor is not correct"); Referrals.addMember(address(investor), address(sponsor)); } sponsor = address(Referrals.getSponsor(address(investor))); uint256 totalTBC = (investmentAmount * 10**18) / (pricePerStage[buyStage]); require(statusPerStage[buyStage], "Stage is not active yet"); require(stageWiseAvailableTBC[buyStage] >= totalTBC, "TBC not available for sale"); if(buyStage == 0) { require(stage2Share + stage3Share + stage4Share + stage5Share + stage6Share + holding == totalTBC, "Stagewise share is not correct"); updateStageWiseRecord(address(investor), stage2Share, stage3Share, stage4Share, stage5Share, stage6Share); } else if(buyStage == 1) { require(stage3Share + stage4Share + stage5Share + stage6Share + holding == totalTBC, "Stagewise share is not correct"); updateStageWiseRecord(address(investor), 0, stage3Share, stage4Share, stage5Share, stage6Share); } else if(buyStage == 2) { require(stage4Share + stage5Share + stage6Share + holding == totalTBC, "Stagewise share is not correct"); updateStageWiseRecord(address(investor), 0, 0, stage4Share, stage5Share, stage6Share); } else if(buyStage == 3) { require(stage5Share + stage6Share + holding == totalTBC, "Stagewise share is not correct"); updateStageWiseRecord(address(investor), 0, 0, 0, stage5Share, stage6Share); } else { require(stage6Share + holding == totalTBC, "Stagewise share is not correct"); updateStageWiseRecord(address(investor), 0, 0, 0, 0, stage6Share); } if(buyStage > 0) { updateStageWiseSell(address(communitySeller), buyStage, totalTBC); } if(block.timestamp >= nextRewardDrain) { nextRewardDrain += 30 days; } stageWiseAvailableTBC[buyStage] -= totalTBC; uint256 minimumTBCRequired = (investmentPackages[0] * 10**18) / (pricePerStage[buyStage]); if(minimumTBCRequired > stageWiseAvailableTBC[buyStage]) { statusPerStage[buyStage + 1] = true; } mapTBCHoldingInfo[address(investor)].totalTBC += holding; mapUserInfo[address(investor)].investedAmount += investmentAmount; totalBusiness[address(sponsor)] += investmentAmount; uint256 myDirect = Referrals.getTeam(address(sponsor), 0); if(myDirect >= 3 && totalBusiness[sponsor] >= (1500 * 10**18) && !mapUserInfo[sponsor].royalty) { mapUserInfo[address(sponsor)].royalty = true; } monthlyPurchase[address(investor)][nextRewardDrain] += investmentAmount; referralBonusDistribution(address(investor), investmentAmount); workingBonusDistribution(address(investor), investmentAmount); foreignTourBonusDistribution(address(sponsor), totalBusiness[sponsor]); monthlyBonusDistribution(address(investor), investmentAmount); IERC20(TUSD).safeTransfer(address(TreasuryWallet), IERC20(TUSD).balanceOf(address(this))); } function setTeam(address[] calldata investor, address[] calldata sponsor) external onlyOwner { require(!saleEnable, "Sale already started"); require(address(Referrals) != address(0), "Referral address not added yet"); for(uint256 i = 0; i < investor.length; i++) { address newInvestor = mapNewAddress[investor[i]] == address(0) ? investor[i] : mapNewAddress[investor[i]]; address newSponsor = mapNewAddress[sponsor[i]] == address(0) ? sponsor[i] : mapNewAddress[sponsor[i]]; if(address(Referrals.getSponsor(investor[i])) == address(0) && address(sponsor[i]) != address(0)) { Referrals.addMember(address(newInvestor), address(newSponsor)); } (, , , uint256 monthlyReward, uint256 WBonus, uint256 royaltyBonus, uint256 receivedFromSale, uint256 extraBonus, uint256 claimedAmount, , ) = V1.mapUserInfo(address(investor[i])); mapUserInfo[address(newInvestor)].monthlyReward = monthlyReward; mapUserInfo[address(newInvestor)].workingBonus = WBonus; mapUserInfo[address(newInvestor)].royaltyBonus = royaltyBonus; mapUserInfo[address(newInvestor)].receivedFromSale = receivedFromSale; mapUserInfo[address(newInvestor)].claimedAmount = claimedAmount; mapUserInfo[address(newInvestor)].extraBonus = extraBonus; __setTeam(investor[i], address(newInvestor)); monthlySale[address(newInvestor)][nextRewardDrain] = V1.monthlySale(address(investor[i]), nextRewardDrain); workingBonus[address(newInvestor)] = V1.workingBonus(address(investor[i])); totalBusiness[address(newInvestor)] = V1.totalBusiness(address(investor[i])); } } function __setTeam(address oldinvestor, address newinvestor) internal { (uint256 investedAmount, uint256 levelIncome, uint256 foreignTour, , , , , , , , bool royalty) = V1.mapUserInfo(address(oldinvestor)); mapUserInfo[address(newinvestor)].investedAmount = investedAmount; mapUserInfo[address(newinvestor)].levelIncome = levelIncome; mapUserInfo[address(newinvestor)].foreignTour = foreignTour; mapUserInfo[address(newinvestor)].royalty = royalty; } function setSellPosition(uint256 stage, uint256 count) external onlyOwner{ require(!saleEnable, "Sale already started"); uint256 startingPosition = positionWiseTBC[stage].length; for(uint256 i = startingPosition; i < (startingPosition + count); i++) { address investor = V1.positionWiseWallet(stage, i); address newInvestor = mapNewAddress[investor] == address(0) ? investor : mapNewAddress[investor]; uint256 share = V1.positionWiseTBC(stage, i); uint256 SWUTBC = V1.stageWiseUserTBC(stage, address(investor)); if(address(investor) != address(0)) { stageWiseUserPosition[stage][address(newInvestor)].push(i); positionWiseTBC[stage].push(share); positionWiseWallet[stage].push(address(newInvestor)); stageWiseUserTBC[stage][address(newInvestor)] = SWUTBC; } } } function setStageWiseData() external onlyOwner { require(!saleEnable, "Sale already started"); for(uint256 i= 0; i < stageWiseAvailableTBC.length; i++) { stageWiseAvailableTBC[i] = V1.stageWiseAvailableTBC(i); stageWiseCurrentSellPosition[i] = V1.stageWiseCurrentSellPosition(i); statusPerStage[i] = V1.statusPerStage(i); } } function startSale() external onlyOwner { require(!saleEnable, "Sale already started"); saleEnable = true; } function updateStageWiseSell(address communitySeller, uint256 stage, uint256 totalTBC) internal { uint256 communitySellLimit = totalTBC * 20 / 100; if(communitySeller != address(0)) { for(uint256 i= 0; i < stageWiseUserPosition[stage][address(communitySeller)].length; i++) { uint256 sellerPosition = stageWiseUserPosition[stage][address(communitySeller)][i]; uint256 remainingTBCOnPosition = positionWiseTBC[stage][sellerPosition]; if(remainingTBCOnPosition > 0) { if(remainingTBCOnPosition >= communitySellLimit) { stageWiseUserTBC[stage][address(communitySeller)] -= communitySellLimit; positionWiseTBC[stage][sellerPosition] -= communitySellLimit; uint256 sellerFund = (communitySellLimit * pricePerStage[stage]) / (10**18); uint256 communityFund = (sellerFund * incentivePerStage[stage]) / 10000; mapUserInfo[address(communitySeller)].receivedFromSale += (sellerFund - communityFund); mapUserInfo[address(communitySeller)].claimedAmount += (sellerFund - communityFund); communitySellLimit = 0; if(saleEnable) { IERC20(TUSD).safeTransfer(address(address(communitySeller)), (sellerFund - communityFund)); } break; } else { stageWiseUserTBC[stage][address(communitySeller)] -= remainingTBCOnPosition; positionWiseTBC[stage][sellerPosition] = 0; uint256 sellerFund = (remainingTBCOnPosition * pricePerStage[stage]) / (10**18); uint256 communityFund = (sellerFund * incentivePerStage[stage]) / 10000; mapUserInfo[address(communitySeller)].receivedFromSale += (sellerFund - communityFund); mapUserInfo[address(communitySeller)].claimedAmount += (sellerFund - communityFund); communitySellLimit -= remainingTBCOnPosition; if(saleEnable) { IERC20(TUSD).safeTransfer(address(address(communitySeller)), (sellerFund - communityFund)); } } } } } uint256 userSellLimit = (totalTBC * 30 / 100) + communitySellLimit; uint256 startingPosition = stageWiseCurrentSellPosition[stage]; for(uint256 i = startingPosition; i < positionWiseTBC[stage].length; i++) { uint256 remainingTBCOnPosition = positionWiseTBC[stage][i]; if(remainingTBCOnPosition > 0) { if(remainingTBCOnPosition >= userSellLimit) { address userOnPosition = address(positionWiseWallet[stage][i]); stageWiseUserTBC[stage][userOnPosition] -= userSellLimit; positionWiseTBC[stage][i] -= userSellLimit; uint256 userFund = (userSellLimit * pricePerStage[stage]) / (10**18); uint256 communityFund = (userFund * incentivePerStage[stage]) / (10000); mapUserInfo[address(userOnPosition)].receivedFromSale += (userFund - communityFund); mapUserInfo[address(userOnPosition)].claimedAmount += (userFund - communityFund); if(saleEnable) { IERC20(TUSD).safeTransfer(userOnPosition, (userFund - communityFund)); } stageWiseCurrentSellPosition[stage] = i; break; } else { address userOnPosition = address(positionWiseWallet[stage][i]); stageWiseUserTBC[stage][userOnPosition] -= remainingTBCOnPosition; positionWiseTBC[stage][i] = 0; uint256 userFund = (remainingTBCOnPosition * pricePerStage[stage]) / (10**18); uint256 communityFund = (userFund * incentivePerStage[stage]) / (10000); mapUserInfo[address(userOnPosition)].receivedFromSale += (userFund - communityFund); mapUserInfo[address(userOnPosition)].claimedAmount += (userFund - communityFund); userSellLimit -= remainingTBCOnPosition; stageWiseCurrentSellPosition[stage] = i; if(saleEnable) { IERC20(TUSD).safeTransfer(userOnPosition, (userFund - communityFund)); } } } } } function updateStageWiseRecord(address investor, uint256 stage2Share, uint256 stage3Share, uint256 stage4Share, uint256 stage5Share, uint256 stage6Share) internal { if(stage2Share > 0) { stageWiseUserPosition[1][address(investor)].push(positionWiseTBC[1].length); positionWiseTBC[1].push(stage2Share); positionWiseWallet[1].push(address(investor)); stageWiseAvailableTBC[1] += stage2Share; stageWiseUserTBC[1][address(investor)] += stage2Share; } if(stage3Share > 0) { stageWiseUserPosition[2][address(investor)].push(positionWiseTBC[2].length); positionWiseTBC[2].push(stage3Share); positionWiseWallet[2].push(address(investor)); stageWiseAvailableTBC[2] += stage3Share; stageWiseUserTBC[2][address(investor)] += stage3Share; } if(stage4Share > 0) { stageWiseUserPosition[3][address(investor)].push(positionWiseTBC[3].length); positionWiseTBC[3].push(stage4Share); positionWiseWallet[3].push(address(investor)); stageWiseAvailableTBC[3] += stage4Share; stageWiseUserTBC[3][address(investor)] += stage4Share; } if(stage5Share > 0) { stageWiseUserPosition[4][address(investor)].push(positionWiseTBC[4].length); positionWiseTBC[4].push(stage5Share); positionWiseWallet[4].push(address(investor)); stageWiseAvailableTBC[4] += stage5Share; stageWiseUserTBC[4][address(investor)] += stage5Share; } if(stage6Share > 0) { stageWiseUserPosition[5][address(investor)].push(positionWiseTBC[5].length); positionWiseTBC[5].push(stage6Share); positionWiseWallet[5].push(address(investor)); stageWiseAvailableTBC[5] += stage6Share; stageWiseUserTBC[5][address(investor)] += stage6Share; } } function referralBonusDistribution(address investor, uint256 amount) internal { address sponsor = Referrals.getSponsor(investor); for(uint256 i=0; i < 10; i++) { if(address(sponsor) != address(0)) { uint256 myDirect = Referrals.getTeam(address(sponsor), 0); if(myDirect >= teamRequiredForBonus[i]) { address sponsorWallet = address(Referrals.getSponsor(sponsor)); if(i==0 && myDirect >= 5) { uint256 reward = amount * (referralBonus[i] * 2) / 10000; if(mapUserInfo[sponsorWallet].royalty) { royaltyBonusDistribution(sponsorWallet, ((reward * royaltyIncentive) / 10000)); } mapUserInfo[address(sponsor)].levelIncome += reward; mapUserInfo[address(sponsor)].claimedAmount += reward; if(saleEnable) { IERC20(TUSD).safeTransfer(address(sponsor), reward); } } else { if(i==0) { uint256 reward = amount * referralBonus[i] / 10000; if(mapUserInfo[sponsorWallet].royalty) { royaltyBonusDistribution(sponsorWallet, ((reward * royaltyIncentive) / 10000)); } mapUserInfo[sponsor].levelIncome += reward; mapUserInfo[sponsor].claimedAmount += reward; if(saleEnable) { IERC20(TUSD).safeTransfer(address(sponsor), reward); } } else if(totalBusiness[address(sponsor)] >= (1500 * 10**18)) { uint256 reward = amount * referralBonus[i] / 10000; if(mapUserInfo[sponsorWallet].royalty) { royaltyBonusDistribution(sponsorWallet, ((reward * royaltyIncentive) / 10000)); } mapUserInfo[sponsor].levelIncome += reward; mapUserInfo[sponsor].claimedAmount += reward; if(saleEnable) { IERC20(TUSD).safeTransfer(address(sponsor), reward); } } } } } else { break; } sponsor = Referrals.getSponsor(sponsor); } } function monthlyBonusDistribution(address investor, uint256 amount) internal { address sponsor = Referrals.getSponsor(investor); for(uint256 i=0; i < monthlyBonusLoop; i++) { if(sponsor != address(0)) { monthlySale[address(sponsor)][nextRewardDrain] += amount; } else { break; } sponsor = Referrals.getSponsor(sponsor); } } function workingBonusDistribution(address investor, uint256 amount) internal { address sponsor = Referrals.getSponsor(investor); for(uint256 i=0; i < workingBonusLoop; i++) { if(address(sponsor) != address(0)) { if(workingBonus[address(sponsor)] > 0) { uint256 payableAmount = amount * (workingBonus[address(sponsor)]) / 10000; if(IERC20(TUSD).balanceOf(address(this)) >= payableAmount) { mapUserInfo[address(sponsor)].workingBonus += payableAmount; mapUserInfo[sponsor].claimedAmount += payableAmount; if(saleEnable) { IERC20(TUSD).safeTransfer(address(sponsor), payableAmount); } break; } else if(IERC20(TUSD).allowance(address(FundWallet), address(this)) >= payableAmount && IERC20(TUSD).balanceOf(address(FundWallet)) >= payableAmount) { mapUserInfo[address(sponsor)].workingBonus += payableAmount; mapUserInfo[sponsor].claimedAmount += payableAmount; if(saleEnable) { IERC20(TUSD).safeTransferFrom(address(FundWallet), address(sponsor), payableAmount); } break; } else { mapUserInfo[address(sponsor)].workingBonus += payableAmount; break; } } } else { break; } sponsor = Referrals.getSponsor(sponsor); } } function foreignTourBonusDistribution(address sponsor, uint256 amount) internal { uint256 incentiveAmount = (amount / (3000 * 10**18)) * (300 * 10**18); if(incentiveAmount > mapUserInfo[sponsor].foreignTour) { uint256 payableAmount = incentiveAmount - mapUserInfo[sponsor].foreignTour; if(mapUserInfo[Referrals.getSponsor(sponsor)].royalty) { royaltyBonusDistribution(Referrals.getSponsor(sponsor), ((payableAmount * royaltyIncentive) / 10000)); } if(IERC20(TUSD).balanceOf(address(this)) >= payableAmount) { mapUserInfo[sponsor].foreignTour += payableAmount; mapUserInfo[sponsor].claimedAmount += payableAmount; if(saleEnable) { IERC20(TUSD).safeTransfer(address(sponsor), payableAmount); } } else if(IERC20(TUSD).allowance(address(FundWallet), address(this)) >= payableAmount && IERC20(TUSD).balanceOf(address(FundWallet)) >= payableAmount) { mapUserInfo[sponsor].foreignTour += payableAmount; mapUserInfo[sponsor].claimedAmount += payableAmount; if(saleEnable) { IERC20(TUSD).safeTransferFrom(address(FundWallet), address(sponsor), payableAmount); } } else { mapUserInfo[sponsor].foreignTour += payableAmount; } } } function royaltyBonusDistribution(address sponsor, uint256 payableAmount) internal { if(address(sponsor) != address(0)) { if(IERC20(TUSD).balanceOf(address(this)) >= payableAmount) { mapUserInfo[sponsor].royaltyBonus += payableAmount; mapUserInfo[sponsor].claimedAmount += payableAmount; if(saleEnable) { IERC20(TUSD).safeTransfer(address(sponsor), payableAmount); } } else if(IERC20(TUSD).allowance(address(FundWallet), address(this)) >= payableAmount && IERC20(TUSD).balanceOf(address(FundWallet)) >= payableAmount) { mapUserInfo[sponsor].royaltyBonus += payableAmount; mapUserInfo[sponsor].claimedAmount += payableAmount; if(saleEnable) { IERC20(TUSD).safeTransferFrom(address(FundWallet), address(sponsor), payableAmount); } } else { mapUserInfo[sponsor].royaltyBonus += payableAmount; } } } function claimMonthlyReward(address topSponsor, uint256 month) external { require(monthlySaleClaimed[address(msg.sender)][month] == 0, "Monthly reward already claimed"); require(Referrals.getSponsor(topSponsor) == address(msg.sender), "Top sponsor is not correct"); uint256 topSponsorSale = (monthlySale[address(topSponsor)][month]) + (monthlyPurchase[address(topSponsor)][month]); uint256 allSale = monthlySale[address(msg.sender)][month]; uint256 remainingTeamSale = allSale - topSponsorSale; uint256 payableAmount = 0; if(topSponsorSale >= (10000000 * 10**18) && remainingTeamSale >= (10000000 * 10**18)) { payableAmount = 1000000 * 10**18; } else if(topSponsorSale >= (5000000 * 10**18) && remainingTeamSale >= (5000000 * 10**18)) { payableAmount = 400000 * 10**18; } else if(topSponsorSale >= (2000000 * 10**18) && remainingTeamSale >= (2000000 * 10**18)) { payableAmount = 150000 * 10**18; } else if(topSponsorSale >= (500000 * 10**18) && remainingTeamSale >= (500000 * 10**18)) { payableAmount = 35000 * 10**18; } else if(topSponsorSale >= (125000 * 10**18) && remainingTeamSale >= (125000 * 10**18)) { payableAmount = 8500 * 10**18; } else if(topSponsorSale >= (50000 * 10**18) && remainingTeamSale >= (50000 * 10**18)) { payableAmount = 3000 * 10**18; } else if(topSponsorSale >= (15000 * 10**18) && remainingTeamSale >= (15000 * 10**18)) { payableAmount = 800 * 10**18; } else if(topSponsorSale >= (5000 * 10**18) && remainingTeamSale >= (5000 * 10**18)) { payableAmount = 250 * 10**18; } if(payableAmount > 0 && IERC20(TUSD).allowance(address(FundWallet), address(this)) >= payableAmount && IERC20(TUSD).balanceOf(address(FundWallet)) >= payableAmount) { monthlySaleClaimed[address(msg.sender)][month] = 1; address sponsor = Referrals.getSponsor(address(msg.sender)); if(mapUserInfo[sponsor].royalty) { royaltyBonusDistribution(sponsor, ((payableAmount * royaltyIncentive) / 10000)); } mapUserInfo[address(msg.sender)].monthlyReward += payableAmount; mapUserInfo[address(msg.sender)].claimedAmount += payableAmount; IERC20(TUSD).safeTransferFrom(address(FundWallet), address(msg.sender), payableAmount); } if(topSponsorSale >= (15000 * 10**18) && remainingTeamSale >= (15000 * 10**18) && workingBonus[address(msg.sender)] == 0) { workingBonus[address(msg.sender)] = 500; } } function withdrawEarning(uint256 amount) external { uint256 payableAmount = pendingReward(address(msg.sender)); if(payableAmount >= amount && IERC20(TUSD).allowance(address(FundWallet), address(this)) >= amount && IERC20(TUSD).balanceOf(address(FundWallet)) >= amount) { mapUserInfo[address(msg.sender)].claimedAmount += amount; IERC20(TUSD).safeTransferFrom(address(FundWallet), address(msg.sender), amount); } } function claimHoldingTBC() external { uint256 total = mapTBCHoldingInfo[address(msg.sender)].totalTBC; uint256 claimed = mapTBCHoldingInfo[address(msg.sender)].claimedTBC; uint256 claimable = total - claimed; uint256 balance = address(this).balance; if(claimable > 0 && balance >= claimable) { payable(msg.sender).transfer(claimable); mapTBCHoldingInfo[address(msg.sender)].claimedTBC += claimable; } } function updateTeam(address[] calldata oldAddress, address[] calldata newAddress) external onlyOwner { for(uint256 i = 0; i < oldAddress.length; i++) { if(oldAddress[i] != address(0) && newAddress[i] != address(0)) { mapNewAddress[oldAddress[i]] = newAddress[i]; } } } function pendingReward(address user) public view returns (uint256) { if(mapUserInfo[address(user)].investedAmount > 0) { uint256 pending = (mapUserInfo[address(user)].levelIncome + mapUserInfo[address(user)].foreignTour + mapUserInfo[address(user)].workingBonus + mapUserInfo[address(user)].royaltyBonus + mapUserInfo[address(user)].monthlyReward + mapUserInfo[address(user)].receivedFromSale + mapUserInfo[address(user)].extraBonus) - (mapUserInfo[address(user)].claimedAmount); return pending; } else { return 0; } } function claimTBC() external { require(statusPerStage[5], "Exchange stage is not start yet"); uint256 claimableTBC = stageWiseUserTBC[5][address(msg.sender)] - mapUserInfo[address(msg.sender)].claimedTBC; uint256 balance = address(this).balance; if(claimableTBC > 0 && balance >= claimableTBC) { payable(msg.sender).transfer(claimableTBC); mapUserInfo[address(msg.sender)].claimedTBC += claimableTBC; } } function addReferral(address referral) external onlyOwner { require(address(Referrals) == address(0), "Zero address"); Referrals = IReferrals(referral); } function setWorkingBonus(address topSponsor, uint256 month) external { require(Referrals.getSponsor(topSponsor) == address(msg.sender), "Top sponsor is not correct"); require(workingBonus[address(msg.sender)] == 0, "Working bonus already set"); uint256 topSponsorSale = (monthlySale[address(topSponsor)][month]) + (monthlyPurchase[address(topSponsor)][month]); uint256 allSale = monthlySale[address(msg.sender)][month]; uint256 remainingTeamSale = allSale - topSponsorSale; if(topSponsorSale >= (15000 * 10**18) && remainingTeamSale >= (15000 * 10**18)) { workingBonus[address(msg.sender)] = 500; } } }

File 5 of 6 : SafeERC20.sol

pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT import "./IERC20.sol"; import "./draft-IERC20Permit.sol"; import "./Address.sol"; library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }

File 6 of 6 : draft-IERC20Permit.sol

pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT interface IERC20Permit { function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); }
ABI Code (Solidity Standard Json-Input format)

File 1 of 1 : ABI.json

[ { "inputs": [ { "internalType": "address", "name": "TUSDAddress", "type": "address" }, { "internalType": "address", "name": "fundWallet", "type": "address" }, { "internalType": "address", "name": "treasuryWallet", "type": "address" }, { "internalType": "address", "name": "VIAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "inputs": [], "name": "FundWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "Referrals", "outputs": [ { "internalType": "contract IReferrals", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TUSD", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TreasuryWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "referral", "type": "address" } ], "name": "addReferral", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "packages", "type": "uint256" }, { "internalType": "uint256", "name": "buyStage", "type": "uint256" }, { "internalType": "address", "name": "investor", "type": "address" }, { "internalType": "address", "name": "sponsor", "type": "address" }, { "internalType": "address", "name": "communitySeller", "type": "address" }, { "internalType": "uint256", "name": "stage2Share", "type": "uint256" }, { "internalType": "uint256", "name": "stage3Share", "type": "uint256" }, { "internalType": "uint256", "name": "stage4Share", "type": "uint256" }, { "internalType": "uint256", "name": "stage5Share", "type": "uint256" }, { "internalType": "uint256", "name": "stage6Share", "type": "uint256" }, { "internalType": "uint256", "name": "holding", "type": "uint256" } ], "name": "buy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimHoldingTBC", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "topSponsor", "type": "address" }, { "internalType": "uint256", "name": "month", "type": "uint256" } ], "name": "claimMonthlyReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimTBC", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "incentivePerStage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "investmentPackages", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "mapNewAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "mapTBCHoldingInfo", "outputs": [ { "internalType": "uint256", "name": "totalTBC", "type": "uint256" }, { "internalType": "uint256", "name": "claimedTBC", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "mapUserInfo", "outputs": [ { "internalType": "uint256", "name": "investedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "levelIncome", "type": "uint256" }, { "internalType": "uint256", "name": "foreignTour", "type": "uint256" }, { "internalType": "uint256", "name": "monthlyReward", "type": "uint256" }, { "internalType": "uint256", "name": "workingBonus", "type": "uint256" }, { "internalType": "uint256", "name": "royaltyBonus", "type": "uint256" }, { "internalType": "uint256", "name": "receivedFromSale", "type": "uint256" }, { "internalType": "uint256", "name": "extraBonus", "type": "uint256" }, { "internalType": "uint256", "name": "claimedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "claimedTBC", "type": "uint256" }, { "internalType": "bool", "name": "royalty", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "monthlyBonusLoop", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "monthlyPurchase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "monthlySale", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "monthlySaleClaimed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextRewardDrain", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "pendingReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "positionWiseTBC", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "positionWiseWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "pricePerStage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "referralBonus", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "royaltyIncentive", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "saleEnable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "stage", "type": "uint256" }, { "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "setSellPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setStageWiseData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "investor", "type": "address[]" }, { "internalType": "address[]", "name": "sponsor", "type": "address[]" } ], "name": "setTeam", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "topSponsor", "type": "address" }, { "internalType": "uint256", "name": "month", "type": "uint256" } ], "name": "setWorkingBonus", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stageWiseAvailableTBC", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stageWiseCurrentSellPosition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stageWiseUserPosition", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "stageWiseUserTBC", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "startSale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "statusPerStage", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "teamRequiredForBonus", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "totalBusiness", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "oldAddress", "type": "address[]" }, { "internalType": "address[]", "name": "newAddress", "type": "address[]" } ], "name": "updateTeam", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawEarning", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "workingBonus", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "workingBonusLoop", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
Contract Creation Code
0x608060405234801561001057600080fd5b506004361061027e5760003560e01c8063715018a61161015c578063af47cbb9116100ce578063e8aca46a11610087578063e8aca46a1461068b578063f2fde38b1461069e578063f40f0f52146106b1578063fcb11124146106c4578063fe4ca847146106cc578063ffb7a5be146106d957600080fd5b8063af47cbb914610643578063b66a0e5d1461064b578063c0fa221414610653578063c44f98b614610666578063de216f661461066f578063df32dc5c1461067857600080fd5b806384cd55051161012057806384cd5505146105aa5780638a24bee4146105ca5780638da5cb5b146105f557806397c571ad1461060657806399b008ce146106315780639e15cf721461063a57600080fd5b8063715018a61461055657806377d42fc91461055e5780637c917187146105715780637cb936e7146105845780638323550b1461059757600080fd5b8063357ec6e2116101f557806358dc970d116101b957806358dc970d146104b65780635aadf4d7146104c95780635fb03afd146104f257806366f150e7146105055780636d6438ac146105305780636f20befd1461054357600080fd5b8063357ec6e21461044a57806343bb5c4e1461046a578063441222441461047d5780634c7cdb82146104905780634e739773146104a357600080fd5b80631d63a0a8116102475780631d63a0a8146103b05780632276fbf9146103c3578063235a18eb146103d657806324f97835146103e957806326745f2d14610414578063303256fb1461043757600080fd5b80624a98e81461028357806306dc7314146102a957806311ffeaf2146102bc57806315612933146102e757806316bad309146103a6575b600080fd5b61029661029136600461522c565b610715565b6040519081526020015b60405180910390f35b6102966102b7366004615245565b61072c565b6003546102cf906001600160a01b031681565b6040516001600160a01b0390911681526020016102a0565b6103516102f536600461527c565b603e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a909a01549899979896979596949593949293919290919060ff168b565b604080519b8c5260208c019a909a52988a01979097526060890195909552608088019390935260a087019190915260c086015260e08501526101008401526101208301521515610140820152610160016102a0565b6103ae61075d565b005b6103ae6103be366004615299565b6107f3565b6102966103d136600461522c565b610e17565b6103ae6103e4366004615245565b610e27565b6102966103f7366004615299565b604360209081526000928352604080842090915290825290205481565b61042761042236600461522c565b6110db565b60405190151581526020016102a0565b61029661044536600461522c565b611105565b61029661045836600461527c565b60406020819052600091825290205481565b6103ae610478366004615311565b611115565b61029661048b36600461522c565b6118e3565b6002546102cf906001600160a01b031681565b6102cf6104b1366004615245565b6118f3565b6102966104c436600461522c565b61192b565b6102cf6104d736600461527c565b6048602052600090815260409020546001600160a01b031681565b6103ae61050036600461537d565b61193b565b610296610513366004615299565b604260209081526000928352604080842090915290825290205481565b6103ae61053e366004615311565b612435565b6004546102cf906001600160a01b031681565b6103ae612553565b61029661056c36600461522c565b612567565b61029661057f36600461522c565b612577565b6103ae610592366004615299565b612587565b6001546102cf906001600160a01b031681565b6102966105b836600461527c565b603f6020526000908152604090205481565b6102966105d8366004615299565b604160209081526000928352604080842090915290825290205481565b6000546001600160a01b03166102cf565b610296610614366004615412565b604660209081526000928352604080842090915290825290205481565b61029660075481565b61029660095481565b6103ae61275d565b6103ae61294d565b610296610661366004615442565b612987565b61029660085481565b61029660065481565b6103ae61068636600461522c565b6129c5565b6103ae61069936600461527c565b612b26565b6103ae6106ac36600461527c565b612b98565b6102966106bf36600461527c565b612c0e565b6103ae612cd3565b600a546104279060ff1681565b6107006106e736600461527c565b603d602052600090815260409020805460019091015482565b604080519283526020830191909152016102a0565b601f816006811061072557600080fd5b0154905081565b6044602052816000526040600020818154811061074857600080fd5b90600052602060002001600091509150505481565b336000908152603d60205260408120805460019091015490916107808284615490565b90504781158015906107925750818110155b156107ed57604051339083156108fc029084906000818181858888f193505050501580156107c4573d6000803e3d6000fd5b50336000908152603d6020526040812060010180548492906107e79084906154a7565b90915550505b50505050565b336000908152604360209081526040808320848452909152902054156108605760405162461bcd60e51b815260206004820152601e60248201527f4d6f6e74686c792072657761726420616c726561647920636c61696d6564000060448201526064015b60405180910390fd5b6004805460405163743fc74560e01b81526001600160a01b038581169382019390935233929091169063743fc74590602401602060405180830381865afa1580156108af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d391906154bf565b6001600160a01b0316146109295760405162461bcd60e51b815260206004820152601a60248201527f546f702073706f6e736f72206973206e6f7420636f72726563740000000000006044820152606401610857565b6001600160a01b038216600081815260416020908152604080832085845282528083205493835260428252808320858452909152812054909161096b916154a7565b3360009081526042602090815260408083208684529091528120549192506109938383615490565b905060006a084595161401484a00000084101580156109bd57506a084595161401484a0000008210155b156109d3575069d3c21bcecceda1000000610b66565b6a0422ca8b0a00a42500000084101580156109f957506a0422ca8b0a00a4250000008210155b15610a0f57506954b40b1f852bda000000610b66565b6a01a784379d99db420000008410158015610a3557506a01a784379d99db420000008210155b15610a4b5750691fc3842bd1f071c00000610b66565b6969e10de76676d08000008410158015610a6f57506969e10de76676d08000008210155b15610a8557506907695a92c20d6fe00000610b66565b691a784379d99db42000008410158015610aa95750691a784379d99db42000008210155b15610abf57506901ccc9324511e4500000610b66565b690a968163f0a57b4000008410158015610ae35750690a968163f0a57b4000008210155b15610af8575068a2a15d09519be00000610b66565b69032d26d12e980b6000008410158015610b1c575069032d26d12e980b6000008210155b15610b315750682b5e3af16b18800000610b66565b69010f0cf064dd592000008410158015610b55575069010f0cf064dd592000008210155b15610b665750680d8d726b7177a800005b600081118015610bee5750600154600254604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528392919091169063dd62ed3e90604401602060405180830381865afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb91906154dc565b10155b8015610c6c57506001546002546040516370a0823160e01b81526001600160a01b039182166004820152839291909116906370a0823190602401602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6991906154dc565b10155b15610db8573360008181526043602090815260408083208984529091528082206001905560048054915163743fc74560e01b81529081019390935290916001600160a01b039091169063743fc74590602401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff91906154bf565b6001600160a01b0381166000908152603e60205260409020600a015490915060ff1615610d4a57610d4a8161271060065485610d3b91906154f5565b610d459190615514565b612de5565b336000908152603e602052604081206003018054849290610d6c9084906154a7565b9091555050336000908152603e602052604081206008018054849290610d939084906154a7565b9091555050600254600154610db6916001600160a01b039182169116338561309a565b505b69032d26d12e980b6000008410158015610ddc575069032d26d12e980b6000008210155b8015610df5575033600090815260406020819052902054155b15610e0f573360009081526040602081905290206101f490555b505050505050565b6036816006811061072557600080fd5b610e2f613105565b600a5460ff1615610e525760405162461bcd60e51b815260040161085790615536565b600082815260446020526040902054805b610e6d83836154a7565b8110156107ed57600554604051634e73977360e01b815260048101869052602481018390526000916001600160a01b031690634e73977390604401602060405180830381865afa158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee991906154bf565b6001600160a01b03808216600090815260486020526040812054929350911615610f2d576001600160a01b0380831660009081526048602052604090205416610f2f565b815b6005546040516301b71cc560e21b815260048101899052602481018690529192506000916001600160a01b03909116906306dc731490604401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa991906154dc565b6005546040516397c571ad60e01b8152600481018a90526001600160a01b038681166024830152929350600092909116906397c571ad90604401602060405180830381865afa158015611000573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102491906154dc565b90506001600160a01b038416156110c45760008881526047602090815260408083206001600160a01b038716808552908352818420805460018181018355918652848620018a90558c85526044845282852080548083018255908652848620018790558c8552604584528285208054918201815585528385200180546001600160a01b031916821790558b84526046835281842090845290915290208190555b5050505080806110d390615564565b915050610e63565b603c81600681106110eb57600080fd5b60209182820401919006915054906101000a900460ff1681565b601581600a811061072557600080fd5b61111d613105565b600a5460ff16156111405760405162461bcd60e51b815260040161085790615536565b6004546001600160a01b03166111985760405162461bcd60e51b815260206004820152601e60248201527f526566657272616c2061646472657373206e6f742061646465642079657400006044820152606401610857565b60005b838110156118dc576000806048818888868181106111bb576111bb61557f565b90506020020160208101906111d0919061527c565b6001600160a01b039081168252602082019290925260400160002054161461123f57604860008787858181106112085761120861557f565b905060200201602081019061121d919061527c565b6001600160a01b03908116825260208201929092526040016000205416611266565b8585838181106112515761125161557f565b9050602002016020810190611266919061527c565b90506000806048818787878181106112805761128061557f565b9050602002016020810190611295919061527c565b6001600160a01b039081168252602082019290925260400160002054161461130457604860008686868181106112cd576112cd61557f565b90506020020160208101906112e2919061527c565b6001600160a01b0390811682526020820192909252604001600020541661132b565b8484848181106113165761131661557f565b905060200201602081019061132b919061527c565b6004549091506000906001600160a01b031663743fc7458989878181106113545761135461557f565b9050602002016020810190611369919061527c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d191906154bf565b6001600160a01b0316148015611417575060008585858181106113f6576113f661557f565b905060200201602081019061140b919061527c565b6001600160a01b031614155b156114865760048054604051639d58b15d60e01b81526001600160a01b03858116938201939093528383166024820152911690639d58b15d90604401600060405180830381600087803b15801561146d57600080fd5b505af1158015611481573d6000803e3d6000fd5b505050505b600554600090819081908190819081906001600160a01b031663156129338e8e8c8181106114b6576114b661557f565b90506020020160208101906114cb919061527c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240161016060405180830381865afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153491906155a5565b505098509850985098509850985050505085603e60008a6001600160a01b03166001600160a01b031681526020019081526020016000206003018190555084603e60008a6001600160a01b03166001600160a01b031681526020019081526020016000206004018190555083603e60008a6001600160a01b03166001600160a01b031681526020019081526020016000206005018190555082603e60008a6001600160a01b03166001600160a01b031681526020019081526020016000206006018190555080603e60008a6001600160a01b03166001600160a01b031681526020019081526020016000206008018190555081603e60008a6001600160a01b03166001600160a01b03168152602001908152602001600020600701819055506116838d8d8b8181106116685761166861557f565b905060200201602081019061167d919061527c565b8961315f565b6005546001600160a01b03166366f150e78e8e8c8181106116a6576116a661557f565b90506020020160208101906116bb919061527c565b6007546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b91906154dc565b6001600160a01b03808a16600090815260426020908152604080832060075484529091529020919091556005541663357ec6e28e8e8c8181106117705761177061557f565b9050602002016020810190611785919061527c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906154dc565b6001600160a01b03808a16600090815260406020819052902091909155600554166384cd55058e8e8c8181106118255761182561557f565b905060200201602081019061183a919061527c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561187e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a291906154dc565b6001600160a01b039098166000908152603f6020526040902097909755508695506118d4945085935061556492505050565b91505061119b565b5050505050565b6025816005811061072557600080fd5b6045602052816000526040600020818154811061190f57600080fd5b6000918252602090912001546001600160a01b03169150829050565b602a816006811061072557600080fd5b6001600160a01b0388166119805760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610857565b6004546001600160a01b03166119d85760405162461bcd60e51b815260206004820152601e60248201527f526566657272616c2061646472657373206e6f742061646465642079657400006044820152606401610857565b60068b10611a335760405162461bcd60e51b815260206004820152602260248201527f496e766573746d656e74207061636b61676573206973206e6f7420636f72726560448201526118dd60f21b6064820152608401610857565b601f8b60068110611a4657611a4661557f565b01546001546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab491906154dc565b1015611b145760405162461bcd60e51b815260206004820152602960248201527f545553442062616c616e6365206e6f7420617661696c61626c6520666f7220696044820152681b9d995cdd1b595b9d60ba1b6064820152608401610857565b886001600160a01b0316886001600160a01b03161415611b885760405162461bcd60e51b815260206004820152602960248201527f496e766573746f7220616e642073706f6e736f722063616e27742062652073616044820152681b59481dd85b1b195d60ba1b6064820152608401610857565b600a5460ff16611c00576000546001600160a01b03163314611c005760405162461bcd60e51b815260206004820152602b60248201527f53616c65206973206e6f742073746172746564207965742c206f6e6c79206f6e60448201526a7765722063616e2062757960a81b6064820152608401610857565b6000601f8c60068110611c1557611c1561557f565b0154600154909150611c32906001600160a01b031633308461309a565b6004805460405163743fc74560e01b81526001600160a01b038d8116938201939093526000929091169063743fc74590602401602060405180830381865afa158015611c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca691906154bf565b6001600160a01b03161415611d7d576001600160a01b0389166000908152603e6020526040902054611d135760405162461bcd60e51b815260206004820152601660248201527514dc1bdb9cdbdc881a5cc81b9bdd0818dbdc9c9958dd60521b6044820152606401610857565b60048054604051639d58b15d60e01b81526001600160a01b038d8116938201939093528b83166024820152911690639d58b15d90604401600060405180830381600087803b158015611d6457600080fd5b505af1158015611d78573d6000803e3d6000fd5b505050505b6004805460405163743fc74560e01b81526001600160a01b038d81169382019390935291169063743fc74590602401602060405180830381865afa158015611dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ded91906154bf565b9850600060258c60058110611e0457611e0461557f565b0154611e1883670de0b6b3a76400006154f5565b611e229190615514565b9050603c8c60068110611e3757611e3761557f565b602081049091015460ff601f9092166101000a900416611e995760405162461bcd60e51b815260206004820152601760248201527f5374616765206973206e6f7420616374697665207965740000000000000000006044820152606401610857565b80602a8d60068110611ead57611ead61557f565b01541015611efd5760405162461bcd60e51b815260206004820152601a60248201527f544243206e6f7420617661696c61626c6520666f722073616c650000000000006044820152606401610857565b8b611f69578083858789611f118c8e6154a7565b611f1b91906154a7565b611f2591906154a7565b611f2f91906154a7565b611f3991906154a7565b14611f565760405162461bcd60e51b81526004016108579061562b565b611f648b8989898989613220565b6120a4565b8b60011415611fca5780838587611f808a8c6154a7565b611f8a91906154a7565b611f9491906154a7565b611f9e91906154a7565b14611fbb5760405162461bcd60e51b81526004016108579061562b565b611f648b600089898989613220565b8b6002141561202057808385611fe0888a6154a7565b611fea91906154a7565b611ff491906154a7565b146120115760405162461bcd60e51b81526004016108579061562b565b611f648b600080898989613220565b8b6003141561206c57808361203586886154a7565b61203f91906154a7565b1461205c5760405162461bcd60e51b81526004016108579061562b565b611f648b60008060008989613220565b8061207784866154a7565b146120945760405162461bcd60e51b81526004016108579061562b565b6120a48b60008060008089613220565b8b156120b5576120b5898d83613928565b60075442106120d95762278d00600760008282546120d391906154a7565b90915550505b80602a8d600681106120ed576120ed61557f565b0160008282546120fd9190615490565b909155506000905060258d600581106121185761211861557f565b0154601f5461212f90670de0b6b3a76400006154f5565b6121399190615514565b9050602a8d6006811061214e5761214e61557f565b0154811115612195576001603c6121658f836154a7565b600681106121755761217561557f565b602091828204019190066101000a81548160ff0219169083151502179055505b6001600160a01b038c166000908152603d6020526040812080548692906121bd9084906154a7565b90915550506001600160a01b038c166000908152603e6020526040812080548592906121ea9084906154a7565b90915550506001600160a01b038b166000908152603f6020526040812080548592906122179084906154a7565b9091555050600480546040516380f78b3f60e01b81526001600160a01b038e81169382019390935260006024820181905292909116906380f78b3f90604401602060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229791906154dc565b9050600381101580156122cb57506001600160a01b038c166000908152603f6020526040902054685150ae84a8cdf0000011155b80156122f357506001600160a01b038c166000908152603e60205260409020600a015460ff16155b1561231f576001600160a01b038c166000908152603e60205260409020600a01805460ff191660011790555b6001600160a01b038d1660009081526041602090815260408083206007548452909152812080548692906123549084906154a7565b9091555061236490508d8561411d565b61236e8d8561459d565b6001600160a01b038c166000908152603f6020526040902054612392908d906149bf565b61239c8d85614e03565b6003546001546040516370a0823160e01b8152306004820152612424926001600160a01b039081169216906370a0823190602401602060405180830381865afa1580156123ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241191906154dc565b6001546001600160a01b03169190614f59565b505050505050505050505050505050565b61243d613105565b60005b838110156118dc57600085858381811061245c5761245c61557f565b9050602002016020810190612471919061527c565b6001600160a01b0316141580156124b8575060008383838181106124975761249761557f565b90506020020160208101906124ac919061527c565b6001600160a01b031614155b15612541578282828181106124cf576124cf61557f565b90506020020160208101906124e4919061527c565b604860008787858181106124fa576124fa61557f565b905060200201602081019061250f919061527c565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b031916929091169190911790555b8061254b81615564565b915050612440565b61255b613105565b6125656000614f89565b565b600b81600a811061072557600080fd5b6030816006811061072557600080fd5b6004805460405163743fc74560e01b81526001600160a01b038581169382019390935233929091169063743fc74590602401602060405180830381865afa1580156125d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fa91906154bf565b6001600160a01b0316146126505760405162461bcd60e51b815260206004820152601a60248201527f546f702073706f6e736f72206973206e6f7420636f72726563740000000000006044820152606401610857565b33600090815260406020819052902054156126ad5760405162461bcd60e51b815260206004820152601960248201527f576f726b696e6720626f6e757320616c726561647920736574000000000000006044820152606401610857565b6001600160a01b03821660008181526041602090815260408083208584528252808320549383526042825280832085845290915281205490916126ef916154a7565b3360009081526042602090815260408083208684529091528120549192506127178383615490565b905069032d26d12e980b600000831015801561273d575069032d26d12e980b6000008110155b156118dc573360009081526040602081905290206101f490555050505050565b612765613105565b600a5460ff16156127885760405162461bcd60e51b815260040161085790615536565b60005b600681101561294a576005546040516358dc970d60e01b8152600481018390526001600160a01b03909116906358dc970d90602401602060405180830381865afa1580156127dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280191906154dc565b602a82600681106128145761281461557f565b0155600554604051637c91718760e01b8152600481018390526001600160a01b0390911690637c91718790602401602060405180830381865afa15801561285f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288391906154dc565b603082600681106128965761289661557f565b01556005546040516326745f2d60e01b8152600481018390526001600160a01b03909116906326745f2d90602401602060405180830381865afa1580156128e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129059190615662565b603c82600681106129185761291861557f565b602091828204019190066101000a81548160ff021916908315150217905550808061294290615564565b91505061278b565b50565b612955613105565b600a5460ff16156129785760405162461bcd60e51b815260040161085790615536565b600a805460ff19166001179055565b604760205282600052604060002060205281600052604060002081815481106129af57600080fd5b9060005260206000200160009250925050505481565b60006129d033612c0e565b9050818110158015612a5a5750600154600254604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528492919091169063dd62ed3e90604401602060405180830381865afa158015612a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5791906154dc565b10155b8015612ad857506001546002546040516370a0823160e01b81526001600160a01b039182166004820152849291909116906370a0823190602401602060405180830381865afa158015612ab1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad591906154dc565b10155b15612b2257336000908152603e602052604081206008018054849290612aff9084906154a7565b9091555050600254600154612b22916001600160a01b039182169116338561309a565b5050565b612b2e613105565b6004546001600160a01b031615612b765760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610857565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b612ba0613105565b6001600160a01b038116612c055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610857565b61294a81614f89565b6001600160a01b0381166000908152603e602052604081205415612cc6576001600160a01b0382166000908152603e602052604081206008810154600782015460068301546003840154600585015460048601546002870154600190970154959694959394929391929091612c8391906154a7565b612c8d91906154a7565b612c9791906154a7565b612ca191906154a7565b612cab91906154a7565b612cb591906154a7565b612cbf9190615490565b9392505050565b506000919050565b919050565b603c5465010000000000900460ff16612d2e5760405162461bcd60e51b815260206004820152601f60248201527f45786368616e6765207374616765206973206e6f7420737461727420796574006044820152606401610857565b336000908152603e60209081526040808320600901547f288b2d47c2a96aa14eb9e2779880bb6d1bd5093b6dbb3a4e34f5fe39f8ff005d909252822054612d759190615490565b9050478115801590612d875750818110155b15612b2257604051339083156108fc029084906000818181858888f19350505050158015612db9573d6000803e3d6000fd5b50336000908152603e602052604081206009018054849290612ddc9084906154a7565b90915550505050565b6001600160a01b03821615612b22576001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015612e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6091906154dc565b10612ee7576001600160a01b0382166000908152603e602052604081206005018054839290612e909084906154a7565b90915550506001600160a01b0382166000908152603e602052604081206008018054839290612ec09084906154a7565b9091555050600a5460ff1615612b2257600154612b22906001600160a01b03168383614f59565b600154600254604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528392919091169063dd62ed3e90604401602060405180830381865afa158015612f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6191906154dc565b10158015612fe157506001546002546040516370a0823160e01b81526001600160a01b039182166004820152839291909116906370a0823190602401602060405180830381865afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde91906154dc565b10155b1561306f576001600160a01b0382166000908152603e6020526040812060050180548392906130119084906154a7565b90915550506001600160a01b0382166000908152603e6020526040812060080180548392906130419084906154a7565b9091555050600a5460ff1615612b2257600254600154612b22916001600160a01b039182169116848461309a565b6001600160a01b0382166000908152603e602052604081206005018054839290612ddc9084906154a7565b6040516001600160a01b03808516602483015283166044820152606481018290526107ed9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614fd9565b6000546001600160a01b031633146125655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610857565b600554604051631561293360e01b81526001600160a01b038481166004830152600092839283928392169063156129339060240161016060405180830381865afa1580156131b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d591906155a5565b6001600160a01b039f909f166000908152603e60205260409020998a555050505060018601949094555050600283015550600a01805460ff1916951515959095179094555050505050565b8415613386576001600160a01b03861660008181527fb14f5d13884225e73da5bc63142a82d0f0a4cfaadff7d01570ba10d37a3c47776020908152604082207fcdad79d33f4de49584ed9b39ca3d8a53cc10e49c033c5359244d3129cc2efd3d8054825460018082018555938652848620015580548083019091557e23771cca3efdce462360526577d60b85a8432d42a19a2356e3fd52f1c503550189905560459091527fcf23cc7089fed28926e3cca2bfa1d6811ea4ce7e8c64119a740cf101b353080f8054918201815582527f7b37e37d5734ae1a0f3b597d70368f24e57a23d4284eb99a82deef0a248683f60180546001600160a01b031916909217909155602b80548792906133349084906154a7565b90915550506001600160a01b03861660009081527f76f821bd39721ec0e26efc55d7b667d20aab74992e0feae7d7755e386ecd694d6020526040812080548792906133809084906154a7565b90915550505b83156134ec576001600160a01b03861660008181527f07b6965316af980d23beb752c9f51b394746ef8954337d3b4b6bf6f74b2e41526020908152604082207f698f965f71a6f5c9afb45442df7ff01640d7295288618bfa1177b6c22c0c05db8054825460018082018555938652848620015580548083019091557eaa405714b8db35f8715775af17aef181a3c642cf0c852141255b3b6876a2140188905560459091527f2d3d1c9680bbdec853995b6859c48c938bd9c76a8e98a938491cbf18b6665bed8054918201815582527f13ac137ff8abb89f194be57121239dd16bc44d811ffb58b6b5f70d438705a2320180546001600160a01b031916909217909155602c805486929061349a9084906154a7565b90915550506001600160a01b03861660009081527ffd5f7714445dd0028303d86eb9c0a4f606d5012be00897d1253bc412ae0b77fb6020526040812080548692906134e69084906154a7565b90915550505b8215613653576001600160a01b03861660008181527f1e44d42069ffd753ae807626607424104305839471bec822ca5d6f124b9aedc26020908152604082207fbb4c205d2fd5d5c0ff4ab723a86b46f24bafcc7dfe57b1f587a8c4b4e7fe20148054825460018082018555938652848620015580548083019091557f1a9da9df5228063911fc9e2eeeeb0947ba5ece46300a8350802ead310ac7fabe0187905560459091527fa00cd725958365f67c8fb506a84ce041d17da3d1c6ccea666854800f4fb4a1a78054918201815582527fe1ebf6540861325361fc79044c73d114c17d9738004fc070df318ddd3712eeeb0180546001600160a01b031916909217909155602d80548592906136019084906154a7565b90915550506001600160a01b03861660009081527f3a3bf5be96411ff9d5f855a7704139f4ec9f51f138705d6701eedd07d2de62e360205260408120805485929061364d9084906154a7565b90915550505b81156137ba576001600160a01b03861660008181527f348d2f2a77454e77220be4c387a6089a9d94a7c346d817fa305a22fd69ad29566020908152604082207f45b807389775ad05c7cd9109cde6b930048fc115975326a747c8e4a5232f1e828054825460018082018555938652848620015580548083019091557f9664c1be2e7f8518337ceb7152727d97f5badc78a2760813981f68cbf9db52a30186905560459091527fbf7117fd8e3d22086f16a7a3bcd7ecefc20d1aac8a1c838478c374eb3b50eb718054918201815582527f7648364ed8ae3c32f327b6534aa96210ca84ab25ae2276ce969ac3d9889a31fc0180546001600160a01b031916909217909155602e80548492906137689084906154a7565b90915550506001600160a01b03861660009081527fedbb1b77625691452b979477ff3fbbcf91f9af081e478ab22e796b1f432c37d76020526040812080548492906137b49084906154a7565b90915550505b8015610e0f576001600160a01b03861660008181527fad0fb13dab86228aac2669e60dd3267d4cc08fdde5504a405cc696a8c6dafc176020908152604082207f0d8114addc107b9906d4b6801726e6398dfeab6fcad9ec1b0042e243f7efef3d8054825460018082018555938652848620015580548083019091557f1d2e23da373404be88e3938e93a2aa3a3611eb1591431ccfcdf04a17d37d9c760185905560459091527fbdc6d4f9a2b88d475ab9bbae8db6fa0600aca241b975a52f3c1c8911b71da75f8054918201815582527f48c59e48f075bdbb06d7ff697c89b46bafc46ce41043f1d71186701ca4eddd770180546001600160a01b031916909217909155602f80548392906138cf9084906154a7565b90915550506001600160a01b03861660009081527f288b2d47c2a96aa14eb9e2779880bb6d1bd5093b6dbb3a4e34f5fe39f8ff005d60205260408120805483929061391b9084906154a7565b9091555050505050505050565b600060646139378360146154f5565b6139419190615514565b90506001600160a01b03841615613cfe5760005b60008481526047602090815260408083206001600160a01b0389168452909152902054811015613cfc5760008481526047602090815260408083206001600160a01b038916845290915281208054839081106139b3576139b361557f565b9060005260206000200154905060006044600087815260200190815260200160002082815481106139e6576139e661557f565b906000526020600020015490506000811115613ce757838110613b7d5760008681526046602090815260408083206001600160a01b038b16845290915281208054869290613a35908490615490565b90915550506000868152604460205260409020805485919084908110613a5d57613a5d61557f565b906000526020600020016000828254613a769190615490565b9091555060009050670de0b6b3a764000060258860058110613a9a57613a9a61557f565b0154613aa690876154f5565b613ab09190615514565b9050600061271060368960068110613aca57613aca61557f565b0154613ad690846154f5565b613ae09190615514565b9050613aec8183615490565b6001600160a01b038a166000908152603e602052604081206006018054909190613b179084906154a7565b90915550613b2790508183615490565b6001600160a01b038a166000908152603e602052604081206008018054909190613b529084906154a7565b9091555050600a546000965060ff1615613b7457613b74896124118385615490565b50505050613cfc565b60008681526046602090815260408083206001600160a01b038b16845290915281208054839290613baf908490615490565b90915550506000868152604460205260408120805484908110613bd457613bd461557f565b90600052602060002001819055506000670de0b6b3a764000060258860058110613c0057613c0061557f565b0154613c0c90846154f5565b613c169190615514565b9050600061271060368960068110613c3057613c3061557f565b0154613c3c90846154f5565b613c469190615514565b9050613c528183615490565b6001600160a01b038a166000908152603e602052604081206006018054909190613c7d9084906154a7565b90915550613c8d90508183615490565b6001600160a01b038a166000908152603e602052604081206008018054909190613cb89084906154a7565b90915550613cc890508387615490565b600a5490965060ff1615613ce457613ce4896124118385615490565b50505b50508080613cf490615564565b915050613955565b505b6000816064613d0e85601e6154f5565b613d189190615514565b613d2291906154a7565b9050600060308560068110613d3957613d3961557f565b01549050805b600086815260446020526040902054811015614114576000868152604460205260408120805483908110613d7557613d7561557f565b90600052602060002001549050600081111561410157838110613f50576000878152604560205260408120805484908110613db257613db261557f565b60009182526020808320909101548a83526046825260408084206001600160a01b0390921680855291909252908220805491935087929091613df5908490615490565b90915550506000888152604460205260409020805486919085908110613e1d57613e1d61557f565b906000526020600020016000828254613e369190615490565b9091555060009050670de0b6b3a764000060258a60058110613e5a57613e5a61557f565b0154613e6690886154f5565b613e709190615514565b9050600061271060368b60068110613e8a57613e8a61557f565b0154613e9690846154f5565b613ea09190615514565b9050613eac8183615490565b6001600160a01b0384166000908152603e602052604081206006018054909190613ed79084906154a7565b90915550613ee790508183615490565b6001600160a01b0384166000908152603e602052604081206008018054909190613f129084906154a7565b9091555050600a5460ff1615613f3057613f30836124118385615490565b8460308b60068110613f4457613f4461557f565b01555061411492505050565b6000878152604560205260408120805484908110613f7057613f7061557f565b60009182526020808320909101548a83526046825260408084206001600160a01b0390921680855291909252908220805491935084929091613fb3908490615490565b90915550506000888152604460205260408120805485908110613fd857613fd861557f565b90600052602060002001819055506000670de0b6b3a764000060258a600581106140045761400461557f565b015461401090856154f5565b61401a9190615514565b9050600061271060368b600681106140345761403461557f565b015461404090846154f5565b61404a9190615514565b90506140568183615490565b6001600160a01b0384166000908152603e6020526040812060060180549091906140819084906154a7565b9091555061409190508183615490565b6001600160a01b0384166000908152603e6020526040812060080180549091906140bc9084906154a7565b909155506140cc90508488615490565b96508460308b600681106140e2576140e261557f565b0155600a5460ff16156140fd576140fd836124118385615490565b5050505b508061410c81615564565b915050613d3f565b50505050505050565b6004805460405163743fc74560e01b81526001600160a01b03858116938201939093526000929091169063743fc74590602401602060405180830381865afa15801561416d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419191906154bf565b905060005b600a8110156107ed576001600160a01b0382161561451457600480546040516380f78b3f60e01b81526001600160a01b038581169382019390935260006024820181905292909116906380f78b3f90604401602060405180830381865afa158015614205573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422991906154dc565b9050601582600a811061423e5761423e61557f565b0154811061450e576004805460405163743fc74560e01b81526001600160a01b03868116938201939093526000929091169063743fc74590602401602060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ba91906154bf565b9050821580156142cb575060058210155b156143cd576000612710600b85600a81106142e8576142e861557f565b01546142f59060026154f5565b6142ff90886154f5565b6143099190615514565b6001600160a01b0383166000908152603e60205260409020600a015490915060ff1615614345576143458261271060065484610d3b91906154f5565b6001600160a01b0385166000908152603e6020526040812060010180548392906143709084906154a7565b90915550506001600160a01b0385166000908152603e6020526040812060080180548392906143a09084906154a7565b9091555050600a5460ff16156143c7576001546143c7906001600160a01b03168683614f59565b5061450c565b826143f6576000612710600b85600a81106143ea576143ea61557f565b01546142ff90886154f5565b6001600160a01b0384166000908152603f6020526040902054685150ae84a8cdf000001161450c576000612710600b85600a81106144365761443661557f565b015461444290886154f5565b61444c9190615514565b6001600160a01b0383166000908152603e60205260409020600a015490915060ff1615614488576144888261271060065484610d3b91906154f5565b6001600160a01b0385166000908152603e6020526040812060010180548392906144b39084906154a7565b90915550506001600160a01b0385166000908152603e6020526040812060080180548392906144e39084906154a7565b9091555050600a5460ff161561450a5760015461450a906001600160a01b03168683614f59565b505b505b50614519565b6107ed565b6004805460405163743fc74560e01b81526001600160a01b038581169382019390935291169063743fc74590602401602060405180830381865afa158015614565573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061458991906154bf565b91508061459581615564565b915050614196565b6004805460405163743fc74560e01b81526001600160a01b03858116938201939093526000929091169063743fc74590602401602060405180830381865afa1580156145ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461191906154bf565b905060005b6008548110156107ed576001600160a01b03821615614514576001600160a01b0382166000908152604060208190529020541561493b576001600160a01b0382166000908152604060208190528120546127109061467490866154f5565b61467e9190615514565b6001546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156146cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146ef91906154dc565b1061477c576001600160a01b0383166000908152603e60205260408120600401805483929061471f9084906154a7565b90915550506001600160a01b0383166000908152603e60205260408120600801805483929061474f9084906154a7565b9091555050600a5460ff161561477657600154614776906001600160a01b03168483614f59565b506107ed565b600154600254604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528392919091169063dd62ed3e90604401602060405180830381865afa1580156147d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f691906154dc565b1015801561487657506001546002546040516370a0823160e01b81526001600160a01b039182166004820152839291909116906370a0823190602401602060405180830381865afa15801561484f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487391906154dc565b10155b15614904576001600160a01b0383166000908152603e6020526040812060040180548392906148a69084906154a7565b90915550506001600160a01b0383166000908152603e6020526040812060080180548392906148d69084906154a7565b9091555050600a5460ff161561477657600254600154614776916001600160a01b039182169116858461309a565b6001600160a01b0383166000908152603e60205260408120600401805483929061492f9084906154a7565b909155506107ed915050565b6004805460405163743fc74560e01b81526001600160a01b038581169382019390935291169063743fc74590602401602060405180830381865afa158015614987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149ab91906154bf565b9150806149b781615564565b915050614616565b60006149d468a2a15d09519be0000083615514565b6149e790681043561a88293000006154f5565b6001600160a01b0384166000908152603e6020526040902060020154909150811115614dfe576001600160a01b0383166000908152603e6020526040812060020154614a339083615490565b6004805460405163743fc74560e01b81526001600160a01b0388811693820193909352929350603e926000929091169063743fc74590602401602060405180830381865afa158015614a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aad91906154bf565b6001600160a01b031681526020810191909152604001600020600a015460ff1615614b58576004805460405163743fc74560e01b81526001600160a01b0387811693820193909352614b58929091169063743fc74590602401602060405180830381865afa158015614b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b4791906154bf565b61271060065484610d3b91906154f5565b6001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015614ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bc491906154dc565b10614c4b576001600160a01b0384166000908152603e602052604081206002018054839290614bf49084906154a7565b90915550506001600160a01b0384166000908152603e602052604081206008018054839290614c249084906154a7565b9091555050600a5460ff161561451457600154614514906001600160a01b03168583614f59565b600154600254604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528392919091169063dd62ed3e90604401602060405180830381865afa158015614ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cc591906154dc565b10158015614d4557506001546002546040516370a0823160e01b81526001600160a01b039182166004820152839291909116906370a0823190602401602060405180830381865afa158015614d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d4291906154dc565b10155b15614dd3576001600160a01b0384166000908152603e602052604081206002018054839290614d759084906154a7565b90915550506001600160a01b0384166000908152603e602052604081206008018054839290614da59084906154a7565b9091555050600a5460ff161561451457600254600154614514916001600160a01b039182169116868461309a565b6001600160a01b0384166000908152603e6020526040812060020180548392906107e79084906154a7565b505050565b6004805460405163743fc74560e01b81526001600160a01b03858116938201939093526000929091169063743fc74590602401602060405180830381865afa158015614e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e7791906154bf565b905060005b6009548110156107ed576001600160a01b03821615614514576001600160a01b0382166000908152604260209081526040808320600754845290915281208054859290614eca9084906154a7565b90915550614ed59050565b6004805460405163743fc74560e01b81526001600160a01b038581169382019390935291169063743fc74590602401602060405180830381865afa158015614f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f4591906154bf565b915080614f5181615564565b915050614e7c565b6040516001600160a01b038316602482015260448101829052614dfe90849063a9059cbb60e01b906064016130ce565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061502e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166150ab9092919063ffffffff16565b805190915015614dfe578080602001905181019061504c9190615662565b614dfe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610857565b60606150ba84846000856150c2565b949350505050565b6060824710156151235760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610857565b6001600160a01b0385163b61517a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610857565b600080866001600160a01b0316858760405161519691906156a9565b60006040518083038185875af1925050503d80600081146151d3576040519150601f19603f3d011682016040523d82523d6000602084013e6151d8565b606091505b50915091506151e88282866151f3565b979650505050505050565b60608315615202575081612cbf565b8251156152125782518084602001fd5b8160405162461bcd60e51b815260040161085791906156c5565b60006020828403121561523e57600080fd5b5035919050565b6000806040838503121561525857600080fd5b50508035926020909101359150565b6001600160a01b038116811461294a57600080fd5b60006020828403121561528e57600080fd5b8135612cbf81615267565b600080604083850312156152ac57600080fd5b82356152b781615267565b946020939093013593505050565b60008083601f8401126152d757600080fd5b50813567ffffffffffffffff8111156152ef57600080fd5b6020830191508360208260051b850101111561530a57600080fd5b9250929050565b6000806000806040858703121561532757600080fd5b843567ffffffffffffffff8082111561533f57600080fd5b61534b888389016152c5565b9096509450602087013591508082111561536457600080fd5b50615371878288016152c5565b95989497509550505050565b60008060008060008060008060008060006101608c8e03121561539f57600080fd5b8b359a5060208c0135995060408c01356153b881615267565b985060608c01356153c881615267565b975060808c01356153d881615267565b9a9d999c50979a96999860a0880135985060c08801359760e081013597506101008101359650610120810135955061014001359350915050565b6000806040838503121561542557600080fd5b82359150602083013561543781615267565b809150509250929050565b60008060006060848603121561545757600080fd5b83359250602084013561546981615267565b929592945050506040919091013590565b634e487b7160e01b600052601160045260246000fd5b6000828210156154a2576154a261547a565b500390565b600082198211156154ba576154ba61547a565b500190565b6000602082840312156154d157600080fd5b8151612cbf81615267565b6000602082840312156154ee57600080fd5b5051919050565b600081600019048311821515161561550f5761550f61547a565b500290565b60008261553157634e487b7160e01b600052601260045260246000fd5b500490565b60208082526014908201527314d85b1948185b1c9958591e481cdd185c9d195960621b604082015260600190565b60006000198214156155785761557861547a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80518015158114612cce57600080fd5b60008060008060008060008060008060006101608c8e0312156155c757600080fd5b8b519a5060208c0151995060408c0151985060608c0151975060808c0151965060a08c0151955060c08c0151945060e08c015193506101008c015192506101208c015191506156196101408d01615595565b90509295989b509295989b9093969950565b6020808252601e908201527f537461676577697365207368617265206973206e6f7420636f72726563740000604082015260600190565b60006020828403121561567457600080fd5b612cbf82615595565b60005b83811015615698578181015183820152602001615680565b838111156107ed5750506000910152565b600082516156bb81846020870161567d565b9190910192915050565b60208152600082518060208401526156e481604085016020870161567d565b601f01601f1916919091016040019291505056fea2646970667358221220d4e628dc255f6e10b890848c4b93e36450cd396abd269fe54fabf0fbce83d54a64736f6c634300080a0033
1. FundWallet

2. Referrals

3. TUSD

4. TreasuryWallet

5. incentivePerStage

6. investmentPackages

7. mapNewAddress

8. mapTBCHoldingInfo

9. mapUserInfo

10. monthlyBonusLoop

11. monthlyPurchase

12. monthlySale

13. monthlySaleClaimed

14. nextRewardDrain

15. owner

16. pendingReward

17. positionWiseTBC

18. positionWiseWallet

19. pricePerStage

20. referralBonus

21. royaltyIncentive

22. saleEnable

23. stageWiseAvailableTBC

24. stageWiseCurrentSellPosition

25. stageWiseUserPosition

26. stageWiseUserTBC

27. statusPerStage

28. teamRequiredForBonus

29. totalBusiness

30. workingBonus

31. workingBonusLoop

1. addReferral
2. buy
3. claimHoldingTBC
4. claimMonthlyReward
5. claimTBC
6. renounceOwnership
7. setSellPosition
8. setStageWiseData
9. setTeam
10. setWorkingBonus
11. startSale
12. transferOwnership
13. updateTeam
14. withdrawEarning

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met.