@churchillliving/se-ui-toolkit 6.53.792 → 6.53.793
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/shared/global-filters/global-filters.component.mjs +34 -36
- package/fesm2022/churchillliving-se-ui-toolkit.mjs +33 -35
- package/fesm2022/churchillliving-se-ui-toolkit.mjs.map +1 -1
- package/lib/components/shared/global-filters/global-filters.component.d.ts +0 -1
- package/package.json +1 -1
|
@@ -54,41 +54,6 @@ export class SeGlobalFilterComponent {
|
|
|
54
54
|
this.setDefualtCalendarRange(false);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
ngAfterViewInit() {
|
|
58
|
-
// spliting date range value and assign to value and valueTwo in Date_Range Control
|
|
59
|
-
const dateRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.DATE_RANGE);
|
|
60
|
-
dateRangeFilter?.forEach((dateRange) => {
|
|
61
|
-
if (dateRange.value && dateRange.valueTwo) {
|
|
62
|
-
if (typeof (dateRange.value) === 'object') {
|
|
63
|
-
dateRange.value = dateRange.value.toLocaleDateString();
|
|
64
|
-
}
|
|
65
|
-
if (typeof (dateRange.valueTwo) === 'object') {
|
|
66
|
-
dateRange.valueTwo = dateRange.valueTwo.toLocaleDateString();
|
|
67
|
-
}
|
|
68
|
-
dateRange.value = (dateRange.value + "-" + dateRange.valueTwo)?.toString()?.split('-');
|
|
69
|
-
this.setDateRangeFilterValue(dateRange);
|
|
70
|
-
}
|
|
71
|
-
else if (dateRange.value && !dateRange.valueTwo) {
|
|
72
|
-
this.matchSameFields(dateRange.fromField, dateRange.value, 'gte');
|
|
73
|
-
}
|
|
74
|
-
else if (!dateRange.value && dateRange.valueTwo) {
|
|
75
|
-
this.matchSameFields(dateRange.fromField, dateRange.valueTwo, 'gte');
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
// Filtring Numeric Range controls on global filter
|
|
79
|
-
const numerRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.NUMERIC_RANGE);
|
|
80
|
-
numerRangeFilter.forEach((numericRange) => {
|
|
81
|
-
if (numericRange) {
|
|
82
|
-
this.setNumericRangeValueFrom(numericRange);
|
|
83
|
-
this.setNumericRangeValueTwo(numericRange);
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
// if(!(this.globalFilters.some((filter)=> filter.type === GridFilterControlType.CALENDAR_RANGE)) &&
|
|
87
|
-
// (this.globalFilters.some((filter)=> filter.value))
|
|
88
|
-
// ){
|
|
89
|
-
// this.applyFilters(false);
|
|
90
|
-
// }
|
|
91
|
-
}
|
|
92
57
|
setDateRangeFilterValue(dateRange) {
|
|
93
58
|
if (dateRange?.value?.length > 1) {
|
|
94
59
|
dateRange.value[0] = new Date(dateRange.value[0]);
|
|
@@ -192,6 +157,39 @@ export class SeGlobalFilterComponent {
|
|
|
192
157
|
else {
|
|
193
158
|
this.hideClearFilterBtn = true;
|
|
194
159
|
}
|
|
160
|
+
// spliting date range value and assign to value and valueTwo in Date_Range Control
|
|
161
|
+
const dateRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.DATE_RANGE);
|
|
162
|
+
dateRangeFilter?.forEach((dateRange) => {
|
|
163
|
+
if (dateRange.value && dateRange.valueTwo) {
|
|
164
|
+
if (typeof (dateRange.value) === 'object') {
|
|
165
|
+
dateRange.value = dateRange.value.toLocaleDateString();
|
|
166
|
+
}
|
|
167
|
+
if (typeof (dateRange.valueTwo) === 'object') {
|
|
168
|
+
dateRange.valueTwo = dateRange.valueTwo.toLocaleDateString();
|
|
169
|
+
}
|
|
170
|
+
dateRange.value = (dateRange.value + "-" + dateRange.valueTwo)?.toString()?.split('-');
|
|
171
|
+
this.setDateRangeFilterValue(dateRange);
|
|
172
|
+
}
|
|
173
|
+
else if (dateRange.value && !dateRange.valueTwo) {
|
|
174
|
+
this.matchSameFields(dateRange.fromField, dateRange.value, 'gte');
|
|
175
|
+
}
|
|
176
|
+
else if (!dateRange.value && dateRange.valueTwo) {
|
|
177
|
+
this.matchSameFields(dateRange.fromField, dateRange.valueTwo, 'gte');
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
// Filtring Numeric Range controls on global filter
|
|
181
|
+
const numerRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.NUMERIC_RANGE);
|
|
182
|
+
numerRangeFilter.forEach((numericRange) => {
|
|
183
|
+
if (numericRange) {
|
|
184
|
+
this.setNumericRangeValueFrom(numericRange);
|
|
185
|
+
this.setNumericRangeValueTwo(numericRange);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
// if(!(this.globalFilters.some((filter)=> filter.type === GridFilterControlType.CALENDAR_RANGE)) &&
|
|
189
|
+
// (this.globalFilters.some((filter)=> filter.value))
|
|
190
|
+
// ){
|
|
191
|
+
// this.applyFilters(false);
|
|
192
|
+
// }
|
|
195
193
|
}
|
|
196
194
|
setNumericRangeValueTwo(globalFilter, sendRequest = false) {
|
|
197
195
|
if (globalFilter.toField) {
|
|
@@ -548,4 +546,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
548
546
|
}], activeTestMode: [{
|
|
549
547
|
type: Input
|
|
550
548
|
}] } });
|
|
551
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkL2dsb2JhbC1maWx0ZXJzL2dsb2JhbC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC9nbG9iYWwtZmlsdGVycy9nbG9iYWwtZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUVMLHFCQUFxQixFQUNyQixlQUFlLEVBRWYsU0FBUyxFQUNULGdCQUFnQixHQUVqQixNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBU3BDLE1BQU0sT0FBTyx1QkFBdUI7SUFRbEMsSUFBYSxjQUFjLENBQUUsR0FBTyxJQUFJLElBQUcsR0FBRyxLQUFLLElBQUksRUFBRTtRQUFFLFFBQVEsQ0FBQTtLQUFFLENBQUEsQ0FBQztJQWN0RSxZQUNTLFFBQWtCLEVBQ04sR0FBcUIsRUFDckIsTUFBMkIsRUFDdEMsV0FBd0IsRUFDekIsYUFBNEIsRUFDM0IsWUFBMEIsRUFDMUIsRUFBYztRQU5mLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FB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QUE3QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDTSxjQUFjO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ1JlZiwgRHluYW1pY0RpYWxvZ0NvbmZpZywgRGlhbG9nU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge1xuICBJR2xvYmFsRmlsdGVyLFxuICBHcmlkRmlsdGVyQ29udHJvbFR5cGUsXG4gIEVHcmlkQ29sdW1uVHlwZSxcbiAgYWRkR2xvYmFsRmlsdGVyLFxuICBFRGF5UmFuZ2UsXG4gIEVGaWx0ZXJWYWxpZGF0b3IsXG4gIElHcmlkVXBkYXRlLFxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2UtZ2xvYmFsLWZpbHRlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nbG9iYWwtZmlsdGVycy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZUdsb2JhbEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ3JhbmdlQ2FsZW5kYXInKSBkYXRlUGlja2VyOiBhbnk7XG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSA9IFtdO1xuICBASW5wdXQoKSBzZWFyY2hHbG9iYWxGaWx0ZXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2xlYXJHbG9iYWxGaWx0ZXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZ3JpZFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgZmlsdGVyc0FwcGxpZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdXBkYXRlVmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUgKHZhbDphbnkpIHsgaWYodmFsID09PSB0cnVlKSB7IGRlYnVnZ2VyIH19XG5cbiAgcHVibGljIGZpdGVyVHlwZXMgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGU7XG4gIHB1YmxpYyBjb2x1bW5UeXBlID0gRUdyaWRDb2x1bW5UeXBlO1xuICBwdWJsaWMgc2hvd0RpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICBkYXRlUmFuZ2VWYWx1ZSA6IGFueTtcbiAgcHVibGljIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgcHVibGljIGVuZERhdGU6IERhdGU7XG5cbiAgc2hvd0lucHV0OiBib29sZWFuID0gZmFsc2U7XG4gIGZpbHRlcjogYW55ID0gJyc7XG4gIGhpZGVDbGVhckZpbHRlckJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIGNhbGVuZGFyRm9ybWF0OnN0cmluZyA9ICdtbS9kZC95eSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZih0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5kYXRhKXtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRoaXMuY29uZmlnLmRhdGEub3BlbkRpYWxvZztcbiAgICAgIGlmKHRoaXMuY29uZmlnLmRhdGEuZ2xvYmFsRmlsdGVycyl7XG4gICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVycyA9IHRoaXMuY29uZmlnPy5kYXRhLmdsb2JhbEZpbHRlcnMgYXMgSUdsb2JhbEZpbHRlcltdO1xuICAgICAgfVxuICAgICBcbiAgICAgIC8vIHNldCBCeSBEZWZ1YWx0IENhbGVuZGFyIFJhbmdlXG4gICAgICB0aGlzLnNldERlZnVhbHRDYWxlbmRhclJhbmdlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAvLyBzcGxpdGluZyBkYXRlIHJhbmdlIHZhbHVlIGFuZCBhc3NpZ24gdG8gdmFsdWUgYW5kIHZhbHVlVHdvIGluIERhdGVfUmFuZ2UgQ29udHJvbFxuICAgICAgY29uc3QgZGF0ZVJhbmdlRmlsdGVyID0gdGhpcy5nbG9iYWxGaWx0ZXJzLmZpbHRlcigoZmlsdGVyKT0+IGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuREFURV9SQU5HRSk7IFxuICAgICAgZGF0ZVJhbmdlRmlsdGVyPy5mb3JFYWNoKChkYXRlUmFuZ2UpPT57XG4gICAgICBpZihkYXRlUmFuZ2UudmFsdWUgJiYgZGF0ZVJhbmdlLnZhbHVlVHdvKXtcbiAgICAgICAgaWYodHlwZW9mKGRhdGVSYW5nZS52YWx1ZSk9PT0nb2JqZWN0Jyl7XG4gICAgICAgICAgZGF0ZVJhbmdlLnZhbHVlPWRhdGVSYW5nZS52YWx1ZS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0eXBlb2YoZGF0ZVJhbmdlLnZhbHVlVHdvKT09PSdvYmplY3QnKXtcbiAgICAgICAgICBkYXRlUmFuZ2UudmFsdWVUd289ZGF0ZVJhbmdlLnZhbHVlVHdvLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVSYW5nZS52YWx1ZSA9IChkYXRlUmFuZ2UudmFsdWUgKyBcIi1cIiArIGRhdGVSYW5nZS52YWx1ZVR3byk/LnRvU3RyaW5nKCk/LnNwbGl0KCctJyk7IFxuICAgICAgICB0aGlzLnNldERhdGVSYW5nZUZpbHRlclZhbHVlKGRhdGVSYW5nZSk7XG4gICAgICB9IGVsc2UgaWYoZGF0ZVJhbmdlLnZhbHVlICYmICFkYXRlUmFuZ2UudmFsdWVUd28pe1xuICAgICAgICB0aGlzLm1hdGNoU2FtZUZpZWxkcyhkYXRlUmFuZ2UuZnJvbUZpZWxkLGRhdGVSYW5nZS52YWx1ZSwnZ3RlJyk7XG4gICAgICB9IGVsc2UgaWYoIWRhdGVSYW5nZS52YWx1ZSAmJiBkYXRlUmFuZ2UudmFsdWVUd28pe1xuICAgICAgICB0aGlzLm1hdGNoU2FtZUZpZWxkcyhkYXRlUmFuZ2UuZnJvbUZpZWxkLGRhdGVSYW5nZS52YWx1ZVR3bywnZ3RlJyk7XG4gICAgICB9XG4gICAgICB9KVxuICAgICAgLy8gRmlsdHJpbmcgTnVtZXJpYyBSYW5nZSBjb250cm9scyBvbiBnbG9iYWwgZmlsdGVyIFxuICAgICAgY29uc3QgbnVtZXJSYW5nZUZpbHRlciA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maWx0ZXIoKGZpbHRlcik9PiBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNfUkFOR0UpO1xuICAgICAgbnVtZXJSYW5nZUZpbHRlci5mb3JFYWNoKChudW1lcmljUmFuZ2UpID0+e1xuICAgICAgICBpZihudW1lcmljUmFuZ2Upe1xuICAgICAgICB0aGlzLnNldE51bWVyaWNSYW5nZVZhbHVlRnJvbShudW1lcmljUmFuZ2UpO1xuICAgICAgICB0aGlzLnNldE51bWVyaWNSYW5nZVZhbHVlVHdvKG51bWVyaWNSYW5nZSk7XG4gICAgICB9XG4gICAgICB9KVxuICAgICAgLy8gaWYoISh0aGlzLmdsb2JhbEZpbHRlcnMuc29tZSgoZmlsdGVyKT0+IGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpKSAmJlxuICAgICAgLy8gICh0aGlzLmdsb2JhbEZpbHRlcnMuc29tZSgoZmlsdGVyKT0+IGZpbHRlci52YWx1ZSkpXG4gICAgICAvLyAgKXtcbiAgICAgIC8vICAgdGhpcy5hcHBseUZpbHRlcnMoZmFsc2UpO1xuICAgICAgLy8gfVxuICB9XG5cbiAgc2V0RGF0ZVJhbmdlRmlsdGVyVmFsdWUoZGF0ZVJhbmdlKXtcbiAgICBpZihkYXRlUmFuZ2U/LnZhbHVlPy5sZW5ndGggPiAxKXtcbiAgICAgIGRhdGVSYW5nZS52YWx1ZVswXSA9IG5ldyBEYXRlKGRhdGVSYW5nZS52YWx1ZVswXSk7XG4gICAgICBkYXRlUmFuZ2UudmFsdWVbMV0gPSBuZXcgRGF0ZShkYXRlUmFuZ2UudmFsdWVbMV0pO1xuICAgICAgdGhpcy5zZWxlY3REYXRlKGRhdGVSYW5nZSwgZmFsc2UpO1xuICAgIH1lbHNlIHtcbiAgICAgIGlmKHRoaXMuZGF0ZVJhbmdlVmFsdWUpe1xuICAgICAgICBsZXQgZGF0ZVJhbmdlVmFsdWUgPSB0aGlzLmRhdGVSYW5nZVZhbHVlPy5pbmNsdWRlcygnLScpID8gdGhpcy5kYXRlUmFuZ2VWYWx1ZT8uc3BsaXQoJy0nKSA6ICcnO1xuICAgICAgICBpZiAoZGF0ZVJhbmdlVmFsdWUubGVuZ3RoID09IDIgJiYgKGRhdGVSYW5nZVZhbHVlWzBdLnRyaW0oKSA9PSBkYXRlUmFuZ2VWYWx1ZVsxXS50cmltKCkpKXtcbiAgICAgICAgICBkYXRlUmFuZ2UudmFsdWUgPSBbXVxuICAgICAgICAgIGRhdGVSYW5nZS52YWx1ZVswXSA9IG5ldyBEYXRlKGRhdGVSYW5nZVZhbHVlWzBdKTtcbiAgICAgICAgICBkYXRlUmFuZ2UudmFsdWVbMV0gPSBuZXcgRGF0ZShkYXRlUmFuZ2VWYWx1ZVsxXSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3REYXRlKGRhdGVSYW5nZSwgZmFsc2UpOyAgICAgXG4gICAgICAgIH0gICAgXG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBcbiAgY29udGFpbnNXaGl0ZXNwYWNlKHN0cikge1xuICAgIHJldHVybiBzdHIuaW5jbHVkZXMoJyAnKTtcbiAgfVxuXG4gIGFkZFNwYWNlc2F0Zmlyc3QoeCkge1xuICAgIHJldHVybiBcIiBcIiArIHg7XG4gIH1cblxuICBhZGRTcGFjZXNhdGxhc3QoeCkge1xuICAgIHJldHVybiB4ICsgXCIgXCJcbiAgfVxuXG4gIC8vIGNoYW5nZSBjYWxlbmRhciBmb3JtYXQgb24gcnVuIHRpbWUgaWYgdXNlciB0eXBlIGRhdGUgb24gdGhlIGNhbGVuZGFyIGZpZWxkLlxuICBjYWxlbmRhckZvY3VzRXZlbnQoZ2xvYmFsRmlsdGVyOklHbG9iYWxGaWx0ZXIsIGV2ZW50PzogYW55KXtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dClbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKGE6IGFueSkgPT4ge1xuICAgICAgbGV0IHllYXIgPSBhPy50YXJnZXQ/LnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLycpWzJdO1xuICAgICAgeWVhciA9IHllYXI/LnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpWzBdO1xuICAgICAgdGhpcy5kYXRlUmFuZ2VWYWx1ZSA9IGE/LnRhcmdldD8udmFsdWVcbiAgICAgIGxldCBkYXRlUmFuZ2VWYWx1ZSA9IGE/LnRhcmdldD8udmFsdWU/LmluY2x1ZGVzKCctJykgPyBhPy50YXJnZXQ/LnZhbHVlPy5zcGxpdCgnLScpIDogJyc7XG4gICAgICAvLyBhZGRpbmcgc3BhY2UgYmV0d2VlbiBmcm9tIGFuZCB0byBkYXRlIGluIGRhdGUgcmFuZ2UgZmlsdGVyXG4gICAgICBpZiAoZGF0ZVJhbmdlVmFsdWUubGVuZ3RoID09IDIgJiYgZGF0ZVJhbmdlVmFsdWVbMV0uc3BsaXQoJy8nKS5sZW5ndGggPT0gMyAmJiAoIXRoaXMuY29udGFpbnNXaGl0ZXNwYWNlKGRhdGVSYW5nZVZhbHVlWzBdKSB8fCAhdGhpcy5jb250YWluc1doaXRlc3BhY2UoZGF0ZVJhbmdlVmFsdWVbMV0pKSkge1xuICAgICAgICBpZiAoIXRoaXMuY29udGFpbnNXaGl0ZXNwYWNlKGRhdGVSYW5nZVZhbHVlWzBdKSkge1xuICAgICAgICAgIGxldCBmcm9tRGF0ZSA9IHRoaXMuYWRkU3BhY2VzYXRsYXN0KGRhdGVSYW5nZVZhbHVlWzBdKTtcbiAgICAgICAgICBkYXRlUmFuZ2VWYWx1ZVswXSA9IGZyb21EYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb250YWluc1doaXRlc3BhY2UoZGF0ZVJhbmdlVmFsdWVbMV0pKSB7XG4gICAgICAgICAgbGV0IHRvRGF0ZSA9IHRoaXMuYWRkU3BhY2VzYXRmaXJzdChkYXRlUmFuZ2VWYWx1ZVsxXSk7XG4gICAgICAgICAgZGF0ZVJhbmdlVmFsdWVbMV0gPSB0b0RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFsdWUgPSBkYXRlUmFuZ2VWYWx1ZVswXSArICctJyArIGRhdGVSYW5nZVZhbHVlWzFdXG4gICAgICAgIGEudGFyZ2V0LnZhbHVlID0gYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmKHllYXI/Lmxlbmd0aCA9PT0gNCl7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveXknO1xuICAgICAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSKXtcbiAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgPSBuZXcgRGF0ZShhLnRhcmdldC52YWx1ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZih5ZWFyPy5sZW5ndGgpe1xuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCB5ZWFyVmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVs0XTtcbiAgICBpZigoIWdsb2JhbEZpbHRlci52YWx1ZSB8fCB5ZWFyVmFsdWUgPT0gdW5kZWZpbmVkIHx8IHllYXJWYWx1ZT8udG9TdHJpbmcoKT8ubGVuZ3RoID09PSAxKSAmJiBnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0Upe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXIsIHRydWUpO1xuICAgIH1cbiAgfVxuICBjaGVja0lmRmlsdGVyUmVxdWlyZWQoZmlsdGVyOklHbG9iYWxGaWx0ZXIpe1xuICAgIGlmKGZpbHRlci52YWxpZGF0aW9ucz8uZmluZCh2YWxpZGF0aW9uPT52YWxpZGF0aW9uLnR5cGU9PT1FRmlsdGVyVmFsaWRhdG9yLlJFUVVJUkVEKSl7XG4gICAgICBmaWx0ZXIucmVxdWlyZWRGaWVsZD10cnVlO1xuICAgIH0gICAgXG4gIH1cbiAgY2hlY2tGaWx0ZXJWYWxpZGF0aW9uKHJlbW92ZUVycm9yOmJvb2xlYW4gPSBmYWxzZSk6Ym9vbGVhbntcbiAgICBsZXQgdmFsaWQ6Ym9vbGVhbiA9IGZhbHNlO1xuICAgIGlmKHRoaXMuZ2xvYmFsRmlsdGVycyAmJiB0aGlzLmdsb2JhbEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKT0+e1xuICAgICAgICBpZihmaWx0ZXIudmFsaWRhdGlvbnMgJiYgZmlsdGVyLnZhbGlkYXRpb25zLmxlbmd0aCA+IDAgJiYgZmlsdGVyLnZhbGlkYXRpb25zWzBdLnR5cGUgPT09IEVGaWx0ZXJWYWxpZGF0b3IuUkVRVUlSRUQgJiYgIWZpbHRlci52YWx1ZSAmJiAhcmVtb3ZlRXJyb3Ipe1xuICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICBmaWx0ZXIuZXJyb3JNZXNzYWdlID0gZmlsdGVyLmRpc3BsYXlUZXh0K1wiIGlzIHJlcXVpcmVkXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpe1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVycz8uZm9yRWFjaCgoZmlsdGVyKT0+e1xuICAgICAgdGhpcy5jaGVja0lmRmlsdGVyUmVxdWlyZWQoZmlsdGVyKTtcbiAgICAgIGlmKGZpbHRlci52YWx1ZSAmJiAoZmlsdGVyLmhpZGRlbiA9PT0gZmFsc2UgfHwgZmlsdGVyLmhpZGRlbiA9PT0gdW5kZWZpbmVkKSl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzRXZlbnQoZmlsdGVyKTtcbiAgICAgIH1cbiAgICAgfSlcbiAgICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRhciBSYW5nZVxuICAgIHRoaXMuc2V0RGVmdWFsdENhbGVuZGFyUmFuZ2UoZmFsc2UpO1xuICAgIGNvbnN0IGdpcmRDbGVhckZpbHRlckJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR3JpZEZpbHRlclZhbHVlc0J1dHRvbidcbiAgICApO1xuICAgIGlmKGdpcmRDbGVhckZpbHRlckJ0bil7XG4gICAgICBpZihnaXJkQ2xlYXJGaWx0ZXJCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nKSl7XG4gICAgICAgIHRoaXMuaGlkZUNsZWFyRmlsdGVyQnRuID0gdHJ1ZTtcbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmhpZGVDbGVhckZpbHRlckJ0biA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgdGhpcy5oaWRlQ2xlYXJGaWx0ZXJCdG4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNSYW5nZVZhbHVlVHdvKGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlciwgc2VuZFJlcXVlc3Q6Ym9vbGVhbiA9IGZhbHNlKXtcbiAgICBpZihnbG9iYWxGaWx0ZXIudG9GaWVsZCl7XG4gICAgICB0aGlzLm1hdGNoU2FtZUZpZWxkcyhnbG9iYWxGaWx0ZXIudG9GaWVsZCwgZ2xvYmFsRmlsdGVyLnZhbHVlVHdvLCdsdGUnLCBnbG9iYWxGaWx0ZXIpO1xuICAgIH1cbiAgICBpZihzZW5kUmVxdWVzdCl7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgIH1cbiAgfVxuXG4gIG1hdGNoU2FtZUZpZWxkcyhmaWVsZDogc3RyaW5nLHZhbHVlOmFueSwgb3BlcmF0b3I6c3RyaW5nLCBudW1lclJhbmdlRmlsdGVyOiBhbnkgPSB7fSl7XG4gICAgICBpZihmaWVsZCl7XG4gICAgICAgIGlmKG51bWVyUmFuZ2VGaWx0ZXIgJiYgbnVtZXJSYW5nZUZpbHRlcj8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcgJiYgdmFsdWUpe1xuICAgICAgICAgIGNvbnN0IGRpZ2l0SW5mbyA9IG51bWVyUmFuZ2VGaWx0ZXI/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgIGlmKGRpZ2l0SW5mbyl7XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpPy50b0ZpeGVkKGRpZ2l0SW5mbyk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpPy50b0ZpeGVkKDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcik9PiBmaWVsZCA9PT0gZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgaWYoaW5kZXggPiAtMSl7XG4gICAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzW2luZGV4XSA9IHtmaWVsZDogZmllbGQsIG1hdGNoTW9kZTonYW5kJywgb3BlcmF0b3I6IG9wZXJhdG9yLCB2YWx1ZTogdmFsdWV9OyAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnMucHVzaCh7ZmllbGQ6IGZpZWxkLCBtYXRjaE1vZGU6J2FuZCcsIG9wZXJhdG9yOiBvcGVyYXRvciwgdmFsdWU6IHZhbHVlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNSYW5nZVZhbHVlRnJvbShnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIsIHNlbmRSZXF1ZXN0OmJvb2xlYW4gPSBmYWxzZSkge1xuICAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNfUkFOR0UgJiYgZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCl7IFxuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCxnbG9iYWxGaWx0ZXIudmFsdWUsJ2d0ZScsIGdsb2JhbEZpbHRlcik7XG4gICAgICBpZihzZW5kUmVxdWVzdCl7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgIH1cbiAgXG4gIH1cbiAgcmVtb3ZlTnVsbExvb2t1cChldmVudDogYW55LCBnbG9iYWxGaWx0ZXI6IGFueSl7XG4gICAgaWYoIWV2ZW50LnRhcmdldC52YWx1ZSl7XG4gICAgICB0aGlzLmxvb2t1cENsZWFyVmFsdWUoZ2xvYmFsRmlsdGVyKTtcbiAgICB9XG4gIH1cbiAgbG9va3VwQ2xlYXJWYWx1ZShnbG9iYWxGaWx0ZXI6IGFueSl7XG4gICAgaWYgKGdsb2JhbEZpbHRlcikge1xuXG4gICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgPyBnbG9iYWxGaWx0ZXIudmFsdWU9Jyc6JydcbiAgICAgIGdsb2JhbEZpbHRlci52YWx1ZVR3bz9nbG9iYWxGaWx0ZXIudmFsdWVUd289Jyc6JydcbiAgICAgLy8gZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0P2dsb2JhbEZpbHRlci5kaXNwbGF5VGV4dD0nJzonJ1xuICAgICAgLy8gY29sdW1uLmRpc3BsYXlGaWVsZD9yb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0gPSAnJzonJ1xuICAgICAgLy8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0PyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dD0nJzonJ1xuICAgICAgLy8gcm93W2NvbHVtbi5maWVsZF0gPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAvLyBjb2x1bW4uZmlsdGVyVmFsdWUgPSAnJztcbiAgICAgIC8vdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgIH1cbiAgIC8vIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAvLyBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgLy8gIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgLy8gfVxuICB9XG5cbiAgc2V0RGF0ZVJhbmdlVmFsdWUoZ2xvYmFsRmlsdGVyOiBhbnksIGNsZWFyVmFsdWU6IGJvb2xlYW4gPWZhbHNlKSB7XG4gICAgaWYoZ2xvYmFsRmlsdGVyLnZhbHVlPy5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IGZyb21EYXRlVmFsdWUgPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShcbiAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlWzBdLFxuICAgICAgICBnbG9iYWxGaWx0ZXIuZm9ybWF0ID8gZ2xvYmFsRmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5J1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHRvRGF0ZVZhbHVlID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIGdsb2JhbEZpbHRlci52YWx1ZVsxXSxcbiAgICAgICAgZ2xvYmFsRmlsdGVyLmZvcm1hdCA/IGdsb2JhbEZpbHRlci5mb3JtYXQgOiAnTU0vZGQveXl5eSdcbiAgICAgICk7XG4gICAgICBpZiAoZnJvbURhdGVWYWx1ZSAmJiB0b0RhdGVWYWx1ZSAmJiBnbG9iYWxGaWx0ZXIuZnJvbUZpZWxkICYmIGdsb2JhbEZpbHRlci50b0ZpZWxkKSB7XG4gICAgICAgIHRoaXMubWF0Y2hTYW1lRmllbGRzKGdsb2JhbEZpbHRlci5mcm9tRmllbGQsZnJvbURhdGVWYWx1ZSwnZ3RlJyk7XG4gICAgICAgIHRoaXMubWF0Y2hTYW1lRmllbGRzKGdsb2JhbEZpbHRlci50b0ZpZWxkLHRvRGF0ZVZhbHVlLCdsdGUnKTtcbiAgICAgIH1cbiAgICB9ZWxzZSBpZihjbGVhclZhbHVlKXtcbiAgICAgIHRoaXMubWF0Y2hTYW1lRmllbGRzKGdsb2JhbEZpbHRlci5mcm9tRmllbGQsIG51bGwsICdndGUnKTtcbiAgICAgIHRoaXMubWF0Y2hTYW1lRmllbGRzKGdsb2JhbEZpbHRlci50b0ZpZWxkLCBudWxsLCAnbHRlJyk7XG4gICAgfVxuICB9XG4gIG9uQ2xpY2tFdmVudChnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIpe1xuICAgIGlmKGdsb2JhbEZpbHRlciAmJiBnbG9iYWxGaWx0ZXIub25DbGljayl7XG4gICAgICBnbG9iYWxGaWx0ZXIub25DbGljayhnbG9iYWxGaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIpe1xuICAgIGlmIChnbG9iYWxGaWx0ZXIgJiYgZ2xvYmFsRmlsdGVyLm9uRm9jdXNPdXQpIHtcbiAgICAgIGdsb2JhbEZpbHRlci5vbkZvY3VzT3V0KGdsb2JhbEZpbHRlcik7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuZ2xvYmFsRmlsdGVycyk7XG4gICAgICB9LGdsb2JhbEZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUID8gIDI1MCA6IDApO1xuICB9XG4gIHVwZGF0ZVZhbHVlcyhnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIpe1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IGZhbHNlO1xuICAgICAgfSxnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVCA/ICAyNTAgOiAwKTtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUuZW1pdChnbG9iYWxGaWx0ZXIpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzRXZlbnQoZ2xvYmFsRmlsdGVyOiBJR2xvYmFsRmlsdGVyKXtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdCh0aGlzLmdsb2JhbEZpbHRlcnMpO1xuICAgIH0sZ2xvYmFsRmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQgPyAgMjUwIDogMCk7XG4gIH1cbiAgLyoqXG4gICAqIEFwcGx5IHNlbGVjdGVkIGZpbHRlcnNcbiAgICovXG4gIGFwcGx5RmlsdGVycyhmaWx0ZXJFdmVudDogYm9vbGVhbj0gdHJ1ZSwgZ2xvYmFsRmlsdGVyOmFueSA9IHt9KSB7XG4gICAgaWYoZ2xvYmFsRmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFKXtcbiAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlRmlsdGVyVmFsdWUoZ2xvYmFsRmlsdGVyKTtcbiAgICB9IFxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IGZpbHRlckV2ZW50O1xuICAgIGNvbnN0IGdsb2JhbEZpbHRlcnMgPSB0aGlzLmdsb2JhbEZpbHRlcnMuZmlsdGVyKCh4KSA9PiB4LmZpZWxkKTtcbiAgICBjb25zdCBpbmRleCA9IGdsb2JhbEZpbHRlcnMuZmluZEluZGV4KChmaWx0ZXIpPT4gZmlsdGVyLmZpZWxkICYmIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuREFURV9SQU5HRSApXG4gICAgaWYoaW5kZXggPiAtMSl7XG4gICAgICBnbG9iYWxGaWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICBpZiAodGhpcy5zaG93RGlhbG9nKSB7XG4gICAgICB0aGlzLnJlZi5jbG9zZShnbG9iYWxGaWx0ZXJzKTtcbiAgICB9IGVsc2UgXG4gICAgaWYoIXRoaXMuY2hlY2tGaWx0ZXJWYWxpZGF0aW9uKCkpe1xuICAgICAgdGhpcy5jaGVja0ZpbHRlclZhbGlkYXRpb24odHJ1ZSk7XG4gICAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQoZ2xvYmFsRmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IEJ5IERlZnVhbHQgQ2FsZW5kYXIgUmFuZ2UgXG4gIHNldERlZnVhbHRDYWxlbmRhclJhbmdlKGNoZWNrOiBib29sZWFuID0gdHJ1ZSl7XG4gICAgaWYodGhpcy5nbG9iYWxGaWx0ZXJzICYmIHRoaXMuZ2xvYmFsRmlsdGVycy5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpPT57XG4gICAgICAgIGlmKGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0Upe1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93TmV4dChmaWx0ZXIsIGNoZWNrKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzaG93TmV4dChmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsIGNoZWNrOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgbGV0IG5leHRWYWx1ZTogc3RyaW5nO1xuICAgIGxldCBkYXlSYW5nZTogRURheVJhbmdlID0gZmlsdGVyLmRheVJhbmdlXG4gICAgICA/IGZpbHRlci5kYXlSYW5nZVxuICAgICAgOiBFRGF5UmFuZ2UuV0VFSztcbiAgICBzd2l0Y2ggKGRheVJhbmdlKSB7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5EQVk6XG4gICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuc2V0RGF5RmlsdGVyKGZpbHRlciwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRGF5UmFuZ2UuTU9OVEg6XG4gICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuc2V0TW9udGhGaWx0ZXIoZmlsdGVyLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5ZRUFSOlxuICAgICAgICBuZXh0VmFsdWUgPSB0aGlzLnNldFllYXJGaWx0ZXIoZmlsdGVyLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyB3ZWVrXG4gICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuc2V0V2Vla0ZpbHRlcihmaWx0ZXIsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IGNoZWNrO1xuICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdCh0aGlzLmdsb2JhbEZpbHRlcnMpO1xuICAgIHJldHVybiBuZXh0VmFsdWU7XG4gIH1cblxuICBzaG93UHJldmlvdXMoZmlsdGVyOiBJR2xvYmFsRmlsdGVyKTogc3RyaW5nIHtcbiAgICBsZXQgcHJldmlvdXNWYWx1ZTogc3RyaW5nO1xuICAgIGxldCBkYXlSYW5nZTogRURheVJhbmdlID0gZmlsdGVyLmRheVJhbmdlXG4gICAgICA/IGZpbHRlci5kYXlSYW5nZVxuICAgICAgOiBFRGF5UmFuZ2UuV0VFSztcbiAgICBzd2l0Y2ggKGRheVJhbmdlKSB7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5EQVk6XG4gICAgICAgIHByZXZpb3VzVmFsdWUgPSB0aGlzLnNldERheUZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5NT05USDpcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0TW9udGhGaWx0ZXIoZmlsdGVyLCBmYWxzZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRGF5UmFuZ2UuWUVBUjpcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0WWVhckZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyB3ZWVrXG4gICAgICAgIHByZXZpb3VzVmFsdWUgPSB0aGlzLnNldFdlZWtGaWx0ZXIoZmlsdGVyLCBmYWxzZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSB0cnVlO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQodGhpcy5nbG9iYWxGaWx0ZXJzKTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbiAgfVxuXG4gIHNldENhbGVuZGFyUmFuZ2VGaWx0ZXJWYWx1ZShmaWx0ZXI6IElHbG9iYWxGaWx0ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiAoZmlsdGVyLnZhbHVlID1cbiAgICAgIHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKFxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSxcbiAgICAgICAgZmlsdGVyLmZvcm1hdCA/IGZpbHRlci5mb3JtYXQgOiAnTU0vZGQveXl5eSdcbiAgICAgICkgK1xuICAgICAgJ3wnICtcbiAgICAgIHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKFxuICAgICAgICB0aGlzLmVuZERhdGUsXG4gICAgICAgIGZpbHRlci5mb3JtYXQgPyBmaWx0ZXIuZm9ybWF0IDogJ01NL2RkL3l5eXknXG4gICAgICApKTtcbiAgfVxuXG4gIHNldERhdGVWYWx1ZShmaWx0ZXI6IGFueSkge1xuICAgIGxldCB2YWx1ZTogRGF0ZTtcbiAgICBpZiAoZmlsdGVyLnZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IG5ldyBEYXRlKGZpbHRlci52YWx1ZS5zcGxpdCgnfCcpWzBdKTtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZS5zZXRNb250aCh2YWx1ZS5nZXRNb250aCgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldERheUZpbHRlcihmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsIGlzTmV4dDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgdmFyIGN1cnJlbnREYXRlID0gdGhpcy5zZXREYXRlVmFsdWUoZmlsdGVyKTtcblxuICAgIGlmIChpc05leHQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0RGF0ZSgpICsgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBjdXJyZW50RGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXREYXRlKCkgLSAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGN1cnJlbnREYXRlO1xuICAgIH1cblxuICAgIHRoaXMuZW5kRGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIHRoaXMuc3RhcnREYXRlLmdldE1vbnRoKCksXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXREYXRlKCkgKyAxXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnNldENhbGVuZGFyUmFuZ2VGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICB9XG5cbiAgc2V0WWVhckZpbHRlcihmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsIGlzTmV4dDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgdmFyIGN1cnJlbnREYXRlID0gdGhpcy5zZXREYXRlVmFsdWUoZmlsdGVyKTtcbiAgICB2YXIgZmlyc3REYXRlT2ZZZWFyID0gbmV3IERhdGUoY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG5cbiAgICBpZiAoaXNOZXh0KSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSArIDEsIDAsIDEpXG4gICAgICAgIDogZmlyc3REYXRlT2ZZZWFyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSAtIDEsIDAsIDEpXG4gICAgICAgIDogZmlyc3REYXRlT2ZZZWFyO1xuICAgIH1cblxuICAgIHRoaXMuZW5kRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksIDExLCAzMSk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXRDYWxlbmRhclJhbmdlRmlsdGVyVmFsdWUoZmlsdGVyKTtcbiAgfVxuXG4gIHNldE1vbnRoRmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuICAgIHZhciBmaXJzdERhdGVPZk1vbnRoID0gbmV3IERhdGUoXG4gICAgICBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgY3VycmVudERhdGUuZ2V0TW9udGgoKSxcbiAgICAgIDFcbiAgICApO1xuXG4gICAgaWYgKGlzTmV4dCkge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBmaXJzdERhdGVPZk1vbnRoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSAtIDEsXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGZpcnN0RGF0ZU9mTW9udGg7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUoXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAwXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnNldENhbGVuZGFyUmFuZ2VGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICB9XG5cbiAgc2V0V2Vla0ZpbHRlcihmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsIGlzTmV4dDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgbGV0IGN1cnJlbnREYXRlID0gdGhpcy5zZXREYXRlVmFsdWUoZmlsdGVyKTtcbiAgICBsZXQgZmlyc3REYXkgPSBuZXcgRGF0ZShjdXJyZW50RGF0ZS5zZXREYXRlKGZpbHRlci52YWx1ZSA/IGN1cnJlbnREYXRlLmdldERhdGUoKSA6IGN1cnJlbnREYXRlLmdldERhdGUoKSAtIGN1cnJlbnREYXRlLmdldERheSgpICsgMSkpO1xuICAgIGxldCB3ZWVrU2Vjb25kcyA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuXG4gICAgaWYgKGlzTmV4dCkge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlLmdldFRpbWUoKSArIHdlZWtTZWNvbmRzKVxuICAgICAgICA6IG5ldyBEYXRlKGZpcnN0RGF5LmdldFRpbWUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRUaW1lKCkgLSB3ZWVrU2Vjb25kcylcbiAgICAgICAgOiBuZXcgRGF0ZShmaXJzdERheS5nZXRUaW1lKCkgLSB3ZWVrU2Vjb25kcyk7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0VGltZSgpICsgNiAqIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gIH1cblxuICAgIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICAgICBzZWxlY3RMb29rdXBGaWVsZChnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyKSB7ICAgICAgIFxuICAgICAgdGhpcy5ncmlkU2VydmljZS5zZXRMb29rVXBGaWx0ZXIoZ2xvYmFsRmlsdGVycywgdGhpcy5kaWFsb2dTZXJ2aWNlLCB0cnVlKTtcbiAgICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBmaWx0ZXIgdmFsdWVzXG4gICAqL1xuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzLm1hcCgoaXRlbTogYW55KSA9PiAoaXRlbS52YWx1ZSA9IG51bGwpKTtcbiAgICBjb25zdCBjbGVhckdyaWRGaWx0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xlYXJHcmlkRmlsdGVyVmFsdWVzQnV0dG9uJylcbiAgICBpZihjbGVhckdyaWRGaWx0ZXIpe1xuICAgICAgY2xlYXJHcmlkRmlsdGVyLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgIC8qKlxuICAgKiBDbGVhciB2YWx1ZXMgb2YgRGF0ZSBSYW5nZSBGaWx0ZXJcbiAgICovXG4gICAgY2xlYXJEYXRlUmFuZ2VWYWx1ZShmaWx0ZXI6IGFueSl7XG4gICAgICB0aGlzLnNldERhdGVSYW5nZVZhbHVlKGZpbHRlciwgdHJ1ZSlcbiAgICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGRpYWxvZyB3aXRob3V0IGFwcGx5aW5nIGZpbHRlcnNcbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmNsZWFyRmlsdGVycygpO1xuICAgIHRoaXMucmVmLmNsb3NlKCk7XG4gIH1cbiAgcmFuZ2VEYXRlY2xvc2UoZ2xvYmFsRmlsdGVyOiBhbnkpIHtcbiAgICB0aGlzLmRhdGVQaWNrZXIuaGlkZU92ZXJsYXkoKTtcbiAgICB0aGlzLmRhdGVQaWNrZXIub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmRhdGVQaWNrZXIuZGF0ZXBpY2tlckNsaWNrID0gdHJ1ZTtcbiAgICBjb25zdCBpZDogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0KTtcbiAgICBpZC5mb2N1cygpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5kYXRlcGlja2VyQ2xpY2sgPSB0cnVlO1xuXG4gIH1cblxuICBmaWx0ZXJJbnB1dCgpIHtcbiAgICB0aGlzLnNob3dJbnB1dCA9ICF0aGlzLnNob3dJbnB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VkIHRoZSBjYWxlbmRhciBpbnB1dFxuICAgKi9cbiAgc2VsZWN0RGF0ZShnbG9iYWxGaWx0ZXI6IGFueSwgZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlKXtcbiAgICBpZihnbG9iYWxGaWx0ZXIudmFsdWU/Lmxlbmd0aCA+IDEgJiYgZ2xvYmFsRmlsdGVyLnZhbHVlWzFdICE9PSBudWxsKXtcbiAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlVmFsdWUoZ2xvYmFsRmlsdGVyKTtcbiAgICAgIGlmKGZvY3VzZWQgPT10cnVlKXtcbiAgICAgIHRoaXMucmFuZ2VEYXRlY2xvc2UoZ2xvYmFsRmlsdGVyKTsgXG4gICAgICB9XG4gICAgfVxuICAgIGlmKGZvY3VzZWQpe1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2xvYmFsRmlsdGVyLmZpZWxkKT8uZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgdGFiRm9jdXNFdmVudChnbG9iYWxGaWx0ZXI6IGFueSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy4nK2dsb2JhbEZpbHRlci5maWVsZFxuICAgICk7XG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lLmNsaWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtY29tcG9uZW50LXdyYXBwZXItZGl2XCI+XG4gIDxkaXZcbiAgICBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmhpZGRlbiA/ICdnbG9iYWxGaWx0ZXJIaWRkZW4nIDogZ2xvYmFsRmlsdGVyLmNvbHVtbiA/ICdjb2wtJyArIGdsb2JhbEZpbHRlci5jb2x1bW4gOiAnY29sLTMnXCJcbiAgICAqbmdGb3I9XCJsZXQgZ2xvYmFsRmlsdGVyIG9mIGdsb2JhbEZpbHRlcnNcIlxuICA+XG4gICAgPGRpdiBbbmdTd2l0Y2hdPVwiZ2xvYmFsRmlsdGVyLnR5cGVcIj5cbiAgICAgIDwhLS0gQ2FsZW5kYXIgY29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtZmlsdGVyLWRpdlwiICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLkNBTEVOREFSXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtbGFiZWxcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NzaWJsZS1idWxrLXVwZGF0ZS1pbnB1dC13cmFwcGVyLWRpdlwiPlxuICAgICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHkgJyArIGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dDogJ2ZsZXgtZ3Jvdy0xIGdyb3ctMSAnICsgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0XCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdC1EYXRlJ1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cInNlbGVjdERhdGUoZ2xvYmFsRmlsdGVyLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiZ2xvYmFsRmlsdGVyLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cImNhbGVuZGFyRm9jdXNFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnbG9iYWxGaWx0ZXIuaW50ZXJmYWNlVHlwZT09J2J1bGtVcGRhdGUnXCIgY2xhc3M9XCJwLWlucHV0LWljb24tcmlnaHQgZ2xvYmFsLWZpbHRlciBidWxrLXVwZGF0ZVwiID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVWYWx1ZXMoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImZhLXJlZ3VsYXIgZmEtYXJyb3ctZG93bi10by1kb3R0ZWQtbGluZVwiXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAgXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZmlsdGVyaW5nXCI+XG4gICAgICAgICAgICAgICAgPHNlLWZpbHRlci1tZW51IFtnbG9iYWxGaWx0ZXJdPVwiZ2xvYmFsRmlsdGVyXCI+PC9zZS1maWx0ZXItbWVudT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBDYWxlbmRhciBSYW5nZSAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5DQUxFTkRBUl9SQU5HRVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dQcmV2aW91cyhnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJQcmV2aW91cyB7e1xuICAgICAgICAgICAgICAgIGdsb2JhbEZpbHRlci5kYXlSYW5nZSA/IGdsb2JhbEZpbHRlci5kYXlSYW5nZSA6ICdXZWVrJ1xuICAgICAgICAgICAgICB9fSA8PFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogZ2xvYmFsRmlsdGVyLmNvbG9yID8gZ2xvYmFsRmlsdGVyLmNvbG9yIDogJyd9XCIgLS0+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1sYWJlbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucHJlZml4PT09dHJ1ZSB8fCBnbG9iYWxGaWx0ZXIucHJlZml4PT09dW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAge3sgIGdsb2JhbEZpbHRlci5sYWJlbFRleHQgPyBnbG9iYWxGaWx0ZXIubGFiZWxUZXh0IDogJycgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZVxuICAgICAgICAgICAgICAgICAgfCBkYXRlXG4gICAgICAgICAgICAgICAgICAgIDogKGdsb2JhbEZpbHRlci5mb3JtYXQgPyBnbG9iYWxGaWx0ZXIuZm9ybWF0IDogJ01NL2RkL3l5eXknKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0b1xuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGVuZERhdGVcbiAgICAgICAgICAgICAgICAgIHwgZGF0ZVxuICAgICAgICAgICAgICAgICAgICA6IChnbG9iYWxGaWx0ZXIuZm9ybWF0ID8gZ2xvYmFsRmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5JylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucHJlZml4PT09ZmFsc2VcIj5cbiAgICAgICAgICAgICAgICB7eyBnbG9iYWxGaWx0ZXIubGFiZWxUZXh0ID8gZ2xvYmFsRmlsdGVyLmxhYmVsVGV4dCA6ICcnfX1cbiAgICAgICAgICAgICAgPC9zcGFuPjwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dOZXh0KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICBsYWJlbD1cIk5leHQge3tcbiAgICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXIuZGF5UmFuZ2UgPyBnbG9iYWxGaWx0ZXIuZGF5UmFuZ2UgOiAnV2VlaydcbiAgICAgICAgICAgICAgfX0gPj5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBbbmdTdHlsZV09XCJ7IGJhY2tncm91bmQ6IGdsb2JhbEZpbHRlci5jb2xvciA/IGdsb2JhbEZpbHRlci5jb2xvciA6ICcnfVwiIC0tPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gQ2hlY2tib3ggQ29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtZmlsdGVyLWRpdlwiICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLkNIRUNLQk9YXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiXCIgZm9yPVwiYmFzaWNcIj57eyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQgfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvc3NpYmxlLWJ1bGstdXBkYXRlLWlucHV0LXdyYXBwZXItZGl2XCI+XG4gICAgICAgICAgICA8cC1jaGVja2JveFxuICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSc6ICdmbGV4IGFsaWduLWl0ZW1zLWNlbnRlcidcIlxuICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnbG9iYWxGaWx0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgPjwvcC1jaGVja2JveD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnbG9iYWxGaWx0ZXIuaW50ZXJmYWNlVHlwZT09J2J1bGtVcGRhdGUnXCIgY2xhc3M9XCJwLWlucHV0LWljb24tcmlnaHQgZ2xvYmFsLWZpbHRlciBidWxrLXVwZGF0ZVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlVmFsdWVzKGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICBpY29uPVwiZmEtcmVndWxhciBmYS1hcnJvdy1kb3duLXRvLWRvdHRlZC1saW5lXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgIFxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIFNwYWNlciBDb250cm9sIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5TUEFDRVJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5jb2x1bW5cbiAgICAgICAgICAgICAgICA/ICdjb2wtJyArIGdsb2JhbEZpbHRlci5jb2x1bW5cbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIERyb3Bkb3duIENvbnRyb2wgLS0+XG4gICAgICA8c3BhbiBbaGlkZGVuXT1cImdsb2JhbEZpbHRlci5oaWRkZW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWZpbHRlci1kaXZcIiAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5EUk9QRE9XTlwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWxhYmVsXCIgZm9yPVwiYmFzaWNcIj57eyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQgfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvc3NpYmxlLWJ1bGstdXBkYXRlLWlucHV0LXdyYXBwZXItZGl2XCI+XG4gICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHRcIlxuICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCJnbG9iYWxGaWx0ZXIuZmllbGRcIlxuICAgICAgICAgICAgICAoa2V5dXAuVGFiKT1cInRhYkZvY3VzRXZlbnQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHRcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJnbG9iYWxGaWx0ZXIuZGF0YSB8fCBbXVwiXG4gICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJnbG9iYWxGaWx0ZXIub3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZ2xvYmFsRmlsdGVyLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgW2ZpbHRlcl09XCJnbG9iYWxGaWx0ZXIuYWxsb3dTZWFyY2hcIlxuICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgID48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmludGVyZmFjZVR5cGU9PSdidWxrVXBkYXRlJ1wiIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0IGdsb2JhbC1maWx0ZXIgYnVsay11cGRhdGVcIiA+XG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVWYWx1ZXMoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIGljb249XCJmYS1yZWd1bGFyIGZhLWFycm93LWRvd24tdG8tZG90dGVkLWxpbmVcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAgXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gSW5wdXQgY29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtZmlsdGVyLWRpdlwiICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLklOUFVUXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiXCIgZm9yPVwiYmFzaWNcIj57eyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQgfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvc3NpYmxlLWJ1bGstdXBkYXRlLWlucHV0LXdyYXBwZXItZGl2XCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2xvYmFsRmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdsb2JhbEZpbHRlci5pbnRlcmZhY2VUeXBlPT0nYnVsa1VwZGF0ZSdcIiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodCBnbG9iYWwtZmlsdGVyIGJ1bGstdXBkYXRlXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVWYWx1ZXMoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIGljb249XCJmYS1yZWd1bGFyIGZhLWFycm93LWRvd24tdG8tZG90dGVkLWxpbmVcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAgXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZmlsdGVyaW5nXCI+XG4gICAgICAgICAgICAgIDxzZS1maWx0ZXItbWVudSBbZ2xvYmFsRmlsdGVyXT1cImdsb2JhbEZpbHRlclwiPjwvc2UtZmlsdGVyLW1lbnU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBOdW1lcmljSW5wdXQgY29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5OVU1FUklDSU5QVVRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtbGFiZWxcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW5vd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zc2libGUtYnVsay11cGRhdGUtaW5wdXQtd3JhcHBlci1kaXZcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnbG9iYWxGaWx0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdsb2JhbEZpbHRlci5pbnRlcmZhY2VUeXBlPT0nYnVsa1VwZGF0ZSdcIiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodCBnbG9iYWwtZmlsdGVyIGJ1bGstdXBkYXRlXCIgPlxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlVmFsdWVzKGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICBpY29uPVwiZmEtcmVndWxhciBmYS1hcnJvdy1kb3duLXRvLWRvdHRlZC1saW5lXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgIFxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmZpbHRlcmluZ1wiPlxuICAgICAgICAgICAgICA8c2UtZmlsdGVyLW1lbnUgW2dsb2JhbEZpbHRlcl09XCJnbG9iYWxGaWx0ZXJcIj48L3NlLWZpbHRlci1tZW51PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG4gICAgICBcbiAgICAgIDwhLS0gRGF0ZSBSYW5nZSBDb250cm9sIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCIgKm5nU3dpdGNoQ2FzZT1cImZpdGVyVHlwZXMuREFURV9SQU5HRVwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxwLWNhbGVuZGFyIFxuICAgICAgICAgICAgI3JhbmdlQ2FsZW5kYXJcbiAgICAgICAgICAgIFtzaG93QnV0dG9uQmFyXT1cInRydWVcIlxuXG4gICAgICAgICAgICBbaW5wdXRJZF09XCJnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHRcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSAnICsgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IDogJ2ZsZXgtZ3Jvdy0xIGdyb3ctMSAnICsgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2xvYmFsRmlsdGVyLnZhbHVlXCIgXG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwicmFuZ2VcIiBcbiAgICAgICAgICAgIFtzZWxlY3RPdGhlck1vbnRoc109XCJ0cnVlXCJcbiAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgICAob25TZWxlY3QpPVwic2VsZWN0RGF0ZShnbG9iYWxGaWx0ZXIsIHRydWUpXCJcbiAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgIChvbkNsaWNrT3V0c2lkZSk9XCJzZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgIChvbkJsdXIpPVwic2V0RGF0ZVJhbmdlRmlsdGVyVmFsdWUoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAoa2V5dXApPVwiY2FsZW5kYXJGb2N1c0V2ZW50KGdsb2JhbEZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAob25DbGVhckNsaWNrKT1cImNsZWFyRGF0ZVJhbmdlVmFsdWUoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnModHJ1ZSwgZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICBcbiAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICA8IS0tIHRvZGF5QnV0dG9uU3R5bGVDbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICBjbGVhckJ1dHRvblN0eWxlQ2xhc3M9XCJtbC1hdXRvXCIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5maWx0ZXJpbmdcIj5cbiAgICAgICAgICAgICAgPHNlLWZpbHRlci1tZW51IFtnbG9iYWxGaWx0ZXJdPVwiZ2xvYmFsRmlsdGVyXCI+PC9zZS1maWx0ZXItbWVudT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIE51bWVyaWMgUmFuZ2UgY29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5OVU1FUklDX1JBTkdFXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBtci0yXCI+XG4gICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgW3Nob3dCdXR0b25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwiZ2xvYmFsRmlsdGVyPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJyA/IGdsb2JhbEZpbHRlci5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbyA/IGdsb2JhbEZpbHRlci5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbyA6ICcyJyA6ICcwJ1wiXG4gICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJnbG9iYWxGaWx0ZXI/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvIDogJzInIDogJzAnXCJcbiAgICAgICAgICAgICAgKG9uQmx1cik9XCJzZXROdW1lcmljUmFuZ2VWYWx1ZUZyb20oZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZXROdW1lcmljUmFuZ2VWYWx1ZUZyb20oZ2xvYmFsRmlsdGVyLHRydWUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnZmxleC1ncm93LTEgIGdyb3ctMSBpbnB1dC1udW1iZXInXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG8tbnVtZXJpYyBtci0yXCI+VG88L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgW3Nob3dCdXR0b25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVUd29cIlxuICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwiZ2xvYmFsRmlsdGVyPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJyA/IGdsb2JhbEZpbHRlci5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbyA/IGdsb2JhbEZpbHRlci5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbyA6ICcyJyA6ICcwJ1wiXG4gICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJnbG9iYWxGaWx0ZXI/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvIDogJzInIDogJzAnXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnZmxleC1ncm93LTEgbXItMiBncm93LTEgaW5wdXQtbnVtYmVyJ1wiXG4gICAgICAgICAgICAgIChvbkJsdXIpPVwic2V0TnVtZXJpY1JhbmdlVmFsdWVUd28oZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZXROdW1lcmljUmFuZ2VWYWx1ZVR3byhnbG9iYWxGaWx0ZXIsdHJ1ZSlcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmZpbHRlcmluZ1wiPlxuICAgICAgICAgICAgICA8c2UtZmlsdGVyLW1lbnUgW2dsb2JhbEZpbHRlcl09XCJnbG9iYWxGaWx0ZXJcIj48L3NlLWZpbHRlci1tZW51PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIE11bHRpU2VsZWN0IGNvbnRyb2wgLS0+XG4gICAgICA8c3BhbiBbaGlkZGVuXT1cImdsb2JhbEZpbHRlci5oaWRkZW5cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtZmlsdGVyLWRpdlwiXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImZpdGVyVHlwZXMuTVVMVElTRUxFQ1RcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiXCIgZm9yPVwiYmFzaWNcIj57eyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQgfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLnJlcXVpcmVkRmllbGRcIiBbY2xhc3NdPVwiJ3JlcXVpcmVkLXN0YXIgJyArIChnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJyBpbnZhbGlkICcgOiAnJylcIj4qPC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgIFtjbGFzc109XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZ2xvYmFsRmlsdGVyLmRhdGFcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgPCEtLSBTZWxlY3QgQnV0dG9uIGNvbnRyb2wgLS0+XG4gICAgICA8c3BhbiBbaGlkZGVuXT1cImdsb2JhbEZpbHRlci5oaWRkZW5cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtZmlsdGVyLWRpdlwiXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cImZpdGVyVHlwZXMuU0VMRUNUQlVUVE9OXCJcblxuICAgICAgICA+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIlwiIGZvcj1cImJhc2ljXCI+e3sgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IH19XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxwLXNlbGVjdEJ1dHRvblxuICAgICAgICAgIFtjbGFzc109XCInIG1vZGVybml6ZWRSYWRpb0xvb2sgJyArIChnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJyBuZy1pbnZhbGlkIG5nLWRpcnR5ICcgOiAnJylcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2xvYmFsRmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJnbG9iYWxGaWx0ZXIuZGF0YVwiXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZ2xvYmFsRmlsdGVyLmRpc3BsYXlTdHlsZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiICBcbiAgICAgICAgPlxuICAgICAgICA8IS0tIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU+XG4gICAgICAgICAgPGkgW2NsYXNzXT1cIml0ZW0uaWNvblwiPjwvaT5cbiAgICAgIDwvbmctdGVtcGxhdGU+IC0tPlxuICAgICAgPC9wLXNlbGVjdEJ1dHRvbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuXG5cblxuICAgICAgPCEtLSBMb29rdXAgQ29udHJvbCBGaWVsZCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5MT09LVVBfSU5QVVRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtbGFiZWxcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zc2libGUtYnVsay11cGRhdGUtaW5wdXQtd3JhcHBlci1kaXZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXIgbG9va3VwLWZpbHRlci13cmFwcGVyIGdsb2JhbEZpbHRlcnNcIj4gXG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJnbG9iYWxGaWx0ZXIuZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXI/LnZhbHVlVHdvPy50ZXh0ID8gZ2xvYmFsRmlsdGVyLnZhbHVlVHdvLnRleHQgOiBnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJnbG9iYWxGaWx0ZXIuZmllbGRcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnbG9iYWxGaWx0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5UYWIpPVwic2VsZWN0TG9va3VwRmllbGQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmJhY2tzcGFjZSk9XCJyZW1vdmVOdWxsTG9va3VwKCRldmVudCwgZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbG9va3VwLWlucHV0XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWlucHV0LWljb24tcmlnaHQgZ2xvYmFsLWZpbHRlclwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2hldnJvbi1yaWdodCBsb29rdXAtaW5wdXQtaWNvbiBnbG9iYWwtZmlsdGVyXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXJlY3Qtd3JhcHBlci1jbG9zZS1pY29uLWxvb2t1cFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdsb2JhbEZpbHRlci5pbnRlcmZhY2VUeXBlPT0nYnVsa1VwZGF0ZSdcIiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodCBnbG9iYWwtZmlsdGVyIGJ1bGstdXBkYXRlXCIgPlxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlVmFsdWVzKGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICBpY29uPVwiZmEtcmVndWxhciBmYS1hcnJvdy1kb3duLXRvLWRvdHRlZC1saW5lXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgIFxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSA8c3Bhbj5cbiAgPGkgIGljb249XCJwaSBwaS10aW1lc1wiPjwvaT5cbjwvc3Bhbj4gLS0+XG5cbjwhLS0gQXBwbHkgYnV0dG9uIC0tPlxuXG48YnV0dG9uXG5wQnV0dG9uXG4qbmdJZj1cIiFncmlkVXBkYXRlXCJcbnR5cGU9XCJidXR0b25cIlxuaWNvbj1cInBpIHBpLXNlYXJjaFwiXG5pZD1cInNlYXJjaEdsb2JhbEZpbHRlckJ0blwiXG4oY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIlxuY2xhc3M9XCJnbG9iYWwtc2VhcmNoIGFsaWduLWdsb2JhbEZpbHRlci1idG4gZ2xvYmFsLWJ0biBoaWRlLWZpbHRlci1idXR0b25cIlxuPjwvYnV0dG9uPlxuXG48IS0tIENsb3NlIGJ1dHRvbiAtLT5cbjxidXR0b25cbnBCdXR0b25cbipuZ0lmPVwiIWdyaWRVcGRhdGVcIlxuaWQ9XCJjbGVhckdsb2JhbEZpbHRlckJ0blwiXG50eXBlPVwiYnV0dG9uXCJcbmljb249XCJwaSBwaS1yZXBsYXlcIlxuKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCJcbmNsYXNzPVwiaGlkZS1maWx0ZXItYnV0dG9uXCJcbj48L2J1dHRvbj5cbiJdfQ==
|
|
549
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkL2dsb2JhbC1maWx0ZXJzL2dsb2JhbC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC9nbG9iYWwtZmlsdGVycy9nbG9iYWwtZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUVMLHFCQUFxQixFQUNyQixlQUFlLEVBRWYsU0FBUyxFQUNULGdCQUFnQixHQUVqQixNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBU3BDLE1BQU0sT0FBTyx1QkFBdUI7SUFRbEMsSUFBYSxjQUFjLENBQUUsR0FBTyxJQUFJLElBQUcsR0FBRyxLQUFLLElBQUksRUFBRTtRQUFFLFFBQVEsQ0FBQTtLQUFFLENBQUEsQ0FBQztJQWN0RSxZQUNTLFFBQWtCLEVBQ04sR0FBcUIsRUFDckIsTUFBMkIsRUFDdEMsV0FBd0IsRUFDekIsYUFBNEIsRUFDM0IsWUFBMEIsRUFDMUIsRUFBYztRQU5mLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBM0JmLGtCQUFhLEdBQW9CLEVBQUUsQ0FBQztRQUNwQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDM0IsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2RCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3ZELGVBQVUsR0FBRyxxQkFBcUIsQ0FBQztRQUNuQyxlQUFVLEdBQUcsZUFBZSxDQUFDO1FBQzdCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFLbkMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ2pCLHVCQUFrQixHQUFZLElBQUksQ0FBQztRQUNuQyxtQkFBYyxHQUFVLFVBQVUsQ0FBQztJQVUvQixDQUFDO0lBRUw7O09BRUc7SUFDSCxRQUFRO1FBQ04sSUFBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzlDLElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFDO2dCQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWdDLENBQUM7YUFDekU7WUFDRCxnQ0FBZ0M7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLFNBQVM7UUFDL0IsSUFBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDOUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkM7YUFBSztZQUNKLElBQUcsSUFBSSxDQUFDLGNBQWMsRUFBQztnQkFDckIsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9GLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUM7b0JBQ3ZGLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFBO29CQUNwQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbkM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUdELGtCQUFrQixDQUFDLEdBQUc7UUFDcEIsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZSxDQUFDLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxHQUFHLENBQUE7SUFDaEIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxrQkFBa0IsQ0FBQyxZQUEwQixFQUFFLEtBQVc7UUFDeEQsUUFBUSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNqRyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQTtZQUN0QyxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pGLDZEQUE2RDtZQUM3RCxJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFLLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQy9DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7aUJBQzlCO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQy9DLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEQsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztpQkFDNUI7Z0JBQ0QsSUFBSSxJQUFJLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUN2QjtZQUNELElBQUcsSUFBSSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUM7Z0JBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO2dCQUNqQyxJQUFHLFlBQVksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsUUFBUSxFQUFDO29CQUN0RCxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzNFO2FBQ0Y7aUJBQU0sSUFBRyxJQUFJLEVBQUUsTUFBTSxFQUFDO2dCQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxTQUFTLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsVUFBVSxFQUFDO1lBQ2xKLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsTUFBb0I7UUFDeEMsSUFBRyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUEsRUFBRSxDQUFBLFVBQVUsQ0FBQyxJQUFJLEtBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUM7WUFDbkYsTUFBTSxDQUFDLGFBQWEsR0FBQyxJQUFJLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsY0FBc0IsS0FBSztRQUMvQyxJQUFJLEtBQUssR0FBVyxLQUFLLENBQUM7UUFDMUIsSUFBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUNuQyxJQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUM7b0JBQ2xKLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ2IsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFDLGNBQWMsQ0FBQztpQkFDekQ7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7aUJBQzFCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxFQUFDO2dCQUMxRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7UUFDRixDQUFDLENBQUMsQ0FBQTtRQUNILGdDQUFnQztRQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUNoRCw2QkFBNkIsQ0FDOUIsQ0FBQztRQUNGLElBQUcsa0JBQWtCLEVBQUM7WUFDcEIsSUFBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEVBQUM7Z0JBQ25FLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7YUFDaEM7aUJBQUk7Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzthQUNqQztTQUNGO2FBQUk7WUFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1NBQ2hDO1FBQ0EsbUZBQW1GO1FBQ25GLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9HLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUMsRUFBRTtZQUN0QyxJQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBQztnQkFDdkMsSUFBRyxPQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFHLFFBQVEsRUFBQztvQkFDcEMsU0FBUyxDQUFDLEtBQUssR0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7aUJBQ3REO2dCQUNELElBQUcsT0FBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBRyxRQUFRLEVBQUM7b0JBQ3ZDLFNBQVMsQ0FBQyxRQUFRLEdBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2lCQUM1RDtnQkFDRCxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3pDO2lCQUFNLElBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUM7Z0JBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsS0FBSyxFQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pFO2lCQUFNLElBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUM7Z0JBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBQyxTQUFTLENBQUMsUUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BFO1FBQ0QsQ0FBQyxDQUFDLENBQUE7UUFDRixvREFBb0Q7UUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuSCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN4QyxJQUFHLFlBQVksRUFBQztnQkFDaEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDNUM7UUFDRCxDQUFDLENBQUMsQ0FBQTtRQUNGLG9HQUFvRztRQUNwRyxzREFBc0Q7UUFDdEQsTUFBTTtRQUNOLDhCQUE4QjtRQUM5QixJQUFJO0lBQ1AsQ0FBQztJQUVELHVCQUF1QixDQUFDLFlBQTJCLEVBQUUsY0FBc0IsS0FBSztRQUM5RSxJQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUM7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3ZGO1FBQ0QsSUFBRyxXQUFXLEVBQUM7WUFDYixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWEsRUFBQyxLQUFTLEVBQUUsUUFBZSxFQUFFLG1CQUF3QixFQUFFO1FBQ2hGLElBQUcsS0FBSyxFQUFDO1lBQ1AsSUFBRyxnQkFBZ0IsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLEVBQUM7Z0JBQzNFLE1BQU0sU0FBUyxHQUFHLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDO2dCQUNyRSxJQUFHLFNBQVMsRUFBQztvQkFDWCxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDL0M7cUJBQUk7b0JBQ0gsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7WUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RSxJQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBQztnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO2FBQy9GO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7YUFDNUY7U0FDRjtJQUNMLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxZQUEyQixFQUFFLGNBQXNCLEtBQUs7UUFDOUUsSUFBRyxZQUFZLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLGFBQWEsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFDO1lBQ3RGLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBQyxZQUFZLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNwRixJQUFHLFdBQVcsRUFBQztnQkFDYixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDckI7U0FDRDtJQUVKLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxLQUFVLEVBQUUsWUFBaUI7UUFDNUMsSUFBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFDO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxZQUFpQjtRQUNoQyxJQUFJLFlBQVksRUFBRTtZQUVoQixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFDLEVBQUUsQ0FBQSxDQUFDLENBQUEsRUFBRSxDQUFBO1lBQzdDLFlBQVksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFBLFlBQVksQ0FBQyxRQUFRLEdBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQSxFQUFFLENBQUE7WUFDbEQsMERBQTBEO1lBQ3pELHVEQUF1RDtZQUN2RCxzRUFBc0U7WUFDdEUsMEJBQTBCO1NBQzNCO2FBQU07WUFDTiwyQkFBMkI7WUFDMUIsaUNBQWlDO1NBQ2xDO1FBQ0YsZ0NBQWdDO1FBQ2hDLHlCQUF5QjtRQUN4Qix5QkFBeUI7UUFDMUIsSUFBSTtJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxZQUFpQixFQUFFLGFBQXFCLEtBQUs7UUFDN0QsSUFBRyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDaEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQzNDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3JCLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDekQsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUN6QyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNyQixZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQ3pELENBQUM7WUFDRixJQUFJLGFBQWEsSUFBSSxXQUFXLElBQUksWUFBWSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO2dCQUNsRixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUMsYUFBYSxFQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUMsV0FBVyxFQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7YUFBSyxJQUFHLFVBQVUsRUFBQztZQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBQ0QsWUFBWSxDQUFDLFlBQTJCO1FBQ3RDLElBQUcsWUFBWSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUM7WUFDdEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsWUFBMkI7UUFDekMsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRTtZQUMzQyxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxFQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxZQUFZLENBQUMsWUFBMkI7UUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUMxQyxDQUFDLEVBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQTJCO1FBQzNDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLENBQUMsRUFBQyxZQUFZLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxZQUFZLENBQUMsY0FBc0IsSUFBSSxFQUFFLGVBQW1CLEVBQUU7UUFDNUQsSUFBRyxZQUFZLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFVBQVUsRUFBQztZQUN4RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztRQUNoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxVQUFVLENBQUUsQ0FBQTtRQUNuSCxJQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBQztZQUNaLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvQjthQUNELElBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBQztZQUMvQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLHVCQUF1QixDQUFDLFFBQWlCLElBQUk7UUFDM0MsSUFBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUNuQyxJQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYyxFQUFDO29CQUN0RCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMvQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ1Q7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFxQixFQUFFLFFBQWlCLElBQUk7UUFDbkQsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksUUFBUSxHQUFjLE1BQU0sQ0FBQyxRQUFRO1lBQ3ZDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUNqQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNuQixRQUFRLFFBQVEsRUFBRTtZQUNoQixLQUFLLFNBQVMsQ0FBQyxHQUFHO2dCQUNoQixTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxLQUFLO2dCQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxJQUFJO2dCQUNqQixTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLE1BQU07WUFDUjtnQkFDRSxPQUFPO2dCQUNQLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDN0MsTUFBTTtTQUNUO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQXFCO1FBQ2hDLElBQUksYUFBcUIsQ0FBQztRQUMxQixJQUFJLFFBQVEsR0FBYyxNQUFNLENBQUMsUUFBUTtZQUN2QyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDakIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsUUFBUSxRQUFRLEVBQUU7WUFDaEIsS0FBSyxTQUFTLENBQUMsR0FBRztnQkFDaEIsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsS0FBSztnQkFDbEIsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDakIsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTztnQkFDUCxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELE1BQU07U0FDVDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELDJCQUEyQixDQUFDLE1BQXFCO1FBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQzdDO2dCQUNELEdBQUc7Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQ3JCLElBQUksQ0FBQyxPQUFPLEVBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUM3QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxLQUFXLENBQUM7UUFDaEIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2hCLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQXFCLEVBQUUsTUFBZTtRQUNqRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUM3QjtnQkFDSCxDQUFDLENBQUMsV0FBVyxDQUFDO1NBQ2pCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2dCQUM3QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQzdCO2dCQUNILENBQUMsQ0FBQyxXQUFXLENBQUM7U0FDakI7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxDQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FDN0IsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxhQUFhLENBQUMsTUFBcUIsRUFBRSxNQUFlO1FBQ2xELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoRSxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsZUFBZSxDQUFDO1NBQ3JCO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2dCQUM3QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLGVBQWUsQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFOUQsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFxQixFQUFFLE1BQWU7UUFDbkQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUM3QixXQUFXLENBQUMsV0FBVyxFQUFFLEVBQ3pCLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFDdEIsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDN0IsQ0FBQyxDQUNGO2dCQUNILENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztTQUN0QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUM3QixDQUFDLENBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1NBQ3RCO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQzdCLENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFxQixFQUFFLE1BQWU7UUFDbEQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RJLElBQUksV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFMUMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO2dCQUM3QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUU1RSxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUM7O0tBRUM7SUFDQSxpQkFBaUIsQ0FBQyxhQUE0QjtRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUg7O09BRUc7SUFDSCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUM5RSxJQUFHLGVBQWUsRUFBQztZQUNqQixlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUE7O01BRUU7SUFDRCxtQkFBbUIsQ0FBQyxNQUFXO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVIOztPQUVHO0lBQ0gsTUFBTTtRQUNKLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCxjQUFjLENBQUMsWUFBaUI7UUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFRLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFFekMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsWUFBaUIsRUFBRSxVQUFtQixLQUFLO1FBQ3BELElBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFDO1lBQ2xFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxJQUFHLE9BQU8sSUFBRyxJQUFJLEVBQUM7Z0JBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDakM7U0FDRjtRQUNELElBQUcsT0FBTyxFQUFDO1lBQ1QsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDdEQ7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLFlBQWlCO1FBQzdCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDbkQsR0FBRyxHQUFDLFlBQVksQ0FBQyxLQUFLLENBQ3ZCLENBQUM7UUFDRixJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7aUlBbmtCVSx1QkFBdUI7cUhBQXZCLHVCQUF1Qiw0Y0NwQnBDLGt0c0JBb2ZBOzsyRkRoZWEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBNEIxQixRQUFROzswQkFDUixRQUFRO3NKQXhCaUIsVUFBVTtzQkFBckMsU0FBUzt1QkFBQyxlQUFlO2dCQUNqQixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ00sY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dSZWYsIER5bmFtaWNEaWFsb2dDb25maWcsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtcbiAgSUdsb2JhbEZpbHRlcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZEdsb2JhbEZpbHRlcixcbiAgRURheVJhbmdlLFxuICBFRmlsdGVyVmFsaWRhdG9yLFxuICBJR3JpZFVwZGF0ZSxcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlLWdsb2JhbC1maWx0ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dsb2JhbC1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2xvYmFsLWZpbHRlcnMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VHbG9iYWxGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCdyYW5nZUNhbGVuZGFyJykgZGF0ZVBpY2tlcjogYW55O1xuICBASW5wdXQoKSBnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10gPSBbXTtcbiAgQElucHV0KCkgc2VhcmNoR2xvYmFsRmlsdGVyQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsZWFyR2xvYmFsRmlsdGVyQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGdyaWRVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIGZpbHRlcnNBcHBsaWVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHVwZGF0ZVZhbHVlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgc2V0IGFjdGl2ZVRlc3RNb2RlICh2YWw6YW55KSB7IGlmKHZhbCA9PT0gdHJ1ZSkgeyBkZWJ1Z2dlciB9fVxuXG4gIHB1YmxpYyBmaXRlclR5cGVzID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlO1xuICBwdWJsaWMgY29sdW1uVHlwZSA9IEVHcmlkQ29sdW1uVHlwZTtcbiAgcHVibGljIHNob3dEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGF0ZVJhbmdlVmFsdWUgOiBhbnk7XG4gIHB1YmxpYyBzdGFydERhdGU6IERhdGU7XG4gIHB1YmxpYyBlbmREYXRlOiBEYXRlO1xuXG4gIHNob3dJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXI6IGFueSA9ICcnO1xuICBoaWRlQ2xlYXJGaWx0ZXJCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBjYWxlbmRhckZvcm1hdDpzdHJpbmcgPSAnbW0vZGQveXknO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkYXRlcGlwZTogRGF0ZVBpcGUsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZixcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgKSB7IH1cblxuICAvKipcbiAgICogQXNzaWdubWVudCBvZiBzZWxlY3RlZCBjb2x1bW5zIG9uIHBhZ2UgbG9hZFxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZGF0YSl7XG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSB0aGlzLmNvbmZpZy5kYXRhLm9wZW5EaWFsb2c7XG4gICAgICBpZih0aGlzLmNvbmZpZy5kYXRhLmdsb2JhbEZpbHRlcnMpe1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnMgPSB0aGlzLmNvbmZpZz8uZGF0YS5nbG9iYWxGaWx0ZXJzIGFzIElHbG9iYWxGaWx0ZXJbXTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBCeSBEZWZ1YWx0IENhbGVuZGFyIFJhbmdlXG4gICAgICB0aGlzLnNldERlZnVhbHRDYWxlbmRhclJhbmdlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShkYXRlUmFuZ2Upe1xuICAgIGlmKGRhdGVSYW5nZT8udmFsdWU/Lmxlbmd0aCA+IDEpe1xuICAgICAgZGF0ZVJhbmdlLnZhbHVlWzBdID0gbmV3IERhdGUoZGF0ZVJhbmdlLnZhbHVlWzBdKTtcbiAgICAgIGRhdGVSYW5nZS52YWx1ZVsxXSA9IG5ldyBEYXRlKGRhdGVSYW5nZS52YWx1ZVsxXSk7XG4gICAgICB0aGlzLnNlbGVjdERhdGUoZGF0ZVJhbmdlLCBmYWxzZSk7XG4gICAgfWVsc2Uge1xuICAgICAgaWYodGhpcy5kYXRlUmFuZ2VWYWx1ZSl7XG4gICAgICAgIGxldCBkYXRlUmFuZ2VWYWx1ZSA9IHRoaXMuZGF0ZVJhbmdlVmFsdWU/LmluY2x1ZGVzKCctJykgPyB0aGlzLmRhdGVSYW5nZVZhbHVlPy5zcGxpdCgnLScpIDogJyc7XG4gICAgICAgIGlmIChkYXRlUmFuZ2VWYWx1ZS5sZW5ndGggPT0gMiAmJiAoZGF0ZVJhbmdlVmFsdWVbMF0udHJpbSgpID09IGRhdGVSYW5nZVZhbHVlWzFdLnRyaW0oKSkpe1xuICAgICAgICAgIGRhdGVSYW5nZS52YWx1ZSA9IFtdXG4gICAgICAgICAgZGF0ZVJhbmdlLnZhbHVlWzBdID0gbmV3IERhdGUoZGF0ZVJhbmdlVmFsdWVbMF0pO1xuICAgICAgICAgIGRhdGVSYW5nZS52YWx1ZVsxXSA9IG5ldyBEYXRlKGRhdGVSYW5nZVZhbHVlWzFdKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoZGF0ZVJhbmdlLCBmYWxzZSk7ICAgICBcbiAgICAgICAgfSAgICBcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIFxuICBjb250YWluc1doaXRlc3BhY2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5pbmNsdWRlcygnICcpO1xuICB9XG5cbiAgYWRkU3BhY2VzYXRmaXJzdCh4KSB7XG4gICAgcmV0dXJuIFwiIFwiICsgeDtcbiAgfVxuXG4gIGFkZFNwYWNlc2F0bGFzdCh4KSB7XG4gICAgcmV0dXJuIHggKyBcIiBcIlxuICB9XG5cbiAgLy8gY2hhbmdlIGNhbGVuZGFyIGZvcm1hdCBvbiBydW4gdGltZSBpZiB1c2VyIHR5cGUgZGF0ZSBvbiB0aGUgY2FsZW5kYXIgZmllbGQuXG4gIGNhbGVuZGFyRm9jdXNFdmVudChnbG9iYWxGaWx0ZXI6SUdsb2JhbEZpbHRlciwgZXZlbnQ/OiBhbnkpe1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0KVswXT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAoYTogYW55KSA9PiB7XG4gICAgICBsZXQgeWVhciA9IGE/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XG4gICAgICB5ZWFyID0geWVhcj8udG9TdHJpbmcoKS5zcGxpdChcIiBcIilbMF07XG4gICAgICB0aGlzLmRhdGVSYW5nZVZhbHVlID0gYT8udGFyZ2V0Py52YWx1ZVxuICAgICAgbGV0IGRhdGVSYW5nZVZhbHVlID0gYT8udGFyZ2V0Py52YWx1ZT8uaW5jbHVkZXMoJy0nKSA/IGE/LnRhcmdldD8udmFsdWU/LnNwbGl0KCctJykgOiAnJztcbiAgICAgIC8vIGFkZGluZyBzcGFjZSBiZXR3ZWVuIGZyb20gYW5kIHRvIGRhdGUgaW4gZGF0ZSByYW5nZSBmaWx0ZXJcbiAgICAgIGlmIChkYXRlUmFuZ2VWYWx1ZS5sZW5ndGggPT0gMiAmJiBkYXRlUmFuZ2VWYWx1ZVsxXS5zcGxpdCgnLycpLmxlbmd0aCA9PSAzICYmICghdGhpcy5jb250YWluc1doaXRlc3BhY2UoZGF0ZVJhbmdlVmFsdWVbMF0pIHx8ICF0aGlzLmNvbnRhaW5zV2hpdGVzcGFjZShkYXRlUmFuZ2VWYWx1ZVsxXSkpKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250YWluc1doaXRlc3BhY2UoZGF0ZVJhbmdlVmFsdWVbMF0pKSB7XG4gICAgICAgICAgbGV0IGZyb21EYXRlID0gdGhpcy5hZGRTcGFjZXNhdGxhc3QoZGF0ZVJhbmdlVmFsdWVbMF0pO1xuICAgICAgICAgIGRhdGVSYW5nZVZhbHVlWzBdID0gZnJvbURhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zV2hpdGVzcGFjZShkYXRlUmFuZ2VWYWx1ZVsxXSkpIHtcbiAgICAgICAgICBsZXQgdG9EYXRlID0gdGhpcy5hZGRTcGFjZXNhdGZpcnN0KGRhdGVSYW5nZVZhbHVlWzFdKTtcbiAgICAgICAgICBkYXRlUmFuZ2VWYWx1ZVsxXSA9IHRvRGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWx1ZSA9IGRhdGVSYW5nZVZhbHVlWzBdICsgJy0nICsgZGF0ZVJhbmdlVmFsdWVbMV1cbiAgICAgICAgYS50YXJnZXQudmFsdWUgPSBhbHVlO1xuICAgICAgfVxuICAgICAgaWYoeWVhcj8ubGVuZ3RoID09PSA0KXtcbiAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95eSc7XG4gICAgICAgIGlmKGdsb2JhbEZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIpe1xuICAgICAgICAgIGdsb2JhbEZpbHRlci52YWx1ZSA9IG5ldyBEYXRlKGEudGFyZ2V0LnZhbHVlKS50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKHllYXI/Lmxlbmd0aCl7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IHllYXJWYWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLycpWzRdO1xuICAgIGlmKCghZ2xvYmFsRmlsdGVyLnZhbHVlIHx8IHllYXJWYWx1ZSA9PSB1bmRlZmluZWQgfHwgeWVhclZhbHVlPy50b1N0cmluZygpPy5sZW5ndGggPT09IDEpICYmIGdsb2JhbEZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuREFURV9SQU5HRSl7XG4gICAgICB0aGlzLnNldERhdGVSYW5nZVZhbHVlKGdsb2JhbEZpbHRlciwgdHJ1ZSk7XG4gICAgfVxuICB9XG4gIGNoZWNrSWZGaWx0ZXJSZXF1aXJlZChmaWx0ZXI6SUdsb2JhbEZpbHRlcil7XG4gICAgaWYoZmlsdGVyLnZhbGlkYXRpb25zPy5maW5kKHZhbGlkYXRpb249PnZhbGlkYXRpb24udHlwZT09PUVGaWx0ZXJWYWxpZGF0b3IuUkVRVUlSRUQpKXtcbiAgICAgIGZpbHRlci5yZXF1aXJlZEZpZWxkPXRydWU7XG4gICAgfSAgICBcbiAgfVxuICBjaGVja0ZpbHRlclZhbGlkYXRpb24ocmVtb3ZlRXJyb3I6Ym9vbGVhbiA9IGZhbHNlKTpib29sZWFue1xuICAgIGxldCB2YWxpZDpib29sZWFuID0gZmFsc2U7XG4gICAgaWYodGhpcy5nbG9iYWxGaWx0ZXJzICYmIHRoaXMuZ2xvYmFsRmlsdGVycy5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpPT57XG4gICAgICAgIGlmKGZpbHRlci52YWxpZGF0aW9ucyAmJiBmaWx0ZXIudmFsaWRhdGlvbnMubGVuZ3RoID4gMCAmJiBmaWx0ZXIudmFsaWRhdGlvbnNbMF0udHlwZSA9PT0gRUZpbHRlclZhbGlkYXRvci5SRVFVSVJFRCAmJiAhZmlsdGVyLnZhbHVlICYmICFyZW1vdmVFcnJvcil7XG4gICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICAgIGZpbHRlci5lcnJvck1lc3NhZ2UgPSBmaWx0ZXIuZGlzcGxheVRleHQrXCIgaXMgcmVxdWlyZWRcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXIuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCl7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzPy5mb3JFYWNoKChmaWx0ZXIpPT57XG4gICAgICB0aGlzLmNoZWNrSWZGaWx0ZXJSZXF1aXJlZChmaWx0ZXIpO1xuICAgICAgaWYoZmlsdGVyLnZhbHVlICYmIChmaWx0ZXIuaGlkZGVuID09PSBmYWxzZSB8fCBmaWx0ZXIuaGlkZGVuID09PSB1bmRlZmluZWQpKXtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnNFdmVudChmaWx0ZXIpO1xuICAgICAgfVxuICAgICB9KVxuICAgIC8vIHNldCBCeSBEZWZ1YWx0IENhbGVuZGFyIFJhbmdlXG4gICAgdGhpcy5zZXREZWZ1YWx0Q2FsZW5kYXJSYW5nZShmYWxzZSk7XG4gICAgY29uc3QgZ2lyZENsZWFyRmlsdGVyQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnY2xlYXJHcmlkRmlsdGVyVmFsdWVzQnV0dG9uJ1xuICAgICk7XG4gICAgaWYoZ2lyZENsZWFyRmlsdGVyQnRuKXtcbiAgICAgIGlmKGdpcmRDbGVhckZpbHRlckJ0bi5jbGFzc0xpc3QuY29udGFpbnMoJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicpKXtcbiAgICAgICAgdGhpcy5oaWRlQ2xlYXJGaWx0ZXJCdG4gPSB0cnVlO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuaGlkZUNsZWFyRmlsdGVyQnRuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmhpZGVDbGVhckZpbHRlckJ0biA9IHRydWU7XG4gICAgfVxuICAgICAvLyBzcGxpdGluZyBkYXRlIHJhbmdlIHZhbHVlIGFuZCBhc3NpZ24gdG8gdmFsdWUgYW5kIHZhbHVlVHdvIGluIERhdGVfUmFuZ2UgQ29udHJvbFxuICAgICBjb25zdCBkYXRlUmFuZ2VGaWx0ZXIgPSB0aGlzLmdsb2JhbEZpbHRlcnMuZmlsdGVyKChmaWx0ZXIpPT4gZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFKTsgXG4gICAgIGRhdGVSYW5nZUZpbHRlcj8uZm9yRWFjaCgoZGF0ZVJhbmdlKT0+e1xuICAgICBpZihkYXRlUmFuZ2UudmFsdWUgJiYgZGF0ZVJhbmdlLnZhbHVlVHdvKXtcbiAgICAgICBpZih0eXBlb2YoZGF0ZVJhbmdlLnZhbHVlKT09PSdvYmplY3QnKXtcbiAgICAgICAgIGRhdGVSYW5nZS52YWx1ZT1kYXRlUmFuZ2UudmFsdWUudG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgfVxuICAgICAgIGlmKHR5cGVvZihkYXRlUmFuZ2UudmFsdWVUd28pPT09J29iamVjdCcpe1xuICAgICAgICAgZGF0ZVJhbmdlLnZhbHVlVHdvPWRhdGVSYW5nZS52YWx1ZVR3by50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICB9XG4gICAgICAgZGF0ZVJhbmdlLnZhbHVlID0gKGRhdGVSYW5nZS52YWx1ZSArIFwiLVwiICsgZGF0ZVJhbmdlLnZhbHVlVHdvKT8udG9TdHJpbmcoKT8uc3BsaXQoJy0nKTsgXG4gICAgICAgdGhpcy5zZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShkYXRlUmFuZ2UpO1xuICAgICB9IGVsc2UgaWYoZGF0ZVJhbmdlLnZhbHVlICYmICFkYXRlUmFuZ2UudmFsdWVUd28pe1xuICAgICAgIHRoaXMubWF0Y2hTYW1lRmllbGRzKGRhdGVSYW5nZS5mcm9tRmllbGQsZGF0ZVJhbmdlLnZhbHVlLCdndGUnKTtcbiAgICAgfSBlbHNlIGlmKCFkYXRlUmFuZ2UudmFsdWUgJiYgZGF0ZVJhbmdlLnZhbHVlVHdvKXtcbiAgICAgICB0aGlzLm1hdGNoU2FtZUZpZWxkcyhkYXRlUmFuZ2UuZnJvbUZpZWxkLGRhdGVSYW5nZS52YWx1ZVR3bywnZ3RlJyk7XG4gICAgIH1cbiAgICAgfSlcbiAgICAgLy8gRmlsdHJpbmcgTnVtZXJpYyBSYW5nZSBjb250cm9scyBvbiBnbG9iYWwgZmlsdGVyIFxuICAgICBjb25zdCBudW1lclJhbmdlRmlsdGVyID0gdGhpcy5nbG9iYWxGaWx0ZXJzLmZpbHRlcigoZmlsdGVyKT0+IGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRSk7XG4gICAgIG51bWVyUmFuZ2VGaWx0ZXIuZm9yRWFjaCgobnVtZXJpY1JhbmdlKSA9PntcbiAgICAgICBpZihudW1lcmljUmFuZ2Upe1xuICAgICAgIHRoaXMuc2V0TnVtZXJpY1JhbmdlVmFsdWVGcm9tKG51bWVyaWNSYW5nZSk7XG4gICAgICAgdGhpcy5zZXROdW1lcmljUmFuZ2VWYWx1ZVR3byhudW1lcmljUmFuZ2UpO1xuICAgICB9XG4gICAgIH0pXG4gICAgIC8vIGlmKCEodGhpcy5nbG9iYWxGaWx0ZXJzLnNvbWUoKGZpbHRlcik9PiBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFKSkgJiZcbiAgICAgLy8gICh0aGlzLmdsb2JhbEZpbHRlcnMuc29tZSgoZmlsdGVyKT0+IGZpbHRlci52YWx1ZSkpXG4gICAgIC8vICApe1xuICAgICAvLyAgIHRoaXMuYXBwbHlGaWx0ZXJzKGZhbHNlKTtcbiAgICAgLy8gfVxuICB9XG5cbiAgc2V0TnVtZXJpY1JhbmdlVmFsdWVUd28oZ2xvYmFsRmlsdGVyOiBJR2xvYmFsRmlsdGVyLCBzZW5kUmVxdWVzdDpib29sZWFuID0gZmFsc2Upe1xuICAgIGlmKGdsb2JhbEZpbHRlci50b0ZpZWxkKXtcbiAgICAgIHRoaXMubWF0Y2hTYW1lRmllbGRzKGdsb2JhbEZpbHRlci50b0ZpZWxkLCBnbG9iYWxGaWx0ZXIudmFsdWVUd28sJ2x0ZScsIGdsb2JhbEZpbHRlcik7XG4gICAgfVxuICAgIGlmKHNlbmRSZXF1ZXN0KXtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgbWF0Y2hTYW1lRmllbGRzKGZpZWxkOiBzdHJpbmcsdmFsdWU6YW55LCBvcGVyYXRvcjpzdHJpbmcsIG51bWVyUmFuZ2VGaWx0ZXI6IGFueSA9IHt9KXtcbiAgICAgIGlmKGZpZWxkKXtcbiAgICAgICAgaWYobnVtZXJSYW5nZUZpbHRlciAmJiBudW1lclJhbmdlRmlsdGVyPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJyAmJiB2YWx1ZSl7XG4gICAgICAgICAgY29uc3QgZGlnaXRJbmZvID0gbnVtZXJSYW5nZUZpbHRlcj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgaWYoZGlnaXRJbmZvKXtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk/LnRvRml4ZWQoZGlnaXRJbmZvKTtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk/LnRvRml4ZWQoMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzLmZpbmRJbmRleCgoZmlsdGVyKT0+IGZpZWxkID09PSBmaWx0ZXIuZmllbGQpO1xuICAgICAgICBpZihpbmRleCA+IC0xKXtcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNbaW5kZXhdID0ge2ZpZWxkOiBmaWVsZCwgbWF0Y2hNb2RlOidhbmQnLCBvcGVyYXRvcjogb3BlcmF0b3IsIHZhbHVlOiB2YWx1ZX07ICAgICAgIFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVycy5wdXNoKHtmaWVsZDogZmllbGQsIG1hdGNoTW9kZTonYW5kJywgb3BlcmF0b3I6IG9wZXJhdG9yLCB2YWx1ZTogdmFsdWV9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgc2V0TnVtZXJpY1JhbmdlVmFsdWVGcm9tKGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlciwgc2VuZFJlcXVlc3Q6Ym9vbGVhbiA9IGZhbHNlKSB7XG4gICAgIGlmKGdsb2JhbEZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ19SQU5HRSAmJiBnbG9iYWxGaWx0ZXIuZnJvbUZpZWxkKXsgXG4gICAgICB0aGlzLm1hdGNoU2FtZUZpZWxkcyhnbG9iYWxGaWx0ZXIuZnJvbUZpZWxkLGdsb2JhbEZpbHRlci52YWx1ZSwnZ3RlJywgZ2xvYmFsRmlsdGVyKTtcbiAgICAgIGlmKHNlbmRSZXF1ZXN0KXtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH1cbiAgICAgfVxuICBcbiAgfVxuICByZW1vdmVOdWxsTG9va3VwKGV2ZW50OiBhbnksIGdsb2JhbEZpbHRlcjogYW55KXtcbiAgICBpZighZXZlbnQudGFyZ2V0LnZhbHVlKXtcbiAgICAgIHRoaXMubG9va3VwQ2xlYXJWYWx1ZShnbG9iYWxGaWx0ZXIpO1xuICAgIH1cbiAgfVxuICBsb29rdXBDbGVhclZhbHVlKGdsb2JhbEZpbHRlcjogYW55KXtcbiAgICBpZiAoZ2xvYmFsRmlsdGVyKSB7XG5cbiAgICAgIGdsb2JhbEZpbHRlci52YWx1ZSA/IGdsb2JhbEZpbHRlci52YWx1ZT0nJzonJ1xuICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlVHdvP2dsb2JhbEZpbHRlci52YWx1ZVR3bz0nJzonJ1xuICAgICAvLyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQ/Z2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0PScnOicnXG4gICAgICAvLyBjb2x1bW4uZGlzcGxheUZpZWxkP3Jvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA9ICcnOicnXG4gICAgICAvLyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHQ/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXS50ZXh0PScnOicnXG4gICAgICAvLyByb3dbY29sdW1uLmZpZWxkXSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgIC8vIGNvbHVtbi5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgLy90aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgfVxuICAgLy8gdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgIC8vIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAvLyAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAvLyB9XG4gIH1cblxuICBzZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXI6IGFueSwgY2xlYXJWYWx1ZTogYm9vbGVhbiA9ZmFsc2UpIHtcbiAgICBpZihnbG9iYWxGaWx0ZXIudmFsdWU/Lmxlbmd0aCA+IDApe1xuICAgICAgY29uc3QgZnJvbURhdGVWYWx1ZSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKFxuICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWVbMF0sXG4gICAgICAgIGdsb2JhbEZpbHRlci5mb3JtYXQgPyBnbG9iYWxGaWx0ZXIuZm9ybWF0IDogJ01NL2RkL3l5eXknXG4gICAgICApO1xuICAgICAgY29uc3QgdG9EYXRlVmFsdWUgPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShcbiAgICAgICAgZ2xvYmFsRmlsdGVyLnZhbHVlWzFdLFxuICAgICAgICBnbG9iYWxGaWx0ZXIuZm9ybWF0ID8gZ2xvYmFsRmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5J1xuICAgICAgKTtcbiAgICAgIGlmIChmcm9tRGF0ZVZhbHVlICYmIHRvRGF0ZVZhbHVlICYmIGdsb2JhbEZpbHRlci5mcm9tRmllbGQgJiYgZ2xvYmFsRmlsdGVyLnRvRmllbGQpIHtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCxmcm9tRGF0ZVZhbHVlLCdndGUnKTtcbiAgICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLnRvRmllbGQsdG9EYXRlVmFsdWUsJ2x0ZScpO1xuICAgICAgfVxuICAgIH1lbHNlIGlmKGNsZWFyVmFsdWUpe1xuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLmZyb21GaWVsZCwgbnVsbCwgJ2d0ZScpO1xuICAgICAgdGhpcy5tYXRjaFNhbWVGaWVsZHMoZ2xvYmFsRmlsdGVyLnRvRmllbGQsIG51bGwsICdsdGUnKTtcbiAgICB9XG4gIH1cbiAgb25DbGlja0V2ZW50KGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlcil7XG4gICAgaWYoZ2xvYmFsRmlsdGVyICYmIGdsb2JhbEZpbHRlci5vbkNsaWNrKXtcbiAgICAgIGdsb2JhbEZpbHRlci5vbkNsaWNrKGdsb2JhbEZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlcil7XG4gICAgaWYgKGdsb2JhbEZpbHRlciAmJiBnbG9iYWxGaWx0ZXIub25Gb2N1c091dCkge1xuICAgICAgZ2xvYmFsRmlsdGVyLm9uRm9jdXNPdXQoZ2xvYmFsRmlsdGVyKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQodGhpcy5nbG9iYWxGaWx0ZXJzKTtcbiAgICAgIH0sZ2xvYmFsRmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQgPyAgMjUwIDogMCk7XG4gIH1cbiAgdXBkYXRlVmFsdWVzKGdsb2JhbEZpbHRlcjogSUdsb2JhbEZpbHRlcil7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gZmFsc2U7XG4gICAgICB9LGdsb2JhbEZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUID8gIDI1MCA6IDApO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZS5lbWl0KGdsb2JhbEZpbHRlcik7XG4gIH1cblxuICBhcHBseUZpbHRlcnNFdmVudChnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXIpe1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuZ2xvYmFsRmlsdGVycyk7XG4gICAgfSxnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVCA/ICAyNTAgOiAwKTtcbiAgfVxuICAvKipcbiAgICogQXBwbHkgc2VsZWN0ZWQgZmlsdGVyc1xuICAgKi9cbiAgYXBwbHlGaWx0ZXJzKGZpbHRlckV2ZW50OiBib29sZWFuPSB0cnVlLCBnbG9iYWxGaWx0ZXI6YW55ID0ge30pIHtcbiAgICBpZihnbG9iYWxGaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0Upe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShnbG9iYWxGaWx0ZXIpO1xuICAgIH0gXG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gZmlsdGVyRXZlbnQ7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVycyA9IHRoaXMuZ2xvYmFsRmlsdGVycy5maWx0ZXIoKHgpID0+IHguZmllbGQpO1xuICAgIGNvbnN0IGluZGV4ID0gZ2xvYmFsRmlsdGVycy5maW5kSW5kZXgoKGZpbHRlcik9PiBmaWx0ZXIuZmllbGQgJiYgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EQVRFX1JBTkdFIClcbiAgICBpZihpbmRleCA+IC0xKXtcbiAgICAgIGdsb2JhbEZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIGlmICh0aGlzLnNob3dEaWFsb2cpIHtcbiAgICAgIHRoaXMucmVmLmNsb3NlKGdsb2JhbEZpbHRlcnMpO1xuICAgIH0gZWxzZSBcbiAgICBpZighdGhpcy5jaGVja0ZpbHRlclZhbGlkYXRpb24oKSl7XG4gICAgICB0aGlzLmNoZWNrRmlsdGVyVmFsaWRhdGlvbih0cnVlKTtcbiAgICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdChnbG9iYWxGaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgQnkgRGVmdWFsdCBDYWxlbmRhciBSYW5nZSBcbiAgc2V0RGVmdWFsdENhbGVuZGFyUmFuZ2UoY2hlY2s6IGJvb2xlYW4gPSB0cnVlKXtcbiAgICBpZih0aGlzLmdsb2JhbEZpbHRlcnMgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzLmZvckVhY2goKGZpbHRlcik9PntcbiAgICAgICAgaWYoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSl7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dOZXh0KGZpbHRlciwgY2hlY2spO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dOZXh0KGZpbHRlcjogSUdsb2JhbEZpbHRlciwgY2hlY2s6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBsZXQgbmV4dFZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGRheVJhbmdlOiBFRGF5UmFuZ2UgPSBmaWx0ZXIuZGF5UmFuZ2VcbiAgICAgID8gZmlsdGVyLmRheVJhbmdlXG4gICAgICA6IEVEYXlSYW5nZS5XRUVLO1xuICAgIHN3aXRjaCAoZGF5UmFuZ2UpIHtcbiAgICAgIGNhc2UgRURheVJhbmdlLkRBWTpcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXREYXlGaWx0ZXIoZmlsdGVyLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5NT05USDpcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXRNb250aEZpbHRlcihmaWx0ZXIsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRURheVJhbmdlLllFQVI6XG4gICAgICAgIG5leHRWYWx1ZSA9IHRoaXMuc2V0WWVhckZpbHRlcihmaWx0ZXIsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHdlZWtcbiAgICAgICAgbmV4dFZhbHVlID0gdGhpcy5zZXRXZWVrRmlsdGVyKGZpbHRlciwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gY2hlY2s7XG4gICAgdGhpcy5maWx0ZXJzQXBwbGllZC5lbWl0KHRoaXMuZ2xvYmFsRmlsdGVycyk7XG4gICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgfVxuXG4gIHNob3dQcmV2aW91cyhmaWx0ZXI6IElHbG9iYWxGaWx0ZXIpOiBzdHJpbmcge1xuICAgIGxldCBwcmV2aW91c1ZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGRheVJhbmdlOiBFRGF5UmFuZ2UgPSBmaWx0ZXIuZGF5UmFuZ2VcbiAgICAgID8gZmlsdGVyLmRheVJhbmdlXG4gICAgICA6IEVEYXlSYW5nZS5XRUVLO1xuICAgIHN3aXRjaCAoZGF5UmFuZ2UpIHtcbiAgICAgIGNhc2UgRURheVJhbmdlLkRBWTpcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0RGF5RmlsdGVyKGZpbHRlciwgZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRURheVJhbmdlLk1PTlRIOlxuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdGhpcy5zZXRNb250aEZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVEYXlSYW5nZS5ZRUFSOlxuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdGhpcy5zZXRZZWFyRmlsdGVyKGZpbHRlciwgZmFsc2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIHdlZWtcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHRoaXMuc2V0V2Vla0ZpbHRlcihmaWx0ZXIsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkodHJ1ZSkpO1xuICAgIHRoaXMuZmlsdGVyc0FwcGxpZWQuZW1pdCh0aGlzLmdsb2JhbEZpbHRlcnMpO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICB9XG5cbiAgc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcjogSUdsb2JhbEZpbHRlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPVxuICAgICAgdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuc3RhcnREYXRlLFxuICAgICAgICBmaWx0ZXIuZm9ybWF0ID8gZmlsdGVyLmZvcm1hdCA6ICdNTS9kZC95eXl5J1xuICAgICAgKSArXG4gICAgICAnfCcgK1xuICAgICAgdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuZW5kRGF0ZSxcbiAgICAgICAgZmlsdGVyLmZvcm1hdCA/IGZpbHRlci5mb3JtYXQgOiAnTU0vZGQveXl5eSdcbiAgICAgICkpO1xuICB9XG5cbiAgc2V0RGF0ZVZhbHVlKGZpbHRlcjogYW55KSB7XG4gICAgbGV0IHZhbHVlOiBEYXRlO1xuICAgIGlmIChmaWx0ZXIudmFsdWUpIHtcbiAgICAgIHZhbHVlID0gbmV3IERhdGUoZmlsdGVyLnZhbHVlLnNwbGl0KCd8JylbMF0pO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlLnNldE1vbnRoKHZhbHVlLmdldE1vbnRoKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF5RmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuXG4gICAgaWYgKGlzTmV4dCkge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXREYXRlKCkgKyAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGN1cnJlbnREYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldERhdGUoKSAtIDFcbiAgICAgICAgICApXG4gICAgICAgIDogY3VycmVudERhdGU7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUoXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgIHRoaXMuc3RhcnREYXRlLmdldERhdGUoKSArIDFcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gIH1cblxuICBzZXRZZWFyRmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB2YXIgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuICAgIHZhciBmaXJzdERhdGVPZlllYXIgPSBuZXcgRGF0ZShjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcblxuICAgIGlmIChpc05leHQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpICsgMSwgMCwgMSlcbiAgICAgICAgOiBmaXJzdERhdGVPZlllYXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpIC0gMSwgMCwgMSlcbiAgICAgICAgOiBmaXJzdERhdGVPZlllYXI7XG4gICAgfVxuXG4gICAgdGhpcy5lbmREYXRlID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0RnVsbFllYXIoKSwgMTEsIDMxKTtcblxuICAgIHJldHVybiB0aGlzLnNldENhbGVuZGFyUmFuZ2VGaWx0ZXJWYWx1ZShmaWx0ZXIpO1xuICB9XG5cbiAgc2V0TW9udGhGaWx0ZXIoZmlsdGVyOiBJR2xvYmFsRmlsdGVyLCBpc05leHQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIHZhciBjdXJyZW50RGF0ZSA9IHRoaXMuc2V0RGF0ZVZhbHVlKGZpbHRlcik7XG4gICAgdmFyIGZpcnN0RGF0ZU9mTW9udGggPSBuZXcgRGF0ZShcbiAgICAgIGN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICBjdXJyZW50RGF0ZS5nZXRNb250aCgpLFxuICAgICAgMVxuICAgICk7XG5cbiAgICBpZiAoaXNOZXh0KSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IGZpcnN0RGF0ZU9mTW9udGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGVcbiAgICAgICAgPyBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRNb250aCgpIC0gMSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogZmlyc3REYXRlT2ZNb250aDtcbiAgICB9XG5cbiAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgIDBcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2FsZW5kYXJSYW5nZUZpbHRlclZhbHVlKGZpbHRlcik7XG4gIH1cblxuICBzZXRXZWVrRmlsdGVyKGZpbHRlcjogSUdsb2JhbEZpbHRlciwgaXNOZXh0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgY3VycmVudERhdGUgPSB0aGlzLnNldERhdGVWYWx1ZShmaWx0ZXIpO1xuICAgIGxldCBmaXJzdERheSA9IG5ldyBEYXRlKGN1cnJlbnREYXRlLnNldERhdGUoZmlsdGVyLnZhbHVlID8gY3VycmVudERhdGUuZ2V0RGF0ZSgpIDogY3VycmVudERhdGUuZ2V0RGF0ZSgpIC0gY3VycmVudERhdGUuZ2V0RGF5KCkgKyAxKSk7XG4gICAgbGV0IHdlZWtTZWNvbmRzID0gNyAqIDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbiAgICBpZiAoaXNOZXh0KSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlXG4gICAgICAgID8gbmV3IERhdGUodGhpcy5zdGFydERhdGUuZ2V0VGltZSgpICsgd2Vla1NlY29uZHMpXG4gICAgICAgIDogbmV3IERhdGUoZmlyc3REYXkuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZVxuICAgICAgICA/IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlLmdldFRpbWUoKSAtIHdlZWtTZWNvbmRzKVxuICAgICAgICA6IG5ldyBEYXRlKGZpcnN0RGF5LmdldFRpbWUoKSAtIHdlZWtTZWNvbmRzKTtcbiAgICB9XG5cbiAgICB0aGlzLmVuZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnN0YXJ0RGF0ZS5nZXRUaW1lKCkgKyA2ICogMjQgKiA2MCAqIDYwICogMTAwMCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXRDYWxlbmRhclJhbmdlRmlsdGVyVmFsdWUoZmlsdGVyKTtcbiAgfVxuXG4gICAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gICAgIHNlbGVjdExvb2t1cEZpZWxkKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXIpIHsgICAgICAgXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihnbG9iYWxGaWx0ZXJzLCB0aGlzLmRpYWxvZ1NlcnZpY2UsIHRydWUpO1xuICAgIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGZpbHRlciB2YWx1ZXNcbiAgICovXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnMubWFwKChpdGVtOiBhbnkpID0+IChpdGVtLnZhbHVlID0gbnVsbCkpO1xuICAgIGNvbnN0IGNsZWFyR3JpZEZpbHRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b24nKVxuICAgIGlmKGNsZWFyR3JpZEZpbHRlcil7XG4gICAgICBjbGVhckdyaWRGaWx0ZXIuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICAgLyoqXG4gICAqIENsZWFyIHZhbHVlcyBvZiBEYXRlIFJhbmdlIEZpbHRlclxuICAgKi9cbiAgICBjbGVhckRhdGVSYW5nZVZhbHVlKGZpbHRlcjogYW55KXtcbiAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlVmFsdWUoZmlsdGVyLCB0cnVlKVxuICAgIH1cblxuICAvKipcbiAgICogQ2xvc2UgZGlhbG9nIHdpdGhvdXQgYXBwbHlpbmcgZmlsdGVyc1xuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKCk7XG4gICAgdGhpcy5yZWYuY2xvc2UoKTtcbiAgfVxuICByYW5nZURhdGVjbG9zZShnbG9iYWxGaWx0ZXI6IGFueSkge1xuICAgIHRoaXMuZGF0ZVBpY2tlci5oaWRlT3ZlcmxheSgpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5kYXRlcGlja2VyQ2xpY2sgPSB0cnVlO1xuICAgIGNvbnN0IGlkOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQpO1xuICAgIGlkLmZvY3VzKCk7XG4gICAgdGhpcy5kYXRlUGlja2VyLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5kYXRlUGlja2VyLmRhdGVwaWNrZXJDbGljayA9IHRydWU7XG5cbiAgfVxuXG4gIGZpbHRlcklucHV0KCkge1xuICAgIHRoaXMuc2hvd0lucHV0ID0gIXRoaXMuc2hvd0lucHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZWQgdGhlIGNhbGVuZGFyIGlucHV0XG4gICAqL1xuICBzZWxlY3REYXRlKGdsb2JhbEZpbHRlcjogYW55LCBmb2N1c2VkOiBib29sZWFuID0gZmFsc2Upe1xuICAgIGlmKGdsb2JhbEZpbHRlci52YWx1ZT8ubGVuZ3RoID4gMSAmJiBnbG9iYWxGaWx0ZXIudmFsdWVbMV0gIT09IG51bGwpe1xuICAgICAgdGhpcy5zZXREYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXIpO1xuICAgICAgaWYoZm9jdXNlZCA9PXRydWUpe1xuICAgICAgdGhpcy5yYW5nZURhdGVjbG9zZShnbG9iYWxGaWx0ZXIpOyBcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoZm9jdXNlZCl7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChnbG9iYWxGaWx0ZXIuZmllbGQpPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuICB0YWJGb2N1c0V2ZW50KGdsb2JhbEZpbHRlcjogYW55KSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLicrZ2xvYmFsRmlsdGVyLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUuY2xpY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1jb21wb25lbnQtd3JhcHBlci1kaXZcIj5cbiAgPGRpdlxuICAgIFtjbGFzc109XCJnbG9iYWxGaWx0ZXIuaGlkZGVuID8gJ2dsb2JhbEZpbHRlckhpZGRlbicgOiBnbG9iYWxGaWx0ZXIuY29sdW1uID8gJ2NvbC0nICsgZ2xvYmFsRmlsdGVyLmNvbHVtbiA6ICdjb2wtMydcIlxuICAgICpuZ0Zvcj1cImxldCBnbG9iYWxGaWx0ZXIgb2YgZ2xvYmFsRmlsdGVyc1wiXG4gID5cbiAgICA8ZGl2IFtuZ1N3aXRjaF09XCJnbG9iYWxGaWx0ZXIudHlwZVwiPlxuICAgICAgPCEtLSBDYWxlbmRhciBjb250cm9sIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCIgKm5nU3dpdGNoQ2FzZT1cImZpdGVyVHlwZXMuQ0FMRU5EQVJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1sYWJlbFwiIGZvcj1cImJhc2ljXCI+e3sgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IH19XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc3NpYmxlLWJ1bGstdXBkYXRlLWlucHV0LXdyYXBwZXItZGl2XCI+XG4gICAgICAgICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSAnICsgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0OiAnZmxleC1ncm93LTEgZ3Jvdy0xICcgKyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHRcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0LURhdGUnXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwic2VsZWN0RGF0ZShnbG9iYWxGaWx0ZXIsIHRydWUpXCJcbiAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJnbG9iYWxGaWx0ZXIuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoa2V5dXApPVwiY2FsZW5kYXJGb2N1c0V2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdsb2JhbEZpbHRlci5pbnRlcmZhY2VUeXBlPT0nYnVsa1VwZGF0ZSdcIiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodCBnbG9iYWwtZmlsdGVyIGJ1bGstdXBkYXRlXCIgPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVZhbHVlcyhnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZmEtcmVndWxhciBmYS1hcnJvdy1kb3duLXRvLWRvdHRlZC1saW5lXCJcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiICBcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5maWx0ZXJpbmdcIj5cbiAgICAgICAgICAgICAgICA8c2UtZmlsdGVyLW1lbnUgW2dsb2JhbEZpbHRlcl09XCJnbG9iYWxGaWx0ZXJcIj48L3NlLWZpbHRlci1tZW51PlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIENhbGVuZGFyIFJhbmdlIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWZpbHRlci1kaXZcIlxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLkNBTEVOREFSX1JBTkdFXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIlwiIGZvcj1cImJhc2ljXCI+e3sgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IH19XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCIgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1idG5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1ByZXZpb3VzKGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICBsYWJlbD1cIlByZXZpb3VzIHt7XG4gICAgICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmRheVJhbmdlID8gZ2xvYmFsRmlsdGVyLmRheVJhbmdlIDogJ1dlZWsnXG4gICAgICAgICAgICAgIH19IDw8XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gW25nU3R5bGVdPVwieyBiYWNrZ3JvdW5kOiBnbG9iYWxGaWx0ZXIuY29sb3IgPyBnbG9iYWxGaWx0ZXIuY29sb3IgOiAnJ31cIiAtLT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWxhYmVsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5wcmVmaXg9PT10cnVlIHx8IGdsb2JhbEZpbHRlci5wcmVmaXg9PT11bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICB7eyAgZ2xvYmFsRmlsdGVyLmxhYmVsVGV4dCA/IGdsb2JhbEZpbHRlci5sYWJlbFRleHQgOiAnJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgc3RhcnREYXRlXG4gICAgICAgICAgICAgICAgICB8IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgOiAoZ2xvYmFsRmlsdGVyLmZvcm1hdCA/IGdsb2JhbEZpbHRlci5mb3JtYXQgOiAnTU0vZGQveXl5eScpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRvXG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgZW5kRGF0ZVxuICAgICAgICAgICAgICAgICAgfCBkYXRlXG4gICAgICAgICAgICAgICAgICAgIDogKGdsb2JhbEZpbHRlci5mb3JtYXQgPyBnbG9iYWxGaWx0ZXIuZm9ybWF0IDogJ01NL2RkL3l5eXknKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5wcmVmaXg9PT1mYWxzZVwiPlxuICAgICAgICAgICAgICAgIHt7IGdsb2JhbEZpbHRlci5sYWJlbFRleHQgPyBnbG9iYWxGaWx0ZXIubGFiZWxUZXh0IDogJyd9fVxuICAgICAgICAgICAgICA8L3NwYW4+PC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCIgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1idG5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd05leHQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiTmV4dCB7e1xuICAgICAgICAgICAgICAgIGdsb2JhbEZpbHRlci5kYXlSYW5nZSA/IGdsb2JhbEZpbHRlci5kYXlSYW5nZSA6ICdXZWVrJ1xuICAgICAgICAgICAgICB9fSA+PlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIFtuZ1N0eWxlXT1cInsgYmFja2dyb3VuZDogZ2xvYmFsRmlsdGVyLmNvbG9yID8gZ2xvYmFsRmlsdGVyLmNvbG9yIDogJyd9XCIgLS0+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBDaGVja2JveCBDb250cm9sIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCIgKm5nU3dpdGNoQ2FzZT1cImZpdGVyVHlwZXMuQ0hFQ0tCT1hcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zc2libGUtYnVsay11cGRhdGUtaW5wdXQtd3JhcHBlci1kaXZcIj5cbiAgICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JzogJ2ZsZXggYWxpZ24taXRlbXMtY2VudGVyJ1wiXG4gICAgICAgICAgICAgIFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2xvYmFsRmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICA+PC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdsb2JhbEZpbHRlci5pbnRlcmZhY2VUeXBlPT0nYnVsa1VwZGF0ZSdcIiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodCBnbG9iYWwtZmlsdGVyIGJ1bGstdXBkYXRlXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVWYWx1ZXMoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIGljb249XCJmYS1yZWd1bGFyIGZhLWFycm93LWRvd24tdG8tZG90dGVkLWxpbmVcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAgXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gU3BhY2VyIENvbnRyb2wgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWZpbHRlci1kaXZcIlxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLlNQQUNFUlwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmNvbHVtblxuICAgICAgICAgICAgICAgID8gJ2NvbC0nICsgZ2xvYmFsRmlsdGVyLmNvbHVtblxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRHJvcGRvd24gQ29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtZmlsdGVyLWRpdlwiICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLkRST1BET1dOXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZ2xvYmFsLWZpbHRlcnMtbGFiZWxcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zc2libGUtYnVsay11cGRhdGUtaW5wdXQtd3JhcHBlci1kaXZcIj5cbiAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgIFtjbGFzc109XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cImdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dFwiXG4gICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cImdsb2JhbEZpbHRlci5maWVsZFwiXG4gICAgICAgICAgICAgIChrZXl1cC5UYWIpPVwidGFiRm9jdXNFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImdsb2JhbEZpbHRlci5kYXRhIHx8IFtdXCJcbiAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImdsb2JhbEZpbHRlci5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJnbG9iYWxGaWx0ZXIub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICBbZmlsdGVyXT1cImdsb2JhbEZpbHRlci5hbGxvd1NlYXJjaFwiXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnbG9iYWxGaWx0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnbG9iYWxGaWx0ZXIuaW50ZXJmYWNlVHlwZT09J2J1bGtVcGRhdGUnXCIgY2xhc3M9XCJwLWlucHV0LWljb24tcmlnaHQgZ2xvYmFsLWZpbHRlciBidWxrLXVwZGF0ZVwiID5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVZhbHVlcyhnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgaWNvbj1cImZhLXJlZ3VsYXIgZmEtYXJyb3ctZG93bi10by1kb3R0ZWQtbGluZVwiXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiICBcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBJbnB1dCBjb250cm9sIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCIgKm5nU3dpdGNoQ2FzZT1cImZpdGVyVHlwZXMuSU5QVVRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zc2libGUtYnVsay11cGRhdGUtaW5wdXQtd3JhcHBlci1kaXZcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RmlsdGVycygpXCJcbiAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmludGVyZmFjZVR5cGU9PSdidWxrVXBkYXRlJ1wiIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0IGdsb2JhbC1maWx0ZXIgYnVsay11cGRhdGVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVZhbHVlcyhnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgaWNvbj1cImZhLXJlZ3VsYXIgZmEtYXJyb3ctZG93bi10by1kb3R0ZWQtbGluZVwiXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiICBcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5maWx0ZXJpbmdcIj5cbiAgICAgICAgICAgICAgPHNlLWZpbHRlci1tZW51IFtnbG9iYWxGaWx0ZXJdPVwiZ2xvYmFsRmlsdGVyXCI+PC9zZS1maWx0ZXItbWVudT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlXG4gICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIE51bWVyaWNJbnB1dCBjb250cm9sIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWZpbHRlci1kaXZcIlxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLk5VTUVSSUNJTlBVVFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1sYWJlbFwiIGZvcj1cImJhc2ljXCI+e3sgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IH19XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBwb3NzaWJsZS1idWxrLXVwZGF0ZS1pbnB1dC13cmFwcGVyLWRpdlwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2xvYmFsRmlsdGVyLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmludGVyZmFjZVR5cGU9PSdidWxrVXBkYXRlJ1wiIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0IGdsb2JhbC1maWx0ZXIgYnVsay11cGRhdGVcIiA+XG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVWYWx1ZXMoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIGljb249XCJmYS1yZWd1bGFyIGZhLWFycm93LWRvd24tdG8tZG90dGVkLWxpbmVcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAgXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZmlsdGVyaW5nXCI+XG4gICAgICAgICAgICAgIDxzZS1maWx0ZXItbWVudSBbZ2xvYmFsRmlsdGVyXT1cImdsb2JhbEZpbHRlclwiPjwvc2UtZmlsdGVyLW1lbnU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIFxuICAgICAgPCEtLSBEYXRlIFJhbmdlIENvbnRyb2wgLS0+XG4gICAgICA8c3BhbiBbaGlkZGVuXT1cImdsb2JhbEZpbHRlci5oaWRkZW5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWZpbHRlci1kaXZcIiAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5EQVRFX1JBTkdFXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImJhc2ljXCI+e3sgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IH19XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPHAtY2FsZW5kYXIgXG4gICAgICAgICAgICAjcmFuZ2VDYWxlbmRhclxuICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwidHJ1ZVwiXG5cbiAgICAgICAgICAgIFtpbnB1dElkXT1cImdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5ICcgKyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQgOiAnZmxleC1ncm93LTEgZ3Jvdy0xICcgKyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVcIiBcbiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU9XCJyYW5nZVwiIFxuICAgICAgICAgICAgW3NlbGVjdE90aGVyTW9udGhzXT1cInRydWVcIlxuICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgIChvblNlbGVjdCk9XCJzZWxlY3REYXRlKGdsb2JhbEZpbHRlciwgdHJ1ZSlcIlxuICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgKG9uQ2xpY2tPdXRzaWRlKT1cInNldERhdGVSYW5nZUZpbHRlclZhbHVlKGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgKG9uQmx1cik9XCJzZXREYXRlUmFuZ2VGaWx0ZXJWYWx1ZShnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJjYWxlbmRhckZvY3VzRXZlbnQoZ2xvYmFsRmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkNsZWFyQ2xpY2spPVwiY2xlYXJEYXRlUmFuZ2VWYWx1ZShnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnbG9iYWxGaWx0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RmlsdGVycyh0cnVlLCBnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgIDwhLS0gdG9kYXlCdXR0b25TdHlsZUNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgIGNsZWFyQnV0dG9uU3R5bGVDbGFzcz1cIm1sLWF1dG9cIiAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmZpbHRlcmluZ1wiPlxuICAgICAgICAgICAgICA8c2UtZmlsdGVyLW1lbnUgW2dsb2JhbEZpbHRlcl09XCJnbG9iYWxGaWx0ZXJcIj48L3NlLWZpbHRlci1tZW51PlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gTnVtZXJpYyBSYW5nZSBjb250cm9sIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWZpbHRlci1kaXZcIlxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLk5VTUVSSUNfUkFOR0VcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImJhc2ljXCI+e3sgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IH19XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAgYWxpZ24taXRlbXMtY2VudGVyIG1yLTJcIj5cbiAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyXG4gICAgICAgICAgICBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgIFttaW5GcmFjdGlvbkRpZ2l0c109XCJnbG9iYWxGaWx0ZXI/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvIDogJzInIDogJzAnXCJcbiAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cImdsb2JhbEZpbHRlcj8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcgPyBnbG9iYWxGaWx0ZXIuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8gPyBnbG9iYWxGaWx0ZXIuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8gOiAnMicgOiAnMCdcIlxuICAgICAgICAgICAgICAob25CbHVyKT1cInNldE51bWVyaWNSYW5nZVZhbHVlRnJvbShnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNldE51bWVyaWNSYW5nZVZhbHVlRnJvbShnbG9iYWxGaWx0ZXIsdHJ1ZSlcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICdmbGV4LWdyb3ctMSAgZ3Jvdy0xIGlucHV0LW51bWJlcidcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0by1udW1lcmljIG1yLTJcIj5Ubzwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW5vd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyXG4gICAgICAgICAgICBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlci52YWx1ZVR3b1wiXG4gICAgICAgICAgICAgIFttaW5GcmFjdGlvbkRpZ2l0c109XCJnbG9iYWxGaWx0ZXI/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvID8gZ2xvYmFsRmlsdGVyLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvIDogJzInIDogJzAnXCJcbiAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cImdsb2JhbEZpbHRlcj8uZm9ybWF0Py50eXBlID09PSAnZGVjaW1hbCcgPyBnbG9iYWxGaWx0ZXIuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8gPyBnbG9iYWxGaWx0ZXIuZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8gOiAnMicgOiAnMCdcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICdmbGV4LWdyb3ctMSBtci0yIGdyb3ctMSBpbnB1dC1udW1iZXInXCJcbiAgICAgICAgICAgICAgKG9uQmx1cik9XCJzZXROdW1lcmljUmFuZ2VWYWx1ZVR3byhnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNldE51bWVyaWNSYW5nZVZhbHVlVHdvKGdsb2JhbEZpbHRlcix0cnVlKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnbG9iYWxGaWx0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZmlsdGVyaW5nXCI+XG4gICAgICAgICAgICAgIDxzZS1maWx0ZXItbWVudSBbZ2xvYmFsRmlsdGVyXT1cImdsb2JhbEZpbHRlclwiPjwvc2UtZmlsdGVyLW1lbnU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gTXVsdGlTZWxlY3QgY29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5NVUxUSVNFTEVDVFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJcIiBmb3I9XCJiYXNpY1wiPnt7IGdsb2JhbEZpbHRlci5kaXNwbGF5VGV4dCB9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIucmVxdWlyZWRGaWVsZFwiIFtjbGFzc109XCIncmVxdWlyZWQtc3RhciAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIGludmFsaWQgJyA6ICcnKVwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJnbG9iYWxGaWx0ZXIuZGF0YVwiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUZpbHRlcnMoKVwiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnbG9iYWxGaWx0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgID48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlICYmIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXJyb3JcIj57e1xuICAgICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cblxuXG4gICAgICAgICA8IS0tIFNlbGVjdCBCdXR0b24gY29udHJvbCAtLT5cbiAgICAgIDxzcGFuIFtoaWRkZW5dPVwiZ2xvYmFsRmlsdGVyLmhpZGRlblwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1maWx0ZXItZGl2XCJcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiZml0ZXJUeXBlcy5TRUxFQ1RCVVRUT05cIlxuXG4gICAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiXCIgZm9yPVwiYmFzaWNcIj57eyBnbG9iYWxGaWx0ZXIuZGlzcGxheVRleHQgfX1cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHAtc2VsZWN0QnV0dG9uXG4gICAgICAgICAgW2NsYXNzXT1cIicgbW9kZXJuaXplZFJhZGlvTG9vayAnICsgKGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnIG5nLWludmFsaWQgbmctZGlydHkgJyA6ICcnKVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJnbG9iYWxGaWx0ZXIudmFsdWVcIlxuICAgICAgICAgIFtvcHRpb25zXT1cImdsb2JhbEZpbHRlci5kYXRhXCJcbiAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJnbG9iYWxGaWx0ZXIuZGlzcGxheVN0eWxlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2xvYmFsRmlsdGVyLmRpc2FibGVkXCIgIFxuICAgICAgICA+XG4gICAgICAgIDwhLS0gPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT5cbiAgICAgICAgICA8aSBbY2xhc3NdPVwiaXRlbS5pY29uXCI+PC9pPlxuICAgICAgPC9uZy10ZW1wbGF0ZT4gLS0+XG4gICAgICA8L3Atc2VsZWN0QnV0dG9uPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgJiYgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJlcnJvclwiPnt7XG4gICAgICAgICAgZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZVxuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG5cblxuXG4gICAgICA8IS0tIExvb2t1cCBDb250cm9sIEZpZWxkIC0tPlxuICAgICAgPHNwYW4gW2hpZGRlbl09XCJnbG9iYWxGaWx0ZXIuaGlkZGVuXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImdsb2JhbC1maWx0ZXJzLWZpbHRlci1kaXZcIlxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJmaXRlclR5cGVzLkxPT0tVUF9JTlBVVFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnbG9iYWwtZmlsdGVycy1sYWJlbFwiIGZvcj1cImJhc2ljXCI+e3sgZ2xvYmFsRmlsdGVyLmRpc3BsYXlUZXh0IH19XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdsb2JhbEZpbHRlci5yZXF1aXJlZEZpZWxkXCIgW2NsYXNzXT1cIidyZXF1aXJlZC1zdGFyICcgKyAoZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSA/ICcgaW52YWxpZCAnIDogJycpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NzaWJsZS1idWxrLXVwZGF0ZS1pbnB1dC13cmFwcGVyLWRpdlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlciBsb29rdXAtZmlsdGVyLXdyYXBwZXIgZ2xvYmFsRmlsdGVyc1wiPiBcbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgW2lkXT1cImdsb2JhbEZpbHRlci5maWVsZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdsb2JhbEZpbHRlcj8udmFsdWVUd28/LnRleHQgPyBnbG9iYWxGaWx0ZXIudmFsdWVUd28udGV4dCA6IGdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGdsb2JhbEZpbHRlcilcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cImdsb2JhbEZpbHRlci5maWVsZFwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdsb2JhbEZpbHRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGtleXVwLlRhYik9XCJzZWxlY3RMb29rdXBGaWVsZChnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuYmFja3NwYWNlKT1cInJlbW92ZU51bGxMb29rdXAoJGV2ZW50LCBnbG9iYWxGaWx0ZXIpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBsb29rdXAtaW5wdXRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1yaWdodCBnbG9iYWwtZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaGV2cm9uLXJpZ2h0IGxvb2t1cC1pbnB1dC1pY29uIGdsb2JhbC1maWx0ZXJcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpcmVjdC13cmFwcGVyLWNsb3NlLWljb24tbG9va3VwXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdsb2JhbEZpbHRlci52YWx1ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmludGVyZmFjZVR5cGU9PSdidWxrVXBkYXRlJ1wiIGNsYXNzPVwicC1pbnB1dC1pY29uLXJpZ2h0IGdsb2JhbC1maWx0ZXIgYnVsay11cGRhdGVcIiA+XG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVWYWx1ZXMoZ2xvYmFsRmlsdGVyKVwiXG4gICAgICAgICAgICAgIGljb249XCJmYS1yZWd1bGFyIGZhLWFycm93LWRvd24tdG8tZG90dGVkLWxpbmVcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiAgXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2xvYmFsRmlsdGVyLmVycm9yTWVzc2FnZSAmJiBnbG9iYWxGaWx0ZXIuZXJyb3JNZXNzYWdlLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVycm9yXCI+e3tcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlci5lcnJvck1lc3NhZ2VcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIDxzcGFuPlxuICA8aSAgaWNvbj1cInBpIHBpLXRpbWVzXCI+PC9pPlxuPC9zcGFuPiAtLT5cblxuPCEtLSBBcHBseSBidXR0b24gLS0+XG5cbjxidXR0b25cbnBCdXR0b25cbipuZ0lmPVwiIWdyaWRVcGRhdGVcIlxudHlwZT1cImJ1dHRvblwiXG5pY29uPVwicGkgcGktc2VhcmNoXCJcbmlkPVwic2VhcmNoR2xvYmFsRmlsdGVyQnRuXCJcbihjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiXG5jbGFzcz1cImdsb2JhbC1zZWFyY2ggYWxpZ24tZ2xvYmFsRmlsdGVyLWJ0biBnbG9iYWwtYnRuIGhpZGUtZmlsdGVyLWJ1dHRvblwiXG4+PC9idXR0b24+XG5cbjwhLS0gQ2xvc2UgYnV0dG9uIC0tPlxuPGJ1dHRvblxucEJ1dHRvblxuKm5nSWY9XCIhZ3JpZFVwZGF0ZVwiXG5pZD1cImNsZWFyR2xvYmFsRmlsdGVyQnRuXCJcbnR5cGU9XCJidXR0b25cIlxuaWNvbj1cInBpIHBpLXJlcGxheVwiXG4oY2xpY2spPVwiY2xlYXJGaWx0ZXJzKClcIlxuY2xhc3M9XCJoaWRlLWZpbHRlci1idXR0b25cIlxuPjwvYnV0dG9uPlxuIl19
|
|
@@ -10814,41 +10814,6 @@ class SeGlobalFilterComponent {
|
|
|
10814
10814
|
this.setDefualtCalendarRange(false);
|
|
10815
10815
|
}
|
|
10816
10816
|
}
|
|
10817
|
-
ngAfterViewInit() {
|
|
10818
|
-
// spliting date range value and assign to value and valueTwo in Date_Range Control
|
|
10819
|
-
const dateRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.DATE_RANGE);
|
|
10820
|
-
dateRangeFilter?.forEach((dateRange) => {
|
|
10821
|
-
if (dateRange.value && dateRange.valueTwo) {
|
|
10822
|
-
if (typeof (dateRange.value) === 'object') {
|
|
10823
|
-
dateRange.value = dateRange.value.toLocaleDateString();
|
|
10824
|
-
}
|
|
10825
|
-
if (typeof (dateRange.valueTwo) === 'object') {
|
|
10826
|
-
dateRange.valueTwo = dateRange.valueTwo.toLocaleDateString();
|
|
10827
|
-
}
|
|
10828
|
-
dateRange.value = (dateRange.value + "-" + dateRange.valueTwo)?.toString()?.split('-');
|
|
10829
|
-
this.setDateRangeFilterValue(dateRange);
|
|
10830
|
-
}
|
|
10831
|
-
else if (dateRange.value && !dateRange.valueTwo) {
|
|
10832
|
-
this.matchSameFields(dateRange.fromField, dateRange.value, 'gte');
|
|
10833
|
-
}
|
|
10834
|
-
else if (!dateRange.value && dateRange.valueTwo) {
|
|
10835
|
-
this.matchSameFields(dateRange.fromField, dateRange.valueTwo, 'gte');
|
|
10836
|
-
}
|
|
10837
|
-
});
|
|
10838
|
-
// Filtring Numeric Range controls on global filter
|
|
10839
|
-
const numerRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.NUMERIC_RANGE);
|
|
10840
|
-
numerRangeFilter.forEach((numericRange) => {
|
|
10841
|
-
if (numericRange) {
|
|
10842
|
-
this.setNumericRangeValueFrom(numericRange);
|
|
10843
|
-
this.setNumericRangeValueTwo(numericRange);
|
|
10844
|
-
}
|
|
10845
|
-
});
|
|
10846
|
-
// if(!(this.globalFilters.some((filter)=> filter.type === GridFilterControlType.CALENDAR_RANGE)) &&
|
|
10847
|
-
// (this.globalFilters.some((filter)=> filter.value))
|
|
10848
|
-
// ){
|
|
10849
|
-
// this.applyFilters(false);
|
|
10850
|
-
// }
|
|
10851
|
-
}
|
|
10852
10817
|
setDateRangeFilterValue(dateRange) {
|
|
10853
10818
|
if (dateRange?.value?.length > 1) {
|
|
10854
10819
|
dateRange.value[0] = new Date(dateRange.value[0]);
|
|
@@ -10952,6 +10917,39 @@ class SeGlobalFilterComponent {
|
|
|
10952
10917
|
else {
|
|
10953
10918
|
this.hideClearFilterBtn = true;
|
|
10954
10919
|
}
|
|
10920
|
+
// spliting date range value and assign to value and valueTwo in Date_Range Control
|
|
10921
|
+
const dateRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.DATE_RANGE);
|
|
10922
|
+
dateRangeFilter?.forEach((dateRange) => {
|
|
10923
|
+
if (dateRange.value && dateRange.valueTwo) {
|
|
10924
|
+
if (typeof (dateRange.value) === 'object') {
|
|
10925
|
+
dateRange.value = dateRange.value.toLocaleDateString();
|
|
10926
|
+
}
|
|
10927
|
+
if (typeof (dateRange.valueTwo) === 'object') {
|
|
10928
|
+
dateRange.valueTwo = dateRange.valueTwo.toLocaleDateString();
|
|
10929
|
+
}
|
|
10930
|
+
dateRange.value = (dateRange.value + "-" + dateRange.valueTwo)?.toString()?.split('-');
|
|
10931
|
+
this.setDateRangeFilterValue(dateRange);
|
|
10932
|
+
}
|
|
10933
|
+
else if (dateRange.value && !dateRange.valueTwo) {
|
|
10934
|
+
this.matchSameFields(dateRange.fromField, dateRange.value, 'gte');
|
|
10935
|
+
}
|
|
10936
|
+
else if (!dateRange.value && dateRange.valueTwo) {
|
|
10937
|
+
this.matchSameFields(dateRange.fromField, dateRange.valueTwo, 'gte');
|
|
10938
|
+
}
|
|
10939
|
+
});
|
|
10940
|
+
// Filtring Numeric Range controls on global filter
|
|
10941
|
+
const numerRangeFilter = this.globalFilters.filter((filter) => filter.type === GridFilterControlType.NUMERIC_RANGE);
|
|
10942
|
+
numerRangeFilter.forEach((numericRange) => {
|
|
10943
|
+
if (numericRange) {
|
|
10944
|
+
this.setNumericRangeValueFrom(numericRange);
|
|
10945
|
+
this.setNumericRangeValueTwo(numericRange);
|
|
10946
|
+
}
|
|
10947
|
+
});
|
|
10948
|
+
// if(!(this.globalFilters.some((filter)=> filter.type === GridFilterControlType.CALENDAR_RANGE)) &&
|
|
10949
|
+
// (this.globalFilters.some((filter)=> filter.value))
|
|
10950
|
+
// ){
|
|
10951
|
+
// this.applyFilters(false);
|
|
10952
|
+
// }
|
|
10955
10953
|
}
|
|
10956
10954
|
setNumericRangeValueTwo(globalFilter, sendRequest = false) {
|
|
10957
10955
|
if (globalFilter.toField) {
|