π File detail
components/tasks/BackgroundTask.tsx
π§© .tsxπ 345 linesπΎ 31,248 bytesπ text
β Back to All Filesπ― Use case
This file lives under βcomponents/β, which covers shared React UI pieces. On the API surface it exposes BackgroundTask β mainly types, interfaces, or factory objects. Dependencies touch React UI and src. It composes internal code from constants, RemoteSessionProgress, ShellProgress, and taskStatusUtils (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { c as _c } from "react/compiler-runtime"; import * as React from 'react'; import { Text } from 'src/ink.js'; import type { BackgroundTaskState } from 'src/tasks/types.js'; import type { DeepImmutable } from 'src/types/utils.js';
π€ Exports (heuristic)
BackgroundTask
π External import roots
Package roots from from "β¦" (relative paths omitted).
reactsrc
π₯οΈ Source preview
import { c as _c } from "react/compiler-runtime";
import * as React from 'react';
import { Text } from 'src/ink.js';
import type { BackgroundTaskState } from 'src/tasks/types.js';
import type { DeepImmutable } from 'src/types/utils.js';
import { truncate } from 'src/utils/format.js';
import { toInkColor } from 'src/utils/ink.js';
import { plural } from 'src/utils/stringUtils.js';
import { DIAMOND_FILLED, DIAMOND_OPEN } from '../../constants/figures.js';
import { RemoteSessionProgress } from './RemoteSessionProgress.js';
import { ShellProgress, TaskStatusText } from './ShellProgress.js';
import { describeTeammateActivity } from './taskStatusUtils.js';
type Props = {
task: DeepImmutable<BackgroundTaskState>;
maxActivityWidth?: number;
};
export function BackgroundTask(t0) {
const $ = _c(92);
const {
task,
maxActivityWidth
} = t0;
const activityLimit = maxActivityWidth ?? 40;
switch (task.type) {
case "local_bash":
{
const t1 = task.kind === "monitor" ? task.description : task.command;
let t2;
if ($[0] !== activityLimit || $[1] !== t1) {
t2 = truncate(t1, activityLimit, true);
$[0] = activityLimit;
$[1] = t1;
$[2] = t2;
} else {
t2 = $[2];
}
let t3;
if ($[3] !== task) {
t3 = <ShellProgress shell={task} />;
$[3] = task;
$[4] = t3;
} else {
t3 = $[4];
}
let t4;
if ($[5] !== t2 || $[6] !== t3) {
t4 = <Text>{t2}{" "}{t3}</Text>;
$[5] = t2;
$[6] = t3;
$[7] = t4;
} else {
t4 = $[7];
}
return t4;
}
case "remote_agent":
{
if (task.isRemoteReview) {
let t1;
if ($[8] !== task) {
t1 = <Text><RemoteSessionProgress session={task} /></Text>;
$[8] = task;
$[9] = t1;
} else {
t1 = $[9];
}
return t1;
}
const running = task.status === "running" || task.status === "pending";
const t1 = running ? DIAMOND_OPEN : DIAMOND_FILLED;
let t2;
if ($[10] !== t1) {
t2 = <Text dimColor={true}>{t1} </Text>;
$[10] = t1;
$[11] = t2;
} else {
t2 = $[11];
}
let t3;
if ($[12] !== activityLimit || $[13] !== task.title) {
t3 = truncate(task.title, activityLimit, true);
$[12] = activityLimit;
$[13] = task.title;
$[14] = t3;
} else {
t3 = $[14];
}
let t4;
if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
t4 = <Text dimColor={true}> Β· </Text>;
$[15] = t4;
} else {
t4 = $[15];
}
let t5;
if ($[16] !== task) {
t5 = <RemoteSessionProgress session={task} />;
$[16] = task;
$[17] = t5;
} else {
t5 = $[17];
}
let t6;
if ($[18] !== t2 || $[19] !== t3 || $[20] !== t5) {
t6 = <Text>{t2}{t3}{t4}{t5}</Text>;
$[18] = t2;
$[19] = t3;
$[20] = t5;
$[21] = t6;
} else {
t6 = $[21];
}
return t6;
}
case "local_agent":
{
let t1;
if ($[22] !== activityLimit || $[23] !== task.description) {
t1 = truncate(task.description, activityLimit, true);
$[22] = activityLimit;
$[23] = task.description;
$[24] = t1;
} else {
t1 = $[24];
}
const t2 = task.status === "completed" ? "done" : undefined;
const t3 = task.status === "completed" && !task.notified ? ", unread" : undefined;
let t4;
if ($[25] !== t2 || $[26] !== t3 || $[27] !== task.status) {
t4 = <TaskStatusText status={task.status} label={t2} suffix={t3} />;
$[25] = t2;
$[26] = t3;
$[27] = task.status;
$[28] = t4;
} else {
t4 = $[28];
}
let t5;
if ($[29] !== t1 || $[30] !== t4) {
t5 = <Text>{t1}{" "}{t4}</Text>;
$[29] = t1;
$[30] = t4;
$[31] = t5;
} else {
t5 = $[31];
}
return t5;
}
case "in_process_teammate":
{
let T0;
let T1;
let t1;
let t2;
let t3;
let t4;
if ($[32] !== activityLimit || $[33] !== task) {
const activity = describeTeammateActivity(task);
T1 = Text;
let t5;
if ($[40] !== task.identity.color) {
t5 = toInkColor(task.identity.color);
$[40] = task.identity.color;
$[41] = t5;
} else {
t5 = $[41];
}
if ($[42] !== t5 || $[43] !== task.identity.agentName) {
t4 = <Text color={t5}>@{task.identity.agentName}</Text>;
$[42] = t5;
$[43] = task.identity.agentName;
$[44] = t4;
} else {
t4 = $[44];
}
T0 = Text;
t1 = true;
t2 = ": ";
t3 = truncate(activity, activityLimit, true);
$[32] = activityLimit;
$[33] = task;
$[34] = T0;
$[35] = T1;
$[36] = t1;
$[37] = t2;
$[38] = t3;
$[39] = t4;
} else {
T0 = $[34];
T1 = $[35];
t1 = $[36];
t2 = $[37];
t3 = $[38];
t4 = $[39];
}
let t5;
if ($[45] !== T0 || $[46] !== t1 || $[47] !== t2 || $[48] !== t3) {
t5 = <T0 dimColor={t1}>{t2}{t3}</T0>;
$[45] = T0;
$[46] = t1;
$[47] = t2;
$[48] = t3;
$[49] = t5;
} else {
t5 = $[49];
}
let t6;
if ($[50] !== T1 || $[51] !== t4 || $[52] !== t5) {
t6 = <T1>{t4}{t5}</T1>;
$[50] = T1;
$[51] = t4;
$[52] = t5;
$[53] = t6;
} else {
t6 = $[53];
}
return t6;
}
case "local_workflow":
{
const t1 = task.workflowName ?? task.summary ?? task.description;
let t2;
if ($[54] !== activityLimit || $[55] !== t1) {
t2 = truncate(t1, activityLimit, true);
$[54] = activityLimit;
$[55] = t1;
$[56] = t2;
} else {
t2 = $[56];
}
let t3;
if ($[57] !== task.agentCount || $[58] !== task.status) {
t3 = task.status === "running" ? `${task.agentCount} ${plural(task.agentCount, "agent")}` : task.status === "completed" ? "done" : undefined;
$[57] = task.agentCount;
$[58] = task.status;
$[59] = t3;
} else {
t3 = $[59];
}
const t4 = task.status === "completed" && !task.notified ? ", unread" : undefined;
let t5;
if ($[60] !== t3 || $[61] !== t4 || $[62] !== task.status) {
t5 = <TaskStatusText status={task.status} label={t3} suffix={t4} />;
$[60] = t3;
$[61] = t4;
$[62] = task.status;
$[63] = t5;
} else {
t5 = $[63];
}
let t6;
if ($[64] !== t2 || $[65] !== t5) {
t6 = <Text>{t2}{" "}{t5}</Text>;
$[64] = t2;
$[65] = t5;
$[66] = t6;
} else {
t6 = $[66];
}
return t6;
}
case "monitor_mcp":
{
let t1;
if ($[67] !== activityLimit || $[68] !== task.description) {
t1 = truncate(task.description, activityLimit, true);
$[67] = activityLimit;
$[68] = task.description;
$[69] = t1;
} else {
t1 = $[69];
}
const t2 = task.status === "completed" ? "done" : undefined;
const t3 = task.status === "completed" && !task.notified ? ", unread" : undefined;
let t4;
if ($[70] !== t2 || $[71] !== t3 || $[72] !== task.status) {
t4 = <TaskStatusText status={task.status} label={t2} suffix={t3} />;
$[70] = t2;
$[71] = t3;
$[72] = task.status;
$[73] = t4;
} else {
t4 = $[73];
}
let t5;
if ($[74] !== t1 || $[75] !== t4) {
t5 = <Text>{t1}{" "}{t4}</Text>;
$[74] = t1;
$[75] = t4;
$[76] = t5;
} else {
t5 = $[76];
}
return t5;
}
case "dream":
{
const n = task.filesTouched.length;
let t1;
if ($[77] !== n || $[78] !== task.phase || $[79] !== task.sessionsReviewing) {
t1 = task.phase === "updating" && n > 0 ? `${n} ${plural(n, "file")}` : `${task.sessionsReviewing} ${plural(task.sessionsReviewing, "session")}`;
$[77] = n;
$[78] = task.phase;
$[79] = task.sessionsReviewing;
$[80] = t1;
} else {
t1 = $[80];
}
const detail = t1;
let t2;
if ($[81] !== detail || $[82] !== task.phase) {
t2 = <Text dimColor={true}>Β· {task.phase} Β· {detail}</Text>;
$[81] = detail;
$[82] = task.phase;
$[83] = t2;
} else {
t2 = $[83];
}
const t3 = task.status === "completed" ? "done" : undefined;
const t4 = task.status === "completed" && !task.notified ? ", unread" : undefined;
let t5;
if ($[84] !== t3 || $[85] !== t4 || $[86] !== task.status) {
t5 = <TaskStatusText status={task.status} label={t3} suffix={t4} />;
$[84] = t3;
$[85] = t4;
$[86] = task.status;
$[87] = t5;
} else {
t5 = $[87];
}
let t6;
if ($[88] !== t2 || $[89] !== t5 || $[90] !== task.description) {
t6 = <Text>{task.description}{" "}{t2}{" "}{t5}</Text>;
$[88] = t2;
$[89] = t5;
$[90] = task.description;
$[91] = t6;
} else {
t6 = $[91];
}
return t6;
}
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlRleHQiLCJCYWNrZ3JvdW5kVGFza1N0YXRlIiwiRGVlcEltbXV0YWJsZSIsInRydW5jYXRlIiwidG9JbmtDb2xvciIsInBsdXJhbCIsIkRJQU1PTkRfRklMTEVEIiwiRElBTU9ORF9PUEVOIiwiUmVtb3RlU2Vzc2lvblByb2dyZXNzIiwiU2hlbGxQcm9ncmVzcyIsIlRhc2tTdGF0dXNUZXh0IiwiZGVzY3JpYmVUZWFtbWF0ZUFjdGl2aXR5IiwiUHJvcHMiLCJ0YXNrIiwibWF4QWN0aXZpdHlXaWR0aCIsIkJhY2tncm91bmRUYXNrIiwidDAiLCIkIiwiX2MiLCJhY3Rpdml0eUxpbWl0IiwidHlwZSIsInQxIiwia2luZCIsImRlc2NyaXB0aW9uIiwiY29tbWFuZCIsInQyIiwidDMiLCJ0NCIsImlzUmVtb3RlUmV2aWV3IiwicnVubmluZyIsInN0YXR1cyIsInRpdGxlIiwiU3ltYm9sIiwiZm9yIiwidDUiLCJ0NiIsInVuZGVmaW5lZCIsIm5vdGlmaWVkIiwiVDAiLCJUMSIsImFjdGl2aXR5IiwiaWRlbnRpdHkiLCJjb2xvciIsImFnZW50TmFtZSIsIndvcmtmbG93TmFtZSIsInN1bW1hcnkiLCJhZ2VudENvdW50IiwibiIsImZpbGVzVG91Y2hlZCIsImxlbmd0aCIsInBoYXNlIiwic2Vzc2lvbnNSZXZpZXdpbmciLCJkZXRhaWwiXSwic291cmNlcyI6WyJCYWNrZ3JvdW5kVGFzay50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnc3JjL2luay5qcydcbmltcG9ydCB0eXBlIHsgQmFja2dyb3VuZFRhc2tTdGF0ZSB9IGZyb20gJ3NyYy90YXNrcy90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgRGVlcEltbXV0YWJsZSB9IGZyb20gJ3NyYy90eXBlcy91dGlscy5qcydcbmltcG9ydCB7IHRydW5jYXRlIH0gZnJvbSAnc3JjL3V0aWxzL2Zvcm1hdC5qcydcbmltcG9ydCB7IHRvSW5rQ29sb3IgfSBmcm9tICdzcmMvdXRpbHMvaW5rLmpzJ1xuaW1wb3J0IHsgcGx1cmFsIH0gZnJvbSAnc3JjL3V0aWxzL3N0cmluZ1V0aWxzLmpzJ1xuaW1wb3J0IHsgRElBTU9ORF9GSUxMRUQsIERJQU1PTkRfT1BFTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9maWd1cmVzLmpzJ1xuaW1wb3J0IHsgUmVtb3RlU2Vzc2lvblByb2dyZXNzIH0gZnJvbSAnLi9SZW1vdGVTZXNzaW9uUHJvZ3Jlc3MuanMnXG5pbXBvcnQgeyBTaGVsbFByb2dyZXNzLCBUYXNrU3RhdHVzVGV4dCB9IGZyb20gJy4vU2hlbGxQcm9ncmVzcy5qcydcbmltcG9ydCB7IGRlc2NyaWJlVGVhbW1hdGVBY3Rpdml0eSB9IGZyb20gJy4vdGFza1N0YXR1c1V0aWxzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICB0YXNrOiBEZWVwSW1tdXRhYmxlPEJhY2tncm91bmRUYXNrU3RhdGU+XG4gIG1heEFjdGl2aXR5V2lkdGg/OiBudW1iZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJhY2tncm91bmRUYXNrKHtcbiAgdGFzayxcbiAgbWF4QWN0aXZpdHlXaWR0aCxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgYWN0aXZpdHlMaW1pdCA9IG1heEFjdGl2aXR5V2lkdGggPz8gNDBcbiAgc3dpdGNoICh0YXNrLnR5cGUpIHtcbiAgICBjYXNlICdsb2NhbF9iYXNoJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHt0cnVuY2F0ZShcbiAgICAgICAgICAgIHRhc2sua2luZCA9PT0gJ21vbml0b3InID8gdGFzay5kZXNjcmlwdGlvbiA6IHRhc2suY29tbWFuZCxcbiAgICAgICAgICAgIGFjdGl2aXR5TGltaXQsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICl9eycgJ31cbiAgICAgICAgICA8U2hlbGxQcm9ncmVzcyBzaGVsbD17dGFza30gLz5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKVxuICAgIGNhc2UgJ3JlbW90ZV9hZ2VudCc6IHtcbiAgICAgIC8vIExpdGUtcmV2aWV3IHJlbmRlcnMgaXRzIG93biByYWluYm93IGxpbmUgKHRpdGxlICsgbGl2ZSBjb3VudHMpLFxuICAgICAgLy8gc28gd2UgZG9uJ3QgcHJlZml4IHRoZSB0aXRsZSDigJQgdGhlIHJhaW5ib3cgYWxyZWFkeSBpbmNsdWRlcyBpdC5cbiAgICAgIGlmICh0YXNrLmlzUmVtb3RlUmV2aWV3KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICA8UmVtb3RlU2Vzc2lvblByb2dyZXNzIHNlc3Npb249e3Rhc2t9IC8+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjb25zdCBydW5uaW5nID0gdGFzay5zdGF0dXMgPT09ICdydW5uaW5nJyB8fCB0YXNrLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8VGV4dCBkaW1Db2xvcj57cnVubmluZyA/IERJQU1PTkRfT1BFTiA6IERJQU1PTkRfRklMTEVEfSA8L1RleHQ+XG4gICAgICAgICAge3RydW5jYXRlKHRhc2sudGl0bGUsIGFjdGl2aXR5TGltaXQsIHRydWUpfVxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPiDCtyA8L1RleHQ+XG4gICAgICAgICAgPFJlbW90ZVNlc3Npb25Qcm9ncmVzcyBzZXNzaW9uPXt0YXNrfSAvPlxuICAgICAgICA8L1RleHQ+XG4gICAgICApXG4gICAgfVxuICAgIGNhc2UgJ2xvY2FsX2FnZW50JzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHt0cnVuY2F0ZSh0YXNrLmRlc2NyaXB0aW9uLCBhY3Rpdml0eUxpbWl0LCB0cnVlKX17JyAnfVxuICAgICAgICAgIDxUYXNrU3RhdHVzVGV4dFxuICAgICAgICAgICAgc3RhdHVzPXt0YXNrLnN0YXR1c31cbiAgICAgICAgICAgIGxhYmVsPXt0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgPyAnZG9uZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBzdWZmaXg9e1xuICAgICAgICAgICAgICB0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgJiYgIXRhc2subm90aWZpZWRcbiAgICAgICAgICAgICAgICA/ICcsIHVucmVhZCdcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIClcbiAgICBjYXNlICdpbl9wcm9jZXNzX3RlYW1tYXRlJzoge1xuICAgICAgY29uc3QgYWN0aXZpdHkgPSBkZXNjcmliZVRlYW1tYXRlQWN0aXZpdHkodGFzaylcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIDxUZXh0IGNvbG9yPXt0b0lua0NvbG9yKHRhc2suaWRlbnRpdHkuY29sb3IpfT5cbiAgICAgICAgICAgIEB7dGFzay5pZGVudGl0eS5hZ2VudE5hbWV9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPjoge3RydW5jYXRlKGFjdGl2aXR5LCBhY3Rpdml0eUxpbWl0LCB0cnVlKX08L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIClcbiAgICB9XG4gICAgY2FzZSAnbG9jYWxfd29ya2Zsb3cnOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAge3RydW5jYXRlKFxuICAgICAgICAgICAgdGFzay53b3JrZmxvd05hbWUgPz8gdGFzay5zdW1tYXJ5ID8/IHRhc2suZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhY3Rpdml0eUxpbWl0LFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICApfXsnICd9XG4gICAgICAgICAgPFRhc2tTdGF0dXNUZXh0XG4gICAgICAgICAgICBzdGF0dXM9e3Rhc2suc3RhdHVzfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0YXNrLnN0YXR1cyA9PT0gJ3J1bm5pbmcnXG4gICAgICAgICAgICAgICAgPyBgJHt0YXNrLmFnZW50Q291bnR9ICR7cGx1cmFsKHRhc2suYWdlbnRDb3VudCwgJ2FnZW50Jyl9YFxuICAgICAgICAgICAgICAgIDogdGFzay5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXG4gICAgICAgICAgICAgICAgICA/ICdkb25lJ1xuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1ZmZpeD17XG4gICAgICAgICAgICAgIHRhc2suc3RhdHVzID09PSAnY29tcGxldGVkJyAmJiAhdGFzay5ub3RpZmllZFxuICAgICAgICAgICAgICAgID8gJywgdW5yZWFkJ1xuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKVxuICAgIGNhc2UgJ21vbml0b3JfbWNwJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHt0cnVuY2F0ZSh0YXNrLmRlc2NyaXB0aW9uLCBhY3Rpdml0eUxpbWl0LCB0cnVlKX17JyAnfVxuICAgICAgICAgIDxUYXNrU3RhdHVzVGV4dFxuICAgICAgICAgICAgc3RhdHVzPXt0YXNrLnN0YXR1c31cbiAgICAgICAgICAgIGxhYmVsPXt0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgPyAnZG9uZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBzdWZmaXg9e1xuICAgICAgICAgICAgICB0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgJiYgIXRhc2subm90aWZpZWRcbiAgICAgICAgICAgICAgICA/ICcsIHVucmVhZCdcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIClcbiAgICBjYXNlICdkcmVhbSc6IHtcbiAgICAgIGNvbnN0IG4gPSB0YXNrLmZpbGVzVG91Y2hlZC5sZW5ndGhcbiAgICAgIGNvbnN0IGRldGFpbCA9XG4gICAgICAgIHRhc2sucGhhc2UgPT09ICd1cGRhdGluZycgJiYgbiA+IDBcbiAgICAgICAgICA/IGAke259ICR7cGx1cmFsKG4sICdmaWxlJyl9YFxuICAgICAgICAgIDogYCR7dGFzay5zZXNzaW9uc1Jldmlld2luZ30gJHtwbHVyYWwodGFzay5zZXNzaW9uc1Jldmlld2luZywgJ3Nlc3Npb24nKX1gXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7dGFzay5kZXNjcmlwdGlvbn17JyAnfVxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAgwrcge3Rhc2sucGhhc2V9IMK3IHtkZXRhaWx9XG4gICAgICAgICAgPC9UZXh0PnsnICd9XG4gICAgICAgICAgPFRhc2tTdGF0dXNUZXh0XG4gICAgICAgICAgICBzdGF0dXM9e3Rhc2suc3RhdHVzfVxuICAgICAgICAgICAgbGFiZWw9e3Rhc2suc3RhdHVzID09PSAnY29tcGxldGVkJyA/ICdkb25lJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHN1ZmZpeD17XG4gICAgICAgICAgICAgIHRhc2suc3RhdHVzID09PSAnY29tcGxldGVkJyAmJiAhdGFzay5ub3RpZmllZFxuICAgICAgICAgICAgICAgID8gJywgdW5yZWFkJ1xuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLQSxLQUFLLE1BQU0sT0FBTztBQUM5QixTQUFTQyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxjQUFjQyxtQkFBbUIsUUFBUSxvQkFBb0I7QUFDN0QsY0FBY0MsYUFBYSxRQUFRLG9CQUFvQjtB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