@provoly/dashboard 0.14.4 → 0.14.6

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 (91) hide show
  1. package/admin/admin.module.d.ts +2 -1
  2. package/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.d.ts +5 -2
  3. package/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.d.ts +7 -3
  4. package/admin/i18n/en.translations.d.ts +15 -0
  5. package/admin/i18n/fr.translations.d.ts +15 -0
  6. package/esm2022/admin/admin.module.mjs +8 -4
  7. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +3 -3
  8. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +19 -14
  9. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +3 -5
  10. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +23 -12
  11. package/esm2022/admin/i18n/en.translations.mjs +17 -2
  12. package/esm2022/admin/i18n/fr.translations.mjs +19 -4
  13. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +4 -3
  14. package/esm2022/import/components/import.component.mjs +12 -5
  15. package/esm2022/import/i18n/en.translations.mjs +3 -2
  16. package/esm2022/import/i18n/fr.translations.mjs +3 -2
  17. package/esm2022/import/import.module.mjs +7 -4
  18. package/esm2022/import/store/import.actions.mjs +1 -1
  19. package/esm2022/import/store/import.effects.mjs +2 -2
  20. package/esm2022/import/store/import.service.mjs +3 -2
  21. package/esm2022/lib/core/components/translate-id/translate-id.pipe.mjs +9 -9
  22. package/esm2022/lib/core/i18n/en.translations.mjs +2 -1
  23. package/esm2022/lib/core/i18n/fr.translations.mjs +2 -1
  24. package/esm2022/lib/core/model/admin-api.model.mjs +66 -14
  25. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  26. package/esm2022/lib/core/store/field/field.interface.mjs +10 -1
  27. package/esm2022/lib/core/symbol/symbol.service.mjs +7 -3
  28. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +17 -1
  29. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +2 -1
  30. package/esm2022/lib/dashboard/action-bus/service/bus.service.mjs +1 -1
  31. package/esm2022/lib/dashboard/components/dashboard.component.mjs +5 -5
  32. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +9 -3
  33. package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +25 -13
  34. package/esm2022/pipeline/pipeline.module.mjs +8 -4
  35. package/esm2022/supervision/store/supervision.reducer.mjs +2 -7
  36. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +34 -3
  37. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +72 -16
  38. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +3 -2
  39. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +3 -2
  40. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +14 -8
  41. package/fesm2022/provoly-dashboard-admin.mjs +79 -31
  42. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  43. package/fesm2022/provoly-dashboard-dataset.mjs +3 -2
  44. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  45. package/fesm2022/provoly-dashboard-import.mjs +23 -10
  46. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  47. package/fesm2022/provoly-dashboard-pipeline.mjs +27 -11
  48. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  49. package/fesm2022/provoly-dashboard-supervision.mjs +1 -6
  50. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  51. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +540 -446
  52. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  53. package/fesm2022/provoly-dashboard.mjs +174 -85
  54. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  55. package/import/components/import.component.d.ts +1 -0
  56. package/import/i18n/en.translations.d.ts +1 -0
  57. package/import/i18n/fr.translations.d.ts +1 -0
  58. package/import/import.module.d.ts +2 -1
  59. package/import/store/import.actions.d.ts +2 -0
  60. package/import/store/import.service.d.ts +1 -1
  61. package/lib/core/components/translate-id/translate-id.pipe.d.ts +1 -1
  62. package/lib/core/i18n/en.translations.d.ts +1 -0
  63. package/lib/core/i18n/fr.translations.d.ts +1 -0
  64. package/lib/core/model/admin-api.model.d.ts +1 -0
  65. package/lib/core/model/widget-map-manifest.interface.d.ts +11 -1
  66. package/lib/core/store/field/field.interface.d.ts +1 -0
  67. package/lib/core/symbol/symbol.service.d.ts +1 -1
  68. package/lib/dashboard/components/dashboard.component.d.ts +1 -1
  69. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +3 -1
  70. package/package.json +42 -42
  71. package/pipeline/components/pipeline-list/pipeline-list.component.d.ts +1 -0
  72. package/pipeline/pipeline.module.d.ts +2 -1
  73. package/schematics/migration.json +5 -0
  74. package/schematics/ng-update/utils/replaceStrings.function.d.ts +7 -0
  75. package/schematics/ng-update/utils/replaceStrings.function.js +15 -0
  76. package/schematics/ng-update/utils/replaceStrings.function.js.map +1 -0
  77. package/schematics/ng-update/version-0-13/index.spec.js +11 -0
  78. package/schematics/ng-update/version-0-13/index.spec.js.map +1 -1
  79. package/schematics/ng-update/version-0-14/index.d.ts +2 -0
  80. package/schematics/ng-update/version-0-14/index.js +49 -0
  81. package/schematics/ng-update/version-0-14/index.js.map +1 -0
  82. package/schematics/ng-update/version-0-14/index.spec.d.ts +1 -0
  83. package/schematics/ng-update/version-0-14/index.spec.js +52 -0
  84. package/schematics/ng-update/version-0-14/index.spec.js.map +1 -0
  85. package/styles/components/_m-context-menu.scss +4 -0
  86. package/styles/components/_o-pry-admin-classes-customize.scss +48 -0
  87. package/widgets/widget-map/component/widget-map-layer.service.d.ts +6 -1
  88. package/widgets/widget-map/component/widget-map.component.d.ts +4 -2
  89. package/widgets/widget-map/i18n/en.translations.d.ts +1 -0
  90. package/widgets/widget-map/i18n/fr.translations.d.ts +1 -0
  91. package/widgets/widget-map/utils/widget-map.utils.d.ts +2 -5
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { ItemUtils } from '@provoly/dashboard';
2
+ import { FieldType, ItemUtils } from '@provoly/dashboard';
3
3
  import { Feature } from 'ol';
4
4
  import { getTopLeft, getWidth } from 'ol/extent';
5
5
  import { GeoJSON, MVT } from 'ol/format';
@@ -50,8 +50,22 @@ export class WidgetMapLayerService {
50
50
  })
51
51
  });
52
52
  this.dontNeedLocation = ['relation', 'wms', 'wmts', 'geoserver', 'featurelayer', 'vectortile', 'rastertile'];
53
- this.dontNeedIntensity = [...this.dontNeedLocation, 'marker', 'point', 'line', 'polygon', 'multi-line', 'multi-polygon'];
53
+ this.dontNeedIntensity = [
54
+ ...this.dontNeedLocation,
55
+ 'marker',
56
+ 'point',
57
+ 'line',
58
+ 'polygon',
59
+ 'multi-line',
60
+ 'multi-polygon',
61
+ 'auto'
62
+ ];
54
63
  this.layersImplementation = {
64
+ auto: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
65
+ return this.layersImplementation[WidgetMapLayerService.translateFieldTypeToLayerType(layer.subType)](
66
+ // @ts-ignore
67
+ layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map);
68
+ },
55
69
  heatmap: (layer, attributesForClass, layerClassesId, resultSet, range, itemStyles, map) => {
56
70
  const heatmap = new Heatmap({
57
71
  minZoom: layer.minZoom ?? DEFAULT_ZOOM_MIN,
@@ -305,6 +319,23 @@ export class WidgetMapLayerService {
305
319
  });
306
320
  return layer;
307
321
  }
322
+ static translateFieldTypeToLayerType(subType) {
323
+ switch (subType) {
324
+ case FieldType.POINT:
325
+ return 'marker';
326
+ case FieldType.LINE:
327
+ return 'line';
328
+ case FieldType.POLYGON:
329
+ return 'polygon';
330
+ case FieldType.MULTILINE:
331
+ return 'multi-line';
332
+ case FieldType.MULTIPOLYGON:
333
+ return 'multi-polygon';
334
+ default:
335
+ console.warn(`wrong type ${subType} for auto options`);
336
+ return 'marker';
337
+ }
338
+ }
308
339
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetMapLayerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
309
340
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetMapLayerService, providedIn: 'root' }); }
310
341
  }
@@ -314,4 +345,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
314
345
  providedIn: 'root'
315
346
  }]
316
347
  }] });
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQWFWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBTyxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV6QyxPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLGVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRSxPQUFPLFlBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLFVBQVUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RCxPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLFlBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUMvQixnQkFBZ0IsRUFDaEIs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TUFBTTs2QkFDZCxDQUFDOzRCQUNGLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQztnQ0FDYixLQUFLLEVBQUUsU0FBUzs2QkFDakIsQ0FBQzt5QkFDSCxDQUFDO3dCQUNGLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7cUJBQ3BDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDL0I7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7YUFDM0U7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0ExY1UscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgSXRlbVV0aWxzLFxuICBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zLFxuICBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gIE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldFJlbGF0aW9uTGF5ZXJPcHRpb25zLFxuICBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICBSZXN1bHRTZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCB9IGZyb20gJ29sJztcbmltcG9ydCB7IGdldFRvcExlZnQsIGdldFdpZHRoIH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IEdlb0pTT04sIE1WVCB9IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgSGVhdG1hcCwgVGlsZSB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSc7XG5pbXBvcnQgVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCBWZWN0b3JUaWxlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5pbXBvcnQgeyBDbHVzdGVyLCBUaWxlV01TLCBWZWN0b3IsIFdNVFMsIFhZWiB9IGZyb20gJ29sL3NvdXJjZSc7XG5pbXBvcnQgVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IFZlY3RvclRpbGUgZnJvbSAnb2wvc291cmNlL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2lyY2xlLCBGaWxsLCBTdHJva2UsIFN0eWxlLCBUZXh0IH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IENpcmNsZVN0eWxlIGZyb20gJ29sL3N0eWxlL0NpcmNsZSc7XG5pbXBvcnQgV01UU1RpbGVHcmlkIGZyb20gJ29sL3RpbGVncmlkL1dNVFMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9IRUFUTUFQX1JBRElVUyxcbiAgREVGQVVMVF9SQURJVVNfSU5URU5TSVRZX0ZBQ1RPUixcbiAgREVGQVVMVF9aT09NX01BWCxcbiAgREVGQVVMVF9aT09NX01JTixcbiAgZ2V0Q2lyY2xlRmVhdHVyZUZyb21JdGVtLFxuICBnZXRGZWF0dXJlRnJvbUl0ZW1cbn0gZnJvbSAnLi4vdXRpbHMvd2lkZ2V0LW1hcC51dGlscyc7XG5cbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZXNGb3JDbGFzcyA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIGludGVuc2l0eUF0dHJpYnV0ZTogQXR0cmlidXRlO1xuICAgIGxvY2F0aW9uQXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtU3R5bGVzID0geyBbaWQ6IHN0cmluZ106IHsgY2xhc3NpYzogU3R5bGU7IGJvcmRlcmVkOiBTdHlsZSB9IH07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldE1hcExheWVyU2VydmljZSB7XG4gIHN0eWxlQ2FjaGU6IGFueSA9IHt9O1xuXG4gIGNpcmNsZVN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBmaWxsOiBuZXcgRmlsbCh7XG4gICAgICBjb2xvcjogJ3JnYmEoMzcsODksMTYzLDAuMjQpJ1xuICAgIH0pLFxuICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICBjb2xvcjogJ3JnYigzNyw4OSwxNjMpJyxcbiAgICAgIHdpZHRoOiAyXG4gICAgfSlcbiAgfSk7XG4gIHNlbGVjdGVkQ2lyY2xlU3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGZpbGw6IG5ldyBGaWxsKHtcbiAgICAgIGNvbG9yOiAncmdiYSgzNywxNjMsNTgsMC4yNCknXG4gICAgfSksXG4gICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHtcbiAgICAgIGNvbG9yOiAncmdiKDM3LDE2Myw1OCknLFxuICAgICAgd2lkdGg6IDJcbiAgICB9KVxuICB9KTtcblxuICBwb2ludFN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBpbWFnZTogbmV3IENpcmNsZSh7XG4gICAgICBmaWxsOiBuZXcgRmlsbCh7IGNvbG9yOiAncmdiYSgzNyw4OSwxNjMsMC4yNCknIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHsgY29sb3I6ICdyZ2IoMzcsODksMTYzKScsIHdpZHRoOiAyIH0pLFxuICAgICAgcmFkaXVzOiAxMFxuICAgIH0pXG4gIH0pO1xuICBzZWxlY3RlZFBvaW50U3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGltYWdlOiBuZXcgQ2lyY2xlKHtcbiAgICAgIGZpbGw6IG5ldyBGaWxsKHsgY29sb3I6ICdyZ2JhKDM3LDE2Myw1OCwwLjI0KScgfSksXG4gICAgICBzdHJva2U6IG5ldyBTdHJva2UoeyBjb2xvcjogJ3JnYigzNywxNjMsNTgpJywgd2lkdGg6IDIgfSksXG4gICAgICByYWRpdXM6IDEwXG4gICAgfSlcbiAgfSk7XG5cbiAgZ2V0IGltcGxlbWVudGF0aW9uTGlzdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5sYXllcnNJbXBsZW1lbnRhdGlvbikuZmlsdGVyKChpbXBsZW1lbnRhdGlvbikgPT4gaW1wbGVtZW50YXRpb24gIT09ICdnZW9zZXJ2ZXInKTtcbiAgfVxuXG4gIGRvbnROZWVkTG9jYXRpb24gPSBbJ3JlbGF0aW9uJywgJ3dtcycsICd3bXRzJywgJ2dlb3NlcnZlcicsICdmZWF0dXJlbGF5ZXInLCAndmVjdG9ydGlsZScsICdyYXN0ZXJ0aWxlJ107XG4gIGRvbnROZWVkSW50ZW5zaXR5ID0gWy4uLnRoaXMuZG9udE5lZWRMb2NhdGlvbiwgJ21hcmtlcicsICdwb2ludCcsICdsaW5lJywgJ3BvbHlnb24nLCAnbXVsdGktbGluZScsICdtdWx0aS1wb2x5Z29uJ107XG5cbiAgbGF5ZXJzSW1wbGVtZW50YXRpb24gPSB7XG4gICAgaGVhdG1hcDogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGhlYXRtYXAgPSBuZXcgSGVhdG1hcCh7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3IoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSksXG4gICAgICAgIGJsdXI6IChsYXllci5yYWRpdXMgPz8gREVGQVVMVF9IRUFUTUFQX1JBRElVUykgLyAyLFxuICAgICAgICByYWRpdXM6IGxheWVyLnJhZGl1cyA/PyBERUZBVUxUX0hFQVRNQVBfUkFESVVTLFxuICAgICAgICB3ZWlnaHQ6IChmZWF0dXJlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVDYWxjdWxhdGVkVmFsdWUoXG4gICAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzW2ZlYXR1cmUuZ2V0KCdvQ2xhc3MnKSBhcyBzdHJpbmddLmludGVuc2l0eUF0dHJpYnV0ZVxuICAgICAgICAgICkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGF0U2NhbGUgPSAodmFsdWUgLSByYW5nZS5taW4pIC8gKHJhbmdlLm1heCAtIHJhbmdlLm1pbik7XG4gICAgICAgICAgcmV0dXJuIGxheWVyLmludGVuc2l0eUFzYyA/IGF0U2NhbGUgOiAxIC0gYXRTY2FsZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxheWVyQ2xhc3Nlc0lkLmZvckVhY2goKGNsYXNzSWQpID0+IHtcbiAgICAgICAgKHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IEl0ZW1VdGlscy5yZWFkR2VvbWV0cnkoaXRlbSwgJ3BvaW50JywgYXR0cmlidXRlc0ZvckNsYXNzW2NsYXNzSWRdLmxvY2F0aW9uQXR0cmlidXRlKTtcbiAgICAgICAgICAgIHJldHVybiAhIWxvY2F0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGhlYXRtYXBcbiAgICAgICAgICAgICAgLmdldFNvdXJjZSgpXG4gICAgICAgICAgICAgID8uYWRkRmVhdHVyZShnZXRGZWF0dXJlRnJvbUl0ZW0oaXRlbSwgJ2hlYXRwb2ludCcsIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUpKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaGVhdG1hcCBhcyBCYXNlTGF5ZXI7XG4gICAgfSxcbiAgICBtYXJrZXI6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclNvdXJjZSh7IGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSB9KVxuICAgICAgfSk7XG5cbiAgICAgIGxheWVyQ2xhc3Nlc0lkLmZvckVhY2goKGNsYXNzSWQpID0+IHtcbiAgICAgICAgKHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IEl0ZW1VdGlscy5yZWFkR2VvbWV0cnkoaXRlbSwgJ3BvaW50JywgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSk7XG4gICAgICAgICAgICByZXR1cm4gISFsb2NhdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mb3JFYWNoKGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRmVhdHVyZSA9IGdldEZlYXR1cmVGcm9tSXRlbShcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgJ21hcmtlcicsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUsXG4gICAgICAgICAgICAgIGl0ZW1TdHlsZXNbaXRlbS5pZF0/LmNsYXNzaWMsXG4gICAgICAgICAgICAgIGl0ZW1TdHlsZXNbaXRlbS5pZF0/LmJvcmRlcmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaXRlbUZlYXR1cmUuc2V0U3R5bGUoaXRlbUZlYXR1cmUuZ2V0KCdjbGFzc2ljU3R5bGUnKSk7XG4gICAgICAgICAgICB2ZWN0b3JMYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShpdGVtRmVhdHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXMubWFrZUNsdXN0ZXJlZCh2ZWN0b3JMYXllciwgbGF5ZXIpO1xuICAgIH0sXG4gICAgcG9pbnQ6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShsYXllciwgbGF5ZXJDbGFzc2VzSWQsIHJlc3VsdFNldCwgYXR0cmlidXRlc0ZvckNsYXNzLCAncG9pbnQnKTtcbiAgICB9LFxuICAgIGxpbmU6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShsYXllciwgbGF5ZXJDbGFzc2VzSWQsIHJlc3VsdFNldCwgYXR0cmlidXRlc0ZvckNsYXNzLCAnbGluZScpO1xuICAgIH0sXG4gICAgJ211bHRpLWxpbmUnOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllckZyb21HZW9Kc29uR2VvbWV0cnkobGF5ZXIsIGxheWVyQ2xhc3Nlc0lkLCByZXN1bHRTZXQsIGF0dHJpYnV0ZXNGb3JDbGFzcywgJ211bHRpLWxpbmUnKTtcbiAgICB9LFxuICAgIHBvbHlnb246IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShsYXllciwgbGF5ZXJDbGFzc2VzSWQsIHJlc3VsdFNldCwgYXR0cmlidXRlc0ZvckNsYXNzLCAncG9seWdvbicpO1xuICAgIH0sXG4gICAgJ211bHRpLXBvbHlnb24nOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllckZyb21HZW9Kc29uR2VvbWV0cnkobGF5ZXIsIGxheWVyQ2xhc3Nlc0lkLCByZXN1bHRTZXQsIGF0dHJpYnV0ZXNGb3JDbGFzcywgJ211bHRpLXBvbHlnb24nKTtcbiAgICB9LFxuICAgIGJ1YmJsZTogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgYnViYmxlTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgICB9KTtcblxuICAgICAgbGF5ZXJDbGFzc2VzSWQuZm9yRWFjaCgoY2xhc3NJZCkgPT4ge1xuICAgICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCAncG9pbnQnLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlKTtcbiAgICAgICAgICAgIHJldHVybiAhIWxvY2F0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZUNhbGN1bGF0ZWRWYWx1ZShcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5pbnRlbnNpdHlBdHRyaWJ1dGVcbiAgICAgICAgICAgICkgYXMgbnVtYmVyO1xuICAgICAgICAgICAgY29uc3QgYXRTY2FsZSA9ICh2YWx1ZSAtIHJhbmdlLm1pbikgLyAocmFuZ2UubWF4IC0gcmFuZ2UubWluKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1GZWF0dXJlID0gZ2V0Q2lyY2xlRmVhdHVyZUZyb21JdGVtKFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlLFxuICAgICAgICAgICAgICAobGF5ZXIuaW50ZW5zaXR5QXNjID8gYXRTY2FsZSA6IDEgLSBhdFNjYWxlKSAqIChsYXllci5yYWRpdXNGYWN0b3IgPz8gREVGQVVMVF9SQURJVVNfSU5URU5TSVRZX0ZBQ1RPUiksXG4gICAgICAgICAgICAgIHRoaXMuY2lyY2xlU3R5bGUsXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaXJjbGVTdHlsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGl0ZW1GZWF0dXJlLnNldFN0eWxlKGl0ZW1GZWF0dXJlLmdldCgnY2xhc3NpY1N0eWxlJykpO1xuICAgICAgICAgICAgYnViYmxlTGF5ZXIuZ2V0U291cmNlKCk/LmFkZEZlYXR1cmUoaXRlbUZlYXR1cmUpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBidWJibGVMYXllcjtcbiAgICB9LFxuICAgIHJlbGF0aW9uOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0UmVsYXRpb25MYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHdtczogKFxuICAgICAgbGF5ZXI6IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBpbXBsID0gbmV3IFRpbGUoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVGlsZVdNUyh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybCxcbiAgICAgICAgICBwYXJhbXM6IHsgTEFZRVJTOiBsYXllci5wYXJhbUxheWVyLCBUSUxFRDogbGF5ZXIucGFyYW1UaWxlZCB9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGltcGwuc2V0KCdvQ2xhc3MnLCBsYXllci5vQ2xhc3MpO1xuICAgICAgcmV0dXJuIGltcGw7XG4gICAgfSxcbiAgICB3bXRzOiAoXG4gICAgICBsYXllcjogTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBwcm9qZWN0aW9uID0gbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCk7XG4gICAgICBjb25zdCBwcm9qZWN0aW9uRXh0ZW50ID0gcHJvamVjdGlvbi5nZXRFeHRlbnQoKTtcbiAgICAgIGNvbnN0IHNpemUgPSBnZXRXaWR0aChwcm9qZWN0aW9uRXh0ZW50KSAvIDI1NjtcbiAgICAgIGNvbnN0IHJlc29sdXRpb25zID0gbmV3IEFycmF5KDE5KTtcbiAgICAgIGNvbnN0IG1hdHJpeElkcyA9IG5ldyBBcnJheSgxOSk7XG4gICAgICBmb3IgKGxldCB6ID0gMDsgeiA8IDE5OyArK3opIHtcbiAgICAgICAgLy8gZ2VuZXJhdGUgcmVzb2x1dGlvbnMgYW5kIG1hdHJpeElkcyBhcnJheXMgZm9yIHRoaXMgV01UU1xuICAgICAgICByZXNvbHV0aW9uc1t6XSA9IHNpemUgLyBNYXRoLnBvdygyLCB6KTtcbiAgICAgICAgbWF0cml4SWRzW3pdID0gejtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgVGlsZSh7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBXTVRTKHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10sXG4gICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgIHVybDogbGF5ZXIudXJsLFxuICAgICAgICAgIGxheWVyOiBsYXllci5wYXJhbUxheWVyLFxuICAgICAgICAgIG1hdHJpeFNldDogbGF5ZXIubWF0cml4U2V0LFxuICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgdGlsZUdyaWQ6IG5ldyBXTVRTVGlsZUdyaWQoe1xuICAgICAgICAgICAgb3JpZ2luOiBnZXRUb3BMZWZ0KHByb2plY3Rpb25FeHRlbnQpLFxuICAgICAgICAgICAgcmVzb2x1dGlvbnM6IHJlc29sdXRpb25zLFxuICAgICAgICAgICAgbWF0cml4SWRzOiBtYXRyaXhJZHNcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdHlsZTogbGF5ZXIuc3R5bGVcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2Vvc2VydmVyOiAoXG4gICAgICBsYXllcjogTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBpbXBsID0gdGhpcy5sYXllcnNJbXBsZW1lbnRhdGlvblsnd21zJ10oXG4gICAgICAgIHsgLi4ubGF5ZXIsIHR5cGU6ICd3bXMnLCBvQ2xhc3M6IGxheWVyLm9DbGFzcyB9LFxuICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgIGxheWVyQ2xhc3Nlc0lkLFxuICAgICAgICByZXN1bHRTZXQsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBpdGVtU3R5bGVzLFxuICAgICAgICBtYXBcbiAgICAgICk7XG4gICAgICBpbXBsLnNldCgndGl0bGUnLCBsYXllci50aXRsZSk7XG4gICAgICBpbXBsLnNldCgnb0NsYXNzJywgbGF5ZXIub0NsYXNzKTtcbiAgICAgIHJldHVybiBpbXBsO1xuICAgIH0sXG4gICAgZmVhdHVyZWxheWVyOiAoXG4gICAgICBsYXllcjogTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2Uoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBmb3JtYXQ6IG5ldyBHZW9KU09OKCksXG4gICAgICAgICAgdXJsOiBsYXllci51cmxcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdmVjdG9ydGlsZTogKFxuICAgICAgbGF5ZXI6IE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yVGlsZUxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclRpbGUoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBmb3JtYXQ6IG5ldyBNVlQoKSxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICByYXN0ZXJ0aWxlOiAoXG4gICAgICBsYXllcjogTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBUaWxlKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFhZWih7XG4gICAgICAgICAgdXJsOiBsYXllci51cmwsXG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBsYXllckZyb21HZW9Kc29uR2VvbWV0cnkoXG4gICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgdHlwZTogJ3BvaW50JyB8ICdsaW5lJyB8ICdtdWx0aS1saW5lJyB8ICdwb2x5Z29uJyB8ICdtdWx0aS1wb2x5Z29uJ1xuICApIHtcbiAgICBjb25zdCB2ZWN0b3JMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgfSk7XG5cbiAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgbG9jYXRpb246IEl0ZW1VdGlscy5yZWFkR2VvbWV0cnkoaXRlbSwgdHlwZSwgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSlcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKHsgbG9jYXRpb24gfSkgPT4gISFsb2NhdGlvbilcbiAgICAgICAgLmZvckVhY2goYXN5bmMgKHN1Ykl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtRmVhdHVyZSA9IG5ldyBGZWF0dXJlKHtcbiAgICAgICAgICAgIC4uLnN1Ykl0ZW0uaXRlbSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBnZW9tZXRyeTogc3ViSXRlbS5sb2NhdGlvbixcbiAgICAgICAgICAgIGNsYXNzaWNTdHlsZTogdHlwZSA9PT0gJ3BvaW50JyA/IHRoaXMucG9pbnRTdHlsZSA6IHRoaXMuY2lyY2xlU3R5bGUsXG4gICAgICAgICAgICBzZWxlY3RlZFN0eWxlOiB0eXBlID09PSAncG9pbnQnID8gdGhpcy5zZWxlY3RlZFBvaW50U3R5bGUgOiB0aGlzLnNlbGVjdGVkQ2lyY2xlU3R5bGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpdGVtRmVhdHVyZS5zZXRTdHlsZShpdGVtRmVhdHVyZS5nZXQoJ2NsYXNzaWNTdHlsZScpKTtcbiAgICAgICAgICB2ZWN0b3JMYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShpdGVtRmVhdHVyZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMubWFrZUNsdXN0ZXJlZCh2ZWN0b3JMYXllciwgbGF5ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlQ2x1c3RlcmVkKGxheWVyOiBCYXNlTGF5ZXIsIGxheWVyT3B0aW9uczogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgaWYgKCFbJ21hcmtlcicsICdidWJibGUnXS5pbmNsdWRlcyhsYXllck9wdGlvbnMudHlwZSkgfHwgISgnY2x1c3RlcmVkJyBpbiBsYXllck9wdGlvbnMgJiYgbGF5ZXJPcHRpb25zLmNsdXN0ZXJlZCkpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgLy8gQ2x1c3RlcmluZyBzb3VyY2VcbiAgICBjb25zdCB2ZWN0b3JMYXllciA9IGxheWVyIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxHZW9tZXRyeT4+O1xuICAgIHZlY3RvckxheWVyLnNldFNvdXJjZShcbiAgICAgIG5ldyBDbHVzdGVyKHtcbiAgICAgICAgZGlzdGFuY2U6IGxheWVyT3B0aW9ucy5jbHVzdGVyRGlzdGFuY2UsXG4gICAgICAgIG1pbkRpc3RhbmNlOiAxMCxcbiAgICAgICAgc291cmNlOiB2ZWN0b3JMYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2VcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHZlY3RvckxheWVyLnNldFN0eWxlKChmZWF0dXJlKSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gZmVhdHVyZS5nZXQoJ2ZlYXR1cmVzJykubGVuZ3RoO1xuICAgICAgaWYgKHNpemUgPiAxKSB7XG4gICAgICAgIGxldCBzdHlsZSA9IHRoaXMuc3R5bGVDYWNoZVtzaXplXTtcbiAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgIHN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICAgICAgICAgIGltYWdlOiBuZXcgQ2lyY2xlU3R5bGUoe1xuICAgICAgICAgICAgICByYWRpdXM6IDEwLFxuICAgICAgICAgICAgICBzdHJva2U6IG5ldyBTdHJva2Uoe1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZidcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIGZpbGw6IG5ldyBGaWxsKHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJyMzMzk5Q0MnXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRleHQ6IG5ldyBUZXh0KHsgdGV4dDogYCR7c2l6ZX1gIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zdHlsZUNhY2hlW3NpemVdID0gc3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNpemUgPT09IDEgPyBmZWF0dXJlLmdldCgnZmVhdHVyZXMnKVswXS5nZXQoJ2NsYXNzaWNTdHlsZScpIDogbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXllcjtcbiAgfVxufVxuIl19
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFjVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxlQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsZ0JB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SUFBSTtnQkFDakIsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxTQUFTLENBQUMsT0FBTztnQkFDcEIsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxTQUFTLENBQUMsU0FBUztnQkFDdEIsT0FBTyxZQUFZLENBQUM7WUFDdEIsS0FBSyxTQUFTLENBQUMsWUFBWTtnQkFDekIsT0FBTyxlQUFlLENBQUM7WUFDekI7Z0JBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLE9BQU8sbUJBQW1CLENBQUMsQ0FBQztnQkFDdkQsT0FBTyxRQUFRLENBQUM7U0FDbkI7SUFDSCxDQUFDOzhHQXpmVSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBGaWVsZFR5cGUsXG4gIEl0ZW1VdGlscyxcbiAgTWFwQXV0b0xheWVyT3B0aW9ucyxcbiAgTWFwRmVhdHVyZUxheWVyT3B0aW9ucyxcbiAgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRSZWxhdGlvbkxheWVyT3B0aW9ucyxcbiAgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMsXG4gIE1hcFdNVFNMYXllckxheWVyT3B0aW9ucyxcbiAgUmVzdWx0U2V0XG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBGZWF0dXJlLCBNYXAgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBnZXRUb3BMZWZ0LCBnZXRXaWR0aCB9IGZyb20gJ29sL2V4dGVudCc7XG5pbXBvcnQgeyBHZW9KU09OLCBNVlQgfSBmcm9tICdvbC9mb3JtYXQnO1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tJztcbmltcG9ydCB7IEhlYXRtYXAsIFRpbGUgfSBmcm9tICdvbC9sYXllcic7XG5pbXBvcnQgQmFzZUxheWVyIGZyb20gJ29sL2xheWVyL0Jhc2UnO1xuaW1wb3J0IFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3Rvcic7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2x1c3RlciwgVGlsZVdNUywgVmVjdG9yLCBXTVRTLCBYWVogfSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvclNvdXJjZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yJztcbmltcG9ydCBWZWN0b3JUaWxlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3JUaWxlJztcbmltcG9ydCB7IENpcmNsZSwgRmlsbCwgU3Ryb2tlLCBTdHlsZSwgVGV4dCB9IGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCBDaXJjbGVTdHlsZSBmcm9tICdvbC9zdHlsZS9DaXJjbGUnO1xuaW1wb3J0IFdNVFNUaWxlR3JpZCBmcm9tICdvbC90aWxlZ3JpZC9XTVRTJztcbmltcG9ydCB7XG4gIERFRkFVTFRfSEVBVE1BUF9SQURJVVMsXG4gIERFRkFVTFRfUkFESVVTX0lOVEVOU0lUWV9GQUNUT1IsXG4gIERFRkFVTFRfWk9PTV9NQVgsXG4gIERFRkFVTFRfWk9PTV9NSU4sXG4gIGdldENpcmNsZUZlYXR1cmVGcm9tSXRlbSxcbiAgZ2V0RmVhdHVyZUZyb21JdGVtXG59IGZyb20gJy4uL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuXG5leHBvcnQgdHlwZSBBdHRyaWJ1dGVzRm9yQ2xhc3MgPSB7XG4gIFtrZXk6IHN0cmluZ106IHtcbiAgICBpbnRlbnNpdHlBdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgSXRlbVN0eWxlcyA9IHsgW2lkOiBzdHJpbmddOiB7IGNsYXNzaWM6IFN0eWxlOyBib3JkZXJlZDogU3R5bGUgfSB9O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRNYXBMYXllclNlcnZpY2Uge1xuICBzdHlsZUNhY2hlOiBhbnkgPSB7fTtcblxuICBjaXJjbGVTdHlsZSA9IG5ldyBTdHlsZSh7XG4gICAgZmlsbDogbmV3IEZpbGwoe1xuICAgICAgY29sb3I6ICdyZ2JhKDM3LDg5LDE2MywwLjI0KSdcbiAgICB9KSxcbiAgICBzdHJva2U6IG5ldyBTdHJva2Uoe1xuICAgICAgY29sb3I6ICdyZ2IoMzcsODksMTYzKScsXG4gICAgICB3aWR0aDogMlxuICAgIH0pXG4gIH0pO1xuICBzZWxlY3RlZENpcmNsZVN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBmaWxsOiBuZXcgRmlsbCh7XG4gICAgICBjb2xvcjogJ3JnYmEoMzcsMTYzLDU4LDAuMjQpJ1xuICAgIH0pLFxuICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICBjb2xvcjogJ3JnYigzNywxNjMsNTgpJyxcbiAgICAgIHdpZHRoOiAyXG4gICAgfSlcbiAgfSk7XG5cbiAgcG9pbnRTdHlsZSA9IG5ldyBTdHlsZSh7XG4gICAgaW1hZ2U6IG5ldyBDaXJjbGUoe1xuICAgICAgZmlsbDogbmV3IEZpbGwoeyBjb2xvcjogJ3JnYmEoMzcsODksMTYzLDAuMjQpJyB9KSxcbiAgICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7IGNvbG9yOiAncmdiKDM3LDg5LDE2MyknLCB3aWR0aDogMiB9KSxcbiAgICAgIHJhZGl1czogMTBcbiAgICB9KVxuICB9KTtcbiAgc2VsZWN0ZWRQb2ludFN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBpbWFnZTogbmV3IENpcmNsZSh7XG4gICAgICBmaWxsOiBuZXcgRmlsbCh7IGNvbG9yOiAncmdiYSgzNywxNjMsNTgsMC4yNCknIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHsgY29sb3I6ICdyZ2IoMzcsMTYzLDU4KScsIHdpZHRoOiAyIH0pLFxuICAgICAgcmFkaXVzOiAxMFxuICAgIH0pXG4gIH0pO1xuXG4gIGdldCBpbXBsZW1lbnRhdGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubGF5ZXJzSW1wbGVtZW50YXRpb24pLmZpbHRlcigoaW1wbGVtZW50YXRpb24pID0+IGltcGxlbWVudGF0aW9uICE9PSAnZ2Vvc2VydmVyJyk7XG4gIH1cblxuICBkb250TmVlZExvY2F0aW9uID0gWydyZWxhdGlvbicsICd3bXMnLCAnd210cycsICdnZW9zZXJ2ZXInLCAnZmVhdHVyZWxheWVyJywgJ3ZlY3RvcnRpbGUnLCAncmFzdGVydGlsZSddO1xuICBkb250TmVlZEludGVuc2l0eSA9IFtcbiAgICAuLi50aGlzLmRvbnROZWVkTG9jYXRpb24sXG4gICAgJ21hcmtlcicsXG4gICAgJ3BvaW50JyxcbiAgICAnbGluZScsXG4gICAgJ3BvbHlnb24nLFxuICAgICdtdWx0aS1saW5lJyxcbiAgICAnbXVsdGktcG9seWdvbicsXG4gICAgJ2F1dG8nXG4gIF07XG5cbiAgbGF5ZXJzSW1wbGVtZW50YXRpb24gPSB7XG4gICAgYXV0bzogKFxuICAgICAgbGF5ZXI6IE1hcEF1dG9MYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyc0ltcGxlbWVudGF0aW9uW1dpZGdldE1hcExheWVyU2VydmljZS50cmFuc2xhdGVGaWVsZFR5cGVUb0xheWVyVHlwZShsYXllci5zdWJUeXBlKV0oXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgIHJlc3VsdFNldCxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgIG1hcFxuICAgICAgKSBhcyBCYXNlTGF5ZXI7XG4gICAgfSxcbiAgICBoZWF0bWFwOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaGVhdG1hcCA9IG5ldyBIZWF0bWFwKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3Rvcih7IGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSB9KSxcbiAgICAgICAgYmx1cjogKGxheWVyLnJhZGl1cyA/PyBERUZBVUxUX0hFQVRNQVBfUkFESVVTKSAvIDIsXG4gICAgICAgIHJhZGl1czogbGF5ZXIucmFkaXVzID8/IERFRkFVTFRfSEVBVE1BUF9SQURJVVMsXG4gICAgICAgIHdlaWdodDogKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZUNhbGN1bGF0ZWRWYWx1ZShcbiAgICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbZmVhdHVyZS5nZXQoJ29DbGFzcycpIGFzIHN0cmluZ10uaW50ZW5zaXR5QXR0cmlidXRlXG4gICAgICAgICAgKSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgYXRTY2FsZSA9ICh2YWx1ZSAtIHJhbmdlLm1pbikgLyAocmFuZ2UubWF4IC0gcmFuZ2UubWluKTtcbiAgICAgICAgICByZXR1cm4gbGF5ZXIuaW50ZW5zaXR5QXNjID8gYXRTY2FsZSA6IDEgLSBhdFNjYWxlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGF5ZXJDbGFzc2VzSWQuZm9yRWFjaCgoY2xhc3NJZCkgPT4ge1xuICAgICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCAncG9pbnQnLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbY2xhc3NJZF0ubG9jYXRpb25BdHRyaWJ1dGUpO1xuICAgICAgICAgICAgcmV0dXJuICEhbG9jYXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaGVhdG1hcFxuICAgICAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAgICAgPy5hZGRGZWF0dXJlKGdldEZlYXR1cmVGcm9tSXRlbShpdGVtLCAnaGVhdHBvaW50JywgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBoZWF0bWFwIGFzIEJhc2VMYXllcjtcbiAgICB9LFxuICAgIG1hcmtlcjogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdmVjdG9yTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pXG4gICAgICB9KTtcblxuICAgICAgbGF5ZXJDbGFzc2VzSWQuZm9yRWFjaCgoY2xhc3NJZCkgPT4ge1xuICAgICAgICAocmVzdWx0U2V0Lml0ZW1zW2NsYXNzSWRdIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCAncG9pbnQnLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlKTtcbiAgICAgICAgICAgIHJldHVybiAhIWxvY2F0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZvckVhY2goYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1GZWF0dXJlID0gZ2V0RmVhdHVyZUZyb21JdGVtKFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAnbWFya2VyJyxcbiAgICAgICAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgaXRlbVN0eWxlc1tpdGVtLmlkXT8uY2xhc3NpYyxcbiAgICAgICAgICAgICAgaXRlbVN0eWxlc1tpdGVtLmlkXT8uYm9yZGVyZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpdGVtRmVhdHVyZS5zZXRTdHlsZShpdGVtRmVhdHVyZS5nZXQoJ2NsYXNzaWNTdHlsZScpKTtcbiAgICAgICAgICAgIHZlY3RvckxheWVyLmdldFNvdXJjZSgpPy5hZGRGZWF0dXJlKGl0ZW1GZWF0dXJlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGhpcy5tYWtlQ2x1c3RlcmVkKHZlY3RvckxheWVyLCBsYXllcik7XG4gICAgfSxcbiAgICBwb2ludDogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdwb2ludCcpO1xuICAgIH0sXG4gICAgbGluZTogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdsaW5lJyk7XG4gICAgfSxcbiAgICAnbXVsdGktbGluZSc6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShsYXllciwgbGF5ZXJDbGFzc2VzSWQsIHJlc3VsdFNldCwgYXR0cmlidXRlc0ZvckNsYXNzLCAnbXVsdGktbGluZScpO1xuICAgIH0sXG4gICAgcG9seWdvbjogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdwb2x5Z29uJyk7XG4gICAgfSxcbiAgICAnbXVsdGktcG9seWdvbic6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShsYXllciwgbGF5ZXJDbGFzc2VzSWQsIHJlc3VsdFNldCwgYXR0cmlidXRlc0ZvckNsYXNzLCAnbXVsdGktcG9seWdvbicpO1xuICAgIH0sXG4gICAgYnViYmxlOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBidWJibGVMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICAgIH0pO1xuXG4gICAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBJdGVtVXRpbHMucmVhZEdlb21ldHJ5KGl0ZW0sICdwb2ludCcsIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUpO1xuICAgICAgICAgICAgcmV0dXJuICEhbG9jYXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKFxuICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmludGVuc2l0eUF0dHJpYnV0ZVxuICAgICAgICAgICAgKSBhcyBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBhdFNjYWxlID0gKHZhbHVlIC0gcmFuZ2UubWluKSAvIChyYW5nZS5tYXggLSByYW5nZS5taW4pO1xuICAgICAgICAgICAgY29uc3QgaXRlbUZlYXR1cmUgPSBnZXRDaXJjbGVGZWF0dXJlRnJvbUl0ZW0oXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUsXG4gICAgICAgICAgICAgIChsYXllci5pbnRlbnNpdHlBc2MgPyBhdFNjYWxlIDogMSAtIGF0U2NhbGUpICogKGxheWVyLnJhZGl1c0ZhY3RvciA/PyBERUZBVUxUX1JBRElVU19JTlRFTlNJVFlfRkFDVE9SKSxcbiAgICAgICAgICAgICAgdGhpcy5jaXJjbGVTdHlsZSxcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENpcmNsZVN0eWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaXRlbUZlYXR1cmUuc2V0U3R5bGUoaXRlbUZlYXR1cmUuZ2V0KCdjbGFzc2ljU3R5bGUnKSk7XG4gICAgICAgICAgICBidWJibGVMYXllci5nZXRTb3VyY2UoKT8uYWRkRmVhdHVyZShpdGVtRmVhdHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJ1YmJsZUxheWVyO1xuICAgIH0sXG4gICAgcmVsYXRpb246IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRSZWxhdGlvbkxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgd21zOiAoXG4gICAgICBsYXllcjogTWFwV01TTGF5ZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGltcGwgPSBuZXcgVGlsZSh7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBUaWxlV01TKHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10sXG4gICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxuICAgICAgICAgIHVybDogbGF5ZXIudXJsLFxuICAgICAgICAgIHBhcmFtczogeyBMQVlFUlM6IGxheWVyLnBhcmFtTGF5ZXIsIFRJTEVEOiBsYXllci5wYXJhbVRpbGVkIH1cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgaW1wbC5zZXQoJ29DbGFzcycsIGxheWVyLm9DbGFzcyk7XG4gICAgICByZXR1cm4gaW1wbDtcbiAgICB9LFxuICAgIHdtdHM6IChcbiAgICAgIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHByb2plY3Rpb24gPSBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcbiAgICAgIGNvbnN0IHByb2plY3Rpb25FeHRlbnQgPSBwcm9qZWN0aW9uLmdldEV4dGVudCgpO1xuICAgICAgY29uc3Qgc2l6ZSA9IGdldFdpZHRoKHByb2plY3Rpb25FeHRlbnQpIC8gMjU2O1xuICAgICAgY29uc3QgcmVzb2x1dGlvbnMgPSBuZXcgQXJyYXkoMTkpO1xuICAgICAgY29uc3QgbWF0cml4SWRzID0gbmV3IEFycmF5KDE5KTtcbiAgICAgIGZvciAobGV0IHogPSAwOyB6IDwgMTk7ICsreikge1xuICAgICAgICAvLyBnZW5lcmF0ZSByZXNvbHV0aW9ucyBhbmQgbWF0cml4SWRzIGFycmF5cyBmb3IgdGhpcyBXTVRTXG4gICAgICAgIHJlc29sdXRpb25zW3pdID0gc2l6ZSAvIE1hdGgucG93KDIsIHopO1xuICAgICAgICBtYXRyaXhJZHNbel0gPSB6O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUaWxlKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFdNVFMoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXG4gICAgICAgICAgdXJsOiBsYXllci51cmwsXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLnBhcmFtTGF5ZXIsXG4gICAgICAgICAgbWF0cml4U2V0OiBsYXllci5tYXRyaXhTZXQsXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICB0aWxlR3JpZDogbmV3IFdNVFNUaWxlR3JpZCh7XG4gICAgICAgICAgICBvcmlnaW46IGdldFRvcExlZnQocHJvamVjdGlvbkV4dGVudCksXG4gICAgICAgICAgICByZXNvbHV0aW9uczogcmVzb2x1dGlvbnMsXG4gICAgICAgICAgICBtYXRyaXhJZHM6IG1hdHJpeElkc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN0eWxlOiBsYXllci5zdHlsZVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZW9zZXJ2ZXI6IChcbiAgICAgIGxheWVyOiBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGltcGwgPSB0aGlzLmxheWVyc0ltcGxlbWVudGF0aW9uWyd3bXMnXShcbiAgICAgICAgeyAuLi5sYXllciwgdHlwZTogJ3dtcycsIG9DbGFzczogbGF5ZXIub0NsYXNzIH0sXG4gICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgIHJlc3VsdFNldCxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgIG1hcFxuICAgICAgKTtcbiAgICAgIGltcGwuc2V0KCd0aXRsZScsIGxheWVyLnRpdGxlKTtcbiAgICAgIGltcGwuc2V0KCdvQ2xhc3MnLCBsYXllci5vQ2xhc3MpO1xuICAgICAgcmV0dXJuIGltcGw7XG4gICAgfSxcbiAgICBmZWF0dXJlbGF5ZXI6IChcbiAgICAgIGxheWVyOiBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclNvdXJjZSh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGZvcm1hdDogbmV3IEdlb0pTT04oKSxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB2ZWN0b3J0aWxlOiAoXG4gICAgICBsYXllcjogTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JUaWxlTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yVGlsZSh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGZvcm1hdDogbmV3IE1WVCgpLFxuICAgICAgICAgIHVybDogbGF5ZXIudXJsXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJhc3RlcnRpbGU6IChcbiAgICAgIGxheWVyOiBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFRpbGUoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgWFlaKHtcbiAgICAgICAgICB1cmw6IGxheWVyLnVybCxcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ11cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShcbiAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICB0eXBlOiAncG9pbnQnIHwgJ2xpbmUnIHwgJ211bHRpLWxpbmUnIHwgJ3BvbHlnb24nIHwgJ211bHRpLXBvbHlnb24nXG4gICkge1xuICAgIGNvbnN0IHZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICB9KTtcblxuICAgIGxheWVyQ2xhc3Nlc0lkLmZvckVhY2goKGNsYXNzSWQpID0+IHtcbiAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBsb2NhdGlvbjogSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCB0eXBlLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlKVxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcigoeyBsb2NhdGlvbiB9KSA9PiAhIWxvY2F0aW9uKVxuICAgICAgICAuZm9yRWFjaChhc3luYyAoc3ViSXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1GZWF0dXJlID0gbmV3IEZlYXR1cmUoe1xuICAgICAgICAgICAgLi4uc3ViSXRlbS5pdGVtLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGdlb21ldHJ5OiBzdWJJdGVtLmxvY2F0aW9uLFxuICAgICAgICAgICAgY2xhc3NpY1N0eWxlOiB0eXBlID09PSAncG9pbnQnID8gdGhpcy5wb2ludFN0eWxlIDogdGhpcy5jaXJjbGVTdHlsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3R5bGU6IHR5cGUgPT09ICdwb2ludCcgPyB0aGlzLnNlbGVjdGVkUG9pbnRTdHlsZSA6IHRoaXMuc2VsZWN0ZWRDaXJjbGVTdHlsZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGl0ZW1GZWF0dXJlLnNldFN0eWxlKGl0ZW1GZWF0dXJlLmdldCgnY2xhc3NpY1N0eWxlJykpO1xuICAgICAgICAgIHZlY3RvckxheWVyLmdldFNvdXJjZSgpPy5hZGRGZWF0dXJlKGl0ZW1GZWF0dXJlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5tYWtlQ2x1c3RlcmVkKHZlY3RvckxheWVyLCBsYXllcik7XG4gIH1cblxuICBwcml2YXRlIG1ha2VDbHVzdGVyZWQobGF5ZXI6IEJhc2VMYXllciwgbGF5ZXJPcHRpb25zOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBpZiAoIVsnbWFya2VyJywgJ2J1YmJsZSddLmluY2x1ZGVzKGxheWVyT3B0aW9ucy50eXBlKSB8fCAhKCdjbHVzdGVyZWQnIGluIGxheWVyT3B0aW9ucyAmJiBsYXllck9wdGlvbnMuY2x1c3RlcmVkKSkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICAvLyBDbHVzdGVyaW5nIHNvdXJjZVxuICAgIGNvbnN0IHZlY3RvckxheWVyID0gbGF5ZXIgYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPEdlb21ldHJ5Pj47XG4gICAgdmVjdG9yTGF5ZXIuc2V0U291cmNlKFxuICAgICAgbmV3IENsdXN0ZXIoe1xuICAgICAgICBkaXN0YW5jZTogbGF5ZXJPcHRpb25zLmNsdXN0ZXJEaXN0YW5jZSxcbiAgICAgICAgbWluRGlzdGFuY2U6IDEwLFxuICAgICAgICBzb3VyY2U6IHZlY3RvckxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdmVjdG9yTGF5ZXIuc2V0U3R5bGUoKGZlYXR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHNpemUgPSBmZWF0dXJlLmdldCgnZmVhdHVyZXMnKS5sZW5ndGg7XG4gICAgICBpZiAoc2l6ZSA+IDEpIHtcbiAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5zdHlsZUNhY2hlW3NpemVdO1xuICAgICAgICBpZiAoIXN0eWxlKSB7XG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgICAgICAgICAgaW1hZ2U6IG5ldyBDaXJjbGVTdHlsZSh7XG4gICAgICAgICAgICAgIHJhZGl1czogMTAsXG4gICAgICAgICAgICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJ1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZmlsbDogbmV3IEZpbGwoe1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzMzOTlDQydcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGV4dDogbmV3IFRleHQoeyB0ZXh0OiBgJHtzaXplfWAgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN0eWxlQ2FjaGVbc2l6ZV0gPSBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2l6ZSA9PT0gMSA/IGZlYXR1cmUuZ2V0KCdmZWF0dXJlcycpWzBdLmdldCgnY2xhc3NpY1N0eWxlJykgOiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zbGF0ZUZpZWxkVHlwZVRvTGF5ZXJUeXBlKHN1YlR5cGU6IHN0cmluZykge1xuICAgIHN3aXRjaCAoc3ViVHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuUE9JTlQ6XG4gICAgICAgIHJldHVybiAnbWFya2VyJztcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxJTkU6XG4gICAgICAgIHJldHVybiAnbGluZSc7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5QT0xZR09OOlxuICAgICAgICByZXR1cm4gJ3BvbHlnb24nO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuTVVMVElMSU5FOlxuICAgICAgICByZXR1cm4gJ211bHRpLWxpbmUnO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuTVVMVElQT0xZR09OOlxuICAgICAgICByZXR1cm4gJ211bHRpLXBvbHlnb24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGB3cm9uZyB0eXBlICR7c3ViVHlwZX0gZm9yIGF1dG8gb3B0aW9uc2ApO1xuICAgICAgICByZXR1cm4gJ21hcmtlcic7XG4gICAgfVxuICB9XG59XG4iXX0=