@provoly/dashboard 0.14.9 → 0.14.10

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 (96) hide show
  1. package/admin/components/admin-layout/admin-layout.component.d.ts +5 -3
  2. package/assets/svgs/map.svg +1 -1
  3. package/components/metadata-editor/metadata-editor.component.d.ts +1 -3
  4. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +1 -1
  5. package/esm2022/admin/components/admin-layout/admin-layout.component.mjs +10 -7
  6. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +1 -1
  7. package/esm2022/admin/i18n/en.translations.mjs +2 -2
  8. package/esm2022/admin/i18n/fr.translations.mjs +4 -4
  9. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +8 -29
  10. package/esm2022/lib/core/components/about/about.component.mjs +29 -0
  11. package/esm2022/lib/core/components/about/pry-about.module.mjs +21 -0
  12. package/esm2022/lib/core/components/icon/icon.component.mjs +5 -1
  13. package/esm2022/lib/core/i18n/en.translations.mjs +12 -2
  14. package/esm2022/lib/core/i18n/fr.translations.mjs +12 -2
  15. package/esm2022/lib/core/i18n/i18n.pipe.mjs +4 -3
  16. package/esm2022/lib/core/i18n/i18n.service.mjs +5 -5
  17. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  18. package/esm2022/lib/core/public-api.mjs +3 -1
  19. package/esm2022/lib/core/store/class/class.effects.mjs +1 -1
  20. package/esm2022/lib/core/store/config/config.actions.mjs +5 -2
  21. package/esm2022/lib/core/store/config/config.effects.mjs +4 -1
  22. package/esm2022/lib/core/store/config/config.reducer.mjs +9 -2
  23. package/esm2022/lib/core/store/config/config.selectors.mjs +6 -4
  24. package/esm2022/lib/core/store/config/config.service.mjs +36 -2
  25. package/esm2022/lib/core/store/config/versions.interface.mjs +2 -0
  26. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +1 -16
  27. package/esm2022/lib/dashboard/components/manifests/manifests.component.mjs +3 -1
  28. package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +3 -2
  29. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +2 -2
  30. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +12 -4
  31. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +7 -1
  32. package/esm2022/lib/dashboard/store/manifest.service.mjs +2 -3
  33. package/esm2022/notification/store/notification.effects.mjs +3 -3
  34. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +23 -18
  35. package/esm2022/presentation/components/presentation.component.mjs +18 -18
  36. package/esm2022/presentation/style/css.component.mjs +2 -2
  37. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +3 -3
  38. package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +6 -3
  39. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.mjs +6 -3
  40. package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +2 -2
  41. package/esm2022/supervision/components/supervision-layout/supervision-layout.component.mjs +2 -2
  42. package/esm2022/supervision/components/supervision.component.mjs +2 -2
  43. package/esm2022/supervision/store/supervision.actions.mjs +1 -1
  44. package/esm2022/supervision/store/supervision.reducer.mjs +3 -2
  45. package/esm2022/supervision/store/supervision.selectors.mjs +2 -2
  46. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +18 -11
  47. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +20 -6
  48. package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +1 -2
  49. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +2 -2
  50. package/fesm2022/provoly-dashboard-admin.mjs +14 -11
  51. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  52. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +7 -28
  53. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
  54. package/fesm2022/provoly-dashboard-notification.mjs +2 -2
  55. package/fesm2022/provoly-dashboard-notification.mjs.map +1 -1
  56. package/fesm2022/provoly-dashboard-presentation.mjs +41 -37
  57. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-restitution.mjs +7 -4
  59. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-supervision.mjs +11 -8
  61. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +17 -10
  63. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +19 -6
  65. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  66. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +1 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  68. package/fesm2022/provoly-dashboard.mjs +165 -54
  69. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  70. package/lib/core/components/about/about.component.d.ts +12 -0
  71. package/lib/core/components/about/pry-about.module.d.ts +10 -0
  72. package/lib/core/i18n/en.translations.d.ts +10 -0
  73. package/lib/core/i18n/fr.translations.d.ts +10 -0
  74. package/lib/core/i18n/i18n.service.d.ts +2 -2
  75. package/lib/core/model/widget-map-manifest.interface.d.ts +2 -0
  76. package/lib/core/public-api.d.ts +2 -0
  77. package/lib/core/store/config/config.actions.d.ts +12 -0
  78. package/lib/core/store/config/config.effects.d.ts +6 -0
  79. package/lib/core/store/config/config.reducer.d.ts +2 -0
  80. package/lib/core/store/config/config.selectors.d.ts +1 -0
  81. package/lib/core/store/config/config.service.d.ts +2 -0
  82. package/lib/core/store/config/versions.interface.d.ts +10 -0
  83. package/lib/dashboard/store/dashboard.actions.d.ts +4 -4
  84. package/lib/dashboard/store/manifest.service.d.ts +1 -1
  85. package/package.json +25 -25
  86. package/presentation/components/add-edit-presentation/add-edit-presentation.component.d.ts +4 -3
  87. package/presentation/components/presentation.component.d.ts +2 -2
  88. package/presentation/style/_o-pry-new-presentation.scss +7 -0
  89. package/restitution/components/restitution-list-item/restitution-list-item.component.d.ts +3 -2
  90. package/styles/layout/_o-base-layout.scss +8 -1
  91. package/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.d.ts +1 -1
  92. package/supervision/store/supervision.actions.d.ts +2 -2
  93. package/supervision/store/supervision.reducer.d.ts +1 -1
  94. package/supervision/store/supervision.selectors.d.ts +1 -1
  95. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +7 -0
  96. package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +0 -1
@@ -170,7 +170,7 @@ export class WidgetMapLayerService {
170
170
  attributions: [layer.attribution ?? ''],
171
171
  crossOrigin: 'anonymous',
172
172
  url: layer.url,
173
- params: { LAYERS: layer.paramLayer, TILED: layer.paramTiled }
173
+ params: { LAYERS: layer.paramLayer, TILED: layer.paramTiled, ...(layer.additionalParameters ?? {}) }
174
174
  })
175
175
  });
176
176
  impl.set('url', layer.url);
@@ -348,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
348
348
  providedIn: 'root'
349
349
  }]
350
350
  }] });
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFjVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxlQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsZ0JB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QUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUMzRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLDZCQUE2QixDQUFDLE9BQWU7UUFDbEQsUUFBUSxPQUFPLEVBQUU7WUFDZixLQUFLLFNBQVMsQ0FBQyxLQUFLO2dCQUNsQixPQUFPLFFBQVEsQ0FBQztZQUNsQixLQUFLLFNBQVMsQ0FBQyxJQUFJO2dCQUNqQixPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLFNBQVMsQ0FBQyxPQUFPO2dCQUNwQixPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLFNBQVMsQ0FBQyxTQUFTO2dCQUN0QixPQUFPLFlBQVksQ0FBQztZQUN0QixLQUFLLFNBQVMsQ0FBQyxZQUFZO2dCQUN6QixPQUFPLGVBQWUsQ0FBQztZQUN6QjtnQkFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsT0FBTyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN2RCxPQUFPLFFBQVEsQ0FBQztTQUNuQjtJQUNILENBQUM7OEdBNWZVLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEZpZWxkVHlwZSxcbiAgSXRlbVV0aWxzLFxuICBNYXBBdXRvTGF5ZXJPcHRpb25zLFxuICBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zLFxuICBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gIE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldFJlbGF0aW9uTGF5ZXJPcHRpb25zLFxuICBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zLFxuICBSZXN1bHRTZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCB9IGZyb20gJ29sJztcbmltcG9ydCB7IGdldFRvcExlZnQsIGdldFdpZHRoIH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IEdlb0pTT04sIE1WVCB9IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgeyBHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgSGVhdG1hcCwgVGlsZSB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSc7XG5pbXBvcnQgVmVjdG9yTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yJztcbmltcG9ydCBWZWN0b3JUaWxlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5pbXBvcnQgeyBDbHVzdGVyLCBUaWxlV01TLCBWZWN0b3IsIFdNVFMsIFhZWiB9IGZyb20gJ29sL3NvdXJjZSc7XG5pbXBvcnQgVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IFZlY3RvclRpbGUgZnJvbSAnb2wvc291cmNlL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgQ2lyY2xlLCBGaWxsLCBTdHJva2UsIFN0eWxlLCBUZXh0IH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IENpcmNsZVN0eWxlIGZyb20gJ29sL3N0eWxlL0NpcmNsZSc7XG5pbXBvcnQgV01UU1RpbGVHcmlkIGZyb20gJ29sL3RpbGVncmlkL1dNVFMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9IRUFUTUFQX1JBRElVUyxcbiAgREVGQVVMVF9SQURJVVNfSU5URU5TSVRZX0ZBQ1RPUixcbiAgREVGQVVMVF9aT09NX01BWCxcbiAgREVGQVVMVF9aT09NX01JTixcbiAgZ2V0Q2lyY2xlRmVhdHVyZUZyb21JdGVtLFxuICBnZXRGZWF0dXJlRnJvbUl0ZW1cbn0gZnJvbSAnLi4vdXRpbHMvd2lkZ2V0LW1hcC51dGlscyc7XG5cbmV4cG9ydCB0eXBlIEF0dHJpYnV0ZXNGb3JDbGFzcyA9IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIGludGVuc2l0eUF0dHJpYnV0ZTogQXR0cmlidXRlO1xuICAgIGxvY2F0aW9uQXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBJdGVtU3R5bGVzID0geyBbaWQ6IHN0cmluZ106IHsgY2xhc3NpYzogU3R5bGU7IGJvcmRlcmVkOiBTdHlsZSB9IH07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldE1hcExheWVyU2VydmljZSB7XG4gIHN0eWxlQ2FjaGU6IGFueSA9IHt9O1xuXG4gIGNpcmNsZVN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBmaWxsOiBuZXcgRmlsbCh7XG4gICAgICBjb2xvcjogJ3JnYmEoMzcsODksMTYzLDAuMjQpJ1xuICAgIH0pLFxuICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICBjb2xvcjogJ3JnYigzNyw4OSwxNjMpJyxcbiAgICAgIHdpZHRoOiAyXG4gICAgfSlcbiAgfSk7XG4gIHNlbGVjdGVkQ2lyY2xlU3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGZpbGw6IG5ldyBGaWxsKHtcbiAgICAgIGNvbG9yOiAncmdiYSgzNywxNjMsNTgsMC4yNCknXG4gICAgfSksXG4gICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHtcbiAgICAgIGNvbG9yOiAncmdiKDM3LDE2Myw1OCknLFxuICAgICAgd2lkdGg6IDJcbiAgICB9KVxuICB9KTtcblxuICBwb2ludFN0eWxlID0gbmV3IFN0eWxlKHtcbiAgICBpbWFnZTogbmV3IENpcmNsZSh7XG4gICAgICBmaWxsOiBuZXcgRmlsbCh7IGNvbG9yOiAncmdiYSgzNyw4OSwxNjMsMC4yNCknIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHsgY29sb3I6ICdyZ2IoMzcsODksMTYzKScsIHdpZHRoOiAyIH0pLFxuICAgICAgcmFkaXVzOiAxMFxuICAgIH0pXG4gIH0pO1xuICBzZWxlY3RlZFBvaW50U3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGltYWdlOiBuZXcgQ2lyY2xlKHtcbiAgICAgIGZpbGw6IG5ldyBGaWxsKHsgY29sb3I6ICdyZ2JhKDM3LDE2Myw1OCwwLjI0KScgfSksXG4gICAgICBzdHJva2U6IG5ldyBTdHJva2UoeyBjb2xvcjogJ3JnYigzNywxNjMsNTgpJywgd2lkdGg6IDIgfSksXG4gICAgICByYWRpdXM6IDEwXG4gICAgfSlcbiAgfSk7XG5cbiAgZ2V0IGltcGxlbWVudGF0aW9uTGlzdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5sYXllcnNJbXBsZW1lbnRhdGlvbikuZmlsdGVyKChpbXBsZW1lbnRhdGlvbikgPT4gaW1wbGVtZW50YXRpb24gIT09ICdnZW9zZXJ2ZXInKTtcbiAgfVxuXG4gIGRvbnROZWVkTG9jYXRpb24gPSBbJ3JlbGF0aW9uJywgJ3dtcycsICd3bXRzJywgJ2dlb3NlcnZlcicsICdmZWF0dXJlbGF5ZXInLCAndmVjdG9ydGlsZScsICdyYXN0ZXJ0aWxlJ107XG4gIGRvbnROZWVkSW50ZW5zaXR5ID0gW1xuICAgIC4uLnRoaXMuZG9udE5lZWRMb2NhdGlvbixcbiAgICAnbWFya2VyJyxcbiAgICAncG9pbnQnLFxuICAgICdsaW5lJyxcbiAgICAncG9seWdvbicsXG4gICAgJ211bHRpLWxpbmUnLFxuICAgICdtdWx0aS1wb2x5Z29uJyxcbiAgICAnYXV0bydcbiAgXTtcblxuICBsYXllcnNJbXBsZW1lbnRhdGlvbiA9IHtcbiAgICBhdXRvOiAoXG4gICAgICBsYXllcjogTWFwQXV0b0xheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJzSW1wbGVtZW50YXRpb25bV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLnRyYW5zbGF0ZUZpZWxkVHlwZVRvTGF5ZXJUeXBlKGxheWVyLnN1YlR5cGUpXShcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBsYXllcixcbiAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgbWFwXG4gICAgICApIGFzIEJhc2VMYXllcjtcbiAgICB9LFxuICAgIGhlYXRtYXA6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBoZWF0bWFwID0gbmV3IEhlYXRtYXAoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yKHsgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddIH0pLFxuICAgICAgICBibHVyOiAobGF5ZXIucmFkaXVzID8/IERFRkFVTFRfSEVBVE1BUF9SQURJVVMpIC8gMixcbiAgICAgICAgcmFkaXVzOiBsYXllci5yYWRpdXMgPz8gREVGQVVMVF9IRUFUTUFQX1JBRElVUyxcbiAgICAgICAgd2VpZ2h0OiAoZmVhdHVyZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKFxuICAgICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tmZWF0dXJlLmdldCgnb0NsYXNzJykgYXMgc3RyaW5nXS5pbnRlbnNpdHlBdHRyaWJ1dGVcbiAgICAgICAgICApIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBhdFNjYWxlID0gKHZhbHVlIC0gcmFuZ2UubWluKSAvIChyYW5nZS5tYXggLSByYW5nZS5taW4pO1xuICAgICAgICAgIHJldHVybiBsYXllci5pbnRlbnNpdHlBc2MgPyBhdFNjYWxlIDogMSAtIGF0U2NhbGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBJdGVtVXRpbHMucmVhZEdlb21ldHJ5KGl0ZW0sICdwb2ludCcsIGF0dHJpYnV0ZXNGb3JDbGFzc1tjbGFzc0lkXS5sb2NhdGlvbkF0dHJpYnV0ZSk7XG4gICAgICAgICAgICByZXR1cm4gISFsb2NhdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBoZWF0bWFwXG4gICAgICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgICAgICA/LmFkZEZlYXR1cmUoZ2V0RmVhdHVyZUZyb21JdGVtKGl0ZW0sICdoZWF0cG9pbnQnLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGhlYXRtYXAgYXMgQmFzZUxheWVyO1xuICAgIH0sXG4gICAgbWFya2VyOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB2ZWN0b3JMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICAgIH0pO1xuXG4gICAgICBsYXllckNsYXNzZXNJZC5mb3JFYWNoKChjbGFzc0lkKSA9PiB7XG4gICAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBJdGVtVXRpbHMucmVhZEdlb21ldHJ5KGl0ZW0sICdwb2ludCcsIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUpO1xuICAgICAgICAgICAgcmV0dXJuICEhbG9jYXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZm9yRWFjaChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUZlYXR1cmUgPSBnZXRGZWF0dXJlRnJvbUl0ZW0oXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICdtYXJrZXInLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlLFxuICAgICAgICAgICAgICBpdGVtU3R5bGVzW2l0ZW0uaWRdPy5jbGFzc2ljLFxuICAgICAgICAgICAgICBpdGVtU3R5bGVzW2l0ZW0uaWRdPy5ib3JkZXJlZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGl0ZW1GZWF0dXJlLnNldFN0eWxlKGl0ZW1GZWF0dXJlLmdldCgnY2xhc3NpY1N0eWxlJykpO1xuICAgICAgICAgICAgdmVjdG9yTGF5ZXIuZ2V0U291cmNlKCk/LmFkZEZlYXR1cmUoaXRlbUZlYXR1cmUpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0aGlzLm1ha2VDbHVzdGVyZWQodmVjdG9yTGF5ZXIsIGxheWVyKTtcbiAgICB9LFxuICAgIHBvaW50OiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllckZyb21HZW9Kc29uR2VvbWV0cnkobGF5ZXIsIGxheWVyQ2xhc3Nlc0lkLCByZXN1bHRTZXQsIGF0dHJpYnV0ZXNGb3JDbGFzcywgJ3BvaW50Jyk7XG4gICAgfSxcbiAgICBsaW5lOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllckZyb21HZW9Kc29uR2VvbWV0cnkobGF5ZXIsIGxheWVyQ2xhc3Nlc0lkLCByZXN1bHRTZXQsIGF0dHJpYnV0ZXNGb3JDbGFzcywgJ2xpbmUnKTtcbiAgICB9LFxuICAgICdtdWx0aS1saW5lJzogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdtdWx0aS1saW5lJyk7XG4gICAgfSxcbiAgICBwb2x5Z29uOiAoXG4gICAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllckZyb21HZW9Kc29uR2VvbWV0cnkobGF5ZXIsIGxheWVyQ2xhc3Nlc0lkLCByZXN1bHRTZXQsIGF0dHJpYnV0ZXNGb3JDbGFzcywgJ3BvbHlnb24nKTtcbiAgICB9LFxuICAgICdtdWx0aS1wb2x5Z29uJzogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KGxheWVyLCBsYXllckNsYXNzZXNJZCwgcmVzdWx0U2V0LCBhdHRyaWJ1dGVzRm9yQ2xhc3MsICdtdWx0aS1wb2x5Z29uJyk7XG4gICAgfSxcbiAgICBidWJibGU6IChcbiAgICAgIGxheWVyOiBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGJ1YmJsZUxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclNvdXJjZSh7IGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSB9KVxuICAgICAgfSk7XG5cbiAgICAgIGxheWVyQ2xhc3Nlc0lkLmZvckVhY2goKGNsYXNzSWQpID0+IHtcbiAgICAgICAgKHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IEl0ZW1VdGlscy5yZWFkR2VvbWV0cnkoaXRlbSwgJ3BvaW50JywgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSk7XG4gICAgICAgICAgICByZXR1cm4gISFsb2NhdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVDYWxjdWxhdGVkVmFsdWUoXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10uaW50ZW5zaXR5QXR0cmlidXRlXG4gICAgICAgICAgICApIGFzIG51bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IGF0U2NhbGUgPSAodmFsdWUgLSByYW5nZS5taW4pIC8gKHJhbmdlLm1heCAtIHJhbmdlLm1pbik7XG4gICAgICAgICAgICBjb25zdCBpdGVtRmVhdHVyZSA9IGdldENpcmNsZUZlYXR1cmVGcm9tSXRlbShcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzW2l0ZW0ub0NsYXNzXS5sb2NhdGlvbkF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgKGxheWVyLmludGVuc2l0eUFzYyA/IGF0U2NhbGUgOiAxIC0gYXRTY2FsZSkgKiAobGF5ZXIucmFkaXVzRmFjdG9yID8/IERFRkFVTFRfUkFESVVTX0lOVEVOU0lUWV9GQUNUT1IpLFxuICAgICAgICAgICAgICB0aGlzLmNpcmNsZVN0eWxlLFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2lyY2xlU3R5bGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpdGVtRmVhdHVyZS5zZXRTdHlsZShpdGVtRmVhdHVyZS5nZXQoJ2NsYXNzaWNTdHlsZScpKTtcbiAgICAgICAgICAgIGJ1YmJsZUxheWVyLmdldFNvdXJjZSgpPy5hZGRGZWF0dXJlKGl0ZW1GZWF0dXJlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYnViYmxlTGF5ZXI7XG4gICAgfSxcbiAgICByZWxhdGlvbjogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldFJlbGF0aW9uTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclNvdXJjZSh7IGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB3bXM6IChcbiAgICAgIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaW1wbCA9IG5ldyBUaWxlKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFRpbGVXTVMoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXG4gICAgICAgICAgdXJsOiBsYXllci51cmwsXG4gICAgICAgICAgcGFyYW1zOiB7IExBWUVSUzogbGF5ZXIucGFyYW1MYXllciwgVElMRUQ6IGxheWVyLnBhcmFtVGlsZWQgfVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBpbXBsLnNldCgndXJsJywgbGF5ZXIudXJsKTtcbiAgICAgIGltcGwuc2V0KCdwYXJhbUxheWVyJywgbGF5ZXIucGFyYW1MYXllcik7XG4gICAgICBpbXBsLnNldCgnb0NsYXNzJywgbGF5ZXIub0NsYXNzKTtcbiAgICAgIGltcGwuc2V0KCdnZXRGZWF0dXJlSW5mb0FkZGl0aW9uYWxQYXJhbWV0ZXJzJywgbGF5ZXIuZ2V0RmVhdHVyZUluZm9BZGRpdGlvbmFsUGFyYW1ldGVycyA/PyB7fSk7XG4gICAgICByZXR1cm4gaW1wbDtcbiAgICB9LFxuICAgIHdtdHM6IChcbiAgICAgIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHByb2plY3Rpb24gPSBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcbiAgICAgIGNvbnN0IHByb2plY3Rpb25FeHRlbnQgPSBwcm9qZWN0aW9uLmdldEV4dGVudCgpO1xuICAgICAgY29uc3Qgc2l6ZSA9IGdldFdpZHRoKHByb2plY3Rpb25FeHRlbnQpIC8gMjU2O1xuICAgICAgY29uc3QgcmVzb2x1dGlvbnMgPSBuZXcgQXJyYXkoMTkpO1xuICAgICAgY29uc3QgbWF0cml4SWRzID0gbmV3IEFycmF5KDE5KTtcbiAgICAgIGZvciAobGV0IHogPSAwOyB6IDwgMTk7ICsreikge1xuICAgICAgICAvLyBnZW5lcmF0ZSByZXNvbHV0aW9ucyBhbmQgbWF0cml4SWRzIGFycmF5cyBmb3IgdGhpcyBXTVRTXG4gICAgICAgIHJlc29sdXRpb25zW3pdID0gc2l6ZSAvIE1hdGgucG93KDIsIHopO1xuICAgICAgICBtYXRyaXhJZHNbel0gPSB6O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBUaWxlKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFdNVFMoe1xuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSxcbiAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXG4gICAgICAgICAgdXJsOiBsYXllci51cmwsXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLnBhcmFtTGF5ZXIsXG4gICAgICAgICAgbWF0cml4U2V0OiBsYXllci5tYXRyaXhTZXQsXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICB0aWxlR3JpZDogbmV3IFdNVFNUaWxlR3JpZCh7XG4gICAgICAgICAgICBvcmlnaW46IGdldFRvcExlZnQocHJvamVjdGlvbkV4dGVudCksXG4gICAgICAgICAgICByZXNvbHV0aW9uczogcmVzb2x1dGlvbnMsXG4gICAgICAgICAgICBtYXRyaXhJZHM6IG1hdHJpeElkc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN0eWxlOiBsYXllci5zdHlsZVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZW9zZXJ2ZXI6IChcbiAgICAgIGxheWVyOiBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGltcGwgPSB0aGlzLmxheWVyc0ltcGxlbWVudGF0aW9uWyd3bXMnXShcbiAgICAgICAgeyAuLi5sYXllciwgdHlwZTogJ3dtcycsIG9DbGFzczogbGF5ZXIub0NsYXNzIH0sXG4gICAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgIHJlc3VsdFNldCxcbiAgICAgICAgcmFuZ2UsXG4gICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgIG1hcFxuICAgICAgKTtcbiAgICAgIGltcGwuc2V0KCd0aXRsZScsIGxheWVyLnRpdGxlKTtcbiAgICAgIGltcGwuc2V0KCdvQ2xhc3MnLCBsYXllci5vQ2xhc3MpO1xuICAgICAgcmV0dXJuIGltcGw7XG4gICAgfSxcbiAgICBmZWF0dXJlbGF5ZXI6IChcbiAgICAgIGxheWVyOiBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICBtYXhab29tOiBsYXllci5tYXhab29tID8/IERFRkFVTFRfWk9PTV9NQVgsXG4gICAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICAgIHNvdXJjZTogbmV3IFZlY3RvclNvdXJjZSh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGZvcm1hdDogbmV3IEdlb0pTT04oKSxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB2ZWN0b3J0aWxlOiAoXG4gICAgICBsYXllcjogTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBWZWN0b3JUaWxlTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yVGlsZSh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGZvcm1hdDogbmV3IE1WVCgpLFxuICAgICAgICAgIHVybDogbGF5ZXIudXJsXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJhc3RlcnRpbGU6IChcbiAgICAgIGxheWVyOiBNYXBSYXN0ZXJUaWxlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFRpbGUoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgWFlaKHtcbiAgICAgICAgICB1cmw6IGxheWVyLnVybCxcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ11cbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGxheWVyRnJvbUdlb0pzb25HZW9tZXRyeShcbiAgICBsYXllcjogTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICB0eXBlOiAncG9pbnQnIHwgJ2xpbmUnIHwgJ211bHRpLWxpbmUnIHwgJ3BvbHlnb24nIHwgJ211bHRpLXBvbHlnb24nXG4gICkge1xuICAgIGNvbnN0IHZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgIG9wYWNpdHk6IChsYXllci5vcGFjaXR5ID8/IDEwMCkgLyAxMDAsXG4gICAgICBzb3VyY2U6IG5ldyBWZWN0b3JTb3VyY2UoeyBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10gfSlcbiAgICB9KTtcblxuICAgIGxheWVyQ2xhc3Nlc0lkLmZvckVhY2goKGNsYXNzSWQpID0+IHtcbiAgICAgIChyZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0gfHwgW10pXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaXRlbSxcbiAgICAgICAgICBsb2NhdGlvbjogSXRlbVV0aWxzLnJlYWRHZW9tZXRyeShpdGVtLCB0eXBlLCBhdHRyaWJ1dGVzRm9yQ2xhc3NbaXRlbS5vQ2xhc3NdLmxvY2F0aW9uQXR0cmlidXRlKVxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcigoeyBsb2NhdGlvbiB9KSA9PiAhIWxvY2F0aW9uKVxuICAgICAgICAuZm9yRWFjaChhc3luYyAoc3ViSXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW1GZWF0dXJlID0gbmV3IEZlYXR1cmUoe1xuICAgICAgICAgICAgLi4uc3ViSXRlbS5pdGVtLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGdlb21ldHJ5OiBzdWJJdGVtLmxvY2F0aW9uLFxuICAgICAgICAgICAgY2xhc3NpY1N0eWxlOiB0eXBlID09PSAncG9pbnQnID8gdGhpcy5wb2ludFN0eWxlIDogdGhpcy5jaXJjbGVTdHlsZSxcbiAgICAgICAgICAgIHNlbGVjdGVkU3R5bGU6IHR5cGUgPT09ICdwb2ludCcgPyB0aGlzLnNlbGVjdGVkUG9pbnRTdHlsZSA6IHRoaXMuc2VsZWN0ZWRDaXJjbGVTdHlsZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGl0ZW1GZWF0dXJlLnNldFN0eWxlKGl0ZW1GZWF0dXJlLmdldCgnY2xhc3NpY1N0eWxlJykpO1xuICAgICAgICAgIHZlY3RvckxheWVyLmdldFNvdXJjZSgpPy5hZGRGZWF0dXJlKGl0ZW1GZWF0dXJlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5tYWtlQ2x1c3RlcmVkKHZlY3RvckxheWVyLCBsYXllcik7XG4gIH1cblxuICBwcml2YXRlIG1ha2VDbHVzdGVyZWQobGF5ZXI6IEJhc2VMYXllciwgbGF5ZXJPcHRpb25zOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBpZiAoIVsnbWFya2VyJywgJ2J1YmJsZSddLmluY2x1ZGVzKGxheWVyT3B0aW9ucy50eXBlKSB8fCAhKCdjbHVzdGVyZWQnIGluIGxheWVyT3B0aW9ucyAmJiBsYXllck9wdGlvbnMuY2x1c3RlcmVkKSkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICAvLyBDbHVzdGVyaW5nIHNvdXJjZVxuICAgIGNvbnN0IHZlY3RvckxheWVyID0gbGF5ZXIgYXMgVmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPEdlb21ldHJ5Pj47XG4gICAgdmVjdG9yTGF5ZXIuc2V0U291cmNlKFxuICAgICAgbmV3IENsdXN0ZXIoe1xuICAgICAgICBkaXN0YW5jZTogbGF5ZXJPcHRpb25zLmNsdXN0ZXJEaXN0YW5jZSxcbiAgICAgICAgbWluRGlzdGFuY2U6IDEwLFxuICAgICAgICBzb3VyY2U6IHZlY3RvckxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdmVjdG9yTGF5ZXIuc2V0U3R5bGUoKGZlYXR1cmUpID0+IHtcbiAgICAgIGNvbnN0IHNpemUgPSBmZWF0dXJlLmdldCgnZmVhdHVyZXMnKS5sZW5ndGg7XG4gICAgICBpZiAoc2l6ZSA+IDEpIHtcbiAgICAgICAgbGV0IHN0eWxlID0gdGhpcy5zdHlsZUNhY2hlW3NpemVdO1xuICAgICAgICBpZiAoIXN0eWxlKSB7XG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgICAgICAgICAgaW1hZ2U6IG5ldyBDaXJjbGVTdHlsZSh7XG4gICAgICAgICAgICAgIHJhZGl1czogMTAsXG4gICAgICAgICAgICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7XG4gICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJ1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZmlsbDogbmV3IEZpbGwoe1xuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzMzOTlDQydcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGV4dDogbmV3IFRleHQoeyB0ZXh0OiBgJHtzaXplfWAgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN0eWxlQ2FjaGVbc2l6ZV0gPSBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc2l6ZSA9PT0gMSA/IGZlYXR1cmUuZ2V0KCdmZWF0dXJlcycpWzBdLmdldCgnY2xhc3NpY1N0eWxlJykgOiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgc3RhdGljIHRyYW5zbGF0ZUZpZWxkVHlwZVRvTGF5ZXJUeXBlKHN1YlR5cGU6IHN0cmluZykge1xuICAgIHN3aXRjaCAoc3ViVHlwZSkge1xuICAgICAgY2FzZSBGaWVsZFR5cGUuUE9JTlQ6XG4gICAgICAgIHJldHVybiAnbWFya2VyJztcbiAgICAgIGNhc2UgRmllbGRUeXBlLkxJTkU6XG4gICAgICAgIHJldHVybiAnbGluZSc7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5QT0xZR09OOlxuICAgICAgICByZXR1cm4gJ3BvbHlnb24nO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuTVVMVElMSU5FOlxuICAgICAgICByZXR1cm4gJ211bHRpLWxpbmUnO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuTVVMVElQT0xZR09OOlxuICAgICAgICByZXR1cm4gJ211bHRpLXBvbHlnb24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGB3cm9uZyB0eXBlICR7c3ViVHlwZX0gZm9yIGF1dG8gb3B0aW9uc2ApO1xuICAgICAgICByZXR1cm4gJ21hcmtlcic7XG4gICAgfVxuICB9XG59XG4iXX0=
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUNULFNBQVMsRUFjVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxlQUFlLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDN0QsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxZQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUNMLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsZ0JB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQzNFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLENBQUMsNkJBQTZCLENBQUMsT0FBZTtRQUNsRCxRQUFRLE9BQU8sRUFBRTtZQUNmLEtBQUssU0FBUyxDQUFDLEtBQUs7Z0JBQ2xCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLEtBQUssU0FBUyxDQUFDLElBQUk7Z0JBQ2pCLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssU0FBUyxDQUFDLE9BQU87Z0JBQ3BCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLEtBQUssU0FBUyxDQUFDLFNBQVM7Z0JBQ3RCLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLEtBQUssU0FBUyxDQUFDLFlBQVk7Z0JBQ3pCLE9BQU8sZUFBZSxDQUFDO1lBQ3pCO2dCQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxPQUFPLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs4R0E1ZlUscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgRmllbGRUeXBlLFxuICBJdGVtVXRpbHMsXG4gIE1hcEF1dG9MYXllck9wdGlvbnMsXG4gIE1hcEZlYXR1cmVMYXllck9wdGlvbnMsXG4gIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0UmVsYXRpb25MYXllck9wdGlvbnMsXG4gIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zLFxuICBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMsXG4gIFJlc3VsdFNldFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgRmVhdHVyZSwgTWFwIH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgZ2V0VG9wTGVmdCwgZ2V0V2lkdGggfSBmcm9tICdvbC9leHRlbnQnO1xuaW1wb3J0IHsgR2VvSlNPTiwgTVZUIH0gZnJvbSAnb2wvZm9ybWF0JztcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBIZWF0bWFwLCBUaWxlIH0gZnJvbSAnb2wvbGF5ZXInO1xuaW1wb3J0IEJhc2VMYXllciBmcm9tICdvbC9sYXllci9CYXNlJztcbmltcG9ydCBWZWN0b3JMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3InO1xuaW1wb3J0IFZlY3RvclRpbGVMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3JUaWxlJztcbmltcG9ydCB7IENsdXN0ZXIsIFRpbGVXTVMsIFZlY3RvciwgV01UUywgWFlaIH0gZnJvbSAnb2wvc291cmNlJztcbmltcG9ydCBWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgVmVjdG9yVGlsZSBmcm9tICdvbC9zb3VyY2UvVmVjdG9yVGlsZSc7XG5pbXBvcnQgeyBDaXJjbGUsIEZpbGwsIFN0cm9rZSwgU3R5bGUsIFRleHQgfSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgQ2lyY2xlU3R5bGUgZnJvbSAnb2wvc3R5bGUvQ2lyY2xlJztcbmltcG9ydCBXTVRTVGlsZUdyaWQgZnJvbSAnb2wvdGlsZWdyaWQvV01UUyc7XG5pbXBvcnQge1xuICBERUZBVUxUX0hFQVRNQVBfUkFESVVTLFxuICBERUZBVUxUX1JBRElVU19JTlRFTlNJVFlfRkFDVE9SLFxuICBERUZBVUxUX1pPT01fTUFYLFxuICBERUZBVUxUX1pPT01fTUlOLFxuICBnZXRDaXJjbGVGZWF0dXJlRnJvbUl0ZW0sXG4gIGdldEZlYXR1cmVGcm9tSXRlbVxufSBmcm9tICcuLi91dGlscy93aWRnZXQtbWFwLnV0aWxzJztcblxuZXhwb3J0IHR5cGUgQXR0cmlidXRlc0ZvckNsYXNzID0ge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgaW50ZW5zaXR5QXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZTtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIEl0ZW1TdHlsZXMgPSB7IFtpZDogc3RyaW5nXTogeyBjbGFzc2ljOiBTdHlsZTsgYm9yZGVyZWQ6IFN0eWxlIH0gfTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIHtcbiAgc3R5bGVDYWNoZTogYW55ID0ge307XG5cbiAgY2lyY2xlU3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGZpbGw6IG5ldyBGaWxsKHtcbiAgICAgIGNvbG9yOiAncmdiYSgzNyw4OSwxNjMsMC4yNCknXG4gICAgfSksXG4gICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHtcbiAgICAgIGNvbG9yOiAncmdiKDM3LDg5LDE2MyknLFxuICAgICAgd2lkdGg6IDJcbiAgICB9KVxuICB9KTtcbiAgc2VsZWN0ZWRDaXJjbGVTdHlsZSA9IG5ldyBTdHlsZSh7XG4gICAgZmlsbDogbmV3IEZpbGwoe1xuICAgICAgY29sb3I6ICdyZ2JhKDM3LDE2Myw1OCwwLjI0KSdcbiAgICB9KSxcbiAgICBzdHJva2U6IG5ldyBTdHJva2Uoe1xuICAgICAgY29sb3I6ICdyZ2IoMzcsMTYzLDU4KScsXG4gICAgICB3aWR0aDogMlxuICAgIH0pXG4gIH0pO1xuXG4gIHBvaW50U3R5bGUgPSBuZXcgU3R5bGUoe1xuICAgIGltYWdlOiBuZXcgQ2lyY2xlKHtcbiAgICAgIGZpbGw6IG5ldyBGaWxsKHsgY29sb3I6ICdyZ2JhKDM3LDg5LDE2MywwLjI0KScgfSksXG4gICAgICBzdHJva2U6IG5ldyBTdHJva2UoeyBjb2xvcjogJ3JnYigzNyw4OSwxNjMpJywgd2lkdGg6IDIgfSksXG4gICAgICByYWRpdXM6IDEwXG4gICAgfSlcbiAgfSk7XG4gIHNlbGVjdGVkUG9pbnRTdHlsZSA9IG5ldyBTdHlsZSh7XG4gICAgaW1hZ2U6IG5ldyBDaXJjbGUoe1xuICAgICAgZmlsbDogbmV3IEZpbGwoeyBjb2xvcjogJ3JnYmEoMzcsMTYzLDU4LDAuMjQpJyB9KSxcbiAgICAgIHN0cm9rZTogbmV3IFN0cm9rZSh7IGNvbG9yOiAncmdiKDM3LDE2Myw1OCknLCB3aWR0aDogMiB9KSxcbiAgICAgIHJhZGl1czogMTBcbiAgICB9KVxuICB9KTtcblxuICBnZXQgaW1wbGVtZW50YXRpb25MaXN0KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmxheWVyc0ltcGxlbWVudGF0aW9uKS5maWx0ZXIoKGltcGxlbWVudGF0aW9uKSA9PiBpbXBsZW1lbnRhdGlvbiAhPT0gJ2dlb3NlcnZlcicpO1xuICB9XG5cbiAgZG9udE5lZWRMb2NhdGlvbiA9IFsncmVsYXRpb24nLCAnd21zJywgJ3dtdHMnLCAnZ2Vvc2VydmVyJywgJ2ZlYXR1cmVsYXllcicsICd2ZWN0b3J0aWxlJywgJ3Jhc3RlcnRpbGUnXTtcbiAgZG9udE5lZWRJbnRlbnNpdHkgPSBbXG4gICAgLi4udGhpcy5kb250TmVlZExvY2F0aW9uLFxuICAgICdtYXJrZXInLFxuICAgICdwb2ludCcsXG4gICAgJ2xpbmUnLFxuICAgICdwb2x5Z29uJyxcbiAgICAnbXVsdGktbGluZScsXG4gICAgJ211bHRpLXBvbHlnb24nLFxuICAgICdhdXRvJ1xuICBdO1xuXG4gIGxheWVyc0ltcGxlbWVudGF0aW9uID0ge1xuICAgIGF1dG86IChcbiAgICAgIGxheWVyOiBNYXBBdXRvTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllcnNJbXBsZW1lbnRhdGlvbltXaWRnZXRNYXBMYXllclNlcnZpY2UudHJhbnNsYXRlRmllbGRUeXBlVG9MYXllclR5cGUobGF5ZXIuc3ViVHlwZSldKFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGxheWVyLFxuICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgIGxheWVyQ2xhc3Nlc0lkLFxuICAgICAgICByZXN1bHRTZXQsXG4gICAgICAgIHJhbmdlLFxuICAgICAgICBpdGVtU3R5bGVzLFxuICAgICAgICBtYXBcbiAgICAgICkgYXMgQmFzZUxheWVyO1xuICAgIH0sXG4gICAgaGVhdG1hcDogKFxuICAgICAgbGF5ZXI6IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+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/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVGlsZVdNUyh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybCxcbiAgICAgICAgICBwYXJhbXM6IHsgTEFZRVJTOiBsYXllci5wYXJhbUxheWVyLCBUSUxFRDogbGF5ZXIucGFyYW1UaWxlZCwgLi4uKGxheWVyLmFkZGl0aW9uYWxQYXJhbWV0ZXJzID8/IHt9KSB9XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIGltcGwuc2V0KCd1cmwnLCBsYXllci51cmwpO1xuICAgICAgaW1wbC5zZXQoJ3BhcmFtTGF5ZXInLCBsYXllci5wYXJhbUxheWVyKTtcbiAgICAgIGltcGwuc2V0KCdvQ2xhc3MnLCBsYXllci5vQ2xhc3MpO1xuICAgICAgaW1wbC5zZXQoJ2dldEZlYXR1cmVJbmZvQWRkaXRpb25hbFBhcmFtZXRlcnMnLCBsYXllci5nZXRGZWF0dXJlSW5mb0FkZGl0aW9uYWxQYXJhbWV0ZXJzID8/IHt9KTtcbiAgICAgIHJldHVybiBpbXBsO1xuICAgIH0sXG4gICAgd210czogKFxuICAgICAgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgcHJvamVjdGlvbiA9IG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xuICAgICAgY29uc3QgcHJvamVjdGlvbkV4dGVudCA9IHByb2plY3Rpb24uZ2V0RXh0ZW50KCk7XG4gICAgICBjb25zdCBzaXplID0gZ2V0V2lkdGgocHJvamVjdGlvbkV4dGVudCkgLyAyNTY7XG4gICAgICBjb25zdCByZXNvbHV0aW9ucyA9IG5ldyBBcnJheSgxOSk7XG4gICAgICBjb25zdCBtYXRyaXhJZHMgPSBuZXcgQXJyYXkoMTkpO1xuICAgICAgZm9yIChsZXQgeiA9IDA7IHogPCAxOTsgKyt6KSB7XG4gICAgICAgIC8vIGdlbmVyYXRlIHJlc29sdXRpb25zIGFuZCBtYXRyaXhJZHMgYXJyYXlzIGZvciB0aGlzIFdNVFNcbiAgICAgICAgcmVzb2x1dGlvbnNbel0gPSBzaXplIC8gTWF0aC5wb3coMiwgeik7XG4gICAgICAgIG1hdHJpeElkc1t6XSA9IHo7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFRpbGUoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgV01UUyh7XG4gICAgICAgICAgYXR0cmlidXRpb25zOiBbbGF5ZXIuYXR0cmlidXRpb24gPz8gJyddLFxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICB1cmw6IGxheWVyLnVybCxcbiAgICAgICAgICBsYXllcjogbGF5ZXIucGFyYW1MYXllcixcbiAgICAgICAgICBtYXRyaXhTZXQ6IGxheWVyLm1hdHJpeFNldCxcbiAgICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAgIHRpbGVHcmlkOiBuZXcgV01UU1RpbGVHcmlkKHtcbiAgICAgICAgICAgIG9yaWdpbjogZ2V0VG9wTGVmdChwcm9qZWN0aW9uRXh0ZW50KSxcbiAgICAgICAgICAgIHJlc29sdXRpb25zOiByZXNvbHV0aW9ucyxcbiAgICAgICAgICAgIG1hdHJpeElkczogbWF0cml4SWRzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3R5bGU6IGxheWVyLnN0eWxlXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdlb3NlcnZlcjogKFxuICAgICAgbGF5ZXI6IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgICByYW5nZTogeyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfSxcbiAgICAgIGl0ZW1TdHlsZXM6IEl0ZW1TdHlsZXMsXG4gICAgICBtYXA6IE1hcFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaW1wbCA9IHRoaXMubGF5ZXJzSW1wbGVtZW50YXRpb25bJ3dtcyddKFxuICAgICAgICB7IC4uLmxheWVyLCB0eXBlOiAnd21zJywgb0NsYXNzOiBsYXllci5vQ2xhc3MgfSxcbiAgICAgICAgYXR0cmlidXRlc0ZvckNsYXNzLFxuICAgICAgICBsYXllckNsYXNzZXNJZCxcbiAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICByYW5nZSxcbiAgICAgICAgaXRlbVN0eWxlcyxcbiAgICAgICAgbWFwXG4gICAgICApO1xuICAgICAgaW1wbC5zZXQoJ3RpdGxlJywgbGF5ZXIudGl0bGUpO1xuICAgICAgaW1wbC5zZXQoJ29DbGFzcycsIGxheWVyLm9DbGFzcyk7XG4gICAgICByZXR1cm4gaW1wbDtcbiAgICB9LFxuICAgIGZlYXR1cmVsYXllcjogKFxuICAgICAgbGF5ZXI6IE1hcEZlYXR1cmVMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBtaW5ab29tOiBsYXllci5taW5ab29tID8/IERFRkFVTFRfWk9PTV9NSU4sXG4gICAgICAgIG1heFpvb206IGxheWVyLm1heFpvb20gPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgICAgc291cmNlOiBuZXcgVmVjdG9yU291cmNlKHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10sXG4gICAgICAgICAgZm9ybWF0OiBuZXcgR2VvSlNPTigpLFxuICAgICAgICAgIHVybDogbGF5ZXIudXJsXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHZlY3RvcnRpbGU6IChcbiAgICAgIGxheWVyOiBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zLFxuICAgICAgYXR0cmlidXRlc0ZvckNsYXNzOiBBdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICBsYXllckNsYXNzZXNJZDogc3RyaW5nW10sXG4gICAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICAgIHJhbmdlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9LFxuICAgICAgaXRlbVN0eWxlczogSXRlbVN0eWxlcyxcbiAgICAgIG1hcDogTWFwXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFZlY3RvclRpbGVMYXllcih7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBWZWN0b3JUaWxlKHtcbiAgICAgICAgICBhdHRyaWJ1dGlvbnM6IFtsYXllci5hdHRyaWJ1dGlvbiA/PyAnJ10sXG4gICAgICAgICAgZm9ybWF0OiBuZXcgTVZUKCksXG4gICAgICAgICAgdXJsOiBsYXllci51cmxcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcmFzdGVydGlsZTogKFxuICAgICAgbGF5ZXI6IE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3M6IEF0dHJpYnV0ZXNGb3JDbGFzcyxcbiAgICAgIGxheWVyQ2xhc3Nlc0lkOiBzdHJpbmdbXSxcbiAgICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgICAgcmFuZ2U6IHsgbWluOiBudW1iZXI7IG1heDogbnVtYmVyIH0sXG4gICAgICBpdGVtU3R5bGVzOiBJdGVtU3R5bGVzLFxuICAgICAgbWFwOiBNYXBcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBuZXcgVGlsZSh7XG4gICAgICAgIG1pblpvb206IGxheWVyLm1pblpvb20gPz8gREVGQVVMVF9aT09NX01JTixcbiAgICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgICBvcGFjaXR5OiAobGF5ZXIub3BhY2l0eSA/PyAxMDApIC8gMTAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBYWVooe1xuICAgICAgICAgIHVybDogbGF5ZXIudXJsLFxuICAgICAgICAgIGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgbGF5ZXJGcm9tR2VvSnNvbkdlb21ldHJ5KFxuICAgIGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gICAgbGF5ZXJDbGFzc2VzSWQ6IHN0cmluZ1tdLFxuICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgIGF0dHJpYnV0ZXNGb3JDbGFzczogQXR0cmlidXRlc0ZvckNsYXNzLFxuICAgIHR5cGU6ICdwb2ludCcgfCAnbGluZScgfCAnbXVsdGktbGluZScgfCAncG9seWdvbicgfCAnbXVsdGktcG9seWdvbidcbiAgKSB7XG4gICAgY29uc3QgdmVjdG9yTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgbWluWm9vbTogbGF5ZXIubWluWm9vbSA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgbWF4Wm9vbTogbGF5ZXIubWF4Wm9vbSA/PyBERUZBVUxUX1pPT01fTUFYLFxuICAgICAgb3BhY2l0eTogKGxheWVyLm9wYWNpdHkgPz8gMTAwKSAvIDEwMCxcbiAgICAgIHNvdXJjZTogbmV3IFZlY3RvclNvdXJjZSh7IGF0dHJpYnV0aW9uczogW2xheWVyLmF0dHJpYnV0aW9uID8/ICcnXSB9KVxuICAgIH0pO1xuXG4gICAgbGF5ZXJDbGFzc2VzSWQuZm9yRWFjaCgoY2xhc3NJZCkgPT4ge1xuICAgICAgKHJlc3VsdFNldC5pdGVtc1tjbGFzc0lkXSB8fCBbXSlcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIGxvY2F0aW9uOiBJdGVtVXRpbHMucmVhZEdlb21ldHJ5KGl0ZW0sIHR5cGUsIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10ubG9jYXRpb25BdHRyaWJ1dGUpXG4gICAgICAgIH0pKVxuICAgICAgICAuZmlsdGVyKCh7IGxvY2F0aW9uIH0pID0+ICEhbG9jYXRpb24pXG4gICAgICAgIC5mb3JFYWNoKGFzeW5jIChzdWJJdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbUZlYXR1cmUgPSBuZXcgRmVhdHVyZSh7XG4gICAgICAgICAgICAuLi5zdWJJdGVtLml0ZW0sXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgZ2VvbWV0cnk6IHN1Ykl0ZW0ubG9jYXRpb24sXG4gICAgICAgICAgICBjbGFzc2ljU3R5bGU6IHR5cGUgPT09ICdwb2ludCcgPyB0aGlzLnBvaW50U3R5bGUgOiB0aGlzLmNpcmNsZVN0eWxlLFxuICAgICAgICAgICAgc2VsZWN0ZWRTdHlsZTogdHlwZSA9PT0gJ3BvaW50JyA/IHRoaXMuc2VsZWN0ZWRQb2ludFN0eWxlIDogdGhpcy5zZWxlY3RlZENpcmNsZVN0eWxlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaXRlbUZlYXR1cmUuc2V0U3R5bGUoaXRlbUZlYXR1cmUuZ2V0KCdjbGFzc2ljU3R5bGUnKSk7XG4gICAgICAgICAgdmVjdG9yTGF5ZXIuZ2V0U291cmNlKCk/LmFkZEZlYXR1cmUoaXRlbUZlYXR1cmUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLm1ha2VDbHVzdGVyZWQodmVjdG9yTGF5ZXIsIGxheWVyKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUNsdXN0ZXJlZChsYXllcjogQmFzZUxheWVyLCBsYXllck9wdGlvbnM6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGlmICghWydtYXJrZXInLCAnYnViYmxlJ10uaW5jbHVkZXMobGF5ZXJPcHRpb25zLnR5cGUpIHx8ICEoJ2NsdXN0ZXJlZCcgaW4gbGF5ZXJPcHRpb25zICYmIGxheWVyT3B0aW9ucy5jbHVzdGVyZWQpKSB7XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfVxuICAgIC8vIENsdXN0ZXJpbmcgc291cmNlXG4gICAgY29uc3QgdmVjdG9yTGF5ZXIgPSBsYXllciBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U8R2VvbWV0cnk+PjtcbiAgICB2ZWN0b3JMYXllci5zZXRTb3VyY2UoXG4gICAgICBuZXcgQ2x1c3Rlcih7XG4gICAgICAgIGRpc3RhbmNlOiBsYXllck9wdGlvbnMuY2x1c3RlckRpc3RhbmNlLFxuICAgICAgICBtaW5EaXN0YW5jZTogMTAsXG4gICAgICAgIHNvdXJjZTogdmVjdG9yTGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB2ZWN0b3JMYXllci5zZXRTdHlsZSgoZmVhdHVyZSkgPT4ge1xuICAgICAgY29uc3Qgc2l6ZSA9IGZlYXR1cmUuZ2V0KCdmZWF0dXJlcycpLmxlbmd0aDtcbiAgICAgIGlmIChzaXplID4gMSkge1xuICAgICAgICBsZXQgc3R5bGUgPSB0aGlzLnN0eWxlQ2FjaGVbc2l6ZV07XG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICBzdHlsZSA9IG5ldyBTdHlsZSh7XG4gICAgICAgICAgICBpbWFnZTogbmV3IENpcmNsZVN0eWxlKHtcbiAgICAgICAgICAgICAgcmFkaXVzOiAxMCxcbiAgICAgICAgICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJyNmZmYnXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBmaWxsOiBuZXcgRmlsbCh7XG4gICAgICAgICAgICAgICAgY29sb3I6ICcjMzM5OUNDJ1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0ZXh0OiBuZXcgVGV4dCh7IHRleHQ6IGAke3NpemV9YCB9KVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc3R5bGVDYWNoZVtzaXplXSA9IHN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzaXplID09PSAxID8gZmVhdHVyZS5nZXQoJ2ZlYXR1cmVzJylbMF0uZ2V0KCdjbGFzc2ljU3R5bGUnKSA6IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgdHJhbnNsYXRlRmllbGRUeXBlVG9MYXllclR5cGUoc3ViVHlwZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChzdWJUeXBlKSB7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5QT0lOVDpcbiAgICAgICAgcmV0dXJuICdtYXJrZXInO1xuICAgICAgY2FzZSBGaWVsZFR5cGUuTElORTpcbiAgICAgICAgcmV0dXJuICdsaW5lJztcbiAgICAgIGNhc2UgRmllbGRUeXBlLlBPTFlHT046XG4gICAgICAgIHJldHVybiAncG9seWdvbic7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5NVUxUSUxJTkU6XG4gICAgICAgIHJldHVybiAnbXVsdGktbGluZSc7XG4gICAgICBjYXNlIEZpZWxkVHlwZS5NVUxUSVBPTFlHT046XG4gICAgICAgIHJldHVybiAnbXVsdGktcG9seWdvbic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLndhcm4oYHdyb25nIHR5cGUgJHtzdWJUeXBlfSBmb3IgYXV0byBvcHRpb25zYCk7XG4gICAgICAgIHJldHVybiAnbWFya2VyJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -2763,7 +2763,7 @@ class AdminSelectDatasetComponent extends SubscriptionnerDirective {
2763
2763
  }));
2764
2764
  }
2765
2765
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminSelectDatasetComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
2766
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminSelectDatasetComponent, selector: "pry-admin-select-dataset", usesInheritance: true, ngImport: i0, template: "<div\n *ngIf=\"selectedDataset$ | async as dataset\"\n [id]=\"'panel-dataset-' + dataset.id\"\n [attr.aria-labelledby]=\"'button-dataset-' + dataset.id\"\n class=\"o-panel\"\n>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 class=\"a-h3\">\n {{ '@pry.admin.metadata.details' | i18n }}\n </h3>\n </div>\n\n <pry-tab-group translationStringBase=\"@pry.admin.\">\n <pry-tab [templateRef]=\"datasetMetadata\" name=\"metadata.title\"></pry-tab>\n <pry-tab [templateRef]=\"datasetAssociations\" name=\"classes.associations\"></pry-tab>\n </pry-tab-group>\n\n <ng-template #datasetMetadata>\n <pry-metadata-editor\n [targetId]=\"(selectedDataset$ | async)?.id ?? ''\"\n [isModification]=\"(editable$ | async) ?? false\"\n [metadata]=\"(datasetMetadata$ | async) ?? []\"\n (removeMeta)=\"removeMetadata($event)\"\n (addMeta)=\"addDatasetMetadata($event)\"\n [type]=\"'meta'\"\n ></pry-metadata-editor>\n </ng-template>\n\n <ng-template #datasetAssociations>\n <div *ngIf=\"associations$ | async as associations\" class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.classes.associations' | i18n }}</h4>\n <pry-association [associations]=\"associations\"></pry-association>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TabGroupComponent, selector: "pry-tab-group", inputs: ["translationStringBase"] }, { kind: "component", type: i4.TabComponent, selector: "pry-tab", inputs: ["name", "templateRef", "index"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5$3.PryMetadataEditorComponent, selector: "pry-metadata-editor", inputs: ["isModification", "targetId", "type", "metadata", "initialMetadataSelection"], outputs: ["addMeta", "removeMeta"] }, { kind: "component", type: PryAssociationComponent, selector: "pry-association", inputs: ["associations"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
2766
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminSelectDatasetComponent, selector: "pry-admin-select-dataset", usesInheritance: true, ngImport: i0, template: "<div\n *ngIf=\"selectedDataset$ | async as dataset\"\n [id]=\"'panel-dataset-' + dataset.id\"\n [attr.aria-labelledby]=\"'button-dataset-' + dataset.id\"\n class=\"o-panel\"\n>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 class=\"a-h3\">\n {{ '@pry.admin.metadata.details' | i18n }}\n </h3>\n </div>\n\n <pry-tab-group translationStringBase=\"@pry.admin.\">\n <pry-tab [templateRef]=\"datasetMetadata\" name=\"metadata.title\"></pry-tab>\n <pry-tab [templateRef]=\"datasetAssociations\" name=\"classes.associations\"></pry-tab>\n </pry-tab-group>\n\n <ng-template #datasetMetadata>\n <pry-metadata-editor\n [targetId]=\"(selectedDataset$ | async)?.id ?? ''\"\n [isModification]=\"(editable$ | async) ?? false\"\n [metadata]=\"(datasetMetadata$ | async) ?? []\"\n (removeMeta)=\"removeMetadata($event)\"\n (addMeta)=\"addDatasetMetadata($event)\"\n [type]=\"'meta'\"\n ></pry-metadata-editor>\n </ng-template>\n\n <ng-template #datasetAssociations>\n <div *ngIf=\"associations$ | async as associations\" class=\"o-tabs__panels__item__content\">\n <h4 class=\"a-h4\">{{ '@pry.admin.classes.associations' | i18n }}</h4>\n <pry-association [associations]=\"associations\"></pry-association>\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TabGroupComponent, selector: "pry-tab-group", inputs: ["translationStringBase"] }, { kind: "component", type: i4.TabComponent, selector: "pry-tab", inputs: ["name", "templateRef", "index"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5$3.PryMetadataEditorComponent, selector: "pry-metadata-editor", inputs: ["isModification", "targetId", "type", "metadata"], outputs: ["addMeta", "removeMeta"] }, { kind: "component", type: PryAssociationComponent, selector: "pry-association", inputs: ["associations"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
2767
2767
  }
2768
2768
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminSelectDatasetComponent, decorators: [{
2769
2769
  type: Component,
@@ -3437,7 +3437,7 @@ class AdminUserSelectComponent {
3437
3437
  this.tab = number;
3438
3438
  }
3439
3439
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminUserSelectComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
3440
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminUserSelectComponent, selector: "pry-admin-user-select", inputs: { profil: "profil" }, ngImport: i0, template: "<div\n *ngIf=\"selectedUser$ | async as user\"\n [id]=\"'panel-user-' + user.id\"\n [attr.aria-labelledby]=\"'button-user-' + user.id\"\n class=\"o-panel\"\n>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 [id]=\"'tab-title-' + compId\" class=\"a-h3\">\n {{ '@pry.admin.userInfo.info' | i18n }}\n </h3>\n </div>\n\n <pry-tab-group translationStringBase=\"@pry.admin.\">\n <pry-tab [templateRef]=\"userProfile\" name=\"userInfo.profile\"></pry-tab>\n <pry-tab [templateRef]=\"userDetails\" name=\"details\"></pry-tab>\n </pry-tab-group>\n\n <ng-template #userProfile>\n <pry-metadata-editor\n [targetId]=\"(selectedUser$ | async)?.id ?? ''\"\n [isModification]=\"(editable$ | async) ?? false\"\n [metadata]=\"(userMetadata$ | async) ?? []\"\n (removeMeta)=\"removeMetadata($event)\"\n (addMeta)=\"addMetadataUser($event)\"\n [type]=\"'user'\"\n ></pry-metadata-editor>\n </ng-template>\n\n <ng-template #userDetails>\n <h4 class=\"a-h4\">{{ '@pry.admin.properties' | i18n }}</h4>\n <p class=\"a-p\">\n {{ '@pry.admin.userInfo.name' | i18n }} :\n <strong>{{ user?.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.userInfo.familyName' | i18n }} :\n <strong>{{ user.familyName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.userInfo.email' | i18n }} :\n <strong>{{ user.email }}</strong>\n </p>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TabGroupComponent, selector: "pry-tab-group", inputs: ["translationStringBase"] }, { kind: "component", type: i4.TabComponent, selector: "pry-tab", inputs: ["name", "templateRef", "index"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5$3.PryMetadataEditorComponent, selector: "pry-metadata-editor", inputs: ["isModification", "targetId", "type", "metadata", "initialMetadataSelection"], outputs: ["addMeta", "removeMeta"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
3440
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminUserSelectComponent, selector: "pry-admin-user-select", inputs: { profil: "profil" }, ngImport: i0, template: "<div\n *ngIf=\"selectedUser$ | async as user\"\n [id]=\"'panel-user-' + user.id\"\n [attr.aria-labelledby]=\"'button-user-' + user.id\"\n class=\"o-panel\"\n>\n <div class=\"o-panel__header\">\n <button type=\"button\" class=\"a-btn a-btn--icon-only\" (click)=\"closePanel()\">\n <span class=\"u-visually-hidden\">{{ '@pry.action.closePanel' | i18n }}</span>\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n\n <h3 [id]=\"'tab-title-' + compId\" class=\"a-h3\">\n {{ '@pry.admin.userInfo.info' | i18n }}\n </h3>\n </div>\n\n <pry-tab-group translationStringBase=\"@pry.admin.\">\n <pry-tab [templateRef]=\"userProfile\" name=\"userInfo.profile\"></pry-tab>\n <pry-tab [templateRef]=\"userDetails\" name=\"details\"></pry-tab>\n </pry-tab-group>\n\n <ng-template #userProfile>\n <pry-metadata-editor\n [targetId]=\"(selectedUser$ | async)?.id ?? ''\"\n [isModification]=\"(editable$ | async) ?? false\"\n [metadata]=\"(userMetadata$ | async) ?? []\"\n (removeMeta)=\"removeMetadata($event)\"\n (addMeta)=\"addMetadataUser($event)\"\n [type]=\"'user'\"\n ></pry-metadata-editor>\n </ng-template>\n\n <ng-template #userDetails>\n <h4 class=\"a-h4\">{{ '@pry.admin.properties' | i18n }}</h4>\n <p class=\"a-p\">\n {{ '@pry.admin.userInfo.name' | i18n }} :\n <strong>{{ user?.name }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.userInfo.familyName' | i18n }} :\n <strong>{{ user.familyName }}</strong>\n </p>\n <p class=\"a-p\">\n {{ '@pry.admin.userInfo.email' | i18n }} :\n <strong>{{ user.email }}</strong>\n </p>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TabGroupComponent, selector: "pry-tab-group", inputs: ["translationStringBase"] }, { kind: "component", type: i4.TabComponent, selector: "pry-tab", inputs: ["name", "templateRef", "index"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5$3.PryMetadataEditorComponent, selector: "pry-metadata-editor", inputs: ["isModification", "targetId", "type", "metadata"], outputs: ["addMeta", "removeMeta"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
3441
3441
  }
3442
3442
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminUserSelectComponent, decorators: [{
3443
3443
  type: Component,
@@ -3508,9 +3508,11 @@ const TEMPLATE_COMPONENTS = [
3508
3508
  AdminSelectDatasetComponent
3509
3509
  ];
3510
3510
  class AdminLayoutComponent extends BaseLayoutComponent {
3511
- constructor(store, router) {
3511
+ constructor(store, router, route) {
3512
3512
  super(store, router);
3513
+ this.route = route;
3513
3514
  this.sub = new Subscription();
3515
+ this.limit$ = new BehaviorSubject(undefined);
3514
3516
  this.baseToolboxTranslation = '@pry.admin.';
3515
3517
  this.actions$ = this.store.select(AdminSelectors.actions);
3516
3518
  this.subActions$ = this.store.select(AdminSelectors.subActions);
@@ -3518,6 +3520,7 @@ class AdminLayoutComponent extends BaseLayoutComponent {
3518
3520
  this.sub.add(this.store.select(AdminSelectors.componentType).subscribe((ct) => {
3519
3521
  this.store.dispatch(AdminActions.togglePanel({ panelOpen: !!ct }));
3520
3522
  }));
3523
+ this.subscriptions.add(this.route.data.subscribe((data) => this.limit$?.next(data['limitMenu'])));
3521
3524
  }
3522
3525
  init() {
3523
3526
  this.menus$ = this.store.select(AdminSelectors.menus);
@@ -3541,13 +3544,13 @@ class AdminLayoutComponent extends BaseLayoutComponent {
3541
3544
  ngOnDestroy() {
3542
3545
  this.sub.unsubscribe();
3543
3546
  }
3544
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminLayoutComponent, deps: [{ token: i1.Store }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
3545
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminLayoutComponent, selector: "pry-admin-layout", viewQueries: [{ propertyName: "adminPanel", first: true, predicate: ["adminPanel"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-base-layout\" [ngClass]=\"{ 'is-menu-open': menuOpen$ | async }\">\n <pry-admin-title class=\"o-base-layout__title\"></pry-admin-title>\n <pry-admin-menu *ngIf=\"menuOpen$ | async\" class=\"o-base-layout__menu\"></pry-admin-menu>\n <pry-base-toolbox\n class=\"o-base-layout__toolbox\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [actions$]=\"actions$\"\n [subActions$]=\"subActions$\"\n ></pry-base-toolbox>\n\n <div class=\"o-base-layout__contentwrapper\">\n <div class=\"o-base-layout__content\">\n <router-outlet></router-outlet>\n </div>\n\n <div class=\"o-base-layout__panel\" [class.is-open]=\"panelOpen$ | async\">\n <div class=\"o-base-layout__panel__content\">\n <ng-template #adminPanel></ng-template>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BaseToolboxComponent, selector: "pry-base-toolbox", inputs: ["baseToolboxTranslation", "actions$", "subActions$"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AdminMenuComponent, selector: "pry-admin-menu" }, { kind: "component", type: AdminTitleComponent, selector: "pry-admin-title" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
3547
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminLayoutComponent, deps: [{ token: i1.Store }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
3548
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AdminLayoutComponent, selector: "pry-admin-layout", viewQueries: [{ propertyName: "adminPanel", first: true, predicate: ["adminPanel"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-base-layout\" [ngClass]=\"{ 'is-menu-open': menuOpen$ | async }\">\n <pry-admin-title class=\"o-base-layout__title\"></pry-admin-title>\n <pry-admin-menu *ngIf=\"menuOpen$ | async\" class=\"o-base-layout__menu\"></pry-admin-menu>\n <pry-base-toolbox\n class=\"o-base-layout__toolbox\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [actions$]=\"actions$\"\n [subActions$]=\"subActions$\"\n ></pry-base-toolbox>\n\n <div class=\"o-base-layout__contentwrapper\">\n <div class=\"o-base-layout__content\">\n <router-outlet></router-outlet>\n </div>\n\n <div\n class=\"o-base-layout__panel\"\n [class.is-open]=\"panelOpen$ | async\"\n [class.-model]=\"(limit$ | async) === 'model'\"\n >\n <div class=\"o-base-layout__panel__content\">\n <ng-template #adminPanel></ng-template>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BaseToolboxComponent, selector: "pry-base-toolbox", inputs: ["baseToolboxTranslation", "actions$", "subActions$"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: AdminMenuComponent, selector: "pry-admin-menu" }, { kind: "component", type: AdminTitleComponent, selector: "pry-admin-title" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
3546
3549
  }
3547
3550
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AdminLayoutComponent, decorators: [{
3548
3551
  type: Component,
3549
- args: [{ selector: 'pry-admin-layout', template: "<div class=\"o-base-layout\" [ngClass]=\"{ 'is-menu-open': menuOpen$ | async }\">\n <pry-admin-title class=\"o-base-layout__title\"></pry-admin-title>\n <pry-admin-menu *ngIf=\"menuOpen$ | async\" class=\"o-base-layout__menu\"></pry-admin-menu>\n <pry-base-toolbox\n class=\"o-base-layout__toolbox\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [actions$]=\"actions$\"\n [subActions$]=\"subActions$\"\n ></pry-base-toolbox>\n\n <div class=\"o-base-layout__contentwrapper\">\n <div class=\"o-base-layout__content\">\n <router-outlet></router-outlet>\n </div>\n\n <div class=\"o-base-layout__panel\" [class.is-open]=\"panelOpen$ | async\">\n <div class=\"o-base-layout__panel__content\">\n <ng-template #adminPanel></ng-template>\n </div>\n </div>\n </div>\n</div>\n" }]
3550
- }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }]; }, propDecorators: { adminPanel: [{
3552
+ args: [{ selector: 'pry-admin-layout', template: "<div class=\"o-base-layout\" [ngClass]=\"{ 'is-menu-open': menuOpen$ | async }\">\n <pry-admin-title class=\"o-base-layout__title\"></pry-admin-title>\n <pry-admin-menu *ngIf=\"menuOpen$ | async\" class=\"o-base-layout__menu\"></pry-admin-menu>\n <pry-base-toolbox\n class=\"o-base-layout__toolbox\"\n [baseToolboxTranslation]=\"baseToolboxTranslation\"\n [actions$]=\"actions$\"\n [subActions$]=\"subActions$\"\n ></pry-base-toolbox>\n\n <div class=\"o-base-layout__contentwrapper\">\n <div class=\"o-base-layout__content\">\n <router-outlet></router-outlet>\n </div>\n\n <div\n class=\"o-base-layout__panel\"\n [class.is-open]=\"panelOpen$ | async\"\n [class.-model]=\"(limit$ | async) === 'model'\"\n >\n <div class=\"o-base-layout__panel__content\">\n <ng-template #adminPanel></ng-template>\n </div>\n </div>\n </div>\n</div>\n" }]
3553
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Router }, { type: i2.ActivatedRoute }]; }, propDecorators: { adminPanel: [{
3551
3554
  type: ViewChild,
3552
3555
  args: ['adminPanel', { static: true, read: ViewContainerRef }]
3553
3556
  }] } });
@@ -5990,7 +5993,7 @@ const enTranslations = {
5990
5993
  long: 'Allows you to store integer numeric data that can exceed 2^32',
5991
5994
  decimal: 'Allows you to store numeric data with decimal places',
5992
5995
  string: 'Allows you to store data in alphanumeric format. This data is not indexed: it is possible to search on it but no aggregation',
5993
- keyword: 'Keyword',
5996
+ keyword: 'Allows you to store data in alphanumeric format. This data is indexed: it is possible to search on it as well as aggregations.',
5994
5997
  instant: 'Allows you to store a date',
5995
5998
  raw: 'allows you to store image or file type data',
5996
5999
  point: 'Allows you to store geographic coordinates of an object represented by a point (geo-json format)',
@@ -6331,7 +6334,7 @@ const frTranslations = {
6331
6334
  int: 'Nombre entier',
6332
6335
  long: 'Nombre entier long',
6333
6336
  decimal: 'Nombre décimal',
6334
- string: 'Texte',
6337
+ string: 'Texte brut',
6335
6338
  keyword: 'Texte indexé',
6336
6339
  instant: 'Date',
6337
6340
  raw: 'Donnée non structurée',
@@ -6346,7 +6349,7 @@ const frTranslations = {
6346
6349
  long: 'Permet de stocker des données numériques entières pouvant dépasser 2^32',
6347
6350
  decimal: 'Permet de stocker des données numériques avec des décimales',
6348
6351
  string: "Permet de stocker des données au format alphanumérique. Ces données ne sont pas indexées : il est possible de faire une recherche dessus mais pas d'agrégation",
6349
- keyword: 'Texte indexé',
6352
+ keyword: 'Permet de stocker des données au format alphanumérique. Ces données sont indexées : il est possible de faire une recherche dessus ainsi que des agrégations.',
6350
6353
  instant: 'Permet de stocker une date',
6351
6354
  raw: 'permet de stocker des données de type image ou fichier',
6352
6355
  point: "Permet de stocker des coordonnées géographiques d'un objet représenté par un point (format géojson)",
@@ -6354,7 +6357,7 @@ const frTranslations = {
6354
6357
  line: "Permet de stocker des coordonnées géographiques d'un objet représenté comme une ligne (format géojson)",
6355
6358
  multiline: "Permet de stocker des coordonnées géographiques d'un objet représenté avec plusieurs lignes non reliées entre elles (longitude et latitude format géojson)",
6356
6359
  polygon: "Permet de stocker des coordonnées géographiques d'un objet représenté par un polygone (format géojson)",
6357
- multipolygon: "Permet de stocket des coordonnées géographiques d'un objet représenté par plusieurs polygones imbriqués ou non (format géojson)"
6360
+ multipolygon: "Permet de stocker des coordonnées géographiques d'un objet représenté par plusieurs polygones imbriqués ou non (format géojson)"
6358
6361
  }
6359
6362
  },
6360
6363
  rawMethods: {