@unifylib/ui-lib 1.2.33 → 1.2.35

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.
@@ -1,4 +1,4 @@
1
- import { Component, effect, EventEmitter, Inject, Input, Output } from "@angular/core";
1
+ import { Component, EventEmitter, Inject, Input, Output } from "@angular/core";
2
2
  import { MatTableDataSource } from "@angular/material/table";
3
3
  import { TranslateModule } from "@ngx-translate/core";
4
4
  import { MatSortModule } from "@angular/material/sort";
@@ -97,16 +97,12 @@ export class BaseTableComponent extends BaseUtils {
97
97
  this.totalRequiredCountItem = 0;
98
98
  this.clickRoutePage = new EventEmitter();
99
99
  this.sortState = {};
100
+ this.initialDataLoadScheduled = false;
100
101
  this.groupNames = [];
101
102
  this.groupSpans = new Map();
102
103
  this.dataSource = new MatTableDataSource();
103
104
  this.columns = [];
104
105
  this.filterRequest = new FilterRequest();
105
- effect(() => {
106
- if (this.pageInfo.lazyLoadData !== true || this.enforceRefresh === true) {
107
- this.loadData();
108
- }
109
- });
110
106
  }
111
107
  ngOnDestroy() {
112
108
  }
@@ -178,10 +174,16 @@ export class BaseTableComponent extends BaseUtils {
178
174
  return this.columns.find(c => c.property === property);
179
175
  }
180
176
  getSortDirection(property) {
181
- if (this.reportRequest?.filterRequest?.sortKey) {
182
- return this.reportRequest.filterRequest.sortDirection === 'ASC' ? 'asc' : 'desc';
177
+ const sortKey = this.reportRequest?.filterRequest?.sortKey;
178
+ if (!sortKey || !this.isSortedColumn(property, sortKey)) {
179
+ return '';
183
180
  }
184
- return '';
181
+ return this.reportRequest.filterRequest.sortDirection === 'ASC' ? 'asc' : 'desc';
182
+ }
183
+ isSortedColumn(property, sortKey) {
184
+ const column = this.getColumn(property);
185
+ const columnSortKey = column?.sortKey ?? property;
186
+ return sortKey === columnSortKey || sortKey === property;
185
187
  }
186
188
  handleSortClick(property) {
187
189
  const COLUMN = this.getColumn(property);
@@ -256,14 +258,18 @@ export class BaseTableComponent extends BaseUtils {
256
258
  ];
257
259
  }
258
260
  this.reportRequest.filterRequest.pageSize = this.pageSize;
261
+ if (this.manageablePages) {
262
+ this.syncClientDataSource();
263
+ return;
264
+ }
259
265
  if (this.separateEndpointData || !this.pageInfo.apiUri || this.pageInfo.apiUri.length === 0) {
260
- this.dataSource.data = this.separateEndpointData;
261
- queueMicrotask(() => this.announceTableResults());
266
+ this.syncClientDataSource();
267
+ return;
262
268
  }
263
- else if (this.reportRequest == undefined) {
269
+ if (this.reportRequest == undefined) {
264
270
  return;
265
271
  }
266
- else if (!this.manageablePages) {
272
+ if (!this.manageablePages) {
267
273
  this.timer = setTimeout(() => {
268
274
  this.reportRequest.filterRequest.pageSize = this.pageSize;
269
275
  this.reportRequest.filterRequest.columns = this.columns?.filter(c => FRONT_END_COLUMN_TYPES.indexOf(c.type) < 0).map(c => c.property) || [];
@@ -292,6 +298,11 @@ export class BaseTableComponent extends BaseUtils {
292
298
  }, 300);
293
299
  }
294
300
  }
301
+ syncClientDataSource() {
302
+ const rows = this.customizedData?.data ?? this.separateEndpointData ?? [];
303
+ this.dataSource.data = rows;
304
+ queueMicrotask(() => this.announceTableResults());
305
+ }
295
306
  announceTableResults() {
296
307
  const visible = this.dataSource?.data?.length ?? 0;
297
308
  const total = this.totalElements ?? visible;
@@ -308,11 +319,16 @@ export class BaseTableComponent extends BaseUtils {
308
319
  return element.stateType;
309
320
  }
310
321
  ngOnChanges(changes) {
311
- if (changes["customizedData"] && !changes["customizedData"].isFirstChange()) {
312
- this.dataSource.data = changes["customizedData"].currentValue?.data || []; // Update data source with new data
313
- this.pagesCount = this.totalPagesCount;
314
- this.pageIndex = this.currentPageIndex;
315
- queueMicrotask(() => this.announceTableResults());
322
+ if (changes["customizedData"]) {
323
+ const dataSource = changes["customizedData"].currentValue;
324
+ if (dataSource) {
325
+ this.dataSource = dataSource;
326
+ }
327
+ this.syncClientDataSource();
328
+ if (!changes["customizedData"].isFirstChange()) {
329
+ this.pagesCount = this.totalPagesCount;
330
+ this.pageIndex = this.currentPageIndex;
331
+ }
316
332
  }
317
333
  if (changes["enforceRefresh"] && !changes["enforceRefresh"].isFirstChange()) {
318
334
  this.loadData();
@@ -320,6 +336,22 @@ export class BaseTableComponent extends BaseUtils {
320
336
  if (changes["isPending"] && !changes["isPending"].isFirstChange()) {
321
337
  this.loadData();
322
338
  }
339
+ if (changes['pageInfo'] || changes['columns']) {
340
+ this.scheduleInitialLoad();
341
+ }
342
+ }
343
+ scheduleInitialLoad() {
344
+ if (this.initialDataLoadScheduled || this.manageablePages) {
345
+ return;
346
+ }
347
+ if (this.pageInfo.lazyLoadData === true && this.enforceRefresh !== true) {
348
+ return;
349
+ }
350
+ if (!this.pageInfo?.apiUri && !this.separateEndpointData && !this.customizedData) {
351
+ return;
352
+ }
353
+ this.initialDataLoadScheduled = true;
354
+ queueMicrotask(() => this.loadData());
323
355
  }
324
356
  getCroppedText(elementValue, subWidth = 20) {
325
357
  return elementValue && elementValue.length > subWidth ? elementValue.substring(0, subWidth) + "..." : elementValue;
@@ -519,6 +551,9 @@ export class BaseTableComponent extends BaseUtils {
519
551
  this.reportRequest.filterRequest.sortDirection = $event.direction === 'asc' ? 'ASC' : 'DESC';
520
552
  this.reportRequest.filterRequest.pageIndex = 0;
521
553
  this.selectedColumn.emit($event);
554
+ if (this.manageablePages) {
555
+ return;
556
+ }
522
557
  this.loadData();
523
558
  }
524
559
  shouldShowButton(element) {
@@ -569,7 +604,6 @@ export class BaseTableComponent extends BaseUtils {
569
604
  }
570
605
  hasFiltersApplied() {
571
606
  return (this.advancedAppliedFilter && this.advancedAppliedFilter.length > 0) ||
572
- (this.filters && this.filters.length > 0) ||
573
607
  (this.pendingFilters && this.pendingFilters.length > 0);
574
608
  }
575
609
  getDisplaySvgPath() {
@@ -714,4 +748,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
714
748
  }], clickRoutePage: [{
715
749
  type: Output
716
750
  }] } });
717
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGVBQWUsRUFBbUIsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsYUFBYSxFQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsV0FBVyxFQUNYLE9BQU8sRUFDUCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FB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ZW50LFxuICBlZmZlY3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge01hdFRhYmxlRGF0YVNvdXJjZX0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYmxlXCI7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7TWF0U29ydE1vZHVsZSwgU29ydH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NvcnRcIjtcbmltcG9ydCB7XG4gIEN1cnJlbmN5UGlwZSxcbiAgRGF0ZVBpcGUsXG4gIERlY2ltYWxQaXBlLFxuICBOZ0NsYXNzLFxuICBOZ0Zvck9mLFxuICBOZ0lmLFxuICBOZ1N0eWxlLFxuICBOZ1N3aXRjaCxcbiAgTmdTd2l0Y2hDYXNlLFxuICBOZ1N3aXRjaERlZmF1bHRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtNYXRJY29ufSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHtNYXRCdXR0b24sIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbkJ1dHRvbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xuaW1wb3J0IHtOZ3hQYWdpbmF0aW9uTW9kdWxlfSBmcm9tIFwibmd4LXBhZ2luYXRpb25cIjtcbmltcG9ydCB7QnV0dG9uQWN0aW9uc0NvbXBvbmVudH0gZnJvbSBcIi4uL2J1dHRvbi1hY3Rpb25zL2J1dHRvbi1hY3Rpb25zLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtTaGFyZURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdHJpZ2dlci1mb3JtLnNlcnZpY2VcIjtcbmltcG9ydCB7QmFzZVV0aWxzfSBmcm9tIFwiLi4vLi4vdXRpbHMvYmFzZS11dGlsc1wiO1xuaW1wb3J0IHtCYWNrZW5kU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2JhY2tlbmQtc2VydmljZVwiO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2ZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHtGaWx0ZXJSZXF1ZXN0fSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9maWx0ZXItcmVxdWVzdFwiO1xuaW1wb3J0IHtcbiAgQnV0dG9uQWN0aW9uU2V0dGluZ3MsXG4gIEVNUFRZX1BBR0VfSU5GTyxcbiAgRmllbGRJbmZvLFxuICBGUk9OVF9FTkRfQ09MVU1OX1RZUEVTLFxuICBQYWdlSW5mbyxcbiAgVEFCTEVfUkVDT1JEX0FDVElPTixcbiAgVGFibGVDb2x1bW5cbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWxcIjtcbmltcG9ydCB7UmVwb3J0UmVxdWVzdH0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvcmVwb3J0LXJlcXVlc3QubW9kZWxcIjtcbmltcG9ydCB7VGFibGVQYWdlVXNlckFjdGlvbn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvdGFibGUtcGFnZS11c2VyLWFjdGlvbi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7V29ya2Zsb3d9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3dvcmtmbG93L3dvcmtmbG93Lm1vZGVsXCI7XG5pbXBvcnQge1Jlc3BvbnNlRW52ZWxvcH0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvcmVzcG9uc2UtZW52ZWxvcC5tb2RlbFwiO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7TGl2ZUFubm91bmNlcn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCI7XG5pbXBvcnQge1RpdGxlQmFyQ29tcG9uZW50fSBmcm9tIFwiLi4vdGl0bGUtYmFyL3RpdGxlLWJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7UGFnaW5hdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vcGFnaW5hdG9yL3BhZ2luYXRvci5jb21wb25lbnRcIjtcbmltcG9ydCB7TWF0Q2hlY2tib3h9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveFwiO1xuaW1wb3J0IHtGaWx0ZXJCdWlsZGVyQ29tcG9uZW50fSBmcm9tIFwiLi4vYWR2YW5jZWQtZmlsdGVyL2ZpbHRlci1idWlsZGVyL2ZpbHRlci1idWlsZGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtGaWVsZEZpbHRlcn0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvZmllbGQtZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQge01hdE1lbnUsIE1hdE1lbnVJdGVtLCBNYXRNZW51VHJpZ2dlcn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50c30gZnJvbSBcIkBhbmd1bGFyL2Nkay9sYXlvdXRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJhc2UtdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFzZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Jhc2UtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBOZ1N0eWxlLFxuICAgIE5nQ2xhc3MsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIE1hdEljb24sXG4gICAgTWF0U29ydE1vZHVsZSxcbiAgICBOZ0lmLFxuICAgIE5nU3dpdGNoLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBEYXRlUGlwZSxcbiAgICBDdXJyZW5jeVBpcGUsXG4gICAgTmd4UGFnaW5hdGlvbk1vZHVsZSxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIE1hdEljb25CdXR0b24sXG4gICAgTmdGb3JPZixcbiAgICBNYXRCdXR0b24sXG4gICAgQnV0dG9uQWN0aW9uc0NvbXBvbmVudCxcbiAgICBUaXRsZUJhckNvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JDb21wb25lbnQsXG4gICAgRGVjaW1hbFBpcGUsXG4gICAgTWF0Q2hlY2tib3gsXG4gICAgRmlsdGVyQnVpbGRlckNvbXBvbmVudCxcbiAgICBNYXRNZW51VHJpZ2dlcixcbiAgICBNYXRNZW51LFxuICAgIE1hdE1lbnVJdGVtLFxuXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQmFzZVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgQmFzZVV0aWxzIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHR5cGVzOiBzdHJpbmdbXSA9IFtcInBkZlwiLCBcImNzdlwiLCBcInhsc3hcIl1cbiAgY29sbGVjdGlvbiA9IHtjb3VudDogNjAsIGRhdGE6IFtdfTtcbiAgY29uZmlnID0ge1xuICAgIGl0ZW1zUGVyUGFnZTogMTAsXG4gICAgY3VycmVudFBhZ2U6IDEsXG4gICAgdG90YWxJdGVtczogdGhpcy5jb2xsZWN0aW9uLmNvdW50XG4gIH07XG4gIHB1YmxpYyBtYXhTaXplOiBudW1iZXIgPSA3O1xuICBwdWJsaWMgZGlyZWN0aW9uTGlua3M6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgYXV0b0hpZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHJlc3BvbnNpdmU6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgbGFiZWxzOiBhbnkgPSB7XG4gICAgcHJldmlvdXNMYWJlbDogJzwnLFxuICAgIG5leHRMYWJlbDogJz4nLFxuICAgIHNjcmVlblJlYWRlclBhZ2luYXRpb25MYWJlbDogJ1BhZ2luYXRpb24nLFxuICAgIHNjcmVlblJlYWRlclBhZ2VMYWJlbDogJ3BhZ2UnLFxuICAgIHNjcmVlblJlYWRlckN1cnJlbnRMYWJlbDogYFlvdSdyZSBvbiBwYWdlYFxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIGZpbHRlckZpZWxkczogRmllbGRJbmZvW107XG4gIEBJbnB1dCgpIG5vRGF0YUZvdW5kU3ZnUGF0aDogc3RyaW5nO1xuICBASW5wdXQoKSBub0RhdGFGb3VuZFRpdGxlID0gJ25vRGF0YUZvdW5kVGl0bGUnO1xuICBASW5wdXQoKSBub0RhdGFGb3VuZFN1YnRpdGxlID0gJ25vRGF0YUZvdW5kU3VidGl0bGUnO1xuICBASW5wdXQoKSBub1Jlc3VsdFN2Z1BhdGg6IHN0cmluZztcbiAgQElucHV0KCkgbm9SZXN1bHRUaXRsZSA9ICdub1Jlc3VsdFRpdGxlJztcbiAgQElucHV0KCkgbm9SZXN1bHRTdWJ0aXRsZSA9ICdub1Jlc3VsdFN1YnRpdGxlJztcbiAgdG90YWxFbGVtZW50cyA9IDA7XG4gIHBhZ2VzQ291bnQgPSAwO1xuICBwYWdlSW5kZXggPSAxO1xuICBwYWdlU2l6ZSA9IDEwO1xuICBtb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IDA7XG4gIHByaXZhdGUgc2VsZWN0ZWRTdGF0dXNGaWx0ZXI6IEZpbHRlcltdID0gW107XG4gIGFkdmFuY2VkQXBwbGllZEZpbHRlcjogYW55W10gPSBbXTtcbiAgcGVuZGluZ0ZpbHRlcnM6IGFueVtdID0gW107XG4gIHNlYXJjaFN0cjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgZmlsdGVyUmVxdWVzdDogRmlsdGVyUmVxdWVzdCA9IG5ldyBGaWx0ZXJSZXF1ZXN0KCk7XG4gIHByaXZhdGUgdGltZXI6IGFueTtcbiAgQElucHV0KClcbiAgb3ZlcnJpZGUgcGFnZUluZm86IFBhZ2VJbmZvID0gRU1QVFlfUEFHRV9JTkZPO1xuXG4gIEBJbnB1dCgpXG4gIGVuYWJsZVBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIG1vYmlsZVBhZ2VTaXplOiBudW1iZXIgPSAyO1xuXG4gIEBJbnB1dCgpXG4gIG1vYmlsZUxvYWRNb3JlSW5jcmVtZW50OiBudW1iZXIgPSAyO1xuXG4gIEBJbnB1dCgpIGRhdGE/OiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcbiAgQElucHV0KClcbiAgbGlzdEFjdGlvbjogQnV0dG9uQWN0aW9uU2V0dGluZ3NbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGV4dHJhQWN0aW9uczogQnV0dG9uQWN0aW9uU2V0dGluZ3NbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbnNEaXNwbGF5TW9kZTogJ2Ryb3Bkb3duJyB8ICdsaXN0JyA9ICdkcm9wZG93bic7XG5cbiAgQElucHV0KClcbiAgY29sdW1uczogVGFibGVDb2x1bW48YW55PltdO1xuXG4gIEBJbnB1dCgpXG4gIGZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cbiAgQElucHV0KCkgLy9AdHMtaWdub3JlXG4gIHBhdGhQYXJhbTogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGV4dHJhQnV0dG9uOiAgQnV0dG9uQWN0aW9uU2V0dGluZ3NbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSBidXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25BY3Rpb25TZXR0aW5ncz4oKTtcblxuICBASW5wdXQoKSAvL0B0cy1pZ25vcmVcbiAgZW5mb3JjZVJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBpc1BlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICB0cmlnZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcmVwb3J0UmVxdWVzdDogUmVwb3J0UmVxdWVzdCA9IG5ldyBSZXBvcnRSZXF1ZXN0KHt9KTtcblxuICBASW5wdXQoKVxuICBzZXBhcmF0ZUVuZHBvaW50RGF0YTogYW55O1xuICBASW5wdXQoKVxuICBtYW5hZ2VhYmxlUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgdG90YWxQYWdlc0NvdW50OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKVxuICBjdXJyZW50UGFnZUluZGV4OiBudW1iZXIgPSAwO1xuXG4gIEBPdXRwdXQoKVxuICBwYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIEBPdXRwdXQoKVxuICB1c2VyQWN0aW9uOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+KCk7XG4gIEBPdXRwdXQoKVxuICBoeXBlckxpbmtBY3Rpb246IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4oKTtcblxuICBAT3V0cHV0KClcbiAgZXh0cmFBY3Rpb246IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRDb2x1bW46IEV2ZW50RW1pdHRlcjxTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydD4oKTtcblxuICBAT3V0cHV0KClcbiAgbGlzdEFjdGlvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx7IGFjdGlvbjogQnV0dG9uQWN0aW9uU2V0dGluZ3MsIHJvdzogYW55ICwgaXNQZW5kaW5nOiBib29sZWFufT4gPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBhY3Rpb246IEJ1dHRvbkFjdGlvblNldHRpbmdzLFxuICAgIHJvdzogYW55LFxuICAgIGlzUGVuZGluZzogYm9vbGVhblxuICB9PigpO1xuXG4gIEBPdXRwdXQoKVxuICBwZW5kaW5nVmlld01vZGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKVxuICBzaG93RGlhbG9nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHVzZWRXb3JrZmxvdyE6IFdvcmtmbG93O1xuXG4gIG1vZGU6YW55O1xuXG4gIEBJbnB1dCgpXG4gIGN1c3RvbWl6ZWREYXRhPzogTWF0VGFibGVEYXRhU291cmNlPGFueT47XG4gIGRhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xuICBzZWxlY3RlZFJvd0luZGV4ID0gLTE7XG4gIG5vRGF0YUZvdW5kID0gZmFsc2U7XG4gIHRvdGFsUmVxdWlyZWRDb3VudEl0ZW0gPSAwO1xuXG5cbiAgQE91dHB1dCgpXG4gIGNsaWNrUm91dGVQYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBiYWNrZW5kU2VydmljZTogQmFja2VuZFNlcnZpY2UsXG4gICAgICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgIHB1YmxpYyBzaGFyZURhdGFTZXJ2aWNlOiBTaGFyZURhdGFTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICAgIEBJbmplY3QoJ3NlY3VyaXR5TWFuYWdlcicpIHByaXZhdGUgc2VjdXJpdHlNYW5hZ2VyOiBhbnksXG4gICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBsaXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICB0aGlzLmZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCgpO1xuXG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucGFnZUluZm8ubGF6eUxvYWREYXRhICE9PSB0cnVlIHx8IHRoaXMuZW5mb3JjZVJlZnJlc2ggPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYmFja2VuZFNlcnZpY2UuaXNFbXB0eUl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoIDw9IDA7XG4gICAgaWYgKHRoaXMuY3VzdG9taXplZERhdGEpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHRoaXMuY3VzdG9taXplZERhdGE7XG4gICAgfVxuICAgIGlmKHRoaXMubWFuYWdlYWJsZVBhZ2VzKSB7XG4gICAgICB0aGlzLnBhZ2VzQ291bnQgPSB0aGlzLnRvdGFsUGFnZXNDb3VudDtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5jdXJyZW50UGFnZUluZGV4O1xuICAgIH1cblxuICAgIHRoaXMubW9iaWxlRGlzcGxheWVkSXRlbXMgPSB0aGlzLnBhZ2VTaXplO1xuXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcbiAgICAgIC5vYnNlcnZlKFsnKG1heC13aWR0aDogNzY4cHgpJ10pXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQubWF0Y2hlcykge1xuICAgICAgICAgIHRoaXMucGFnZVNpemUgPSAyO1xuICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMucGFnZVNpemUgPSAxMDtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50O1xuICAgIHRoaXMuZ2V0TmV4dCh0aGlzLnBhZ2VJbmRleCAtIDEpO1xuICAgIGlmICh0aGlzLm1hbmFnZWFibGVQYWdlcykge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5wYWdlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG5cbiAgZXh0cmFjdEZpZWxkTmFtZShlbGVtZW50OiBhbnksIHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICBpZiAocHJvcGVydHk/LmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eS5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudFtwcm9wZXJ0eV0pICYmIGM/LmFycmF5U3ViUHJvcGVydHkpIHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBlbGVtZW50W3Byb3BlcnR5XS5tYXAoZiA9PiBmW2MuYXJyYXlTdWJQcm9wZXJ0eV0pO1xuICAgICAgICByZXR1cm4gZmllbGRWYWx1ZXMuam9pbignLCAnKTtcbiAgICAgIH1cbiAgICAgIGlmIChjPy50eXBlID09PSAnbGlzdCcgJiYgQXJyYXkuaXNBcnJheShlbGVtZW50W3Byb3BlcnR5XSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdEl0ZW1zKGVsZW1lbnQsIHByb3BlcnR5KS5qb2luKCcg4oCiICcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRbcHJvcGVydHldO1xuICAgIH1cbiAgfVxuXG4gIGdldExpc3RJdGVtcyhlbGVtZW50OiBhbnksIHByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0eT8uaW5jbHVkZXMoJy4nKVxuICAgICAgPyBwcm9wZXJ0eS5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBlbGVtZW50KVxuICAgICAgOiBlbGVtZW50Py5bcHJvcGVydHldO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAubWFwKGl0ZW0gPT4gKGl0ZW0gPT0gbnVsbCA/ICcnIDogU3RyaW5nKGl0ZW0pKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCkge1xuICAgIHRoaXMuYnVpbGRHcm91cHMoKVxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4ucHJvcGVydHkpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zQXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnM7XG4gIH1cblxuICBnZXRDb2x1bW4ocHJvcGVydHk6IHN0cmluZyk6IFRhYmxlQ29sdW1uPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgfVxuXG4gIGdldFNvcnREaXJlY3Rpb24ocHJvcGVydHk6IHN0cmluZyk6ICdhc2MnIHwgJ2Rlc2MnIHwgJycge1xuICAgIGlmICh0aGlzLnJlcG9ydFJlcXVlc3Q/LmZpbHRlclJlcXVlc3Q/LnNvcnRLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zb3J0RGlyZWN0aW9uID09PSAnQVNDJyA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBoYW5kbGVTb3J0Q2xpY2socHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IENPTFVNTiA9IHRoaXMuZ2V0Q29sdW1uKHByb3BlcnR5KTtcbiAgICBpZiAoIUNPTFVNTiB8fCAhQ09MVU1OLmVuYWJsZVNvcnRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBDVVJSRU5UX0RJUkVDVElPTiA9IHRoaXMuZ2V0U29ydERpcmVjdGlvbihwcm9wZXJ0eSk7XG4gICAgbGV0IE5FV19ESVJFQ1RJT046ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XG5cbiAgICBpZiAoQ1VSUkVOVF9ESVJFQ1RJT04gPT09ICdhc2MnKSB7XG4gICAgICBORVdfRElSRUNUSU9OID0gJ2Rlc2MnO1xuICAgIH1cblxuICAgIHRoaXMub25Tb3J0QWN0aW9uKHtcbiAgICAgIGFjdGl2ZTogcHJvcGVydHksXG4gICAgICBkaXJlY3Rpb246IE5FV19ESVJFQ1RJT05cbiAgICB9KTtcbiAgfVxuXG4gIG9uU29ydEhlYWRlcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbHVtblByb3A6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5nZXRDb2x1bW4oY29sdW1uUHJvcCk/LmVuYWJsZVNvcnRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaGFuZGxlU29ydENsaWNrKGNvbHVtblByb3ApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBhcmlhLXNvcnQgb24gc29ydGFibGUgY29sdW1uIGhlYWRlcnMgKFdDQUcgdGFibGUgc2VtYW50aWNzKS4gKi9cbiAgZ2V0Q29sdW1uQXJpYVNvcnQoY29sdW1uUHJvcDogc3RyaW5nKTogJ2FzY2VuZGluZycgfCAnZGVzY2VuZGluZycgfCAnbm9uZScgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZCA9IHRoaXMuZ2V0U29ydERpcmVjdGlvbihjb2x1bW5Qcm9wKTtcbiAgICBpZiAoZCA9PT0gJ2FzYycpIHtcbiAgICAgIHJldHVybiAnYXNjZW5kaW5nJztcbiAgICB9XG4gICAgaWYgKGQgPT09ICdkZXNjJykge1xuICAgICAgcmV0dXJuICdkZXNjZW5kaW5nJztcbiAgICB9XG4gICAgcmV0dXJuICdub25lJztcbiAgfVxuXG4gIHNvcnRTdGF0ZTogYW55ID0ge307XG5cbiAgZ2V0TmV4dChwYWdlSW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG4gIG9uUGFnZVNpemVDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUgPSBldmVudDtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDE7IC8vIHJlc2V0IHRvIGZpcnN0IHBhZ2Ugb24gcGFnZSBzaXplIGNoYW5nZVxuICAgIHRoaXMubW9iaWxlRGlzcGxheWVkSXRlbXMgPSAwO1xuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLmdldE5leHQoMCk7XG4gIH1cblxuICBvbkxvYWRNb3JlKGl0ZW1zVG9Mb2FkOiBudW1iZXIpIHtcbiAgICBjb25zdCBjdXJyZW50RGlzcGxheWVkID0gdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggfHwgdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VTaXplID0gTWF0aC5taW4oY3VycmVudERpc3BsYXllZCArIGl0ZW1zVG9Mb2FkLCB0aGlzLnRvdGFsRWxlbWVudHMpO1xuICAgIHRoaXMubW9iaWxlRGlzcGxheWVkSXRlbXMgPSB0aGlzLnBhZ2VTaXplO1xuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMTtcbiAgICB0aGlzLmxvYWREYXRhKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YShza2lwTW9iaWxlUmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblxuICAgIGlmICghc2tpcE1vYmlsZVJlc2V0KSB7XG4gICAgICAvLyB0aGlzLmluaXRpYWxpemVNb2JpbGVQYWdlU2l6ZSgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QpIHtcbiAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3QodGhpcy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VJbmZvLnBhZ2VTaXplKTtcbiAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnNlYXJjaFN0ciA9IHRoaXMuc2VhcmNoU3RyO1xuICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QuZmlsdGVycyA9IFtcbiAgICAgICAgLi4uKHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyIHx8IFtdKSxcbiAgICAgICAgLi4uKHRoaXMuZmlsdGVycyB8fCBbXSkuZmlsdGVyKGYgPT5cbiAgICAgICAgICAhKHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyIHx8IFtdKS5zb21lKGEgPT4gYS5maWVsZCA9PT0gZi5maWVsZE5hbWUpXG4gICAgICAgIClcbiAgICAgIF07XG4gICAgfVxuXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgIGlmICh0aGlzLnNlcGFyYXRlRW5kcG9pbnREYXRhIHx8ICF0aGlzLnBhZ2VJbmZvLmFwaVVyaSB8fCB0aGlzLnBhZ2VJbmZvLmFwaVVyaS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zZXBhcmF0ZUVuZHBvaW50RGF0YTtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMuYW5ub3VuY2VUYWJsZVJlc3VsdHMoKSk7XG4gICAgfSBlbHNlIGlmKHRoaXMucmVwb3J0UmVxdWVzdCA9PSB1bmRlZmluZWQpe1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZighdGhpcy5tYW5hZ2VhYmxlUGFnZXMpICB7XG4gICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcihjID0+IEZST05UX0VORF9DT0xVTU5fVFlQRVMuaW5kZXhPZihjLnR5cGUpIDwgMCApLm1hcChjID0+IGMucHJvcGVydHkpIHx8IFtdO1xuICAgICAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBlbmRpbmdQYWdlID0gdGhpcy5pc1BlbmRpbmc7XG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3Quc2VhcmNoU3RyID0gdGhpcy5zZWFyY2hTdHI7XG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QuZmlsdGVycyA9IFtcbiAgICAgICAgICAgIC4uLih0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciB8fCBbXSksXG4gICAgICAgICAgICAuLi4odGhpcy5maWx0ZXJzIHx8IFtdKS5maWx0ZXIoZiA9PlxuICAgICAgICAgICAgICAhKHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyIHx8IFtdKS5zb21lKGEgPT4gYS5maWVsZCA9PT0gZi5maWVsZE5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UuZ2V0SXRlbXNCeUZpbHRlcih0aGlzLnJlcG9ydFJlcXVlc3Q/LmZpbHRlclJlcXVlc3QsIHRoaXMucGFnZUluZm8uYXBpVXJpKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRW52ZWxvcGUgPSBuZXcgUmVzcG9uc2VFbnZlbG9wKHJlc3ApO1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2VFbnZlbG9wZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZXF1aXJlZENvdW50SXRlbSA9IHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplXG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IHJlc3BvbnNlRW52ZWxvcGUuYm9keS5sZW5ndGggPCAxO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gcmVzcG9uc2VFbnZlbG9wZS5ib2R5O1xuICAgICAgICAgICAgICAgIHRoaXMuYmFja2VuZFNlcnZpY2UuaXNFbXB0eUl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoIDw9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEVsZW1lbnRzID0gcmVzcG9uc2VFbnZlbG9wZS50b3RhbFNpemUgfHwgMDtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzQ291bnQgPSBNYXRoLmNlaWwodGhpcy50b3RhbEVsZW1lbnRzIC8gdGhpcy5wYWdlU2l6ZSkgfHwgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCA9ICh0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlSW5kZXggfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLnRvdGFsSXRlbXMgPSByZXNwb25zZUVudmVsb3BlLnRvdGFsU2l6ZSB8fCAwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMubW9iaWxlRGlzcGxheWVkSXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5hbm5vdW5jZVRhYmxlUmVzdWx0cygpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFubm91bmNlVGFibGVSZXN1bHRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA/PyAwO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbEVsZW1lbnRzID8/IHZpc2libGU7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdCQVNFX1RBQkxFLnJlc3VsdHNBbm5vdW5jZW1lbnQnLCB7XG4gICAgICB2aXNpYmxlLFxuICAgICAgdG90YWwsXG4gICAgfSk7XG4gICAgdm9pZCB0aGlzLmxpdmVBbm5vdW5jZXIuYW5ub3VuY2UobWVzc2FnZSwgJ3BvbGl0ZScpO1xuICB9XG5cbiAgZ2V0U3RhdHVzRGVzY3JpcHRpb24oZWxlbWVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFNlcnZpY2UuZ2V0U3RhdHVzRGVzY3JpcHRpb24oZWxlbWVudCwgdGhpcy51c2VkV29ya2Zsb3cpO1xuICB9XG5cbiAgZ2V0U3RhdGVUeXBlKGVsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiBlbGVtZW50LnN0YXRlVHlwZVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzW1wiY3VzdG9taXplZERhdGFcIl0gJiYgIWNoYW5nZXNbXCJjdXN0b21pemVkRGF0YVwiXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gY2hhbmdlc1tcImN1c3RvbWl6ZWREYXRhXCJdLmN1cnJlbnRWYWx1ZT8uZGF0YSB8fCBbXTsgIC8vIFVwZGF0ZSBkYXRhIHNvdXJjZSB3aXRoIG5ldyBkYXRhXG4gICAgICB0aGlzLnBhZ2VzQ291bnQ9dGhpcy50b3RhbFBhZ2VzQ291bnQ7XG4gICAgICB0aGlzLnBhZ2VJbmRleD10aGlzLmN1cnJlbnRQYWdlSW5kZXg7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLmFubm91bmNlVGFibGVSZXN1bHRzKCkpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcImVuZm9yY2VSZWZyZXNoXCJdICYmICFjaGFuZ2VzW1wiZW5mb3JjZVJlZnJlc2hcIl0uaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1wiaXNQZW5kaW5nXCJdICYmICFjaGFuZ2VzW1wiaXNQZW5kaW5nXCJdLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuICBnZXRDcm9wcGVkVGV4dChlbGVtZW50VmFsdWU6IGFueSwgc3ViV2lkdGg6IG51bWJlciA9IDIwKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUubGVuZ3RoID4gc3ViV2lkdGggPyBlbGVtZW50VmFsdWUuc3Vic3RyaW5nKDAsIHN1YldpZHRoKSArIFwiLi4uXCIgOiBlbGVtZW50VmFsdWU7XG4gIH1cblxuICBlbWl0RXZlbnQoZWxlbWVudDogYW55KSB7XG4gICAgdGhpcy5zaG93RGlhbG9nLmVtaXQoZWxlbWVudCk7XG4gIH1cblxuICBleHRyYWN0Rm9ybWF0KGNvbHVtbjogVGFibGVDb2x1bW48YW55Pikge1xuICAgIHJldHVybiBjb2x1bW4/LmZvcm1hdCB8fCAnZC9NL3l5eXksIGg6bW0gYSc7XG4gIH1cblxuICBhY3Rpb25MaXN0Q2xpY2tlZChsaXN0QWN0aW9uOiBCdXR0b25BY3Rpb25TZXR0aW5ncywgZWxlbWVudDogYW55KSB7XG4gICAgdGhpcy5saXN0QWN0aW9uQ2xpY2tlZC5lbWl0KHthY3Rpb246bGlzdEFjdGlvbiwgcm93OiBlbGVtZW50LCBpc1BlbmRpbmc6IHRoaXMuaXNQZW5kaW5nfSk7XG4gIH1cblxuICBoeXBlckxpbmtDbGlja2VkKGFjdGlvbk5hbWU6IHN0cmluZywgZWxlbWVudDogYW55KSB7XG4gICAgY29uc3QgYWN0aW9uID0gVEFCTEVfUkVDT1JEX0FDVElPTjtcbiAgICBhY3Rpb24uYWN0aW9uS2V5ID0gYWN0aW9uTmFtZTtcbiAgICBhY3Rpb24uaXRlbSA9IGVsZW1lbnQ7XG4gICAgYWN0aW9uLnBhZ2VJbmZvID0gdGhpcy5wYWdlSW5mbztcbiAgICB0aGlzLmh5cGVyTGlua0FjdGlvbi5lbWl0KGFjdGlvbilcbiAgfVxuXG5cbiAgZW1pdFJvdXRlUGFnZShlbGVtZW50OiBhbnkpe1xuICAgIHRoaXMuY2xpY2tSb3V0ZVBhZ2UuZW1pdChlbGVtZW50KTtcbiAgfVxuXG4gIG9uU2VsZWN0SXRlbShyb3c6IGFueSkge1xuICAgIGlmICh0aGlzLnBhZ2VJbmZvLnNlbGZSb3V0aW5nKSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5pc1BlbmRpbmcgPyAncGVuZGluZycgOiAndmlldyc7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnBhZ2VJbmZvLmxpc3RSb3V0ZVBhdGggfHwgdGhpcy5yb3V0ZXIudXJsfS92aWV3YDtcblxuICAgICAgY29uc3QgZW5jcnlwdGVkSWQgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmVuY3J5cHQoU3RyaW5nKHJvdy5pZCkpO1xuICAgICAgY29uc3QgZW5jcnlwdGVkTW9kZSA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChtb2RlKTtcblxuICAgICAgY29uc3QgZW5jcnlwdGVkUm93ID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KEpTT04uc3RyaW5naWZ5KHJvdykpO1xuXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSwge1xuICAgICAgICBxdWVyeVBhcmFtczogeyB0b2tlbjogZW5jcnlwdGVkSWQsIG1vZGU6IGVuY3J5cHRlZE1vZGUgfSxcbiAgICAgICAgc3RhdGU6IHsgcmF3OiBlbmNyeXB0ZWRSb3cgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjb25zdCBhY3Rpb24gPSBTRUxFQ1RfUkVDT1JEX0FDVElPTjtcbiAgICAvLyBhY3Rpb24uaWQgPSByb3c/LmlkO1xuICAgIC8vIGFjdGlvbi5pdGVtID0gcm93O1xuICAgIC8vIHRoaXMudXNlckFjdGlvbi5lbWl0KGFjdGlvbilcbiAgfVxuXG4gIG9wZW5OZXdUYWIocm93KSB7XG4gICAgaWYgKCF0aGlzLnBhZ2VJbmZvLmVtYmVkZWRUYWJsZU9ubHkpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmlzUGVuZGluZyA/ICdwZW5kaW5nJyA6ICd2aWV3JztcbiAgICAgIHdpbmRvdy5vcGVuKGAke3RoaXMucGFnZUluZm8ubGlzdFJvdXRlUGF0aH0vJHttb2RlfWAgKyAnLycgKyByb3c/LmlkKTtcbiAgICB9XG4gIH1cblxuICBvblZpZXdNb2RlQ2hhbmdlZFJlY2VpdmVkKGlzUGVuZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMucGVuZGluZ1ZpZXdNb2RlQ2hhbmdlZC5lbWl0KGlzUGVuZGluZyk7XG4gICAgdGhpcy5zd2l0Y2hWaWV3TW9kZShpc1BlbmRpbmcpO1xuICB9XG5cbiAgc3dpdGNoVmlld01vZGUoaXNQZW5kaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1BlbmRpbmcgPSBpc1BlbmRpbmc7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgb25BZGROZXdBY3Rpb24oJGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnBhZ2VJbmZvLmxpc3RSb3V0ZVBhdGggfHwgdGhpcy5yb3V0ZXIudXJsfS92aWV3YDtcbiAgICBjb25zdCBlbmNyeXB0ZWRJZCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChcIi0xXCIpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE1vZGUgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmVuY3J5cHQoXCJwZW5kaW5nXCIpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt1cmx9YF0sXG4gICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHRva2VuOiBlbmNyeXB0ZWRJZCAsIG1vZGUgOiBlbmNyeXB0ZWRNb2RlIH0gfSk7XG5cbiAgICAvLyBjb25zdCBhY3Rpb24gPSBTRUxFQ1RfUkVDT1JEX0FDVElPTjtcbiAgICAvLyBhY3Rpb24uaWQgPSByb3c/LmlkO1xuICAgIC8vIGFjdGlvbi5pdGVtID0gcm93O1xuICAgIC8vIHRoaXMudXNlckFjdGlvbi5lbWl0KGFjdGlvbilcbiAgfVxuXG4gIHNob3dBZGROZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZUluZm8uaGFzQWRkQnV0dG9uIDtcbiAgfVxuXG4gIG9uRXh0cmFCdXR0aW9uQWN0aW9uKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5leHRyYUFjdGlvbi5lbWl0KCRldmVudCk7XG5cbiAgfVxuXG4gIGhhc0dyb3VwcygpIHtcbiAgICBsZXQgYiA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgocCA9PiBwLmdyb3VwKTtcbiAgICByZXR1cm4gYiA+PSAwO1xuICB9XG4gIGdyb3VwTmFtZXM6IGFueSA9IFtdXG4gIGdyb3VwU3BhbnM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgYnVpbGRHcm91cHMoKXtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHRoaXMuZ3JvdXBOYW1lcyA9IFtdO1xuICAgIHRoaXMuZ3JvdXBTcGFucy5jbGVhcigpO1xuICAgIGlmKHRoaXMuaGFzR3JvdXBzKCkgPT09IGZhbHNlKXtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSA9PT0gdHJ1ZSlcbiAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5ncm91cCA9PT0gXCItXCIpIHtcbiAgICAgICAgICB0aGlzLmdyb3VwTmFtZXMucHVzaChjb3VudC50b1N0cmluZygpKTtcbiAgICAgICAgICB0aGlzLmluc2VydEluTWFwKGNvdW50KTtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5ncm91cE5hbWVzLmluY2x1ZGVzKGNvbHVtbi5ncm91cCkpIHtcbiAgICAgICAgICB0aGlzLmdyb3VwTmFtZXMucHVzaChjb2x1bW4uZ3JvdXApO1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SW5NYXAoY29sdW1uLmdyb3VwKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnNlcnRJbk1hcChjb2x1bW4uZ3JvdXApO1xuICAgICAgfSk7XG4gIH1cblxuICBpbnNlcnRJbk1hcChrZXkpe1xuICAgIGlmKHRoaXMuZ3JvdXBTcGFucy5oYXMoa2V5KSl7XG4gICAgICB0aGlzLmdyb3VwU3BhbnMuc2V0KGtleS50b1N0cmluZygpLCB0aGlzLmdyb3VwU3BhbnMuZ2V0KGtleSkgKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ncm91cFNwYW5zLnNldChrZXkudG9TdHJpbmcoKSwgMSk7XG4gICAgfVxuICB9XG5cbiAgaXNIdW1hbk1hZGUoc3RyKXtcbiAgICByZXR1cm4gaXNOYU4oc3RyKTtcbiAgfVxuXG4gIGFjdGlvbkJ1dHRvbkNsaWNrZWQoYWN0aW9uS2V5OiBzdHJpbmcsIGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmIChhY3Rpb25LZXkgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGVBY3Rpb24oaXRlbSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0VGFibGVBY3Rpb24oYWN0aW9uS2V5LCBpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTmF2aWdhdGVBY3Rpb24oaXRlbTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMuaXNQZW5kaW5nID8gJ3BlbmRpbmcnIDogJ3ZpZXcnO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5wYWdlSW5mby5saXN0Um91dGVQYXRoIHx8IHRoaXMucm91dGVyLnVybDtcbiAgICBjb25zdCB1cmwgPSBgJHtiYXNlUGF0aH0vdmlld2A7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRJZCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChpdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE1vZGUgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmVuY3J5cHQobW9kZSk7XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHsgdG9rZW46IGVuY3J5cHRlZElkLCBtb2RlOiBlbmNyeXB0ZWRNb2RlIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFRhYmxlQWN0aW9uKGFjdGlvbktleTogc3RyaW5nLCBpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBhY3Rpb24gPSBUQUJMRV9SRUNPUkRfQUNUSU9OO1xuICAgIGFjdGlvbi5hY3Rpb25LZXkgPSBhY3Rpb25LZXk7XG4gICAgYWN0aW9uLml0ZW0gPSBpdGVtO1xuICAgIGFjdGlvbi5wYWdlSW5mbyA9IHRoaXMucGFnZUluZm87XG4gICAgdGhpcy51c2VyQWN0aW9uLmVtaXQoYWN0aW9uKTtcbiAgfVxuXG4gIGV4dHJhY3RSZXBvcnQocmVwb3J0VHlwZTogYW55KSB7XG4gICAgY29uc3QgbXlGaWx0ZXJzID0gdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3Q7XG4gICAgY29uc3QgcmVwb3J0UmVxdWVzdCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuYnVpbGRSZXBvcnRSZXF1ZXN0KHRoaXMuY29sdW1ucywgdGhpcy5wYWdlSW5mby5sYWJlbHNTZWN0aW9uICsgJy5saXN0X3RpdGxlJyxcbiAgICAgIG15RmlsdGVycywgcmVwb3J0VHlwZSwgdGhpcy5wYWdlSW5mbywgdGhpcy5zZWFyY2hTdHIsICdMQU5EU0NBUEUnKTtcbiAgICB0aGlzLmJhY2tlbmRTZXJ2aWNlLmRvd25sb2FkUmVwb3J0KHJlcG9ydFJlcXVlc3QsIHRoaXMucGFnZUluZm8uYXBpVXJpKTtcbiAgfVxuXG4gIGdldEljb24oc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdwYXNzJzogcmV0dXJuICdjaGVja19jaXJjbGUnO1xuICAgICAgY2FzZSAnd2FybmluZyc6IHJldHVybiAnd2FybmluZyc7XG4gICAgICBjYXNlICdlcnJvcic6IHJldHVybiAnZXJyb3InO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICdoZWxwJztcbiAgICB9XG4gIH1cblxuICBnZXRJY29uQXJpYUxhYmVsS2V5KHN0YXR1czogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAncGFzcyc6XG4gICAgICAgIHJldHVybiAnQkFTRV9UQUJMRS5zdGF0dXNJY29uUGFzcyc7XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgcmV0dXJuICdCQVNFX1RBQkxFLnN0YXR1c0ljb25XYXJuaW5nJztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgcmV0dXJuICdCQVNFX1RBQkxFLnN0YXR1c0ljb25FcnJvcic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0JBU0VfVEFCTEUuc3RhdHVzSWNvblVua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIGdldE9uT2ZmRmxhZ0FyaWFMYWJlbEtleSh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdCQVNFX1RBQkxFLnN0YXR1c0ZsYWdBY3RpdmUnO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gJ0JBU0VfVEFCTEUuc3RhdHVzRmxhZ0luYWN0aXZlJztcbiAgICB9XG4gICAgcmV0dXJuICdCQVNFX1RBQkxFLnN0YXR1c0ZsYWdQZW5kaW5nJztcbiAgfVxuXG4gIGFjdGlvbkNoZWNrZWRDbGlja2VkKHByb3BlcnR5OiBzdHJpbmcsIGVsZW1lbnQpIHtcbiAgICBlbGVtZW50W3Byb3BlcnR5XT0gIWVsZW1lbnRbcHJvcGVydHldO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uQ2xpY2tlZChwcm9wZXJ0eSwgZWxlbWVudCk7XG4gIH1cblxuXG4gIGlzRGFya0hpZ2hsaWdodChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGdyb3VwQnlQcm9wID0gdGhpcy5wYWdlSW5mbz8uZ3JvdXBCeVByb3BlcnR5O1xuICAgIGNvbnN0IGdyb3VwQnlWYWx1ZXMgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5VmFsdWU7XG5cbiAgICBpZiAoIWdyb3VwQnlQcm9wIHx8ICFncm91cEJ5VmFsdWVzIHx8ICFyb3dbZ3JvdXBCeVByb3BdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY2VsbFZhbHVlID0gcm93W2dyb3VwQnlQcm9wXS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuIGdyb3VwQnlWYWx1ZXMuc29tZSh2YWwgPT5cbiAgICAgIGNlbGxWYWx1ZS5pbmNsdWRlcyh2YWwpICYmIGNlbGxWYWx1ZS5sZW5ndGggPiB2YWwubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHNob3VsZFJlbmRlckFzSHlwZXJMaW5rKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGdyb3VwQnlQcm9wID0gdGhpcy5wYWdlSW5mbz8uZ3JvdXBCeVByb3BlcnR5O1xuICAgIGNvbnN0IGdyb3VwQnlWYWx1ZXMgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5VmFsdWU7XG5cbiAgICBpZiAoIWdyb3VwQnlQcm9wIHx8ICFncm91cEJ5VmFsdWVzIHx8ICFlbGVtZW50W2dyb3VwQnlQcm9wXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtncm91cEJ5UHJvcF0udG9TdHJpbmcoKTtcblxuICAgIHJldHVybiAhZ3JvdXBCeVZhbHVlcy5zb21lKHYgPT4gdmFsdWUuaW5jbHVkZXModikgJiYgdmFsdWUubGVuZ3RoID49IHYubGVuZ3RoKTtcbiAgfVxuXG5cbiAgb25Tb3J0QWN0aW9uKCRldmVudDogU29ydCkge1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5wcm9wZXJ0eSA9PT0gJGV2ZW50LmFjdGl2ZSk7XG5cbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zb3J0S2V5ID1cbiAgICAgICRldmVudC5hY3RpdmUgJiYgJGV2ZW50LmRpcmVjdGlvblxuICAgICAgICA/IChjb2w/LnNvcnRLZXkgPz8gJGV2ZW50LmFjdGl2ZSlcbiAgICAgICAgOiAnaWQnO1xuXG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3Quc29ydERpcmVjdGlvbiA9ICRldmVudC5kaXJlY3Rpb24gPT09ICdhc2MnID8gJ0FTQycgOiAnREVTQyc7XG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4uZW1pdCgkZXZlbnQpO1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgc2hvdWxkU2hvd0J1dHRvbihlbGVtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBncm91cEJ5UHJvcCA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlQcm9wZXJ0eTtcbiAgICBjb25zdCBncm91cEJ5VmFsdWVzID0gdGhpcy5wYWdlSW5mbz8uZ3JvdXBCeVZhbHVlO1xuXG4gICAgaWYgKCFncm91cEJ5UHJvcCB8fCAhZ3JvdXBCeVZhbHVlcyB8fCAhZWxlbWVudFtncm91cEJ5UHJvcF0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gZWxlbWVudFtncm91cEJ5UHJvcF0udG9TdHJpbmcoKTtcblxuICAgIHJldHVybiAhZ3JvdXBCeVZhbHVlcy5zb21lKHYgPT4gdmFsdWUuaW5jbHVkZXModikgJiYgdmFsdWUubGVuZ3RoID49IHYubGVuZ3RoKTtcbiAgfVxuXG4gIHN0b3JlUGVuZGluZ0ZpbHRlcnMoJGV2ZW50OiB7IGZpbHRlcnM6IEZpZWxkRmlsdGVyW10sIHNlYXJjaFN0cjogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnBlbmRpbmdGaWx0ZXJzID0gJGV2ZW50LmZpbHRlcnMgfHwgW107XG4gICAgICB0aGlzLnNlYXJjaFN0ciA9ICRldmVudC5zZWFyY2hTdHI7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UGFnaW5hdGlvbkZvckZpbHRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0KSB7XG4gICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdCA9IG5ldyBGaWx0ZXJSZXF1ZXN0KHRoaXMucGFnZVNpemUgfHwgdGhpcy5wYWdlSW5mby5wYWdlU2l6ZSk7XG4gICAgfVxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAxO1xuICAgIGlmICh0aGlzLm1hbmFnZWFibGVQYWdlcykge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5wYWdlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5UGVuZGluZ0ZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgPSB0aGlzLnBlbmRpbmdGaWx0ZXJzIHx8IFtdO1xuICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uRm9yRmlsdGVyQ2hhbmdlKCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgaGFuZGxlRmlsdGVyRW1wdHkoJGV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IFtdO1xuICAgICAgdGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgPSBbXTtcbiAgICAgIHRoaXMuc2VhcmNoU3RyID0gJyc7XG4gICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbkZvckZpbHRlckNoYW5nZSgpO1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RGF0YSgkZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciA9IFtdO1xuICAgICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IFtdO1xuICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb25Gb3JGaWx0ZXJDaGFuZ2UoKTtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICAgIC8vIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhc0ZpbHRlcnNBcHBsaWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgJiYgdGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgKHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgKHRoaXMucGVuZGluZ0ZpbHRlcnMgJiYgdGhpcy5wZW5kaW5nRmlsdGVycy5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIGdldERpc3BsYXlTdmdQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRmlsdGVyc0FwcGxpZWQoKSAmJiB0aGlzLm5vUmVzdWx0U3ZnUGF0aCA/IHRoaXMubm9SZXN1bHRTdmdQYXRoIDogdGhpcy5ub0RhdGFGb3VuZFN2Z1BhdGg7XG4gIH1cblxuICBnZXREaXNwbGF5VGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oYXNGaWx0ZXJzQXBwbGllZCgpICYmIHRoaXMubm9SZXN1bHRTdmdQYXRoID8gdGhpcy5ub1Jlc3VsdFRpdGxlIDogdGhpcy5ub0RhdGFGb3VuZFRpdGxlO1xuICB9XG5cbiAgZ2V0RGlzcGxheVN1YnRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGFzRmlsdGVyc0FwcGxpZWQoKSAmJiB0aGlzLm5vUmVzdWx0U3ZnUGF0aCA/IHRoaXMubm9SZXN1bHRTdWJ0aXRsZSA6IHRoaXMubm9EYXRhRm91bmRTdWJ0aXRsZTtcbiAgfVxuXG4gIGJ1dHRvbkNsaWNrZWRFdmVudCgkZXZlbnQ6IEJ1dHRvbkFjdGlvblNldHRpbmdzKSB7XG5cbiAgfVxuXG4gIGdldE1vYmlsZUNhcmRJZENvbHVtbigpOiBUYWJsZUNvbHVtbjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLnZpc2libGUgJiYgYy5tb2JpbGVDYXJkSWQgPT09IHRydWUpO1xuICB9XG5cbiAgZ2V0TW9iaWxlQ2FyZFN0YXR1c0NvbHVtbigpOiBUYWJsZUNvbHVtbjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLnZpc2libGUgJiYgYy5tb2JpbGVDYXJkU3RhdHVzID09PSB0cnVlKTtcbiAgfVxuXG4gIGdldE1vYmlsZUNhcmRDb2x1bW5zKCk6IFRhYmxlQ29sdW1uPGFueT5bXSB7XG4gICAgY29uc3QgaWRDb2wgPSB0aGlzLmdldE1vYmlsZUNhcmRJZENvbHVtbigpO1xuICAgIGNvbnN0IHN0YXR1c0NvbCA9IHRoaXMuZ2V0TW9iaWxlQ2FyZFN0YXR1c0NvbHVtbigpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PlxuICAgICAgYy52aXNpYmxlICYmXG4gICAgICBjLnByb3BlcnR5ICE9PSAnYWN0aW9ucycgJiZcbiAgICAgIGMgIT09IGlkQ29sICYmXG4gICAgICBjICE9PSBzdGF0dXNDb2xcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgbGFiZWxLZXlCeVZhbHVlKGNvbHVtbjogVGFibGVDb2x1bW48YW55PiB8IHVuZGVmaW5lZCwgcm93OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghY29sdW1uIHx8ICFjb2x1bW4ucHJvcGVydHkpIHJldHVybiAnJztcbiAgICByZXR1cm4gc3VwZXIubGFiZWxLZXlCeVZhbHVlKGNvbHVtbiwgcm93KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXgtY29sdW1uIGJhc2VUYWJsZVwiPlxuICA8ZGl2IGNsYXNzPVwiZmxleC1yb3cgZmxleC0xMDBcIiA+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtY29sdW1uIGFsaWduLXN0YXJ0IGZsZXgtMTAwXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cbiAgICAgIDxhcHAtdGl0bGUtYmFyXG4gICAgICAgIFtwYWdlVGl0bGVdPVwicGFnZUluZm8uaGlkZVRpdGxlID8gJycgOiBwYWdlSW5mby5sYWJlbHNTZWN0aW9uKycubGlzdF90aXRsZSdcIlxuICAgICAgICBbc3ViVGl0bGVdPVwiKHBhZ2VJbmZvLmhpZGVUaXRsZSB8fCBwYWdlSW5mby5oaWRlU3VidGl0bGUpID8gJycgOiBwYWdlSW5mby5sYWJlbHNTZWN0aW9uKycuc3VidGl0bGUnXCJcbiAgICAgICAgW3RpdGxlTW9kZV09XCInJ1wiXG4gICAgICAgIFtwYWdlSW5mb109XCJwYWdlSW5mb1wiXG4gICAgICAgIFtuZXdBY3Rpb25dPVwic2hvd0FkZE5ldygpXCJcbiAgICAgICAgW3Nob3dFeHRyYWN0QnV0dG9uXT1cIiFwYWdlSW5mby5oaWRlRXh0cmFjdEJ1dHRvblwiXG4gICAgICAgIFtkcmFmdFN1cHBvcnRlZF09XCJwYWdlSW5mby5kcmFmdFN1cHBvcnRlZFwiXG4gICAgICAgIFtpc1BlbmRpbmddPVwiaXNQZW5kaW5nXCJcbiAgICAgICAgW29uVmlld01vZGVDaGFuZ2VdPVwic3dpdGNoVmlld01vZGUuYmluZCh0aGlzKVwiXG4gICAgICAgIFtidXR0b25zXT1cImV4dHJhQWN0aW9uc1wiXG4gICAgICAgIFtidXR0b25zRGlzcGxheU1vZGVdPVwiYnV0dG9uc0Rpc3BsYXlNb2RlXCJcbiAgICAgICAgKG5ld0FjdGlvbkNsaWNrZWQpPVwib25BZGROZXdBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChleHRyYWN0UmVwb3J0KT1cImV4dHJhY3RSZXBvcnQoJGV2ZW50KVwiXG4gICAgICAgICh2aWV3TW9kZUNoYW5nZWQpPVwib25WaWV3TW9kZUNoYW5nZWRSZWNlaXZlZCgkZXZlbnQpXCJcbiAgICAgICAgKGJ1dHRvbkNsaWNrZWQpPVwiYnV0dG9uQ2xpY2tlZC5lbWl0KCRldmVudClcIlxuICAgICAgICBbdG90YWxFbGVtZW50c109XCJwYWdlSW5mby5oaWRlVGl0bGUgPyB1bmRlZmluZWQgOiB0b3RhbEVsZW1lbnRzXCI+XG4gICAgICA8L2FwcC10aXRsZS1iYXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItcm93XCIgKm5nSWY9XCIhcGFnZUluZm8uaGlkZUFkdmFuY2VkRmlsdGVyXCI+XG4gICAgPGFwcC1maWx0ZXItYnVpbGRlclxuICAgICAgKm5nSWY9XCIhcGFnZUluZm8uaGlkZUFkdmFuY2VkRmlsdGVyXCJcbiAgICAgIFtwYWdlSW5mb109XCJwYWdlSW5mb1wiXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgIFtmaWx0ZXJGaWVsZHNdPVwiZmlsdGVyRmllbGRzXCJcbiAgICAgIFtwZW5kaW5nRmlsdGVyc109XCJwZW5kaW5nRmlsdGVyc1wiXG4gICAgICBbc2hvd0V4cG9ydEJ1dHRvbl09XCIhcGFnZUluZm8uaGlkZUV4dHJhY3RCdXR0b25cIlxuICAgICAgW2V4cG9ydERpc2FibGVkXT1cIm5vRGF0YUZvdW5kIHx8ICFkYXRhU291cmNlPy5kYXRhPy5sZW5ndGhcIlxuICAgICAgKGZpbHRlckluZm9ybWF0aW9uKT1cInN0b3JlUGVuZGluZ0ZpbHRlcnMoJGV2ZW50KVwiXG4gICAgICAoaXNFbXB0eSk9XCJoYW5kbGVGaWx0ZXJFbXB0eSgkZXZlbnQpXCJcbiAgICAgIChhcHBseUZpbHRlcik9XCJhcHBseVBlbmRpbmdGaWx0ZXJzKClcIlxuICAgICAgKHNvcnRCeUNsaWNrZWQpPVwiaGFuZGxlU29ydENsaWNrKCRldmVudClcIlxuICAgICAgKGV4cG9ydENsaWNrZWQpPVwiZXh0cmFjdFJlcG9ydCgkZXZlbnQpXCI+XG4gICAgPC9hcHAtZmlsdGVyLWJ1aWxkZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCIgKm5nSWY9XCIhcGFnZUluZm8uaGlkZUV4dHJhY3RCdXR0b25cIj5cbiAgICAgIDxidXR0b24gKm5nSWY9XCIhcGFnZUluZm8uaGlkZUV4dHJhY3RCdXR0b25cIlxuICAgICAgICBtYXQtZmxhdC1idXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJleHBvcnRNZW51XCJcbiAgICAgICAgY2xhc3M9XCJidG4tZXhwb3J0XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm5vRGF0YUZvdW5kIHx8ICFkYXRhU291cmNlPy5kYXRhPy5sZW5ndGhcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidleHBvcnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi10ZXh0XCI+XG4gICAgICAgICAgPG1hdC1pY29uPmZpbGVfZXhwb3J0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnZXhwb3J0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhcnJvdy1pY29uXCI+a2V5Ym9hcmRfYXJyb3dfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxtYXQtbWVudSAjZXhwb3J0TWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHRyYWN0UmVwb3J0KCdwZGYnKVwiPlBERjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4dHJhY3RSZXBvcnQoJ3hsc3gnKVwiPkV4Y2VsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXh0cmFjdFJlcG9ydCgnY3N2JylcIj5DU1Y8L2J1dHRvbj5cbiAgICAgIDwvbWF0LW1lbnU+XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuICA8ZGl2IGNsYXNzPVwiZmxleC1yb3cgZmxleC0xMDAgYmFzZVRhYmxlX19kZXRhaWxzQ29sdW1uXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMTAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1yb3cgZmxleC0xMDAgbWFpblRhYmxlXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiXG4gICAgICAgICAgcm9sZT1cInRhYmxlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiAmJiAhcGFnZUluZm8uaGlkZVRpdGxlXG4gICAgICAgICAgICAgID8gKHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLmxpc3RfdGl0bGUnIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCIgW2F0dHIuZGF0YS1zb3J0XT1cInNvcnRTdGF0ZVwiIHJvbGU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtblByb3Agb2YgdmlzaWJsZUNvbHVtbnNBcnJheTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtaGVhZGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImdldENvbHVtbkFyaWFTb3J0KGNvbHVtblByb3ApXCJcbiAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nID8gMCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nXCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmZpcnN0LWNlbGxdPVwiaSA9PT0gMFwiXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5sYXN0LWNlbGxdPVwiaSA9PT0gdmlzaWJsZUNvbHVtbnNBcnJheS5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbnMtY2VsbF09XCJpID09PSB2aXNpYmxlQ29sdW1uc0FycmF5Lmxlbmd0aCAtIDEgJiYgY29sdW1uUHJvcCA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy13aWR0aF09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoXCJcbiAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCA/IHsnd2lkdGgnOiBnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoICsgJyUnLCAnZmxleC1iYXNpcyc6IGdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggKyAnJSd9IDoge31cIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nICYmIGhhbmRsZVNvcnRDbGljayhjb2x1bW5Qcm9wKVwiXG4gICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uU29ydEhlYWRlcktleWRvd24oJGV2ZW50LCBjb2x1bW5Qcm9wKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLWhlYWRlci1sYWJlbFwiPnt7IGxhYmVsS2V5KGdldENvbHVtbihjb2x1bW5Qcm9wKSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8uZW5hYmxlU29ydGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZ2V0U29ydERpcmVjdGlvbihjb2x1bW5Qcm9wKSA9PT0gJ2FzYydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWljb24gc29ydC1hc2NcIj5hcnJvd19kcm9wX3VwPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImdldFNvcnREaXJlY3Rpb24oY29sdW1uUHJvcCkgPT09ICdkZXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtaWNvbiBzb3J0LWRlc2NcIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhU291cmNlLmRhdGE7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICAgICAgICAgICByb2xlPVwicm93XCJcbiAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCIndGFibGUtcm93LScgKyAocm93Py5pZCB8fCByb3c/LmtleSB8fCAnJylcIlxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgJ3RhYmxlLXJvdy0taGlnaGxpZ2h0Jzogc2VsZWN0ZWRSb3dJbmRleCA9PSByb3cuaWQgfHwgKHBhZ2VJbmZvLmdyb3VwQnlQcm9wZXJ0eSAmJiBwYWdlSW5mby5ncm91cEJ5VmFsdWU/LmluY2x1ZGVzKHJvd1twYWdlSW5mby5ncm91cEJ5UHJvcGVydHldKSksXG4gICAgICAgICAgICAgICAgICAgJ3RhYmxlLXJvdy0tZGFyay1oaWdobGlnaHQnOiBpc0RhcmtIaWdobGlnaHQocm93KVxuICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgKGF1eGNsaWNrKT1cIm9wZW5OZXdUYWIocm93KVwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uU2VsZWN0SXRlbShyb3cpXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtblByb3Agb2YgdmlzaWJsZUNvbHVtbnNBcnJheTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICByb2xlPVwiY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpcnN0LWNlbGxdPVwiaSA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmxhc3QtY2VsbF09XCJpID09PSB2aXNpYmxlQ29sdW1uc0FycmF5Lmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3Rpb25zLWNlbGxdPVwiaSA9PT0gdmlzaWJsZUNvbHVtbnNBcnJheS5sZW5ndGggLSAxICYmIGNvbHVtblByb3AgPT09ICdhY3Rpb25zJ1wiXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy13aWR0aF09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoID8geyd3aWR0aCc6IGdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggKyAnJScsICdmbGV4LWJhc2lzJzogZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCArICclJ30gOiB7fVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8udHlwZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3dvcmtmbG93U3RhdHVzJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwid2ZTdGF0dXMge3sgZ2V0U3RhdHVzRGVzY3JpcHRpb24ocm93KX19XCIgW2F0dHIuaWRdPVwiJ3RhYmxlLWJ0bi13Zi0nK2NvbHVtblByb3ArJy0nKyhyb3cuaWQgfHwgcm93LmtleSB8fCAnJylcIiBbYXR0ci50YWJpbmRleF09XCItMVwiPnt7IGdldFN0YXR1c0Rlc2NyaXB0aW9uKHJvdykgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHlwZXItdGV4dCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3VsZFJlbmRlckFzSHlwZXJMaW5rKHJvdyk7IGVsc2UgcGxhaW5IeXBlclRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsIGh5cGVyLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaHlwZXJMaW5rQ2xpY2tlZChjb2x1bW5Qcm9wLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFpbkh5cGVyVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbFwiPnt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvdWxkU2hvd0J1dHRvbihyb3cpXCIgbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmltYXJ5XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWN0aW9uQnV0dG9uQ2xpY2tlZChjb2x1bW5Qcm9wLCByb3cpXCIgW2F0dHIuaWRdPVwiJ3RhYmxlLWJ0bi1hY3Rpb24tJytjb2x1bW5Qcm9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxLZXkoZ2V0Q29sdW1uKGNvbHVtblByb3ApKSArICdfdGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICdtYWluVGFibGVfX3RkX19pY29uLWdyZWVuJzogcm93W2NvbHVtblByb3BdID09PSAncGFzcycsXG4gICAgICAgICAgICAgICAgICAgICAgJ21haW5UYWJsZV9fdGRfX2ljb24tb3JhbmdlJzogcm93W2NvbHVtblByb3BdID09PSAnd2FybmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ21haW5UYWJsZV9fdGRfX2ljb24tcmVkJzogcm93W2NvbHVtblByb3BdID09PSAnZXJyb3InXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRJY29uQXJpYUxhYmVsS2V5KHJvd1tjb2x1bW5Qcm9wXSkgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRJY29uKHJvd1tjb2x1bW5Qcm9wXSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJwcmltYXJ5XCIgW3RhYkluZGV4XT1cIi0xXCIgW2NoZWNrZWRdPVwicm93W2NvbHVtblByb3BdXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTthY3Rpb25DaGVja2VkQ2xpY2tlZChjb2x1bW5Qcm9wLHJvdylcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3RhdGVUeXBlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3RhdGVUeXBlIHt7IHJvd1tjb2x1bW5Qcm9wXX19XCIgW2F0dHIuaWRdPVwiJ3RhYmxlLWJ0bi1zdGF0ZS0nK2NvbHVtblByb3BcIiBbYXR0ci50YWJpbmRleF09XCItMVwiPnt7IGxhYmVsS2V5QnlWYWx1ZShnZXRDb2x1bW4oY29sdW1uUHJvcCksIHJvdykgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfCBkYXRlOidkZC9NTS95eXl5JzonVVRDJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjcm9wcGVkVGV4dCdcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Q3JvcHBlZFRleHQoZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApLCByb3dbZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aF0pIH19XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Rvd25sb2FkJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYWluVGFibGVfX3RkX19pY29uLWJsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQkFTRV9UQUJMRS5kb3dubG9hZEFjdGlvbicgfCB0cmFuc2xhdGVcIj5zeXN0ZW1fdXBkYXRlX2FsdDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ29uT2ZmJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IG51bGxcIiBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2ljb24tZGFya29yYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldE9uT2ZmRmxhZ0FyaWFMYWJlbEtleShudWxsKSB8IHRyYW5zbGF0ZVwiPmZsYWc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IGZhbHNlXCIgY2xhc3M9XCJtYWluVGFibGVfX3RkX19pY29uLXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldE9uT2ZmRmxhZ0FyaWFMYWJlbEtleShmYWxzZSkgfCB0cmFuc2xhdGVcIj5mbGFnPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwicm93W2NvbHVtblByb3BdID09PSB0cnVlXCIgY2xhc3M9XCJtYWluVGFibGVfX3RkX19pY29uLWdyZWVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0T25PZmZGbGFnQXJpYUxhYmVsS2V5KHRydWUpIHwgdHJhbnNsYXRlXCI+ZmxhZzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXR1cydcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IG51bGwgfHwgcm93W2NvbHVtblByb3BdID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLicgKyBnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmxhYmVsICsgJ0luQWN0aXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2NvbHVtblByb3BdID09PSB0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIGdldENvbHVtbihjb2x1bW5Qcm9wKT8ubGFiZWwgKyAnQWN0aXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2luZm8nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQkFTRV9UQUJMRS5yb3dEZXRhaWxzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtlbWl0RXZlbnQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlLWJ0bi1pbmZvLScrcm93LmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmluZm88L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbmV0QW1vdW50J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpblRhYmxlX190ZF9fY3VycmVuY3lcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO1wiPnt7IHJvd1tnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmN1cnJlbmN5XSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX3Byb3BlcnR5XCIgc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luLWxlZnQ6NnB4OyBtYXJnaW4tcmlnaHQ6NnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IGN1cnJlbmN5OicnOicnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsb2NhbERhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfCBkYXRlIDogZXh0cmFjdEZvcm1hdChnZXRDb2x1bW4oY29sdW1uUHJvcCkpOidVVEMnIH19XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2JpZ2RlY2ltYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD48c3VwIGNsYXNzPVwibWFpblRhYmxlX190ZF9fY3VycmVuY3lcIj57e3Jvd1tnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmN1cnJlbmN5XX19PC9zdXA+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIHwgbnVtYmVyIDogKGdldENvbHVtbihjb2x1bW5Qcm9wKT8uZGlnaXRJbmZvIHx8ICcxLjMtNScpIH19XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpc3RBY3Rpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtYnV0dG9uLWFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvbnNBY3Rpb25dPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy52aWV3VHlwZSA9PT0gJ2J1dHRvbnNBY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGlzdEFjdGlvbl09XCJsaXN0QWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uc109XCJsaXN0QWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZEJ1dHRvbik9XCJhY3Rpb25MaXN0Q2xpY2tlZCgkZXZlbnQscm93KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1idXR0b24tYWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGlzdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibWFpblRhYmxlX190ZF9fbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRMaXN0SXRlbXMocm93LCBjb2x1bW5Qcm9wKVwiPnt7IGl0ZW0gfX08L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8udHJhbnNsYXRlOyBlbHNlIG5vVHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGVtaXRSb3V0ZVBhZ2Uocm93KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArIFwiLlwiICsgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1RyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZW1pdFJvdXRlUGFnZShyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lclRleHRdPSdleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCknPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIE1vYmlsZSBDYXJkIFZpZXcgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRzLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YVNvdXJjZS5kYXRhOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgY2xhc3M9XCJtb2JpbGUtY2FyZFwiXG4gICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ21vYmlsZS1jYXJkLScgKyAocm93Py5pZCB8fCByb3c/LmtleSB8fCAnJylcIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICdtb2JpbGUtY2FyZC0taGlnaGxpZ2h0Jzogc2VsZWN0ZWRSb3dJbmRleCA9PSByb3cuaWQgfHwgKHBhZ2VJbmZvLmdyb3VwQnlQcm9wZXJ0eSAmJiBwYWdlSW5mby5ncm91cEJ5VmFsdWU/LmluY2x1ZGVzKHJvd1twYWdlSW5mby5ncm91cEJ5UHJvcGVydHldKSksXG4gICAgICAgICAgICAgICAnbW9iaWxlLWNhcmQtLWRhcmstaGlnaGxpZ2h0JzogaXNEYXJrSGlnaGxpZ2h0KHJvdylcbiAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAoYXV4Y2xpY2spPVwib3Blbk5ld1RhYihyb3cpXCJcbiAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblNlbGVjdEl0ZW0ocm93KVwiPlxuXG4gICAgICAgICAgPCEtLSBNb2JpbGUgQ2FyZCBIZWFkZXI6IElEL05hbWUgYW5kIFN0YXR1cyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX2hlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19oZWFkZXItaWRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtb2JpbGUtY2FyZF9faWQtdGV4dFwiPnt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBnZXRNb2JpbGVDYXJkSWRDb2x1bW4oKT8ucHJvcGVydHkgfHwgJ2lkJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9faGVhZGVyLXN0YXR1c1wiICpuZ0lmPVwiZ2V0TW9iaWxlQ2FyZFN0YXR1c0NvbHVtbigpXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInN0YXRlVHlwZSB7eyByb3dbZ2V0TW9iaWxlQ2FyZFN0YXR1c0NvbHVtbigpPy5wcm9wZXJ0eV19fVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ21vYmlsZS1idG4tc3RhdGUtJytnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCk/LnByb3BlcnR5XCI+XG4gICAgICAgICAgICAgICAge3sgbGFiZWxLZXlCeVZhbHVlKGdldE1vYmlsZUNhcmRTdGF0dXNDb2x1bW4oKSwgcm93KSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERpdmlkZXIgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgICA8IS0tIE1vYmlsZSBDYXJkIEJvZHk6IE90aGVyIGNvbHVtbnMgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ2V0TW9iaWxlQ2FyZENvbHVtbnMoKVwiIGNsYXNzPVwibW9iaWxlLWNhcmRfX3Jvd1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX3Jvdy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxhYmVsS2V5KGNvbHVtbikgfCB0cmFuc2xhdGUgfX0gOjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9fcm93LXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGF0ZVR5cGUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cInN0YXRlVHlwZSB7eyByb3dbY29sdW1uLnByb3BlcnR5XX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInbW9iaWxlLWJ0bi1zdGF0ZS0nK2NvbHVtbi5wcm9wZXJ0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsS2V5QnlWYWx1ZShjb2x1bW4sIHJvdykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSkgfCBkYXRlOidkZC9NTS95eXl5JzonVVRDJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIiduZXRBbW91bnQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLWNhcmRfX2Ftb3VudC1jdXJyZW5jeVwiPnt7IHJvd1tjb2x1bW4uY3VycmVuY3ldIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1vYmlsZS1jYXJkX19hbW91bnQtdmFsdWVcIj57eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uLnByb3BlcnR5KSB8IGN1cnJlbmN5OicnOicnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsb2NhbERhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uLnByb3BlcnR5KSB8IGRhdGUgOiBleHRyYWN0Rm9ybWF0KGNvbHVtbik6J1VUQycgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYmlnZGVjaW1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPjxzdXAgY2xhc3M9XCJtYWluVGFibGVfX3RkX19jdXJyZW5jeVwiPnt7cm93W2NvbHVtbi5jdXJyZW5jeV19fTwvc3VwPjwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgbnVtYmVyIDogKGNvbHVtbi5kaWdpdEluZm8gfHwgJzEuMy01JykgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGlzdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibWFpblRhYmxlX190ZF9fbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRMaXN0SXRlbXMocm93LCBjb2x1bW4ucHJvcGVydHkpXCI+e3sgaXRlbSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnRyYW5zbGF0ZTsgZWxzZSBub1RyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyBcIi5cIiArIGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1RyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT0nZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSknPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBNb2JpbGUgQ2FyZCBBY3Rpb25zIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9fYWN0aW9uc1wiICpuZ0lmPVwibGlzdEFjdGlvbiAmJiBsaXN0QWN0aW9uLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxhcHAtYnV0dG9uLWFjdGlvbnNcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICBbYnV0dG9uc0FjdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2xpc3RBY3Rpb25dPVwibGlzdEFjdGlvblwiXG4gICAgICAgICAgICAgIFthY3Rpb25zXT1cImxpc3RBY3Rpb25cIlxuICAgICAgICAgICAgICAoY2xpY2tlZEJ1dHRvbik9XCJhY3Rpb25MaXN0Q2xpY2tlZCgkZXZlbnQscm93KVwiPlxuICAgICAgICAgICAgPC9hcHAtYnV0dG9uLWFjdGlvbnM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJub0RhdGFGb3VuZFwiIGNsYXNzPVwiZGF0YU5vdEZvdW5kIGZsZXgtY29sdW1uXCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJnZXREaXNwbGF5U3ZnUGF0aCgpXCIgW3NyY109XCJnZXREaXNwbGF5U3ZnUGF0aCgpXCIgY2xhc3M9XCJkYXRhTm90Rm91bmRfX2ljb25cIiBhbHQ9XCJObyBkYXRhIGZvdW5kXCIgLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRhTm90Rm91bmRfX3RpdGxlXCI+e3sgZ2V0RGlzcGxheVRpdGxlKCkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRhTm90Rm91bmRfX3N1YnRpdGxlXCI+e3sgZ2V0RGlzcGxheVN1YnRpdGxlKCkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDxkaXYgICpuZ0lmPVwiKGRhdGFTb3VyY2UuZGF0YT8ubGVuZ3RoID4gMCB8fCBjdXN0b21pemVkRGF0YSkgJiYgIXBhZ2VJbmZvLmhpZGVQYWdpbmF0aW9uXCIgY2xhc3M9XCJtYWluLXBhZ2luYXRpb24gZmxleC1yb3dcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZVBhZ2luYXRpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW4gZmxleC0xMDBcIj5cbiAgICAgICAgICAgIDxhcHAtcGFnaW5hdG9yXG4gICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJwYWdlSW5kZXhcIlxuICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEVsZW1lbnRzXCJcbiAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDI1LCA1MF1cIlxuICAgICAgICAgICAgICBbbW9iaWxlTG9hZE1vcmVJbmNyZW1lbnRdPVwibW9iaWxlTG9hZE1vcmVJbmNyZW1lbnRcIlxuICAgICAgICAgICAgICBbZGlzcGxheWVkSXRlbXNdPVwibW9iaWxlRGlzcGxheWVkSXRlbXMgfHwgZGF0YVNvdXJjZS5kYXRhLmxlbmd0aFwiXG4gICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvbkxvYWRNb3JlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvYXBwLXBhZ2luYXRvcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
751
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtdGFibGUvYmFzZS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxhQUFhLEVBQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFFBQVEsRUFDUixXQUFXLEVBQ1gsT0FBTyxFQUNQLE9BQU8sRUFDUCxJQUFJLEVBQ0osT0FBTyxFQUNQLFFBQVEsRUFDUixZQUFZLEVBQ1osZUFBZSxFQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUVsRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFHakQsT0FBTyxF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cG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtNYXRUYWJsZURhdGFTb3VyY2V9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZVwiO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge01hdFNvcnRNb2R1bGUsIFNvcnR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zb3J0XCI7XG5pbXBvcnQge1xuICBDdXJyZW5jeVBpcGUsXG4gIERhdGVQaXBlLFxuICBEZWNpbWFsUGlwZSxcbiAgTmdDbGFzcyxcbiAgTmdGb3JPZixcbiAgTmdJZixcbiAgTmdTdHlsZSxcbiAgTmdTd2l0Y2gsXG4gIE5nU3dpdGNoQ2FzZSxcbiAgTmdTd2l0Y2hEZWZhdWx0XG59IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7TWF0SWNvbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2ljb25cIjtcbmltcG9ydCB7TWF0QnV0dG9uLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25CdXR0b259IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcbmltcG9ydCB7Tmd4UGFnaW5hdGlvbk1vZHVsZX0gZnJvbSBcIm5neC1wYWdpbmF0aW9uXCI7XG5pbXBvcnQge0J1dHRvbkFjdGlvbnNDb21wb25lbnR9IGZyb20gXCIuLi9idXR0b24tYWN0aW9ucy9idXR0b24tYWN0aW9ucy5jb21wb25lbnRcIjtcbmltcG9ydCB7U2hhcmVEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3RyaWdnZXItZm9ybS5zZXJ2aWNlXCI7XG5pbXBvcnQge0Jhc2VVdGlsc30gZnJvbSBcIi4uLy4uL3V0aWxzL2Jhc2UtdXRpbHNcIjtcbmltcG9ydCB7QmFja2VuZFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9iYWNrZW5kLXNlcnZpY2VcIjtcbmltcG9ydCB7RmlsdGVyfSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7RmlsdGVyUmVxdWVzdH0gZnJvbSBcIi4uLy4uL2Jhc2UtbW9kZWwvZmlsdGVyLXJlcXVlc3RcIjtcbmltcG9ydCB7XG4gIEJ1dHRvbkFjdGlvblNldHRpbmdzLFxuICBFTVBUWV9QQUdFX0lORk8sXG4gIEZpZWxkSW5mbyxcbiAgRlJPTlRfRU5EX0NPTFVNTl9UWVBFUyxcbiAgUGFnZUluZm8sXG4gIFRBQkxFX1JFQ09SRF9BQ1RJT04sXG4gIFRhYmxlQ29sdW1uXG59IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsXCI7XG5pbXBvcnQge1JlcG9ydFJlcXVlc3R9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3JlcG9ydC1yZXF1ZXN0Lm1vZGVsXCI7XG5pbXBvcnQge1RhYmxlUGFnZVVzZXJBY3Rpb259IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3RhYmxlLXBhZ2UtdXNlci1hY3Rpb24uaW50ZXJmYWNlXCI7XG5pbXBvcnQge1dvcmtmbG93fSBmcm9tIFwiLi4vLi4vYmFzZS1tb2RlbC93b3JrZmxvdy93b3JrZmxvdy5tb2RlbFwiO1xuaW1wb3J0IHtSZXNwb25zZUVudmVsb3B9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL3Jlc3BvbnNlLWVudmVsb3AubW9kZWxcIjtcbmltcG9ydCB7Um91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0xpdmVBbm5vdW5jZXJ9IGZyb20gXCJAYW5ndWxhci9jZGsvYTExeVwiO1xuaW1wb3J0IHtUaXRsZUJhckNvbXBvbmVudH0gZnJvbSBcIi4uL3RpdGxlLWJhci90aXRsZS1iYXIuY29tcG9uZW50XCI7XG5pbXBvcnQge1BhZ2luYXRvckNvbXBvbmVudH0gZnJvbSBcIi4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50XCI7XG5pbXBvcnQge01hdENoZWNrYm94fSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcbmltcG9ydCB7RmlsdGVyQnVpbGRlckNvbXBvbmVudH0gZnJvbSBcIi4uL2FkdmFuY2VkLWZpbHRlci9maWx0ZXItYnVpbGRlci9maWx0ZXItYnVpbGRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7RmllbGRGaWx0ZXJ9IGZyb20gXCIuLi8uLi9iYXNlLW1vZGVsL2ZpZWxkLWZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHtNYXRNZW51LCBNYXRNZW51SXRlbSwgTWF0TWVudVRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9tZW51XCI7XG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1iYXNlLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2UtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iYXNlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbXG4gICAgTmdTdHlsZSxcbiAgICBOZ0NsYXNzLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBNYXRJY29uLFxuICAgIE1hdFNvcnRNb2R1bGUsXG4gICAgTmdJZixcbiAgICBOZ1N3aXRjaCxcbiAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgRGF0ZVBpcGUsXG4gICAgQ3VycmVuY3lQaXBlLFxuICAgIE5neFBhZ2luYXRpb25Nb2R1bGUsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBNYXRJY29uQnV0dG9uLFxuICAgIE5nRm9yT2YsXG4gICAgTWF0QnV0dG9uLFxuICAgIEJ1dHRvbkFjdGlvbnNDb21wb25lbnQsXG4gICAgVGl0bGVCYXJDb21wb25lbnQsXG4gICAgUGFnaW5hdG9yQ29tcG9uZW50LFxuICAgIERlY2ltYWxQaXBlLFxuICAgIE1hdENoZWNrYm94LFxuICAgIEZpbHRlckJ1aWxkZXJDb21wb25lbnQsXG4gICAgTWF0TWVudVRyaWdnZXIsXG4gICAgTWF0TWVudSxcbiAgICBNYXRNZW51SXRlbSxcblxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VUYWJsZUNvbXBvbmVudCBleHRlbmRzIEJhc2VVdGlscyBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICB0eXBlczogc3RyaW5nW10gPSBbXCJwZGZcIiwgXCJjc3ZcIiwgXCJ4bHN4XCJdXG4gIGNvbGxlY3Rpb24gPSB7Y291bnQ6IDYwLCBkYXRhOiBbXX07XG4gIGNvbmZpZyA9IHtcbiAgICBpdGVtc1BlclBhZ2U6IDEwLFxuICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgIHRvdGFsSXRlbXM6IHRoaXMuY29sbGVjdGlvbi5jb3VudFxuICB9O1xuICBwdWJsaWMgbWF4U2l6ZTogbnVtYmVyID0gNztcbiAgcHVibGljIGRpcmVjdGlvbkxpbmtzOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGF1dG9IaWRlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZXNwb25zaXZlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGxhYmVsczogYW55ID0ge1xuICAgIHByZXZpb3VzTGFiZWw6ICc8JyxcbiAgICBuZXh0TGFiZWw6ICc+JyxcbiAgICBzY3JlZW5SZWFkZXJQYWdpbmF0aW9uTGFiZWw6ICdQYWdpbmF0aW9uJyxcbiAgICBzY3JlZW5SZWFkZXJQYWdlTGFiZWw6ICdwYWdlJyxcbiAgICBzY3JlZW5SZWFkZXJDdXJyZW50TGFiZWw6IGBZb3UncmUgb24gcGFnZWBcbiAgfTtcblxuICBASW5wdXQoKVxuICBmaWx0ZXJGaWVsZHM6IEZpZWxkSW5mb1tdO1xuICBASW5wdXQoKSBub0RhdGFGb3VuZFN2Z1BhdGg6IHN0cmluZztcbiAgQElucHV0KCkgbm9EYXRhRm91bmRUaXRsZSA9ICdub0RhdGFGb3VuZFRpdGxlJztcbiAgQElucHV0KCkgbm9EYXRhRm91bmRTdWJ0aXRsZSA9ICdub0RhdGFGb3VuZFN1YnRpdGxlJztcbiAgQElucHV0KCkgbm9SZXN1bHRTdmdQYXRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5vUmVzdWx0VGl0bGUgPSAnbm9SZXN1bHRUaXRsZSc7XG4gIEBJbnB1dCgpIG5vUmVzdWx0U3VidGl0bGUgPSAnbm9SZXN1bHRTdWJ0aXRsZSc7XG4gIHRvdGFsRWxlbWVudHMgPSAwO1xuICBwYWdlc0NvdW50ID0gMDtcbiAgcGFnZUluZGV4ID0gMTtcbiAgcGFnZVNpemUgPSAxMDtcbiAgbW9iaWxlRGlzcGxheWVkSXRlbXMgPSAwO1xuICBwcml2YXRlIHNlbGVjdGVkU3RhdHVzRmlsdGVyOiBGaWx0ZXJbXSA9IFtdO1xuICBhZHZhbmNlZEFwcGxpZWRGaWx0ZXI6IGFueVtdID0gW107XG4gIHBlbmRpbmdGaWx0ZXJzOiBhbnlbXSA9IFtdO1xuICBzZWFyY2hTdHI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGZpbHRlclJlcXVlc3Q6IEZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCgpO1xuICBwcml2YXRlIHRpbWVyOiBhbnk7XG4gIEBJbnB1dCgpXG4gIG92ZXJyaWRlIHBhZ2VJbmZvOiBQYWdlSW5mbyA9IEVNUFRZX1BBR0VfSU5GTztcblxuICBASW5wdXQoKVxuICBlbmFibGVQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBtb2JpbGVQYWdlU2l6ZTogbnVtYmVyID0gMjtcblxuICBASW5wdXQoKVxuICBtb2JpbGVMb2FkTW9yZUluY3JlbWVudDogbnVtYmVyID0gMjtcblxuICBASW5wdXQoKSBkYXRhPzogTWF0VGFibGVEYXRhU291cmNlPGFueT47XG4gIEBJbnB1dCgpXG4gIGxpc3RBY3Rpb246IEJ1dHRvbkFjdGlvblNldHRpbmdzW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBleHRyYUFjdGlvbnM6IEJ1dHRvbkFjdGlvblNldHRpbmdzW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBidXR0b25zRGlzcGxheU1vZGU6ICdkcm9wZG93bicgfCAnbGlzdCcgPSAnZHJvcGRvd24nO1xuXG4gIEBJbnB1dCgpXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uPGFueT5bXTtcblxuICBASW5wdXQoKVxuICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIC8vQHRzLWlnbm9yZVxuICBwYXRoUGFyYW06IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBleHRyYUJ1dHRvbjogIEJ1dHRvbkFjdGlvblNldHRpbmdzW10gPSBbXTtcblxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQWN0aW9uU2V0dGluZ3M+KCk7XG5cbiAgQElucHV0KCkgLy9AdHMtaWdub3JlXG4gIGVuZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgaXNQZW5kaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgdHJpZ2dlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFJlcXVlc3QgPSBuZXcgUmVwb3J0UmVxdWVzdCh7fSk7XG5cbiAgQElucHV0KClcbiAgc2VwYXJhdGVFbmRwb2ludERhdGE6IGFueTtcbiAgQElucHV0KClcbiAgbWFuYWdlYWJsZVBhZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHRvdGFsUGFnZXNDb3VudDogbnVtYmVyID0gMDtcbiAgQElucHV0KClcbiAgY3VycmVudFBhZ2VJbmRleDogbnVtYmVyID0gMDtcblxuICBAT3V0cHV0KClcbiAgcGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblxuICBAT3V0cHV0KClcbiAgdXNlckFjdGlvbjogRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VVc2VyQWN0aW9uPigpO1xuICBAT3V0cHV0KClcbiAgaHlwZXJMaW5rQWN0aW9uOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGV4dHJhQWN0aW9uOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdlVXNlckFjdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUGFnZVVzZXJBY3Rpb24+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHNlbGVjdGVkQ29sdW1uOiBFdmVudEVtaXR0ZXI8U29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGxpc3RBY3Rpb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8eyBhY3Rpb246IEJ1dHRvbkFjdGlvblNldHRpbmdzLCByb3c6IGFueSAsIGlzUGVuZGluZzogYm9vbGVhbn0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgYWN0aW9uOiBCdXR0b25BY3Rpb25TZXR0aW5ncyxcbiAgICByb3c6IGFueSxcbiAgICBpc1BlbmRpbmc6IGJvb2xlYW5cbiAgfT4oKTtcblxuICBAT3V0cHV0KClcbiAgcGVuZGluZ1ZpZXdNb2RlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAT3V0cHV0KClcbiAgc2hvd0RpYWxvZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICB1c2VkV29ya2Zsb3chOiBXb3JrZmxvdztcblxuICBtb2RlOmFueTtcblxuICBASW5wdXQoKVxuICBjdXN0b21pemVkRGF0YT86IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcbiAgc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xuICBub0RhdGFGb3VuZCA9IGZhbHNlO1xuICB0b3RhbFJlcXVpcmVkQ291bnRJdGVtID0gMDtcblxuXG4gIEBPdXRwdXQoKVxuICBjbGlja1JvdXRlUGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgYmFja2VuZFNlcnZpY2U6IEJhY2tlbmRTZXJ2aWNlLFxuICAgICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICBwdWJsaWMgc2hhcmVEYXRhU2VydmljZTogU2hhcmVEYXRhU2VydmljZSxcbiAgICAgIHByaXZhdGUgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIsXG4gICAgICBASW5qZWN0KCdzZWN1cml0eU1hbmFnZXInKSBwcml2YXRlIHNlY3VyaXR5TWFuYWdlcjogYW55LFxuICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKCk7XG4gICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgdGhpcy5maWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3QoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrZW5kU2VydmljZS5pc0VtcHR5SXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPD0gMDtcbiAgICBpZiAodGhpcy5jdXN0b21pemVkRGF0YSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gdGhpcy5jdXN0b21pemVkRGF0YTtcbiAgICB9XG4gICAgaWYodGhpcy5tYW5hZ2VhYmxlUGFnZXMpIHtcbiAgICAgIHRoaXMucGFnZXNDb3VudCA9IHRoaXMudG90YWxQYWdlc0NvdW50O1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IHRoaXMucGFnZVNpemU7XG5cbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgLm9ic2VydmUoWycobWF4LXdpZHRoOiA3NjhweCknXSlcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5tYXRjaGVzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDI7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwO1xuICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQ7XG4gICAgdGhpcy5nZXROZXh0KHRoaXMucGFnZUluZGV4IC0gMSk7XG4gICAgaWYgKHRoaXMubWFuYWdlYWJsZVBhZ2VzKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2VJbmRleCk7XG4gICAgfVxuICB9XG5cblxuICBleHRyYWN0RmllbGROYW1lKGVsZW1lbnQ6IGFueSwgcHJvcGVydHk6IHN0cmluZykge1xuICAgIGlmIChwcm9wZXJ0eT8uaW5jbHVkZXMoJy4nKSkge1xuICAgICAgcmV0dXJuIHByb3BlcnR5LnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50W3Byb3BlcnR5XSkgJiYgYz8uYXJyYXlTdWJQcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGVsZW1lbnRbcHJvcGVydHldLm1hcChmID0+IGZbYy5hcnJheVN1YlByb3BlcnR5XSk7XG4gICAgICAgIHJldHVybiBmaWVsZFZhbHVlcy5qb2luKCcsICcpO1xuICAgICAgfVxuICAgICAgaWYgKGM/LnR5cGUgPT09ICdsaXN0JyAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnRbcHJvcGVydHldKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaXN0SXRlbXMoZWxlbWVudCwgcHJvcGVydHkpLmpvaW4oJyDigKIgJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudFtwcm9wZXJ0eV07XG4gICAgfVxuICB9XG5cbiAgZ2V0TGlzdEl0ZW1zKGVsZW1lbnQ6IGFueSwgcHJvcGVydHk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnR5Py5pbmNsdWRlcygnLicpXG4gICAgICA/IHByb3BlcnR5LnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIGVsZW1lbnQpXG4gICAgICA6IGVsZW1lbnQ/Lltwcm9wZXJ0eV07XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgICAgIC5tYXAoaXRlbSA9PiAoaXRlbSA9PSBudWxsID8gJycgOiBTdHJpbmcoaXRlbSkpKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0ubGVuZ3RoID4gMCk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5idWlsZEdyb3VwcygpXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5wcm9wZXJ0eSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnNBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIGdldENvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogVGFibGVDb2x1bW48YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICB9XG5cbiAgZ2V0U29ydERpcmVjdGlvbihwcm9wZXJ0eTogc3RyaW5nKTogJ2FzYycgfCAnZGVzYycgfCAnJyB7XG4gICAgY29uc3Qgc29ydEtleSA9IHRoaXMucmVwb3J0UmVxdWVzdD8uZmlsdGVyUmVxdWVzdD8uc29ydEtleTtcbiAgICBpZiAoIXNvcnRLZXkgfHwgIXRoaXMuaXNTb3J0ZWRDb2x1bW4ocHJvcGVydHksIHNvcnRLZXkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zb3J0RGlyZWN0aW9uID09PSAnQVNDJyA/ICdhc2MnIDogJ2Rlc2MnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NvcnRlZENvbHVtbihwcm9wZXJ0eTogc3RyaW5nLCBzb3J0S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdldENvbHVtbihwcm9wZXJ0eSk7XG4gICAgY29uc3QgY29sdW1uU29ydEtleSA9IGNvbHVtbj8uc29ydEtleSA/PyBwcm9wZXJ0eTtcbiAgICByZXR1cm4gc29ydEtleSA9PT0gY29sdW1uU29ydEtleSB8fCBzb3J0S2V5ID09PSBwcm9wZXJ0eTtcbiAgfVxuXG4gIGhhbmRsZVNvcnRDbGljayhwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgQ09MVU1OID0gdGhpcy5nZXRDb2x1bW4ocHJvcGVydHkpO1xuICAgIGlmICghQ09MVU1OIHx8ICFDT0xVTU4uZW5hYmxlU29ydGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IENVUlJFTlRfRElSRUNUSU9OID0gdGhpcy5nZXRTb3J0RGlyZWN0aW9uKHByb3BlcnR5KTtcbiAgICBsZXQgTkVXX0RJUkVDVElPTjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcblxuICAgIGlmIChDVVJSRU5UX0RJUkVDVElPTiA9PT0gJ2FzYycpIHtcbiAgICAgIE5FV19ESVJFQ1RJT04gPSAnZGVzYyc7XG4gICAgfVxuXG4gICAgdGhpcy5vblNvcnRBY3Rpb24oe1xuICAgICAgYWN0aXZlOiBwcm9wZXJ0eSxcbiAgICAgIGRpcmVjdGlvbjogTkVXX0RJUkVDVElPTlxuICAgIH0pO1xuICB9XG5cbiAgb25Tb3J0SGVhZGVyS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uUHJvcDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmdldENvbHVtbihjb2x1bW5Qcm9wKT8uZW5hYmxlU29ydGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5oYW5kbGVTb3J0Q2xpY2soY29sdW1uUHJvcCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIGFyaWEtc29ydCBvbiBzb3J0YWJsZSBjb2x1bW4gaGVhZGVycyAoV0NBRyB0YWJsZSBzZW1hbnRpY3MpLiAqL1xuICBnZXRDb2x1bW5BcmlhU29ydChjb2x1bW5Qcm9wOiBzdHJpbmcpOiAnYXNjZW5kaW5nJyB8ICdkZXNjZW5kaW5nJyB8ICdub25lJyB8IG51bGwge1xuICAgIGlmICghdGhpcy5nZXRDb2x1bW4oY29sdW1uUHJvcCk/LmVuYWJsZVNvcnRpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBkID0gdGhpcy5nZXRTb3J0RGlyZWN0aW9uKGNvbHVtblByb3ApO1xuICAgIGlmIChkID09PSAnYXNjJykge1xuICAgICAgcmV0dXJuICdhc2NlbmRpbmcnO1xuICAgIH1cbiAgICBpZiAoZCA9PT0gJ2Rlc2MnKSB7XG4gICAgICByZXR1cm4gJ2Rlc2NlbmRpbmcnO1xuICAgIH1cbiAgICByZXR1cm4gJ25vbmUnO1xuICB9XG5cbiAgc29ydFN0YXRlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBpbml0aWFsRGF0YUxvYWRTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBnZXROZXh0KHBhZ2VJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cbiAgb25QYWdlU2l6ZUNoYW5nZShldmVudDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50O1xuICAgIHRoaXMucGFnZUluZGV4ID0gMTsgLy8gcmVzZXQgdG8gZmlyc3QgcGFnZSBvbiBwYWdlIHNpemUgY2hhbmdlXG4gICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IDA7XG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgIHRoaXMuZ2V0TmV4dCgwKTtcbiAgfVxuXG4gIG9uTG9hZE1vcmUoaXRlbXNUb0xvYWQ6IG51bWJlcikge1xuICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5ZWQgPSB0aGlzLm1vYmlsZURpc3BsYXllZEl0ZW1zIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCB8fCB0aGlzLnBhZ2VTaXplO1xuICAgIHRoaXMucGFnZVNpemUgPSBNYXRoLm1pbihjdXJyZW50RGlzcGxheWVkICsgaXRlbXNUb0xvYWQsIHRoaXMudG90YWxFbGVtZW50cyk7XG4gICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAxO1xuICAgIHRoaXMubG9hZERhdGEodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKHNraXBNb2JpbGVSZXNldDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXG4gICAgaWYgKCFza2lwTW9iaWxlUmVzZXQpIHtcbiAgICAgIC8vIHRoaXMuaW5pdGlhbGl6ZU1vYmlsZVBhZ2VTaXplKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdCkge1xuICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QgPSBuZXcgRmlsdGVyUmVxdWVzdCh0aGlzLnBhZ2VTaXplIHx8IHRoaXMucGFnZUluZm8ucGFnZVNpemUpO1xuICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3Quc2VhcmNoU3RyID0gdGhpcy5zZWFyY2hTdHI7XG4gICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5maWx0ZXJzID0gW1xuICAgICAgICAuLi4odGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgfHwgW10pLFxuICAgICAgICAuLi4odGhpcy5maWx0ZXJzIHx8IFtdKS5maWx0ZXIoZiA9PlxuICAgICAgICAgICEodGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgfHwgW10pLnNvbWUoYSA9PiBhLmZpZWxkID09PSBmLmZpZWxkTmFtZSlcbiAgICAgICAgKVxuICAgICAgXTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgaWYgKHRoaXMubWFuYWdlYWJsZVBhZ2VzKSB7XG4gICAgICB0aGlzLnN5bmNDbGllbnREYXRhU291cmNlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlcGFyYXRlRW5kcG9pbnREYXRhIHx8ICF0aGlzLnBhZ2VJbmZvLmFwaVVyaSB8fCB0aGlzLnBhZ2VJbmZvLmFwaVVyaS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc3luY0NsaWVudERhdGFTb3VyY2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYodGhpcy5yZXBvcnRSZXF1ZXN0ID09IHVuZGVmaW5lZCl7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmKCF0aGlzLm1hbmFnZWFibGVQYWdlcykgIHtcbiAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QuY29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKGMgPT4gRlJPTlRfRU5EX0NPTFVNTl9UWVBFUy5pbmRleE9mKGMudHlwZSkgPCAwICkubWFwKGMgPT4gYy5wcm9wZXJ0eSkgfHwgW107XG4gICAgICAgICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGVuZGluZ1BhZ2UgPSB0aGlzLmlzUGVuZGluZztcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zZWFyY2hTdHIgPSB0aGlzLnNlYXJjaFN0cjtcbiAgICAgICAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5maWx0ZXJzID0gW1xuICAgICAgICAgICAgLi4uKHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyIHx8IFtdKSxcbiAgICAgICAgICAgIC4uLih0aGlzLmZpbHRlcnMgfHwgW10pLmZpbHRlcihmID0+XG4gICAgICAgICAgICAgICEodGhpcy5hZHZhbmNlZEFwcGxpZWRGaWx0ZXIgfHwgW10pLnNvbWUoYSA9PiBhLmZpZWxkID09PSBmLmZpZWxkTmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5nZXRJdGVtc0J5RmlsdGVyKHRoaXMucmVwb3J0UmVxdWVzdD8uZmlsdGVyUmVxdWVzdCwgdGhpcy5wYWdlSW5mby5hcGlVcmkpLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VFbnZlbG9wZSA9IG5ldyBSZXNwb25zZUVudmVsb3AocmVzcCk7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZUVudmVsb3BlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlcXVpcmVkQ291bnRJdGVtID0gdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZVNpemVcbiAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YUZvdW5kID0gcmVzcG9uc2VFbnZlbG9wZS5ib2R5Lmxlbmd0aCA8IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSByZXNwb25zZUVudmVsb3BlLmJvZHk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrZW5kU2VydmljZS5pc0VtcHR5SXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPD0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRWxlbWVudHMgPSByZXNwb25zZUVudmVsb3BlLnRvdGFsU2l6ZSB8fCAwO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNDb3VudCA9IE1hdGguY2VpbCh0aGlzLnRvdGFsRWxlbWVudHMgLyB0aGlzLnBhZ2VTaXplKSB8fCAxO1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gKHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnBhZ2VJbmRleCB8fCAwKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcudG90YWxJdGVtcyA9IHJlc3BvbnNlRW52ZWxvcGUudG90YWxTaXplIHx8IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2JpbGVEaXNwbGF5ZWRJdGVtcyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLmFubm91bmNlVGFibGVSZXN1bHRzKCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3luY0NsaWVudERhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuY3VzdG9taXplZERhdGE/LmRhdGEgPz8gdGhpcy5zZXBhcmF0ZUVuZHBvaW50RGF0YSA/PyBbXTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHJvd3M7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5hbm5vdW5jZVRhYmxlUmVzdWx0cygpKTtcbiAgfVxuXG4gIHByaXZhdGUgYW5ub3VuY2VUYWJsZVJlc3VsdHMoKTogdm9pZCB7XG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID8/IDA7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsRWxlbWVudHMgPz8gdmlzaWJsZTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0JBU0VfVEFCTEUucmVzdWx0c0Fubm91bmNlbWVudCcsIHtcbiAgICAgIHZpc2libGUsXG4gICAgICB0b3RhbCxcbiAgICB9KTtcbiAgICB2b2lkIHRoaXMubGl2ZUFubm91bmNlci5hbm5vdW5jZShtZXNzYWdlLCAncG9saXRlJyk7XG4gIH1cblxuICBnZXRTdGF0dXNEZXNjcmlwdGlvbihlbGVtZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kU2VydmljZS5nZXRTdGF0dXNEZXNjcmlwdGlvbihlbGVtZW50LCB0aGlzLnVzZWRXb3JrZmxvdyk7XG4gIH1cblxuICBnZXRTdGF0ZVR5cGUoZWxlbWVudDogYW55KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuc3RhdGVUeXBlXG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbXCJjdXN0b21pemVkRGF0YVwiXSkge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNoYW5nZXNbXCJjdXN0b21pemVkRGF0YVwiXS5jdXJyZW50VmFsdWUgYXMgTWF0VGFibGVEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgfVxuICAgICAgdGhpcy5zeW5jQ2xpZW50RGF0YVNvdXJjZSgpO1xuICAgICAgaWYgKCFjaGFuZ2VzW1wiY3VzdG9taXplZERhdGFcIl0uaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgIHRoaXMucGFnZXNDb3VudCA9IHRoaXMudG90YWxQYWdlc0NvdW50O1xuICAgICAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMuY3VycmVudFBhZ2VJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJlbmZvcmNlUmVmcmVzaFwiXSAmJiAhY2hhbmdlc1tcImVuZm9yY2VSZWZyZXNoXCJdLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcImlzUGVuZGluZ1wiXSAmJiAhY2hhbmdlc1tcImlzUGVuZGluZ1wiXS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3BhZ2VJbmZvJ10gfHwgY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlSW5pdGlhbExvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlSW5pdGlhbExvYWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbERhdGFMb2FkU2NoZWR1bGVkIHx8IHRoaXMubWFuYWdlYWJsZVBhZ2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnBhZ2VJbmZvLmxhenlMb2FkRGF0YSA9PT0gdHJ1ZSAmJiB0aGlzLmVuZm9yY2VSZWZyZXNoICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5wYWdlSW5mbz8uYXBpVXJpICYmICF0aGlzLnNlcGFyYXRlRW5kcG9pbnREYXRhICYmICF0aGlzLmN1c3RvbWl6ZWREYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbERhdGFMb2FkU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB0aGlzLmxvYWREYXRhKCkpO1xuICB9XG4gIGdldENyb3BwZWRUZXh0KGVsZW1lbnRWYWx1ZTogYW55LCBzdWJXaWR0aDogbnVtYmVyID0gMjApIHtcbiAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS5sZW5ndGggPiBzdWJXaWR0aCA/IGVsZW1lbnRWYWx1ZS5zdWJzdHJpbmcoMCwgc3ViV2lkdGgpICsgXCIuLi5cIiA6IGVsZW1lbnRWYWx1ZTtcbiAgfVxuXG4gIGVtaXRFdmVudChlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLnNob3dEaWFsb2cuZW1pdChlbGVtZW50KTtcbiAgfVxuXG4gIGV4dHJhY3RGb3JtYXQoY29sdW1uOiBUYWJsZUNvbHVtbjxhbnk+KSB7XG4gICAgcmV0dXJuIGNvbHVtbj8uZm9ybWF0IHx8ICdkL00veXl5eSwgaDptbSBhJztcbiAgfVxuXG4gIGFjdGlvbkxpc3RDbGlja2VkKGxpc3RBY3Rpb246IEJ1dHRvbkFjdGlvblNldHRpbmdzLCBlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLmxpc3RBY3Rpb25DbGlja2VkLmVtaXQoe2FjdGlvbjpsaXN0QWN0aW9uLCByb3c6IGVsZW1lbnQsIGlzUGVuZGluZzogdGhpcy5pc1BlbmRpbmd9KTtcbiAgfVxuXG4gIGh5cGVyTGlua0NsaWNrZWQoYWN0aW9uTmFtZTogc3RyaW5nLCBlbGVtZW50OiBhbnkpIHtcbiAgICBjb25zdCBhY3Rpb24gPSBUQUJMRV9SRUNPUkRfQUNUSU9OO1xuICAgIGFjdGlvbi5hY3Rpb25LZXkgPSBhY3Rpb25OYW1lO1xuICAgIGFjdGlvbi5pdGVtID0gZWxlbWVudDtcbiAgICBhY3Rpb24ucGFnZUluZm8gPSB0aGlzLnBhZ2VJbmZvO1xuICAgIHRoaXMuaHlwZXJMaW5rQWN0aW9uLmVtaXQoYWN0aW9uKVxuICB9XG5cblxuICBlbWl0Um91dGVQYWdlKGVsZW1lbnQ6IGFueSl7XG4gICAgdGhpcy5jbGlja1JvdXRlUGFnZS5lbWl0KGVsZW1lbnQpO1xuICB9XG5cbiAgb25TZWxlY3RJdGVtKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMucGFnZUluZm8uc2VsZlJvdXRpbmcpIHtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmlzUGVuZGluZyA/ICdwZW5kaW5nJyA6ICd2aWV3JztcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMucGFnZUluZm8ubGlzdFJvdXRlUGF0aCB8fCB0aGlzLnJvdXRlci51cmx9L3ZpZXdgO1xuXG4gICAgICBjb25zdCBlbmNyeXB0ZWRJZCA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChTdHJpbmcocm93LmlkKSk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWRNb2RlID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KG1vZGUpO1xuXG4gICAgICBjb25zdCBlbmNyeXB0ZWRSb3cgPSB0aGlzLmJhY2tlbmRTZXJ2aWNlLmVuY3J5cHQoSlNPTi5zdHJpbmdpZnkocm93KSk7XG5cbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHRva2VuOiBlbmNyeXB0ZWRJZCwgbW9kZTogZW5jcnlwdGVkTW9kZSB9LFxuICAgICAgICBzdGF0ZTogeyByYXc6IGVuY3J5cHRlZFJvdyB9LFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNvbnN0IGFjdGlvbiA9IFNFTEVDVF9SRUNPUkRfQUNUSU9OO1xuICAgIC8vIGFjdGlvbi5pZCA9IHJvdz8uaWQ7XG4gICAgLy8gYWN0aW9uLml0ZW0gPSByb3c7XG4gICAgLy8gdGhpcy51c2VyQWN0aW9uLmVtaXQoYWN0aW9uKVxuICB9XG5cbiAgb3Blbk5ld1RhYihyb3cpIHtcbiAgICBpZiAoIXRoaXMucGFnZUluZm8uZW1iZWRlZFRhYmxlT25seSkge1xuICAgICAgY29uc3QgbW9kZSA9IHRoaXMuaXNQZW5kaW5nID8gJ3BlbmRpbmcnIDogJ3ZpZXcnO1xuICAgICAgd2luZG93Lm9wZW4oYCR7dGhpcy5wYWdlSW5mby5saXN0Um91dGVQYXRofS8ke21vZGV9YCArICcvJyArIHJvdz8uaWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uVmlld01vZGVDaGFuZ2VkUmVjZWl2ZWQoaXNQZW5kaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5wZW5kaW5nVmlld01vZGVDaGFuZ2VkLmVtaXQoaXNQZW5kaW5nKTtcbiAgICB0aGlzLnN3aXRjaFZpZXdNb2RlKGlzUGVuZGluZyk7XG4gIH1cblxuICBzd2l0Y2hWaWV3TW9kZShpc1BlbmRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzUGVuZGluZyA9IGlzUGVuZGluZztcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBvbkFkZE5ld0FjdGlvbigkZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMucGFnZUluZm8ubGlzdFJvdXRlUGF0aCB8fCB0aGlzLnJvdXRlci51cmx9L3ZpZXdgO1xuICAgIGNvbnN0IGVuY3J5cHRlZElkID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KFwiLTFcIik7XG4gICAgY29uc3QgZW5jcnlwdGVkTW9kZSA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChcInBlbmRpbmdcIik7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3VybH1gXSxcbiAgICAgIHsgcXVlcnlQYXJhbXM6IHsgdG9rZW46IGVuY3J5cHRlZElkICwgbW9kZSA6IGVuY3J5cHRlZE1vZGUgfSB9KTtcblxuICAgIC8vIGNvbnN0IGFjdGlvbiA9IFNFTEVDVF9SRUNPUkRfQUNUSU9OO1xuICAgIC8vIGFjdGlvbi5pZCA9IHJvdz8uaWQ7XG4gICAgLy8gYWN0aW9uLml0ZW0gPSByb3c7XG4gICAgLy8gdGhpcy51c2VyQWN0aW9uLmVtaXQoYWN0aW9uKVxuICB9XG5cbiAgc2hvd0FkZE5ldygpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlSW5mby5oYXNBZGRCdXR0b24gO1xuICB9XG5cbiAgb25FeHRyYUJ1dHRpb25BY3Rpb24oJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmV4dHJhQWN0aW9uLmVtaXQoJGV2ZW50KTtcblxuICB9XG5cbiAgaGFzR3JvdXBzKCkge1xuICAgIGxldCBiID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChwID0+IHAuZ3JvdXApO1xuICAgIHJldHVybiBiID49IDA7XG4gIH1cbiAgZ3JvdXBOYW1lczogYW55ID0gW11cbiAgZ3JvdXBTcGFuczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcblxuICBidWlsZEdyb3Vwcygpe1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgdGhpcy5ncm91cE5hbWVzID0gW107XG4gICAgdGhpcy5ncm91cFNwYW5zLmNsZWFyKCk7XG4gICAgaWYodGhpcy5oYXNHcm91cHMoKSA9PT0gZmFsc2Upe1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlID09PSB0cnVlKVxuICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmdyb3VwID09PSBcIi1cIikge1xuICAgICAgICAgIHRoaXMuZ3JvdXBOYW1lcy5wdXNoKGNvdW50LnRvU3RyaW5nKCkpO1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SW5NYXAoY291bnQpO1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmdyb3VwTmFtZXMuaW5jbHVkZXMoY29sdW1uLmdyb3VwKSkge1xuICAgICAgICAgIHRoaXMuZ3JvdXBOYW1lcy5wdXNoKGNvbHVtbi5ncm91cCk7XG4gICAgICAgICAgdGhpcy5pbnNlcnRJbk1hcChjb2x1bW4uZ3JvdXApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc2VydEluTWFwKGNvbHVtbi5ncm91cCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGluc2VydEluTWFwKGtleSl7XG4gICAgaWYodGhpcy5ncm91cFNwYW5zLmhhcyhrZXkpKXtcbiAgICAgIHRoaXMuZ3JvdXBTcGFucy5zZXQoa2V5LnRvU3RyaW5nKCksIHRoaXMuZ3JvdXBTcGFucy5nZXQoa2V5KSArIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwU3BhbnMuc2V0KGtleS50b1N0cmluZygpLCAxKTtcbiAgICB9XG4gIH1cblxuICBpc0h1bWFuTWFkZShzdHIpe1xuICAgIHJldHVybiBpc05hTihzdHIpO1xuICB9XG5cbiAgYWN0aW9uQnV0dG9uQ2xpY2tlZChhY3Rpb25LZXk6IHN0cmluZywgaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKGFjdGlvbktleSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0ZUFjdGlvbihpdGVtKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRUYWJsZUFjdGlvbihhY3Rpb25LZXksIGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0ZUFjdGlvbihpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5pc1BlbmRpbmcgPyAncGVuZGluZycgOiAndmlldyc7XG4gICAgY29uc3QgYmFzZVBhdGggPSB0aGlzLnBhZ2VJbmZvLmxpc3RSb3V0ZVBhdGggfHwgdGhpcy5yb3V0ZXIudXJsO1xuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VQYXRofS92aWV3YDtcblxuICAgIGNvbnN0IGVuY3J5cHRlZElkID0gdGhpcy5iYWNrZW5kU2VydmljZS5lbmNyeXB0KGl0ZW0uaWQudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTW9kZSA9IHRoaXMuYmFja2VuZFNlcnZpY2UuZW5jcnlwdChtb2RlKTtcblxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdLCB7XG4gICAgICBxdWVyeVBhcmFtczogeyB0b2tlbjogZW5jcnlwdGVkSWQsIG1vZGU6IGVuY3J5cHRlZE1vZGUgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VGFibGVBY3Rpb24oYWN0aW9uS2V5OiBzdHJpbmcsIGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9IFRBQkxFX1JFQ09SRF9BQ1RJT047XG4gICAgYWN0aW9uLmFjdGlvbktleSA9IGFjdGlvbktleTtcbiAgICBhY3Rpb24uaXRlbSA9IGl0ZW07XG4gICAgYWN0aW9uLnBhZ2VJbmZvID0gdGhpcy5wYWdlSW5mbztcbiAgICB0aGlzLnVzZXJBY3Rpb24uZW1pdChhY3Rpb24pO1xuICB9XG5cbiAgZXh0cmFjdFJlcG9ydChyZXBvcnRUeXBlOiBhbnkpIHtcbiAgICBjb25zdCBteUZpbHRlcnMgPSB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdDtcbiAgICBjb25zdCByZXBvcnRSZXF1ZXN0ID0gdGhpcy5iYWNrZW5kU2VydmljZS5idWlsZFJlcG9ydFJlcXVlc3QodGhpcy5jb2x1bW5zLCB0aGlzLnBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24gKyAnLmxpc3RfdGl0bGUnLFxuICAgICAgbXlGaWx0ZXJzLCByZXBvcnRUeXBlLCB0aGlzLnBhZ2VJbmZvLCB0aGlzLnNlYXJjaFN0ciwgJ0xBTkRTQ0FQRScpO1xuICAgIHRoaXMuYmFja2VuZFNlcnZpY2UuZG93bmxvYWRSZXBvcnQocmVwb3J0UmVxdWVzdCwgdGhpcy5wYWdlSW5mby5hcGlVcmkpO1xuICB9XG5cbiAgZ2V0SWNvbihzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ3Bhc3MnOiByZXR1cm4gJ2NoZWNrX2NpcmNsZSc7XG4gICAgICBjYXNlICd3YXJuaW5nJzogcmV0dXJuICd3YXJuaW5nJztcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuICdlcnJvcic7XG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ2hlbHAnO1xuICAgIH1cbiAgfVxuXG4gIGdldEljb25BcmlhTGFiZWxLZXkoc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdwYXNzJzpcbiAgICAgICAgcmV0dXJuICdCQVNFX1RBQkxFLnN0YXR1c0ljb25QYXNzJztcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICByZXR1cm4gJ0JBU0VfVEFCTEUuc3RhdHVzSWNvbldhcm5pbmcnO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gJ0JBU0VfVEFCTEUuc3RhdHVzSWNvbkVycm9yJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnQkFTRV9UQUJMRS5zdGF0dXNJY29uVW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgZ2V0T25PZmZGbGFnQXJpYUxhYmVsS2V5KHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ0JBU0VfVEFCTEUuc3RhdHVzRmxhZ0FjdGl2ZSc7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiAnQkFTRV9UQUJMRS5zdGF0dXNGbGFnSW5hY3RpdmUnO1xuICAgIH1cbiAgICByZXR1cm4gJ0JBU0VfVEFCTEUuc3RhdHVzRmxhZ1BlbmRpbmcnO1xuICB9XG5cbiAgYWN0aW9uQ2hlY2tlZENsaWNrZWQocHJvcGVydHk6IHN0cmluZywgZWxlbWVudCkge1xuICAgIGVsZW1lbnRbcHJvcGVydHldPSAhZWxlbWVudFtwcm9wZXJ0eV07XG4gICAgdGhpcy5hY3Rpb25CdXR0b25DbGlja2VkKHByb3BlcnR5LCBlbGVtZW50KTtcbiAgfVxuXG5cbiAgaXNEYXJrSGlnaGxpZ2h0KHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ3JvdXBCeVByb3AgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5UHJvcGVydHk7XG4gICAgY29uc3QgZ3JvdXBCeVZhbHVlcyA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlWYWx1ZTtcblxuICAgIGlmICghZ3JvdXBCeVByb3AgfHwgIWdyb3VwQnlWYWx1ZXMgfHwgIXJvd1tncm91cEJ5UHJvcF0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjZWxsVmFsdWUgPSByb3dbZ3JvdXBCeVByb3BdLnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gZ3JvdXBCeVZhbHVlcy5zb21lKHZhbCA9PlxuICAgICAgY2VsbFZhbHVlLmluY2x1ZGVzKHZhbCkgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IHZhbC5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgc2hvdWxkUmVuZGVyQXNIeXBlckxpbmsoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZ3JvdXBCeVByb3AgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5UHJvcGVydHk7XG4gICAgY29uc3QgZ3JvdXBCeVZhbHVlcyA9IHRoaXMucGFnZUluZm8/Lmdyb3VwQnlWYWx1ZTtcblxuICAgIGlmICghZ3JvdXBCeVByb3AgfHwgIWdyb3VwQnlWYWx1ZXMgfHwgIWVsZW1lbnRbZ3JvdXBCeVByb3BdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBlbGVtZW50W2dyb3VwQnlQcm9wXS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuICFncm91cEJ5VmFsdWVzLnNvbWUodiA9PiB2YWx1ZS5pbmNsdWRlcyh2KSAmJiB2YWx1ZS5sZW5ndGggPj0gdi5sZW5ndGgpO1xuICB9XG5cblxuICBvblNvcnRBY3Rpb24oJGV2ZW50OiBTb3J0KSB7XG4gICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zLmZpbmQoYyA9PiBjLnByb3BlcnR5ID09PSAkZXZlbnQuYWN0aXZlKTtcblxuICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0LnNvcnRLZXkgPVxuICAgICAgJGV2ZW50LmFjdGl2ZSAmJiAkZXZlbnQuZGlyZWN0aW9uXG4gICAgICAgID8gKGNvbD8uc29ydEtleSA/PyAkZXZlbnQuYWN0aXZlKVxuICAgICAgICA6ICdpZCc7XG5cbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5zb3J0RGlyZWN0aW9uID0gJGV2ZW50LmRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnQVNDJyA6ICdERVNDJztcbiAgICB0aGlzLnJlcG9ydFJlcXVlc3QuZmlsdGVyUmVxdWVzdC5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4uZW1pdCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLm1hbmFnZWFibGVQYWdlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBzaG91bGRTaG93QnV0dG9uKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGdyb3VwQnlQcm9wID0gdGhpcy5wYWdlSW5mbz8uZ3JvdXBCeVByb3BlcnR5O1xuICAgIGNvbnN0IGdyb3VwQnlWYWx1ZXMgPSB0aGlzLnBhZ2VJbmZvPy5ncm91cEJ5VmFsdWU7XG5cbiAgICBpZiAoIWdyb3VwQnlQcm9wIHx8ICFncm91cEJ5VmFsdWVzIHx8ICFlbGVtZW50W2dyb3VwQnlQcm9wXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBlbGVtZW50W2dyb3VwQnlQcm9wXS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuICFncm91cEJ5VmFsdWVzLnNvbWUodiA9PiB2YWx1ZS5pbmNsdWRlcyh2KSAmJiB2YWx1ZS5sZW5ndGggPj0gdi5sZW5ndGgpO1xuICB9XG5cbiAgc3RvcmVQZW5kaW5nRmlsdGVycygkZXZlbnQ6IHsgZmlsdGVyczogRmllbGRGaWx0ZXJbXSwgc2VhcmNoU3RyOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSAkZXZlbnQuZmlsdGVycyB8fCBbXTtcbiAgICAgIHRoaXMuc2VhcmNoU3RyID0gJGV2ZW50LnNlYXJjaFN0cjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQYWdpbmF0aW9uRm9yRmlsdGVyQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QpIHtcbiAgICAgIHRoaXMucmVwb3J0UmVxdWVzdC5maWx0ZXJSZXF1ZXN0ID0gbmV3IEZpbHRlclJlcXVlc3QodGhpcy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VJbmZvLnBhZ2VTaXplKTtcbiAgICB9XG4gICAgdGhpcy5yZXBvcnRSZXF1ZXN0LmZpbHRlclJlcXVlc3QucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XG4gICAgaWYgKHRoaXMubWFuYWdlYWJsZVBhZ2VzKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh0aGlzLnBhZ2VJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlQZW5kaW5nRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciA9IHRoaXMucGVuZGluZ0ZpbHRlcnMgfHwgW107XG4gICAgdGhpcy5yZXNldFBhZ2luYXRpb25Gb3JGaWx0ZXJDaGFuZ2UoKTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBoYW5kbGVGaWx0ZXJFbXB0eSgkZXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLnBlbmRpbmdGaWx0ZXJzID0gW107XG4gICAgICB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciA9IFtdO1xuICAgICAgdGhpcy5zZWFyY2hTdHIgPSAnJztcbiAgICAgIHRoaXMucmVzZXRQYWdpbmF0aW9uRm9yRmlsdGVyQ2hhbmdlKCk7XG4gICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXREYXRhKCRldmVudDogYm9vbGVhbikge1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRBcHBsaWVkRmlsdGVyID0gW107XG4gICAgICB0aGlzLnBlbmRpbmdGaWx0ZXJzID0gW107XG4gICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbkZvckZpbHRlckNoYW5nZSgpO1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgLy8gdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFzRmlsdGVyc0FwcGxpZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlciAmJiB0aGlzLmFkdmFuY2VkQXBwbGllZEZpbHRlci5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAodGhpcy5wZW5kaW5nRmlsdGVycyAmJiB0aGlzLnBlbmRpbmdGaWx0ZXJzLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgZ2V0RGlzcGxheVN2Z1BhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oYXNGaWx0ZXJzQXBwbGllZCgpICYmIHRoaXMubm9SZXN1bHRTdmdQYXRoID8gdGhpcy5ub1Jlc3VsdFN2Z1BhdGggOiB0aGlzLm5vRGF0YUZvdW5kU3ZnUGF0aDtcbiAgfVxuXG4gIGdldERpc3BsYXlUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmhhc0ZpbHRlcnNBcHBsaWVkKCkgJiYgdGhpcy5ub1Jlc3VsdFN2Z1BhdGggPyB0aGlzLm5vUmVzdWx0VGl0bGUgOiB0aGlzLm5vRGF0YUZvdW5kVGl0bGU7XG4gIH1cblxuICBnZXREaXNwbGF5U3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oYXNGaWx0ZXJzQXBwbGllZCgpICYmIHRoaXMubm9SZXN1bHRTdmdQYXRoID8gdGhpcy5ub1Jlc3VsdFN1YnRpdGxlIDogdGhpcy5ub0RhdGFGb3VuZFN1YnRpdGxlO1xuICB9XG5cbiAgYnV0dG9uQ2xpY2tlZEV2ZW50KCRldmVudDogQnV0dG9uQWN0aW9uU2V0dGluZ3MpIHtcblxuICB9XG5cbiAgZ2V0TW9iaWxlQ2FyZElkQ29sdW1uKCk6IFRhYmxlQ29sdW1uPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZChjID0+IGMudmlzaWJsZSAmJiBjLm1vYmlsZUNhcmRJZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCk6IFRhYmxlQ29sdW1uPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmluZChjID0+IGMudmlzaWJsZSAmJiBjLm1vYmlsZUNhcmRTdGF0dXMgPT09IHRydWUpO1xuICB9XG5cbiAgZ2V0TW9iaWxlQ2FyZENvbHVtbnMoKTogVGFibGVDb2x1bW48YW55PltdIHtcbiAgICBjb25zdCBpZENvbCA9IHRoaXMuZ2V0TW9iaWxlQ2FyZElkQ29sdW1uKCk7XG4gICAgY29uc3Qgc3RhdHVzQ29sID0gdGhpcy5nZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+XG4gICAgICBjLnZpc2libGUgJiZcbiAgICAgIGMucHJvcGVydHkgIT09ICdhY3Rpb25zJyAmJlxuICAgICAgYyAhPT0gaWRDb2wgJiZcbiAgICAgIGMgIT09IHN0YXR1c0NvbFxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBsYWJlbEtleUJ5VmFsdWUoY29sdW1uOiBUYWJsZUNvbHVtbjxhbnk+IHwgdW5kZWZpbmVkLCByb3c6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFjb2x1bW4gfHwgIWNvbHVtbi5wcm9wZXJ0eSkgcmV0dXJuICcnO1xuICAgIHJldHVybiBzdXBlci5sYWJlbEtleUJ5VmFsdWUoY29sdW1uLCByb3cpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW4gYmFzZVRhYmxlXCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4LXJvdyBmbGV4LTEwMFwiID5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW4gYWxpZ24tc3RhcnQgZmxleC0xMDBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgPGFwcC10aXRsZS1iYXJcbiAgICAgICAgW3BhZ2VUaXRsZV09XCJwYWdlSW5mby5oaWRlVGl0bGUgPyAnJyA6IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24rJy5saXN0X3RpdGxlJ1wiXG4gICAgICAgIFtzdWJUaXRsZV09XCIocGFnZUluZm8uaGlkZVRpdGxlIHx8IHBhZ2VJbmZvLmhpZGVTdWJ0aXRsZSkgPyAnJyA6IHBhZ2VJbmZvLmxhYmVsc1NlY3Rpb24rJy5zdWJ0aXRsZSdcIlxuICAgICAgICBbdGl0bGVNb2RlXT1cIicnXCJcbiAgICAgICAgW3BhZ2VJbmZvXT1cInBhZ2VJbmZvXCJcbiAgICAgICAgW25ld0FjdGlvbl09XCJzaG93QWRkTmV3KClcIlxuICAgICAgICBbc2hvd0V4dHJhY3RCdXR0b25dPVwiIXBhZ2VJbmZvLmhpZGVFeHRyYWN0QnV0dG9uXCJcbiAgICAgICAgW2RyYWZ0U3VwcG9ydGVkXT1cInBhZ2VJbmZvLmRyYWZ0U3VwcG9ydGVkXCJcbiAgICAgICAgW2lzUGVuZGluZ109XCJpc1BlbmRpbmdcIlxuICAgICAgICBbb25WaWV3TW9kZUNoYW5nZV09XCJzd2l0Y2hWaWV3TW9kZS5iaW5kKHRoaXMpXCJcbiAgICAgICAgW2J1dHRvbnNdPVwiZXh0cmFBY3Rpb25zXCJcbiAgICAgICAgW2J1dHRvbnNEaXNwbGF5TW9kZV09XCJidXR0b25zRGlzcGxheU1vZGVcIlxuICAgICAgICAobmV3QWN0aW9uQ2xpY2tlZCk9XCJvbkFkZE5ld0FjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgKGV4dHJhY3RSZXBvcnQpPVwiZXh0cmFjdFJlcG9ydCgkZXZlbnQpXCJcbiAgICAgICAgKHZpZXdNb2RlQ2hhbmdlZCk9XCJvblZpZXdNb2RlQ2hhbmdlZFJlY2VpdmVkKCRldmVudClcIlxuICAgICAgICAoYnV0dG9uQ2xpY2tlZCk9XCJidXR0b25DbGlja2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIFt0b3RhbEVsZW1lbnRzXT1cInBhZ2VJbmZvLmhpZGVUaXRsZSA/IHVuZGVmaW5lZCA6IHRvdGFsRWxlbWVudHNcIj5cbiAgICAgIDwvYXBwLXRpdGxlLWJhcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1yb3dcIiAqbmdJZj1cIiFwYWdlSW5mby5oaWRlQWR2YW5jZWRGaWx0ZXJcIj5cbiAgICA8YXBwLWZpbHRlci1idWlsZGVyXG4gICAgICAqbmdJZj1cIiFwYWdlSW5mby5oaWRlQWR2YW5jZWRGaWx0ZXJcIlxuICAgICAgW3BhZ2VJbmZvXT1cInBhZ2VJbmZvXCJcbiAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgW2ZpbHRlckZpZWxkc109XCJmaWx0ZXJGaWVsZHNcIlxuICAgICAgW3BlbmRpbmdGaWx0ZXJzXT1cInBlbmRpbmdGaWx0ZXJzXCJcbiAgICAgIFtzaG93RXhwb3J0QnV0dG9uXT1cIiFwYWdlSW5mby5oaWRlRXh0cmFjdEJ1dHRvblwiXG4gICAgICBbZXhwb3J0RGlzYWJsZWRdPVwibm9EYXRhRm91bmQgfHwgIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aFwiXG4gICAgICAoZmlsdGVySW5mb3JtYXRpb24pPVwic3RvcmVQZW5kaW5nRmlsdGVycygkZXZlbnQpXCJcbiAgICAgIChpc0VtcHR5KT1cImhhbmRsZUZpbHRlckVtcHR5KCRldmVudClcIlxuICAgICAgKGFwcGx5RmlsdGVyKT1cImFwcGx5UGVuZGluZ0ZpbHRlcnMoKVwiXG4gICAgICAoc29ydEJ5Q2xpY2tlZCk9XCJoYW5kbGVTb3J0Q2xpY2soJGV2ZW50KVwiXG4gICAgICAoZXhwb3J0Q2xpY2tlZCk9XCJleHRyYWN0UmVwb3J0KCRldmVudClcIj5cbiAgICA8L2FwcC1maWx0ZXItYnVpbGRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJidXR0b24tZ3JvdXBcIiAqbmdJZj1cIiFwYWdlSW5mby5oaWRlRXh0cmFjdEJ1dHRvblwiPlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFwYWdlSW5mby5oaWRlRXh0cmFjdEJ1dHRvblwiXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImV4cG9ydE1lbnVcIlxuICAgICAgICBjbGFzcz1cImJ0bi1leHBvcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibm9EYXRhRm91bmQgfHwgIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2V4cG9ydCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXRleHRcIj5cbiAgICAgICAgICA8bWF0LWljb24+ZmlsZV9leHBvcnQ8L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdleHBvcnQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFycm93LWljb25cIj5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPG1hdC1tZW51ICNleHBvcnRNZW51PVwibWF0TWVudVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4dHJhY3RSZXBvcnQoJ3BkZicpXCI+UERGPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXh0cmFjdFJlcG9ydCgneGxzeCcpXCI+RXhjZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHRyYWN0UmVwb3J0KCdjc3YnKVwiPkNTVjwvYnV0dG9uPlxuICAgICAgPC9tYXQtbWVudT5cblxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuXG4gIDxkaXYgY2xhc3M9XCJmbGV4LXJvdyBmbGV4LTEwMCBiYXNlVGFibGVfX2RldGFpbHNDb2x1bW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXJvdyBmbGV4LTEwMCBtYWluVGFibGVcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGFibGUtY29udGFpbmVyXCJcbiAgICAgICAgICByb2xlPVwidGFibGVcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICBwYWdlSW5mby5sYWJlbHNTZWN0aW9uICYmICFwYWdlSW5mby5oaWRlVGl0bGVcbiAgICAgICAgICAgICAgPyAocGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcubGlzdF90aXRsZScgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiBbYXR0ci5kYXRhLXNvcnRdPVwic29ydFN0YXRlXCIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uUHJvcCBvZiB2aXNpYmxlQ29sdW1uc0FycmF5OyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJsZS1oZWFkZXItY2VsbFwiXG4gICAgICAgICAgICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0Q29sdW1uQXJpYVNvcnQoY29sdW1uUHJvcClcIlxuICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmVuYWJsZVNvcnRpbmcgPyAwIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5zb3J0YWJsZV09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmVuYWJsZVNvcnRpbmdcIlxuICAgICAgICAgICAgICAgICBbY2xhc3MuZmlyc3QtY2VsbF09XCJpID09PSAwXCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmxhc3QtY2VsbF09XCJpID09PSB2aXNpYmxlQ29sdW1uc0FycmF5Lmxlbmd0aCAtIDFcIlxuICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9ucy1jZWxsXT1cImkgPT09IHZpc2libGVDb2x1bW5zQXJyYXkubGVuZ3RoIC0gMSAmJiBjb2x1bW5Qcm9wID09PSAnYWN0aW9ucydcIlxuICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLXdpZHRoXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGhcIlxuICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoID8geyd3aWR0aCc6IGdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggKyAnJScsICdmbGV4LWJhc2lzJzogZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCArICclJ30gOiB7fVwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LmVuYWJsZVNvcnRpbmcgJiYgaGFuZGxlU29ydENsaWNrKGNvbHVtblByb3ApXCJcbiAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Tb3J0SGVhZGVyS2V5ZG93bigkZXZlbnQsIGNvbHVtblByb3ApXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFibGUtaGVhZGVyLWxhYmVsXCI+e3sgbGFiZWxLZXkoZ2V0Q29sdW1uKGNvbHVtblByb3ApKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5lbmFibGVTb3J0aW5nXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJnZXRTb3J0RGlyZWN0aW9uKGNvbHVtblByb3ApID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtaWNvbiBzb3J0LWFzY1wiPmFycm93X2Ryb3BfdXA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZ2V0U29ydERpcmVjdGlvbihjb2x1bW5Qcm9wKSA9PT0gJ2Rlc2MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydC1pY29uIHNvcnQtZGVzY1wiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFTb3VyY2UuZGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLXJvd1wiXG4gICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIid0YWJsZS1yb3ctJyArIChyb3c/LmlkIHx8IHJvdz8ua2V5IHx8ICcnKVwiXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAndGFibGUtcm93LS1oaWdobGlnaHQnOiBzZWxlY3RlZFJvd0luZGV4ID09IHJvdy5pZCB8fCAocGFnZUluZm8uZ3JvdXBCeVByb3BlcnR5ICYmIHBhZ2VJbmZvLmdyb3VwQnlWYWx1ZT8uaW5jbHVkZXMocm93W3BhZ2VJbmZvLmdyb3VwQnlQcm9wZXJ0eV0pKSxcbiAgICAgICAgICAgICAgICAgICAndGFibGUtcm93LS1kYXJrLWhpZ2hsaWdodCc6IGlzRGFya0hpZ2hsaWdodChyb3cpXG4gICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAoYXV4Y2xpY2spPVwib3Blbk5ld1RhYihyb3cpXCJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25TZWxlY3RJdGVtKHJvdylcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uUHJvcCBvZiB2aXNpYmxlQ29sdW1uc0FycmF5OyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlyc3QtY2VsbF09XCJpID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MubGFzdC1jZWxsXT1cImkgPT09IHZpc2libGVDb2x1bW5zQXJyYXkubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbnMtY2VsbF09XCJpID09PSB2aXNpYmxlQ29sdW1uc0FycmF5Lmxlbmd0aCAtIDEgJiYgY29sdW1uUHJvcCA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLXdpZHRoXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldENvbHVtbihjb2x1bW5Qcm9wKT8ud2lkdGggPyB7J3dpZHRoJzogZ2V0Q29sdW1uKGNvbHVtblByb3ApPy53aWR0aCArICclJywgJ2ZsZXgtYmFzaXMnOiBnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoICsgJyUnfSA6IHt9XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy50eXBlXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInd29ya2Zsb3dTdGF0dXMnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ3ZlN0YXR1cyB7eyBnZXRTdGF0dXNEZXNjcmlwdGlvbihyb3cpfX1cIiBbYXR0ci5pZF09XCIndGFibGUtYnRuLXdmLScrY29sdW1uUHJvcCsnLScrKHJvdy5pZCB8fCByb3cua2V5IHx8ICcnKVwiIFthdHRyLnRhYmluZGV4XT1cIi0xXCI+e3sgZ2V0U3RhdHVzRGVzY3JpcHRpb24ocm93KSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidoeXBlci10ZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvdWxkUmVuZGVyQXNIeXBlckxpbmsocm93KTsgZWxzZSBwbGFpbkh5cGVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwgaHlwZXItbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoeXBlckxpbmtDbGlja2VkKGNvbHVtblByb3AsIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWluSHlwZXJUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsXCI+e3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG91bGRTaG93QnV0dG9uKHJvdylcIiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByaW1hcnlcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBhY3Rpb25CdXR0b25DbGlja2VkKGNvbHVtblByb3AsIHJvdylcIiBbYXR0ci5pZF09XCIndGFibGUtYnRuLWFjdGlvbi0nK2NvbHVtblByb3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBsYWJlbEtleShnZXRDb2x1bW4oY29sdW1uUHJvcCkpICsgJ190aXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgJ21haW5UYWJsZV9fdGRfX2ljb24tZ3JlZW4nOiByb3dbY29sdW1uUHJvcF0gPT09ICdwYXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAnbWFpblRhYmxlX190ZF9faWNvbi1vcmFuZ2UnOiByb3dbY29sdW1uUHJvcF0gPT09ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAnbWFpblRhYmxlX190ZF9faWNvbi1yZWQnOiByb3dbY29sdW1uUHJvcF0gPT09ICdlcnJvcidcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldEljb25BcmlhTGFiZWxLZXkocm93W2NvbHVtblByb3BdKSB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldEljb24ocm93W2NvbHVtblByb3BdKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cInByaW1hcnlcIiBbdGFiSW5kZXhdPVwiLTFcIiBbY2hlY2tlZF09XCJyb3dbY29sdW1uUHJvcF1cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2FjdGlvbkNoZWNrZWRDbGlja2VkKGNvbHVtblByb3Ascm93KVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGF0ZVR5cGUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdGF0ZVR5cGUge3sgcm93W2NvbHVtblByb3BdfX1cIiBbYXR0ci5pZF09XCIndGFibGUtYnRuLXN0YXRlLScrY29sdW1uUHJvcFwiIFthdHRyLnRhYmluZGV4XT1cIi0xXCI+e3sgbGFiZWxLZXlCeVZhbHVlKGdldENvbHVtbihjb2x1bW5Qcm9wKSwgcm93KSB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IGRhdGU6J2RkL01NL3l5eXknOidVVEMnIH19XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Nyb3BwZWRUZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRDcm9wcGVkVGV4dChleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCksIHJvd1tnZXRDb2x1bW4oY29sdW1uUHJvcCk/LndpZHRoXSkgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZG93bmxvYWQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2ljb24tYmx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidCQVNFX1RBQkxFLmRvd25sb2FkQWN0aW9uJyB8IHRyYW5zbGF0ZVwiPnN5c3RlbV91cGRhdGVfYWx0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb25PZmYnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInJvd1tjb2x1bW5Qcm9wXSA9PT0gbnVsbFwiIGNsYXNzPVwibWFpblRhYmxlX190ZF9faWNvbi1kYXJrb3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0T25PZmZGbGFnQXJpYUxhYmVsS2V5KG51bGwpIHwgdHJhbnNsYXRlXCI+ZmxhZzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInJvd1tjb2x1bW5Qcm9wXSA9PT0gZmFsc2VcIiBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2ljb24tcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0T25PZmZGbGFnQXJpYUxhYmVsS2V5KGZhbHNlKSB8IHRyYW5zbGF0ZVwiPmZsYWc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IHRydWVcIiBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2ljb24tZ3JlZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRPbk9mZkZsYWdBcmlhTGFiZWxLZXkodHJ1ZSkgfCB0cmFuc2xhdGVcIj5mbGFnPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3RhdHVzJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvd1tjb2x1bW5Qcm9wXSA9PT0gbnVsbCB8fCByb3dbY29sdW1uUHJvcF0gPT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArICcuJyArIGdldENvbHVtbihjb2x1bW5Qcm9wKT8ubGFiZWwgKyAnSW5BY3RpdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uUHJvcF0gPT09IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwYWdlSW5mby5sYWJlbHNTZWN0aW9uICsgJy4nICsgZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5sYWJlbCArICdBY3RpdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW5mbydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidCQVNFX1RBQkxFLnJvd0RldGFpbHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2VtaXRFdmVudChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCIndGFibGUtYnRuLWluZm8tJytyb3cuaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIiduZXRBbW91bnQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluVGFibGVfX3RkX19jdXJyZW5jeVwiIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7XCI+e3sgcm93W2dldENvbHVtbihjb2x1bW5Qcm9wKT8uY3VycmVuY3ldIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpblRhYmxlX190ZF9fcHJvcGVydHlcIiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXJnaW4tbGVmdDo2cHg7IG1hcmdpbi1yaWdodDo2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtblByb3ApIHwgY3VycmVuY3k6Jyc6JycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xvY2FsRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSB8IGRhdGUgOiBleHRyYWN0Rm9ybWF0KGdldENvbHVtbihjb2x1bW5Qcm9wKSk6J1VUQycgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYmlnZGVjaW1hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPjxzdXAgY2xhc3M9XCJtYWluVGFibGVfX3RkX19jdXJyZW5jeVwiPnt7cm93W2dldENvbHVtbihjb2x1bW5Qcm9wKT8uY3VycmVuY3ldfX08L3N1cD48L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfCBudW1iZXIgOiAoZ2V0Q29sdW1uKGNvbHVtblByb3ApPy5kaWdpdEluZm8gfHwgJzEuMy01JykgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGlzdEFjdGlvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1idXR0b24tYWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uc0FjdGlvbl09XCJnZXRDb2x1bW4oY29sdW1uUHJvcCk/LnZpZXdUeXBlID09PSAnYnV0dG9uc0FjdGlvbidcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsaXN0QWN0aW9uXT1cImxpc3RBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25zXT1cImxpc3RBY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGlja2VkQnV0dG9uKT1cImFjdGlvbkxpc3RDbGlja2VkKCRldmVudCxyb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWJ1dHRvbi1hY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsaXN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJtYWluVGFibGVfX3RkX19saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldExpc3RJdGVtcyhyb3csIGNvbHVtblByb3ApXCI+e3sgaXRlbSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uKGNvbHVtblByb3ApPy50cmFuc2xhdGU7IGVsc2Ugbm9UcmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZW1pdFJvdXRlUGFnZShyb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBwYWdlSW5mby5sYWJlbHNTZWN0aW9uICsgXCIuXCIgKyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uUHJvcCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vVHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBlbWl0Um91dGVQYWdlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVyVGV4dF09J2V4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW5Qcm9wKSc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTW9iaWxlIENhcmQgVmlldyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZHMtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhU291cmNlLmRhdGE7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICBjbGFzcz1cIm1vYmlsZS1jYXJkXCJcbiAgICAgICAgICAgICBbYXR0ci5pZF09XCInbW9iaWxlLWNhcmQtJyArIChyb3c/LmlkIHx8IHJvdz8ua2V5IHx8ICcnKVwiXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgJ21vYmlsZS1jYXJkLS1oaWdobGlnaHQnOiBzZWxlY3RlZFJvd0luZGV4ID09IHJvdy5pZCB8fCAocGFnZUluZm8uZ3JvdXBCeVByb3BlcnR5ICYmIHBhZ2VJbmZvLmdyb3VwQnlWYWx1ZT8uaW5jbHVkZXMocm93W3BhZ2VJbmZvLmdyb3VwQnlQcm9wZXJ0eV0pKSxcbiAgICAgICAgICAgICAgICdtb2JpbGUtY2FyZC0tZGFyay1oaWdobGlnaHQnOiBpc0RhcmtIaWdobGlnaHQocm93KVxuICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgIChhdXhjbGljayk9XCJvcGVuTmV3VGFiKHJvdylcIlxuICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uU2VsZWN0SXRlbShyb3cpXCI+XG5cbiAgICAgICAgICA8IS0tIE1vYmlsZSBDYXJkIEhlYWRlcjogSUQvTmFtZSBhbmQgU3RhdHVzIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9faGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX2hlYWRlci1pZFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1vYmlsZS1jYXJkX19pZC10ZXh0XCI+e3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGdldE1vYmlsZUNhcmRJZENvbHVtbigpPy5wcm9wZXJ0eSB8fCAnaWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19oZWFkZXItc3RhdHVzXCIgKm5nSWY9XCJnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKClcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3RhdGVUeXBlIHt7IHJvd1tnZXRNb2JpbGVDYXJkU3RhdHVzQ29sdW1uKCk/LnByb3BlcnR5XX19XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInbW9iaWxlLWJ0bi1zdGF0ZS0nK2dldE1vYmlsZUNhcmRTdGF0dXNDb2x1bW4oKT8ucHJvcGVydHlcIj5cbiAgICAgICAgICAgICAgICB7eyBsYWJlbEtleUJ5VmFsdWUoZ2V0TW9iaWxlQ2FyZFN0YXR1c0NvbHVtbigpLCByb3cpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRGl2aWRlciAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX2RpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICAgIDwhLS0gTW9iaWxlIENhcmQgQm9keTogT3RoZXIgY29sdW1ucyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmRfX2JvZHlcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBnZXRNb2JpbGVDYXJkQ29sdW1ucygpXCIgY2xhc3M9XCJtb2JpbGUtY2FyZF9fcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY2FyZF9fcm93LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxLZXkoY29sdW1uKSB8IHRyYW5zbGF0ZSB9fSA6PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19yb3ctdmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXRlVHlwZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3RhdGVUeXBlIHt7IHJvd1tjb2x1bW4ucHJvcGVydHldfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIidtb2JpbGUtYnRuLXN0YXRlLScrY29sdW1uLnByb3BlcnR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxLZXlCeVZhbHVlKGNvbHVtbiwgcm93KSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uLnByb3BlcnR5KSB8IGRhdGU6J2RkL01NL3l5eXknOidVVEMnIH19XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25ldEFtb3VudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtb2JpbGUtY2FyZF9fYW1vdW50LWN1cnJlbmN5XCI+e3sgcm93W2NvbHVtbi5jdXJyZW5jeV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibW9iaWxlLWNhcmRfX2Ftb3VudC12YWx1ZVwiPnt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgY3VycmVuY3k6Jyc6JycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xvY2FsRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGV4dHJhY3RGaWVsZE5hbWUocm93LCBjb2x1bW4ucHJvcGVydHkpIHwgZGF0ZSA6IGV4dHJhY3RGb3JtYXQoY29sdW1uKTonVVRDJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidiaWdkZWNpbWFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+PHN1cCBjbGFzcz1cIm1haW5UYWJsZV9fdGRfX2N1cnJlbmN5XCI+e3tyb3dbY29sdW1uLmN1cnJlbmN5XX19PC9zdXA+PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAge3sgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSkgfCBudW1iZXIgOiAoY29sdW1uLmRpZ2l0SW5mbyB8fCAnMS4zLTUnKSB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsaXN0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJtYWluVGFibGVfX3RkX19saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldExpc3RJdGVtcyhyb3csIGNvbHVtbi5wcm9wZXJ0eSlcIj57eyBpdGVtIH19PC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udHJhbnNsYXRlOyBlbHNlIG5vVHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcGFnZUluZm8ubGFiZWxzU2VjdGlvbiArIFwiLlwiICsgZXh0cmFjdEZpZWxkTmFtZShyb3csIGNvbHVtbi5wcm9wZXJ0eSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vVHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lclRleHRdPSdleHRyYWN0RmllbGROYW1lKHJvdywgY29sdW1uLnByb3BlcnR5KSc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIE1vYmlsZSBDYXJkIEFjdGlvbnMgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkX19hY3Rpb25zXCIgKm5nSWY9XCJsaXN0QWN0aW9uICYmIGxpc3RBY3Rpb24ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGFwcC1idXR0b24tYWN0aW9uc1xuICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgIFtidXR0b25zQWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbbGlzdEFjdGlvbl09XCJsaXN0QWN0aW9uXCJcbiAgICAgICAgICAgICAgW2FjdGlvbnNdPVwibGlzdEFjdGlvblwiXG4gICAgICAgICAgICAgIChjbGlja2VkQnV0dG9uKT1cImFjdGlvbkxpc3RDbGlja2VkKCRldmVudCxyb3cpXCI+XG4gICAgICAgICAgICA8L2FwcC1idXR0b24tYWN0aW9ucz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YUZvdW5kXCIgY2xhc3M9XCJkYXRhTm90Rm91bmQgZmxleC1jb2x1bW5cIj5cbiAgICAgICAgPGltZyAqbmdJZj1cImdldERpc3BsYXlTdmdQYXRoKClcIiBbc3JjXT1cImdldERpc3BsYXlTdmdQYXRoKClcIiBjbGFzcz1cImRhdGFOb3RGb3VuZF9faWNvblwiIGFsdD1cIk5vIGRhdGEgZm91bmRcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGFOb3RGb3VuZF9fdGl0bGVcIj57eyBnZXREaXNwbGF5VGl0bGUoKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGFOb3RGb3VuZF9fc3VidGl0bGVcIj57eyBnZXREaXNwbGF5U3VidGl0bGUoKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cblxuICAgICAgPGRpdiAgKm5nSWY9XCIoZGF0YVNvdXJjZS5kYXRhPy5sZW5ndGggPiAwIHx8IGN1c3RvbWl6ZWREYXRhKSAmJiAhcGFnZUluZm8uaGlkZVBhZ2luYXRpb25cIiBjbGFzcz1cIm1haW4tcGFnaW5hdGlvbiBmbGV4LXJvd1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlUGFnaW5hdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtbiBmbGV4LTEwMFwiPlxuICAgICAgICAgICAgPGFwcC1wYWdpbmF0b3JcbiAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cInBhZ2VJbmRleFwiXG4gICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsRWxlbWVudHNcIlxuICAgICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMjUsIDUwXVwiXG4gICAgICAgICAgICAgIFttb2JpbGVMb2FkTW9yZUluY3JlbWVudF09XCJtb2JpbGVMb2FkTW9yZUluY3JlbWVudFwiXG4gICAgICAgICAgICAgIFtkaXNwbGF5ZWRJdGVtc109XCJtb2JpbGVEaXNwbGF5ZWRJdGVtcyB8fCBkYXRhU291cmNlLmRhdGEubGVuZ3RoXCJcbiAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uTG9hZE1vcmUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9hcHAtcGFnaW5hdG9yPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19