source dump of claude code
at main 340 lines 34 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import chalk from 'chalk'; 3import figures from 'figures'; 4import * as React from 'react'; 5import { useEffect, useState } from 'react'; 6import { Text } from '../ink.js'; 7import { useKeybinding } from '../keybindings/useKeybinding.js'; 8import { toError } from '../utils/errors.js'; 9import { logError } from '../utils/log.js'; 10import { getSettingSourceName, type SettingSource } from '../utils/settings/constants.js'; 11import { updateSettingsForSource } from '../utils/settings/settings.js'; 12import { getEnvironmentSelectionInfo } from '../utils/teleport/environmentSelection.js'; 13import type { EnvironmentResource } from '../utils/teleport/environments.js'; 14import { ConfigurableShortcutHint } from './ConfigurableShortcutHint.js'; 15import { Select } from './CustomSelect/select.js'; 16import { Byline } from './design-system/Byline.js'; 17import { Dialog } from './design-system/Dialog.js'; 18import { KeyboardShortcutHint } from './design-system/KeyboardShortcutHint.js'; 19import { LoadingState } from './design-system/LoadingState.js'; 20const DIALOG_TITLE = 'Select Remote Environment'; 21const SETUP_HINT = `Configure environments at: https://claude.ai/code`; 22type Props = { 23 onDone: (message?: string) => void; 24}; 25type LoadingState = 'loading' | 'updating' | null; 26export function RemoteEnvironmentDialog(t0) { 27 const $ = _c(27); 28 const { 29 onDone 30 } = t0; 31 const [loadingState, setLoadingState] = useState("loading"); 32 let t1; 33 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 34 t1 = []; 35 $[0] = t1; 36 } else { 37 t1 = $[0]; 38 } 39 const [environments, setEnvironments] = useState(t1); 40 const [selectedEnvironment, setSelectedEnvironment] = useState(null); 41 const [selectedEnvironmentSource, setSelectedEnvironmentSource] = useState(null); 42 const [error, setError] = useState(null); 43 let t2; 44 let t3; 45 if ($[1] === Symbol.for("react.memo_cache_sentinel")) { 46 t2 = () => { 47 let cancelled = false; 48 const fetchInfo = async function fetchInfo() { 49 ; 50 try { 51 const result = await getEnvironmentSelectionInfo(); 52 if (cancelled) { 53 return; 54 } 55 setEnvironments(result.availableEnvironments); 56 setSelectedEnvironment(result.selectedEnvironment); 57 setSelectedEnvironmentSource(result.selectedEnvironmentSource); 58 setLoadingState(null); 59 } catch (t4) { 60 const err = t4; 61 if (cancelled) { 62 return; 63 } 64 const fetchError = toError(err); 65 logError(fetchError); 66 setError(fetchError.message); 67 setLoadingState(null); 68 } 69 }; 70 fetchInfo(); 71 return () => { 72 cancelled = true; 73 }; 74 }; 75 t3 = []; 76 $[1] = t2; 77 $[2] = t3; 78 } else { 79 t2 = $[1]; 80 t3 = $[2]; 81 } 82 useEffect(t2, t3); 83 let t4; 84 if ($[3] !== environments || $[4] !== onDone) { 85 t4 = function handleSelect(value) { 86 if (value === "cancel") { 87 onDone(); 88 return; 89 } 90 setLoadingState("updating"); 91 const selectedEnv = environments.find(env => env.environment_id === value); 92 if (!selectedEnv) { 93 onDone("Error: Selected environment not found"); 94 return; 95 } 96 updateSettingsForSource("localSettings", { 97 remote: { 98 defaultEnvironmentId: selectedEnv.environment_id 99 } 100 }); 101 onDone(`Set default remote environment to ${chalk.bold(selectedEnv.name)} (${selectedEnv.environment_id})`); 102 }; 103 $[3] = environments; 104 $[4] = onDone; 105 $[5] = t4; 106 } else { 107 t4 = $[5]; 108 } 109 const handleSelect = t4; 110 if (loadingState === "loading") { 111 let t5; 112 if ($[6] === Symbol.for("react.memo_cache_sentinel")) { 113 t5 = <LoadingState message={"Loading environments\u2026"} />; 114 $[6] = t5; 115 } else { 116 t5 = $[6]; 117 } 118 let t6; 119 if ($[7] !== onDone) { 120 t6 = <Dialog title={DIALOG_TITLE} onCancel={onDone} hideInputGuide={true}>{t5}</Dialog>; 121 $[7] = onDone; 122 $[8] = t6; 123 } else { 124 t6 = $[8]; 125 } 126 return t6; 127 } 128 if (error) { 129 let t5; 130 if ($[9] !== error) { 131 t5 = <Text color="error">Error: {error}</Text>; 132 $[9] = error; 133 $[10] = t5; 134 } else { 135 t5 = $[10]; 136 } 137 let t6; 138 if ($[11] !== onDone || $[12] !== t5) { 139 t6 = <Dialog title={DIALOG_TITLE} onCancel={onDone}>{t5}</Dialog>; 140 $[11] = onDone; 141 $[12] = t5; 142 $[13] = t6; 143 } else { 144 t6 = $[13]; 145 } 146 return t6; 147 } 148 if (!selectedEnvironment) { 149 let t5; 150 if ($[14] === Symbol.for("react.memo_cache_sentinel")) { 151 t5 = <Text>No remote environments available.</Text>; 152 $[14] = t5; 153 } else { 154 t5 = $[14]; 155 } 156 let t6; 157 if ($[15] !== onDone) { 158 t6 = <Dialog title={DIALOG_TITLE} subtitle={SETUP_HINT} onCancel={onDone}>{t5}</Dialog>; 159 $[15] = onDone; 160 $[16] = t6; 161 } else { 162 t6 = $[16]; 163 } 164 return t6; 165 } 166 if (environments.length === 1) { 167 let t5; 168 if ($[17] !== onDone || $[18] !== selectedEnvironment) { 169 t5 = <SingleEnvironmentContent environment={selectedEnvironment} onDone={onDone} />; 170 $[17] = onDone; 171 $[18] = selectedEnvironment; 172 $[19] = t5; 173 } else { 174 t5 = $[19]; 175 } 176 return t5; 177 } 178 let t5; 179 if ($[20] !== environments || $[21] !== handleSelect || $[22] !== loadingState || $[23] !== onDone || $[24] !== selectedEnvironment || $[25] !== selectedEnvironmentSource) { 180 t5 = <MultipleEnvironmentsContent environments={environments} selectedEnvironment={selectedEnvironment} selectedEnvironmentSource={selectedEnvironmentSource} loadingState={loadingState} onSelect={handleSelect} onCancel={onDone} />; 181 $[20] = environments; 182 $[21] = handleSelect; 183 $[22] = loadingState; 184 $[23] = onDone; 185 $[24] = selectedEnvironment; 186 $[25] = selectedEnvironmentSource; 187 $[26] = t5; 188 } else { 189 t5 = $[26]; 190 } 191 return t5; 192} 193function EnvironmentLabel(t0) { 194 const $ = _c(7); 195 const { 196 environment 197 } = t0; 198 let t1; 199 if ($[0] !== environment.name) { 200 t1 = <Text bold={true}>{environment.name}</Text>; 201 $[0] = environment.name; 202 $[1] = t1; 203 } else { 204 t1 = $[1]; 205 } 206 let t2; 207 if ($[2] !== environment.environment_id) { 208 t2 = <Text dimColor={true}>({environment.environment_id})</Text>; 209 $[2] = environment.environment_id; 210 $[3] = t2; 211 } else { 212 t2 = $[3]; 213 } 214 let t3; 215 if ($[4] !== t1 || $[5] !== t2) { 216 t3 = <Text>{figures.tick} Using {t1}{" "}{t2}</Text>; 217 $[4] = t1; 218 $[5] = t2; 219 $[6] = t3; 220 } else { 221 t3 = $[6]; 222 } 223 return t3; 224} 225function SingleEnvironmentContent(t0) { 226 const $ = _c(6); 227 const { 228 environment, 229 onDone 230 } = t0; 231 let t1; 232 if ($[0] === Symbol.for("react.memo_cache_sentinel")) { 233 t1 = { 234 context: "Confirmation" 235 }; 236 $[0] = t1; 237 } else { 238 t1 = $[0]; 239 } 240 useKeybinding("confirm:yes", onDone, t1); 241 let t2; 242 if ($[1] !== environment) { 243 t2 = <EnvironmentLabel environment={environment} />; 244 $[1] = environment; 245 $[2] = t2; 246 } else { 247 t2 = $[2]; 248 } 249 let t3; 250 if ($[3] !== onDone || $[4] !== t2) { 251 t3 = <Dialog title={DIALOG_TITLE} subtitle={SETUP_HINT} onCancel={onDone}>{t2}</Dialog>; 252 $[3] = onDone; 253 $[4] = t2; 254 $[5] = t3; 255 } else { 256 t3 = $[5]; 257 } 258 return t3; 259} 260function MultipleEnvironmentsContent(t0) { 261 const $ = _c(18); 262 const { 263 environments, 264 selectedEnvironment, 265 selectedEnvironmentSource, 266 loadingState, 267 onSelect, 268 onCancel 269 } = t0; 270 let t1; 271 if ($[0] !== selectedEnvironmentSource) { 272 t1 = selectedEnvironmentSource && selectedEnvironmentSource !== "localSettings" ? ` (from ${getSettingSourceName(selectedEnvironmentSource)} settings)` : ""; 273 $[0] = selectedEnvironmentSource; 274 $[1] = t1; 275 } else { 276 t1 = $[1]; 277 } 278 const sourceSuffix = t1; 279 let t2; 280 if ($[2] !== selectedEnvironment.name) { 281 t2 = <Text bold={true}>{selectedEnvironment.name}</Text>; 282 $[2] = selectedEnvironment.name; 283 $[3] = t2; 284 } else { 285 t2 = $[3]; 286 } 287 let t3; 288 if ($[4] !== sourceSuffix || $[5] !== t2) { 289 t3 = <Text>Currently using: {t2}{sourceSuffix}</Text>; 290 $[4] = sourceSuffix; 291 $[5] = t2; 292 $[6] = t3; 293 } else { 294 t3 = $[6]; 295 } 296 const subtitle = t3; 297 let t4; 298 if ($[7] === Symbol.for("react.memo_cache_sentinel")) { 299 t4 = <Text dimColor={true}>{SETUP_HINT}</Text>; 300 $[7] = t4; 301 } else { 302 t4 = $[7]; 303 } 304 let t5; 305 if ($[8] !== environments || $[9] !== loadingState || $[10] !== onSelect || $[11] !== selectedEnvironment.environment_id) { 306 t5 = loadingState === "updating" ? <LoadingState message={"Updating\u2026"} /> : <Select options={environments.map(_temp)} defaultValue={selectedEnvironment.environment_id} onChange={onSelect} onCancel={() => onSelect("cancel")} layout="compact-vertical" />; 307 $[8] = environments; 308 $[9] = loadingState; 309 $[10] = onSelect; 310 $[11] = selectedEnvironment.environment_id; 311 $[12] = t5; 312 } else { 313 t5 = $[12]; 314 } 315 let t6; 316 if ($[13] === Symbol.for("react.memo_cache_sentinel")) { 317 t6 = <Text dimColor={true}><Byline><KeyboardShortcutHint shortcut="Enter" action="select" /><ConfigurableShortcutHint action="confirm:no" context="Confirmation" fallback="Esc" description="cancel" /></Byline></Text>; 318 $[13] = t6; 319 } else { 320 t6 = $[13]; 321 } 322 let t7; 323 if ($[14] !== onCancel || $[15] !== subtitle || $[16] !== t5) { 324 t7 = <Dialog title={DIALOG_TITLE} subtitle={subtitle} onCancel={onCancel} hideInputGuide={true}>{t4}{t5}{t6}</Dialog>; 325 $[14] = onCancel; 326 $[15] = subtitle; 327 $[16] = t5; 328 $[17] = t7; 329 } else { 330 t7 = $[17]; 331 } 332 return t7; 333} 334function _temp(env) { 335 return { 336 label: <Text>{env.name} <Text dimColor={true}>({env.environment_id})</Text></Text>, 337 value: env.environment_id 338 }; 339} 340//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjaGFsayIsImZpZ3VyZXMiLCJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiVGV4dCIsInVzZUtleWJpbmRpbmciLCJ0b0Vycm9yIiwibG9nRXJyb3IiLCJnZXRTZXR0aW5nU291cmNlTmFtZSIsIlNldHRpbmdTb3VyY2UiLCJ1cGRhdGVTZXR0aW5nc0ZvclNvdXJjZSIsImdldEVudmlyb25tZW50U2VsZWN0aW9uSW5mbyIsIkVudmlyb25tZW50UmVzb3VyY2UiLCJDb25maWd1cmFibGVTaG9ydGN1dEhpbnQiLCJTZWxlY3QiLCJCeWxpbmUiLCJEaWFsb2ciLCJLZXlib2FyZFNob3J0Y3V0SGludCIsIkxvYWRpbmdTdGF0ZSIsIkRJQUxPR19USVRMRSIsIlNFVFVQX0hJTlQiLCJQcm9wcyIsIm9uRG9uZSIsIm1lc3NhZ2UiLCJSZW1vdGVFbnZpcm9ubWVudERpYWxvZyIsInQwIiwiJCIsIl9jIiwibG9hZGluZ1N0YXRlIiwic2V0TG9hZGluZ1N0YXRlIiwidDEiLCJTeW1ib2wiLCJmb3IiLCJlbnZpcm9ubWVudHMiLCJzZXRFbnZpcm9ubWVudHMiLCJzZWxlY3RlZEVudmlyb25tZW50Iiwic2V0U2VsZWN0ZWRFbnZpcm9ubWVudCIsInNlbGVjdGVkRW52aXJvbm1lbnRTb3VyY2UiLCJzZXRTZWxlY3RlZEVudmlyb25tZW50U291cmNlIiwiZXJyb3IiLCJzZXRFcnJvciIsInQyIiwidDMiLCJjYW5jZWxsZWQiLCJmZXRjaEluZm8iLCJyZXN1bHQiLCJhdmFpbGFibGVFbnZpcm9ubWVudHMiLCJ0NCIsImVyciIsImZldGNoRXJyb3IiLCJoYW5kbGVTZWxlY3QiLCJ2YWx1ZSIsInNlbGVjdGVkRW52IiwiZmluZCIsImVudiIsImVudmlyb25tZW50X2lkIiwicmVtb3RlIiwiZGVmYXVsdEVudmlyb25tZW50SWQiLCJib2xkIiwibmFtZSIsInQ1IiwidDYiLCJsZW5ndGgiLCJFbnZpcm9ubWVudExhYmVsIiwiZW52aXJvbm1lbnQiLCJ0aWNrIiwiU2luZ2xlRW52aXJvbm1lbnRDb250ZW50IiwiY29udGV4dCIsIk11bHRpcGxlRW52aXJvbm1lbnRzQ29udGVudCIsIm9uU2VsZWN0Iiwib25DYW5jZWwiLCJzb3VyY2VTdWZmaXgiLCJzdWJ0aXRsZSIsIm1hcCIsIl90ZW1wIiwidDciLCJsYWJlbCJdLCJzb3VyY2VzIjpbIlJlbW90ZUVudmlyb25tZW50RGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdXNlS2V5YmluZGluZyB9IGZyb20gJy4uL2tleWJpbmRpbmdzL3VzZUtleWJpbmRpbmcuanMnXG5pbXBvcnQgeyB0b0Vycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3JzLmpzJ1xuaW1wb3J0IHsgbG9nRXJyb3IgfSBmcm9tICcuLi91dGlscy9sb2cuanMnXG5pbXBvcnQge1xuICBnZXRTZXR0aW5nU291cmNlTmFtZSxcbiAgdHlwZSBTZXR0aW5nU291cmNlLFxufSBmcm9tICcuLi91dGlscy9zZXR0aW5ncy9jb25zdGFudHMuanMnXG5pbXBvcnQgeyB1cGRhdGVTZXR0aW5nc0ZvclNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NldHRpbmdzL3NldHRpbmdzLmpzJ1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnRTZWxlY3Rpb25JbmZvIH0gZnJvbSAnLi4vdXRpbHMvdGVsZXBvcnQvZW52aXJvbm1lbnRTZWxlY3Rpb24uanMnXG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy90ZWxlcG9ydC9lbnZpcm9ubWVudHMuanMnXG5pbXBvcnQgeyBDb25maWd1cmFibGVTaG9ydGN1dEhpbnQgfSBmcm9tICcuL0NvbmZpZ3VyYWJsZVNob3J0Y3V0SGludC5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4vQ3VzdG9tU2VsZWN0L3NlbGVjdC5qcydcbmltcG9ydCB7IEJ5bGluZSB9IGZyb20gJy4vZGVzaWduLXN5c3RlbS9CeWxpbmUuanMnXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vRGlhbG9nLmpzJ1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dEhpbnQgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vS2V5Ym9hcmRTaG9ydGN1dEhpbnQuanMnXG5pbXBvcnQgeyBMb2FkaW5nU3RhdGUgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vTG9hZGluZ1N0YXRlLmpzJ1xuXG5jb25zdCBESUFMT0dfVElUTEUgPSAnU2VsZWN0IFJlbW90ZSBFbnZpcm9ubWVudCdcbmNvbnN0IFNFVFVQX0hJTlQgPSBgQ29uZmlndXJlIGVudmlyb25tZW50cyBhdDogaHR0cHM6Ly9jbGF1ZGUuYWkvY29kZWBcblxudHlwZSBQcm9wcyA9IHtcbiAgb25Eb25lOiAobWVzc2FnZT86IHN0cmluZykgPT4gdm9pZFxufVxuXG50eXBlIExvYWRpbmdTdGF0ZSA9ICdsb2FkaW5nJyB8ICd1cGRhdGluZycgfCBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBSZW1vdGVFbnZpcm9ubWVudERpYWxvZyh7IG9uRG9uZSB9OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFtsb2FkaW5nU3RhdGUsIHNldExvYWRpbmdTdGF0ZV0gPSB1c2VTdGF0ZTxMb2FkaW5nU3RhdGU+KCdsb2FkaW5nJylcbiAgY29uc3QgW2Vudmlyb25tZW50cywgc2V0RW52aXJvbm1lbnRzXSA9IHVzZVN0YXRlPEVudmlyb25tZW50UmVzb3VyY2VbXT4oW10pXG4gIGNvbnN0IFtzZWxlY3RlZEVudmlyb25tZW50LCBzZXRTZWxlY3RlZEVudmlyb25tZW50XSA9XG4gICAgdXNlU3RhdGU8RW52aXJvbm1lbnRSZXNvdXJjZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZWxlY3RlZEVudmlyb25tZW50U291cmNlLCBzZXRTZWxlY3RlZEVudmlyb25tZW50U291cmNlXSA9XG4gICAgdXNlU3RhdGU8U2V0dGluZ1NvdXJjZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZVxuICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoSW5mbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEVudmlyb25tZW50U2VsZWN0aW9uSW5mbygpXG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVyblxuICAgICAgICBzZXRFbnZpcm9ubWVudHMocmVzdWx0LmF2YWlsYWJsZUVudmlyb25tZW50cylcbiAgICAgICAgc2V0U2VsZWN0ZWRFbnZpcm9ubWVudChyZXN1bHQuc2VsZWN0ZWRFbnZpcm9ubWVudClcbiAgICAgICAgc2V0U2VsZWN0ZWRFbnZpcm9ubWVudFNvdXJjZShyZXN1bHQuc2VsZWN0ZWRFbnZpcm9ubWVudFNvdXJjZSlcbiAgICAgICAgc2V0TG9hZGluZ1N0YXRlKG51bGwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuXG4gICAgICAgIGNvbnN0IGZldGNoRXJyb3IgPSB0b0Vycm9yKGVycilcbiAgICAgICAgbG9nRXJyb3IoZmV0Y2hFcnJvcilcbiAgICAgICAgc2V0RXJyb3IoZmV0Y2hFcnJvci5tZXNzYWdlKVxuICAgICAgICBzZXRMb2FkaW5nU3RhdGUobnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgdm9pZCBmZXRjaEluZm8oKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgfVxuICB9LCBbXSlcblxuICBmdW5jdGlvbiBoYW5kbGVTZWxlY3QodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgIG9uRG9uZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nU3RhdGUoJ3VwZGF0aW5nJylcblxuICAgIGNvbnN0IHNlbGVjdGVkRW52ID0gZW52aXJvbm1lbnRzLmZpbmQoZW52ID0+IGVudi5lbnZpcm9ubWVudF9pZCA9PT0gdmFsdWUpXG5cbiAgICBpZiAoIXNlbGVjdGVkRW52KSB7XG4gICAgICBvbkRvbmUoJ0Vycm9yOiBTZWxlY3RlZCBlbnZpcm9ubWVudCBub3QgZm91bmQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2V0dGluZ3NGb3JTb3VyY2UoJ2xvY2FsU2V0dGluZ3MnLCB7XG4gICAgICByZW1vdGU6IHtcbiAgICAgICAgZGVmYXVsdEVudmlyb25tZW50SWQ6IHNlbGVjdGVkRW52LmVudmlyb25tZW50X2lkLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgb25Eb25lKFxuICAgICAgYFNldCBkZWZhdWx0IHJlbW90ZSBlbnZpcm9ubWVudCB0byAke2NoYWxrLmJvbGQoc2VsZWN0ZWRFbnYubmFtZSl9ICgke3NlbGVjdGVkRW52LmVudmlyb25tZW50X2lkfSlgLFxuICAgIClcbiAgfVxuXG4gIC8vIExvYWRpbmcgc3RhdGVcbiAgaWYgKGxvYWRpbmdTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2cgdGl0bGU9e0RJQUxPR19USVRMRX0gb25DYW5jZWw9e29uRG9uZX0gaGlkZUlucHV0R3VpZGU+XG4gICAgICAgIDxMb2FkaW5nU3RhdGUgbWVzc2FnZT1cIkxvYWRpbmcgZW52aXJvbm1lbnRz4oCmXCIgLz5cbiAgICAgIDwvRGlhbG9nPlxuICAgIClcbiAgfVxuXG4gIC8vIEVycm9yIHN0YXRlXG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nIHRpdGxlPXtESUFMT0dfVElUTEV9IG9uQ2FuY2VsPXtvbkRvbmV9PlxuICAgICAgICA8VGV4dCBjb2xvcj1cImVycm9yXCI+RXJyb3I6IHtlcnJvcn08L1RleHQ+XG4gICAgICA8L0RpYWxvZz5cbiAgICApXG4gIH1cblxuICAvLyBObyBlbnZpcm9ubWVudHMgYXZhaWxhYmxlXG4gIGlmICghc2VsZWN0ZWRFbnZpcm9ubWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nIHRpdGxlPXtESUFMT0dfVElUTEV9IHN1YnRpdGxlPXtTRVRVUF9ISU5UfSBvbkNhbmNlbD17b25Eb25lfT5cbiAgICAgICAgPFRleHQ+Tm8gcmVtb3RlIGVudmlyb25tZW50cyBhdmFpbGFibGUuPC9UZXh0PlxuICAgICAgPC9EaWFsb2c+XG4gICAgKVxuICB9XG5cbiAgLy8gU2luZ2xlIGVudmlyb25tZW50IC0ganVzdCBzaG93IGluZm9cbiAgaWYgKGVudmlyb25tZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNpbmdsZUVudmlyb25tZW50Q29udGVudFxuICAgICAgICBlbnZpcm9ubWVudD17c2VsZWN0ZWRFbnZpcm9ubWVudH1cbiAgICAgICAgb25Eb25lPXtvbkRvbmV9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIC8vIE11bHRpcGxlIGVudmlyb25tZW50cyAtIHNob3cgc2VsZWN0aW9uIFVJXG4gIHJldHVybiAoXG4gICAgPE11bHRpcGxlRW52aXJvbm1lbnRzQ29udGVudFxuICAgICAgZW52aXJvbm1lbnRzPXtlbnZpcm9ubWVudHN9XG4gICAgICBzZWxlY3RlZEVudmlyb25tZW50PXtzZWxlY3RlZEVudmlyb25tZW50fVxuICAgICAgc2VsZWN0ZWRFbnZpcm9ubWVudFNvdXJjZT17c2VsZWN0ZWRFbnZpcm9ubWVudFNvdXJjZX1cbiAgICAgIGxvYWRpbmdTdGF0ZT17bG9hZGluZ1N0YXRlfVxuICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdH1cbiAgICAgIG9uQ2FuY2VsPXtvbkRvbmV9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBFbnZpcm9ubWVudExhYmVsKHtcbiAgZW52aXJvbm1lbnQsXG59OiB7XG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFJlc291cmNlXG59KTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VGV4dD5cbiAgICAgIHtmaWd1cmVzLnRpY2t9IFVzaW5nIDxUZXh0IGJvbGQ+e2Vudmlyb25tZW50Lm5hbWV9PC9UZXh0PnsnICd9XG4gICAgICA8VGV4dCBkaW1Db2xvcj4oe2Vudmlyb25tZW50LmVudmlyb25tZW50X2lkfSk8L1RleHQ+XG4gICAgPC9UZXh0PlxuICApXG59XG5cbmZ1bmN0aW9uIFNpbmdsZUVudmlyb25tZW50Q29udGVudCh7XG4gIGVudmlyb25tZW50LFxuICBvbkRvbmUsXG59OiB7XG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFJlc291cmNlXG4gIG9uRG9uZTogKCkgPT4gdm9pZFxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIEhhbmRsZSBFbnRlciB0byBjb250aW51ZVxuICB1c2VLZXliaW5kaW5nKCdjb25maXJtOnllcycsIG9uRG9uZSwgeyBjb250ZXh0OiAnQ29uZmlybWF0aW9uJyB9KVxuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZyB0aXRsZT17RElBTE9HX1RJVExFfSBzdWJ0aXRsZT17U0VUVVBfSElOVH0gb25DYW5jZWw9e29uRG9uZX0+XG4gICAgICA8RW52aXJvbm1lbnRMYWJlbCBlbnZpcm9ubWVudD17ZW52aXJvbm1lbnR9IC8+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cblxuZnVuY3Rpb24gTXVsdGlwbGVFbnZpcm9ubWVudHNDb250ZW50KHtcbiAgZW52aXJvbm1lbnRzLFxuICBzZWxlY3RlZEVudmlyb25tZW50LFxuICBzZWxlY3RlZEVudmlyb25tZW50U291cmNlLFxuICBsb2FkaW5nU3RhdGUsXG4gIG9uU2VsZWN0LFxuICBvbkNhbmNlbCxcbn06IHtcbiAgZW52aXJvbm1lbnRzOiBFbnZpcm9ubWVudFJlc291cmNlW11cbiAgc2VsZWN0ZWRFbnZpcm9ubWVudDogRW52aXJvbm1lbnRSZXNvdXJjZVxuICBzZWxlY3RlZEVudmlyb25tZW50U291cmNlOiBTZXR0aW5nU291cmNlIHwgbnVsbFxuICBsb2FkaW5nU3RhdGU6IExvYWRpbmdTdGF0ZVxuICBvblNlbGVjdDogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgb25DYW5jZWw6ICgpID0+IHZvaWRcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBzb3VyY2VTdWZmaXggPVxuICAgIHNlbGVjdGVkRW52aXJvbm1lbnRTb3VyY2UgJiYgc2VsZWN0ZWRFbnZpcm9ubWVudFNvdXJjZSAhPT0gJ2xvY2FsU2V0dGluZ3MnXG4gICAgICA/IGAgKGZyb20gJHtnZXRTZXR0aW5nU291cmNlTmFtZShzZWxlY3RlZEVudmlyb25tZW50U291cmNlKX0gc2V0dGluZ3MpYFxuICAgICAgOiAnJ1xuXG4gIGNvbnN0IHN1YnRpdGxlID0gKFxuICAgIDxUZXh0PlxuICAgICAgQ3VycmVudGx5IHVzaW5nOiA8VGV4dCBib2xkPntzZWxlY3RlZEVudmlyb25tZW50Lm5hbWV9PC9UZXh0PlxuICAgICAge3NvdXJjZVN1ZmZpeH1cbiAgICA8L1RleHQ+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxEaWFsb2dcbiAgICAgIHRpdGxlPXtESUFMT0dfVElUTEV9XG4gICAgICBzdWJ0aXRsZT17c3VidGl0bGV9XG4gICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICBoaWRlSW5wdXRHdWlkZVxuICAgID5cbiAgICAgIDxUZXh0IGRpbUNvbG9yPntTRVRVUF9ISU5UfTwvVGV4dD5cbiAgICAgIHtsb2FkaW5nU3RhdGUgPT09ICd1cGRhdGluZycgPyAoXG4gICAgICAgIDxMb2FkaW5nU3RhdGUgbWVzc2FnZT1cIlVwZGF0aW5n4oCmXCIgLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXtlbnZpcm9ubWVudHMubWFwKGVudiA9PiAoe1xuICAgICAgICAgICAgbGFiZWw6IChcbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAge2Vudi5uYW1lfSA8VGV4dCBkaW1Db2xvcj4oe2Vudi5lbnZpcm9ubWVudF9pZH0pPC9UZXh0PlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdmFsdWU6IGVudi5lbnZpcm9ubWVudF9pZCxcbiAgICAgICAgICB9KSl9XG4gICAgICAgICAgZGVmYXVsdFZhbHVlPXtzZWxlY3RlZEVudmlyb25tZW50LmVudmlyb25tZW50X2lkfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblNlbGVjdH1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gb25TZWxlY3QoJ2NhbmNlbCcpfVxuICAgICAgICAgIGxheW91dD1cImNvbXBhY3QtdmVydGljYWxcIlxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICA8QnlsaW5lPlxuICAgICAgICAgIDxLZXlib2FyZFNob3J0Y3V0SGludCBzaG9ydGN1dD1cIkVudGVyXCIgYWN0aW9uPVwic2VsZWN0XCIgLz5cbiAgICAgICAgICA8Q29uZmlndXJhYmxlU2hvcnRjdXRIaW50XG4gICAgICAgICAgICBhY3Rpb249XCJjb25maXJtOm5vXCJcbiAgICAgICAgICAgIGNvbnRleHQ9XCJDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgZmFsbGJhY2s9XCJFc2NcIlxuICAgICAgICAgICAgZGVzY3JpcHRpb249XCJjYW5jZWxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQnlsaW5lPlxuICAgICAgPC9UZXh0PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUN6QixPQUFPQyxPQUFPLE1BQU0sU0FBUztBQUM3QixPQUFPLEtBQUtD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