@provoly/dashboard 0.21.3 → 0.21.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/assets/svgs/layers.svg +3 -2
  2. package/assets/svgs/legend.svg +14 -3
  3. package/dataset/style/_o-pry-dataset.scss +6 -9
  4. package/esm2022/dataset/components/dataset.component.mjs +3 -3
  5. package/esm2022/dataset/style/css.component.mjs +2 -2
  6. package/esm2022/lib/core/auth/geoAuth.service.mjs +29 -5
  7. package/esm2022/lib/core/components/select/select.component.mjs +13 -3
  8. package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +14 -6
  9. package/esm2022/lib/core/components/snackbar/snackbar.service.mjs +8 -3
  10. package/esm2022/lib/core/i18n/en.translations.mjs +9 -2
  11. package/esm2022/lib/core/i18n/fr.translations.mjs +9 -3
  12. package/esm2022/lib/core/model/display-options.interface.mjs +24 -7
  13. package/esm2022/lib/core/model/manifest.interface.mjs +1 -1
  14. package/esm2022/lib/core/store/field/field.interface.mjs +2 -1
  15. package/esm2022/lib/core/store/item/item.effects.mjs +2 -2
  16. package/esm2022/lib/core/store/search/search.reducer.mjs +2 -2
  17. package/esm2022/lib/dashboard/components/dashboard.component.mjs +3 -3
  18. package/esm2022/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.mjs +12 -3
  19. package/esm2022/lib/dashboard/dashboard.module.mjs +5 -4
  20. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -1
  21. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +14 -6
  22. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +8 -2
  23. package/esm2022/lib/dashboard/store/manifest.service.mjs +4 -3
  24. package/esm2022/notification/components/notification/content/notification-content.component.mjs +12 -8
  25. package/esm2022/notification/components/notification/notification.component.mjs +2 -1
  26. package/esm2022/notification/style/css.component.mjs +2 -2
  27. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
  28. package/esm2022/presentation/components/presentation.component.mjs +17 -9
  29. package/esm2022/presentation/i18n/en.translations.mjs +2 -1
  30. package/esm2022/presentation/i18n/fr.translations.mjs +3 -2
  31. package/esm2022/presentation/style/css.component.mjs +2 -2
  32. package/esm2022/restitution/components/restitution/restitution.component.mjs +5 -5
  33. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +3 -3
  34. package/esm2022/restitution/style/css.component.mjs +2 -2
  35. package/esm2022/toolbox/components/delete/delete.component.mjs +29 -0
  36. package/esm2022/toolbox/components/save-view/save-view.component.mjs +12 -6
  37. package/esm2022/toolbox/components/share/share.component.mjs +72 -0
  38. package/esm2022/toolbox/components/switch-to-edit-content/switch-to-edit-content.component.mjs +26 -0
  39. package/esm2022/toolbox/components/toolbox.component.mjs +3 -3
  40. package/esm2022/toolbox/public-api.mjs +4 -1
  41. package/esm2022/toolbox/toolbox.model.mjs +22 -2
  42. package/esm2022/toolbox/toolbox.module.mjs +16 -4
  43. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +2 -2
  44. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +27 -13
  45. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +61 -22
  46. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +5 -2
  47. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +5 -2
  48. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +3 -2
  49. package/esm2022/widgets/widget-map/style/css.component.mjs +2 -2
  50. package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +16 -7
  51. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +3 -2
  52. package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +2 -2
  53. package/fesm2022/provoly-dashboard-dataset.mjs +4 -4
  54. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  55. package/fesm2022/provoly-dashboard-notification.mjs +14 -9
  56. package/fesm2022/provoly-dashboard-notification.mjs.map +1 -1
  57. package/fesm2022/provoly-dashboard-presentation.mjs +23 -13
  58. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  59. package/fesm2022/provoly-dashboard-restitution.mjs +8 -8
  60. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  61. package/fesm2022/provoly-dashboard-toolbox.mjs +145 -12
  62. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  63. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  65. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +114 -47
  66. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +1 -1
  68. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  69. package/fesm2022/provoly-dashboard.mjs +138 -39
  70. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  71. package/lib/core/auth/geoAuth.service.d.ts +5 -1
  72. package/lib/core/components/select/select.component.d.ts +2 -0
  73. package/lib/core/components/share/group-share/group-share.component.d.ts +2 -2
  74. package/lib/core/components/snackbar/snackbar.service.d.ts +2 -1
  75. package/lib/core/i18n/en.translations.d.ts +7 -0
  76. package/lib/core/i18n/fr.translations.d.ts +7 -1
  77. package/lib/core/model/display-options.interface.d.ts +3 -0
  78. package/lib/core/model/manifest.interface.d.ts +3 -1
  79. package/lib/core/store/field/field.interface.d.ts +1 -0
  80. package/lib/dashboard/components/widgets/widget-instanciator/widget-instanciator.component.d.ts +1 -0
  81. package/lib/dashboard/store/dashboard.actions.d.ts +3 -0
  82. package/lib/dashboard/store/dashboard.effects.d.ts +1 -1
  83. package/lib/dashboard/store/manifest.service.d.ts +2 -1
  84. package/notification/components/notification/content/notification-content.component.d.ts +4 -2
  85. package/notification/style/_m-notifications.scss +6 -7
  86. package/package.json +7 -7
  87. package/presentation/components/presentation.component.d.ts +4 -1
  88. package/presentation/i18n/en.translations.d.ts +1 -0
  89. package/presentation/i18n/fr.translations.d.ts +1 -0
  90. package/presentation/style/_o-pry-presentation.scss +0 -16
  91. package/restitution/components/restitution/restitution.component.d.ts +1 -1
  92. package/restitution/style/_o-restitution.scss +12 -42
  93. package/styles/components/_a-page-loader.scss +1 -1
  94. package/styles/components/_o-draggable-menu.scss +8 -0
  95. package/styles/components/_o-pry-stepper.scss +9 -10
  96. package/styles/components/_o-widget.scss +7 -3
  97. package/styles/layout/_o-manifest-layout.scss +20 -0
  98. package/styles-theme/components-theme/_o-widget.theme.scss +1 -1
  99. package/toolbox/components/delete/delete.component.d.ts +19 -0
  100. package/toolbox/components/save-view/save-view.component.d.ts +3 -2
  101. package/toolbox/components/share/share.component.d.ts +26 -0
  102. package/toolbox/components/switch-to-edit-content/switch-to-edit-content.component.d.ts +15 -0
  103. package/toolbox/public-api.d.ts +3 -0
  104. package/toolbox/toolbox.module.d.ts +12 -9
  105. package/widgets/widget-chart/component/widget-chart.component.d.ts +1 -1
  106. package/widgets/widget-map/component/widget-map-layer.service.d.ts +4 -3
  107. package/widgets/widget-map/component/widget-map.component.d.ts +8 -6
  108. package/widgets/widget-map/i18n/en.translations.d.ts +3 -0
  109. package/widgets/widget-map/i18n/fr.translations.d.ts +3 -0
  110. package/widgets/widget-map/style/_o-layer-legend.scss +43 -54
  111. package/widgets/widget-map/utils/cql-utils.class.d.ts +2 -2
  112. package/widgets/widget-map/utils/widget-map.utils.d.ts +2 -0
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { createEffect, ofType } from '@ngrx/effects';
3
3
  import { combineLatest, merge, of, startWith, throwError } from 'rxjs';
4
- import { catchError, debounceTime, delay, filter, map, mergeMap, tap, withLatestFrom } from 'rxjs/operators';
4
+ import { catchError, debounceTime, filter, map, mergeMap, tap, withLatestFrom } from 'rxjs/operators';
5
5
  import { PryDialogConfirmComponent } from '../../core/components/overlay/dialog-confirm.component';
6
6
  import { DashboardGridLayout } from '../../core/model/manifest.interface';
7
7
  import { SearchActions } from '../../core/store/search/search.actions';
@@ -10,6 +10,7 @@ import { WidgetPlacementUtils } from '../components/widgets/widget-placement/wid
10
10
  import { ResultsetUtils } from '../resultset-utils';
11
11
  import { DashboardActions, ViewMode } from './dashboard.actions';
12
12
  import { DashboardSelectors } from './dashboard.selectors';
13
+ import { PryVisibilityType } from '../../core/components/share/share.model';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "./dashboard-init.service";
15
16
  import * as i2 from "@ngrx/effects";
@@ -77,7 +78,6 @@ export class DashboardEffects {
77
78
  this.fetchStaticManifest$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.fetchStaticManifest), withLatestFrom(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.selectedItemIds)), filter(([action, rank]) => rank === 0), mergeMap(([action, rank]) => this.manifestService
78
79
  .get(action.id)
79
80
  .pipe(map((staticManifest) => DashboardActions.updateStaticManifest({ staticManifest }))))));
80
- this.fetchStaticManifestLoading$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.fetchStaticManifest), delay(5000), map((action) => DashboardActions.endLoading())));
81
81
  this.loadAndActivateManifest$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.loadAndActivateManifest, DashboardActions.loadManifest), withLatestFrom(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.selectedItemIds)), filter(([action, rank]) => rank === 0), mergeMap(([action, rank, selectedIds]) => this.manifestService.get(action.id).pipe(mergeMap((manifest) => {
82
82
  return action.type === DashboardActions.loadAndActivateManifest.type
83
83
  ? [
@@ -99,6 +99,7 @@ export class DashboardEffects {
99
99
  this.router.navigateByUrl(manifest.route);
100
100
  }
101
101
  })), { dispatch: false });
102
+ this.endLoadingAfterFollowingManifestRoute$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.followManifestRoute), map((action) => DashboardActions.endLoading())));
102
103
  this.requestManifestRoute$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.requestAllRoutes), map(() => DashboardActions.updateRouteManifest({ route: this.router.url }))));
103
104
  this.assertResultSets$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.assertResultSets, DashboardActions.dispatchFilters, DashboardActions.clearAllFilterValues), withLatestFrom(this.store.select(DashboardSelectors.globalManifest), this.store.select(DashboardSelectors.resultSets), this.store.select(DashboardSelectors.resultSetsParams), this.store.select(DashboardSelectors.quickOrder)), mergeMap(([action, manifest, resultSets, resultSetsParams, quickOrder]) => {
104
105
  // @ts-ignore
@@ -116,7 +117,14 @@ export class DashboardEffects {
116
117
  .reduce((p, c) => [...p, ...c], [])
117
118
  .map((widManifest) => this.widgetFactoryService.datasourcesToAutoLoad(widManifest))
118
119
  .flat()
119
- .reduce((p, c) => ({ ...p, [c.datasetId]: { ...p[c.datasetId], ...c } }), {}))
120
+ .reduce((p, c) => ({
121
+ ...p,
122
+ [c.datasetId]: {
123
+ ...p[c.datasetId],
124
+ ...c,
125
+ excludeGeo: p[c.datasetId]?.excludeGeo === false ? p[c.datasetId].excludeGeo : c.excludeGeo
126
+ }
127
+ }), {}))
120
128
  .filter((resultSet) => !!resultSet.datasetId &&
121
129
  resultSet.datasetId !== '' &&
122
130
  (!resultSets[resultSet.datasetId] ||
@@ -162,7 +170,7 @@ export class DashboardEffects {
162
170
  });
163
171
  })), { dispatch: false });
164
172
  this.saveManifest$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.saveManifest), withLatestFrom(this.store.select(DashboardSelectors.globalManifest)), mergeMap(([action, currentManifest]) => this.manifestService
165
- .save(action.name, action.manifest ?? currentManifest, action.id, action.description, action.image, action.cover, action.metadata, action.groups)
173
+ .save(action.name, action.manifest ?? currentManifest, action.id, action.description, action.image, action.cover, action.metadata, action.groups, action.visibility ?? { type: PryVisibilityType.PRIVATE })
166
174
  .pipe(tap(() => this.snackBar.open({
167
175
  message: this.translateService.instant('@pry.toolbox.manifest.saved', { viewId: action.name }),
168
176
  type: 'success'
@@ -173,7 +181,7 @@ export class DashboardEffects {
173
181
  }),
174
182
  type: 'error'
175
183
  });
176
- return throwError(error);
184
+ return throwError(() => error);
177
185
  }))), mergeMap((manifest) => [
178
186
  DashboardActions.fetchManifestsList(),
179
187
  DashboardActions.setInitialPresentation({ initial: manifest })
@@ -385,4 +393,4 @@ export class DashboardEffects {
385
393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DashboardEffects, decorators: [{
386
394
  type: Injectable
387
395
  }], ctorParameters: function () { return [{ type: i1.DashboardInitService }, { type: i2.Actions }, { type: i3.Store }, { type: i4.ManifestService }, { type: i5.ItemService }, { type: i6.PryTitleService }, { type: i7.PryI18nService }, { type: i8.PrySnackbarService }, { type: i9.Router }, { type: i10.RefreshService }, { type: i11.ToolboxManifestService }, { type: i12.BusService }, { type: i13.SearchService }, { type: i14.PryDialogService }, { type: i15.WmsService }, { type: i16.WidgetFactoryService }]; } });
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmVmZmVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL3N0b3JlL2Rhc2hib2FyZC5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQ0wseUJBQXlCLEVBRTFCLE1BQU0sd0RBQXdELENBQUM7QUFJaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFrQyxNQUFNLHFDQUFxQyxDQUFDO0FBSTFHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUkxRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRM0QsTUFBTSxPQUFPLGdCQUFnQjtJQXl1QjNCLFlBQ1Usb0JBQTBDLEVBQzFDLFFBQWlCLEVBQ2pCLEtBQWlCLEVBQ2pCLGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLFlBQTZCLEVBQzdCLGdCQUFnQyxFQUNoQyxRQUE0QixFQUM1QixNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsc0JBQThDLEVBQzlDLFVBQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLFNBQTJCLEVBQzNCLFVBQXNCLEVBQ3RCLG9CQUEwQztRQWYxQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQzdCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0I7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBeHZCcEQsVUFBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFDN0IsY0FBYyxDQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsRUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUNyRCxFQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUM5RSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQ3hGLGdCQUFnQixDQUFDLDZCQUE2QixDQUFDO1lBQzdDLE9BQU87WUFDUCxRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxRQUFRO2dCQUNYLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTzthQUMxQjtZQUNELFVBQVU7WUFDVixXQUFXO1lBQ1gsT0FBTyxFQUFFLElBQUk7WUFDYixZQUFZO1lBQ1osT0FBTztTQUNSLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FBQztRQUVGLFdBQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQzlCLGNBQWMsQ0FDWixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxFQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FDdEQsRUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3pHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDckQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNyQztZQUVELE9BQU8sZ0JBQWdCLENBQUMsOEJBQThCLENBQUM7Z0JBQ3JELE9BQU8sRUFBRSxjQUFjO2dCQUN2QixRQUFRLEVBQUU7b0JBQ1IsR0FBRyxRQUFRO29CQUNYLE9BQU8sRUFBRSxhQUFhO2lCQUN2QjtnQkFDRCxXQUFXO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUFDO1FBRUYseUJBQW9CLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEVBQzVDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUNqSCxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUN0QyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQzFCLElBQUksQ0FBQyxlQUFlO2FBQ2pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2FBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDNUYsQ0FDRixDQUNGLENBQUM7UUFFRixnQ0FBMkIsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsRUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUNYLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDL0MsQ0FDRixDQUFDO1FBRUYsNkJBQXdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUMvRSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsRUFDakgsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFDdEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLElBQUk7Z0JBQ2xFLENBQUMsQ0FBQztvQkFDRSxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDM0YsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUU7aUJBQ3ZDO2dCQUNILENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRyxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FDRixDQUFDO1FBRUYsbUJBQWMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQ3RDLGNBQWMsQ0FDWixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQ3RELEVBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FDdEMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUNyRixDQUNGLENBQ0YsQ0FBQztRQUVGLHNCQUFpQixHQUFHLFlBQVksQ0FDOUIsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN6QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUF3QixFQUFFLEVBQUU7WUFDekUsTUFBTSxPQUFPLEdBQUcsK0JBQStCLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQy9GLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0MsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztZQUM3RCxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQ0gsQ0FDRixFQUNILEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUNwQixDQUFDO1FBRUYseUJBQW9CLEdBQUcsWUFBWSxDQUNqQyxHQUFHLEVBQUUsQ0FDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLEVBQzVDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzNDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsRUFDSCxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FDcEIsQ0FBQztRQUVGLDBCQUFxQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN6QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQzVFLENBQ0YsQ0FBQztRQUVGLHNCQUFpQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FDSixnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFDakMsZ0JBQWdCLENBQUMsZUFBZSxFQUNoQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FDdEMsRUFDRCxjQUFjLENBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLEVBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN0RCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FDakQsRUFDRCxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDeEUsYUFBYTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUNkLCtCQUErQjtnQkFDL0IsTUFBTSxrQkFBa0IsR0FDdEI7b0JBQ0UsR0FBRyxJQUFJLEdBQUcsQ0FDUixRQUFRLENBQUMsT0FBTzt5QkFDYixHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7eUJBQ3ZELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7eUJBQ2xDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO3lCQUNqRixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBYyxDQUFDLENBQ2xEO2lCQUVKLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRTdELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2xDLFFBQVEsQ0FBQyxPQUFPO3FCQUNiLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztxQkFDdkQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztxQkFDbEMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQ2xGLElBQUksRUFBRTtxQkFDTixNQUFNLENBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQ2hFLEVBQW1FLENBQ3BFLENBQ0o7cUJBQ0UsTUFBTSxDQUNMLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDWixDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVM7b0JBQ3JCLFNBQVMsQ0FBQyxTQUFTLEtBQUssRUFBRTtvQkFDMUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO3dCQUMvQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDOzRCQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FDcEY7cUJBQ0EsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDakIsYUFBYSxDQUFDLGtCQUFrQixDQUFDO29CQUMvQixFQUFFLEVBQUUsU0FBUyxDQUFDLFNBQVM7b0JBQ3ZCLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVTtvQkFDaEMsSUFBSSxFQUFFLHNDQUFzQztpQkFDN0MsQ0FBQyxDQUNILENBQUM7Z0JBRUosT0FBTyxDQUFDLEdBQUcsY0FBYyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQzthQUNuRDtpQkFBTTtnQkFDTCxhQUFhO2dCQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUMxQixPQUFPO3dCQUNMLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQzs0QkFDL0IsYUFBYTs0QkFDYixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQVk7NEJBQ3ZCLFVBQVUsRUFBRSxJQUFJOzRCQUNoQixJQUFJLEVBQUUsc0NBQXNDO3lCQUM3QyxDQUFDO3FCQUNILENBQUM7aUJBQ0g7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7YUFDWDtRQUNILENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztRQUVGLHlCQUFvQixHQUFHLFlBQVksQ0FDakMsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN6QyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssc0JBQXNCLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxzQkFBc0IsQ0FBQyxFQUNoRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNuRyxFQUNILEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUNwQixDQUFDO1FBRUYscUNBQWdDLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUNKLGdCQUFnQixDQUFDLGNBQWMsRUFDL0IsZ0JBQWdCLENBQUMsd0JBQXdCLEVBQ3pDLGdCQUFnQixDQUFDLDhCQUE4QixFQUMvQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsRUFDOUMsZ0JBQWdCLENBQUMsT0FBTyxFQUN4QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLHNCQUFzQixFQUN2QyxnQkFBZ0IsQ0FBQyxTQUFTLENBQzNCLEVBQ0QsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzFELE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQ3RDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDbkIsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUU7WUFDdkMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3JDLGdCQUFnQixDQUFDLGVBQWUsRUFBRTtTQUNuQyxDQUFDLENBQ0gsQ0FDRixDQUFDO1FBRUYsaUJBQVksR0FBRyxZQUFZLENBQ3pCLEdBQUcsRUFBRSxDQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQ0osZ0JBQWdCLENBQUMsY0FBYyxFQUMvQixnQkFBZ0IsQ0FBQyw2QkFBNkIsRUFDOUMsZ0JBQWdCLENBQUMsOEJBQThCLEVBQy9DLGdCQUFnQixDQUFDLHdCQUF3QixFQUN6QyxnQkFBZ0IsQ0FBQyxlQUFlLENBQ2pDLEVBQ0QsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzFELEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FDSCxFQUNILEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUNwQixDQUFDO1FBRUYsZUFBVSxHQUFHLFlBQVksQ0FDdkIsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxFQUM3QyxjQUFjLENBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FDckQsRUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsRUFDekQsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3hDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNuQixzREFBc0Q7b0JBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDekU7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILEVBQ0gsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQ3BCLENBQUM7UUFFRixrQkFBYSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFDckMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQ3BFLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FDckMsSUFBSSxDQUFDLGVBQWU7YUFDakIsSUFBSSxDQUNILE1BQU0sQ0FBQyxJQUFJLEVBQ1gsTUFBTSxDQUFDLFFBQVEsSUFBSSxlQUFlLEVBQ2xDLE1BQU0sQ0FBQyxFQUFFLEVBQ1QsTUFBTSxDQUFDLFdBQVcsRUFDbEIsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxRQUFRLEVBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FDZDthQUNBLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlGLElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUMsQ0FDSCxFQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLGVBQWUsQ0FBQyxFQUM3QyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQ3BDLHNDQUFzQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksU0FBUyxDQUFDLEVBQ3pFO29CQUNFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtpQkFDbEIsQ0FDRjtnQkFDRCxJQUFJLEVBQUUsT0FBTzthQUNkLENBQUMsQ0FBQztZQUNILE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUNILENBQ0osRUFDRCxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFO1lBQ3JDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQy9ELENBQUMsQ0FDSCxDQUNGLENBQUM7UUFFRixtQkFBYyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUMzQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDMUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3JELFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUMxRyxDQUNGLENBQ0YsQ0FBQztRQUVGLDZCQUF3QixHQUFHLFlBQVksQ0FDckMsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUNoRCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNiLE1BQU0sSUFBSSxHQUF5QjtnQkFDakMsS0FBSyxFQUFFLHdCQUF3QjtnQkFDL0IsT0FBTyxFQUFFO29CQUNQO3dCQUNFLEVBQUUsRUFBRSxDQUFDO3dCQUNMLEtBQUssRUFBRSxnQ0FBZ0M7d0JBQ3ZDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDOUQ7b0JBQ0Q7d0JBQ0UsRUFBRSxFQUFFLENBQUM7d0JBQ0wsS0FBSyxFQUFFLDZCQUE2Qjt3QkFDcEMsS0FBSyxFQUFFLFdBQVc7cUJBQ25CO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FDSCxFQUNILEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUNwQixDQUFDO1FBRUYsb0JBQWUsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQ3ZDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUM5RixDQUNGLENBQ0YsQ0FBQztRQUVGLHlCQUFvQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUM1QyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEYsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUNwRixDQUNGLENBQUM7UUFFRixxQkFBZ0IsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUNoRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2IsT0FBTyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RDLEVBQUUsRUFBRSxNQUFNLENBQUMsZUFBZTtnQkFDMUIsU0FBUyxFQUFFLGNBQWMsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDdEYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FBQztRQUVGLGFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQ2hDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDL0csQ0FDRixDQUFDO1FBRUYsMEJBQXFCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUMvQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNiLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDO1lBQ3ZDLEVBQUUsRUFBRSxFQUFFO1lBQ04sVUFBVSxFQUFFLFFBQVE7WUFDcEIsaUJBQWlCLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRzthQUNwQjtTQUNGLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FBQztRQUVGLGdDQUEyQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxFQUNuRCxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsRUFDcEUsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUM5Qix3RkFBd0Y7WUFDeEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFekUsSUFBSSxvQkFBb0UsQ0FBQztZQUN6RSxRQUFRLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzFCLEtBQUssT0FBTztvQkFDVixvQkFBb0IsR0FBRyxDQUFDLGNBQWtDLEVBQUUsT0FBMkIsRUFBRSxFQUFFLENBQ3pGLGNBQWMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUM7b0JBQ3JGLE1BQU07Z0JBQ1IsS0FBSyxLQUFLO29CQUNSLG9CQUFvQixHQUFHLENBQUMsY0FBZ0MsRUFBRSxPQUF5QixFQUFFLEVBQUUsQ0FDckYsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ25GLE1BQU07Z0JBQ1I7b0JBQ0Usb0JBQW9CLEdBQUcsQ0FBQyxjQUFtQixFQUFFLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO2FBQ3RFO1lBRUQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUN0RCxNQUFNLENBQUMsT0FBTztpQkFDWCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLElBQUksQ0FBQztpQkFDdEQsTUFBTSxDQUNMLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxNQUFNLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxFQUFFO2dCQUMvQixDQUFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FDM0U7aUJBQ0EsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUNqRixDQUFDO1lBRUYsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFeEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksb0JBQW9CLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO29CQUM3QixPQUFPLEVBQUU7d0JBQ1AsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUU7NEJBQ2xFLEtBQUssRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQzt5QkFDM0QsQ0FBQztxQkFDSDtpQkFDRixDQUFDLENBQ0gsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0RTtZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztRQUVGLDZCQUF3QixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxFQUNoRCxjQUFjLENBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxFQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsRUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQ3RELEVBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDbkUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFtQixDQUFDO1lBRXJGLDJCQUEyQjtZQUMzQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSTtnQkFDdkUsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2FBQ3hCLENBQUM7WUFDRixNQUFNLGlCQUFpQixHQUFHO2dCQUN4QixHQUFHLFVBQVU7Z0JBQ2IsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLEdBQUcsVUFBVSxDQUFDLE9BQU87b0JBQ3JCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQjtpQkFDNUI7YUFDZ0IsQ0FBQztZQUVwQixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUNmLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO2FBQzFDO1lBRUQsSUFBSSxLQUFLLEdBQTBELElBQUksQ0FBQztZQUN4RSwyRUFBMkU7WUFDM0UsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsaUJBQWlCLENBQ3JELElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDNUUsQ0FBQyxFQUNELElBQUksQ0FDTCxDQUFDO1lBQ0YsK0JBQStCO1lBQy9CLEtBQUssTUFBTSxVQUFVLElBQUksUUFBUSxFQUFFO2dCQUNqQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUNqRyxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQy9GLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ1YsMkNBQTJDOzRCQUMzQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2lDQUN6RSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7aUNBQ2pFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQ2xDLElBQUksaUJBQWlCLEVBQUU7Z0NBQ3JCLCtCQUErQjtnQ0FDL0IsS0FBSyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQW9ELENBQUM7NkJBQzFGO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ1gsTUFBTSxZQUFZLEdBQUcsS0FBdUQsQ0FBQztnQkFDN0UsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkY7aUJBQU07Z0JBQ0wsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUVsRyw0REFBNEQ7Z0JBQzVELE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMsZ0JBQWdCLENBQy9ELGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsTUFBTSxDQUNQLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRUwsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUN4RztZQUVELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztvQkFDbkQsT0FBTyxFQUFFO3dCQUNQLElBQUksRUFBRSxTQUFTO3dCQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFOzRCQUNoRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Z0NBQ1osQ0FBQyxDQUFFLEtBQXdELENBQUMsVUFBVSxHQUFHLENBQUM7Z0NBQzFFLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU07eUJBQ2xDLENBQUM7cUJBQ0g7aUJBQ0YsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUVuQyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ2xEO2FBQ0Y7WUFFRCxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUM7UUFFRixtQkFBYyxHQUFHLFlBQVksQ0FDM0IsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFDdEMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDcEQsRUFDSCxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FDcEIsQ0FBQztRQUVGLHdCQUFtQixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFDbkMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDYixhQUFhLENBQUMsa0JBQWtCLENBQUM7WUFDL0IsRUFBRSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLElBQUksRUFBRSxzQ0FBc0M7U0FDN0MsQ0FBQyxDQUNILENBQ0YsQ0FDRixDQUFDO1FBRUYseUJBQW9CLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUMsRUFDaEgsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUNsSCxDQUNGLENBQUM7UUFFRixrQ0FBNkIsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFDaEUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDaEUsQ0FDRixDQUFDO1FBRUYsbUJBQWMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQ3RDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUNsRSxNQUFNLENBQ0osQ0FBQyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQ3pCLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEVBQ0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUM5QyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUN2RixTQUFTLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUNwRixDQUNGLENBQ0YsQ0FDRixDQUFDO1FBRUYsbUJBQWMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQ3ZDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDN0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNyQixPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztnQkFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQzNDLE1BQU0sTUFBTSxHQUFRO3dCQUNsQixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO3dCQUNyQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7d0JBQy9CLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7NkJBQ3hDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzZCQUMzRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUNsQyxDQUFDO29CQUNGLE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUM7UUFFRix3QkFBbUIsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNoQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsRUFDNUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQzNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEVBQ2hELFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNqQixJQUFJLEVBQUUsT0FBTztvQkFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxtREFBbUQsRUFBRTt3QkFDMUYsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNO3FCQUNuQixDQUFDO2lCQUNILENBQUMsQ0FBQzthQUNKO1lBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FBQztRQUVGLDRCQUF1QixHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUMvQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNsQixJQUFJLENBQUMsZUFBZTthQUNqQixjQUFjLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDO2FBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQzFELENBQ0YsQ0FDRixDQUFDO1FBRUYsc0JBQWlCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQ3pDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FDUCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO1lBQzlCLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDekIsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUNILENBQ0YsRUFDRCxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7WUFDakMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1NBQzFCLENBQUMsQ0FDSCxDQUNGLEVBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hFLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuRCxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztnQkFDOUIsUUFBUTtnQkFDUixXQUFXLEVBQUUsRUFBRTtnQkFDZixVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO2FBQ25DLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO2FBQ3JFLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDcEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQ3RCLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRTtTQUN2QyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FBQztRQW9CQSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQzsrR0E3dkJVLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFjdGlvbnMsIGNyZWF0ZUVmZmVjdCwgb2ZUeXBlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBvZiwgc3RhcnRXaXRoLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRlbGF5LCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBQcnlEaWFsb2dDb25maXJtQ29tcG9uZW50LFxuICBQcnlEaWFsb2dDb25maXJtRGF0YVxufSBmcm9tICcuLi8uLi9jb3JlL2NvbXBvbmVudHMvb3ZlcmxheS9kaWFsb2ctY29uZmlybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJ5RGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvY29tcG9uZW50cy9vdmVybGF5L2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IFByeVNuYWNrYmFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvY29tcG9uZW50cy9zbmFja2Jhci9zbmFja2Jhci5zZXJ2aWNlJztcbmltcG9ydCB7IFByeUkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRHcmlkTGF5b3V0LCBHbG9iYWxNYW5pZmVzdCwgV2lkZ2V0TWFuaWZlc3QgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL21hbmlmZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDaGFydFdpZGdldE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVsL3dpZGdldC1jaGFydC1tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWFwV2lkZ2V0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvd2lkZ2V0LW1hcC1tYW5pZmVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSXRlbVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL2l0ZW0vaXRlbS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaEFjdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL3NlYXJjaC9zZWFyY2guYWN0aW9ucyc7XG5pbXBvcnQgeyBERUZBVUxUX05BTUVEX1FVRVJZX0lELCBFWFBMT1JFX05BTUVEX1FVRVJZX0lEIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9zZWFyY2gvc2VhcmNoLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBTZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zdG9yZS9zZWFyY2gvc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9vbGJveE1hbmlmZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdG9vbGJveC90b29sYm94LW1hbmlmZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQnVzU2VydmljZSB9IGZyb20gJy4uL2FjdGlvbi1idXMvc2VydmljZS9idXMuc2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRQbGFjZW1lbnRVdGlscyB9IGZyb20gJy4uL2NvbXBvbmVudHMvd2lkZ2V0cy93aWRnZXQtcGxhY2VtZW50L3dpZGdldC1wbGFjZW1lbnQudXRpbHMnO1xuaW1wb3J0IHsgUmVzdWx0c2V0VXRpbHMgfSBmcm9tICcuLi9yZXN1bHRzZXQtdXRpbHMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkSW5pdFNlcnZpY2UgfSBmcm9tICcuL2Rhc2hib2FyZC1pbml0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9ucywgVmlld01vZGUgfSBmcm9tICcuL2Rhc2hib2FyZC5hY3Rpb25zJztcbmltcG9ydCB7IERhc2hib2FyZFNlbGVjdG9ycyB9IGZyb20gJy4vZGFzaGJvYXJkLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBNYW5pZmVzdFNlcnZpY2UgfSBmcm9tICcuL21hbmlmZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVmcmVzaFNlcnZpY2UgfSBmcm9tICcuL3JlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBQcnlUaXRsZVNlcnZpY2UgfSBmcm9tICcuL3RpdGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgV21zU2VydmljZSB9IGZyb20gJy4vd21zLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2lkZ2V0RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3dpZGdldHMvd2lkZ2V0LWluc3RhbmNpYXRvci93aWRnZXQtZmFjdG9yeS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZEVmZmVjdHMge1xuICBqb2luJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmpvaW4pLFxuICAgICAgd2l0aExhdGVzdEZyb20oXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnRlbmFudHMpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0cyksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucHJlc2VudGF0aW9uKSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmRpc3BsYXlPcHRpb25zKVxuICAgICAgKSxcbiAgICAgIGZpbHRlcigoW2FjdGlvbiwgcmFuaywgdGVuYW50cywgbWFuaWZlc3QsIHJlc3VsdFNldHMsIGRpc3BsYXldKSA9PiByYW5rID09PSAwKSxcbiAgICAgIG1hcCgoW2FjdGlvbiwgcmFuaywgdGVuYW50cywgbWFuaWZlc3QsIHJlc3VsdFNldHMsIHNlbGVjdGVkSWRzLCBwcmVzZW50YXRpb24sIGRpc3BsYXldKSA9PlxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJUZW5hbnRKb2luKHtcbiAgICAgICAgICB0ZW5hbnRzLCAvLyB3ZSBhbHJlYWR5IGhhdmUgYWRkZWQgdGVuYW50IGluIHRoZSByZWR1Y2Ugb2YgdGhlIFwiam9pblwiIGFjdGlvblxuICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAuLi5tYW5pZmVzdCxcbiAgICAgICAgICAgIHdpbmRvd3M6IG1hbmlmZXN0LndpbmRvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFNldHMsXG4gICAgICAgICAgc2VsZWN0ZWRJZHMsXG4gICAgICAgICAgam9pbmluZzogdHJ1ZSxcbiAgICAgICAgICBwcmVzZW50YXRpb24sXG4gICAgICAgICAgZGlzcGxheVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsZWF2ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5sZWF2ZSksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJhbmspLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMudGVuYW50cyksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5nbG9iYWxNYW5pZmVzdCksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpXG4gICAgICApLFxuICAgICAgZmlsdGVyKChbYWN0aW9uLCByYW5rLCB0ZW5hbnRzLCBtYW5pZmVzdF0pID0+IHJhbmsgPT09IDAgfHwgKHRlbmFudHNbMF0gPT09IGFjdGlvbi5zZW5kZXIgJiYgcmFuayA9PT0gMSkpLFxuICAgICAgbWFwKChbYWN0aW9uLCByYW5rLCB0ZW5hbnRzLCBtYW5pZmVzdCwgc2VsZWN0ZWRJZHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlYXZlclJhbmsgPSB0ZW5hbnRzLmluZGV4T2YoYWN0aW9uLnNlbmRlcik7XG4gICAgICAgIGNvbnN0IG5ld1RlbmFudHNMaXN0ID0gWy4uLnRlbmFudHNdO1xuICAgICAgICBjb25zdCBuZXdXaW5kb3dMaXN0ID0gWy4uLm1hbmlmZXN0LndpbmRvd3NdO1xuICAgICAgICBpZiAobGVhdmVyUmFuayA+IC0xKSB7XG4gICAgICAgICAgbmV3VGVuYW50c0xpc3Quc3BsaWNlKGxlYXZlclJhbmssIDEpO1xuICAgICAgICAgIG5ld1dpbmRvd0xpc3Quc3BsaWNlKGxlYXZlclJhbmssIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RBZnRlclRlbmFudExlYXZlKHtcbiAgICAgICAgICB0ZW5hbnRzOiBuZXdUZW5hbnRzTGlzdCxcbiAgICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgICAgLi4ubWFuaWZlc3QsXG4gICAgICAgICAgICB3aW5kb3dzOiBuZXdXaW5kb3dMaXN0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3RlZElkc1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGZldGNoU3RhdGljTWFuaWZlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuZmV0Y2hTdGF0aWNNYW5pZmVzdCksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmFuayksIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpKSxcbiAgICAgIGZpbHRlcigoW2FjdGlvbiwgcmFua10pID0+IHJhbmsgPT09IDApLFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb24sIHJhbmtdKSA9PlxuICAgICAgICB0aGlzLm1hbmlmZXN0U2VydmljZVxuICAgICAgICAgIC5nZXQoYWN0aW9uLmlkKVxuICAgICAgICAgIC5waXBlKG1hcCgoc3RhdGljTWFuaWZlc3QpID0+IERhc2hib2FyZEFjdGlvbnMudXBkYXRlU3RhdGljTWFuaWZlc3QoeyBzdGF0aWNNYW5pZmVzdCB9KSkpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGZldGNoU3RhdGljTWFuaWZlc3RMb2FkaW5nJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmZldGNoU3RhdGljTWFuaWZlc3QpLFxuICAgICAgZGVsYXkoNTAwMCksXG4gICAgICBtYXAoKGFjdGlvbikgPT4gRGFzaGJvYXJkQWN0aW9ucy5lbmRMb2FkaW5nKCkpXG4gICAgKVxuICApO1xuXG4gIGxvYWRBbmRBY3RpdmF0ZU1hbmlmZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmxvYWRBbmRBY3RpdmF0ZU1hbmlmZXN0LCBEYXNoYm9hcmRBY3Rpb25zLmxvYWRNYW5pZmVzdCksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmFuayksIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpKSxcbiAgICAgIGZpbHRlcigoW2FjdGlvbiwgcmFua10pID0+IHJhbmsgPT09IDApLFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb24sIHJhbmssIHNlbGVjdGVkSWRzXSkgPT5cbiAgICAgICAgdGhpcy5tYW5pZmVzdFNlcnZpY2UuZ2V0KGFjdGlvbi5pZCkucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgobWFuaWZlc3QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24udHlwZSA9PT0gRGFzaGJvYXJkQWN0aW9ucy5sb2FkQW5kQWN0aXZhdGVNYW5pZmVzdC50eXBlXG4gICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdEFmdGVyRmV0Y2goeyBtYW5pZmVzdCwgbWFuaWZlc3RJZDogYWN0aW9uLmlkLCBzZWxlY3RlZElkcyB9KSxcbiAgICAgICAgICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMuZm9sbG93TWFuaWZlc3RSb3V0ZSgpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICA6IFtEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0V2l0aG91dEFjdGl2YXRpb24oeyBtYW5pZmVzdCwgbWFuaWZlc3RJZDogYWN0aW9uLmlkLCBzZWxlY3RlZElkcyB9KV07XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjbGVhck1hbmlmZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmNsZWFyTWFuaWZlc3QpLFxuICAgICAgd2l0aExhdGVzdEZyb20oXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5nbG9iYWxNYW5pZmVzdCksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpXG4gICAgICApLFxuICAgICAgbWFwKChbYWN0aW9uLCBtYW5pZmVzdCwgc2VsZWN0ZWRJZHNdKSA9PlxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJGZXRjaCh7IG1hbmlmZXN0LCBtYW5pZmVzdElkOiAnJywgc2VsZWN0ZWRJZHMgfSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZG93bmxvYWRNYW5pZmVzdCQgPSBjcmVhdGVFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuZG93bmxvYWRNYW5pZmVzdCksXG4gICAgICAgIHRhcCgoYWN0aW9uKSA9PlxuICAgICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlLmdldChhY3Rpb24uaWQpLnN1YnNjcmliZSgobWFuaWZlc3Q6IEdsb2JhbE1hbmlmZXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU3RyID0gJ2RhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShtYW5pZmVzdCkpO1xuICAgICAgICAgICAgY29uc3QgZGxBbmNob3JFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgZGxBbmNob3JFbGVtLnNldEF0dHJpYnV0ZSgnaHJlZicsIGRhdGFTdHIpO1xuICAgICAgICAgICAgZGxBbmNob3JFbGVtLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBgJHthY3Rpb24ubmFtZX0uanNvbmApO1xuICAgICAgICAgICAgZGxBbmNob3JFbGVtLmNsaWNrKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gICk7XG5cbiAgZm9sbG93TWFuaWZlc3RSb3V0ZSQgPSBjcmVhdGVFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuZm9sbG93TWFuaWZlc3RSb3V0ZSksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy53aW5kb3dNYW5pZmVzdCkpLFxuICAgICAgICB0YXAoKFthY3Rpb24sIG1hbmlmZXN0XSkgPT4ge1xuICAgICAgICAgIGlmIChtYW5pZmVzdC5yb3V0ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChtYW5pZmVzdC5yb3V0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gICk7XG5cbiAgcmVxdWVzdE1hbmlmZXN0Um91dGUkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMucmVxdWVzdEFsbFJvdXRlcyksXG4gICAgICBtYXAoKCkgPT4gRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVSb3V0ZU1hbmlmZXN0KHsgcm91dGU6IHRoaXMucm91dGVyLnVybCB9KSlcbiAgICApXG4gICk7XG5cbiAgYXNzZXJ0UmVzdWx0U2V0cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyxcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5kaXNwYXRjaEZpbHRlcnMsXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMuY2xlYXJBbGxGaWx0ZXJWYWx1ZXNcbiAgICAgICksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdsb2JhbE1hbmlmZXN0KSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJlc3VsdFNldHMpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0c1BhcmFtcyksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5xdWlja09yZGVyKVxuICAgICAgKSxcbiAgICAgIG1lcmdlTWFwKChbYWN0aW9uLCBtYW5pZmVzdCwgcmVzdWx0U2V0cywgcmVzdWx0U2V0c1BhcmFtcywgcXVpY2tPcmRlcl0pID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoIWFjdGlvbi5pZCkge1xuICAgICAgICAgIC8vIEZpcnN0IHNlbmQgYWdncmVnYXRlIHVwZGF0ZXNcbiAgICAgICAgICBjb25zdCB0b0FnZ3JlZ2F0ZUFjdGlvbnMgPSAoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAgICAgbWFuaWZlc3Qud2luZG93c1xuICAgICAgICAgICAgICAgICAgLm1hcCgod2luTWFuaWZlc3QpID0+ICh3aW5NYW5pZmVzdCA/PyB7fSkud2lkZ2V0cyA/PyBbXSlcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgICAgICAgICAgICAubWFwKCh3aWRNYW5pZmVzdCkgPT4gdGhpcy53aWRnZXRGYWN0b3J5U2VydmljZS5hZ2dyZWdhdGVzVG9BdXRvTG9hZCh3aWRNYW5pZmVzdCkpXG4gICAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdIGFzIHN0cmluZ1tdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdIGFzIHN0cmluZ1tdXG4gICAgICAgICAgKS5tYXAoKGRzKSA9PiBEYXNoYm9hcmRBY3Rpb25zLnRyaWdnZXJBZ2dyZWdhdGUoeyBpZDogZHMgfSkpO1xuXG4gICAgICAgICAgY29uc3QgdG9JdGVtc0FjdGlvbnMgPSBPYmplY3QudmFsdWVzKFxuICAgICAgICAgICAgbWFuaWZlc3Qud2luZG93c1xuICAgICAgICAgICAgICAubWFwKCh3aW5NYW5pZmVzdCkgPT4gKHdpbk1hbmlmZXN0ID8/IHt9KS53aWRnZXRzID8/IFtdKVxuICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAgICAgICAubWFwKCh3aWRNYW5pZmVzdCkgPT4gdGhpcy53aWRnZXRGYWN0b3J5U2VydmljZS5kYXRhc291cmNlc1RvQXV0b0xvYWQod2lkTWFuaWZlc3QpKVxuICAgICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKHAsIGMpID0+ICh7IC4uLnAsIFtjLmRhdGFzZXRJZF06IHsgLi4ucFtjLmRhdGFzZXRJZF0sIC4uLmMgfSB9KSxcbiAgICAgICAgICAgICAgICB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHsgZGF0YXNldElkOiBzdHJpbmc7IGV4Y2x1ZGVHZW86IGJvb2xlYW4gfSB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAocmVzdWx0U2V0KSA9PlxuICAgICAgICAgICAgICAgICEhcmVzdWx0U2V0LmRhdGFzZXRJZCAmJlxuICAgICAgICAgICAgICAgIHJlc3VsdFNldC5kYXRhc2V0SWQgIT09ICcnICYmXG4gICAgICAgICAgICAgICAgKCFyZXN1bHRTZXRzW3Jlc3VsdFNldC5kYXRhc2V0SWRdIHx8XG4gICAgICAgICAgICAgICAgICByZXN1bHRTZXRzUGFyYW1zW3Jlc3VsdFNldC5kYXRhc2V0SWRdICE9PVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0SXRlbXNTZXJpYWxpemVkUGFyYW1zKHJlc3VsdFNldC5kYXRhc2V0SWQsIHF1aWNrT3JkZXIpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcCgocmVzdWx0U2V0KSA9PlxuICAgICAgICAgICAgICBTZWFyY2hBY3Rpb25zLmdldERhdGFzb3VyY2VJdGVtcyh7XG4gICAgICAgICAgICAgICAgaWQ6IHJlc3VsdFNldC5kYXRhc2V0SWQsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUdlbzogcmVzdWx0U2V0LmV4Y2x1ZGVHZW8sXG4gICAgICAgICAgICAgICAgZnJvbTogJ0Rhc2hib2FyZEVmZmVjdHMuYXNzZXJ0UmVzdWx0U2V0cyQtMSdcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gWy4uLnRvSXRlbXNBY3Rpb25zLCAuLi50b0FnZ3JlZ2F0ZUFjdGlvbnNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBpZiAoIXJlc3VsdFNldHNbYWN0aW9uLmlkXSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgU2VhcmNoQWN0aW9ucy5nZXREYXRhc291cmNlSXRlbXMoe1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBpZDogYWN0aW9uLmlkIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBleGNsdWRlR2VvOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZyb206ICdEYXNoYm9hcmRFZmZlY3RzLmFzc2VydFJlc3VsdFNldHMkLTInXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHNlbmRBZ2dyZWdhdGVzRXZlbnQkID0gY3JlYXRlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLnRyaWdnZXJBZ2dyZWdhdGUpLFxuICAgICAgICBmaWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLmlkICE9PSBERUZBVUxUX05BTUVEX1FVRVJZX0lEICYmIGFjdGlvbi5pZCAhPT0gRVhQTE9SRV9OQU1FRF9RVUVSWV9JRCksXG4gICAgICAgIHRhcCgoYWN0aW9uKSA9PiB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RhdGFzb3VyY2VSZWZyZXNoJywgeyBkZXRhaWw6IGFjdGlvbi5pZCB9KSkpXG4gICAgICApLFxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgKTtcblxuICBzdGFydE1pc3NpbmdWaWV3QWZ0ZXJWaWV3VXBkYXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdCxcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdEFmdGVyRmV0Y2gsXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RBZnRlclRlbmFudExlYXZlLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJUZW5hbnRKb2luLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmV4cGxvcmUsXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMuZGV0YWlsLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnJlc3RvcmVJbml0aWFsTWFuaWZlc3QsXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMuY3JlYXRlVGFiXG4gICAgICApLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJhbmspKSxcbiAgICAgIGZpbHRlcigoW2FjdGlvbiwgcmFua10pID0+IHJhbmsgPT09IDApLFxuICAgICAgbWVyZ2VNYXAoKGFjdGlvbikgPT4gW1xuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnN0YXJ0aW5nTWlzc2luZ1ZpZXdzKCksXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMuYXNzZXJ0UmVzdWx0U2V0cyh7fSksXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMuc29sdmVDb2xsaXNpb25zKClcbiAgICAgIF0pXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVRpdGxlJCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdCxcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJUZW5hbnRKb2luLFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RBZnRlclRlbmFudExlYXZlLFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RBZnRlckZldGNoLFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMuZGVjbGFyZVNlbmRlcklkXG4gICAgICAgICksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSksXG4gICAgICAgIHRhcCgoW2FjdGlvbiwgcmFua10pID0+IHtcbiAgICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5jaGFuZ2VUaXRsZSgpO1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gICk7XG5cbiAgb3Blbk90aGVyJCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5zdGFydGluZ01pc3NpbmdWaWV3cyksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKFxuICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSxcbiAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMudGVuYW50cyksXG4gICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdsb2JhbE1hbmlmZXN0KVxuICAgICAgICApLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksXG4gICAgICAgIGZpbHRlcigoW2FjdGlvbiwgcmFuaywgdGVuYW50cywgbWFuaWZlc3RdKSA9PiByYW5rID09PSAwKSxcbiAgICAgICAgdGFwKChbYWN0aW9uLCByYW5rLCB0ZW5hbnRzLCBtYW5pZmVzdF0pID0+IHtcbiAgICAgICAgICBtYW5pZmVzdC53aW5kb3dzLmZvckVhY2goKHdpbmRvd01hbmlmZXN0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0ZW5hbnRzW2luZGV4XSkge1xuICAgICAgICAgICAgICAvLyBJZiBubyB3aW5kb3cgaXMgb3BlbmVkIGZvciB0aGlzIHBhcnQsIHRoZW4gb3BlbiBvbmVcbiAgICAgICAgICAgICAgd2luZG93Lm9wZW4od2luZG93TWFuaWZlc3Qucm91dGUgPz8gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgKTtcblxuICBzYXZlTWFuaWZlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuc2F2ZU1hbmlmZXN0KSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5nbG9iYWxNYW5pZmVzdCkpLFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb24sIGN1cnJlbnRNYW5pZmVzdF0pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlXG4gICAgICAgICAgLnNhdmUoXG4gICAgICAgICAgICBhY3Rpb24ubmFtZSxcbiAgICAgICAgICAgIGFjdGlvbi5tYW5pZmVzdCA/PyBjdXJyZW50TWFuaWZlc3QsXG4gICAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgICBhY3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBhY3Rpb24uaW1hZ2UsXG4gICAgICAgICAgICBhY3Rpb24uY292ZXIsXG4gICAgICAgICAgICBhY3Rpb24ubWV0YWRhdGEsXG4gICAgICAgICAgICBhY3Rpb24uZ3JvdXBzXG4gICAgICAgICAgKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5zYXZlZCcsIHsgdmlld0lkOiBhY3Rpb24ubmFtZSB9KSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcydcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKCkgPT4gYWN0aW9uLm1hbmlmZXN0ID8/IGN1cnJlbnRNYW5pZmVzdCksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5zYXZlRXJyb3JDb2RlLicgKyAoZXJyb3IuZXJyb3I/LmNvZGUgPz8gJ1VOS05PV04nKSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIG1lcmdlTWFwKChtYW5pZmVzdCkgPT4gW1xuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmZldGNoTWFuaWZlc3RzTGlzdCgpLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnNldEluaXRpYWxQcmVzZW50YXRpb24oeyBpbml0aWFsOiBtYW5pZmVzdCB9KVxuICAgICAgXSlcbiAgICApXG4gICk7XG5cbiAgbGlzdE1hbmlmZXN0cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5mZXRjaE1hbmlmZXN0c0xpc3QpLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJhbmspKSxcbiAgICAgIGZpbHRlcigoW2FjdGlvbiwgcmFua10pID0+IHJhbmsgPT09IDAgfHwgcmFuayA9PT0gLTEpLFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb24sIHJhbmtdKSA9PlxuICAgICAgICB0aGlzLm1hbmlmZXN0U2VydmljZS5saXN0KCkucGlwZShtYXAoKG1hbmlmZXN0cykgPT4gRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdHNMaXN0KHsgbWFuaWZlc3RzIH0pKSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY29uZmlybU1hbmlmZXN0RGVsZXRpb24kID0gY3JlYXRlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmNvbmZpcm1NYW5pZmVzdERlbGV0aW9uKSxcbiAgICAgICAgdGFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhOiBQcnlEaWFsb2dDb25maXJtRGF0YSA9IHtcbiAgICAgICAgICAgIHRpdGxlOiAnQHByeS53aWRnZXQubW9kYWxUaXRsZScsXG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZScsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW0Rhc2hib2FyZEFjdGlvbnMuZGVsZXRlTWFuaWZlc3QoeyBpZDogYWN0aW9uLmlkIH0pXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnc2Vjb25kYXJ5J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnByeURpYWxvZy5vcGVuKFByeURpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHsgZGF0YSB9KTtcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgeyBkaXNwYXRjaDogZmFsc2UgfVxuICApO1xuXG4gIGRlbGV0ZU1hbmlmZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmRlbGV0ZU1hbmlmZXN0KSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlLmRlbGV0ZShhY3Rpb24uaWQpLnBpcGUobWFwKCgpID0+IERhc2hib2FyZEFjdGlvbnMuZmV0Y2hNYW5pZmVzdHNMaXN0KCkpKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBmZXRjaE9iamVjdHNEZXRhaWxzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmZldGNoT2JqZWN0c0RldGFpbHMpLFxuICAgICAgbWVyZ2VNYXAoKGFjdGlvbikgPT4gbWVyZ2UoLi4uYWN0aW9uLmlkcy5tYXAoKGlkKSA9PiB0aGlzLml0ZW1TZXJ2aWNlLmdldChpZCkpKSksXG4gICAgICBtYXAoKGl0ZW0pID0+IERhc2hib2FyZEFjdGlvbnMudXBkYXRlT2JqZWN0c0RldGFpbHMoeyBsaXN0OiB7IFtpdGVtLmlkXTogaXRlbSB9IH0pKVxuICAgIClcbiAgKTtcblxuICBwcm94aW1pdHlTZWFyY2gkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMucHJveGltaXR5KSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSksXG4gICAgICBtZXJnZU1hcCgoW2FjdGlvbiwgcmVzdWx0U2V0c10pID0+XG4gICAgICAgIHRoaXMuaXRlbVNlcnZpY2UucHJveGltaXR5KGFjdGlvbi5pZCkucGlwZShcbiAgICAgICAgICBtYXAoKHByb3hScykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIERhc2hib2FyZEFjdGlvbnMudXBkYXRlUmVzdWx0U2V0KHtcbiAgICAgICAgICAgICAgaWQ6IGFjdGlvbi50YXJnZXRSZXN1bHRTZXQsXG4gICAgICAgICAgICAgIHJlc3VsdFNldDogUmVzdWx0c2V0VXRpbHMubWVyZ2VSZXN1bHRTZXRzKHByb3hScywgcmVzdWx0U2V0c1thY3Rpb24udGFyZ2V0UmVzdWx0U2V0XSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZXhwbG9yZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5leHBsb3JlKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+IFtEYXNoYm9hcmRBY3Rpb25zLnByb3hpbWl0eSh7IGlkOiBhY3Rpb24uaWQsIHRhcmdldFJlc3VsdFNldDogRVhQTE9SRV9OQU1FRF9RVUVSWV9JRCB9KV0pXG4gICAgKVxuICApO1xuXG4gIGRldGFpbEFzTG9hZEluV2lkZ2V0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmRldGFpbCksXG4gICAgICBtYXAoKGFjdGlvbikgPT5cbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hZGRXaWRnZXRUb1ByZXNlbnRhdGlvbih7XG4gICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgIHdpZGdldFR5cGU6ICdkZXRhaWwnLFxuICAgICAgICAgIGFkZGl0aW9uYWxPcHRpb25zOiB7XG4gICAgICAgICAgICBpdGVtSWRzOiBhY3Rpb24uaWRzXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVXaWRnZXRJblByZXNlbnRhdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVXaWRnZXRJblByZXNlbnRhdGlvbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpKSxcbiAgICAgIG1lcmdlTWFwKChbYWN0aW9uLCBtYW5pZmVzdF0pID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYSB3aWRnZXQgd2l0aCBzYW1lIGRhdGFzb3VyY2UgYW5kIHR5cGUgYWxyZWFkeSBleGlzdCBpbiBjdXJyZW50IHByZXNlbnRhdGlvblxuICAgICAgICBjb25zdCB3aWRnZXRUb01hdGNoID0gdGhpcy50b29sYm94TWFuaWZlc3RTZXJ2aWNlLmdldChhY3Rpb24ud2lkZ2V0VHlwZSk7XG5cbiAgICAgICAgbGV0IGFkZGl0aW9uYWxNYXRjaGluZ0ZuOiAob3B0aW9uc1RvTWF0Y2g6IGFueSwgb3B0aW9uczogYW55KSA9PiBib29sZWFuO1xuICAgICAgICBzd2l0Y2ggKHdpZGdldFRvTWF0Y2gudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2NoYXJ0JzpcbiAgICAgICAgICAgIGFkZGl0aW9uYWxNYXRjaGluZ0ZuID0gKG9wdGlvbnNUb01hdGNoOiBDaGFydFdpZGdldE9wdGlvbnMsIG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgb3B0aW9uc1RvTWF0Y2gudHlwZSA9PT0gb3B0aW9ucy50eXBlICYmIG9wdGlvbnNUb01hdGNoLnN1YlR5cGUgPT09IG9wdGlvbnMuc3ViVHlwZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21hcCc6XG4gICAgICAgICAgICBhZGRpdGlvbmFsTWF0Y2hpbmdGbiA9IChvcHRpb25zVG9NYXRjaDogTWFwV2lkZ2V0T3B0aW9ucywgb3B0aW9uczogTWFwV2lkZ2V0T3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgISFvcHRpb25zLmxheWVycyEuZmluZCgobGF5ZXIpID0+IGxheWVyLnR5cGUgPT09IG9wdGlvbnNUb01hdGNoLmxheWVycyFbMF0udHlwZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYWRkaXRpb25hbE1hdGNoaW5nRm4gPSAob3B0aW9uc1RvTWF0Y2g6IGFueSwgb3B0aW9uczogYW55KSA9PiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2hpbmdXaWRnZXRzID0gbWFuaWZlc3Qud2luZG93cy5tYXAoKHdpbmRvdykgPT5cbiAgICAgICAgICB3aW5kb3cud2lkZ2V0c1xuICAgICAgICAgICAgLmZpbHRlcigod2lkZ2V0KSA9PiB3aWRnZXQudHlwZSA9PT0gd2lkZ2V0VG9NYXRjaC50eXBlKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHdpZGdldCkgPT5cbiAgICAgICAgICAgICAgICB3aWRnZXQuZGF0YXNvdXJjZSA9PT0gYWN0aW9uLmlkIHx8XG4gICAgICAgICAgICAgICAgKHdpZGdldC5kYXRhc291cmNlIVswXSA9PT0gYWN0aW9uLmlkICYmIHdpZGdldC5kYXRhc291cmNlIS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZmluZCgod2lkZ2V0KSA9PiBhZGRpdGlvbmFsTWF0Y2hpbmdGbih3aWRnZXRUb01hdGNoLm9wdGlvbnMsIHdpZGdldC5vcHRpb25zKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBhbHJlYWR5TWF0Y2hlZFdpZGdldCA9IG1hdGNoaW5nV2lkZ2V0cy5maW5kKCh3aW5kb3cpID0+ICEhd2luZG93KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKGFscmVhZHlNYXRjaGVkV2lkZ2V0KSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLm11bHRpU25hY2tCYXIoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC51cGRhdGVkSW5WaWV3Jywge1xuICAgICAgICAgICAgICAgICAgaW5kZXg6IG1hdGNoaW5nV2lkZ2V0cy5maW5kSW5kZXgoKHdpZGdldCkgPT4gISF3aWRnZXQpICsgMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChEYXNoYm9hcmRBY3Rpb25zLmFkZFdpZGdldFRvUHJlc2VudGF0aW9uKHsgLi4uYWN0aW9uIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBhZGRXaWRnZXRUb1ByZXNlbnRhdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5hZGRXaWRnZXRUb1ByZXNlbnRhdGlvbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmFuayksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRDZWxsUGFyYW1zKSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcylcbiAgICAgICksXG4gICAgICBtYXAoKFthY3Rpb24sIGxheW91dCwgX2dsb2JhbE1hbmlmZXN0LCByYW5rLCBwYXJhbXMsIHNlbGVjdGVkSWRzXSkgPT4ge1xuICAgICAgICBjb25zdCBtYW5pZmVzdEdsb2JhbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX2dsb2JhbE1hbmlmZXN0KSkgYXMgR2xvYmFsTWFuaWZlc3Q7XG5cbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuZ2V0KGFjdGlvbi53aWRnZXRUeXBlKSA/PyB7XG4gICAgICAgICAgb3B0aW9uczoge30sXG4gICAgICAgICAgdHlwZTogYWN0aW9uLndpZGdldFR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV3V2lkZ2V0TWFuaWZlc3QgPSB7XG4gICAgICAgICAgLi4ubmV3T3B0aW9ucyxcbiAgICAgICAgICBsYXlvdXQ6IHt9LFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLm5ld09wdGlvbnMub3B0aW9ucyxcbiAgICAgICAgICAgIC4uLmFjdGlvbi5hZGRpdGlvbmFsT3B0aW9uc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBXaWRnZXRNYW5pZmVzdDtcblxuICAgICAgICBpZiAoISFhY3Rpb24uaWQpIHtcbiAgICAgICAgICBuZXdXaWRnZXRNYW5pZmVzdC5kYXRhc291cmNlID0gYWN0aW9uLmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZvdW5kOiB7IGFjdHVhbFJhbms6IG51bWJlcjsgd2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGEgc3BvdCBpbiB3aW5kb3dzIChzdGFydGluZyBieSBjdXJyZW50IHJhbmssIHRoZW4gaW4gb3RoZXJzKVxuICAgICAgICBjb25zdCBzZXF1ZW5jZSA9IFdpZGdldFBsYWNlbWVudFV0aWxzLnN3YXBBcnJheUVsZW1lbnRzKFxuICAgICAgICAgIG5ldyBBcnJheShtYW5pZmVzdEdsb2JhbC53aW5kb3dzLmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGlkeCwgYXJyYXkpID0+IGlkeCksXG4gICAgICAgICAgMCxcbiAgICAgICAgICByYW5rXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyeWluZyBhbGwgcGxhY2VtZW50IG9wdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCBhY3R1YWxSYW5rIG9mIHNlcXVlbmNlKSB7XG4gICAgICAgICAgY29uc3Qgd2luZG93TGF5b3V0ID0gbWFuaWZlc3RHbG9iYWwud2luZG93c1thY3R1YWxSYW5rXS5ncmlkPy5sYXlvdXQgPz8gRGFzaGJvYXJkR3JpZExheW91dC5GVUxMO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKG5ld1dpZGdldE1hbmlmZXN0LCB3aW5kb3dMYXlvdXQsIHBhcmFtcyk7XG4gICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gQXJlIHdlIGRpc2pvaW50IGZyb20gYWxsIG90aGVyIHdpZGdldHMgP1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGlzam9pbnRGcm9tQWxsID0gKG1hbmlmZXN0R2xvYmFsLndpbmRvd3NbYWN0dWFsUmFua10ud2lkZ2V0cyA/PyBbXSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHdpZGdldCkgPT4gV2lkZ2V0UGxhY2VtZW50VXRpbHMuYXJlRGlzam9pbnQod2lkZ2V0LCBvcHRpb24pKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcCAmJiBjLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEaXNqb2ludEZyb21BbGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgZGlzam9pbnQgcGxhY2VtZW50ICFcbiAgICAgICAgICAgICAgICAgIGZvdW5kID0geyBhY3R1YWxSYW5rLCB3aWRnZXQ6IG9wdGlvbiB9IGFzIHsgYWN0dWFsUmFuazogbnVtYmVyOyB3aWRnZXQ6IFdpZGdldE1hbmlmZXN0IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEhZm91bmQpIHtcbiAgICAgICAgICBjb25zdCBwbGFjZVdlRm91bmQgPSBmb3VuZCBhcyB7IGFjdHVhbFJhbms6IG51bWJlcjsgd2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCB9O1xuICAgICAgICAgIG1hbmlmZXN0R2xvYmFsLndpbmRvd3NbcGxhY2VXZUZvdW5kLmFjdHVhbFJhbmtdLndpZGdldHMucHVzaChwbGFjZVdlRm91bmQud2lkZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50V2luZG93TGF5b3V0ID0gbWFuaWZlc3RHbG9iYWwud2luZG93c1tyYW5rXS5ncmlkPy5sYXlvdXQgPz8gRGFzaGJvYXJkR3JpZExheW91dC5GVUxMO1xuXG4gICAgICAgICAgLy8gc2kgbm9uIHRyb3V2w6kgOiBub3V2ZWxsZSBwYWdlLCBwcmVtacOocmUgcG9zaXRpb24gc3VnZ8OpcsOpZVxuICAgICAgICAgIGNvbnN0IGZpcnN0UHJvcG9zZWRMYXlvdXQgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKFxuICAgICAgICAgICAgbmV3V2lkZ2V0TWFuaWZlc3QsXG4gICAgICAgICAgICBjdXJyZW50V2luZG93TGF5b3V0LFxuICAgICAgICAgICAgcGFyYW1zXG4gICAgICAgICAgKVswXTtcblxuICAgICAgICAgIG1hbmlmZXN0R2xvYmFsLndpbmRvd3MucHVzaCh7IHdpZGdldHM6IFtmaXJzdFByb3Bvc2VkTGF5b3V0XSwgZ3JpZDogeyBsYXlvdXQ6IGN1cnJlbnRXaW5kb3dMYXlvdXQgfSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3Rpb24uYWxlcnQgPT09IHVuZGVmaW5lZCB8fCBhY3Rpb24uYWxlcnQgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlQWN0aW9uID0gRGFzaGJvYXJkQWN0aW9ucy5tdWx0aVNuYWNrQmFyKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuYWRkZWRJblZpZXcnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6ICEhZm91bmRcbiAgICAgICAgICAgICAgICAgID8gKGZvdW5kIGFzIHsgYWN0dWFsUmFuazogbnVtYmVyOyB3aWRnZXQ6IFdpZGdldE1hbmlmZXN0IH0pLmFjdHVhbFJhbmsgKyAxXG4gICAgICAgICAgICAgICAgICA6IG1hbmlmZXN0R2xvYmFsLndpbmRvd3MubGVuZ3RoXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChtZXNzYWdlQWN0aW9uKTtcblxuICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuYnVzU2VydmljZS5idWZmZXJVbnRpbEpvaW5lZChtZXNzYWdlQWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdCh7IG1hbmlmZXN0OiBtYW5pZmVzdEdsb2JhbCwgc2VsZWN0ZWRJZHMgfSk7XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBtdWx0aVNuYWNrQmFyJCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5tdWx0aVNuYWNrQmFyKSxcbiAgICAgICAgdGFwKChhY3Rpb24pID0+IHRoaXMuc25hY2tCYXIub3BlbihhY3Rpb24ubWVzc2FnZSkpXG4gICAgICApLFxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgKTtcblxuICByZWxhdW5jaEFmdGVyT3JkZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMucXVpY2tPcmRlciksXG4gICAgICBtYXAoKGFjdGlvbikgPT5cbiAgICAgICAgU2VhcmNoQWN0aW9ucy5nZXREYXRhc291cmNlSXRlbXMoe1xuICAgICAgICAgIGlkOiBhY3Rpb24uZGF0YXNvdXJjZUlkLFxuICAgICAgICAgIGV4Y2x1ZGVHZW86IHRydWUsXG4gICAgICAgICAgZnJvbTogJ0Rhc2hib2FyZEVmZmVjdHMucmVsYXVuY2hBZnRlck9yZGVyJCdcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJvcGFnYXRlR3JpZExheW91dCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5zZXRHcmlkTGF5b3V0KSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSwgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLndpbmRvd01hbmlmZXN0KSksXG4gICAgICBtYXAoKFthY3Rpb24sIHJhbmssIHdpbmRvd01hbmlmZXN0XSkgPT4gRGFzaGJvYXJkQWN0aW9ucy5wcm9wYWdhdGVHcmlkTGF5b3V0KHsgbWFuaWZlc3Q6IHdpbmRvd01hbmlmZXN0LCByYW5rIH0pKVxuICAgIClcbiAgKTtcblxuICB0b2dnbGVFZGl0aW9uTW9kZUlmTm90TWFudWFsJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLnNldEdyaWRMYXlvdXQpLFxuICAgICAgZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5sYXlvdXQgIT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMKSxcbiAgICAgIG1hcCgoKSA9PiBEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHsgZm9yY2U6IGZhbHNlIH0pKVxuICAgIClcbiAgKTtcblxuICBnZXRDYXBhYmlsaXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmdldENhcGFiaWxpdHkpLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmNhcGFiaWxpdGllcykpLFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoW2FjdGlvbiwgY2FwYWJpbGl0aWVzXSkgPT5cbiAgICAgICAgICAoISFjYXBhYmlsaXRpZXMgJiYgISFhY3Rpb24udXJsICYmICghY2FwYWJpbGl0aWVzW2FjdGlvbi51cmxdIHx8ICFjYXBhYmlsaXRpZXNbYWN0aW9uLnVybF0hLmRvYykpIHx8XG4gICAgICAgICAgISFhY3Rpb24uZm9yY2VcbiAgICAgICksXG4gICAgICBtZXJnZU1hcCgoW2FjdGlvbiwgX10pID0+XG4gICAgICAgIHRoaXMud21zU2VydmljZS5nZXRDYXBhYmlsaXRpZXMoYWN0aW9uLnVybCkucGlwZShcbiAgICAgICAgICBtYXAoKGNhcGFiaWxpdHkpID0+IERhc2hib2FyZEFjdGlvbnMudXBkYXRlQ2FwYWJpbGl0eSh7IHVybDogYWN0aW9uLnVybCwgY2FwYWJpbGl0eSB9KSksXG4gICAgICAgICAgc3RhcnRXaXRoKERhc2hib2FyZEFjdGlvbnMudXBkYXRlQ2FwYWJpbGl0eSh7IHVybDogYWN0aW9uLnVybCwgY2FwYWJpbGl0eTogbnVsbCB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBnZXRXbXNGZWF0dXJlcyA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmdldFdtc0ZlYXR1cmVzKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+IGNvbWJpbmVMYXRlc3QoW29mKGFjdGlvbiksIHRoaXMud21zU2VydmljZS5nZXRXbXNGZWF0dXJlcyhhY3Rpb24udXJsKV0pKSxcbiAgICAgIG1hcCgoW2FjdGlvbiwganNvbl0pID0+IHtcbiAgICAgICAgcmV0dXJuIERhc2hib2FyZEFjdGlvbnMuYWRkV21zRmVhdHVyZXMoe1xuICAgICAgICAgIGZlYXR1cmVzOiBqc29uLmZlYXR1cmVzLm1hcCgoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHtcbiAgICAgICAgICAgICAgaWQ6IGZlYXR1cmUuaWQsXG4gICAgICAgICAgICAgIG9DbGFzczogYWN0aW9uLm9DbGFzcyxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGFjdGlvbi5jb29yZGluYXRlcyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczogT2JqZWN0LmtleXMoZmVhdHVyZS5wcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgIC5tYXAoKHByb3BlcnR5KSA9PiAoeyBrZXk6IHByb3BlcnR5LCB2YWx1ZTogZmVhdHVyZS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSB9KSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChwcm9wKSA9PiAhIXByb3AudmFsdWUpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGFkZE1hbmlmZXN0TWV0YWRhdGEgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5hZGRNYW5pZmVzdE1ldGFkYXRhKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlLmFkZE1ldGFkYXRhKGFjdGlvbi5wcmVzZW50YXRpb25JZCwgYWN0aW9uLm1ldGFkYXRhSWQsIGFjdGlvbi52YWx1ZSkucGlwZShcbiAgICAgICAgICBtYXAoKCkgPT4gRGFzaGJvYXJkQWN0aW9ucy5mZXRjaE1hbmlmZXN0c0xpc3QoKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5zYXZlRXJyb3JDb2RlLlNBVkVfTUVUQURBVEEnLCB7XG4gICAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlbGV0ZU1hbmlmZXN0TWV0YWRhdGEkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuZGVsZXRlTWFuaWZlc3RNZXRhZGF0YSksXG4gICAgICBtZXJnZU1hcCgoYWN0aW9uKSA9PlxuICAgICAgICB0aGlzLm1hbmlmZXN0U2VydmljZVxuICAgICAgICAgIC5kZWxldGVNZXRhZGF0YShhY3Rpb24ucHJlc2VudGF0aW9uSWQsIGFjdGlvbi5tZXRhZGF0YUlkKVxuICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiBEYXNoYm9hcmRBY3Rpb25zLmZldGNoTWFuaWZlc3RzTGlzdCgpKSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbG9hZFByZXNlbnRhdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5sb2FkUHJlc2VudGF0aW9uKSxcbiAgICAgIHRhcCgoKSA9PlxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3Qoe1xuICAgICAgICAgICAgbWFuaWZlc3Q6IHsgd2luZG93czogW10gfSxcbiAgICAgICAgICAgIHNlbGVjdGVkSWRzOiBbXVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICB0YXAoKGFjdGlvbikgPT5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdFByZXNlbnRhdGlvbih7XG4gICAgICAgICAgICBwcmVzZW50YXRpb246IGFjdGlvbi5wcmVzZW50YXRpb24sXG4gICAgICAgICAgICB2aWV3TW9kZTogYWN0aW9uLnZpZXdNb2RlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHRhcCgoYWN0aW9uKSA9PiB0aGlzLnRpdGxlU2VydmljZS5jaGFuZ2VUaXRsZShhY3Rpb24ucHJlc2VudGF0aW9uLm5hbWUpKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlLmdldChhY3Rpb24ucHJlc2VudGF0aW9uLmlkKS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKChtYW5pZmVzdCkgPT4gW1xuICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdCh7XG4gICAgICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICAgICAgICBzZWxlY3RlZElkczogW10sXG4gICAgICAgICAgICAgIG1hbmlmZXN0SWQ6IGFjdGlvbi5wcmVzZW50YXRpb24uaWRcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5zZXRJbml0aWFsUHJlc2VudGF0aW9uKHtcbiAgICAgICAgICAgICAgaW5pdGlhbDogYWN0aW9uLnZpZXdNb2RlID09PSBWaWV3TW9kZS5DT05TVUxUID8gdW5kZWZpbmVkIDogbWFuaWZlc3RcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEaXNwbGF5T3B0aW9ucyh7XG4gICAgICAgICAgICAgIG1vZGU6IGFjdGlvbi52aWV3TW9kZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmZvbGxvd01hbmlmZXN0Um91dGUoKVxuICAgICAgICAgIF0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRJbml0U2VydmljZTogRGFzaGJvYXJkSW5pdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgbWFuaWZlc3RTZXJ2aWNlOiBNYW5pZmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFByeVRpdGxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IFByeVNuYWNrYmFyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVmcmVzaFNlcnZpY2U6IFJlZnJlc2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbGJveE1hbmlmZXN0U2VydmljZTogVG9vbGJveE1hbmlmZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGJ1c1NlcnZpY2U6IEJ1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJ5RGlhbG9nOiBQcnlEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgd21zU2VydmljZTogV21zU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEZhY3RvcnlTZXJ2aWNlOiBXaWRnZXRGYWN0b3J5U2VydmljZVxuICApIHtcbiAgICBkYXNoYm9hcmRJbml0U2VydmljZS5pbml0KCk7XG4gICAgcmVmcmVzaFNlcnZpY2Uuc3RhcnQoKTtcbiAgfVxufVxuIl19
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmVmZmVjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL3N0b3JlL2Rhc2hib2FyZC5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RHLE9BQU8sRUFDTCx5QkFBeUIsRUFFMUIsTUFBTSx3REFBd0QsQ0FBQztBQUloRSxPQUFPLEVBQUUsbUJBQW1CLEVBQWtDLE1BQU0scUNBQXFDLENBQUM7QUFJMUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBSTFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7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QzFCLENBQUMsQ0FDSCxDQUNGLEVBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hFLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuRCxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztnQkFDOUIsUUFBUTtnQkFDUixXQUFXLEVBQUUsRUFBRTtnQkFDZixVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO2FBQ25DLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDdEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO2FBQ3JFLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDcEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQ3RCLENBQUM7WUFDRixnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRTtTQUN2QyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQ0YsQ0FBQztRQW9CQSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQzsrR0Fwd0JVLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFjdGlvbnMsIGNyZWF0ZUVmZmVjdCwgb2ZUeXBlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBvZiwgc3RhcnRXaXRoLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIFByeURpYWxvZ0NvbmZpcm1Db21wb25lbnQsXG4gIFByeURpYWxvZ0NvbmZpcm1EYXRhXG59IGZyb20gJy4uLy4uL2NvcmUvY29tcG9uZW50cy9vdmVybGF5L2RpYWxvZy1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcnlEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9jb21wb25lbnRzL292ZXJsYXkvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJ5U25hY2tiYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9jb21wb25lbnRzL3NuYWNrYmFyL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJ5STE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IERhc2hib2FyZEdyaWRMYXlvdXQsIEdsb2JhbE1hbmlmZXN0LCBXaWRnZXRNYW5pZmVzdCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvbWFuaWZlc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IENoYXJ0V2lkZ2V0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWwvd2lkZ2V0LWNoYXJ0LW1hbmlmZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXBXaWRnZXRPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbC93aWRnZXQtbWFwLW1hbmlmZXN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJdGVtU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvaXRlbS9pdGVtLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoQWN0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUvc3RvcmUvc2VhcmNoL3NlYXJjaC5hY3Rpb25zJztcbmltcG9ydCB7IERFRkFVTFRfTkFNRURfUVVFUllfSUQsIEVYUExPUkVfTkFNRURfUVVFUllfSUQgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL3NlYXJjaC9zZWFyY2guY29uc3RhbnRzJztcbmltcG9ydCB7IFNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3N0b3JlL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBUb29sYm94TWFuaWZlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90b29sYm94L3Rvb2xib3gtbWFuaWZlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBCdXNTZXJ2aWNlIH0gZnJvbSAnLi4vYWN0aW9uLWJ1cy9zZXJ2aWNlL2J1cy5zZXJ2aWNlJztcbmltcG9ydCB7IFdpZGdldFBsYWNlbWVudFV0aWxzIH0gZnJvbSAnLi4vY29tcG9uZW50cy93aWRnZXRzL3dpZGdldC1wbGFjZW1lbnQvd2lkZ2V0LXBsYWNlbWVudC51dGlscyc7XG5pbXBvcnQgeyBSZXN1bHRzZXRVdGlscyB9IGZyb20gJy4uL3Jlc3VsdHNldC11dGlscyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRJbml0U2VydmljZSB9IGZyb20gJy4vZGFzaGJvYXJkLWluaXQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRBY3Rpb25zLCBWaWV3TW9kZSB9IGZyb20gJy4vZGFzaGJvYXJkLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU2VsZWN0b3JzIH0gZnJvbSAnLi9kYXNoYm9hcmQuc2VsZWN0b3JzJztcbmltcG9ydCB7IE1hbmlmZXN0U2VydmljZSB9IGZyb20gJy4vbWFuaWZlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZWZyZXNoU2VydmljZSB9IGZyb20gJy4vcmVmcmVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IFByeVRpdGxlU2VydmljZSB9IGZyb20gJy4vdGl0bGUuc2VydmljZSc7XG5pbXBvcnQgeyBXbXNTZXJ2aWNlIH0gZnJvbSAnLi93bXMuc2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvd2lkZ2V0cy93aWRnZXQtaW5zdGFuY2lhdG9yL3dpZGdldC1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJ5VmlzaWJpbGl0eVR5cGUgfSBmcm9tICcuLi8uLi9jb3JlL2NvbXBvbmVudHMvc2hhcmUvc2hhcmUubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkRWZmZWN0cyB7XG4gIGpvaW4kID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuam9pbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJhbmspLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMudGVuYW50cyksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5nbG9iYWxNYW5pZmVzdCksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcyksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5wcmVzZW50YXRpb24pLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGlzcGxheU9wdGlvbnMpXG4gICAgICApLFxuICAgICAgZmlsdGVyKChbYWN0aW9uLCByYW5rLCB0ZW5hbnRzLCBtYW5pZmVzdCwgcmVzdWx0U2V0cywgZGlzcGxheV0pID0+IHJhbmsgPT09IDApLFxuICAgICAgbWFwKChbYWN0aW9uLCByYW5rLCB0ZW5hbnRzLCBtYW5pZmVzdCwgcmVzdWx0U2V0cywgc2VsZWN0ZWRJZHMsIHByZXNlbnRhdGlvbiwgZGlzcGxheV0pID0+XG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RBZnRlclRlbmFudEpvaW4oe1xuICAgICAgICAgIHRlbmFudHMsIC8vIHdlIGFscmVhZHkgaGF2ZSBhZGRlZCB0ZW5hbnQgaW4gdGhlIHJlZHVjZSBvZiB0aGUgXCJqb2luXCIgYWN0aW9uXG4gICAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAgIC4uLm1hbmlmZXN0LFxuICAgICAgICAgICAgd2luZG93czogbWFuaWZlc3Qud2luZG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0U2V0cyxcbiAgICAgICAgICBzZWxlY3RlZElkcyxcbiAgICAgICAgICBqb2luaW5nOiB0cnVlLFxuICAgICAgICAgIHByZXNlbnRhdGlvbixcbiAgICAgICAgICBkaXNwbGF5XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxlYXZlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmxlYXZlKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmFuayksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy50ZW5hbnRzKSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdsb2JhbE1hbmlmZXN0KSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcylcbiAgICAgICksXG4gICAgICBmaWx0ZXIoKFthY3Rpb24sIHJhbmssIHRlbmFudHMsIG1hbmlmZXN0XSkgPT4gcmFuayA9PT0gMCB8fCAodGVuYW50c1swXSA9PT0gYWN0aW9uLnNlbmRlciAmJiByYW5rID09PSAxKSksXG4gICAgICBtYXAoKFthY3Rpb24sIHJhbmssIHRlbmFudHMsIG1hbmlmZXN0LCBzZWxlY3RlZElkc10pID0+IHtcbiAgICAgICAgY29uc3QgbGVhdmVyUmFuayA9IHRlbmFudHMuaW5kZXhPZihhY3Rpb24uc2VuZGVyKTtcbiAgICAgICAgY29uc3QgbmV3VGVuYW50c0xpc3QgPSBbLi4udGVuYW50c107XG4gICAgICAgIGNvbnN0IG5ld1dpbmRvd0xpc3QgPSBbLi4ubWFuaWZlc3Qud2luZG93c107XG4gICAgICAgIGlmIChsZWF2ZXJSYW5rID4gLTEpIHtcbiAgICAgICAgICBuZXdUZW5hbnRzTGlzdC5zcGxpY2UobGVhdmVyUmFuaywgMSk7XG4gICAgICAgICAgbmV3V2luZG93TGlzdC5zcGxpY2UobGVhdmVyUmFuaywgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdEFmdGVyVGVuYW50TGVhdmUoe1xuICAgICAgICAgIHRlbmFudHM6IG5ld1RlbmFudHNMaXN0LFxuICAgICAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgICAgICAuLi5tYW5pZmVzdCxcbiAgICAgICAgICAgIHdpbmRvd3M6IG5ld1dpbmRvd0xpc3RcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGVkSWRzXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgZmV0Y2hTdGF0aWNNYW5pZmVzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5mZXRjaFN0YXRpY01hbmlmZXN0KSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSwgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcykpLFxuICAgICAgZmlsdGVyKChbYWN0aW9uLCByYW5rXSkgPT4gcmFuayA9PT0gMCksXG4gICAgICBtZXJnZU1hcCgoW2FjdGlvbiwgcmFua10pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlXG4gICAgICAgICAgLmdldChhY3Rpb24uaWQpXG4gICAgICAgICAgLnBpcGUobWFwKChzdGF0aWNNYW5pZmVzdCkgPT4gRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVTdGF0aWNNYW5pZmVzdCh7IHN0YXRpY01hbmlmZXN0IH0pKSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbG9hZEFuZEFjdGl2YXRlTWFuaWZlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMubG9hZEFuZEFjdGl2YXRlTWFuaWZlc3QsIERhc2hib2FyZEFjdGlvbnMubG9hZE1hbmlmZXN0KSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSwgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcykpLFxuICAgICAgZmlsdGVyKChbYWN0aW9uLCByYW5rXSkgPT4gcmFuayA9PT0gMCksXG4gICAgICBtZXJnZU1hcCgoW2FjdGlvbiwgcmFuaywgc2VsZWN0ZWRJZHNdKSA9PlxuICAgICAgICB0aGlzLm1hbmlmZXN0U2VydmljZS5nZXQoYWN0aW9uLmlkKS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKChtYW5pZmVzdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi50eXBlID09PSBEYXNoYm9hcmRBY3Rpb25zLmxvYWRBbmRBY3RpdmF0ZU1hbmlmZXN0LnR5cGVcbiAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJGZXRjaCh7IG1hbmlmZXN0LCBtYW5pZmVzdElkOiBhY3Rpb24uaWQsIHNlbGVjdGVkSWRzIH0pLFxuICAgICAgICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5mb2xsb3dNYW5pZmVzdFJvdXRlKClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIDogW0Rhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RXaXRob3V0QWN0aXZhdGlvbih7IG1hbmlmZXN0LCBtYW5pZmVzdElkOiBhY3Rpb24uaWQsIHNlbGVjdGVkSWRzIH0pXTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGNsZWFyTWFuaWZlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuY2xlYXJNYW5pZmVzdCksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdsb2JhbE1hbmlmZXN0KSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcylcbiAgICAgICksXG4gICAgICBtYXAoKFthY3Rpb24sIG1hbmlmZXN0LCBzZWxlY3RlZElkc10pID0+XG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RBZnRlckZldGNoKHsgbWFuaWZlc3QsIG1hbmlmZXN0SWQ6ICcnLCBzZWxlY3RlZElkcyB9KVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkb3dubG9hZE1hbmlmZXN0JCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5kb3dubG9hZE1hbmlmZXN0KSxcbiAgICAgICAgdGFwKChhY3Rpb24pID0+XG4gICAgICAgICAgdGhpcy5tYW5pZmVzdFNlcnZpY2UuZ2V0KGFjdGlvbi5pZCkuc3Vic2NyaWJlKChtYW5pZmVzdDogR2xvYmFsTWFuaWZlc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSAnZGF0YTp0ZXh0L2pzb247Y2hhcnNldD11dGYtOCwnICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KG1hbmlmZXN0KSk7XG4gICAgICAgICAgICBjb25zdCBkbEFuY2hvckVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICBkbEFuY2hvckVsZW0uc2V0QXR0cmlidXRlKCdocmVmJywgZGF0YVN0cik7XG4gICAgICAgICAgICBkbEFuY2hvckVsZW0uc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGAke2FjdGlvbi5uYW1lfS5qc29uYCk7XG4gICAgICAgICAgICBkbEFuY2hvckVsZW0uY2xpY2soKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApLFxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgKTtcblxuICBmb2xsb3dNYW5pZmVzdFJvdXRlJCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5mb2xsb3dNYW5pZmVzdFJvdXRlKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLndpbmRvd01hbmlmZXN0KSksXG4gICAgICAgIHRhcCgoW2FjdGlvbiwgbWFuaWZlc3RdKSA9PiB7XG4gICAgICAgICAgaWYgKG1hbmlmZXN0LnJvdXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKG1hbmlmZXN0LnJvdXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApLFxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgKTtcblxuICBlbmRMb2FkaW5nQWZ0ZXJGb2xsb3dpbmdNYW5pZmVzdFJvdXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmZvbGxvd01hbmlmZXN0Um91dGUpLFxuICAgICAgbWFwKChhY3Rpb24pID0+IERhc2hib2FyZEFjdGlvbnMuZW5kTG9hZGluZygpKVxuICAgIClcbiAgKTtcblxuICByZXF1ZXN0TWFuaWZlc3RSb3V0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5yZXF1ZXN0QWxsUm91dGVzKSxcbiAgICAgIG1hcCgoKSA9PiBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZVJvdXRlTWFuaWZlc3QoeyByb3V0ZTogdGhpcy5yb3V0ZXIudXJsIH0pKVxuICAgIClcbiAgKTtcblxuICBhc3NlcnRSZXN1bHRTZXRzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hc3NlcnRSZXN1bHRTZXRzLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmRpc3BhdGNoRmlsdGVycyxcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5jbGVhckFsbEZpbHRlclZhbHVlc1xuICAgICAgKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmVzdWx0U2V0cyksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzUGFyYW1zKSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnF1aWNrT3JkZXIpXG4gICAgICApLFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb24sIG1hbmlmZXN0LCByZXN1bHRTZXRzLCByZXN1bHRTZXRzUGFyYW1zLCBxdWlja09yZGVyXSkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICghYWN0aW9uLmlkKSB7XG4gICAgICAgICAgLy8gRmlyc3Qgc2VuZCBhZ2dyZWdhdGUgdXBkYXRlc1xuICAgICAgICAgIGNvbnN0IHRvQWdncmVnYXRlQWN0aW9ucyA9IChcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgICAgICBtYW5pZmVzdC53aW5kb3dzXG4gICAgICAgICAgICAgICAgICAubWFwKCh3aW5NYW5pZmVzdCkgPT4gKHdpbk1hbmlmZXN0ID8/IHt9KS53aWRnZXRzID8/IFtdKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHdpZE1hbmlmZXN0KSA9PiB0aGlzLndpZGdldEZhY3RvcnlTZXJ2aWNlLmFnZ3JlZ2F0ZXNUb0F1dG9Mb2FkKHdpZE1hbmlmZXN0KSlcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10gYXMgc3RyaW5nW10pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0gYXMgc3RyaW5nW11cbiAgICAgICAgICApLm1hcCgoZHMpID0+IERhc2hib2FyZEFjdGlvbnMudHJpZ2dlckFnZ3JlZ2F0ZSh7IGlkOiBkcyB9KSk7XG5cbiAgICAgICAgICBjb25zdCB0b0l0ZW1zQWN0aW9ucyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICAgICAgICBtYW5pZmVzdC53aW5kb3dzXG4gICAgICAgICAgICAgIC5tYXAoKHdpbk1hbmlmZXN0KSA9PiAod2luTWFuaWZlc3QgPz8ge30pLndpZGdldHMgPz8gW10pXG4gICAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pXG4gICAgICAgICAgICAgIC5tYXAoKHdpZE1hbmlmZXN0KSA9PiB0aGlzLndpZGdldEZhY3RvcnlTZXJ2aWNlLmRhdGFzb3VyY2VzVG9BdXRvTG9hZCh3aWRNYW5pZmVzdCkpXG4gICAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAocCwgYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICAgICAgICBbYy5kYXRhc2V0SWRdOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnBbYy5kYXRhc2V0SWRdLFxuICAgICAgICAgICAgICAgICAgICAuLi5jLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlR2VvOiBwW2MuZGF0YXNldElkXT8uZXhjbHVkZUdlbyA9PT0gZmFsc2UgPyBwW2MuZGF0YXNldElkXS5leGNsdWRlR2VvIDogYy5leGNsdWRlR2VvXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB7IGRhdGFzZXRJZDogc3RyaW5nOyBleGNsdWRlR2VvOiBib29sZWFuIH0gfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHJlc3VsdFNldCkgPT5cbiAgICAgICAgICAgICAgICAhIXJlc3VsdFNldC5kYXRhc2V0SWQgJiZcbiAgICAgICAgICAgICAgICByZXN1bHRTZXQuZGF0YXNldElkICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgICghcmVzdWx0U2V0c1tyZXN1bHRTZXQuZGF0YXNldElkXSB8fFxuICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0c1BhcmFtc1tyZXN1bHRTZXQuZGF0YXNldElkXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEl0ZW1zU2VyaWFsaXplZFBhcmFtcyhyZXN1bHRTZXQuZGF0YXNldElkLCBxdWlja09yZGVyKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKHJlc3VsdFNldCkgPT5cbiAgICAgICAgICAgICAgU2VhcmNoQWN0aW9ucy5nZXREYXRhc291cmNlSXRlbXMoe1xuICAgICAgICAgICAgICAgIGlkOiByZXN1bHRTZXQuZGF0YXNldElkLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVHZW86IHJlc3VsdFNldC5leGNsdWRlR2VvLFxuICAgICAgICAgICAgICAgIGZyb206ICdEYXNoYm9hcmRFZmZlY3RzLmFzc2VydFJlc3VsdFNldHMkLTEnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIFsuLi50b0l0ZW1zQWN0aW9ucywgLi4udG9BZ2dyZWdhdGVBY3Rpb25zXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgaWYgKCFyZXN1bHRTZXRzW2FjdGlvbi5pZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIFNlYXJjaEFjdGlvbnMuZ2V0RGF0YXNvdXJjZUl0ZW1zKHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgaWQ6IGFjdGlvbi5pZCBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUdlbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmcm9tOiAnRGFzaGJvYXJkRWZmZWN0cy5hc3NlcnRSZXN1bHRTZXRzJC0yJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBzZW5kQWdncmVnYXRlc0V2ZW50JCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy50cmlnZ2VyQWdncmVnYXRlKSxcbiAgICAgICAgZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5pZCAhPT0gREVGQVVMVF9OQU1FRF9RVUVSWV9JRCAmJiBhY3Rpb24uaWQgIT09IEVYUExPUkVfTkFNRURfUVVFUllfSUQpLFxuICAgICAgICB0YXAoKGFjdGlvbikgPT4gd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkYXRhc291cmNlUmVmcmVzaCcsIHsgZGV0YWlsOiBhY3Rpb24uaWQgfSkpKVxuICAgICAgKSxcbiAgICB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gICk7XG5cbiAgc3RhcnRNaXNzaW5nVmlld0FmdGVyVmlld1VwZGF0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3QsXG4gICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3RBZnRlckZldGNoLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJUZW5hbnRMZWF2ZSxcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdEFmdGVyVGVuYW50Sm9pbixcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5leHBsb3JlLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmRldGFpbCxcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5yZXN0b3JlSW5pdGlhbE1hbmlmZXN0LFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmNyZWF0ZVRhYlxuICAgICAgKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSksXG4gICAgICBmaWx0ZXIoKFthY3Rpb24sIHJhbmtdKSA9PiByYW5rID09PSAwKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+IFtcbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5zdGFydGluZ01pc3NpbmdWaWV3cygpLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmFzc2VydFJlc3VsdFNldHMoe30pLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnNvbHZlQ29sbGlzaW9ucygpXG4gICAgICBdKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVUaXRsZSQgPSBjcmVhdGVFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3QsXG4gICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdEFmdGVyVGVuYW50Sm9pbixcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJUZW5hbnRMZWF2ZSxcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnVwZGF0ZU1hbmlmZXN0QWZ0ZXJGZXRjaCxcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmRlY2xhcmVTZW5kZXJJZFxuICAgICAgICApLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmFuaykpLFxuICAgICAgICB0YXAoKFthY3Rpb24sIHJhbmtdKSA9PiB7XG4gICAgICAgICAgdGhpcy50aXRsZVNlcnZpY2UuY2hhbmdlVGl0bGUoKTtcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgeyBkaXNwYXRjaDogZmFsc2UgfVxuICApO1xuXG4gIG9wZW5PdGhlciQgPSBjcmVhdGVFZmZlY3QoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuc3RhcnRpbmdNaXNzaW5nVmlld3MpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbShcbiAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmFuayksXG4gICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnRlbmFudHMpLFxuICAgICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5nbG9iYWxNYW5pZmVzdClcbiAgICAgICAgKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxuICAgICAgICBmaWx0ZXIoKFthY3Rpb24sIHJhbmssIHRlbmFudHMsIG1hbmlmZXN0XSkgPT4gcmFuayA9PT0gMCksXG4gICAgICAgIHRhcCgoW2FjdGlvbiwgcmFuaywgdGVuYW50cywgbWFuaWZlc3RdKSA9PiB7XG4gICAgICAgICAgbWFuaWZlc3Qud2luZG93cy5mb3JFYWNoKCh3aW5kb3dNYW5pZmVzdCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGVuYW50c1tpbmRleF0pIHtcbiAgICAgICAgICAgICAgLy8gSWYgbm8gd2luZG93IGlzIG9wZW5lZCBmb3IgdGhpcyBwYXJ0LCB0aGVuIG9wZW4gb25lXG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHdpbmRvd01hbmlmZXN0LnJvdXRlID8/IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgJ19ibGFuaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gICk7XG5cbiAgc2F2ZU1hbmlmZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLnNhdmVNYW5pZmVzdCksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpKSxcbiAgICAgIG1lcmdlTWFwKChbYWN0aW9uLCBjdXJyZW50TWFuaWZlc3RdKSA9PlxuICAgICAgICB0aGlzLm1hbmlmZXN0U2VydmljZVxuICAgICAgICAgIC5zYXZlKFxuICAgICAgICAgICAgYWN0aW9uLm5hbWUsXG4gICAgICAgICAgICBhY3Rpb24ubWFuaWZlc3QgPz8gY3VycmVudE1hbmlmZXN0LFxuICAgICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgICAgYWN0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYWN0aW9uLmltYWdlLFxuICAgICAgICAgICAgYWN0aW9uLmNvdmVyLFxuICAgICAgICAgICAgYWN0aW9uLm1ldGFkYXRhLFxuICAgICAgICAgICAgYWN0aW9uLmdyb3VwcyxcbiAgICAgICAgICAgIGFjdGlvbi52aXNpYmlsaXR5ID8/IHsgdHlwZTogUHJ5VmlzaWJpbGl0eVR5cGUuUFJJVkFURSB9XG4gICAgICAgICAgKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5zYXZlZCcsIHsgdmlld0lkOiBhY3Rpb24ubmFtZSB9KSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcydcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAoKCkgPT4gYWN0aW9uLm1hbmlmZXN0ID8/IGN1cnJlbnRNYW5pZmVzdCksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5zYXZlRXJyb3JDb2RlLicgKyAoZXJyb3IuZXJyb3I/LmNvZGUgPz8gJ1VOS05PV04nKSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIG1lcmdlTWFwKChtYW5pZmVzdCkgPT4gW1xuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmZldGNoTWFuaWZlc3RzTGlzdCgpLFxuICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnNldEluaXRpYWxQcmVzZW50YXRpb24oeyBpbml0aWFsOiBtYW5pZmVzdCB9KVxuICAgICAgXSlcbiAgICApXG4gICk7XG5cbiAgbGlzdE1hbmlmZXN0cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5mZXRjaE1hbmlmZXN0c0xpc3QpLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJhbmspKSxcbiAgICAgIGZpbHRlcigoW2FjdGlvbiwgcmFua10pID0+IHJhbmsgPT09IDAgfHwgcmFuayA9PT0gLTEpLFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb24sIHJhbmtdKSA9PlxuICAgICAgICB0aGlzLm1hbmlmZXN0U2VydmljZS5saXN0KCkucGlwZShtYXAoKG1hbmlmZXN0cykgPT4gRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdHNMaXN0KHsgbWFuaWZlc3RzIH0pKSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY29uZmlybU1hbmlmZXN0RGVsZXRpb24kID0gY3JlYXRlRWZmZWN0KFxuICAgICgpID0+XG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmNvbmZpcm1NYW5pZmVzdERlbGV0aW9uKSxcbiAgICAgICAgdGFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhOiBQcnlEaWFsb2dDb25maXJtRGF0YSA9IHtcbiAgICAgICAgICAgIHRpdGxlOiAnQHByeS53aWRnZXQubW9kYWxUaXRsZScsXG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogMCxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZScsXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW0Rhc2hib2FyZEFjdGlvbnMuZGVsZXRlTWFuaWZlc3QoeyBpZDogYWN0aW9uLmlkIH0pXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnc2Vjb25kYXJ5J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnByeURpYWxvZy5vcGVuKFByeURpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHsgZGF0YSB9KTtcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgeyBkaXNwYXRjaDogZmFsc2UgfVxuICApO1xuXG4gIGRlbGV0ZU1hbmlmZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmRlbGV0ZU1hbmlmZXN0KSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlLmRlbGV0ZShhY3Rpb24uaWQpLnBpcGUobWFwKCgpID0+IERhc2hib2FyZEFjdGlvbnMuZmV0Y2hNYW5pZmVzdHNMaXN0KCkpKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBmZXRjaE9iamVjdHNEZXRhaWxzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmZldGNoT2JqZWN0c0RldGFpbHMpLFxuICAgICAgbWVyZ2VNYXAoKGFjdGlvbikgPT4gbWVyZ2UoLi4uYWN0aW9uLmlkcy5tYXAoKGlkKSA9PiB0aGlzLml0ZW1TZXJ2aWNlLmdldChpZCkpKSksXG4gICAgICBtYXAoKGl0ZW0pID0+IERhc2hib2FyZEFjdGlvbnMudXBkYXRlT2JqZWN0c0RldGFpbHMoeyBsaXN0OiB7IFtpdGVtLmlkXTogaXRlbSB9IH0pKVxuICAgIClcbiAgKTtcblxuICBwcm94aW1pdHlTZWFyY2gkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMucHJveGltaXR5KSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yZXN1bHRTZXRzKSksXG4gICAgICBtZXJnZU1hcCgoW2FjdGlvbiwgcmVzdWx0U2V0c10pID0+XG4gICAgICAgIHRoaXMuaXRlbVNlcnZpY2UucHJveGltaXR5KGFjdGlvbi5pZCkucGlwZShcbiAgICAgICAgICBtYXAoKHByb3hScykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIERhc2hib2FyZEFjdGlvbnMudXBkYXRlUmVzdWx0U2V0KHtcbiAgICAgICAgICAgICAgaWQ6IGFjdGlvbi50YXJnZXRSZXN1bHRTZXQsXG4gICAgICAgICAgICAgIHJlc3VsdFNldDogUmVzdWx0c2V0VXRpbHMubWVyZ2VSZXN1bHRTZXRzKHByb3hScywgcmVzdWx0U2V0c1thY3Rpb24udGFyZ2V0UmVzdWx0U2V0XSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZXhwbG9yZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5leHBsb3JlKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+IFtEYXNoYm9hcmRBY3Rpb25zLnByb3hpbWl0eSh7IGlkOiBhY3Rpb24uaWQsIHRhcmdldFJlc3VsdFNldDogRVhQTE9SRV9OQU1FRF9RVUVSWV9JRCB9KV0pXG4gICAgKVxuICApO1xuXG4gIGRldGFpbEFzTG9hZEluV2lkZ2V0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmRldGFpbCksXG4gICAgICBtYXAoKGFjdGlvbikgPT5cbiAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5hZGRXaWRnZXRUb1ByZXNlbnRhdGlvbih7XG4gICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgIHdpZGdldFR5cGU6ICdkZXRhaWwnLFxuICAgICAgICAgIGFkZGl0aW9uYWxPcHRpb25zOiB7XG4gICAgICAgICAgICBpdGVtSWRzOiBhY3Rpb24uaWRzXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVXaWRnZXRJblByZXNlbnRhdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVXaWRnZXRJblByZXNlbnRhdGlvbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpKSxcbiAgICAgIG1lcmdlTWFwKChbYWN0aW9uLCBtYW5pZmVzdF0pID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYSB3aWRnZXQgd2l0aCBzYW1lIGRhdGFzb3VyY2UgYW5kIHR5cGUgYWxyZWFkeSBleGlzdCBpbiBjdXJyZW50IHByZXNlbnRhdGlvblxuICAgICAgICBjb25zdCB3aWRnZXRUb01hdGNoID0gdGhpcy50b29sYm94TWFuaWZlc3RTZXJ2aWNlLmdldChhY3Rpb24ud2lkZ2V0VHlwZSk7XG5cbiAgICAgICAgbGV0IGFkZGl0aW9uYWxNYXRjaGluZ0ZuOiAob3B0aW9uc1RvTWF0Y2g6IGFueSwgb3B0aW9uczogYW55KSA9PiBib29sZWFuO1xuICAgICAgICBzd2l0Y2ggKHdpZGdldFRvTWF0Y2gudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2NoYXJ0JzpcbiAgICAgICAgICAgIGFkZGl0aW9uYWxNYXRjaGluZ0ZuID0gKG9wdGlvbnNUb01hdGNoOiBDaGFydFdpZGdldE9wdGlvbnMsIG9wdGlvbnM6IENoYXJ0V2lkZ2V0T3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgb3B0aW9uc1RvTWF0Y2gudHlwZSA9PT0gb3B0aW9ucy50eXBlICYmIG9wdGlvbnNUb01hdGNoLnN1YlR5cGUgPT09IG9wdGlvbnMuc3ViVHlwZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21hcCc6XG4gICAgICAgICAgICBhZGRpdGlvbmFsTWF0Y2hpbmdGbiA9IChvcHRpb25zVG9NYXRjaDogTWFwV2lkZ2V0T3B0aW9ucywgb3B0aW9uczogTWFwV2lkZ2V0T3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgISFvcHRpb25zLmxheWVycyEuZmluZCgobGF5ZXIpID0+IGxheWVyLnR5cGUgPT09IG9wdGlvbnNUb01hdGNoLmxheWVycyFbMF0udHlwZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYWRkaXRpb25hbE1hdGNoaW5nRm4gPSAob3B0aW9uc1RvTWF0Y2g6IGFueSwgb3B0aW9uczogYW55KSA9PiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0Y2hpbmdXaWRnZXRzID0gbWFuaWZlc3Qud2luZG93cy5tYXAoKHdpbmRvdykgPT5cbiAgICAgICAgICB3aW5kb3cud2lkZ2V0c1xuICAgICAgICAgICAgLmZpbHRlcigod2lkZ2V0KSA9PiB3aWRnZXQudHlwZSA9PT0gd2lkZ2V0VG9NYXRjaC50eXBlKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgKHdpZGdldCkgPT5cbiAgICAgICAgICAgICAgICB3aWRnZXQuZGF0YXNvdXJjZSA9PT0gYWN0aW9uLmlkIHx8XG4gICAgICAgICAgICAgICAgKHdpZGdldC5kYXRhc291cmNlIVswXSA9PT0gYWN0aW9uLmlkICYmIHdpZGdldC5kYXRhc291cmNlIS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZmluZCgod2lkZ2V0KSA9PiBhZGRpdGlvbmFsTWF0Y2hpbmdGbih3aWRnZXRUb01hdGNoLm9wdGlvbnMsIHdpZGdldC5vcHRpb25zKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBhbHJlYWR5TWF0Y2hlZFdpZGdldCA9IG1hdGNoaW5nV2lkZ2V0cy5maW5kKCh3aW5kb3cpID0+ICEhd2luZG93KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKGFscmVhZHlNYXRjaGVkV2lkZ2V0KSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLm11bHRpU25hY2tCYXIoe1xuICAgICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC51cGRhdGVkSW5WaWV3Jywge1xuICAgICAgICAgICAgICAgICAgaW5kZXg6IG1hdGNoaW5nV2lkZ2V0cy5maW5kSW5kZXgoKHdpZGdldCkgPT4gISF3aWRnZXQpICsgMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChEYXNoYm9hcmRBY3Rpb25zLmFkZFdpZGdldFRvUHJlc2VudGF0aW9uKHsgLi4uYWN0aW9uIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBhZGRXaWRnZXRUb1ByZXNlbnRhdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5hZGRXaWRnZXRUb1ByZXNlbnRhdGlvbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmdyaWRMYXlvdXQpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpLFxuICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMucmFuayksXG4gICAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5kYXNoYm9hcmRDZWxsUGFyYW1zKSxcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcylcbiAgICAgICksXG4gICAgICBtYXAoKFthY3Rpb24sIGxheW91dCwgX2dsb2JhbE1hbmlmZXN0LCByYW5rLCBwYXJhbXMsIHNlbGVjdGVkSWRzXSkgPT4ge1xuICAgICAgICBjb25zdCBtYW5pZmVzdEdsb2JhbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX2dsb2JhbE1hbmlmZXN0KSkgYXMgR2xvYmFsTWFuaWZlc3Q7XG5cbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSB0aGlzLnRvb2xib3hNYW5pZmVzdFNlcnZpY2UuZ2V0KGFjdGlvbi53aWRnZXRUeXBlKSA/PyB7XG4gICAgICAgICAgb3B0aW9uczoge30sXG4gICAgICAgICAgdHlwZTogYWN0aW9uLndpZGdldFR5cGVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV3V2lkZ2V0TWFuaWZlc3QgPSB7XG4gICAgICAgICAgLi4ubmV3T3B0aW9ucyxcbiAgICAgICAgICBsYXlvdXQ6IHt9LFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLm5ld09wdGlvbnMub3B0aW9ucyxcbiAgICAgICAgICAgIC4uLmFjdGlvbi5hZGRpdGlvbmFsT3B0aW9uc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBXaWRnZXRNYW5pZmVzdDtcblxuICAgICAgICBpZiAoISFhY3Rpb24uaWQpIHtcbiAgICAgICAgICBuZXdXaWRnZXRNYW5pZmVzdC5kYXRhc291cmNlID0gYWN0aW9uLmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZvdW5kOiB7IGFjdHVhbFJhbms6IG51bWJlcjsgd2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIC8vIFRyeSB0byBmaW5kIGEgc3BvdCBpbiB3aW5kb3dzIChzdGFydGluZyBieSBjdXJyZW50IHJhbmssIHRoZW4gaW4gb3RoZXJzKVxuICAgICAgICBjb25zdCBzZXF1ZW5jZSA9IFdpZGdldFBsYWNlbWVudFV0aWxzLnN3YXBBcnJheUVsZW1lbnRzKFxuICAgICAgICAgIG5ldyBBcnJheShtYW5pZmVzdEdsb2JhbC53aW5kb3dzLmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGlkeCwgYXJyYXkpID0+IGlkeCksXG4gICAgICAgICAgMCxcbiAgICAgICAgICByYW5rXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyeWluZyBhbGwgcGxhY2VtZW50IG9wdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCBhY3R1YWxSYW5rIG9mIHNlcXVlbmNlKSB7XG4gICAgICAgICAgY29uc3Qgd2luZG93TGF5b3V0ID0gbWFuaWZlc3RHbG9iYWwud2luZG93c1thY3R1YWxSYW5rXS5ncmlkPy5sYXlvdXQgPz8gRGFzaGJvYXJkR3JpZExheW91dC5GVUxMO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKG5ld1dpZGdldE1hbmlmZXN0LCB3aW5kb3dMYXlvdXQsIHBhcmFtcyk7XG4gICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gQXJlIHdlIGRpc2pvaW50IGZyb20gYWxsIG90aGVyIHdpZGdldHMgP1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGlzam9pbnRGcm9tQWxsID0gKG1hbmlmZXN0R2xvYmFsLndpbmRvd3NbYWN0dWFsUmFua10ud2lkZ2V0cyA/PyBbXSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoKHdpZGdldCkgPT4gV2lkZ2V0UGxhY2VtZW50VXRpbHMuYXJlRGlzam9pbnQod2lkZ2V0LCBvcHRpb24pKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gcCAmJiBjLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNEaXNqb2ludEZyb21BbGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgZGlzam9pbnQgcGxhY2VtZW50ICFcbiAgICAgICAgICAgICAgICAgIGZvdW5kID0geyBhY3R1YWxSYW5rLCB3aWRnZXQ6IG9wdGlvbiB9IGFzIHsgYWN0dWFsUmFuazogbnVtYmVyOyB3aWRnZXQ6IFdpZGdldE1hbmlmZXN0IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEhZm91bmQpIHtcbiAgICAgICAgICBjb25zdCBwbGFjZVdlRm91bmQgPSBmb3VuZCBhcyB7IGFjdHVhbFJhbms6IG51bWJlcjsgd2lkZ2V0OiBXaWRnZXRNYW5pZmVzdCB9O1xuICAgICAgICAgIG1hbmlmZXN0R2xvYmFsLndpbmRvd3NbcGxhY2VXZUZvdW5kLmFjdHVhbFJhbmtdLndpZGdldHMucHVzaChwbGFjZVdlRm91bmQud2lkZ2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50V2luZG93TGF5b3V0ID0gbWFuaWZlc3RHbG9iYWwud2luZG93c1tyYW5rXS5ncmlkPy5sYXlvdXQgPz8gRGFzaGJvYXJkR3JpZExheW91dC5GVUxMO1xuXG4gICAgICAgICAgLy8gc2kgbm9uIHRyb3V2w6kgOiBub3V2ZWxsZSBwYWdlLCBwcmVtacOocmUgcG9zaXRpb24gc3VnZ8OpcsOpZVxuICAgICAgICAgIGNvbnN0IGZpcnN0UHJvcG9zZWRMYXlvdXQgPSBXaWRnZXRQbGFjZW1lbnRVdGlscy5wbGFjZW1lbnRPcHRpb25zKFxuICAgICAgICAgICAgbmV3V2lkZ2V0TWFuaWZlc3QsXG4gICAgICAgICAgICBjdXJyZW50V2luZG93TGF5b3V0LFxuICAgICAgICAgICAgcGFyYW1zXG4gICAgICAgICAgKVswXTtcblxuICAgICAgICAgIG1hbmlmZXN0R2xvYmFsLndpbmRvd3MucHVzaCh7IHdpZGdldHM6IFtmaXJzdFByb3Bvc2VkTGF5b3V0XSwgZ3JpZDogeyBsYXlvdXQ6IGN1cnJlbnRXaW5kb3dMYXlvdXQgfSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3Rpb24uYWxlcnQgPT09IHVuZGVmaW5lZCB8fCBhY3Rpb24uYWxlcnQgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlQWN0aW9uID0gRGFzaGJvYXJkQWN0aW9ucy5tdWx0aVNuYWNrQmFyKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQuYWRkZWRJblZpZXcnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6ICEhZm91bmRcbiAgICAgICAgICAgICAgICAgID8gKGZvdW5kIGFzIHsgYWN0dWFsUmFuazogbnVtYmVyOyB3aWRnZXQ6IFdpZGdldE1hbmlmZXN0IH0pLmFjdHVhbFJhbmsgKyAxXG4gICAgICAgICAgICAgICAgICA6IG1hbmlmZXN0R2xvYmFsLndpbmRvd3MubGVuZ3RoXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChtZXNzYWdlQWN0aW9uKTtcblxuICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuYnVzU2VydmljZS5idWZmZXJVbnRpbEpvaW5lZChtZXNzYWdlQWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdCh7IG1hbmlmZXN0OiBtYW5pZmVzdEdsb2JhbCwgc2VsZWN0ZWRJZHMgfSk7XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBtdWx0aVNuYWNrQmFyJCA9IGNyZWF0ZUVmZmVjdChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5tdWx0aVNuYWNrQmFyKSxcbiAgICAgICAgdGFwKChhY3Rpb24pID0+IHRoaXMuc25hY2tCYXIub3BlbihhY3Rpb24ubWVzc2FnZSkpXG4gICAgICApLFxuICAgIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAgKTtcblxuICByZWxhdW5jaEFmdGVyT3JkZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMucXVpY2tPcmRlciksXG4gICAgICBtYXAoKGFjdGlvbikgPT5cbiAgICAgICAgU2VhcmNoQWN0aW9ucy5nZXREYXRhc291cmNlSXRlbXMoe1xuICAgICAgICAgIGlkOiBhY3Rpb24uZGF0YXNvdXJjZUlkLFxuICAgICAgICAgIGV4Y2x1ZGVHZW86IHRydWUsXG4gICAgICAgICAgZnJvbTogJ0Rhc2hib2FyZEVmZmVjdHMucmVsYXVuY2hBZnRlck9yZGVyJCdcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcHJvcGFnYXRlR3JpZExheW91dCQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5zZXRHcmlkTGF5b3V0KSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5yYW5rKSwgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLndpbmRvd01hbmlmZXN0KSksXG4gICAgICBtYXAoKFthY3Rpb24sIHJhbmssIHdpbmRvd01hbmlmZXN0XSkgPT4gRGFzaGJvYXJkQWN0aW9ucy5wcm9wYWdhdGVHcmlkTGF5b3V0KHsgbWFuaWZlc3Q6IHdpbmRvd01hbmlmZXN0LCByYW5rIH0pKVxuICAgIClcbiAgKTtcblxuICB0b2dnbGVFZGl0aW9uTW9kZUlmTm90TWFudWFsJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLnNldEdyaWRMYXlvdXQpLFxuICAgICAgZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5sYXlvdXQgIT09IERhc2hib2FyZEdyaWRMYXlvdXQuTUFOVUFMKSxcbiAgICAgIG1hcCgoKSA9PiBEYXNoYm9hcmRBY3Rpb25zLnRvZ2dsZUVkaXRpb25Nb2RlKHsgZm9yY2U6IGZhbHNlIH0pKVxuICAgIClcbiAgKTtcblxuICBnZXRDYXBhYmlsaXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmdldENhcGFiaWxpdHkpLFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmNhcGFiaWxpdGllcykpLFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoW2FjdGlvbiwgY2FwYWJpbGl0aWVzXSkgPT5cbiAgICAgICAgICAoISFjYXBhYmlsaXRpZXMgJiYgISFhY3Rpb24udXJsICYmICghY2FwYWJpbGl0aWVzW2FjdGlvbi51cmxdIHx8ICFjYXBhYmlsaXRpZXNbYWN0aW9uLnVybF0hLmRvYykpIHx8XG4gICAgICAgICAgISFhY3Rpb24uZm9yY2VcbiAgICAgICksXG4gICAgICBtZXJnZU1hcCgoW2FjdGlvbiwgX10pID0+XG4gICAgICAgIHRoaXMud21zU2VydmljZS5nZXRDYXBhYmlsaXRpZXMoYWN0aW9uLnVybCkucGlwZShcbiAgICAgICAgICBtYXAoKGNhcGFiaWxpdHkpID0+IERhc2hib2FyZEFjdGlvbnMudXBkYXRlQ2FwYWJpbGl0eSh7IHVybDogYWN0aW9uLnVybCwgY2FwYWJpbGl0eSB9KSksXG4gICAgICAgICAgc3RhcnRXaXRoKERhc2hib2FyZEFjdGlvbnMudXBkYXRlQ2FwYWJpbGl0eSh7IHVybDogYWN0aW9uLnVybCwgY2FwYWJpbGl0eTogbnVsbCB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBnZXRXbXNGZWF0dXJlcyA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG9mVHlwZShEYXNoYm9hcmRBY3Rpb25zLmdldFdtc0ZlYXR1cmVzKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+IGNvbWJpbmVMYXRlc3QoW29mKGFjdGlvbiksIHRoaXMud21zU2VydmljZS5nZXRXbXNGZWF0dXJlcyhhY3Rpb24udXJsKV0pKSxcbiAgICAgIG1hcCgoW2FjdGlvbiwganNvbl0pID0+IHtcbiAgICAgICAgcmV0dXJuIERhc2hib2FyZEFjdGlvbnMuYWRkV21zRmVhdHVyZXMoe1xuICAgICAgICAgIGZlYXR1cmVzOiBqc29uLmZlYXR1cmVzLm1hcCgoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHtcbiAgICAgICAgICAgICAgaWQ6IGZlYXR1cmUuaWQsXG4gICAgICAgICAgICAgIG9DbGFzczogYWN0aW9uLm9DbGFzcyxcbiAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGFjdGlvbi5jb29yZGluYXRlcyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczogT2JqZWN0LmtleXMoZmVhdHVyZS5wcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgIC5tYXAoKHByb3BlcnR5KSA9PiAoeyBrZXk6IHByb3BlcnR5LCB2YWx1ZTogZmVhdHVyZS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSB9KSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChwcm9wKSA9PiAhIXByb3AudmFsdWUpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGFkZE1hbmlmZXN0TWV0YWRhdGEgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5hZGRNYW5pZmVzdE1ldGFkYXRhKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlLmFkZE1ldGFkYXRhKGFjdGlvbi5wcmVzZW50YXRpb25JZCwgYWN0aW9uLm1ldGFkYXRhSWQsIGFjdGlvbi52YWx1ZSkucGlwZShcbiAgICAgICAgICBtYXAoKCkgPT4gRGFzaGJvYXJkQWN0aW9ucy5mZXRjaE1hbmlmZXN0c0xpc3QoKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5zYXZlRXJyb3JDb2RlLlNBVkVfTUVUQURBVEEnLCB7XG4gICAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5zdGF0dXNcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlbGV0ZU1hbmlmZXN0TWV0YWRhdGEkID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgICAgb2ZUeXBlKERhc2hib2FyZEFjdGlvbnMuZGVsZXRlTWFuaWZlc3RNZXRhZGF0YSksXG4gICAgICBtZXJnZU1hcCgoYWN0aW9uKSA9PlxuICAgICAgICB0aGlzLm1hbmlmZXN0U2VydmljZVxuICAgICAgICAgIC5kZWxldGVNZXRhZGF0YShhY3Rpb24ucHJlc2VudGF0aW9uSWQsIGFjdGlvbi5tZXRhZGF0YUlkKVxuICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiBEYXNoYm9hcmRBY3Rpb25zLmZldGNoTWFuaWZlc3RzTGlzdCgpKSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbG9hZFByZXNlbnRhdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBvZlR5cGUoRGFzaGJvYXJkQWN0aW9ucy5sb2FkUHJlc2VudGF0aW9uKSxcbiAgICAgIHRhcCgoKSA9PlxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlTWFuaWZlc3Qoe1xuICAgICAgICAgICAgbWFuaWZlc3Q6IHsgd2luZG93czogW10gfSxcbiAgICAgICAgICAgIHNlbGVjdGVkSWRzOiBbXVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICB0YXAoKGFjdGlvbikgPT5cbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdFByZXNlbnRhdGlvbih7XG4gICAgICAgICAgICBwcmVzZW50YXRpb246IGFjdGlvbi5wcmVzZW50YXRpb24sXG4gICAgICAgICAgICB2aWV3TW9kZTogYWN0aW9uLnZpZXdNb2RlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHRhcCgoYWN0aW9uKSA9PiB0aGlzLnRpdGxlU2VydmljZS5jaGFuZ2VUaXRsZShhY3Rpb24ucHJlc2VudGF0aW9uLm5hbWUpKSxcbiAgICAgIG1lcmdlTWFwKChhY3Rpb24pID0+XG4gICAgICAgIHRoaXMubWFuaWZlc3RTZXJ2aWNlLmdldChhY3Rpb24ucHJlc2VudGF0aW9uLmlkKS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKChtYW5pZmVzdCkgPT4gW1xuICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVNYW5pZmVzdCh7XG4gICAgICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICAgICAgICBzZWxlY3RlZElkczogW10sXG4gICAgICAgICAgICAgIG1hbmlmZXN0SWQ6IGFjdGlvbi5wcmVzZW50YXRpb24uaWRcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy5zZXRJbml0aWFsUHJlc2VudGF0aW9uKHtcbiAgICAgICAgICAgICAgaW5pdGlhbDogYWN0aW9uLnZpZXdNb2RlID09PSBWaWV3TW9kZS5DT05TVUxUID8gdW5kZWZpbmVkIDogbWFuaWZlc3RcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVEaXNwbGF5T3B0aW9ucyh7XG4gICAgICAgICAgICAgIG1vZGU6IGFjdGlvbi52aWV3TW9kZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmZvbGxvd01hbmlmZXN0Um91dGUoKVxuICAgICAgICAgIF0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRJbml0U2VydmljZTogRGFzaGJvYXJkSW5pdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgbWFuaWZlc3RTZXJ2aWNlOiBNYW5pZmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFByeVRpdGxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IFByeVNuYWNrYmFyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVmcmVzaFNlcnZpY2U6IFJlZnJlc2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbGJveE1hbmlmZXN0U2VydmljZTogVG9vbGJveE1hbmlmZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGJ1c1NlcnZpY2U6IEJ1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJ5RGlhbG9nOiBQcnlEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgd21zU2VydmljZTogV21zU2VydmljZSxcbiAgICBwcml2YXRlIHdpZGdldEZhY3RvcnlTZXJ2aWNlOiBXaWRnZXRGYWN0b3J5U2VydmljZVxuICApIHtcbiAgICBkYXNoYm9hcmRJbml0U2VydmljZS5pbml0KCk7XG4gICAgcmVmcmVzaFNlcnZpY2Uuc3RhcnQoKTtcbiAgfVxufVxuIl19