@wavemaker/app-ng-runtime 11.6.0-next.40753 → 11.6.0-next.41002
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.
- app-ng-runtime/build-task/bundles/index.umd.js +1 -1
- app-ng-runtime/build-task/esm2020/data/form/form-field/form-field.build.mjs +2 -2
- app-ng-runtime/build-task/fesm2015/index.mjs +1 -1
- app-ng-runtime/build-task/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/build-task/fesm2020/index.mjs +1 -1
- app-ng-runtime/build-task/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/base/bundles/index.umd.js +1 -0
- app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +2 -1
- app-ng-runtime/components/base/fesm2015/index.mjs +1 -0
- app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/base/fesm2020/index.mjs +1 -0
- app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/chart/bundles/index.umd.js +4 -2
- app-ng-runtime/components/chart/esm2020/chart.component.mjs +4 -2
- app-ng-runtime/components/chart/esm2020/chart.utils.mjs +2 -2
- app-ng-runtime/components/chart/fesm2015/index.mjs +4 -2
- app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/chart/fesm2020/index.mjs +4 -2
- app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/bundles/index.umd.js +41 -27
- app-ng-runtime/components/data/form/esm2020/form-field/form-field.directive.mjs +28 -19
- app-ng-runtime/components/data/form/esm2020/form.component.mjs +19 -7
- app-ng-runtime/components/data/form/fesm2015/index.mjs +45 -27
- app-ng-runtime/components/data/form/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/fesm2020/index.mjs +45 -24
- app-ng-runtime/components/data/form/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +2 -0
- app-ng-runtime/components/data/table/bundles/index.umd.js +3 -2
- app-ng-runtime/components/data/table/esm2020/table.component.mjs +4 -3
- app-ng-runtime/components/data/table/fesm2015/index.mjs +3 -2
- app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/fesm2020/index.mjs +3 -2
- app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table.component.d.ts +1 -1
- app-ng-runtime/components/input/default/bundles/index.umd.js +55 -30
- app-ng-runtime/components/input/default/esm2020/caption-position.directive.mjs +2 -2
- app-ng-runtime/components/input/default/esm2020/select/select.component.mjs +58 -35
- app-ng-runtime/components/input/default/fesm2015/index.mjs +56 -31
- app-ng-runtime/components/input/default/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/fesm2020/index.mjs +53 -31
- app-ng-runtime/components/input/default/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/select/select.component.d.ts +4 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +2 -2
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +50 -25
- app-ng-runtime/components/input/epoch/esm2020/base-date-time.component.mjs +36 -14
- app-ng-runtime/components/input/epoch/esm2020/date/date.component.mjs +5 -5
- app-ng-runtime/components/input/epoch/esm2020/date-time/date-time.component.mjs +6 -5
- app-ng-runtime/components/input/epoch/esm2020/time/time.component.mjs +7 -5
- app-ng-runtime/components/input/epoch/fesm2015/index.mjs +50 -25
- app-ng-runtime/components/input/epoch/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/fesm2020/index.mjs +50 -25
- app-ng-runtime/components/input/epoch/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +15 -5
- app-ng-runtime/components/navigation/menu/esm2020/menu.component.mjs +12 -4
- app-ng-runtime/components/navigation/menu/esm2020/menu.props.mjs +2 -1
- app-ng-runtime/components/navigation/menu/esm2020/nav/nav.component.mjs +3 -3
- app-ng-runtime/components/navigation/menu/esm2020/nav/nav.props.mjs +2 -1
- app-ng-runtime/components/navigation/menu/fesm2015/index.mjs +15 -5
- app-ng-runtime/components/navigation/menu/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/fesm2020/index.mjs +15 -5
- app-ng-runtime/components/navigation/menu/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/menu.component.d.ts +3 -0
- app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +1 -0
- app-ng-runtime/components/navigation/popover/bundles/index.umd.js +10 -9
- app-ng-runtime/components/navigation/popover/esm2020/popover.component.mjs +11 -10
- app-ng-runtime/components/navigation/popover/fesm2015/index.mjs +10 -9
- app-ng-runtime/components/navigation/popover/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/popover/fesm2020/index.mjs +10 -9
- app-ng-runtime/components/navigation/popover/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/bundles/index.umd.js +1 -0
- app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +2 -1
- app-ng-runtime/components/prefab/fesm2015/index.mjs +1 -0
- app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/fesm2020/index.mjs +1 -0
- app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +2 -1
- app-ng-runtime/core/esm2020/utils/utils.mjs +3 -2
- app-ng-runtime/core/fesm2015/index.mjs +2 -1
- app-ng-runtime/core/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/core/fesm2020/index.mjs +2 -1
- app-ng-runtime/core/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/bundles/index.umd.js +2 -0
- app-ng-runtime/runtime/base/esm2020/components/base-page.component.mjs +3 -1
- app-ng-runtime/runtime/base/fesm2015/index.mjs +2 -0
- app-ng-runtime/runtime/base/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/runtime/base/fesm2020/index.mjs +2 -0
- app-ng-runtime/runtime/base/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +3 -3
- app-ng-runtime/variables/bundles/index.umd.js +13 -7
- app-ng-runtime/variables/esm2020/util/variable/variables.utils.mjs +14 -8
- app-ng-runtime/variables/fesm2015/index.mjs +13 -7
- app-ng-runtime/variables/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/variables/fesm2020/index.mjs +13 -7
- app-ng-runtime/variables/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/variables/util/variable/variables.utils.d.ts +1 -1
|
@@ -326,8 +326,19 @@
|
|
|
326
326
|
$ele: $ele
|
|
327
327
|
};
|
|
328
328
|
};
|
|
329
|
+
// Function to get the active element markup based on widget type
|
|
330
|
+
const getActiveElement = (element) => {
|
|
331
|
+
const widgetType = element.getAttribute('widgettype');
|
|
332
|
+
switch (widgetType) {
|
|
333
|
+
case 'select':
|
|
334
|
+
return element.querySelector('select');
|
|
335
|
+
case 'textarea':
|
|
336
|
+
return element.querySelector('textarea');
|
|
337
|
+
default:
|
|
338
|
+
return element.querySelector('input');
|
|
339
|
+
}
|
|
340
|
+
};
|
|
329
341
|
const setTouchedState = (self, ngForm, fieldName) => {
|
|
330
|
-
var _a, _b;
|
|
331
342
|
if (ngForm.valid) {
|
|
332
343
|
return;
|
|
333
344
|
}
|
|
@@ -338,15 +349,13 @@
|
|
|
338
349
|
}
|
|
339
350
|
else {
|
|
340
351
|
let element = self.$element.find(`[wmformfield][key="${fieldName}"]`);
|
|
341
|
-
// checking for name attribute if the key attribute is not present on formfield
|
|
342
352
|
if (!element.length) {
|
|
343
353
|
element = self.$element.find(`[wmformfield][name="${fieldName}"]`);
|
|
344
354
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
}
|
|
355
|
+
element[0].setAttribute('__errormsg', element[0].getAttribute('__validationId'));
|
|
356
|
+
let activeElement = getActiveElement(element[0]);
|
|
357
|
+
activeElement === null || activeElement === void 0 ? void 0 : activeElement.setAttribute('aria-invalid', ngForm.invalid);
|
|
358
|
+
activeElement === null || activeElement === void 0 ? void 0 : activeElement.setAttribute('aria-describedby', element[0].getAttribute('__validationId'));
|
|
350
359
|
ngForm.markAsTouched();
|
|
351
360
|
}
|
|
352
361
|
};
|
|
@@ -1752,21 +1761,36 @@
|
|
|
1752
1761
|
this._activeField = true;
|
|
1753
1762
|
$($evt.target).closest('.live-field').addClass('active');
|
|
1754
1763
|
}
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1764
|
+
// Function to get the active element markup based on widget type
|
|
1765
|
+
getActiveElement() {
|
|
1766
|
+
const widgetType = this.nativeElement.getAttribute('widgettype');
|
|
1767
|
+
switch (widgetType) {
|
|
1768
|
+
case 'select':
|
|
1769
|
+
return this.nativeElement.querySelector('select');
|
|
1770
|
+
case 'textarea':
|
|
1771
|
+
return this.nativeElement.querySelector('textarea');
|
|
1772
|
+
default:
|
|
1773
|
+
return this.nativeElement.querySelector('input');
|
|
1774
|
+
}
|
|
1775
|
+
}
|
|
1776
|
+
setAriaAttributes() {
|
|
1777
|
+
const element = this.getActiveElement();
|
|
1760
1778
|
if (this.ngform.controls[this._fieldName].invalid && this.ngform.controls[this._fieldName].touched && this.form.isUpdateMode) {
|
|
1761
1779
|
this.nativeElement.setAttribute('__errormsg', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
1762
|
-
|
|
1763
|
-
|
|
1780
|
+
element === null || element === void 0 ? void 0 : element.setAttribute('aria-invalid', `${this.ngform.controls[this._fieldName].invalid}`);
|
|
1781
|
+
element === null || element === void 0 ? void 0 : element.setAttribute('aria-describedby', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
1764
1782
|
}
|
|
1765
1783
|
else {
|
|
1766
1784
|
this.nativeElement.removeAttribute('__errormsg');
|
|
1767
|
-
|
|
1768
|
-
|
|
1785
|
+
element === null || element === void 0 ? void 0 : element.removeAttribute('aria-invalid');
|
|
1786
|
+
element === null || element === void 0 ? void 0 : element.removeAttribute('aria-describedby');
|
|
1769
1787
|
}
|
|
1788
|
+
}
|
|
1789
|
+
_onBlurField($evt) {
|
|
1790
|
+
$($evt.target).closest('.live-field').removeClass('active');
|
|
1791
|
+
this.nativeElement.querySelector('p.text-danger');
|
|
1792
|
+
// Fix for [WMS-23959]: ADA issue - adding aria-describedby, aria-invalid, __errormsg attributes only when the form field is invalid , else removing the attributes
|
|
1793
|
+
this.setAriaAttributes();
|
|
1770
1794
|
this._activeField = false;
|
|
1771
1795
|
this._triggeredByUser = false;
|
|
1772
1796
|
this._clicktriggeredByUser = false;
|
|
@@ -1965,7 +1989,6 @@
|
|
|
1965
1989
|
}
|
|
1966
1990
|
// On field value change, propagate event to parent form
|
|
1967
1991
|
onValueChange(val) {
|
|
1968
|
-
var _a, _b, _c, _d;
|
|
1969
1992
|
if (!this.isDestroyed) {
|
|
1970
1993
|
const captionEl = $(this.nativeElement).find('.caption-floating');
|
|
1971
1994
|
if (captionEl.length > 0) {
|
|
@@ -1976,16 +1999,7 @@
|
|
|
1976
1999
|
this.app.notify('captionPositionAnimate', { displayVal: hasValue, nativeEl: captionEl, isSelectMultiple: this.formWidget && this.formWidget.multiple, isFocused: this._activeField });
|
|
1977
2000
|
}
|
|
1978
2001
|
// Fix for [WMS-23959]: ADA issue - adding aria-describedby, aria-invalid, __errormsg attributes only when the form field is invalid , else removing the attributes
|
|
1979
|
-
|
|
1980
|
-
this.nativeElement.setAttribute('__errormsg', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
1981
|
-
(_a = this.nativeElement.querySelector('input')) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-invalid', this._triggeredByUser && this.ngform.controls[this._fieldName].invalid ? 'true' : 'false');
|
|
1982
|
-
(_b = this.nativeElement.querySelector('input')) === null || _b === void 0 ? void 0 : _b.setAttribute('aria-describedby', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
1983
|
-
}
|
|
1984
|
-
else {
|
|
1985
|
-
this.nativeElement.removeAttribute('__errormsg');
|
|
1986
|
-
(_c = this.nativeElement.querySelector('input')) === null || _c === void 0 ? void 0 : _c.removeAttribute('aria-invalid');
|
|
1987
|
-
(_d = this.nativeElement.querySelector('input')) === null || _d === void 0 ? void 0 : _d.removeAttribute('aria-describedby');
|
|
1988
|
-
}
|
|
2002
|
+
this.setAriaAttributes();
|
|
1989
2003
|
this.form.onFieldValueChange(this, val);
|
|
1990
2004
|
this.notifyChanges();
|
|
1991
2005
|
// Do mark as touched, only incase when user has entered an input but not through the script. Hence added mousedown event check
|
|
@@ -66,20 +66,38 @@ export class FormFieldDirective extends StylableComponent {
|
|
|
66
66
|
this._activeField = true;
|
|
67
67
|
$($evt.target).closest('.live-field').addClass('active');
|
|
68
68
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
69
|
+
// Function to get the active element markup based on widget type
|
|
70
|
+
getActiveElement() {
|
|
71
|
+
const widgetType = this.nativeElement.getAttribute('widgettype');
|
|
72
|
+
switch (widgetType) {
|
|
73
|
+
case 'select':
|
|
74
|
+
return this.nativeElement.querySelector('select');
|
|
75
|
+
break;
|
|
76
|
+
case 'textarea':
|
|
77
|
+
return this.nativeElement.querySelector('textarea');
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
return this.nativeElement.querySelector('input');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
setAriaAttributes() {
|
|
84
|
+
const element = this.getActiveElement();
|
|
73
85
|
if (this.ngform.controls[this._fieldName].invalid && this.ngform.controls[this._fieldName].touched && this.form.isUpdateMode) {
|
|
74
86
|
this.nativeElement.setAttribute('__errormsg', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
75
|
-
|
|
76
|
-
|
|
87
|
+
element?.setAttribute('aria-invalid', `${this.ngform.controls[this._fieldName].invalid}`);
|
|
88
|
+
element?.setAttribute('aria-describedby', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
77
89
|
}
|
|
78
90
|
else {
|
|
79
91
|
this.nativeElement.removeAttribute('__errormsg');
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
element?.removeAttribute('aria-invalid');
|
|
93
|
+
element?.removeAttribute('aria-describedby');
|
|
82
94
|
}
|
|
95
|
+
}
|
|
96
|
+
_onBlurField($evt) {
|
|
97
|
+
$($evt.target).closest('.live-field').removeClass('active');
|
|
98
|
+
const ele = this.nativeElement.querySelector('p.text-danger');
|
|
99
|
+
// Fix for [WMS-23959]: ADA issue - adding aria-describedby, aria-invalid, __errormsg attributes only when the form field is invalid , else removing the attributes
|
|
100
|
+
this.setAriaAttributes();
|
|
83
101
|
this._activeField = false;
|
|
84
102
|
this._triggeredByUser = false;
|
|
85
103
|
this._clicktriggeredByUser = false;
|
|
@@ -288,16 +306,7 @@ export class FormFieldDirective extends StylableComponent {
|
|
|
288
306
|
this.app.notify('captionPositionAnimate', { displayVal: hasValue, nativeEl: captionEl, isSelectMultiple: this.formWidget && this.formWidget.multiple, isFocused: this._activeField });
|
|
289
307
|
}
|
|
290
308
|
// Fix for [WMS-23959]: ADA issue - adding aria-describedby, aria-invalid, __errormsg attributes only when the form field is invalid , else removing the attributes
|
|
291
|
-
|
|
292
|
-
this.nativeElement.setAttribute('__errormsg', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
293
|
-
this.nativeElement.querySelector('input')?.setAttribute('aria-invalid', this._triggeredByUser && this.ngform.controls[this._fieldName].invalid ? 'true' : 'false');
|
|
294
|
-
this.nativeElement.querySelector('input')?.setAttribute('aria-describedby', `${this.nativeElement.getAttribute('__validationId')}`);
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
this.nativeElement.removeAttribute('__errormsg');
|
|
298
|
-
this.nativeElement.querySelector('input')?.removeAttribute('aria-invalid');
|
|
299
|
-
this.nativeElement.querySelector('input')?.removeAttribute('aria-describedby');
|
|
300
|
-
}
|
|
309
|
+
this.setAriaAttributes();
|
|
301
310
|
this.form.onFieldValueChange(this, val);
|
|
302
311
|
this.notifyChanges();
|
|
303
312
|
// Do mark as touched, only incase when user has entered an input but not through the script. Hence added mousedown event check
|
|
@@ -550,4 +559,4 @@ FormFieldDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: FormFiel
|
|
|
550
559
|
type: HostListener,
|
|
551
560
|
args: ['click', ['$event']]
|
|
552
561
|
}] }); })();
|
|
553
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFDSCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFNBQVMsRUFDVCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLFFBQVEsRUFDUixHQUFHLEVBQ0gsSUFBSSxFQUNKLGNBQWMsRUFFakIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsSyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7QUFJbEQsb0ZBQW9GO0FBQ3BGLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO0lBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7SUFDZixPQUFPLEVBQUcsU0FBUztJQUNuQixPQUFPLEVBQUcsU0FBUztJQUNuQixPQUFPLEVBQUcsU0FBUztDQUN0QixDQUFDO0FBV0YsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGlCQUFpQjtJQW9FaEIsZ0JBQWdCLENBQUMsS0FBb0I7UUFDdEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRWtDLFdBQVcsQ0FBQyxLQUFLO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDdEMsQ0FBQztJQUdELFlBQ0ksR0FBYSxFQUNiLElBQW1CLEVBQ25CLEVBQWUsRUFDZixRQUFrQixFQUNsQixHQUFRLEVBQ0ksVUFBeUIsRUFDUixhQUFxQixFQUN2QixXQUFXLEVBQ0QscUJBQTZCLEVBQ2xDLGdCQUF3QixFQUMvQixXQUFXLEVBQ2pCLElBQUksRUFDWSxtQkFBMkIsRUFDNUMsR0FBRyxFQUNFLE9BQU8sRUFDTCxTQUFTLEVBQ0wsYUFBYSxFQUNiLGFBQWEsRUFDakIsUUFBb0I7UUFFN0MsTUFBTSxhQUFhLEdBQUc7WUFDbEIsVUFBVSxFQUFFLGVBQWU7WUFDM0IsU0FBUyxFQUFFLEVBQUU7WUFDYixhQUFhLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtTQUNoRixDQUFDO1FBQ0YsSUFBSSxTQUFTLEdBQWEsSUFBSSxDQUFDO1FBRS9CLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFDL0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ25ELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzlCO1FBRUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQUk7UUFDYixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUQsbUtBQW1LO1FBQ25LLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sSUFBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzNILElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM1SCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN2STthQUFNO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVztRQUMxQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQy9CLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLGtFQUFrRTtZQUNsRSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNmLE9BQU87YUFDVjtTQUNKO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsVUFBVSxFQUFFLFdBQVc7U0FDMUIsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxjQUFjO1FBQ1YsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFBO1FBQzNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO3FCQUNuRTtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDckU7WUFDRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckUsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNqSSxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELGFBQWE7UUFDVCxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDcEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxTQUFTLENBQUMsTUFBTTtRQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsZUFBZSxDQUFDLGVBQWdCO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxrQkFBa0IsQ0FBQyxVQUFVO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLGFBQWEsQ0FBQyxVQUFVO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUc7UUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBRTtRQUNOLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELGlGQUFpRjtJQUNqRixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRztRQUNyQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRztRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVwQyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7WUFDcEIsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUVELHNFQUFzRTtRQUN0RSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUMzQyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2FBQ25DO1lBQ0QsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUIsZ0RBQWdEO1FBQ2hELElBQUksR0FBRyxLQUFLLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsUUFBUSxHQUFHLEVBQUU7WUFDVCxLQUFLLGNBQWM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlDLE1BQU07WUFDVixLQUFLLGlCQUFpQjtnQkFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDcEMsTUFBTTtZQUNWLEtBQUssZ0JBQWdCO2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNO1lBQ1YsS0FBSyxVQUFVO2dCQUNYLDRFQUE0RTtnQkFDNUUsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQzlCO1lBQ0wsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE1BQU07Z0JBQ1AsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLGFBQWE7Z0JBQ2QsSUFBSSxFQUFFLEVBQUU7b0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUM1QztnQkFDRCxNQUFNO1lBQ1YsS0FBSyxjQUFjO2dCQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixNQUFNO1lBQ1YsS0FBSyxVQUFVO2dCQUNaLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN2QixNQUFNO1NBQ2I7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxHQUFHO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxHQUFHO1FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsR0FBRztRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQzNELENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ3hELENBQUM7SUFFRCxvQkFBb0I7SUFDcEIsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQ3pELENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsYUFBYTtRQUNULE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzlCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztTQUMvQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELGFBQWEsQ0FBQyxHQUFHO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsTUFBTSxTQUFTLEdBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNuRSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QiwwRUFBMEU7Z0JBQzFFLDBGQUEwRjtnQkFDMUYscUhBQXFIO2dCQUVySCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUV0SixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQzthQUN2TDtZQUNGLG1LQUFtSztZQUNsSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDMUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25LLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3ZJO2lCQUFNO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ2xGO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLCtIQUErSDtZQUMvSCwwSkFBMEo7WUFDMUoscUdBQXFHO1lBQ3JHLG9KQUFvSjtZQUVwSixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQy9ELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTtvQkFDeEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUN6RDtnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQzthQUN0RDtTQUNKO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFNO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQztZQUNqRCxvRUFBb0U7WUFDcEUsOEVBQThFO1lBQzlFLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ25DO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQU0sSUFBWSxDQUFDLFFBQVEsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUksSUFBWSxDQUFDLFFBQVEsQ0FBQzthQUNyRDtTQUNKO0lBQ0wsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxvQkFBb0IsQ0FBQyxHQUFHO1FBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUM1RDs7a0ZBRWtFO2dCQUNsRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZGO2lCQUFNO2dCQUNILFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQzVCO1NBQ0o7YUFBTTtZQUNILG9EQUFvRDtZQUNwRCxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQy9GO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTO1FBQ2hDLE1BQU0sTUFBTSxHQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDL0IsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLGlCQUFpQjtRQUVyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2hFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3BELFVBQVUsR0FBRyxHQUFHLFNBQVMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxFQUFFLENBQUM7YUFDYjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztTQUNoQzthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7YUFDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUU1RSxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYTthQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRTdFLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNqRSxnREFBZ0Q7WUFDaEQsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVk7aUJBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIscURBQXFEO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkgsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXJCLHVGQUF1RjtZQUN2RixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzFELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFdkYsa0RBQWtEO1lBQ2xELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFO2dCQUMzQyxJQUFJLFFBQVEsQ0FBQztnQkFDYiwwREFBMEQ7Z0JBQzFELFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDaEc7WUFDRCxJQUFJLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztpQkFDNUI7YUFDSjtpQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztpQkFDNUI7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7aUJBQzVCO2FBQ0o7WUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBRTdDLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUxQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQTNrQk0sa0NBQWUsR0FBRyxhQUFhLEVBQUUsQ0FBQztvRkFEaEMsa0JBQWtCLG9QQW9GWixnQkFBZ0Isd0JBQ2hCLGNBQWMsd0JBQ2Qsd0JBQXdCLHdCQUN4QixtQkFBbUIsd0JBQ25CLFlBQVksd0JBQ1osTUFBTSx3QkFDTixzQkFBc0Isd0JBQ3RCLEtBQUssd0JBQ0wsVUFBVSx3QkFDVixZQUFZLHdCQUNaLGdCQUFnQix3QkFDaEIsZ0JBQWdCLHdCQUNYLE9BQU87cUVBaEdsQixrQkFBa0I7Ozs7Ozs7O3lHQUFsQiw0QkFBd0Isb0ZBQXhCLHVCQUFtQjtxRUFOakI7WUFDUCxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQztZQUN0QyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1lBQ3RELEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztTQUNuRTt1RkFFUSxrQkFBa0I7Y0FUOUIsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixRQUFRLEVBQUUsYUFBYTtnQkFDdkIsU0FBUyxFQUFFO29CQUNQLGtCQUFrQixvQkFBb0I7b0JBQ3RDLFNBQVMscUJBQXFCLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDdEQsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO2lCQUNuRTthQUNKOztzQkFvRlEsUUFBUTs7c0JBQ1IsU0FBUzt1QkFBQyxnQkFBZ0I7O3NCQUMxQixTQUFTO3VCQUFDLGNBQWM7O3NCQUN4QixTQUFTO3VCQUFDLHdCQUF3Qjs7c0JBQ2xDLFNBQVM7dUJBQUMsbUJBQW1COztzQkFDN0IsU0FBUzt1QkFBQyxZQUFZOztzQkFDdEIsU0FBUzt1QkFBQyxNQUFNOztzQkFDaEIsU0FBUzt1QkFBQyxzQkFBc0I7O3NCQUNoQyxTQUFTO3VCQUFDLEtBQUs7O3NCQUNmLFNBQVM7dUJBQUMsVUFBVTs7c0JBQ3BCLFNBQVM7dUJBQUMsWUFBWTs7c0JBQ3RCLFNBQVM7dUJBQUMsZ0JBQWdCOztzQkFDMUIsU0FBUzt1QkFBQyxnQkFBZ0I7O3NCQUMxQixJQUFJOztzQkFBSSxNQUFNO3VCQUFDLE9BQU87d0JBN0ZpQixVQUFVO2tCQUFyRCxZQUFZO21CQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7WUFDWCxhQUFhO2tCQUEzQyxZQUFZO21CQUFDLGVBQWU7WUFnRVEsZ0JBQWdCO2tCQUFwRCxZQUFZO21CQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUlBLFdBQVc7a0JBQTdDLFlBQVk7bUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQXR0cmlidXRlLCBDb250ZW50Q2hpbGQsIERpcmVjdGl2ZSwgSW5qZWN0LCBJbmplY3RvciwgT25Jbml0LCBPcHRpb25hbCwgU2VsZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIGRlYm91bmNlLFxuICAgIEZvcm1XaWRnZXRUeXBlLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc01vYmlsZSxcbiAgICBhZGRGb3JJZEF0dHJpYnV0ZXMsXG4gICAgVmlld3BvcnQsXG4gICAgQXBwLFxuICAgIG5vb3AsXG4gICAgaXNEYXRlVGltZVR5cGUsXG4gICAgaXNNb2JpbGVBcHBcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgQ29udGV4dCwgZ2V0RGVmYXVsdFZpZXdNb2RlV2lkZ2V0LCBnZXRFdmFsdWF0ZWREYXRhLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgQmFzZUZpZWxkVmFsaWRhdGlvbnMsIFN0eWxhYmxlQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9saXN0JztcblxuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vZm9ybS1maWVsZC5wcm9wcyc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS5jb21wb25lbnQnO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQ7XG5cbi8vIEN1c3RvbSB2YWxpZGF0b3IgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9yLCBpZiBzZXRWYWxpZGF0aW9uTWVzc2FnZSBtZXRob2QgaXMgdXNlZFxuY29uc3QgY3VzdG9tVmFsaWRhdG9yRm4gPSAoKSA9PiB7XG4gICAgcmV0dXJuIHsgY3VzdG9tOiB0cnVlIH07XG59O1xuXG5jb25zdCBGSUxFX1RZUEVTID0ge1xuICAgICdpbWFnZScgOiAnaW1hZ2UvKicsXG4gICAgJ3ZpZGVvJyA6ICd2aWRlby8qJyxcbiAgICAnYXVkaW8nIDogJ2F1ZGlvLyonXG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bUZvcm1GaWVsZF0nLFxuICAgIGV4cG9ydEFzOiAnd21Gb3JtRmllbGQnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoRm9ybUZpZWxkRGlyZWN0aXZlKSxcbiAgICAgICAgcHJvdmlkZUFzKEZvcm1GaWVsZERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICB7cHJvdmlkZTogQ29udGV4dCwgdXNlRmFjdG9yeTogKCkgPT4geyByZXR1cm4ge30gfSwgbXVsdGk6IHRydWV9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRmllbGREaXJlY3RpdmUgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2Zvcm1XaWRnZXQnLCB7c3RhdGljOiB0cnVlfSkgZm9ybVdpZGdldDtcbiAgICBAQ29udGVudENoaWxkKCdmb3JtV2lkZ2V0TWF4JykgZm9ybVdpZGdldE1heDtcblxuICAgIHByaXZhdGUgZmI7XG4gICAgcHJpdmF0ZSB2aWV3cG9ydDtcblxuICAgIC8vIGV4Y2x1ZGVQcm9wcyBpcyB1c2VkIHRvIHN0b3JlIHRoZSBwcm9wcyB0aGF0IHNob3VsZCBub3QgYmUgYXBwbGllZCBvbiBpbm5lciB3aWRnZXRcbiAgICBwcml2YXRlIGV4Y2x1ZGVQcm9wcztcbiAgICBwcml2YXRlIF92YWxpZGF0b3JzO1xuICAgIHByaXZhdGUgX29sZFVwbG9hZFZhbDtcblxuICAgIG5nZm9ybTogRm9ybUdyb3VwO1xuICAgIGRlZmF1bHR2YWx1ZTtcbiAgICBkaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICBkaXNwbGF5ZmllbGQ7XG4gICAgZGlzcGxheWxhYmVsO1xuICAgIGRpc3BsYXluYW1lO1xuICAgIGdlbmVyYXRvcjtcbiAgICBrZXk7XG4gICAgdGFyZ2V0O1xuICAgIGJpbmRpbmc7XG4gICAgd2lkZ2V0dHlwZTtcbiAgICBjbGFzcztcbiAgICByZWFkb25seTtcbiAgICBzaG93O1xuICAgIHR5cGU7XG4gICAgaXNEYXRhU2V0Qm91bmQ7XG4gICAgdmlld21vZGV3aWRnZXQ7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgYmluZGRpc3BsYXlleHByZXNzaW9uO1xuICAgIGJpbmRDaGlwY2xhc3M7XG4gICAgZGlzcGxheWltYWdlc3JjOiBzdHJpbmc7XG4gICAgYmluZGRpc3BsYXlpbWFnZXNyYztcbiAgICBiaW5kZGlzcGxheWxhYmVsO1xuICAgIGZvcm07XG4gICAgZmlsZXR5cGU7XG4gICAgZXh0ZW5zaW9ucztcbiAgICBwZXJtaXR0ZWQ7XG4gICAgcGVyaW9kO1xuICAgIGlzUmFuZ2U7XG4gICAgbmFtZTtcbiAgICAvLyBWYWxpZGF0aW9uIHByb3BlcnRpZXNcbiAgICByZXF1aXJlZDtcbiAgICBtYXhjaGFycztcbiAgICBtaW52YWx1ZTtcbiAgICBtYXh2YWx1ZTtcbiAgICByZWdleHA7XG4gICAgZmllbGREZWZDb25maWc7XG4gICAgcGxhY2Vob2xkZXI7XG4gICAgaW5wdXR0eXBlO1xuICAgIHZhbGlkYXRpb25tZXNzYWdlO1xuXG4gICAgcHVibGljIF9maWVsZE5hbWU7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZVNldFVwVmFsaWRhdG9ycztcbiAgICBwcml2YXRlIF9pbml0UHJvcHNSZXM7XG4gICAgcHJpdmF0ZSBwYXJlbnRMaXN0O1xuICAgIHByaXZhdGUgc2hvd1BlbmRpbmdTcGlubmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2FjdGl2ZUZpZWxkOiBib29sZWFuO1xuICAgIHByaXZhdGUgbm90aWZ5Rm9yRmllbGRzOiBhbnk7XG4gICAgcHJpdmF0ZSBmaWVsZFZhbGlkYXRpb25zO1xuICAgIHByaXZhdGUgX3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9jbGlja3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcbiAgICBwcml2YXRlIGFwcDogQXBwO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2NsaWNrdHJpZ2dlcmVkQnlVc2VyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRm9jdXNlZDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgZm9ybTogRm9ybUNvbXBvbmVudCxcbiAgICAgICAgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICB2aWV3cG9ydDogVmlld3BvcnQsXG4gICAgICAgIGFwcDogQXBwLFxuICAgICAgICBAT3B0aW9uYWwoKSBwYXJlbnRMaXN0OiBMaXN0Q29tcG9uZW50LFxuICAgICAgICBAQXR0cmlidXRlKCdjaGlwY2xhc3MuYmluZCcpIGJpbmRDaGlwY2xhc3M6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgYmluZGRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlleHByZXNzaW9uLmJpbmQnKSBiaW5kZGlzcGxheWV4cHJlc3Npb246IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWxhYmVsLmJpbmQnKSBiaW5kZGlzcGxheWxhYmVsOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3dpZGdldHR5cGUnKSBfd2lkZ2V0VHlwZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbmFtZScpIG5hbWUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2Rpc3BsYXlpbWFnZXNyYy5iaW5kJykgYmluZGRpc3BsYXlpbWFnZXNyYzogU3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdrZXknKSBrZXksXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2lzLXJhbmdlJykgaXNSYW5nZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgncGMtZGlzcGxheScpIHBjRGlzcGxheSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbW9iaWxlLWRpc3BsYXknKSBtb2JpbGVEaXNwbGF5LFxuICAgICAgICBAQXR0cmlidXRlKCd0YWJsZXQtZGlzcGxheScpIHRhYmxldERpc3BsYXksXG4gICAgICAgIEBTZWxmKCkgQEluamVjdChDb250ZXh0KSBjb250ZXh0czogQXJyYXk8YW55PlxuICAgICkge1xuICAgICAgICBjb25zdCBXSURHRVRfQ09ORklHID0ge1xuICAgICAgICAgICAgd2lkZ2V0VHlwZTogJ3dtLWZvcm0tZmllbGQnLFxuICAgICAgICAgICAgaG9zdENsYXNzOiAnJyxcbiAgICAgICAgICAgIHdpZGdldFN1YlR5cGU6ICd3bS1mb3JtLWZpZWxkLScgKyAoX3dpZGdldFR5cGUgfHwgRm9ybVdpZGdldFR5cGUuVEVYVCkudHJpbSgpXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXNvbHZlRm46IEZ1bmN0aW9uID0gbm9vcDtcblxuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIG5ldyBQcm9taXNlKHJlcyA9PiByZXNvbHZlRm4gPSByZXMpKTtcbiAgICAgICAgdGhpcy5faW5pdFByb3BzUmVzID0gcmVzb2x2ZUZuO1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZyA9IHt9O1xuICAgICAgICB0aGlzLmNsYXNzID0gJyc7XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjID0gYmluZGRpc3BsYXlpbWFnZXNyYztcbiAgICAgICAgdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24gPSBiaW5kZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuYmluZENoaXBjbGFzcyA9IGJpbmRDaGlwY2xhc3M7XG4gICAgICAgIHRoaXMuYmluZGRpc3BsYXlsYWJlbCA9IGJpbmRkaXNwbGF5bGFiZWw7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgICAgIHRoaXMuZmIgPSBmYjtcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgICAgICB0aGlzLl9maWVsZE5hbWUgPSBrZXkgfHwgbmFtZTtcbiAgICAgICAgdGhpcy5pc1JhbmdlID0gaXNSYW5nZTtcbiAgICAgICAgdGhpcy5leGNsdWRlUHJvcHMgPSBuZXcgU2V0KFsndHlwZScsICduYW1lJ10pO1xuICAgICAgICB0aGlzLndpZGdldHR5cGUgPSBfd2lkZ2V0VHlwZTtcbiAgICAgICAgdGhpcy5wYXJlbnRMaXN0ID0gcGFyZW50TGlzdDtcbiAgICAgICAgdGhpcy5ub3RpZnlGb3JGaWVsZHMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCB8fCB0aGlzLiRlbGVtZW50LmF0dHIoJ2RhdGFzZXQnKSkge1xuICAgICAgICAgICAgdGhpcy5pc0RhdGFTZXRCb3VuZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0c1swXS5fb25Gb2N1c0ZpZWxkID0gdGhpcy5fb25Gb2N1c0ZpZWxkLmJpbmQodGhpcyk7XG4gICAgICAgIGNvbnRleHRzWzBdLl9vbkJsdXJGaWVsZCA9IHRoaXMuX29uQmx1ckZpZWxkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLnNldFVwVmFsaWRhdG9ycygpLCA1MDApO1xuICAgIH1cblxuICAgIF9vbkZvY3VzRmllbGQoJGV2dCkge1xuICAgICAgICB0aGlzLl9hY3RpdmVGaWVsZCA9IHRydWU7XG4gICAgICAgICQoJGV2dC50YXJnZXQpLmNsb3Nlc3QoJy5saXZlLWZpZWxkJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgfVxuXG4gICAgX29uQmx1ckZpZWxkKCRldnQpIHtcbiAgICAgICAgJCgkZXZ0LnRhcmdldCkuY2xvc2VzdCgnLmxpdmUtZmllbGQnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIGNvbnN0IGVsZSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdwLnRleHQtZGFuZ2VyJyk7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzk1OV06IEFEQSBpc3N1ZSAtIGFkZGluZyBhcmlhLWRlc2NyaWJlZGJ5LCBhcmlhLWludmFsaWQsIF9fZXJyb3Jtc2cgYXR0cmlidXRlcyBvbmx5IHdoZW4gdGhlIGZvcm0gZmllbGQgaXMgaW52YWxpZCAsIGVsc2UgcmVtb3ZpbmcgdGhlIGF0dHJpYnV0ZXNcbiAgICAgICAgaWYgKHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0uaW52YWxpZCAgJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS50b3VjaGVkICYmIHRoaXMuZm9ybS5pc1VwZGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19fZXJyb3Jtc2cnLCBgJHt0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfX3ZhbGlkYXRpb25JZCcpfWApO1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7dGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lXS5pbnZhbGlkfWApO1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk/LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIGAke3RoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ19fdmFsaWRhdGlvbklkJyl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdfX2Vycm9ybXNnJyk7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWludmFsaWQnKTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3RpdmVGaWVsZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2xpY2t0cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBFeHByZXNzaW9uIHRvIGJlIGV2YWx1YXRlZCBpbiB2aWV3IG1vZGUgb2YgZm9ybSBmaWVsZFxuICAgIGV2YWx1YXRlRXhwcihvYmplY3QsIGRpc3BsYXlGaWVsZCwgZGlzcGxheUV4cHIpIHtcbiAgICAgICAgaWYgKCFkaXNwbGF5RXhwciB8fCAhZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSBPYmplY3Qua2V5cyhvYmplY3QpWzBdO1xuICAgICAgICAgICAgLy8gSWYgZGF0YXNldCBpcyBub3QgcmVhZHksIGRpc3BsYXkgZXhwcmVzc2lvbiB3aWxsIG5vdCBiZSBkZWZpbmVkXG4gICAgICAgICAgICBpZiAoIWRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RXZhbHVhdGVkRGF0YShvYmplY3QsIHtcbiAgICAgICAgICAgIGZpZWxkOiBkaXNwbGF5RmllbGQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBkaXNwbGF5RXhwclxuICAgICAgICB9LCB0aGlzLnZpZXdQYXJlbnQpO1xuICAgIH1cblxuICAgIC8vIEV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIGluIHZpZXcgbW9kZSBvZiBmb3JtIGZpZWxkXG4gICAgZ2V0RGlzcGxheUV4cHIoKSB7XG4gICAgICAgIGNvbnN0IGNhcHRpb24gPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGQgPSB0aGlzLmRpc3BsYXlmaWVsZCB8fCB0aGlzLmRpc3BsYXlsYWJlbFxuICAgICAgICBjb25zdCBkaXNwbGF5RXhwciA9IHRoaXMuZGlzcGxheWV4cHJlc3Npb247XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2godmFsdWUsIG9iaiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24ucHVzaCh0aGlzLmV2YWx1YXRlRXhwcihvYmosIGRpc3BsYXlGaWVsZCwgZGlzcGxheUV4cHIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uLnB1c2godGhpcy5ldmFsdWF0ZUV4cHIodmFsdWUsIGRpc3BsYXlGaWVsZCwgZGlzcGxheUV4cHIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfLmpvaW4oY2FwdGlvbiwgJywnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpID8gJycgOiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIGdldENhcHRpb24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWUgPT09IG51bGwpID8gKF8uZ2V0KHRoaXMuZm9ybS5kYXRhb3V0cHV0LCB0aGlzLl9maWVsZE5hbWUpIHx8ICcnKSA6IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTm90aWZpZXMgY2hhbmdlcyB0byBvYnNlcnZpbmcgdmFsaWRhdGlvbiBmaWVsZHNcbiAgICBub3RpZnlDaGFuZ2VzKCkge1xuICAgICAgICBfLmZvckVhY2godGhpcy5ub3RpZnlGb3JGaWVsZHMsIGZpZWxkID0+IHtcbiAgICAgICAgICAgIGZpZWxkLmZpZWxkVmFsaWRhdGlvbnMudmFsaWRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXJzIG9ic2VydmVyIG9mIHZhbGlkYXRpb24gZmllbGRzXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMub2JzZXJ2ZU9uKGZpZWxkcywgJ2Zvcm1maWVsZHMnKTtcbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2V0dXAgdmFsaWRhdG9ycyBmb3IgcmVhY3RpdmUgZm9ybSBjb250cm9sXG4gICAgc2V0VXBWYWxpZGF0b3JzKGN1c3RvbVZhbGlkYXRvcj8pIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGN1c3RvbSBhc3luYyB2YWxpZGF0aW9uIG9uIHRoZSBmb3JtIGZpZWxkXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldEFzeW5jVmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IGFuZCBjdXN0b20gc3luYyB2YWxpZGF0aW9uIG9uIHRoZSBmb3JtIGZpZWxkXG4gICAgc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXQgdGhlIHByb3BlcnRpZXMgb24gaW5uZXIgZm9ybSB3aWRnZXRcbiAgICBzZXRGb3JtV2lkZ2V0KGtleSwgdmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LndpZGdldCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0LndpZGdldFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYm91bmRGbihmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2V0IHRoZSBwcm9wZXJ0aWVzIG9uIGlubmVyIG1heCBmb3JtIHdpZGdldCAod2hlbiByYW5nZSBpcyBzZWxlY3RlZClcbiAgICBzZXRNYXhGb3JtV2lkZ2V0KGtleSwgdmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm1XaWRnZXRNYXgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldE1heC53aWRnZXRba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIGNvbnN0IGlzRm9ybURpcnR5ID0gdGhpcy5mb3JtLmRpcnR5O1xuXG4gICAgICAgIGlmIChrZXkgIT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhjbHVkZVByb3BzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcyB1cGxvYWQgd2lkZ2V0IGlzIGFuIEhUTUwgd2lkZ2V0LCBvbmx5IHJlcXVpcmVkIHByb3BlcnR5IGlzIHNldHVwXG4gICAgICAgIGlmICh0aGlzLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldChrZXksIG52KTtcblxuICAgICAgICAvLyBQbGFjZWhvbGRlciBzaG91bGQgbm90IGJlIHNldHVwIG9uIG1heCB3aWRnZXRcbiAgICAgICAgaWYgKGtleSAhPT0gJ3BsYWNlaG9sZGVyJykge1xuICAgICAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHR2YWx1ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLm9uRmllbGREZWZhdWx0VmFsdWVDaGFuZ2UodGhpcywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWF4ZGVmYXVsdHZhbHVlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KCdkYXRhdmFsdWUnLCBudik7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLm9uTWF4RGVmYXVsdFZhbHVlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhwbGFjZWhvbGRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KCdwbGFjZWhvbGRlcicsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgICAvLyBXTVMtMTg5MDYgOiBEbyBub3QgbWFrZSBmb3JtIGFzIGRpcnR5IGR1cmluZyByZXF1aXJlZCBwcm9wIGluaXRpYWxpemF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGlzRm9ybURpcnR5ICE9PSB0aGlzLmZvcm0uZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWF4Y2hhcnMnOlxuICAgICAgICAgICAgY2FzZSAnbWludmFsdWUnOlxuICAgICAgICAgICAgY2FzZSAnbWF4dmFsdWUnOlxuICAgICAgICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwcmltYXJ5LWtleSc6XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXRQcmltYXJ5S2V5KHRoaXMuX2ZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGlzcGxheS1uYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXluYW1lID0gbnY7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZWFkb25seSc6XG4gICAgICAgICAgICAgICB0aGlzLnNldFJlYWRPbmx5U3RhdGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldChrZXksIG52KTtcbiAgICAgICAgdGhpcy5zZXRNYXhGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBnZXQgZGF0YXZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IGRhdGF2YWx1ZSh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2wgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2wuc2V0VmFsdWUodmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXZhbHVlO1xuICAgIH1cblxuICAgIHNldCB2YWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0TWF4ICYmIHRoaXMuZm9ybVdpZGdldE1heC5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IG1heFZhbHVlKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fbWF4Q29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fbWF4Q29udHJvbC5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgbWluVmFsdWUodmFsKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSByZWFjdGl2ZSBmb3JtIGNvbnRyb2xcbiAgICBnZXQgX2NvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5nZm9ybSAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcmVhY3RpdmUgbWF4IGZvcm0gY29udHJvbFxuICAgIGdldCBfbWF4Q29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZSArICdfbWF4J107XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBkaXNwbGF5VmFsdWVcbiAgICBnZXQgZGlzcGxheVZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5kaXNwbGF5VmFsdWU7XG4gICAgfVxuXG4gICAgLy9HZXQgdGhlIHRpbWVzdGFtcFxuICAgIGdldCB0aW1lc3RhbXAoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQudGltZXN0YW1wO1xuICAgIH1cblxuICAgIC8vR2V0IHRoZSBjaGFybGVuZ3RoXG4gICAgZ2V0IGNoYXJsZW5ndGgoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQuY2hhcmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlYWN0aXZlIGZvcm0gY29udHJvbFxuICAgIGNyZWF0ZUNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmNvbnRyb2wodW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWxpZGF0b3JzOiB0aGlzLl92YWxpZGF0b3JzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE9uIGZpZWxkIHZhbHVlIGNoYW5nZSwgcHJvcGFnYXRlIGV2ZW50IHRvIHBhcmVudCBmb3JtXG4gICAgb25WYWx1ZUNoYW5nZSh2YWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICBjb25zdCBjYXB0aW9uRWwgPSAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5jYXB0aW9uLWZsb2F0aW5nJyk7XG4gICAgICAgICAgICBpZiAoY2FwdGlvbkVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBoYXNWYWx1ZSBjaGVjayB3aGV0aGVyIGZvcm0tZmllbGQgaGFzIGEgdmFsdWUgZnJvbSBwYXNzZWQgdmFsIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgIC8vIEFkZGVkIHNhbml0eSBjaGVjayBvbiB2YWwgdG8gc3VwcG9ydCB2YWx1ZXMgbGlrZWQgMCwgZmFsc2UgZXRjIGFzIGlucHV0IHZhbCAtIFdNUy0yMDA4NFxuICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIGlucHV0IHZhbHVlIG9yIC13ZWJraXQtYXV0b2ZpbGwgdG8gc2VlIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBhdXRvZmlsbGVkIGZpZWxkcyAtIFdNUy0yMDE0MVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVmFsdWUgPSAoKGlzRGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gJycgJiYgdmFsICE9PSBudWxsKSB8fCBjYXB0aW9uRWwuZmluZCgnaW5wdXQnKS52YWwoKSkgfHwgY2FwdGlvbkVsLmZpbmQoJ2lucHV0Oi13ZWJraXQtYXV0b2ZpbGwnKS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ2NhcHRpb25Qb3NpdGlvbkFuaW1hdGUnLCB7ZGlzcGxheVZhbDogaGFzVmFsdWUsIG5hdGl2ZUVsOiBjYXB0aW9uRWwsIGlzU2VsZWN0TXVsdGlwbGU6IHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQubXVsdGlwbGUsIGlzRm9jdXNlZDogdGhpcy5fYWN0aXZlRmllbGR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTIzOTU5XTogQURBIGlzc3VlIC0gYWRkaW5nIGFyaWEtZGVzY3JpYmVkYnksIGFyaWEtaW52YWxpZCwgX19lcnJvcm1zZyBhdHRyaWJ1dGVzIG9ubHkgd2hlbiB0aGUgZm9ybSBmaWVsZCBpcyBpbnZhbGlkICwgZWxzZSByZW1vdmluZyB0aGUgYXR0cmlidXRlc1xuICAgICAgICAgICAgaWYgKHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0uaW52YWxpZCAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLnRvdWNoZWQgJiYgdGhpcy5mb3JtLmlzVXBkYXRlTW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ19fZXJyb3Jtc2cnLCBgJHt0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfX3ZhbGlkYXRpb25JZCcpfWApO1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIHRoaXMuX3RyaWdnZXJlZEJ5VXNlciAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLmludmFsaWQgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgYCR7dGhpcy5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnX192YWxpZGF0aW9uSWQnKX1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnX19lcnJvcm1zZycpO1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9ybS5vbkZpZWxkVmFsdWVDaGFuZ2UodGhpcywgdmFsKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAgICAgLy8gRG8gbWFyayBhcyB0b3VjaGVkLCBvbmx5IGluY2FzZSB3aGVuIHVzZXIgaGFzIGVudGVyZWQgYW4gaW5wdXQgYnV0IG5vdCB0aHJvdWdoIHRoZSBzY3JpcHQuIEhlbmNlIGFkZGVkIG1vdXNlZG93biBldmVudCBjaGVja1xuICAgICAgICAgICAgLy8gYWN0aXZlIGNsYXNzIGNoZWNrcyB3aGV0aGVyIHVzZXIgaXMgb24gdGhlIGN1cnJlbnQgZmllbGQsIGlmIHNvIG1hcmtpbmcgdGhlIGZpZWxkIGFzIHRvdWNoZWQuIEFuZCBmb3JtIGZpZWxkIHZhbGlkYXRpb24gaGFwcGVucyBvbmNlIGEgZmllbGQgaXMgdG91Y2hlZFxuICAgICAgICAgICAgLy8gX3RyaWdnZXJlZEJ5VXNlciBjaGVja3Mgd2hldGhlciB0aGUgZmllbGQgaXMgdG91Y2hlZCBieSB0aGUgdXNlciBvciB0cmlnZ2VyZWQgZnJvbSBleHRlcm5hbCBzY3JpcHRcbiAgICAgICAgICAgIC8vIFdNUy0yMjQ1NjogX2NsaWNrdHJpZ2dlcmVkQnlVc2VyIGNoZWNrcyB3aGVuIHVzZXIgc2VsZWN0cyBkYXRldGltZXR5cGUgZnJvbSBwaWNrZXIsIG1hcmsgdGhlIGZpZWxkIGFzIHRvdWNoZWQgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9ycyBpbiBtb2JpbGVcblxuICAgICAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuZmluZCgnLmFjdGl2ZScpLmxlbmd0aCA+IDAgfHwgdGhpcy5mb3JtLnRvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcmVkQnlVc2VyIHx8IChpc01vYmlsZSgpICYmIHRoaXMuX2NsaWNrdHJpZ2dlcmVkQnlVc2VyICYmIGlzRGF0ZVRpbWVUeXBlKHRoaXMud2lkZ2V0dHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0Q3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU3RhdHVzQ2hhbmdlKHN0YXR1cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BlbmRpbmdTcGlubmVyID0gKHN0YXR1cyA9PT0gJ1BFTkRJTkcnKTtcbiAgICAgICAgICAgIC8vIHdoaWxlIHJ1bm5pbmcgdmFsaWRhdGlvbiwgd2lkZ2V0IGlzIGRpc2FibGVkIGFuZCBzcGlubmVyIGlzIHNob3duXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgZm9ybVdpZGdldCBkaXNhYmxlZCBzdGF0ZSBpcyByZXNldCB0byB0aGUgc3RhdGUgb2YgdGhlIGZvcm1GaWVsZC5cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdQRU5ESU5HJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybVdpZGdldC5kaXNhYmxlZCAhPT0gKHRoaXMgYXMgYW55KS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldC5kaXNhYmxlZCA9ICh0aGlzIGFzIGFueSkuZGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gZXhwb3NlIHZhbGlkYXRpb24gbWVzc2FnZSBhbmQgc2V0IGNvbnRyb2wgdG8gaW52YWxpZFxuICAgIHNldFZhbGlkYXRpb25NZXNzYWdlKHZhbCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbm1lc3NhZ2UgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLnNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3JGbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFJlYWRPbmx5U3RhdGUoKSB7XG4gICAgICAgIGxldCByZWFkT25seTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pc1VwZGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzWydwcmltYXJ5LWtleSddICYmICF0aGlzWydpcy1yZWxhdGVkJ10gJiYgIXRoaXMucGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLypJZiB0aGUgZmllbGQgaXMgcHJpbWFyeSBidXQgaXMgYXNzaWduZWQgc2V0IHJlYWRvbmx5IGZhbHNlLlxuICAgICAgICAgICAgICAgICAgIEFzc2lnbmVkIGlzIHdoZXJlIHRoZSB1c2VyIGlucHV0cyB0aGUgdmFsdWUgd2hpbGUgYSBuZXcgZW50cnkuXG4gICAgICAgICAgICAgICAgICAgVGhpcyBpcyBub3QgZWRpdGFibGUoaW4gdXBkYXRlIG1vZGUpIG9uY2UgZW50cnkgaXMgc3VjY2Vzc2Z1bCovXG4gICAgICAgICAgICAgICAgcmVhZE9ubHkgPSAhKHRoaXMuZ2VuZXJhdG9yID09PSAnYXNzaWduZWQnICYmIHRoaXMuZm9ybS5vcGVyYXRpb25UeXBlICE9PSAndXBkYXRlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlYWRPbmx5ID0gdGhpcy5yZWFkb25seTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEluIHZpZXcgbW9kZSwgc2V0IHdpZGdldCBzdGF0ZSB0byByZWFkb25seSBhbHdheXNcbiAgICAgICAgICAgIHJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ3JlYWRvbmx5JywgcmVhZE9ubHkpO1xuICAgIH1cblxuICAgIHJlc2V0RGlzcGxheUlucHV0KCkge1xuICAgICAgICBpZiAoKCFpc0RlZmluZWQodGhpcy52YWx1ZSkgfHwgdGhpcy52YWx1ZSA9PT0gJycpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LnJlc2V0RGlzcGxheUlucHV0ICYmIHRoaXMuZm9ybVdpZGdldC5yZXNldERpc3BsYXlJbnB1dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJpZ2dlclVwbG9hZEV2ZW50KCRldmVudCwgZXZlbnROYW1lKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0geyAkZXZlbnQgfTtcbiAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgIHBhcmFtcy5uZXdWYWwgPSAkZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgICAgICAgICAgcGFyYW1zLm9sZFZhbCA9IHRoaXMuX29sZFVwbG9hZFZhbDtcbiAgICAgICAgICAgIHRoaXMuX29sZFVwbG9hZFZhbCA9IHBhcmFtcy5uZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZSwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRm9ybUZpZWxkKCkge1xuXG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHRoaXMuX2ZpZWxkTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5wYXJlbnRMaXN0ICYmICEodGhpcy5mb3JtLnBhcmVudExpc3QgPT09IHRoaXMucGFyZW50TGlzdCkpIHtcbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMTtcbiAgICAgICAgICAgIGxldCBfZmllbGROYW1lID0gZmllbGROYW1lO1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMubmdmb3JtLmNvbnRyb2xzLmhhc093blByb3BlcnR5KF9maWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgX2ZpZWxkTmFtZSA9IGAke2ZpZWxkTmFtZX1fJHtjb3VudGVyfWA7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZ2Zvcm0uYWRkQ29udHJvbChfZmllbGROYW1lLCB0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XG4gICAgICAgICAgICB0aGlzLl9maWVsZE5hbWUgPSBfZmllbGROYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ2Zvcm0uYWRkQ29udHJvbChmaWVsZE5hbWUsIHRoaXMuY3JlYXRlQ29udHJvbCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvblZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5fY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uVmFsdWVDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBjb25zdCBvblN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25TdGF0dXNDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICB0aGlzLm5nZm9ybS5hZGRDb250cm9sKGZpZWxkTmFtZSArICdfbWF4JywgdGhpcy5jcmVhdGVDb250cm9sKCkpO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXJpbmcgZm9yIHZhbHVlQ2hhbmdlcyBvbiBNYXhmb3JtV2lkZ2V0XG4gICAgICAgICAgICBjb25zdCBvbk1heFZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5fbWF4Q29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMub25WYWx1ZUNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gb25NYXhWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gXy5nZXQodGhpcy5mb3JtLmZvcm1kYXRhLCB0aGlzLl9maWVsZE5hbWUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5nZm9ybSA9IHRoaXMuZm9ybS5uZ2Zvcm07XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtRmllbGQoKTtcbiAgICAgICAgLy8gSW5zdGFudGlhdGUgY3VzdG9tIHZhbGlkYXRvcnMgY2xhc3MgZm9yIGZvcm0gZmllbGRcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zID0gbmV3IEJhc2VGaWVsZFZhbGlkYXRpb25zKHRoaXMsIHRoaXMuZm9ybVdpZGdldCwgdGhpcy53aWRnZXR0eXBlLCB0aGlzLl9jb250cm9sLCB0aGlzLmZvcm0pO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlckNvbnRlbnRJbml0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFByb3BzUmVzKCk7XG5cbiAgICAgICAgICAgIC8vIHNldHRpbmcgZGlzcGxheUV4cHJlc3Npb25zIG9uIHRoZSBmb3Jtd2lkZ2V0IGV4cGxpY2l0bHkgYXMgZXhwciB3YXMgZXZhbHVhdGVkIHRvIFwiXCIuXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5bGFiZWwnLCB0aGlzLmJpbmRkaXNwbGF5bGFiZWwpO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGlzcGxheWV4cHJlc3Npb24nLCB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkaXNwbGF5aW1hZ2VzcmMnLCB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMpO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kQ2hpcGNsYXNzJywgdGhpcy5iaW5kQ2hpcGNsYXNzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgnYmluZGRhdGFzZXQnLCB0aGlzLmJpbmRkYXRhc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJSZWFkeVN0YXRlTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5rZXkgPSB0aGlzLl9maWVsZE5hbWUgfHwgdGhpcy50YXJnZXQgfHwgdGhpcy5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy52aWV3bW9kZXdpZGdldCA9IHRoaXMudmlld21vZGV3aWRnZXQgfHwgZ2V0RGVmYXVsdFZpZXdNb2RlV2lkZ2V0KHRoaXMud2lkZ2V0dHlwZSk7XG5cbiAgICAgICAgICAgIC8vIEZvciB1cGxvYWQgd2lkZ2V0LCBnZW5lcmF0ZSB0aGUgcGVybWl0dGVkIGZpZWxkXG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5VUExPQUQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsZVR5cGU7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY2NlcHRzIHN0cmluZyBmcm9tIGZpbGUgdHlwZSBhbmQgZXh0ZW5zaW9uc1xuICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdGhpcy5maWxldHlwZSA/IEZJTEVfVFlQRVNbdGhpcy5maWxldHlwZV0gOiAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnBlcm1pdHRlZCA9IGZpbGVUeXBlICsgKHRoaXMuZXh0ZW5zaW9ucyA/IChmaWxlVHlwZSA/ICcsJyA6ICcnKSArIHRoaXMuZXh0ZW5zaW9ucyA6ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc01vYmlsZSgpICYmIHRoaXMudmlld3BvcnQuaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWydtb2JpbGUtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzWyd0YWJsZXQtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1sncGMtZGlzcGxheSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuZGlzcGxhbmFtZSA9IHRoaXMuZGlzcGxheW5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnNob3cgPSB0aGlzLnNob3c7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmlzUmVsYXRlZCA9IHRoaXNbJ2lzLXJlbGF0ZWQnXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcuaW5wdXR0eXBlID0gdGhpcy5pbnB1dHR5cGU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnByaW1hcnlLZXkgPSB0aGlzWydwcmltYXJ5LWtleSddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLl9yZWFkb25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnJlZ2V4cCA9IHRoaXMucmVnZXhwO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5rZXkgPSB0aGlzLmtleTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcubW9iaWxlRGlzcGxheSA9IHRoaXNbJ21vYmlsZS1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnBjRGlzcGxheSA9IHRoaXNbJ3BjLWRpc3BsYXknXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudGFibGV0RGlzcGxheSA9IHRoaXNbJ3RhYmxldC1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnZhbGlkYXRpb25tZXNzYWdlID0gdGhpcy52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudmlld21vZGV3aWRnZXQgPSB0aGlzLnZpZXdtb2Rld2lkZ2V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy53aWRnZXQgPSB0aGlzLndpZGdldHR5cGU7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmb3JtIGZpZWxkIHdpdGggcGFyZW50IGZvcm1cbiAgICAgICAgICAgIHRoaXMuZm9ybS5yZWdpc3RlckZvcm1GaWVsZHModGhpcy53aWRnZXQpO1xuXG4gICAgICAgICAgICBhZGRGb3JJZEF0dHJpYnV0ZXModGhpcy5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seVN0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
562
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9mb3JtL3NyYy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFDSCxRQUFRLEVBQ1IsY0FBYyxFQUNkLFNBQVMsRUFDVCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLFFBQVEsRUFDUixHQUFHLEVBQ0gsSUFBSSxFQUNKLGNBQWMsRUFFakIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsSyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7QUFJbEQsb0ZBQW9GO0FBQ3BGLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO0lBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUc7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Z0I7O3NCQUMxQixTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLElBQUk7O3NCQUFJLE1BQU07dUJBQUMsT0FBTzt3QkE3RmlCLFVBQVU7a0JBQXJELFlBQVk7bUJBQUMsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztZQUNYLGFBQWE7a0JBQTNDLFlBQVk7bUJBQUMsZUFBZTtZQWdFUSxnQkFBZ0I7a0JBQXBELFlBQVk7bUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO1lBSUEsV0FBVztrQkFBN0MsWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBdHRyaWJ1dGUsIENvbnRlbnRDaGlsZCwgRGlyZWN0aXZlLCBJbmplY3QsIEluamVjdG9yLCBPbkluaXQsIE9wdGlvbmFsLCBTZWxmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgZGVib3VuY2UsXG4gICAgRm9ybVdpZGdldFR5cGUsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIGFkZEZvcklkQXR0cmlidXRlcyxcbiAgICBWaWV3cG9ydCxcbiAgICBBcHAsXG4gICAgbm9vcCxcbiAgICBpc0RhdGVUaW1lVHlwZSxcbiAgICBpc01vYmlsZUFwcFxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBDb250ZXh0LCBnZXREZWZhdWx0Vmlld01vZGVXaWRnZXQsIGdldEV2YWx1YXRlZERhdGEsIHByb3ZpZGVBcywgcHJvdmlkZUFzV2lkZ2V0UmVmLCBCYXNlRmllbGRWYWxpZGF0aW9ucywgU3R5bGFibGVDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICdAd20vY29tcG9uZW50cy9kYXRhL2xpc3QnO1xuXG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9mb3JtLWZpZWxkLnByb3BzJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtLmNvbXBvbmVudCc7XG5cbmRlY2xhcmUgY29uc3QgXywgJDtcblxuLy8gQ3VzdG9tIHZhbGlkYXRvciB0byBzaG93IHZhbGlkYXRpb24gZXJyb3IsIGlmIHNldFZhbGlkYXRpb25NZXNzYWdlIG1ldGhvZCBpcyB1c2VkXG5jb25zdCBjdXN0b21WYWxpZGF0b3JGbiA9ICgpID0+IHtcbiAgICByZXR1cm4geyBjdXN0b206IHRydWUgfTtcbn07XG5cbmNvbnN0IEZJTEVfVFlQRVMgPSB7XG4gICAgJ2ltYWdlJyA6ICdpbWFnZS8qJyxcbiAgICAndmlkZW8nIDogJ3ZpZGVvLyonLFxuICAgICdhdWRpbycgOiAnYXVkaW8vKidcbn07XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3dtRm9ybUZpZWxkXScsXG4gICAgZXhwb3J0QXM6ICd3bUZvcm1GaWVsZCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihGb3JtRmllbGREaXJlY3RpdmUpLFxuICAgICAgICBwcm92aWRlQXMoRm9ybUZpZWxkRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHtwcm92aWRlOiBDb250ZXh0LCB1c2VGYWN0b3J5OiAoKSA9PiB7IHJldHVybiB7fSB9LCBtdWx0aTogdHJ1ZX1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZERpcmVjdGl2ZSBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZm9ybVdpZGdldCcsIHtzdGF0aWM6IHRydWV9KSBmb3JtV2lkZ2V0O1xuICAgIEBDb250ZW50Q2hpbGQoJ2Zvcm1XaWRnZXRNYXgnKSBmb3JtV2lkZ2V0TWF4O1xuXG4gICAgcHJpdmF0ZSBmYjtcbiAgICBwcml2YXRlIHZpZXdwb3J0O1xuXG4gICAgLy8gZXhjbHVkZVByb3BzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHByb3BzIHRoYXQgc2hvdWxkIG5vdCBiZSBhcHBsaWVkIG9uIGlubmVyIHdpZGdldFxuICAgIHByaXZhdGUgZXhjbHVkZVByb3BzO1xuICAgIHByaXZhdGUgX3ZhbGlkYXRvcnM7XG4gICAgcHJpdmF0ZSBfb2xkVXBsb2FkVmFsO1xuXG4gICAgbmdmb3JtOiBGb3JtR3JvdXA7XG4gICAgZGVmYXVsdHZhbHVlO1xuICAgIGRpc3BsYXlleHByZXNzaW9uO1xuICAgIGRpc3BsYXlmaWVsZDtcbiAgICBkaXNwbGF5bGFiZWw7XG4gICAgZGlzcGxheW5hbWU7XG4gICAgZ2VuZXJhdG9yO1xuICAgIGtleTtcbiAgICB0YXJnZXQ7XG4gICAgYmluZGluZztcbiAgICB3aWRnZXR0eXBlO1xuICAgIGNsYXNzO1xuICAgIHJlYWRvbmx5O1xuICAgIHNob3c7XG4gICAgdHlwZTtcbiAgICBpc0RhdGFTZXRCb3VuZDtcbiAgICB2aWV3bW9kZXdpZGdldDtcbiAgICBiaW5kZGF0YXNldDtcbiAgICBiaW5kZGlzcGxheWV4cHJlc3Npb247XG4gICAgYmluZENoaXBjbGFzcztcbiAgICBkaXNwbGF5aW1hZ2VzcmM6IHN0cmluZztcbiAgICBiaW5kZGlzcGxheWltYWdlc3JjO1xuICAgIGJpbmRkaXNwbGF5bGFiZWw7XG4gICAgZm9ybTtcbiAgICBmaWxldHlwZTtcbiAgICBleHRlbnNpb25zO1xuICAgIHBlcm1pdHRlZDtcbiAgICBwZXJpb2Q7XG4gICAgaXNSYW5nZTtcbiAgICBuYW1lO1xuICAgIC8vIFZhbGlkYXRpb24gcHJvcGVydGllc1xuICAgIHJlcXVpcmVkO1xuICAgIG1heGNoYXJzO1xuICAgIG1pbnZhbHVlO1xuICAgIG1heHZhbHVlO1xuICAgIHJlZ2V4cDtcbiAgICBmaWVsZERlZkNvbmZpZztcbiAgICBwbGFjZWhvbGRlcjtcbiAgICBpbnB1dHR5cGU7XG4gICAgdmFsaWRhdGlvbm1lc3NhZ2U7XG5cbiAgICBwdWJsaWMgX2ZpZWxkTmFtZTtcblxuICAgIHByaXZhdGUgX2RlYm91bmNlU2V0VXBWYWxpZGF0b3JzO1xuICAgIHByaXZhdGUgX2luaXRQcm9wc1JlcztcbiAgICBwcml2YXRlIHBhcmVudExpc3Q7XG4gICAgcHJpdmF0ZSBzaG93UGVuZGluZ1NwaW5uZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfYWN0aXZlRmllbGQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBub3RpZnlGb3JGaWVsZHM6IGFueTtcbiAgICBwcml2YXRlIGZpZWxkVmFsaWRhdGlvbnM7XG4gICAgcHJpdmF0ZSBfdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2NsaWNrdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuICAgIHByaXZhdGUgYXBwOiBBcHA7XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWRCeVVzZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fY2xpY2t0cmlnZ2VyZWRCeVVzZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGb2N1c2VkO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBmb3JtOiBGb3JtQ29tcG9uZW50LFxuICAgICAgICBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHZpZXdwb3J0OiBWaWV3cG9ydCxcbiAgICAgICAgYXBwOiBBcHAsXG4gICAgICAgIEBPcHRpb25hbCgpIHBhcmVudExpc3Q6IExpc3RDb21wb25lbnQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2NoaXBjbGFzcy5iaW5kJykgYmluZENoaXBjbGFzczogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBiaW5kZGF0YXNldCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWV4cHJlc3Npb24uYmluZCcpIGJpbmRkaXNwbGF5ZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdkaXNwbGF5bGFiZWwuYmluZCcpIGJpbmRkaXNwbGF5bGFiZWw6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnd2lkZ2V0dHlwZScpIF93aWRnZXRUeXBlLFxuICAgICAgICBAQXR0cmlidXRlKCduYW1lJykgbmFtZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGlzcGxheWltYWdlc3JjLmJpbmQnKSBiaW5kZGlzcGxheWltYWdlc3JjOiBTdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2tleScpIGtleSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnaXMtcmFuZ2UnKSBpc1JhbmdlLFxuICAgICAgICBAQXR0cmlidXRlKCdwYy1kaXNwbGF5JykgcGNEaXNwbGF5LFxuICAgICAgICBAQXR0cmlidXRlKCdtb2JpbGUtZGlzcGxheScpIG1vYmlsZURpc3BsYXksXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RhYmxldC1kaXNwbGF5JykgdGFibGV0RGlzcGxheSxcbiAgICAgICAgQFNlbGYoKSBASW5qZWN0KENvbnRleHQpIGNvbnRleHRzOiBBcnJheTxhbnk+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IFdJREdFVF9DT05GSUcgPSB7XG4gICAgICAgICAgICB3aWRnZXRUeXBlOiAnd20tZm9ybS1maWVsZCcsXG4gICAgICAgICAgICBob3N0Q2xhc3M6ICcnLFxuICAgICAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ3dtLWZvcm0tZmllbGQtJyArIChfd2lkZ2V0VHlwZSB8fCBGb3JtV2lkZ2V0VHlwZS5URVhUKS50cmltKClcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlc29sdmVGbjogRnVuY3Rpb24gPSBub29wO1xuXG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgbmV3IFByb21pc2UocmVzID0+IHJlc29sdmVGbiA9IHJlcykpO1xuICAgICAgICB0aGlzLl9pbml0UHJvcHNSZXMgPSByZXNvbHZlRm47XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnID0ge307XG4gICAgICAgIHRoaXMuY2xhc3MgPSAnJztcbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IGJpbmRkYXRhc2V0O1xuICAgICAgICB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMgPSBiaW5kZGlzcGxheWltYWdlc3JjO1xuICAgICAgICB0aGlzLmJpbmRkaXNwbGF5ZXhwcmVzc2lvbiA9IGJpbmRkaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5iaW5kQ2hpcGNsYXNzID0gYmluZENoaXBjbGFzcztcbiAgICAgICAgdGhpcy5iaW5kZGlzcGxheWxhYmVsID0gYmluZGRpc3BsYXlsYWJlbDtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICAgICAgdGhpcy5mYiA9IGZiO1xuICAgICAgICB0aGlzLnZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgICAgIHRoaXMuX2ZpZWxkTmFtZSA9IGtleSB8fCBuYW1lO1xuICAgICAgICB0aGlzLmlzUmFuZ2UgPSBpc1JhbmdlO1xuICAgICAgICB0aGlzLmV4Y2x1ZGVQcm9wcyA9IG5ldyBTZXQoWyd0eXBlJywgJ25hbWUnXSk7XG4gICAgICAgIHRoaXMud2lkZ2V0dHlwZSA9IF93aWRnZXRUeXBlO1xuICAgICAgICB0aGlzLnBhcmVudExpc3QgPSBwYXJlbnRMaXN0O1xuICAgICAgICB0aGlzLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0IHx8IHRoaXMuJGVsZW1lbnQuYXR0cignZGF0YXNldCcpKSB7XG4gICAgICAgICAgICB0aGlzLmlzRGF0YVNldEJvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHRzWzBdLl9vbkZvY3VzRmllbGQgPSB0aGlzLl9vbkZvY3VzRmllbGQuYmluZCh0aGlzKTtcbiAgICAgICAgY29udGV4dHNbMF0uX29uQmx1ckZpZWxkID0gdGhpcy5fb25CbHVyRmllbGQuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLl9kZWJvdW5jZVNldFVwVmFsaWRhdG9ycyA9IGRlYm91bmNlKCgpID0+IHRoaXMuc2V0VXBWYWxpZGF0b3JzKCksIDUwMCk7XG4gICAgfVxuXG4gICAgX29uRm9jdXNGaWVsZCgkZXZ0KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpZWxkID0gdHJ1ZTtcbiAgICAgICAgJCgkZXZ0LnRhcmdldCkuY2xvc2VzdCgnLmxpdmUtZmllbGQnKS5hZGRDbGFzcygnYWN0aXZlJyk7XG5cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZXQgdGhlIGFjdGl2ZSBlbGVtZW50IG1hcmt1cCBiYXNlZCBvbiB3aWRnZXQgdHlwZVxuICAgIGdldEFjdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldFR5cGUgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd3aWRnZXR0eXBlJyk7XG4gICAgICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0QXJpYUF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0uaW52YWxpZCAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLnRvdWNoZWQgJiYgdGhpcy5mb3JtLmlzVXBkYXRlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX19lcnJvcm1zZycsIGAke3RoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ19fdmFsaWRhdGlvbklkJyl9YCk7XG4gICAgICAgICAgICBlbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIGAke3RoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV0uaW52YWxpZH1gKTtcbiAgICAgICAgICAgIGVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIGAke3RoaXMubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ19fdmFsaWRhdGlvbklkJyl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdfX2Vycm9ybXNnJyk7XG4gICAgICAgICAgICBlbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcpO1xuICAgICAgICAgICAgZWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25CbHVyRmllbGQoJGV2dCkge1xuICAgICAgICAkKCRldnQudGFyZ2V0KS5jbG9zZXN0KCcubGl2ZS1maWVsZCcpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgY29uc3QgZWxlID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AudGV4dC1kYW5nZXInKTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTIzOTU5XTogQURBIGlzc3VlIC0gYWRkaW5nIGFyaWEtZGVzY3JpYmVkYnksIGFyaWEtaW52YWxpZCwgX19lcnJvcm1zZyBhdHRyaWJ1dGVzIG9ubHkgd2hlbiB0aGUgZm9ybSBmaWVsZCBpcyBpbnZhbGlkICwgZWxzZSByZW1vdmluZyB0aGUgYXR0cmlidXRlc1xuICAgICAgICB0aGlzLnNldEFyaWFBdHRyaWJ1dGVzKCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpZWxkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJlZEJ5VXNlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jbGlja3RyaWdnZXJlZEJ5VXNlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIGluIHZpZXcgbW9kZSBvZiBmb3JtIGZpZWxkXG4gICAgZXZhbHVhdGVFeHByKG9iamVjdCwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwcikge1xuICAgICAgICBpZiAoIWRpc3BsYXlFeHByIHx8ICFkaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9IE9iamVjdC5rZXlzKG9iamVjdClbMF07XG4gICAgICAgICAgICAvLyBJZiBkYXRhc2V0IGlzIG5vdCByZWFkeSwgZGlzcGxheSBleHByZXNzaW9uIHdpbGwgbm90IGJlIGRlZmluZWRcbiAgICAgICAgICAgIGlmICghZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRFdmFsdWF0ZWREYXRhKG9iamVjdCwge1xuICAgICAgICAgICAgZmllbGQ6IGRpc3BsYXlGaWVsZCxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGRpc3BsYXlFeHByXG4gICAgICAgIH0sIHRoaXMudmlld1BhcmVudCk7XG4gICAgfVxuXG4gICAgLy8gRXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgaW4gdmlldyBtb2RlIG9mIGZvcm0gZmllbGRcbiAgICBnZXREaXNwbGF5RXhwcigpIHtcbiAgICAgICAgY29uc3QgY2FwdGlvbiA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZCA9IHRoaXMuZGlzcGxheWZpZWxkIHx8IHRoaXMuZGlzcGxheWxhYmVsXG4gICAgICAgIGNvbnN0IGRpc3BsYXlFeHByID0gdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbjtcbiAgICAgICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIF8uZm9yRWFjaCh2YWx1ZSwgb2JqID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNPYmplY3Qob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbi5wdXNoKHRoaXMuZXZhbHVhdGVFeHByKG9iaiwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcHRpb24ucHVzaCh0aGlzLmV2YWx1YXRlRXhwcih2YWx1ZSwgZGlzcGxheUZpZWxkLCBkaXNwbGF5RXhwcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF8uam9pbihjYXB0aW9uLCAnLCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgPyAnJyA6IHRoaXMudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0Q2FwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZSA9PT0gbnVsbCkgPyAoXy5nZXQodGhpcy5mb3JtLmRhdGFvdXRwdXQsIHRoaXMuX2ZpZWxkTmFtZSkgfHwgJycpIDogdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBOb3RpZmllcyBjaGFuZ2VzIHRvIG9ic2VydmluZyB2YWxpZGF0aW9uIGZpZWxkc1xuICAgIG5vdGlmeUNoYW5nZXMoKSB7XG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLm5vdGlmeUZvckZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgZmllbGQuZmllbGRWYWxpZGF0aW9ucy52YWxpZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlcnMgb2JzZXJ2ZXIgb2YgdmFsaWRhdGlvbiBmaWVsZHNcbiAgICBvYnNlcnZlT24oZmllbGRzKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucy5vYnNlcnZlT24oZmllbGRzLCAnZm9ybWZpZWxkcycpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXR1cCB2YWxpZGF0b3JzIGZvciByZWFjdGl2ZSBmb3JtIGNvbnRyb2xcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0VXBWYWxpZGF0b3JzKGN1c3RvbVZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgY3VzdG9tIGFzeW5jIHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnMuc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgYW5kIGN1c3RvbSBzeW5jIHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIHNldCB0aGUgcHJvcGVydGllcyBvbiBpbm5lciBmb3JtIHdpZGdldFxuICAgIHNldEZvcm1XaWRnZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldCAmJiB0aGlzLmZvcm1XaWRnZXQud2lkZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQud2lkZ2V0W2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBib3VuZEZuKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzZXQgdGhlIHByb3BlcnRpZXMgb24gaW5uZXIgbWF4IGZvcm0gd2lkZ2V0ICh3aGVuIHJhbmdlIGlzIHNlbGVjdGVkKVxuICAgIHNldE1heEZvcm1XaWRnZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybVdpZGdldE1heCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0TWF4LndpZGdldFtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgY29uc3QgaXNGb3JtRGlydHkgPSB0aGlzLmZvcm0uZGlydHk7XG5cbiAgICAgICAgaWYgKGtleSAhPT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leGNsdWRlUHJvcHMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzIHVwbG9hZCB3aWRnZXQgaXMgYW4gSFRNTCB3aWRnZXQsIG9ubHkgcmVxdWlyZWQgcHJvcGVydHkgaXMgc2V0dXBcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KGtleSwgbnYpO1xuXG4gICAgICAgIC8vIFBsYWNlaG9sZGVyIHNob3VsZCBub3QgYmUgc2V0dXAgb24gbWF4IHdpZGdldFxuICAgICAgICBpZiAoa2V5ICE9PSAncGxhY2Vob2xkZXInKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdHZhbHVlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25GaWVsZERlZmF1bHRWYWx1ZUNoYW5nZSh0aGlzLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhkZWZhdWx0dmFsdWUnOlxuICAgICAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoJ2RhdGF2YWx1ZScsIG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ub25NYXhEZWZhdWx0VmFsdWVDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21heHBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoJ3BsYWNlaG9sZGVyJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgICAgICAgICAgIC8vIFdNUy0xODkwNiA6IERvIG5vdCBtYWtlIGZvcm0gYXMgZGlydHkgZHVyaW5nIHJlcXVpcmVkIHByb3AgaW5pdGlhbGl6YXRpb25cbiAgICAgICAgICAgICAgICBpZiAoaXNGb3JtRGlydHkgIT09IHRoaXMuZm9ybS5kaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtYXhjaGFycyc6XG4gICAgICAgICAgICBjYXNlICdtaW52YWx1ZSc6XG4gICAgICAgICAgICBjYXNlICdtYXh2YWx1ZSc6XG4gICAgICAgICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VTZXRVcFZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ByaW1hcnkta2V5JzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldFByaW1hcnlLZXkodGhpcy5fZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkaXNwbGF5LW5hbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheW5hbWUgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3JlYWRvbmx5JzpcbiAgICAgICAgICAgICAgIHRoaXMuc2V0UmVhZE9ubHlTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TdHlsZUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KGtleSwgbnYpO1xuICAgICAgICB0aGlzLnNldE1heEZvcm1XaWRnZXQoa2V5LCBudik7XG4gICAgICAgIHN1cGVyLm9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cblxuICAgIGdldCBkYXRhdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgZGF0YXZhbHVlKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fY29udHJvbCAmJiB0aGlzLndpZGdldHR5cGUgIT09IEZvcm1XaWRnZXRUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbC5zZXRWYWx1ZSh2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbCkge1xuICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXRNYXggJiYgdGhpcy5mb3JtV2lkZ2V0TWF4LmRhdGF2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgbWF4VmFsdWUodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXhDb250cm9sLnNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHNldCBtaW5WYWx1ZSh2YWwpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHJlYWN0aXZlIGZvcm0gY29udHJvbFxuICAgIGdldCBfY29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW3RoaXMuX2ZpZWxkTmFtZV07XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSByZWFjdGl2ZSBtYXggZm9ybSBjb250cm9sXG4gICAgZ2V0IF9tYXhDb250cm9sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0gJiYgdGhpcy5uZ2Zvcm0uY29udHJvbHNbdGhpcy5fZmllbGROYW1lICsgJ19tYXgnXTtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGRpc3BsYXlWYWx1ZVxuICAgIGdldCBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1XaWRnZXQgJiYgdGhpcy5mb3JtV2lkZ2V0LmRpc3BsYXlWYWx1ZTtcbiAgICB9XG5cbiAgICAvL0dldCB0aGUgdGltZXN0YW1wXG4gICAgZ2V0IHRpbWVzdGFtcCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC50aW1lc3RhbXA7XG4gICAgfVxuXG4gICAgLy9HZXQgdGhlIGNoYXJsZW5ndGhcbiAgICBnZXQgY2hhcmxlbmd0aCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5jaGFybGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVhY3RpdmUgZm9ybSBjb250cm9sXG4gICAgY3JlYXRlQ29udHJvbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuY29udHJvbCh1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHRoaXMuX3ZhbGlkYXRvcnNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gT24gZmllbGQgdmFsdWUgY2hhbmdlLCBwcm9wYWdhdGUgZXZlbnQgdG8gcGFyZW50IGZvcm1cbiAgICBvblZhbHVlQ2hhbmdlKHZhbCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb25FbCA9ICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmNhcHRpb24tZmxvYXRpbmcnKTtcbiAgICAgICAgICAgIGlmIChjYXB0aW9uRWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGhhc1ZhbHVlIGNoZWNrIHdoZXRoZXIgZm9ybS1maWVsZCBoYXMgYSB2YWx1ZSBmcm9tIHBhc3NlZCB2YWwgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgLy8gQWRkZWQgc2FuaXR5IGNoZWNrIG9uIHZhbCB0byBzdXBwb3J0IHZhbHVlcyBsaWtlZCAwLCBmYWxzZSBldGMgYXMgaW5wdXQgdmFsIC0gV01TLTIwMDg0XG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBjaGVja2luZyBmb3IgaW5wdXQgdmFsdWUgb3IgLXdlYmtpdC1hdXRvZmlsbCB0byBzZWUgd2hldGhlciB0aGVyZSBhcmUgYW55IGF1dG9maWxsZWQgZmllbGRzIC0gV01TLTIwMTQxXG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNWYWx1ZSA9ICgoaXNEZWZpbmVkKHZhbCkgJiYgdmFsICE9PSAnJyAmJiB2YWwgIT09IG51bGwpIHx8IGNhcHRpb25FbC5maW5kKCdpbnB1dCcpLnZhbCgpKSB8fCBjYXB0aW9uRWwuZmluZCgnaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCcpLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnY2FwdGlvblBvc2l0aW9uQW5pbWF0ZScsIHtkaXNwbGF5VmFsOiBoYXNWYWx1ZSwgbmF0aXZlRWw6IGNhcHRpb25FbCwgaXNTZWxlY3RNdWx0aXBsZTogdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5tdWx0aXBsZSwgaXNGb2N1c2VkOiB0aGlzLl9hY3RpdmVGaWVsZH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjM5NTldOiBBREEgaXNzdWUgLSBhZGRpbmcgYXJpYS1kZXNjcmliZWRieSwgYXJpYS1pbnZhbGlkLCBfX2Vycm9ybXNnIGF0dHJpYnV0ZXMgb25seSB3aGVuIHRoZSBmb3JtIGZpZWxkIGlzIGludmFsaWQgLCBlbHNlIHJlbW92aW5nIHRoZSBhdHRyaWJ1dGVzXG4gICAgICAgICAgICB0aGlzLnNldEFyaWFBdHRyaWJ1dGVzKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm0ub25GaWVsZFZhbHVlQ2hhbmdlKHRoaXMsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXMoKTtcbiAgICAgICAgICAgIC8vIERvIG1hcmsgYXMgdG91Y2hlZCwgb25seSBpbmNhc2Ugd2hlbiB1c2VyIGhhcyBlbnRlcmVkIGFuIGlucHV0IGJ1dCBub3QgdGhyb3VnaCB0aGUgc2NyaXB0LiBIZW5jZSBhZGRlZCBtb3VzZWRvd24gZXZlbnQgY2hlY2tcbiAgICAgICAgICAgIC8vIGFjdGl2ZSBjbGFzcyBjaGVja3Mgd2hldGhlciB1c2VyIGlzIG9uIHRoZSBjdXJyZW50IGZpZWxkLCBpZiBzbyBtYXJraW5nIHRoZSBmaWVsZCBhcyB0b3VjaGVkLiBBbmQgZm9ybSBmaWVsZCB2YWxpZGF0aW9uIGhhcHBlbnMgb25jZSBhIGZpZWxkIGlzIHRvdWNoZWRcbiAgICAgICAgICAgIC8vIF90cmlnZ2VyZWRCeVVzZXIgY2hlY2tzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIHRvdWNoZWQgYnkgdGhlIHVzZXIgb3IgdHJpZ2dlcmVkIGZyb20gZXh0ZXJuYWwgc2NyaXB0XG4gICAgICAgICAgICAvLyBXTVMtMjI0NTY6IF9jbGlja3RyaWdnZXJlZEJ5VXNlciBjaGVja3Mgd2hlbiB1c2VyIHNlbGVjdHMgZGF0ZXRpbWV0eXBlIGZyb20gcGlja2VyLCBtYXJrIHRoZSBmaWVsZCBhcyB0b3VjaGVkIHRvIHNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbW9iaWxlXG5cbiAgICAgICAgICAgIGlmICh0aGlzLiRlbGVtZW50LmZpbmQoJy5hY3RpdmUnKS5sZW5ndGggPiAwIHx8IHRoaXMuZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyaWdnZXJlZEJ5VXNlciB8fCAoaXNNb2JpbGUoKSAmJiB0aGlzLl9jbGlja3RyaWdnZXJlZEJ5VXNlciAmJiBpc0RhdGVUaW1lVHlwZSh0aGlzLndpZGdldHR5cGUpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nZm9ybS5jb250cm9sc1t0aGlzLl9maWVsZE5hbWVdLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zLnNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblN0YXR1c0NoYW5nZShzdGF0dXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQZW5kaW5nU3Bpbm5lciA9IChzdGF0dXMgPT09ICdQRU5ESU5HJyk7XG4gICAgICAgICAgICAvLyB3aGlsZSBydW5uaW5nIHZhbGlkYXRpb24sIHdpZGdldCBpcyBkaXNhYmxlZCBhbmQgc3Bpbm5lciBpcyBzaG93blxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGZvcm1XaWRnZXQgZGlzYWJsZWQgc3RhdGUgaXMgcmVzZXQgdG8gdGhlIHN0YXRlIG9mIHRoZSBmb3JtRmllbGQuXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnUEVORElORycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1XaWRnZXQuZGlzYWJsZWQgIT09ICh0aGlzIGFzIGFueSkuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXQuZGlzYWJsZWQgPSAodGhpcyBhcyBhbnkpLmRpc2FibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIGV4cG9zZSB2YWxpZGF0aW9uIG1lc3NhZ2UgYW5kIHNldCBjb250cm9sIHRvIGludmFsaWRcbiAgICBzZXRWYWxpZGF0aW9uTWVzc2FnZSh2YWwpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25tZXNzYWdlID0gdmFsO1xuICAgICAgICAgICAgdGhpcy5zZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yRm4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRSZWFkT25seVN0YXRlKCkge1xuICAgICAgICBsZXQgcmVhZE9ubHk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaXNVcGRhdGVNb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpc1sncHJpbWFyeS1rZXknXSAmJiAhdGhpc1snaXMtcmVsYXRlZCddICYmICF0aGlzLnBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8qSWYgdGhlIGZpZWxkIGlzIHByaW1hcnkgYnV0IGlzIGFzc2lnbmVkIHNldCByZWFkb25seSBmYWxzZS5cbiAgICAgICAgICAgICAgICAgICBBc3NpZ25lZCBpcyB3aGVyZSB0aGUgdXNlciBpbnB1dHMgdGhlIHZhbHVlIHdoaWxlIGEgbmV3IGVudHJ5LlxuICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgbm90IGVkaXRhYmxlKGluIHVwZGF0ZSBtb2RlKSBvbmNlIGVudHJ5IGlzIHN1Y2Nlc3NmdWwqL1xuICAgICAgICAgICAgICAgIHJlYWRPbmx5ID0gISh0aGlzLmdlbmVyYXRvciA9PT0gJ2Fzc2lnbmVkJyAmJiB0aGlzLmZvcm0ub3BlcmF0aW9uVHlwZSAhPT0gJ3VwZGF0ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWFkT25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiB2aWV3IG1vZGUsIHNldCB3aWRnZXQgc3RhdGUgdG8gcmVhZG9ubHkgYWx3YXlzXG4gICAgICAgICAgICByZWFkT25seSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdyZWFkb25seScsIHJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICByZXNldERpc3BsYXlJbnB1dCgpIHtcbiAgICAgICAgaWYgKCghaXNEZWZpbmVkKHRoaXMudmFsdWUpIHx8IHRoaXMudmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0ICYmIHRoaXMuZm9ybVdpZGdldC5yZXNldERpc3BsYXlJbnB1dCAmJiB0aGlzLmZvcm1XaWRnZXQucmVzZXREaXNwbGF5SW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyaWdnZXJVcGxvYWRFdmVudCgkZXZlbnQsIGV2ZW50TmFtZSkge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHsgJGV2ZW50IH07XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICBwYXJhbXMubmV3VmFsID0gJGV2ZW50LnRhcmdldC5maWxlcztcbiAgICAgICAgICAgIHBhcmFtcy5vbGRWYWwgPSB0aGlzLl9vbGRVcGxvYWRWYWw7XG4gICAgICAgICAgICB0aGlzLl9vbGRVcGxvYWRWYWwgPSBwYXJhbXMubmV3VmFsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjayhldmVudE5hbWUsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckZvcm1GaWVsZCgpIHtcblxuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB0aGlzLl9maWVsZE5hbWU7XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50TGlzdCAmJiAhKHRoaXMuZm9ybS5wYXJlbnRMaXN0ID09PSB0aGlzLnBhcmVudExpc3QpKSB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDE7XG4gICAgICAgICAgICBsZXQgX2ZpZWxkTmFtZSA9IGZpZWxkTmFtZTtcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLm5nZm9ybS5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShfZmllbGROYW1lKSkge1xuICAgICAgICAgICAgICAgIF9maWVsZE5hbWUgPSBgJHtmaWVsZE5hbWV9XyR7Y291bnRlcn1gO1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubmdmb3JtLmFkZENvbnRyb2woX2ZpZWxkTmFtZSwgdGhpcy5jcmVhdGVDb250cm9sKCkpO1xuICAgICAgICAgICAgdGhpcy5fZmllbGROYW1lID0gX2ZpZWxkTmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmdmb3JtLmFkZENvbnRyb2woZmllbGROYW1lLCB0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb25WYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuX2NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vblZhbHVlQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IG9uVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgY29uc3Qgb25TdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9jb250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uU3RhdHVzQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IG9uU3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5uZ2Zvcm0uYWRkQ29udHJvbChmaWVsZE5hbWUgKyAnX21heCcsIHRoaXMuY3JlYXRlQ29udHJvbCgpKTtcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyaW5nIGZvciB2YWx1ZUNoYW5nZXMgb24gTWF4Zm9ybVdpZGdldFxuICAgICAgICAgICAgY29uc3Qgb25NYXhWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuX21heENvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uVmFsdWVDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IG9uTWF4VmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IF8uZ2V0KHRoaXMuZm9ybS5mb3JtZGF0YSwgdGhpcy5fZmllbGROYW1lKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5uZ2Zvcm0gPSB0aGlzLmZvcm0ubmdmb3JtO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybUZpZWxkKCk7XG4gICAgICAgIC8vIEluc3RhbnRpYXRlIGN1c3RvbSB2YWxpZGF0b3JzIGNsYXNzIGZvciBmb3JtIGZpZWxkXG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9ucyA9IG5ldyBCYXNlRmllbGRWYWxpZGF0aW9ucyh0aGlzLCB0aGlzLmZvcm1XaWRnZXQsIHRoaXMud2lkZ2V0dHlwZSwgdGhpcy5fY29udHJvbCwgdGhpcy5mb3JtKTtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmZvcm1XaWRnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRQcm9wc1JlcygpO1xuXG4gICAgICAgICAgICAvLyBzZXR0aW5nIGRpc3BsYXlFeHByZXNzaW9ucyBvbiB0aGUgZm9ybXdpZGdldCBleHBsaWNpdGx5IGFzIGV4cHIgd2FzIGV2YWx1YXRlZCB0byBcIlwiLlxuICAgICAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGlzcGxheWxhYmVsJywgdGhpcy5iaW5kZGlzcGxheWxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgnYmluZGRpc3BsYXlleHByZXNzaW9uJywgdGhpcy5iaW5kZGlzcGxheWV4cHJlc3Npb24pO1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JtV2lkZ2V0KCdiaW5kZGlzcGxheWltYWdlc3JjJywgdGhpcy5iaW5kZGlzcGxheWltYWdlc3JjKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVdpZGdldCgnYmluZENoaXBjbGFzcycsIHRoaXMuYmluZENoaXBjbGFzcyk7XG4gICAgICAgICAgICB0aGlzLnNldEZvcm1XaWRnZXQoJ2JpbmRkYXRhc2V0JywgdGhpcy5iaW5kZGF0YXNldCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMua2V5ID0gdGhpcy5fZmllbGROYW1lIHx8IHRoaXMudGFyZ2V0IHx8IHRoaXMuYmluZGluZztcbiAgICAgICAgICAgIHRoaXMudmlld21vZGV3aWRnZXQgPSB0aGlzLnZpZXdtb2Rld2lkZ2V0IHx8IGdldERlZmF1bHRWaWV3TW9kZVdpZGdldCh0aGlzLndpZGdldHR5cGUpO1xuXG4gICAgICAgICAgICAvLyBGb3IgdXBsb2FkIHdpZGdldCwgZ2VuZXJhdGUgdGhlIHBlcm1pdHRlZCBmaWVsZFxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGVUeXBlO1xuICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWNjZXB0cyBzdHJpbmcgZnJvbSBmaWxlIHR5cGUgYW5kIGV4dGVuc2lvbnNcbiAgICAgICAgICAgICAgICBmaWxlVHlwZSA9IHRoaXMuZmlsZXR5cGUgPyBGSUxFX1RZUEVTW3RoaXMuZmlsZXR5cGVdIDogJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJtaXR0ZWQgPSBmaWxlVHlwZSArICh0aGlzLmV4dGVuc2lvbnMgPyAoZmlsZVR5cGUgPyAnLCcgOiAnJykgKyB0aGlzLmV4dGVuc2lvbnMgOiAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1snbW9iaWxlLWRpc3BsYXknXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdwb3J0LmlzVGFibGV0VHlwZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpc1sndGFibGV0LWRpc3BsYXknXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbJ3BjLWRpc3BsYXknXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5zaG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmRpc3BsYW5hbWUgPSB0aGlzLmRpc3BsYXluYW1lO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5zaG93ID0gdGhpcy5zaG93O1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5pc1JlbGF0ZWQgPSB0aGlzWydpcy1yZWxhdGVkJ107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLmlucHV0dHlwZSA9IHRoaXMuaW5wdXR0eXBlO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5nZW5lcmF0b3IgPSB0aGlzLmdlbmVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5wcmltYXJ5S2V5ID0gdGhpc1sncHJpbWFyeS1rZXknXTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcucmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5fcmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5O1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5yZWdleHAgPSB0aGlzLnJlZ2V4cDtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcudHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcua2V5ID0gdGhpcy5rZXk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLm1vYmlsZURpc3BsYXkgPSB0aGlzWydtb2JpbGUtZGlzcGxheSddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy5wY0Rpc3BsYXkgPSB0aGlzWydwYy1kaXNwbGF5J107XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnRhYmxldERpc3BsYXkgPSB0aGlzWyd0YWJsZXQtZGlzcGxheSddO1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZkNvbmZpZy52YWxpZGF0aW9ubWVzc2FnZSA9IHRoaXMudmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmQ29uZmlnLnZpZXdtb2Rld2lkZ2V0ID0gdGhpcy52aWV3bW9kZXdpZGdldDtcbiAgICAgICAgICAgIHRoaXMuZmllbGREZWZDb25maWcud2lkZ2V0ID0gdGhpcy53aWRnZXR0eXBlO1xuXG4gICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgZm9ybSBmaWVsZCB3aXRoIHBhcmVudCBmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm0ucmVnaXN0ZXJGb3JtRmllbGRzKHRoaXMud2lkZ2V0KTtcblxuICAgICAgICAgICAgYWRkRm9ySWRBdHRyaWJ1dGVzKHRoaXMubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0UmVhZE9ubHlTdGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|