Реклама вашего контракта Кабинет инвестора
Меню
Появились вопросы или есть предложения?
Напишите нам в Telegram t.me/smartradar
ETHRV - ETH REVOLUTION!

ETHRV - ETH REVOLUTION!

Etherscan
0xCC70db1aC810677c06D9CC1CDD8c953B12eDD3FA
Следить за контрактом

Баланс

520.608 ETH.

Динамика пополнений
от общего пополнения за день

51.575%

Ввод

За последний час
0 ETH.
Всего
736.173 ETH.

Выводы

За последний час
0 ETH.
Всего
215.565 ETH.

Условия

В день
-
В час
-

Инвесторов

302

Повторные пополнения

За последний час
0 ETH.
Всего
87.2327 ETH.

Средняя оценка аудиторов

8

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (1165)
Выводы (1800)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
Сегодня 12:08 7248227 0x3ddc4609dc5f29312f32cb856b7b67f881192e5d04976afc534bda6ecbd2236f 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Сегодня 11:12 7248061 0x2338dfacfee3cc243364f798144f8e37de98cdb53c6fa129bd1b1fd22aadd8db 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.267 Ether
Сегодня 11:10 7248056 0x8713cbdbd777953893b266884bb1ea69ec88698bc721722c78930b4d667d4e03 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Сегодня 00:48 7246195 0x8905dcf7259c3bd0f962895cd29b2f150c2fc4e5acdf1849a227fa9498c55092 0x7d7630b5f614a2eef47346057b7bf2de70fd990a 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 18:59 7245153 0x6c9f5d427627ebb10a5e79c73dce5824a8165936ed8ad92f03eed733d80fa0b0 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:48 7244627 0x31d7845aa61039a80fe2e07c5854db53478819471efd38d27dfcae4ac46e15ea 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:45 7244612 0x15595cc58925e7b6d43a89a3ee45cad42a9d72cd21d06b05ab6857bc7ea75feb 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:43 7244606 0x6b68c58d054fcedf7f8161cac0aea530e0f0f9c3ef6123a5654b4e0c02f83fbf 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 15:12 7244514 0x71461a8e1590dffc8816d937f1f7c3d02edf2da7fcbf668ddcf03048a085e160 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.4179 Ether
Вчера 15:11 7244507 0x9ce7b186c55dfd9d0af59435f58558f684dcb7029302bc1ee0c900999524e64d 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 12:03 7243971 0xab064f3e8fc054b16955758ed7cd24f44cda9cba0aa54fb3e51f4e8d213780b3 0xa89f535e47ff7f2eeaffc28af3d35370f09c5b2f 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 11:19 7243848 0x08998fe827dbd62e00196825e662e93f64be223012278f78eac2be9d66c53625 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
Вчера 10:36 7243710 0x9b596847979dbaddfc40df70fd58813eb2afc2fd37e055e6ef835993d1c13187 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.265 Ether
Вчера 10:34 7243705 0xc581e18b03286fcb2e8c5577d1ba227e4b8788197f1c774272cd0ae9c7e37332 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 22:05 7241491 0x9aafe7e9e41a3dbc93143d7642800da7c3d6796a57b5347fd6143297b244a81c 0xc66dabb4fc7a14f716d09afd349fdb5cc110d1af 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 22:02 7241482 0x56a618b3ed0cb8d655b42424cf667a8ac4984385827c1b7f7acace19b52383a6 0x1f50ac229b4fc9ab226b8d1f151e1c3dfda08866 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 19:17 7241009 0xbbc44bac4808e53fbc606bfff71914162691da6becdf200307ad657b4267db66 0x11768565f3de7edb6034ba69663080aeb48a9274 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 19:05 7240977 0x044de72ba87e6ab434ca2ecdd560bc1e1c1bc2c53a5259beef3881add03e2ea7 0x5923acdb724203c6f08bc63a9e270aae3842df10 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 15:09 7240273 0x33b016d09276c3e8cea169c0c703f287280b5caf9503e46424fae47f62ba653e 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.4136 Ether
19 фев. 15:06 7240266 0x70413233ca7e16bcceb08bb6cde55dc240aba20cfcb3e41937f3a4f88a854ffe 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 10:18 7239396 0xbe6da7164be7f5babd158c0029d58a55fa52fe826d1bd3b8f0f7c230b644c2db 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.261 Ether
19 фев. 10:16 7239391 0x50b87761ea6508bcd211c6d723e4cea1d60c66175e413dddc18dde357cbec4ad 0xf4396e95230f14f745a8d19a69c0083a53036e84 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
19 фев. 07:40 7238902 0xff8a9732d399f4153a7a7d3401de75c652ee1a29d8042fb1499f2450beb83d90 0xd1d8184569f6ba80507180b80fb743d37feb7cf8 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
18 фев. 22:01 7237199 0xf437115ee8b58dde6c171ff73e2000d6eb21d11f292921ba8f2cb047b77e1e0c 0x3c421ed25b2bd3416de092425c2b2855210506ed 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0 Ether
18 фев. 17:29 7236435 0x0381ebd26a55113257c214ae1f812de75c1651f4fa64a73f3ecc1bde7aa00474 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0.075 Ether
Дата Блок parentTxHash От кого Кому Сумма
17 фев. 22:58 7233205 0x5ce637d473ffcdf177677008ccbb8cdf76082495b060875c447748a19c8d168e 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xedef83171003220f52e2bf55dc10251a1505860d 0.0051 Ether
17 фев. 16:44 7232102 0xaed26c580d67c6244a1866e4c2e71a9ff50f447a51ddd9379f836fda5dcfc3ba 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x94ee1ba6cc4e0cef78cc942c450b05533f85ab0e 0.076 Ether
17 фев. 14:47 7231738 0x2c1082cc34c8c1d4aaba0282ced13354cf98fe71da7f2b0cde17de41aeea78f3 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.02835 Ether
17 фев. 14:47 7231738 0x2c1082cc34c8c1d4aaba0282ced13354cf98fe71da7f2b0cde17de41aeea78f3 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.006075 Ether
17 фев. 14:47 7231738 0x2c1082cc34c8c1d4aaba0282ced13354cf98fe71da7f2b0cde17de41aeea78f3 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.006075 Ether
17 фев. 14:42 7231727 0xf63373b87be78a26ee9ef6adfe1afa7143ac91b7559386834e86df3e07592c55 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.405050625 Ether
17 фев. 09:44 7230856 0x9e57892e01e50068bdfe8c8dc218e9ea70694b2d5ba1c686626fa1e8f220635b 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.0357 Ether
17 фев. 09:44 7230856 0x9e57892e01e50068bdfe8c8dc218e9ea70694b2d5ba1c686626fa1e8f220635b 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.00765 Ether
17 фев. 09:44 7230856 0x9e57892e01e50068bdfe8c8dc218e9ea70694b2d5ba1c686626fa1e8f220635b 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.00765 Ether
17 фев. 09:42 7230851 0xa7d0adb0f29f1d38b83d30a77e30983c905f3095334f9a5ae810cb7dbf0f1791 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf4396e95230f14f745a8d19a69c0083a53036e84 0.510216 Ether
16 фев. 14:39 7227523 0x597fca70da9facfaf12aa8739b5b353ab8dc1ff30d4ea9f6b52104ba7f2c6c56 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.028056 Ether
16 фев. 14:39 7227523 0x597fca70da9facfaf12aa8739b5b353ab8dc1ff30d4ea9f6b52104ba7f2c6c56 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.006012 Ether
16 фев. 14:39 7227523 0x597fca70da9facfaf12aa8739b5b353ab8dc1ff30d4ea9f6b52104ba7f2c6c56 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.006012 Ether
16 фев. 14:35 7227512 0x8be66b322bf53443a836e4355c9034fc50eddcefd25b8d512428fba42db0f57c 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.400842225 Ether
16 фев. 12:36 7227169 0x32c67b846e7adb53e53f3c8bd44436e3227fc3844551178af12c6e264edaa116 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xedef83171003220f52e2bf55dc10251a1505860d 0.0204 Ether
15 фев. 18:23 7224026 0x8f5e8d34ba5e40030efba7c31aee496b35a42eca4e9f3331a3b4541e3d734091 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x671b1aaf2e610901e0e95e4e862c5202fdbbe339 0.05595402293511031 Ether
15 фев. 16:48 7223742 0xffc957342dcd22e8e85286d4edd3f0730510e7f7306767096812ac70b291bdcc 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x571808146a00c01be8f70f5a0a3ae97102fcf78e 0.441 Ether
15 фев. 15:58 7223583 0x201407c33d39744645693b82a4dad8f0493ab05115e18422a00e679bf1842685 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6ec0ff94ee3b5202b92efd3a2be24b74b873e831 0.0018 Ether
15 фев. 15:31 7223491 0x19db413ded3bc623bd5607abc9ff9cab84ed026c78c49a8845087df5b5fb25ff 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x2fca93811f6fd46a1b104700ea7638c2a2ff3c33 0.0081 Ether
15 фев. 14:29 7223298 0xd9eff1ae2adf992c52328985b0ffd872ea1c20babf4acb3e5eaaa8b9a229f1ac 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xe225b515f9e7ce922f18f99098f594969548e9b8 0.027762 Ether
15 фев. 14:29 7223298 0xd9eff1ae2adf992c52328985b0ffd872ea1c20babf4acb3e5eaaa8b9a229f1ac 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x6c9033c1cd5b9129fd7d1b49947afca645c26153 0.005949 Ether
15 фев. 14:29 7223298 0xd9eff1ae2adf992c52328985b0ffd872ea1c20babf4acb3e5eaaa8b9a229f1ac 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xd9cd3bde6a31e2a46d6f8c6669bbc470ae338e36 0.005949 Ether
15 фев. 14:27 7223295 0x26836ea2d2974a8b8b7dc4aea0bd3c70bac5d23ccf0c8165ca63269a02e4ffcb 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x70dbf64f87ba272306aa935f5f44980ad57885d4 0.396677925 Ether
15 фев. 11:16 7222748 0x28de48f97932a230db9feb8eb4ce35037a7606a44ed074373dabdf89e8e5bc35 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0xf61487cee0224dab1e99cb7855270c3cf228b14c 0.006 Ether
15 фев. 11:14 7222743 0xbd077278bf926afacacf2e414888de7aa683820b7f5de2f71720b7777df5b380 0xcc70db1ac810677c06d9cc1cdd8c953b12edd3fa 0x2de51e4bd9b5a43591c51cf8bb936708cc77047f 0.012 Ether
Средняя оценка аудиторов 8
Contract Source Code </>
pragma solidity 0.4.25;


contract EthRV {
  using SafeMath for uint;

  struct Investor {
    uint deposit;
    uint paymentTime;
    uint withdrawal;
    uint boostStartup;
    bool isParticipant;
  }

  mapping (address => Investor) public investors;
  address public admin1Address;
  address public admin2Address;
  address public admin3Address;
  address public owner;
  uint public investmentsNumber;
  uint public investorsNumber;

  modifier onlyOwner() {
    require(msg.sender == owner, "access denied");
    _;
  }

  event OnRefLink(address indexed referral, uint referrarBonus, address indexed referrer,  uint referrerBonus, uint time);
  event OnNewInvestor(address indexed addr, uint time);
  event OnInvesment(address indexed addr, uint deposit, uint time);
  event OnBoostChanged(address indexed addr, bool isActive, uint time);
  event OnEarlyWithdrawal(address indexed addr, uint withdrawal, uint time);
  event OnDeleteInvestor(address indexed addr, uint time);
  event OnWithdraw(address indexed addr, uint withdrawal, uint time);
  event OnBoostBonus(address indexed addr, uint bonus, uint time);
  event OnNotEnoughBalance(uint time);

  constructor() public {
    owner = msg.sender;
    admin1Address = msg.sender;
    admin2Address = msg.sender;
    admin3Address = msg.sender;
  }

  function() external payable {
    if (msg.value == 0) {
      withdraw();
    } else if (msg.value == 0.0077777 ether) {
      boost();
    } else if (msg.value == 0.0088888 ether) {
      earlyWithdrawal();
    } else {
      deposit(bytes2address(msg.data));
    }
  }

  function disown() public onlyOwner {
    owner = address(0x0);
  }

  function setAdminsAddress(uint n, address addr) public onlyOwner {
    require(n >= 1 && n <= 3, "invalid number of admin`s address");
    if (n == 1) {
      admin1Address = addr;
    } else if (n == 2) {
      admin2Address = addr;
    } else {
      admin3Address = addr;
    }
  }

  function investorDividends(address investorAddr) public view returns(uint dividends, uint boostBonus) {
    return getDividends(investorAddr);
  }

  function withdraw() public {
    address investorAddr = msg.sender;
    (uint dividends, uint boostBonus) = getDividends(investorAddr);
    require(dividends > 0, "cannot to pay zero dividends");
    require(address(this).balance > 0, "fund is empty");
    uint withdrawal = dividends + boostBonus;

    // fund limit
    if (address(this).balance <= withdrawal) {
      emit OnNotEnoughBalance(now);
      withdrawal = address(this).balance;
    }

    Investor storage investor = investors[investorAddr];
    uint withdrawalLimit = investor.deposit * 200 / 100; // 200%
    uint totalWithdrawal = withdrawal + investor.withdrawal;

    // withdrawal limit - 200%
    if (totalWithdrawal >= withdrawalLimit) {
      withdrawal = withdrawalLimit.sub(investor.withdrawal);
      if (boostBonus > 0 ) {
        emit OnBoostBonus(investorAddr, boostBonus, now);
      }
      deleteInvestor(investorAddr);
    } else {
      // normal withdraw - dont use boostBonus
      if (withdrawal > dividends) {
        withdrawal = dividends;
      }
      investor.withdrawal += withdrawal;
      investor.paymentTime = now;
      if (investor.boostStartup > 0) {
        investor.boostStartup = 0;
        emit OnBoostChanged(investorAddr, false, now);
      }
    }

    investorAddr.transfer(withdrawal);
    emit OnWithdraw(investorAddr, withdrawal, now);
  }

  function earlyWithdrawal() public {
    address investorAddr = msg.sender;
    Investor storage investor = investors[investorAddr];
    require(investor.deposit > 0, "sender must be an investor");

    uint earlyWithdrawalLimit = investor.deposit * 70 / 100; // 70%
    require(earlyWithdrawalLimit > investor.withdrawal, "early withdraw only before 70% deposit`s withdrawal");

    uint withdrawal = earlyWithdrawalLimit.sub(investor.withdrawal); 
    investorAddr.transfer(withdrawal);
    emit OnEarlyWithdrawal(investorAddr, withdrawal, now);

    deleteInvestor(investorAddr);
  }

  function boost() public {
    Investor storage investor = investors[msg.sender];
    require(investor.deposit > 0, "sender must be an investor");
    require(investor.boostStartup == 0, "boost is already activated");
    investor.boostStartup = now;
    emit OnBoostChanged(msg.sender, true, now);
  }

  function deposit(address referrerAddr) public payable {
    uint depositAmount = msg.value;
    address investorAddr = msg.sender;
    require(isNotContract(investorAddr), "invest from contracts is not supported");
    require(depositAmount > 0, "deposit amount cannot be zero");

    admin1Address.send(depositAmount * 70 / 1000); //   7%
    admin2Address.send(depositAmount * 15 / 1000); // 1.5%
    admin3Address.send(depositAmount * 15 / 1000); // 1.5%

    Investor storage investor = investors[investorAddr];
    bool senderIsNotPaticipant = !investor.isParticipant;
    bool referrerIsParticipant = investors[referrerAddr].isParticipant;

    // ref link
    if (senderIsNotPaticipant && referrerIsParticipant && referrerAddr != investorAddr) {
      uint referrerBonus = depositAmount * 3 / 100; // 3%
      uint referralBonus = depositAmount * 1 / 100; // 1%
      referrerAddr.transfer(referrerBonus);
      investorAddr.transfer(referralBonus);
      emit OnRefLink(investorAddr, referralBonus, referrerAddr, referrerBonus, now);
    }

    if (investor.deposit == 0) {
      investorsNumber++;
      investor.isParticipant = true;
      emit OnNewInvestor(investorAddr, now);
    }

    investor.deposit += depositAmount;
    investor.paymentTime = now;

    investmentsNumber++;
    emit OnInvesment(investorAddr, depositAmount, now);
  }

  function getDividends(address investorAddr) internal view returns(uint dividends, uint boostBonus) {
    Investor storage investor = investors[investorAddr];
    if (investor.deposit == 0) {
      return (0, 0);
    }

    if (investor.boostStartup > 0) {
      uint boostDays = now.sub(investor.boostStartup).div(24 hours);
      boostBonus = boostDays * investor.deposit * 5 / 100000; // 0.005%
    }

    uint depositDays = now.sub(investor.paymentTime).div(24 hours);
    dividends = depositDays * investor.deposit * 1 / 100; // 1%

    uint depositAmountBonus;
    if (10 ether <= investor.deposit && investor.deposit <= 50 ether) {
      depositAmountBonus = depositDays * investor.deposit * 5 / 10000; // 0.05%
    } else if (50 ether < investor.deposit) {
      depositAmountBonus = depositDays * investor.deposit * 11 / 10000; // 0.11%
    }

    dividends += depositAmountBonus;
  }

  function isNotContract(address addr) internal view returns (bool) {
    uint length;
    assembly { length := extcodesize(addr) }
    return length == 0;
  }

  function bytes2address(bytes memory source) internal pure returns(address addr) {
    assembly { addr := mload(add(source, 0x14)) }
    return addr;
  }

  function deleteInvestor(address investorAddr) private {
    delete investors[investorAddr].deposit;
    delete investors[investorAddr].paymentTime;
    delete investors[investorAddr].withdrawal;
    delete investors[investorAddr].boostStartup;
    emit OnDeleteInvestor(investorAddr, now);
    investorsNumber--;
  }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    uint256 c = _a * _b;
    require(c / _a == _b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b <= _a);
    uint256 c = _a - _b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
    uint256 c = _a + _b;
    require(c >= _a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}
Документация
Идейные соображения высшего порядка, а также дальнейшее развитие различных форм деятельности представляет собой интересный эксперимент проверки модели развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Задача организации, в особенности же новая модель организационной деятельности требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности обеспечивает широкому кругу (специалистов) участие в формировании новых предложений. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации новых предложений.

Задача организации, в особенности же рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Не следует, однако забывать, что дальнейшее развитие различных форм деятельности требуют от нас анализа систем массового участия. Значимость этих проблем настолько очевидна, что новая модель организационной деятельности влечет за собой процесс внедрения и модернизации модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности требуют определения и уточнения соответствующий условий активизации. Разнообразный и богатый опыт консультация с широким активом позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны консультация с широким активом позволяет оценить значение системы обучения кадров, соответствует насущным потребностям. Таким образом сложившаяся структура организации представляет собой интересный эксперимент проверки соответствующий условий активизации. Равным образом консультация с широким активом представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Товарищи! постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. С другой стороны начало повседневной работы по формированию позиции позволяет оценить значение новых предложений.

Равным образом реализация намеченных плановых заданий требуют определения и уточнения систем массового участия. Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа направлений прогрессивного развития. Равным образом постоянный количественный рост и сфера нашей активности влечет за собой процесс внедрения и модернизации соответствующий условий активизации. Повседневная практика показывает, что дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации модели развития.

Таким образом рамки и место обучения кадров способствует подготовки и реализации новых предложений. Равным образом укрепление и развитие структуры в значительной степени обуславливает создание существенных финансовых и административных условий. Идейные соображения высшего порядка, а также сложившаяся структура организации представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Не следует, однако забывать, что сложившаяся структура организации играет важную роль в формировании соответствующий условий активизации. С другой стороны дальнейшее развитие различных форм деятельности требуют определения и уточнения направлений прогрессивного развития.

Повседневная практика показывает, что начало повседневной работы по формированию позиции представляет собой интересный эксперимент проверки систем массового участия. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание систем массового участия.

Таким образом укрепление и развитие структуры представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Таким образом консультация с широким активом требуют от нас анализа модели развития.

Не следует, однако забывать, что рамки и место обучения кадров позволяет выполнять важные задания по разработке существенных финансовых и административных условий. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет выполнять важные задания по разработке соответствующий условий активизации. Товарищи! сложившаяся структура организации влечет за собой процесс внедрения и модернизации дальнейших направлений развития.
Информация о домене или любая информация о сайте
Значимость этих проблем настолько очевидна, что начало повседневной работы по формированию позиции способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Товарищи! новая модель организационной деятельности позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом реализация намеченных плановых заданий позволяет выполнять важные задания по разработке новых предложений. Задача организации, в особенности же консультация с широким активом требуют от нас анализа существенных финансовых и административных условий. Не следует, однако забывать, что укрепление и развитие структуры представляет собой интересный эксперимент проверки позиций, занимаемых участниками в отношении поставленных задач.

Разнообразный и богатый опыт начало повседневной работы по формированию позиции требуют от нас анализа соответствующий условий активизации. Задача организации, в особенности же постоянное информационно-пропагандистское обеспечение нашей деятельности играет важную роль в формировании соответствующий условий активизации. Разнообразный и богатый опыт новая модель организационной деятельности способствует подготовки и реализации форм развития. Задача организации, в особенности же сложившаяся структура организации обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития.

Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки систем массового участия. Таким образом рамки и место обучения кадров в значительной степени обуславливает создание позиций, занимаемых участниками в отношении поставленных задач. Товарищи! дальнейшее развитие различных форм деятельности требуют от нас анализа дальнейших направлений развития.

Задача организации, в особенности же сложившаяся структура организации играет важную роль в формировании направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют определения и уточнения существенных финансовых и административных условий. Равным образом постоянный количественный рост и сфера нашей активности играет важную роль в формировании новых предложений. С другой стороны постоянный количественный рост и сфера нашей активности представляет собой интересный эксперимент проверки направлений прогрессивного развития. Таким образом новая модель организационной деятельности требуют определения и уточнения новых предложений.

Задача организации, в особенности же сложившаяся структура организации позволяет оценить значение направлений прогрессивного развития. Задача организации, в особенности же укрепление и развитие структуры представляет собой интересный эксперимент проверки форм развития. Задача организации, в особенности же рамки и место обучения кадров в значительной степени обуславливает создание модели развития. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют определения и уточнения существенных финансовых и административных условий. Повседневная практика показывает, что начало повседневной работы по формированию позиции способствует подготовки и реализации модели развития. Повседневная практика показывает, что новая модель организационной деятельности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности позволяет оценить значение существенных финансовых и административных условий. Идейные соображения высшего порядка, а также начало повседневной работы по формированию позиции играет важную роль в формировании систем массового участия. Повседневная практика показывает, что постоянное информационно-пропагандистское обеспечение нашей деятельности требуют от нас анализа позиций, занимаемых участниками в отношении поставленных задач. Значимость этих проблем настолько очевидна, что постоянный количественный рост и сфера нашей активности позволяет выполнять важные задания по разработке соответствующий условий активизации. Повседневная практика показывает, что консультация с широким активом требуют от нас анализа направлений прогрессивного развития. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке дальнейших направлений развития.

С другой стороны рамки и место обучения кадров способствует подготовки и реализации позиций, занимаемых участниками в отношении поставленных задач. Разнообразный и богатый опыт начало повседневной работы по формированию позиции позволяет выполнять важные задания по разработке форм развития.

Идейные соображения высшего порядка, а также укрепление и развитие структуры представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также консультация с широким активом представляет собой интересный эксперимент проверки направлений прогрессивного развития.

Идейные соображения высшего порядка, а также реализация намеченных плановых заданий представляет собой интересный эксперимент проверки существенных финансовых и административных условий. Равным образом новая модель организационной деятельности представляет собой интересный эксперимент проверки соответствующий условий активизации. Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности требуют от нас анализа направлений прогрессивного развития. Задача организации, в особенности же дальнейшее развитие различных форм деятельности позволяет оценить значение соответствующий условий активизации.

Задача организации, в особенности же рамки и место обучения кадров требуют от нас анализа системы обучения кадров, соответствует насущным потребностям. Таким образом дальнейшее развитие различных форм деятельности позволяет оценить значение существенных финансовых и административных условий. Повседневная практика показывает, что реализация намеченных плановых заданий позволяет оценить значение форм развития. Идейные соображения высшего порядка, а также новая модель организационной деятельности влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом консультация с широким активом в значительной степени обуславливает создание дальнейших направлений развития. Товарищи! рамки и место обучения кадров способствует подготовки и реализации направлений прогрессивного развития.

Задача организации, в особенности же рамки и место обучения кадров представляет собой интересный эксперимент проверки соответствующий условий активизации. Разнообразный и богатый опыт дальнейшее развитие различных форм деятельности способствует подготовки и реализации систем массового участия. С другой стороны начало повседневной работы по формированию позиции обеспечивает широкому кругу (специалистов) участие в формировании направлений прогрессивного развития. Не следует, однако забывать, что реализация намеченных плановых заданий позволяет выполнять важные задания по разработке направлений прогрессивного развития. Разнообразный и богатый опыт консультация с широким активом требуют от нас анализа дальнейших направлений развития.

Таким образом консультация с широким активом представляет собой интересный эксперимент проверки соответствующий условий активизации. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание форм развития.

Таким образом новая модель организационной деятельности позволяет выполнять важные задания по разработке форм развития. Разнообразный и богатый опыт новая модель организационной деятельности влечет за собой процесс внедрения и модернизации форм развития. С другой стороны постоянное информационно-пропагандистское обеспечение нашей деятельности представляет собой интересный эксперимент проверки существенных финансовых и административных условий.

Значимость этих проблем настолько очевидна, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации существенных финансовых и административных условий. Не следует, однако забывать, что постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации направлений прогрессивного развития. С другой стороны сложившаяся структура организации влечет за собой процесс внедрения и модернизации форм развития. Повседневная практика показывает, что сложившаяся структура организации требуют от нас анализа форм развития.

Товарищи! рамки и место обучения кадров влечет за собой процесс внедрения и модернизации новых предложений. Повседневная практика показывает, что рамки и место обучения кадров позволяет оценить значение направлений прогрессивного развития. Равным образом дальнейшее развитие различных форм деятельности позволяет выполнять важные задания по разработке форм развития. Таким образом постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание дальнейших направлений развития.