grow helpers improvement

This commit is contained in:
zjamnik committed 2023-09-05 00:58:08 +02:00
1 parent 673abd49b2
commit 7b14e98658
25 files changed
+329 -106

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
/** @param {import(".").NS } ns */
export async function main(ns) {
// ns.disableLog('ALL');
ns.alterReality();
ns.rainbow('noodles');
}
+27 -13
View File
@@ -3,12 +3,24 @@
/** /**
* remove write log ✓
* loop
* get all servers * get all servers
* for servers ram > 0 get ram, get money * nuke if possible
* home ram substract ram needed for bots * send scripts hack, grow weaken
* get available threads for each server for hack/grow/weaken * backdoor factions
* sum all money * buy grow servers
* run with proportion to the money available * start helpers if not running include home //remove from hacknet
* grow if needed
* weaken if needed
* hack if no grow or weaken
* do simple hack
* check if money available
* check threads
* run hack
* run grow to recover
* run weaken if security too high
* buy hack tools
*/ */
@@ -23,22 +35,20 @@ export async function main(ns) {
let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours(); let hour = (timeNow.getHours() < 10 ? '0' : '') + timeNow.getHours();
let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes(); let minute = (timeNow.getMinutes() < 10 ? '0' : '') + timeNow.getMinutes();
let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds(); let second = (timeNow.getSeconds() < 10 ? '0' : '') + timeNow.getSeconds();
let timestamp = `${year}${month}${day}_${hour}${minute}${second}`; let timestamp = `${year}.${month}.${day}_${hour}:${minute}:${second}`;
await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\n`); ns.print(`${type}_${timestamp} = ${obj};`);
if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`); if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${type}_${timestamp} = ${obj};`);
} }
async function runHack(server) { async function runNuke(server) {
let script = 'simple-hack.js';
let serverStatus = analyzeServer(server); let serverStatus = analyzeServer(server);
await writeLog('ANALYZE', `{server: "${server}", status: ${JSON.stringify(serverStatus)}}`); await writeLog('ANALYZE', `{server: "${server}", status: ${JSON.stringify(serverStatus)}}`);
if (!serverStatus.rootAccess) { if (!serverStatus.rootAccess) {
if (serverStatus.nukeAvailable) { if (serverStatus.nukeAvailable) {
await writeLog('NUKE', `"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`); await writeLog('NUKE', `"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`);
for (let i = 0; i < maxPortsToHack(); ++i) { for (let i = 0; i < maxPortsToHack(); ++i) { // TODO: change to try/catch
switch (EXPLOITS[i]) { switch (EXPLOITS[i]) {
case 'BruteSSH.exe': case 'BruteSSH.exe':
ns.brutessh(server); ns.brutessh(server);
@@ -64,9 +74,13 @@ export async function main(ns) {
} }
ns.nuke(server); ns.nuke(server);
} }
// TODO: if faction > backdoor
} }
}
async function runHack(server) {
let script = 'simple-hack.js';
serverStatus = analyzeServer(server); let serverStatus = analyzeServer(server);
if (serverStatus.rootAccess) { if (serverStatus.rootAccess) {
if (!ns.fileExists(script, 'home')) { if (!ns.fileExists(script, 'home')) {
+26 -60
View File
@@ -66,15 +66,12 @@ export async function main(ns) {
* @param {string} server server to nuke and hack * @param {string} server server to nuke and hack
* @returns {Promise<number>} exit code; if negative error, if positive hack script PID, if 0 already running * @returns {Promise<number>} exit code; if negative error, if positive hack script PID, if 0 already running
*/ */
async function runHack(server) { async function runNuke(server) {
let script = 'simple-hack.js';
let serverStatus = analyzeServer(server); let serverStatus = analyzeServer(server);
await writeLog('ANALYZE', `{server: "${server}", status: ${JSON.stringify(serverStatus)}}`); ns.print('INFO ', `{server: "${server}", status: ${JSON.stringify(serverStatus)}}`);
if (!serverStatus.rootAccess) { if (!serverStatus.rootAccess && serverStatus.nukeAvailable) {
if (serverStatus.nukeAvailable) { ns.print(`"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`);
await writeLog('NUKE', `"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`);
for (let i = 0; i < maxPortsToHack(); ++i) { for (let i = 0; i < maxPortsToHack(); ++i) {
switch (EXPLOITS[i]) { switch (EXPLOITS[i]) {
case 'BruteSSH.exe': case 'BruteSSH.exe':
@@ -103,11 +100,15 @@ export async function main(ns) {
} }
} }
serverStatus = analyzeServer(server); async function runHack(server) {
let script = 'simple-hack.js';
if (serverStatus.rootAccess) { let serverStatus = analyzeServer(server);
ns.print('INFO ', `{server: "${server}", status: ${JSON.stringify(serverStatus)}}`);
if (serverStatus.rootAccess && serverStatus.nukeAvailable) {
if (!ns.fileExists(script, 'home')) { if (!ns.fileExists(script, 'home')) {
await writeLog('ERROR', `"Script '${script}' doesn't exist!"`); ns.print(`ERROR Script '${script}' doesn't exist!`);
// return -3; // return -3;
} }
ns.scp(script, server, 'home'); ns.scp(script, server, 'home');
@@ -143,42 +144,6 @@ export async function main(ns) {
return -6; return -6;
} }
// let nukedServers = ['home', 'CSEC', 'avmnite-02h'];
// /**
// * Recursively scan, try to nuke and hack servers in the network
// * @async
// * @param {string} server server to scan
// */
// async function scanServer(server, maxDepth = Number.MAX_SAFE_INTEGER, depth = 1) {
// if (depth <= maxDepth) {
// let availableServers = ns.scan(server);
// // hack servers in current scan
// for (let i = 0; i < availableServers.length; ++i) {
// await writeLog('SCAN', `{server: "${availableServers[i]}", index: ${nukedServers.indexOf(availableServers[i])}, available: ["${availableServers.toString().replaceAll(',','","')}"]}`);
// if (nukedServers.indexOf(availableServers[i]) == -1) {
// nukedServers.push(availableServers[i]);
// await scanServer(availableServers[i], maxDepth, depth + 1);
// let hackExitCode = await runHack(availableServers[i]);
// if (hackExitCode == 0) {
// await writeLog('HACK', `"Hack already running on ${availableServers[i]}"`);
// } if (hackExitCode == -6) {
// await writeLog('HACK', `"No root access to ${availableServers[i]}!"`);
// } else {
// if (hackExitCode < 0) {
// await writeLog('ERROR', `"Hack exec ERROR on '${availableServers[i]}': ${hackExitCode}!"`);
// } else {
// await writeLog('HACK', `"Hack started on '${availableServers[i]}'"`);
// }
// }
// }
// }
// }
// await ns.sleep(10);
// }
/** /**
* Recursively kill simple-hack.js running on servers in the network * Recursively kill simple-hack.js running on servers in the network
* @async * @async
@@ -191,22 +156,23 @@ export async function main(ns) {
let nextServer = availableServers[i]; let nextServer = availableServers[i];
if (nextServer != currentServer && nextServer != previousServer) { if (nextServer != currentServer && nextServer != previousServer) {
await runNuke(nextServer);
if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) { if (EXCLUDE_SERVERS.indexOf(nextServer) == -1) {
let hackExitCode = await runHack(nextServer); let hackExitCode = await runHack(nextServer);
if (hackExitCode == 0) { // if (hackExitCode == 0) {
await writeLog('HACK', `"Hack already running on ${nextServer}"`); // ns.print('INFO ' + `"Hack already running on ${nextServer}"`);
} else if (hackExitCode == -6) { // } else if (hackExitCode == -6) {
await writeLog('HACK', `"No root access to ${nextServer}!"`); // ns.print('ERROR ' + `"No root access to ${nextServer}!"`);
} else if (hackExitCode == -4) { // } else if (hackExitCode == -4) {
await writeLog('HACK', `"Not enough RAM to run script on ${nextServer}!"`); // ns.print('WARN ' + `"Not enough RAM to run script on ${nextServer}!"`);
} else { // } else {
if (hackExitCode < 0) { // if (hackExitCode < 0) {
await writeLog('ERROR', `"Hack exec ERROR on '${nextServer}': ${hackExitCode}!"`); // ns.print('ERROR ' + `"Hack exec ERROR on '${nextServer}': ${hackExitCode}!"`);
} else { // } else {
await writeLog('HACK', `"Hack started on '${nextServer}'"`); // ns.print('INFO ' + `"Hack started on '${nextServer}'"`);
} // }
} // }
} }
await scanServer(nextServer, currentServer); await scanServer(nextServer, currentServer);
} }
@@ -219,7 +185,7 @@ export async function main(ns) {
ns.tprint(`TERMINAL = "Running scan"`); ns.tprint(`TERMINAL = "Running scan"`);
while (true) { while (true) {
await writeLog('INFO', `"Running scan"`); ns.print(`INFO Running scan`);
await scanServer('home'); await scanServer('home');
await ns.sleep(60000); await ns.sleep(60000);
} }
+41
View File
@@ -0,0 +1,41 @@
/** @param {import(".").NS } ns */
const doc = eval('document');
export async function main(ns) {
// ns.disableLog('ALL');
const terminalInput = doc.getElementById("terminal-input");
const handler = Object.keys(terminalInput)[1];
async function scanServer(currentServer, previousServer = currentServer, connectString = '', scanLevel = 0) {
let availableServers = ns.scan(currentServer);
let nextConnectString = connectString + `connect ${currentServer}; `;
let backdoorCommand = nextConnectString;
backdoorCommand += 'run BruteSSH.exe; ';
backdoorCommand += 'run FTPCrack.exe; ';
backdoorCommand += 'run relaySMTP.exe; ';
backdoorCommand += 'run HTTPWorm.exe; ';
backdoorCommand += 'run SQLInject.exe; ';
backdoorCommand += 'run NUKE.exe; ';
backdoorCommand += 'backdoor';
terminalInput.value = backdoorCommand;
terminalInput[handler].onChange({ target: terminalInput });
terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
await ns.sleep(60000)
for (let i = 0; i < availableServers.length; ++i) {
let nextServer = availableServers[i];
if (nextServer != currentServer && nextServer != previousServer) {
await scanServer(nextServer, currentServer, nextConnectString, scanLevel + 1);
}
}
}
await scanServer('home');
terminalInput.value = 'home';
terminalInput[handler].onChange({ target: terminalInput });
terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
}
+5 -4
View File
@@ -1,4 +1,5 @@
/** @param {import(".").NS } ns */ /** @param {import(".").NS } ns */
const doc = eval('document');
export async function main(ns) { export async function main(ns) {
// ns.disableLog('ALL'); // ns.disableLog('ALL');
@@ -9,7 +10,7 @@ export async function main(ns) {
* @param {string} currentServer server to scan * @param {string} currentServer server to scan
*/ */
function scanServer(currentServer, targetServer, previousServer = currentServer) { function scanServer(currentServer, targetServer, previousServer = currentServer) {
ns.tprint(currentServer); // ns.tprint(currentServer);
if (currentServer == targetServer) { if (currentServer == targetServer) {
return [currentServer]; return [currentServer];
} else { } else {
@@ -34,7 +35,7 @@ export async function main(ns) {
let targetPath = scanServer('home', ns.args[0]); let targetPath = scanServer('home', ns.args[0]);
ns.tprint(targetPath); ns.tprint(targetPath);
const terminalInput = document.getElementById("terminal-input"); const terminalInput = doc.getElementById("terminal-input");
const handler = Object.keys(terminalInput)[1]; const handler = Object.keys(terminalInput)[1];
let backdoorCommand = ''; let backdoorCommand = '';
@@ -44,7 +45,7 @@ export async function main(ns) {
backdoorCommand += `connect ${server}; `; backdoorCommand += `connect ${server}; `;
} }
ns.tprint(backdoorCommand); // ns.tprint(backdoorCommand);
terminalInput.value = backdoorCommand; terminalInput.value = backdoorCommand;
terminalInput[handler].onChange({ target: terminalInput }); terminalInput[handler].onChange({ target: terminalInput });
terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null }); terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
@@ -57,7 +58,7 @@ export async function main(ns) {
backdoorCommand += 'run NUKE.exe; '; backdoorCommand += 'run NUKE.exe; ';
backdoorCommand += 'backdoor'; backdoorCommand += 'backdoor';
ns.tprint(backdoorCommand); // ns.tprint(backdoorCommand);
terminalInput.value = backdoorCommand; terminalInput.value = backdoorCommand;
terminalInput[handler].onChange({ target: terminalInput }); terminalInput[handler].onChange({ target: terminalInput });
terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null }); terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
+58
View File
@@ -1,7 +1,65 @@
/** @param {import(".").NS } ns */ /** @param {import(".").NS } ns */
const doc = eval('document');
export async function main(ns) { export async function main(ns) {
// ns.disableLog('ALL'); // ns.disableLog('ALL');
/**
* Recursively kill simple-hack.js running on servers in the network
* @async
* @param {string} currentServer server to scan
*/
function scanServer(currentServer, targetServer, previousServer = currentServer) {
// ns.tprint(currentServer);
if (currentServer == targetServer) {
return [currentServer];
} else {
let availableServers = ns.scan(currentServer);
for (let i = 0; i < availableServers.length; ++i) {
let nextServer = availableServers[i];
if (nextServer != currentServer && nextServer != previousServer) {
let result = scanServer(nextServer, targetServer, currentServer);
if (result != null) {
return [currentServer].concat(result);
}
}
}
return null;
}
}
let targetPath = scanServer('home', ns.args[0]);
ns.tprint(targetPath);
const terminalInput = doc.getElementById("terminal-input");
const handler = Object.keys(terminalInput)[1];
let backdoorCommand = '';
for (let index = 1; index < targetPath.length; index++) {
const server = targetPath[index];
backdoorCommand += `connect ${server}; `;
}
// ns.tprint(backdoorCommand);
terminalInput.value = backdoorCommand;
terminalInput[handler].onChange({ target: terminalInput });
terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
// backdoorCommand = 'run BruteSSH.exe; ';
// backdoorCommand += 'run FTPCrack.exe; ';
// backdoorCommand += 'run relaySMTP.exe; ';
// backdoorCommand += 'run HTTPWorm.exe; ';
// backdoorCommand += 'run SQLInject.exe; ';
// backdoorCommand += 'run NUKE.exe; ';
// backdoorCommand += 'backdoor';
// ns.tprint(backdoorCommand);
// terminalInput.value = backdoorCommand;
// terminalInput[handler].onChange({ target: terminalInput });
// terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
} }
+37 -4
View File
@@ -3,6 +3,14 @@
export const EXCLUDE_SERVERS = [ export const EXCLUDE_SERVERS = [
'home', 'home',
'darkweb',
'CSEC',
'avmnite-02h',
'I.I.I.I',
'run4theh111z'
];
export const FACTION_SERVERS = [
'CSEC', 'CSEC',
'avmnite-02h', 'avmnite-02h',
'I.I.I.I', 'I.I.I.I',
@@ -30,11 +38,36 @@ const DARKWEB_PROGRAMS = [
const COMPLETED_FACTIONS = [ const COMPLETED_FACTIONS = [
'CyberSec', 'CyberSec',
'Tian Di Hui',
'Netburners', 'Netburners',
//'Shadows of Anarchy',
//'Sector-12',
'Chongquing',
'New Tokyo',
'Ishima',
'Aevum',
'Volhaven',
'NiteSec', 'NiteSec',
'The Black Hand', 'The Black Hand',
'Aevum', //'BitRunners',
'Sector-12', //'ECorp',
'Volhaven', //'MegaCorp',
'Tian Di Hui' //'KuaiGong International',
//'Four Sigma',
//'NWO',
//'Blade Industries',
//'OmniTek Incorporated',
//'Bachman & Associates',
//'Clarke Incorporated',
//'Fulcrum Secret Technologies',
//'Slum Snakes',
//'Tetrads',
//'Silhouette',
//'Speakers for the Dead',
//'The Dark Army',
//'The Syndicate',
//'The Covenant',
//'Daedalus',
//'Illuminati',
//'',
]; ];
+13
View File
@@ -0,0 +1,13 @@
/** @param {import(".").NS } ns */
const doc = eval('document');
export async function main(ns) {
// ns.disableLog('ALL');
const terminalInput = doc.getElementById("terminal-input");
const handler = Object.keys(terminalInput)[1];
terminalInput.value = "COMMAND";
terminalInput[handler].onChange({ target: terminalInput });
terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
}
+2 -6
View File
@@ -11,14 +11,10 @@ export async function main(ns) {
let nextServer = availableServers[i]; let nextServer = availableServers[i];
if (nextServer != currentServer && nextServer != previousServer) { if (nextServer != currentServer && nextServer != previousServer) {
if (ns.scriptRunning('simple-hack.js', nextServer)) {
let maxMoney = ns.getServerMaxMoney(nextServer);
let currentMoney = ns.getServerMoneyAvailable(nextServer); let currentMoney = ns.getServerMoneyAvailable(nextServer);
if (ns.hasRootAccess(nextServer) && currentMoney > 0) {
if (currentMoney < 0.2 * maxMoney) {
await ns.grow(nextServer); await ns.grow(nextServer);
} }
}
await scanServer(nextServer, currentServer); await scanServer(nextServer, currentServer);
} }
} }
@@ -27,6 +23,6 @@ export async function main(ns) {
while (true) { while (true) {
ns.print(`Running scan`); ns.print(`Running scan`);
await scanServer('home'); await scanServer('home');
ns.sleep(50); await ns.sleep(1000);
} }
} }
+1 -1
View File
@@ -3,5 +3,5 @@
export async function main(ns) { export async function main(ns) {
// ns.disableLog('ALL'); // ns.disableLog('ALL');
await ns.grow(ns.args.length > 0 ? ns.args[0] : '');
} }
+1 -1
View File
@@ -3,5 +3,5 @@
export async function main(ns) { export async function main(ns) {
// ns.disableLog('ALL'); // ns.disableLog('ALL');
await ns.hack(ns.args.length > 0 ? ns.args[0] : '');
} }
+7 -7
View File
@@ -7,7 +7,7 @@ export async function main(ns) {
const upgradeCostThreshold = ns.args.length > 1 ? ns.args[1] : 0.1; const upgradeCostThreshold = ns.args.length > 1 ? ns.args[1] : 0.1;
const upgradeCount = ns.args.length > 2 ? ns.args[2] : 1; const upgradeCount = ns.args.length > 2 ? ns.args[2] : 1;
const helperBuyThreshold = ns.args.length > 3 ? ns.args[3] : 0.2; const helperBuyThreshold = ns.args.length > 3 ? ns.args[3] : 0.2;
const nodeCap = 200; const nodeCap = 24;
const levelCap = 200; const levelCap = 200;
const ramCap = 64; const ramCap = 64;
const coreCap = 16; const coreCap = 16;
@@ -63,13 +63,13 @@ export async function main(ns) {
let logFiles = ['hack-log.js', 'nuke-log.js']; // let logFiles = ['hack-log.js', 'nuke-log.js'];
for (let index = 0; index < logFiles.length; index++) { // for (let index = 0; index < logFiles.length; index++) {
const logFile = logFiles[index]; // const logFile = logFiles[index];
let portData = ns.readPort(index + 1); // let portData = ns.readPort(index + 1);
if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a'); // if (portData != 'NULL PORT DATA') ns.write(logFile, portData, 'a');
} // }
await ns.sleep(1000); await ns.sleep(1000);
} }
+2
View File
@@ -3,6 +3,8 @@
export async function main(ns) { export async function main(ns) {
ns.disableLog('ALL'); ns.disableLog('ALL');
ns.scriptKill('grow-helper.js', `home`);
for (let server = 0; ns.serverExists(`home-${server}`); server++) { for (let server = 0; ns.serverExists(`home-${server}`); server++) {
ns.scriptKill('grow-helper.js', `home-${server}`); ns.scriptKill('grow-helper.js', `home-${server}`);
} }
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjMwMyxcInN0cmVuZ3RoXCI6MSxcImRlZmVuc2VcIjoxLFwiZGV4dGVyaXR5XCI6MSxcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoxLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6MTg2MTUzOS44NTM5OTA2MzE0LFwic3RyZW5ndGhcIjowLFwiZGVmZW5zZVwiOjAsXCJkZXh0ZXJpdHlcIjowLFwiYWdpbGl0eVwiOjAsXCJjaGFyaXNtYVwiOjAsXCJpbnRlbGxpZ2VuY2VcIjowfSxcIm11bHRzXCI6e1wiaGFja2luZ19jaGFuY2VcIjoxLjE2LFwiaGFja2luZ19zcGVlZFwiOjEuMTYsXCJoYWNraW5nX21vbmV5XCI6MS4xNixcImhhY2tpbmdfZ3Jvd1wiOjEuMTYsXCJoYWNraW5nXCI6MS4xNixcInN0cmVuZ3RoXCI6MS4xNixcImRlZmVuc2VcIjoxLjE2LFwiZGV4dGVyaXR5XCI6MS4xNixcImFnaWxpdHlcIjoxLjE2LFwiY2hhcmlzbWFcIjoxLjE2LFwiaGFja2luZ19leHBcIjoxLjE2LFwic3RyZW5ndGhfZXhwXCI6MS4xNixcImRlZmVuc2VfZXhwXCI6MS4xNixcImRleHRlcml0eV9leHBcIjoxLjE2LFwiYWdpbGl0eV9leHBcIjoxLjE2LFwiY2hhcmlzbWFfZXhwXCI6MS4xNixcImNvbXBhbnlfcmVwXCI6MS4xNixcImZhY3Rpb25fcmVwXCI6MS4xNixcImNyaW1lX21vbmV5XCI6MS4xNixcImNyaW1lX3N1Y2Nlc3NcIjoxLjE2LFwiaGFja25ldF9ub2RlX21vbmV5XCI6MS4xNixcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC44NjIwNjg5NjU1MTcyNDE0LFwiaGFja25ldF9ub2RlX3JhbV9jb3N0XCI6MC44NjIwNjg5NjU1MTcyNDE0LFwiaGFja25ldF9ub2RlX2NvcmVfY29zdFwiOjAuODYyMDY4OTY1NTE3MjQxNCxcImhhY2tuZXRfbm9kZV9sZXZlbF9jb3N0XCI6MC44NjIwNjg5NjU1MTcyNDE0LFwid29ya19tb25leVwiOjEuMTYsXCJibGFkZWJ1cm5lcl9tYXhfc3RhbWluYVwiOjEsXCJibGFkZWJ1cm5lcl9zdGFtaW5hX2dhaW5cIjoxLFwiYmxhZGVidXJuZXJfYW5hbHlzaXNcIjoxLFwiYmxhZGVidXJuZXJfc3VjY2Vzc19jaGFuY2VcIjoxfSxcImF1Z21lbnRhdGlvbnNcIjpbXSxcInF1ZXVlZEF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIE5JQyBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ29yZSBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgS2VybmVsIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDUFUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENhY2hlIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvdHJhaW5lciBJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDYXNoUm9vdCBTdGFydGVyIEtpdFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJCaXRXaXJlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjIsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjozLFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9XSxcImNpdHlcIjpcIlNlY3Rvci0xMlwiLFwiYml0Tm9kZU5cIjoxLFwiY29ycG9yYXRpb25cIjpudWxsLFwiZ2FuZ1wiOm51bGwsXCJibGFkZWJ1cm5lclwiOm51bGwsXCJjdXJyZW50U2VydmVyXCI6XCJob21lXCIsXCJmYWN0aW9uc1wiOltcIk5pdGVTZWNcIixcIlNlY3Rvci0xMlwiLFwiTmV0YnVybmVyc1wiXSxcImZhY3Rpb25JbnZpdGF0aW9uc1wiOltdLFwiaGFja25ldE5vZGVzXCI6W3tcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNSxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjEwMTMyLjExMzAzNDk1Mjg2NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6MTE4MDAwLjc5OTk5ODg1ODI5LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6NjkxNDYzMjU0LjMyNjM4NTksXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjoxMTE3ODcuNTk5OTk4OTQ4NyxcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjY5MDIyMzAzNy41NTkyNzk3LFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTFcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNSxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjEwMTMyLjExMzAzNDk1Mjg2NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6MTExNzg2LjM5OTk5ODk0ODcyLFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6Njg5MjY1NDM3LjcyMDUwMDEsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMlwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjoxMTE3ODUuMzk5OTk4OTQ4NzMsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo2Nzk3Mjg1MzMuNzAyNDM0MyxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS0zXCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoxMDEzMi4xMTMwMzQ5NTI4NjUsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjExMTc4NC4zOTk5OTg5NDg3NSxcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwiOjY3ODc2OTQ3Mi4wMjAwNzkzLFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTRcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNSxcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjEwMTMyLjExMzAzNDk1Mjg2NSxcIm9ubGluZVRpbWVTZWNvbmRzXCI6MTExNzgzLjM5OTk5ODk0ODc2LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6Njc3NzgzMTg2LjU4MDEzMjUsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtNVwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE1LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MTAxMzIuMTEzMDM0OTUyODY1LFwib25saW5lVGltZVNlY29uZHNcIjoxMTE3ODIuMzk5OTk4OTQ4NzgsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjo2NzY5NzI1NDQuNDYxMTUyNCxcIm5hbWVcIjpcImhhY2tuZXQtbm9kZS02XCJ9fSx7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTUsXCJsZXZlbFwiOjIwMCxcIm1vbmVLine truncated
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjQ3MixcInN0cmVuZ3RoXCI6MSxcImRlZmVuc2VcIjoxLFwiZGV4dGVyaXR5XCI6MSxcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoxLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6NDc0OTU4OS4yMjEzMjAxMjgsXCJzdHJlbmd0aFwiOjAsXCJkZWZlbnNlXCI6MCxcImRleHRlcml0eVwiOjAsXCJhZ2lsaXR5XCI6MCxcImNoYXJpc21hXCI6MCxcImludGVsbGlnZW5jZVwiOjB9LFwibXVsdHNcIjp7XCJoYWNraW5nX2NoYW5jZVwiOjEuNDAwMTI2OTA3NTU5OTczLFwiaGFja2luZ19zcGVlZFwiOjEuMzM0NDc1MjQyNjA0NjcxLFwiaGFja2luZ19tb25leVwiOjEuMjY5OTU2Mzc4NzM5MjA0NSxcImhhY2tpbmdfZ3Jvd1wiOjEuMjY5OTU2Mzc4NzM5MjA0NSxcImhhY2tpbmdcIjoxLjYxNzk4NjY1NDM3NjMwNTMsXCJzdHJlbmd0aFwiOjEuMjY5OTU2Mzc4NzM5MjA0NSxcImRlZmVuc2VcIjoxLjI2OTk1NjM3ODczOTIwNDUsXCJkZXh0ZXJpdHlcIjoxLjI2OTk1NjM3ODczOTIwNDUsXCJhZ2lsaXR5XCI6MS4yNjk5NTYzNzg3MzkyMDQ1LFwiY2hhcmlzbWFcIjoxLjI2OTk1NjM3ODczOTIwNDUsXCJoYWNraW5nX2V4cFwiOjEuOTE2ODQwNDA5MTU5NDg3LFwic3RyZW5ndGhfZXhwXCI6MS40NjA0NDk4MzU1NTAwODUyLFwiZGVmZW5zZV9leHBcIjoxLjQ2MDQ0OTgzNTU1MDA4NTIsXCJkZXh0ZXJpdHlfZXhwXCI6MS40NjA0NDk4MzU1NTAwODUyLFwiYWdpbGl0eV9leHBcIjoxLjQ2MDQ0OTgzNTU1MDA4NTIsXCJjaGFyaXNtYV9leHBcIjoxLjQ2MDQ0OTgzNTU1MDA4NTIsXCJjb21wYW55X3JlcFwiOjEuMjY5OTU2Mzc4NzM5MjA0NSxcImZhY3Rpb25fcmVwXCI6MS4yNjk5NTYzNzg3MzkyMDQ1LFwiY3JpbWVfbW9uZXlcIjoxLjI2OTk1NjM3ODczOTIwNDUsXCJjcmltZV9zdWNjZXNzXCI6MS4yNjk5NTYzNzg3MzkyMDQ1LFwiaGFja25ldF9ub2RlX21vbmV5XCI6My4yMDI5NDkwNDU1OTA3OCxcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC42MDIzODIyOTI2NTc1NDg1LFwiaGFja25ldF9ub2RlX3JhbV9jb3N0XCI6MC43ODc0Mjc4MzM1MzkyNzg4LFwiaGFja25ldF9ub2RlX2NvcmVfY29zdFwiOjAuNzg3NDI3ODMzNTM5Mjc4OCxcImhhY2tuZXRfbm9kZV9sZXZlbF9jb3N0XCI6MC42NjkzMTM2NTg1MDgzODY5LFwid29ya19tb25leVwiOjEuMjY5OTU2Mzc4NzM5MjA0NSxcImJsYWRlYnVybmVyX21heF9zdGFtaW5hXCI6MSxcImJsYWRlYnVybmVyX3N0YW1pbmFfZ2FpblwiOjEsXCJibGFkZWJ1cm5lcl9hbmFseXNpc1wiOjEsXCJibGFkZWJ1cm5lcl9zdWNjZXNzX2NoYW5jZVwiOjF9LFwiYXVnbWVudGF0aW9uc1wiOlt7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgTklDIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDb3JlIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBLZXJuZWwgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENQVSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ2FjaGUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNhc2hSb290IFN0YXJ0ZXIgS2l0XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkJpdFdpcmVcIn0se1wibGV2ZWxcIjo5LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJhbC1SZXRlbnRpb24gRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBcnRpZmljaWFsIFN5bmFwdGljIFBvdGVudGlhdGlvblwifV0sXCJxdWV1ZWRBdWdtZW50YXRpb25zXCI6W3tcImxldmVsXCI6MSxcIm5hbWVcIjpcIkRhdGFKYWNrXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNSVFg0Mi1BQSBHZW5lIE1vZGlmaWNhdGlvblwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTeW5hcHRpYyBFbmhhbmNlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MTAsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElcIn1dLFwiY2l0eVwiOlwiQWV2dW1cIixcImJpdE5vZGVOXCI6MSxcImNvcnBvcmF0aW9uXCI6bnVsbCxcImdhbmdcIjpudWxsLFwiYmxhZGVidXJuZXJcIjpudWxsLFwiY3VycmVudFNlcnZlclwiOlwiSS5JLkkuSVwiLFwiZmFjdGlvbnNcIjpbXCJUaGUgQmxhY2sgSGFuZFwiLFwiTml0ZVNlY1wiLFwiQWV2dW1cIixcIkN5YmVyU2VjXCJdLFwiZmFjdGlvbkludml0YXRpb25zXCI6W1wiTmV0YnVybmVyc1wiXSxcImhhY2tuZXROb2Rlc1wiOlt7XCJjdG9yXCI6XCJIYWNrbmV0Tm9kZVwiLFwiZGF0YVwiOntcImNvcmVzXCI6MTYsXCJsZXZlbFwiOjIwMCxcIm1vbmV5R2FpblJhdGVQZXJTZWNvbmRcIjoyOTM3NS4yMzYwODk1NDg0NCxcIm9ubGluZVRpbWVTZWNvbmRzXCI6NzM0MjcuNzk5OTk5NDkyNDgsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjoxNTY2OTA4NDUzLjg1Mzk1NjcsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMFwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE2LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MjkzNzUuMjM2MDg5NTQ4NDQsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjczNDI2Ljc5OTk5OTQ5MjQ5LFwicmFtXCI6NjQsXCJ0b3RhbE1vbmV5R2VuZXJhdGVkXCI6MTU2NDM3Nzc4OC45OTA4OTQsXCJuYW1lXCI6XCJoYWNrbmV0LW5vZGUtMVwifX0se1wiY3RvclwiOlwiSGFja25ldE5vZGVcIixcImRhdGFcIjp7XCJjb3Jlc1wiOjE2LFwibGV2ZWxcIjoyMDAsXCJtb25leUdhaW5SYXRlUGVyU2Vjb25kXCI6MjkzNzUuMjM2MDg5NTQ4NDQsXCJvbmxpbmVUaW1lU2Vjb25kc1wiOjczNDI1Ljc5OTk5OTQ5MjUsXCJyYW1cIjo2NCxcInRvdGFsTW9uZXlHZW5lcmF0ZWRcIjoxNTYyOTQwNDQ1LjQ0ODcxLFwibmFtZVwiOlwiaGFja25ldC1ub2RlLTJcIn19LHtcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNixcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjI5Mzc1LjIzNjA4OTU0ODQ0LFwib25saW5lVGltZVNlY29uZHNcIjo3MzQyNC43OTk5OTk0OTI1MixcInJhbVwiOjY0LFwidG90YWxNb25leUdlbmVyYXRlZFwLine truncated
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjgwNixcInN0cmVuZ3RoXCI6MSxcImRlZmVuc2VcIjoxLFwiZGV4dGVyaXR5XCI6MSxcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoxLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6OTE4OTMzMS4yNjY2OTc1MDcsXCJzdHJlbmd0aFwiOjAsXCJkZWZlbnNlXCI6MCxcImRleHRlcml0eVwiOjAsXCJhZ2lsaXR5XCI6MCxcImNoYXJpc21hXCI6MCxcImludGVsbGlnZW5jZVwiOjB9LFwibXVsdHNcIjp7XCJoYWNraW5nX2NoYW5jZVwiOjEuNjg3MzE2Nzc3MzIzMTUxNyxcImhhY2tpbmdfc3BlZWRcIjoxLjY3ODg4OTgxODEzNzkwNDIsXCJoYWNraW5nX21vbmV5XCI6Mi44MTk0MzgyNDQ5MTYxNzAzLFwiaGFja2luZ19ncm93XCI6MS42ODg0ODg1ODg0MDM1MDM1LFwiaGFja2luZ1wiOjIuNTc1MjgxNTcwMjkyNjE5NyxcInN0cmVuZ3RoXCI6MS41NTM0MDk1MDEzMzEyMjMsXCJkZWZlbnNlXCI6MS4zNTA3OTA4NzA3MjI4MDI3LFwiZGV4dGVyaXR5XCI6MS41NTM0MDk1MDEzMzEyMjMsXCJhZ2lsaXR5XCI6MS4zNTA3OTA4NzA3MjI4MDI3LFwiY2hhcmlzbWFcIjoxLjM1MDc5MDg3MDcyMjgwMjcsXCJoYWNraW5nX2V4cFwiOjMuMzk5OTMyMzg1MTYxOTYxNixcInN0cmVuZ3RoX2V4cFwiOjEuNzA4NzUwNDUxNDY0MzQ1NSxcImRlZmVuc2VfZXhwXCI6MS43MDg3NTA0NTE0NjQzNDU1LFwiZGV4dGVyaXR5X2V4cFwiOjEuNzA4NzUwNDUxNDY0MzQ1NSxcImFnaWxpdHlfZXhwXCI6MS43MDg3NTA0NTE0NjQzNDU1LFwiY2hhcmlzbWFfZXhwXCI6MS43MDg3NTA0NTE0NjQzNDU1LFwiY29tcGFueV9yZXBcIjoxLjM1MDc5MDg3MDcyMjgwMjcsXCJmYWN0aW9uX3JlcFwiOjEuMzUwNzkwODcwNzIyODAyNyxcImNyaW1lX21vbmV5XCI6MS4zNTA3OTA4NzA3MjI4MDI3LFwiY3JpbWVfc3VjY2Vzc1wiOjEuMzUwNzkwODcwNzIyODAyNyxcImhhY2tuZXRfbm9kZV9tb25leVwiOjMuNDA2ODIxMjEyNjA3MDM3LFwiaGFja25ldF9ub2RlX3B1cmNoYXNlX2Nvc3RcIjowLjU2NjMzMzE5MTYwMTI2MzUsXCJoYWNrbmV0X25vZGVfcmFtX2Nvc3RcIjowLjc0MDMwNDgyNTYyMjU2NjYsXCJoYWNrbmV0X25vZGVfY29yZV9jb3N0XCI6MC43NDAzMDQ4MjU2MjI1NjY2LFwiaGFja25ldF9ub2RlX2xldmVsX2Nvc3RcIjowLjYyOTI1OTEwMTc3OTE4MTUsXCJ3b3JrX21vbmV5XCI6MS4zNTA3OTA4NzA3MjI4MDI3LFwiYmxhZGVidXJuZXJfbWF4X3N0YW1pbmFcIjoxLFwiYmxhZGVidXJuZXJfc3RhbWluYV9nYWluXCI6MSxcImJsYWRlYnVybmVyX2FuYWx5c2lzXCI6MSxcImJsYWRlYnVybmVyX3N1Y2Nlc3NfY2hhbmNlXCI6MX0sXCJhdWdtZW50YXRpb25zXCI6W3tcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBOSUMgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENvcmUgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIEtlcm5lbCBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ1BVIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDYWNoZSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyb3RyYWluZXIgSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ2FzaFJvb3QgU3RhcnRlciBLaXRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQml0V2lyZVwifSx7XCJsZXZlbFwiOjE1LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJhbC1SZXRlbnRpb24gRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBcnRpZmljaWFsIFN5bmFwdGljIFBvdGVudGlhdGlvblwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJEYXRhSmFja1wifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDUlRYNDItQUEgR2VuZSBNb2RpZmljYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3luYXB0aWMgRW5oYW5jZW1lbnQgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyb3RyYWluZXIgSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJFbWJlZGRlZCBOZXRidXJuZXIgTW9kdWxlIENvcmUgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyYWxzdGltdWxhdG9yXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVuaGFuY2VkIE15ZWxpbiBTaGVhdGhpbmdcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJVlwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJUaGUgQmxhY2sgSGFuZFwifV0sXCJxdWV1ZWRBdWdtZW50YXRpb25zXCI6W3tcImxldmVsXCI6MSxcIm5hbWVcIjpcIlBDTWF0cml4XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlNwZWVjaCBQcm9jZXNzb3IgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJXaXJlZCBSZWZsZXhlc1wifSx7XCJsZXZlbFwiOjE2LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MTcsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoxOCxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjE5LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MjAsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoyMSxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjIyLFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MjMsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn1dLFwiY2l0eVwiOlwiQWV2dW1cIixcImJpdE5vZGVOXCI6MSxcImNvcnBvcmF0aW9uXCI6bnVsbCxcImdhbmdcIjpudWxsLFwiYmxhZGVidXJuZXJcIjpudWxsLFwiY3VycmVudFNlcnZlclwiOlwicnVuNHRoZWgxMTF6XCIsXCJmYWN0aW9uc1wiOltcIkJpdFJ1bm5lcnNcIixcIlRoZSBCbGFjayBIYW5kXCIsXCJOaXRlU2VjXCIsXCJBZXZ1bVwiLFwiQ3liZXJTZWNcIl0sXCJmYWN0aW9uSW52aXRhdGlvbnNcIjpbXCJOZXRidXJuZXJzXCJdLFwiaGFja25ldE5vZGVzXCI6W3tcImN0b3JcIjpcIkhhY2tuZXROb2RlXCIsXCJkYXRhXCI6e1wiY29yZXNcIjoxNixcImxldmVsXCI6MjAwLFwibW9uZXlHYWluUmF0ZVBlclNlY29uZFwiOjMxMjQ1LjAxMDc3MzExMjIyMyxcIm9ubGluZVRpbWVTZWNLine truncated
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjkyNCxcInN0cmVuZ3RoXCI6MixcImRlZmVuc2VcIjozLFwiZGV4dGVyaXR5XCI6MixcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoyLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6MTA4NzAwODQuMzMyMDcyMDY4LFwic3RyZW5ndGhcIjowLFwiZGVmZW5zZVwiOjAsXCJkZXh0ZXJpdHlcIjowLFwiYWdpbGl0eVwiOjAsXCJjaGFyaXNtYVwiOjAsXCJpbnRlbGxpZ2VuY2VcIjowfSxcIm11bHRzXCI6e1wiaGFja2luZ19jaGFuY2VcIjoxLjkwMTMzNjMwNTExNTQ4MTcsXCJoYWNraW5nX3NwZWVkXCI6MS44OTE4NDA0NjkwODk5MjEzLFwiaGFja2luZ19tb25leVwiOjMuMTc3MDU2MjM5MzExOTEzLFwiaGFja2luZ19ncm93XCI6MS45MDI2NTY3NDg4OTkyMTcyLFwiaGFja2luZ1wiOjIuOTAxOTMwNjkzMzM0NDE0LFwic3RyZW5ndGhcIjoyLjYzNDA2ODQ0NTY4NDA1ODYsXCJkZWZlbnNlXCI6My4yMDY2OTIwMjA4MzI3NjcsXCJkZXh0ZXJpdHlcIjoyLjIyMzkzOTM2NzUxODMzOTQsXCJhZ2lsaXR5XCI6MS41OTgyMzE2NjkwNzUzNDI0LFwiY2hhcmlzbWFcIjoyLjE2NTMyMDc5NjI3Mjg1MzMsXCJoYWNraW5nX2V4cFwiOjUuMzYzNjUyNDg3NzkzMzgsXCJzdHJlbmd0aF9leHBcIjoyLjMxMDU4NjM1NTg2MzIwOSxcImRlZmVuc2VfZXhwXCI6Mi4zMTA1ODYzNTU4NjMyMDksXCJkZXh0ZXJpdHlfZXhwXCI6Mi4zMTA1ODYzNTU4NjMyMDksXCJhZ2lsaXR5X2V4cFwiOjIuMzEwNTg2MzU1ODYzMjA5LFwiY2hhcmlzbWFfZXhwXCI6Mi4wNzUwOTkwOTY0MjgxNSxcImNvbXBhbnlfcmVwXCI6Mi43MzkxMzA4MDcyODUxNTksXCJmYWN0aW9uX3JlcFwiOjIuMDc1MDk5MDk2NDI4MTUxLFwiY3JpbWVfbW9uZXlcIjoxLjgwNDQzMzk5Njg5NDA0NDQsXCJjcmltZV9zdWNjZXNzXCI6Mi4wNTA0OTMxNzgyODg2ODcsXCJoYWNrbmV0X25vZGVfbW9uZXlcIjozLjgzODk0Mjk1NTgzNTIyNixcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC41MDI1ODUyMDQ1MDczODQzLFwiaGFja25ldF9ub2RlX3JhbV9jb3N0XCI6MC42NTY5NzQxMjM1MzkwNjQxLFwiaGFja25ldF9ub2RlX2NvcmVfY29zdFwiOjAuNjU2OTc0MTIzNTM5MDY0MSxcImhhY2tuZXRfbm9kZV9sZXZlbF9jb3N0XCI6MC41NTg0MjgwMDUwMDgyMDQ3LFwid29ya19tb25leVwiOjIuOTc1Mjk4NTE3NjU4NjM5NSxcImJsYWRlYnVybmVyX21heF9zdGFtaW5hXCI6MSxcImJsYWRlYnVybmVyX3N0YW1pbmFfZ2FpblwiOjEsXCJibGFkZWJ1cm5lcl9hbmFseXNpc1wiOjEsXCJibGFkZWJ1cm5lcl9zdWNjZXNzX2NoYW5jZVwiOjF9LFwiYXVnbWVudGF0aW9uc1wiOlt7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgTklDIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDb3JlIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBLZXJuZWwgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENQVSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ2FjaGUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNhc2hSb290IFN0YXJ0ZXIgS2l0XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkJpdFdpcmVcIn0se1wibGV2ZWxcIjoyNyxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyYWwtUmV0ZW50aW9uIEVuaGFuY2VtZW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXJ0aWZpY2lhbCBTeW5hcHRpYyBQb3RlbnRpYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRGF0YUphY2tcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ1JUWDQyLUFBIEdlbmUgTW9kaWZpY2F0aW9uXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlN5bmFwdGljIEVuaGFuY2VtZW50IEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZSBDb3JlIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsc3RpbXVsYXRvclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJFbmhhbmNlZCBNeWVsaW4gU2hlYXRoaW5nXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSVZcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiVGhlIEJsYWNrIEhhbmRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiUENNYXRyaXhcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3BlZWNoIFByb2Nlc3NvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIldpcmVkIFJlZmxleGVzXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvcmVjZXB0b3IgTWFuYWdlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJlZ2VuIEdlbmUgTW9kaWZpY2F0aW9uXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5hbm9maWJlciBXZWF2ZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTb2NpYWwgTmVnb3RpYXRpb24gQXNzaXN0YW50IChTLk4uQSlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTnVvcHRpbWFsIE5vb3Ryb3BpYyBJbmplY3RvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkFEUi1WMSBQaGVyb21vbmUgR2VuZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTcGVlY2ggRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTnV0cmlHZW4gSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJJTkZSQVJFVCBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDb21iYXQgUmliIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXVnbWVudGVkIFRhcmdldGluZyBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNvbWJhdCBSaWIgSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRGVybWFGb3JjZSBQYXJ0aWNsZSBCYXJyaWVyXCJ9XSxcInF1ZXVlZEF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXVnbWVudGVkIFRhcmdldGluZyBJSVwifV0sXCJjaXR5XCI6XCJTZWN0b3ItMTJcIixcImJpdE5vZGVOXCI6MSxcImNvcnBvcmF0aW9uXCI6bnVsbCxcImdhbmdcIjpudWxLine truncated
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjkyNCxcInN0cmVuZ3RoXCI6MixcImRlZmVuc2VcIjozLFwiZGV4dGVyaXR5XCI6MixcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoyLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6MTA4NjU2NjUuNzU1MTUyNjM5LFwic3RyZW5ndGhcIjowLFwiZGVmZW5zZVwiOjAsXCJkZXh0ZXJpdHlcIjowLFwiYWdpbGl0eVwiOjAsXCJjaGFyaXNtYVwiOjAsXCJpbnRlbGxpZ2VuY2VcIjowfSxcIm11bHRzXCI6e1wiaGFja2luZ19jaGFuY2VcIjoxLjkwMTMzNjMwNTExNTQ4MTcsXCJoYWNraW5nX3NwZWVkXCI6MS44OTE4NDA0NjkwODk5MjEzLFwiaGFja2luZ19tb25leVwiOjMuMTc3MDU2MjM5MzExOTEzLFwiaGFja2luZ19ncm93XCI6MS45MDI2NTY3NDg4OTkyMTcyLFwiaGFja2luZ1wiOjIuOTAxOTMwNjkzMzM0NDE0LFwic3RyZW5ndGhcIjoyLjYzNDA2ODQ0NTY4NDA1ODYsXCJkZWZlbnNlXCI6My4yMDY2OTIwMjA4MzI3NjcsXCJkZXh0ZXJpdHlcIjoyLjIyMzkzOTM2NzUxODMzOTQsXCJhZ2lsaXR5XCI6MS41OTgyMzE2NjkwNzUzNDI0LFwiY2hhcmlzbWFcIjoyLjE2NTMyMDc5NjI3Mjg1MzMsXCJoYWNraW5nX2V4cFwiOjUuMzYzNjUyNDg3NzkzMzgsXCJzdHJlbmd0aF9leHBcIjoyLjMxMDU4NjM1NTg2MzIwOSxcImRlZmVuc2VfZXhwXCI6Mi4zMTA1ODYzNTU4NjMyMDksXCJkZXh0ZXJpdHlfZXhwXCI6Mi4zMTA1ODYzNTU4NjMyMDksXCJhZ2lsaXR5X2V4cFwiOjIuMzEwNTg2MzU1ODYzMjA5LFwiY2hhcmlzbWFfZXhwXCI6Mi4wNzUwOTkwOTY0MjgxNSxcImNvbXBhbnlfcmVwXCI6Mi43MzkxMzA4MDcyODUxNTksXCJmYWN0aW9uX3JlcFwiOjIuMDc1MDk5MDk2NDI4MTUxLFwiY3JpbWVfbW9uZXlcIjoxLjgwNDQzMzk5Njg5NDA0NDQsXCJjcmltZV9zdWNjZXNzXCI6Mi4wNTA0OTMxNzgyODg2ODcsXCJoYWNrbmV0X25vZGVfbW9uZXlcIjozLjgzODk0Mjk1NTgzNTIyNixcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC41MDI1ODUyMDQ1MDczODQzLFwiaGFja25ldF9ub2RlX3JhbV9jb3N0XCI6MC42NTY5NzQxMjM1MzkwNjQxLFwiaGFja25ldF9ub2RlX2NvcmVfY29zdFwiOjAuNjU2OTc0MTIzNTM5MDY0MSxcImhhY2tuZXRfbm9kZV9sZXZlbF9jb3N0XCI6MC41NTg0MjgwMDUwMDgyMDQ3LFwid29ya19tb25leVwiOjIuOTc1Mjk4NTE3NjU4NjM5NSxcImJsYWRlYnVybmVyX21heF9zdGFtaW5hXCI6MSxcImJsYWRlYnVybmVyX3N0YW1pbmFfZ2FpblwiOjEsXCJibGFkZWJ1cm5lcl9hbmFseXNpc1wiOjEsXCJibGFkZWJ1cm5lcl9zdWNjZXNzX2NoYW5jZVwiOjF9LFwiYXVnbWVudGF0aW9uc1wiOlt7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgTklDIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDb3JlIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBLZXJuZWwgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENQVSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ2FjaGUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNhc2hSb290IFN0YXJ0ZXIgS2l0XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkJpdFdpcmVcIn0se1wibGV2ZWxcIjoyNyxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyYWwtUmV0ZW50aW9uIEVuaGFuY2VtZW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXJ0aWZpY2lhbCBTeW5hcHRpYyBQb3RlbnRpYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRGF0YUphY2tcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ1JUWDQyLUFBIEdlbmUgTW9kaWZpY2F0aW9uXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlN5bmFwdGljIEVuaGFuY2VtZW50IEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZSBDb3JlIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsc3RpbXVsYXRvclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJFbmhhbmNlZCBNeWVsaW4gU2hlYXRoaW5nXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSVZcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiVGhlIEJsYWNrIEhhbmRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiUENNYXRyaXhcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3BlZWNoIFByb2Nlc3NvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIldpcmVkIFJlZmxleGVzXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvcmVjZXB0b3IgTWFuYWdlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJlZ2VuIEdlbmUgTW9kaWZpY2F0aW9uXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5hbm9maWJlciBXZWF2ZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTb2NpYWwgTmVnb3RpYXRpb24gQXNzaXN0YW50IChTLk4uQSlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTnVvcHRpbWFsIE5vb3Ryb3BpYyBJbmplY3RvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkFEUi1WMSBQaGVyb21vbmUgR2VuZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTcGVlY2ggRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTnV0cmlHZW4gSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJJTkZSQVJFVCBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDb21iYXQgUmliIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXVnbWVudGVkIFRhcmdldGluZyBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNvbWJhdCBSaWIgSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRGVybWFGb3JjZSBQYXJ0aWNsZSBCYXJyaWVyXCJ9XSxcInF1ZXVlZEF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXVnbWVudGVkIFRhcmdldGluZyBJSVwifV0sXCJjaXR5XCI6XCJTZWN0b3ItMTJcIixcImJpdE5vZGVOXCI6MSxcImNvcnBvcmF0aW9uXCI6bnVsbCxcImdhbmdcIjpudWxLine truncated
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjk3MSxcInN0cmVuZ3RoXCI6MixcImRlZmVuc2VcIjozLFwiZGV4dGVyaXR5XCI6MixcImFnaWxpdHlcIjoxLFwiY2hhcmlzbWFcIjoyLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJleHBcIjp7XCJoYWNraW5nXCI6MTgwMTYyNDMuNDczODczMDc1LFwic3RyZW5ndGhcIjowLFwiZGVmZW5zZVwiOjAsXCJkZXh0ZXJpdHlcIjowLFwiYWdpbGl0eVwiOjAsXCJjaGFyaXNtYVwiOjAsXCJpbnRlbGxpZ2VuY2VcIjowfSxcIm11bHRzXCI6e1wiaGFja2luZ19jaGFuY2VcIjoxLjkwMTMzNjMwNTExNTQ4MTcsXCJoYWNraW5nX3NwZWVkXCI6MS44OTE4NDA0NjkwODk5MjEzLFwiaGFja2luZ19tb25leVwiOjMuMTc3MDU2MjM5MzExOTEzLFwiaGFja2luZ19ncm93XCI6MS45MDI2NTY3NDg4OTkyMTcyLFwiaGFja2luZ1wiOjIuOTAxOTMwNjkzMzM0NDE0LFwic3RyZW5ndGhcIjoyLjYzNDA2ODQ0NTY4NDA1ODYsXCJkZWZlbnNlXCI6My4yMDY2OTIwMjA4MzI3NjcsXCJkZXh0ZXJpdHlcIjoyLjY2ODcyNzI0MTAyMjAwNyxcImFnaWxpdHlcIjoxLjU5ODIzMTY2OTA3NTM0MjQsXCJjaGFyaXNtYVwiOjIuMTY1MzIwNzk2MjcyODUzMyxcImhhY2tpbmdfZXhwXCI6NS4zNjM2NTI0ODc3OTMzOCxcInN0cmVuZ3RoX2V4cFwiOjIuMzEwNTg2MzU1ODYzMjA5LFwiZGVmZW5zZV9leHBcIjoyLjMxMDU4NjM1NTg2MzIwOSxcImRleHRlcml0eV9leHBcIjoyLjMxMDU4NjM1NTg2MzIwOSxcImFnaWxpdHlfZXhwXCI6Mi4zMTA1ODYzNTU4NjMyMDksXCJjaGFyaXNtYV9leHBcIjoyLjA3NTA5OTA5NjQyODE1LFwiY29tcGFueV9yZXBcIjoyLjczOTEzMDgwNzI4NTE1OSxcImZhY3Rpb25fcmVwXCI6Mi4wNzUwOTkwOTY0MjgxNTEsXCJjcmltZV9tb25leVwiOjEuODA0NDMzOTk2ODk0MDQ0NCxcImNyaW1lX3N1Y2Nlc3NcIjoyLjA1MDQ5MzE3ODI4ODY4NyxcImhhY2tuZXRfbm9kZV9tb25leVwiOjMuODM4OTQyOTU1ODM1MjI2LFwiaGFja25ldF9ub2RlX3B1cmNoYXNlX2Nvc3RcIjowLjUwMjU4NTIwNDUwNzM4NDMsXCJoYWNrbmV0X25vZGVfcmFtX2Nvc3RcIjowLjY1Njk3NDEyMzUzOTA2NDEsXCJoYWNrbmV0X25vZGVfY29yZV9jb3N0XCI6MC42NTY5NzQxMjM1MzkwNjQxLFwiaGFja25ldF9ub2RlX2xldmVsX2Nvc3RcIjowLjU1ODQyODAwNTAwODIwNDcsXCJ3b3JrX21vbmV5XCI6Mi45NzUyOTg1MTc2NTg2Mzk1LFwiYmxhZGVidXJuZXJfbWF4X3N0YW1pbmFcIjoxLFwiYmxhZGVidXJuZXJfc3RhbWluYV9nYWluXCI6MSxcImJsYWRlYnVybmVyX2FuYWx5c2lzXCI6MSxcImJsYWRlYnVybmVyX3N1Y2Nlc3NfY2hhbmNlXCI6MX0sXCJhdWdtZW50YXRpb25zXCI6W3tcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBOSUMgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENvcmUgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIEtlcm5lbCBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ1BVIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDYWNoZSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyb3RyYWluZXIgSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ2FzaFJvb3QgU3RhcnRlciBLaXRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQml0V2lyZVwifSx7XCJsZXZlbFwiOjI3LFwibmFtZVwiOlwiTmV1cm9GbHV4IEdvdmVybm9yXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJhbC1SZXRlbnRpb24gRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBcnRpZmljaWFsIFN5bmFwdGljIFBvdGVudGlhdGlvblwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJEYXRhSmFja1wifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDUlRYNDItQUEgR2VuZSBNb2RpZmljYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3luYXB0aWMgRW5oYW5jZW1lbnQgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyb3RyYWluZXIgSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJFbWJlZGRlZCBOZXRidXJuZXIgTW9kdWxlIENvcmUgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyYWxzdGltdWxhdG9yXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVuaGFuY2VkIE15ZWxpbiBTaGVhdGhpbmdcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJVlwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJUaGUgQmxhY2sgSGFuZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJQQ01hdHJpeFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTcGVlY2ggUHJvY2Vzc29yIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiV2lyZWQgUmVmbGV4ZXNcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm9yZWNlcHRvciBNYW5hZ2VtZW50IEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmVnZW4gR2VuZSBNb2RpZmljYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmFub2ZpYmVyIFdlYXZlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlNvY2lhbCBOZWdvdGlhdGlvbiBBc3Npc3RhbnQgKFMuTi5BKVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOdW9wdGltYWwgTm9vdHJvcGljIEluamVjdG9yIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQURSLVYxIFBoZXJvbW9uZSBHZW5lXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlNwZWVjaCBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOdXRyaUdlbiBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIklORlJBUkVUIEVuaGFuY2VtZW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNvbWJhdCBSaWIgSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBdWdtZW50ZWQgVGFyZ2V0aW5nIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ29tYmF0IFJpYiBJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJEZXJtYUZvcmNlIFBhcnRpY2xlIEJhcnJpZXJcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXVnbWVudGVkIFRhcmdldGluZyBJSVwifV0sXCJxdWV1ZWRBdWdtZW50YXRpb25zXCI6W10sXCJjaXR5XCI6XCJJc2hpbWFcIixcImJpdE5vZGVOXCI6MSxcImNvcnBvcmF0aW9uXCI6bnVsbCxcImdhbmdcIjpudWxsLFwLine truncated
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjEwMjQsXCJzdHJlbmd0aFwiOjIsXCJkZWZlbnNlXCI6MyxcImRleHRlcml0eVwiOjIsXCJhZ2lsaXR5XCI6MSxcImNoYXJpc21hXCI6MixcImludGVsbGlnZW5jZVwiOjB9LFwiZXhwXCI6e1wiaGFja2luZ1wiOjMxODY5ODYxLjM3OTgyOTY5NCxcInN0cmVuZ3RoXCI6MCxcImRlZmVuc2VcIjowLFwiZGV4dGVyaXR5XCI6MCxcImFnaWxpdHlcIjowLFwiY2hhcmlzbWFcIjowLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJtdWx0c1wiOntcImhhY2tpbmdfY2hhbmNlXCI6MS45MDEzMzYzMDUxMTU0ODE3LFwiaGFja2luZ19zcGVlZFwiOjEuODkxODQwNDY5MDg5OTIxMyxcImhhY2tpbmdfbW9uZXlcIjozLjE3NzA1NjIzOTMxMTkxMyxcImhhY2tpbmdfZ3Jvd1wiOjEuOTAyNjU2NzQ4ODk5MjE3MixcImhhY2tpbmdcIjoyLjkwMTkzMDY5MzMzNDQxNCxcInN0cmVuZ3RoXCI6Mi42MzQwNjg0NDU2ODQwNTg2LFwiZGVmZW5zZVwiOjMuMjA2NjkyMDIwODMyNzY3LFwiZGV4dGVyaXR5XCI6Mi42Njg3MjcyNDEwMjIwMDcsXCJhZ2lsaXR5XCI6MS41OTgyMzE2NjkwNzUzNDI0LFwiY2hhcmlzbWFcIjoyLjE2NTMyMDc5NjI3Mjg1MzMsXCJoYWNraW5nX2V4cFwiOjUuMzYzNjUyNDg3NzkzMzgsXCJzdHJlbmd0aF9leHBcIjoyLjMxMDU4NjM1NTg2MzIwOSxcImRlZmVuc2VfZXhwXCI6Mi4zMTA1ODYzNTU4NjMyMDksXCJkZXh0ZXJpdHlfZXhwXCI6Mi4zMTA1ODYzNTU4NjMyMDksXCJhZ2lsaXR5X2V4cFwiOjIuMzEwNTg2MzU1ODYzMjA5LFwiY2hhcmlzbWFfZXhwXCI6Mi4wNzUwOTkwOTY0MjgxNSxcImNvbXBhbnlfcmVwXCI6Mi43MzkxMzA4MDcyODUxNTksXCJmYWN0aW9uX3JlcFwiOjIuMDc1MDk5MDk2NDI4MTUxLFwiY3JpbWVfbW9uZXlcIjoxLjgwNDQzMzk5Njg5NDA0NDQsXCJjcmltZV9zdWNjZXNzXCI6Mi4wNTA0OTMxNzgyODg2ODcsXCJoYWNrbmV0X25vZGVfbW9uZXlcIjozLjgzODk0Mjk1NTgzNTIyNixcImhhY2tuZXRfbm9kZV9wdXJjaGFzZV9jb3N0XCI6MC41MDI1ODUyMDQ1MDczODQzLFwiaGFja25ldF9ub2RlX3JhbV9jb3N0XCI6MC42NTY5NzQxMjM1MzkwNjQxLFwiaGFja25ldF9ub2RlX2NvcmVfY29zdFwiOjAuNjU2OTc0MTIzNTM5MDY0MSxcImhhY2tuZXRfbm9kZV9sZXZlbF9jb3N0XCI6MC41NTg0MjgwMDUwMDgyMDQ3LFwid29ya19tb25leVwiOjIuOTc1Mjk4NTE3NjU4NjM5NSxcImJsYWRlYnVybmVyX21heF9zdGFtaW5hXCI6MSxcImJsYWRlYnVybmVyX3N0YW1pbmFfZ2FpblwiOjEsXCJibGFkZWJ1cm5lcl9hbmFseXNpc1wiOjEsXCJibGFkZWJ1cm5lcl9zdWNjZXNzX2NoYW5jZVwiOjF9LFwiYXVnbWVudGF0aW9uc1wiOlt7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgTklDIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDb3JlIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBLZXJuZWwgRGlyZWN0LU5ldXJhbCBJbnRlcmZhY2VcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENQVSBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ2FjaGUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNhc2hSb290IFN0YXJ0ZXIgS2l0XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkJpdFdpcmVcIn0se1wibGV2ZWxcIjoyNyxcIm5hbWVcIjpcIk5ldXJvRmx1eCBHb3Zlcm5vclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyYWwtUmV0ZW50aW9uIEVuaGFuY2VtZW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXJ0aWZpY2lhbCBTeW5hcHRpYyBQb3RlbnRpYXRpb25cIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRGF0YUphY2tcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ1JUWDQyLUFBIEdlbmUgTW9kaWZpY2F0aW9uXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlN5bmFwdGljIEVuaGFuY2VtZW50IEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cm90cmFpbmVyIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW1iZWRkZWQgTmV0YnVybmVyIE1vZHVsZSBDb3JlIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsc3RpbXVsYXRvclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJFbmhhbmNlZCBNeWVsaW4gU2hlYXRoaW5nXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSVZcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiVGhlIEJsYWNrIEhhbmRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiUENNYXRyaXhcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3BlZWNoIFByb2Nlc3NvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIldpcmVkIFJlZmxleGVzXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvcmVjZXB0b3IgTWFuYWdlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJlZ2VuIEdlbmUgTW9kaWZpY2F0aW9uXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5hbm9maWJlciBXZWF2ZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTb2NpYWwgTmVnb3RpYXRpb24gQXNzaXN0YW50IChTLk4uQSlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTnVvcHRpbWFsIE5vb3Ryb3BpYyBJbmplY3RvciBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkFEUi1WMSBQaGVyb21vbmUgR2VuZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTcGVlY2ggRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTnV0cmlHZW4gSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJJTkZSQVJFVCBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDb21iYXQgUmliIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQXVnbWVudGVkIFRhcmdldGluZyBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNvbWJhdCBSaWIgSUlcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRGVybWFGb3JjZSBQYXJ0aWNsZSBCYXJyaWVyXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkF1Z21lbnRlZCBUYXJnZXRpbmcgSUlcIn1dLFwicXVldWVkQXVnbWVudGF0aW9uc1wiOlt7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJFbWJlZGRlZCBOZXRidXJuZXIgTW9kdWxlIENvcmUgVjIgVXBncmFkZVwifSx7XCJLine truncated
@@ -0,0 +1 @@
eyJjdG9yIjoiQml0YnVybmVyU2F2ZU9iamVjdCIsImRhdGEiOnsiUGxheWVyU2F2ZSI6IntcImN0b3JcIjpcIlBsYXllck9iamVjdFwiLFwiZGF0YVwiOntcImhwXCI6e1wiY3VycmVudFwiOjEwLFwibWF4XCI6MTB9LFwic2tpbGxzXCI6e1wiaGFja2luZ1wiOjIwNjksXCJzdHJlbmd0aFwiOjIsXCJkZWZlbnNlXCI6MyxcImRleHRlcml0eVwiOjIsXCJhZ2lsaXR5XCI6MSxcImNoYXJpc21hXCI6MixcImludGVsbGlnZW5jZVwiOjB9LFwiZXhwXCI6e1wiaGFja2luZ1wiOjIzNzQ0NjU3LjQ1MTg4OTI4OCxcInN0cmVuZ3RoXCI6MCxcImRlZmVuc2VcIjowLFwiZGV4dGVyaXR5XCI6MCxcImFnaWxpdHlcIjowLFwiY2hhcmlzbWFcIjowLFwiaW50ZWxsaWdlbmNlXCI6MH0sXCJtdWx0c1wiOntcImhhY2tpbmdfY2hhbmNlXCI6Mi4yOTIwODQzNTIyNDAxNzEsXCJoYWNraW5nX3NwZWVkXCI6Mi4yNDIyODA4MzcwNTM4NjY3LFwiaGFja2luZ19tb25leVwiOjcuNDM2MTMwODg4ODYxNjc0LFwiaGFja2luZ19ncm93XCI6My40NzUyNjY5MTQzOTAzNTk0LFwiaGFja2luZ1wiOjYuMDI0OTM0OTYxNDg1NDkyLFwic3RyZW5ndGhcIjoyLjc0OTI2NTc4MzE3MjkzOSxcImRlZmVuc2VcIjozLjM0NjkzMjI1Nzc3NTc1MixcImRleHRlcml0eVwiOjIuNzg1NDQwMzMyOTUxNTMwNyxcImFnaWxpdHlcIjoxLjY2ODEyODExODkwNzM3MjcsXCJjaGFyaXNtYVwiOjIuMjYwMDE4MTA0MTM4NDI2NCxcImhhY2tpbmdfZXhwXCI6OC44ODQzODIxMzEwMDcyMjcsXCJzdHJlbmd0aF9leHBcIjoyLjQxMTYzNjY1MTkwNjA4NjYsXCJkZWZlbnNlX2V4cFwiOjIuNDExNjM2NjUxOTA2MDg2NixcImRleHRlcml0eV9leHBcIjoyLjQxMTYzNjY1MTkwNjA4NjYsXCJhZ2lsaXR5X2V4cFwiOjIuNDExNjM2NjUxOTA2MDg2NixcImNoYXJpc21hX2V4cFwiOjIuMTY1ODUwNjgzMTMyNjU4MyxcImNvbXBhbnlfcmVwXCI6Mi44NTg5MjI5MDE3MzUxMTAzLFwiZmFjdGlvbl9yZXBcIjoyLjE2NTg1MDY4MzEzMjY1ODcsXCJjcmltZV9tb25leVwiOjEuODgzMzQ4NDIwMTE1MzU1NCxcImNyaW1lX3N1Y2Nlc3NcIjoyLjE0MDE2ODY1OTIyMTk5NDQsXCJoYWNrbmV0X25vZGVfbW9uZXlcIjo0LjAwNjgzMzgxMjI4MTQ2NTUsXCJoYWNrbmV0X25vZGVfcHVyY2hhc2VfY29zdFwiOjAuNDgxNTI0ODcyOTQ0NTE2NDYsXCJoYWNrbmV0X25vZGVfcmFtX2Nvc3RcIjowLjYyOTQ0NDI3ODM1ODg0NDksXCJoYWNrbmV0X25vZGVfY29yZV9jb3N0XCI6MC42Mjk0NDQyNzgzNTg4NDQ5LFwiaGFja25ldF9ub2RlX2xldmVsX2Nvc3RcIjowLjUzNTAyNzYzNjYwNTAxODIsXCJ3b3JrX21vbmV5XCI6My4xMDU0MTkwODAwMjY4OTYsXCJibGFkZWJ1cm5lcl9tYXhfc3RhbWluYVwiOjEsXCJibGFkZWJ1cm5lcl9zdGFtaW5hX2dhaW5cIjoxLFwiYmxhZGVidXJuZXJfYW5hbHlzaXNcIjoxLFwiYmxhZGVidXJuZXJfc3VjY2Vzc19jaGFuY2VcIjoxfSxcImF1Z21lbnRhdGlvbnNcIjpbe1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIE5JQyBBcmNoaXRlY3R1cmUgTmV1cmFsLVVwbG9hZFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgQ29yZSBEaXJlY3QtTmV1cmFsIEludGVyZmFjZVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJIYWNrbmV0IE5vZGUgS2VybmVsIERpcmVjdC1OZXVyYWwgSW50ZXJmYWNlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkhhY2tuZXQgTm9kZSBDUFUgQXJjaGl0ZWN0dXJlIE5ldXJhbC1VcGxvYWRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSGFja25ldCBOb2RlIENhY2hlIEFyY2hpdGVjdHVyZSBOZXVyYWwtVXBsb2FkXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvdHJhaW5lciBJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDYXNoUm9vdCBTdGFydGVyIEtpdFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJCaXRXaXJlXCJ9LHtcImxldmVsXCI6MzEsXCJuYW1lXCI6XCJOZXVyb0ZsdXggR292ZXJub3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiTmV1cmFsLVJldGVudGlvbiBFbmhhbmNlbWVudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ3JhbmlhbCBTaWduYWwgUHJvY2Vzc29ycyAtIEdlbiBJSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJFbWJlZGRlZCBOZXRidXJuZXIgTW9kdWxlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkFydGlmaWNpYWwgU3luYXB0aWMgUG90ZW50aWF0aW9uXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkRhdGFKYWNrXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNyYW5pYWwgU2lnbmFsIFByb2Nlc3NvcnMgLSBHZW4gSUlJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkNSVFg0Mi1BQSBHZW5lIE1vZGlmaWNhdGlvblwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJTeW5hcHRpYyBFbmhhbmNlbWVudCBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJvdHJhaW5lciBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGUgQ29yZSBJbXBsYW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk5ldXJhbHN0aW11bGF0b3JcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiRW5oYW5jZWQgTXllbGluIFNoZWF0aGluZ1wifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDcmFuaWFsIFNpZ25hbCBQcm9jZXNzb3JzIC0gR2VuIElWXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlRoZSBCbGFjayBIYW5kXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlBDTWF0cml4XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIlNwZWVjaCBQcm9jZXNzb3IgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJXaXJlZCBSZWZsZXhlc1wifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyb3JlY2VwdG9yIE1hbmFnZW1lbnQgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOZXVyZWdlbiBHZW5lIE1vZGlmaWNhdGlvblwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJOYW5vZmliZXIgV2VhdmVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU29jaWFsIE5lZ290aWF0aW9uIEFzc2lzdGFudCAoUy5OLkEpXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk51b3B0aW1hbCBOb290cm9waWMgSW5qZWN0b3IgSW1wbGFudFwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBRFItVjEgUGhlcm9tb25lIEdlbmVcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiU3BlZWNoIEVuaGFuY2VtZW50XCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIk51dHJpR2VuIEltcGxhbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiSU5GUkFSRVQgRW5oYW5jZW1lbnRcIn0se1wibGV2ZWxcIjoxLFwibmFtZVwiOlwiQ29tYmF0IFJpYiBJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkF1Z21lbnRlZCBUYXJnZXRpbmcgSVwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJDb21iYXQgUmliIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkRlcm1hRm9yY2UgUGFydGljbGUgQmFycmllclwifSx7XCJsZXZlbFwiOjEsXCJuYW1lXCI6XCJBdWdtZW50ZWQgVGFyZ2V0aW5nIElJXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVcIjpcIkVtYmVkZGVkIE5ldGJ1cm5lciBNb2R1bGUgQ29yZSBWMiBVcGdyYWRlXCJ9LHtcImxldmVsXCI6MSxcIm5hbWVLine truncated
+1 -3
View File
@@ -26,8 +26,6 @@ export async function main(ns) {
while (maxMoney != 0) { while (maxMoney != 0) {
let currentMoney = ns.getServerMoneyAvailable(server); let currentMoney = ns.getServerMoneyAvailable(server);
let currentSecurity = ns.getServerSecurityLevel(server); let currentSecurity = ns.getServerSecurityLevel(server);
ns.print(`Money: ${currentMoney} / ${maxMoney}`);
ns.print(`Security: ${currentSecurity} / ${minSecurity}`);
let hackedMoney = 0; let hackedMoney = 0;
if (currentMoney > 0.1 * maxMoney) { if (currentMoney > 0.1 * maxMoney) {
@@ -48,7 +46,7 @@ export async function main(ns) {
currentSecurity = ns.getServerSecurityLevel(server); currentSecurity = ns.getServerSecurityLevel(server);
} }
await writeLog('LOG', `{server: '${server}', 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)}}`); ns.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)}}`);
await ns.sleep(50); await ns.sleep(50);
} }
} }
+16 -2
View File
@@ -2,9 +2,23 @@
export async function main(ns) { export async function main(ns) {
ns.disableLog('ALL'); ns.disableLog('ALL');
let script = 'grow-helper.js';
let serverMaxRam = ns.getServerMaxRam(`home`);
let serverUsedRam = ns.getServerUsedRam(`home`);
let serverFreeRam = serverMaxRam - serverUsedRam;
let scriptRam = ns.getScriptRam(script, `home`);
let maxThreads = Math.floor(serverFreeRam / scriptRam);
if (maxThreads > 0) ns.exec(script, `home`, maxThreads);
for (let server = 0; ns.serverExists(`home-${server}`); server++) { for (let server = 0; ns.serverExists(`home-${server}`); server++) {
ns.scp('grow-helper.js', `home-${server}`, 'home'); let serverMaxRam = ns.getServerMaxRam(`home-${server}`);
ns.exec('grow-helper.js', `home-${server}`, 10); let serverUsedRam = ns.getServerUsedRam(`home-${server}`);
let serverFreeRam = serverMaxRam - serverUsedRam;
let scriptRam = ns.getScriptRam(script, `home-${server}`);
let maxThreads = Math.floor(serverFreeRam / scriptRam);
ns.scp(script, `home-${server}`, 'home');
ns.exec(script, `home-${server}`, maxThreads);
} }
} }
+75
View File
@@ -0,0 +1,75 @@
/** @param {import(".").NS } ns */
const doc = eval('document');
export async function main(ns) {
// ns.disableLog('ALL');
// const terminalInput = doc.getElementById("terminal-input");
// const handler = Object.keys(terminalInput)[1];
// terminalInput.value = "COMMAND";
// terminalInput[handler].onChange({ target: terminalInput });
// terminalInput[handler].onKeyDown({ key: 'Enter', preventDefault: () => null });
// const terminalButton = doc.querySelector();
let terminal;
let city;
let travel;
for (const elem of doc.querySelectorAll('div.MuiDrawer-root.MuiDrawer-docked p')) {
if (elem.textContent == 'Terminal') {
terminal = elem;
}
if (elem.textContent == 'City') {
city = elem;
}
if (elem.textContent == 'Travel') {
travel = elem;
}
}
travel.click(); await ns.sleep(100);
for (const aevum of doc.querySelectorAll('div#root span')) {
if (aevum.textContent == 'A') {
aevum.click(); await ns.sleep(100);
break;
}
}
for (const travelConfirm of doc.querySelectorAll('div[role="presentation"] p')) {
if (travelConfirm.textContent == 'Travel') {
travelConfirm.click(); await ns.sleep(100);
break;
}
}
const closeButton = doc.querySelector('div[role="presentation"] button');
if(!closeButton == undefined) closeButton.click();
city.click(); await ns.sleep(100);
for (const uni of doc.querySelectorAll('div#root span')) {
if (uni.textContent == 'U') {
uni.click(); await ns.sleep(100);
break;
}
}
for (const course of doc.querySelectorAll('div#root button')) {
if (course.textContent == 'Take Algorithms course ($-1.280k / sec)') {
course.click(); await ns.sleep(100);
break;
}
}
for (const closeCourse of doc.querySelectorAll('div#root button')) {
if (closeCourse.textContent == 'Do something else simultaneously') {
closeCourse.click(); await ns.sleep(100);
break;
}
}
await ns.sleep(1000);
console.log(terminal)
terminal.click(); await ns.sleep(100);
}
+1 -5
View File
@@ -3,9 +3,5 @@
export async function main(ns) { export async function main(ns) {
// ns.disableLog('ALL'); // ns.disableLog('ALL');
let target; await ns.weaken(ns.args.length > 0 ? ns.args[0] : '')
if(ns.args.length == 1) {
target = JSON.parse(ns.args[0]);
}
} }