genassist-chat-react 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,360 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
21
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
22
+ import { useEffect, useMemo, useState } from 'react';
23
+ import { ChevronDown, ChevronUp, Plus, Trash2, Pencil } from 'lucide-react';
24
+ var defaultTheme = {
25
+ primaryColor: '#4F46E5',
26
+ secondaryColor: '#f5f5f5',
27
+ backgroundColor: '#ffffff',
28
+ textColor: '#000000',
29
+ fontFamily: 'Inter, sans-serif',
30
+ fontSize: '15px',
31
+ };
32
+ var defaultSettings = {
33
+ name: 'Genassist',
34
+ description: 'Support',
35
+ };
36
+ function objectToParams(obj) {
37
+ if (!obj)
38
+ return [];
39
+ return Object.keys(obj).map(function (k) {
40
+ var v = obj[k];
41
+ var type = 'string';
42
+ if (typeof v === 'number')
43
+ type = 'number';
44
+ else if (typeof v === 'boolean')
45
+ type = 'boolean';
46
+ return { name: k, type: type, required: false, value: v };
47
+ });
48
+ }
49
+ function paramsToObject(params) {
50
+ var o = {};
51
+ params.forEach(function (p) {
52
+ if (typeof p.value !== 'undefined') {
53
+ o[p.name] = p.value;
54
+ }
55
+ });
56
+ return o;
57
+ }
58
+ export var GenAgentConfigPanel = function (_a) {
59
+ var _b, _c;
60
+ var themeProp = _a.theme, onThemeChange = _a.onThemeChange, chatSettingsProp = _a.chatSettings, onChatSettingsChange = _a.onChatSettingsChange, metadataProp = _a.metadata, onMetadataChange = _a.onMetadataChange, defaultOpen = _a.defaultOpen, onSave = _a.onSave, onCancel = _a.onCancel, style = _a.style;
61
+ // Controlled or internal state fallbacks
62
+ var _d = useState(themeProp || defaultTheme), theme = _d[0], setTheme = _d[1];
63
+ var _e = useState(chatSettingsProp || defaultSettings), chatSettings = _e[0], setChatSettings = _e[1];
64
+ var _f = useState(objectToParams(metadataProp)), params = _f[0], setParams = _f[1];
65
+ useEffect(function () {
66
+ if (themeProp)
67
+ setTheme(themeProp);
68
+ }, [themeProp]);
69
+ useEffect(function () {
70
+ if (chatSettingsProp)
71
+ setChatSettings(chatSettingsProp);
72
+ }, [chatSettingsProp]);
73
+ useEffect(function () {
74
+ if (metadataProp)
75
+ setParams(objectToParams(metadataProp));
76
+ }, [metadataProp]);
77
+ var _g = useState(typeof (defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.appearance) === 'boolean' ? !!(defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.appearance) : true), showAppearance = _g[0], setShowAppearance = _g[1];
78
+ var _h = useState(typeof (defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.settings) === 'boolean' ? !!(defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.settings) : false), showSettings = _h[0], setShowSettings = _h[1];
79
+ var _j = useState(typeof (defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.metadata) === 'boolean' ? !!(defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.metadata) : false), showMetadata = _j[0], setShowMetadata = _j[1];
80
+ var _k = useState(false), showAddParam = _k[0], setShowAddParam = _k[1];
81
+ var _l = useState({
82
+ name: 'param_1',
83
+ type: 'string',
84
+ required: false,
85
+ value: '',
86
+ }), draftParam = _l[0], setDraftParam = _l[1];
87
+ var _m = useState(false), showEditParam = _m[0], setShowEditParam = _m[1];
88
+ var _o = useState(null), editIndex = _o[0], setEditIndex = _o[1];
89
+ var _p = useState({ name: '', type: 'string', required: false, value: '' }), editDraft = _p[0], setEditDraft = _p[1];
90
+ var metadata = useMemo(function () { return paramsToObject(params); }, [params]);
91
+ var handleThemeChange = function (key, value) {
92
+ var _a;
93
+ var next = __assign(__assign({}, theme), (_a = {}, _a[key] = value, _a));
94
+ if (!themeProp)
95
+ setTheme(next);
96
+ onThemeChange === null || onThemeChange === void 0 ? void 0 : onThemeChange(next);
97
+ };
98
+ var handleSettingChange = function (key, value) {
99
+ var _a;
100
+ var next = __assign(__assign({}, chatSettings), (_a = {}, _a[key] = value, _a));
101
+ if (!chatSettingsProp)
102
+ setChatSettings(next);
103
+ onChatSettingsChange === null || onChatSettingsChange === void 0 ? void 0 : onChatSettingsChange(next);
104
+ };
105
+ var handleAddParam = function () {
106
+ var name = draftParam.name.trim();
107
+ if (!name)
108
+ return;
109
+ if (params.some(function (p) { return p.name === name; }))
110
+ return;
111
+ var normalized = __assign(__assign({}, draftParam), { name: name, value: typeof draftParam.value !== 'undefined'
112
+ ? draftParam.value
113
+ : draftParam.type === 'number'
114
+ ? 0
115
+ : draftParam.type === 'boolean'
116
+ ? false
117
+ : '' });
118
+ var next = __spreadArray(__spreadArray([], params, true), [normalized], false);
119
+ setParams(next);
120
+ onMetadataChange === null || onMetadataChange === void 0 ? void 0 : onMetadataChange(paramsToObject(next));
121
+ setDraftParam({ name: 'param_1', type: 'string', required: false, value: '' });
122
+ setShowAddParam(false);
123
+ };
124
+ var coerceForType = function (val, type) {
125
+ if (type === 'number') {
126
+ var n = Number(val);
127
+ return isNaN(n) ? 0 : n;
128
+ }
129
+ if (type === 'boolean') {
130
+ if (typeof val === 'boolean')
131
+ return val;
132
+ var s = String(val).toLowerCase();
133
+ return s === 'true' || s === '1' || s === 'yes';
134
+ }
135
+ return String(val !== null && val !== void 0 ? val : '');
136
+ };
137
+ var handleEditSave = function () {
138
+ if (editIndex === null)
139
+ return;
140
+ var newName = editDraft.name.trim();
141
+ if (!newName)
142
+ return;
143
+ if (params.some(function (p, i) { return i !== editIndex && p.name === newName; }))
144
+ return;
145
+ var next = __spreadArray([], params, true);
146
+ var old = next[editIndex];
147
+ var updated = __assign(__assign({}, old), editDraft);
148
+ updated.value = coerceForType(old.value, editDraft.type);
149
+ next[editIndex] = updated;
150
+ setParams(next);
151
+ onMetadataChange === null || onMetadataChange === void 0 ? void 0 : onMetadataChange(paramsToObject(next));
152
+ setShowEditParam(false);
153
+ setEditIndex(null);
154
+ };
155
+ var handleRemoveParam = function (index) {
156
+ var next = params.filter(function (_, i) { return i !== index; });
157
+ setParams(next);
158
+ onMetadataChange === null || onMetadataChange === void 0 ? void 0 : onMetadataChange(paramsToObject(next));
159
+ };
160
+ var containerStyle = __assign({ flex: '1', maxWidth: 300, backgroundColor: '#ffffff', borderRadius: 8, boxShadow: '0 2px 10px rgba(0,0,0,0.1)', overflow: 'hidden', display: 'flex', flexDirection: 'column' }, style);
161
+ var sectionHeaderStyle = {
162
+ padding: 16,
163
+ borderBottom: '1px solid #e0e0e0',
164
+ display: 'flex',
165
+ justifyContent: 'space-between',
166
+ alignItems: 'center',
167
+ cursor: 'pointer',
168
+ backgroundColor: '#f9f9f9',
169
+ };
170
+ var sectionTitleStyle = {
171
+ margin: 0,
172
+ fontSize: 12,
173
+ fontWeight: 'bold',
174
+ color: '#666',
175
+ letterSpacing: 1,
176
+ };
177
+ var formGroupStyle = {
178
+ padding: '16px 16px 12px',
179
+ display: 'flex',
180
+ flexDirection: 'row',
181
+ justifyContent: 'space-between',
182
+ alignItems: 'center',
183
+ borderBottom: 'none',
184
+ };
185
+ var labelStyle = { fontSize: 14, color: '#333' };
186
+ var colorPickerStyle = {
187
+ appearance: 'none',
188
+ width: 120,
189
+ height: 32,
190
+ padding: 0,
191
+ border: '1px solid #e0e0e0',
192
+ borderRadius: 4,
193
+ cursor: 'pointer',
194
+ };
195
+ var selectStyle = {
196
+ width: 140,
197
+ height: 32,
198
+ padding: '0 8px',
199
+ border: '1px solid #e0e0e0',
200
+ borderRadius: 4,
201
+ backgroundColor: '#fff',
202
+ fontSize: 14,
203
+ };
204
+ var inputStyle = {
205
+ width: '100%',
206
+ height: 32,
207
+ padding: '0 8px',
208
+ border: '1px solid #e0e0e0',
209
+ borderRadius: 4,
210
+ fontSize: 14,
211
+ };
212
+ var actionBarStyle = {
213
+ padding: 12,
214
+ display: 'flex',
215
+ justifyContent: 'flex-end',
216
+ gap: 8,
217
+ borderTop: '1px solid #e0e0e0',
218
+ backgroundColor: '#fafafa',
219
+ };
220
+ var cancelButtonStyle = {
221
+ padding: '8px 12px',
222
+ backgroundColor: '#fff',
223
+ border: '1px solid #e0e0e0',
224
+ borderRadius: 6,
225
+ cursor: 'pointer',
226
+ };
227
+ var saveButtonStyle = {
228
+ padding: '8px 12px',
229
+ backgroundColor: '#111827',
230
+ color: '#fff',
231
+ border: '1px solid #0b1220',
232
+ borderRadius: 6,
233
+ cursor: 'pointer',
234
+ };
235
+ var fullWidthActionButton = {
236
+ display: 'flex',
237
+ alignItems: 'center',
238
+ gap: 8,
239
+ width: '100%',
240
+ padding: '10px 12px',
241
+ border: '1px solid #e0e0e0',
242
+ borderRadius: 8,
243
+ backgroundColor: '#fff',
244
+ cursor: 'pointer',
245
+ fontSize: 14,
246
+ color: '#111',
247
+ };
248
+ var smallIconButton = {
249
+ border: '1px solid #e0e0e0',
250
+ borderRadius: 8,
251
+ width: 28,
252
+ height: 28,
253
+ display: 'inline-flex',
254
+ alignItems: 'center',
255
+ justifyContent: 'center',
256
+ backgroundColor: '#fff',
257
+ cursor: 'pointer',
258
+ };
259
+ var metaRowStyle = {
260
+ display: 'grid',
261
+ gridTemplateColumns: '1fr minmax(90px, 150px) 28px 28px',
262
+ alignItems: 'center',
263
+ gap: 8,
264
+ padding: '6px 0',
265
+ };
266
+ var metaNameStyle = {
267
+ fontSize: 13,
268
+ color: '#222',
269
+ fontWeight: 500,
270
+ overflow: 'hidden',
271
+ textOverflow: 'ellipsis',
272
+ whiteSpace: 'nowrap',
273
+ };
274
+ var metaValueStyle = {
275
+ maxWidth: 150,
276
+ overflow: 'hidden',
277
+ textOverflow: 'ellipsis',
278
+ whiteSpace: 'nowrap',
279
+ fontSize: 13,
280
+ color: '#111',
281
+ border: '1px solid #e6e6e6',
282
+ borderRadius: 12,
283
+ padding: '6px 10px',
284
+ backgroundColor: '#fafafa',
285
+ };
286
+ var handleSave = function () {
287
+ onSave === null || onSave === void 0 ? void 0 : onSave({ theme: theme, chatSettings: chatSettings, metadata: metadata });
288
+ };
289
+ return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: { borderBottom: '1px solid #e0e0e0' }, children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowAppearance(!showAppearance); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "APPEARANCE" }), showAppearance ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showAppearance && (_jsxs(_Fragment, { children: [_jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Primary Color" }), _jsx("input", { type: "color", value: theme.primaryColor, onChange: function (e) { return handleThemeChange('primaryColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Secondary Color" }), _jsx("input", { type: "color", value: theme.secondaryColor, onChange: function (e) { return handleThemeChange('secondaryColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Background Color" }), _jsx("input", { type: "color", value: theme.backgroundColor, onChange: function (e) { return handleThemeChange('backgroundColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Text Color" }), _jsx("input", { type: "color", value: theme.textColor, onChange: function (e) { return handleThemeChange('textColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Font Size" }), _jsxs("select", { style: selectStyle, value: theme.fontSize, onChange: function (e) { return handleThemeChange('fontSize', e.target.value); }, children: [_jsx("option", { value: "12px", children: "Small (12px)" }), _jsx("option", { value: "15px", children: "Medium (15px)" }), _jsx("option", { value: "18px", children: "Large (18px)" })] })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Font Family" }), _jsxs("select", { style: selectStyle, value: theme.fontFamily.split(',')[0].trim(), onChange: function (e) {
290
+ var v = e.target.value;
291
+ var ff = v === 'Inter'
292
+ ? 'Inter, sans-serif'
293
+ : v === 'Arial'
294
+ ? 'Arial, sans-serif'
295
+ : v === 'Times New Roman'
296
+ ? "'Times New Roman', serif"
297
+ : 'monospace';
298
+ handleThemeChange('fontFamily', ff);
299
+ }, children: [_jsx("option", { value: "Inter", children: "Inter" }), _jsx("option", { value: "Arial", children: "Arial" }), _jsx("option", { value: "Times New Roman", children: "Times New Roman" }), _jsx("option", { value: "monospace", children: "Monospace" })] })] })] }))] }), _jsxs("div", { children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowSettings(!showSettings); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "SETTINGS" }), showSettings ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showSettings && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '16px 16px 12px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Name" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.name, onChange: function (e) { return handleSettingChange('name', e.target.value); } })] }), _jsxs("div", { style: { padding: '0 16px 16px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Description" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.description, onChange: function (e) { return handleSettingChange('description', e.target.value); } })] })] }))] }), _jsxs("div", { children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowMetadata(!showMetadata); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "METADATA" }), showMetadata ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showMetadata && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '12px 16px' }, children: [_jsx("div", { style: { fontSize: 13, color: '#555', marginBottom: 10 }, children: "Define key/value parameters sent as chat metadata." }), _jsxs("button", { style: fullWidthActionButton, onClick: function () { return setShowAddParam(true); }, children: [_jsx(Plus, { size: 18 }), _jsx("span", { children: "Add Parameter" })] })] }), params.length > 0 && (_jsx("div", { style: { padding: '2px 16px 12px', display: 'flex', flexDirection: 'column', gap: 6 }, children: params.map(function (p, idx) {
300
+ var _a;
301
+ var displayVal = p.type === 'boolean' ? (p.value ? 'True' : 'False') : String((_a = p.value) !== null && _a !== void 0 ? _a : '');
302
+ return (_jsxs("div", { style: metaRowStyle, children: [_jsx("div", { style: metaNameStyle, children: p.name }), _jsx("div", { style: metaValueStyle, title: displayVal, children: displayVal }), _jsx("button", { title: "Edit", style: smallIconButton, onClick: function () {
303
+ setEditIndex(idx);
304
+ setEditDraft(__assign({}, p));
305
+ setShowEditParam(true);
306
+ }, "aria-label": "Edit ".concat(p.name), children: _jsx(Pencil, { size: 16 }) }), _jsx("button", { title: "Remove", style: smallIconButton, onClick: function () { return handleRemoveParam(idx); }, "aria-label": "Remove ".concat(p.name), children: _jsx(Trash2, { size: 16 }) })] }, p.name));
307
+ }) }))] }))] }), _jsxs("div", { style: actionBarStyle, children: [_jsx("button", { style: cancelButtonStyle, onClick: function () { return onCancel === null || onCancel === void 0 ? void 0 : onCancel(); }, children: "Cancel" }), _jsx("button", { style: saveButtonStyle, onClick: handleSave, children: "Save Changes" })] }), showAddParam && (_jsx("div", { style: modalOverlayStyle, children: _jsxs("div", { style: modalStyle, children: [_jsx("div", { style: modalHeaderStyle, children: "Add Parameter" }), _jsxs("div", { style: modalBodyStyle, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Parameter Name" }), _jsx("input", { type: "text", style: inputStyle, value: draftParam.name, onChange: function (e) { return setDraftParam(function (d) { return (__assign(__assign({}, d), { name: e.target.value })); }); }, placeholder: "param_1" })] }), _jsxs("div", { style: { display: 'flex', gap: 12 }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6, flex: 1 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Type" }), _jsxs("select", { style: selectStyle, value: draftParam.type, onChange: function (e) {
308
+ return setDraftParam(function (d) { return (__assign(__assign({}, d), { type: e.target.value, value: e.target.value === 'boolean' ? false : e.target.value === 'number' ? 0 : '' })); });
309
+ }, children: [_jsx("option", { value: "string", children: "String" }), _jsx("option", { value: "number", children: "Number" }), _jsx("option", { value: "boolean", children: "Boolean" })] })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6, flex: 1 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Required" }), _jsxs("select", { style: selectStyle, value: draftParam.required ? 'yes' : 'no', onChange: function (e) { return setDraftParam(function (d) { return (__assign(__assign({}, d), { required: e.target.value === 'yes' })); }); }, children: [_jsx("option", { value: "no", children: "No" }), _jsx("option", { value: "yes", children: "Yes" })] })] })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Default / Value" }), draftParam.type === 'boolean' ? (_jsxs("select", { style: selectStyle, value: draftParam.value ? 'true' : 'false', onChange: function (e) { return setDraftParam(function (d) { return (__assign(__assign({}, d), { value: e.target.value === 'true' })); }); }, children: [_jsx("option", { value: "false", children: "False" }), _jsx("option", { value: "true", children: "True" })] })) : (_jsx("input", { type: draftParam.type === 'number' ? 'number' : 'text', style: inputStyle, value: String((_b = draftParam.value) !== null && _b !== void 0 ? _b : ''), onChange: function (e) {
310
+ return setDraftParam(function (d) { return (__assign(__assign({}, d), { value: draftParam.type === 'number' ? Number(e.target.value) : e.target.value })); });
311
+ } }))] })] }), _jsxs("div", { style: modalFooterStyle, children: [_jsx("button", { style: cancelButtonStyle, onClick: function () { return setShowAddParam(false); }, children: "Cancel" }), _jsx("button", { style: saveButtonStyle, onClick: handleAddParam, children: "Add" })] })] }) })), showEditParam && (_jsx("div", { style: modalOverlayStyle, children: _jsxs("div", { style: modalStyle, children: [_jsx("div", { style: modalHeaderStyle, children: "Edit Parameter" }), _jsxs("div", { style: modalBodyStyle, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Parameter Name" }), _jsx("input", { type: "text", style: inputStyle, value: editDraft.name, onChange: function (e) { return setEditDraft(function (d) { return (__assign(__assign({}, d), { name: e.target.value })); }); } })] }), _jsxs("div", { style: { display: 'flex', gap: 12 }, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6, flex: 1 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Type" }), _jsxs("select", { style: selectStyle, value: editDraft.type, onChange: function (e) {
312
+ return setEditDraft(function (d) { return (__assign(__assign({}, d), { type: e.target.value, value: e.target.value === 'boolean'
313
+ ? false
314
+ : e.target.value === 'number'
315
+ ? 0
316
+ : typeof d.value === 'string'
317
+ ? d.value
318
+ : '' })); });
319
+ }, children: [_jsx("option", { value: "string", children: "String" }), _jsx("option", { value: "number", children: "Number" }), _jsx("option", { value: "boolean", children: "Boolean" })] })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6, flex: 1 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Required" }), _jsxs("select", { style: selectStyle, value: editDraft.required ? 'yes' : 'no', onChange: function (e) { return setEditDraft(function (d) { return (__assign(__assign({}, d), { required: e.target.value === 'yes' })); }); }, children: [_jsx("option", { value: "no", children: "No" }), _jsx("option", { value: "yes", children: "Yes" })] })] })] }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 6 }, children: [_jsx("label", { style: { fontSize: 12, color: '#777' }, children: "Value" }), editDraft.type === 'boolean' ? (_jsxs("select", { style: selectStyle, value: editDraft.value ? 'true' : 'false', onChange: function (e) { return setEditDraft(function (d) { return (__assign(__assign({}, d), { value: e.target.value === 'true' })); }); }, children: [_jsx("option", { value: "false", children: "False" }), _jsx("option", { value: "true", children: "True" })] })) : (_jsx("input", { type: editDraft.type === 'number' ? 'number' : 'text', style: inputStyle, value: String((_c = editDraft.value) !== null && _c !== void 0 ? _c : ''), onChange: function (e) {
320
+ return setEditDraft(function (d) { return (__assign(__assign({}, d), { value: editDraft.type === 'number' ? Number(e.target.value) : e.target.value })); });
321
+ } }))] })] }), _jsxs("div", { style: modalFooterStyle, children: [_jsx("button", { style: cancelButtonStyle, onClick: function () { return setShowEditParam(false); }, children: "Cancel" }), _jsx("button", { style: saveButtonStyle, onClick: handleEditSave, children: "Save" })] })] }) }))] }));
322
+ };
323
+ // Modal styles (shared)
324
+ var modalOverlayStyle = {
325
+ position: 'fixed',
326
+ inset: 0,
327
+ backgroundColor: 'rgba(0,0,0,0.25)',
328
+ display: 'flex',
329
+ alignItems: 'center',
330
+ justifyContent: 'center',
331
+ zIndex: 9999,
332
+ };
333
+ var modalStyle = {
334
+ width: 420,
335
+ maxWidth: '92vw',
336
+ backgroundColor: '#fff',
337
+ borderRadius: 12,
338
+ boxShadow: '0 8px 24px rgba(0,0,0,0.18)',
339
+ overflow: 'hidden',
340
+ };
341
+ var modalHeaderStyle = {
342
+ padding: '12px 16px',
343
+ fontWeight: 600,
344
+ borderBottom: '1px solid #eee',
345
+ };
346
+ var modalBodyStyle = {
347
+ padding: 16,
348
+ display: 'flex',
349
+ flexDirection: 'column',
350
+ gap: 12,
351
+ };
352
+ var modalFooterStyle = {
353
+ padding: 12,
354
+ display: 'flex',
355
+ justifyContent: 'flex-end',
356
+ gap: 8,
357
+ borderTop: '1px solid #eee',
358
+ backgroundColor: '#fafafa',
359
+ };
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDb25maWdQYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0dlbkFnZW50Q29uZmlnUGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBZSxNQUFNLGNBQWMsQ0FBQztBQThCekYsSUFBTSxZQUFZLEdBQWM7SUFDOUIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsY0FBYyxFQUFFLFNBQVM7SUFDekIsZUFBZSxFQUFFLFNBQVM7SUFDMUIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixRQUFRLEVBQUUsTUFBTTtDQUNqQixDQUFDO0FBRUYsSUFBTSxlQUFlLEdBQXVCO0lBQzFDLElBQUksRUFBRSxXQUFXO0lBQ2pCLFdBQVcsRUFBRSxTQUFTO0NBQ3ZCLENBQUM7QUFFRixTQUFTLGNBQWMsQ0FBQyxHQUFvQztJQUMxRCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQyxDQUFDO1FBQzVCLElBQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLElBQUksR0FBYyxRQUFRLENBQUM7UUFDL0IsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO1lBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQzthQUN0QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVM7WUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElB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QUNYLE9BQU8sRUFBRSxNQUFNO0lBQ2YsYUFBYSxFQUFFLFFBQVE7SUFDdkIsR0FBRyxFQUFFLEVBQUU7Q0FDUixDQUFDO0FBRUYsSUFBTSxnQkFBZ0IsR0FBd0I7SUFDNUMsT0FBTyxFQUFFLEVBQUU7SUFDWCxPQUFPLEVBQUUsTUFBTTtJQUNmLGNBQWMsRUFBRSxVQUFVO0lBQzFCLEdBQUcsRUFBRSxDQUFDO0lBQ04sU0FBUyxFQUFFLGdCQUFnQjtJQUMzQixlQUFlLEVBQUUsU0FBUztDQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGV2cm9uRG93biwgQ2hldnJvblVwLCBQbHVzLCBUcmFzaDIsIFBlbmNpbCwgWCwgU3BhcmtsZXMgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDaGF0VGhlbWUsIENoYXRTZXR0aW5nc0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxudHlwZSBQYXJhbVR5cGUgPSAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nO1xuXG5pbnRlcmZhY2UgTWV0YWRhdGFQYXJhbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogUGFyYW1UeXBlO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5BZ2VudENvbmZpZ1BhbmVsUHJvcHMge1xuICB0aGVtZT86IENoYXRUaGVtZTtcbiAgb25UaGVtZUNoYW5nZT86IChuZXh0OiBDaGF0VGhlbWUpID0+IHZvaWQ7XG5cbiAgY2hhdFNldHRpbmdzPzogQ2hhdFNldHRpbmdzQ29uZmlnO1xuICBvbkNoYXRTZXR0aW5nc0NoYW5nZT86IChuZXh0OiBDaGF0U2V0dGluZ3NDb25maWcpID0+IHZvaWQ7XG5cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbk1ldGFkYXRhQ2hhbmdlPzogKG5leHQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG5cbiAgZGVmYXVsdE9wZW4/OiB7IGFwcGVhcmFuY2U/OiBib29sZWFuOyBzZXR0aW5ncz86IGJvb2xlYW47IG1ldGFkYXRhPzogYm9vbGVhbiB9O1xuICBvblNhdmU/OiAocGF5bG9hZDogeyB0aGVtZTogQ2hhdFRoZW1lOyBjaGF0U2V0dGluZ3M6IENoYXRTZXR0aW5nc0NvbmZpZzsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfSkgPT4gdm9pZDtcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkO1xuXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn1cblxuY29uc3QgZGVmYXVsdFRoZW1lOiBDaGF0VGhlbWUgPSB7XG4gIHByaW1hcnlDb2xvcjogJyM0RjQ2RTUnLFxuICBzZWNvbmRhcnlDb2xvcjogJyNmNWY1ZjUnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgdGV4dENvbG9yOiAnIzAwMDAwMCcsXG4gIGZvbnRGYW1pbHk6ICdJbnRlciwgc2Fucy1zZXJpZicsXG4gIGZvbnRTaXplOiAnMTVweCcsXG59O1xuXG5jb25zdCBkZWZhdWx0U2V0dGluZ3M6IENoYXRTZXR0aW5nc0NvbmZpZyA9IHtcbiAgbmFtZTogJ0dlbmFzc2lzdCcsXG4gIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCcsXG59O1xuXG5mdW5jdGlvbiBvYmplY3RUb1BhcmFtcyhvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQpOiBNZXRhZGF0YVBhcmFtW10ge1xuICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoKGspID0+IHtcbiAgICBjb25zdCB2ID0gb2JqW2tdO1xuICAgIGxldCB0eXBlOiBQYXJhbVR5cGUgPSAnc3RyaW5nJztcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB0eXBlID0gJ251bWJlcic7XG4gICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykgdHlwZSA9ICdib29sZWFuJztcbiAgICByZXR1cm4geyBuYW1lOiBrLCB0eXBlLCByZXF1aXJlZDogZmFsc2UsIHZhbHVlOiB2IH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJhbXNUb09iamVjdChwYXJhbXM6IE1ldGFkYXRhUGFyYW1bXSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHBhcmFtcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwLnZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb1twLm5hbWVdID0gcC52YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbztcbn1cblxuZXhwb3J0IGNvbnN0IEdlbkFnZW50Q29uZmlnUGFuZWw6IFJlYWN0LkZDPEdlbkFnZW50Q29uZmlnUGFuZWxQcm9wcz4gPSAoe1xuICB0aGVtZTogdGhlbWVQcm9wLFxuICBvblRoZW1lQ2hhbmdlLFxuICBjaGF0U2V0dGluZ3M6IGNoYXRTZXR0aW5nc1Byb3AsXG4gIG9uQ2hhdFNldHRpbmdzQ2hhbmdlLFxuICBtZXRhZGF0YTogbWV0YWRhdGFQcm9wLFxuICBvbk1ldGFkYXRhQ2hhbmdlLFxuICBkZWZhdWx0T3BlbixcbiAgb25TYXZlLFxuICBvbkNhbmNlbCxcbiAgc3R5bGUsXG59KSA9PiB7XG4gIC8vIENvbnRyb2xsZWQgb3IgaW50ZXJuYWwgc3RhdGUgZmFsbGJhY2tzXG4gIGNvbnN0IFt0aGVtZSwgc2V0VGhlbWVdID0gdXNlU3RhdGU8Q2hhdFRoZW1lPih0aGVtZVByb3AgfHwgZGVmYXVsdFRoZW1lKTtcbiAgY29uc3QgW2NoYXRTZXR0aW5ncywgc2V0Q2hhdFNldHRpbmdzXSA9IHVzZVN0YXRlPENoYXRTZXR0aW5nc0NvbmZpZz4oY2hhdFNldHRpbmdzUHJvcCB8fCBkZWZhdWx0U2V0dGluZ3MpO1xuICBjb25zdCBbcGFyYW1zLCBzZXRQYXJhbXNdID0gdXNlU3RhdGU8TWV0YWRhdGFQYXJhbVtdPihvYmplY3RUb1BhcmFtcyhtZXRhZGF0YVByb3ApKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aGVtZVByb3ApIHNldFRoZW1lKHRoZW1lUHJvcCk7XG4gIH0sIFt0aGVtZVByb3BdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0U2V0dGluZ3NQcm9wKSBzZXRDaGF0U2V0dGluZ3MoY2hhdFNldHRpbmdzUHJvcCk7XG4gIH0sIFtjaGF0U2V0dGluZ3NQcm9wXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWV0YWRhdGFQcm9wKSBzZXRQYXJhbXMob2JqZWN0VG9QYXJhbXMobWV0YWRhdGFQcm9wKSk7XG4gIH0sIFttZXRhZGF0YVByb3BdKTtcblxuICBjb25zdCBbc2hvd0FwcGVhcmFuY2UsIHNldFNob3dBcHBlYXJhbmNlXSA9IHVzZVN0YXRlKFxuICAgIHR5cGVvZiBkZWZhdWx0T3Blbj8uYXBwZWFyYW5jZSA9PT0gJ2Jvb2xlYW4nID8gISFkZWZhdWx0T3Blbj8uYXBwZWFyYW5jZSA6IHRydWVcbiAgKTtcbiAgY29uc3QgW3Nob3dTZXR0aW5ncywgc2V0U2hvd1NldHRpbmdzXSA9IHVzZVN0YXRlKFxuICAgIHR5cGVvZiBkZWZhdWx0T3Blbj8uc2V0dGluZ3MgPT09ICdib29sZWFuJyA/ICEhZGVmYXVsdE9wZW4/LnNldHRpbmdzIDogZmFsc2VcbiAgKTtcbiAgY29uc3QgW3Nob3dNZXRhZGF0YSwgc2V0U2hvd01ldGFkYXRhXSA9IHVzZVN0YXRlKFxuICAgIHR5cGVvZiBkZWZhdWx0T3Blbj8ubWV0YWRhdGEgPT09ICdib29sZWFuJyA/ICEhZGVmYXVsdE9wZW4/Lm1ldGFkYXRhIDogZmFsc2VcbiAgKTtcblxuICBjb25zdCBbc2hvd0FkZFBhcmFtLCBzZXRTaG93QWRkUGFyYW1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZHJhZnRQYXJhbSwgc2V0RHJhZnRQYXJhbV0gPSB1c2VTdGF0ZTxNZXRhZGF0YVBhcmFtPih7XG4gICAgbmFtZTogJ3BhcmFtXzEnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB2YWx1ZTogJycsXG59KTtcblxuICBjb25zdCBbc2hvd0VkaXRQYXJhbSwgc2V0U2hvd0VkaXRQYXJhbV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlZGl0SW5kZXgsIHNldEVkaXRJbmRleF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2VkaXREcmFmdCwgc2V0RWRpdERyYWZ0XSA9IHVzZVN0YXRlPE1ldGFkYXRhUGFyYW0+KHsgbmFtZTogJycsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIHZhbHVlOiAnJyB9KTtcblxuICBjb25zdCBtZXRhZGF0YSA9IHVzZU1lbW8oKCkgPT4gcGFyYW1zVG9PYmplY3QocGFyYW1zKSwgW3BhcmFtc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRoZW1lQ2hhbmdlID0gKGtleToga2V5b2YgQ2hhdFRoZW1lLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHsgLi4udGhlbWUsIFtrZXldOiB2YWx1ZSB9IGFzIENoYXRUaGVtZTtcbiAgICBpZiAoIXRoZW1lUHJvcCkgc2V0VGhlbWUobmV4dCk7XG4gICAgb25UaGVtZUNoYW5nZT8uKG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNldHRpbmdDaGFuZ2UgPSAoa2V5OiBrZXlvZiBDaGF0U2V0dGluZ3NDb25maWcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi5jaGF0U2V0dGluZ3MsIFtrZXldOiB2YWx1ZSB9IGFzIENoYXRTZXR0aW5nc0NvbmZpZztcbiAgICBpZiAoIWNoYXRTZXR0aW5nc1Byb3ApIHNldENoYXRTZXR0aW5ncyhuZXh0KTtcbiAgICBvbkNoYXRTZXR0aW5nc0NoYW5nZT8uKG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUFkZFBhcmFtID0gKCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBkcmFmdFBhcmFtLm5hbWUudHJpbSgpO1xuICAgIGlmICghbmFtZSkgcmV0dXJuO1xuICAgIGlmIChwYXJhbXMuc29tZSgocCkgPT4gcC5uYW1lID09PSBuYW1lKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IE1ldGFkYXRhUGFyYW0gPSB7XG4gICAgICAuLi5kcmFmdFBhcmFtLFxuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlOlxuICAgICAgICB0eXBlb2YgZHJhZnRQYXJhbS52YWx1ZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICA/IGRyYWZ0UGFyYW0udmFsdWVcbiAgICAgICAgICA6IGRyYWZ0UGFyYW0udHlwZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IGRyYWZ0UGFyYW0udHlwZSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogJycsXG4gICAgfTtcbiAgICBjb25zdCBuZXh0ID0gWy4uLnBhcmFtcywgbm9ybWFsaXplZF07XG4gICAgc2V0UGFyYW1zKG5leHQpO1xuICAgIG9uTWV0YWRhdGFDaGFuZ2U/LihwYXJhbXNUb09iamVjdChuZXh0KSk7XG4gICAgc2V0RHJhZnRQYXJhbSh7IG5hbWU6ICdwYXJhbV8xJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZSwgdmFsdWU6ICcnIH0pO1xuICAgIHNldFNob3dBZGRQYXJhbShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgY29lcmNlRm9yVHlwZSA9ICh2YWw6IGFueSwgdHlwZTogUGFyYW1UeXBlKSA9PiB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBuID0gTnVtYmVyKHZhbCk7XG4gICAgICByZXR1cm4gaXNOYU4obikgPyAwIDogbjtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbDtcbiAgICAgIGNvbnN0IHMgPSBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHMgPT09ICd0cnVlJyB8fCBzID09PSAnMScgfHwgcyA9PT0gJ3llcyc7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsID8/ICcnKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVFZGl0U2F2ZSA9ICgpID0+IHtcbiAgICBpZiAoZWRpdEluZGV4ID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgbmV3TmFtZSA9IGVkaXREcmFmdC5uYW1lLnRyaW0oKTtcbiAgICBpZiAoIW5ld05hbWUpIHJldHVybjtcbiAgICBpZiAocGFyYW1zLnNvbWUoKHAsIGkpID0+IGkgIT09IGVkaXRJbmRleCAmJiBwLm5hbWUgPT09IG5ld05hbWUpKSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9IFsuLi5wYXJhbXNdO1xuICAgIGNvbnN0IG9sZCA9IG5leHRbZWRpdEluZGV4XTtcbiAgICBjb25zdCB1cGRhdGVkOiBNZXRhZGF0YVBhcmFtID0geyAuLi5vbGQsIC4uLmVkaXREcmFmdCB9O1xuICAgIHVwZGF0ZWQudmFsdWUgPSBjb2VyY2VGb3JUeXBlKG9sZC52YWx1ZSwgZWRpdERyYWZ0LnR5cGUpO1xuICAgIG5leHRbZWRpdEluZGV4XSA9IHVwZGF0ZWQ7XG4gICAgc2V0UGFyYW1zKG5leHQpO1xuICAgIG9uTWV0YWRhdGFDaGFuZ2U/LihwYXJhbXNUb09iamVjdChuZXh0KSk7XG4gICAgc2V0U2hvd0VkaXRQYXJhbShmYWxzZSk7XG4gICAgc2V0RWRpdEluZGV4KG51bGwpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlbW92ZVBhcmFtID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gcGFyYW1zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgIHNldFBhcmFtcyhuZXh0KTtcbiAgICBvbk1ldGFkYXRhQ2hhbmdlPy4ocGFyYW1zVG9PYmplY3QobmV4dCkpO1xuICB9O1xuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6ICcxJyxcbiAgICBtYXhXaWR0aDogMzAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlclJhZGl1czogOCxcbiAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwwLDAsMC4xKScsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAuLi5zdHlsZSxcbiAgfTtcblxuICBjb25zdCBzZWN0aW9uSGVhZGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogMTYsXG4gICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICB9O1xuXG4gIGNvbnN0IHNlY3Rpb25UaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpbjogMCxcbiAgICBmb250U2l6ZTogMTIsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzY2NicsXG4gICAgbGV0dGVyU3BhY2luZzogMSxcbiAgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuXG4gIGNvbnN0IGZvcm1Hcm91cFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxNnB4IDE2cHggMTJweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYm9yZGVyQm90dG9tOiAnbm9uZScsXG4gIH07XG5cbiAgY29uc3QgbGFiZWxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHsgZm9udFNpemU6IDE0LCBjb2xvcjogJyMzMzMnIH07XG4gIGNvbnN0IGNvbG9yUGlja2VyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYXBwZWFyYW5jZTogJ25vbmUnLFxuICAgIHdpZHRoOiAxMjAsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBwYWRkaW5nOiAwLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gIH0gYXMgUmVhY3QuQ1NTUHJvcGVydGllcztcblxuICBjb25zdCBzZWxlY3RTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogMTQwLFxuICAgIGhlaWdodDogMzIsXG4gICAgcGFkZGluZzogJzAgOHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxuICAgIGZvbnRTaXplOiAxNCxcbiAgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuXG4gIGNvbnN0IGlucHV0U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHBhZGRpbmc6ICcwIDhweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogNCxcbiAgICBmb250U2l6ZTogMTQsXG4gIH07XG5cbiAgY29uc3QgYWN0aW9uQmFyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogMTIsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxuICAgIGdhcDogOCxcbiAgICBib3JkZXJUb3A6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZhZmFmYScsXG4gIH07XG5cbiAgY29uc3QgY2FuY2VsQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzhweCAxMnB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiA2LFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICB9O1xuICBjb25zdCBzYXZlQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzhweCAxMnB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMTExODI3JyxcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjMGIxMjIwJyxcbiAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gIH07XG5cbiAgY29uc3QgZnVsbFdpZHRoQWN0aW9uQnV0dG9uOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6IDgsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBwYWRkaW5nOiAnMTBweCAxMnB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRTaXplOiAxNCxcbiAgICBjb2xvcjogJyMxMTEnLFxuICB9O1xuXG4gIGNvbnN0IHNtYWxsSWNvbkJ1dHRvbjogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgIHdpZHRoOiAyOCxcbiAgICBoZWlnaHQ6IDI4LFxuICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IG1ldGFSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZ3JpZCcsXG4gICAgZ3JpZFRlbXBsYXRlQ29sdW1uczogJzFmciBtaW5tYXgoOTBweCwgMTUwcHgpIDI4cHggMjhweCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiA4LFxuICAgIHBhZGRpbmc6ICc2cHggMCcsXG4gIH07XG4gIGNvbnN0IG1ldGFOYW1lU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6IDEzLFxuICAgIGNvbG9yOiAnIzIyMicsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIH07XG4gIGNvbnN0IG1ldGFWYWx1ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1heFdpZHRoOiAxNTAsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICBmb250U2l6ZTogMTMsXG4gICAgY29sb3I6ICcjMTExJyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2U2ZTZlNicsXG4gICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICBwYWRkaW5nOiAnNnB4IDEwcHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmYWZhZmEnLFxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNhdmUgPSAoKSA9PiB7XG4gICAgb25TYXZlPy4oeyB0aGVtZSwgY2hhdFNldHRpbmdzLCBtZXRhZGF0YSB9KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfT5cbiAgICAgIHsvKiBBcHBlYXJhbmNlIFNlY3Rpb24gKi99XG4gICAgICA8ZGl2IHN0eWxlPXt7IGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZTBlMGUwJyB9fT5cbiAgICAgICAgPGRpdiBzdHlsZT17c2VjdGlvbkhlYWRlclN0eWxlfSBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QXBwZWFyYW5jZSghc2hvd0FwcGVhcmFuY2UpfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3NlY3Rpb25UaXRsZVN0eWxlfT5BUFBFQVJBTkNFPC9oMz5cbiAgICAgICAgICB7c2hvd0FwcGVhcmFuY2UgPyA8Q2hldnJvblVwIHNpemU9ezE2fSAvPiA6IDxDaGV2cm9uRG93biBzaXplPXsxNn0gLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd0FwcGVhcmFuY2UgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3JtR3JvdXBTdHlsZX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+UHJpbWFyeSBDb2xvcjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZW1lLnByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRoZW1lQ2hhbmdlKCdwcmltYXJ5Q29sb3InLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgc3R5bGU9e2NvbG9yUGlja2VyU3R5bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Zvcm1Hcm91cFN0eWxlfT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5TZWNvbmRhcnkgQ29sb3I8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVtZS5zZWNvbmRhcnlDb2xvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRoZW1lQ2hhbmdlKCdzZWNvbmRhcnlDb2xvcicsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBzdHlsZT17Y29sb3JQaWNrZXJTdHlsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm9ybUdyb3VwU3R5bGV9PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e2xhYmVsU3R5bGV9PkJhY2tncm91bmQgQ29sb3I8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVtZS5iYWNrZ3JvdW5kQ29sb3J9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaGVtZUNoYW5nZSgnYmFja2dyb3VuZENvbG9yJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtjb2xvclBpY2tlclN0eWxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3JtR3JvdXBTdHlsZX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+VGV4dCBDb2xvcjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZW1lLnRleHRDb2xvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRoZW1lQ2hhbmdlKCd0ZXh0Q29sb3InLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgc3R5bGU9e2NvbG9yUGlja2VyU3R5bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Zvcm1Hcm91cFN0eWxlfT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5Gb250IFNpemU8L2xhYmVsPlxuICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVtZS5mb250U2l6ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRoZW1lQ2hhbmdlKCdmb250U2l6ZScsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxMnB4XCI+U21hbGwgKDEycHgpPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjE1cHhcIj5NZWRpdW0gKDE1cHgpPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjE4cHhcIj5MYXJnZSAoMThweCk8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Zvcm1Hcm91cFN0eWxlfT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5Gb250IEZhbWlseTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZW1lLmZvbnRGYW1pbHkuc3BsaXQoJywnKVswXS50cmltKCl9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB2ID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmZiA9XG4gICAgICAgICAgICAgICAgICAgIHYgPT09ICdJbnRlcidcbiAgICAgICAgICAgICAgICAgICAgICA/ICdJbnRlciwgc2Fucy1zZXJpZidcbiAgICAgICAgICAgICAgICAgICAgICA6IHYgPT09ICdBcmlhbCdcbiAgICAgICAgICAgICAgICAgICAgICA/ICdBcmlhbCwgc2Fucy1zZXJpZidcbiAgICAgICAgICAgICAgICAgICAgICA6IHYgPT09ICdUaW1lcyBOZXcgUm9tYW4nXG4gICAgICAgICAgICAgICAgICAgICAgPyBcIidUaW1lcyBOZXcgUm9tYW4nLCBzZXJpZlwiXG4gICAgICAgICAgICAgICAgICAgICAgOiAnbW9ub3NwYWNlJztcbiAgICAgICAgICAgICAgICAgIGhhbmRsZVRoZW1lQ2hhbmdlKCdmb250RmFtaWx5JywgZmYpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSW50ZXJcIj5JbnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBcmlhbFwiPkFyaWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlRpbWVzIE5ldyBSb21hblwiPlRpbWVzIE5ldyBSb21hbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJtb25vc3BhY2VcIj5Nb25vc3BhY2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogU2V0dGluZ3MgU2VjdGlvbiAqL31cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3NlY3Rpb25IZWFkZXJTdHlsZX0gb25DbGljaz17KCkgPT4gc2V0U2hvd1NldHRpbmdzKCFzaG93U2V0dGluZ3MpfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3NlY3Rpb25UaXRsZVN0eWxlfT5TRVRUSU5HUzwvaDM+XG4gICAgICAgICAge3Nob3dTZXR0aW5ncyA/IDxDaGV2cm9uVXAgc2l6ZT17MTZ9IC8+IDogPENoZXZyb25Eb3duIHNpemU9ezE2fSAvPn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzaG93U2V0dGluZ3MgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcxNnB4IDE2cHggMTJweCcgfX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyAuLi5sYWJlbFN0eWxlLCBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Cb3R0b206IDggfX0+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyAuLi5pbnB1dFN0eWxlLCBoZWlnaHQ6IDQwLCBwYWRkaW5nOiAnMCAxMnB4JywgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcgfX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y2hhdFNldHRpbmdzLm5hbWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVTZXR0aW5nQ2hhbmdlKCduYW1lJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcwIDE2cHggMTZweCcgfX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyAuLi5sYWJlbFN0eWxlLCBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Cb3R0b206IDggfX0+RGVzY3JpcHRpb248L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uaW5wdXRTdHlsZSwgaGVpZ2h0OiA0MCwgcGFkZGluZzogJzAgMTJweCcsIGJveFNpemluZzogJ2JvcmRlci1ib3gnIH19XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NoYXRTZXR0aW5ncy5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVNldHRpbmdDaGFuZ2UoJ2Rlc2NyaXB0aW9uJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIE1ldGFkYXRhIFNlY3Rpb24gKi99XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzZWN0aW9uSGVhZGVyU3R5bGV9IG9uQ2xpY2s9eygpID0+IHNldFNob3dNZXRhZGF0YSghc2hvd01ldGFkYXRhKX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXtzZWN0aW9uVGl0bGVTdHlsZX0+TUVUQURBVEE8L2gzPlxuICAgICAgICAgIHtzaG93TWV0YWRhdGEgPyA8Q2hldnJvblVwIHNpemU9ezE2fSAvPiA6IDxDaGV2cm9uRG93biBzaXplPXsxNn0gLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd01ldGFkYXRhICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMTJweCAxNnB4JyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTMsIGNvbG9yOiAnIzU1NScsIG1hcmdpbkJvdHRvbTogMTAgfX0+XG4gICAgICAgICAgICAgICAgRGVmaW5lIGtleS92YWx1ZSBwYXJhbWV0ZXJzIHNlbnQgYXMgY2hhdCBtZXRhZGF0YS5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2Z1bGxXaWR0aEFjdGlvbkJ1dHRvbn0gb25DbGljaz17KCkgPT4gc2V0U2hvd0FkZFBhcmFtKHRydWUpfT5cbiAgICAgICAgICAgICAgICA8UGx1cyBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj5BZGQgUGFyYW1ldGVyPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3BhcmFtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMnB4IDE2cHggMTJweCcsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogNiB9fT5cbiAgICAgICAgICAgICAgICB7cGFyYW1zLm1hcCgocCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsID0gcC50eXBlID09PSAnYm9vbGVhbicgPyAocC52YWx1ZSA/ICdUcnVlJyA6ICdGYWxzZScpIDogU3RyaW5nKHAudmFsdWUgPz8gJycpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3AubmFtZX0gc3R5bGU9e21ldGFSb3dTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17bWV0YU5hbWVTdHlsZX0+e3AubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXRhVmFsdWVTdHlsZX0gdGl0bGU9e2Rpc3BsYXlWYWx9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2Rpc3BsYXlWYWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzbWFsbEljb25CdXR0b259XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRJbmRleChpZHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0RHJhZnQoeyAuLi5wIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93RWRpdFBhcmFtKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BFZGl0ICR7cC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBlbmNpbCBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17c21hbGxJY29uQnV0dG9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUmVtb3ZlUGFyYW0oaWR4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BSZW1vdmUgJHtwLm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2gyIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWN0aW9uIEJ1dHRvbnMgKi99XG4gICAgICA8ZGl2IHN0eWxlPXthY3Rpb25CYXJTdHlsZX0+XG4gICAgICAgIDxidXR0b24gc3R5bGU9e2NhbmNlbEJ1dHRvblN0eWxlfSBvbkNsaWNrPXsoKSA9PiBvbkNhbmNlbD8uKCl9PkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHN0eWxlPXtzYXZlQnV0dG9uU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVNhdmV9PlNhdmUgQ2hhbmdlczwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBTaW1wbGUgUGFyYW1ldGVyIE1vZGFscyAqL31cbiAgICAgIHtzaG93QWRkUGFyYW0gJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbE92ZXJsYXlTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bW9kYWxTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEhlYWRlclN0eWxlfT5BZGQgUGFyYW1ldGVyPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+UGFyYW1ldGVyIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZHJhZnRQYXJhbS5uYW1lfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXREcmFmdFBhcmFtKChkKSA9PiAoeyAuLi5kLCBuYW1lOiBlLnRhcmdldC52YWx1ZSB9KSl9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInBhcmFtXzFcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDEyIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2LCBmbGV4OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5UeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZHJhZnRQYXJhbS50eXBlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RHJhZnRQYXJhbSgoZCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlLnRhcmdldC52YWx1ZSBhcyBQYXJhbVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS50YXJnZXQudmFsdWUgPT09ICdib29sZWFuJyA/IGZhbHNlIDogZS50YXJnZXQudmFsdWUgPT09ICdudW1iZXInID8gMCA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzdHJpbmdcIj5TdHJpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm51bWJlclwiPk51bWJlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYm9vbGVhblwiPkJvb2xlYW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYsIGZsZXg6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZm9udFNpemU6IDEyLCBjb2xvcjogJyM3NzcnIH19PlJlcXVpcmVkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZHJhZnRQYXJhbS5yZXF1aXJlZCA/ICd5ZXMnIDogJ25vJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXREcmFmdFBhcmFtKChkKSA9PiAoeyAuLi5kLCByZXF1aXJlZDogZS50YXJnZXQudmFsdWUgPT09ICd5ZXMnIH0pKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vXCI+Tm88L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllc1wiPlllczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+RGVmYXVsdCAvIFZhbHVlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICB7ZHJhZnRQYXJhbS50eXBlID09PSAnYm9vbGVhbicgPyAoXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZWxlY3RTdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RyYWZ0UGFyYW0udmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldERyYWZ0UGFyYW0oKGQpID0+ICh7IC4uLmQsIHZhbHVlOiBlLnRhcmdldC52YWx1ZSA9PT0gJ3RydWUnIH0pKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZhbHNlXCI+RmFsc2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRydWVcIj5UcnVlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9e2RyYWZ0UGFyYW0udHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtTdHJpbmcoZHJhZnRQYXJhbS52YWx1ZSA/PyAnJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXREcmFmdFBhcmFtKChkKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkcmFmdFBhcmFtLnR5cGUgPT09ICdudW1iZXInID8gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSA6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsRm9vdGVyU3R5bGV9PlxuICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjYW5jZWxCdXR0b25TdHlsZX0gb25DbGljaz17KCkgPT4gc2V0U2hvd0FkZFBhcmFtKGZhbHNlKX0+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtzYXZlQnV0dG9uU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZUFkZFBhcmFtfT5cbiAgICAgICAgICAgICAgICBBZGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0VkaXRQYXJhbSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e21vZGFsT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbFN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsSGVhZGVyU3R5bGV9PkVkaXQgUGFyYW1ldGVyPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+UGFyYW1ldGVyIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZWRpdERyYWZ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEVkaXREcmFmdCgoZCkgPT4gKHsgLi4uZCwgbmFtZTogZS50YXJnZXQudmFsdWUgfSkpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDEyIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2LCBmbGV4OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5UeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZWRpdERyYWZ0LnR5cGV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0RHJhZnQoKGQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZS50YXJnZXQudmFsdWUgYXMgUGFyYW1UeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnRhcmdldC52YWx1ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBkLnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInN0cmluZ1wiPlN0cmluZzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+TnVtYmVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogNiwgZmxleDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+UmVxdWlyZWQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlZGl0RHJhZnQucmVxdWlyZWQgPyAneWVzJyA6ICdubyd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RWRpdERyYWZ0KChkKSA9PiAoeyAuLi5kLCByZXF1aXJlZDogZS50YXJnZXQudmFsdWUgPT09ICd5ZXMnIH0pKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vXCI+Tm88L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllc1wiPlllczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+VmFsdWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIHtlZGl0RHJhZnQudHlwZSA9PT0gJ2Jvb2xlYW4nID8gKFxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlZGl0RHJhZnQudmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEVkaXREcmFmdCgoZCkgPT4gKHsgLi4uZCwgdmFsdWU6IGUudGFyZ2V0LnZhbHVlID09PSAndHJ1ZScgfSkpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZmFsc2VcIj5GYWxzZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidHJ1ZVwiPlRydWU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT17ZWRpdERyYWZ0LnR5cGUgPT09ICdudW1iZXInID8gJ251bWJlcicgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtpbnB1dFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17U3RyaW5nKGVkaXREcmFmdC52YWx1ZSA/PyAnJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0RHJhZnQoKGQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVkaXREcmFmdC50eXBlID09PSAnbnVtYmVyJyA/IE51bWJlcihlLnRhcmdldC52YWx1ZSkgOiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEZvb3RlclN0eWxlfT5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y2FuY2VsQnV0dG9uU3R5bGV9IG9uQ2xpY2s9eygpID0+IHNldFNob3dFZGl0UGFyYW0oZmFsc2UpfT5cbiAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3NhdmVCdXR0b25TdHlsZX0gb25DbGljaz17aGFuZGxlRWRpdFNhdmV9PlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgaW1wb3J0c1xuZXhwb3J0IHR5cGUgeyBDaGF0VGhlbWUsIENoYXRTZXR0aW5nc0NvbmZpZyB9O1xuXG4vLyBNb2RhbCBzdHlsZXMgKHNoYXJlZClcbmNvbnN0IG1vZGFsT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgaW5zZXQ6IDAsXG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC4yNSknLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHpJbmRleDogOTk5OSxcbn07XG5cbmNvbnN0IG1vZGFsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIHdpZHRoOiA0MjAsXG4gIG1heFdpZHRoOiAnOTJ2dycsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxuICBib3JkZXJSYWRpdXM6IDEyLFxuICBib3hTaGFkb3c6ICcwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC4xOCknLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG59O1xuXG5jb25zdCBtb2RhbEhlYWRlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgZm9udFdlaWdodDogNjAwLFxuICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2VlZScsXG59O1xuXG5jb25zdCBtb2RhbEJvZHlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgcGFkZGluZzogMTYsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIGdhcDogMTIsXG59O1xuXG5jb25zdCBtb2RhbEZvb3RlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwYWRkaW5nOiAxMixcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgZ2FwOiA4LFxuICBib3JkZXJUb3A6ICcxcHggc29saWQgI2VlZScsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmYWZhZmEnLFxufTtcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface SpinnerProps {
3
+ size?: number;
4
+ color?: string;
5
+ }
6
+ export declare const Spinner: React.FC<SpinnerProps>;
7
+ export {};
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Loader2 } from 'lucide-react';
3
+ export var Spinner = function (_a) {
4
+ var _b = _a.size, size = _b === void 0 ? 24 : _b, _c = _a.color, color = _c === void 0 ? '#000' : _c;
5
+ var style = { animation: 'genassist-spin 1s linear infinite' };
6
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: "\n @keyframes genassist-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n " }), _jsx(Loader2, { size: size, color: color, style: style })] }));
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Bpbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1NwaW5uZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBT3ZDLE1BQU0sQ0FBQyxJQUFNLE9BQU8sR0FBMkIsVUFBQyxFQUE2QjtRQUEzQixZQUFTLEVBQVQsSUFBSSxtQkFBRyxFQUFFLEtBQUEsRUFBRSxhQUFjLEVBQWQsS0FBSyxtQkFBRyxNQUFNLEtBQUE7SUFDekUsSUFBTSxLQUFLLEdBQXdCLEVBQUUsU0FBUyxFQUFFLG1DQUFtQyxFQUFFLENBQUM7SUFDdEYsT0FBTyxDQUNMLDhCQUNFLDBCQUFRLG9KQUtQLEdBQVMsRUFDVixLQUFDLE9BQU8sSUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBSSxJQUNsRCxDQUNKLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTG9hZGVyMiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5cbmludGVyZmFjZSBTcGlubmVyUHJvcHMge1xuICBzaXplPzogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFNwaW5uZXI6IFJlYWN0LkZDPFNwaW5uZXJQcm9wcz4gPSAoeyBzaXplID0gMjQsIGNvbG9yID0gJyMwMDAnIH0pID0+IHtcbiAgY29uc3Qgc3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7IGFuaW1hdGlvbjogJ2dlbmFzc2lzdC1zcGluIDFzIGxpbmVhciBpbmZpbml0ZScgfTtcbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0eWxlPntgXG4gICAgICAgIEBrZXlmcmFtZXMgZ2VuYXNzaXN0LXNwaW4ge1xuICAgICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH1cbiAgICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxuICAgICAgICB9XG4gICAgICBgfTwvc3R5bGU+XG4gICAgICA8TG9hZGVyMiBzaXplPXtzaXplfSBjb2xvcj17Y29sb3J9IHN0eWxlPXtzdHlsZX0gLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbiJdfQ==
@@ -1,6 +1,7 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Mic, Loader2 } from 'lucide-react';
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Mic } from 'lucide-react';
3
3
  import { useVoiceInput } from '../hooks/useVoiceInput';
4
+ import { Spinner } from './Spinner';
4
5
  export var VoiceInput = function (_a) {
5
6
  var onTranscription = _a.onTranscription, onError = _a.onError, baseUrl = _a.baseUrl, apiKey = _a.apiKey, theme = _a.theme;
6
7
  var _b = useVoiceInput({
@@ -16,9 +17,7 @@ export var VoiceInput = function (_a) {
16
17
  };
17
18
  var getButtonContent = function () {
18
19
  if (isLoading) {
19
- return (_jsx(Loader2, { size: 18, color: "#ffffff", style: {
20
- animation: 'spin 1s linear infinite',
21
- } }));
20
+ return _jsx(Spinner, { size: 18, color: "#ffffff" });
22
21
  }
23
22
  return _jsx(Mic, { size: 18, color: "#ffffff" });
24
23
  };
@@ -46,8 +45,6 @@ export var VoiceInput = function (_a) {
46
45
  boxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',
47
46
  opacity: isLoading ? 0.9 : 1,
48
47
  };
49
- // Keyframe animation for the spinner
50
- var spinKeyframes = "\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n ";
51
- return (_jsxs(_Fragment, { children: [_jsx("style", { children: spinKeyframes }), _jsx("button", { type: "button", style: buttonStyle, onClick: handleClick, title: getTitle(), disabled: isLoading, children: getButtonContent() })] }));
48
+ return (_jsx(_Fragment, { children: _jsx("button", { type: "button", style: buttonStyle, onClick: handleClick, title: getTitle(), disabled: isLoading, children: getButtonContent() }) }));
52
49
  };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjdkQsTUFBTSxDQUFDLElBQU0sVUFBVSxHQUE4QixVQUFDLEVBTXJEO1FBTEMsZUFBZSxxQkFBQSxFQUNmLE9BQU8sYUFBQSxFQUNQLE9BQU8sYUFBQSxFQUNQLE1BQU0sWUFBQSxFQUNOLEtBQUssV0FBQTtJQUVDLElBQUEsS0FBOEMsYUFBYSxDQUFDO1FBQ2hFLE9BQU8sU0FBQTtRQUNQLE1BQU0sUUFBQTtRQUNOLGVBQWUsaUJBQUE7UUFDZixPQUFPLFNBQUE7S0FDUixDQUFDLEVBTE0sV0FBVyxpQkFBQSxFQUFFLFNBQVMsZUFBQSxFQUFFLGVBQWUscUJBSzdDLENBQUM7SUFFSCxJQUFNLFdBQVcsR0FBRyxVQUFDLENBQW1CO1FBQ3RDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsZUFBZSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRztRQUN2QixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUNMLEtBQUMsT0FBTyxJQUNOLElBQUksRUFBRSxFQUFFLEVBQ1IsS0FBSyxFQUFDLFNBQVMsRUFDZixLQUFLLEVBQUU7b0JBQ0wsU0FBUyxFQUFFLHlCQUF5QjtpQkFDckMsR0FDRCxDQUNILENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxLQUFDLEdBQUcsSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsQ0FBQztJQUMzQyxDQUFDLENBQUM7SUFFRixJQUFNLFFBQVEsR0FBRztRQUNmLElBQUksU0FBUztZQUFFLE9BQU8sZUFBZSxDQUFDO1FBQ3RDLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDNUQsQ0FBQyxDQUFDO0lBRUYsSUFBTSxNQUFNLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsWUFBWSxLQUFJLFNBQVMsQ0FBQztJQUNoRCxJQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxxQkFBcUI7SUFDakQsSUFBTSxXQUFXLEdBQXdCO1FBQ3ZDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNoRCxLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsTUFBTTtRQUNkLFlBQVksRUFBRSxLQUFLO1FBQ25CLEtBQUssRUFBRSxNQUFNO1FBQ2IsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM3QyxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsU0FBUyxFQUFFLCtCQUErQjtRQUMxQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0IsQ0FBQztJQUVGLHFDQUFxQztJQUNyQyxJQUFNLGFBQWEsR0FBRyxzSkFTckIsQ0FBQztJQUVGLE9BQU8sQ0FDTCw4QkFDRSwwQkFBUSxhQUFhLEdBQVMsRUFDOUIsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsV0FBVyxFQUNsQixPQUFPLEVBQUUsV0FBVyxFQUNwQixLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQ2pCLFFBQVEsRUFBRSxTQUFTLFlBRWxCLGdCQUFnQixFQUFFLEdBQ1osSUFDUixDQUNKLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWljLCBMb2FkZXIyIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZVZvaWNlSW5wdXQgfSBmcm9tICcuLi9ob29rcy91c2VWb2ljZUlucHV0JztcblxuaW50ZXJmYWNlIFZvaWNlSW5wdXRQcm9wcyB7XG4gIG9uVHJhbnNjcmlwdGlvbjogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBhcGlLZXk6IHN0cmluZztcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgVm9pY2VJbnB1dDogUmVhY3QuRkM8Vm9pY2VJbnB1dFByb3BzPiA9ICh7XG4gIG9uVHJhbnNjcmlwdGlvbixcbiAgb25FcnJvcixcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICB0aGVtZVxufSkgPT4ge1xuICBjb25zdCB7IGlzUmVjb3JkaW5nLCBpc0xvYWRpbmcsIHRvZ2dsZVJlY29yZGluZyB9ID0gdXNlVm9pY2VJbnB1dCh7XG4gICAgYmFzZVVybCxcbiAgICBhcGlLZXksXG4gICAgb25UcmFuc2NyaXB0aW9uLFxuICAgIG9uRXJyb3IsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0b2dnbGVSZWNvcmRpbmcoKTtcbiAgfTtcblxuICBjb25zdCBnZXRCdXR0b25Db250ZW50ID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxMb2FkZXIyIFxuICAgICAgICAgIHNpemU9ezE4fSBcbiAgICAgICAgICBjb2xvcj1cIiNmZmZmZmZcIiBcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYW5pbWF0aW9uOiAnc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPE1pYyBzaXplPXsxOH0gY29sb3I9XCIjZmZmZmZmXCIgLz47XG4gIH07XG5cbiAgY29uc3QgZ2V0VGl0bGUgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuICdDb25uZWN0aW5nLi4uJztcbiAgICByZXR1cm4gaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZyc7XG4gIH07XG5cbiAgY29uc3QgaWRsZUJnID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI5NjJGRic7XG4gIGNvbnN0IGFjdGl2ZUJnID0gJyNGRjNCMzAnOyAvLyByZWQgd2hlbiByZWNvcmRpbmdcbiAgY29uc3QgYnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1JlY29yZGluZyA/IGFjdGl2ZUJnIDogaWRsZUJnLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzM2cHgnLFxuICAgIGhlaWdodDogJzM2cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiBpc0xvYWRpbmcgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICB0cmFuc2l0aW9uOiAnYWxsIDAuMnMgZWFzZScsXG4gICAgZmxleFNocmluazogMCxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gICAgb3BhY2l0eTogaXNMb2FkaW5nID8gMC45IDogMSxcbiAgfTtcblxuICAvLyBLZXlmcmFtZSBhbmltYXRpb24gZm9yIHRoZSBzcGlubmVyXG4gIGNvbnN0IHNwaW5LZXlmcmFtZXMgPSBgXG4gICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIH1cbiAgICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgIH1cbiAgICB9XG4gIGA7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0eWxlPntzcGluS2V5ZnJhbWVzfTwvc3R5bGU+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT17YnV0dG9uU3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICB0aXRsZT17Z2V0VGl0bGUoKX1cbiAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgID5cbiAgICAgICAge2dldEJ1dHRvbkNvbnRlbnQoKX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvPlxuICApO1xufTsgXG4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBY3BDLE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBOEIsVUFBQyxFQU1yRDtRQUxDLGVBQWUscUJBQUEsRUFDZixPQUFPLGFBQUEsRUFDUCxPQUFPLGFBQUEsRUFDUCxNQUFNLFlBQUEsRUFDTixLQUFLLFdBQUE7SUFFQyxJQUFBLEtBQThDLGFBQWEsQ0FBQztRQUNoRSxPQUFPLFNBQUE7UUFDUCxNQUFNLFFBQUE7UUFDTixlQUFlLGlCQUFBO1FBQ2YsT0FBTyxTQUFBO0tBQ1IsQ0FBQyxFQUxNLFdBQVcsaUJBQUEsRUFBRSxTQUFTLGVBQUEsRUFBRSxlQUFlLHFCQUs3QyxDQUFDO0lBRUgsSUFBTSxXQUFXLEdBQUcsVUFBQyxDQUFtQjtRQUN0QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLGVBQWUsRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUVGLElBQU0sZ0JBQWdCLEdBQUc7UUFDdkIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sS0FBQyxPQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsU0FBUyxHQUFHLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sS0FBQyxHQUFHLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsU0FBUyxHQUFHLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUYsSUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLFNBQVM7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUN0QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVGLElBQU0sTUFBTSxHQUFHLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFlBQVksS0FBSSxTQUFTLENBQUM7SUFDaEQsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMscUJBQXFCO0lBQ2pELElBQU0sV0FBVyxHQUF3QjtRQUN2QyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDaEQsS0FBSyxFQUFFLFNBQVM7UUFDaEIsTUFBTSxFQUFFLE1BQU07UUFDZCxZQUFZLEVBQUUsS0FBSztRQUNuQixLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsUUFBUTtRQUNwQixjQUFjLEVBQUUsUUFBUTtRQUN4QixNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDN0MsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsQ0FBQztRQUNiLFNBQVMsRUFBRSwrQkFBK0I7UUFDMUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCLENBQUM7SUFFRixPQUFPLENBQ0wsNEJBQ0UsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsV0FBVyxFQUNsQixPQUFPLEVBQUUsV0FBVyxFQUNwQixLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQ2pCLFFBQVEsRUFBRSxTQUFTLFlBRWxCLGdCQUFnQixFQUFFLEdBQ1osR0FDUixDQUNKLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWljIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZVZvaWNlSW5wdXQgfSBmcm9tICcuLi9ob29rcy91c2VWb2ljZUlucHV0JztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuL1NwaW5uZXInO1xuXG5pbnRlcmZhY2UgVm9pY2VJbnB1dFByb3BzIHtcbiAgb25UcmFuc2NyaXB0aW9uOiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkVycm9yOiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBWb2ljZUlucHV0OiBSZWFjdC5GQzxWb2ljZUlucHV0UHJvcHM+ID0gKHtcbiAgb25UcmFuc2NyaXB0aW9uLFxuICBvbkVycm9yLFxuICBiYXNlVXJsLFxuICBhcGlLZXksXG4gIHRoZW1lXG59KSA9PiB7XG4gIGNvbnN0IHsgaXNSZWNvcmRpbmcsIGlzTG9hZGluZywgdG9nZ2xlUmVjb3JkaW5nIH0gPSB1c2VWb2ljZUlucHV0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICBvblRyYW5zY3JpcHRpb24sXG4gICAgb25FcnJvcixcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRvZ2dsZVJlY29yZGluZygpO1xuICB9O1xuXG4gIGNvbnN0IGdldEJ1dHRvbkNvbnRlbnQgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIDxTcGlubmVyIHNpemU9ezE4fSBjb2xvcj1cIiNmZmZmZmZcIiAvPjtcbiAgICB9XG4gICAgcmV0dXJuIDxNaWMgc2l6ZT17MTh9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+O1xuICB9O1xuXG4gIGNvbnN0IGdldFRpdGxlID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybiAnQ29ubmVjdGluZy4uLic7XG4gICAgcmV0dXJuIGlzUmVjb3JkaW5nID8gJ1N0b3AgUmVjb3JkaW5nJyA6ICdTdGFydCBSZWNvcmRpbmcnO1xuICB9O1xuXG4gIGNvbnN0IGlkbGVCZyA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCBhY3RpdmVCZyA9ICcjRkYzQjMwJzsgLy8gcmVkIHdoZW4gcmVjb3JkaW5nXG4gIGNvbnN0IGJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogaXNSZWNvcmRpbmcgPyBhY3RpdmVCZyA6IGlkbGVCZyxcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogaXNMb2FkaW5nID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGVhc2UnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCknLFxuICAgIG9wYWNpdHk6IGlzTG9hZGluZyA/IDAuOSA6IDEsXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9e2J1dHRvblN0eWxlfVxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgICAgdGl0bGU9e2dldFRpdGxlKCl9XG4gICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICA+XG4gICAgICAgIHtnZXRCdXR0b25Db250ZW50KCl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8Lz5cbiAgKTtcbn07XG4iXX0=