source dump of claude code
at main 235 lines 25 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import { relative } from 'path'; 3import * as React from 'react'; 4import { Suspense, use, useMemo } from 'react'; 5import { Box, NoSelect, Text } from '../../../ink.js'; 6import type { NotebookCellType, NotebookContent } from '../../../types/notebook.js'; 7import { intersperse } from '../../../utils/array.js'; 8import { getCwd } from '../../../utils/cwd.js'; 9import { getPatchForDisplay } from '../../../utils/diff.js'; 10import { getFsImplementation } from '../../../utils/fsOperations.js'; 11import { safeParseJSON } from '../../../utils/json.js'; 12import { parseCellId } from '../../../utils/notebook.js'; 13import { HighlightedCode } from '../../HighlightedCode.js'; 14import { StructuredDiff } from '../../StructuredDiff.js'; 15type Props = { 16 notebook_path: string; 17 cell_id: string | undefined; 18 new_source: string; 19 cell_type?: NotebookCellType; 20 edit_mode?: string; 21 verbose: boolean; 22 width: number; 23}; 24type InnerProps = { 25 notebook_path: string; 26 cell_id: string | undefined; 27 new_source: string; 28 cell_type?: NotebookCellType; 29 edit_mode?: string; 30 verbose: boolean; 31 width: number; 32 promise: Promise<NotebookContent | null>; 33}; 34export function NotebookEditToolDiff(props) { 35 const $ = _c(5); 36 let t0; 37 if ($[0] !== props.notebook_path) { 38 t0 = getFsImplementation().readFile(props.notebook_path, { 39 encoding: "utf-8" 40 }).then(_temp).catch(_temp2); 41 $[0] = props.notebook_path; 42 $[1] = t0; 43 } else { 44 t0 = $[1]; 45 } 46 const notebookDataPromise = t0; 47 let t1; 48 if ($[2] !== notebookDataPromise || $[3] !== props) { 49 t1 = <Suspense fallback={null}><NotebookEditToolDiffInner {...props} promise={notebookDataPromise} /></Suspense>; 50 $[2] = notebookDataPromise; 51 $[3] = props; 52 $[4] = t1; 53 } else { 54 t1 = $[4]; 55 } 56 return t1; 57} 58function _temp2() { 59 return null; 60} 61function _temp(content) { 62 return safeParseJSON(content) as NotebookContent | null; 63} 64function NotebookEditToolDiffInner(t0) { 65 const $ = _c(34); 66 const { 67 notebook_path, 68 cell_id, 69 new_source, 70 cell_type, 71 edit_mode: t1, 72 verbose, 73 width, 74 promise 75 } = t0; 76 const edit_mode = t1 === undefined ? "replace" : t1; 77 const notebookData = use(promise); 78 let t2; 79 if ($[0] !== cell_id || $[1] !== notebookData) { 80 bb0: { 81 if (!notebookData || !cell_id) { 82 t2 = ""; 83 break bb0; 84 } 85 const cellIndex = parseCellId(cell_id); 86 if (cellIndex !== undefined) { 87 if (notebookData.cells[cellIndex]) { 88 const source = notebookData.cells[cellIndex].source; 89 let t3; 90 if ($[3] !== source) { 91 t3 = Array.isArray(source) ? source.join("") : source; 92 $[3] = source; 93 $[4] = t3; 94 } else { 95 t3 = $[4]; 96 } 97 t2 = t3; 98 break bb0; 99 } 100 t2 = ""; 101 break bb0; 102 } 103 let t3; 104 if ($[5] !== cell_id) { 105 t3 = cell => cell.id === cell_id; 106 $[5] = cell_id; 107 $[6] = t3; 108 } else { 109 t3 = $[6]; 110 } 111 const cell_0 = notebookData.cells.find(t3); 112 if (!cell_0) { 113 t2 = ""; 114 break bb0; 115 } 116 t2 = Array.isArray(cell_0.source) ? cell_0.source.join("") : cell_0.source; 117 } 118 $[0] = cell_id; 119 $[1] = notebookData; 120 $[2] = t2; 121 } else { 122 t2 = $[2]; 123 } 124 const oldSource = t2; 125 let t3; 126 bb1: { 127 if (!notebookData || edit_mode === "insert" || edit_mode === "delete") { 128 t3 = null; 129 break bb1; 130 } 131 let t4; 132 if ($[7] !== new_source || $[8] !== notebook_path || $[9] !== oldSource) { 133 t4 = getPatchForDisplay({ 134 filePath: notebook_path, 135 fileContents: oldSource, 136 edits: [{ 137 old_string: oldSource, 138 new_string: new_source, 139 replace_all: false 140 }], 141 ignoreWhitespace: false 142 }); 143 $[7] = new_source; 144 $[8] = notebook_path; 145 $[9] = oldSource; 146 $[10] = t4; 147 } else { 148 t4 = $[10]; 149 } 150 t3 = t4; 151 } 152 const hunks = t3; 153 let editTypeDescription; 154 bb2: switch (edit_mode) { 155 case "insert": 156 { 157 editTypeDescription = "Insert new cell"; 158 break bb2; 159 } 160 case "delete": 161 { 162 editTypeDescription = "Delete cell"; 163 break bb2; 164 } 165 default: 166 { 167 editTypeDescription = "Replace cell contents"; 168 } 169 } 170 let t4; 171 if ($[11] !== notebook_path || $[12] !== verbose) { 172 t4 = verbose ? notebook_path : relative(getCwd(), notebook_path); 173 $[11] = notebook_path; 174 $[12] = verbose; 175 $[13] = t4; 176 } else { 177 t4 = $[13]; 178 } 179 let t5; 180 if ($[14] !== t4) { 181 t5 = <Text bold={true}>{t4}</Text>; 182 $[14] = t4; 183 $[15] = t5; 184 } else { 185 t5 = $[15]; 186 } 187 const t6 = cell_type ? ` (${cell_type})` : ""; 188 let t7; 189 if ($[16] !== cell_id || $[17] !== editTypeDescription || $[18] !== t6) { 190 t7 = <Text dimColor={true}>{editTypeDescription} for cell {cell_id}{t6}</Text>; 191 $[16] = cell_id; 192 $[17] = editTypeDescription; 193 $[18] = t6; 194 $[19] = t7; 195 } else { 196 t7 = $[19]; 197 } 198 let t8; 199 if ($[20] !== t5 || $[21] !== t7) { 200 t8 = <Box paddingBottom={1} flexDirection="column">{t5}{t7}</Box>; 201 $[20] = t5; 202 $[21] = t7; 203 $[22] = t8; 204 } else { 205 t8 = $[22]; 206 } 207 let t9; 208 if ($[23] !== cell_type || $[24] !== edit_mode || $[25] !== hunks || $[26] !== new_source || $[27] !== notebook_path || $[28] !== oldSource || $[29] !== width) { 209 t9 = edit_mode === "delete" ? <Box flexDirection="column" paddingLeft={2}><HighlightedCode code={oldSource} filePath={notebook_path} /></Box> : edit_mode === "insert" ? <Box flexDirection="column" paddingLeft={2}><HighlightedCode code={new_source} filePath={cell_type === "markdown" ? "file.md" : notebook_path} /></Box> : hunks ? intersperse(hunks.map(_ => <StructuredDiff key={_.newStart} patch={_} dim={false} width={width} filePath={notebook_path} firstLine={new_source.split("\n")[0] ?? null} fileContent={oldSource} />), _temp3) : <HighlightedCode code={new_source} filePath={cell_type === "markdown" ? "file.md" : notebook_path} />; 210 $[23] = cell_type; 211 $[24] = edit_mode; 212 $[25] = hunks; 213 $[26] = new_source; 214 $[27] = notebook_path; 215 $[28] = oldSource; 216 $[29] = width; 217 $[30] = t9; 218 } else { 219 t9 = $[30]; 220 } 221 let t10; 222 if ($[31] !== t8 || $[32] !== t9) { 223 t10 = <Box flexDirection="column"><Box borderStyle="round" flexDirection="column" paddingX={1}>{t8}{t9}</Box></Box>; 224 $[31] = t8; 225 $[32] = t9; 226 $[33] = t10; 227 } else { 228 t10 = $[33]; 229 } 230 return t10; 231} 232function _temp3(i) { 233 return <NoSelect fromLeftEdge={true} key={`ellipsis-${i}`}><Text dimColor={true}>...</Text></NoSelect>; 234} 235//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWxhdGl2ZSIsIlJlYWN0IiwiU3VzcGVuc2UiLCJ1c2UiLCJ1c2VNZW1vIiwiQm94IiwiTm9TZWxlY3QiLCJUZXh0IiwiTm90ZWJvb2tDZWxsVHlwZSIsIk5vdGVib29rQ29udGVudCIsImludGVyc3BlcnNlIiwiZ2V0Q3dkIiwiZ2V0UGF0Y2hGb3JEaXNwbGF5IiwiZ2V0RnNJbXBsZW1lbnRhdGlvbiIsInNhZmVQYXJzZUpTT04iLCJwYXJzZUNlbGxJZCIsIkhpZ2hsaWdodGVkQ29kZSIsIlN0cnVjdHVyZWREaWZmIiwiUHJvcHMiLCJub3RlYm9va19wYXRoIiwiY2VsbF9pZCIsIm5ld19zb3VyY2UiLCJjZWxsX3R5cGUiLCJlZGl0X21vZGUiLCJ2ZXJib3NlIiwid2lkdGgiLCJJbm5lclByb3BzIiwicHJvbWlzZSIsIlByb21pc2UiLCJOb3RlYm9va0VkaXRUb29sRGlmZiIsInByb3BzIiwiJCIsIl9jIiwidDAiLCJyZWFkRmlsZSIsImVuY29kaW5nIiwidGhlbiIsIl90ZW1wIiwiY2F0Y2giLCJfdGVtcDIiLCJub3RlYm9va0RhdGFQcm9taXNlIiwidDEiLCJjb250ZW50IiwiTm90ZWJvb2tFZGl0VG9vbERpZmZJbm5lciIsInVuZGVmaW5lZCIsIm5vdGVib29rRGF0YSIsInQyIiwiYmIwIiwiY2VsbEluZGV4IiwiY2VsbHMiLCJzb3VyY2UiLCJ0MyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJjZWxsIiwiaWQiLCJjZWxsXzAiLCJmaW5kIiwib2xkU291cmNlIiwiYmIxIiwidDQiLCJmaWxlUGF0aCIsImZpbGVDb250ZW50cyIsImVkaXRzIiwib2xkX3N0cmluZyIsIm5ld19zdHJpbmciLCJyZXBsYWNlX2FsbCIsImlnbm9yZVdoaXRlc3BhY2UiLCJodW5rcyIsImVkaXRUeXBlRGVzY3JpcHRpb24iLCJiYjIiLCJ0NSIsInQ2IiwidDciLCJ0OCIsInQ5IiwibWFwIiwiXyIsIm5ld1N0YXJ0Iiwic3BsaXQiLCJfdGVtcDMiLCJ0MTAiLCJpIl0sInNvdXJjZXMiOlsiTm90ZWJvb2tFZGl0VG9vbERpZmYudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3VzcGVuc2UsIHVzZSwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBOb1NlbGVjdCwgVGV4dCB9IGZyb20gJy4uLy4uLy4uL2luay5qcydcbmltcG9ydCB0eXBlIHtcbiAgTm90ZWJvb2tDZWxsVHlwZSxcbiAgTm90ZWJvb2tDb250ZW50LFxufSBmcm9tICcuLi8uLi8uLi90eXBlcy9ub3RlYm9vay5qcydcbmltcG9ydCB7IGludGVyc3BlcnNlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYXJyYXkuanMnXG5pbXBvcnQgeyBnZXRDd2QgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jd2QuanMnXG5pbXBvcnQgeyBnZXRQYXRjaEZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9kaWZmLmpzJ1xuaW1wb3J0IHsgZ2V0RnNJbXBsZW1lbnRhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZzT3BlcmF0aW9ucy5qcydcbmltcG9ydCB7IHNhZmVQYXJzZUpTT04gfSBmcm9tICcuLi8uLi8uLi91dGlscy9qc29uLmpzJ1xuaW1wb3J0IHsgcGFyc2VDZWxsSWQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ub3RlYm9vay5qcydcbmltcG9ydCB7IEhpZ2hsaWdodGVkQ29kZSB9IGZyb20gJy4uLy4uL0hpZ2hsaWdodGVkQ29kZS5qcydcbmltcG9ydCB7IFN0cnVjdHVyZWREaWZmIH0gZnJvbSAnLi4vLi4vU3RydWN0dXJlZERpZmYuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIG5vdGVib29rX3BhdGg6IHN0cmluZ1xuICBjZWxsX2lkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgbmV3X3NvdXJjZTogc3RyaW5nXG4gIGNlbGxfdHlwZT86IE5vdGVib29rQ2VsbFR5cGVcbiAgZWRpdF9tb2RlPzogc3RyaW5nXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgd2lkdGg6IG51bWJlclxufVxuXG50eXBlIElubmVyUHJvcHMgPSB7XG4gIG5vdGVib29rX3BhdGg6IHN0cmluZ1xuICBjZWxsX2lkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgbmV3X3NvdXJjZTogc3RyaW5nXG4gIGNlbGxfdHlwZT86IE5vdGVib29rQ2VsbFR5cGVcbiAgZWRpdF9tb2RlPzogc3RyaW5nXG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgd2lkdGg6IG51bWJlclxuICBwcm9taXNlOiBQcm9taXNlPE5vdGVib29rQ29udGVudCB8IG51bGw+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOb3RlYm9va0VkaXRUb29sRGlmZihwcm9wczogUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAvLyBDcmVhdGUgYSBwcm9taXNlIHRoYXQgbmV2ZXIgcmVqZWN0cyBzbyB3ZSBjYW4gaGFuZGxlIGVycm9ycyBpbmxpbmUuXG4gIC8vIE1lbW9pemVkIG9uIG5vdGVib29rX3BhdGggc28gd2UgZG9uJ3QgcmUtcmVhZCBvbiBldmVyeSByZW5kZXIuXG4gIGNvbnN0IG5vdGVib29rRGF0YVByb21pc2UgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBnZXRGc0ltcGxlbWVudGF0aW9uKClcbiAgICAgICAgLnJlYWRGaWxlKHByb3BzLm5vdGVib29rX3BhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSlcbiAgICAgICAgLnRoZW4oY29udGVudCA9PiBzYWZlUGFyc2VKU09OKGNvbnRlbnQpIGFzIE5vdGVib29rQ29udGVudCB8IG51bGwpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBudWxsKSxcbiAgICBbcHJvcHMubm90ZWJvb2tfcGF0aF0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTdXNwZW5zZSBmYWxsYmFjaz17bnVsbH0+XG4gICAgICA8Tm90ZWJvb2tFZGl0VG9vbERpZmZJbm5lciB7Li4ucHJvcHN9IHByb21pc2U9e25vdGVib29rRGF0YVByb21pc2V9IC8+XG4gICAgPC9TdXNwZW5zZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBOb3RlYm9va0VkaXRUb29sRGlmZklubmVyKHtcbiAgbm90ZWJvb2tfcGF0aCxcbiAgY2VsbF9pZCxcbiAgbmV3X3NvdXJjZSxcbiAgY2VsbF90eXBlLFxuICBlZGl0X21vZGUgPSAncmVwbGFjZScsXG4gIHZlcmJvc2UsXG4gIHdpZHRoLFxuICBwcm9taXNlLFxufTogSW5uZXJQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IG5vdGVib29rRGF0YSA9IHVzZShwcm9taXNlKVxuXG4gIGNvbnN0IG9sZFNvdXJjZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghbm90ZWJvb2tEYXRhIHx8ICFjZWxsX2lkKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgY29uc3QgY2VsbEluZGV4ID0gcGFyc2VDZWxsSWQoY2VsbF9pZClcbiAgICBpZiAoY2VsbEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChub3RlYm9va0RhdGEuY2VsbHNbY2VsbEluZGV4XSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBub3RlYm9va0RhdGEuY2VsbHNbY2VsbEluZGV4XS5zb3VyY2VcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc291cmNlKSA/IHNvdXJjZS5qb2luKCcnKSA6IHNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGNvbnN0IGNlbGwgPSBub3RlYm9va0RhdGEuY2VsbHMuZmluZChjZWxsID0+IGNlbGwuaWQgPT09IGNlbGxfaWQpXG4gICAgaWYgKCFjZWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY2VsbC5zb3VyY2UpID8gY2VsbC5zb3VyY2Uuam9pbignJykgOiBjZWxsLnNvdXJjZVxuICB9LCBbbm90ZWJvb2tEYXRhLCBjZWxsX2lkXSlcblxuICBjb25zdCBodW5rcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghbm90ZWJvb2tEYXRhIHx8IGVkaXRfbW9kZSA9PT0gJ2luc2VydCcgfHwgZWRpdF9tb2RlID09PSAnZGVsZXRlJykge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgXCJmYWtlXCIgZmlsZSBjb250ZW50IHdpdGgganVzdCB0aGUgY2VsbCBzb3VyY2VcbiAgICAvLyBUaGlzIGFsbG93cyB1cyB0byB1c2UgdGhlIHJlZ3VsYXIgZGlmZiBtZWNoYW5pc21cbiAgICByZXR1cm4gZ2V0UGF0Y2hGb3JEaXNwbGF5KHtcbiAgICAgIGZpbGVQYXRoOiBub3RlYm9va19wYXRoLFxuICAgICAgZmlsZUNvbnRlbnRzOiBvbGRTb3VyY2UsXG4gICAgICBlZGl0czogW1xuICAgICAgICB7XG4gICAgICAgICAgb2xkX3N0cmluZzogb2xkU291cmNlLFxuICAgICAgICAgIG5ld19zdHJpbmc6IG5ld19zb3VyY2UsXG4gICAgICAgICAgcmVwbGFjZV9hbGw6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGlnbm9yZVdoaXRlc3BhY2U6IGZhbHNlLFxuICAgIH0pXG4gIH0sIFtub3RlYm9va0RhdGEsIG5vdGVib29rX3BhdGgsIG9sZFNvdXJjZSwgbmV3X3NvdXJjZSwgZWRpdF9tb2RlXSlcblxuICBsZXQgZWRpdFR5cGVEZXNjcmlwdGlvbjogc3RyaW5nXG4gIHN3aXRjaCAoZWRpdF9tb2RlKSB7XG4gICAgY2FzZSAnaW5zZXJ0JzpcbiAgICAgIGVkaXRUeXBlRGVzY3JpcHRpb24gPSAnSW5zZXJ0IG5ldyBjZWxsJ1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdkZWxldGUnOlxuICAgICAgZWRpdFR5cGVEZXNjcmlwdGlvbiA9ICdEZWxldGUgY2VsbCdcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIGVkaXRUeXBlRGVzY3JpcHRpb24gPSAnUmVwbGFjZSBjZWxsIGNvbnRlbnRzJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgIDxCb3ggYm9yZGVyU3R5bGU9XCJyb3VuZFwiIGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWD17MX0+XG4gICAgICAgIDxCb3ggcGFkZGluZ0JvdHRvbT17MX0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxUZXh0IGJvbGQ+XG4gICAgICAgICAgICB7dmVyYm9zZSA/IG5vdGVib29rX3BhdGggOiByZWxhdGl2ZShnZXRDd2QoKSwgbm90ZWJvb2tfcGF0aCl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgICAge2VkaXRUeXBlRGVzY3JpcHRpb259IGZvciBjZWxsIHtjZWxsX2lkfVxuICAgICAgICAgICAge2NlbGxfdHlwZSA/IGAgKCR7Y2VsbF90eXBlfSlgIDogJyd9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0JveD5cbiAgICAgICAge2VkaXRfbW9kZSA9PT0gJ2RlbGV0ZScgPyAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgcGFkZGluZ0xlZnQ9ezJ9PlxuICAgICAgICAgICAgPEhpZ2hsaWdodGVkQ29kZSBjb2RlPXtvbGRTb3VyY2V9IGZpbGVQYXRoPXtub3RlYm9va19wYXRofSAvPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApIDogZWRpdF9tb2RlID09PSAnaW5zZXJ0JyA/IChcbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nTGVmdD17Mn0+XG4gICAgICAgICAgICA8SGlnaGxpZ2h0ZWRDb2RlXG4gICAgICAgICAgICAgIGNvZGU9e25ld19zb3VyY2V9XG4gICAgICAgICAgICAgIGZpbGVQYXRoPXtjZWxsX3R5cGUgPT09ICdtYXJrZG93bicgPyAnZmlsZS5tZCcgOiBub3RlYm9va19wYXRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKSA6IGh1bmtzID8gKFxuICAgICAgICAgIGludGVyc3BlcnNlKFxuICAgICAgICAgICAgaHVua3MubWFwKF8gPT4gKFxuICAgICAgICAgICAgICA8U3RydWN0dXJlZERpZmZcbiAgICAgICAgICAgICAgICBrZXk9e18ubmV3U3RhcnR9XG4gICAgICAgICAgICAgICAgcGF0Y2g9e199XG4gICAgICAgICAgICAgICAgZGltPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgICAgICAgICAgZmlsZVBhdGg9e25vdGVib29rX3BhdGh9XG4gICAgICAgICAgICAgICAgZmlyc3RMaW5lPXtuZXdfc291cmNlLnNwbGl0KCdcXG4nKVswXSA/PyBudWxsfVxuICAgICAgICAgICAgICAgIGZpbGVDb250ZW50PXtvbGRTb3VyY2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGkgPT4gKFxuICAgICAgICAgICAgICA8Tm9TZWxlY3QgZnJvbUxlZnRFZGdlIGtleT17YGVsbGlwc2lzLSR7aX1gfT5cbiAgICAgICAgICAgICAgICA8VGV4dCBkaW1Db2xvcj4uLi48L1RleHQ+XG4gICAgICAgICAgICAgIDwvTm9TZWxlY3Q+XG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8SGlnaGxpZ2h0ZWRDb2RlXG4gICAgICAgICAgICBjb2RlPXtuZXdfc291cmNlfVxuICAgICAgICAgICAgZmlsZVBhdGg9e2NlbGxfdHlwZSA9PT0gJ21hcmtkb3duJyA/ICdmaWxlLm1kJyA6IG5vdGVib29rX3BhdGh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxRQUFRLFFBQVEsTUFBTTtBQUMvQixPQUFPLEtBQUtDLEtBQUssTUFBTSxPQUFP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