raise-common-lib 0.0.249 → 0.0.250

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.
Files changed (60) hide show
  1. package/README.md +57 -57
  2. package/bundles/raise-common-lib.umd.js +197 -791
  3. package/bundles/raise-common-lib.umd.js.map +1 -1
  4. package/bundles/raise-common-lib.umd.min.js +1 -1
  5. package/bundles/raise-common-lib.umd.min.js.map +1 -1
  6. package/esm2015/lib/dialog/common-dialog/index.component.js +1 -1
  7. package/esm2015/lib/form/richtexteditor/data-config.js +68 -1
  8. package/esm2015/lib/form/richtexteditor/index.component.js +130 -474
  9. package/esm5/lib/dialog/common-dialog/index.component.js +1 -1
  10. package/esm5/lib/form/richtexteditor/data-config.js +68 -1
  11. package/esm5/lib/form/richtexteditor/index.component.js +132 -523
  12. package/fesm2015/raise-common-lib.js +196 -707
  13. package/fesm2015/raise-common-lib.js.map +1 -1
  14. package/fesm5/raise-common-lib.js +198 -792
  15. package/fesm5/raise-common-lib.js.map +1 -1
  16. package/lib/form/richtexteditor/data-config.d.ts +8 -0
  17. package/lib/form/richtexteditor/index.component.d.ts +41 -65
  18. package/package.json +1 -1
  19. package/raise-common-lib.metadata.json +1 -1
  20. package/src/assets/img/arrow_right.svg +4 -4
  21. package/src/assets/img/bullet-dash.svg +3 -0
  22. package/src/assets/img/calendar-disabled.svg +6 -6
  23. package/src/assets/img/calendar.svg +6 -6
  24. package/src/assets/img/calendar_arrow_left.svg +3 -3
  25. package/src/assets/img/calendar_arrow_right.svg +3 -3
  26. package/src/assets/img/checked-vector.svg +3 -3
  27. package/src/assets/img/dialog-close.svg +4 -4
  28. package/src/assets/img/dialog-grow.svg +6 -6
  29. package/src/assets/img/dialog-shrink.svg +6 -6
  30. package/src/assets/img/plus.svg +4 -4
  31. package/src/assets/img/search.svg +4 -4
  32. package/src/assets/img/shrink-icon.svg +6 -6
  33. package/src/assets/img/time-disabled.svg +4 -4
  34. package/src/assets/img/time.svg +4 -4
  35. package/src/assets/img/toolbar-action-addFolder.svg +17 -17
  36. package/src/assets/img/toolbar-action-calculator.svg +11 -11
  37. package/src/assets/img/toolbar-action-collapse.svg +7 -7
  38. package/src/assets/img/toolbar-action-combine.svg +4 -4
  39. package/src/assets/img/toolbar-action-edit.svg +4 -4
  40. package/src/assets/img/toolbar-action-expand.svg +7 -7
  41. package/src/assets/img/toolbar-action-folderMove.svg +8 -8
  42. package/src/assets/img/toolbar-action-lock.svg +6 -6
  43. package/src/assets/img/toolbar-action-preview.svg +7 -7
  44. package/src/assets/img/toolbar-action-publish.svg +5 -5
  45. package/src/assets/img/toolbar-action-reminders.svg +10 -10
  46. package/src/assets/img/toolbar-action-rename.svg +7 -7
  47. package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
  48. package/src/assets/img/toolbar-action-send-file.svg +5 -5
  49. package/src/assets/img/toolbar-action-settle.svg +7 -7
  50. package/src/assets/img/toolbar-action-share.svg +5 -5
  51. package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
  52. package/src/assets/img/toolbar-action-sync.svg +4 -4
  53. package/src/assets/img/toolbar-action-template.svg +6 -6
  54. package/src/assets/img/toolbar-action-workflow.svg +9 -9
  55. package/esm2015/lib/form/richtexteditor/ai-config.js +0 -70
  56. package/esm2015/lib/form/richtexteditor/openapi.js +0 -175
  57. package/esm5/lib/form/richtexteditor/ai-config.js +0 -73
  58. package/esm5/lib/form/richtexteditor/openapi.js +0 -208
  59. package/lib/form/richtexteditor/ai-config.d.ts +0 -10
  60. package/lib/form/richtexteditor/openapi.d.ts +0 -3
@@ -3,85 +3,33 @@
3
3
  * Generated from: lib/form/richtexteditor/index.component.ts
4
4
  * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
5
  */
6
- import * as tslib_1 from "tslib";
7
- import { Component, Input, Output, ViewChild, ChangeDetectorRef, EventEmitter, } from "@angular/core";
8
- import { DropDownListComponent, } from "@syncfusion/ej2-angular-dropdowns";
9
- import { RichTextEditorComponent, } from "@syncfusion/ej2-angular-richtexteditor";
10
- import { ButtonComponent, } from "@syncfusion/ej2-angular-buttons";
11
- import { DropDownButton } from "@syncfusion/ej2-angular-splitbuttons";
12
- import { DialogComponent } from "@syncfusion/ej2-angular-popups";
13
- import { OpenAiModelRTE } from "./openapi";
14
- import { lineHeight_items } from "./data-config";
15
- import { fontFamily } from "./data-config";
6
+ import { Component, Input, Output, EventEmitter } from "@angular/core";
7
+ import { fontFamily, size } from "./data-config";
16
8
  export class RichtexteditorComponent {
17
- /**
18
- * @param {?} ref
19
- */
20
- constructor(ref) {
21
- this.ref = ref;
22
- // @ViewChild("chipList", { static: false }) public chipList!: ChipListComponent;
23
- this.placeholder = "";
9
+ constructor() {
24
10
  this.value = "";
11
+ this.editorId = "editorId";
25
12
  this.height = 150;
26
13
  this.autoSaveOnIdle = true;
27
- this.target = "#container"; // dialog 弹窗父级
28
- // dialog 弹窗父级
29
- this.toolbarClick = new EventEmitter();
30
- this.change = new EventEmitter();
31
- // @Output() change = new EventEmitter();
32
- this.family = fontFamily;
33
- this.dialogWidth = "800px";
34
- this.dialogHeight = "642px";
35
- this.showZoomBtn = true;
36
- this.showMsg = false;
14
+ this.disabled = false;
37
15
  this.insertImageSettings = {
38
16
  saveFormat: "Blob",
39
17
  allowedTypes: [".svg", ".png"],
40
18
  display: "none",
41
19
  };
42
- this.size = "";
43
- this.dropValIndex = 0;
44
- this.queryList = [
45
- { id: "Rephrase", text: "Rephrase" },
46
- { id: "Grammar", text: "Correct Grammar" },
47
- { id: "Summarize", text: "Summarize" },
48
- { id: "Elaborate", text: "Elaborate" },
49
- { id: "Translate", text: "Translate" },
50
- { id: "SentimentAnalysis", text: "Sentiment Analysis" },
51
- ];
52
- this.rephraseTyleList = [
53
- { text: "Standard", id: "Standard" },
54
- { text: "Fluent", id: "Fluent" },
55
- { text: "Professional", id: "Professional" },
56
- ];
57
- this.languageList = [
58
- { id: "EN", text: "English" },
59
- { id: "ZH", text: "Chinese (Simplified)" },
60
- { id: "ES", text: "Spanish" },
61
- { id: "ZHT", text: "Chinese (Traditional)" },
62
- { id: "HI", text: "Hindi" },
63
- { id: "AR", text: "Arabic" },
64
- { id: "BN", text: "Bengali" },
65
- { id: "PT", text: "Portuguese" },
66
- { id: "RU", text: "Russian" },
67
- { id: "JA", text: "Japanese" },
68
- { id: "DE", text: "German" },
69
- { id: "KO", text: "Korean" },
70
- { id: "FR", text: "French" },
71
- { id: "IT", text: "Italian" },
72
- { id: "TR", text: "Turkish" },
73
- ];
74
- this.promptQuery = "";
75
- this.isSentimentCheck = false;
76
- this.subQuery = "";
77
- this.chipValue = "Standard";
20
+ this.toolbarClick = new EventEmitter();
21
+ this.change = new EventEmitter();
22
+ this.created = new EventEmitter();
23
+ this.actionBegin = new EventEmitter();
24
+ this.input = new EventEmitter();
25
+ this.focus = new EventEmitter();
26
+ this.blur = new EventEmitter();
27
+ this.actionComplete = new EventEmitter();
28
+ this.family = fontFamily;
29
+ this.fontSize = size;
78
30
  this.tools = {
79
31
  enableFloating: false,
80
32
  items: [
81
- {
82
- tooltipText: "AI Assist",
83
- template: '<button class="e-tbar-btn e-btn" tabindex="-1" id="ai_assistant_button_tbar" style="width:100%"><div class="e-rte-dropdown-btn-text">AI Assist</div></button>',
84
- },
85
33
  "Bold",
86
34
  "Italic",
87
35
  "Underline",
@@ -96,21 +44,12 @@ export class RichtexteditorComponent {
96
44
  "CreateTable",
97
45
  "Formats",
98
46
  "Alignments",
99
- {
100
- tooltipText: "Line Height",
101
- template: '<button class="e-tbar-btn e-btn" tabindex="-1" id="lineheight_tbar" style="width:100%"></button>',
102
- },
103
- "OrderedList",
104
- "UnorderedList",
47
+ "BulletFormatList",
48
+ "NumberFormatList",
105
49
  "Outdent",
106
50
  "Indent",
107
51
  "|",
108
52
  "CreateLink",
109
- {
110
- tooltipText: "",
111
- template: '<button class="e-tbar-btn e-btn" tabindex="-1" id="custom_tbar" style="width:100%">' +
112
- '<div class="e-tbar-btn-text" style="font-weight: 500;"><img src="/assets/img/file-icon.svg" style="position: relative;top: -2px;"/><div class="uploadActions"><div id="uploadFromUser">Computer File</div><div id="relationDom">Ticket Attachment</div></div></div></button>',
113
- },
114
53
  "|",
115
54
  "FormatPainter",
116
55
  "ClearFormat",
@@ -119,483 +58,200 @@ export class RichtexteditorComponent {
119
58
  "Redo",
120
59
  ],
121
60
  };
61
+ /**
62
+ * 表格快捷工具栏:含 TableCell(合并/拆分单元格)
63
+ */
64
+ this.quickToolbarSettings = {
65
+ table: [
66
+ "Tableheader",
67
+ "TableRemove",
68
+ "|",
69
+ "TableRows",
70
+ "TableColumns",
71
+ "TableCell",
72
+ "|",
73
+ "Styles",
74
+ "BackgroundColor",
75
+ "Alignments",
76
+ "TableCellVerticalAlign",
77
+ ],
78
+ };
79
+ this.bulletFormatList = {
80
+ types: [
81
+ { text: "None", value: "none" },
82
+ { text: "●", value: "disc" },
83
+ { text: "○", value: "circle" },
84
+ { text: "■", value: "square" },
85
+ { text: "-", value: "dash" },
86
+ ],
87
+ };
88
+ this.numberFormatList = {
89
+ types: [
90
+ { text: "None", value: "none" },
91
+ { text: "1, 2, 3, …", value: "decimal" },
92
+ {
93
+ text: "α, β, γ, …",
94
+ value: "lowerGreek",
95
+ },
96
+ {
97
+ text: "i, ii, iii, …",
98
+ value: "lowerRoman",
99
+ },
100
+ {
101
+ text: "A, B, C, …",
102
+ value: "upperAlpha",
103
+ },
104
+ {
105
+ text: "a, b, c, …",
106
+ value: "lowerAlpha",
107
+ },
108
+ {
109
+ text: "I, II, III, …",
110
+ value: "upperRoman",
111
+ },
112
+ {
113
+ text: "(1), (2), (3), …",
114
+ value: "parentheses",
115
+ },
116
+ ],
117
+ };
122
118
  }
123
- /**
124
- * @return {?}
125
- */
126
- ngOnInit() { }
127
119
  /**
128
120
  * @param {?} args
129
121
  * @return {?}
130
122
  */
131
123
  onContentChange(args) {
132
- /** @type {?} */
133
- const tables = document.querySelectorAll("table.e-rte-table");
134
- tables.forEach((/**
135
- * @param {?} table
136
- * @return {?}
137
- */
138
- (table) => {
139
- /** @type {?} */
140
- const htmlTable = (/** @type {?} */ (table));
141
- htmlTable.style.marginBottom = "10px";
142
- htmlTable.style.borderCollapse = "collapse";
143
- htmlTable.style.emptyCells = "show";
144
- /** @type {?} */
145
- const tdElements = table.querySelectorAll("td");
146
- tdElements.forEach((/**
147
- * @param {?} td
148
- * @return {?}
149
- */
150
- (td) => {
151
- td.style.border = "1px solid #adb5bd";
152
- td.style.height = "20px";
153
- td.style.minWidth = "20px";
154
- td.style.padding = "2px 5px";
155
- td.style.boxSizing = "border-box";
156
- }));
157
- }));
158
124
  this.change.emit(args);
159
125
  }
160
126
  /**
161
127
  * @return {?}
162
128
  */
163
129
  onCreate() {
164
- //bind the a click event
165
- // let editorContent = this.rteObj.contentModule.getEditPanel() as HTMLElement;
166
- // editorContent.addEventListener('click', this.OnClicked.bind(this));
167
- //add the line height
168
- this.editorManager = this.rteObj.formatter.editorManager;
169
- /** @type {?} */
170
- let splitButton = new DropDownButton({
171
- items: lineHeight_items,
172
- iconCss: "e-icons e-line-spacing",
173
- select: this.onSelect.bind(this),
174
- });
175
- splitButton.appendTo("#lineheight_tbar");
176
- // ai assist
177
- /** @type {?} */
178
- let aiassistantButton = new DropDownButton({
179
- items: this.queryList,
180
- // iconCss: "e-btn-icon e-icons e-assistview-icon e-icon-left",
181
- select: (/**
182
- * @param {?} args
183
- * @return {?}
184
- */
185
- (args) => this.aiQuerySelectedMenu(args)),
186
- });
187
- aiassistantButton.appendTo("#ai_assistant_button_tbar");
130
+ this.created.emit();
188
131
  }
189
132
  /**
190
- * @private
191
133
  * @param {?} args
192
134
  * @return {?}
193
135
  */
194
- onSelect(args) {
195
- if (this.rteObj.formatter.getUndoRedoStack().length === 0) {
196
- this.rteObj.formatter.saveData();
197
- }
198
- /** @type {?} */
199
- let nodes = this.editorManager.domNode.blockNodes();
200
- for (let i = 0; nodes.length > i; i++) {
201
- ((/** @type {?} */ (nodes[i]))).style.lineHeight = args.item.text;
202
- }
203
- this.rteObj.formatter.saveData();
204
- this.rteObj.formatter.enableUndo(this.rteObj);
136
+ _toolbarClick(args) {
137
+ this.toolbarClick.emit(args);
205
138
  }
206
139
  /**
207
- * @private
208
140
  * @param {?} args
209
141
  * @return {?}
210
142
  */
211
- aiQuerySelectedMenu(args) {
212
- this.dialogueOpen(args.item.text);
213
- }
214
- /**
215
- * @param {?} selectedQuery
216
- * @return {?}
217
- */
218
- dialogueOpen(selectedQuery) {
219
- /** @type {?} */
220
- var selectionText = this.rteObj.getSelectedHtml();
221
- this.selectedQuery = selectedQuery;
222
- if (selectionText) {
223
- /** @type {?} */
224
- let range = ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.getRange(((/** @type {?} */ (this.rteObj))).contentModule.getDocument());
225
- ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.save(range, ((/** @type {?} */ (this.rteObj))).contentModule.getDocument());
226
- this.dropValIndex = this.queryList.findIndex((/**
227
- * @param {?} q
228
- * @return {?}
229
- */
230
- (q) => q.text.toLowerCase() === selectedQuery.toLowerCase()));
231
- this.queryCategory.index = this.dropValIndex;
232
- this.leftRte.value = this.promptQuery = selectionText;
233
- this.leftRte.refreshUI();
234
- this.AIdialog.show();
235
- this.updateAISugesstionsData(selectedQuery);
236
- }
237
- else {
238
- this.showMsg = true;
239
- setTimeout((/**
240
- * @return {?}
241
- */
242
- () => {
243
- this.showMsg = false;
244
- }), 3000);
245
- console.log("Please select the content to perform the AI operation.");
246
- }
143
+ _actionBegin(args) {
144
+ this.actionBegin.emit(args);
247
145
  }
248
146
  /**
249
- * @param {?} selectedQuery
147
+ * @param {?} args
250
148
  * @return {?}
251
149
  */
252
- updateAISugesstionsData(selectedQuery) {
253
- this.isSentimentCheck = false;
254
- switch (selectedQuery) {
255
- case "Summarize":
256
- this.subQuery = "Summarize the upcoming sentence shortly.";
257
- break;
258
- case "Elaborate":
259
- this.subQuery = "Elaborate on the upcoming sentence.";
260
- break;
261
- case "Rephrase":
262
- this.subQuery = this.chipValue + " rephrase the upcoming sentence.";
263
- break;
264
- case "Correct Grammar":
265
- this.subQuery = "Correct the grammar of the upcoming sentence.";
266
- break;
267
- case "Translate":
268
- this.subQuery =
269
- "Translate the upcoming sentence to " + this.translatelanguage + ".";
270
- break;
271
- case "Sentiment Analysis":
272
- this.isSentimentCheck = true;
273
- this.subQuery =
274
- 'Analyze the sentiment and grammar of the following paragraphs and provide the expression score with an emoji followed by the sentiment in the format: "😊 Neutral". \n\nNOTE: Avoid any additional text or explanation:';
275
- break;
276
- }
277
- this.updateAISugesstions();
150
+ _input(args) {
151
+ this.input.emit(args);
278
152
  }
279
153
  /**
154
+ * @param {?} args
280
155
  * @return {?}
281
156
  */
282
- updateAISugesstions() {
283
- try {
284
- if (this.promptQuery) {
285
- ((/** @type {?} */ (document.getElementById("skeletonId")))).style.display =
286
- "";
287
- ((/** @type {?} */ (document.getElementById("rightRte")))).style.display =
288
- "none";
289
- this.sentimentButton.element.style.display = "none";
290
- this.regenerateButton.disabled = true;
291
- this.copyButton.disabled = true;
292
- this.replaceButton.disabled = true;
293
- this.apiResultData = this.getResponseFromOpenAI(this.subQuery, this.promptQuery);
294
- this.apiResultData.then((/**
295
- * @param {?} result
296
- * @return {?}
297
- */
298
- (result) => {
299
- this.AIResult = this.isSentimentCheck ? this.promptQuery : result;
300
- this.sentimentButton.content = result
301
- .toLowerCase()
302
- .includes("positive")
303
- ? "😊 Positive"
304
- : result.toLowerCase().includes("negative")
305
- ? "😞 Negative"
306
- : "😐 Neutral";
307
- this.sentimentButton.element.style.display = !this.isSentimentCheck
308
- ? "none"
309
- : "";
310
- this.rightRte.value = this.AIResult;
311
- /** @type {?} */
312
- var noResultsFound = !(this.AIResult || this.promptQuery);
313
- ((/** @type {?} */ (document.getElementById("no-results-found")))).style.display = noResultsFound ? "" : "none";
314
- this.regenerateButton.disabled = noResultsFound;
315
- this.copyButton.disabled = noResultsFound;
316
- this.replaceButton.disabled = noResultsFound;
317
- ((/** @type {?} */ (document.getElementById("skeletonId")))).style.display =
318
- "none";
319
- ((/** @type {?} */ (document.getElementById("rightRte")))).style.display =
320
- noResultsFound ? "none" : "";
321
- console.log(noResultsFound, ((/** @type {?} */ (document.getElementById("rightRte")))).style);
322
- // this.ref.markForCheck();
323
- }));
157
+ _actionComplete(args) {
158
+ if (args.requestType == "UL") {
159
+ if (args.elements[0].parentElement.style.listStyleType == "dash") {
160
+ args.elements[0].parentElement.style.listStyleImage =
161
+ "url('../../../assets/img/bullet-dash.svg')";
162
+ args.elements[0].parentElement.style.listStyleType = "none";
324
163
  }
325
164
  }
326
- catch (_a) {
327
- // this.toastObj.show();
328
- }
329
- }
330
- /**
331
- * @param {?} subQuery
332
- * @param {?} promptQuery
333
- * @return {?}
334
- */
335
- getResponseFromOpenAI(subQuery, promptQuery) {
336
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
337
- /** @type {?} */
338
- const content = yield OpenAiModelRTE(subQuery, promptQuery);
339
- return content ? ((/** @type {?} */ (content))) : "";
340
- });
341
- }
342
- /**
343
- * @return {?}
344
- */
345
- dialogShow() {
346
- (/** @type {?} */ (this.regenerateButton)).element.addEventListener("click", (/**
347
- * @return {?}
348
- */
349
- () => {
350
- this.updateAISugesstions();
351
- }));
352
- (/** @type {?} */ (this.copyButton)).element.addEventListener("click", (/**
353
- * @return {?}
354
- */
355
- () => {
356
- this.copyTextToClipboard(this.AIResult);
357
- }));
358
- (/** @type {?} */ (this.replaceButton)).element.addEventListener("click", (/**
359
- * @return {?}
360
- */
361
- () => {
362
- /** @type {?} */
363
- let range = ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.getRange(((/** @type {?} */ (this.rteObj))).contentModule.getDocument());
364
- ((/** @type {?} */ (this.rteObj))).formatter.editorManager.nodeSelection.restore(range);
365
- ((/** @type {?} */ (this.rteObj))).executeCommand("insertHTML", this.AIResult, {
366
- undo: true,
367
- });
368
- this.closeDialog();
369
- }));
370
- ((/** @type {?} */ (this.AIdialog))).element.style.display = "";
371
- }
372
- /**
373
- * @return {?}
374
- */
375
- closeDialog() {
376
- this.AIdialog.hide();
377
- this.rightRte.value = "";
378
- this.leftRte.value = "";
379
- this.promptQuery = "";
380
- this.chipValue = "Standard";
381
- this.AIResult = "";
382
- this.dropValIndex = 0;
383
- this.selectedQuery = "Rephrase";
384
- this.sentimentButton.content = "😊 Neutral";
385
- }
386
- /**
387
- * @param {?} text
388
- * @return {?}
389
- */
390
- copyTextToClipboard(text) {
391
- if (navigator.clipboard) {
392
- navigator.clipboard
393
- .writeText(text)
394
- .then((/**
395
- * @return {?}
396
- */
397
- () => {
398
- console.log("Text copied to clipboard successfully!");
399
- }))
400
- .catch((/**
401
- * @param {?} err
402
- * @return {?}
403
- */
404
- (err) => {
405
- console.error("Failed to copy text: ", err);
406
- }));
407
- }
408
- else {
409
- // Fallback for browsers that do not support the Clipboard API
410
- /** @type {?} */
411
- const textarea = document.createElement("textarea");
412
- textarea.value = text;
413
- document.body.appendChild(textarea);
414
- textarea.select();
415
- try {
416
- document.execCommand("copy");
417
- console.log("Text copied to clipboard using execCommand");
418
- }
419
- catch (err) {
420
- console.error("Failed to copy text: ", err);
421
- }
422
- finally {
423
- document.body.removeChild(textarea);
165
+ else if (args.requestType == "OL") {
166
+ args.elements[0].parentElement.classList.remove("custom-list", "parentheses");
167
+ if (args.elements[0].parentElement.style.listStyleType == "parentheses") {
168
+ args.elements[0].parentElement.classList = "custom-list";
169
+ args.elements[0].parentElement.classList.add("parentheses");
424
170
  }
425
171
  }
426
- }
427
- /**
428
- * @return {?}
429
- */
430
- onOverlayClick() {
431
- /** @type {?} */
432
- let activeEle = this.AIdialog.element.querySelector(".char_block.e-active");
433
- if (activeEle) {
434
- activeEle.classList.remove("e-active");
435
- }
436
- this.closeDialog();
437
- }
438
- /**
439
- * @param {?} args
440
- * @return {?}
441
- */
442
- onQuerySelect(args) {
443
- // this.chipList.selectedChips = 0;
444
- this.translatelanguage = "EN";
445
- this.selectedQuery = args.itemData.text;
446
- this.updateAISugesstionsData(args.itemData.text);
172
+ this.actionComplete.emit(args);
447
173
  }
448
174
  /**
449
175
  * @param {?} args
450
176
  * @return {?}
451
177
  */
452
- onLanguageSelect(args) {
453
- this.translatelanguage = args.itemData.id;
454
- this.updateAISugesstionsData("Translate");
178
+ _focus(args) {
179
+ this.focus.emit(args);
455
180
  }
456
181
  /**
457
182
  * @param {?} args
458
183
  * @return {?}
459
184
  */
460
- onChipClick(args) {
461
- this.chipValue = args.itemData.text;
462
- // 事件会触发两次 必须判断args.text是否有值
463
- if (args.itemData.text)
464
- this.updateAISugesstionsData("Rephrase");
465
- }
466
- /**
467
- * @param {?} args
468
- * @return {?}
469
- */
470
- _toolbarClick(args) {
471
- this.toolbarClick.emit(args);
472
- }
473
- /**
474
- * @return {?}
475
- */
476
- hideToast() {
477
- this.showMsg = false;
478
- }
479
- /**
480
- * @return {?}
481
- */
482
- onZoom() {
483
- if (this.size === "largest") {
484
- this.size = ""; // 恢复到原始大小
485
- }
486
- else {
487
- this.size = "largest"; // 设置为最大化
488
- }
185
+ _blur(args) {
186
+ this.blur.emit(args);
489
187
  }
490
188
  }
491
189
  RichtexteditorComponent.decorators = [
492
190
  { type: Component, args: [{
493
191
  selector: "rs-richtext-editor",
494
- template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n id=\"editor\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [fontFamily]=\"family\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(value)]=\"value\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">AI Assist</div>\r\n <div class=\"header-buttons\">\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n content=\"\uD83D\uDE0A Neutral\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n content=\"Copy\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n content=\"Replace\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n Rephrase\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n content=\"Regenerate\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n width: 100%;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n height: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: left; width: 100%; height: 100%\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n placeholder=\"Analysis of AI Support\"\r\n cssClass=\"e-outline\"\r\n >\r\n <!-- style=\"display: none\" -->\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>No results found</div>\r\n </div>\r\n <div id=\"skeletonId\" style=\"display: none\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"20px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n <div class=\"toast\" *ngIf=\"showMsg\">\r\n <span class=\"toast_text\">First, Select some text</span\r\n ><span class=\"close_icon\" (click)=\"hideToast()\"></span>\r\n </div>\r\n</div>\r\n",
192
+ template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [quickToolbarSettings]=\"quickToolbarSettings\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(value)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n</div>\r\n",
495
193
  styles: [".editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text::before{content:url(../../assets/img/info.svg);display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(../../assets/img/notification-close.svg);cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width:767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0 solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0 solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn::before{content:url(../../assets/img/editor-copy.svg);vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.editor_box .e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}"]
496
194
  }] }
497
195
  ];
498
- /** @nocollapse */
499
- RichtexteditorComponent.ctorParameters = () => [
500
- { type: ChangeDetectorRef }
501
- ];
502
196
  RichtexteditorComponent.propDecorators = {
503
- rteObj: [{ type: ViewChild, args: ["editor", { static: false },] }],
504
- queryCategory: [{ type: ViewChild, args: ["queryCategory", { static: false },] }],
505
- leftRte: [{ type: ViewChild, args: ["leftRte", { static: false },] }],
506
- rightRte: [{ type: ViewChild, args: ["rightRte", { static: false },] }],
507
- AIdialog: [{ type: ViewChild, args: ["AIdialog", { static: true },] }],
508
- sentimentButton: [{ type: ViewChild, args: ["sentimentButton", { static: false },] }],
509
- regenerateButton: [{ type: ViewChild, args: ["regenerateButton", { static: false },] }],
510
- copyButton: [{ type: ViewChild, args: ["copyButton", { static: false },] }],
511
- replaceButton: [{ type: ViewChild, args: ["replaceButton", { static: false },] }],
512
- placeholder: [{ type: Input }],
513
197
  value: [{ type: Input }],
198
+ editorId: [{ type: Input }],
514
199
  height: [{ type: Input }],
515
200
  autoSaveOnIdle: [{ type: Input }],
516
- target: [{ type: Input }],
201
+ disabled: [{ type: Input }],
202
+ insertImageSettings: [{ type: Input }],
517
203
  toolbarClick: [{ type: Output }],
518
- change: [{ type: Output }]
204
+ change: [{ type: Output }],
205
+ created: [{ type: Output }],
206
+ actionBegin: [{ type: Output }],
207
+ input: [{ type: Output }],
208
+ focus: [{ type: Output }],
209
+ blur: [{ type: Output }],
210
+ actionComplete: [{ type: Output }]
519
211
  };
520
212
  if (false) {
521
- /** @type {?} */
522
- RichtexteditorComponent.prototype.rteObj;
523
- /** @type {?} */
524
- RichtexteditorComponent.prototype.queryCategory;
525
- /** @type {?} */
526
- RichtexteditorComponent.prototype.leftRte;
527
- /** @type {?} */
528
- RichtexteditorComponent.prototype.rightRte;
529
- /** @type {?} */
530
- RichtexteditorComponent.prototype.AIdialog;
531
- /** @type {?} */
532
- RichtexteditorComponent.prototype.sentimentButton;
533
- /** @type {?} */
534
- RichtexteditorComponent.prototype.regenerateButton;
535
- /** @type {?} */
536
- RichtexteditorComponent.prototype.copyButton;
537
- /** @type {?} */
538
- RichtexteditorComponent.prototype.replaceButton;
539
- /** @type {?} */
540
- RichtexteditorComponent.prototype.placeholder;
541
213
  /** @type {?} */
542
214
  RichtexteditorComponent.prototype.value;
543
215
  /** @type {?} */
216
+ RichtexteditorComponent.prototype.editorId;
217
+ /** @type {?} */
544
218
  RichtexteditorComponent.prototype.height;
545
219
  /** @type {?} */
546
220
  RichtexteditorComponent.prototype.autoSaveOnIdle;
547
221
  /** @type {?} */
548
- RichtexteditorComponent.prototype.target;
549
- /** @type {?} */
550
- RichtexteditorComponent.prototype.toolbarClick;
551
- /** @type {?} */
552
- RichtexteditorComponent.prototype.change;
553
- /** @type {?} */
554
- RichtexteditorComponent.prototype.family;
555
- /** @type {?} */
556
- RichtexteditorComponent.prototype.dialogWidth;
557
- /** @type {?} */
558
- RichtexteditorComponent.prototype.dialogHeight;
559
- /** @type {?} */
560
- RichtexteditorComponent.prototype.showZoomBtn;
561
- /** @type {?} */
562
- RichtexteditorComponent.prototype.showMsg;
222
+ RichtexteditorComponent.prototype.disabled;
563
223
  /** @type {?} */
564
224
  RichtexteditorComponent.prototype.insertImageSettings;
565
225
  /** @type {?} */
566
- RichtexteditorComponent.prototype.editorManager;
567
- /** @type {?} */
568
- RichtexteditorComponent.prototype.size;
569
- /** @type {?} */
570
- RichtexteditorComponent.prototype.selectedQuery;
571
- /** @type {?} */
572
- RichtexteditorComponent.prototype.dropValIndex;
573
- /** @type {?} */
574
- RichtexteditorComponent.prototype.queryList;
226
+ RichtexteditorComponent.prototype.toolbarClick;
575
227
  /** @type {?} */
576
- RichtexteditorComponent.prototype.rephraseTyleList;
228
+ RichtexteditorComponent.prototype.change;
577
229
  /** @type {?} */
578
- RichtexteditorComponent.prototype.languageList;
230
+ RichtexteditorComponent.prototype.created;
579
231
  /** @type {?} */
580
- RichtexteditorComponent.prototype.promptQuery;
232
+ RichtexteditorComponent.prototype.actionBegin;
581
233
  /** @type {?} */
582
- RichtexteditorComponent.prototype.isSentimentCheck;
234
+ RichtexteditorComponent.prototype.input;
583
235
  /** @type {?} */
584
- RichtexteditorComponent.prototype.subQuery;
236
+ RichtexteditorComponent.prototype.focus;
585
237
  /** @type {?} */
586
- RichtexteditorComponent.prototype.translatelanguage;
238
+ RichtexteditorComponent.prototype.blur;
587
239
  /** @type {?} */
588
- RichtexteditorComponent.prototype.chipValue;
240
+ RichtexteditorComponent.prototype.actionComplete;
589
241
  /** @type {?} */
590
- RichtexteditorComponent.prototype.apiResultData;
242
+ RichtexteditorComponent.prototype.family;
591
243
  /** @type {?} */
592
- RichtexteditorComponent.prototype.AIResult;
244
+ RichtexteditorComponent.prototype.fontSize;
593
245
  /** @type {?} */
594
246
  RichtexteditorComponent.prototype.tools;
595
247
  /**
248
+ * 表格快捷工具栏:含 TableCell(合并/拆分单元格)
596
249
  * @type {?}
597
- * @private
598
250
  */
599
- RichtexteditorComponent.prototype.ref;
251
+ RichtexteditorComponent.prototype.quickToolbarSettings;
252
+ /** @type {?} */
253
+ RichtexteditorComponent.prototype.bulletFormatList;
254
+ /** @type {?} */
255
+ RichtexteditorComponent.prototype.numberFormatList;
600
256
  }
601
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL3JpY2h0ZXh0ZWRpdG9yL2luZGV4LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUVULGlCQUFpQixFQUNqQixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLHFCQUFxQixHQUN0QixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFLTCx1QkFBdUIsR0FFeEIsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsZUFBZSxHQUVoQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMzQyxNQUFNLE9BQU8sdUJBQXVCOzs7O0lBa0lsQyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjs7UUE5R2pDLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxXQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsV0FBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLGNBQWM7O1FBRXBDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFHdEMs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SUFDN0MsMENBQ3lDOztJQUN6QywyQ0FDMEM7O0lBQzFDLDJDQUEyRTs7SUFDM0Usa0RBQ3lDOztJQUN6QyxtREFDMEM7O0lBQzFDLDZDQUNvQzs7SUFDcEMsZ0RBQ3VDOztJQUd2Qyw4Q0FBMEI7O0lBQzFCLHdDQUFvQjs7SUFDcEIseUNBQXNCOztJQUN0QixpREFBK0I7O0lBQy9CLHlDQUErQjs7SUFFL0IsK0NBQTRDOztJQUM1Qyx5Q0FBc0M7O0lBR3RDLHlDQUFvQjs7SUFDcEIsOENBQXNCOztJQUN0QiwrQ0FBdUI7O0lBQ3ZCLDhDQUFtQjs7SUFDbkIsMENBQWdCOztJQUNoQixzREFJRTs7SUFDRixnREFBbUI7O0lBQ25CLHVDQUFVOztJQUNWLGdEQUFjOztJQUNkLCtDQUF3Qjs7SUFDeEIsNENBT0U7O0lBQ0YsbURBSUU7O0lBQ0YsK0NBZ0JFOztJQUNGLDhDQUF3Qjs7SUFDeEIsbURBQXlDOztJQUN6QywyQ0FBcUI7O0lBQ3JCLG9EQUFrQzs7SUFDbEMsNENBQThCOztJQUM5QixnREFBMEI7O0lBQzFCLDJDQUF5Qjs7SUFDekIsd0NBK0NFOzs7OztJQUVVLHNDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQXV0b0NvbXBsZXRlQ29tcG9uZW50LFxyXG4gIERyb3BEb3duTGlzdENvbXBvbmVudCxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZHJvcGRvd25zXCI7XHJcbmltcG9ydCB7XHJcbiAgVG9vbGJhclNlcnZpY2UsXHJcbiAgTGlua1NlcnZpY2UsXHJcbiAgSW1hZ2VTZXJ2aWNlLFxyXG4gIEh0bWxFZGl0b3JTZXJ2aWNlLFxyXG4gIFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50LFxyXG4gIFRvb2xiYXJTZXR0aW5nc01vZGVsLFxyXG59IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1yaWNodGV4dGVkaXRvclwiO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkNvbXBvbmVudCxcclxuICBDaGlwTGlzdENvbXBvbmVudCxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItYnV0dG9uc1wiO1xyXG5pbXBvcnQgeyBFbWl0VHlwZSB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYmFzZVwiO1xyXG5pbXBvcnQgeyBEcm9wRG93bkJ1dHRvbiB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1zcGxpdGJ1dHRvbnNcIjtcclxuaW1wb3J0IHsgRGlhbG9nQ29tcG9uZW50IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBvcHVwc1wiO1xyXG4vLyBzZXJ2aWNlXHJcbi8vIGltcG9ydCB7IFBiRnVuU2VydmljZSB9IGZyb20gXCJAYXBwL3NlcnZpY2VzL3BiLWZ1bi5zZXJ2aWNlXCI7XHJcbi8vIGltcG9ydCB7IFNoYXJlZFN5bmNmdXNpb25Nb2R1bGUgfSBmcm9tIFwiQGFwcC9tb2R1bGUvc3luY2Z1c2lvbk1vZHVsZVwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IE9wZW5BaU1vZGVsUlRFIH0gZnJvbSBcIi4vb3BlbmFwaVwiO1xyXG5pbXBvcnQgeyBsaW5lSGVpZ2h0X2l0ZW1zIH0gZnJvbSBcIi4vZGF0YS1jb25maWdcIjtcclxuaW1wb3J0IHsgZm9udEZhbWlseSB9IGZyb20gXCIuL2RhdGEtY29uZmlnXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1yaWNodGV4dC1lZGl0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIC8vIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgLy8gaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSaWNodGV4dGVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcnRlT2JqOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicXVlcnlDYXRlZ29yeVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcXVlcnlDYXRlZ29yeSE6IERyb3BEb3duTGlzdENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwibGVmdFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgbGVmdFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyaWdodFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmlnaHRSdGUhOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiQUlkaWFsb2dcIiwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIEFJZGlhbG9nITogRGlhbG9nQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJzZW50aW1lbnRCdXR0b25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHVibGljIHNlbnRpbWVudEJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVnZW5lcmF0ZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVnZW5lcmF0ZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiY29weUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgY29weUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVwbGFjZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVwbGFjZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICAvLyBAVmlld0NoaWxkKFwiY2hpcExpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBjaGlwTGlzdCE6IENoaXBMaXN0Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGhlaWdodCA9IDE1MDtcclxuICBASW5wdXQoKSBhdXRvU2F2ZU9uSWRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgdGFyZ2V0ID0gXCIjY29udGFpbmVyXCI7IC8vIGRpYWxvZyDlvLnnqpfniLbnuqdcclxuXHJcbiAgQE91dHB1dCgpIHRvb2xiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZhbWlseSA9IGZvbnRGYW1pbHk7XHJcbiAgZGlhbG9nV2lkdGggPSBcIjgwMHB4XCI7XHJcbiAgZGlhbG9nSGVpZ2h0ID0gXCI2NDJweFwiO1xyXG4gIHNob3dab29tQnRuID0gdHJ1ZTtcclxuICBzaG93TXNnID0gZmFsc2U7XHJcbiAgaW5zZXJ0SW1hZ2VTZXR0aW5ncyA9IHtcclxuICAgIHNhdmVGb3JtYXQ6IFwiQmxvYlwiLFxyXG4gICAgYWxsb3dlZFR5cGVzOiBbXCIuc3ZnXCIsIFwiLnBuZ1wiXSxcclxuICAgIGRpc3BsYXk6IFwibm9uZVwiLFxyXG4gIH07XHJcbiAgZWRpdG9yTWFuYWdlcjogYW55O1xyXG4gIHNpemUgPSBcIlwiO1xyXG4gIHNlbGVjdGVkUXVlcnk7XHJcbiAgcHVibGljIGRyb3BWYWxJbmRleCA9IDA7XHJcbiAgcHVibGljIHF1ZXJ5TGlzdDogeyBpZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdID0gW1xyXG4gICAgeyBpZDogXCJSZXBocmFzZVwiLCB0ZXh0OiBcIlJlcGhyYXNlXCIgfSxcclxuICAgIHsgaWQ6IFwiR3JhbW1hclwiLCB0ZXh0OiBcIkNvcnJlY3QgR3JhbW1hclwiIH0sXHJcbiAgICB7IGlkOiBcIlN1bW1hcml6ZVwiLCB0ZXh0OiBcIlN1bW1hcml6ZVwiIH0sXHJcbiAgICB7IGlkOiBcIkVsYWJvcmF0ZVwiLCB0ZXh0OiBcIkVsYWJvcmF0ZVwiIH0sXHJcbiAgICB7IGlkOiBcIlRyYW5zbGF0ZVwiLCB0ZXh0OiBcIlRyYW5zbGF0ZVwiIH0sXHJcbiAgICB7IGlkOiBcIlNlbnRpbWVudEFuYWx5c2lzXCIsIHRleHQ6IFwiU2VudGltZW50IEFuYWx5c2lzXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyByZXBocmFzZVR5bGVMaXN0ID0gW1xyXG4gICAgeyB0ZXh0OiBcIlN0YW5kYXJkXCIsIGlkOiBcIlN0YW5kYXJkXCIgfSxcclxuICAgIHsgdGV4dDogXCJGbHVlbnRcIiwgaWQ6IFwiRmx1ZW50XCIgfSxcclxuICAgIHsgdGV4dDogXCJQcm9mZXNzaW9uYWxcIiwgaWQ6IFwiUHJvZmVzc2lvbmFsXCIgfSxcclxuICBdO1xyXG4gIHB1YmxpYyBsYW5ndWFnZUxpc3Q6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtcclxuICAgIHsgaWQ6IFwiRU5cIiwgdGV4dDogXCJFbmdsaXNoXCIgfSxcclxuICAgIHsgaWQ6IFwiWkhcIiwgdGV4dDogXCJDaGluZXNlIChTaW1wbGlmaWVkKVwiIH0sXHJcbiAgICB7IGlkOiBcIkVTXCIsIHRleHQ6IFwiU3BhbmlzaFwiIH0sXHJcbiAgICB7IGlkOiBcIlpIVFwiLCB0ZXh0OiBcIkNoaW5lc2UgKFRyYWRpdGlvbmFsKVwiIH0sXHJcbiAgICB7IGlkOiBcIkhJXCIsIHRleHQ6IFwiSGluZGlcIiB9LFxyXG4gICAgeyBpZDogXCJBUlwiLCB0ZXh0OiBcIkFyYWJpY1wiIH0sXHJcbiAgICB7IGlkOiBcIkJOXCIsIHRleHQ6IFwiQmVuZ2FsaVwiIH0sXHJcbiAgICB7IGlkOiBcIlBUXCIsIHRleHQ6IFwiUG9ydHVndWVzZVwiIH0sXHJcbiAgICB7IGlkOiBcIlJVXCIsIHRleHQ6IFwiUnVzc2lhblwiIH0sXHJcbiAgICB7IGlkOiBcIkpBXCIsIHRleHQ6IFwiSmFwYW5lc2VcIiB9LFxyXG4gICAgeyBpZDogXCJERVwiLCB0ZXh0OiBcIkdlcm1hblwiIH0sXHJcbiAgICB7IGlkOiBcIktPXCIsIHRleHQ6IFwiS29yZWFuXCIgfSxcclxuICAgIHsgaWQ6IFwiRlJcIiwgdGV4dDogXCJGcmVuY2hcIiB9LFxyXG4gICAgeyBpZDogXCJJVFwiLCB0ZXh0OiBcIkl0YWxpYW5cIiB9LFxyXG4gICAgeyBpZDogXCJUUlwiLCB0ZXh0OiBcIlR1cmtpc2hcIiB9LFxyXG4gIF07XHJcbiAgcHVibGljIHByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICBwdWJsaWMgaXNTZW50aW1lbnRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzdWJRdWVyeSA9IFwiXCI7XHJcbiAgcHVibGljIHRyYW5zbGF0ZWxhbmd1YWdlITogc3RyaW5nO1xyXG4gIHB1YmxpYyBjaGlwVmFsdWUgPSBcIlN0YW5kYXJkXCI7XHJcbiAgcHVibGljIGFwaVJlc3VsdERhdGE6IGFueTtcclxuICBwdWJsaWMgQUlSZXN1bHQhOiBzdHJpbmc7XHJcbiAgdG9vbHM6IFRvb2xiYXJTZXR0aW5nc01vZGVsID0ge1xyXG4gICAgZW5hYmxlRmxvYXRpbmc6IGZhbHNlLFxyXG4gICAgaXRlbXM6IFtcclxuICAgICAge1xyXG4gICAgICAgIHRvb2x0aXBUZXh0OiBcIkFJIEFzc2lzdFwiLFxyXG4gICAgICAgIHRlbXBsYXRlOlxyXG4gICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXCIgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+PGRpdiBjbGFzcz1cImUtcnRlLWRyb3Bkb3duLWJ0bi10ZXh0XCI+QUkgQXNzaXN0PC9kaXY+PC9idXR0b24+JyxcclxuICAgICAgfSxcclxuICAgICAgXCJCb2xkXCIsXHJcbiAgICAgIFwiSXRhbGljXCIsXHJcbiAgICAgIFwiVW5kZXJsaW5lXCIsXHJcbiAgICAgIFwiU3RyaWtlVGhyb3VnaFwiLFxyXG4gICAgICBcIkZvbnROYW1lXCIsXHJcbiAgICAgIFwiRm9udFNpemVcIixcclxuICAgICAgXCJGb250Q29sb3JcIixcclxuICAgICAgXCJCYWNrZ3JvdW5kQ29sb3JcIixcclxuICAgICAgXCJMb3dlckNhc2VcIixcclxuICAgICAgXCJVcHBlckNhc2VcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiQ3JlYXRlVGFibGVcIixcclxuICAgICAgXCJGb3JtYXRzXCIsXHJcbiAgICAgIFwiQWxpZ25tZW50c1wiLFxyXG4gICAgICB7XHJcbiAgICAgICAgdG9vbHRpcFRleHQ6IFwiTGluZSBIZWlnaHRcIixcclxuICAgICAgICB0ZW1wbGF0ZTpcclxuICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImxpbmVoZWlnaHRfdGJhclwiICBzdHlsZT1cIndpZHRoOjEwMCVcIj48L2J1dHRvbj4nLFxyXG4gICAgICB9LFxyXG4gICAgICBcIk9yZGVyZWRMaXN0XCIsXHJcbiAgICAgIFwiVW5vcmRlcmVkTGlzdFwiLFxyXG4gICAgICBcIk91dGRlbnRcIixcclxuICAgICAgXCJJbmRlbnRcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiQ3JlYXRlTGlua1wiLFxyXG4gICAgICB7XHJcbiAgICAgICAgdG9vbHRpcFRleHQ6IFwiXCIsXHJcbiAgICAgICAgdGVtcGxhdGU6XHJcbiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImUtdGJhci1idG4gZS1idG5cIiB0YWJpbmRleD1cIi0xXCIgaWQ9XCJjdXN0b21fdGJhclwiICBzdHlsZT1cIndpZHRoOjEwMCVcIj4nICtcclxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiZS10YmFyLWJ0bi10ZXh0XCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwO1wiPjxpbWcgc3JjPVwiL2Fzc2V0cy9pbWcvZmlsZS1pY29uLnN2Z1wiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO3RvcDogLTJweDtcIi8+PGRpdiBjbGFzcz1cInVwbG9hZEFjdGlvbnNcIj48ZGl2IGlkPVwidXBsb2FkRnJvbVVzZXJcIj5Db21wdXRlciBGaWxlPC9kaXY+PGRpdiBpZD1cInJlbGF0aW9uRG9tXCI+VGlja2V0IEF0dGFjaG1lbnQ8L2Rpdj48L2Rpdj48L2Rpdj48L2J1dHRvbj4nLFxyXG4gICAgICB9LFxyXG4gICAgICBcInxcIixcclxuICAgICAgXCJGb3JtYXRQYWludGVyXCIsXHJcbiAgICAgIFwiQ2xlYXJGb3JtYXRcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiVW5kb1wiLFxyXG4gICAgICBcIlJlZG9cIixcclxuICAgICAgLy8nU291cmNlQ29kZScsXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoYXJncykge1xyXG4gICAgY29uc3QgdGFibGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInRhYmxlLmUtcnRlLXRhYmxlXCIpO1xyXG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGh0bWxUYWJsZSA9IHRhYmxlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAgIGh0bWxUYWJsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjEwcHhcIjtcclxuICAgICAgaHRtbFRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gXCJjb2xsYXBzZVwiO1xyXG4gICAgICBodG1sVGFibGUuc3R5bGUuZW1wdHlDZWxscyA9IFwic2hvd1wiO1xyXG4gICAgICBjb25zdCB0ZEVsZW1lbnRzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbChcInRkXCIpO1xyXG4gICAgICB0ZEVsZW1lbnRzLmZvckVhY2goKHRkKSA9PiB7XHJcbiAgICAgICAgdGQuc3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgI2FkYjViZFwiO1xyXG4gICAgICAgIHRkLnN0eWxlLmhlaWdodCA9IFwiMjBweFwiO1xyXG4gICAgICAgIHRkLnN0eWxlLm1pbldpZHRoID0gXCIyMHB4XCI7XHJcbiAgICAgICAgdGQuc3R5bGUucGFkZGluZyA9IFwiMnB4IDVweFwiO1xyXG4gICAgICAgIHRkLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIC8vYmluZCB0aGUgYSBjbGljayBldmVudFxyXG4gICAgLy8gbGV0IGVkaXRvckNvbnRlbnQgPSB0aGlzLnJ0ZU9iai5jb250ZW50TW9kdWxlLmdldEVkaXRQYW5lbCgpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgLy8gZWRpdG9yQ29udGVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuT25DbGlja2VkLmJpbmQodGhpcykpO1xyXG4gICAgLy9hZGQgdGhlIGxpbmUgaGVpZ2h0XHJcbiAgICB0aGlzLmVkaXRvck1hbmFnZXIgPSB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlcjtcclxuICAgIGxldCBzcGxpdEJ1dHRvbiA9IG5ldyBEcm9wRG93bkJ1dHRvbih7XHJcbiAgICAgIGl0ZW1zOiBsaW5lSGVpZ2h0X2l0ZW1zLFxyXG4gICAgICBpY29uQ3NzOiBcImUtaWNvbnMgZS1saW5lLXNwYWNpbmdcIixcclxuICAgICAgc2VsZWN0OiB0aGlzLm9uU2VsZWN0LmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuICAgIHNwbGl0QnV0dG9uLmFwcGVuZFRvKFwiI2xpbmVoZWlnaHRfdGJhclwiKTtcclxuICAgIC8vIGFpIGFzc2lzdFxyXG4gICAgbGV0IGFpYXNzaXN0YW50QnV0dG9uID0gbmV3IERyb3BEb3duQnV0dG9uKHtcclxuICAgICAgaXRlbXM6IHRoaXMucXVlcnlMaXN0LFxyXG4gICAgICAvLyBpY29uQ3NzOiBcImUtYnRuLWljb24gZS1pY29ucyBlLWFzc2lzdHZpZXctaWNvbiBlLWljb24tbGVmdFwiLFxyXG4gICAgICBzZWxlY3Q6IChhcmdzKSA9PiB0aGlzLmFpUXVlcnlTZWxlY3RlZE1lbnUoYXJncyksXHJcbiAgICB9KTtcclxuICAgIGFpYXNzaXN0YW50QnV0dG9uLmFwcGVuZFRvKFwiI2FpX2Fzc2lzdGFudF9idXR0b25fdGJhclwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWxlY3QoYXJncykge1xyXG4gICAgaWYgKHRoaXMucnRlT2JqLmZvcm1hdHRlci5nZXRVbmRvUmVkb1N0YWNrKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5zYXZlRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGVzOiBOb2RlW10gPSB0aGlzLmVkaXRvck1hbmFnZXIuZG9tTm9kZS5ibG9ja05vZGVzKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBub2Rlcy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgKG5vZGVzW2ldIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5saW5lSGVpZ2h0ID0gYXJncy5pdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuc2F2ZURhdGEoKTtcclxuICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5lbmFibGVVbmRvKHRoaXMucnRlT2JqKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWlRdWVyeVNlbGVjdGVkTWVudShhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9ndWVPcGVuKGFyZ3MuaXRlbS50ZXh0KTtcclxuICB9XHJcblxyXG4gIGRpYWxvZ3VlT3BlbihzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHZhciBzZWxlY3Rpb25UZXh0ID0gdGhpcy5ydGVPYmouZ2V0U2VsZWN0ZWRIdG1sKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBzZWxlY3RlZFF1ZXJ5O1xyXG4gICAgaWYgKHNlbGVjdGlvblRleHQpIHtcclxuICAgICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnNhdmUoXHJcbiAgICAgICAgcmFuZ2UsXHJcbiAgICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZHJvcFZhbEluZGV4ID0gdGhpcy5xdWVyeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgIChxKSA9PiBxLnRleHQudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRRdWVyeS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucXVlcnlDYXRlZ29yeS5pbmRleCA9IHRoaXMuZHJvcFZhbEluZGV4O1xyXG4gICAgICB0aGlzLmxlZnRSdGUudmFsdWUgPSB0aGlzLnByb21wdFF1ZXJ5ID0gc2VsZWN0aW9uVGV4dDtcclxuICAgICAgdGhpcy5sZWZ0UnRlLnJlZnJlc2hVSSgpO1xyXG4gICAgICB0aGlzLkFJZGlhbG9nLnNob3coKTtcclxuICAgICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd01zZyA9IHRydWU7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd01zZyA9IGZhbHNlO1xyXG4gICAgICB9LCAzMDAwKTtcclxuICAgICAgY29uc29sZS5sb2coXCJQbGVhc2Ugc2VsZWN0IHRoZSBjb250ZW50IHRvIHBlcmZvcm0gdGhlIEFJIG9wZXJhdGlvbi5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTZW50aW1lbnRDaGVjayA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChzZWxlY3RlZFF1ZXJ5KSB7XHJcbiAgICAgIGNhc2UgXCJTdW1tYXJpemVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJTdW1tYXJpemUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHNob3J0bHkuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJFbGFib3JhdGVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJFbGFib3JhdGUgb24gdGhlIHVwY29taW5nIHNlbnRlbmNlLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUmVwaHJhc2VcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gdGhpcy5jaGlwVmFsdWUgKyBcIiByZXBocmFzZSB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJDb3JyZWN0IEdyYW1tYXJcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJDb3JyZWN0IHRoZSBncmFtbWFyIG9mIHRoZSB1cGNvbWluZyBzZW50ZW5jZS5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlRyYW5zbGF0ZVwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgXCJUcmFuc2xhdGUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHRvIFwiICsgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSArIFwiLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU2VudGltZW50IEFuYWx5c2lzXCI6XHJcbiAgICAgICAgdGhpcy5pc1NlbnRpbWVudENoZWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID1cclxuICAgICAgICAgICdBbmFseXplIHRoZSBzZW50aW1lbnQgYW5kIGdyYW1tYXIgb2YgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGFuZCBwcm92aWRlIHRoZSBleHByZXNzaW9uIHNjb3JlIHdpdGggYW4gZW1vamkgZm9sbG93ZWQgYnkgdGhlIHNlbnRpbWVudCBpbiB0aGUgZm9ybWF0OiBcIvCfmIogTmV1dHJhbFwiLiBcXG5cXG5OT1RFOiBBdm9pZCBhbnkgYWRkaXRpb25hbCB0ZXh0IG9yIGV4cGxhbmF0aW9uOic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFJU3VnZXNzdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5wcm9tcHRRdWVyeSkge1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgXCJcIjtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnJlZ2VuZXJhdGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXBsYWNlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEgPSB0aGlzLmdldFJlc3BvbnNlRnJvbU9wZW5BSShcclxuICAgICAgICAgIHRoaXMuc3ViUXVlcnksXHJcbiAgICAgICAgICB0aGlzLnByb21wdFF1ZXJ5XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEudGhlbigocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuQUlSZXN1bHQgPSB0aGlzLmlzU2VudGltZW50Q2hlY2sgPyB0aGlzLnByb21wdFF1ZXJ5IDogcmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5zZW50aW1lbnRCdXR0b24uY29udGVudCA9IHJlc3VsdFxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAuaW5jbHVkZXMoXCJwb3NpdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YiiBQb3NpdGl2ZVwiXHJcbiAgICAgICAgICAgIDogcmVzdWx0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJuZWdhdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YniBOZWdhdGl2ZVwiXHJcbiAgICAgICAgICAgIDogXCLwn5iQIE5ldXRyYWxcIjtcclxuICAgICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICF0aGlzLmlzU2VudGltZW50Q2hlY2tcclxuICAgICAgICAgICAgPyBcIm5vbmVcIlxyXG4gICAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gdGhpcy5BSVJlc3VsdDtcclxuICAgICAgICAgIHZhciBub1Jlc3VsdHNGb3VuZCA9ICEodGhpcy5BSVJlc3VsdCB8fCB0aGlzLnByb21wdFF1ZXJ5KTtcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuby1yZXN1bHRzLWZvdW5kXCIpIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICApLnN0eWxlLmRpc3BsYXkgPSBub1Jlc3VsdHNGb3VuZCA/IFwiXCIgOiBcIm5vbmVcIjtcclxuICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgICBcIm5vbmVcIjtcclxuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQgPyBcIm5vbmVcIiA6IFwiXCI7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgbm9SZXN1bHRzRm91bmQsXHJcbiAgICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gdGhpcy50b2FzdE9iai5zaG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRSZXNwb25zZUZyb21PcGVuQUkoXHJcbiAgICBzdWJRdWVyeTogc3RyaW5nLFxyXG4gICAgcHJvbXB0UXVlcnk6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgT3BlbkFpTW9kZWxSVEUoc3ViUXVlcnksIHByb21wdFF1ZXJ5KTtcclxuICAgIHJldHVybiBjb250ZW50ID8gKGNvbnRlbnQgYXMgc3RyaW5nKSA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBkaWFsb2dTaG93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWdlbmVyYXRlQnV0dG9uIS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvcHlCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgdGhpcy5jb3B5VGV4dFRvQ2xpcGJvYXJkKHRoaXMuQUlSZXN1bHQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlcGxhY2VCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnJlc3RvcmUocmFuZ2UpO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5leGVjdXRlQ29tbWFuZChcImluc2VydEhUTUxcIiwgdGhpcy5BSVJlc3VsdCwge1xyXG4gICAgICAgIHVuZG86IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgICB9KTtcclxuICAgICh0aGlzLkFJZGlhbG9nIGFzIERpYWxvZ0NvbXBvbmVudCkuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5BSWRpYWxvZy5oaWRlKCk7XHJcbiAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubGVmdFJ0ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLnByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuY2hpcFZhbHVlID0gXCJTdGFuZGFyZFwiO1xyXG4gICAgdGhpcy5BSVJlc3VsdCA9IFwiXCI7XHJcbiAgICB0aGlzLmRyb3BWYWxJbmRleCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBcIlJlcGhyYXNlXCI7XHJcbiAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5jb250ZW50ID0gXCLwn5iKIE5ldXRyYWxcIjtcclxuICB9XHJcblxyXG4gIGNvcHlUZXh0VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xyXG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkXHJcbiAgICAgICAgLndyaXRlVGV4dCh0ZXh0KVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIHN1Y2Nlc3NmdWxseSFcIik7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRmFsbGJhY2sgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhlIENsaXBib2FyZCBBUElcclxuICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XHJcbiAgICAgIHRleHRhcmVhLnZhbHVlID0gdGV4dDtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7XHJcbiAgICAgIHRleHRhcmVhLnNlbGVjdCgpO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRleHQgY29waWVkIHRvIGNsaXBib2FyZCB1c2luZyBleGVjQ29tbWFuZFwiKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHQ6IFwiLCBlcnIpO1xyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk92ZXJsYXlDbGljaygpOiB2b2lkIHtcclxuICAgIGxldCBhY3RpdmVFbGU6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRoaXMuQUlkaWFsb2cuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5jaGFyX2Jsb2NrLmUtYWN0aXZlXCJcclxuICAgICk7XHJcbiAgICBpZiAoYWN0aXZlRWxlKSB7XHJcbiAgICAgIGFjdGl2ZUVsZS5jbGFzc0xpc3QucmVtb3ZlKFwiZS1hY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvblF1ZXJ5U2VsZWN0KGFyZ3MpIHtcclxuICAgIC8vIHRoaXMuY2hpcExpc3Quc2VsZWN0ZWRDaGlwcyA9IDA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZWxhbmd1YWdlID0gXCJFTlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gYXJncy5pdGVtRGF0YS50ZXh0O1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShhcmdzLml0ZW1EYXRhLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgb25MYW5ndWFnZVNlbGVjdChhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlbGFuZ3VhZ2UgPSBhcmdzLml0ZW1EYXRhLmlkO1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShcIlRyYW5zbGF0ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hpcENsaWNrKGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlwVmFsdWUgPSBhcmdzLml0ZW1EYXRhLnRleHQ7XHJcbiAgICAvLyDkuovku7bkvJrop6blj5HkuKTmrKEg5b+F6aG75Yik5patYXJncy50ZXh05piv5ZCm5pyJ5YC8XHJcbiAgICBpZiAoYXJncy5pdGVtRGF0YS50ZXh0KSB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKFwiUmVwaHJhc2VcIik7XHJcbiAgfVxyXG5cclxuICBfdG9vbGJhckNsaWNrKGFyZ3MpIHtcclxuICAgIHRoaXMudG9vbGJhckNsaWNrLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBoaWRlVG9hc3QoKSB7XHJcbiAgICB0aGlzLnNob3dNc2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uWm9vbSgpIHtcclxuICAgIGlmICh0aGlzLnNpemUgPT09IFwibGFyZ2VzdFwiKSB7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IFwiXCI7IC8vIOaBouWkjeWIsOWOn+Wni+Wkp+Wwj1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaXplID0gXCJsYXJnZXN0XCI7IC8vIOiuvue9ruS4uuacgOWkp+WMllxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vcmFpc2UtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL3JpY2h0ZXh0ZWRpdG9yL2luZGV4LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPakQsTUFBTSxPQUFPLHVCQUF1QjtJQUxwQztRQU1XLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxhQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ3RCLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFDYixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUN0QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHdCQUFtQixHQUFHO1lBQzdCLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7WUFDOUIsT0FBTyxFQUFFLE1BQU07U0FDaEIsQ0FBQztRQUVRLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0IsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0IsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTlDLFdBQU0sR0FBRyxVQUFVLENBQUM7UUFDcEIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNo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dkIsQ0FBQzs7O1lBaktGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixpN0JBQXFDOzthQUV0Qzs7O29CQUVFLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSztrQ0FDTCxLQUFLOzJCQU1MLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNOzBCQUNOLE1BQU07b0JBQ04sTUFBTTtvQkFDTixNQUFNO21CQUNOLE1BQU07NkJBQ04sTUFBTTs7OztJQWxCUCx3Q0FBb0I7O0lBQ3BCLDJDQUErQjs7SUFDL0IseUNBQXNCOztJQUN0QixpREFBK0I7O0lBQy9CLDJDQUEwQjs7SUFDMUIsc0RBSUU7O0lBRUYsK0NBQTRDOztJQUM1Qyx5Q0FBc0M7O0lBQ3RDLDBDQUF1Qzs7SUFDdkMsOENBQTJDOztJQUMzQyx3Q0FBcUM7O0lBQ3JDLHdDQUFxQzs7SUFDckMsdUNBQW9DOztJQUNwQyxpREFBOEM7O0lBRTlDLHlDQUFvQjs7SUFDcEIsMkNBQWdCOztJQUNoQix3Q0E4QkU7Ozs7O0lBRUYsdURBY0U7O0lBQ0YsbURBUUU7O0lBQ0YsbURBNkJFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIFRvb2xiYXJTZXR0aW5nc01vZGVsLFxyXG4gIFF1aWNrVG9vbGJhclNldHRpbmdzTW9kZWwsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXJpY2h0ZXh0ZWRpdG9yXCI7XHJcbmltcG9ydCB7IGZvbnRGYW1pbHksIHNpemUgfSBmcm9tIFwiLi9kYXRhLWNvbmZpZ1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwicnMtcmljaHRleHQtZWRpdG9yXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9pbmRleC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9pbmRleC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJpY2h0ZXh0ZWRpdG9yQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XHJcbiAgQElucHV0KCkgZWRpdG9ySWQgPSBcImVkaXRvcklkXCI7XHJcbiAgQElucHV0KCkgaGVpZ2h0ID0gMTUwO1xyXG4gIEBJbnB1dCgpIGF1dG9TYXZlT25JZGxlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGluc2VydEltYWdlU2V0dGluZ3MgPSB7XHJcbiAgICBzYXZlRm9ybWF0OiBcIkJsb2JcIixcclxuICAgIGFsbG93ZWRUeXBlczogW1wiLnN2Z1wiLCBcIi5wbmdcIl0sXHJcbiAgICBkaXNwbGF5OiBcIm5vbmVcIixcclxuICB9O1xyXG5cclxuICBAT3V0cHV0KCkgdG9vbGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkJlZ2luID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkNvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBmYW1pbHkgPSBmb250RmFtaWx5O1xyXG4gIGZvbnRTaXplID0gc2l6ZTtcclxuICB0b29sczogVG9vbGJhclNldHRpbmdzTW9kZWwgPSB7XHJcbiAgICBlbmFibGVGbG9hdGluZzogZmFsc2UsXHJcbiAgICBpdGVtczogW1xyXG4gICAgICBcIkJvbGRcIixcclxuICAgICAgXCJJdGFsaWNcIixcclxuICAgICAgXCJVbmRlcmxpbmVcIixcclxuICAgICAgXCJTdHJpa2VUaHJvdWdoXCIsXHJcbiAgICAgIFwiRm9udE5hbWVcIixcclxuICAgICAgXCJGb250U2l6ZVwiLFxyXG4gICAgICBcIkZvbnRDb2xvclwiLFxyXG4gICAgICBcIkJhY2tncm91bmRDb2xvclwiLFxyXG4gICAgICBcIkxvd2VyQ2FzZVwiLFxyXG4gICAgICBcIlVwcGVyQ2FzZVwiLFxyXG4gICAgICBcInxcIixcclxuICAgICAgXCJDcmVhdGVUYWJsZVwiLFxyXG4gICAgICBcIkZvcm1hdHNcIixcclxuICAgICAgXCJBbGlnbm1lbnRzXCIsXHJcbiAgICAgIFwiQnVsbGV0Rm9ybWF0TGlzdFwiLFxyXG4gICAgICBcIk51bWJlckZvcm1hdExpc3RcIixcclxuICAgICAgXCJPdXRkZW50XCIsXHJcbiAgICAgIFwiSW5kZW50XCIsXHJcbiAgICAgIFwifFwiLFxyXG4gICAgICBcIkNyZWF0ZUxpbmtcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiRm9ybWF0UGFpbnRlclwiLFxyXG4gICAgICBcIkNsZWFyRm9ybWF0XCIsXHJcbiAgICAgIFwifFwiLFxyXG4gICAgICBcIlVuZG9cIixcclxuICAgICAgXCJSZWRvXCIsXHJcbiAgICBdLFxyXG4gIH07XHJcbiAgLyoqIOihqOagvOW/q+aNt+W3peWFt+agj++8muWQqyBUYWJsZUNlbGzvvIjlkIjlubYv5ouG5YiG5Y2V5YWD5qC877yJICovXHJcbiAgcXVpY2tUb29sYmFyU2V0dGluZ3M6IFF1aWNrVG9vbGJhclNldHRpbmdzTW9kZWwgPSB7XHJcbiAgICB0YWJsZTogW1xyXG4gICAgICBcIlRhYmxlaGVhZGVyXCIsXHJcbiAgICAgIFwiVGFibGVSZW1vdmVcIixcclxuICAgICAgXCJ8XCIsXHJcbiAgICAgIFwiVGFibGVSb3dzXCIsXHJcbiAgICAgIFwiVGFibGVDb2x1bW5zXCIsXHJcbiAgICAgIFwiVGFibGVDZWxsXCIsXHJcbiAgICAgIFwifFwiLFxyXG4gICAgICBcIlN0eWxlc1wiLFxyXG4gICAgICBcIkJhY2tncm91bmRDb2xvclwiLFxyXG4gICAgICBcIkFsaWdubWVudHNcIixcclxuICAgICAgXCJUYWJsZUNlbGxWZXJ0aWNhbEFsaWduXCIsXHJcbiAgICBdLFxyXG4gIH07XHJcbiAgcHVibGljIGJ1bGxldEZvcm1hdExpc3QgPSB7XHJcbiAgICB0eXBlczogW1xyXG4gICAgICB7IHRleHQ6IFwiTm9uZVwiLCB2YWx1ZTogXCJub25lXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXj1wiLCB2YWx1ZTogXCJkaXNjXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXi1wiLCB2YWx1ZTogXCJjaXJjbGVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pagXCIsIHZhbHVlOiBcInNxdWFyZVwiIH0sXHJcbiAgICAgIHsgdGV4dDogXCItXCIsIHZhbHVlOiBcImRhc2hcIiB9LFxyXG4gICAgXSxcclxuICB9O1xyXG4gIHB1YmxpYyBudW1iZXJGb3JtYXRMaXN0ID0ge1xyXG4gICAgdHlwZXM6IFtcclxuICAgICAgeyB0ZXh0OiBcIk5vbmVcIiwgdmFsdWU6IFwibm9uZVwiIH0sXHJcbiAgICAgIHsgdGV4dDogXCIxLCAyLCAzLCDigKZcIiwgdmFsdWU6IFwiZGVjaW1hbFwiIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIs6xLCDOsiwgzrMsIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyR3JlZWtcIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiaSwgaWksIGlpaSwg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwibG93ZXJSb21hblwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJBLCBCLCBDLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJ1cHBlckFscGhhXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcImEsIGIsIGMsIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyQWxwaGFcIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiSSwgSUksIElJSSwg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwidXBwZXJSb21hblwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCIoMSksICgyKSwgKDMpLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJwYXJlbnRoZXNlc1wiLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9O1xyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoYXJncykge1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBfdG9vbGJhckNsaWNrKGFyZ3MpIHtcclxuICAgIHRoaXMudG9vbGJhckNsaWNrLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfYWN0aW9uQmVnaW4oYXJncykge1xyXG4gICAgdGhpcy5hY3Rpb25CZWdpbi5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX2lucHV0KGFyZ3MpIHtcclxuICAgIHRoaXMuaW5wdXQuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25Db21wbGV0ZShhcmdzKSB7XHJcbiAgICBpZiAoYXJncy5yZXF1ZXN0VHlwZSA9PSBcIlVMXCIpIHtcclxuICAgICAgaWYgKGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVUeXBlID09IFwiZGFzaFwiKSB7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZUltYWdlID1cclxuICAgICAgICAgIFwidXJsKCcuLi8uLi8uLi9hc3NldHMvaW1nL2J1bGxldC1kYXNoLnN2ZycpXCI7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPSBcIm5vbmVcIjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChhcmdzLnJlcXVlc3RUeXBlID09IFwiT0xcIikge1xyXG4gICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcclxuICAgICAgICBcImN1c3RvbS1saXN0XCIsXHJcbiAgICAgICAgXCJwYXJlbnRoZXNlc1wiXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9PSBcInBhcmVudGhlc2VzXCIpIHtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0ID0gXCJjdXN0b20tbGlzdFwiO1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwicGFyZW50aGVzZXNcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uQ29tcGxldGUuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9mb2N1cyhhcmdzKSB7XHJcbiAgICB0aGlzLmZvY3VzLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfYmx1cihhcmdzKSB7XHJcbiAgICB0aGlzLmJsdXIuZW1pdChhcmdzKTtcclxuICB9XHJcbn1cclxuIl19