πŸ“„ File detail

components/tasks/InProcessTeammateDetailDialog.tsx

🧩 .tsxπŸ“ 266 linesπŸ’Ύ 31,018 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 InProcessTeammateDetailDialog β€” mainly types, interfaces, or factory objects. Dependencies touch React UI and src. It composes internal code from hooks, ink, keybindings, Tool, and tasks (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 React, { useMemo } from 'react'; import type { DeepImmutable } from 'src/types/utils.js'; import { useElapsedTime } from '../../hooks/useElapsedTime.js'; import type { KeyboardEvent } from '../../ink/events/keyboard-event.js';

πŸ“€ Exports (heuristic)

  • InProcessTeammateDetailDialog

πŸ“š External import roots

Package roots from from "…" (relative paths omitted).

  • react
  • src

πŸ–₯️ Source preview

import { c as _c } from "react/compiler-runtime";
import React, { useMemo } from 'react';
import type { DeepImmutable } from 'src/types/utils.js';
import { useElapsedTime } from '../../hooks/useElapsedTime.js';
import type { KeyboardEvent } from '../../ink/events/keyboard-event.js';
import { Box, Text, useTheme } from '../../ink.js';
import { useKeybindings } from '../../keybindings/useKeybinding.js';
import { getEmptyToolPermissionContext } from '../../Tool.js';
import type { InProcessTeammateTaskState } from '../../tasks/InProcessTeammateTask/types.js';
import { getTools } from '../../tools.js';
import { formatNumber, truncateToWidth } from '../../utils/format.js';
import { toInkColor } from '../../utils/ink.js';
import { Byline } from '../design-system/Byline.js';
import { Dialog } from '../design-system/Dialog.js';
import { KeyboardShortcutHint } from '../design-system/KeyboardShortcutHint.js';
import { renderToolActivity } from './renderToolActivity.js';
import { describeTeammateActivity } from './taskStatusUtils.js';
type Props = {
  teammate: DeepImmutable<InProcessTeammateTaskState>;
  onDone: () => void;
  onKill?: () => void;
  onBack?: () => void;
  onForeground?: () => void;
};
export function InProcessTeammateDetailDialog(t0) {
  const $ = _c(63);
  const {
    teammate,
    onDone,
    onKill,
    onBack,
    onForeground
  } = t0;
  const [theme] = useTheme();
  let t1;
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
    t1 = getTools(getEmptyToolPermissionContext());
    $[0] = t1;
  } else {
    t1 = $[0];
  }
  const tools = t1;
  const elapsedTime = useElapsedTime(teammate.startTime, teammate.status === "running", 1000, teammate.totalPausedMs ?? 0);
  let t2;
  if ($[1] !== onDone) {
    t2 = {
      "confirm:yes": onDone
    };
    $[1] = onDone;
    $[2] = t2;
  } else {
    t2 = $[2];
  }
  let t3;
  if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
    t3 = {
      context: "Confirmation"
    };
    $[3] = t3;
  } else {
    t3 = $[3];
  }
  useKeybindings(t2, t3);
  let t4;
  if ($[4] !== onBack || $[5] !== onDone || $[6] !== onForeground || $[7] !== onKill || $[8] !== teammate.status) {
    t4 = e => {
      if (e.key === " ") {
        e.preventDefault();
        onDone();
      } else {
        if (e.key === "left" && onBack) {
          e.preventDefault();
          onBack();
        } else {
          if (e.key === "x" && teammate.status === "running" && onKill) {
            e.preventDefault();
            onKill();
          } else {
            if (e.key === "f" && teammate.status === "running" && onForeground) {
              e.preventDefault();
              onForeground();
            }
          }
        }
      }
    };
    $[4] = onBack;
    $[5] = onDone;
    $[6] = onForeground;
    $[7] = onKill;
    $[8] = teammate.status;
    $[9] = t4;
  } else {
    t4 = $[9];
  }
  const handleKeyDown = t4;
  let t5;
  if ($[10] !== teammate) {
    t5 = describeTeammateActivity(teammate);
    $[10] = teammate;
    $[11] = t5;
  } else {
    t5 = $[11];
  }
  const activity = t5;
  const tokenCount = teammate.result?.totalTokens ?? teammate.progress?.tokenCount;
  const toolUseCount = teammate.result?.totalToolUseCount ?? teammate.progress?.toolUseCount;
  let t6;
  if ($[12] !== teammate.prompt) {
    t6 = truncateToWidth(teammate.prompt, 300);
    $[12] = teammate.prompt;
    $[13] = t6;
  } else {
    t6 = $[13];
  }
  const displayPrompt = t6;
  let t7;
  if ($[14] !== teammate.identity.color) {
    t7 = toInkColor(teammate.identity.color);
    $[14] = teammate.identity.color;
    $[15] = t7;
  } else {
    t7 = $[15];
  }
  let t8;
  if ($[16] !== t7 || $[17] !== teammate.identity.agentName) {
    t8 = <Text color={t7}>@{teammate.identity.agentName}</Text>;
    $[16] = t7;
    $[17] = teammate.identity.agentName;
    $[18] = t8;
  } else {
    t8 = $[18];
  }
  let t9;
  if ($[19] !== activity) {
    t9 = activity && <Text dimColor={true}> ({activity})</Text>;
    $[19] = activity;
    $[20] = t9;
  } else {
    t9 = $[20];
  }
  let t10;
  if ($[21] !== t8 || $[22] !== t9) {
    t10 = <Text>{t8}{t9}</Text>;
    $[21] = t8;
    $[22] = t9;
    $[23] = t10;
  } else {
    t10 = $[23];
  }
  const title = t10;
  let t11;
  if ($[24] !== teammate.status) {
    t11 = teammate.status !== "running" && <Text color={teammate.status === "completed" ? "success" : teammate.status === "killed" ? "warning" : "error"}>{teammate.status === "completed" ? "Completed" : teammate.status === "failed" ? "Failed" : "Stopped"}{" \xB7 "}</Text>;
    $[24] = teammate.status;
    $[25] = t11;
  } else {
    t11 = $[25];
  }
  let t12;
  if ($[26] !== tokenCount) {
    t12 = tokenCount !== undefined && tokenCount > 0 && <> Β· {formatNumber(tokenCount)} tokens</>;
    $[26] = tokenCount;
    $[27] = t12;
  } else {
    t12 = $[27];
  }
  let t13;
  if ($[28] !== toolUseCount) {
    t13 = toolUseCount !== undefined && toolUseCount > 0 && <>{" "}Β· {toolUseCount} {toolUseCount === 1 ? "tool" : "tools"}</>;
    $[28] = toolUseCount;
    $[29] = t13;
  } else {
    t13 = $[29];
  }
  let t14;
  if ($[30] !== elapsedTime || $[31] !== t12 || $[32] !== t13) {
    t14 = <Text dimColor={true}>{elapsedTime}{t12}{t13}</Text>;
    $[30] = elapsedTime;
    $[31] = t12;
    $[32] = t13;
    $[33] = t14;
  } else {
    t14 = $[33];
  }
  let t15;
  if ($[34] !== t11 || $[35] !== t14) {
    t15 = <Text>{t11}{t14}</Text>;
    $[34] = t11;
    $[35] = t14;
    $[36] = t15;
  } else {
    t15 = $[36];
  }
  const subtitle = t15;
  let t16;
  if ($[37] !== onBack || $[38] !== onForeground || $[39] !== onKill || $[40] !== teammate.status) {
    t16 = exitState => exitState.pending ? <Text>Press {exitState.keyName} again to exit</Text> : <Byline>{onBack && <KeyboardShortcutHint shortcut={"\u2190"} action="go back" />}<KeyboardShortcutHint shortcut="Esc/Enter/Space" action="close" />{teammate.status === "running" && onKill && <KeyboardShortcutHint shortcut="x" action="stop" />}{teammate.status === "running" && onForeground && <KeyboardShortcutHint shortcut="f" action="foreground" />}</Byline>;
    $[37] = onBack;
    $[38] = onForeground;
    $[39] = onKill;
    $[40] = teammate.status;
    $[41] = t16;
  } else {
    t16 = $[41];
  }
  let t17;
  if ($[42] !== teammate.progress || $[43] !== teammate.status || $[44] !== theme) {
    t17 = teammate.status === "running" && teammate.progress?.recentActivities && teammate.progress.recentActivities.length > 0 && <Box flexDirection="column"><Text bold={true} dimColor={true}>Progress</Text>{teammate.progress.recentActivities.map((activity_0, i) => <Text key={i} dimColor={i < teammate.progress.recentActivities.length - 1} wrap="truncate-end">{i === teammate.progress.recentActivities.length - 1 ? "\u203A " : "  "}{renderToolActivity(activity_0, tools, theme)}</Text>)}</Box>;
    $[42] = teammate.progress;
    $[43] = teammate.status;
    $[44] = theme;
    $[45] = t17;
  } else {
    t17 = $[45];
  }
  let t18;
  if ($[46] === Symbol.for("react.memo_cache_sentinel")) {
    t18 = <Text bold={true} dimColor={true}>Prompt</Text>;
    $[46] = t18;
  } else {
    t18 = $[46];
  }
  let t19;
  if ($[47] !== displayPrompt) {
    t19 = <Box flexDirection="column" marginTop={1}>{t18}<Text wrap="wrap">{displayPrompt}</Text></Box>;
    $[47] = displayPrompt;
    $[48] = t19;
  } else {
    t19 = $[48];
  }
  let t20;
  if ($[49] !== teammate.error || $[50] !== teammate.status) {
    t20 = teammate.status === "failed" && teammate.error && <Box flexDirection="column" marginTop={1}><Text bold={true} color="error">Error</Text><Text color="error" wrap="wrap">{teammate.error}</Text></Box>;
    $[49] = teammate.error;
    $[50] = teammate.status;
    $[51] = t20;
  } else {
    t20 = $[51];
  }
  let t21;
  if ($[52] !== onDone || $[53] !== subtitle || $[54] !== t16 || $[55] !== t17 || $[56] !== t19 || $[57] !== t20 || $[58] !== title) {
    t21 = <Dialog title={title} subtitle={subtitle} onCancel={onDone} color="background" inputGuide={t16}>{t17}{t19}{t20}</Dialog>;
    $[52] = onDone;
    $[53] = subtitle;
    $[54] = t16;
    $[55] = t17;
    $[56] = t19;
    $[57] = t20;
    $[58] = title;
    $[59] = t21;
  } else {
    t21 = $[59];
  }
  let t22;
  if ($[60] !== handleKeyDown || $[61] !== t21) {
    t22 = <Box flexDirection="column" tabIndex={0} autoFocus={true} onKeyDown={handleKeyDown}>{t21}</Box>;
    $[60] = handleKeyDown;
    $[61] = t21;
    $[62] = t22;
  } else {
    t22 = $[62];
  }
  return t22;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZU1lbW8iLCJEZWVwSW1tdXRhYmxlIiwidXNlRWxhcHNlZFRpbWUiLCJLZXlib2FyZEV2ZW50IiwiQm94IiwiVGV4dCIsInVzZVRoZW1lIiwidXNlS2V5YmluZGluZ3MiLCJnZXRFbXB0eVRvb2xQZXJtaXNzaW9uQ29udGV4dCIsIkluUHJvY2Vzc1RlYW1tYXRlVGFza1N0YXRlIiwiZ2V0VG9vbHMiLCJmb3JtYXROdW1iZXIiLCJ0cnVuY2F0ZVRvV2lkdGgiLCJ0b0lua0NvbG9yIiwiQnlsaW5lIiwiRGlhbG9nIiwiS2V5Ym9hcmRTaG9ydGN1dEhpbnQiLCJyZW5kZXJUb29sQWN0aXZpdHkiLCJkZXNjcmliZVRlYW1tYXRlQWN0aXZpdHkiLCJQcm9wcyIsInRlYW1tYXRlIiwib25Eb25lIiwib25LaWxsIiwib25CYWNrIiwib25Gb3JlZ3JvdW5kIiwiSW5Qcm9jZXNzVGVhbW1hdGVEZXRhaWxEaWFsb2ciLCJ0MCIsIiQiLCJfYyIsInRoZW1lIiwidDEiLCJTeW1ib2wiLCJmb3IiLCJ0b29scyIsImVsYXBzZWRUaW1lIiwic3RhcnRUaW1lIiwic3RhdHVzIiwidG90YWxQYXVzZWRNcyIsInQyIiwidDMiLCJjb250ZXh0IiwidDQiLCJlIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVLZXlEb3duIiwidDUiLCJhY3Rpdml0eSIsInRva2VuQ291bnQiLCJyZXN1bHQiLCJ0b3RhbFRva2VucyIsInByb2dyZXNzIiwidG9vbFVzZUNvdW50IiwidG90YWxUb29sVXNlQ291bnQiLCJ0NiIsInByb21wdCIsImRpc3BsYXlQcm9tcHQiLCJ0NyIsImlkZW50aXR5IiwiY29sb3IiLCJ0OCIsImFnZW50TmFtZSIsInQ5IiwidDEwIiwidGl0bGUiLCJ0MTEiLCJ0MTIiLCJ1bmRlZmluZWQiLCJ0MTMiLCJ0MTQiLCJ0MTUiLCJzdWJ0aXRsZSIsInQxNiIsImV4aXRTdGF0ZSIsInBlbmRpbmciLCJrZXlOYW1lIiwidDE3IiwicmVjZW50QWN0aXZpdGllcyIsImxlbmd0aCIsIm1hcCIsImFjdGl2aXR5XzAiLCJpIiwidDE4IiwidDE5IiwidDIwIiwiZXJyb3IiLCJ0MjEiLCJ0MjIiXSwic291cmNlcyI6WyJJblByb2Nlc3NUZWFtbWF0ZURldGFpbERpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRGVlcEltbXV0YWJsZSB9IGZyb20gJ3NyYy90eXBlcy91dGlscy5qcydcbmltcG9ydCB7IHVzZUVsYXBzZWRUaW1lIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRWxhcHNlZFRpbWUuanMnXG5pbXBvcnQgdHlwZSB7IEtleWJvYXJkRXZlbnQgfSBmcm9tICcuLi8uLi9pbmsvZXZlbnRzL2tleWJvYXJkLWV2ZW50LmpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VUaGVtZSB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7IHVzZUtleWJpbmRpbmdzIH0gZnJvbSAnLi4vLi4va2V5YmluZGluZ3MvdXNlS2V5YmluZGluZy5qcydcbmltcG9ydCB7IGdldEVtcHR5VG9vbFBlcm1pc3Npb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB0eXBlIHsgSW5Qcm9jZXNzVGVhbW1hdGVUYXNrU3RhdGUgfSBmcm9tICcuLi8uLi90YXNrcy9JblByb2Nlc3NUZWFtbWF0ZVRhc2svdHlwZXMuanMnXG5pbXBvcnQgeyBnZXRUb29scyB9IGZyb20gJy4uLy4uL3Rvb2xzLmpzJ1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCB0cnVuY2F0ZVRvV2lkdGggfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXQuanMnXG5pbXBvcnQgeyB0b0lua0NvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5rLmpzJ1xuaW1wb3J0IHsgQnlsaW5lIH0gZnJvbSAnLi4vZGVzaWduLXN5c3RlbS9CeWxpbmUuanMnXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuLi9kZXNpZ24tc3lzdGVtL0RpYWxvZy5qcydcbmltcG9ydCB7IEtleWJvYXJkU2hvcnRjdXRIaW50IH0gZnJvbSAnLi4vZGVzaWduLXN5c3RlbS9LZXlib2FyZFNob3J0Y3V0SGludC5qcydcbmltcG9ydCB7IHJlbmRlclRvb2xBY3Rpdml0eSB9IGZyb20gJy4vcmVuZGVyVG9vbEFjdGl2aXR5LmpzJ1xuaW1wb3J0IHsgZGVzY3JpYmVUZWFtbWF0ZUFjdGl2aXR5IH0gZnJvbSAnLi90YXNrU3RhdHVzVXRpbHMuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHRlYW1tYXRlOiBEZWVwSW1tdXRhYmxlPEluUHJvY2Vzc1RlYW1tYXRlVGFza1N0YXRlPlxuICBvbkRvbmU6ICgpID0+IHZvaWRcbiAgb25LaWxsPzogKCkgPT4gdm9pZFxuICBvbkJhY2s/OiAoKSA9PiB2b2lkXG4gIG9uRm9yZWdyb3VuZD86ICgpID0+IHZvaWRcbn1cbmV4cG9ydCBmdW5jdGlvbiBJblByb2Nlc3NUZWFtbWF0ZURldGFpbERpYWxvZyh7XG4gIHRlYW1tYXRlLFxuICBvbkRvbmUsXG4gIG9uS2lsbCxcbiAgb25CYWNrLFxuICBvbkZvcmVncm91bmQsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFt0aGVtZV0gPSB1c2VUaGVtZSgpXG4gIGNvbnN0IHRvb2xzID0gdXNlTWVtbygoKSA9PiBnZXRUb29scyhnZXRFbXB0eVRvb2xQZXJtaXNzaW9uQ29udGV4dCgpKSwgW10pXG5cbiAgY29uc3QgZWxhcHNlZFRpbWUgPSB1c2VFbGFwc2VkVGltZShcbiAgICB0ZWFtbWF0ZS5zdGFydFRpbWUsXG4gICAgdGVhbW1hdGUuc3RhdHVzID09PSAncnVubmluZycsXG4gICAgMTAwMCxcbiAgICB0ZWFtbWF0ZS50b3RhbFBhdXNlZE1zID8/IDAsXG4gIClcblxuICAvLyBSZXN0b3JlIGNvbmZpcm06eWVzIChFbnRlci95KSBkaXNtaXNzYWwg4oCUIERpYWxvZyBoYW5kbGVzIGNvbmZpcm06bm8gKEVzYylcbiAgdXNlS2V5YmluZGluZ3MoXG4gICAge1xuICAgICAgJ2NvbmZpcm06eWVzJzogb25Eb25lLFxuICAgIH0sXG4gICAgeyBjb250ZXh0OiAnQ29uZmlybWF0aW9uJyB9LFxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnICcpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgb25Eb25lKClcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnbGVmdCcgJiYgb25CYWNrKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIG9uQmFjaygpXG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ3gnICYmIHRlYW1tYXRlLnN0YXR1cyA9PT0gJ3J1bm5pbmcnICYmIG9uS2lsbCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBvbktpbGwoKVxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdmJyAmJiB0ZWFtbWF0ZS5zdGF0dXMgPT09ICdydW5uaW5nJyAmJiBvbkZvcmVncm91bmQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgb25Gb3JlZ3JvdW5kKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBhY3Rpdml0eSA9IGRlc2NyaWJlVGVhbW1hdGVBY3Rpdml0eSh0ZWFtbWF0ZSlcblxuICBjb25zdCB0b2tlbkNvdW50ID1cbiAgICB0ZWFtbWF0ZS5yZXN1bHQ/LnRvdGFsVG9rZW5zID8/IHRlYW1tYXRlLnByb2dyZXNzPy50b2tlbkNvdW50XG4gIGNvbnN0IHRvb2xVc2VDb3VudCA9XG4gICAgdGVhbW1hdGUucmVzdWx0Py50b3RhbFRvb2xVc2VDb3VudCA/PyB0ZWFtbWF0ZS5wcm9ncmVzcz8udG9vbFVzZUNvdW50XG5cbiAgY29uc3QgZGlzcGxheVByb21wdCA9IHRydW5jYXRlVG9XaWR0aCh0ZWFtbWF0ZS5wcm9tcHQsIDMwMClcblxuICBjb25zdCB0aXRsZSA9IChcbiAgICA8VGV4dD5cbiAgICAgIDxUZXh0IGNvbG9yPXt0b0lua0NvbG9yKHRlYW1tYXRlLmlkZW50aXR5LmNvbG9yKX0+XG4gICAgICAgIEB7dGVhbW1hdGUuaWRlbnRpdHkuYWdlbnROYW1lfVxuICAgICAgPC9UZXh0PlxuICAgICAge2FjdGl2aXR5ICYmIDxUZXh0IGRpbUNvbG9yPiAoe2FjdGl2aXR5fSk8L1RleHQ+fVxuICAgIDwvVGV4dD5cbiAgKVxuXG4gIGNvbnN0IHN1YnRpdGxlID0gKFxuICAgIDxUZXh0PlxuICAgICAge3RlYW1tYXRlLnN0YXR1cyAhPT0gJ3J1bm5pbmcnICYmIChcbiAgICAgICAgPFRleHRcbiAgICAgICAgICBjb2xvcj17XG4gICAgICAgICAgICB0ZWFtbWF0ZS5zdGF0dXMgPT09ICdjb21wbGV0ZWQnXG4gICAgICAgICAgICAgID8gJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgIDogdGVhbW1hdGUuc3RhdHVzID09PSAna2lsbGVkJ1xuICAgICAgICAgICAgICAgID8gJ3dhcm5pbmcnXG4gICAgICAgICAgICAgICAgOiAnZXJyb3InXG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAge3RlYW1tYXRlLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCdcbiAgICAgICAgICAgID8gJ0NvbXBsZXRlZCdcbiAgICAgICAgICAgIDogdGVhbW1hdGUuc3RhdHVzID09PSAnZmFpbGVkJ1xuICAgICAgICAgICAgICA/ICdGYWlsZWQnXG4gICAgICAgICAgICAgIDogJ1N0b3BwZWQnfVxuICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICl9XG4gICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAge2VsYXBzZWRUaW1lfVxuICAgICAgICB7dG9rZW5Db3VudCAhPT0gdW5kZWZpbmVkICYmIHRva2VuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8PiDCtyB7Zm9ybWF0TnVtYmVyKHRva2VuQ291bnQpfSB0b2tlbnM8Lz5cbiAgICAgICAgKX1cbiAgICAgICAge3Rvb2xVc2VDb3VudCAhPT0gdW5kZWZpbmVkICYmIHRvb2xVc2VDb3VudCA+IDAgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgwrcge3Rvb2xVc2VDb3VudH0ge3Rvb2xVc2VDb3VudCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1RleHQ+XG4gICAgPC9UZXh0PlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Qm94XG4gICAgICBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCJcbiAgICAgIHRhYkluZGV4PXswfVxuICAgICAgYXV0b0ZvY3VzXG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgPlxuICAgICAgPERpYWxvZ1xuICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgIHN1YnRpdGxlPXtzdWJ0aXRsZX1cbiAgICAgICAgb25DYW5jZWw9e29uRG9uZX1cbiAgICAgICAgY29sb3I9XCJiYWNrZ3JvdW5kXCJcbiAgICAgICAgaW5wdXRHdWlkZT17ZXhpdFN0YXRlID0+XG4gICAgICAgICAgZXhpdFN0YXRlLnBlbmRpbmcgPyAoXG4gICAgICAgICAgICA8VGV4dD5QcmVzcyB7ZXhpdFN0YXRlLmtleU5hbWV9IGFnYWluIHRvIGV4aXQ8L1RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxCeWxpbmU+XG4gICAgICAgICAgICAgIHtvbkJhY2sgJiYgPEtleWJvYXJkU2hvcnRjdXRIaW50IHNob3J0Y3V0PVwi4oaQXCIgYWN0aW9uPVwiZ28gYmFja1wiIC8+fVxuICAgICAgICAgICAgICA8S2V5Ym9hcmRTaG9ydGN1dEhpbnQgc2hvcnRjdXQ9XCJFc2MvRW50ZXIvU3BhY2VcIiBhY3Rpb249XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgIHt0ZWFtbWF0ZS5zdGF0dXMgPT09ICdydW5uaW5nJyAmJiBvbktpbGwgJiYgKFxuICAgICAgICAgICAgICAgIDxLZXlib2FyZFNob3J0Y3V0SGludCBzaG9ydGN1dD1cInhcIiBhY3Rpb249XCJzdG9wXCIgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3RlYW1tYXRlLnN0YXR1cyA9PT0gJ3J1bm5pbmcnICYmIG9uRm9yZWdyb3VuZCAmJiAoXG4gICAgICAgICAgICAgICAgPEtleWJvYXJkU2hvcnRjdXRIaW50IHNob3J0Y3V0PVwiZlwiIGFjdGlvbj1cImZvcmVncm91bmRcIiAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9CeWxpbmU+XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIHsvKiBSZWNlbnQgYWN0aXZpdGllcyBmb3IgcnVubmluZyB0ZWFtbWF0ZXMgKi99XG4gICAgICAgIHt0ZWFtbWF0ZS5zdGF0dXMgPT09ICdydW5uaW5nJyAmJlxuICAgICAgICAgIHRlYW1tYXRlLnByb2dyZXNzPy5yZWNlbnRBY3Rpdml0aWVzICYmXG4gICAgICAgICAgdGVhbW1hdGUucHJvZ3Jlc3MucmVjZW50QWN0aXZpdGllcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8VGV4dCBib2xkIGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgIFByb2dyZXNzXG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAge3RlYW1tYXRlLnByb2dyZXNzLnJlY2VudEFjdGl2aXRpZXMubWFwKChhY3Rpdml0eSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgICAgICBrZXk9e2l9XG4gICAgICAgICAgICAgICAgICBkaW1Db2xvcj17aSA8IHRlYW1tYXRlLnByb2dyZXNzIS5yZWNlbnRBY3Rpdml0aWVzIS5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgd3JhcD1cInRydW5jYXRlLWVuZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2kgPT09IHRlYW1tYXRlLnByb2dyZXNzIS5yZWNlbnRBY3Rpdml0aWVzIS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ+KAuiAnXG4gICAgICAgICAgICAgICAgICAgIDogJyAgJ31cbiAgICAgICAgICAgICAgICAgIHtyZW5kZXJUb29sQWN0aXZpdHkoYWN0aXZpdHksIHRvb2xzLCB0aGVtZSl9XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgey8qIFByb21wdCBzZWN0aW9uICovfVxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9ezF9PlxuICAgICAgICAgIDxUZXh0IGJvbGQgZGltQ29sb3I+XG4gICAgICAgICAgICBQcm9tcHRcbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgd3JhcD1cIndyYXBcIj57ZGlzcGxheVByb21wdH08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuXG4gICAgICAgIHsvKiBFcnJvciBkZXRhaWxzIGlmIGZhaWxlZCAqL31cbiAgICAgICAge3RlYW1tYXRlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcgJiYgdGVhbW1hdGUuZXJyb3IgJiYgKFxuICAgICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17MX0+XG4gICAgICAgICAgICA8VGV4dCBib2xkIGNvbG9yPVwiZXJyb3JcIj5cbiAgICAgICAgICAgICAgRXJyb3JcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGNvbG9yPVwiZXJyb3JcIiB3cmFwPVwid3JhcFwiPlxuICAgICAgICAgICAgICB7dGVhbW1hdGUuZXJyb3J9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICl9XG4gICAgICA8L0RpYWxvZz5cbiAgICA8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