/ components / permissions / FallbackPermissionRequest.tsx
FallbackPermissionRequest.tsx
  1  import { c as _c } from "react/compiler-runtime";
  2  import React, { useCallback, useMemo } from 'react';
  3  import { getOriginalCwd } from '../../bootstrap/state.js';
  4  import { Box, Text, useTheme } from '../../ink.js';
  5  import { sanitizeToolNameForAnalytics } from '../../services/analytics/metadata.js';
  6  import { env } from '../../utils/env.js';
  7  import { shouldShowAlwaysAllowOptions } from '../../utils/permissions/permissionsLoader.js';
  8  import { truncateToLines } from '../../utils/stringUtils.js';
  9  import { logUnaryEvent } from '../../utils/unaryLogging.js';
 10  import { type UnaryEvent, usePermissionRequestLogging } from './hooks.js';
 11  import { PermissionDialog } from './PermissionDialog.js';
 12  import { PermissionPrompt, type PermissionPromptOption, type ToolAnalyticsContext } from './PermissionPrompt.js';
 13  import type { PermissionRequestProps } from './PermissionRequest.js';
 14  import { PermissionRuleExplanation } from './PermissionRuleExplanation.js';
 15  type FallbackOptionValue = 'yes' | 'yes-dont-ask-again' | 'no';
 16  export function FallbackPermissionRequest(t0) {
 17    const $ = _c(58);
 18    const {
 19      toolUseConfirm,
 20      onDone,
 21      onReject,
 22      workerBadge
 23    } = t0;
 24    const [theme] = useTheme();
 25    let originalUserFacingName;
 26    let t1;
 27    if ($[0] !== toolUseConfirm.input || $[1] !== toolUseConfirm.tool) {
 28      originalUserFacingName = toolUseConfirm.tool.userFacingName(toolUseConfirm.input as never);
 29      t1 = originalUserFacingName.endsWith(" (MCP)") ? originalUserFacingName.slice(0, -6) : originalUserFacingName;
 30      $[0] = toolUseConfirm.input;
 31      $[1] = toolUseConfirm.tool;
 32      $[2] = originalUserFacingName;
 33      $[3] = t1;
 34    } else {
 35      originalUserFacingName = $[2];
 36      t1 = $[3];
 37    }
 38    const userFacingName = t1;
 39    let t2;
 40    if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
 41      t2 = {
 42        completion_type: "tool_use_single",
 43        language_name: "none"
 44      };
 45      $[4] = t2;
 46    } else {
 47      t2 = $[4];
 48    }
 49    const unaryEvent = t2;
 50    usePermissionRequestLogging(toolUseConfirm, unaryEvent);
 51    let t3;
 52    if ($[5] !== onDone || $[6] !== onReject || $[7] !== toolUseConfirm) {
 53      t3 = (value, feedback) => {
 54        bb8: switch (value) {
 55          case "yes":
 56            {
 57              logUnaryEvent({
 58                completion_type: "tool_use_single",
 59                event: "accept",
 60                metadata: {
 61                  language_name: "none",
 62                  message_id: toolUseConfirm.assistantMessage.message.id,
 63                  platform: env.platform
 64                }
 65              });
 66              toolUseConfirm.onAllow(toolUseConfirm.input, [], feedback);
 67              onDone();
 68              break bb8;
 69            }
 70          case "yes-dont-ask-again":
 71            {
 72              logUnaryEvent({
 73                completion_type: "tool_use_single",
 74                event: "accept",
 75                metadata: {
 76                  language_name: "none",
 77                  message_id: toolUseConfirm.assistantMessage.message.id,
 78                  platform: env.platform
 79                }
 80              });
 81              toolUseConfirm.onAllow(toolUseConfirm.input, [{
 82                type: "addRules",
 83                rules: [{
 84                  toolName: toolUseConfirm.tool.name
 85                }],
 86                behavior: "allow",
 87                destination: "localSettings"
 88              }]);
 89              onDone();
 90              break bb8;
 91            }
 92          case "no":
 93            {
 94              logUnaryEvent({
 95                completion_type: "tool_use_single",
 96                event: "reject",
 97                metadata: {
 98                  language_name: "none",
 99                  message_id: toolUseConfirm.assistantMessage.message.id,
100                  platform: env.platform
101                }
102              });
103              toolUseConfirm.onReject(feedback);
104              onReject();
105              onDone();
106            }
107        }
108      };
109      $[5] = onDone;
110      $[6] = onReject;
111      $[7] = toolUseConfirm;
112      $[8] = t3;
113    } else {
114      t3 = $[8];
115    }
116    const handleSelect = t3;
117    let t4;
118    if ($[9] !== onDone || $[10] !== onReject || $[11] !== toolUseConfirm) {
119      t4 = () => {
120        logUnaryEvent({
121          completion_type: "tool_use_single",
122          event: "reject",
123          metadata: {
124            language_name: "none",
125            message_id: toolUseConfirm.assistantMessage.message.id,
126            platform: env.platform
127          }
128        });
129        toolUseConfirm.onReject();
130        onReject();
131        onDone();
132      };
133      $[9] = onDone;
134      $[10] = onReject;
135      $[11] = toolUseConfirm;
136      $[12] = t4;
137    } else {
138      t4 = $[12];
139    }
140    const handleCancel = t4;
141    let t5;
142    if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
143      t5 = getOriginalCwd();
144      $[13] = t5;
145    } else {
146      t5 = $[13];
147    }
148    const originalCwd = t5;
149    let t6;
150    if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
151      t6 = shouldShowAlwaysAllowOptions();
152      $[14] = t6;
153    } else {
154      t6 = $[14];
155    }
156    const showAlwaysAllowOptions = t6;
157    let t7;
158    if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
159      t7 = {
160        label: "Yes",
161        value: "yes",
162        feedbackConfig: {
163          type: "accept"
164        }
165      };
166      $[15] = t7;
167    } else {
168      t7 = $[15];
169    }
170    let result;
171    if ($[16] !== userFacingName) {
172      result = [t7];
173      if (showAlwaysAllowOptions) {
174        const t8 = <Text bold={true}>{userFacingName}</Text>;
175        let t9;
176        if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
177          t9 = <Text bold={true}>{originalCwd}</Text>;
178          $[18] = t9;
179        } else {
180          t9 = $[18];
181        }
182        let t10;
183        if ($[19] !== t8) {
184          t10 = {
185            label: <Text>Yes, and don't ask again for {t8}{" "}commands in {t9}</Text>,
186            value: "yes-dont-ask-again"
187          };
188          $[19] = t8;
189          $[20] = t10;
190        } else {
191          t10 = $[20];
192        }
193        result.push(t10);
194      }
195      let t8;
196      if ($[21] === Symbol.for("react.memo_cache_sentinel")) {
197        t8 = {
198          label: "No",
199          value: "no",
200          feedbackConfig: {
201            type: "reject"
202          }
203        };
204        $[21] = t8;
205      } else {
206        t8 = $[21];
207      }
208      result.push(t8);
209      $[16] = userFacingName;
210      $[17] = result;
211    } else {
212      result = $[17];
213    }
214    const options = result;
215    let t8;
216    if ($[22] !== toolUseConfirm.tool.name) {
217      t8 = sanitizeToolNameForAnalytics(toolUseConfirm.tool.name);
218      $[22] = toolUseConfirm.tool.name;
219      $[23] = t8;
220    } else {
221      t8 = $[23];
222    }
223    const t9 = toolUseConfirm.tool.isMcp ?? false;
224    let t10;
225    if ($[24] !== t8 || $[25] !== t9) {
226      t10 = {
227        toolName: t8,
228        isMcp: t9
229      };
230      $[24] = t8;
231      $[25] = t9;
232      $[26] = t10;
233    } else {
234      t10 = $[26];
235    }
236    const toolAnalyticsContext = t10;
237    let t11;
238    if ($[27] !== theme || $[28] !== toolUseConfirm.input || $[29] !== toolUseConfirm.tool) {
239      t11 = toolUseConfirm.tool.renderToolUseMessage(toolUseConfirm.input as never, {
240        theme,
241        verbose: true
242      });
243      $[27] = theme;
244      $[28] = toolUseConfirm.input;
245      $[29] = toolUseConfirm.tool;
246      $[30] = t11;
247    } else {
248      t11 = $[30];
249    }
250    let t12;
251    if ($[31] !== originalUserFacingName) {
252      t12 = originalUserFacingName.endsWith(" (MCP)") ? <Text dimColor={true}> (MCP)</Text> : "";
253      $[31] = originalUserFacingName;
254      $[32] = t12;
255    } else {
256      t12 = $[32];
257    }
258    let t13;
259    if ($[33] !== t11 || $[34] !== t12 || $[35] !== userFacingName) {
260      t13 = <Text>{userFacingName}({t11}){t12}</Text>;
261      $[33] = t11;
262      $[34] = t12;
263      $[35] = userFacingName;
264      $[36] = t13;
265    } else {
266      t13 = $[36];
267    }
268    let t14;
269    if ($[37] !== toolUseConfirm.description) {
270      t14 = truncateToLines(toolUseConfirm.description, 3);
271      $[37] = toolUseConfirm.description;
272      $[38] = t14;
273    } else {
274      t14 = $[38];
275    }
276    let t15;
277    if ($[39] !== t14) {
278      t15 = <Text dimColor={true}>{t14}</Text>;
279      $[39] = t14;
280      $[40] = t15;
281    } else {
282      t15 = $[40];
283    }
284    let t16;
285    if ($[41] !== t13 || $[42] !== t15) {
286      t16 = <Box flexDirection="column" paddingX={2} paddingY={1}>{t13}{t15}</Box>;
287      $[41] = t13;
288      $[42] = t15;
289      $[43] = t16;
290    } else {
291      t16 = $[43];
292    }
293    let t17;
294    if ($[44] !== toolUseConfirm.permissionResult) {
295      t17 = <PermissionRuleExplanation permissionResult={toolUseConfirm.permissionResult} toolType="tool" />;
296      $[44] = toolUseConfirm.permissionResult;
297      $[45] = t17;
298    } else {
299      t17 = $[45];
300    }
301    let t18;
302    if ($[46] !== handleCancel || $[47] !== handleSelect || $[48] !== options || $[49] !== toolAnalyticsContext) {
303      t18 = <PermissionPrompt options={options} onSelect={handleSelect} onCancel={handleCancel} toolAnalyticsContext={toolAnalyticsContext} />;
304      $[46] = handleCancel;
305      $[47] = handleSelect;
306      $[48] = options;
307      $[49] = toolAnalyticsContext;
308      $[50] = t18;
309    } else {
310      t18 = $[50];
311    }
312    let t19;
313    if ($[51] !== t17 || $[52] !== t18) {
314      t19 = <Box flexDirection="column">{t17}{t18}</Box>;
315      $[51] = t17;
316      $[52] = t18;
317      $[53] = t19;
318    } else {
319      t19 = $[53];
320    }
321    let t20;
322    if ($[54] !== t16 || $[55] !== t19 || $[56] !== workerBadge) {
323      t20 = <PermissionDialog title="Tool use" workerBadge={workerBadge}>{t16}{t19}</PermissionDialog>;
324      $[54] = t16;
325      $[55] = t19;
326      $[56] = workerBadge;
327      $[57] = t20;
328    } else {
329      t20 = $[57];
330    }
331    return t20;
332  }
333  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImdldE9yaWdpbmFsQ3dkIiwiQm94IiwiVGV4dCIsInVzZVRoZW1lIiwic2FuaXRpemVUb29sTmFtZUZvckFuYWx5dGljcyIsImVudiIsInNob3VsZFNob3dBbHdheXNBbGxvd09wdGlvbnMiLCJ0cnVuY2F0ZVRvTGluZXMiLCJsb2dVbmFyeUV2ZW50IiwiVW5hcnlFdmVudCIsInVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyIsIlBlcm1pc3Npb25EaWFsb2ciLCJQZXJtaXNzaW9uUHJvbXB0IiwiUGVybWlzc2lvblByb21wdE9wdGlvbiIsIlRvb2xBbmFseXRpY3NDb250ZXh0IiwiUGVybWlzc2lvblJlcXVlc3RQcm9wcyIsIlBlcm1pc3Npb25SdWxlRXhwbGFuYXRpb24iLCJGYWxsYmFja09wdGlvblZhbHVlIiwiRmFsbGJhY2tQZXJtaXNzaW9uUmVxdWVzdCIsInQwIiwiJCIsIl9jIiwidG9vbFVzZUNvbmZpcm0iLCJvbkRvbmUiLCJvblJlamVjdCIsIndvcmtlckJhZGdlIiwidGhlbWUiLCJvcmlnaW5hbFVzZXJGYWNpbmdOYW1lIiwidDEiLCJpbnB1dCIsInRvb2wiLCJ1c2VyRmFjaW5nTmFtZSIsImVuZHNXaXRoIiwic2xpY2UiLCJ0MiIsIlN5bWJvbCIsImZvciIsImNvbXBsZXRpb25fdHlwZSIsImxhbmd1YWdlX25hbWUiLCJ1bmFyeUV2ZW50IiwidDMiLCJ2YWx1ZSIsImZlZWRiYWNrIiwiYmI4IiwiZXZlbnQiLCJtZXRhZGF0YSIsIm1lc3NhZ2VfaWQiLCJhc3Npc3RhbnRNZXNzYWdlIiwibWVzc2FnZSIsImlkIiwicGxhdGZvcm0iLCJvbkFsbG93IiwidHlwZSIsInJ1bGVzIiwidG9vbE5hbWUiLCJuYW1lIiwiYmVoYXZpb3IiLCJkZXN0aW5hdGlvbiIsImhhbmRsZVNlbGVjdCIsInQ0IiwiaGFuZGxlQ2FuY2VsIiwidDUiLCJvcmlnaW5hbEN3ZCIsInQ2Iiwic2hvd0Fsd2F5c0FsbG93T3B0aW9ucyIsInQ3IiwibGFiZWwiLCJmZWVkYmFja0NvbmZpZyIsInJlc3VsdCIsInQ4IiwidDkiLCJ0MTAiLCJwdXNoIiwib3B0aW9ucyIsImlzTWNwIiwidG9vbEFuYWx5dGljc0NvbnRleHQiLCJ0MTEiLCJyZW5kZXJUb29sVXNlTWVzc2FnZSIsInZlcmJvc2UiLCJ0MTIiLCJ0MTMiLCJ0MTQiLCJkZXNjcmlwdGlvbiIsInQxNSIsInQxNiIsInQxNyIsInBlcm1pc3Npb25SZXN1bHQiLCJ0MTgiLCJ0MTkiLCJ0MjAiXSwic291cmNlcyI6WyJGYWxsYmFja1Blcm1pc3Npb25SZXF1ZXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldE9yaWdpbmFsQ3dkIH0gZnJvbSAnLi4vLi4vYm9vdHN0cmFwL3N0YXRlLmpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VUaGVtZSB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7IHNhbml0aXplVG9vbE5hbWVGb3JBbmFseXRpY3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3MvbWV0YWRhdGEuanMnXG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi91dGlscy9lbnYuanMnXG5pbXBvcnQgeyBzaG91bGRTaG93QWx3YXlzQWxsb3dPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnNMb2FkZXIuanMnXG5pbXBvcnQgeyB0cnVuY2F0ZVRvTGluZXMgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmdVdGlscy5qcydcbmltcG9ydCB7IGxvZ1VuYXJ5RXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy91bmFyeUxvZ2dpbmcuanMnXG5pbXBvcnQgeyB0eXBlIFVuYXJ5RXZlbnQsIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyB9IGZyb20gJy4vaG9va3MuanMnXG5pbXBvcnQgeyBQZXJtaXNzaW9uRGlhbG9nIH0gZnJvbSAnLi9QZXJtaXNzaW9uRGlhbG9nLmpzJ1xuaW1wb3J0IHtcbiAgUGVybWlzc2lvblByb21wdCxcbiAgdHlwZSBQZXJtaXNzaW9uUHJvbXB0T3B0aW9uLFxuICB0eXBlIFRvb2xBbmFseXRpY3NDb250ZXh0LFxufSBmcm9tICcuL1Blcm1pc3Npb25Qcm9tcHQuanMnXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25SZXF1ZXN0UHJvcHMgfSBmcm9tICcuL1Blcm1pc3Npb25SZXF1ZXN0LmpzJ1xuaW1wb3J0IHsgUGVybWlzc2lvblJ1bGVFeHBsYW5hdGlvbiB9IGZyb20gJy4vUGVybWlzc2lvblJ1bGVFeHBsYW5hdGlvbi5qcydcblxudHlwZSBGYWxsYmFja09wdGlvblZhbHVlID0gJ3llcycgfCAneWVzLWRvbnQtYXNrLWFnYWluJyB8ICdubydcblxuZXhwb3J0IGZ1bmN0aW9uIEZhbGxiYWNrUGVybWlzc2lvblJlcXVlc3Qoe1xuICB0b29sVXNlQ29uZmlybSxcbiAgb25Eb25lLFxuICBvblJlamVjdCxcbiAgdmVyYm9zZTogX3ZlcmJvc2UsXG4gIHdvcmtlckJhZGdlLFxufTogUGVybWlzc2lvblJlcXVlc3RQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFt0aGVtZV0gPSB1c2VUaGVtZSgpXG4gIC8vIFRPRE86IEF2b2lkIHRoZXNlIHNwZWNpYWwgY2FzZXNcbiAgY29uc3Qgb3JpZ2luYWxVc2VyRmFjaW5nTmFtZSA9IHRvb2xVc2VDb25maXJtLnRvb2wudXNlckZhY2luZ05hbWUoXG4gICAgdG9vbFVzZUNvbmZpcm0uaW5wdXQgYXMgbmV2ZXIsXG4gIClcbiAgY29uc3QgdXNlckZhY2luZ05hbWUgPSBvcmlnaW5hbFVzZXJGYWNpbmdOYW1lLmVuZHNXaXRoKCcgKE1DUCknKVxuICAgID8gb3JpZ2luYWxVc2VyRmFjaW5nTmFtZS5zbGljZSgwLCAtNilcbiAgICA6IG9yaWdpbmFsVXNlckZhY2luZ05hbWVcblxuICBjb25zdCB1bmFyeUV2ZW50ID0gdXNlTWVtbzxVbmFyeUV2ZW50PihcbiAgICAoKSA9PiAoe1xuICAgICAgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgIGxhbmd1YWdlX25hbWU6ICdub25lJyxcbiAgICB9KSxcbiAgICBbXSxcbiAgKVxuXG4gIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyh0b29sVXNlQ29uZmlybSwgdW5hcnlFdmVudClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IEZhbGxiYWNrT3B0aW9uVmFsdWUsIGZlZWRiYWNrPzogc3RyaW5nKSA9PiB7XG4gICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3llcyc6XG4gICAgICAgICAgdm9pZCBsb2dVbmFyeUV2ZW50KHtcbiAgICAgICAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3Rvb2xfdXNlX3NpbmdsZScsXG4gICAgICAgICAgICBldmVudDogJ2FjY2VwdCcsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBsYW5ndWFnZV9uYW1lOiAnbm9uZScsXG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IHRvb2xVc2VDb25maXJtLmFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgcGxhdGZvcm06IGVudi5wbGF0Zm9ybSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KHRvb2xVc2VDb25maXJtLmlucHV0LCBbXSwgZmVlZGJhY2spXG4gICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZXMtZG9udC1hc2stYWdhaW4nOiB7XG4gICAgICAgICAgdm9pZCBsb2dVbmFyeUV2ZW50KHtcbiAgICAgICAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3Rvb2xfdXNlX3NpbmdsZScsXG4gICAgICAgICAgICBldmVudDogJ2FjY2VwdCcsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBsYW5ndWFnZV9uYW1lOiAnbm9uZScsXG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IHRvb2xVc2VDb25maXJtLmFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgcGxhdGZvcm06IGVudi5wbGF0Zm9ybSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRvb2xVc2VDb25maXJtLm9uQWxsb3codG9vbFVzZUNvbmZpcm0uaW5wdXQsIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2FkZFJ1bGVzJyxcbiAgICAgICAgICAgICAgcnVsZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0b29sTmFtZTogdG9vbFVzZUNvbmZpcm0udG9vbC5uYW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGJlaGF2aW9yOiAnYWxsb3cnLFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbjogJ2xvY2FsU2V0dGluZ3MnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKVxuICAgICAgICAgIG9uRG9uZSgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdubyc6XG4gICAgICAgICAgdm9pZCBsb2dVbmFyeUV2ZW50KHtcbiAgICAgICAgICAgIGNvbXBsZXRpb25fdHlwZTogJ3Rvb2xfdXNlX3NpbmdsZScsXG4gICAgICAgICAgICBldmVudDogJ3JlamVjdCcsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICBsYW5ndWFnZV9uYW1lOiAnbm9uZScsXG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IHRvb2xVc2VDb25maXJtLmFzc2lzdGFudE1lc3NhZ2UubWVzc2FnZS5pZCxcbiAgICAgICAgICAgICAgcGxhdGZvcm06IGVudi5wbGF0Zm9ybSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0b29sVXNlQ29uZmlybS5vblJlamVjdChmZWVkYmFjaylcbiAgICAgICAgICBvblJlamVjdCgpXG4gICAgICAgICAgb25Eb25lKClcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Rvb2xVc2VDb25maXJtLCBvbkRvbmUsIG9uUmVqZWN0XSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB2b2lkIGxvZ1VuYXJ5RXZlbnQoe1xuICAgICAgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJyxcbiAgICAgIGV2ZW50OiAncmVqZWN0JyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGxhbmd1YWdlX25hbWU6ICdub25lJyxcbiAgICAgICAgbWVzc2FnZV9pZDogdG9vbFVzZUNvbmZpcm0uYXNzaXN0YW50TWVzc2FnZS5tZXNzYWdlLmlkLFxuICAgICAgICBwbGF0Zm9ybTogZW52LnBsYXRmb3JtLFxuICAgICAgfSxcbiAgICB9KVxuICAgIHRvb2xVc2VDb25maXJtLm9uUmVqZWN0KClcbiAgICBvblJlamVjdCgpXG4gICAgb25Eb25lKClcbiAgfSwgW3Rvb2xVc2VDb25maXJtLCBvbkRvbmUsIG9uUmVqZWN0XSlcblxuICBjb25zdCBvcmlnaW5hbEN3ZCA9IGdldE9yaWdpbmFsQ3dkKClcbiAgY29uc3Qgc2hvd0Fsd2F5c0FsbG93T3B0aW9ucyA9IHNob3VsZFNob3dBbHdheXNBbGxvd09wdGlvbnMoKVxuICBjb25zdCBvcHRpb25zID0gdXNlTWVtbygoKTogUGVybWlzc2lvblByb21wdE9wdGlvbjxGYWxsYmFja09wdGlvblZhbHVlPltdID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IFBlcm1pc3Npb25Qcm9tcHRPcHRpb248RmFsbGJhY2tPcHRpb25WYWx1ZT5bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdZZXMnLFxuICAgICAgICB2YWx1ZTogJ3llcycsXG4gICAgICAgIGZlZWRiYWNrQ29uZmlnOiB7IHR5cGU6ICdhY2NlcHQnIH0sXG4gICAgICB9LFxuICAgIF1cblxuICAgIGlmIChzaG93QWx3YXlzQWxsb3dPcHRpb25zKSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGxhYmVsOiAoXG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBZZXMsIGFuZCBkb24mYXBvczt0IGFzayBhZ2FpbiBmb3IgPFRleHQgYm9sZD57dXNlckZhY2luZ05hbWV9PC9UZXh0PnsnICd9XG4gICAgICAgICAgICBjb21tYW5kcyBpbiA8VGV4dCBib2xkPntvcmlnaW5hbEN3ZH08L1RleHQ+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ3llcy1kb250LWFzay1hZ2FpbicsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgIGxhYmVsOiAnTm8nLFxuICAgICAgdmFsdWU6ICdubycsXG4gICAgICBmZWVkYmFja0NvbmZpZzogeyB0eXBlOiAncmVqZWN0JyB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0sIFt1c2VyRmFjaW5nTmFtZSwgb3JpZ2luYWxDd2QsIHNob3dBbHdheXNBbGxvd09wdGlvbnNdKVxuXG4gIGNvbnN0IHRvb2xBbmFseXRpY3NDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKTogVG9vbEFuYWx5dGljc0NvbnRleHQgPT4gKHtcbiAgICAgIHRvb2xOYW1lOiBzYW5pdGl6ZVRvb2xOYW1lRm9yQW5hbHl0aWNzKHRvb2xVc2VDb25maXJtLnRvb2wubmFtZSksXG4gICAgICBpc01jcDogdG9vbFVzZUNvbmZpcm0udG9vbC5pc01jcCA/PyBmYWxzZSxcbiAgICB9KSxcbiAgICBbdG9vbFVzZUNvbmZpcm0udG9vbC5uYW1lLCB0b29sVXNlQ29uZmlybS50b29sLmlzTWNwXSxcbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFBlcm1pc3Npb25EaWFsb2cgdGl0bGU9XCJUb29sIHVzZVwiIHdvcmtlckJhZGdlPXt3b3JrZXJCYWRnZX0+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWD17Mn0gcGFkZGluZ1k9ezF9PlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICB7dXNlckZhY2luZ05hbWV9KFxuICAgICAgICAgIHt0b29sVXNlQ29uZmlybS50b29sLnJlbmRlclRvb2xVc2VNZXNzYWdlKFxuICAgICAgICAgICAgdG9vbFVzZUNvbmZpcm0uaW5wdXQgYXMgbmV2ZXIsXG4gICAgICAgICAgICB7IHRoZW1lLCB2ZXJib3NlOiB0cnVlIH0sXG4gICAgICAgICAgKX1cbiAgICAgICAgICApXG4gICAgICAgICAge29yaWdpbmFsVXNlckZhY2luZ05hbWUuZW5kc1dpdGgoJyAoTUNQKScpID8gKFxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+IChNQ1ApPC9UZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICl9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+e3RydW5jYXRlVG9MaW5lcyh0b29sVXNlQ29uZmlybS5kZXNjcmlwdGlvbiwgMyl9PC9UZXh0PlxuICAgICAgPC9Cb3g+XG5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8UGVybWlzc2lvblJ1bGVFeHBsYW5hdGlvblxuICAgICAgICAgIHBlcm1pc3Npb25SZXN1bHQ9e3Rvb2xVc2VDb25maXJtLnBlcm1pc3Npb25SZXN1bHR9XG4gICAgICAgICAgdG9vbFR5cGU9XCJ0b29sXCJcbiAgICAgICAgLz5cbiAgICAgICAgPFBlcm1pc3Npb25Qcm9tcHRcbiAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgb25DYW5jZWw9e2hhbmRsZUNhbmNlbH1cbiAgICAgICAgICB0b29sQW5hbHl0aWNzQ29udGV4dD17dG9vbEFuYWx5dGljc0NvbnRleHR9XG4gICAgICAgIC8+XG4gICAgICA8L0JveD5cbiAgICA8L1Blcm1pc3Npb25EaWFsb2c+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQUssSUFBSUMsV0FBVyxFQUFFQyxPQUFPLFFBQVEsT0FBTztBQUNuRCxTQUFTQyxjQUFjLFFBQVEsMEJBQTBCO0FBQ3pELFNBQVNDLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxRQUFRLFFBQVEsY0FBYztBQUNsRCxTQUFTQyw0QkFBNEIsUUFBUSxzQ0FBc0M7QUFDbkYsU0FBU0MsR0FBRyxRQUFRLG9CQUFvQjtBQUN4QyxTQUFTQyw0QkFBNEIsUUFBUSw4Q0FBOEM7QUFDM0YsU0FBU0MsZUFBZSxRQUFRLDRCQUE0QjtBQUM1RCxTQUFTQyxhQUFhLFFBQVEsNkJBQTZCO0FBQzNELFNBQVMsS0FBS0MsVUFBVSxFQUFFQywyQkFBMkIsUUFBUSxZQUFZO0FBQ3pFLFNBQVNDLGdCQUFnQixRQUFRLHVCQUF1QjtBQUN4RCxTQUNFQyxnQkFBZ0IsRUFDaEIsS0FBS0Msc0JBQXNCLEVBQzNCLEtBQUtDLG9CQUFvQixRQUNwQix1QkFBdUI7QUFDOUIsY0FBY0Msc0JBQXNCLFFBQVEsd0JBQXdCO0FBQ3BFLFNBQVNDLHlCQUF5QixRQUFRLGdDQUFnQztBQUUxRSxLQUFLQyxtQkFBbUIsR0FBRyxLQUFLLEdBQUcsb0JBQW9CLEdBQUcsSUFBSTtBQUU5RCxPQUFPLFNBQUFDLDBCQUFBQyxFQUFBO0VBQUEsTUFBQUMsQ0FBQSxHQUFBQyxFQUFBO0VBQW1DO0lBQUFDLGNBQUE7SUFBQUMsTUFBQTtJQUFBQyxRQUFBO0lBQUFDO0VBQUEsSUFBQU4sRUFNakI7RUFDdkIsT0FBQU8sS0FBQSxJQUFnQnZCLFFBQVEsQ0FBQyxDQUFDO0VBQUEsSUFBQXdCLHNCQUFBO0VBQUEsSUFBQUMsRUFBQTtFQUFBLElBQUFSLENBQUEsUUFBQUUsY0FBQSxDQUFBTyxLQUFBLElB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