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

MYMILLIONS

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

Баланс

8.1919 ETH.

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

0%

Ввод

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

Выводы

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

Условия

В день
-
В час
-

Инвесторов

45

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

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

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

-

Контакты

  • Таймлайн:
  • час
  • день
  • неделя
  • месяц
Пополнения (949)
Выводы (663)
Аудит
Код
API
Комменторы
Дата Блок TxHash От кого Кому Сумма
Сегодня 17:21 7249136 0x93176b20a0f6a29ed9f33eba329f50c6a436d9c3215091420371d116bf0672d3 0x4c5331082ba33e03c0b34020dd4324f28f8f55de 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Сегодня 17:20 7249131 0x4552b5ff3c422f6e71f0818274a0432cacdfa922b68529ae04fddadc4b0e42e2 0x4c5331082ba33e03c0b34020dd4324f28f8f55de 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Сегодня 17:16 7249119 0x5d34ec65ca42c0127220aef0f053a7c96525321e5c22a5d390512eace42adb0c 0x4c5331082ba33e03c0b34020dd4324f28f8f55de 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Вчера 14:13 7244333 0x6c8c0f4ae020588f21b62c4f510d110e1a05ac02eafda2e5f20c951b916723e3 0x835640f908cdcffb09dc16b01cf8cf9aa3010e24 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Вчера 14:11 7244323 0x87f0c06e772cdee0120759591057c69345aedf919f6ef930d78fb0a957267a8c 0x835640f908cdcffb09dc16b01cf8cf9aa3010e24 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Вчера 12:28 7244033 0x154e10f0bafccdeec48077365d804763e4ca7f4f3795a7574b2bd33cdb1d725f 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Вчера 12:26 7244027 0x39db5c6b4ee21b6d7f6761669a5dce4525c702c9a4003ef2af23d6d2431ad1ce 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Вчера 12:24 7244022 0x083add0650ef714d98bd158853f10240954d4d58111404c59d5ab7fec1b0ec91 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
19 фев. 19:51 7241107 0x56bf99958532fc27854176022eae644a02b6454f902462f70889dddc908e1992 0x644f4a37783cdbccc7f64e1741b2ebd7f1ebff96 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
19 фев. 00:07 7237564 0x1e046202d3e9f86f35db2c5caeed6cc5a0bf8ce99a6689d35d794fdcfef38fc2 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
19 фев. 00:06 7237562 0xaeaa240da6d15894aef49590334aa99126107f7f3acf574180baf33e4acdf741 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
19 фев. 00:05 7237556 0x84afc2db68b2220e6e9c66ea95e1cbb0202a3d695f81f8eedcfa59a17ad94657 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
18 фев. 23:19 7237423 0x3b3667d3300cf1ea0175a45bbf90143049d87bc1cddbe400d38b19f760204260 0x3a922acaa264988a5ebbb3d91cafe7ab046c32ca 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
18 фев. 23:04 7237377 0x781621f164e9f8aec3d4cd4b5e7f75c36d7212a527693f0997d6c4084157f2eb 0x644f4a37783cdbccc7f64e1741b2ebd7f1ebff96 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0.05 Ether
18 фев. 23:03 7237373 0xfca00954d6b5491849f517849ee0f7d5b4c8ff6bb3f44b67d6f4325496715634 0x644f4a37783cdbccc7f64e1741b2ebd7f1ebff96 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
18 фев. 23:03 7237371 0xe9b3321105e736035c41703443b0cd9565d92c3ca2894294533739fbd49246e5 0x644f4a37783cdbccc7f64e1741b2ebd7f1ebff96 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
18 фев. 23:01 7237367 0x55d06b672d71dd497ba2629281ae73cae3bb3693d3f1a5e4078a320b4d68a2df 0x644f4a37783cdbccc7f64e1741b2ebd7f1ebff96 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
18 фев. 22:35 7237295 0x8341bf5f6b324fe423a20656df2a6b809c40a40be553971849e07575676ecd52 0x0732319c53aa6229fb8e719857fb3d6a612122ab 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
18 фев. 22:34 7237290 0xf26a14095e64104567585a52c0e7f0aabccbc27cca3d7cf08f10c9303dff29be 0x0732319c53aa6229fb8e719857fb3d6a612122ab 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
18 фев. 22:31 7237276 0x1416fb4f894b7482faac74b5d341ed9bbe66c6d798daac38ee2232db28e74ffe 0x0732319c53aa6229fb8e719857fb3d6a612122ab 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
17 фев. 11:57 7231258 0xbc530c108628671cb9faeb74390c3cccb0279697a53feaf967fc7b09ab2a7e65 0xf4e5e695d1c7285cad1efb9830a4fd18302a6bf3 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
17 фев. 11:45 7231225 0x961cb5f11c7f22a8aee66f1292e3e25128b9f463ba1e22859773af7a98b3cc4a 0xf4e5e695d1c7285cad1efb9830a4fd18302a6bf3 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
17 фев. 10:31 7231007 0xaa83c0c41c38840a07c508ab9510937510669d2f539d1e40dc4d78d33a57ace0 0x15517214b2ee748b001be7d3a12ca13e7c19682b 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
17 фев. 10:31 7231004 0x9f7b84e72bc92b4091c45c329667286cb8c841e8daeaf1c0f2719b43ff2b464e 0x15517214b2ee748b001be7d3a12ca13e7c19682b 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
17 фев. 10:30 7231001 0xde6cddf49498e64ff95c4c13168ce3e01b227c544e28239a13761830b4a23f32 0x15517214b2ee748b001be7d3a12ca13e7c19682b 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0 Ether
Дата Блок parentTxHash От кого Кому Сумма
16 фев. 14:49 7227555 0x5c3118f0de81d88a0f58e1c866c34324f8b96815394fe357704d0241457e72f2 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x332a97d6df06079ad5e6261e26ef674ab74835ed 0.0968764357 Ether
16 фев. 08:36 7226501 0x7dbde60f006e82654016d794fc98dc4863bf253433c370e9f4934c83ced783fa 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0xa36baee01088db46a0315e30d2705c694045983d 0.02700216 Ether
15 фев. 14:38 7223326 0x3ab7962bb27a858d1c967544760abdebef899ccc859c794aee7b4c27585ce1d9 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x1bdd120e6ade6281dbf66d1b2ae166726af70560 0.0100128468 Ether
15 фев. 14:38 7223324 0x917d98a3b160f7f96b9b7ad4015de9e69430dafa5b1d5aa8d2119de6cb679d48 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x1bdd120e6ade6281dbf66d1b2ae166726af70560 0.0119174979 Ether
14 фев. 10:55 7218549 0xdb0e45cca3f908d3241d4b187e594be9c0ca17aa0f3537f2d30c527f435e72eb 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0.00827383134 Ether
14 фев. 10:55 7218547 0xe55a3864dd497268f59639b47b6caff9db268436ec0747f64fa834e85263cb17 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0.0360249791 Ether
14 фев. 07:50 7218042 0xc5cfdfe893051350530de5976306e9d0c27990e5d2492af75e28571a6537cbde 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x4c5331082ba33e03c0b34020dd4324f28f8f55de 0.0135857832 Ether
14 фев. 07:50 7218041 0xac4b699a0f34badc0ba23a1b1c74afc23e15c7e096faa5e549f7a2501d4aba85 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x4c5331082ba33e03c0b34020dd4324f28f8f55de 0.070889004 Ether
13 фев. 19:34 7215899 0xa20f647b666a7e651d25703d4e032c07b4dde54680f56c07f5892f3d7bdcbdc7 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0732319c53aa6229fb8e719857fb3d6a612122ab 0.001595035 Ether
13 фев. 19:32 7215894 0x946e17ee72100a95132e9dbf14dbbcebdcd1bb23fe324c2f4224487f9dc6568e 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0732319c53aa6229fb8e719857fb3d6a612122ab 0.00324971568 Ether
13 фев. 19:31 7215892 0xf7c3ebe8288e9175732e3b67c1a666a6feda4563e0822b1b5091c7b5d658c17c 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0732319c53aa6229fb8e719857fb3d6a612122ab 0.0067944888 Ether
13 фев. 15:36 7215215 0x9720f83806e37450ae47a501ccf0b8125c6c532f648fa0b6e725a15893942115 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x644f4a37783cdbccc7f64e1741b2ebd7f1ebff96 0.0472567557 Ether
12 фев. 10:17 7210066 0xdd6c07a030485d265a39edd30f07862f3c6d8ef268d5d867974e14306d9cde2f 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x835640f908cdcffb09dc16b01cf8cf9aa3010e24 0.0001371406 Ether
11 фев. 20:32 7207614 0x999c4f26e5a029af74165b28c13be5239ba783c0a01d78ebc7a18bfc2aa0ca9a 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0.01116445306 Ether
11 фев. 20:32 7207613 0xda34e396f2916f81046379d8b1952128219ae53768e742d42be180854fb53c5d 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0581cf34d90e63fa939dc5a79bf11cd265990e6c 0.0486110482 Ether
11 фев. 14:06 7206487 0x05a416a1724abe500f57f5be093c994f794655498eb12e1875b482f528a72d86 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x1ea5d1e83ae0c78283860b7c4bc96864ba8dea95 0.10103467935 Ether
10 фев. 15:47 7202588 0xd9b8c9d176fba567a56a2f39d5ac3945a426db046c33b302ae98efa97412bdd7 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0c05ae835f26a8d4a89ae80c7a0e5495e5361ca1 0.0005 Ether
10 фев. 15:47 7202588 0xd9b8c9d176fba567a56a2f39d5ac3945a426db046c33b302ae98efa97412bdd7 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0xe222dd2dd012fcac0256b1f3830cc033418b6889 0.007 Ether
10 фев. 15:26 7202529 0xdfd0fef60633e9b7fe2c0183ce37179105e80eb1dd1468e9c2da651e50025d61 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0c05ae835f26a8d4a89ae80c7a0e5495e5361ca1 0.0015 Ether
10 фев. 15:26 7202529 0xdfd0fef60633e9b7fe2c0183ce37179105e80eb1dd1468e9c2da651e50025d61 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0xe222dd2dd012fcac0256b1f3830cc033418b6889 0.021 Ether
10 фев. 15:25 7202527 0xf1bb39e5736ca304a5090d44afc2cb61b52ae5f37ada54ee8b6dc0623ebef330 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0c05ae835f26a8d4a89ae80c7a0e5495e5361ca1 0.0015 Ether
10 фев. 15:25 7202527 0xf1bb39e5736ca304a5090d44afc2cb61b52ae5f37ada54ee8b6dc0623ebef330 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0xe222dd2dd012fcac0256b1f3830cc033418b6889 0.021 Ether
10 фев. 15:25 7202526 0x1eacc187342161db38ca0ca6cd20cb5da2489f586d0dfc86cc919e83d1fd8c64 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0c05ae835f26a8d4a89ae80c7a0e5495e5361ca1 0.005 Ether
10 фев. 15:25 7202526 0x1eacc187342161db38ca0ca6cd20cb5da2489f586d0dfc86cc919e83d1fd8c64 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0xe222dd2dd012fcac0256b1f3830cc033418b6889 0.07 Ether
10 фев. 15:25 7202525 0xd61a6b722cb1d0a091f7bf31fb463d349d2dbd8d7acf276985a5cdc79079e70f 0xbbbecd6ee8d2972b4905634177c56ad73f226276 0x0c05ae835f26a8d4a89ae80c7a0e5495e5361ca1 0.005 Ether
Средняя оценка аудиторов -
Contract Source Code </>
pragma solidity ^0.4.24;

/*
*__/\\\\____________/\\\\________________/\\\\____________/\\\\________/\\\\\\_____/\\\\\\___________________________________________________
* _\/\\\\\\________/\\\\\\_______________\/\\\\\\________/\\\\\\_______\////\\\____\////\\\___________________________________________________
*  _\/\\\//\\\____/\\\//\\\____/\\\__/\\\_\/\\\//\\\____/\\\//\\\__/\\\____\/\\\_______\/\\\_____/\\\__________________________________________
*   _\/\\\\///\\\/\\\/_\/\\\___\//\\\/\\\__\/\\\\///\\\/\\\/_\/\\\_\///_____\/\\\_______\/\\\____\///______/\\\\\_____/\\/\\\\\\____/\\\\\\\\\\_
*    _\/\\\__\///\\\/___\/\\\____\//\\\\\___\/\\\__\///\\\/___\/\\\__/\\\____\/\\\_______\/\\\_____/\\\___/\\\///\\\__\/\\\////\\\__\/\\\//////__
*     _\/\\\____\///_____\/\\\_____\//\\\____\/\\\____\///_____\/\\\_\/\\\____\/\\\_______\/\\\____\/\\\__/\\\__\//\\\_\/\\\__\//\\\_\/\\\\\\\\\\_
*      _\/\\\_____________\/\\\__/\\_/\\\_____\/\\\_____________\/\\\_\/\\\____\/\\\_______\/\\\____\/\\\_\//\\\__/\\\__\/\\\___\/\\\_\////////\\\_
*       _\/\\\_____________\/\\\_\//\\\\/______\/\\\_____________\/\\\_\/\\\__/\\\\\\\\\__/\\\\\\\\\_\/\\\__\///\\\\\/___\/\\\___\/\\\__/\\\\\\\\\\_
*        _\///______________\///___\////________\///______________\///__\///__\/////////__\/////////__\///_____\/////_____\///____\///__\//////////__
*/

contract Ownable {
    address public owner;
    address public developers = 0x0c05aE835f26a8d4a89Ae80c7A0e5495e5361ca1;
    address public marketers = 0xE222Dd2DD012FCAC0256B1f3830cc033418B6889;
    uint256 public constant developersPercent = 1;
    uint256 public constant marketersPercent = 14;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event DevelopersChanged(address indexed previousDevelopers, address indexed newDevelopers);
    event MarketersChanged(address indexed previousMarketers, address indexed newMarketers);

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyThisOwner(address _owner) {
        require(owner == _owner);
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    function setDevelopers(address newDevelopers) public onlyOwner {
        require(newDevelopers != address(0));
        emit DevelopersChanged(developers, newDevelopers);
        developers = newDevelopers;
    }

    function setMarketers(address newMarketers) public onlyOwner {
        require(newMarketers != address(0));
        emit MarketersChanged(marketers, newMarketers);
        marketers = newMarketers;
    }

}

library SafeMath {
    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;
    }

    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;
    }

    function sub(uint256 _a, uint256 _b) internal pure returns(uint256) {
        require(_b <= _a);
        uint256 c = _a - _b;

        return c;
    }

    function add(uint256 _a, uint256 _b) internal pure returns(uint256) {
        uint256 c = _a + _b;
        require(c >= _a);

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns(uint256) {
        require(b != 0);
        return a % b;
    }
}

library Math {
    function max(uint a, uint b) returns (uint) {
        if (a > b) return a;
        else return b;
    }
    function min(uint a, uint b) returns (uint) {
        if (a < b) return a;
        else return b;
    }
}

contract LeaderSystem {
    using SafeMath for uint256;

    event NewLeader(uint256 _indexTable, address _addr, uint256 _index, uint256 _sum);
    event LeadersClear(uint256 _indexTable);

    uint8 public constant leadersCount = 7;
    mapping (uint8 => uint256) public leaderBonuses;

    struct LeadersTable {
        uint256 timestampEnd;              // timestamp of closing table
        uint256 duration;                   // duration compute
        uint256 minSum;                     // min sum of leaders
        address[] leaders;                  // leaders array
        mapping (address => uint256) users; // sum all users
    }

    LeadersTable[] public leaders;

    function setupLeaderSystemModule() internal {
        leaderBonuses[0] = 10;  // 10%
        leaderBonuses[1] = 7;   // 7%
        leaderBonuses[2] = 5;   // 5%
        leaderBonuses[3] = 3;   // 3%
        leaderBonuses[4] = 1;   // 1%
        leaderBonuses[5] = 0;   // 0%
        leaderBonuses[6] = 0;   // 0%

        leaders.push(LeadersTable(now + 86400, 86400, 0, new address[](0)));
        leaders.push(LeadersTable(now + 604800, 604800, 0, new address[](0)));
        leaders.push(LeadersTable(now + 77760000, 77760000, 0, new address[](0)));
        leaders.push(LeadersTable(now + 31536000, 31536000, 0, new address[](0)));
    }

    function _clearLeadersTable(uint256 _indexTable) internal {
        LeadersTable storage _leader = leaders[_indexTable];
        leaders[_indexTable] = LeadersTable(_leader.timestampEnd + _leader.duration, _leader.duration, 0, new address[](0));

        emit LeadersClear(_indexTable);
    }

    function quickSort(LeadersTable storage leader, int left, int right) internal {
        int i = left;
        int j = right;
        if (i == j) return;
        uint pivot = leader.users[leader.leaders[uint(left + (right - left) / 2)]];
        while (i <= j) {
            while (leader.users[leader.leaders[uint(i)]] > pivot) i++;
            while (pivot > leader.users[leader.leaders[uint(j)]]) j--;
            if (i <= j) {
                (leader.leaders[uint(i)], leader.leaders[uint(j)]) = (leader.leaders[uint(j)], leader.leaders[uint(i)]);
                i++;
                j--;
            }
        }
        if (left < j)
            quickSort(leader, left, j);
        if (i < right)
            quickSort(leader, i, right);
    }

    function _updateLeadersTable(uint256 i, address _addr, uint256 _value) internal {
        if (now > leaders[i].timestampEnd) _clearLeadersTable(i);

        LeadersTable storage leader = leaders[i];
        bool isExist = leader.users[_addr] >= leader.minSum;

        uint256 oldSum = leader.users[_addr];
        uint256 newSum = oldSum.add(_value);
        leader.users[_addr] = newSum;

        if (newSum < leader.minSum && leader.leaders.length == leadersCount) return;

        if (!isExist || leader.leaders.length == 0) leader.leaders.push(_addr);

        if (leader.leaders.length > 1) quickSort(leader, 0, int256(leader.leaders.length - 1));
        if (leader.leaders.length > leadersCount) {
            delete leader.leaders[leadersCount - 1];
        }

        leader.minSum = leader.users[leader.leaders[leader.leaders.length - 1]];
    }

    function _updateLeaders(address _addr, uint256 _value) internal {
        for (uint i = 0; i < leaders.length; i++) {
            _updateLeadersTable(i, _addr, _value);
        }
    }

    function getLeadersTableInfo(uint256 _indexTable) public view returns(uint256, uint256, uint256) {
        return (leaders[_indexTable].timestampEnd, leaders[_indexTable].duration, leaders[_indexTable].minSum);
    }

    function getLeaders(uint256 _indexTable) public view returns(address[], uint256[]) {
        LeadersTable storage leader = leaders[_indexTable];
        uint256[] memory balances = new uint256[](leader.leaders.length);

        for (uint i = 0; i < leader.leaders.length; i++) {
            balances[i] = leader.users[leader.leaders[i]];
        }

        return (leader.leaders, balances);
    }

}

contract Factoring {

    enum FactoryType { Wood, Metal, Oil, PreciousMetal }

    mapping (uint8 => uint256) public resourcePrices;

    function setupFactoringModule() internal {
        resourcePrices[uint8(FactoryType.Wood)]         = 0.02315 szabo;
        resourcePrices[uint8(FactoryType.Metal)]        = 0.03646 szabo;
        resourcePrices[uint8(FactoryType.Oil)]          = 0.04244 szabo;
        resourcePrices[uint8(FactoryType.PreciousMetal)]= 0.06655 szabo;
    }

    function getResourcePrice(uint8 _type) public view returns(uint256) {
        return resourcePrices[_type];
    }

}

contract Improvements is Factoring {

    mapping (uint8 => mapping (uint8 => Params)) public levelStack;
    uint8 public constant levelsCount = 7;

    struct Params {
        uint256 price;      // improvements cost
        uint256 ppm;        // products per minute
        uint256 ppmBonus;   // bonus per minute
    }

    function setupImprovementsModule() internal {
        // initial pricess
        levelStack[uint8(FactoryType.Wood)][0]          = Params(0.01 ether, 200, 0);
        levelStack[uint8(FactoryType.Metal)][0]         = Params(0.03 ether, 400, 0);
        levelStack[uint8(FactoryType.Oil)][0]           = Params(0.05 ether, 600, 0);
        levelStack[uint8(FactoryType.PreciousMetal)][0] = Params(0.10 ether, 800, 0);

        // level 1
        levelStack[uint8(FactoryType.Wood)][1]          = Params(0.05 ether, 1200, 120);
        levelStack[uint8(FactoryType.Metal)][1]         = Params(0.09 ether, 1600, 138);
        levelStack[uint8(FactoryType.Oil)][1]           = Params(0.15 ether, 2400, 164);
        levelStack[uint8(FactoryType.PreciousMetal)][1] = Params(0.50 ether, 4800, 418);

        // level 2
        levelStack[uint8(FactoryType.Wood)][2]          = Params(0.12 ether, 3600, 540);
        levelStack[uint8(FactoryType.Metal)][2]         = Params(0.27 ether, 5200, 866);
        levelStack[uint8(FactoryType.Oil)][2]           = Params(0.35 ether, 6600, 1050);
        levelStack[uint8(FactoryType.PreciousMetal)][2] = Params(1.00 ether, 12800, 1670);

        // level 3
        levelStack[uint8(FactoryType.Wood)][3]          = Params(0.30 ether, 9600, 2400);
        levelStack[uint8(FactoryType.Metal)][3]         = Params(0.75 ether, 15200, 3980);
        levelStack[uint8(FactoryType.Oil)][3]           = Params(1.15 ether, 20400, 5099);
        levelStack[uint8(FactoryType.PreciousMetal)][3] = Params(3.50 ether, 40800, 11531);

        // level 4
        levelStack[uint8(FactoryType.Wood)][4]          = Params(0.90 ether, 27600, 9660);
        levelStack[uint8(FactoryType.Metal)][4]         = Params(2.13 ether, 43600, 15568);
        levelStack[uint8(FactoryType.Oil)][4]           = Params(3.00 ether, 56400, 17943);
        levelStack[uint8(FactoryType.PreciousMetal)][4] = Params(7.00 ether, 96800, 31567);

        // level 5
        levelStack[uint8(FactoryType.Wood)][5]          = Params(1.80 ether, 63600, 25440);
        levelStack[uint8(FactoryType.Metal)][5]         = Params(5.31 ether, 114400, 49022);
        levelStack[uint8(FactoryType.Oil)][5]           = Params(7.30 ether, 144000, 55629);
        levelStack[uint8(FactoryType.PreciousMetal)][5] = Params(17.10 ether, 233600, 96492);

        // level 6
        levelStack[uint8(FactoryType.Wood)][6]          = Params(5.40 ether, 171600, 85800);
        levelStack[uint8(FactoryType.Metal)][6]         = Params(13.89 ether, 298400, 158120);
        levelStack[uint8(FactoryType.Oil)][6]           = Params(24.45 ether, 437400, 218674);
        levelStack[uint8(FactoryType.PreciousMetal)][6] = Params(55.50 ether, 677600, 353545);
    }

    function getPrice(FactoryType _type, uint8 _level) public view returns(uint256) {
        return levelStack[uint8(_type)][_level].price;
    }

    function getProductsPerMinute(FactoryType _type, uint8 _level) public view returns(uint256) {
        return levelStack[uint8(_type)][_level].ppm;
    }

    function getBonusPerMinute(FactoryType _type, uint8 _level) public view returns(uint256) {
        return levelStack[uint8(_type)][_level].ppmBonus;
    }
}

contract ReferralsSystem {

    struct ReferralGroup {
        uint256 minSum;
        uint256 maxSum;
        uint16[] percents;
    }

    uint256 public constant minSumReferral = 0.01 ether;
    uint256 public constant referralLevelsGroups = 3;
    uint256 public constant referralLevelsCount = 5;
    ReferralGroup[] public referralGroups;

    function setupReferralsSystemModule() internal {
        ReferralGroup memory refGroupFirsty = ReferralGroup(minSumReferral, 10 ether - 1 wei, new uint16[](referralLevelsCount));
        refGroupFirsty.percents[0] = 300;   // 3%
        refGroupFirsty.percents[1] = 75;    // 0.75%
        refGroupFirsty.percents[2] = 60;    // 0.6%
        refGroupFirsty.percents[3] = 40;    // 0.4%
        refGroupFirsty.percents[4] = 25;    // 0.25%
        referralGroups.push(refGroupFirsty);

        ReferralGroup memory refGroupLoyalty = ReferralGroup(10 ether, 50 ether - 1 wei, new uint16[](referralLevelsCount));
        refGroupLoyalty.percents[0] = 500;  // 5%
        refGroupLoyalty.percents[1] = 200;  // 2%
        refGroupLoyalty.percents[2] = 150;  // 1.5%
        refGroupLoyalty.percents[3] = 100;  // 1%
        refGroupLoyalty.percents[4] = 50;   // 0.5%
        referralGroups.push(refGroupLoyalty);

        ReferralGroup memory refGroupUltraPremium = ReferralGroup(50 ether, 2**256 - 1, new uint16[](referralLevelsCount));
        refGroupUltraPremium.percents[0] = 700; // 7%
        refGroupUltraPremium.percents[1] = 300; // 3%
        refGroupUltraPremium.percents[2] = 250; // 2.5%
        refGroupUltraPremium.percents[3] = 150; // 1.5%
        refGroupUltraPremium.percents[4] = 100; // 1%
        referralGroups.push(refGroupUltraPremium);
    }

    function getReferralPercents(uint256 _sum) public view returns(uint16[]) {
        for (uint i = 0; i < referralLevelsGroups; i++) {
            ReferralGroup memory group = referralGroups[i];
            if (_sum >= group.minSum && _sum <= group.maxSum) return group.percents;
        }
    }

    function getReferralPercentsByIndex(uint256 _index) public view returns(uint16[]) {
        return referralGroups[_index].percents;
    }

}

/// @title Smart-contract of MyMillions ecosystem
/// @author Shagaleev Alexey
contract MyMillions is Ownable, Improvements, ReferralsSystem, LeaderSystem {
    using SafeMath for uint256;

    event CreateUser(uint256 _index, address _address, uint256 _balance);
    event ReferralRegister(uint256 _refferalId, uint256 _userId);
    event ReferrerDistribute(uint256 _userId, uint256 _referrerId, uint256 _sum);
    event Deposit(uint256 _userId, uint256 _value);
    event PaymentProceed(uint256 _userId, uint256 _factoryId, FactoryType _factoryType, uint256 _price);
    event CollectResources(FactoryType _type, uint256 _resources);
    event LevelUp(uint256 _factoryId, uint8 _newLevel, uint256 _userId, uint256 _price);
    event Sell(uint256 _userId, uint8 _type, uint256 _sum);

    bool isSetted = false;
    uint256 public minSumDeposit = 0.01 ether;

    struct User {
        address addr;                                   // user address
        uint256 balance;                                // balance of account
        uint256 totalPay;                               // sum of all input pay
        uint256 referrersReceived;                      // total deposit from referrals
        uint256[] resources;                            // collected resources
        uint256[] referrersByLevel;                     // referrers user ids
        mapping (uint8 => uint256[]) referralsByLevel;  // all referrals user ids
    }

    User[] public users;
    mapping (address => uint256) public addressToUser;
    uint256 public totalUsers = 0;
    uint256 public totalDeposit = 0;

    struct Factory {
        FactoryType ftype;      // factory type
        uint8 level;            // factory level
        uint256 collected_at;   // timestamp updated
    }

    Factory[] public factories;
    mapping (uint256 => uint256) public factoryToUser;
    mapping (uint256 => uint256[]) public userToFactories;

    modifier onlyExistingUser() {
        require(addressToUser[msg.sender] != 0);
        _;
    }
    modifier onlyNotExistingUser() {
        require(addressToUser[msg.sender] == 0);
        _;
    }

    constructor() public payable {
        users.push(User(0x0, 0, 0, 0, new uint256[](4), new uint256[](referralLevelsCount)));  // for find by addressToUser map
    }

    function setup() public onlyOwner {
        require(isSetted == false);
        isSetted = true;

        setupFactoringModule();
        setupImprovementsModule();
        setupReferralsSystemModule();
        setupLeaderSystemModule();
    }

    // @dev register for only new users with min pay
    /// @return id of new user
    function register() public payable onlyNotExistingUser returns(uint256) {
        require(addressToUser[msg.sender] == 0);

        uint256 index = users.push(User(msg.sender, msg.value, 0, 0, new uint256[](4), new uint256[](referralLevelsCount))) - 1;
        addressToUser[msg.sender] = index;
        totalUsers++;

        emit CreateUser(index, msg.sender, msg.value);
        return index;
    }


    /// @notice just registry by referral link
    /// @param _refId the ID of the user who gets the affiliate fee
    /// @return id of new user
    function registerWithRefID(uint256 _refId) public payable onlyNotExistingUser returns(uint256) {
        require(_refId < users.length);

        uint256 index = register();
        _updateReferrals(index, _refId);

        emit ReferralRegister(_refId, index);
        return index;
    }

    /// @notice update referrersByLevel and referralsByLevel of new user
    /// @param _newUserId the ID of the new user
    /// @param _refUserId the ID of the user who gets the affiliate fee
    function _updateReferrals(uint256 _newUserId, uint256 _refUserId) private {
        if (_newUserId == _refUserId) return;
        users[_newUserId].referrersByLevel[0] = _refUserId;

        for (uint i = 1; i < referralLevelsCount; i++) {
            uint256 _refId = users[_refUserId].referrersByLevel[i - 1];
            users[_newUserId].referrersByLevel[i] = _refId;
            users[_refId].referralsByLevel[uint8(i)].push(_newUserId);
        }

        users[_refUserId].referralsByLevel[0].push(_newUserId);
    }

    /// @notice distribute value of tx to referrers of user
    /// @param _userId the ID of the user who gets the affiliate fee
    /// @param _sum value of ethereum for distribute to referrers of user
    function _distributeReferrers(uint256 _userId, uint256 _sum) private {
        uint256[] memory referrers = users[_userId].referrersByLevel;

        for (uint i = 0; i < referralLevelsCount; i++) {
            uint256 referrerId = referrers[i];

            if (referrers[i] == 0) break;
            if (users[referrerId].totalPay < minSumReferral) continue;

            uint16[] memory percents = getReferralPercents(users[referrerId].totalPay);
            uint256 value = _sum * percents[i] / 10000;
            users[referrerId].balance = users[referrerId].balance.add(value);
            users[referrerId].referrersReceived = users[referrerId].referrersReceived.add(value);

            emit ReferrerDistribute(_userId, referrerId, value);
        }
    }

    /// @notice deposit ethereum for user
    /// @return balance value of user
    function deposit() public payable onlyExistingUser returns(uint256) {
        require(msg.value > minSumDeposit, "Deposit does not enough");
        uint256 userId = addressToUser[msg.sender];
        users[userId].balance = users[userId].balance.add(msg.value);
        totalDeposit += msg.value;

        // distribute
        _distributeInvestment(msg.value);
        _updateLeaders(msg.sender, msg.value);

        emit Deposit(userId, msg.value);
        return users[userId].balance;
    }

    /// @notice getter for balance of user
    /// @return balance value of user
    function balanceOf() public view returns (uint256) {
        return users[addressToUser[msg.sender]].balance;
    }

    /// @notice getter for resources of user
    /// @return resources value of user
    function resoucesOf() public view returns (uint256[]) {
        return users[addressToUser[msg.sender]].resources;
    }

    /// @notice getter for referrers of user
    /// @return array of referrers id
    function referrersOf() public view returns (uint256[]) {
        return users[addressToUser[msg.sender]].referrersByLevel;
    }

    /// @notice getter for referrals of user by level
    /// @param _level level of referrals user needed
    /// @return array of referrals id
    function referralsOf(uint8 _level) public view returns (uint256[]) {
        return users[addressToUser[msg.sender]].referralsByLevel[uint8(_level)];
    }

    /// @notice getter for extended information of user
    /// @param _userId id of user needed
    /// @return address of user
    /// @return balance of user
    /// @return totalPay of user
    /// @return array of resources user
    /// @return array of referrers id user
    function userInfo(uint256 _userId) public view returns(address, uint256, uint256, uint256, uint256[], uint256[]) {
        User memory user = users[_userId];
        return (user.addr, user.balance, user.totalPay, user.referrersReceived, user.resources, user.referrersByLevel);
    }

    /// @notice mechanics of buying any factory
    /// @param _type type of factory needed
    /// @return id of new factory
    function buyFactory(FactoryType _type) public payable onlyExistingUser returns (uint256) {
        uint256 userId = addressToUser[msg.sender];

        // if user not registered
        if (addressToUser[msg.sender] == 0)
            userId = register();

        return _paymentProceed(userId, Factory(_type, 0, now));
    }

    /// @notice get factories of user
    /// @param _user_id id of user
    /// @return array of id factory
    function getFactories(uint256 _user_id) public view returns (uint256[]) {
        return userToFactories[_user_id];
    }

    /// @notice buy wood factory
    /// @dev wrapper over buyFactory for FactoryType.Wood
    /// @return id of new factory
    function buyWoodFactory() public payable returns (uint256) {
        return buyFactory(FactoryType.Wood);
    }

    /// @notice buy wood factory
    /// @dev wrapper over buyFactory for FactoryType.Metal
    /// @return id of new factory
    function buyMetalFactory() public payable returns (uint256) {
        return buyFactory(FactoryType.Metal);
    }

    /// @notice buy wood factory
    /// @dev wrapper over buyFactory for FactoryType.Oil
    /// @return id of new factory
    function buyOilFactory() public payable returns (uint256) {
        return buyFactory(FactoryType.Oil);
    }

    /// @notice buy wood factory
    /// @dev wrapper over buyFactory for FactoryType.PreciousMetal
    /// @return id of new factory
    function buyPreciousMetal() public payable returns (uint256) {
        return buyFactory(FactoryType.PreciousMetal);
    }

    /// @notice distribute investment when user buy anything
    /// @param _value value of investment
    function _distributeInvestment(uint256 _value) private {
        developers.transfer(msg.value * developersPercent / 100);
        marketers.transfer(msg.value * marketersPercent / 100);
    }

    /// @notice function of proceed payment
    /// @dev for only buy new factory
    /// @return id of new factory
    function _paymentProceed(uint256 _userId, Factory _factory) private returns(uint256) {
        User storage user = users[_userId];

        require(_checkPayment(user, _factory.ftype, _factory.level));

        uint256 price = getPrice(_factory.ftype, 0);
        user.balance = user.balance.add(msg.value);
        user.balance = user.balance.sub(price);
        user.totalPay = user.totalPay.add(price);
        totalDeposit += msg.value;

        uint256 index = factories.push(_factory) - 1;
        factoryToUser[index] = _userId;
        userToFactories[_userId].push(index);

        // distribute
        _distributeInvestment(msg.value);
        _distributeReferrers(_userId, price);
        _updateLeaders(msg.sender, msg.value);

        emit PaymentProceed(_userId, index, _factory.ftype, price);
        return index;
    }

    /// @notice check available investment
    /// @return true if user does enough balance for investment
    function _checkPayment(User _user, FactoryType _type, uint8 _level) private view returns(bool) {
        uint256 totalBalance = _user.balance.add(msg.value);

        if (totalBalance < getPrice(_type, _level)) return false;

        return true;
    }

    /// @notice level up for factory
    /// @param _factoryId id of factory
    function levelUp(uint256 _factoryId) public payable onlyExistingUser {
        Factory storage factory = factories[_factoryId];
        uint256 price = getPrice(factory.ftype, factory.level + 1);

        uint256 userId = addressToUser[msg.sender];
        User storage user = users[userId];

        require(_checkPayment(user, factory.ftype, factory.level + 1));

        // payment
        user.balance = user.balance.add(msg.value);
        user.balance = user.balance.sub(price);
        user.totalPay = user.totalPay.add(price);
        totalDeposit += msg.value;

        _distributeInvestment(msg.value);
        _distributeReferrers(userId, price);

        // collect
        _collectResource(factory, user);
        factory.level++;

        _updateLeaders(msg.sender, msg.value);

        emit LevelUp(_factoryId, factory.level, userId, price);
    }

    /// @notice sell resources of user with type
    /// @param _type type of resources
    /// @return sum of sell
    function sellResources(uint8 _type) public onlyExistingUser returns(uint256) {
        uint256 userId = addressToUser[msg.sender];
        uint256 sum = Math.min(users[userId].resources[_type] * getResourcePrice(_type), address(this).balance);
        users[userId].resources[_type] = 0;

        msg.sender.transfer(sum);

        emit Sell(userId, _type, sum);
        return sum;
    }

    /// @notice function for compute worktime factory
    /// @param _collected_at timestamp of start
    /// @return duration minutes
    function worktimeAtDate(uint256 _collected_at) public view returns(uint256) {
        return (now - _collected_at) / 60;
    }

    /// @notice function for compute duration work factory
    /// @param _factoryId id of factory
    /// @return timestamp of duration
    function worktime(uint256 _factoryId) public view returns(uint256) {
        return worktimeAtDate(factories[_factoryId].collected_at);
    }

    /// @notice function for compute resource factory at time
    /// @param _type type of factory
    /// @param _level level of factory
    /// @param _collected_at timestamp for collect
    /// @return count of resources
    function _resourcesAtTime(FactoryType _type, uint8 _level, uint256 _collected_at) public view returns(uint256) {
        return worktimeAtDate(_collected_at) * (getProductsPerMinute(_type, _level) + getBonusPerMinute(_type, _level)) / 100;
    }

    /// @notice function for compute resource factory at time
    /// @dev wrapper over _resourcesAtTime
    /// @param _factoryId id of factory
    /// @return count of resources
    function resourcesAtTime(uint256 _factoryId) public view returns(uint256) {
        Factory storage factory = factories[_factoryId];
        return _resourcesAtTime(factory.ftype, factory.level, factory.collected_at);
    }

    /// @notice function for collect resource
    /// @param _factory factory object
    /// @param _user user object
    /// @return count of resources
    function _collectResource(Factory storage _factory, User storage _user) internal returns(uint256) {
        uint256 resources = _resourcesAtTime(_factory.ftype, _factory.level, _factory.collected_at);
        _user.resources[uint8(_factory.ftype)] = _user.resources[uint8(_factory.ftype)].add(resources);
        _factory.collected_at = now;

        emit CollectResources(_factory.ftype, resources);
        return resources;
    }

    /// @notice function for collect all resources from all factories
    /// @dev wrapper over _collectResource
    function collectResources() public onlyExistingUser {
        uint256 index = addressToUser[msg.sender];
        User storage user = users[index];
        uint256[] storage factoriesIds = userToFactories[addressToUser[msg.sender]];

        for (uint256 i = 0; i < factoriesIds.length; i++) {
            _collectResource(factories[factoriesIds[i]], user);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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