the claude code sourcemaps leaked march 31
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 404 lines 39 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import React, { Suspense, use, useDeferredValue, useEffect, useState } from 'react'; 3import type { DeepImmutable } from 'src/types/utils.js'; 4import type { CommandResultDisplay } from '../../commands.js'; 5import { useTerminalSize } from '../../hooks/useTerminalSize.js'; 6import type { KeyboardEvent } from '../../ink/events/keyboard-event.js'; 7import { Box, Text } from '../../ink.js'; 8import { useKeybindings } from '../../keybindings/useKeybinding.js'; 9import type { LocalShellTaskState } from '../../tasks/LocalShellTask/guards.js'; 10import { formatDuration, formatFileSize, truncateToWidth } from '../../utils/format.js'; 11import { tailFile } from '../../utils/fsOperations.js'; 12import { getTaskOutputPath } from '../../utils/task/diskOutput.js'; 13import { Byline } from '../design-system/Byline.js'; 14import { Dialog } from '../design-system/Dialog.js'; 15import { KeyboardShortcutHint } from '../design-system/KeyboardShortcutHint.js'; 16type Props = { 17 shell: DeepImmutable<LocalShellTaskState>; 18 onDone: (result?: string, options?: { 19 display?: CommandResultDisplay; 20 }) => void; 21 onKillShell?: () => void; 22 onBack?: () => void; 23}; 24const SHELL_DETAIL_TAIL_BYTES = 8192; 25type TaskOutputResult = { 26 content: string; 27 bytesTotal: number; 28}; 29 30/** 31 * Read the tail of the task output file. Only reads the last few KB, 32 * not the entire file. 33 */ 34async function getTaskOutput(shell: DeepImmutable<LocalShellTaskState>): Promise<TaskOutputResult> { 35 const path = getTaskOutputPath(shell.id); 36 try { 37 const result = await tailFile(path, SHELL_DETAIL_TAIL_BYTES); 38 return { 39 content: result.content, 40 bytesTotal: result.bytesTotal 41 }; 42 } catch { 43 return { 44 content: '', 45 bytesTotal: 0 46 }; 47 } 48} 49export function ShellDetailDialog(t0) { 50 const $ = _c(57); 51 const { 52 shell, 53 onDone, 54 onKillShell, 55 onBack 56 } = t0; 57 const { 58 columns 59 } = useTerminalSize(); 60 let t1; 61 if ($[0] !== shell) { 62 t1 = () => getTaskOutput(shell); 63 $[0] = shell; 64 $[1] = t1; 65 } else { 66 t1 = $[1]; 67 } 68 const [outputPromise, setOutputPromise] = useState(t1); 69 const deferredOutputPromise = useDeferredValue(outputPromise); 70 let t2; 71 if ($[2] !== shell) { 72 t2 = () => { 73 if (shell.status !== "running") { 74 return; 75 } 76 const timer = setInterval(_temp, 1000, setOutputPromise, shell); 77 return () => clearInterval(timer); 78 }; 79 $[2] = shell; 80 $[3] = t2; 81 } else { 82 t2 = $[3]; 83 } 84 let t3; 85 if ($[4] !== shell.id || $[5] !== shell.status) { 86 t3 = [shell.id, shell.status]; 87 $[4] = shell.id; 88 $[5] = shell.status; 89 $[6] = t3; 90 } else { 91 t3 = $[6]; 92 } 93 useEffect(t2, t3); 94 let t4; 95 if ($[7] !== onDone) { 96 t4 = () => onDone("Shell details dismissed", { 97 display: "system" 98 }); 99 $[7] = onDone; 100 $[8] = t4; 101 } else { 102 t4 = $[8]; 103 } 104 const handleClose = t4; 105 let t5; 106 if ($[9] !== handleClose) { 107 t5 = { 108 "confirm:yes": handleClose 109 }; 110 $[9] = handleClose; 111 $[10] = t5; 112 } else { 113 t5 = $[10]; 114 } 115 let t6; 116 if ($[11] === Symbol.for("react.memo_cache_sentinel")) { 117 t6 = { 118 context: "Confirmation" 119 }; 120 $[11] = t6; 121 } else { 122 t6 = $[11]; 123 } 124 useKeybindings(t5, t6); 125 let t7; 126 if ($[12] !== onBack || $[13] !== onDone || $[14] !== onKillShell || $[15] !== shell.status) { 127 t7 = e => { 128 if (e.key === " ") { 129 e.preventDefault(); 130 onDone("Shell details dismissed", { 131 display: "system" 132 }); 133 } else { 134 if (e.key === "left" && onBack) { 135 e.preventDefault(); 136 onBack(); 137 } else { 138 if (e.key === "x" && shell.status === "running" && onKillShell) { 139 e.preventDefault(); 140 onKillShell(); 141 } 142 } 143 } 144 }; 145 $[12] = onBack; 146 $[13] = onDone; 147 $[14] = onKillShell; 148 $[15] = shell.status; 149 $[16] = t7; 150 } else { 151 t7 = $[16]; 152 } 153 const handleKeyDown = t7; 154 const isMonitor = shell.kind === "monitor"; 155 let t8; 156 if ($[17] !== shell.command) { 157 t8 = truncateToWidth(shell.command, 280); 158 $[17] = shell.command; 159 $[18] = t8; 160 } else { 161 t8 = $[18]; 162 } 163 const displayCommand = t8; 164 const t9 = isMonitor ? "Monitor details" : "Shell details"; 165 let t10; 166 if ($[19] !== onBack || $[20] !== onKillShell || $[21] !== shell.status) { 167 t10 = 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" />{shell.status === "running" && onKillShell && <KeyboardShortcutHint shortcut="x" action="stop" />}</Byline>; 168 $[19] = onBack; 169 $[20] = onKillShell; 170 $[21] = shell.status; 171 $[22] = t10; 172 } else { 173 t10 = $[22]; 174 } 175 let t11; 176 if ($[23] === Symbol.for("react.memo_cache_sentinel")) { 177 t11 = <Text bold={true}>Status:</Text>; 178 $[23] = t11; 179 } else { 180 t11 = $[23]; 181 } 182 let t12; 183 if ($[24] !== shell.result || $[25] !== shell.status) { 184 t12 = <Text>{t11}{" "}{shell.status === "running" ? <Text color="background">{shell.status}{shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`}</Text> : shell.status === "completed" ? <Text color="success">{shell.status}{shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`}</Text> : <Text color="error">{shell.status}{shell.result?.code !== undefined && ` (exit code: ${shell.result.code})`}</Text>}</Text>; 185 $[24] = shell.result; 186 $[25] = shell.status; 187 $[26] = t12; 188 } else { 189 t12 = $[26]; 190 } 191 let t13; 192 if ($[27] === Symbol.for("react.memo_cache_sentinel")) { 193 t13 = <Text bold={true}>Runtime:</Text>; 194 $[27] = t13; 195 } else { 196 t13 = $[27]; 197 } 198 let t14; 199 if ($[28] !== shell.endTime) { 200 t14 = shell.endTime ?? Date.now(); 201 $[28] = shell.endTime; 202 $[29] = t14; 203 } else { 204 t14 = $[29]; 205 } 206 const t15 = t14 - shell.startTime; 207 let t16; 208 if ($[30] !== t15) { 209 t16 = formatDuration(t15); 210 $[30] = t15; 211 $[31] = t16; 212 } else { 213 t16 = $[31]; 214 } 215 let t17; 216 if ($[32] !== t16) { 217 t17 = <Text>{t13}{" "}{t16}</Text>; 218 $[32] = t16; 219 $[33] = t17; 220 } else { 221 t17 = $[33]; 222 } 223 const t18 = isMonitor ? "Script:" : "Command:"; 224 let t19; 225 if ($[34] !== t18) { 226 t19 = <Text bold={true}>{t18}</Text>; 227 $[34] = t18; 228 $[35] = t19; 229 } else { 230 t19 = $[35]; 231 } 232 let t20; 233 if ($[36] !== displayCommand || $[37] !== t19) { 234 t20 = <Text wrap="wrap">{t19}{" "}{displayCommand}</Text>; 235 $[36] = displayCommand; 236 $[37] = t19; 237 $[38] = t20; 238 } else { 239 t20 = $[38]; 240 } 241 let t21; 242 if ($[39] !== t12 || $[40] !== t17 || $[41] !== t20) { 243 t21 = <Box flexDirection="column">{t12}{t17}{t20}</Box>; 244 $[39] = t12; 245 $[40] = t17; 246 $[41] = t20; 247 $[42] = t21; 248 } else { 249 t21 = $[42]; 250 } 251 let t22; 252 if ($[43] === Symbol.for("react.memo_cache_sentinel")) { 253 t22 = <Text bold={true}>Output:</Text>; 254 $[43] = t22; 255 } else { 256 t22 = $[43]; 257 } 258 let t23; 259 if ($[44] === Symbol.for("react.memo_cache_sentinel")) { 260 t23 = <Text dimColor={true}>Loading output</Text>; 261 $[44] = t23; 262 } else { 263 t23 = $[44]; 264 } 265 let t24; 266 if ($[45] !== columns || $[46] !== deferredOutputPromise) { 267 t24 = <Box flexDirection="column">{t22}<Suspense fallback={t23}><ShellOutputContent outputPromise={deferredOutputPromise} columns={columns} /></Suspense></Box>; 268 $[45] = columns; 269 $[46] = deferredOutputPromise; 270 $[47] = t24; 271 } else { 272 t24 = $[47]; 273 } 274 let t25; 275 if ($[48] !== handleClose || $[49] !== t10 || $[50] !== t21 || $[51] !== t24 || $[52] !== t9) { 276 t25 = <Dialog title={t9} onCancel={handleClose} color="background" inputGuide={t10}>{t21}{t24}</Dialog>; 277 $[48] = handleClose; 278 $[49] = t10; 279 $[50] = t21; 280 $[51] = t24; 281 $[52] = t9; 282 $[53] = t25; 283 } else { 284 t25 = $[53]; 285 } 286 let t26; 287 if ($[54] !== handleKeyDown || $[55] !== t25) { 288 t26 = <Box flexDirection="column" tabIndex={0} autoFocus={true} onKeyDown={handleKeyDown}>{t25}</Box>; 289 $[54] = handleKeyDown; 290 $[55] = t25; 291 $[56] = t26; 292 } else { 293 t26 = $[56]; 294 } 295 return t26; 296} 297function _temp(setOutputPromise_0, shell_0) { 298 return setOutputPromise_0(getTaskOutput(shell_0)); 299} 300type ShellOutputContentProps = { 301 outputPromise: Promise<TaskOutputResult>; 302 columns: number; 303}; 304function ShellOutputContent(t0) { 305 const $ = _c(19); 306 const { 307 outputPromise, 308 columns 309 } = t0; 310 const { 311 content, 312 bytesTotal 313 } = use(outputPromise); 314 if (!content) { 315 let t1; 316 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 317 t1 = <Text dimColor={true}>No output available</Text>; 318 $[0] = t1; 319 } else { 320 t1 = $[0]; 321 } 322 return t1; 323 } 324 let isIncomplete; 325 let rendered; 326 if ($[1] !== bytesTotal || $[2] !== content) { 327 const starts = []; 328 let pos = content.length; 329 for (let i = 0; i < 10 && pos > 0; i++) { 330 const prev = content.lastIndexOf("\n", pos - 1); 331 starts.push(prev + 1); 332 pos = prev; 333 } 334 starts.reverse(); 335 isIncomplete = bytesTotal > content.length; 336 rendered = []; 337 for (let i_0 = 0; i_0 < starts.length; i_0++) { 338 const start = starts[i_0]; 339 const end = i_0 < starts.length - 1 ? starts[i_0 + 1] - 1 : content.length; 340 const line = content.slice(start, end); 341 if (line) { 342 rendered.push(line); 343 } 344 } 345 $[1] = bytesTotal; 346 $[2] = content; 347 $[3] = isIncomplete; 348 $[4] = rendered; 349 } else { 350 isIncomplete = $[3]; 351 rendered = $[4]; 352 } 353 const t1 = columns - 6; 354 let t2; 355 if ($[5] !== rendered) { 356 t2 = rendered.map(_temp2); 357 $[5] = rendered; 358 $[6] = t2; 359 } else { 360 t2 = $[6]; 361 } 362 let t3; 363 if ($[7] !== t1 || $[8] !== t2) { 364 t3 = <Box borderStyle="round" paddingX={1} flexDirection="column" height={12} maxWidth={t1}>{t2}</Box>; 365 $[7] = t1; 366 $[8] = t2; 367 $[9] = t3; 368 } else { 369 t3 = $[9]; 370 } 371 const t4 = `Showing ${rendered.length} lines`; 372 let t5; 373 if ($[10] !== bytesTotal || $[11] !== isIncomplete) { 374 t5 = isIncomplete ? ` of ${formatFileSize(bytesTotal)}` : ""; 375 $[10] = bytesTotal; 376 $[11] = isIncomplete; 377 $[12] = t5; 378 } else { 379 t5 = $[12]; 380 } 381 let t6; 382 if ($[13] !== t4 || $[14] !== t5) { 383 t6 = <Text dimColor={true} italic={true}>{t4}{t5}</Text>; 384 $[13] = t4; 385 $[14] = t5; 386 $[15] = t6; 387 } else { 388 t6 = $[15]; 389 } 390 let t7; 391 if ($[16] !== t3 || $[17] !== t6) { 392 t7 = <>{t3}{t6}</>; 393 $[16] = t3; 394 $[17] = t6; 395 $[18] = t7; 396 } else { 397 t7 = $[18]; 398 } 399 return t7; 400} 401function _temp2(line_0, i_1) { 402 return <Text key={i_1} wrap="truncate-end">{line_0}</Text>; 403} 404//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIlN1c3BlbnNlIiwidXNlIiwidXNlRGVmZXJyZWRWYWx1ZSIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiRGVlcEltbXV0YWJsZSIsIkNvbW1hbmRSZXN1bHREaXNwbGF5IiwidXNlVGVybWluYWxTaXplIiwiS2V5Ym9hcmRFdmVudCIsIkJveCIsIlRleHQiLCJ1c2VLZXliaW5kaW5ncyIsIkxvY2FsU2hlbGxUYXNrU3RhdGUiLCJmb3JtYXREdXJhdGlvbiIsImZvcm1hdEZpbGVTaXplIiwidHJ1bmNhdGVUb1dpZHRoIiwidGFpbEZpbGUiLCJnZXRUYXNrT3V0cHV0UGF0aCIsIkJ5bGluZSIsIkRpYWxvZyIsIktleWJvYXJkU2hvcnRjdXRIaW50IiwiUHJvcHMiLCJzaGVsbCIsIm9uRG9uZSIsInJlc3VsdCIsIm9wdGlvbnMiLCJkaXNwbGF5Iiwib25LaWxsU2hlbGwiLCJvbkJhY2siLCJTSEVMTF9ERVRBSUxfVEFJTF9CWVRFUyIsIlRhc2tPdXRwdXRSZXN1bHQiLCJjb250ZW50IiwiYnl0ZXNUb3RhbCIsImdldFRhc2tPdXRwdXQiLCJQcm9taXNlIiwicGF0aCIsImlkIiwiU2hlbGxEZXRhaWxEaWFsb2ciLCJ0MCIsIiQiLCJfYyIsImNvbHVtbnMiLCJ0MSIsIm91dHB1dFByb21pc2UiLCJzZXRPdXRwdXRQcm9taXNlIiwiZGVmZXJyZWRPdXRwdXRQcm9taXNlIiwidDIiLCJzdGF0dXMiLCJ0aW1lciIsInNldEludGVydmFsIiwiX3RlbXAiLCJjbGVhckludGVydmFsIiwidDMiLCJ0NCIsImhhbmRsZUNsb3NlIiwidDUiLCJ0NiIsIlN5bWJvbCIsImZvciIsImNvbnRleHQiLCJ0NyIsImUiLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZUtleURvd24iLCJpc01vbml0b3IiLCJraW5kIiwidDgiLCJjb21tYW5kIiwiZGlzcGxheUNvbW1hbmQiLCJ0OSIsInQxMCIsImV4aXRTdGF0ZSIsInBlbmRpbmciLCJrZXlOYW1lIiwidDExIiwidDEyIiwiY29kZSIsInVuZGVmaW5lZCIsInQxMyIsInQxNCIsImVuZFRpbWUiLCJEYXRlIiwibm93IiwidDE1Iiwic3RhcnRUaW1lIiwidDE2IiwidDE3IiwidDE4IiwidDE5IiwidDIwIiwidDIxIiwidDIyIiwidDIzIiwidDI0IiwidDI1IiwidDI2Iiwic2V0T3V0cHV0UHJvbWlzZV8wIiwic2hlbGxfMCIsIlNoZWxsT3V0cHV0Q29udGVudFByb3BzIiwiU2hlbGxPdXRwdXRDb250ZW50IiwiaXNJbmNvbXBsZXRlIiwicmVuZGVyZWQiLCJzdGFydHMiLCJwb3MiLCJsZW5ndGgiLCJpIiwicHJldiIsImxhc3RJbmRleE9mIiwicHVzaCIsInJldmVyc2UiLCJpXzAiLCJzdGFydCIsImVuZCIsImxpbmUiLCJzbGljZSIsIm1hcCIsIl90ZW1wMiIsImxpbmVfMCIsImlfMSJdLCJzb3VyY2VzIjpbIlNoZWxsRGV0YWlsRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgU3VzcGVuc2UsXG4gIHVzZSxcbiAgdXNlRGVmZXJyZWRWYWx1ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERlZXBJbW11dGFibGUgfSBmcm9tICdzcmMvdHlwZXMvdXRpbHMuanMnXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRSZXN1bHREaXNwbGF5IH0gZnJvbSAnLi4vLi4vY29tbWFuZHMuanMnXG5pbXBvcnQgeyB1c2VUZXJtaW5hbFNpemUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VUZXJtaW5hbFNpemUuanMnXG5pbXBvcnQgdHlwZSB7IEtleWJvYXJkRXZlbnQgfSBmcm9tICcuLi8uLi9pbmsvZXZlbnRzL2tleWJvYXJkLWV2ZW50LmpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdXNlS2V5YmluZGluZ3MgfSBmcm9tICcuLi8uLi9rZXliaW5kaW5ncy91c2VLZXliaW5kaW5nLmpzJ1xuaW1wb3J0IHR5cGUgeyBMb2NhbFNoZWxsVGFza1N0YXRlIH0gZnJvbSAnLi4vLi4vdGFza3MvTG9jYWxTaGVsbFRhc2svZ3VhcmRzLmpzJ1xuaW1wb3J0IHtcbiAgZm9ybWF0RHVyYXRpb24sXG4gIGZvcm1hdEZpbGVTaXplLFxuICB0cnVuY2F0ZVRvV2lkdGgsXG59IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdC5qcydcbmltcG9ydCB7IHRhaWxGaWxlIH0gZnJvbSAnLi4vLi4vdXRpbHMvZnNPcGVyYXRpb25zLmpzJ1xuaW1wb3J0IHsgZ2V0VGFza091dHB1dFBhdGggfSBmcm9tICcuLi8uLi91dGlscy90YXNrL2Rpc2tPdXRwdXQuanMnXG5pbXBvcnQgeyBCeWxpbmUgfSBmcm9tICcuLi9kZXNpZ24tc3lzdGVtL0J5bGluZS5qcydcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJy4uL2Rlc2lnbi1zeXN0ZW0vRGlhbG9nLmpzJ1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dEhpbnQgfSBmcm9tICcuLi9kZXNpZ24tc3lzdGVtL0tleWJvYXJkU2hvcnRjdXRIaW50LmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBzaGVsbDogRGVlcEltbXV0YWJsZTxMb2NhbFNoZWxsVGFza1N0YXRlPlxuICBvbkRvbmU6IChcbiAgICByZXN1bHQ/OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgZGlzcGxheT86IENvbW1hbmRSZXN1bHREaXNwbGF5IH0sXG4gICkgPT4gdm9pZFxuICBvbktpbGxTaGVsbD86ICgpID0+IHZvaWRcbiAgb25CYWNrPzogKCkgPT4gdm9pZFxufVxuXG5jb25zdCBTSEVMTF9ERVRBSUxfVEFJTF9CWVRFUyA9IDgxOTJcblxudHlwZSBUYXNrT3V0cHV0UmVzdWx0ID0ge1xuICBjb250ZW50OiBzdHJpbmdcbiAgYnl0ZXNUb3RhbDogbnVtYmVyXG59XG5cbi8qKlxuICogUmVhZCB0aGUgdGFpbCBvZiB0aGUgdGFzayBvdXRwdXQgZmlsZS4gT25seSByZWFkcyB0aGUgbGFzdCBmZXcgS0IsXG4gKiBub3QgdGhlIGVudGlyZSBmaWxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRUYXNrT3V0cHV0KFxuICBzaGVsbDogRGVlcEltbXV0YWJsZTxMb2NhbFNoZWxsVGFza1N0YXRlPixcbik6IFByb21pc2U8VGFza091dHB1dFJlc3VsdD4ge1xuICBjb25zdCBwYXRoID0gZ2V0VGFza091dHB1dFBhdGgoc2hlbGwuaWQpXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGFpbEZpbGUocGF0aCwgU0hFTExfREVUQUlMX1RBSUxfQllURVMpXG4gICAgcmV0dXJuIHsgY29udGVudDogcmVzdWx0LmNvbnRlbnQsIGJ5dGVzVG90YWw6IHJlc3VsdC5ieXRlc1RvdGFsIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgY29udGVudDogJycsIGJ5dGVzVG90YWw6IDAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTaGVsbERldGFpbERpYWxvZyh7XG4gIHNoZWxsLFxuICBvbkRvbmUsXG4gIG9uS2lsbFNoZWxsLFxuICBvbkJhY2ssXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgY29sdW1ucyB9ID0gdXNlVGVybWluYWxTaXplKClcblxuICAvLyBQcm9taXNlIGNyZWF0ZWQgaW4gaW5pdGlhbGl6ZXIgKG5vdCBkdXJpbmcgcmVuZGVyKS4gRm9yIHJ1bm5pbmcgc2hlbGxzLFxuICAvLyB0aGUgZWZmZWN0IHRpbWVyIHJlcGxhY2VzIGl0IHBlcmlvZGljYWxseSB0byBwaWNrIHVwIG5ldyBvdXRwdXQuXG4gIC8vIHVzZURlZmVycmVkVmFsdWUga2VlcHMgc2hvd2luZyB0aGUgcHJldmlvdXMgb3V0cHV0IHdoaWxlIHRoZSBuZXcgcHJvbWlzZVxuICAvLyByZXNvbHZlcywgcHJldmVudGluZyB0aGUgU3VzcGVuc2UgZmFsbGJhY2sgZnJvbSBmbGlja2VyaW5nLlxuICBjb25zdCBbb3V0cHV0UHJvbWlzZSwgc2V0T3V0cHV0UHJvbWlzZV0gPSB1c2VTdGF0ZTxQcm9taXNlPFRhc2tPdXRwdXRSZXN1bHQ+PihcbiAgICAoKSA9PiBnZXRUYXNrT3V0cHV0KHNoZWxsKSxcbiAgKVxuICBjb25zdCBkZWZlcnJlZE91dHB1dFByb21pc2UgPSB1c2VEZWZlcnJlZFZhbHVlKG91dHB1dFByb21pc2UpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hlbGwuc3RhdHVzICE9PSAncnVubmluZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKFxuICAgICAgKHNldE91dHB1dFByb21pc2UsIHNoZWxsKSA9PiBzZXRPdXRwdXRQcm9taXNlKGdldFRhc2tPdXRwdXQoc2hlbGwpKSxcbiAgICAgIDEwMDAsXG4gICAgICBzZXRPdXRwdXRQcm9taXNlLFxuICAgICAgc2hlbGwsXG4gICAgKVxuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKHRpbWVyKVxuICB9LCBbc2hlbGwuaWQsIHNoZWxsLnN0YXR1c10pXG5cbiAgLy8gSGFuZGxlIHN0YW5kYXJkIGNsb3NlIGFjdGlvblxuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+XG4gICAgb25Eb25lKCdTaGVsbCBkZXRhaWxzIGRpc21pc3NlZCcsIHsgZGlzcGxheTogJ3N5c3RlbScgfSlcblxuICAvLyBIYW5kbGUgYWRkaXRpb25hbCBjbG9zZSBhY3Rpb25zIGJleW9uZCBEaWFsb2cncyBidWlsdC1pbiBFc2MgaGFuZGxlclxuICB1c2VLZXliaW5kaW5ncyhcbiAgICB7XG4gICAgICAnY29uZmlybTp5ZXMnOiBoYW5kbGVDbG9zZSxcbiAgICB9LFxuICAgIHsgY29udGV4dDogJ0NvbmZpcm1hdGlvbicgfSxcbiAgKVxuXG4gIC8vIEhhbmRsZSBkaWFsb2ctc3BlY2lmaWMga2V5c1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICcgJykge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBvbkRvbmUoJ1NoZWxsIGRldGFpbHMgZGlzbWlzc2VkJywgeyBkaXNwbGF5OiAnc3lzdGVtJyB9KVxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdsZWZ0JyAmJiBvbkJhY2spIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgb25CYWNrKClcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAneCcgJiYgc2hlbGwuc3RhdHVzID09PSAncnVubmluZycgJiYgb25LaWxsU2hlbGwpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgb25LaWxsU2hlbGwoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFRydW5jYXRlIGNvbW1hbmQgaWYgdG9vIGxvbmcgKGZvciBkaXNwbGF5IHB1cnBvc2VzKVxuICBjb25zdCBpc01vbml0b3IgPSBzaGVsbC5raW5kID09PSAnbW9uaXRvcidcbiAgY29uc3QgZGlzcGxheUNvbW1hbmQgPSB0cnVuY2F0ZVRvV2lkdGgoc2hlbGwuY29tbWFuZCwgMjgwKVxuXG4gIHJldHVybiAoXG4gICAgPEJveFxuICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICB0YWJJbmRleD17MH1cbiAgICAgIGF1dG9Gb2N1c1xuICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgID5cbiAgICAgIDxEaWFsb2dcbiAgICAgICAgdGl0bGU9e2lzTW9uaXRvciA/ICdNb25pdG9yIGRldGFpbHMnIDogJ1NoZWxsIGRldGFpbHMnfVxuICAgICAgICBvbkNhbmNlbD17aGFuZGxlQ2xvc2V9XG4gICAgICAgIGNvbG9yPVwiYmFja2dyb3VuZFwiXG4gICAgICAgIGlucHV0R3VpZGU9e2V4aXRTdGF0ZSA9PlxuICAgICAgICAgIGV4aXRTdGF0ZS5wZW5kaW5nID8gKFxuICAgICAgICAgICAgPFRleHQ+UHJlc3Mge2V4aXRTdGF0ZS5rZXlOYW1lfSBhZ2FpbiB0byBleGl0PC9UZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8QnlsaW5lPlxuICAgICAgICAgICAgICB7b25CYWNrICYmIDxLZXlib2FyZFNob3J0Y3V0SGludCBzaG9ydGN1dD1cIuKGkFwiIGFjdGlvbj1cImdvIGJhY2tcIiAvPn1cbiAgICAgICAgICAgICAgPEtleWJvYXJkU2hvcnRjdXRIaW50IHNob3J0Y3V0PVwiRXNjL0VudGVyL1NwYWNlXCIgYWN0aW9uPVwiY2xvc2VcIiAvPlxuICAgICAgICAgICAgICB7c2hlbGwuc3RhdHVzID09PSAncnVubmluZycgJiYgb25LaWxsU2hlbGwgJiYgKFxuICAgICAgICAgICAgICAgIDxLZXlib2FyZFNob3J0Y3V0SGludCBzaG9ydGN1dD1cInhcIiBhY3Rpb249XCJzdG9wXCIgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQnlsaW5lPlxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgPlxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+U3RhdHVzOjwvVGV4dD57JyAnfVxuICAgICAgICAgICAge3NoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gKFxuICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cImJhY2tncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7c2hlbGwuc3RhdHVzfVxuICAgICAgICAgICAgICAgIHtzaGVsbC5yZXN1bHQ/LmNvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgYCAoZXhpdCBjb2RlOiAke3NoZWxsLnJlc3VsdC5jb2RlfSlgfVxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApIDogc2hlbGwuc3RhdHVzID09PSAnY29tcGxldGVkJyA/IChcbiAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJzdWNjZXNzXCI+XG4gICAgICAgICAgICAgICAge3NoZWxsLnN0YXR1c31cbiAgICAgICAgICAgICAgICB7c2hlbGwucmVzdWx0Py5jb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgIGAgKGV4aXQgY29kZTogJHtzaGVsbC5yZXN1bHQuY29kZX0pYH1cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFRleHQgY29sb3I9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgIHtzaGVsbC5zdGF0dXN9XG4gICAgICAgICAgICAgICAge3NoZWxsLnJlc3VsdD8uY29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICBgIChleGl0IGNvZGU6ICR7c2hlbGwucmVzdWx0LmNvZGV9KWB9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgPFRleHQgYm9sZD5SdW50aW1lOjwvVGV4dD57JyAnfVxuICAgICAgICAgICAge2Zvcm1hdER1cmF0aW9uKChzaGVsbC5lbmRUaW1lID8/IERhdGUubm93KCkpIC0gc2hlbGwuc3RhcnRUaW1lKX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPFRleHQgd3JhcD1cIndyYXBcIj5cbiAgICAgICAgICAgIDxUZXh0IGJvbGQ+e2lzTW9uaXRvciA/ICdTY3JpcHQ6JyA6ICdDb21tYW5kOid9PC9UZXh0PnsnICd9XG4gICAgICAgICAgICB7ZGlzcGxheUNvbW1hbmR9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cblxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICA8VGV4dCBib2xkPk91dHB1dDo8L1RleHQ+XG4gICAgICAgICAgPFN1c3BlbnNlIGZhbGxiYWNrPXs8VGV4dCBkaW1Db2xvcj5Mb2FkaW5nIG91dHB1dOKApjwvVGV4dD59PlxuICAgICAgICAgICAgPFNoZWxsT3V0cHV0Q29udGVudFxuICAgICAgICAgICAgICBvdXRwdXRQcm9taXNlPXtkZWZlcnJlZE91dHB1dFByb21pc2V9XG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU3VzcGVuc2U+XG4gICAgICAgIDwvQm94PlxuICAgICAgPC9EaWFsb2c+XG4gICAgPC9Cb3g+XG4gIClcbn1cblxudHlwZSBTaGVsbE91dHB1dENvbnRlbnRQcm9wcyA9IHtcbiAgb3V0cHV0UHJvbWlzZTogUHJvbWlzZTxUYXNrT3V0cHV0UmVzdWx0PlxuICBjb2x1bW5zOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gU2hlbGxPdXRwdXRDb250ZW50KHtcbiAgb3V0cHV0UHJvbWlzZSxcbiAgY29sdW1ucyxcbn06IFNoZWxsT3V0cHV0Q29udGVudFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBjb250ZW50LCBieXRlc1RvdGFsIH0gPSB1c2Uob3V0cHV0UHJvbWlzZSlcblxuICBpZiAoIWNvbnRlbnQpIHtcbiAgICByZXR1cm4gPFRleHQgZGltQ29sb3I+Tm8gb3V0cHV0IGF2YWlsYWJsZTwvVGV4dD5cbiAgfVxuXG4gIC8vIEZpbmQgbGFzdCAxMCBsaW5lIGJvdW5kYXJpZXMgdmlhIGxhc3RJbmRleE9mXG4gIGNvbnN0IHN0YXJ0czogbnVtYmVyW10gPSBbXVxuICBsZXQgcG9zID0gY29udGVudC5sZW5ndGhcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMCAmJiBwb3MgPiAwOyBpKyspIHtcbiAgICBjb25zdCBwcmV2ID0gY29udGVudC5sYXN0SW5kZXhPZignXFxuJywgcG9zIC0gMSlcbiAgICBzdGFydHMucHVzaChwcmV2ICsgMSlcbiAgICBwb3MgPSBwcmV2XG4gIH1cbiAgc3RhcnRzLnJldmVyc2UoKVxuICBjb25zdCBpc0luY29tcGxldGUgPSBieXRlc1RvdGFsID4gY29udGVudC5sZW5ndGhcblxuICAvLyBCdWlsZCBsaW5lcywgc2tpcCBlbXB0eSB0cmFpbGluZy9sZWFkaW5nIHNlZ21lbnRzXG4gIGNvbnN0IHJlbmRlcmVkOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGFydHNbaV0hXG4gICAgY29uc3QgZW5kID0gaSA8IHN0YXJ0cy5sZW5ndGggLSAxID8gc3RhcnRzW2kgKyAxXSEgLSAxIDogY29udGVudC5sZW5ndGhcbiAgICBjb25zdCBsaW5lID0gY29udGVudC5zbGljZShzdGFydCwgZW5kKVxuICAgIGlmIChsaW5lKSByZW5kZXJlZC5wdXNoKGxpbmUpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Qm94XG4gICAgICAgIGJvcmRlclN0eWxlPVwicm91bmRcIlxuICAgICAgICBwYWRkaW5nWD17MX1cbiAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgIGhlaWdodD17MTJ9XG4gICAgICAgIG1heFdpZHRoPXtjb2x1bW5zIC0gNn1cbiAgICAgID5cbiAgICAgICAge3JlbmRlcmVkLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgIDxUZXh0IGtleT17aX0gd3JhcD1cInRydW5jYXRlLWVuZFwiPlxuICAgICAgICAgICAge2xpbmV9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApKX1cbiAgICAgIDwvQm94PlxuICAgICAgPFRleHQgZGltQ29sb3IgaXRhbGljPlxuICAgICAgICB7YFNob3dpbmcgJHtyZW5kZXJlZC5sZW5ndGh9IGxpbmVzYH1cbiAgICAgICAge2lzSW5jb21wbGV0ZSA/IGAgb2YgJHtmb3JtYXRGaWxlU2l6ZShieXRlc1RvdGFsKX1gIDogJyd9XG4gICAgICA8L1RleHQ+XG4gICAgPC8+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQUssSUFDVkMsUUFBUSxFQUNSQyxHQUFHLEVBQ0hDLGdCQUFnQixFQUNoQkMsU0FBUyxFQUNUQyxRQUFRLFFBQ0gsT0FBTztBQUNkLGNBQWNDLGFBQWEsUUFBUSxvQkFBb0I7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