@pensar/apex 0.0.29 → 0.0.31-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/pensar.js +11 -14
- package/build/benchmark.js +293 -159
- package/build/index.js +311 -275
- package/build/pentest.js +293 -159
- package/build/quicktest.js +240 -4
- package/build/swarm.js +240 -4
- package/package.json +8 -1
package/build/index.js
CHANGED
|
@@ -27102,82 +27102,10 @@ async function render(node, rendererConfig = {}) {
|
|
|
27102
27102
|
_render(import_react7.default.createElement(AppContext.Provider, { value: { keyHandler: renderer.keyInput, renderer } }, import_react7.default.createElement(ErrorBoundary, null, node)), renderer.root);
|
|
27103
27103
|
}
|
|
27104
27104
|
|
|
27105
|
-
// src/tui/components/ascii-art.tsx
|
|
27106
|
-
import sharp from "sharp";
|
|
27107
|
-
|
|
27108
27105
|
// node_modules/@opentui/react/jsx-dev-runtime.js
|
|
27109
27106
|
var import_jsx_dev_runtime2 = __toESM(require_jsx_dev_runtime(), 1);
|
|
27110
27107
|
|
|
27111
|
-
// src/tui/components/ascii-art.tsx
|
|
27112
|
-
var ASCII_SETS = {
|
|
27113
|
-
simple: " .:-=+*#%@",
|
|
27114
|
-
detailed: " .'`^\",:;Il!i><~+_-?][}{1)(|\\/tfjrxnuvczXYUJCLQ0OZmwqpdbkhao*#MW&8%B@$",
|
|
27115
|
-
medium: " .,:;i1tfLCG08@",
|
|
27116
|
-
blocks: " ░▒▓█",
|
|
27117
|
-
default: " .:-=+*#%@"
|
|
27118
|
-
};
|
|
27119
|
-
var ASCII_CHARS = ASCII_SETS.medium;
|
|
27120
|
-
async function convertImageToColoredAscii(path2, scale = 1, maxWidth, aspectRatio = 0.5, invert = false) {
|
|
27121
|
-
const metadata = await sharp(path2, { density: 300 }).metadata();
|
|
27122
|
-
const originalWidth = metadata.width ?? 100;
|
|
27123
|
-
const originalHeight = metadata.height ?? 100;
|
|
27124
|
-
let scaledWidth = Math.round(originalWidth * scale);
|
|
27125
|
-
let scaledHeight = Math.round(originalHeight * scale);
|
|
27126
|
-
scaledHeight = Math.round(scaledHeight * aspectRatio);
|
|
27127
|
-
if (maxWidth && scaledWidth > maxWidth) {
|
|
27128
|
-
const ratio = maxWidth / scaledWidth;
|
|
27129
|
-
scaledWidth = maxWidth;
|
|
27130
|
-
scaledHeight = Math.round(scaledHeight * ratio);
|
|
27131
|
-
}
|
|
27132
|
-
const resizeOptions = {
|
|
27133
|
-
width: scaledWidth,
|
|
27134
|
-
height: scaledHeight,
|
|
27135
|
-
fit: "fill",
|
|
27136
|
-
kernel: "lanczos3",
|
|
27137
|
-
background: { r: 0, g: 0, b: 0, alpha: 0 }
|
|
27138
|
-
};
|
|
27139
|
-
const colorBuffer = await sharp(path2, { density: 300 }).resize(resizeOptions).ensureAlpha().raw().toBuffer({ resolveWithObject: true });
|
|
27140
|
-
const grayscaleBuffer = await sharp(colorBuffer.data, {
|
|
27141
|
-
raw: {
|
|
27142
|
-
width: colorBuffer.info.width,
|
|
27143
|
-
height: colorBuffer.info.height,
|
|
27144
|
-
channels: 4,
|
|
27145
|
-
premultiplied: false
|
|
27146
|
-
}
|
|
27147
|
-
}).grayscale().raw().toBuffer({ resolveWithObject: true });
|
|
27148
|
-
const { width: w, height: h2 } = grayscaleBuffer.info;
|
|
27149
|
-
const result = [];
|
|
27150
|
-
for (let y = 0;y < h2; y++) {
|
|
27151
|
-
const row = [];
|
|
27152
|
-
for (let x = 0;x < w; x++) {
|
|
27153
|
-
const grayIdx = y * w + x;
|
|
27154
|
-
const colorIdx = (y * w + x) * 4;
|
|
27155
|
-
const alpha = colorBuffer.data[colorIdx + 3] ?? 0;
|
|
27156
|
-
if (alpha < 128) {
|
|
27157
|
-
row.push({
|
|
27158
|
-
char: " ",
|
|
27159
|
-
r: 0,
|
|
27160
|
-
g: 0,
|
|
27161
|
-
b: 0
|
|
27162
|
-
});
|
|
27163
|
-
continue;
|
|
27164
|
-
}
|
|
27165
|
-
let brightness = grayscaleBuffer.data[grayIdx] ?? 0;
|
|
27166
|
-
if (invert) {
|
|
27167
|
-
brightness = 255 - brightness;
|
|
27168
|
-
}
|
|
27169
|
-
const charIndex = Math.floor(brightness / 255 * (ASCII_CHARS.length - 1));
|
|
27170
|
-
row.push({
|
|
27171
|
-
char: ASCII_CHARS[charIndex] ?? " ",
|
|
27172
|
-
r: colorBuffer.data[colorIdx] ?? 0,
|
|
27173
|
-
g: colorBuffer.data[colorIdx + 1] ?? 0,
|
|
27174
|
-
b: colorBuffer.data[colorIdx + 2] ?? 0
|
|
27175
|
-
});
|
|
27176
|
-
}
|
|
27177
|
-
result.push(row);
|
|
27178
|
-
}
|
|
27179
|
-
return result;
|
|
27180
|
-
}
|
|
27108
|
+
// src/tui/components/ascii-art-component.tsx
|
|
27181
27109
|
function ColoredAsciiArt({ ascii, title }) {
|
|
27182
27110
|
return /* @__PURE__ */ import_jsx_dev_runtime2.jsxDEV("box", {
|
|
27183
27111
|
position: "absolute",
|
|
@@ -64848,6 +64776,21 @@ function createSummarizationStream(messages, opts, model) {
|
|
|
64848
64776
|
}
|
|
64849
64777
|
};
|
|
64850
64778
|
}
|
|
64779
|
+
async function consumeStream2(stream, {
|
|
64780
|
+
onTextDelta,
|
|
64781
|
+
onToolCall,
|
|
64782
|
+
onToolResult
|
|
64783
|
+
}) {
|
|
64784
|
+
for await (const delta of stream.fullStream) {
|
|
64785
|
+
if (delta.type === "text-delta") {
|
|
64786
|
+
onTextDelta?.(delta);
|
|
64787
|
+
} else if (delta.type === "tool-call") {
|
|
64788
|
+
onToolCall?.(delta);
|
|
64789
|
+
} else if (delta.type === "tool-result") {
|
|
64790
|
+
onToolResult?.(delta);
|
|
64791
|
+
}
|
|
64792
|
+
}
|
|
64793
|
+
}
|
|
64851
64794
|
|
|
64852
64795
|
// src/core/ai/ai.ts
|
|
64853
64796
|
function wrapStreamWithErrorHandler(originalStream, messagesContainer, opts, model, silent) {
|
|
@@ -64911,7 +64854,8 @@ function streamResponse(opts) {
|
|
|
64911
64854
|
abortSignal,
|
|
64912
64855
|
activeTools,
|
|
64913
64856
|
silent,
|
|
64914
|
-
authConfig
|
|
64857
|
+
authConfig,
|
|
64858
|
+
onFinish
|
|
64915
64859
|
} = opts;
|
|
64916
64860
|
const messagesContainer = { current: messages || [] };
|
|
64917
64861
|
const providerModel = getProviderModel(model, authConfig);
|
|
@@ -64966,7 +64910,8 @@ function streamResponse(opts) {
|
|
|
64966
64910
|
}
|
|
64967
64911
|
throw repairError;
|
|
64968
64912
|
}
|
|
64969
|
-
}
|
|
64913
|
+
},
|
|
64914
|
+
onFinish
|
|
64970
64915
|
});
|
|
64971
64916
|
return wrapStreamWithErrorHandler(response, messagesContainer, opts, providerModel, silent);
|
|
64972
64917
|
} catch (error46) {
|
|
@@ -70040,6 +69985,243 @@ Begin your analysis now.
|
|
|
70040
69985
|
};
|
|
70041
69986
|
}
|
|
70042
69987
|
|
|
69988
|
+
// src/core/messages/index.ts
|
|
69989
|
+
import fs3 from "fs";
|
|
69990
|
+
|
|
69991
|
+
// src/core/messages/types.ts
|
|
69992
|
+
var ToolMessageObject = exports_external.object({
|
|
69993
|
+
role: exports_external.literal("tool"),
|
|
69994
|
+
status: exports_external.enum(["pending", "completed"]),
|
|
69995
|
+
toolCallId: exports_external.string(),
|
|
69996
|
+
content: exports_external.string(),
|
|
69997
|
+
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
69998
|
+
toolName: exports_external.string(),
|
|
69999
|
+
createdAt: exports_external.coerce.date()
|
|
70000
|
+
});
|
|
70001
|
+
var SystemModelMessageObject = exports_external.object({
|
|
70002
|
+
role: exports_external.literal("system"),
|
|
70003
|
+
content: exports_external.string(),
|
|
70004
|
+
createdAt: exports_external.coerce.date(),
|
|
70005
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70006
|
+
});
|
|
70007
|
+
var TextPartObject = exports_external.object({
|
|
70008
|
+
type: exports_external.literal("text"),
|
|
70009
|
+
text: exports_external.string(),
|
|
70010
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70011
|
+
});
|
|
70012
|
+
var FilePartObject = exports_external.object({
|
|
70013
|
+
type: exports_external.literal("file"),
|
|
70014
|
+
data: exports_external.union([
|
|
70015
|
+
exports_external.string(),
|
|
70016
|
+
exports_external.instanceof(Uint8Array),
|
|
70017
|
+
exports_external.instanceof(ArrayBuffer),
|
|
70018
|
+
exports_external.instanceof(Buffer),
|
|
70019
|
+
exports_external.url()
|
|
70020
|
+
]),
|
|
70021
|
+
filename: exports_external.string().optional(),
|
|
70022
|
+
mediaType: exports_external.string(),
|
|
70023
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70024
|
+
});
|
|
70025
|
+
var ReasoningPartObject = exports_external.object({
|
|
70026
|
+
type: exports_external.literal("reasoning"),
|
|
70027
|
+
text: exports_external.string(),
|
|
70028
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70029
|
+
});
|
|
70030
|
+
var ToolCallPartObject = exports_external.object({
|
|
70031
|
+
type: exports_external.literal("tool-call"),
|
|
70032
|
+
toolCallId: exports_external.string(),
|
|
70033
|
+
toolName: exports_external.string(),
|
|
70034
|
+
input: exports_external.unknown(),
|
|
70035
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
70036
|
+
providerExecuted: exports_external.boolean().optional()
|
|
70037
|
+
});
|
|
70038
|
+
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
70039
|
+
exports_external.object({
|
|
70040
|
+
type: exports_external.literal("text"),
|
|
70041
|
+
value: exports_external.string()
|
|
70042
|
+
}),
|
|
70043
|
+
exports_external.object({
|
|
70044
|
+
type: exports_external.literal("json"),
|
|
70045
|
+
value: exports_external.any()
|
|
70046
|
+
}),
|
|
70047
|
+
exports_external.object({
|
|
70048
|
+
type: exports_external.literal("error-text"),
|
|
70049
|
+
value: exports_external.string()
|
|
70050
|
+
}),
|
|
70051
|
+
exports_external.object({
|
|
70052
|
+
type: exports_external.literal("error-json"),
|
|
70053
|
+
value: exports_external.any()
|
|
70054
|
+
}),
|
|
70055
|
+
exports_external.object({
|
|
70056
|
+
type: exports_external.literal("content"),
|
|
70057
|
+
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
70058
|
+
exports_external.object({
|
|
70059
|
+
type: exports_external.literal("text"),
|
|
70060
|
+
text: exports_external.string()
|
|
70061
|
+
}),
|
|
70062
|
+
exports_external.object({
|
|
70063
|
+
type: exports_external.literal("media"),
|
|
70064
|
+
data: exports_external.string(),
|
|
70065
|
+
mediaType: exports_external.string()
|
|
70066
|
+
})
|
|
70067
|
+
]))
|
|
70068
|
+
})
|
|
70069
|
+
]);
|
|
70070
|
+
var ToolResultPartObject = exports_external.object({
|
|
70071
|
+
type: exports_external.literal("tool-result"),
|
|
70072
|
+
toolCallId: exports_external.string(),
|
|
70073
|
+
toolName: exports_external.string(),
|
|
70074
|
+
output: ToolResultOutputObject,
|
|
70075
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70076
|
+
});
|
|
70077
|
+
var AssistantModelMessageObject = exports_external.object({
|
|
70078
|
+
role: exports_external.literal("assistant"),
|
|
70079
|
+
content: exports_external.union([
|
|
70080
|
+
exports_external.string(),
|
|
70081
|
+
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
70082
|
+
TextPartObject,
|
|
70083
|
+
FilePartObject,
|
|
70084
|
+
ReasoningPartObject,
|
|
70085
|
+
ToolCallPartObject,
|
|
70086
|
+
ToolResultPartObject
|
|
70087
|
+
]))
|
|
70088
|
+
]),
|
|
70089
|
+
createdAt: exports_external.coerce.date(),
|
|
70090
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70091
|
+
});
|
|
70092
|
+
var UserModelMessageObject = exports_external.object({
|
|
70093
|
+
role: exports_external.literal("user"),
|
|
70094
|
+
content: exports_external.union([
|
|
70095
|
+
exports_external.string(),
|
|
70096
|
+
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
70097
|
+
]),
|
|
70098
|
+
createdAt: exports_external.coerce.date(),
|
|
70099
|
+
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
70100
|
+
});
|
|
70101
|
+
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
70102
|
+
SystemModelMessageObject,
|
|
70103
|
+
UserModelMessageObject,
|
|
70104
|
+
AssistantModelMessageObject,
|
|
70105
|
+
ToolMessageObject
|
|
70106
|
+
]);
|
|
70107
|
+
|
|
70108
|
+
// src/core/messages/index.ts
|
|
70109
|
+
function getMessages(session) {
|
|
70110
|
+
const messages = fs3.readFileSync(session.rootPath + "/messages.json", "utf8");
|
|
70111
|
+
return ModelMessageObject.array().parse(JSON.parse(messages));
|
|
70112
|
+
}
|
|
70113
|
+
function saveMessages(session, messages) {
|
|
70114
|
+
fs3.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
|
|
70115
|
+
}
|
|
70116
|
+
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
70117
|
+
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
70118
|
+
if (!fs3.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
70119
|
+
fs3.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
70120
|
+
recursive: true
|
|
70121
|
+
});
|
|
70122
|
+
}
|
|
70123
|
+
if (!fs3.existsSync(subagentDir)) {
|
|
70124
|
+
fs3.mkdirSync(subagentDir, { recursive: true });
|
|
70125
|
+
}
|
|
70126
|
+
fs3.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
70127
|
+
}
|
|
70128
|
+
function mapMessages(messages) {
|
|
70129
|
+
const result = [];
|
|
70130
|
+
const toolResults = new Map;
|
|
70131
|
+
for (const message of messages) {
|
|
70132
|
+
if (message.role === "tool") {
|
|
70133
|
+
const content = message.content;
|
|
70134
|
+
if (Array.isArray(content)) {
|
|
70135
|
+
for (const part of content) {
|
|
70136
|
+
if (part.type === "tool-result") {
|
|
70137
|
+
toolResults.set(part.toolCallId, part.output);
|
|
70138
|
+
}
|
|
70139
|
+
}
|
|
70140
|
+
}
|
|
70141
|
+
}
|
|
70142
|
+
}
|
|
70143
|
+
for (const message of messages) {
|
|
70144
|
+
if (message.role === "system") {
|
|
70145
|
+
result.push({
|
|
70146
|
+
role: "system",
|
|
70147
|
+
content: message.content,
|
|
70148
|
+
createdAt: new Date,
|
|
70149
|
+
...message.providerOptions && {
|
|
70150
|
+
providerOptions: message.providerOptions
|
|
70151
|
+
}
|
|
70152
|
+
});
|
|
70153
|
+
continue;
|
|
70154
|
+
}
|
|
70155
|
+
if (message.role === "user") {
|
|
70156
|
+
const content = typeof message.content === "string" ? message.content : message.content.map((part) => part.type === "text" ? part.text : "").join("");
|
|
70157
|
+
result.push({
|
|
70158
|
+
role: "user",
|
|
70159
|
+
content,
|
|
70160
|
+
createdAt: new Date,
|
|
70161
|
+
...message.providerOptions && {
|
|
70162
|
+
providerOptions: message.providerOptions
|
|
70163
|
+
}
|
|
70164
|
+
});
|
|
70165
|
+
continue;
|
|
70166
|
+
}
|
|
70167
|
+
if (message.role === "tool") {
|
|
70168
|
+
continue;
|
|
70169
|
+
}
|
|
70170
|
+
if (message.role === "assistant") {
|
|
70171
|
+
const content = message.content;
|
|
70172
|
+
if (typeof content === "string") {
|
|
70173
|
+
result.push({
|
|
70174
|
+
role: "assistant",
|
|
70175
|
+
content,
|
|
70176
|
+
createdAt: new Date,
|
|
70177
|
+
...message.providerOptions && {
|
|
70178
|
+
providerOptions: message.providerOptions
|
|
70179
|
+
}
|
|
70180
|
+
});
|
|
70181
|
+
continue;
|
|
70182
|
+
}
|
|
70183
|
+
const textParts = [];
|
|
70184
|
+
const toolCalls = [];
|
|
70185
|
+
for (const part of content) {
|
|
70186
|
+
if (part.type === "text") {
|
|
70187
|
+
textParts.push(part.text);
|
|
70188
|
+
} else if (part.type === "tool-call") {
|
|
70189
|
+
toolCalls.push({
|
|
70190
|
+
toolCallId: part.toolCallId,
|
|
70191
|
+
toolName: part.toolName,
|
|
70192
|
+
input: part.input
|
|
70193
|
+
});
|
|
70194
|
+
}
|
|
70195
|
+
}
|
|
70196
|
+
if (textParts.length > 0) {
|
|
70197
|
+
result.push({
|
|
70198
|
+
role: "assistant",
|
|
70199
|
+
content: textParts.join(""),
|
|
70200
|
+
createdAt: new Date,
|
|
70201
|
+
...message.providerOptions && {
|
|
70202
|
+
providerOptions: message.providerOptions
|
|
70203
|
+
}
|
|
70204
|
+
});
|
|
70205
|
+
}
|
|
70206
|
+
for (const toolCall of toolCalls) {
|
|
70207
|
+
const input = toolCall.input;
|
|
70208
|
+
const toolCallDescription = input?.toolCallDescription || `Executing ${toolCall.toolName}`;
|
|
70209
|
+
const hasResult = toolResults.has(toolCall.toolCallId);
|
|
70210
|
+
result.push({
|
|
70211
|
+
role: "tool",
|
|
70212
|
+
status: hasResult ? "completed" : "pending",
|
|
70213
|
+
toolCallId: toolCall.toolCallId,
|
|
70214
|
+
content: hasResult ? `✓ ${toolCallDescription}` : toolCallDescription,
|
|
70215
|
+
args: input || {},
|
|
70216
|
+
toolName: toolCall.toolName,
|
|
70217
|
+
createdAt: new Date
|
|
70218
|
+
});
|
|
70219
|
+
}
|
|
70220
|
+
}
|
|
70221
|
+
}
|
|
70222
|
+
return result;
|
|
70223
|
+
}
|
|
70224
|
+
|
|
70043
70225
|
// src/core/agent/pentestAgent/agent.ts
|
|
70044
70226
|
var execAsync3 = promisify3(exec3);
|
|
70045
70227
|
function runAgent(opts) {
|
|
@@ -70056,6 +70238,7 @@ function runAgent(opts) {
|
|
|
70056
70238
|
sessionConfig
|
|
70057
70239
|
} = opts;
|
|
70058
70240
|
const session = opts.session || createSession(target, objective, undefined, sessionConfig);
|
|
70241
|
+
const subagentId = `pentest-${nanoid3(6)}`;
|
|
70059
70242
|
const pocsPath = join4(session.rootPath, "pocs");
|
|
70060
70243
|
if (!existsSync9(pocsPath)) {
|
|
70061
70244
|
mkdirSync4(pocsPath, { recursive: true });
|
|
@@ -70211,10 +70394,13 @@ You are only authorized to perform testing against the specific target endpoint
|
|
|
70211
70394
|
onStepFinish,
|
|
70212
70395
|
abortSignal,
|
|
70213
70396
|
silent,
|
|
70214
|
-
authConfig
|
|
70397
|
+
authConfig,
|
|
70398
|
+
onFinish: ({ response }) => {
|
|
70399
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
70400
|
+
}
|
|
70215
70401
|
});
|
|
70216
70402
|
streamResult.session = session;
|
|
70217
|
-
return { streamResult, session };
|
|
70403
|
+
return { streamResult, session, subagentId };
|
|
70218
70404
|
}
|
|
70219
70405
|
|
|
70220
70406
|
// src/tui/components/agent-display.tsx
|
|
@@ -71459,13 +71645,13 @@ var Qt = b.parse;
|
|
|
71459
71645
|
var Ut = x.lex;
|
|
71460
71646
|
|
|
71461
71647
|
// src/tui/components/agent-display.tsx
|
|
71462
|
-
import
|
|
71648
|
+
import fs4 from "fs";
|
|
71463
71649
|
var LOG_FILE = "/tmp/apex-debug.log";
|
|
71464
71650
|
function logToFile(message, data) {
|
|
71465
71651
|
const timestamp = new Date().toISOString();
|
|
71466
71652
|
const logLine = `[${timestamp}] ${message} ${data ? JSON.stringify(data, null, 2) : ""}
|
|
71467
71653
|
`;
|
|
71468
|
-
|
|
71654
|
+
fs4.appendFileSync(LOG_FILE, logLine);
|
|
71469
71655
|
}
|
|
71470
71656
|
function getStableKey(item, contextId = "root") {
|
|
71471
71657
|
if ("messages" in item) {
|
|
@@ -71808,149 +71994,6 @@ function ToolArgs({ message }) {
|
|
|
71808
71994
|
|
|
71809
71995
|
// src/tui/components/commands/pentest-agent-display.tsx
|
|
71810
71996
|
import fs5 from "fs";
|
|
71811
|
-
|
|
71812
|
-
// src/core/messages/index.ts
|
|
71813
|
-
import fs4 from "fs";
|
|
71814
|
-
|
|
71815
|
-
// src/core/messages/types.ts
|
|
71816
|
-
var ToolMessageObject = exports_external.object({
|
|
71817
|
-
role: exports_external.literal("tool"),
|
|
71818
|
-
status: exports_external.enum(["pending", "completed"]),
|
|
71819
|
-
toolCallId: exports_external.string(),
|
|
71820
|
-
content: exports_external.string(),
|
|
71821
|
-
args: exports_external.record(exports_external.string(), exports_external.any()),
|
|
71822
|
-
toolName: exports_external.string(),
|
|
71823
|
-
createdAt: exports_external.coerce.date()
|
|
71824
|
-
});
|
|
71825
|
-
var SystemModelMessageObject = exports_external.object({
|
|
71826
|
-
role: exports_external.literal("system"),
|
|
71827
|
-
content: exports_external.string(),
|
|
71828
|
-
createdAt: exports_external.coerce.date(),
|
|
71829
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71830
|
-
});
|
|
71831
|
-
var TextPartObject = exports_external.object({
|
|
71832
|
-
type: exports_external.literal("text"),
|
|
71833
|
-
text: exports_external.string(),
|
|
71834
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71835
|
-
});
|
|
71836
|
-
var FilePartObject = exports_external.object({
|
|
71837
|
-
type: exports_external.literal("file"),
|
|
71838
|
-
data: exports_external.union([
|
|
71839
|
-
exports_external.string(),
|
|
71840
|
-
exports_external.instanceof(Uint8Array),
|
|
71841
|
-
exports_external.instanceof(ArrayBuffer),
|
|
71842
|
-
exports_external.instanceof(Buffer),
|
|
71843
|
-
exports_external.url()
|
|
71844
|
-
]),
|
|
71845
|
-
filename: exports_external.string().optional(),
|
|
71846
|
-
mediaType: exports_external.string(),
|
|
71847
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71848
|
-
});
|
|
71849
|
-
var ReasoningPartObject = exports_external.object({
|
|
71850
|
-
type: exports_external.literal("reasoning"),
|
|
71851
|
-
text: exports_external.string(),
|
|
71852
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71853
|
-
});
|
|
71854
|
-
var ToolCallPartObject = exports_external.object({
|
|
71855
|
-
type: exports_external.literal("tool-call"),
|
|
71856
|
-
toolCallId: exports_external.string(),
|
|
71857
|
-
toolName: exports_external.string(),
|
|
71858
|
-
input: exports_external.unknown(),
|
|
71859
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional(),
|
|
71860
|
-
providerExecuted: exports_external.boolean().optional()
|
|
71861
|
-
});
|
|
71862
|
-
var ToolResultOutputObject = exports_external.discriminatedUnion("type", [
|
|
71863
|
-
exports_external.object({
|
|
71864
|
-
type: exports_external.literal("text"),
|
|
71865
|
-
value: exports_external.string()
|
|
71866
|
-
}),
|
|
71867
|
-
exports_external.object({
|
|
71868
|
-
type: exports_external.literal("json"),
|
|
71869
|
-
value: exports_external.any()
|
|
71870
|
-
}),
|
|
71871
|
-
exports_external.object({
|
|
71872
|
-
type: exports_external.literal("error-text"),
|
|
71873
|
-
value: exports_external.string()
|
|
71874
|
-
}),
|
|
71875
|
-
exports_external.object({
|
|
71876
|
-
type: exports_external.literal("error-json"),
|
|
71877
|
-
value: exports_external.any()
|
|
71878
|
-
}),
|
|
71879
|
-
exports_external.object({
|
|
71880
|
-
type: exports_external.literal("content"),
|
|
71881
|
-
value: exports_external.array(exports_external.discriminatedUnion("type", [
|
|
71882
|
-
exports_external.object({
|
|
71883
|
-
type: exports_external.literal("text"),
|
|
71884
|
-
text: exports_external.string()
|
|
71885
|
-
}),
|
|
71886
|
-
exports_external.object({
|
|
71887
|
-
type: exports_external.literal("media"),
|
|
71888
|
-
data: exports_external.string(),
|
|
71889
|
-
mediaType: exports_external.string()
|
|
71890
|
-
})
|
|
71891
|
-
]))
|
|
71892
|
-
})
|
|
71893
|
-
]);
|
|
71894
|
-
var ToolResultPartObject = exports_external.object({
|
|
71895
|
-
type: exports_external.literal("tool-result"),
|
|
71896
|
-
toolCallId: exports_external.string(),
|
|
71897
|
-
toolName: exports_external.string(),
|
|
71898
|
-
output: ToolResultOutputObject,
|
|
71899
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71900
|
-
});
|
|
71901
|
-
var AssistantModelMessageObject = exports_external.object({
|
|
71902
|
-
role: exports_external.literal("assistant"),
|
|
71903
|
-
content: exports_external.union([
|
|
71904
|
-
exports_external.string(),
|
|
71905
|
-
exports_external.array(exports_external.discriminatedUnion("type", [
|
|
71906
|
-
TextPartObject,
|
|
71907
|
-
FilePartObject,
|
|
71908
|
-
ReasoningPartObject,
|
|
71909
|
-
ToolCallPartObject,
|
|
71910
|
-
ToolResultPartObject
|
|
71911
|
-
]))
|
|
71912
|
-
]),
|
|
71913
|
-
createdAt: exports_external.coerce.date(),
|
|
71914
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71915
|
-
});
|
|
71916
|
-
var UserModelMessageObject = exports_external.object({
|
|
71917
|
-
role: exports_external.literal("user"),
|
|
71918
|
-
content: exports_external.union([
|
|
71919
|
-
exports_external.string(),
|
|
71920
|
-
exports_external.array(exports_external.discriminatedUnion("type", [TextPartObject, FilePartObject]))
|
|
71921
|
-
]),
|
|
71922
|
-
createdAt: exports_external.coerce.date(),
|
|
71923
|
-
providerOptions: exports_external.record(exports_external.string(), exports_external.any()).optional()
|
|
71924
|
-
});
|
|
71925
|
-
var ModelMessageObject = exports_external.discriminatedUnion("role", [
|
|
71926
|
-
SystemModelMessageObject,
|
|
71927
|
-
UserModelMessageObject,
|
|
71928
|
-
AssistantModelMessageObject,
|
|
71929
|
-
ToolMessageObject
|
|
71930
|
-
]);
|
|
71931
|
-
|
|
71932
|
-
// src/core/messages/index.ts
|
|
71933
|
-
function getMessages(session) {
|
|
71934
|
-
const messages = fs4.readFileSync(session.rootPath + "/messages.json", "utf8");
|
|
71935
|
-
return ModelMessageObject.array().parse(JSON.parse(messages));
|
|
71936
|
-
}
|
|
71937
|
-
function saveMessages(session, messages) {
|
|
71938
|
-
fs4.writeFileSync(session.rootPath + "/messages.json", JSON.stringify(messages, null, 2));
|
|
71939
|
-
}
|
|
71940
|
-
function saveSubagentMessages(orchestratorSession, subagentId, messages) {
|
|
71941
|
-
const subagentDir = `${orchestratorSession.rootPath}/subagents/${subagentId}`;
|
|
71942
|
-
if (!fs4.existsSync(`${orchestratorSession.rootPath}/subagents`)) {
|
|
71943
|
-
fs4.mkdirSync(`${orchestratorSession.rootPath}/subagents`, {
|
|
71944
|
-
recursive: true
|
|
71945
|
-
});
|
|
71946
|
-
}
|
|
71947
|
-
if (!fs4.existsSync(subagentDir)) {
|
|
71948
|
-
fs4.mkdirSync(subagentDir, { recursive: true });
|
|
71949
|
-
}
|
|
71950
|
-
fs4.writeFileSync(`${subagentDir}/messages.json`, JSON.stringify(messages, null, 2));
|
|
71951
|
-
}
|
|
71952
|
-
|
|
71953
|
-
// src/tui/components/commands/pentest-agent-display.tsx
|
|
71954
71997
|
function PentestAgentDisplay() {
|
|
71955
71998
|
const [focusedIndex, setFocusedIndex] = import_react20.useState(0);
|
|
71956
71999
|
const [target, setTarget] = import_react20.useState("");
|
|
@@ -73152,7 +73195,14 @@ Remember: You are the orchestrator, not a testing agent. Your value is in strate
|
|
|
73152
73195
|
|
|
73153
73196
|
// src/core/agent/thoroughPentestAgent/agent.ts
|
|
73154
73197
|
import { join as join6 } from "path";
|
|
73155
|
-
import {
|
|
73198
|
+
import {
|
|
73199
|
+
readFileSync as readFileSync5,
|
|
73200
|
+
existsSync as existsSync11,
|
|
73201
|
+
writeFileSync as writeFileSync6,
|
|
73202
|
+
copyFileSync,
|
|
73203
|
+
readdirSync as readdirSync4,
|
|
73204
|
+
mkdirSync as mkdirSync6
|
|
73205
|
+
} from "fs";
|
|
73156
73206
|
|
|
73157
73207
|
// src/core/agent/attackSurfaceAgent/prompts.ts
|
|
73158
73208
|
var SYSTEM3 = `You are an expert attack surface analysis agent specializing in comprehensive reconnaissance and asset discovery. Your role is to AUTONOMOUSLY map the entire attack surface of a target and identify specific targets for deeper penetration testing.
|
|
@@ -74454,6 +74504,7 @@ import { writeFileSync as writeFileSync5, mkdirSync as mkdirSync5, existsSync as
|
|
|
74454
74504
|
function runAgent2(opts) {
|
|
74455
74505
|
const { target, model, onStepFinish, abortSignal } = opts;
|
|
74456
74506
|
const session = opts.session || createSession(target);
|
|
74507
|
+
const subagentId = `attack-surface-${nanoid3(6)}`;
|
|
74457
74508
|
console.log(`Created attack surface session: ${session.id}`);
|
|
74458
74509
|
console.log(`Session path: ${session.rootPath}`);
|
|
74459
74510
|
const assetsPath = join5(session.rootPath, "assets");
|
|
@@ -74600,10 +74651,13 @@ You MUST provide the details final report using create_attack_surface_report too
|
|
|
74600
74651
|
stopWhen: stepCountIs(1e4),
|
|
74601
74652
|
toolChoice: "auto",
|
|
74602
74653
|
onStepFinish,
|
|
74603
|
-
abortSignal
|
|
74654
|
+
abortSignal,
|
|
74655
|
+
onFinish: ({ response }) => {
|
|
74656
|
+
saveSubagentMessages(session, subagentId, mapMessages(response.messages));
|
|
74657
|
+
}
|
|
74604
74658
|
});
|
|
74605
74659
|
streamResult.session = session;
|
|
74606
|
-
return { streamResult, session };
|
|
74660
|
+
return { streamResult, session, subagentId };
|
|
74607
74661
|
}
|
|
74608
74662
|
|
|
74609
74663
|
// node_modules/yocto-queue/index.js
|
|
@@ -74788,7 +74842,10 @@ Begin by using the get_attack_surface tool to map the complete attack surface of
|
|
|
74788
74842
|
stopWhen: stepCountIs(1e4),
|
|
74789
74843
|
toolChoice: "auto",
|
|
74790
74844
|
onStepFinish,
|
|
74791
|
-
abortSignal
|
|
74845
|
+
abortSignal,
|
|
74846
|
+
onFinish: ({ response }) => {
|
|
74847
|
+
saveMessages(session, mapMessages(response.messages));
|
|
74848
|
+
}
|
|
74792
74849
|
});
|
|
74793
74850
|
streamResult.session = session;
|
|
74794
74851
|
return { streamResult, session };
|
|
@@ -74820,14 +74877,13 @@ Use this as the FIRST step in your thorough penetration test.`,
|
|
|
74820
74877
|
execute: async ({ target, objective }) => {
|
|
74821
74878
|
try {
|
|
74822
74879
|
logger?.log(`[Orchestrator] Spawning attack surface agent for: ${target}`);
|
|
74823
|
-
const { streamResult: result } = runAgent2({
|
|
74880
|
+
const { streamResult: result, subagentId } = runAgent2({
|
|
74824
74881
|
session,
|
|
74825
74882
|
target,
|
|
74826
74883
|
objective,
|
|
74827
74884
|
model,
|
|
74828
74885
|
abortSignal
|
|
74829
74886
|
});
|
|
74830
|
-
const subagentId = `attack-surface-${result.session.id}`;
|
|
74831
74887
|
const allMessages = [];
|
|
74832
74888
|
let currentAssistantText = "";
|
|
74833
74889
|
if (onSubagentSpawn) {
|
|
@@ -74852,8 +74908,8 @@ Objective: ${objective}`,
|
|
|
74852
74908
|
if (onSubagentMessage) {
|
|
74853
74909
|
onSubagentMessage(subagentId, initialMessage);
|
|
74854
74910
|
}
|
|
74855
|
-
|
|
74856
|
-
|
|
74911
|
+
await consumeStream2(result, {
|
|
74912
|
+
onTextDelta: (delta) => {
|
|
74857
74913
|
currentAssistantText += delta.text;
|
|
74858
74914
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
74859
74915
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -74876,7 +74932,8 @@ Objective: ${objective}`,
|
|
|
74876
74932
|
onSubagentMessage(subagentId, newMessage);
|
|
74877
74933
|
}
|
|
74878
74934
|
}
|
|
74879
|
-
}
|
|
74935
|
+
},
|
|
74936
|
+
onToolCall: (delta) => {
|
|
74880
74937
|
if (currentAssistantText) {
|
|
74881
74938
|
currentAssistantText = "";
|
|
74882
74939
|
}
|
|
@@ -74893,7 +74950,8 @@ Objective: ${objective}`,
|
|
|
74893
74950
|
if (onSubagentMessage) {
|
|
74894
74951
|
onSubagentMessage(subagentId, toolMessage);
|
|
74895
74952
|
}
|
|
74896
|
-
}
|
|
74953
|
+
},
|
|
74954
|
+
onToolResult: (delta) => {
|
|
74897
74955
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
74898
74956
|
if (existingToolMessageIndex !== -1) {
|
|
74899
74957
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -74908,11 +74966,10 @@ Objective: ${objective}`,
|
|
|
74908
74966
|
}
|
|
74909
74967
|
}
|
|
74910
74968
|
}
|
|
74911
|
-
}
|
|
74969
|
+
});
|
|
74912
74970
|
if (onSubagentComplete) {
|
|
74913
74971
|
onSubagentComplete(subagentId, true);
|
|
74914
74972
|
}
|
|
74915
|
-
saveSubagentMessages(session, subagentId, allMessages);
|
|
74916
74973
|
const subagentMetadata = {
|
|
74917
74974
|
type: "attack-surface",
|
|
74918
74975
|
subagentId,
|
|
@@ -74995,14 +75052,13 @@ You can spawn multiple agents in parallel - they will run concurrently.`,
|
|
|
74995
75052
|
const limit = pLimit(5);
|
|
74996
75053
|
const promises = targets.map((targetInfo, index) => limit(async () => {
|
|
74997
75054
|
try {
|
|
74998
|
-
const { streamResult: result } = runAgent({
|
|
75055
|
+
const { streamResult: result, subagentId } = runAgent({
|
|
74999
75056
|
session,
|
|
75000
75057
|
target: targetInfo.target,
|
|
75001
75058
|
objective: targetInfo.objective,
|
|
75002
75059
|
model,
|
|
75003
75060
|
abortSignal
|
|
75004
75061
|
});
|
|
75005
|
-
const subagentId = `pentest-${index + 1}-${result.session.id}`;
|
|
75006
75062
|
const allMessages = [];
|
|
75007
75063
|
let currentAssistantText = "";
|
|
75008
75064
|
const startTime = new Date().toISOString();
|
|
@@ -75028,8 +75084,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
75028
75084
|
if (onSubagentMessage) {
|
|
75029
75085
|
onSubagentMessage(subagentId, initialMessage);
|
|
75030
75086
|
}
|
|
75031
|
-
|
|
75032
|
-
|
|
75087
|
+
await consumeStream2(result, {
|
|
75088
|
+
onTextDelta: (delta) => {
|
|
75033
75089
|
currentAssistantText += delta.text;
|
|
75034
75090
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
75035
75091
|
if (lastMessage && lastMessage.role === "assistant") {
|
|
@@ -75052,7 +75108,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
75052
75108
|
onSubagentMessage(subagentId, newMessage);
|
|
75053
75109
|
}
|
|
75054
75110
|
}
|
|
75055
|
-
}
|
|
75111
|
+
},
|
|
75112
|
+
onToolCall: (delta) => {
|
|
75056
75113
|
if (currentAssistantText) {
|
|
75057
75114
|
currentAssistantText = "";
|
|
75058
75115
|
}
|
|
@@ -75069,7 +75126,8 @@ Objective: ${targetInfo.objective}`,
|
|
|
75069
75126
|
if (onSubagentMessage) {
|
|
75070
75127
|
onSubagentMessage(subagentId, toolMessage);
|
|
75071
75128
|
}
|
|
75072
|
-
}
|
|
75129
|
+
},
|
|
75130
|
+
onToolResult: (delta) => {
|
|
75073
75131
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
75074
75132
|
if (existingToolMessageIndex !== -1) {
|
|
75075
75133
|
const existingMessage = allMessages[existingToolMessageIndex];
|
|
@@ -75084,12 +75142,11 @@ Objective: ${targetInfo.objective}`,
|
|
|
75084
75142
|
}
|
|
75085
75143
|
}
|
|
75086
75144
|
}
|
|
75087
|
-
}
|
|
75088
|
-
const endTime = new Date().toISOString();
|
|
75145
|
+
});
|
|
75089
75146
|
if (onSubagentComplete) {
|
|
75090
75147
|
onSubagentComplete(subagentId, true);
|
|
75091
75148
|
}
|
|
75092
|
-
|
|
75149
|
+
const endTime = new Date().toISOString();
|
|
75093
75150
|
const subagentMetadata = {
|
|
75094
75151
|
type: "pentest",
|
|
75095
75152
|
subagentId,
|
|
@@ -75474,8 +75531,8 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75474
75531
|
};
|
|
75475
75532
|
const allMessages = [userMessage];
|
|
75476
75533
|
let currentAssistantText = "";
|
|
75477
|
-
|
|
75478
|
-
|
|
75534
|
+
await consumeStream2(result, {
|
|
75535
|
+
onTextDelta: (delta) => {
|
|
75479
75536
|
currentAssistantText += delta.text;
|
|
75480
75537
|
addTokens(1);
|
|
75481
75538
|
const lastMessage = allMessages[allMessages.length - 1];
|
|
@@ -75489,7 +75546,8 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75489
75546
|
});
|
|
75490
75547
|
}
|
|
75491
75548
|
setMessages([...allMessages]);
|
|
75492
|
-
}
|
|
75549
|
+
},
|
|
75550
|
+
onToolCall: (delta) => {
|
|
75493
75551
|
if (currentAssistantText) {
|
|
75494
75552
|
currentAssistantText = "";
|
|
75495
75553
|
}
|
|
@@ -75505,7 +75563,8 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75505
75563
|
createdAt: new Date
|
|
75506
75564
|
});
|
|
75507
75565
|
setMessages([...allMessages]);
|
|
75508
|
-
}
|
|
75566
|
+
},
|
|
75567
|
+
onToolResult: (delta) => {
|
|
75509
75568
|
setThinking(true);
|
|
75510
75569
|
const toolName = delta.toolName;
|
|
75511
75570
|
const existingToolMessageIndex = allMessages.findIndex((msg) => msg.role === "tool" && msg.toolCallId === delta.toolCallId);
|
|
@@ -75519,8 +75578,7 @@ Mode: Pentest (Orchestrator)`,
|
|
|
75519
75578
|
}
|
|
75520
75579
|
setMessages([...allMessages]);
|
|
75521
75580
|
}
|
|
75522
|
-
|
|
75523
|
-
}
|
|
75581
|
+
});
|
|
75524
75582
|
if (fs6.existsSync(result.session.rootPath + "/comprehensive-pentest-report.md")) {
|
|
75525
75583
|
setIsCompleted(true);
|
|
75526
75584
|
}
|
|
@@ -76744,33 +76802,11 @@ function ModelsDisplay({
|
|
|
76744
76802
|
}, undefined, false, undefined, this);
|
|
76745
76803
|
}
|
|
76746
76804
|
|
|
76805
|
+
// src/tui/generated-ascii-art.json
|
|
76806
|
+
var generated_ascii_art_default = [[{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 31, g: 194, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 193, b: 91 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 203, b: 95 }, { char: ";", r: 33, g: 198, b: 94 }, { char: ";", r: 32, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 204, b: 96 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: ";", r: 30, g: 195, b: 90 }, { char: ";", r: 35, g: 207, b: 98 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 35, g: 207, b: 98 }, { char: ";", r: 31, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 197, b: 91 }, { char: ";", r: 34, g: 202, b: 96 }, { char: ";", r: 32, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 202, b: 95 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 198, b: 94 }, { char: ";", r: 33, g: 197, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 193, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 30, g: 194, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 201, b: 95 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 200, b: 94 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 195, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 90 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 34, g: 202, b: 95 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 34, g: 204, b: 96 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 209, b: 99 }, { char: ";", r: 32, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 90 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 207, b: 98 }, { char: ";", r: 32, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 194, b: 91 }, { char: ";", r: 33, g: 199, b: 94 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 34, g: 203, b: 96 }, { char: ";", r: 30, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 31, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 198, b: 93 }, { char: ";", r: 31, g: 194, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 200, b: 94 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 31, g: 194, b: 92 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 197, b: 91 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 202, b: 95 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 33, g: 199, b: 93 }, { char: ";", r: 34, g: 202, b: 95 }, { char: ";", r: 32, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 194, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 33, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 31, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 197, b: 91 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 31, g: 197, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 33, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 194, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 194, b: 92 }, { char: ";", r: 32, g: 197, b: 93 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 31, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: ";", r: 31, g: 194, b: 90 }, { char: ";", r: 34, g: 204, b: 96 }, { char: ";", r: 33, g: 198, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 30, g: 193, b: 90 }, { char: ";", r: 34, g: 200, b: 94 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 207, b: 98 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 33, g: 199, b: 94 }, { char: ";", r: 31, g: 193, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 207, b: 98 }, { char: ";", r: 30, g: 195, b: 90 }], [{ char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 30, g: 194, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 204, b: 96 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 34, g: 202, b: 96 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ":", r: 35, g: 210, b: 99 }, { char: ";", r: 32, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 91 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 197, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 194, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 33, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 33, g: 197, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 32, g: 195, b: 91 }], [{ char: ";", r: 33, g: 199, b: 94 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 89 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 200, b: 95 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 198, b: 94 }, { char: ";", r: 33, g: 196, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 90 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 31, g: 195, b: 92 }], [{ char: ";", r: 31, g: 195, b: 91 }, { char: ";", r: 35, g: 207, b: 98 }, { char: ";", r: 32, g: 196, b: 93 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 195, b: 92 }, { char: ";", r: 34, g: 205, b: 97 }, { char: ";", r: 32, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 34, g: 203, b: 96 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 35, g: 206, b: 97 }, { char: ";", r: 31, g: 195, b: 91 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 194, b: 91 }, { char: ";", r: 33, g: 200, b: 95 }, { char: ";", r: 33, g: 202, b: 95 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 31, g: 195, b: 91 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 33, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 34, g: 206, b: 97 }, { char: ";", r: 32, g: 195, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 35, g: 208, b: 98 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 32, g: 194, b: 92 }, { char: ";", r: 32, g: 196, b: 91 }, { char: ";", r: 33, g: 197, b: 93 }, { char: ";", r: 34, g: 202, b: 95 }, { char: ";", r: 31, g: 195, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }], [{ char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 32, g: 197, b: 93 }, { char: ";", r: 31, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 32, g: 195, b: 91 }, { char: ";", r: 32, g: 195, b: 92 }, { char: ";", r: 31, g: 196, b: 93 }, { char: ";", r: 32, g: 196, b: 90 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 31, g: 196, b: 91 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 32, g: 196, b: 92 }, { char: ";", r: 33, g: 196, b: 92 }, { char: ";", r: 30, g: 194, b: 92 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }, { char: " ", r: 0, g: 0, b: 0 }]];
|
|
76807
|
+
|
|
76747
76808
|
// src/tui/index.tsx
|
|
76748
|
-
|
|
76749
|
-
import { dirname as dirname2, join as join8 } from "path";
|
|
76750
|
-
import { existsSync as existsSync13 } from "fs";
|
|
76751
|
-
var __filename2 = fileURLToPath2(import.meta.url);
|
|
76752
|
-
var __dirname2 = dirname2(__filename2);
|
|
76753
|
-
function findImagePath() {
|
|
76754
|
-
const bundledPath = join8(__dirname2, "..", "pensar.svg");
|
|
76755
|
-
if (existsSync13(bundledPath)) {
|
|
76756
|
-
return bundledPath;
|
|
76757
|
-
}
|
|
76758
|
-
const devPath = join8(__dirname2, "..", "..", "pensar.svg");
|
|
76759
|
-
if (existsSync13(devPath)) {
|
|
76760
|
-
return devPath;
|
|
76761
|
-
}
|
|
76762
|
-
throw new Error("Could not find pensar.svg");
|
|
76763
|
-
}
|
|
76764
|
-
var CONFIG = {
|
|
76765
|
-
imagePath: findImagePath(),
|
|
76766
|
-
scale: 1,
|
|
76767
|
-
maxWidth: 50,
|
|
76768
|
-
aspectRatio: 0.5,
|
|
76769
|
-
invert: true,
|
|
76770
|
-
title: "Pensar Logo"
|
|
76771
|
-
};
|
|
76772
|
-
var coloredAscii = await convertImageToColoredAscii(CONFIG.imagePath, CONFIG.scale, CONFIG.maxWidth, CONFIG.aspectRatio, CONFIG.invert);
|
|
76773
|
-
console.log(`Generated colored ASCII: ${coloredAscii.length} rows x ${coloredAscii[0]?.length || 0} columns (scale: ${CONFIG.scale * 100}%)`);
|
|
76809
|
+
var coloredAscii = generated_ascii_art_default;
|
|
76774
76810
|
function App() {
|
|
76775
76811
|
const [appConfig, setAppConfig] = import_react30.useState(null);
|
|
76776
76812
|
const [focusIndex, setFocusIndex] = import_react30.useState(0);
|