{"ctor":"BitburnerSaveObject","data":{"PlayerSave":"{\"ctor\":\"PlayerObject\",\"data\":{\"hp\":{\"current\":11,\"max\":11},\"skills\":{\"hacking\":2777,\"strength\":9,\"defense\":10,\"dexterity\":9,\"agility\":5,\"charisma\":6,\"intelligence\":0},\"exp\":{\"hacking\":272359182.1591016,\"strength\":34.288774622586175,\"defense\":34.288774622586175,\"dexterity\":34.288774622586175,\"agility\":34.288774622586175,\"charisma\":30.794177008967555,\"intelligence\":0},\"mults\":{\"hacking_chance\":2.506844141837234,\"hacking_speed\":2.4523742222787908,\"hacking_money\":8.13286873079465,\"hacking_grow\":3.8008865149947892,\"hacking\":6.589448987070986,\"strength\":3.0068617745960156,\"defense\":3.6605273777690615,\"dexterity\":3.046425745314385,\"agility\":1.8244255271974992,\"charisma\":2.4717734054020792,\"hacking_exp\":9.716815734635395,\"strength_exp\":2.6375980478912413,\"defense_exp\":2.6375980478912413,\"dexterity_exp\":2.6375980478912413,\"agility_exp\":2.6375980478912413,\"charisma_exp\":2.3687828468436596,\"company_rep\":3.1267933578336304,\"faction_rep\":2.3687828468436596,\"crime_money\":2.0598111711683993,\"crime_success\":2.340694512691363,\"hacknet_node_money\":4.382259256652633,\"hacknet_node_purchase_cost\":0.44027293443208537,\"hacknet_node_ram_cost\":0.575520175728216,\"hacknet_node_core_cost\":0.575520175728216,\"hacknet_node_level_cost\":0.4891921493689836,\"work_money\":3.3963853123932872,\"bladeburner_max_stamina\":1,\"bladeburner_stamina_gain\":1,\"bladeburner_analysis\":1,\"bladeburner_success_chance\":1},\"augmentations\":[{\"level\":1,\"name\":\"Hacknet Node NIC Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Core Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node Kernel Direct-Neural Interface\"},{\"level\":1,\"name\":\"Hacknet Node CPU Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Hacknet Node Cache Architecture Neural-Upload\"},{\"level\":1,\"name\":\"Neurotrainer II\"},{\"level\":1,\"name\":\"CashRoot Starter Kit\"},{\"level\":1,\"name\":\"BitWire\"},{\"level\":40,\"name\":\"NeuroFlux Governor\"},{\"level\":1,\"name\":\"Neural-Retention Enhancement\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen I\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen II\"},{\"level\":1,\"name\":\"Embedded Netburner Module\"},{\"level\":1,\"name\":\"Artificial Synaptic Potentiation\"},{\"level\":1,\"name\":\"DataJack\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen III\"},{\"level\":1,\"name\":\"CRTX42-AA Gene Modification\"},{\"level\":1,\"name\":\"Synaptic Enhancement Implant\"},{\"level\":1,\"name\":\"Neurotrainer I\"},{\"level\":1,\"name\":\"Embedded Netburner Module Core Implant\"},{\"level\":1,\"name\":\"Neuralstimulator\"},{\"level\":1,\"name\":\"Enhanced Myelin Sheathing\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen IV\"},{\"level\":1,\"name\":\"The Black Hand\"},{\"level\":1,\"name\":\"PCMatrix\"},{\"level\":1,\"name\":\"Speech Processor Implant\"},{\"level\":1,\"name\":\"Wired Reflexes\"},{\"level\":1,\"name\":\"Neuroreceptor Management Implant\"},{\"level\":1,\"name\":\"Neuregen Gene Modification\"},{\"level\":1,\"name\":\"Nanofiber Weave\"},{\"level\":1,\"name\":\"Social Negotiation Assistant (S.N.A)\"},{\"level\":1,\"name\":\"Nuoptimal Nootropic Injector Implant\"},{\"level\":1,\"name\":\"ADR-V1 Pheromone Gene\"},{\"level\":1,\"name\":\"Speech Enhancement\"},{\"level\":1,\"name\":\"NutriGen Implant\"},{\"level\":1,\"name\":\"INFRARET Enhancement\"},{\"level\":1,\"name\":\"Combat Rib I\"},{\"level\":1,\"name\":\"Augmented Targeting I\"},{\"level\":1,\"name\":\"Combat Rib II\"},{\"level\":1,\"name\":\"DermaForce Particle Barrier\"},{\"level\":1,\"name\":\"Augmented Targeting II\"},{\"level\":1,\"name\":\"Embedded Netburner Module Core V2 Upgrade\"},{\"level\":1,\"name\":\"BitRunners Neurolink\"},{\"level\":1,\"name\":\"Artificial Bio-neural Network Implant\"},{\"level\":1,\"name\":\"Cranial Signal Processors - Gen V\"},{\"level\":1,\"name\":\"Neural Accelerator\"}],\"queuedAugmentations\":[{\"level\":1,\"name\":\"Embedded Netburner Module Core V3 Upgrade\"},{\"level\":1,\"name\":\"Embedded Netburner Module Direct Memory Access Upgrade\"},{\"level\":1,\"name\":\"Embedded Netburner Module Analyze Engine\"},{\"level\":1,\"name\":\"NEMEAN Subdermal Weave\"},{\"level\":1,\"name\":\"Synthetic Heart\"},{\"level\":1,\"name\":\"Synfibril Muscle\"},{\"level\":41,\"name\":\"NeuroFlux Governor\"},{\"level\":42,\"name\":\"NeuroFlux Governor\"},{\"level\":43,\"name\":\"NeuroFlux Governor\"},{\"level\":44,\"name\":\"NeuroFlux Governor\"},{\"level\":45,\"name\":\"NeuroFlux Governor\"},{\"level\":46,\"name\":\"NeuroFlux Governor\"},{\"level\":47,\"name\":\"NeuroFlux Governor\"},{\"level\":1,\"name\":\"The Red Pill\"}],\"city\":\"Aevum\",\"bitNodeN\":1,\"corporation\":null,\"gang\":null,\"bladeburner\":null,\"currentServer\":\"home\",\"factions\":[\"Daedalus\",\"BitRunners\",\"The Black Hand\",\"NiteSec\",\"Netburners\",\"CyberSec\"],\"factionInvitations\":[\"Aevum\"],\"hacknetNodes\":[{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107539.19999901675,\"ram\":64,\"totalMoneyGenerated\":4259835457.82409,\"name\":\"hacknet-node-0\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107538.19999901677,\"ram\":64,\"totalMoneyGenerated\":4254072048.4802413,\"name\":\"hacknet-node-1\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107537.19999901678,\"ram\":64,\"totalMoneyGenerated\":4253636791.8843236,\"name\":\"hacknet-node-2\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107536.1999990168,\"ram\":64,\"totalMoneyGenerated\":4252667536.580572,\"name\":\"hacknet-node-3\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107535.19999901681,\"ram\":64,\"totalMoneyGenerated\":4251096835.2615185,\"name\":\"hacknet-node-4\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107534.19999901683,\"ram\":64,\"totalMoneyGenerated\":4250629348.426715,\"name\":\"hacknet-node-5\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107533.19999901684,\"ram\":64,\"totalMoneyGenerated\":4250274463.807083,\"name\":\"hacknet-node-6\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107531.99999901686,\"ram\":64,\"totalMoneyGenerated\":4249858289.075934,\"name\":\"hacknet-node-7\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107297.19999902027,\"ram\":64,\"totalMoneyGenerated\":4249259070.037413,\"name\":\"hacknet-node-8\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107131.39999902269,\"ram\":64,\"totalMoneyGenerated\":4248672257.985773,\"name\":\"hacknet-node-9\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":107027.99999902419,\"ram\":64,\"totalMoneyGenerated\":4247969306.4669495,\"name\":\"hacknet-node-10\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":106958.5999990252,\"ram\":64,\"totalMoneyGenerated\":4247456929.1383834,\"name\":\"hacknet-node-11\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":106837.99999902696,\"ram\":64,\"totalMoneyGenerated\":4246724450.106996,\"name\":\"hacknet-node-12\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":106691.1999990291,\"ram\":64,\"totalMoneyGenerated\":4245944175.0793805,\"name\":\"hacknet-node-13\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":106598.59999903044,\"ram\":64,\"totalMoneyGenerated\":4245257966.3301964,\"name\":\"hacknet-node-14\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":106407.99999903321,\"ram\":64,\"totalMoneyGenerated\":4244393688.1716194,\"name\":\"hacknet-node-15\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":106109.59999903756,\"ram\":64,\"totalMoneyGenerated\":4240992577.7710304,\"name\":\"hacknet-node-16\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":105784.59999904229,\"ram\":64,\"totalMoneyGenerated\":4232231446.5979548,\"name\":\"hacknet-node-17\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":105560.59999904555,\"ram\":64,\"totalMoneyGenerated\":4225582747.5963554,\"name\":\"hacknet-node-18\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":104790.79999905675,\"ram\":64,\"totalMoneyGenerated\":4200909254.337772,\"name\":\"hacknet-node-19\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":104088.19999906697,\"ram\":64,\"totalMoneyGenerated\":4176066749.3860064,\"name\":\"hacknet-node-20\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":103356.19999907762,\"ram\":64,\"totalMoneyGenerated\":4148986704.462775,\"name\":\"hacknet-node-21\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":102300.39999909299,\"ram\":64,\"totalMoneyGenerated\":4107566435.070639,\"name\":\"hacknet-node-22\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":101812.19999910009,\"ram\":64,\"totalMoneyGenerated\":4087947895.161593,\"name\":\"hacknet-node-23\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":76256.19999944678,\"ram\":64,\"totalMoneyGenerated\":3060806899.2007985,\"name\":\"hacknet-node-24\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":76254.5999994468,\"ram\":64,\"totalMoneyGenerated\":3060766583.6289086,\"name\":\"hacknet-node-25\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":76253.99999944681,\"ram\":64,\"totalMoneyGenerated\":3060726274.630408,\"name\":\"hacknet-node-26\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":76252.79999944684,\"ram\":64,\"totalMoneyGenerated\":3060685961.687874,\"name\":\"hacknet-node-27\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":76251.59999944686,\"ram\":64,\"totalMoneyGenerated\":3060645648.7453394,\"name\":\"hacknet-node-28\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":76248.39999944692,\"ram\":64,\"totalMoneyGenerated\":3060484407.492625,\"name\":\"hacknet-node-29\"}},{\"ctor\":\"HacknetNode\",\"data\":{\"cores\":16,\"level\":200,\"moneyGainRatePerSecond\":40191.05469285918,\"onlineTimeSeconds\":76198.19999944788,\"ram\":64,\"totalMoneyGenerated\":3058507804.8494706,\"name\":\"hacknet-node-30\"}}],\"has4SData\":false,\"has4SDataTixApi\":false,\"hashManager\":{\"ctor\":\"HashManager\",\"data\":{\"capacity\":0,\"hashes\":0,\"upgrades\":{\"Sell for Money\":0,\"Sell for Corporation Funds\":0,\"Reduce Minimum Security\":0,\"Increase Maximum Money\":0,\"Improve Studying\":0,\"Improve Gym Training\":0,\"Exchange for Corporation Research\":0,\"Exchange for Bladeburner Rank\":0,\"Exchange for Bladeburner SP\":0,\"Generate Coding Contract\":0,\"Company Favor\":0}}},\"hasTixApiAccess\":false,\"hasWseAccount\":true,\"jobs\":{},\"karma\":-30.300000000000008,\"numPeopleKilled\":0,\"location\":\"ECorp\",\"money\":614088621877.3539,\"moneySourceA\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-38862080,\"codingcontract\":0,\"corporation\":0,\"crime\":0,\"gang\":0,\"hacking\":2000897117931.3223,\"hacknet\":122840655993.5173,\"hacknet_expenses\":-106441145509.386,\"hospitalization\":0,\"infiltration\":0,\"sleeves\":0,\"stock\":247851.83702251315,\"total\":614087621877.3539,\"work\":0,\"servers\":-44000000,\"other\":-305900000,\"augmentations\":-1402820492307.694}},\"moneySourceB\":{\"ctor\":\"MoneySourceTracker\",\"data\":{\"bladeburner\":0,\"casino\":0,\"class\":-236770416,\"codingcontract\":0,\"corporation\":0,\"crime\":24717636.172864918,\"gang\":0,\"hacking\":2175079562689.6045,\"hacknet\":377302600165.6497,\"hacknet_expenses\":-198320485376.00955,\"hospitalization\":-3678000,\"infiltration\":0,\"sleeves\":0,\"stock\":-199752148.16297752,\"total\":709285151173.6252,\"work\":6256069.41311641,\"servers\":-484000000,\"other\":-36173999973.810776,\"augmentations\":-1607709299525.0872}},\"playtimeSinceLastAug\":107545800,\"playtimeSinceLastBitnode\":668360600,\"lastAugReset\":1693826600284,\"lastNodeReset\":1693265783929,\"purchasedServers\":[\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\"],\"scriptProdSinceLastAug\":1991466315974.1519,\"sleeves\":[],\"sleevesFromCovenant\":0,\"sourceFiles\":{\"ctor\":\"JSONMap\",\"data\":[[1,1]]},\"exploits\":[\"N00dles\",\"UndocumentedFunctionCall\",\"Bypass\",\"Unclickable\",\"RealityAlteration\",\"INeedARainbow\"],\"achievements\":[{\"ID\":\"NS2\",\"unlockedOn\":1662595895471},{\"ID\":\"FIRST_HACKNET_NODE\",\"unlockedOn\":1662596015477},{\"ID\":\"FROZE\",\"unlockedOn\":1662606229026},{\"ID\":\"BRUTESSH.EXE\",\"unlockedOn\":1662608449026},{\"ID\":\"FTPCRACK.EXE\",\"unlockedOn\":1662632539212},{\"ID\":\"CYBERSEC\",\"unlockedOn\":1662654522875},{\"ID\":\"WORKOUT\",\"unlockedOn\":1662654762877},{\"ID\":\"HACKNET_NODE_10M\",\"unlockedOn\":1662699713290},{\"ID\":\"INSTALL_1\",\"unlockedOn\":1662736673277},{\"ID\":\"NITESEC\",\"unlockedOn\":1662820759873},{\"ID\":\"TOR\",\"unlockedOn\":1662827397785},{\"ID\":\"HOSPITALIZED\",\"unlockedOn\":1662832140786},{\"ID\":\"RELAYSMTP.EXE\",\"unlockedOn\":1662845880787},{\"ID\":\"HTTPWORM.EXE\",\"unlockedOn\":1662845880789},{\"ID\":\"TRAVEL\",\"unlockedOn\":1662862621580},{\"ID\":\"MAX_HACKNET_NODE\",\"unlockedOn\":1662949451779},{\"ID\":\"SQLINJECT.EXE\",\"unlockedOn\":1662949691784},{\"ID\":\"THE_BLACK_HAND\",\"unlockedOn\":1662965892986},{\"ID\":\"FORMULAS.EXE\",\"unlockedOn\":1663053707392},{\"ID\":\"BITRUNNERS\",\"unlockedOn\":1663226317042},{\"ID\":\"DONATION\",\"unlockedOn\":1663453433269},{\"ID\":\"DRAIN_SERVER\",\"unlockedOn\":1663459433299},{\"ID\":\"REPUTATION_10M\",\"unlockedOn\":1664194330396},{\"ID\":\"DAEDALUS\",\"unlockedOn\":1664194510488},{\"ID\":\"SF1.1\",\"unlockedOn\":1693265834474},{\"ID\":\"N00DLES\",\"unlockedOn\":1693405977626},{\"ID\":\"UNDOCUMENTEDFUNCTIONCALL\",\"unlockedOn\":1693571157628},{\"ID\":\"BYPASS\",\"unlockedOn\":1693571277636},{\"ID\":\"UNCLICKABLE\",\"unlockedOn\":1693781222084},{\"ID\":\"REALITYALTERATION\",\"unlockedOn\":1693781368207},{\"ID\":\"RAINBOW\",\"unlockedOn\":1693781668091},{\"ID\":\"30_HACKNET_NODE\",\"unlockedOn\":1693857951209},{\"ID\":\"SCRIPTS_30\",\"unlockedOn\":1693932536531}],\"terminalCommandHistory\":[\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor4BitRunners \",\"connect hong-fang-tea; connect nectar-net; connect silver-helix; connect johnson-ortho; connect syscore; connect lexo-corp; connect galactic-cyber; connect deltaone; connect defcomm; connect taiyang-digital; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"startNew \",\"buy-all\",\"backdoor1CSEC \",\"connect hong-fang-tea; connect CSEC; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"buy-all\",\"backdoor2NiteSec \",\"connect n00dles; connect nectar-net; connect silver-helix; connect avmnite-02h; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor3\",\"backdoor3BlackHand \",\"connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect I.I.I.I; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"backdoor4BitRunners \",\"connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"buy-all\",\"run NUKE.exe \",\"home\",\"buy-all\",\"backdoor4BitRunners \",\"connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; \",\"run BruteSSH.exe; run FTPCrack.exe; run relaySMTP.exe; run HTTPWorm.exe; run SQLInject.exe; run NUKE.exe; backdoor\",\"~fli\",\"flight \",\"buy -l\",\"buy-all\",\"scan-analyze 10\",\"buy-all\",\"home\",\"ls\",\"killAll\",\"startAll \",\"./start-grow-helpers.js \",\"./kill-all-grow-helpers.js \",\"./start-grow-helpers.js \",\"analyze\",\"backdoor\",\"help\",\"hack\",\"flight \",\"./test.js \",\"scan\",\"./test.js \",\"./scan-network.js \",\"./test.js \"],\"lastUpdate\":1693934146120,\"lastSave\":1693934144525,\"totalPlaytime\":31338978600,\"currentWork\":{\"ctor\":\"FactionWork\",\"data\":{\"type\":\"FACTION\",\"singularity\":false,\"cyclesWorked\":108277,\"factionWorkType\":\"hacking\",\"factionName\":\"Daedalus\"}},\"focus\":false,\"entropy\":0,\"identifier\":\"38aadbdb6216\"}}","AllServersSave":"{\"home\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"home\",\"httpPortOpen\":true,\"ip\":\"75.8.0.0\",\"isConnectedTo\":true,\"maxRam\":32,\"messages\":[\"hackers-starting-handbook.lit\",\"j0.msg\",\"j1.msg\",\"csec-test.msg\",\"j2.msg\",\"nitesec-test.msg\",\"j3.msg\",\"j4.msg\",\"19dfj3l1nd.msg\"],\"organizationName\":\"Home PC\",\"programs\":[\"NUKE.exe\",\"b1t_flum3.exe\",\"FTPCrack.exe\",\"relaySMTP.exe\",\"BruteSSH.exe\",\"DeepscanV1.exe\",\"AutoLink.exe\",\"fl1ght.exe\",\"HTTPWorm.exe\",\"ServerProfiler.exe\",\"DeepscanV2.exe\",\"SQLInject.exe\"],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"home\"}}],[\"run-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    let host = ns.args[0];\\n    let remote = ns.args[1];\\n    let script = 'simple-hack.js';\\n\\n    if (!ns.serverExists(host)) {\\n        ns.print(`Host '${host}'' doesn't exist!`);\\n        return 1;\\n    }\\n\\n    if (!ns.serverExists(remote)) {\\n        ns.print(`Remote '${remote}'' doesn't exist!`);\\n        return 2;\\n    }\\n\\n    if (!ns.fileExists(script, host)) {\\n        if (!ns.fileExists(script, 'home')) {\\n            ns.print(`Script '${script}' doesn't exist!`);\\n            return 3;\\n        }\\n\\n        ns.scp(script, host, 'home');\\n    }\\n\\n    let serverMaxRam = ns.getServerMaxRam(host);\\n    let serverUsedRam = ns.getServerUsedRam(host);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, host);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    if(maxThreads == 0)\\n    {\\n        ns.print(`Not enough ram to run '${script}', ${scriptRam}/${serverFreeRam}!`)\\n    }\\n\\n    ns.scriptKill(script, host);\\n\\n    if (!ns.exec(script, host, maxThreads, remote)) {\\n        ns.tprint(`Exec error running script '${script} on '${host}!`);\\n    }\\n\\n    \\n}\\n\",\"filename\":\"run-simple-hack.js\",\"server\":\"home\"}}],[\"auto-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS} ns*/\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n    /**\\n     * @constant\\n     * @default\\n     */\\n    const EXPLOITS = [\\n        'BruteSSH.exe',\\n        'FTPCrack.exe',\\n        'relaySMTP.exe',\\n        'HTTPWorm.exe',\\n        'SQLInject.exe'\\n    ];ns.\\n\\n    /** @function maxPortsToHack\\n     * Calculate how many ports you're able to open\\n     * @returns {number} number of ports you're able to open\\n     */\\n    function maxPortsToHack() {\\n        let maxPorts = 0;\\n        EXPLOITS.forEach(exploit => {\\n            if (ns.fileExists(exploit)) ++maxPorts;\\n        });\\n        // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);\\n        return maxPorts;\\n    }\\n\\n    /** @function analyzeServer\\n     * Analyze server requirements\\n     * @param {string} server \\n     * @returns {object} object containing server information\\n     */\\n    function analyzeServer(server) {\\n        let requiredHacking = ns.getServerRequiredHackingLevel(server);\\n        let requiredPorts = ns.getServerNumPortsRequired(server);\\n        let currentHacking = ns.getHackingLevel();\\n\\n        return {\\n            \\\"rootAccess\\\": ns.hasRootAccess(server),\\n            \\\"requiredHacking\\\": requiredHacking,\\n            \\\"requiredPorts\\\": requiredPorts,\\n            \\\"nukeAvailable\\\": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts)\\n        };\\n    }\\n\\n    /** @function runHack\\n     * Recursively scan, try to nuke and hack servers in the network\\n     * @param {string} server server to nuke and hack\\n     * @returns {Promise<number>} exit code; if negative error, if positive hack script PID, if 0 already running\\n     */\\n    async function runNuke(server) {\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            ns.print(`\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n            for (let i = 0; i < maxPortsToHack(); ++i) {\\n                switch (EXPLOITS[i]) {\\n                    case 'BruteSSH.exe':\\n                        ns.brutessh(server);\\n                        break;\\n\\n                    case 'FTPCrack.exe':\\n                        ns.ftpcrack(server);\\n                        break;\\n\\n                    case 'relaySMTP.exe':\\n                        ns.relaysmtp(server);\\n                        break;\\n\\n                    case 'HTTPWorm.exe':\\n                        ns.httpworm(server);\\n                        break;\\n\\n                    case 'SQLInject.exe':\\n                        ns.sqlinject(server);\\n                        break;\\n\\n                }\\n            }\\n            ns.nuke(server);\\n        }\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        ns.print('INFO ', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (serverStatus.rootAccess && serverStatus.nukeAvailable) {\\n            if (!ns.fileExists(script, 'home')) {\\n                ns.print(`ERROR Script '${script}' doesn't exist!`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await runNuke(nextServer);\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) {\\n                    let hackExitCode = await runHack(nextServer);\\n\\n                    // if (hackExitCode == 0) {\\n                    //     ns.print('INFO ' + `\\\"Hack already running on ${nextServer}\\\"`);\\n                    // } else if (hackExitCode == -6) {\\n                    //     ns.print('ERROR ' + `\\\"No root access to ${nextServer}!\\\"`);\\n                    // } else if (hackExitCode == -4) {\\n                    //     ns.print('WARN ' + `\\\"Not enough RAM to run script on ${nextServer}!\\\"`);\\n                    // } else {\\n                    //     if (hackExitCode < 0) {\\n                    //         ns.print('ERROR ' + `\\\"Hack exec ERROR on '${nextServer}': ${hackExitCode}!\\\"`);\\n                    //     } else {\\n                    //         ns.print('INFO ' + `\\\"Hack started on '${nextServer}'\\\"`);\\n                    //     }\\n                    // }\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n        await ns.sleep(10);\\n    }\\n\\n    ns.write('nuke-log.js', '', 'w');\\n    if (!ns.scriptRunning('simple-hack.js', 'n00dles')) ns.write('hack-log.js', '', 'w');\\n    ns.tprint(`TERMINAL = \\\"Running scan\\\"`);\\n\\n    while (true) {\\n        ns.print(`INFO Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(60000);\\n    }\\n}\\n\",\"filename\":\"auto-nuke.js\",\"server\":\"home\"}}],[\"hacknet-bot.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    const nodeCostThreshold = ns.args.length > 0 ? ns.args[0] : 0.2;\\n    const upgradeCostThreshold = ns.args.length > 1 ? ns.args[1] : 0.1;\\n    const upgradeCount = ns.args.length > 2 ? ns.args[2] : 1;\\n    const helperBuyThreshold = ns.args.length > 3 ? ns.args[3] : 0.2;\\n    const nodeCap = 24;\\n    const levelCap = 200;\\n    const ramCap = 64;\\n    const coreCap = 16;\\n    const serverRAM = 32;\\n    ns.tprint(`Bot started {nodeCostThreshold: ${nodeCostThreshold}, upgradeCostThreshold: ${upgradeCostThreshold}, upgradeCount: ${upgradeCount}}`);\\n\\n    \\n\\n    while (true) {\\n        let currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n\\n        let nodePurchaseCost = ns.hacknet.getPurchaseNodeCost();\\n        let nodeCount = ns.hacknet.numNodes();\\n\\n        if (nodeCount < nodeCap && nodePurchaseCost / Math.abs(currentMoney) < nodeCostThreshold) {\\n            ns.hacknet.purchaseNode();\\n            currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            ++nodeCount;\\n        }\\n\\n        for (let index = 0; index < nodeCount; ++index) {\\n            let nodeStats = ns.hacknet.getNodeStats(index);\\n\\n            if (nodeStats.level < levelCap && ns.hacknet.getLevelUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeLevel(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.ram < ramCap && ns.hacknet.getRamUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeRam(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n\\n            if (nodeStats.cores < coreCap && ns.hacknet.getCoreUpgradeCost(index, upgradeCount) / Math.abs(currentMoney) < upgradeCostThreshold) {\\n                ns.hacknet.upgradeCore(index, upgradeCount);\\n                currentMoney = ns.getServerMoneyAvailable(\\\"home\\\");\\n            }\\n        }\\n\\n        let serverCost = ns.getPurchasedServerCost(serverRAM);\\n\\n        if (serverCost < currentMoney * helperBuyThreshold) {\\n            let newServer = ns.purchaseServer('home', serverRAM);\\n            if (newServer != '') {\\n                ns.tprint(`Bought a server`);\\n                ns.scp('grow-helper.js', newServer);\\n                ns.scp('constants.js', newServer);\\n                let execExitCode = ns.exec('grow-helper.js', newServer, 10, 20);\\n                ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n            }\\n        }\\n\\n\\n\\n\\n        // let logFiles = ['hack-log.js', 'nuke-log.js'];\\n\\n        // for (let index = 0; index < logFiles.length; index++) {\\n        //     const logFile = logFiles[index];\\n        //     let portData = ns.readPort(index + 1);\\n        //     if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a');\\n        // }\\n\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"hacknet-bot.js\",\"server\":\"home\"}}],[\"kill-all-simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) ns.scriptKill('simple-hack.js', nextServer);\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    scanServer('home');\\n}\\n\",\"filename\":\"kill-all-simple-hack.js\",\"server\":\"home\"}}],[\"kill-hacknet.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    ns.scriptKill('hacknet-bot.js', 'home');\\n}\",\"filename\":\"kill-hacknet.js\",\"server\":\"home\"}}],[\"hack-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"hack-log.js\",\"server\":\"home\"}}],[\"kill-nuke.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    ns.scriptKill('auto-nuke.js', 'home');\\n}\",\"filename\":\"kill-nuke.js\",\"server\":\"home\"}}],[\"nuke-log.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"\",\"filename\":\"nuke-log.js\",\"server\":\"home\"}}],[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    await ns.grow(nextServer);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home\"}}],[\"buy-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    \\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.get\\n    if(ns.getPurchasedServerCost(16)\\n}\",\"filename\":\"buy-server.js\",\"server\":\"home\"}}],[\"buy-grow-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    let serverCost = ns.getPurchasedServerCost(16);\\n    let currentMoney = ns.getServerMoneyAvailable('home');\\n\\n    if (serverCost < 0.1 * currentMoney) {\\n        let newServer = ns.purchaseServer('home', 16);\\n        if (newServer != '') {\\n            ns.tprint(`Bought a server`);\\n            ns.scp('grow-helper.js', newServer);\\n            let execExitCode = ns.exec('grow-helper.js', newServer, 5, 20);\\n            ns.tprint(`Exec 'grow-helper.js' exit code: ${execExitCode}`);\\n        }\\n    }\\n}\",\"filename\":\"buy-grow-server.js\",\"server\":\"home\"}}],[\"start-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n    let script = 'grow-helper.js';\\n\\n\\n    let serverMaxRam = ns.getServerMaxRam(`home`);\\n    let serverUsedRam = ns.getServerUsedRam(`home`);\\n    let serverFreeRam = serverMaxRam - serverUsedRam;\\n    let scriptRam = ns.getScriptRam(script, `home`);\\n    let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n    if (maxThreads > 0) ns.exec(script, `home`, maxThreads);\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        let serverMaxRam = ns.getServerMaxRam(`home-${server}`);\\n        let serverUsedRam = ns.getServerUsedRam(`home-${server}`);\\n        let serverFreeRam = serverMaxRam - serverUsedRam;\\n        let scriptRam = ns.getScriptRam(script, `home-${server}`);\\n        let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n        ns.scp(script, `home-${server}`, 'home');\\n        ns.exec(script, `home-${server}`, maxThreads);\\n    }\\n}\",\"filename\":\"start-grow-helpers.js\",\"server\":\"home\"}}],[\"backdoor-command.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    backdoorCommand = 'run BruteSSH.exe; ';\\n    backdoorCommand += 'run FTPCrack.exe; ';\\n    backdoorCommand += 'run relaySMTP.exe; ';\\n    backdoorCommand += 'run HTTPWorm.exe; ';\\n    backdoorCommand += 'run SQLInject.exe; ';\\n    backdoorCommand += 'run NUKE.exe; ';\\n    backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-command.js\",\"server\":\"home\"}}],[\"download-all-lit.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let litFiles = ns.ls(nextServer, 'lit');\\n                ns.tprint(`Download from '${nextServer}': ${litFiles}`);\\n                if (ns.args[0] && litFiles.length) {\\n                    ns.scp(litFiles, 'home', nextServer);\\n                }\\n\\n                scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    scanServer('home');\\n}\",\"filename\":\"download-all-lit.js\",\"server\":\"home\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\nexport const EXPLOITS = [\\n    { name: 'BruteSSH.exe', function: 'ns.brutessh' },\\n    { name: 'FTPCrack.exe', function: 'ns.ftpcrack' },\\n    { name: 'relaySMTP.exe', function: 'ns.relaysmtp' },\\n    { name: 'HTTPWorm.exe', function: 'ns.httpworm' },\\n    { name: 'SQLInject.exe', function: 'ns.sqlinject' },\\n];\\n\\nexport const DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home\"}}],[\"auto-nuke-v2.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\n\\n\\n/**\\n * loop\\n *  get all servers\\n *  nuke if possible\\n *      send scripts hack, grow weaken\\n *  buy grow servers\\n *  start helpers if not running include home //remove from hacknet\\n *      grow if needed\\n *      weaken if needed\\n *      hack if no grow or weaken\\n *  do simple hack\\n *      check if money available\\n *      check threads\\n *      run hack \\n *      run grow to recover\\n *      run weaken if security too high\\n *  buy hack tools\\n */\\n\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    async function writeLog(type, obj) {\\n        let timeNow = new Date();\\n        let year = timeNow.getFullYear().toString().substring(2);\\n        let month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n        let day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n        let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n        let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n        let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n        let timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n        await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n        if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n    }\\n\\n    async function runHack(server) {\\n        let script = 'simple-hack.js';\\n\\n        let serverStatus = analyzeServer(server);\\n        await writeLog('ANALYZE', `{server: \\\"${server}\\\", status: ${JSON.stringify(serverStatus)}}`);\\n\\n        if (!serverStatus.rootAccess) {\\n            if (serverStatus.nukeAvailable) {\\n                await writeLog('NUKE', `\\\"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\\\"`);\\n                for (let i = 0; i < maxPortsToHack(); ++i) {\\n                    switch (EXPLOITS[i]) {\\n                        case 'BruteSSH.exe':\\n                            ns.brutessh(server);\\n                            break;\\n\\n                        case 'FTPCrack.exe':\\n                            ns.ftpcrack(server);\\n                            break;\\n\\n                        case 'relaySMTP.exe':\\n                            ns.relaysmtp(server);\\n                            break;\\n\\n                        case 'HTTPWorm.exe':\\n                            ns.httpworm(server);\\n                            break;\\n\\n                        case 'SQLInject.exe':\\n                            ns.sqlinject(server);\\n                            break;\\n\\n                    }\\n                }\\n                ns.nuke(server);\\n            }\\n        }\\n\\n        serverStatus = analyzeServer(server);\\n\\n        if (serverStatus.rootAccess) {\\n            if (!ns.fileExists(script, 'home')) {\\n                await writeLog('ERROR', `\\\"Script '${script}' doesn't exist!\\\"`);\\n                // return -3;\\n            }\\n            ns.scp(script, server, 'home');\\n\\n            let serverMaxRam = ns.getServerMaxRam(server);\\n            let serverUsedRam = ns.getServerUsedRam(server);\\n            let serverFreeRam = serverMaxRam - serverUsedRam;\\n            let scriptRam = ns.getScriptRam(script, server);\\n            let maxThreads = Math.floor(serverFreeRam / scriptRam);\\n\\n            let a = ns.scriptRunning(script, server);\\n            if (!a) {\\n                if (maxThreads == 0) {\\n                    // await writeLog('ERROR', `\\\"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!\\\"`);\\n                    return -4;\\n                }\\n\\n                let execExitCode = ns.exec(script, server, maxThreads, server);\\n\\n                if (!execExitCode) {\\n                    // await writeLog('ERROR', `\\\"Exec error running script '${script} on '${server}!\\\"`);\\n                    return -5;\\n                }\\n                else {\\n                    return execExitCode;\\n                }\\n            } else {\\n                // await writeLog('ERROR', `\\\"Hack already running on ${server}\\\"`);\\n                return 0;\\n            }\\n        }\\n\\n        return -6;\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n        let result = [];\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                result.concat(scanServer(nextServer, currentServer));\\n            }\\n        }\\n\\n        return [currentServer].concat(result);\\n    }\\n\\n    while (true) {\\n        let network = scanServer('home');\\n\\n        await ns.sleep(100);\\n    }\\n}\",\"filename\":\"auto-nuke-v2.js\",\"server\":\"home\"}}],[\"grow.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    await ns.grow(ns.args.length > 0 ? ns.args[0] : '');\\n}\",\"filename\":\"grow.js\",\"server\":\"home\"}}],[\"hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    await ns.hack(ns.args.length > 0 ? ns.args[0] : '');\\n}\",\"filename\":\"hack.js\",\"server\":\"home\"}}],[\"weaken.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    await ns.weaken(ns.args.length > 0 ? ns.args[0] : '')\\n}\",\"filename\":\"weaken.js\",\"server\":\"home\"}}],[\"kill-all-grow-helpers.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n    ns.scriptKill('grow-helper.js', `home`);\\n\\n    for (let server = 0; ns.serverExists(`home-${server}`); server++) {\\n        ns.scriptKill('grow-helper.js', `home-${server}`);\\n    }\\n}\\n\\n\\n\\n\\n\",\"filename\":\"kill-all-grow-helpers.js\",\"server\":\"home\"}}],[\"scan-network.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n    ns.disableLog('ALL');\\n\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n        ns.tprint(`${'┃  '.repeat(scanLevel)}┣${currentServer}: ${nextConnectString}`);\\n        ns.write('scan.txt', `${'┃  '.repeat(scanLevel)}┣━${currentServer}: ${nextConnectString}`+'\\\\n', 'a');\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                scanServer(nextServer, currentServer, nextConnectString, scanLevel+1);\\n            }\\n        }\\n    }\\n\\n    ns.tprint(`Running scan`);\\n    ns.write('scan.txt', ``, 'w');\\n    scanServer('home');\\n}\\n\",\"filename\":\"scan-network.js\",\"server\":\"home\"}}],[\"connect-server.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    /**\\n     * Recursively kill simple-hack.js running on servers in the network\\n     * @async\\n     * @param {string} currentServer server to scan\\n     */\\n    function scanServer(currentServer, targetServer, previousServer = currentServer) {\\n        // ns.tprint(currentServer);\\n        if (currentServer == targetServer) {\\n            return [currentServer];\\n        } else {\\n            let availableServers = ns.scan(currentServer);\\n\\n            for (let i = 0; i < availableServers.length; ++i) {\\n                let nextServer = availableServers[i];\\n\\n                if (nextServer != currentServer && nextServer != previousServer) {\\n                    let result = scanServer(nextServer, targetServer, currentServer);\\n\\n                    if (result != null) {\\n                        return [currentServer].concat(result);\\n                    }\\n                }\\n            }\\n\\n            return null;\\n        }\\n    }\\n\\n    let targetPath = scanServer('home', ns.args[0]);\\n    ns.tprint(targetPath);\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n    let backdoorCommand = '';\\n\\n    for (let index = 1; index < targetPath.length; index++) {\\n        const server = targetPath[index];\\n\\n        backdoorCommand += `connect ${server}; `;\\n    }\\n\\n    // ns.tprint(backdoorCommand);\\n    terminalInput.value = backdoorCommand;\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    // backdoorCommand = 'run BruteSSH.exe; ';\\n    // backdoorCommand += 'run FTPCrack.exe; ';\\n    // backdoorCommand += 'run relaySMTP.exe; ';\\n    // backdoorCommand += 'run HTTPWorm.exe; ';\\n    // backdoorCommand += 'run SQLInject.exe; ';\\n    // backdoorCommand += 'run NUKE.exe; ';\\n    // backdoorCommand += 'backdoor';\\n\\n    // ns.tprint(backdoorCommand);\\n    // terminalInput.value = backdoorCommand;\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"connect-server.js\",\"server\":\"home\"}}],[\"backdoor-all.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    async function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {\\n        let availableServers = ns.scan(currentServer);\\n        let nextConnectString = connectString + `connect ${currentServer}; `;\\n\\n        let backdoorCommand = nextConnectString;\\n        backdoorCommand += 'run BruteSSH.exe; ';\\n        backdoorCommand += 'run FTPCrack.exe; ';\\n        backdoorCommand += 'run relaySMTP.exe; ';\\n        backdoorCommand += 'run HTTPWorm.exe; ';\\n        backdoorCommand += 'run SQLInject.exe; ';\\n        backdoorCommand += 'run NUKE.exe; ';\\n        backdoorCommand += 'backdoor';\\n\\n        terminalInput.value = backdoorCommand;\\n        terminalInput[handler].onChange({ target: terminalInput });\\n        terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n        await ns.sleep(60000)\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                await scanServer(nextServer, currentServer, nextConnectString, scanLevel + 1);\\n            }\\n        }\\n    }\\n    \\n    await scanServer('home');\\n    terminalInput.value = 'home';\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"backdoor-all.js\",\"server\":\"home\"}}],[\"test.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"import { EXPLOITS } from \\\"./constants.js\\\"\\n\\n/** @param {import(\\\".\\\").NS } ns */\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // function scanServer(currentServer, previousServer = currentServer) {\\n    //     let availableServers = ns.scan(currentServer);\\n    //     let result = [];\\n\\n    //     for (let i = 0; i < availableServers.length; ++i) {\\n    //         let nextServer = availableServers[i];\\n\\n    //         if (nextServer != currentServer && nextServer != previousServer) {\\n    //             result.concat(scanServer(nextServer, currentServer));\\n    //         }\\n    //     }\\n\\n    //     return [currentServer].concat(result);\\n    // }\\n\\n    function maxPortsToHack() {\\n        let maxPorts = 0;\\n        for (const exploit of EXPLOITS) {\\n            if (ns.fileExists(exploit.name)) ++maxPorts;\\n        }\\n        // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);\\n        return maxPorts;\\n    }\\n\\n    function analyzeServer(server) {\\n        let requiredHacking = ns.getServerRequiredHackingLevel(server);\\n        let requiredPorts = ns.getServerNumPortsRequired(server);\\n        let currentHacking = ns.getHackingLevel();\\n\\n        return {\\n            \\\"name\\\": server,\\n            \\\"rootAccess\\\": ns.hasRootAccess(server),\\n            \\\"requiredHacking\\\": requiredHacking,\\n            \\\"requiredPorts\\\": requiredPorts,\\n            \\\"nukeAvailable\\\": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts),\\n            \\\"currentMoney\\\": ns.getServerMoneyAvailable(server),\\n            \\\"maxMoney\\\": ns.getServerMaxMoney(server),\\n            \\\"currentSecurity\\\": ns.getServerSecurityLevel(server),\\n            \\\"minSecurity\\\": ns.getServerMinSecurityLevel(server),\\n        };\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer, network = []) {\\n        let availableServers = ns.scan(currentServer);\\n        network.push(analyzeServer(currentServer));\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                scanServer(nextServer, currentServer, network);\\n            }\\n        }\\n        return network;\\n    }\\n\\n    let network = scanServer('home');\\nns.tprint(network[0])\\n    \\n}\",\"filename\":\"test.js\",\"server\":\"home\"}}],[\"document-bypass.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    const handler = Object.keys(terminalInput)[1];\\n\\n    terminalInput.value = \\\"COMMAND\\\";\\n    terminalInput[handler].onChange({ target: terminalInput });\\n    terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n}\",\"filename\":\"document-bypass.js\",\"server\":\"home\"}}],[\"auto-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"import { EXPLOITS } from \\\"./constants.js\\\";\\n\\n/**\\n * remove write log ✓\\n * loop\\n *  get all servers\\n *  nuke if possible\\n *      send scripts hack, grow weaken\\n *  backdoor factions\\n *  buy grow servers\\n *  start helpers if not running include home //remove from hacknet\\n *      grow if needed\\n *      weaken if needed\\n *      hack if no grow or weaken\\n *  do simple hack\\n *      check if money available\\n *      check threads\\n *      run hack \\n *      run grow to recover\\n *      run weaken if security too high\\n *  buy hack tools\\n */\\n\\n/** @param {import(\\\".\\\").NS } ns */\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    ns.getServerSecurityLevel();\\n    function maxPortsToHack() {\\n        let maxPorts = 0;\\n        EXPLOITS.forEach(exploit => {\\n            if (ns.fileExists(exploit)) ++maxPorts;\\n        });\\n        // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);\\n        return maxPorts;\\n    }\\n    function analyzeServer(server) {\\n        let requiredHacking = ns.getServerRequiredHackingLevel(server);\\n        let requiredPorts = ns.getServerNumPortsRequired(server);\\n        let currentHacking = ns.getHackingLevel();\\n\\n        return {\\n            \\\"name\\\": server,\\n            \\\"rootAccess\\\": ns.hasRootAccess(server),\\n            \\\"requiredHacking\\\": requiredHacking,\\n            \\\"requiredPorts\\\": requiredPorts,\\n            \\\"nukeAvailable\\\": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts),\\n            \\\"currentMoney\\\": ns.getServerMoneyAvailable(server),\\n            \\\"maxMoney\\\": ns.getServerMaxMoney(server),\\n            \\\"currentSecurity\\\": ns.getServerSecurityLevel(server),\\n            \\\"minSecurity\\\": ns.getServerMinSecurityLevel(server),\\n        };\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer, network = []) {\\n        let availableServers = ns.scan(currentServer);\\n        network.push(analyzeServer(currentServer));\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                scanServer(nextServer, currentServer, network);\\n            }\\n        }\\n        return network;\\n    }\\n\\n    while (true) {\\n        // Analyze all available hosts\\n        let network = scanServer('home');\\n\\n        // NUKE if possible\\n        for (const host of network) {\\n            if (host.nukeAvailable) {\\n                for (const exploit of EXPLOITS) {\\n                    if (ns.fileExists(exploit.name)) eval(`${exploit.function}(${host})`);\\n                }\\n                ns.nuke(host);\\n                host.rootAccess = ns.hasRootAccess(host);\\n            }\\n        }\\n\\n        // Find host with most money\\n        let maxMoneyHost = network[1];\\n        for (const host of network) {\\n            if (host.name != 'home' && host.rootAccess) {\\n                if (host.currentMoney > maxMoneyHost.currentMoney) {\\n                    maxMoneyHost = host;\\n                }\\n            }\\n        }\\n    }\\n}\",\"filename\":\"auto-hack.js\",\"server\":\"home\"}}],[\"start-hack-course.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nconst doc = eval('document');\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // const terminalInput = doc.getElementById(\\\"terminal-input\\\");\\n    // const handler = Object.keys(terminalInput)[1];\\n\\n    // terminalInput.value = \\\"COMMAND\\\";\\n    // terminalInput[handler].onChange({ target: terminalInput });\\n    // terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });\\n\\n    // const terminalButton = doc.querySelector();\\n    let terminal;\\n    let city;\\n    let travel;\\n    for (const elem of doc.querySelectorAll('div.MuiDrawer-root.MuiDrawer-docked p')) {\\n        if (elem.textContent == 'Terminal') {\\n            terminal = elem;\\n        }\\n        if (elem.textContent == 'City') {\\n            city = elem;\\n        }\\n        if (elem.textContent == 'Travel') {\\n            travel = elem;\\n        }\\n    }\\n\\n\\n    travel.click(); await ns.sleep(100);\\n\\n    for (const aevum of doc.querySelectorAll('div#root span')) {\\n        if (aevum.textContent == 'A') {\\n            aevum.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const travelConfirm of doc.querySelectorAll('div[role=\\\"presentation\\\"] p')) {\\n        if (travelConfirm.textContent == 'Travel') {\\n            travelConfirm.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    const closeButton = doc.querySelector('div[role=\\\"presentation\\\"] button');\\n    if(!closeButton == undefined) closeButton.click();\\n\\n    city.click(); await ns.sleep(100);\\n\\n    for (const uni of doc.querySelectorAll('div#root span')) {\\n        if (uni.textContent == 'U') {\\n            uni.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const course of doc.querySelectorAll('div#root button')) {\\n        if (course.textContent == 'Take Algorithms course ($-1.280k / sec)') {\\n            course.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n\\n    for (const closeCourse of doc.querySelectorAll('div#root button')) {\\n        if (closeCourse.textContent == 'Do something else simultaneously') {\\n            closeCourse.click(); await ns.sleep(100);\\n            break;\\n        }\\n    }\\n    await ns.sleep(1000);\\n    console.log(terminal)\\n    terminal.click(); await ns.sleep(100);\\n}\",\"filename\":\"start-hack-course.js\",\"server\":\"home\"}}],[\"alter-reality.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n    \\n    ns.alterReality();\\n    ns.rainbow('noodles');\\n}\",\"filename\":\"alter-reality.js\",\"server\":\"home\"}}],[\"t2.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    import { EXPLOITS } from \\\"./constants.js\\\"\\n    /**\\n     * remove write log ✓\\n     * loop\\n     *  get all servers\\n     *  nuke if possible\\n     *      send scripts hack, grow weaken\\n     *  backdoor factions\\n     *  buy grow servers\\n     *  start helpers if not running include home //remove from hacknet\\n     *      grow if needed\\n     *      weaken if needed\\n     *      hack if no grow or weaken\\n     *  do simple hack\\n     *      check if money available\\n     *      check threads\\n     *      run hack \\n     *      run grow to recover\\n     *      run weaken if security too high\\n     *  buy hack tools\\n     */\\n\\n    // ns.disableLog('ALL');\\n\\n    ns.getServerSecurityLevel();\\n    function maxPortsToHack() {\\n        let maxPorts = 0;\\n        EXPLOITS.forEach(exploit => {\\n            if (ns.fileExists(exploit)) ++maxPorts;\\n        });\\n        // ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);\\n        return maxPorts;\\n    }\\n\\n    function analyzeServer(server) {\\n        let requiredHacking = ns.getServerRequiredHackingLevel(server);\\n        let requiredPorts = ns.getServerNumPortsRequired(server);\\n        let currentHacking = ns.getHackingLevel();\\n\\n        return {\\n            \\\"name\\\": server,\\n            \\\"rootAccess\\\": ns.hasRootAccess(server),\\n            \\\"requiredHacking\\\": requiredHacking,\\n            \\\"requiredPorts\\\": requiredPorts,\\n            \\\"nukeAvailable\\\": (currentHacking >= requiredHacking && maxPortsToHack() >= requiredPorts),\\n            \\\"currentMoney\\\": ns.getServerMoneyAvailable(server),\\n            \\\"maxMoney\\\": ns.getServerMaxMoney(server),\\n            \\\"currentSecurity\\\": ns.getServerSecurityLevel(server),\\n            \\\"minSecurity\\\": ns.getServerMinSecurityLevel(server),\\n        };\\n    }\\n\\n    function scanServer(currentServer, previousServer = currentServer, network = []) {\\n        let availableServers = ns.scan(currentServer);\\n        network.push(analyzeServer(currentServer));\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                scanServer(nextServer, currentServer, network);\\n            }\\n        }\\n        return network;\\n    }\\n\\n    while (true) {\\n        // Analyze all available servers\\n        let network = scanServer('home');\\n\\n        // NUKE if possible\\n        for (const host of network) {\\n            if (host.nukeAvailable) {\\n                for (const exploit of EXPLOITS) {\\n                    if (ns.fileExists(exploit.name)) eval(`${exploit.function}(${host})`);\\n                }\\n                ns.nuke(host);\\n                ns.brutessh();\\n            }\\n        }\\n    }\\n}\",\"filename\":\"t2.js\",\"server\":\"home\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"foodnstuff\",\"sigma-cosmetics\",\"joesguns\",\"hong-fang-tea\",\"harakiri-sushi\",\"iron-gym\",\"darkweb\",\"home-0\",\"home-1\",\"home-2\",\"home-3\",\"home-4\",\"home-5\",\"home-6\",\"home-7\",\"home-8\",\"home-9\",\"home-10\",\"home-11\",\"home-12\",\"home-13\",\"home-14\",\"home-15\",\"home-16\",\"home-17\",\"home-18\",\"home-19\",\"home-20\",\"home-21\",\"home-22\",\"home-23\",\"home-24\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[[\"INFO.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"INFO.txt\",\"text\":\"{server: \\\"the-hub\\\", status: {\\\"rootAccess\\\":true,\\\"requiredHacking\\\":313,\\\"requiredPorts\\\":2,\\\"nukeAvailable\\\":false}}\"}}],[\"scan.txt\",{\"ctor\":\"TextFile\",\"data\":{\"filename\":\"scan.txt\",\"text\":\"┣━home: connect home; \\n┃  ┣━n00dles: connect home; connect n00dles; \\n┃  ┃  ┣━nectar-net: connect home; connect n00dles; connect nectar-net; \\n┃  ┃  ┃  ┣━silver-helix: connect home; connect n00dles; connect nectar-net; connect silver-helix; \\n┃  ┃  ┃  ┃  ┣━the-hub: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; \\n┃  ┃  ┃  ┃  ┃  ┣━syscore: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━rho-construction: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━galactic-cyber: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect galactic-cyber; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━global-pharm: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect global-pharm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnia: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect global-pharm; connect omnia; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━univ-energy: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect global-pharm; connect omnia; connect univ-energy; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━snap-fitness: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━deltaone: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━icarus: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━taiyang-digital: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━titan-labs: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; connect titan-labs; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━stormtech: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; connect titan-labs; connect stormtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━4sigma: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; connect titan-labs; connect stormtech; connect 4sigma; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nwo: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; connect titan-labs; connect stormtech; connect 4sigma; connect nwo; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━ecorp: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; connect titan-labs; connect stormtech; connect 4sigma; connect nwo; connect ecorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━megacorp: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; connect titan-labs; connect stormtech; connect 4sigma; connect nwo; connect megacorp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumassets: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect icarus; connect taiyang-digital; connect titan-labs; connect stormtech; connect 4sigma; connect nwo; connect fulcrumassets; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zeus-med: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect zeus-med; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━nova-med: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect deltaone; connect zeus-med; connect nova-med; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━unitalife: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━defcomm: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━infocomm: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect infocomm; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━microdyne: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect infocomm; connect microdyne; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━helios: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect infocomm; connect microdyne; connect helios; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━zb-def: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━applied-energetics: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect applied-energetics; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━run4theh111z: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━fulcrumtech: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect fulcrumtech; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━vitalife: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━omnitek: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect omnitek; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━b-and-a: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect omnitek; connect b-and-a; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━The-Cave: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect omnitek; connect b-and-a; connect The-Cave; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━kuai-gong: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect kuai-gong; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━blade: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect kuai-gong; connect blade; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━.: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect .; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━clarkinc: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect .; connect clarkinc; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━powerhouse-fitness: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect defcomm; connect zb-def; connect run4theh111z; connect vitalife; connect .; connect powerhouse-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━solaris: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect syscore; connect rho-construction; connect snap-fitness; connect unitalife; connect solaris; \\n┃  ┃  ┃  ┃  ┃  ┣━I.I.I.I: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect the-hub; connect I.I.I.I; \\n┃  ┃  ┃  ┃  ┣━avmnite-02h: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect avmnite-02h; \\n┃  ┃  ┃  ┃  ┃  ┣━catalyst: connect home; connect n00dles; connect nectar-net; connect silver-helix; connect avmnite-02h; connect catalyst; \\n┃  ┃  ┃  ┣━phantasy: connect home; connect n00dles; connect nectar-net; connect phantasy; \\n┃  ┃  ┃  ┃  ┣━netlink: connect home; connect n00dles; connect nectar-net; connect phantasy; connect netlink; \\n┃  ┃  ┃  ┃  ┃  ┣━summit-uni: connect home; connect n00dles; connect nectar-net; connect phantasy; connect netlink; connect summit-uni; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━aevum-police: connect home; connect n00dles; connect nectar-net; connect phantasy; connect netlink; connect summit-uni; connect aevum-police; \\n┃  ┃  ┃  ┃  ┣━crush-fitness: connect home; connect n00dles; connect nectar-net; connect phantasy; connect crush-fitness; \\n┃  ┣━foodnstuff: connect home; connect foodnstuff; \\n┃  ┣━sigma-cosmetics: connect home; connect sigma-cosmetics; \\n┃  ┣━joesguns: connect home; connect joesguns; \\n┃  ┃  ┣━max-hardware: connect home; connect joesguns; connect max-hardware; \\n┃  ┣━hong-fang-tea: connect home; connect hong-fang-tea; \\n┃  ┃  ┣━zer0: connect home; connect hong-fang-tea; connect zer0; \\n┃  ┃  ┃  ┣━neo-net: connect home; connect hong-fang-tea; connect zer0; connect neo-net; \\n┃  ┃  ┃  ┃  ┣━computek: connect home; connect hong-fang-tea; connect zer0; connect neo-net; connect computek; \\n┃  ┃  ┃  ┃  ┃  ┣━zb-institute: connect home; connect hong-fang-tea; connect zer0; connect neo-net; connect computek; connect zb-institute; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━lexo-corp: connect home; connect hong-fang-tea; connect zer0; connect neo-net; connect computek; connect zb-institute; connect lexo-corp; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━millenium-fitness: connect home; connect hong-fang-tea; connect zer0; connect neo-net; connect computek; connect zb-institute; connect millenium-fitness; \\n┃  ┃  ┃  ┃  ┃  ┃  ┃  ┣━aerocorp: connect home; connect hong-fang-tea; connect zer0; connect neo-net; connect computek; connect zb-institute; connect millenium-fitness; connect aerocorp; \\n┃  ┃  ┃  ┣━omega-net: connect home; connect hong-fang-tea; connect zer0; connect omega-net; \\n┃  ┃  ┃  ┃  ┣━johnson-ortho: connect home; connect hong-fang-tea; connect zer0; connect omega-net; connect johnson-ortho; \\n┃  ┃  ┃  ┃  ┃  ┣━rothman-uni: connect home; connect hong-fang-tea; connect zer0; connect omega-net; connect johnson-ortho; connect rothman-uni; \\n┃  ┃  ┃  ┃  ┃  ┃  ┣━alpha-ent: connect home; connect hong-fang-tea; connect zer0; connect omega-net; connect johnson-ortho; connect rothman-uni; connect alpha-ent; \\n┃  ┃  ┣━CSEC: connect home; connect hong-fang-tea; connect CSEC; \\n┃  ┣━harakiri-sushi: connect home; connect harakiri-sushi; \\n┃  ┣━iron-gym: connect home; connect iron-gym; \\n┃  ┣━darkweb: connect home; connect darkweb; \\n┃  ┣━home-0: connect home; connect home-0; \\n┃  ┣━home-1: connect home; connect home-1; \\n┃  ┣━home-2: connect home; connect home-2; \\n┃  ┣━home-3: connect home; connect home-3; \\n┃  ┣━home-4: connect home; connect home-4; \\n┃  ┣━home-5: connect home; connect home-5; \\n┃  ┣━home-6: connect home; connect home-6; \\n┃  ┣━home-7: connect home; connect home-7; \\n┃  ┣━home-8: connect home; connect home-8; \\n┃  ┣━home-9: connect home; connect home-9; \\n┃  ┣━home-10: connect home; connect home-10; \\n┃  ┣━home-11: connect home; connect home-11; \\n┃  ┣━home-12: connect home; connect home-12; \\n┃  ┣━home-13: connect home; connect home-13; \\n┃  ┣━home-14: connect home; connect home-14; \\n┃  ┣━home-15: connect home; connect home-15; \\n┃  ┣━home-16: connect home; connect home-16; \\n┃  ┣━home-17: connect home; connect home-17; \\n┃  ┣━home-18: connect home; connect home-18; \\n┃  ┣━home-19: connect home; connect home-19; \\n┃  ┣━home-20: connect home; connect home-20; \\n┃  ┣━home-21: connect home; connect home-21; \\n┃  ┣━home-22: connect home; connect home-22; \\n┃  ┣━home-23: connect home; connect home-23; \\n┃  ┣━home-24: connect home; connect home-24; \\n\"}}]]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.016,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{},\"filename\":\"hacknet-bot.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.938,\"onlineExpGained\":0,\"onlineMoneyMade\":0,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":10.1,\"server\":\"home\",\"scriptKey\":\"hacknet-bot.js*[]\",\"title\":\"hacknet-bot.js \",\"threads\":1,\"temporary\":false}},{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,20,0],\"nectar-net\":[0,0,20,0],\"silver-helix\":[0,0,20,0],\"the-hub\":[0,0,20,0],\"syscore\":[0,0,20,0],\"rho-construction\":[0,0,20,0],\"galactic-cyber\":[0,0,20,0],\"global-pharm\":[0,0,20,0],\"omnia\":[0,0,20,0],\"univ-energy\":[0,0,20,0],\"snap-fitness\":[0,0,20,0],\"deltaone\":[0,0,20,0],\"icarus\":[0,0,20,0],\"taiyang-digital\":[0,0,20,0],\"titan-labs\":[0,0,20,0],\"stormtech\":[0,0,20,0],\"4sigma\":[0,0,20,0],\"nwo\":[0,0,20,0],\"ecorp\":[0,0,20,0],\"megacorp\":[0,0,20,0],\"fulcrumassets\":[0,0,20,0],\"zeus-med\":[0,0,20,0],\"nova-med\":[0,0,20,0],\"unitalife\":[0,0,20,0],\"defcomm\":[0,0,20,0],\"infocomm\":[0,0,20,0],\"microdyne\":[0,0,20,0],\"helios\":[0,0,20,0],\"zb-def\":[0,0,20,0],\"applied-energetics\":[0,0,20,0],\"fulcrumtech\":[0,0,20,0],\"vitalife\":[0,0,20,0],\"omnitek\":[0,0,20,0],\"b-and-a\":[0,0,20,0],\"kuai-gong\":[0,0,20,0],\"blade\":[0,0,20,0],\"clarkinc\":[0,0,20,0],\"powerhouse-fitness\":[0,0,20,0],\"solaris\":[0,0,20,0],\"catalyst\":[0,0,20,0],\"phantasy\":[0,0,20,0],\"netlink\":[0,0,20,0],\"summit-uni\":[0,0,20,0],\"aevum-police\":[0,0,15,0],\"crush-fitness\":[0,0,15,0],\"foodnstuff\":[0,0,15,0],\"sigma-cosmetics\":[0,0,15,0],\"joesguns\":[0,0,15,0],\"max-hardware\":[0,0,15,0],\"hong-fang-tea\":[0,0,15,0],\"zer0\":[0,0,15,0],\"neo-net\":[0,0,15,0],\"computek\":[0,0,15,0],\"zb-institute\":[0,0,15,0],\"lexo-corp\":[0,0,15,0],\"millenium-fitness\":[0,0,15,0],\"aerocorp\":[0,0,15,0],\"omega-net\":[0,0,15,0],\"johnson-ortho\":[0,0,15,0],\"rothman-uni\":[0,0,15,0],\"alpha-ent\":[0,0,15,0],\"harakiri-sushi\":[0,0,15,0],\"iron-gym\":[0,0,15,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":249352.92538221332,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":5,\"temporary\":false}}]}},\"ecorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-362592-BitRunners.cct\",\"type\":\"Proper 2-Coloring of a Graph\",\"data\":[12,[[4,6],[6,11],[1,5],[0,5],[0,2],[3,11],[5,8],[1,3],[3,8],[7,8],[8,11],[4,10],[0,7],[1,11],[5,9],[3,9],[4,8],[10,11],[6,7]]],\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"ecorp\",\"httpPortOpen\":true,\"ip\":\"75.4.9.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"ECorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"ecorp\"}}]]},\"serversOnNetwork\":[\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":100,\"minDifficulty\":33,\"moneyAvailable\":320598143487.4511,\"moneyMax\":1439343826525,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1118,\"serverGrowth\":99,\"runningScripts\":[]}},\"megacorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"megacorp\",\"httpPortOpen\":true,\"ip\":\"3.6.6.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"MegaCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"megacorp\"}}]]},\"serversOnNetwork\":[\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":100,\"minDifficulty\":33,\"moneyAvailable\":277083780226.7677,\"moneyMax\":1243983584450,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1160,\"serverGrowth\":99,\"runningScripts\":[]}},\"b-and-a\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"b-and-a\",\"httpPortOpen\":true,\"ip\":\"71.9.9.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Bachman & Associates\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"b-and-a\"}}]]},\"serversOnNetwork\":[\"omnitek\",\"The-Cave\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":87,\"hackDifficulty\":93.08000000000021,\"minDifficulty\":29,\"moneyAvailable\":90527569785.75769,\"moneyMax\":647194529300,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":990,\"serverGrowth\":65,\"runningScripts\":[]}},\"blade\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-891916.cct\",\"type\":\"Generate IP Addresses\",\"data\":\"1853614210\",\"reward\":{\"type\":1}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-442082.cct\",\"type\":\"Algorithmic Stock Trader III\",\"data\":[162,199,174,188,161,139,181,82,89,71,2,89,126,52,188,96,102,7,182,128,73,9,152,58,196,57,109,85,140,187,32,59,132,106,62,86,126,195,183,68,90,81,69,173,152,164,82,126],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"blade\",\"httpPortOpen\":true,\"ip\":\"84.4.5.1\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Blade Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"blade\"}}]]},\"serversOnNetwork\":[\"kuai-gong\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":92,\"hackDifficulty\":63.938000000000756,\"minDifficulty\":31,\"moneyAvailable\":152275346012.4552,\"moneyMax\":254638723975,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1030,\"serverGrowth\":73,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"blade\"],\"dataMap\":{\"blade\":[413938452923.8272,702,3978,572]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":16008.300637614399,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.949,\"onlineExpGained\":1571264.4901402264,\"onlineMoneyMade\":413938452923.8272,\"onlineRunningTime\":75271.40999946564,\"ramUsage\":2.4,\"server\":\"blade\",\"scriptKey\":\"simple-hack.js*[\\\"blade\\\"]\",\"title\":\"simple-hack.js blade\",\"threads\":26,\"temporary\":false}}]}},\"nwo\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"nwo\",\"httpPortOpen\":true,\"ip\":\"85.0.7.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"NWO\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nwo\"}}]]},\"serversOnNetwork\":[\"4sigma\",\"ecorp\",\"megacorp\",\"fulcrumassets\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":100,\"minDifficulty\":33,\"moneyAvailable\":108972635856.94789,\"moneyMax\":795126736750,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1159,\"serverGrowth\":71,\"runningScripts\":[]}},\"clarkinc\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"clarkinc\",\"httpPortOpen\":true,\"ip\":\"98.1.4.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"beyond-man.lit\",\"cost-of-immortality.lit\"],\"organizationName\":\"Clarke Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"clarkinc\"}}]]},\"serversOnNetwork\":[\".\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":55,\"hackDifficulty\":61.08000000000024,\"minDifficulty\":18,\"moneyAvailable\":80543579363.77708,\"moneyMax\":425395840275,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":988,\"serverGrowth\":52,\"runningScripts\":[]}},\"omnitek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omnitek\",\"httpPortOpen\":true,\"ip\":\"57.8.5.6\",\"isConnectedTo\":false,\"maxRam\":512,\"messages\":[\"coded-intelligence.lit\",\"history-of-synthoids.lit\"],\"organizationName\":\"OmniTek Incorporated\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omnitek\"}}]]},\"serversOnNetwork\":[\"vitalife\",\"b-and-a\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":74.97200000000011,\"minDifficulty\":33,\"moneyAvailable\":12093.69978357012,\"moneyMax\":512201038850,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1051,\"serverGrowth\":97,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omnitek\"],\"dataMap\":{\"omnitek\":[391538513278.4003,852,29820,2556]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":113450.92777698798,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.951,\"onlineExpGained\":10608619.495591165,\"onlineMoneyMade\":391538513278.4003,\"onlineRunningTime\":75271.60999946564,\"ramUsage\":2.4,\"server\":\"omnitek\",\"scriptKey\":\"simple-hack.js*[\\\"omnitek\\\"]\",\"title\":\"simple-hack.js omnitek\",\"threads\":213,\"temporary\":false}}]}},\"4sigma\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"4sigma\",\"httpPortOpen\":true,\"ip\":\"44.5.4.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Four Sigma\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"4sigma\"}}]]},\"serversOnNetwork\":[\"stormtech\",\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":73.08000000000021,\"minDifficulty\":22,\"moneyAvailable\":134131719249.37524,\"moneyMax\":398521862400,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1056,\"serverGrowth\":86,\"runningScripts\":[]}},\"kuai-gong\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"kuai-gong\",\"httpPortOpen\":true,\"ip\":\"14.2.4.9\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"KuaiGong International\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"kuai-gong\"}}]]},\"serversOnNetwork\":[\"vitalife\",\"blade\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":98,\"hackDifficulty\":100,\"minDifficulty\":33,\"moneyAvailable\":129273165497.30762,\"moneyMax\":664084630100,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":954,\"serverGrowth\":91,\"runningScripts\":[]}},\"fulcrumtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"fulcrumtech\",\"httpPortOpen\":true,\"ip\":\"7.1.6.1\",\"isConnectedTo\":false,\"maxRam\":2048,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"fulcrumtech\"}}]]},\"serversOnNetwork\":[\"run4theh111z\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":92,\"hackDifficulty\":100,\"minDifficulty\":31,\"moneyAvailable\":42491881600,\"moneyMax\":42491881600,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1205,\"serverGrowth\":81,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"fulcrumtech\"],\"dataMap\":{\"fulcrumtech\":[132752886716.45389,3412,92124,3412]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":337626.56646971335,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.953,\"onlineExpGained\":29674286.570249867,\"onlineMoneyMade\":132752886716.45389,\"onlineRunningTime\":75271.60999946564,\"ramUsage\":2.4,\"server\":\"fulcrumtech\",\"scriptKey\":\"simple-hack.js*[\\\"fulcrumtech\\\"]\",\"title\":\"simple-hack.js fulcrumtech\",\"threads\":853,\"temporary\":false}}]}},\"fulcrumassets\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"fulcrumassets\",\"httpPortOpen\":true,\"ip\":\"53.1.2.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Fulcrum Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"fulcrumassets\"}}]]},\"serversOnNetwork\":[\"nwo\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":99,\"hackDifficulty\":100,\"minDifficulty\":33,\"moneyAvailable\":1019029.333414893,\"moneyMax\":25000000,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1283,\"serverGrowth\":1,\"runningScripts\":[]}},\"stormtech\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-403822-TheBlackHand.cct\",\"type\":\"Unique Paths in a Grid II\",\"data\":[[0,1,0,0,0,0,0,1,0,0,0,0],[0,0,1,0,0,0,0,0,0,0,0,0],[0,0,1,1,0,0,1,1,0,0,0,0],[0,0,0,0,0,1,0,0,1,0,0,0],[0,0,0,0,0,0,0,1,0,0,0,0]],\"reward\":{\"type\":0,\"name\":\"The Black Hand\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"stormtech\",\"httpPortOpen\":true,\"ip\":\"5.8.4.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Storm Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"stormtech\"}}]]},\"serversOnNetwork\":[\"titan-labs\",\"4sigma\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":82,\"hackDifficulty\":88.08000000000021,\"minDifficulty\":27,\"moneyAvailable\":5550249961.186835,\"moneyMax\":28276833825,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":896,\"serverGrowth\":78,\"runningScripts\":[]}},\"defcomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"defcomm\",\"httpPortOpen\":true,\"ip\":\"67.3.5.9\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DefComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"defcomm\"}}]]},\"serversOnNetwork\":[\"unitalife\",\"infocomm\",\"zb-def\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":88,\"hackDifficulty\":94.08000000000021,\"minDifficulty\":29,\"moneyAvailable\":2738038310.622282,\"moneyMax\":21417077100,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":916,\"serverGrowth\":61,\"runningScripts\":[]}},\"infocomm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-970921-CyberSec.cct\",\"type\":\"Unique Paths in a Grid II\",\"data\":[[0,0,0],[0,0,1],[0,0,0],[0,0,0],[0,0,1],[0,0,1],[1,0,0],[0,0,0]],\"reward\":{\"type\":0,\"name\":\"CyberSec\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"infocomm\",\"httpPortOpen\":true,\"ip\":\"49.2.4.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"InfoComm\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"infocomm\"}}]]},\"serversOnNetwork\":[\"defcomm\",\"microdyne\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":84,\"hackDifficulty\":90.08000000000021,\"minDifficulty\":28,\"moneyAvailable\":1999950393.0061347,\"moneyMax\":19600577075,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":897,\"serverGrowth\":47,\"runningScripts\":[]}},\"helios\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-118414.cct\",\"type\":\"Unique Paths in a Grid I\",\"data\":[8,14],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"helios\",\"httpPortOpen\":true,\"ip\":\"69.1.9.1\",\"isConnectedTo\":false,\"maxRam\":256,\"messages\":[\"beyond-man.lit\"],\"organizationName\":\"Helios Labs\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"helios\"}}]]},\"serversOnNetwork\":[\"microdyne\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":95,\"hackDifficulty\":72.11200000000242,\"minDifficulty\":32,\"moneyAvailable\":15378073364.898031,\"moneyMax\":16400713125,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":833,\"serverGrowth\":76,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"helios\"],\"dataMap\":{\"helios\":[80172646740.89752,1590,19610,1802]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":71183.46531240085,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.954,\"onlineExpGained\":7097222.942676072,\"onlineMoneyMade\":80172646740.89752,\"onlineRunningTime\":75271.60999946564,\"ramUsage\":2.4,\"server\":\"helios\",\"scriptKey\":\"simple-hack.js*[\\\"helios\\\"]\",\"title\":\"simple-hack.js helios\",\"threads\":106,\"temporary\":false}}]}},\"vitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-96950.cct\",\"type\":\"Encryption II: Vigenère Cipher\",\"data\":[\"MOUSEARRAYSHIFTCACHECLOUD\",\"SCANNER\"],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"vitalife\",\"httpPortOpen\":true,\"ip\":\"98.6.3.6\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"VitaLife\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"vitalife\"}}]]},\"serversOnNetwork\":[\"run4theh111z\",\"omnitek\",\"kuai-gong\",\".\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":85,\"hackDifficulty\":58.60200000000056,\"minDifficulty\":28,\"moneyAvailable\":9122758733.106333,\"moneyMax\":18107842550,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":851,\"serverGrowth\":65,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"vitalife\"],\"dataMap\":{\"vitalife\":[22325005498.271027,702,5616,650]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":19879.659028662856,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.954,\"onlineExpGained\":1936843.1635691344,\"onlineMoneyMade\":22325005498.271027,\"onlineRunningTime\":75271.60999946564,\"ramUsage\":2.4,\"server\":\"vitalife\",\"scriptKey\":\"simple-hack.js*[\\\"vitalife\\\"]\",\"title\":\"simple-hack.js vitalife\",\"threads\":26,\"temporary\":false}}]}},\"icarus\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"icarus\",\"httpPortOpen\":true,\"ip\":\"99.0.5.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Icarus Microsystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"icarus\"}}]]},\"serversOnNetwork\":[\"deltaone\",\"taiyang-digital\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":93,\"hackDifficulty\":99.08000000000021,\"minDifficulty\":31,\"moneyAvailable\":4939921965.389653,\"moneyMax\":24318322700,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":884,\"serverGrowth\":90,\"runningScripts\":[]}},\"univ-energy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-228475.cct\",\"type\":\"Algorithmic Stock Trader I\",\"data\":[20,14,134,194,30,64,180,93,35,179,183,173,132,99,63,34,97,128,153,69,53,34,111,33,70,20,116,34,1,127,50,176,142],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"univ-energy\",\"httpPortOpen\":true,\"ip\":\"33.7.7.9\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Universal Energy\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"univ-energy\"}}]]},\"serversOnNetwork\":[\"omnia\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":84,\"hackDifficulty\":72.82000000000133,\"minDifficulty\":28,\"moneyAvailable\":26056520611.939762,\"moneyMax\":29172033950,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":822,\"serverGrowth\":84,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"univ-energy\"],\"dataMap\":{\"univ-energy\":[18636271358.696377,150,618,348]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":2918.1382387240146,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.955,\"onlineExpGained\":320185.5970429858,\"onlineMoneyMade\":18636271358.696377,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"univ-energy\",\"scriptKey\":\"simple-hack.js*[\\\"univ-energy\\\"]\",\"title\":\"simple-hack.js univ-energy\",\"threads\":6,\"temporary\":false}}]}},\"titan-labs\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-165069.cct\",\"type\":\"Minimum Path Sum in a Triangle\",\"data\":[[5],[3,7],[5,7,2],[6,4,4,3],[7,2,6,1,5],[9,6,2,1,6,4],[8,3,2,7,1,2,9],[5,4,2,6,6,4,3,2],[5,5,4,7,1,3,1,1,7],[6,1,5,1,3,8,1,9,3,5]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"titan-labs\",\"httpPortOpen\":true,\"ip\":\"44.4.4.3\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"coded-intelligence.lit\"],\"organizationName\":\"Titan Laboratories\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"titan-labs\"}}]]},\"serversOnNetwork\":[\"taiyang-digital\",\"stormtech\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":77,\"hackDifficulty\":54.000000000000256,\"minDifficulty\":26,\"moneyAvailable\":13706685856.348486,\"moneyMax\":21933761450,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":808,\"serverGrowth\":65,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"titan-labs\"],\"dataMap\":{\"titan-labs\":[53460444937.40047,728,6422,650]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":20806.40928177996,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.956,\"onlineExpGained\":1978149.3472570844,\"onlineMoneyMade\":53460444937.40047,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"titan-labs\",\"scriptKey\":\"simple-hack.js*[\\\"titan-labs\\\"]\",\"title\":\"simple-hack.js titan-labs\",\"threads\":26,\"temporary\":false}}]}},\"microdyne\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-168024.cct\",\"type\":\"HammingCodes: Encoded Binary to Integer\",\"data\":\"1000000010000001000010000111010001000011000010001000101110001100\",\"reward\":{\"type\":1}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-893137.cct\",\"type\":\"Compression II: LZ Decompression\",\"data\":\"7j4Hh3e4840983BNm4694hNocmIES898woJblT8F582bl94\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"microdyne\",\"httpPortOpen\":true,\"ip\":\"10.3.5.3\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"Microdyne Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"microdyne\"}}]]},\"serversOnNetwork\":[\"infocomm\",\"helios\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":45.55800000000003,\"minDifficulty\":22,\"moneyAvailable\":15493033025,\"moneyMax\":15493033025,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":821,\"serverGrowth\":70,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"microdyne\"],\"dataMap\":{\"microdyne\":[54367793721.98811,858,7566,728]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":21860.197560743138,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.9569999999999,\"onlineExpGained\":2000886.6960761345,\"onlineMoneyMade\":54367793721.98811,\"onlineRunningTime\":75271.60999946564,\"ramUsage\":2.4,\"server\":\"microdyne\",\"scriptKey\":\"simple-hack.js*[\\\"microdyne\\\"]\",\"title\":\"simple-hack.js microdyne\",\"threads\":26,\"temporary\":false}}]}},\"taiyang-digital\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"taiyang-digital\",\"httpPortOpen\":true,\"ip\":\"95.7.0.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"A-Green-Tomorrow.lit\",\"brighter-than-the-sun.lit\"],\"organizationName\":\"Taiyang Digital\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"taiyang-digital\"}}]]},\"serversOnNetwork\":[\"icarus\",\"titan-labs\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":85.08000000000021,\"minDifficulty\":26,\"moneyAvailable\":4163901380.1113973,\"moneyMax\":20878122900,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":884,\"serverGrowth\":76,\"runningScripts\":[]}},\"galactic-cyber\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-458073.cct\",\"type\":\"Algorithmic Stock Trader IV\",\"data\":[2,[21,188,17,4]],\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-991917-Daedalus.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":133256667941151,\"reward\":{\"type\":0,\"name\":\"Daedalus\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"galactic-cyber\",\"httpPortOpen\":true,\"ip\":\"30.9.1.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Galactic Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"galactic-cyber\"}}]]},\"serversOnNetwork\":[\"rho-construction\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":66.08000000000023,\"minDifficulty\":20,\"moneyAvailable\":9070386050.026611,\"moneyMax\":19047853600,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":832,\"serverGrowth\":90,\"runningScripts\":[]}},\"aerocorp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-648419.cct\",\"type\":\"Sanitize Parentheses in Expression\",\"data\":\"(((((a\",\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-459937.cct\",\"type\":\"Algorithmic Stock Trader IV\",\"data\":[9,[2,43,8,83,33,44,57]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aerocorp\",\"httpPortOpen\":true,\"ip\":\"15.2.8.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"AeroCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"aerocorp\"}}]]},\"serversOnNetwork\":[\"millenium-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":88,\"hackDifficulty\":92.56000000000016,\"minDifficulty\":29,\"moneyAvailable\":2607897062.467221,\"moneyMax\":26310499750,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":879,\"serverGrowth\":63,\"runningScripts\":[]}},\"omnia\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omnia\",\"httpPortOpen\":true,\"ip\":\"12.1.1.4\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"history-of-synthoids.lit\"],\"organizationName\":\"Omnia Cybersystems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omnia\"}}]]},\"serversOnNetwork\":[\"global-pharm\",\"univ-energy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":85,\"hackDifficulty\":56.21000000000087,\"minDifficulty\":28,\"moneyAvailable\":14602856514.890125,\"moneyMax\":24395761225,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":877,\"serverGrowth\":70,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omnia\"],\"dataMap\":{\"omnia\":[64576645221.3318,702,5070,728]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":17749.745562420427,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.958,\"onlineExpGained\":1801840.154956045,\"onlineMoneyMade\":64576645221.3318,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"omnia\",\"scriptKey\":\"simple-hack.js*[\\\"omnia\\\"]\",\"title\":\"simple-hack.js omnia\",\"threads\":26,\"temporary\":false}}]}},\"zb-def\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-def\",\"httpPortOpen\":true,\"ip\":\"2.1.9.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"synthetic-muscles.lit\"],\"organizationName\":\"ZB Defense Industries\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zb-def\"}}]]},\"serversOnNetwork\":[\"defcomm\",\"applied-energetics\",\"run4theh111z\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":57,\"hackDifficulty\":63.08000000000024,\"minDifficulty\":19,\"moneyAvailable\":7986069670.429871,\"moneyMax\":24923820700,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":812,\"serverGrowth\":72,\"runningScripts\":[]}},\"applied-energetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"applied-energetics\",\"httpPortOpen\":true,\"ip\":\"94.8.5.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Applied Energetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"applied-energetics\"}}]]},\"serversOnNetwork\":[\"zb-def\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":74,\"hackDifficulty\":80.08000000000021,\"minDifficulty\":25,\"moneyAvailable\":4617386727.563117,\"moneyMax\":23873329100,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":822,\"serverGrowth\":70,\"runningScripts\":[]}},\"solaris\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"solaris\",\"httpPortOpen\":true,\"ip\":\"74.5.8.1\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"A-Green-Tomorrow.lit\",\"the-failed-frontier.lit\"],\"organizationName\":\"Solaris Space Systems\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"solaris\"}}]]},\"serversOnNetwork\":[\"unitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":53.03400000000027,\"minDifficulty\":26,\"moneyAvailable\":15527841002.32407,\"moneyMax\":21948436775,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":817,\"serverGrowth\":77,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"solaris\"],\"dataMap\":{\"solaris\":[58279650165.42384,884,6344,676]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":21703.283121717002,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.959,\"onlineExpGained\":2030899.9965172492,\"onlineMoneyMade\":58279650165.42384,\"onlineRunningTime\":75271.40999946564,\"ramUsage\":2.4,\"server\":\"solaris\",\"scriptKey\":\"simple-hack.js*[\\\"solaris\\\"]\",\"title\":\"simple-hack.js solaris\",\"threads\":26,\"temporary\":false}}]}},\"deltaone\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"deltaone\",\"httpPortOpen\":true,\"ip\":\"72.6.0.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"DeltaOne\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"deltaone\"}}]]},\"serversOnNetwork\":[\"snap-fitness\",\"icarus\",\"zeus-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":76,\"hackDifficulty\":82.08000000000021,\"minDifficulty\":25,\"moneyAvailable\":5609130682.698856,\"moneyMax\":34429441350,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":822,\"serverGrowth\":64,\"runningScripts\":[]}},\"global-pharm\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-510467-Daedalus.cct\",\"type\":\"Find Largest Prime Factor\",\"data\":855407679,\"reward\":{\"type\":0,\"name\":\"Daedalus\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"global-pharm\",\"httpPortOpen\":true,\"ip\":\"21.8.5.1\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"A-Green-Tomorrow.lit\"],\"organizationName\":\"Global Pharmaceuticals\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"global-pharm\"}}]]},\"serversOnNetwork\":[\"rho-construction\",\"omnia\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":70.15000000000133,\"minDifficulty\":26,\"moneyAvailable\":38786849054.16877,\"moneyMax\":40986049675,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":834,\"serverGrowth\":86,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"global-pharm\"],\"dataMap\":{\"global-pharm\":[38168100374.2145,192,720,306]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":3185.0418254748683,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.96,\"onlineExpGained\":324169.0056533971,\"onlineMoneyMade\":38168100374.2145,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"global-pharm\",\"scriptKey\":\"simple-hack.js*[\\\"global-pharm\\\"]\",\"title\":\"simple-hack.js global-pharm\",\"threads\":6,\"temporary\":false}}]}},\"nova-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"nova-med\",\"httpPortOpen\":true,\"ip\":\"98.6.1.2\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Nova Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nova-med\"}}]]},\"serversOnNetwork\":[\"zeus-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":73,\"hackDifficulty\":79.08000000000021,\"minDifficulty\":24,\"moneyAvailable\":5841916856.725197,\"moneyMax\":30965100450,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":812,\"serverGrowth\":68,\"runningScripts\":[]}},\"zeus-med\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-997369.cct\",\"type\":\"Minimum Path Sum in a Triangle\",\"data\":[[8],[5,6],[8,1,5],[9,8,8,5],[5,6,4,4,5]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zeus-med\",\"httpPortOpen\":true,\"ip\":\"27.4.3.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Zeus Medical\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zeus-med\"}}]]},\"serversOnNetwork\":[\"deltaone\",\"nova-med\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":70,\"hackDifficulty\":76.08000000000021,\"minDifficulty\":23,\"moneyAvailable\":9656282859.664518,\"moneyMax\":36112582825,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":820,\"serverGrowth\":80,\"runningScripts\":[]}},\"unitalife\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"unitalife\",\"httpPortOpen\":true,\"ip\":\"32.9.4.3\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"UnitaLife Group\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"unitalife\"}}]]},\"serversOnNetwork\":[\"snap-fitness\",\"defcomm\",\"solaris\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":54.022000000000766,\"minDifficulty\":26,\"moneyAvailable\":26300758925,\"moneyMax\":26300758925,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":815,\"serverGrowth\":78,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"unitalife\"],\"dataMap\":{\"unitalife\":[93951034023.34406,780,5798,754]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":18414.932828573958,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.961,\"onlineExpGained\":1884168.3054716692,\"onlineMoneyMade\":93951034023.34406,\"onlineRunningTime\":75271.60999946564,\"ramUsage\":2.4,\"server\":\"unitalife\",\"scriptKey\":\"simple-hack.js*[\\\"unitalife\\\"]\",\"title\":\"simple-hack.js unitalife\",\"threads\":26,\"temporary\":false}}]}},\"lexo-corp\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"lexo-corp\",\"httpPortOpen\":true,\"ip\":\"67.7.6.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"LexoCorp\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"lexo-corp\"}}]]},\"serversOnNetwork\":[\"zb-institute\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":67,\"hackDifficulty\":52.20000000000038,\"minDifficulty\":22,\"moneyAvailable\":8030974473.409178,\"moneyMax\":19223273000,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":730,\"serverGrowth\":59,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"lexo-corp\"],\"dataMap\":{\"lexo-corp\":[23536875396.75671,429,3679,403]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":10933.874067137396,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.962,\"onlineExpGained\":1012532.0384935127,\"onlineMoneyMade\":23536875396.75671,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"lexo-corp\",\"scriptKey\":\"simple-hack.js*[\\\"lexo-corp\\\"]\",\"title\":\"simple-hack.js lexo-corp\",\"threads\":13,\"temporary\":false}}]}},\"rho-construction\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-412880.cct\",\"type\":\"Proper 2-Coloring of a Graph\",\"data\":[8,[[1,7],[2,5],[2,7],[4,6],[4,5],[2,4],[1,3],[0,1]]],\"reward\":{\"type\":1}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-452287.cct\",\"type\":\"Encryption I: Caesar Cipher\",\"data\":[\"LOGIN QUEUE TRASH SHIFT ARRAY\",4],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rho-construction\",\"httpPortOpen\":false,\"ip\":\"46.7.2.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Rho Construction\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rho-construction\"}}]]},\"serversOnNetwork\":[\"syscore\",\"galactic-cyber\",\"global-pharm\",\"snap-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":44,\"hackDifficulty\":46.80000000000024,\"minDifficulty\":15,\"moneyAvailable\":14812053975,\"moneyMax\":14812053975,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":494,\"serverGrowth\":49,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rho-construction\"],\"dataMap\":{\"rho-construction\":[48417060652.02645,481,6903,468]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":14528.685000443373,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.963,\"onlineExpGained\":1236002.281803392,\"onlineMoneyMade\":48417060652.02645,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"rho-construction\",\"scriptKey\":\"simple-hack.js*[\\\"rho-construction\\\"]\",\"title\":\"simple-hack.js rho-construction\",\"threads\":13,\"temporary\":false}}]}},\"alpha-ent\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"alpha-ent\",\"httpPortOpen\":true,\"ip\":\"39.6.5.3\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"Alpha Enterprises\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"alpha-ent\"}}]]},\"serversOnNetwork\":[\"rothman-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":61.002000000000784,\"minDifficulty\":22,\"moneyAvailable\":7982721640.151786,\"moneyMax\":15162568550,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":567,\"serverGrowth\":58,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"alpha-ent\"],\"dataMap\":{\"alpha-ent\":[8769516029.202875,198,1890,210]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":5465.076331575653,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.964,\"onlineExpGained\":503719.7276834965,\"onlineMoneyMade\":8769516029.202875,\"onlineRunningTime\":75271.00999946565,\"ramUsage\":2.4,\"server\":\"alpha-ent\",\"scriptKey\":\"simple-hack.js*[\\\"alpha-ent\\\"]\",\"title\":\"simple-hack.js alpha-ent\",\"threads\":6,\"temporary\":false}}]}},\"aevum-police\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-161042.cct\",\"type\":\"Array Jumping Game II\",\"data\":[3,6,5,4,1,3,1,1,3,4,4,1],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"aevum-police\",\"httpPortOpen\":true,\"ip\":\"13.5.9.1\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"Aevum Police Headquarters\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"aevum-police\"}}]]},\"serversOnNetwork\":[\"summit-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":79,\"hackDifficulty\":67.5260000000001,\"minDifficulty\":26,\"moneyAvailable\":1390590643.8987541,\"moneyMax\":9980731350,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":429,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"aevum-police\"],\"dataMap\":{\"aevum-police\":[10233468185.376606,676,11232,832]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":38578.79506453906,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.965,\"onlineExpGained\":3306938.960032878,\"onlineMoneyMade\":10233468185.376606,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"aevum-police\",\"scriptKey\":\"simple-hack.js*[\\\"aevum-police\\\"]\",\"title\":\"simple-hack.js aevum-police\",\"threads\":26,\"temporary\":false}}]}},\"rothman-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-478734.cct\",\"type\":\"Sanitize Parentheses in Expression\",\"data\":\")(((()(((((\",\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-846607.cct\",\"type\":\"Merge Overlapping Intervals\",\"data\":[[15,16],[13,16],[1,9]],\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"rothman-uni\",\"httpPortOpen\":false,\"ip\":\"30.7.4.4\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"tensions-in-tech-race.lit\"],\"organizationName\":\"Rothman University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"rothman-uni\"}}]]},\"serversOnNetwork\":[\"johnson-ortho\",\"alpha-ent\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":53,\"hackDifficulty\":77.74000000000005,\"minDifficulty\":18,\"moneyAvailable\":733428203.6823237,\"moneyMax\":5800248875,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":416,\"serverGrowth\":43,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"rothman-uni\"],\"dataMap\":{\"rothman-uni\":[2570290935.1366935,424,21306,1484]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":51108.560382580275,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.966,\"onlineExpGained\":4287533.768569787,\"onlineMoneyMade\":2570290935.1366935,\"onlineRunningTime\":75271.00999946565,\"ramUsage\":2.4,\"server\":\"rothman-uni\",\"scriptKey\":\"simple-hack.js*[\\\"rothman-uni\\\"]\",\"title\":\"simple-hack.js rothman-uni\",\"threads\":53,\"temporary\":false}}]}},\"zb-institute\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-745531.cct\",\"type\":\"Find Largest Prime Factor\",\"data\":638360739,\"reward\":{\"type\":1}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zb-institute\",\"httpPortOpen\":true,\"ip\":\"43.0.2.5\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[],\"organizationName\":\"ZB Institute of Technology\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zb-institute\"}}]]},\"serversOnNetwork\":[\"computek\",\"lexo-corp\",\"millenium-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":78,\"hackDifficulty\":55.86000000000149,\"minDifficulty\":26,\"moneyAvailable\":10390561923.056591,\"moneyMax\":23236791575,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":749,\"serverGrowth\":77,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zb-institute\"],\"dataMap\":{\"zb-institute\":[72820606257.25685,1378,14151,1272]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":46922.86365212606,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.967,\"onlineExpGained\":4309858.638560857,\"onlineMoneyMade\":72820606257.25685,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"zb-institute\",\"scriptKey\":\"simple-hack.js*[\\\"zb-institute\\\"]\",\"title\":\"simple-hack.js zb-institute\",\"threads\":53,\"temporary\":false}}]}},\"summit-uni\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"summit-uni\",\"httpPortOpen\":false,\"ip\":\"19.8.8.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"secret-societies.lit\",\"the-failed-frontier.lit\",\"synthetic-muscles.lit\"],\"organizationName\":\"Summit University\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"summit-uni\"}}]]},\"serversOnNetwork\":[\"netlink\",\"aevum-police\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":49.63000000000023,\"minDifficulty\":20,\"moneyAvailable\":8287290725,\"moneyMax\":8287290725,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":442,\"serverGrowth\":57,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"summit-uni\"],\"dataMap\":{\"summit-uni\":[29932479847.84374,624,7033,598]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":18833.546873397736,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.968,\"onlineExpGained\":1684458.5916776995,\"onlineMoneyMade\":29932479847.84374,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"summit-uni\",\"scriptKey\":\"simple-hack.js*[\\\"summit-uni\\\"]\",\"title\":\"simple-hack.js summit-uni\",\"threads\":13,\"temporary\":false}}]}},\"syscore\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-619942-TheBlackHand.cct\",\"type\":\"HammingCodes: Encoded Binary to Integer\",\"data\":\"1100000000000000100000000000000111101100111001100010011110011100\",\"reward\":{\"type\":0,\"name\":\"The Black Hand\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"syscore\",\"httpPortOpen\":true,\"ip\":\"88.9.3.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"SysCore Securities\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXPLOITS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"syscore\"}}]]},\"serversOnNetwork\":[\"the-hub\",\"rho-construction\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":80,\"hackDifficulty\":86.08000000000021,\"minDifficulty\":27,\"moneyAvailable\":1600702654.9119787,\"moneyMax\":10962156550,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":554,\"serverGrowth\":62,\"runningScripts\":[]}},\"catalyst\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"catalyst\",\"httpPortOpen\":false,\"ip\":\"75.9.7.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"tensions-in-tech-race.lit\"],\"organizationName\":\"Catalyst Ventures\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"catalyst\"}}]]},\"serversOnNetwork\":[\"avmnite-02h\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":65,\"hackDifficulty\":56.51000000000022,\"minDifficulty\":22,\"moneyAvailable\":4019895330.9788017,\"moneyMax\":9638136750,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":440,\"serverGrowth\":49,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"catalyst\"],\"dataMap\":{\"catalyst\":[14168177738.752508,507,6370,507]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":18216.985251418562,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.969,\"onlineExpGained\":1614351.7661523419,\"onlineMoneyMade\":14168177738.752508,\"onlineRunningTime\":75271.40999946564,\"ramUsage\":2.4,\"server\":\"catalyst\",\"scriptKey\":\"simple-hack.js*[\\\"catalyst\\\"]\",\"title\":\"simple-hack.js catalyst\",\"threads\":13,\"temporary\":false}}]}},\"the-hub\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-488134-TheBlackHand.cct\",\"type\":\"Minimum Path Sum in a Triangle\",\"data\":[[6],[2,5],[6,5,5],[9,1,8,7],[1,4,3,1,9],[8,9,1,7,4,6],[6,9,5,2,9,4,8],[7,9,9,8,4,4,5,9],[9,9,4,2,5,2,4,6,6],[8,4,7,9,8,7,9,1,6,4]],\"reward\":{\"type\":0,\"name\":\"The Black Hand\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"the-hub\",\"httpPortOpen\":false,\"ip\":\"3.2.7.5\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"The Hub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXPLOITS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"the-hub\"}}]]},\"serversOnNetwork\":[\"silver-helix\",\"syscore\",\"I.I.I.I\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":40,\"hackDifficulty\":64.82199999999965,\"minDifficulty\":13,\"moneyAvailable\":2306068121.5837765,\"moneyMax\":4168167700,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":284,\"serverGrowth\":50,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"the-hub\"],\"dataMap\":{\"the-hub\":[22966783600.45914,1274,18564,1300]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":43720.79539356449,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.97,\"onlineExpGained\":3082805.544049127,\"onlineMoneyMade\":22966783600.45914,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"the-hub\",\"scriptKey\":\"simple-hack.js*[\\\"the-hub\\\"]\",\"title\":\"simple-hack.js the-hub\",\"threads\":26,\"temporary\":false}}]}},\"computek\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-43349-Netburners.cct\",\"type\":\"Total Ways to Sum\",\"data\":49,\"reward\":{\"type\":0,\"name\":\"Netburners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"computek\",\"httpPortOpen\":false,\"ip\":\"34.8.0.0\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"man-and-machine.lit\"],\"organizationName\":\"CompuTek\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"computek\"}}]]},\"serversOnNetwork\":[\"neo-net\",\"zb-institute\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":64,\"hackDifficulty\":68.56000000000016,\"minDifficulty\":21,\"moneyAvailable\":705252865.8085825,\"moneyMax\":6110179575,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":366,\"serverGrowth\":54,\"runningScripts\":[]}},\"netlink\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"netlink\",\"httpPortOpen\":false,\"ip\":\"33.8.1.3\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"simulated-reality.lit\"],\"organizationName\":\"NetLink Technologies\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"netlink\"}}]]},\"serversOnNetwork\":[\"phantasy\",\"summit-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":68,\"hackDifficulty\":72.81200000000229,\"minDifficulty\":23,\"moneyAvailable\":1603199441.2834933,\"moneyMax\":6875000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":406,\"serverGrowth\":47,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"netlink\"],\"dataMap\":{\"netlink\":[13628426654.129509,1272,23691,1855]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":76051.81662317574,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.971,\"onlineExpGained\":6106740.302447504,\"onlineMoneyMade\":13628426654.129509,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"netlink\",\"scriptKey\":\"simple-hack.js*[\\\"netlink\\\"]\",\"title\":\"simple-hack.js netlink\",\"threads\":53,\"temporary\":false}}]}},\"johnson-ortho\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-384075-CyberSec.cct\",\"type\":\"Minimum Path Sum in a Triangle\",\"data\":[[1],[9,5],[7,6,2],[2,2,6,6],[4,1,2,6,4],[1,1,2,2,1,1],[3,8,3,1,6,4,1],[5,8,1,8,1,2,6,3],[9,1,3,8,4,5,3,3,1]],\"reward\":{\"type\":0,\"name\":\"CyberSec\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"johnson-ortho\",\"httpPortOpen\":false,\"ip\":\"74.9.0.5\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Johnson Orthopedics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"johnson-ortho\"}}]]},\"serversOnNetwork\":[\"omega-net\",\"rothman-uni\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":47,\"hackDifficulty\":51.56000000000018,\"minDifficulty\":16,\"moneyAvailable\":429818706.6868335,\"moneyMax\":2035993625,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":261,\"serverGrowth\":63,\"runningScripts\":[]}},\"n00dles\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"n00dles\",\"httpPortOpen\":false,\"ip\":\"97.7.4.3\",\"isConnectedTo\":false,\"maxRam\":4,\"messages\":[],\"organizationName\":\"Noodle Bar\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXPLOITS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"n00dles\"}}]]},\"serversOnNetwork\":[\"home\",\"nectar-net\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1.991999999998217,\"minDifficulty\":1,\"moneyAvailable\":1528833.3359695794,\"moneyMax\":1750000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":1,\"serverGrowth\":3000,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"n00dles\"],\"dataMap\":{\"n00dles\":[5003212369.425425,90476,22617,5372]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":40513.76991987086,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.971,\"onlineExpGained\":3798638.5008239867,\"onlineMoneyMade\":5003212369.425425,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"n00dles\",\"scriptKey\":\"simple-hack.js*[\\\"n00dles\\\"]\",\"title\":\"simple-hack.js n00dles\",\"threads\":1,\"temporary\":false}}]}},\"foodnstuff\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"foodnstuff\",\"httpPortOpen\":false,\"ip\":\"66.5.1.1\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"sector-12-crime.lit\"],\"organizationName\":\"FoodNStuff\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"foodnstuff\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":92.06800000005886,\"minDifficulty\":3,\"moneyAvailable\":21423515.89464292,\"moneyMax\":50000000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":1,\"serverGrowth\":5,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"foodnstuff\"],\"dataMap\":{\"foodnstuff\":[175397532.122867,4224,228750,18540]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":157274.35690132916,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.972,\"onlineExpGained\":14872324.959864657,\"onlineMoneyMade\":175397532.122867,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"foodnstuff\",\"scriptKey\":\"simple-hack.js*[\\\"foodnstuff\\\"]\",\"title\":\"simple-hack.js foodnstuff\",\"threads\":6,\"temporary\":false}}]}},\"sigma-cosmetics\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"sigma-cosmetics\",\"httpPortOpen\":false,\"ip\":\"82.7.4.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Sigma Cosmetics\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"sigma-cosmetics\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":10,\"hackDifficulty\":88.3000000000278,\"minDifficulty\":3,\"moneyAvailable\":25461790.744432267,\"moneyMax\":57500000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":5,\"serverGrowth\":10,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"sigma-cosmetics\"],\"dataMap\":{\"sigma-cosmetics\":[198932458.77437797,2838,104958,8592]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":72514.58485361488,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.973,\"onlineExpGained\":6869565.23762699,\"onlineMoneyMade\":198932458.77437797,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"sigma-cosmetics\",\"scriptKey\":\"simple-hack.js*[\\\"sigma-cosmetics\\\"]\",\"title\":\"simple-hack.js sigma-cosmetics\",\"threads\":6,\"temporary\":false}}]}},\"joesguns\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"joesguns\",\"httpPortOpen\":false,\"ip\":\"53.1.6.4\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Joe's Guns\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"joesguns\"}}]]},\"serversOnNetwork\":[\"home\",\"max-hardware\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":80.79200000001788,\"minDifficulty\":5,\"moneyAvailable\":55475734.91329358,\"moneyMax\":62500000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":10,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"joesguns\"],\"dataMap\":{\"joesguns\":[516626164.07851017,2598,66426,5502]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":58456.2066924091,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.973,\"onlineExpGained\":5484292.260824375,\"onlineMoneyMade\":516626164.07851017,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"joesguns\",\"scriptKey\":\"simple-hack.js*[\\\"joesguns\\\"]\",\"title\":\"simple-hack.js joesguns\",\"threads\":6,\"temporary\":false}}]}},\"zer0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"zer0\",\"httpPortOpen\":false,\"ip\":\"55.5.3.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"ZER0 Nightclub\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"zer0\"}}]]},\"serversOnNetwork\":[\"hong-fang-tea\",\"neo-net\",\"omega-net\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":70.70600000000243,\"minDifficulty\":8,\"moneyAvailable\":187500000,\"moneyMax\":187500000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":75,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"zer0\"],\"dataMap\":{\"zer0\":[1502315161.381578,962,31642,988]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":49830.63665985506,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.974,\"onlineExpGained\":3428602.7240056135,\"onlineMoneyMade\":1502315161.381578,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"zer0\",\"scriptKey\":\"simple-hack.js*[\\\"zer0\\\"]\",\"title\":\"simple-hack.js zer0\",\"threads\":13,\"temporary\":false}}]}},\"nectar-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-682650.cct\",\"type\":\"Compression I: RLE Compression\",\"data\":\"QQQQQQQ22kkkkkkkYYTTBLL2222222ww5cqqVVVVVVVVVVzZZZZYSDAA6GqqqPPPPPPPPZnlllllllll\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"nectar-net\",\"httpPortOpen\":false,\"ip\":\"55.6.1.3\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"Nectar Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXPLOITS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"nectar-net\"}}]]},\"serversOnNetwork\":[\"n00dles\",\"silver-helix\",\"phantasy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":79.56600000001119,\"minDifficulty\":7,\"moneyAvailable\":63929431.994555846,\"moneyMax\":68750000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":20,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"nectar-net\"],\"dataMap\":{\"nectar-net\":[591364555.14804,1782,37842,3144]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":42349.78915575864,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.974,\"onlineExpGained\":3770158.5138936886,\"onlineMoneyMade\":591364555.14804,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"nectar-net\",\"scriptKey\":\"simple-hack.js*[\\\"nectar-net\\\"]\",\"title\":\"simple-hack.js nectar-net\",\"threads\":6,\"temporary\":false}}]}},\"neo-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-242053-Daedalus.cct\",\"type\":\"Compression II: LZ Decompression\",\"data\":\"2qg426YFDdHW572Cn749qajBgQup4062igRBq971e32\",\"reward\":{\"type\":0,\"name\":\"Daedalus\"}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-867749.cct\",\"type\":\"Find All Valid Math Expressions\",\"data\":[\"15924265\",55],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"neo-net\",\"httpPortOpen\":false,\"ip\":\"74.9.2.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-hidden-world.lit\"],\"organizationName\":\"Neo Nightclub Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"neo-net\"}}]]},\"serversOnNetwork\":[\"zer0\",\"computek\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":25,\"hackDifficulty\":77.47600000001773,\"minDifficulty\":8,\"moneyAvailable\":43222408.25034117,\"moneyMax\":125000000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":50,\"serverGrowth\":25,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"neo-net\"],\"dataMap\":{\"neo-net\":[341107774.53334564,1625,35165,2860]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":45678.11577334723,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.975,\"onlineExpGained\":4077517.1854059594,\"onlineMoneyMade\":341107774.53334564,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"neo-net\",\"scriptKey\":\"simple-hack.js*[\\\"neo-net\\\"]\",\"title\":\"simple-hack.js neo-net\",\"threads\":13,\"temporary\":false}}]}},\"silver-helix\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-891765.cct\",\"type\":\"Find Largest Prime Factor\",\"data\":389979910,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"silver-helix\",\"httpPortOpen\":false,\"ip\":\"99.7.1.4\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[\"new-triads.lit\"],\"organizationName\":\"Silver Helix\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\nimport { EXPLOITS } from \\\"./constants.js\\\";\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"silver-helix\"}}]]},\"serversOnNetwork\":[\"nectar-net\",\"the-hub\",\"avmnite-02h\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":79.2859999999994,\"minDifficulty\":10,\"moneyAvailable\":495143811.7038423,\"moneyMax\":1125000000,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":150,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"silver-helix\"],\"dataMap\":{\"silver-helix\":[3419237213.350884,1300,25142,2002]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":40582.009391435175,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.975,\"onlineExpGained\":3338600.7182634096,\"onlineMoneyMade\":3419237213.350884,\"onlineRunningTime\":75271.80999946564,\"ramUsage\":2.4,\"server\":\"silver-helix\",\"scriptKey\":\"simple-hack.js*[\\\"silver-helix\\\"]\",\"title\":\"simple-hack.js silver-helix\",\"threads\":26,\"temporary\":false}}]}},\"hong-fang-tea\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"hong-fang-tea\",\"httpPortOpen\":false,\"ip\":\"82.8.9.2\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"brighter-than-the-sun.lit\"],\"organizationName\":\"HongFang Teahouse\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"hong-fang-tea\"}}]]},\"serversOnNetwork\":[\"home\",\"zer0\",\"CSEC\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":80.25800000000721,\"minDifficulty\":5,\"moneyAvailable\":25345671.82140993,\"moneyMax\":75000000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":30,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"hong-fang-tea\"],\"dataMap\":{\"hong-fang-tea\":[129419174.59300582,996,26796,1938]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":26818.983869500404,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.9759999999999,\"onlineExpGained\":2183878.628398533,\"onlineMoneyMade\":129419174.59300582,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"hong-fang-tea\",\"scriptKey\":\"simple-hack.js*[\\\"hong-fang-tea\\\"]\",\"title\":\"simple-hack.js hong-fang-tea\",\"threads\":6,\"temporary\":false}}]}},\"harakiri-sushi\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"harakiri-sushi\",\"httpPortOpen\":false,\"ip\":\"37.5.8.9\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\"HaraKiri Sushi Bar Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"harakiri-sushi\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":7.867999999999994,\"minDifficulty\":5,\"moneyAvailable\":100000000,\"moneyMax\":100000000,\"numOpenPortsRequired\":0,\"openPortCount\":3,\"requiredHackingSkill\":40,\"serverGrowth\":40,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"harakiri-sushi\"],\"dataMap\":{\"harakiri-sushi\":[520316443.30833745,186,144990,54]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":104042.20844306379,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.977,\"onlineExpGained\":10583798.618561571,\"onlineMoneyMade\":520316443.30833745,\"onlineRunningTime\":75271.00999946565,\"ramUsage\":2.4,\"server\":\"harakiri-sushi\",\"scriptKey\":\"simple-hack.js*[\\\"harakiri-sushi\\\"]\",\"title\":\"simple-hack.js harakiri-sushi\",\"threads\":6,\"temporary\":false}}]}},\"phantasy\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-590088.cct\",\"type\":\"Shortest Path in a Grid\",\"data\":[[0,1,0,0,0,0,1,0,0],[0,0,0,0,0,1,0,0,0],[0,0,0,0,1,0,1,1,0],[0,0,1,1,0,1,1,0,0],[1,0,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,0,0]],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"phantasy\",\"httpPortOpen\":false,\"ip\":\"27.8.6.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Phantasy Club\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"phantasy\"}}]]},\"serversOnNetwork\":[\"nectar-net\",\"netlink\",\"crush-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":20,\"hackDifficulty\":73.30200000000505,\"minDifficulty\":7,\"moneyAvailable\":449702897.0013203,\"moneyMax\":600000000,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":100,\"serverGrowth\":35,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"phantasy\"],\"dataMap\":{\"phantasy\":[3799434974.5052733,1183,23751,1417]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":34304.17780244385,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.977,\"onlineExpGained\":2310114.6400152766,\"onlineMoneyMade\":3799434974.5052733,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"phantasy\",\"scriptKey\":\"simple-hack.js*[\\\"phantasy\\\"]\",\"title\":\"simple-hack.js phantasy\",\"threads\":13,\"temporary\":false}}]}},\"max-hardware\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-651157.cct\",\"type\":\"Generate IP Addresses\",\"data\":\"818323222\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"max-hardware\",\"httpPortOpen\":false,\"ip\":\"98.7.2.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Max Hardware Store\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"max-hardware\"}}]]},\"serversOnNetwork\":[\"joesguns\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":15,\"hackDifficulty\":10.705999999999888,\"minDifficulty\":5,\"moneyAvailable\":250000000,\"moneyMax\":250000000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":80,\"serverGrowth\":30,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"max-hardware\"],\"dataMap\":{\"max-hardware\":[3883750323.1633325,663,157846,507]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":147511.80527294546,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.978,\"onlineExpGained\":11588468.781441055,\"onlineMoneyMade\":3883750323.1633325,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"max-hardware\",\"scriptKey\":\"simple-hack.js*[\\\"max-hardware\\\"]\",\"title\":\"simple-hack.js max-hardware\",\"threads\":13,\"temporary\":false}}]}},\"omega-net\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-236353.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":1337,\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"omega-net\",\"httpPortOpen\":false,\"ip\":\"75.5.9.5\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"the-new-god.lit\"],\"organizationName\":\"Omega Software\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"omega-net\"}}]]},\"serversOnNetwork\":[\"zer0\",\"johnson-ortho\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":32,\"hackDifficulty\":61.831999999999795,\"minDifficulty\":11,\"moneyAvailable\":512632305.9432826,\"moneyMax\":1534199500,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":210,\"serverGrowth\":38,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"omega-net\"],\"dataMap\":{\"omega-net\":[4125400156.7833204,780,14664,767]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":28093.57193266591,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.978,\"onlineExpGained\":1985141.0820189926,\"onlineMoneyMade\":4125400156.7833204,\"onlineRunningTime\":75271.00999946565,\"ramUsage\":2.4,\"server\":\"omega-net\",\"scriptKey\":\"simple-hack.js*[\\\"omega-net\\\"]\",\"title\":\"simple-hack.js omega-net\",\"threads\":13,\"temporary\":false}}]}},\"crush-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"crush-fitness\",\"httpPortOpen\":false,\"ip\":\"75.9.8.7\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Crush Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"crush-fitness\"}}]]},\"serversOnNetwork\":[\"phantasy\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":38,\"hackDifficulty\":42.56000000000018,\"minDifficulty\":13,\"moneyAvailable\":139624353.5146695,\"moneyMax\":1281719450,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":232,\"serverGrowth\":31,\"runningScripts\":[]}},\"iron-gym\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"iron-gym\",\"httpPortOpen\":false,\"ip\":\"39.1.3.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"Iron Gym Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"iron-gym\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":30,\"hackDifficulty\":80.888000000007,\"minDifficulty\":10,\"moneyAvailable\":65974879.37347341,\"moneyMax\":500000000,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":100,\"serverGrowth\":20,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"iron-gym\"],\"dataMap\":{\"iron-gym\":[365647644.625374,702,20319,1313]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":35574.75301261816,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.979,\"onlineExpGained\":2617068.8490722743,\"onlineMoneyMade\":365647644.625374,\"onlineRunningTime\":75271.00999946565,\"ramUsage\":2.4,\"server\":\"iron-gym\",\"scriptKey\":\"simple-hack.js*[\\\"iron-gym\\\"]\",\"title\":\"simple-hack.js iron-gym\",\"threads\":13,\"temporary\":false}}]}},\"millenium-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"millenium-fitness\",\"httpPortOpen\":false,\"ip\":\"29.1.5.5\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[],\"organizationName\":\"Millenium Fitness Network\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"millenium-fitness\"}}]]},\"serversOnNetwork\":[\"zb-institute\",\"aerocorp\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":53,\"hackDifficulty\":76.27400000000195,\"minDifficulty\":18,\"moneyAvailable\":931325624.4750679,\"moneyMax\":6250000000,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":484,\"serverGrowth\":32,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"millenium-fitness\"],\"dataMap\":{\"millenium-fitness\":[6424003561.400033,742,21041,1537]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":53748.46167833994,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.979,\"onlineExpGained\":4289967.102150134,\"onlineMoneyMade\":6424003561.400033,\"onlineRunningTime\":75271.20999946565,\"ramUsage\":2.4,\"server\":\"millenium-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"millenium-fitness\\\"]\",\"title\":\"simple-hack.js millenium-fitness\",\"threads\":53,\"temporary\":false}}]}},\"powerhouse-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-154295.cct\",\"type\":\"Shortest Path in a Grid\",\"data\":[[0,0,0,0,0,1,0,0,0,0,0,0],[0,0,0,0,0,1,0,0,0,1,0,0],[0,0,0,0,1,0,0,0,0,0,1,0],[0,0,1,1,0,1,0,0,0,0,0,0],[0,0,0,0,0,1,0,0,0,0,0,0],[1,0,0,0,0,0,0,0,0,0,0,1],[0,0,0,1,0,1,1,1,0,0,1,0],[1,0,1,0,1,0,0,1,1,0,0,0],[0,1,1,0,1,0,0,1,0,0,0,0]],\"reward\":{\"type\":1}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-929563-Daedalus.cct\",\"type\":\"Encryption II: Vigenère Cipher\",\"data\":[\"ENTERFRAMEMEDIATRASHMACRO\",\"COMPUTING\"],\"reward\":{\"type\":0,\"name\":\"Daedalus\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"powerhouse-fitness\",\"httpPortOpen\":true,\"ip\":\"16.0.7.5\",\"isConnectedTo\":false,\"maxRam\":64,\"messages\":[],\"organizationName\":\"Powerhouse Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"powerhouse-fitness\"}}]]},\"serversOnNetwork\":[\".\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":60,\"hackDifficulty\":41.980000000000096,\"minDifficulty\":20,\"moneyAvailable\":13370477137.638605,\"moneyMax\":22500000000,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1050,\"serverGrowth\":56,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[\"powerhouse-fitness\"],\"dataMap\":{\"powerhouse-fitness\":[58490072913.12123,754,6396,650]},\"filename\":\"simple-hack.js\",\"offlineExpGained\":17264.230531936166,\"offlineMoneyMade\":0,\"offlineRunningTime\":1419.98,\"onlineExpGained\":1591614.417333271,\"onlineMoneyMade\":58490072913.12123,\"onlineRunningTime\":75271.40999946564,\"ramUsage\":2.4,\"server\":\"powerhouse-fitness\",\"scriptKey\":\"simple-hack.js*[\\\"powerhouse-fitness\\\"]\",\"title\":\"simple-hack.js powerhouse-fitness\",\"threads\":26,\"temporary\":false}}]}},\"snap-fitness\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"snap-fitness\",\"httpPortOpen\":true,\"ip\":\"85.1.3.6\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"Snap Fitness\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"snap-fitness\"}}]]},\"serversOnNetwork\":[\"rho-construction\",\"deltaone\",\"unitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":43,\"hackDifficulty\":49.08000000000024,\"minDifficulty\":14,\"moneyAvailable\":3320980928.786973,\"moneyMax\":11250000000,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":733,\"serverGrowth\":53,\"runningScripts\":[]}},\"run4theh111z\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-950950.cct\",\"type\":\"Generate IP Addresses\",\"data\":\"4423962187\",\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"run4theh111z\",\"httpPortOpen\":true,\"ip\":\"12.6.9.9\",\"isConnectedTo\":false,\"maxRam\":128,\"messages\":[\"simulated-reality.lit\",\"the-new-god.lit\"],\"organizationName\":\"The Runners\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"zb-def\",\"fulcrumtech\",\"vitalife\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":511,\"serverGrowth\":1,\"runningScripts\":[]}},\"I.I.I.I\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-142483-Netburners.cct\",\"type\":\"Generate IP Addresses\",\"data\":\"1355120216\",\"reward\":{\"type\":0,\"name\":\"Netburners\"}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-682845.cct\",\"type\":\"Merge Overlapping Intervals\",\"data\":[[23,32],[22,25],[23,26],[4,9],[11,20],[6,15],[15,24],[9,11],[3,6],[11,15],[15,18],[17,24],[23,28]],\"reward\":{\"type\":3}}},{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-671193-TheBlackHand.cct\",\"type\":\"Generate IP Addresses\",\"data\":\"8022917538\",\"reward\":{\"type\":0,\"name\":\"The Black Hand\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"I.I.I.I\",\"httpPortOpen\":false,\"ip\":\"95.0.7.4\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"I.I.I.I\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"the-hub\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":3,\"openPortCount\":3,\"requiredHackingSkill\":349,\"serverGrowth\":1,\"runningScripts\":[]}},\"avmnite-02h\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"avmnite-02h\",\"httpPortOpen\":false,\"ip\":\"9.4.9.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"NiteSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"silver-helix\",\"catalyst\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":2,\"openPortCount\":3,\"requiredHackingSkill\":204,\"serverGrowth\":1,\"runningScripts\":[]}},\".\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\".\",\"httpPortOpen\":true,\"ip\":\"49.1.9.6\",\"isConnectedTo\":false,\"maxRam\":16,\"messages\":[],\"organizationName\":\".\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\".\"}}]]},\"serversOnNetwork\":[\"vitalife\",\"clarkinc\",\"powerhouse-fitness\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":4,\"openPortCount\":4,\"requiredHackingSkill\":510,\"serverGrowth\":1,\"runningScripts\":[]}},\"CSEC\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-658015-BitRunners.cct\",\"type\":\"HammingCodes: Integer to Encoded Binary\",\"data\":222024331543698,\"reward\":{\"type\":0,\"name\":\"BitRunners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"CSEC\",\"httpPortOpen\":false,\"ip\":\"69.1.5.9\",\"isConnectedTo\":false,\"maxRam\":8,\"messages\":[\"democracy-is-dead.lit\"],\"organizationName\":\"CyberSec\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"hong-fang-tea\"],\"smtpPortOpen\":true,\"sqlPortOpen\":false,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":true,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":1,\"openPortCount\":3,\"requiredHackingSkill\":57,\"serverGrowth\":1,\"runningScripts\":[]}},\"The-Cave\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-583758.cct\",\"type\":\"Unique Paths in a Grid I\",\"data\":[13,2],\"reward\":{\"type\":3}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"The-Cave\",\"httpPortOpen\":true,\"ip\":\"37.5.2.8\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[\"alpha-omega.lit\"],\"organizationName\":\"Helios\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"simple-hack.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n\\tns.disableLog('ALL');\\n\\n\\tasync function writeLog(type, obj) {\\n\\t\\tlet timeNow = new Date();\\n\\t\\tlet year = timeNow.getFullYear().toString().substring(2);\\n\\t\\tlet month = (timeNow.getMonth() < 9 ? '0' : '') + (timeNow.getMonth() + 1);\\n\\t\\tlet day = (timeNow.getDate() < 10 ? '0' : '') + timeNow.getDate();\\n\\t\\tlet hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();\\n\\t\\tlet minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();\\n\\t\\tlet second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();\\n\\t\\tlet timestamp = `${year}${month}${day}_${hour}${minute}${second}`;\\n\\t\\tawait ns.tryWritePort(1, `t${timestamp}_${type} = ${obj};\\\\n`);\\n\\n\\t\\tif (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);\\n\\t}\\n\\n\\tlet server = ns.args[0];\\n\\tlet maxMoney = ns.getServerMaxMoney(server);\\n\\tlet minSecurity = ns.getServerMinSecurityLevel(server);\\n\\tlet loop = 0;\\n\\tlet previousMoney = 0;\\n\\n\\twhile (maxMoney != 0) {\\n\\t\\tlet currentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\tlet currentSecurity = ns.getServerSecurityLevel(server);\\n\\n\\t\\tlet hackedMoney = 0;\\n\\t\\tif (currentMoney > 0.1 * maxMoney) {\\n\\t\\t\\thackedMoney = await ns.hack(server);\\n\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t}\\n\\n\\t\\tif (currentMoney < 0.9 * maxMoney) {\\n\\t\\t\\twhile (currentMoney <= previousMoney) {\\n\\t\\t\\t\\tawait ns.grow(server);\\n\\t\\t\\t\\tcurrentMoney = ns.getServerMoneyAvailable(server);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpreviousMoney = currentMoney;\\n\\n\\t\\tif (currentSecurity > 2 * minSecurity) {\\n\\t\\t\\tawait ns.weaken(server);\\n\\t\\t\\tcurrentSecurity = ns.getServerSecurityLevel(server);\\n\\t\\t}\\n\\n\\t\\tns.print(`{loop: ${++loop}, hack: ${Math.floor(hackedMoney)}, money: ${Math.floor(currentMoney)} / ${Math.floor(maxMoney)} == ${((currentMoney / maxMoney) * 100).toFixed(2)}, security: ${currentSecurity.toFixed(2)} / ${Math.floor(minSecurity)} == ${((currentSecurity / minSecurity) * 100).toFixed(4)}}`);\\n\\t\\tawait ns.sleep(50);\\n\\t}\\n}\",\"filename\":\"simple-hack.js\",\"server\":\"The-Cave\"}}]]},\"serversOnNetwork\":[\"b-and-a\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":925,\"serverGrowth\":1,\"runningScripts\":[]}},\"w0r1d_d43m0n\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":false,\"hostname\":\"w0r1d_d43m0n\",\"httpPortOpen\":false,\"ip\":\"54.1.9.1\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"w0r1d_d43m0n\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":3000,\"serverGrowth\":1,\"runningScripts\":[]}},\"darkweb\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[{\"ctor\":\"CodingContract\",\"data\":{\"tries\":0,\"fn\":\"contract-531406-Netburners.cct\",\"type\":\"Encryption I: Caesar Cipher\",\"data\":[\"DEBUG LOGIC ARRAY POPUP INBOX\",19],\"reward\":{\"type\":0,\"name\":\"Netburners\"}}}],\"cpuCores\":1,\"ftpPortOpen\":true,\"hasAdminRights\":true,\"hostname\":\"darkweb\",\"httpPortOpen\":true,\"ip\":\"25.2.1.4\",\"isConnectedTo\":false,\"maxRam\":0,\"messages\":[],\"organizationName\":\"darkweb\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":true,\"sqlPortOpen\":true,\"sshPortOpen\":true,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":false,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":5,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[]}},\"home-0\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-0\",\"httpPortOpen\":false,\"ip\":\"61.4.9.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-0\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-0\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-0\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-1\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-1\",\"httpPortOpen\":false,\"ip\":\"95.6.6.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-1\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-1\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-1\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-2\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-2\",\"httpPortOpen\":false,\"ip\":\"91.1.9.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-2\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-2\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-2\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-3\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-3\",\"httpPortOpen\":false,\"ip\":\"9.0.1.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-3\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-3\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-3\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-4\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-4\",\"httpPortOpen\":false,\"ip\":\"68.7.3.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-4\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-4\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-4\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-5\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-5\",\"httpPortOpen\":false,\"ip\":\"30.0.4.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-5\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-5\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-5\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-6\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-6\",\"httpPortOpen\":false,\"ip\":\"99.5.4.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-6\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-6\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-6\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-7\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-7\",\"httpPortOpen\":false,\"ip\":\"51.3.1.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-7\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-7\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-7\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-8\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-8\",\"httpPortOpen\":false,\"ip\":\"96.2.1.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-8\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-8\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-8\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-9\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-9\",\"httpPortOpen\":false,\"ip\":\"26.5.0.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-9\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-9\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-9\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-10\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-10\",\"httpPortOpen\":false,\"ip\":\"26.0.4.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-10\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-10\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-10\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-11\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-11\",\"httpPortOpen\":false,\"ip\":\"65.3.6.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-11\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-11\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-11\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-12\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-12\",\"httpPortOpen\":false,\"ip\":\"59.9.3.8\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-12\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-12\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-12\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-13\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-13\",\"httpPortOpen\":false,\"ip\":\"95.3.8.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-13\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-13\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-13\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-14\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-14\",\"httpPortOpen\":false,\"ip\":\"71.5.7.9\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-14\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-14\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-14\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-15\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-15\",\"httpPortOpen\":false,\"ip\":\"17.7.8.0\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-15\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-15\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-15\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-16\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-16\",\"httpPortOpen\":false,\"ip\":\"43.5.7.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-16\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-16\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-16\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-17\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-17\",\"httpPortOpen\":false,\"ip\":\"65.5.7.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-17\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-17\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-17\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-18\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-18\",\"httpPortOpen\":false,\"ip\":\"89.6.2.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-18\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-18\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-18\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-19\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-19\",\"httpPortOpen\":false,\"ip\":\"30.1.6.7\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-19\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-19\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-19\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-20\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-20\",\"httpPortOpen\":false,\"ip\":\"88.1.8.4\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-20\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-20\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-20\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-21\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-21\",\"httpPortOpen\":false,\"ip\":\"51.7.8.6\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-21\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-21\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-21\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-22\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-22\",\"httpPortOpen\":false,\"ip\":\"51.1.8.1\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-22\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-22\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-22\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-23\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-23\",\"httpPortOpen\":false,\"ip\":\"75.7.9.3\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-23\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-23\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-23\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}},\"home-24\":{\"ctor\":\"Server\",\"data\":{\"contracts\":[],\"cpuCores\":1,\"ftpPortOpen\":false,\"hasAdminRights\":true,\"hostname\":\"home-24\",\"httpPortOpen\":false,\"ip\":\"22.5.0.2\",\"isConnectedTo\":false,\"maxRam\":32,\"messages\":[],\"organizationName\":\"\",\"programs\":[],\"scripts\":{\"ctor\":\"JSONMap\",\"data\":[[\"grow-helper.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n\\nexport async function main(ns) {\\n    // ns.disableLog('ALL');\\n\\n    // TODO: add increasing threshold if no servers lower than current threshold\\n    async function scanServer(currentServer, previousServer = currentServer) {\\n        let availableServers = ns.scan(currentServer);\\n\\n        for (let i = 0; i < availableServers.length; ++i) {\\n            let nextServer = availableServers[i];\\n\\n            if (nextServer != currentServer && nextServer != previousServer) {\\n                let currentMoney = ns.getServerMoneyAvailable(nextServer);\\n                if (ns.hasRootAccess(nextServer) && currentMoney > 0) {\\n                    ns.print(`'${nextServer}' grown by: ${await ns.grow(nextServer)}`);\\n                }\\n                await scanServer(nextServer, currentServer);\\n            }\\n        }\\n    }\\n\\n    while (true) {\\n        ns.print(`Running scan`);\\n        await scanServer('home');\\n        await ns.sleep(1000);\\n    }\\n}\",\"filename\":\"grow-helper.js\",\"server\":\"home-24\"}}],[\"constants.js\",{\"ctor\":\"Script\",\"data\":{\"code\":\"/** @param {import(\\\".\\\").NS } ns */\\n// import { EXCLUDE_SERVERS } from \\\"./constants.js\\\";\\n\\nexport const EXCLUDE_SERVERS = [\\n    'home',\\n    'darkweb',\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nexport const FACTION_SERVERS = [\\n    'CSEC',\\n    'avmnite-02h',\\n    'I.I.I.I',\\n    'run4theh111z'\\n];\\n\\nfor (let index = 0; index < 1024; index++) {\\n    EXCLUDE_SERVERS.push(`home-${index}`);\\n}\\n\\n\\nconst DARKWEB_PROGRAMS = [\\n    { name: 'BruteSSH.exe', cost: 0 },\\n    { name: 'FTPCrack.exe', cost: 1500000 },\\n    { name: 'relaySMTP.exe', cost: 5000000 },\\n    { name: 'HTTPWorm.exe', cost: 30000000 },\\n    { name: 'SQLInject.exe', cost: 250000000 },\\n    { name: 'ServerProfiler.exe', cost: 500000 },\\n    { name: 'DeepscanV1.exe', cost: 500000 },\\n    { name: 'DeepscanV2.exe', cost: 25000000 },\\n    { name: 'AutoLink.exe', cost: 1000000 },\\n    { name: 'Formulas.exe', cost: 5000000000 }\\n];\\n\\n\\nconst COMPLETED_FACTIONS = [\\n    'CyberSec',\\n    'Tian Di Hui',\\n    'Netburners',\\n    //'Shadows of Anarchy',\\n    //'Sector-12',\\n    'Chongquing',\\n    'New Tokyo',\\n    'Ishima',\\n    'Aevum',\\n    'Volhaven',\\n    'NiteSec',\\n    'The Black Hand',\\n    //'BitRunners',\\n    //'ECorp',\\n    //'MegaCorp',\\n    //'KuaiGong International',\\n    //'Four Sigma',\\n    //'NWO',\\n    //'Blade Industries',\\n    //'OmniTek Incorporated',\\n    //'Bachman & Associates',\\n    //'Clarke Incorporated',\\n    //'Fulcrum Secret Technologies',\\n    //'Slum Snakes',\\n    //'Tetrads',\\n    //'Silhouette',\\n    //'Speakers for the Dead',\\n    //'The Dark Army',\\n    //'The Syndicate',\\n    //'The Covenant',\\n    //'Daedalus',\\n    //'Illuminati',\\n    //'',\\n];\",\"filename\":\"constants.js\",\"server\":\"home-24\"}}]]},\"serversOnNetwork\":[\"home\"],\"smtpPortOpen\":false,\"sqlPortOpen\":false,\"sshPortOpen\":false,\"textFiles\":{\"ctor\":\"JSONMap\",\"data\":[]},\"purchasedByPlayer\":true,\"backdoorInstalled\":false,\"baseDifficulty\":1,\"hackDifficulty\":1,\"minDifficulty\":1,\"moneyAvailable\":0,\"moneyMax\":0,\"numOpenPortsRequired\":5,\"openPortCount\":0,\"requiredHackingSkill\":1,\"serverGrowth\":1,\"runningScripts\":[{\"ctor\":\"RunningScript\",\"data\":{\"args\":[],\"dataMap\":{\"n00dles\":[0,0,60,0],\"nectar-net\":[0,0,60,0],\"silver-helix\":[0,0,60,0],\"the-hub\":[0,0,60,0],\"syscore\":[0,0,60,0],\"rho-construction\":[0,0,60,0],\"galactic-cyber\":[0,0,60,0],\"global-pharm\":[0,0,60,0],\"omnia\":[0,0,60,0],\"univ-energy\":[0,0,60,0],\"snap-fitness\":[0,0,60,0],\"deltaone\":[0,0,60,0],\"icarus\":[0,0,60,0],\"taiyang-digital\":[0,0,60,0],\"titan-labs\":[0,0,60,0],\"stormtech\":[0,0,60,0],\"4sigma\":[0,0,60,0],\"nwo\":[0,0,60,0],\"ecorp\":[0,0,60,0],\"megacorp\":[0,0,60,0],\"fulcrumassets\":[0,0,60,0],\"zeus-med\":[0,0,60,0],\"nova-med\":[0,0,60,0],\"unitalife\":[0,0,60,0],\"defcomm\":[0,0,60,0],\"infocomm\":[0,0,60,0],\"microdyne\":[0,0,60,0],\"helios\":[0,0,60,0],\"zb-def\":[0,0,60,0],\"applied-energetics\":[0,0,60,0],\"fulcrumtech\":[0,0,60,0],\"vitalife\":[0,0,60,0],\"omnitek\":[0,0,60,0],\"b-and-a\":[0,0,60,0],\"kuai-gong\":[0,0,60,0],\"blade\":[0,0,60,0],\"clarkinc\":[0,0,60,0],\"powerhouse-fitness\":[0,0,60,0],\"solaris\":[0,0,60,0],\"catalyst\":[0,0,60,0],\"phantasy\":[0,0,60,0],\"netlink\":[0,0,60,0],\"summit-uni\":[0,0,60,0],\"aevum-police\":[0,0,45,0],\"crush-fitness\":[0,0,45,0],\"foodnstuff\":[0,0,45,0],\"sigma-cosmetics\":[0,0,45,0],\"joesguns\":[0,0,45,0],\"max-hardware\":[0,0,45,0],\"hong-fang-tea\":[0,0,45,0],\"zer0\":[0,0,45,0],\"neo-net\":[0,0,45,0],\"computek\":[0,0,45,0],\"zb-institute\":[0,0,45,0],\"lexo-corp\":[0,0,45,0],\"millenium-fitness\":[0,0,45,0],\"aerocorp\":[0,0,45,0],\"omega-net\":[0,0,45,0],\"johnson-ortho\":[0,0,45,0],\"rothman-uni\":[0,0,45,0],\"alpha-ent\":[0,0,45,0],\"harakiri-sushi\":[0,0,45,0],\"iron-gym\":[0,0,45,0]},\"filename\":\"grow-helper.js\",\"offlineExpGained\":0,\"offlineMoneyMade\":0,\"offlineRunningTime\":0.01,\"onlineExpGained\":748058.7761466402,\"onlineMoneyMade\":0,\"onlineRunningTime\":66022.40999960023,\"ramUsage\":2.1,\"server\":\"home-24\",\"scriptKey\":\"grow-helper.js*[]\",\"title\":\"grow-helper.js \",\"threads\":15,\"temporary\":false}}]}}}","CompaniesSave":"{\"ECorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0.0886,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Fulcrum Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Storm Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DefComm\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Helios Labs\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"VitaLife\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Icarus Microsystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Universal Energy\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Galactic Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"AeroCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omnia Cybersystems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0.6406,\"playerReputation\":0}},\"Solaris Space Systems\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"DeltaOne\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Global Pharmaceuticals\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Nova Medical\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Central Intelligence Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"National Security Agency\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Watchdog Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"LexoCorp\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Rho Construction\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Alpha Enterprises\":{\"ctor\":\"Company\",\"data\":{\"favor\":37.815,\"playerReputation\":0}},\"Aevum Police Headquarters\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"SysCore Securities\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"CompuTek\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"NetLink Technologies\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Carmichael Security\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"FoodNStuff\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Joe's Guns\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Omega Software\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}},\"Noodle Bar\":{\"ctor\":\"Company\",\"data\":{\"favor\":0,\"playerReputation\":0}}}","FactionsSave":"{\"Illuminati\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Daedalus\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":1,\"isBanned\":false,\"isMember\":true,\"playerReputation\":2503134.5300166276}},\"The Covenant\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"ECorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"MegaCorp\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Bachman & Associates\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Blade Industries\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"NWO\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Clarke Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"OmniTek Incorporated\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Four Sigma\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"KuaiGong International\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Fulcrum Secret Technologies\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"BitRunners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":195.6391,\"isBanned\":false,\"isMember\":true,\"playerReputation\":2312217.861105353}},\"The Black Hand\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":136.7066,\"isBanned\":false,\"isMember\":true,\"playerReputation\":1864077.1535292694}},\"NiteSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":145.238,\"isBanned\":false,\"isMember\":true,\"playerReputation\":1931601.334502363}},\"Aevum\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":109.7393,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Chongqing\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":78.838,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Ishima\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":21.9587,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"New Tokyo\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":20.0596,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Sector-12\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":111.1884,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Volhaven\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":30.7334,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Speakers for the Dead\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Dark Army\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"The Syndicate\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Silhouette\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Tetrads\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Slum Snakes\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Netburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":95.1984,\"isBanned\":false,\"isMember\":true,\"playerReputation\":1536640.3575072754}},\"Tian Di Hui\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":72.583,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"CyberSec\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":true,\"favor\":95.224,\"isBanned\":false,\"isMember\":true,\"playerReputation\":1536808.7759229017}},\"Bladeburners\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Church of the Machine God\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}},\"Shadows of Anarchy\":{\"ctor\":\"Faction\",\"data\":{\"alreadyInvited\":false,\"favor\":0,\"isBanned\":false,\"isMember\":false,\"playerReputation\":0}}}","AliasesSave":"{\"kill-nuke\":\"home; run kill-nuke.js\",\"kill-hack\":\"home; run kill-all-simple-hack.js\",\"hacknet\":\"home; run hacknet-bot.js\",\"kill-bot\":\"home; run kill-hacknet.js\",\"nuke\":\"home; run auto-nuke.js\",\"flight\":\"home; run fl1ght.exe\",\"start-grow-helpers\":\"home; run start-grow-helpers.js\",\"backdoor-server\":\"home; run backdoor-command.js\",\"darkweb\":\"connect darkweb; buy -l\",\"buy-all\":\"buy FTPCrack.exe; buy relaySMTP.exe; buy HTTPWorm.exe; buy SQLInject.exe; buy ServerProfiler.exe; buy DeepscanV1.exe; buy DeepscanV2.exe; buy AutoLink.exe\"}","GlobalAliasesSave":"{\"killAll\":\"home; ./kill-all-simple-hack.js; ./kill-all-grow-helpers.js; ./kill-hacknet.js; ./kill-nuke.js;\",\"connectServer\":\"connect home; ./connect-server.js\",\"backdoor1CSEC\":\"connect home; ./backdoor-command.js CSEC\",\"backdoor2NiteSec\":\"connect home; ./backdoor-command.js avmnite-02h\",\"backdoor3BlackHand\":\"connect home; ./backdoor-command.js I.I.I.I\",\"backdoor4BitRunners\":\"connect home; ./backdoor-command.js run4theh111z\",\"buy1FTP\":\"buy FTPCrack.exe\",\"buy2SMTP\":\"buy relaySMTP.exe\",\"buy3HTTP\":\"buy HTTPWorm.exe\",\"buy4SQL\":\"buy SQLInject.exe\",\"startNew\":\"home; ./start-hack-course.js; ./hacknet-bot.js; ./auto-nuke.js; ./start-grow-helpers.js;\",\"startAll\":\"home; ./hacknet-bot.js; ./auto-nuke.js; ./start-grow-helpers.js;\"}","StockMarketSave":"{\"ECorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"ECorp\",\"symbol\":\"ECP\",\"price\":8908.208127017055,\"lastPrice\":8934.923552899578,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.41,\"b\":false,\"otlkMag\":25.25246210453871,\"otlkMagForecast\":24.4661376099085,\"cap\":454836757,\"spreadPerc\":0.5,\"shareTxForMovement\":48399,\"shareTxUntilMovement\":48399,\"totalShares\":94200000,\"maxShares\":18800000}},\"MegaCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"MegaCorp\",\"symbol\":\"MGCP\",\"price\":3304.7467321736667,\"lastPrice\":3292.9443855304653,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.49,\"b\":false,\"otlkMag\":14.889237337752899,\"otlkMagForecast\":34.746588784815884,\"cap\":654016457,\"spreadPerc\":0.3,\"shareTxForMovement\":62800,\"shareTxUntilMovement\":62800,\"totalShares\":79100000,\"maxShares\":15800000}},\"Blade Industries\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Blade Industries\",\"symbol\":\"BLD\",\"price\":73381.5438543879,\"lastPrice\":73007.73052917873,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.7,\"b\":false,\"otlkMag\":9.403028744880364,\"otlkMagForecast\":40.57368313482558,\"cap\":70769421,\"spreadPerc\":0.4,\"shareTxForMovement\":83785,\"shareTxUntilMovement\":83785,\"totalShares\":102800000,\"maxShares\":20600000}},\"Clarke Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Clarke Incorporated\",\"symbol\":\"CLRK\",\"price\":6796.934078969448,\"lastPrice\":6830.244164711316,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.67,\"b\":false,\"otlkMag\":10.703102559153132,\"otlkMagForecast\":40.209158368199006,\"cap\":322923590,\"spreadPerc\":0.2,\"shareTxForMovement\":79482,\"shareTxUntilMovement\":79482,\"totalShares\":69000000,\"maxShares\":13800000}},\"OmniTek Incorporated\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"OmniTek Incorporated\",\"symbol\":\"OMTK\",\"price\":19086.275860333797,\"lastPrice\":19170.040425226896,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.6,\"b\":false,\"otlkMag\":13.671516169077684,\"otlkMagForecast\":35.602875029361336,\"cap\":525661898,\"spreadPerc\":0.6,\"shareTxForMovement\":46865,\"shareTxUntilMovement\":46865,\"totalShares\":46700000,\"maxShares\":9300000}},\"Four Sigma\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Four Sigma\",\"symbol\":\"FSIG\",\"price\":43544.391240664176,\"lastPrice\":43228.19623617216,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1,\"b\":false,\"otlkMag\":16.0113653101542,\"otlkMagForecast\":32.427584138277886,\"cap\":349944650,\"spreadPerc\":0.6,\"shareTxForMovement\":77930,\"shareTxUntilMovement\":77930,\"totalShares\":29200000,\"maxShares\":5800000}},\"KuaiGong International\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"KuaiGong International\",\"symbol\":\"KGI\",\"price\":38498.22911671073,\"lastPrice\":38274.261772674065,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.8,\"b\":false,\"otlkMag\":9.608598209955867,\"otlkMagForecast\":40.173768467697286,\"cap\":386118969,\"spreadPerc\":0.1,\"shareTxForMovement\":68038,\"shareTxUntilMovement\":68038,\"totalShares\":116000000,\"maxShares\":23200000}},\"Fulcrum Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Fulcrum Technologies\",\"symbol\":\"FLCM\",\"price\":124132.58544741459,\"lastPrice\":125312.9524041649,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.3,\"b\":false,\"otlkMag\":10.983282849616376,\"otlkMagForecast\":38.4334325135077,\"cap\":581410063,\"spreadPerc\":0.7,\"shareTxForMovement\":47376,\"shareTxUntilMovement\":47376,\"totalShares\":61300000,\"maxShares\":12300000}},\"Storm Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Storm Technologies\",\"symbol\":\"STM\",\"price\":4072.25389474925,\"lastPrice\":4045.915174479641,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.89,\"b\":true,\"otlkMag\":9.401056527705006,\"otlkMagForecast\":59.50700373451128,\"cap\":405427405,\"spreadPerc\":0.6,\"shareTxForMovement\":64654,\"shareTxUntilMovement\":64654,\"totalShares\":49200000,\"maxShares\":9800000}},\"DefComm\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"DefComm\",\"symbol\":\"DCOMM\",\"price\":12995.791390367776,\"lastPrice\":13057.579367629027,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.65,\"b\":true,\"otlkMag\":8.442734465406891,\"otlkMagForecast\":58.781132619262806,\"cap\":128523008,\"spreadPerc\":0.3,\"shareTxForMovement\":80819,\"shareTxUntilMovement\":80819,\"totalShares\":106300000,\"maxShares\":21300000}},\"Helios Labs\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Helios Labs\",\"symbol\":\"HLS\",\"price\":21635.509104003693,\"lastPrice\":21545.67878817293,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.57,\"b\":false,\"otlkMag\":7.385519731138265,\"otlkMagForecast\":42.585510064223776,\"cap\":31229021,\"spreadPerc\":0.7,\"shareTxForMovement\":90501,\"shareTxUntilMovement\":90501,\"totalShares\":59600000,\"maxShares\":11900000}},\"VitaLife\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"VitaLife\",\"symbol\":\"VITA\",\"price\":12565.688875911526,\"lastPrice\":12499.858628445823,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.72,\"b\":false,\"otlkMag\":3.191327212024041,\"otlkMagForecast\":47.95804411086909,\"cap\":294042622,\"spreadPerc\":1,\"shareTxForMovement\":55140,\"shareTxUntilMovement\":55140,\"totalShares\":82200000,\"maxShares\":16400000}},\"Icarus Microsystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Icarus Microsystems\",\"symbol\":\"ICRS\",\"price\":4728.63710045918,\"lastPrice\":4707.28943042066,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.62,\"b\":true,\"otlkMag\":5.894046529439759,\"otlkMagForecast\":56.02237555581975,\"cap\":295442260,\"spreadPerc\":0.4,\"shareTxForMovement\":91381,\"shareTxUntilMovement\":91381,\"totalShares\":58900000,\"maxShares\":11800000}},\"Universal Energy\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Universal Energy\",\"symbol\":\"UNV\",\"price\":12130.752313778772,\"lastPrice\":12082.145780092154,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.55,\"b\":false,\"otlkMag\":7.571823458732584,\"otlkMagForecast\":42.19204090211809,\"cap\":169436281,\"spreadPerc\":0.3,\"shareTxForMovement\":55321,\"shareTxUntilMovement\":55321,\"totalShares\":56200000,\"maxShares\":11200000}},\"AeroCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"AeroCorp\",\"symbol\":\"AERO\",\"price\":7863.824617814176,\"lastPrice\":7830.033425372481,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.59,\"b\":true,\"otlkMag\":6.77060646239808,\"otlkMagForecast\":56.06928666802261,\"cap\":321043404,\"spreadPerc\":0.4,\"shareTxForMovement\":63503,\"shareTxUntilMovement\":63503,\"totalShares\":47400000,\"maxShares\":9500000}},\"Omnia Cybersystems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omnia Cybersystems\",\"symbol\":\"OMN\",\"price\":21167.577049328374,\"lastPrice\":21053.61864440101,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.74,\"b\":true,\"otlkMag\":6.39579350826387,\"otlkMagForecast\":58.453619435938094,\"cap\":237933031,\"spreadPerc\":0.9,\"shareTxForMovement\":123850,\"shareTxUntilMovement\":123850,\"totalShares\":46800000,\"maxShares\":9400000}},\"Solaris Space Systems\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Solaris Space Systems\",\"symbol\":\"SLRS\",\"price\":41708.46168102149,\"lastPrice\":41492.97481192777,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.71,\"b\":true,\"otlkMag\":9.822402456198546,\"otlkMagForecast\":60.05039294656454,\"cap\":526766209,\"spreadPerc\":0.9,\"shareTxForMovement\":47310,\"shareTxUntilMovement\":47310,\"totalShares\":27100000,\"maxShares\":5400000}},\"Global Pharmaceuticals\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Global Pharmaceuticals\",\"symbol\":\"GPH\",\"price\":8542.594335996797,\"lastPrice\":8576.961236290941,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.55,\"b\":false,\"otlkMag\":7.8545213667528335,\"otlkMagForecast\":40.345315141832145,\"cap\":47595908,\"spreadPerc\":0.5,\"shareTxForMovement\":87361,\"shareTxUntilMovement\":87361,\"totalShares\":47300000,\"maxShares\":9500000}},\"Nova Medical\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Nova Medical\",\"symbol\":\"NVMD\",\"price\":44731.69123944949,\"lastPrice\":44993.4451601566,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.8,\"b\":true,\"otlkMag\":5.991111696133398,\"otlkMagForecast\":55.45725782817248,\"cap\":274693792,\"spreadPerc\":0.5,\"shareTxForMovement\":88224,\"shareTxUntilMovement\":88224,\"totalShares\":30100000,\"maxShares\":6000000}},\"Watchdog Security\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Watchdog Security\",\"symbol\":\"WDS\",\"price\":258.96470809824893,\"lastPrice\":263.58658419243096,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.44,\"b\":true,\"otlkMag\":10.173689435448512,\"otlkMagForecast\":61.04447127038731,\"cap\":125336718,\"spreadPerc\":0.5,\"shareTxForMovement\":37876,\"shareTxUntilMovement\":37876,\"totalShares\":73800000,\"maxShares\":14800000}},\"LexoCorp\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"LexoCorp\",\"symbol\":\"LXO\",\"price\":364.04530094072265,\"lastPrice\":367.6401204345882,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.35,\"b\":false,\"otlkMag\":15.32859440274155,\"otlkMagForecast\":37.25897707398619,\"cap\":98055287,\"spreadPerc\":0.9,\"shareTxForMovement\":57640,\"shareTxUntilMovement\":57640,\"totalShares\":62400000,\"maxShares\":12500000}},\"Rho Construction\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Rho Construction\",\"symbol\":\"RHOC\",\"price\":3251.160664458607,\"lastPrice\":3266.1425636762015,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.63,\"b\":false,\"otlkMag\":5.082800171744614,\"otlkMagForecast\":47.75701720858414,\"cap\":76638767,\"spreadPerc\":0.4,\"shareTxForMovement\":84792,\"shareTxUntilMovement\":84792,\"totalShares\":32800000,\"maxShares\":6600000}},\"Alpha Enterprises\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Alpha Enterprises\",\"symbol\":\"APHE\",\"price\":35629.49818370191,\"lastPrice\":35115.78551806293,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2,\"b\":false,\"otlkMag\":13.849866850235369,\"otlkMagForecast\":39.06633854409007,\"cap\":126080909,\"spreadPerc\":0.5,\"shareTxForMovement\":47219,\"shareTxUntilMovement\":47219,\"totalShares\":32700000,\"maxShares\":6500000}},\"SysCore Securities\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"SysCore Securities\",\"symbol\":\"SYSC\",\"price\":3053.4531521453046,\"lastPrice\":3018.7858655892956,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.57,\"b\":true,\"otlkMag\":7.543842578770133,\"otlkMagForecast\":56.30423600476649,\"cap\":43190126,\"spreadPerc\":0.8,\"shareTxForMovement\":21533,\"shareTxUntilMovement\":21533,\"totalShares\":28500000,\"maxShares\":5700000}},\"CompuTek\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"CompuTek\",\"symbol\":\"CTK\",\"price\":1087.9894716198648,\"lastPrice\":1081.4240592389604,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.83,\"b\":true,\"otlkMag\":6.340295417136575,\"otlkMagForecast\":57.32546244694288,\"cap\":13348093,\"spreadPerc\":0.9,\"shareTxForMovement\":120792,\"shareTxUntilMovement\":120792,\"totalShares\":151500000,\"maxShares\":30300000}},\"NetLink Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"NetLink Technologies\",\"symbol\":\"NTLK\",\"price\":55783.152956770085,\"lastPrice\":56986.83827595318,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.95,\"b\":true,\"otlkMag\":6.889569554391976,\"otlkMagForecast\":57.12088174735339,\"cap\":48592888,\"spreadPerc\":1.3,\"shareTxForMovement\":43861,\"shareTxUntilMovement\":43861,\"totalShares\":19400000,\"maxShares\":3900000}},\"Omega Software\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Omega Software\",\"symbol\":\"OMGA\",\"price\":1840.857404709564,\"lastPrice\":1826.4291277546904,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.08,\"b\":false,\"otlkMag\":1.3171030677154023,\"otlkMagForecast\":47.41512769526695,\"cap\":12713394,\"spreadPerc\":0.9,\"shareTxForMovement\":41601,\"shareTxUntilMovement\":41601,\"totalShares\":26000000,\"maxShares\":5200000}},\"FoodNStuff\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"FoodNStuff\",\"symbol\":\"FNS\",\"price\":8553.543683838032,\"lastPrice\":8509.351779514567,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.71,\"b\":true,\"otlkMag\":2.352059650704346,\"otlkMagForecast\":53.55224365957869,\"cap\":14111922,\"spreadPerc\":0.9,\"shareTxForMovement\":95811,\"shareTxUntilMovement\":95811,\"totalShares\":11600000,\"maxShares\":2300000}},\"Sigma Cosmetics\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Sigma Cosmetics\",\"symbol\":\"SGC\",\"price\":112.52111753276688,\"lastPrice\":114.47172675352492,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":2.37,\"b\":false,\"otlkMag\":5.65262601230572,\"otlkMagForecast\":41.630298011707296,\"cap\":6610698,\"spreadPerc\":1.1,\"shareTxForMovement\":45673,\"shareTxUntilMovement\":45673,\"totalShares\":13200000,\"maxShares\":2600000}},\"Joe's Guns\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Joe's Guns\",\"symbol\":\"JGN\",\"price\":223.19173803513183,\"lastPrice\":228.75872729111126,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":3.41,\"b\":false,\"otlkMag\":7.381407727483705,\"otlkMagForecast\":44.20351912314565,\"cap\":1082692,\"spreadPerc\":0.8,\"shareTxForMovement\":30306,\"shareTxUntilMovement\":30306,\"totalShares\":49000000,\"maxShares\":9800000}},\"Catalyst Ventures\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Catalyst Ventures\",\"symbol\":\"CTYS\",\"price\":3834.0428729548125,\"lastPrice\":3795.453619310406,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":1.39,\"b\":false,\"otlkMag\":2.075597971739563,\"otlkMagForecast\":48.67209559879204,\"cap\":17188345,\"spreadPerc\":0.9,\"shareTxForMovement\":25464,\"shareTxUntilMovement\":25464,\"totalShares\":144900000,\"maxShares\":29000000}},\"Microdyne Technologies\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Microdyne Technologies\",\"symbol\":\"MDYN\",\"price\":9495.53363296964,\"lastPrice\":9551.098112844349,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.8,\"b\":true,\"otlkMag\":10.565113205094377,\"otlkMagForecast\":61.339207622779874,\"cap\":151220518,\"spreadPerc\":0.9,\"shareTxForMovement\":145632,\"shareTxUntilMovement\":145632,\"totalShares\":14200000,\"maxShares\":2800000}},\"Titan Laboratories\":{\"ctor\":\"Stock\",\"data\":{\"name\":\"Titan Laboratories\",\"symbol\":\"TITN\",\"price\":7007.420868937934,\"lastPrice\":7036.124320226407,\"playerShares\":0,\"playerAvgPx\":0,\"playerShortShares\":0,\"playerAvgShortPx\":0,\"mv\":0.56,\"b\":false,\"otlkMag\":15.50721870641396,\"otlkMagForecast\":36.910916056746665,\"cap\":239152939,\"spreadPerc\":0.3,\"shareTxForMovement\":162730,\"shareTxUntilMovement\":162730,\"totalShares\":20900000,\"maxShares\":4200000}},\"Orders\":{\"ECP\":[],\"MGCP\":[],\"BLD\":[],\"CLRK\":[],\"OMTK\":[],\"FSIG\":[],\"KGI\":[],\"FLCM\":[],\"STM\":[],\"DCOMM\":[],\"HLS\":[],\"VITA\":[],\"ICRS\":[],\"UNV\":[],\"AERO\":[],\"OMN\":[],\"SLRS\":[],\"GPH\":[],\"NVMD\":[],\"WDS\":[],\"LXO\":[],\"RHOC\":[],\"APHE\":[],\"SYSC\":[],\"CTK\":[],\"NTLK\":[],\"OMGA\":[],\"FNS\":[],\"SGC\":[],\"JGN\":[],\"CTYS\":[],\"MDYN\":[],\"TITN\":[]},\"storedCycles\":9,\"lastUpdate\":1693934144321,\"ticksUntilCycle\":1}","SettingsSave":"{\"ActiveScriptsServerPageSize\":100,\"ActiveScriptsScriptPageSize\":10,\"AutoexecScript\":\"\",\"AutosaveInterval\":60,\"CodeInstructionRunTime\":20,\"DisableASCIIArt\":false,\"DisableHotkeys\":false,\"DisableTextEffects\":false,\"DisableOverviewProgressBars\":false,\"EnableBashHotkeys\":false,\"EnableHistorySearch\":false,\"TimestampsFormat\":\"\",\"Locale\":\"en\",\"MaxRecentScriptsCapacity\":50,\"MaxLogCapacity\":50,\"MaxPortCapacity\":50,\"MaxTerminalCapacity\":500,\"RemoteFileApiPort\":0,\"SaveGameOnFileSave\":true,\"SuppressBuyAugmentationConfirmation\":false,\"SuppressFactionInvites\":false,\"SuppressMessages\":false,\"SuppressTravelConfirmation\":false,\"SuppressBladeburnerPopup\":false,\"SuppressTIXPopup\":false,\"SuppressSavedGameToast\":false,\"SuppressAutosaveDisabledWarnings\":false,\"UseIEC60027_2\":true,\"ShowMiddleNullTimeUnit\":false,\"ExcludeRunningScriptsFromSave\":false,\"IsSidebarOpened\":true,\"theme\":{\"primarylight\":\"#28CF28\",\"primary\":\"#21A821\",\"primarydark\":\"#177317\",\"successlight\":\"#1CFF1C\",\"success\":\"#16CA16\",\"successdark\":\"#0D910D\",\"errorlight\":\"#FF3B3B\",\"error\":\"#C32D2D\",\"errordark\":\"#8E2121\",\"secondarylight\":\"#B3B3B3\",\"secondary\":\"#838383\",\"secondarydark\":\"#676767\",\"warninglight\":\"#FFFF3A\",\"warning\":\"#C3C32A\",\"warningdark\":\"#8C8C1E\",\"infolight\":\"#64CBFF\",\"info\":\"#3399CC\",\"infodark\":\"#246D91\",\"welllight\":\"#404040\",\"well\":\"#1C1C1C\",\"white\":\"#C3C3C3\",\"black\":\"#0A0B0B\",\"hp\":\"#C62E2E\",\"money\":\"#D6BB27\",\"hack\":\"#ADFF2F\",\"combat\":\"#E8EDCD\",\"cha\":\"#8B5FAF\",\"int\":\"#537CC8\",\"rep\":\"#E8EDCD\",\"disabled\":\"#5AB5A5\",\"backgroundprimary\":\"#0C0D0E\",\"backgroundsecondary\":\"#121415\",\"button\":\"#252829\"},\"styles\":{\"lineHeight\":1.5,\"fontFamily\":\"Lucida Console, Lucida Sans Unicode, Fira Mono, Consolas, Courier New, Courier, monospace, Times New Roman\"},\"overview\":{\"x\":-17,\"y\":1169,\"opened\":false},\"EditorTheme\":{\"common\":{\"accent\":\"B5CEA8\",\"bg\":\"1E1E1E\",\"fg\":\"D4D4D4\"},\"syntax\":{\"tag\":\"569CD6\",\"entity\":\"569CD6\",\"string\":\"CE9178\",\"regexp\":\"646695\",\"markup\":\"569CD6\",\"keyword\":\"569CD6\",\"comment\":\"6A9955\",\"constant\":\"569CD6\",\"error\":\"F44747\"},\"ui\":{\"line\":\"1E1E1E\",\"panel\":{\"bg\":\"252526\",\"selected\":\"252526\",\"border\":\"1E1E1E\"},\"selection\":{\"bg\":\"ADD6FF26\"}},\"base\":\"vs-dark\",\"inherit\":true},\"OwnedAugmentationsOrder\":0,\"PurchaseAugmentationsOrder\":0,\"MonacoTheme\":\"monokai\",\"MonacoInsertSpaces\":true,\"MonacoTabSize\":2,\"MonacoDetectIndentation\":false,\"MonacoFontFamily\":\"Lucida Console\",\"MonacoFontSize\":15,\"MonacoFontLigatures\":false,\"MonacoVim\":false,\"MonacoWordWrap\":\"off\",\"MonacoCursorStyle\":\"line\",\"MonacoCursorBlinking\":\"blink\",\"hideTrailingDecimalZeros\":false,\"hideThousandsSeparator\":false,\"useEngineeringNotation\":false,\"disableSuffixes\":false}","VersionSave":"34","AllGangsSave":"","LastExportBonus":"1693934146323","StaneksGiftSave":"{\"ctor\":\"StaneksGift\",\"data\":{\"fragments\":[],\"isBonusCharging\":false,\"storedCycles\":0}}"}}