qms-angular 1.1.22 → 1.1.23
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.
- package/bundles/qms-angular.umd.js +482 -302
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/common/models/qms-flat-node.model.js +1 -1
- package/esm2015/lib/common/models/qms-tree-node.model.js +1 -1
- package/esm2015/lib/components/select-access-dialog/model/select-access-config.model.js +3 -6
- package/esm2015/lib/components/select-access-dialog/model/select-access-data.js +1 -2
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +34 -11
- package/esm2015/lib/components/select-department/model/select-department-popup-data.model.js +3 -10
- package/esm2015/lib/components/select-department/select-department.component.js +3 -4
- package/esm2015/lib/components/select-department-tree/enum/mode-department-tree-view.enum.js +6 -0
- package/esm2015/lib/components/select-department-tree/model/select-department-tree.config.js +16 -2
- package/esm2015/lib/components/select-department-tree/public-api.js +2 -1
- package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +106 -77
- package/esm2015/lib/directives/tooltip/tooltip-elipsify.directive.js +1 -2
- package/esm2015/lib/model/en.js +2 -1
- package/esm2015/lib/model/no.js +2 -1
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-url.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +173 -79
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +137 -123
- package/fesm2015/qms-angular.js +462 -297
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/common/models/qms-flat-node.model.d.ts +1 -0
- package/lib/common/models/qms-tree-node.model.d.ts +1 -0
- package/lib/components/select-access-dialog/model/select-access-config.model.d.ts +2 -5
- package/lib/components/select-access-dialog/model/select-access-data.d.ts +0 -1
- package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +2 -1
- package/lib/components/select-department/model/select-department-popup-data.model.d.ts +2 -12
- package/lib/components/select-department/select-department.component.d.ts +0 -1
- package/lib/components/select-department-tree/enum/mode-department-tree-view.enum.d.ts +4 -0
- package/lib/components/select-department-tree/model/select-department-tree.config.d.ts +15 -1
- package/lib/components/select-department-tree/public-api.d.ts +1 -0
- package/lib/components/select-department-tree/select-department-tree.component.d.ts +16 -18
- package/lib/model/en.d.ts +1 -0
- package/lib/model/no.d.ts +1 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-url.model.d.ts +2 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +7 -3
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +8 -6
- package/package.json +1 -1
- package/qms-angular.metadata.json +1 -1
- package/src/lib/components/select-access-dialog/select-access-dialog.component.scss +19 -57
- package/src/lib/components/select-department/select-department.component.scss +12 -6
- package/src/lib/components/select-department-tree/select-department-tree.component.scss +89 -55
@@ -21,13 +21,13 @@ import { QMSCKEditorBaseComponent } from './qms-ckeditor-base.component';
|
|
21
21
|
import { QMSCKEditorGlobalService } from './services/qms-ckeditor-global.service';
|
22
22
|
import { QMSCKEditorAboutComponent } from './components/qms-ckeditor-about/qms-ckeditor-about.component';
|
23
23
|
//import { CKEditor5 } from '@ckeditor/ckeditor5-angular/ckeditor';
|
24
|
-
import { QMSCKEditorBpmnData } from
|
25
|
-
import { DataType } from
|
26
|
-
import { PopupData } from
|
27
|
-
import { RelatedPopupComponent } from
|
28
|
-
import { QMSCKEditorTreeService } from
|
29
|
-
import { QMSCKEditorFlowchartComponent } from
|
30
|
-
import { QmsCkeditorLinkSimpleComponent } from
|
24
|
+
import { QMSCKEditorBpmnData } from "./models/qms-ckeditor-bpmn-data.model";
|
25
|
+
import { DataType } from "../components/related/common/data-type.enum";
|
26
|
+
import { PopupData } from "../components/related/model/popup-data.model";
|
27
|
+
import { RelatedPopupComponent } from "../components/related/popup/related-popup.component";
|
28
|
+
import { QMSCKEditorTreeService } from "./services/qms-ckeditor-tree.service";
|
29
|
+
import { QMSCKEditorFlowchartComponent } from "./components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component";
|
30
|
+
import { QmsCkeditorLinkSimpleComponent } from "./components/qms-ckeditor-link-simple/qms-ckeditor-link-simple.component";
|
31
31
|
export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
32
32
|
/**
|
33
33
|
* Constructor
|
@@ -46,7 +46,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
46
46
|
this.qmsckContentOutput = new EventEmitter();
|
47
47
|
this.ckEditorEventConst = CKEditorEventConst;
|
48
48
|
this.isToolbarItemsIdSet = false;
|
49
|
-
this.ckTagname =
|
49
|
+
this.ckTagname = "div";
|
50
50
|
}
|
51
51
|
onMessage(event) {
|
52
52
|
switch (event.data.eventName) {
|
@@ -57,7 +57,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
57
57
|
this.loadTemplateEventHandling();
|
58
58
|
break;
|
59
59
|
case this.ckEditorEventConst.QMSCK_LINK_PLUGIN_MSG:
|
60
|
-
this.linkEventHandling(event.data.value);
|
60
|
+
this.linkEventHandling(event.data.value, this.qmsckContentFields, this.qmsckIsGetAnchorMoreContent);
|
61
61
|
break;
|
62
62
|
case this.ckEditorEventConst.QMSCK_TOOLTIP_PLUGIN_MSG:
|
63
63
|
this.tooltipEventHandling(event.data.value);
|
@@ -129,23 +129,25 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
129
129
|
}
|
130
130
|
ngAfterViewInit() {
|
131
131
|
if (this.isDisabled) {
|
132
|
-
this.renderer.addClass(this.elRef.nativeElement,
|
132
|
+
this.renderer.addClass(this.elRef.nativeElement, "ck-disabled");
|
133
133
|
}
|
134
134
|
}
|
135
135
|
isEnabledWProofreader() {
|
136
|
-
const pattern = /(wproofreader)/
|
137
|
-
return !!this.qmsckData.wproofreader
|
138
|
-
|
139
|
-
|
140
|
-
|
136
|
+
const pattern = /(wproofreader)/gim;
|
137
|
+
return (!!this.qmsckData.wproofreader &&
|
138
|
+
!!this.qmsckData.wproofreader.srcUrl &&
|
139
|
+
!!this.qmsckPlugin.itemToolbar &&
|
140
|
+
this.qmsckPlugin.itemToolbar.search(pattern) > -1);
|
141
141
|
}
|
142
142
|
addWProofreaderConfig() {
|
143
143
|
const wproofreaderConfig = {
|
144
|
-
wproofreader: Object.assign({}, this.qmsckData.wproofreader)
|
144
|
+
wproofreader: Object.assign({}, this.qmsckData.wproofreader),
|
145
145
|
};
|
146
|
-
if (!this.qmsckData.wproofreader.serviceId ||
|
146
|
+
if (!this.qmsckData.wproofreader.serviceId ||
|
147
|
+
this.qmsckData.wproofreader.serviceId.length == 0) {
|
147
148
|
//Fallback value of serviceId property to demo serviceId
|
148
|
-
this.qmsckData.wproofreader.serviceId =
|
149
|
+
this.qmsckData.wproofreader.serviceId =
|
150
|
+
"1:KpkvQ2-6KNUj-L1W3u2-C9j0K1-Zv2tY1-CfDOx-WfGRg2-qXtci-YyyE34-j09H42-b0aCt3-d9a";
|
149
151
|
}
|
150
152
|
this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, wproofreaderConfig);
|
151
153
|
}
|
@@ -159,68 +161,68 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
159
161
|
const items = this.qmsckData.toggledToolbarItems.split(',');
|
160
162
|
const toggleToolbarConfig = {
|
161
163
|
toggleToolbarConfig: {
|
162
|
-
toolbar: items
|
163
|
-
}
|
164
|
+
toolbar: items,
|
165
|
+
},
|
164
166
|
};
|
165
167
|
this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, toggleToolbarConfig);
|
166
168
|
}
|
167
169
|
isEnabledFullScreenConfig() {
|
168
|
-
const pattern = /(qmsFullscreen)/
|
169
|
-
return !!this.qmsckPlugin.itemToolbar
|
170
|
-
|
171
|
-
|
170
|
+
const pattern = /(qmsFullscreen)/gim;
|
171
|
+
return (!!this.qmsckPlugin.itemToolbar &&
|
172
|
+
!!this.qmsckData.fullScreenClass &&
|
173
|
+
this.qmsckPlugin.itemToolbar.search(pattern) > -1);
|
172
174
|
}
|
173
175
|
addFullScreenConfig() {
|
174
176
|
const fullScreenConfig = {
|
175
177
|
fullScreenConfig: {
|
176
|
-
class: this.qmsckData.fullScreenClass
|
177
|
-
}
|
178
|
+
class: this.qmsckData.fullScreenClass,
|
179
|
+
},
|
178
180
|
};
|
179
181
|
this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, fullScreenConfig);
|
180
182
|
}
|
181
183
|
isEnabledTOCToolbar() {
|
182
|
-
const pattern = /(tableOfContents)/
|
183
|
-
return !!this.qmsckData.tableOfContentHeadings
|
184
|
-
|
185
|
-
|
184
|
+
const pattern = /(tableOfContents)/gim;
|
185
|
+
return (!!this.qmsckData.tableOfContentHeadings &&
|
186
|
+
!!this.qmsckPlugin.itemToolbar &&
|
187
|
+
this.qmsckPlugin.itemToolbar.search(pattern) > -1);
|
186
188
|
}
|
187
189
|
addToggleTOCConfig() {
|
188
|
-
const items = this.qmsckData.tableOfContentHeadings.split(
|
190
|
+
const items = this.qmsckData.tableOfContentHeadings.split(",");
|
189
191
|
const tableOfContents = {
|
190
192
|
tableOfContents: {
|
191
|
-
supportedHeadings: items
|
192
|
-
}
|
193
|
+
supportedHeadings: items,
|
194
|
+
},
|
193
195
|
};
|
194
196
|
this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, tableOfContents);
|
195
197
|
}
|
196
198
|
isEnabledTimestampConfig() {
|
197
|
-
const pattern = /(timestamp)/
|
198
|
-
return !!this.qmsckData.timestampFormat
|
199
|
-
|
200
|
-
|
199
|
+
const pattern = /(timestamp)/gim;
|
200
|
+
return (!!this.qmsckData.timestampFormat &&
|
201
|
+
!!this.qmsckPlugin.itemToolbar &&
|
202
|
+
this.qmsckPlugin.itemToolbar.search(pattern) > -1);
|
201
203
|
}
|
202
204
|
addTimestampConfig() {
|
203
205
|
const timestampConfig = {
|
204
206
|
timestampConfig: {
|
205
|
-
datetimeFormat: this.qmsckData.timestampFormat
|
206
|
-
}
|
207
|
+
datetimeFormat: this.qmsckData.timestampFormat,
|
208
|
+
},
|
207
209
|
};
|
208
210
|
this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, timestampConfig);
|
209
211
|
}
|
210
212
|
isEnabledMathtypeConfig() {
|
211
|
-
const pattern = /(MathType)|(ChemType)/
|
212
|
-
return !!this.qmsckData.mathtypeServiceUrl
|
213
|
-
|
214
|
-
|
213
|
+
const pattern = /(MathType)|(ChemType)/gim;
|
214
|
+
return (!!this.qmsckData.mathtypeServiceUrl &&
|
215
|
+
!!this.qmsckPlugin.itemToolbar &&
|
216
|
+
this.qmsckPlugin.itemToolbar.search(pattern) > -1);
|
215
217
|
}
|
216
218
|
addMathTypeConfig() {
|
217
219
|
const mathTypeConfig = {
|
218
220
|
mathTypeParameters: {
|
219
221
|
serviceProviderProperties: {
|
220
222
|
URI: this.qmsckData.mathtypeServiceUrl,
|
221
|
-
server:
|
222
|
-
}
|
223
|
-
}
|
223
|
+
server: "aspx",
|
224
|
+
},
|
225
|
+
},
|
224
226
|
};
|
225
227
|
this.ckEditor.defaultConfig = Object.assign(this.ckEditor.defaultConfig || {}, mathTypeConfig);
|
226
228
|
}
|
@@ -236,12 +238,14 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
236
238
|
if (!this.required) {
|
237
239
|
return null;
|
238
240
|
}
|
239
|
-
return
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
241
|
+
return this.qmsckContentInput && !this.required
|
242
|
+
? null
|
243
|
+
: {
|
244
|
+
type: {
|
245
|
+
valid: false,
|
246
|
+
actual: c.value,
|
247
|
+
},
|
248
|
+
};
|
245
249
|
}
|
246
250
|
/**
|
247
251
|
* onReady
|
@@ -254,9 +258,14 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
254
258
|
this.initEditor(editor);
|
255
259
|
}
|
256
260
|
initEditor(editor) {
|
257
|
-
const imageUploadTypes = editor.config.get(
|
261
|
+
const imageUploadTypes = editor.config.get("image.upload.types");
|
258
262
|
const maxFileSizeMB = this.qmsckData.maxFileSizeMB;
|
259
|
-
const config = {
|
263
|
+
const config = {
|
264
|
+
apiUrl: this.qmsckData.apiUrl,
|
265
|
+
LANG: this.LANG,
|
266
|
+
imageUploadTypes,
|
267
|
+
maxFileSizeMB,
|
268
|
+
};
|
260
269
|
editor.plugins.get("FileRepository").createUploadAdapter = (loader) => {
|
261
270
|
return new QmsUploadAdapter(loader, config);
|
262
271
|
};
|
@@ -264,9 +273,9 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
264
273
|
.getEditableElement()
|
265
274
|
.parentElement.insertBefore(editor.ui.view.toolbar.element, editor.ui.getEditableElement());
|
266
275
|
// Apped Wordcount to CKeditor
|
267
|
-
editor.plugins.get(
|
276
|
+
editor.plugins.get("WordCount").on("update", (evt, stats) => {
|
268
277
|
// Prints the current content statistics.
|
269
|
-
const wordsBox = document.querySelector(
|
278
|
+
const wordsBox = document.querySelector(".wordcount-content");
|
270
279
|
if (!!wordsBox) {
|
271
280
|
wordsBox.textContent = `${this.LANG.QMSCKEDITOR.WORDS}: ${stats.words} / ${this.LANG.QMSCKEDITOR.CHARACTERS}: ${stats.characters}`;
|
272
281
|
}
|
@@ -282,10 +291,10 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
282
291
|
data.content = this.qmsckContentInput;
|
283
292
|
data.edit = false;
|
284
293
|
const dialogTemplate = this.dialog.open(QMSCKEditorTemplateComponent, {
|
285
|
-
width:
|
286
|
-
height:
|
294
|
+
width: "650px",
|
295
|
+
height: "520px",
|
287
296
|
data,
|
288
|
-
disableClose: true
|
297
|
+
disableClose: true,
|
289
298
|
});
|
290
299
|
dialogTemplate
|
291
300
|
.afterClosed()
|
@@ -301,10 +310,10 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
301
310
|
*/
|
302
311
|
loadTemplateEventHandling() {
|
303
312
|
const dialogTemplate = this.dialog.open(QMSCKEditorLoadTemplateComponent, {
|
304
|
-
width:
|
305
|
-
height:
|
313
|
+
width: "650px",
|
314
|
+
height: "700px",
|
306
315
|
data: this.qmsckContentInput,
|
307
|
-
disableClose: true
|
316
|
+
disableClose: true,
|
308
317
|
});
|
309
318
|
dialogTemplate
|
310
319
|
.afterClosed()
|
@@ -312,7 +321,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
312
321
|
.subscribe((result) => {
|
313
322
|
if (result) {
|
314
323
|
const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_LOAD_TEMPLATE_PLUGIN_RESP, {
|
315
|
-
detail: result
|
324
|
+
detail: result,
|
316
325
|
});
|
317
326
|
window.dispatchEvent(evt);
|
318
327
|
}
|
@@ -321,25 +330,29 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
321
330
|
/**
|
322
331
|
* Anchor - Link - Image mapping
|
323
332
|
*/
|
324
|
-
linkEventHandling(link) {
|
333
|
+
linkEventHandling(link, qmsckContentFields, qmsckIsGetAnchorMoreContent) {
|
325
334
|
let data = new QMSCKEditorLink();
|
326
335
|
data = link;
|
327
336
|
data.editorContent = this.qmsckContentInput;
|
328
337
|
data.module = this.qmsckData.module;
|
329
338
|
data.entityId = this.qmsckData.entityId;
|
339
|
+
if (qmsckContentFields && qmsckIsGetAnchorMoreContent) {
|
340
|
+
data.qmsckContentFields = qmsckContentFields;
|
341
|
+
data.qmsckIsGetAnchorMoreContent = qmsckIsGetAnchorMoreContent;
|
342
|
+
}
|
330
343
|
let dialogTemplate;
|
331
344
|
if (!this.qmsckPlugin.simpleMode) {
|
332
345
|
dialogTemplate = this.dialog.open(QMSCKEditorLinkComponent, {
|
333
|
-
width:
|
334
|
-
height:
|
346
|
+
width: "650px",
|
347
|
+
height: "660px",
|
335
348
|
data,
|
336
|
-
disableClose: true
|
349
|
+
disableClose: true,
|
337
350
|
});
|
338
351
|
}
|
339
352
|
else {
|
340
353
|
dialogTemplate = this.dialog.open(QmsCkeditorLinkSimpleComponent, {
|
341
|
-
width:
|
342
|
-
height:
|
354
|
+
width: "650px",
|
355
|
+
height: "200px",
|
343
356
|
data,
|
344
357
|
disableClose: true,
|
345
358
|
autoFocus: false,
|
@@ -351,7 +364,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
351
364
|
.subscribe((result) => {
|
352
365
|
if (result) {
|
353
366
|
const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_LINK_PLUGIN_RESP, {
|
354
|
-
detail: result
|
367
|
+
detail: result,
|
355
368
|
});
|
356
369
|
window.dispatchEvent(evt);
|
357
370
|
}
|
@@ -366,10 +379,10 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
366
379
|
data.content = value.content;
|
367
380
|
data.ckEditor = this.qmsckPlugin.pluginObject;
|
368
381
|
const dialogTemplate = this.dialog.open(QMSCKEditorTooltipComponent, {
|
369
|
-
width:
|
370
|
-
height:
|
382
|
+
width: "650px",
|
383
|
+
height: "555px",
|
371
384
|
data,
|
372
|
-
disableClose: true
|
385
|
+
disableClose: true,
|
373
386
|
});
|
374
387
|
dialogTemplate
|
375
388
|
.afterClosed()
|
@@ -377,15 +390,15 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
377
390
|
.subscribe((result) => {
|
378
391
|
if (result) {
|
379
392
|
const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_TOOLTIP_PLUGIN_RESP, {
|
380
|
-
detail: result
|
393
|
+
detail: result,
|
381
394
|
});
|
382
395
|
window.dispatchEvent(evt);
|
383
396
|
}
|
384
397
|
});
|
385
398
|
}
|
386
399
|
/**
|
387
|
-
|
388
|
-
|
400
|
+
* ImageMap mapping
|
401
|
+
*/
|
389
402
|
imageMapEventHandling(value) {
|
390
403
|
let data = new QMSCKEditorImageMap();
|
391
404
|
data.name = value.name;
|
@@ -399,7 +412,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
399
412
|
data.linkJavaScriptLinksAllowed = this.qmsckData.linkJavaScriptLinksAllowed;
|
400
413
|
const dialogTemplate = this.dialog.open(QMSCKEditorImageMapComponent, {
|
401
414
|
data,
|
402
|
-
disableClose: true
|
415
|
+
disableClose: true,
|
403
416
|
});
|
404
417
|
dialogTemplate
|
405
418
|
.afterClosed()
|
@@ -407,7 +420,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
407
420
|
.subscribe((result) => {
|
408
421
|
if (result) {
|
409
422
|
const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_IMAGEMAP_PLUGIN_RESP, {
|
410
|
-
detail: result
|
423
|
+
detail: result,
|
411
424
|
});
|
412
425
|
window.dispatchEvent(evt);
|
413
426
|
}
|
@@ -423,12 +436,12 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
423
436
|
data.entityId = this.qmsckData.entityId;
|
424
437
|
data.editorContent = this.qmsckContentInput;
|
425
438
|
const dialogTemplate = this.dialog.open(QMSCKEditorBpmnComponent, {
|
426
|
-
width:
|
427
|
-
maxWidth:
|
428
|
-
height:
|
429
|
-
maxHeight:
|
439
|
+
width: "89vw",
|
440
|
+
maxWidth: "100vw",
|
441
|
+
height: "700px",
|
442
|
+
maxHeight: "100vw",
|
430
443
|
data: data,
|
431
|
-
disableClose: true
|
444
|
+
disableClose: true,
|
432
445
|
});
|
433
446
|
dialogTemplate
|
434
447
|
.afterClosed()
|
@@ -436,7 +449,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
436
449
|
.subscribe((result) => {
|
437
450
|
if (result) {
|
438
451
|
const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_BPMN_PLUGIN_RESP, {
|
439
|
-
detail: result
|
452
|
+
detail: result,
|
440
453
|
});
|
441
454
|
window.dispatchEvent(evt);
|
442
455
|
}
|
@@ -447,15 +460,14 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
447
460
|
*/
|
448
461
|
aboutCKEditorEventHandling(version) {
|
449
462
|
const dialogTemplate = this.dialog.open(QMSCKEditorAboutComponent, {
|
450
|
-
width:
|
463
|
+
width: "500px",
|
451
464
|
data: version,
|
452
|
-
disableClose: true
|
465
|
+
disableClose: true,
|
453
466
|
});
|
454
467
|
dialogTemplate
|
455
468
|
.afterClosed()
|
456
469
|
.pipe(takeUntil(this.ngUnsubcribe))
|
457
|
-
.subscribe((result) => {
|
458
|
-
});
|
470
|
+
.subscribe((result) => { });
|
459
471
|
}
|
460
472
|
/*
|
461
473
|
Toolbar toggle
|
@@ -474,7 +486,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
474
486
|
const toggleAttribute = 'isToggleToolbar';
|
475
487
|
const ckeditorTag = 'ckeditor';
|
476
488
|
if (qmsckeditor) {
|
477
|
-
const isToggleToolbar = qmsckeditor.getAttribute(toggleAttribute) ==
|
489
|
+
const isToggleToolbar = qmsckeditor.getAttribute(toggleAttribute) == "true";
|
478
490
|
if (isToggleToolbar) {
|
479
491
|
this._setToolbarViewMode(true);
|
480
492
|
qmsckeditor.setAttribute(toggleAttribute, 'false');
|
@@ -502,16 +514,16 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
502
514
|
});
|
503
515
|
}
|
504
516
|
/**
|
505
|
-
|
506
|
-
|
517
|
+
* Flowchart
|
518
|
+
*/
|
507
519
|
flowchartEventHandling(id) {
|
508
520
|
const dialogTemplate = this.dialog.open(QMSCKEditorFlowchartComponent, {
|
509
|
-
width:
|
510
|
-
maxWidth:
|
511
|
-
height:
|
512
|
-
maxHeight:
|
521
|
+
width: "89vw",
|
522
|
+
maxWidth: "100vw",
|
523
|
+
height: "725px",
|
524
|
+
maxHeight: "100vw",
|
513
525
|
data: id,
|
514
|
-
disableClose: true
|
526
|
+
disableClose: true,
|
515
527
|
});
|
516
528
|
dialogTemplate
|
517
529
|
.afterClosed()
|
@@ -520,7 +532,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
520
532
|
if (result) {
|
521
533
|
if (result) {
|
522
534
|
const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_FLOWCHART_PLUGIN_RESP, {
|
523
|
-
detail: result
|
535
|
+
detail: result,
|
524
536
|
});
|
525
537
|
window.dispatchEvent(evt);
|
526
538
|
}
|
@@ -538,20 +550,20 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
538
550
|
const videos = response || [];
|
539
551
|
const config = {
|
540
552
|
allowSelectFolder: false,
|
541
|
-
areaOfCurrentProcess:
|
553
|
+
areaOfCurrentProcess: "",
|
542
554
|
showCheckBox: true,
|
543
555
|
allowMultipleCheck: value.allowMultipleFiles,
|
544
556
|
onlyCheckBoxForChild: true,
|
545
557
|
moduleId: DataType.document,
|
546
|
-
openIcon:
|
547
|
-
openIconColor:
|
548
|
-
closeIcon:
|
549
|
-
closeIconColor:
|
550
|
-
itemIcon:
|
551
|
-
itemIconPath:
|
552
|
-
itemIconBase64:
|
558
|
+
openIcon: "folder_open",
|
559
|
+
openIconColor: "#1954A9",
|
560
|
+
closeIcon: "folder_filled",
|
561
|
+
closeIconColor: "#4acaff",
|
562
|
+
itemIcon: "insert_drive_file",
|
563
|
+
itemIconPath: "",
|
564
|
+
itemIconBase64: "",
|
553
565
|
singleSelectedNode: true,
|
554
|
-
expandAll: true
|
566
|
+
expandAll: true,
|
555
567
|
};
|
556
568
|
const data = new PopupData();
|
557
569
|
data.moduleId = 2;
|
@@ -567,33 +579,33 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
567
579
|
statusId: item.statusId,
|
568
580
|
displayId: item.displayId,
|
569
581
|
contentType: item.contentType,
|
570
|
-
url: item.url
|
582
|
+
url: item.url,
|
571
583
|
};
|
572
584
|
});
|
573
585
|
data.treeData2 = [];
|
574
586
|
data.treeConfig1 = config;
|
575
587
|
const dialogRef = this.dialog.open(RelatedPopupComponent, {
|
576
|
-
minWidth:
|
577
|
-
maxWidth:
|
578
|
-
minHeight:
|
588
|
+
minWidth: "450px",
|
589
|
+
maxWidth: "800px",
|
590
|
+
minHeight: "620px",
|
579
591
|
data,
|
580
|
-
panelClass:
|
592
|
+
panelClass: "qmsckeditor-browse-video-popup",
|
581
593
|
});
|
582
594
|
setTimeout(() => {
|
583
|
-
const searchBox = window.document.querySelector(
|
595
|
+
const searchBox = window.document.querySelector(".qmsckeditor-browse-video-popup #qmslib_related_popup_search");
|
584
596
|
if (searchBox) {
|
585
|
-
searchBox.style.display =
|
597
|
+
searchBox.style.display = "none";
|
586
598
|
}
|
587
599
|
}, 100);
|
588
|
-
dialogRef
|
589
|
-
.afterClosed()
|
590
|
-
.subscribe((result) => {
|
600
|
+
dialogRef.afterClosed().subscribe((result) => {
|
591
601
|
if (result) {
|
592
602
|
const ids = result.reduce((result, item) => {
|
593
603
|
result[item.id.toString()] = item.id;
|
594
604
|
return result;
|
595
605
|
}, {});
|
596
|
-
const urls = videos
|
606
|
+
const urls = videos
|
607
|
+
.filter((i) => i.childId && !!ids[i.childId.toString()])
|
608
|
+
.map((i) => i.url);
|
597
609
|
const evt = new CustomEvent(this.ckEditorEventConst.QMSCK_BROWSE_VIDEO_RESP, { detail: { urls: urls } });
|
598
610
|
window.dispatchEvent(evt);
|
599
611
|
}
|
@@ -622,20 +634,20 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
622
634
|
}
|
623
635
|
QMSCKEditorComponent.decorators = [
|
624
636
|
{ type: Component, args: [{
|
625
|
-
selector:
|
637
|
+
selector: "qms-ckeditor",
|
626
638
|
template: "<div class=\"qmsckeditor_container\" [id]=\"editorId\">\r\n <ckeditor class=\"qms-ckeditor\" [tagName]=\"ckTagname\" [(editor)]=\"ckEditor\" [config]=\"ckeditorConfig\"\r\n (ready)=\"onReady($event)\" [(ngModel)]=\"qmsckContentInput\" (change)=\"onChanged($event)\" (blur)=\"onBlur($event)\"\r\n [disabled]=\"isDisabled\">\r\n </ckeditor>\r\n <div class=\"sub-container\">\r\n <div class=\"\">\r\n <span>{{LANG.QMSCKEDITOR.ASSISTIVE_TEXT}}</span>\r\n </div>\r\n <div class=\"wordcount-content\"></div>\r\n </div>\r\n</div>",
|
627
639
|
providers: [
|
628
640
|
QMSCKEditorFullscreenComponent,
|
629
641
|
{
|
630
642
|
provide: NG_VALUE_ACCESSOR,
|
631
643
|
useExisting: forwardRef(() => QMSCKEditorComponent),
|
632
|
-
multi: true
|
644
|
+
multi: true,
|
633
645
|
},
|
634
646
|
{
|
635
647
|
provide: NG_VALIDATORS,
|
636
648
|
useExisting: forwardRef(() => QMSCKEditorComponent),
|
637
|
-
multi: true
|
638
|
-
}
|
649
|
+
multi: true,
|
650
|
+
},
|
639
651
|
],
|
640
652
|
encapsulation: ViewEncapsulation.None,
|
641
653
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
@@ -655,10 +667,12 @@ QMSCKEditorComponent.propDecorators = {
|
|
655
667
|
qmsckData: [{ type: Input }],
|
656
668
|
qmsckPlugin: [{ type: Input }],
|
657
669
|
qmsckContentInput: [{ type: Input }],
|
670
|
+
qmsckContentFields: [{ type: Input }],
|
671
|
+
qmsckIsGetAnchorMoreContent: [{ type: Input }],
|
658
672
|
isDisabled: [{ type: Input, args: ['disabled',] }],
|
659
673
|
required: [{ type: Input, args: ['required',] }],
|
660
674
|
editorId: [{ type: Input }],
|
661
675
|
qmsckContentOutput: [{ type: Output }],
|
662
|
-
onMessage: [{ type: HostListener, args: [
|
676
|
+
onMessage: [{ type: HostListener, args: ["window:message", ["$event"],] }]
|
663
677
|
};
|
664
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxTQUFTLEVBQTJCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9OLE9BQU8sRUFBZSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyx1QkFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUd6RSxPQUFPLGVBQWUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw4RUFBOEUsQ0FB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QUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUFqRFEsU0FBUztZQUVULHVCQUF1QjtZQWtCdkIsd0JBQXdCO1lBT3hCLHNCQUFzQjtZQWpCdEIsOEJBQThCO1lBWjJHLFNBQVM7WUFBL0YsVUFBVTs7O3dCQXFEbkUsS0FBSzswQkFDTCxLQUFLO2dDQUNMLEtBQUs7eUJBQ0wsS0FBSyxTQUFDLFVBQVU7dUJBQ2hCLEtBQUssU0FBQyxVQUFVO3VCQUNoQixLQUFLO2lDQUNMLE1BQU07d0JBY04sWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFtc1VwbG9hZEFkYXB0ZXIsIFFtc1VwbG9hZEFkYXB0ZXJDb25maWcgfSBmcm9tICcuL2NvbW1vbi9jbGFzc2VzL3Ftc1VwbG9hZEFkYXB0ZXInO1xyXG5pbXBvcnQgeyBDS0VkaXRvckV2ZW50Q29uc3QgfSBmcm9tICcuL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudCc7XHJcbmltcG9ydCBDS0VkaXRvckNvbW1vbkZ1bmN0aW9ucyBmcm9tICcuL2NvbW1vbi9mdW5jdGlvbnMvY29tbW9uLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JEYXRhIH0gZnJvbSAnLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JQbHVnaW4gfSBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXBsdWdpbi5tb2RlbCc7XHJcbmltcG9ydCBRTVNDS0VkaXRvckxpbmsgZnJvbSAnLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci11cmwubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWJwbW4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9ySW1hZ2VNYXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWxpbmsvcW1zLWNrZWRpdG9yLWxpbmsuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMb2FkVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItdGVtcGxhdGUvcW1zLWNrZWRpdG9yLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItdG9vbHRpcC9xbXMtY2tlZGl0b3ItdG9vbHRpcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUZW1wbGF0ZSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9vbHRpcCB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci10b29sdGlwLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9xbXMtY2tlZGl0b3ItYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQWJvdXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWFib3V0L3Ftcy1ja2VkaXRvci1hYm91dC5jb21wb25lbnQnO1xyXG4vL2ltcG9ydCB7IENLRWRpdG9yNSB9IGZyb20gJ0Bja2VkaXRvci9ja2VkaXRvcjUtYW5ndWxhci9ja2VkaXRvcic7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkRhdGEgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi9jb21wb25lbnRzL3JlbGF0ZWQvY29tbW9uL2RhdGEtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUG9wdXBEYXRhIH0gZnJvbSAnLi4vY29tcG9uZW50cy9yZWxhdGVkL21vZGVsL3BvcHVwLWRhdGEubW9kZWwnO1xyXG5pbXBvcnQgeyBSZWxhdGVkUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3JlbGF0ZWQvcG9wdXAvcmVsYXRlZC1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRyZWVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdHJlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFtc0NrZWRpdG9yTGlua1NpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUvcW1zLWNrZWRpdG9yLWxpbmstc2ltcGxlLmNvbXBvbmVudCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLWNrZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9xbXMtY2tlZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFFNU0NLRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFFNU0NLRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFFNU0NLRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWYWxpZGF0b3Ige1xyXG4gIEBJbnB1dCgpIHFtc2NrRGF0YTogUU1TQ0tFZGl0b3JEYXRhO1xyXG4gIEBJbnB1dCgpIHFtc2NrUGx1Z2luOiBRTVNDS0VkaXRvclBsdWdpbjtcclxuICBASW5wdXQoKSBxbXNja0NvbnRlbnRJbnB1dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgnZGlzYWJsZWQnKSBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgncmVxdWlyZWQnKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRvcklkID0gJ3Ftc2NrZWRpdG9yJztcclxuICBAT3V0cHV0KCkgcW1zY2tDb250ZW50T3V0cHV0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgTEFORzogYW55O1xyXG4gIGNrRWRpdG9yOiBhbnk7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGNrZWRpdG9yQ29uZmlnOiBhbnk7XHJcbiAgY2tFZGl0b3JFdmVudENvbnN0ID0gQ0tFZGl0b3JFdmVudENvbnN0O1xyXG4gIGNvdW50V29yZDogbnVtYmVyO1xyXG4gIGNvdW50Q2hhcjogbnVtYmVyO1xyXG4gIGVkaXRvckluc3RhbmNlOiBhbnk7XHJcbiAgY2tUYWduYW1lOiBzdHJpbmc7XHJcbiAgdG9vbGJhckl0ZW1QcmVmaXhJZDogc3RyaW5nO1xyXG4gIGlzVG9vbGJhckl0ZW1zSWRTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgc3dpdGNoIChldmVudC5kYXRhLmV2ZW50TmFtZSkge1xyXG4gICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RFTVBMQVRFX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy5sb2FkVGVtcGxhdGVFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfTElOS19QTFVHSU5fTVNHOlxyXG4gICAgICAgIHRoaXMubGlua0V2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9PTFRJUF9QTFVHSU5fTVNHOlxyXG4gICAgICAgIHRoaXMudG9vbHRpcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfSU1BR0VNQVBfUExVR0lOX01TRzpcclxuICAgICAgICB0aGlzLmltYWdlTWFwRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy5icG1uRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19BQk9VVF9DS0VESVRPUl9QTFVHSU5fTVNHOlxyXG4gICAgICAgIHRoaXMuYWJvdXRDS0VkaXRvckV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfRkxPV0NIQVJUX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy5mbG93Y2hhcnRFdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPR0dMRV9UT09MQkFSX01TRzpcclxuICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX01TRzpcclxuICAgICAgICB0aGlzLmJyb3dzZVZpZGVvRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdG9yXHJcbiAgICovXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcclxuICAgIHByaXZhdGUgcW1zQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50OiBRTVNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5ja1RhZ25hbWUgPSAnZGl2JztcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy50b29sYmFySXRlbVByZWZpeElkID0gYCR7dGhpcy5lZGl0b3JJZH1fdG9vbGJhcl9pdGVtX2A7XHJcbiAgICB0aGlzLm5hbWUgPSAnQ0tFZGl0b3IgY3VzdG9tIGJ1aWxkJztcclxuICAgIHRoaXMuY2tFZGl0b3IgPSB0aGlzLnFtc2NrUGx1Z2luLnBsdWdpbk9iamVjdDtcclxuICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCB0b29sYmFySXRlbXMgPSB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyO1xyXG4gICAgaWYgKHRoaXMuaXNFbmFibGVkVG9nZ2xlVG9vbGJhcigpICYmIHRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXMpIHtcclxuICAgICAgdG9vbGJhckl0ZW1zICs9ICcsJyArIHRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ja2VkaXRvckNvbmZpZyA9IENLRWRpdG9yQ29tbW9uRnVuY3Rpb25zLmdldENLRWRpdG9yQ29uZmlndXJhdGlvbih0b29sYmFySXRlbXMpO1xyXG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldEFwaVVybCh0aGlzLnFtc2NrRGF0YS5hcGlVcmwpO1xyXG4gICAgaWYgKHRoaXMuaXNFbmFibGVkTWF0aHR5cGVDb25maWcoKSkge1xyXG4gICAgICB0aGlzLmFkZE1hdGhUeXBlQ29uZmlnKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNFbmFibGVkVGltZXN0YW1wQ29uZmlnKCkpIHtcclxuICAgICAgdGhpcy5hZGRUaW1lc3RhbXBDb25maWcoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0VuYWJsZWRXUHJvb2ZyZWFkZXIoKSkge1xyXG4gICAgICB0aGlzLmFkZFdQcm9vZnJlYWRlckNvbmZpZygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNFbmFibGVkVE9DVG9vbGJhcigpKSB7XHJcbiAgICAgIHRoaXMuYWRkVG9nZ2xlVE9DQ29uZmlnKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0VuYWJsZWRGdWxsU2NyZWVuQ29uZmlnKCkpIHtcclxuICAgICAgdGhpcy5hZGRGdWxsU2NyZWVuQ29uZmlnKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmVkaXRvckluc3RhbmNlKSB7XHJcbiAgICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UuZGVzdHJveSgpO1xyXG4gICAgfVxyXG4gICAgJChkb2N1bWVudCkub2ZmKCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZTogKGNvbnRlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2NrLWRpc2FibGVkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0VuYWJsZWRXUHJvb2ZyZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYXR0ZXJuID0gLyh3cHJvb2ZyZWFkZXIpL2dtaTtcclxuICAgIHJldHVybiAhIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlclxyXG4gICAgICAmJiAhIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zcmNVcmxcclxuICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgfVxyXG5cclxuICBhZGRXUHJvb2ZyZWFkZXJDb25maWcoKSB7XHJcbiAgICBjb25zdCB3cHJvb2ZyZWFkZXJDb25maWcgPSB7XHJcbiAgICAgIHdwcm9vZnJlYWRlcjoge1xyXG4gICAgICAgIC4uLnRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlclxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKCF0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc2VydmljZUlkIHx8IHRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQubGVuZ3RoID09IDApIHtcclxuICAgICAgLy9GYWxsYmFjayB2YWx1ZSBvZiBzZXJ2aWNlSWQgcHJvcGVydHkgdG8gZGVtbyBzZXJ2aWNlSWRcclxuICAgICAgdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZCA9ICcxOktwa3ZRMi02S05Vai1MMVczdTItQzlqMEsxLVp2MnRZMS1DZkRPeC1XZkdSZzItcVh0Y2ktWXl5RTM0LWowOUg0Mi1iMGFDdDMtZDlhJztcclxuICAgIH1cclxuICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24odGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LCB3cHJvb2ZyZWFkZXJDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgaXNFbmFibGVkVG9nZ2xlVG9vbGJhcigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRvZ2dsZVRvb2xiYXIpL2dtaTtcclxuICAgIHJldHVybiAhIXRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXNcclxuICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgfVxyXG5cclxuICBhZGRUb2dnbGVUb29sYmFyQ29uZmlnKCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnNwbGl0KCcsJyk7XHJcbiAgICBjb25zdCB0b2dnbGVUb29sYmFyQ29uZmlnID0ge1xyXG4gICAgICB0b2dnbGVUb29sYmFyQ29uZmlnOiB7XHJcbiAgICAgICAgdG9vbGJhcjogaXRlbXNcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24odGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LCB0b2dnbGVUb29sYmFyQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIGlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYXR0ZXJuID0gLyhxbXNGdWxsc2NyZWVuKS9nbWk7XHJcbiAgICByZXR1cm4gISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICYmICEhdGhpcy5xbXNja0RhdGEuZnVsbFNjcmVlbkNsYXNzXHJcbiAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgfVxyXG5cclxuICBhZGRGdWxsU2NyZWVuQ29uZmlnKCkge1xyXG4gICAgY29uc3QgZnVsbFNjcmVlbkNvbmZpZyA9IHtcclxuICAgICAgZnVsbFNjcmVlbkNvbmZpZzoge1xyXG4gICAgICAgIGNsYXNzOiB0aGlzLnFtc2NrRGF0YS5mdWxsU2NyZWVuQ2xhc3NcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sIGZ1bGxTY3JlZW5Db25maWcpO1xyXG4gIH1cclxuXHJcbiAgaXNFbmFibGVkVE9DVG9vbGJhcigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRhYmxlT2ZDb250ZW50cykvZ21pO1xyXG4gICAgcmV0dXJuICEhdGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5nc1xyXG4gICAgICAmJiAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXJcclxuICAgICAgJiYgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMTtcclxuICB9XHJcblxyXG4gIGFkZFRvZ2dsZVRPQ0NvbmZpZygpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5ncy5zcGxpdCgnLCcpO1xyXG4gICAgY29uc3QgdGFibGVPZkNvbnRlbnRzID0ge1xyXG4gICAgICB0YWJsZU9mQ29udGVudHM6IHtcclxuICAgICAgICBzdXBwb3J0ZWRIZWFkaW5nczogaXRlbXNcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24odGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LCB0YWJsZU9mQ29udGVudHMpO1xyXG4gIH1cclxuXHJcbiAgaXNFbmFibGVkVGltZXN0YW1wQ29uZmlnKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC8odGltZXN0YW1wKS9nbWk7XHJcbiAgICByZXR1cm4gISF0aGlzLnFtc2NrRGF0YS50aW1lc3RhbXBGb3JtYXRcclxuICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgfVxyXG5cclxuICBhZGRUaW1lc3RhbXBDb25maWcoKSB7XHJcbiAgICBjb25zdCB0aW1lc3RhbXBDb25maWcgPSB7XHJcbiAgICAgIHRpbWVzdGFtcENvbmZpZzoge1xyXG4gICAgICAgIGRhdGV0aW1lRm9ybWF0OiB0aGlzLnFtc2NrRGF0YS50aW1lc3RhbXBGb3JtYXRcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24odGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LCB0aW1lc3RhbXBDb25maWcpO1xyXG4gIH1cclxuXHJcbiAgaXNFbmFibGVkTWF0aHR5cGVDb25maWcoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYXR0ZXJuID0gLyhNYXRoVHlwZSl8KENoZW1UeXBlKS9nbWk7XHJcbiAgICByZXR1cm4gISF0aGlzLnFtc2NrRGF0YS5tYXRodHlwZVNlcnZpY2VVcmxcclxuICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgfVxyXG5cclxuICBhZGRNYXRoVHlwZUNvbmZpZygpIHtcclxuICAgIGNvbnN0IG1hdGhUeXBlQ29uZmlnID0ge1xyXG4gICAgICBtYXRoVHlwZVBhcmFtZXRlcnM6IHtcclxuICAgICAgICBzZXJ2aWNlUHJvdmlkZXJQcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgICBVUkk6IHRoaXMucW1zY2tEYXRhLm1hdGh0eXBlU2VydmljZVVybCxcclxuICAgICAgICAgIHNlcnZlcjogJ2FzcHgnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sIG1hdGhUeXBlQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZWQoeyBlZGl0b3IgfSkge1xyXG4gICAgLy90aGlzLnFtc2NrQ29udGVudElucHV0ID0gZWRpdG9yLmdldERhdGEoKTtcclxuICAgIHRoaXMucW1zY2tDb250ZW50T3V0cHV0LmVtaXQodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CbHVyKHsgZWRpdG9yIH0pIHtcclxuICAgIHRoaXMucW1zY2tDb250ZW50SW5wdXQgPSBlZGl0b3IuZ2V0RGF0YSgpO1xyXG4gICAgdGhpcy5xbXNja0NvbnRlbnRPdXRwdXQuZW1pdCh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKSB7XHJcbiAgICBpZiAoIXRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHRoaXMucW1zY2tDb250ZW50SW5wdXQgJiYgIXRoaXMucmVxdWlyZWQpID8gbnVsbCA6IHtcclxuICAgICAgdHlwZToge1xyXG4gICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICBhY3R1YWw6IGMudmFsdWVcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9uUmVhZHlcclxuICAgKi9cclxuICBwdWJsaWMgb25SZWFkeShlZGl0b3IpIHtcclxuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBlZGl0b3I7XHJcbiAgICBpZiAodGhpcy5xbXNja0NvbnRlbnRJbnB1dCkge1xyXG4gICAgICBlZGl0b3Iuc2V0RGF0YSh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdEVkaXRvcihlZGl0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0RWRpdG9yKGVkaXRvcikge1xyXG4gICAgY29uc3QgaW1hZ2VVcGxvYWRUeXBlcyA9IGVkaXRvci5jb25maWcuZ2V0KCdpbWFnZS51cGxvYWQudHlwZXMnKTtcclxuICAgIGNvbnN0IG1heEZpbGVTaXplTUIgPSB0aGlzLnFtc2NrRGF0YS5tYXhGaWxlU2l6ZU1CO1xyXG4gICAgY29uc3QgY29uZmlnOiBRbXNVcGxvYWRBZGFwdGVyQ29uZmlnID0geyBhcGlVcmw6IHRoaXMucW1zY2tEYXRhLmFwaVVybCwgTEFORzogdGhpcy5MQU5HLCBpbWFnZVVwbG9hZFR5cGVzLCBtYXhGaWxlU2l6ZU1CIH07XHJcbiAgICBlZGl0b3IucGx1Z2lucy5nZXQoXCJGaWxlUmVwb3NpdG9yeVwiKS5jcmVhdGVVcGxvYWRBZGFwdGVyID0gKGxvYWRlcikgPT4ge1xyXG4gICAgICByZXR1cm4gbmV3IFFtc1VwbG9hZEFkYXB0ZXIobG9hZGVyLCBjb25maWcpO1xyXG4gICAgfTtcclxuXHJcbiAgICBlZGl0b3IudWlcclxuICAgICAgLmdldEVkaXRhYmxlRWxlbWVudCgpXHJcbiAgICAgIC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShlZGl0b3IudWkudmlldy50b29sYmFyLmVsZW1lbnQsIGVkaXRvci51aS5nZXRFZGl0YWJsZUVsZW1lbnQoKSk7XHJcblxyXG4gICAgLy8gQXBwZWQgV29yZGNvdW50IHRvIENLZWRpdG9yXHJcbiAgICBlZGl0b3IucGx1Z2lucy5nZXQoJ1dvcmRDb3VudCcpLm9uKCd1cGRhdGUnLCAoZXZ0LCBzdGF0cykgPT4ge1xyXG4gICAgICAvLyBQcmludHMgdGhlIGN1cnJlbnQgY29udGVudCBzdGF0aXN0aWNzLlxyXG4gICAgICBjb25zdCB3b3Jkc0JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53b3JkY291bnQtY29udGVudCcpO1xyXG4gICAgICBpZiAoISF3b3Jkc0JveCkge1xyXG4gICAgICAgIHdvcmRzQm94LnRleHRDb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLldPUkRTfTogJHtzdGF0cy53b3Jkc30gLyAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5DSEFSQUNURVJTfTogJHtzdGF0cy5jaGFyYWN0ZXJzfWA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NldEVkaXRvckluc3RhbmNlT2JzZXJ2ZXIodGhpcy5lZGl0b3JJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGVtcGxhdGUgLSBMb2FkIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcHVibGljIHRlbXBsYXRlRXZlbnRIYW5kbGluZygpIHtcclxuICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yVGVtcGxhdGUgPSBuZXcgUU1TQ0tFZGl0b3JUZW1wbGF0ZSgpO1xyXG4gICAgZGF0YS5pZCA9IDA7XHJcbiAgICBkYXRhLmNvbnRlbnQgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xyXG4gICAgZGF0YS5lZGl0ID0gZmFsc2U7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgaGVpZ2h0OiAnNTIwcHgnLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgLy8gVERPXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0ZW1wbGF0ZSAtIExvYWQgdGVtcGxhdGVcclxuICAgKi9cclxuICBwdWJsaWMgbG9hZFRlbXBsYXRlRXZlbnRIYW5kbGluZygpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckxvYWRUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgaGVpZ2h0OiAnNzAwcHgnLFxyXG4gICAgICBkYXRhOiB0aGlzLnFtc2NrQ29udGVudElucHV0LFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xPQURfVEVNUExBVEVfUExVR0lOX1JFU1AsIHtcclxuICAgICAgICAgICAgZGV0YWlsOiByZXN1bHRcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5jaG9yIC0gTGluayAtIEltYWdlIG1hcHBpbmdcclxuICAgKi9cclxuICBwdWJsaWMgbGlua0V2ZW50SGFuZGxpbmcobGluaykge1xyXG4gICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JMaW5rKCk7XHJcbiAgICBkYXRhID0gbGluaztcclxuICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcclxuICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgIGxldCBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgaWYgKCF0aGlzLnFtc2NrUGx1Z2luLnNpbXBsZU1vZGUpIHtcclxuICAgICAgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yTGlua0NvbXBvbmVudCwge1xyXG4gICAgICAgIHdpZHRoOiAnNjUwcHgnLFxyXG4gICAgICAgIGhlaWdodDogJzY2MHB4JyxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRbXNDa2VkaXRvckxpbmtTaW1wbGVDb21wb25lbnQsIHtcclxuICAgICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgICBoZWlnaHQ6ICcyMDBweCcsXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQodGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfTElOS19QTFVHSU5fUkVTUCwge1xyXG4gICAgICAgICAgICBkZXRhaWw6IHJlc3VsdFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb29sdGlwIG1hcHBpbmdcclxuICAgKi9cclxuICBwdWJsaWMgdG9vbHRpcEV2ZW50SGFuZGxpbmcodmFsdWUpIHtcclxuICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yVG9vbHRpcCgpO1xyXG4gICAgZGF0YS50ZXh0ID0gdmFsdWUudGV4dDtcclxuICAgIGRhdGEuY29udGVudCA9IHZhbHVlLmNvbnRlbnQ7XHJcbiAgICBkYXRhLmNrRWRpdG9yID0gdGhpcy5xbXNja1BsdWdpbi5wbHVnaW5PYmplY3Q7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yVG9vbHRpcENvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgaGVpZ2h0OiAnNTU1cHgnLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPT0xUSVBfUExVR0lOX1JFU1AsIHtcclxuICAgICAgICAgICAgZGV0YWlsOiByZXN1bHRcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEltYWdlTWFwIG1hcHBpbmdcclxuICovXHJcbiAgcHVibGljIGltYWdlTWFwRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xyXG4gICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JJbWFnZU1hcCgpO1xyXG4gICAgZGF0YS5uYW1lID0gdmFsdWUubmFtZTtcclxuICAgIGRhdGEuYXJlYXMgPSB2YWx1ZS5hcmVhcztcclxuICAgIGRhdGEuaW1hZ2VVcmwgPSB2YWx1ZS5pbWFnZVVybDtcclxuICAgIGRhdGEuaW1hZ2VXaWR0aCA9IHZhbHVlLmltYWdlV2lkdGg7XHJcbiAgICBkYXRhLmltYWdlSGVpZ2h0ID0gdmFsdWUuaW1hZ2VIZWlnaHQ7XHJcbiAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcclxuICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICBkYXRhLmxpbmtKYXZhU2NyaXB0TGlua3NBbGxvd2VkID0gdGhpcy5xbXNja0RhdGEubGlua0phdmFTY3JpcHRMaW5rc0FsbG93ZWQ7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JJbWFnZU1hcENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0lNQUdFTUFQX1BMVUdJTl9SRVNQLCB7XHJcbiAgICAgICAgICAgIGRldGFpbDogcmVzdWx0XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBCdXNpbmVzcyBQcm9jZXNzIE1vZGVsIGFuZCBOb3RhdGlvblxyXG4gICovXHJcbiAgcHVibGljIGJwbW5FdmVudEhhbmRsaW5nKGlkOiBzdHJpbmcpIHtcclxuICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yQnBtbkRhdGEoKTtcclxuICAgIGRhdGEuaWQgPSBpZDtcclxuICAgIGRhdGEubW9kdWxlID0gdGhpcy5xbXNja0RhdGEubW9kdWxlO1xyXG4gICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgZGF0YS5lZGl0b3JDb250ZW50ID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckJwbW5Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc4OXZ3JyxcclxuICAgICAgbWF4V2lkdGg6ICcxMDB2dycsXHJcbiAgICAgIGhlaWdodDogJzcwMHB4JyxcclxuICAgICAgbWF4SGVpZ2h0OiAnMTAwdncnLFxyXG4gICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU5fUExVR0lOX1JFU1AsIHtcclxuICAgICAgICAgICAgZGV0YWlsOiByZXN1bHRcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKlxyXG4gICBBYm91dCBDS0VkaXRvclxyXG4gKi9cclxuICBwdWJsaWMgYWJvdXRDS0VkaXRvckV2ZW50SGFuZGxpbmcodmVyc2lvbjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JBYm91dENvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgZGF0YTogdmVyc2lvbixcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAgVG9vbGJhciB0b2dnbGVcclxuXHJcbiAgICBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuXHJcbiAgICBUcmFja2luZyBzdGF0dXMgYW5kIHByb2dyZXNzIG9mIHRoZSBpc3N1ZSBodHRwczovL2dpdGh1Yi5jb20vY2tlZGl0b3IvY2tlZGl0b3I1L2lzc3Vlcy83MzgzXHJcblxyXG4gICAgLSBSZW5kZXIgYm90aCBkZWZhdWx0IHRvb2xiYXIgYW5kIHRvZ2dsZSB0b29sYmFyIGF0IGluaXQgdGltZVxyXG4gICAgLSBTZXQgSUQgZm9yIHRvb2xiYXIgaXRlbXMgdXNpbmcgaW5kZXg6XHJcbiAgICAgICsgRnJvbSBpbmRleCAwIHRvIHRvb2xiYXJMZW5ndGggLSAxIGlzIHRoZSBkZWZhdWx0IHRvb2xiYXJcclxuICAgICAgKyBGcm9tIGluZGV4IHRvb2xiYXJMZW5ndGggb24gaXMgdGhlIHRvZ2dsZSB0b29sYmFyXHJcbiAgICAtIFNob3cvaGlkZSBkZWZhdWx0IGFuZCB0b2dnbGUgdG9vbGJhciBieSBzZXQgZGlzcGxheSBub25lIHRvIGNvcnJlc3BvbmRpbmcgdG9vbGJhciBpdGVtcyBiYXNlZCBvbiBJRFxyXG4gICovXHJcbiAgcHVibGljIHRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCkge1xyXG4gICAgY29uc3QgcW1zY2tlZGl0b3IgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XHJcbiAgICBjb25zdCB0b2dnbGVBdHRyaWJ1dGUgPSAnaXNUb2dnbGVUb29sYmFyJztcclxuICAgIGNvbnN0IGNrZWRpdG9yVGFnID0gJ2NrZWRpdG9yJztcclxuXHJcbiAgICBpZiAocW1zY2tlZGl0b3IpIHtcclxuICAgICAgY29uc3QgaXNUb2dnbGVUb29sYmFyID0gcW1zY2tlZGl0b3IuZ2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSkgPT0gJ3RydWUnO1xyXG4gICAgICBpZiAoaXNUb2dnbGVUb29sYmFyKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0VG9vbGJhclZpZXdNb2RlKHRydWUpO1xyXG4gICAgICAgIHFtc2NrZWRpdG9yLnNldEF0dHJpYnV0ZSh0b2dnbGVBdHRyaWJ1dGUsICdmYWxzZScpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NldFRvb2xiYXJWaWV3TW9kZShmYWxzZSk7XHJcbiAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ3RydWUnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRUb29sYmFyVmlld01vZGUoc2hvd1RvZ2dsZVRvb2xiYXI6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHRvb2xiYXJMZW5ndGggPSB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyPy5zcGxpdCgnLCcpLmxlbmd0aCB8fCAwO1xyXG4gICAgLypcclxuICAgICAgSXRlbXMgaW4gdG9vbGJhciBhcmUgaW5kZXhlZDpcclxuICAgICAgLSBGcm9tIGluZGV4IDAgdG8gdG9vbGJhckxlbmd0aCAtIDEgaXMgdGhlIGRlZmF1bHQgdG9vbGJhclxyXG4gICAgICAtIEZyb20gaW5kZXggdG9vbGJhckxlbmd0aCBvbiBpcyB0aGUgdG9nZ2xlIHRvb2xiYXJcclxuICAgICovXHJcbiAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ucHJldkFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJyc7XHJcbiAgICB9KVxyXG5cclxuICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5jc3MoJ2Rpc3BsYXknLCBzaG93VG9nZ2xlVG9vbGJhciA/ICdub25lJyA6ICcnKTtcclxuXHJcbiAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ubmV4dEFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJycgOiAnbm9uZSc7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEZsb3djaGFydFxyXG4gKi9cclxuICBwdWJsaWMgZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc4OXZ3JyxcclxuICAgICAgbWF4V2lkdGg6ICcxMDB2dycsXHJcbiAgICAgIGhlaWdodDogJzcyNXB4JyxcclxuICAgICAgbWF4SGVpZ2h0OiAnMTAwdncnLFxyXG4gICAgICBkYXRhOiBpZCxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVF9QTFVHSU5fUkVTUCwge1xyXG4gICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCcm93c2UgVmlkZW9cclxuICAgKi9cclxuICBwdWJsaWMgYnJvd3NlVmlkZW9FdmVudEhhbmRsaW5nKHZhbHVlKSB7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlXHJcbiAgICAgIC5nZXRVcGxvYWRWaWRlb0xpc3QoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpZGVvcyA9IHJlc3BvbnNlIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiBmYWxzZSxcclxuICAgICAgICAgIGFyZWFPZkN1cnJlbnRQcm9jZXNzOiAnJyxcclxuICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcclxuICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogdmFsdWUuYWxsb3dNdWx0aXBsZUZpbGVzLFxyXG4gICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuZG9jdW1lbnQsXHJcbiAgICAgICAgICBvcGVuSWNvbjogJ2ZvbGRlcl9vcGVuJyxcclxuICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcclxuICAgICAgICAgIGNsb3NlSWNvbjogJ2ZvbGRlcl9maWxsZWQnLFxyXG4gICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcjNGFjYWZmJyxcclxuICAgICAgICAgIGl0ZW1JY29uOiAnaW5zZXJ0X2RyaXZlX2ZpbGUnLFxyXG4gICAgICAgICAgaXRlbUljb25QYXRoOiAnJyxcclxuICAgICAgICAgIGl0ZW1JY29uQmFzZTY0OiAnJyxcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcclxuICAgICAgICAgIGV4cGFuZEFsbDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgZGF0YTogUG9wdXBEYXRhID0gbmV3IFBvcHVwRGF0YSgpO1xyXG4gICAgICAgIGRhdGEubW9kdWxlSWQgPSAyO1xyXG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5RTVNDS0VESVRPUi5TRUxFQ1RfVklERU9fRlJPTV9BUkNISVZFO1xyXG4gICAgICAgIGRhdGEudHJlZURhdGExID0gdmlkZW9zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcm9vdElkOiBpdGVtLnJvb3RJZCxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgIHJvb3ROYW1lOiBpdGVtLnJvb3ROYW1lLFxyXG4gICAgICAgICAgICBzdWJOYW1lOiBpdGVtLnN1Yk5hbWUsXHJcbiAgICAgICAgICAgIGNoaWxkSWQ6IGl0ZW0uY2hpbGRJZCxcclxuICAgICAgICAgICAgY2hpbGROYW1lOiBpdGVtLmNoaWxkTmFtZSxcclxuICAgICAgICAgICAgc3RhdHVzSWQ6IGl0ZW0uc3RhdHVzSWQsXHJcbiAgICAgICAgICAgIGRpc3BsYXlJZDogaXRlbS5kaXNwbGF5SWQsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBpdGVtLmNvbnRlbnRUeXBlLFxyXG4gICAgICAgICAgICB1cmw6IGl0ZW0udXJsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRhdGEudHJlZURhdGEyID0gW107XHJcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMSA9IGNvbmZpZztcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlbGF0ZWRQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgICAgbWluV2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgICBtYXhXaWR0aDogJzgwMHB4JyxcclxuICAgICAgICAgIG1pbkhlaWdodDogJzYyMHB4JyxcclxuICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICBwYW5lbENsYXNzOiAncW1zY2tlZGl0b3ItYnJvd3NlLXZpZGVvLXBvcHVwJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNlYXJjaEJveCA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucW1zY2tlZGl0b3ItYnJvd3NlLXZpZGVvLXBvcHVwICNxbXNsaWJfcmVsYXRlZF9wb3B1cF9zZWFyY2gnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIGlmIChzZWFyY2hCb3gpIHtcclxuICAgICAgICAgICAgc2VhcmNoQm94LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmXHJcbiAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpZHMgPSByZXN1bHQucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtpdGVtLmlkLnRvU3RyaW5nKCldID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHVybHMgPSB2aWRlb3MuZmlsdGVyKGkgPT4gaS5jaGlsZElkICYmICEhaWRzW2kuY2hpbGRJZC50b1N0cmluZygpXSkubWFwKGkgPT4gaS51cmwpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudCh0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUk9XU0VfVklERU9fUkVTUCwgeyBkZXRhaWw6IHsgdXJsczogdXJscyB9IH0pO1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEVkaXRvckluc3RhbmNlT2JzZXJ2ZXIoZWRpdG9ySWQ6IHN0cmluZykge1xyXG4gICAgJChkb2N1bWVudCkub2ZmKCdET01Ob2RlSW5zZXJ0ZWQnKS5vbignRE9NTm9kZUluc2VydGVkJywgKGUpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmlzVG9vbGJhckl0ZW1zSWRTZXQgJiYgJChlLnRhcmdldCkuaGFzKCcjJyArIGVkaXRvcklkKSkge1xyXG4gICAgICAgIHRoaXMuX3NldElkRm9yVG9vbGJhckl0ZW1zKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0SWRGb3JUb29sYmFySXRlbXMoKSB7XHJcbiAgICBjb25zdCB0b29sYmFySXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAke3RoaXMuZWRpdG9ySWQgPyAnIycgKyB0aGlzLmVkaXRvcklkIDogJyd9IC5jay10b29sYmFyX19pdGVtc2ApPy5jaGlsZHJlbiB8fCBbXTtcclxuICAgIGlmICghdG9vbGJhckl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzVG9vbGJhckl0ZW1zSWRTZXQgPSB0cnVlO1xyXG4gICAgKEFycmF5LmZyb20odG9vbGJhckl0ZW1zKSBhcyBIVE1MRWxlbWVudFtdKS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpdGVtLmlkID0gYCR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7aW5kZXh9YDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudG9nZ2xlVG9vbGJhckV2ZW50SGFuZGxpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
|
678
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxTQUFTLEVBQTJCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9OLE9BQU8sRUFBZSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyx1QkFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUd6RSxPQUFPLGVBQWUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw4RUFBOEUsQ0FB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Qjt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO3dCQUNuRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtvQkFDRDt3QkFDRSxPQUFPLEVBQUUsYUFBYTt3QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDbkQsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7O1lBakRRLFNBQVM7WUFFVCx1QkFBdUI7WUFrQnZCLHdCQUF3QjtZQU94QixzQkFBc0I7WUFqQnRCLDhCQUE4QjtZQVoyRyxTQUFTO1lBQS9GLFVBQVU7Ozt3QkF1RG5FLEtBQUs7MEJBQ0wsS0FBSztnQ0FDTCxLQUFLO2lDQUNMLEtBQUs7MENBQ0wsS0FBSzt5QkFDTCxLQUFLLFNBQUMsVUFBVTt1QkFDaEIsS0FBSyxTQUFDLFVBQVU7dUJBQ2hCLEtBQUs7aUNBQ0wsTUFBTTt3QkFjTixZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUW1zVXBsb2FkQWRhcHRlciwgUW1zVXBsb2FkQWRhcHRlckNvbmZpZyB9IGZyb20gJy4vY29tbW9uL2NsYXNzZXMvcW1zVXBsb2FkQWRhcHRlcic7XHJcbmltcG9ydCB7IENLRWRpdG9yRXZlbnRDb25zdCB9IGZyb20gJy4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckV2ZW50LmNvbnN0YW50JztcclxuaW1wb3J0IENLRWRpdG9yQ29tbW9uRnVuY3Rpb25zIGZyb20gJy4vY29tbW9uL2Z1bmN0aW9ucy9jb21tb24uZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckRhdGEgfSBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWRhdGEubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclBsdWdpbiB9IGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItcGx1Z2luLm1vZGVsJztcclxuaW1wb3J0IFFNU0NLRWRpdG9yTGluayBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXVybC5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItYnBtbi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZ1bGxzY3JlZW4vcW1zLWNrZWRpdG9yLWZ1bGxzY3JlZW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JJbWFnZU1hcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAvcW1zLWNrZWRpdG9yLWltYWdlbWFwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay9xbXMtY2tlZGl0b3ItbGluay5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxvYWRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbG9hZC10ZW1wbGF0ZS9xbXMtY2tlZGl0b3ItbG9hZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS9xbXMtY2tlZGl0b3ItdGVtcGxhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci10b29sdGlwL3Ftcy1ja2VkaXRvci10b29sdGlwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9ySW1hZ2VNYXAgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRlbXBsYXRlIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRlbXBsYXRlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb29sdGlwIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRvb2x0aXAubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnQgfSBmcm9tICcuL3Ftcy1ja2VkaXRvci1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yR2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWdsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JBYm91dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItYWJvdXQvcW1zLWNrZWRpdG9yLWFib3V0LmNvbXBvbmVudCc7XHJcbi8vaW1wb3J0IHsgQ0tFZGl0b3I1IH0gZnJvbSAnQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyL2NrZWRpdG9yJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gXCIuL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9jb21tb24vZGF0YS10eXBlLmVudW1cIjtcclxuaW1wb3J0IHsgUG9wdXBEYXRhIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9tb2RlbC9wb3B1cC1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IFJlbGF0ZWRQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL3JlbGF0ZWQvcG9wdXAvcmVsYXRlZC1wb3B1cC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUcmVlU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci10cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1mbG93Y2hhcnQvcW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUvcW1zLWNrZWRpdG9yLWxpbmstc2ltcGxlLmNvbXBvbmVudFwiO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJxbXMtY2tlZGl0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3Ftcy1ja2VkaXRvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9xbXMtY2tlZGl0b3IuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBRTVNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQsXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBRTVNDS0VkaXRvckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUU1TQ0tFZGl0b3JDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUU1TQ0tFZGl0b3JDb21wb25lbnRcclxuICBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWYWxpZGF0b3Ige1xyXG4gIEBJbnB1dCgpIHFtc2NrRGF0YTogUU1TQ0tFZGl0b3JEYXRhO1xyXG4gIEBJbnB1dCgpIHFtc2NrUGx1Z2luOiBRTVNDS0VkaXRvclBsdWdpbjtcclxuICBASW5wdXQoKSBxbXNja0NvbnRlbnRJbnB1dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHFtc2NrQ29udGVudEZpZWxkcz86IFtdO1xyXG4gIEBJbnB1dCgpIHFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudD86IGJvb2xlYW47XHJcbiAgQElucHV0KCdkaXNhYmxlZCcpIGlzRGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KCdyZXF1aXJlZCcpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZWRpdG9ySWQgPSAncW1zY2tlZGl0b3InO1xyXG4gIEBPdXRwdXQoKSBxbXNja0NvbnRlbnRPdXRwdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBMQU5HOiBhbnk7XHJcbiAgY2tFZGl0b3I6IGFueTtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgY2tlZGl0b3JDb25maWc6IGFueTtcclxuICBja0VkaXRvckV2ZW50Q29uc3QgPSBDS0VkaXRvckV2ZW50Q29uc3Q7XHJcbiAgY291bnRXb3JkOiBudW1iZXI7XHJcbiAgY291bnRDaGFyOiBudW1iZXI7XHJcbiAgZWRpdG9ySW5zdGFuY2U6IGFueTtcclxuICBja1RhZ25hbWU6IHN0cmluZztcclxuICB0b29sYmFySXRlbVByZWZpeElkOiBzdHJpbmc7XHJcbiAgaXNUb29sYmFySXRlbXNJZFNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93Om1lc3NhZ2VcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgc3dpdGNoIChldmVudC5kYXRhLmV2ZW50TmFtZSkge1xyXG4gICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RFTVBMQVRFX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy5sb2FkVGVtcGxhdGVFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfTElOS19QTFVHSU5fTVNHOlxyXG4gICAgICAgIHRoaXMubGlua0V2ZW50SGFuZGxpbmcoXHJcbiAgICAgICAgICBldmVudC5kYXRhLnZhbHVlLFxyXG4gICAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRGaWVsZHMsXHJcbiAgICAgICAgICB0aGlzLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9PTFRJUF9QTFVHSU5fTVNHOlxyXG4gICAgICAgIHRoaXMudG9vbHRpcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfSU1BR0VNQVBfUExVR0lOX01TRzpcclxuICAgICAgICB0aGlzLmltYWdlTWFwRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy5icG1uRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19BQk9VVF9DS0VESVRPUl9QTFVHSU5fTVNHOlxyXG4gICAgICAgIHRoaXMuYWJvdXRDS0VkaXRvckV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfRkxPV0NIQVJUX1BMVUdJTl9NU0c6XHJcbiAgICAgICAgdGhpcy5mbG93Y2hhcnRFdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPR0dMRV9UT09MQkFSX01TRzpcclxuICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX01TRzpcclxuICAgICAgICB0aGlzLmJyb3dzZVZpZGVvRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnVjdG9yXHJcbiAgICovXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcclxuICAgIHByaXZhdGUgcW1zQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50OiBRTVNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5ja1RhZ25hbWUgPSBcImRpdlwiO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWQgPSBgJHt0aGlzLmVkaXRvcklkfV90b29sYmFyX2l0ZW1fYDtcclxuICAgIHRoaXMubmFtZSA9ICdDS0VkaXRvciBjdXN0b20gYnVpbGQnO1xyXG4gICAgdGhpcy5ja0VkaXRvciA9IHRoaXMucW1zY2tQbHVnaW4ucGx1Z2luT2JqZWN0O1xyXG4gICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbGV0IHRvb2xiYXJJdGVtcyA9IHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXI7XHJcbiAgICBpZiAodGhpcy5pc0VuYWJsZWRUb2dnbGVUb29sYmFyKCkgJiYgdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtcykge1xyXG4gICAgICB0b29sYmFySXRlbXMgKz0gJywnICsgdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMuZ2V0Q0tFZGl0b3JDb25maWd1cmF0aW9uKHRvb2xiYXJJdGVtcyk7XHJcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0QXBpVXJsKHRoaXMucW1zY2tEYXRhLmFwaVVybCk7XHJcbiAgICBpZiAodGhpcy5pc0VuYWJsZWRNYXRodHlwZUNvbmZpZygpKSB7XHJcbiAgICAgIHRoaXMuYWRkTWF0aFR5cGVDb25maWcoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0VuYWJsZWRUaW1lc3RhbXBDb25maWcoKSkge1xyXG4gICAgICB0aGlzLmFkZFRpbWVzdGFtcENvbmZpZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRW5hYmxlZFdQcm9vZnJlYWRlcigpKSB7XHJcbiAgICAgIHRoaXMuYWRkV1Byb29mcmVhZGVyQ29uZmlnKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0VuYWJsZWRUT0NUb29sYmFyKCkpIHtcclxuICAgICAgdGhpcy5hZGRUb2dnbGVUT0NDb25maWcoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKSkge1xyXG4gICAgICB0aGlzLmFkZEZ1bGxTY3JlZW5Db25maWcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9ySW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZS5kZXN0cm95KCk7XHJcbiAgICB9XHJcbiAgICAkKGRvY3VtZW50KS5vZmYoKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlOiAoY29udGVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBcImNrLWRpc2FibGVkXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNFbmFibGVkV1Byb29mcmVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC8od3Byb29mcmVhZGVyKS9naW07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAhIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlciAmJlxyXG4gICAgICAhIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zcmNVcmwgJiZcclxuICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXHJcbiAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhZGRXUHJvb2ZyZWFkZXJDb25maWcoKSB7XHJcbiAgICBjb25zdCB3cHJvb2ZyZWFkZXJDb25maWcgPSB7XHJcbiAgICAgIHdwcm9vZnJlYWRlcjoge1xyXG4gICAgICAgIC4uLnRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlcixcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc2VydmljZUlkIHx8XHJcbiAgICAgIHRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQubGVuZ3RoID09IDBcclxuICAgICkge1xyXG4gICAgICAvL0ZhbGxiYWNrIHZhbHVlIG9mIHNlcnZpY2VJZCBwcm9wZXJ0eSB0byBkZW1vIHNlcnZpY2VJZFxyXG4gICAgICB0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc2VydmljZUlkID1cclxuICAgICAgICBcIjE6S3BrdlEyLTZLTlVqLUwxVzN1Mi1DOWowSzEtWnYydFkxLUNmRE94LVdmR1JnMi1xWHRjaS1ZeXlFMzQtajA5SDQyLWIwYUN0My1kOWFcIjtcclxuICAgIH1cclxuICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcclxuICAgICAgd3Byb29mcmVhZGVyQ29uZmlnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNFbmFibGVkVG9nZ2xlVG9vbGJhcigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRvZ2dsZVRvb2xiYXIpL2dtaTtcclxuICAgIHJldHVybiAhIXRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXNcclxuICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgfVxyXG5cclxuICBhZGRUb2dnbGVUb29sYmFyQ29uZmlnKCkge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnNwbGl0KCcsJyk7XHJcbiAgICBjb25zdCB0b2dnbGVUb29sYmFyQ29uZmlnID0ge1xyXG4gICAgICB0b2dnbGVUb29sYmFyQ29uZmlnOiB7XHJcbiAgICAgICAgdG9vbGJhcjogaXRlbXMsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICB0b2dnbGVUb29sYmFyQ29uZmlnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNFbmFibGVkRnVsbFNjcmVlbkNvbmZpZygpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKHFtc0Z1bGxzY3JlZW4pL2dpbTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAhIXRoaXMucW1zY2tEYXRhLmZ1bGxTY3JlZW5DbGFzcyAmJlxyXG4gICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYWRkRnVsbFNjcmVlbkNvbmZpZygpIHtcclxuICAgIGNvbnN0IGZ1bGxTY3JlZW5Db25maWcgPSB7XHJcbiAgICAgIGZ1bGxTY3JlZW5Db25maWc6IHtcclxuICAgICAgICBjbGFzczogdGhpcy5xbXNja0RhdGEuZnVsbFNjcmVlbkNsYXNzLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcclxuICAgICAgZnVsbFNjcmVlbkNvbmZpZ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzRW5hYmxlZFRPQ1Rvb2xiYXIoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYXR0ZXJuID0gLyh0YWJsZU9mQ29udGVudHMpL2dpbTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICEhdGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5ncyAmJlxyXG4gICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcclxuICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFkZFRvZ2dsZVRPQ0NvbmZpZygpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5ncy5zcGxpdChcIixcIik7XHJcbiAgICBjb25zdCB0YWJsZU9mQ29udGVudHMgPSB7XHJcbiAgICAgIHRhYmxlT2ZDb250ZW50czoge1xyXG4gICAgICAgIHN1cHBvcnRlZEhlYWRpbmdzOiBpdGVtcyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgIHRhYmxlT2ZDb250ZW50c1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzRW5hYmxlZFRpbWVzdGFtcENvbmZpZygpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRpbWVzdGFtcCkvZ2ltO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgISF0aGlzLnFtc2NrRGF0YS50aW1lc3RhbXBGb3JtYXQgJiZcclxuICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXHJcbiAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhZGRUaW1lc3RhbXBDb25maWcoKSB7XHJcbiAgICBjb25zdCB0aW1lc3RhbXBDb25maWcgPSB7XHJcbiAgICAgIHRpbWVzdGFtcENvbmZpZzoge1xyXG4gICAgICAgIGRhdGV0aW1lRm9ybWF0OiB0aGlzLnFtc2NrRGF0YS50aW1lc3RhbXBGb3JtYXQsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICB0aW1lc3RhbXBDb25maWdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0VuYWJsZWRNYXRodHlwZUNvbmZpZygpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKE1hdGhUeXBlKXwoQ2hlbVR5cGUpL2dpbTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICEhdGhpcy5xbXNja0RhdGEubWF0aHR5cGVTZXJ2aWNlVXJsICYmXHJcbiAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYWRkTWF0aFR5cGVDb25maWcoKSB7XHJcbiAgICBjb25zdCBtYXRoVHlwZUNvbmZpZyA9IHtcclxuICAgICAgbWF0aFR5cGVQYXJhbWV0ZXJzOiB7XHJcbiAgICAgICAgc2VydmljZVByb3ZpZGVyUHJvcGVydGllczoge1xyXG4gICAgICAgICAgVVJJOiB0aGlzLnFtc2NrRGF0YS5tYXRodHlwZVNlcnZpY2VVcmwsXHJcbiAgICAgICAgICBzZXJ2ZXI6IFwiYXNweFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICBtYXRoVHlwZUNvbmZpZ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZWQoeyBlZGl0b3IgfSkge1xyXG4gICAgLy90aGlzLnFtc2NrQ29udGVudElucHV0ID0gZWRpdG9yLmdldERhdGEoKTtcclxuICAgIHRoaXMucW1zY2tDb250ZW50T3V0cHV0LmVtaXQodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CbHVyKHsgZWRpdG9yIH0pIHtcclxuICAgIHRoaXMucW1zY2tDb250ZW50SW5wdXQgPSBlZGl0b3IuZ2V0RGF0YSgpO1xyXG4gICAgdGhpcy5xbXNja0NvbnRlbnRPdXRwdXQuZW1pdCh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKSB7XHJcbiAgICBpZiAoIXRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5xbXNja0NvbnRlbnRJbnB1dCAmJiAhdGhpcy5yZXF1aXJlZFxyXG4gICAgICA/IG51bGxcclxuICAgICAgOiB7XHJcbiAgICAgICAgdHlwZToge1xyXG4gICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgYWN0dWFsOiBjLnZhbHVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvblJlYWR5XHJcbiAgICovXHJcbiAgcHVibGljIG9uUmVhZHkoZWRpdG9yKSB7XHJcbiAgICB0aGlzLmVkaXRvckluc3RhbmNlID0gZWRpdG9yO1xyXG4gICAgaWYgKHRoaXMucW1zY2tDb250ZW50SW5wdXQpIHtcclxuICAgICAgZWRpdG9yLnNldERhdGEodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXRFZGl0b3IoZWRpdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEVkaXRvcihlZGl0b3IpIHtcclxuICAgIGNvbnN0IGltYWdlVXBsb2FkVHlwZXMgPSBlZGl0b3IuY29uZmlnLmdldChcImltYWdlLnVwbG9hZC50eXBlc1wiKTtcclxuICAgIGNvbnN0IG1heEZpbGVTaXplTUIgPSB0aGlzLnFtc2NrRGF0YS5tYXhGaWxlU2l6ZU1CO1xyXG4gICAgY29uc3QgY29uZmlnOiBRbXNVcGxvYWRBZGFwdGVyQ29uZmlnID0ge1xyXG4gICAgICBhcGlVcmw6IHRoaXMucW1zY2tEYXRhLmFwaVVybCxcclxuICAgICAgTEFORzogdGhpcy5MQU5HLFxyXG4gICAgICBpbWFnZVVwbG9hZFR5cGVzLFxyXG4gICAgICBtYXhGaWxlU2l6ZU1CLFxyXG4gICAgfTtcclxuICAgIGVkaXRvci5wbHVnaW5zLmdldChcIkZpbGVSZXBvc2l0b3J5XCIpLmNyZWF0ZVVwbG9hZEFkYXB0ZXIgPSAobG9hZGVyKSA9PiB7XHJcbiAgICAgIHJldHVybiBuZXcgUW1zVXBsb2FkQWRhcHRlcihsb2FkZXIsIGNvbmZpZyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGVkaXRvci51aVxyXG4gICAgICAuZ2V0RWRpdGFibGVFbGVtZW50KClcclxuICAgICAgLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKFxyXG4gICAgICAgIGVkaXRvci51aS52aWV3LnRvb2xiYXIuZWxlbWVudCxcclxuICAgICAgICBlZGl0b3IudWkuZ2V0RWRpdGFibGVFbGVtZW50KClcclxuICAgICAgKTtcclxuXHJcbiAgICAvLyBBcHBlZCBXb3JkY291bnQgdG8gQ0tlZGl0b3JcclxuICAgIGVkaXRvci5wbHVnaW5zLmdldChcIldvcmRDb3VudFwiKS5vbihcInVwZGF0ZVwiLCAoZXZ0LCBzdGF0cykgPT4ge1xyXG4gICAgICAvLyBQcmludHMgdGhlIGN1cnJlbnQgY29udGVudCBzdGF0aXN0aWNzLlxyXG4gICAgICBjb25zdCB3b3Jkc0JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIud29yZGNvdW50LWNvbnRlbnRcIik7XHJcbiAgICAgIGlmICghIXdvcmRzQm94KSB7XHJcbiAgICAgICAgd29yZHNCb3gudGV4dENvbnRlbnQgPSBgJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuV09SRFN9OiAke3N0YXRzLndvcmRzfSAvICR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLkNIQVJBQ1RFUlN9OiAke3N0YXRzLmNoYXJhY3RlcnN9YDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc2V0RWRpdG9ySW5zdGFuY2VPYnNlcnZlcih0aGlzLmVkaXRvcklkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0ZW1wbGF0ZSAtIExvYWQgdGVtcGxhdGVcclxuICAgKi9cclxuICBwdWJsaWMgdGVtcGxhdGVFdmVudEhhbmRsaW5nKCkge1xyXG4gICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JUZW1wbGF0ZSA9IG5ldyBRTVNDS0VkaXRvclRlbXBsYXRlKCk7XHJcbiAgICBkYXRhLmlkID0gMDtcclxuICAgIGRhdGEuY29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICBkYXRhLmVkaXQgPSBmYWxzZTtcclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvclRlbXBsYXRlQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXHJcbiAgICAgIGhlaWdodDogXCI1MjBweFwiLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIC8vIFRET1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGVtcGxhdGUgLSBMb2FkIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcHVibGljIGxvYWRUZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKSB7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JMb2FkVGVtcGxhdGVDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6IFwiNjUwcHhcIixcclxuICAgICAgaGVpZ2h0OiBcIjcwMHB4XCIsXHJcbiAgICAgIGRhdGE6IHRoaXMucW1zY2tDb250ZW50SW5wdXQsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9SRVNQLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbmNob3IgLSBMaW5rIC0gSW1hZ2UgbWFwcGluZ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBsaW5rRXZlbnRIYW5kbGluZyhcclxuICAgIGxpbmssXHJcbiAgICBxbXNja0NvbnRlbnRGaWVsZHM/LFxyXG4gICAgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50P1xyXG4gICkge1xyXG4gICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JMaW5rKCk7XHJcbiAgICBkYXRhID0gbGluaztcclxuICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcclxuICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgIGlmIChxbXNja0NvbnRlbnRGaWVsZHMgJiYgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50KSB7XHJcbiAgICAgIGRhdGEucW1zY2tDb250ZW50RmllbGRzID0gcW1zY2tDb250ZW50RmllbGRzO1xyXG4gICAgICBkYXRhLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudCA9IHFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlhbG9nVGVtcGxhdGU7XHJcbiAgICBpZiAoIXRoaXMucW1zY2tQbHVnaW4uc2ltcGxlTW9kZSkge1xyXG4gICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JMaW5rQ29tcG9uZW50LCB7XHJcbiAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcclxuICAgICAgICBoZWlnaHQ6IFwiNjYwcHhcIixcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcclxuICAgICAgICBoZWlnaHQ6IFwiMjAwcHhcIixcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfTElOS19QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9vbHRpcCBtYXBwaW5nXHJcbiAgICovXHJcbiAgcHVibGljIHRvb2x0aXBFdmVudEhhbmRsaW5nKHZhbHVlKSB7XHJcbiAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclRvb2x0aXAoKTtcclxuICAgIGRhdGEudGV4dCA9IHZhbHVlLnRleHQ7XHJcbiAgICBkYXRhLmNvbnRlbnQgPSB2YWx1ZS5jb250ZW50O1xyXG4gICAgZGF0YS5ja0VkaXRvciA9IHRoaXMucW1zY2tQbHVnaW4ucGx1Z2luT2JqZWN0O1xyXG5cclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvclRvb2x0aXBDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6IFwiNjUwcHhcIixcclxuICAgICAgaGVpZ2h0OiBcIjU1NXB4XCIsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19UT09MVElQX1BMVUdJTl9SRVNQLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbWFnZU1hcCBtYXBwaW5nXHJcbiAgICovXHJcbiAgcHVibGljIGltYWdlTWFwRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xyXG4gICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JJbWFnZU1hcCgpO1xyXG4gICAgZGF0YS5uYW1lID0gdmFsdWUubmFtZTtcclxuICAgIGRhdGEuYXJlYXMgPSB2YWx1ZS5hcmVhcztcclxuICAgIGRhdGEuaW1hZ2VVcmwgPSB2YWx1ZS5pbWFnZVVybDtcclxuICAgIGRhdGEuaW1hZ2VXaWR0aCA9IHZhbHVlLmltYWdlV2lkdGg7XHJcbiAgICBkYXRhLmltYWdlSGVpZ2h0ID0gdmFsdWUuaW1hZ2VIZWlnaHQ7XHJcbiAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcclxuICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICBkYXRhLmxpbmtKYXZhU2NyaXB0TGlua3NBbGxvd2VkID0gdGhpcy5xbXNja0RhdGEubGlua0phdmFTY3JpcHRMaW5rc0FsbG93ZWQ7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JJbWFnZU1hcENvbXBvbmVudCwge1xyXG4gICAgICBkYXRhLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfSU1BR0VNQVBfUExVR0lOX1JFU1AsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBCdXNpbmVzcyBQcm9jZXNzIE1vZGVsIGFuZCBOb3RhdGlvblxyXG4gICovXHJcbiAgcHVibGljIGJwbW5FdmVudEhhbmRsaW5nKGlkOiBzdHJpbmcpIHtcclxuICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yQnBtbkRhdGEoKTtcclxuICAgIGRhdGEuaWQgPSBpZDtcclxuICAgIGRhdGEubW9kdWxlID0gdGhpcy5xbXNja0RhdGEubW9kdWxlO1xyXG4gICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgZGF0YS5lZGl0b3JDb250ZW50ID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckJwbW5Db21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6IFwiODl2d1wiLFxyXG4gICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxyXG4gICAgICBoZWlnaHQ6IFwiNzAwcHhcIixcclxuICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZ3XCIsXHJcbiAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OX1BMVUdJTl9SRVNQLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qXHJcbiAgIEFib3V0IENLRWRpdG9yXHJcbiAqL1xyXG4gIHB1YmxpYyBhYm91dENLRWRpdG9yRXZlbnRIYW5kbGluZyh2ZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckFib3V0Q29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiBcIjUwMHB4XCIsXHJcbiAgICAgIGRhdGE6IHZlcnNpb24sXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7IH0pO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgIFRvb2xiYXIgdG9nZ2xlXHJcblxyXG4gICAgVGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLlxyXG4gICAgVHJhY2tpbmcgc3RhdHVzIGFuZCBwcm9ncmVzcyBvZiB0aGUgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2NrZWRpdG9yL2NrZWRpdG9yNS9pc3N1ZXMvNzM4M1xyXG5cclxuICAgIC0gUmVuZGVyIGJvdGggZGVmYXVsdCB0b29sYmFyIGFuZCB0b2dnbGUgdG9vbGJhciBhdCBpbml0IHRpbWVcclxuICAgIC0gU2V0IElEIGZvciB0b29sYmFyIGl0ZW1zIHVzaW5nIGluZGV4OlxyXG4gICAgICArIEZyb20gaW5kZXggMCB0byB0b29sYmFyTGVuZ3RoIC0gMSBpcyB0aGUgZGVmYXVsdCB0b29sYmFyXHJcbiAgICAgICsgRnJvbSBpbmRleCB0b29sYmFyTGVuZ3RoIG9uIGlzIHRoZSB0b2dnbGUgdG9vbGJhclxyXG4gICAgLSBTaG93L2hpZGUgZGVmYXVsdCBhbmQgdG9nZ2xlIHRvb2xiYXIgYnkgc2V0IGRpc3BsYXkgbm9uZSB0byBjb3JyZXNwb25kaW5nIHRvb2xiYXIgaXRlbXMgYmFzZWQgb24gSURcclxuICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVUb29sYmFyRXZlbnRIYW5kbGluZygpIHtcclxuICAgIGNvbnN0IHFtc2NrZWRpdG9yID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xyXG4gICAgY29uc3QgdG9nZ2xlQXR0cmlidXRlID0gJ2lzVG9nZ2xlVG9vbGJhcic7XHJcbiAgICBjb25zdCBja2VkaXRvclRhZyA9ICdja2VkaXRvcic7XHJcblxyXG4gICAgaWYgKHFtc2NrZWRpdG9yKSB7XHJcbiAgICAgIGNvbnN0IGlzVG9nZ2xlVG9vbGJhciA9XHJcbiAgICAgICAgcW1zY2tlZGl0b3IuZ2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSkgPT0gXCJ0cnVlXCI7XHJcbiAgICAgIGlmIChpc1RvZ2dsZVRvb2xiYXIpIHtcclxuICAgICAgICB0aGlzLl9zZXRUb29sYmFyVmlld01vZGUodHJ1ZSk7XHJcbiAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ2ZhbHNlJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2V0VG9vbGJhclZpZXdNb2RlKGZhbHNlKTtcclxuICAgICAgICBxbXNja2VkaXRvci5zZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlLCAndHJ1ZScpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldFRvb2xiYXJWaWV3TW9kZShzaG93VG9nZ2xlVG9vbGJhcjogYm9vbGVhbikge1xyXG4gICAgY29uc3QgdG9vbGJhckxlbmd0aCA9IHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXI/LnNwbGl0KCcsJykubGVuZ3RoIHx8IDA7XHJcbiAgICAvKlxyXG4gICAgICBJdGVtcyBpbiB0b29sYmFyIGFyZSBpbmRleGVkOlxyXG4gICAgICAtIEZyb20gaW5kZXggMCB0byB0b29sYmFyTGVuZ3RoIC0gMSBpcyB0aGUgZGVmYXVsdCB0b29sYmFyXHJcbiAgICAgIC0gRnJvbSBpbmRleCB0b29sYmFyTGVuZ3RoIG9uIGlzIHRoZSB0b2dnbGUgdG9vbGJhclxyXG4gICAgKi9cclxuICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5wcmV2QWxsKCkuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcclxuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gc2hvd1RvZ2dsZVRvb2xiYXIgPyAnbm9uZScgOiAnJztcclxuICAgIH0pXHJcblxyXG4gICAgJChgIyR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7dG9vbGJhckxlbmd0aCAtIDF9YCk/LmNzcygnZGlzcGxheScsIHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJycpO1xyXG5cclxuICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5uZXh0QWxsKCkuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcclxuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gc2hvd1RvZ2dsZVRvb2xiYXIgPyAnJyA6ICdub25lJztcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGbG93Y2hhcnRcclxuICAgKi9cclxuICBwdWJsaWMgZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6IFwiODl2d1wiLFxyXG4gICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxyXG4gICAgICBoZWlnaHQ6IFwiNzI1cHhcIixcclxuICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZ3XCIsXHJcbiAgICAgIGRhdGE6IGlkLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVF9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJyb3dzZSBWaWRlb1xyXG4gICAqL1xyXG4gIHB1YmxpYyBicm93c2VWaWRlb0V2ZW50SGFuZGxpbmcodmFsdWUpIHtcclxuICAgIHRoaXMudHJlZVNlcnZpY2VcclxuICAgICAgLmdldFVwbG9hZFZpZGVvTGlzdCgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmlkZW9zID0gcmVzcG9uc2UgfHwgW107XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxyXG4gICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6IFwiXCIsXHJcbiAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXHJcbiAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IHZhbHVlLmFsbG93TXVsdGlwbGVGaWxlcyxcclxuICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRvY3VtZW50LFxyXG4gICAgICAgICAgb3Blbkljb246IFwiZm9sZGVyX29wZW5cIixcclxuICAgICAgICAgIG9wZW5JY29uQ29sb3I6IFwiIzE5NTRBOVwiLFxyXG4gICAgICAgICAgY2xvc2VJY29uOiBcImZvbGRlcl9maWxsZWRcIixcclxuICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiBcIiM0YWNhZmZcIixcclxuICAgICAgICAgIGl0ZW1JY29uOiBcImluc2VydF9kcml2ZV9maWxlXCIsXHJcbiAgICAgICAgICBpdGVtSWNvblBhdGg6IFwiXCIsXHJcbiAgICAgICAgICBpdGVtSWNvbkJhc2U2NDogXCJcIixcclxuICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcclxuICAgICAgICAgIGV4cGFuZEFsbDogdHJ1ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IFBvcHVwRGF0YSA9IG5ldyBQb3B1cERhdGEoKTtcclxuICAgICAgICBkYXRhLm1vZHVsZUlkID0gMjtcclxuICAgICAgICBkYXRhLm1vZHVsZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0VMRUNUX1ZJREVPX0ZST01fQVJDSElWRTtcclxuICAgICAgICBkYXRhLnRyZWVEYXRhMSA9IHZpZGVvcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJvb3RJZDogaXRlbS5yb290SWQsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxyXG4gICAgICAgICAgICByb290TmFtZTogaXRlbS5yb290TmFtZSxcclxuICAgICAgICAgICAgc3ViTmFtZTogaXRlbS5zdWJOYW1lLFxyXG4gICAgICAgICAgICBjaGlsZElkOiBpdGVtLmNoaWxkSWQsXHJcbiAgICAgICAgICAgIGNoaWxkTmFtZTogaXRlbS5jaGlsZE5hbWUsXHJcbiAgICAgICAgICAgIHN0YXR1c0lkOiBpdGVtLnN0YXR1c0lkLFxyXG4gICAgICAgICAgICBkaXNwbGF5SWQ6IGl0ZW0uZGlzcGxheUlkLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTogaXRlbS5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgdXJsOiBpdGVtLnVybCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGF0YS50cmVlRGF0YTIgPSBbXTtcclxuICAgICAgICBkYXRhLnRyZWVDb25maWcxID0gY29uZmlnO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUmVsYXRlZFBvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICBtaW5XaWR0aDogXCI0NTBweFwiLFxyXG4gICAgICAgICAgbWF4V2lkdGg6IFwiODAwcHhcIixcclxuICAgICAgICAgIG1pbkhlaWdodDogXCI2MjBweFwiLFxyXG4gICAgICAgICAgZGF0YSxcclxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFwicW1zY2tlZGl0b3ItYnJvd3NlLXZpZGVvLXBvcHVwXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VhcmNoQm94ID0gd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIFwiLnFtc2NrZWRpdG9yLWJyb3dzZS12aWRlby1wb3B1cCAjcW1zbGliX3JlbGF0ZWRfcG9wdXBfc2VhcmNoXCJcclxuICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICBpZiAoc2VhcmNoQm94KSB7XHJcbiAgICAgICAgICAgIHNlYXJjaEJveC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3QgaWRzID0gcmVzdWx0LnJlZHVjZSgocmVzdWx0LCBpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0W2l0ZW0uaWQudG9TdHJpbmcoKV0gPSBpdGVtLmlkO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICAgICAgY29uc3QgdXJscyA9IHZpZGVvc1xyXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGkpID0+IGkuY2hpbGRJZCAmJiAhIWlkc1tpLmNoaWxkSWQudG9TdHJpbmcoKV0pXHJcbiAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gaS51cmwpO1xyXG4gICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX1JFU1AsXHJcbiAgICAgICAgICAgICAgeyBkZXRhaWw6IHsgdXJsczogdXJscyB9IH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRFZGl0b3JJbnN0YW5jZU9ic2VydmVyKGVkaXRvcklkOiBzdHJpbmcpIHtcclxuICAgICQoZG9jdW1lbnQpLm9mZignRE9NTm9kZUluc2VydGVkJykub24oJ0RPTU5vZGVJbnNlcnRlZCcsIChlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5pc1Rvb2xiYXJJdGVtc0lkU2V0ICYmICQoZS50YXJnZXQpLmhhcygnIycgKyBlZGl0b3JJZCkpIHtcclxuICAgICAgICB0aGlzLl9zZXRJZEZvclRvb2xiYXJJdGVtcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldElkRm9yVG9vbGJhckl0ZW1zKCkge1xyXG4gICAgY29uc3QgdG9vbGJhckl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHt0aGlzLmVkaXRvcklkID8gJyMnICsgdGhpcy5lZGl0b3JJZCA6ICcnfSAuY2stdG9vbGJhcl9faXRlbXNgKT8uY2hpbGRyZW4gfHwgW107XHJcbiAgICBpZiAoIXRvb2xiYXJJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1Rvb2xiYXJJdGVtc0lkU2V0ID0gdHJ1ZTtcclxuICAgIChBcnJheS5mcm9tKHRvb2xiYXJJdGVtcykgYXMgSFRNTEVsZW1lbnRbXSkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgaXRlbS5pZCA9IGAke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke2luZGV4fWA7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|