source dump of claude code
at main 258 lines 23 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import React, { useMemo } from 'react'; 3import { Box, Text, useTheme } from '../../../ink.js'; 4import { WebFetchTool } from '../../../tools/WebFetchTool/WebFetchTool.js'; 5import { shouldShowAlwaysAllowOptions } from '../../../utils/permissions/permissionsLoader.js'; 6import { type OptionWithDescription, Select } from '../../CustomSelect/select.js'; 7import { type UnaryEvent, usePermissionRequestLogging } from '../hooks.js'; 8import { PermissionDialog } from '../PermissionDialog.js'; 9import type { PermissionRequestProps } from '../PermissionRequest.js'; 10import { PermissionRuleExplanation } from '../PermissionRuleExplanation.js'; 11import { logUnaryPermissionEvent } from '../utils.js'; 12function inputToPermissionRuleContent(input: { 13 [k: string]: unknown; 14}): string { 15 try { 16 const parsedInput = WebFetchTool.inputSchema.safeParse(input); 17 if (!parsedInput.success) { 18 return `input:${input.toString()}`; 19 } 20 const { 21 url 22 } = parsedInput.data; 23 const hostname = new URL(url).hostname; 24 return `domain:${hostname}`; 25 } catch { 26 return `input:${input.toString()}`; 27 } 28} 29export function WebFetchPermissionRequest(t0) { 30 const $ = _c(41); 31 const { 32 toolUseConfirm, 33 onDone, 34 onReject, 35 verbose, 36 workerBadge 37 } = t0; 38 const [theme] = useTheme(); 39 const { 40 url 41 } = toolUseConfirm.input as { 42 url: string; 43 }; 44 let t1; 45 if ($[0] !== url) { 46 t1 = new URL(url); 47 $[0] = url; 48 $[1] = t1; 49 } else { 50 t1 = $[1]; 51 } 52 const hostname = t1.hostname; 53 let t2; 54 if ($[2] === Symbol.for("react.memo_cache_sentinel")) { 55 t2 = { 56 completion_type: "tool_use_single", 57 language_name: "none" 58 }; 59 $[2] = t2; 60 } else { 61 t2 = $[2]; 62 } 63 const unaryEvent = t2; 64 usePermissionRequestLogging(toolUseConfirm, unaryEvent); 65 let t3; 66 if ($[3] === Symbol.for("react.memo_cache_sentinel")) { 67 t3 = shouldShowAlwaysAllowOptions(); 68 $[3] = t3; 69 } else { 70 t3 = $[3]; 71 } 72 const showAlwaysAllowOptions = t3; 73 let t4; 74 if ($[4] === Symbol.for("react.memo_cache_sentinel")) { 75 t4 = { 76 label: "Yes", 77 value: "yes" 78 }; 79 $[4] = t4; 80 } else { 81 t4 = $[4]; 82 } 83 let result; 84 if ($[5] !== hostname) { 85 result = [t4]; 86 if (showAlwaysAllowOptions) { 87 const t5 = <Text bold={true}>{hostname}</Text>; 88 let t6; 89 if ($[7] !== t5) { 90 t6 = { 91 label: <Text>Yes, and don't ask again for {t5}</Text>, 92 value: "yes-dont-ask-again-domain" 93 }; 94 $[7] = t5; 95 $[8] = t6; 96 } else { 97 t6 = $[8]; 98 } 99 result.push(t6); 100 } 101 let t5; 102 if ($[9] === Symbol.for("react.memo_cache_sentinel")) { 103 t5 = { 104 label: <Text>No, and tell Claude what to do differently <Text bold={true}>(esc)</Text></Text>, 105 value: "no" 106 }; 107 $[9] = t5; 108 } else { 109 t5 = $[9]; 110 } 111 result.push(t5); 112 $[5] = hostname; 113 $[6] = result; 114 } else { 115 result = $[6]; 116 } 117 const options = result; 118 let t5; 119 if ($[10] !== onDone || $[11] !== onReject || $[12] !== toolUseConfirm) { 120 t5 = function onChange(newValue) { 121 bb8: switch (newValue) { 122 case "yes": 123 { 124 logUnaryPermissionEvent("tool_use_single", toolUseConfirm, "accept"); 125 toolUseConfirm.onAllow(toolUseConfirm.input, []); 126 onDone(); 127 break bb8; 128 } 129 case "yes-dont-ask-again-domain": 130 { 131 logUnaryPermissionEvent("tool_use_single", toolUseConfirm, "accept"); 132 const ruleContent = inputToPermissionRuleContent(toolUseConfirm.input); 133 const ruleValue = { 134 toolName: toolUseConfirm.tool.name, 135 ruleContent 136 }; 137 toolUseConfirm.onAllow(toolUseConfirm.input, [{ 138 type: "addRules", 139 rules: [ruleValue], 140 behavior: "allow", 141 destination: "localSettings" 142 }]); 143 onDone(); 144 break bb8; 145 } 146 case "no": 147 { 148 logUnaryPermissionEvent("tool_use_single", toolUseConfirm, "reject"); 149 toolUseConfirm.onReject(); 150 onReject(); 151 onDone(); 152 } 153 } 154 }; 155 $[10] = onDone; 156 $[11] = onReject; 157 $[12] = toolUseConfirm; 158 $[13] = t5; 159 } else { 160 t5 = $[13]; 161 } 162 const onChange = t5; 163 let t6; 164 if ($[14] !== theme || $[15] !== toolUseConfirm.input || $[16] !== verbose) { 165 t6 = WebFetchTool.renderToolUseMessage(toolUseConfirm.input as { 166 url: string; 167 prompt: string; 168 }, { 169 theme, 170 verbose 171 }); 172 $[14] = theme; 173 $[15] = toolUseConfirm.input; 174 $[16] = verbose; 175 $[17] = t6; 176 } else { 177 t6 = $[17]; 178 } 179 let t7; 180 if ($[18] !== t6) { 181 t7 = <Text>{t6}</Text>; 182 $[18] = t6; 183 $[19] = t7; 184 } else { 185 t7 = $[19]; 186 } 187 let t8; 188 if ($[20] !== toolUseConfirm.description) { 189 t8 = <Text dimColor={true}>{toolUseConfirm.description}</Text>; 190 $[20] = toolUseConfirm.description; 191 $[21] = t8; 192 } else { 193 t8 = $[21]; 194 } 195 let t9; 196 if ($[22] !== t7 || $[23] !== t8) { 197 t9 = <Box flexDirection="column" paddingX={2} paddingY={1}>{t7}{t8}</Box>; 198 $[22] = t7; 199 $[23] = t8; 200 $[24] = t9; 201 } else { 202 t9 = $[24]; 203 } 204 let t10; 205 if ($[25] !== toolUseConfirm.permissionResult) { 206 t10 = <PermissionRuleExplanation permissionResult={toolUseConfirm.permissionResult} toolType="tool" />; 207 $[25] = toolUseConfirm.permissionResult; 208 $[26] = t10; 209 } else { 210 t10 = $[26]; 211 } 212 let t11; 213 if ($[27] === Symbol.for("react.memo_cache_sentinel")) { 214 t11 = <Text>Do you want to allow Claude to fetch this content?</Text>; 215 $[27] = t11; 216 } else { 217 t11 = $[27]; 218 } 219 let t12; 220 if ($[28] !== onChange) { 221 t12 = () => onChange("no"); 222 $[28] = onChange; 223 $[29] = t12; 224 } else { 225 t12 = $[29]; 226 } 227 let t13; 228 if ($[30] !== onChange || $[31] !== options || $[32] !== t12) { 229 t13 = <Select options={options} onChange={onChange} onCancel={t12} />; 230 $[30] = onChange; 231 $[31] = options; 232 $[32] = t12; 233 $[33] = t13; 234 } else { 235 t13 = $[33]; 236 } 237 let t14; 238 if ($[34] !== t10 || $[35] !== t13) { 239 t14 = <Box flexDirection="column">{t10}{t11}{t13}</Box>; 240 $[34] = t10; 241 $[35] = t13; 242 $[36] = t14; 243 } else { 244 t14 = $[36]; 245 } 246 let t15; 247 if ($[37] !== t14 || $[38] !== t9 || $[39] !== workerBadge) { 248 t15 = <PermissionDialog title="Fetch" workerBadge={workerBadge}>{t9}{t14}</PermissionDialog>; 249 $[37] = t14; 250 $[38] = t9; 251 $[39] = workerBadge; 252 $[40] = t15; 253 } else { 254 t15 = $[40]; 255 } 256 return t15; 257} 258//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZU1lbW8iLCJCb3giLCJUZXh0IiwidXNlVGhlbWUiLCJXZWJGZXRjaFRvb2wiLCJzaG91bGRTaG93QWx3YXlzQWxsb3dPcHRpb25zIiwiT3B0aW9uV2l0aERlc2NyaXB0aW9uIiwiU2VsZWN0IiwiVW5hcnlFdmVudCIsInVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyIsIlBlcm1pc3Npb25EaWFsb2ciLCJQZXJtaXNzaW9uUmVxdWVzdFByb3BzIiwiUGVybWlzc2lvblJ1bGVFeHBsYW5hdGlvbiIsImxvZ1VuYXJ5UGVybWlzc2lvbkV2ZW50IiwiaW5wdXRUb1Blcm1pc3Npb25SdWxlQ29udGVudCIsImlucHV0IiwiayIsInBhcnNlZElucHV0IiwiaW5wdXRTY2hlbWEiLCJzYWZlUGFyc2UiLCJzdWNjZXNzIiwidG9TdHJpbmciLCJ1cmwiLCJkYXRhIiwiaG9zdG5hbWUiLCJVUkwiLCJXZWJGZXRjaFBlcm1pc3Npb25SZXF1ZXN0IiwidDAiLCIkIiwiX2MiLCJ0b29sVXNlQ29uZmlybSIsIm9uRG9uZSIsIm9uUmVqZWN0IiwidmVyYm9zZSIsIndvcmtlckJhZGdlIiwidGhlbWUiLCJ0MSIsInQyIiwiU3ltYm9sIiwiZm9yIiwiY29tcGxldGlvbl90eXBlIiwibGFuZ3VhZ2VfbmFtZSIsInVuYXJ5RXZlbnQiLCJ0MyIsInNob3dBbHdheXNBbGxvd09wdGlvbnMiLCJ0NCIsImxhYmVsIiwidmFsdWUiLCJyZXN1bHQiLCJ0NSIsInQ2IiwicHVzaCIsIm9wdGlvbnMiLCJvbkNoYW5nZSIsIm5ld1ZhbHVlIiwiYmI4Iiwib25BbGxvdyIsInJ1bGVDb250ZW50IiwicnVsZVZhbHVlIiwidG9vbE5hbWUiLCJ0b29sIiwibmFtZSIsInR5cGUiLCJydWxlcyIsImJlaGF2aW9yIiwiZGVzdGluYXRpb24iLCJyZW5kZXJUb29sVXNlTWVzc2FnZSIsInByb21wdCIsInQ3IiwidDgiLCJkZXNjcmlwdGlvbiIsInQ5IiwidDEwIiwicGVybWlzc2lvblJlc3VsdCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsInQxNSJdLCJzb3VyY2VzIjpbIldlYkZldGNoUGVybWlzc2lvblJlcXVlc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHVzZVRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgV2ViRmV0Y2hUb29sIH0gZnJvbSAnLi4vLi4vLi4vdG9vbHMvV2ViRmV0Y2hUb29sL1dlYkZldGNoVG9vbC5qcydcbmltcG9ydCB7IHNob3VsZFNob3dBbHdheXNBbGxvd09wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9uc0xvYWRlci5qcydcbmltcG9ydCB7XG4gIHR5cGUgT3B0aW9uV2l0aERlc2NyaXB0aW9uLFxuICBTZWxlY3QsXG59IGZyb20gJy4uLy4uL0N1c3RvbVNlbGVjdC9zZWxlY3QuanMnXG5pbXBvcnQgeyB0eXBlIFVuYXJ5RXZlbnQsIHVzZVBlcm1pc3Npb25SZXF1ZXN0TG9nZ2luZyB9IGZyb20gJy4uL2hvb2tzLmpzJ1xuaW1wb3J0IHsgUGVybWlzc2lvbkRpYWxvZyB9IGZyb20gJy4uL1Blcm1pc3Npb25EaWFsb2cuanMnXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25SZXF1ZXN0UHJvcHMgfSBmcm9tICcuLi9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IFBlcm1pc3Npb25SdWxlRXhwbGFuYXRpb24gfSBmcm9tICcuLi9QZXJtaXNzaW9uUnVsZUV4cGxhbmF0aW9uLmpzJ1xuaW1wb3J0IHsgbG9nVW5hcnlQZXJtaXNzaW9uRXZlbnQgfSBmcm9tICcuLi91dGlscy5qcydcblxuZnVuY3Rpb24gaW5wdXRUb1Blcm1pc3Npb25SdWxlQ29udGVudChpbnB1dDogeyBbazogc3RyaW5nXTogdW5rbm93biB9KTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRJbnB1dCA9IFdlYkZldGNoVG9vbC5pbnB1dFNjaGVtYS5zYWZlUGFyc2UoaW5wdXQpXG4gICAgaWYgKCFwYXJzZWRJbnB1dC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gYGlucHV0OiR7aW5wdXQudG9TdHJpbmcoKX1gXG4gICAgfVxuICAgIGNvbnN0IHsgdXJsIH0gPSBwYXJzZWRJbnB1dC5kYXRhXG4gICAgY29uc3QgaG9zdG5hbWUgPSBuZXcgVVJMKHVybCkuaG9zdG5hbWVcbiAgICByZXR1cm4gYGRvbWFpbjoke2hvc3RuYW1lfWBcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGBpbnB1dDoke2lucHV0LnRvU3RyaW5nKCl9YFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXZWJGZXRjaFBlcm1pc3Npb25SZXF1ZXN0KHtcbiAgdG9vbFVzZUNvbmZpcm0sXG4gIG9uRG9uZSxcbiAgb25SZWplY3QsXG4gIHZlcmJvc2UsXG4gIHdvcmtlckJhZGdlLFxufTogUGVybWlzc2lvblJlcXVlc3RQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFt0aGVtZV0gPSB1c2VUaGVtZSgpXG4gIC8vIHVybCBpcyBhbHJlYWR5IHZhbGlkYXRlZCBieSB0aGUgaW5wdXQgc2NoZW1hXG4gIGNvbnN0IHsgdXJsIH0gPSB0b29sVXNlQ29uZmlybS5pbnB1dCBhcyB7IHVybDogc3RyaW5nIH1cblxuICAvLyBFeHRyYWN0IGhvc3RuYW1lIGZyb20gVVJMXG4gIGNvbnN0IGhvc3RuYW1lID0gbmV3IFVSTCh1cmwpLmhvc3RuYW1lXG5cbiAgY29uc3QgdW5hcnlFdmVudCA9IHVzZU1lbW88VW5hcnlFdmVudD4oXG4gICAgKCkgPT4gKHsgY29tcGxldGlvbl90eXBlOiAndG9vbF91c2Vfc2luZ2xlJywgbGFuZ3VhZ2VfbmFtZTogJ25vbmUnIH0pLFxuICAgIFtdLFxuICApXG5cbiAgdXNlUGVybWlzc2lvblJlcXVlc3RMb2dnaW5nKHRvb2xVc2VDb25maXJtLCB1bmFyeUV2ZW50KVxuXG4gIC8vIEdlbmVyYXRlIHBlcm1pc3Npb24gb3B0aW9ucyBzcGVjaWZpYyB0byBkb21haW5zXG4gIGNvbnN0IHNob3dBbHdheXNBbGxvd09wdGlvbnMgPSBzaG91bGRTaG93QWx3YXlzQWxsb3dPcHRpb25zKClcbiAgY29uc3Qgb3B0aW9ucyA9IHVzZU1lbW8oKCk6IE9wdGlvbldpdGhEZXNjcmlwdGlvbjxzdHJpbmc+W10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogT3B0aW9uV2l0aERlc2NyaXB0aW9uPHN0cmluZz5bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdZZXMnLFxuICAgICAgICB2YWx1ZTogJ3llcycsXG4gICAgICB9LFxuICAgIF1cblxuICAgIGlmIChzaG93QWx3YXlzQWxsb3dPcHRpb25zKSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGxhYmVsOiAoXG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBZZXMsIGFuZCBkb24mYXBvczt0IGFzayBhZ2FpbiBmb3IgPFRleHQgYm9sZD57aG9zdG5hbWV9PC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgKSxcbiAgICAgICAgdmFsdWU6ICd5ZXMtZG9udC1hc2stYWdhaW4tZG9tYWluJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgbGFiZWw6IChcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgTm8sIGFuZCB0ZWxsIENsYXVkZSB3aGF0IHRvIGRvIGRpZmZlcmVudGx5IDxUZXh0IGJvbGQ+KGVzYyk8L1RleHQ+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICksXG4gICAgICB2YWx1ZTogJ25vJyxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCBbaG9zdG5hbWUsIHNob3dBbHdheXNBbGxvd09wdGlvbnNdKVxuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKG5ld1ZhbHVlKSB7XG4gICAgICBjYXNlICd5ZXMnOlxuICAgICAgICBsb2dVbmFyeVBlcm1pc3Npb25FdmVudCgndG9vbF91c2Vfc2luZ2xlJywgdG9vbFVzZUNvbmZpcm0sICdhY2NlcHQnKVxuICAgICAgICB0b29sVXNlQ29uZmlybS5vbkFsbG93KHRvb2xVc2VDb25maXJtLmlucHV0LCBbXSlcbiAgICAgICAgb25Eb25lKClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llcy1kb250LWFzay1hZ2Fpbi1kb21haW4nOiB7XG4gICAgICAgIGxvZ1VuYXJ5UGVybWlzc2lvbkV2ZW50KCd0b29sX3VzZV9zaW5nbGUnLCB0b29sVXNlQ29uZmlybSwgJ2FjY2VwdCcpXG4gICAgICAgIGNvbnN0IHJ1bGVDb250ZW50ID0gaW5wdXRUb1Blcm1pc3Npb25SdWxlQ29udGVudCh0b29sVXNlQ29uZmlybS5pbnB1dClcbiAgICAgICAgY29uc3QgcnVsZVZhbHVlID0ge1xuICAgICAgICAgIHRvb2xOYW1lOiB0b29sVXNlQ29uZmlybS50b29sLm5hbWUsXG4gICAgICAgICAgcnVsZUNvbnRlbnQsXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHBlcm1pc3Npb24gdXBkYXRlIGRpcmVjdGx5IHRvIG9uQWxsb3dcbiAgICAgICAgdG9vbFVzZUNvbmZpcm0ub25BbGxvdyh0b29sVXNlQ29uZmlybS5pbnB1dCwgW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICdhZGRSdWxlcycsXG4gICAgICAgICAgICBydWxlczogW3J1bGVWYWx1ZV0sXG4gICAgICAgICAgICBiZWhhdmlvcjogJ2FsbG93JyxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiAnbG9jYWxTZXR0aW5ncycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSlcbiAgICAgICAgb25Eb25lKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ25vJzpcbiAgICAgICAgbG9nVW5hcnlQZXJtaXNzaW9uRXZlbnQoJ3Rvb2xfdXNlX3NpbmdsZScsIHRvb2xVc2VDb25maXJtLCAncmVqZWN0JylcbiAgICAgICAgdG9vbFVzZUNvbmZpcm0ub25SZWplY3QoKVxuICAgICAgICBvblJlamVjdCgpXG4gICAgICAgIG9uRG9uZSgpXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UGVybWlzc2lvbkRpYWxvZyB0aXRsZT1cIkZldGNoXCIgd29ya2VyQmFkZ2U9e3dvcmtlckJhZGdlfT5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdYPXsyfSBwYWRkaW5nWT17MX0+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHtXZWJGZXRjaFRvb2wucmVuZGVyVG9vbFVzZU1lc3NhZ2UoXG4gICAgICAgICAgICB0b29sVXNlQ29uZmlybS5pbnB1dCBhcyB7IHVybDogc3RyaW5nOyBwcm9tcHQ6IHN0cmluZyB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgICAgdmVyYm9zZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj57dG9vbFVzZUNvbmZpcm0uZGVzY3JpcHRpb259PC9UZXh0PlxuICAgICAgPC9Cb3g+XG5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICA8UGVybWlzc2lvblJ1bGVFeHBsYW5hdGlvblxuICAgICAgICAgIHBlcm1pc3Npb25SZXN1bHQ9e3Rvb2xVc2VDb25maXJtLnBlcm1pc3Npb25SZXN1bHR9XG4gICAgICAgICAgdG9vbFR5cGU9XCJ0b29sXCJcbiAgICAgICAgLz5cbiAgICAgICAgPFRleHQ+RG8geW91IHdhbnQgdG8gYWxsb3cgQ2xhdWRlIHRvIGZldGNoIHRoaXMgY29udGVudD88L1RleHQ+XG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gb25DaGFuZ2UoJ25vJyl9XG4gICAgICAgIC8+XG4gICAgICA8L0JveD5cbiAgICA8L1Blcm1pc3Npb25EaWFsb2c+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU9BLEtBQUssSUFBSUMsT0FBTyxRQUFRLE9BQU87QUFDdEMsU0FBU0MsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsUUFBUSxpQkFBaUI7QUFDckQsU0FBU0MsWUFBWSxRQUFRLDZDQUE2QztBQUMxRSxTQUFTQyw0QkFBNEIsUUFBUSxpREFBaUQ7QUFDOUYsU0FDRSxLQUFLQyxxQkFBcUIsRUFDMUJDLE1BQU0sUUFDRCw4QkFBOEI7QUFDckMsU0FBUyxLQUFLQyxVQUFVLEVBQUVDLDJCQUEyQixRQUFRLGFBQWE7QUFDMUUsU0FBU0MsZ0JBQWdCLFFBQVEsd0JBQXdCO0FBQ3pELGNBQWNDLHNCQUFzQixRQUFRLHlCQUF5QjtBQUNyRSxTQUFTQyx5QkFBeUIsUUFBUSxpQ0FBaUM7QUFDM0UsU0FBU0MsdUJBQXVCLFFBQVEsYUFBYTtBQUVyRCxTQUFTQyw0QkFBNEJBLENBQUNDLEtBQUssRUFBRTtFQUFFLENBQUNDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPO0FBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO0VBQzdFLElBQUk7SUFDRixNQUFNQyxXQUFXLEdBQUdiLFlBQVksQ0FBQ2MsV0FBVyxDQUFDQyxTQUFTLENBQUNKLEtBQUssQ0FBQztJQUM3RCxJQUFJLENBQUNFLFdBQVcsQ0FBQ0csT0FBTyxFQUFFO01BQ3hCLE9BQU8sU0FBU0wsS0FBSyxDQUFDTSxRQUFRLENBQUMsQ0FBQyxFQUFFO0lBQ3BDO0lBQ0EsTUFBTTtNQUFFQztJQUFJLENBQUMsR0FBR0wsV0FBVyxDQUFDTSxJQUFJO0lBQ2hDLE1BQU1DLFFBQVEsR0FBRyxJQUFJQyxHQUFHLENBQUNILEdBQUcsQ0FBQyxDQUFDRSxRQUFRO0lBQ3RDLE9BQU8sVUFBVUEsUUFBUSxFQUFFO0VBQzdCLENB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