@c8y/ngx-components 1021.31.3 → 1021.34.1

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 (75) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +1 -0
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -1
  3. package/core/common/ui-state.service.d.ts +0 -1
  4. package/core/common/ui-state.service.d.ts.map +1 -1
  5. package/core/dynamic-component/dynamic-component.component.d.ts +5 -0
  6. package/core/dynamic-component/dynamic-component.component.d.ts.map +1 -1
  7. package/core/plugins/plugins.service.d.ts +3 -0
  8. package/core/plugins/plugins.service.d.ts.map +1 -1
  9. package/core/router/router-tabs.resolver.d.ts +2 -2
  10. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  11. package/esm2022/alarms/alarms-date-filter.component.mjs +5 -3
  12. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  13. package/esm2022/core/common/ui-state.service.mjs +1 -19
  14. package/esm2022/core/dynamic-component/dynamic-component.component.mjs +23 -3
  15. package/esm2022/core/plugins/plugins.service.mjs +7 -1
  16. package/esm2022/core/router/router-tabs.resolver.mjs +22 -8
  17. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +2 -2
  18. package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
  19. package/esm2022/services/services-device-tab/service-command.service.mjs +113 -0
  20. package/esm2022/services/services-device-tab/service-device-tab.model.mjs +1 -1
  21. package/esm2022/services/services-device-tab/services-device-tab.component.mjs +13 -7
  22. package/esm2022/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.mjs +5 -0
  23. package/esm2022/widgets/definitions/asset-notes/index.mjs +29 -0
  24. package/esm2022/widgets/definitions/index.mjs +2 -1
  25. package/esm2022/widgets/implementations/asset-notes/asset-notes-widget.component.mjs +67 -0
  26. package/esm2022/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.mjs +5 -0
  27. package/esm2022/widgets/implementations/asset-notes/index.mjs +2 -0
  28. package/fesm2022/c8y-ngx-components-alarms.mjs +5 -4
  29. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
  31. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  33. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
  35. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-services.mjs +116 -5
  37. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +36 -0
  39. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -0
  40. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  41. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +74 -0
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -0
  44. package/fesm2022/c8y-ngx-components.mjs +49 -26
  45. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  46. package/locales/de.po +20 -11
  47. package/locales/es.po +18 -9
  48. package/locales/fr.po +18 -9
  49. package/locales/ja_JP.po +18 -9
  50. package/locales/ko.po +18 -9
  51. package/locales/locales.pot +19 -7
  52. package/locales/nl.po +18 -9
  53. package/locales/pl.po +21 -12
  54. package/locales/pt_BR.po +18 -9
  55. package/locales/zh_CN.po +18 -9
  56. package/locales/zh_TW.po +18 -9
  57. package/package.json +1 -1
  58. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
  59. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
  60. package/services/services-device-tab/service-command.service.d.ts +59 -0
  61. package/services/services-device-tab/service-command.service.d.ts.map +1 -0
  62. package/services/services-device-tab/service-device-tab.model.d.ts +9 -0
  63. package/services/services-device-tab/service-device-tab.model.d.ts.map +1 -1
  64. package/services/services-device-tab/services-device-tab.component.d.ts +5 -2
  65. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  66. package/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.d.ts.map +1 -0
  67. package/widgets/definitions/asset-notes/index.d.ts +16 -0
  68. package/widgets/definitions/asset-notes/index.d.ts.map +1 -0
  69. package/widgets/definitions/index.d.ts +1 -0
  70. package/widgets/definitions/index.d.ts.map +1 -1
  71. package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts +33 -0
  72. package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts.map +1 -0
  73. package/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.d.ts.map +1 -0
  74. package/widgets/implementations/asset-notes/index.d.ts +2 -0
  75. package/widgets/implementations/asset-notes/index.d.ts.map +1 -0
@@ -20,6 +20,7 @@ export declare class AlarmsDateFilterComponent implements OnDestroy, ControlValu
20
20
  * Date range to be displayed in the date picker.
21
21
  */
22
22
  date: [string, string];
23
+ noFilterLabel: "No date filter";
23
24
  private showCleared;
24
25
  private severityOptions;
25
26
  private typeFilters;
@@ -1 +1 @@
1
- {"version":3,"file":"alarms-date-filter.component.d.ts","sourceRoot":"","sources":["../../alarms/alarms-date-filter.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAGZ,SAAS,EAGV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EACL,oBAAoB,EAIrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;;AAE1E,qBAWa,yBAA0B,YAAW,SAAS,EAAE,oBAAoB;IAwB7E,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;IA1B3B,QAAQ,CAAC,SAAS,wBAAsB;IACxC,QAAQ,CAAC,eAAe,wFAA4B;IACpD,QAAQ,CAAC,WAAW,WAAW;IAEtB,gBAAgB,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAU;IACrD,iBAAiB,UAAQ;IAClC;;OAEG;IACM,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAsC;IAE5C,gBAAgB,qCAA4C;IACtC,QAAQ,EAAE,mBAAmB,CAAC;IAE9D,IAAI,EAAE,UAAU,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC;IAE1D,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;gBAGrB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB;IAI9C,SAAS,aAAY;IAErB,QAAQ;IAoCR,WAAW,IAAI,IAAI;IAKnB,eAAe,IAAI,IAAI;IA8BvB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAU5B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI/B,iBAAiB,CAAC,SAAS,EAAE,GAAG;IAIhC,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,UAAU;yCAvKP,yBAAyB;2CAAzB,yBAAyB;CAgLrC"}
1
+ {"version":3,"file":"alarms-date-filter.component.d.ts","sourceRoot":"","sources":["../../alarms/alarms-date-filter.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAGZ,SAAS,EAGV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EACL,oBAAoB,EAIrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;;AAE1E,qBAWa,yBAA0B,YAAW,SAAS,EAAE,oBAAoB;IA0B7E,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;IA5B3B,QAAQ,CAAC,SAAS,wBAAsB;IACxC,QAAQ,CAAC,eAAe,wFAA4B;IACpD,QAAQ,CAAC,WAAW,WAAW;IAEtB,gBAAgB,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAU;IACrD,iBAAiB,UAAQ;IAClC;;OAEG;IACM,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,mBAA6B;IAE1C,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAsC;IAE5C,gBAAgB,qCAA4C;IACtC,QAAQ,EAAE,mBAAmB,CAAC;IAE9D,IAAI,EAAE,UAAU,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC;IAE1D,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;gBAGrB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB;IAI9C,SAAS,aAAY;IAErB,QAAQ;IAoCR,WAAW,IAAI,IAAI;IAKnB,eAAe,IAAI,IAAI;IA8BvB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAU5B,gBAAgB,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI/B,iBAAiB,CAAC,SAAS,EAAE,GAAG;IAIhC,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,yBAAyB;IAqBjC,OAAO,CAAC,UAAU;yCAzKP,yBAAyB;2CAAzB,yBAAyB;CAkLrC"}
@@ -92,7 +92,6 @@ export declare class AppStateService extends StateService {
92
92
  */
93
93
  protected onAppChangesCompletion$(): Observable<void>;
94
94
  private loadDefaultOptions;
95
- private showIncompatibleVersionsError;
96
95
  static ɵfac: i0.ɵɵFactoryDeclaration<AppStateService, never>;
97
96
  static ɵprov: i0.ɵɵInjectableDeclaration<AppStateService>;
98
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ui-state.service.d.ts","sourceRoot":"","sources":["../../../core/common/ui-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,KAAK,EACN,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAiB,UAAU,EAAM,MAAM,MAAM,CAAC;AAYtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;;AAI1D,qBACa,eAAgB,SAAQ,YAAY;IA2C7C,OAAO,CAAC,kBAAkB;IACnB,UAAU,EAAE,UAAU;IAC7B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,yBAAyB;IA9CnC;;;OAGG;IACH,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAqBzB;IACH,sBAAsB,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,CAA6B;IACnF,WAAW,EAAE,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,CAA6B;IACvE,aAAa,EAAE,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,CAA6B;IAClF,kBAAkB,EAAE,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,CAA6B;IACrF,wBAAwB,EAAE,UAAU,CAAC,GAAG,CAAC,CAGvC;IACF;;;;OAIG;IACH,iBAAiB,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;gBAGpC,kBAAkB,EAAE,kBAAkB,EACvC,UAAU,EAAE,UAAU,EACrB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,WAAW,EACxB,yBAAyB,EAAE,yBAAyB;IAe9D,oCAAoC;IASpC;;OAEG;IACH,IAAI,KAAK,QAER;IAED,QAAQ;IAKR;;OAEG;IACH,IAAI,SAAS,QAGZ;IAED;;OAEG;IACG,YAAY;IAgBlB;;;;;;OAMG;IACG,8BAA8B,CAAC,CAAC,GAAG,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASnF;;;;OAIG;IAEG,mBAAmB;IAKzB;;;;OAIG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM;IAKzC;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAK1D;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO;IASjD;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC;IAY9D;;OAEG;IACH,qBAAqB;IAKrB,SAAS,CAAC,kBAAkB,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;IAmB1D;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,UAAU,CAAC,IAAI,CAAC;YAkBvC,kBAAkB;IAYhC,OAAO,CAAC,6BAA6B;yCAvP1B,eAAe;6CAAf,eAAe;CAmQ3B"}
1
+ {"version":3,"file":"ui-state.service.d.ts","sourceRoot":"","sources":["../../../core/common/ui-state.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,KAAK,EACN,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAiB,UAAU,EAAM,MAAM,MAAM,CAAC;AAYtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;;AAG1D,qBACa,eAAgB,SAAQ,YAAY;IA2C7C,OAAO,CAAC,kBAAkB;IACnB,UAAU,EAAE,UAAU;IAC7B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,yBAAyB;IA9CnC;;;OAGG;IACH,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,CAqBzB;IACH,sBAAsB,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,CAA6B;IACnF,WAAW,EAAE,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,CAA6B;IACvE,aAAa,EAAE,eAAe,CAAC,cAAc,GAAG,IAAI,CAAC,CAA6B;IAClF,kBAAkB,EAAE,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,CAA6B;IACrF,wBAAwB,EAAE,UAAU,CAAC,GAAG,CAAC,CAGvC;IACF;;;;OAIG;IACH,iBAAiB,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;gBAGpC,kBAAkB,EAAE,kBAAkB,EACvC,UAAU,EAAE,UAAU,EACrB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,WAAW,EACxB,yBAAyB,EAAE,yBAAyB;IAe9D,oCAAoC;IASpC;;OAEG;IACH,IAAI,KAAK,QAER;IAED,QAAQ;IAKR;;OAEG;IACH,IAAI,SAAS,QAGZ;IAED;;OAEG;IACG,YAAY;IAgBlB;;;;;;OAMG;IACG,8BAA8B,CAAC,CAAC,GAAG,kBAAkB,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IASnF;;;;OAIG;IAEG,mBAAmB;IAKzB;;;;OAIG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM;IAKzC;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE;IAK1D;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,OAAO;IASjD;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC;IAY9D;;OAEG;IACH,qBAAqB;IAKrB,SAAS,CAAC,kBAAkB,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;IAmB1D;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,UAAU,CAAC,IAAI,CAAC;YAkBvC,kBAAkB;yCA3OrB,eAAe;6CAAf,eAAe;CAiP3B"}
@@ -97,6 +97,11 @@ export declare class DynamicComponentComponent implements OnDestroy {
97
97
  ngOnDestroy(): void;
98
98
  private emitChangeOnComponent;
99
99
  private loadComponent;
100
+ /**
101
+ * Safely reflects the component metadata.
102
+ * If reflection fails, it returns a default object with an empty inputs array.
103
+ */
104
+ private safeReflectComponentType;
100
105
  private getComponentType;
101
106
  private subscribeForOverlayChange;
102
107
  private callOnBeforeSaveHook;
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-component.component.d.ts","sourceRoot":"","sources":["../../../core/dynamic-component/dynamic-component.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,SAAS,EAGT,gBAAgB,EAEhB,QAAQ,EACR,aAAa,EAKd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAEhB,6BAA6B,EAI9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAgB,UAAU,EAAe,MAAM,MAAM,CAAC;;AAM7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAIa,yBAA0B,YAAW,SAAS;IAmDvD,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,QAAQ;IAnDlB;;;OAGG;IACM,WAAW,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACM,MAAM,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACM,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAe;IACpD;;OAEG;IACM,aAAa,UAAQ;IAC9B;;;OAGG;IACM,gBAAgB,UAAS;IAClC;;OAEG;IACO,mBAAmB,wCAA+C;IAC5E;;OAEG;IAC0D,IAAI,EAAE,gBAAgB,CAAC;IACpF;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC;IACX;;OAEG;IACH,kBAAkB,UAAS;IAC3B,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,aAAa,EAAE,6BAA6B,CAAC;IAC7C,6BAA6B,EAAE,OAAO,6BAA6B,CACnC;IAChC,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,YAAY,CAA0B;IAE9C;;OAEG;gBAEO,uBAAuB,EAAE,uBAAuB,EAChD,QAAQ,EAAE,QAAQ;IAG5B;;;;OAIG;IACH,kBAAkB;IAIlB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa;IAiCxC;;;OAGG;IACH,gBAAgB,CAAC,eAAe,EAAE,OAAO;IAUzC,WAAW;IAKX,OAAO,CAAC,qBAAqB;YAOf,aAAa;YAsBb,gBAAgB;IAiB9B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,oBAAoB;yCA7KjB,yBAAyB;2CAAzB,yBAAyB;CA2LrC"}
1
+ {"version":3,"file":"dynamic-component.component.d.ts","sourceRoot":"","sources":["../../../core/dynamic-component/dynamic-component.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,SAAS,EAGT,gBAAgB,EAEhB,QAAQ,EACR,aAAa,EAMd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAEhB,6BAA6B,EAI9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAgB,UAAU,EAAe,MAAM,MAAM,CAAC;;AAM7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAIa,yBAA0B,YAAW,SAAS;IAmDvD,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,QAAQ;IAnDlB;;;OAGG;IACM,WAAW,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACM,MAAM,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACM,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAe;IACpD;;OAEG;IACM,aAAa,UAAQ;IAC9B;;;OAGG;IACM,gBAAgB,UAAS;IAClC;;OAEG;IACO,mBAAmB,wCAA+C;IAC5E;;OAEG;IAC0D,IAAI,EAAE,gBAAgB,CAAC;IACpF;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC;IACX;;OAEG;IACH,kBAAkB,UAAS;IAC3B,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,aAAa,EAAE,6BAA6B,CAAC;IAC7C,6BAA6B,EAAE,OAAO,6BAA6B,CACnC;IAChC,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,YAAY,CAA0B;IAE9C;;OAEG;gBAEO,uBAAuB,EAAE,uBAAuB,EAChD,QAAQ,EAAE,QAAQ;IAG5B;;;;OAIG;IACH,kBAAkB;IAIlB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,aAAa;IAiCxC;;;OAGG;IACH,gBAAgB,CAAC,eAAe,EAAE,OAAO;IAUzC,WAAW;IAKX,OAAO,CAAC,qBAAqB;YAOf,aAAa;IA8B3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;YASlB,gBAAgB;IAiB9B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,oBAAoB;yCAlMjB,yBAAyB;2CAAzB,yBAAyB;CAgNrC"}
@@ -57,6 +57,9 @@ export declare class PluginsService {
57
57
  * @returns Returns a list of remotes that has been assigned to the configuration object.
58
58
  */
59
59
  setInitialRemotes(application: IApplication): Promise<PluginsConfig>;
60
+ resetRemotes(application: IApplication): Promise<IApplication & {
61
+ config: PluginsConfig;
62
+ }>;
60
63
  /**
61
64
  * Sorts versions list or list of objects by version property
62
65
  * @returns list of versions as array of strings or array of objects sorted by version property
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.service.d.ts","sourceRoot":"","sources":["../../../core/plugins/plugins.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.service.d.ts","sourceRoot":"","sources":["../../../core/plugins/plugins.service.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Injector } from '@angular/core';
2
- import { ActivatedRouteSnapshot, Router } from '@angular/router';
2
+ import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
3
3
  import { Observable } from 'rxjs';
4
4
  import { Tab } from '../tabs/tab.model';
5
5
  import * as i0 from "@angular/core";
@@ -7,7 +7,7 @@ export declare class RouterTabsResolver {
7
7
  private injector;
8
8
  private router;
9
9
  constructor(injector: Injector, router: Router);
10
- get routerStateSnapshot(): import("@angular/router").RouterStateSnapshot;
10
+ get routerStateSnapshot(): RouterStateSnapshot;
11
11
  resolve(currentRoute: ActivatedRouteSnapshot): Observable<Tab[]>;
12
12
  private getBaselUrl;
13
13
  private getLatestChildRoutes;
@@ -1 +1 @@
1
- {"version":3,"file":"router-tabs.resolver.d.ts","sourceRoot":"","sources":["../../../core/router/router-tabs.resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAqC,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAA0B,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;;AAGxC,qBAGa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;gBADN,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM;IAGxB,IAAI,mBAAmB,kDAEtB;IAED,OAAO,CAAC,YAAY,EAAE,sBAAsB,GA+CrC,UAAU,CAAC,GAAG,EAAE,CAAC;IAGxB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,SAAS;yCAzFN,kBAAkB;6CAAlB,kBAAkB;CAkG9B"}
1
+ {"version":3,"file":"router-tabs.resolver.d.ts","sourceRoot":"","sources":["../../../core/router/router-tabs.resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAoD,MAAM,eAAe,CAAC;AAC3F,OAAO,EACL,sBAAsB,EACtB,MAAM,EAKN,mBAAmB,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0B,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;;AAGxC,qBAGa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;gBADN,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM;IAGxB,IAAI,mBAAmB,wBAEtB;IAED,OAAO,CAAC,YAAY,EAAE,sBAAsB,GA+CrC,UAAU,CAAC,GAAG,EAAE,CAAC;IAGxB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,SAAS;yCAzFN,kBAAkB;6CAAlB,kBAAkB;CAkH9B"}
@@ -2,6 +2,7 @@ import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@
2
2
  import { FormBuilder, NG_VALUE_ACCESSOR } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { Severity } from '@c8y/client';
5
+ import { gettext } from '@c8y/ngx-components';
5
6
  import { Subject, take, takeUntil } from 'rxjs';
6
7
  import { INTERVAL_TITLES_EXTENDED, INTERVALS_EXTENDED } from './alarms.model';
7
8
  import { BsDropdownDirective } from 'ngx-bootstrap/dropdown';
@@ -27,6 +28,7 @@ export class AlarmsDateFilterComponent {
27
28
  this.DATE_FORMAT = 'short';
28
29
  this.DEFAULT_INTERVAL = 'none';
29
30
  this.updateQueryParams = true;
31
+ this.noFilterLabel = gettext('No date filter');
30
32
  this.destroy$ = new Subject();
31
33
  this.dateFilterChange = new EventEmitter();
32
34
  // eslint-disable-next-line @typescript-eslint/no-empty-function
@@ -163,7 +165,7 @@ export class AlarmsDateFilterComponent {
163
165
  useExisting: forwardRef(() => AlarmsDateFilterComponent),
164
166
  multi: true
165
167
  }
166
- ], viewQueries: [{ propertyName: "dropdown", first: true, predicate: BsDropdownDirective, descendants: true }], ngImport: i0, template: "<form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n>\n <div\n class=\"dropdown flex-grow\"\n c8yDropdownDirection\n #dropDirection=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\"\n tooltip=\"{{\n form.value.currentDateContextInterval === 'none'\n ? 'No date filter'\n : (date[0] | c8yDate: DATE_FORMAT) + ' \u2014 ' + (date[1] | c8yDate: DATE_FORMAT)\n }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"alarms-date-filter--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"alarms-date-filter--selected-time-range\"\n *ngIf=\"form.controls.currentDateContextInterval.value !== 'none'\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n [INTERVALS]=\"INTERVALS\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDateFilter(); dropdown.isOpen = false\"\n [disabled]=\"(form.pristine && form.untouched) || form.invalid\"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i4.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i4.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DropdownDirectionDirective, selector: "[dropdown][c8yBsDropdownDirection],[dropdown][c8yDropdownDirection]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i5.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.DateTimePickerComponent, selector: "c8y-date-time-picker", inputs: ["minDate", "maxDate", "placeholder", "dateInputFormat", "adaptivePosition", "size", "dateType", "config"], outputs: ["onDateSelected"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.IntervalPickerComponent, selector: "c8y-interval-picker", inputs: ["INTERVALS"] }, { kind: "pipe", type: i5.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
168
+ ], viewQueries: [{ propertyName: "dropdown", first: true, predicate: BsDropdownDirective, descendants: true }], ngImport: i0, template: "<form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n>\n <div\n class=\"dropdown flex-grow\"\n c8yDropdownDirection\n #dropDirection=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{\n (form.value.currentDateContextInterval === 'none'\n ? noFilterLabel\n : (date[0] | c8yDate: DATE_FORMAT) + ' \u2014 ' + (date[1] | c8yDate: DATE_FORMAT)\n ) | translate\n }}\"\n tooltip=\"{{\n (form.value.currentDateContextInterval === 'none'\n ? noFilterLabel\n : (date[0] | c8yDate: DATE_FORMAT) + ' \u2014 ' + (date[1] | c8yDate: DATE_FORMAT)\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"alarms-date-filter--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"alarms-date-filter--selected-time-range\"\n *ngIf=\"form.controls.currentDateContextInterval.value !== 'none'\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n [INTERVALS]=\"INTERVALS\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDateFilter(); dropdown.isOpen = false\"\n [disabled]=\"(form.pristine && form.untouched) || form.invalid\"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i4.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i4.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DropdownDirectionDirective, selector: "[dropdown][c8yBsDropdownDirection],[dropdown][c8yDropdownDirection]" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i5.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.DateTimePickerComponent, selector: "c8y-date-time-picker", inputs: ["minDate", "maxDate", "placeholder", "dateInputFormat", "adaptivePosition", "size", "dateType", "config"], outputs: ["onDateSelected"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.IntervalPickerComponent, selector: "c8y-interval-picker", inputs: ["INTERVALS"] }, { kind: "pipe", type: i5.DatePipe, name: "c8yDate" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
167
169
  }
168
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsDateFilterComponent, decorators: [{
169
171
  type: Component,
@@ -173,7 +175,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
173
175
  useExisting: forwardRef(() => AlarmsDateFilterComponent),
174
176
  multi: true
175
177
  }
176
- ], template: "<form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n>\n <div\n class=\"dropdown flex-grow\"\n c8yDropdownDirection\n #dropDirection=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\"\n tooltip=\"{{\n form.value.currentDateContextInterval === 'none'\n ? 'No date filter'\n : (date[0] | c8yDate: DATE_FORMAT) + ' \u2014 ' + (date[1] | c8yDate: DATE_FORMAT)\n }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"alarms-date-filter--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"alarms-date-filter--selected-time-range\"\n *ngIf=\"form.controls.currentDateContextInterval.value !== 'none'\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n [INTERVALS]=\"INTERVALS\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDateFilter(); dropdown.isOpen = false\"\n [disabled]=\"(form.pristine && form.untouched) || form.invalid\"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n</form>\n" }]
178
+ ], template: "<form\n class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n [formGroup]=\"form\"\n>\n <div\n class=\"dropdown flex-grow\"\n c8yDropdownDirection\n #dropDirection=\"bs-dropdown\"\n dropdown\n [insideClick]=\"true\"\n >\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{\n (form.value.currentDateContextInterval === 'none'\n ? noFilterLabel\n : (date[0] | c8yDate: DATE_FORMAT) + ' \u2014 ' + (date[1] | c8yDate: DATE_FORMAT)\n ) | translate\n }}\"\n tooltip=\"{{\n (form.value.currentDateContextInterval === 'none'\n ? noFilterLabel\n : (date[0] | c8yDate: DATE_FORMAT) + ' \u2014 ' + (date[1] | c8yDate: DATE_FORMAT)\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"alarms-date-filter--date-picker-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"schedule1\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span\n class=\"text-12\"\n data-cy=\"widget-time-context--selected-interval\"\n >\n {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n </span>\n <span\n class=\"text-10 text-muted text-truncate\"\n data-cy=\"alarms-date-filter--selected-time-range\"\n *ngIf=\"form.controls.currentDateContextInterval.value !== 'none'\"\n >\n {{ date[0] | c8yDate: DATE_FORMAT }} \u2014 {{ date[1] | c8yDate: DATE_FORMAT }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n\n <ul\n class=\"dropdown-menu dropdown-menu--date-range\"\n *dropdownMenu\n >\n <c8y-interval-picker\n class=\"d-contents\"\n formControlName=\"currentDateContextInterval\"\n [INTERVALS]=\"INTERVALS\"\n ></c8y-interval-picker>\n\n <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n <div class=\"p-l-16 p-r-16\">\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'From`date`' | translate\"\n for=\"temporaryUserSelectedFromDate\"\n translate\n >\n From`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedFromDate\"\n [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n [placeholder]=\"'From`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n <c8y-message\n name=\"dateAfterRangeMax\"\n [text]=\"'This date is after the latest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group\n class=\"m-b-8\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n >\n <label\n [title]=\"'To`date`' | translate\"\n for=\"temporaryUserSelectedToDate\"\n translate\n >\n To`date`\n </label>\n <c8y-date-time-picker\n id=\"temporaryUserSelectedToDate\"\n [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n [placeholder]=\"'To`date`' | translate\"\n [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n ></c8y-date-time-picker>\n <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n <c8y-message\n name=\"dateBeforeRangeMin\"\n [text]=\"'This date is before the earliest allowed date.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"invalidDateTime\"\n [text]=\"'This date is invalid.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"p-16 d-flex gap-8 separator-top\">\n <button\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyDateFilter(); dropdown.isOpen = false\"\n [disabled]=\"(form.pristine && form.untouched) || form.invalid\"\n translate\n >\n Apply\n </button>\n </div>\n </ng-container>\n </ul>\n </div>\n</form>\n" }]
177
179
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.AlarmsViewService }], propDecorators: { DEFAULT_INTERVAL: [{
178
180
  type: Input
179
181
  }], updateQueryParams: [{
@@ -186,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
186
188
  type: ViewChild,
187
189
  args: [BsDropdownDirective]
188
190
  }] } });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLWRhdGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtZGF0ZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy1kYXRlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBRXJELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUVuQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7OztBQWMxRCxNQUFNLE9BQU8seUJBQXlCO0lBdUJwQyxZQUNVLFdBQXdCLEVBQ3hCLE1BQWMsRUFDZCxjQUE4QixFQUM5QixpQkFBb0M7UUFIcEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBMUJyQyxjQUFTLEdBQUcsa0JBQWtCLENBQUM7UUFDL0Isb0JBQWUsR0FBRyx3QkFBd0IsQ0FBQztRQUMzQyxnQkFBVyxHQUFHLE9BQU8sQ0FBQztRQUV0QixxQkFBZ0IsR0FBOEIsTUFBTSxDQUFDO1FBQ3JELHNCQUFpQixHQUFHLElBQUksQ0FBQztRQVExQixhQUFRLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFNUMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFjdEUsZ0VBQWdFO1FBQ2hFLGNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFIbEIsQ0FBQztJQUtKLFFBQVE7UUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQjtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0I7U0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6RixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDO1lBQ2pELElBQUksQ0FBQyxlQUFlLEdBQUc7Z0JBQ3JCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEtBQUssTUFBTTtnQkFDL0MsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssS0FBSyxNQUFNO2dCQUN6QyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxLQUFLLE1BQU07Z0JBQ3pDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTTthQUM5QyxDQUFDO1lBQ0YsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztvQkFDbkIsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQzNDLDZCQUE2QixFQUFFLE1BQU0sQ0FBQyxlQUFlO29CQUNyRCwyQkFBMkIsRUFBRSxNQUFNLENBQUMsU0FBUztpQkFDOUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0saUJBQWlCLEdBQUc7WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQjtZQUNwRCxhQUFhLEVBQUU7Z0JBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUM7Z0JBQ3ZELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDO2FBQ25DO1NBQ3JCLENBQUM7UUFFRiw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDZCQUE2QjtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywyQkFBMkI7U0FDNUMsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDL0IsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEI7Z0JBQ3BELGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUNqRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTthQUM1RDtZQUNELG1CQUFtQixFQUFFLE9BQU87U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ25CLDBCQUEwQixFQUN4QixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtnQkFDbEUsd0JBQXdCLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7YUFDM0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBbUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFxQixDQUFDO1FBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUNsQjtZQUNFLDZCQUE2QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDcEQsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNsRCwwQkFBMEIsRUFBRSxRQUFRO1NBQ3JDLEVBQ0QsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDaEYsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsWUFBWTthQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEIsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUNsQjtvQkFDRSw2QkFBNkIsRUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTt3QkFDbEYsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEtBQUs7d0JBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLO29CQUM1RCwwQkFBMEIsRUFBRSxRQUFRO2lCQUNyQyxFQUNELEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUNyQixDQUFDO2dCQUNGLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBdUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM1Qiw2QkFBNkIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUM1RCwyQkFBMkIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUMxRCwwQkFBMEIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUN6RCx3QkFBd0IsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUN2RCwwQkFBMEIsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVE7U0FDekQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0EvS1UseUJBQXlCO2tHQUF6Qix5QkFBeUIsNE1BUnpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDeEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLG9FQW1CVSxtQkFBbUIsZ0RDcERoQywwaUtBeUlBOzsyRkR0R2EseUJBQXlCO2tCQVhyQyxTQUFTOytCQUNFLHdCQUF3QixhQUV2Qjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQzs0QkFDeEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7a0tBT1EsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUN5QixRQUFRO3NCQUF2QyxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNldmVyaXR5LCBTZXZlcml0eVR5cGUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBEYXRlVGltZUNvbnRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQWxhcm1MaXN0Rm9ybUZpbHRlcnMsXG4gIElOVEVSVkFMX1RJVExFU19FWFRFTkRFRCxcbiAgSU5URVJWQUxTX0VYVEVOREVELFxuICBXaWRnZXRUaW1lQ29udGV4dFN0YXRlRXh0ZW5kZWRcbn0gZnJvbSAnLi9hbGFybXMubW9kZWwnO1xuaW1wb3J0IHsgQnNEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICcuL2FsYXJtcy12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxhcm1GaWx0ZXJJbnRlcnZhbCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFsYXJtcy1kYXRlLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybXMtZGF0ZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFsYXJtc0RhdGVGaWx0ZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1zRGF0ZUZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICByZWFkb25seSBJTlRFUlZBTFMgPSBJTlRFUlZBTFNfRVhURU5ERUQ7XG4gIHJlYWRvbmx5IElOVEVSVkFMX1RJVExFUyA9IElOVEVSVkFMX1RJVExFU19FWFRFTkRFRDtcbiAgcmVhZG9ubHkgREFURV9GT1JNQVQgPSAnc2hvcnQnO1xuXG4gIEBJbnB1dCgpIERFRkFVTFRfSU5URVJWQUw6IEFsYXJtRmlsdGVySW50ZXJ2YWxbJ2lkJ10gPSAnbm9uZSc7XG4gIEBJbnB1dCgpIHVwZGF0ZVF1ZXJ5UGFyYW1zID0gdHJ1ZTtcbiAgLyoqXG4gICAqIERhdGUgcmFuZ2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBkYXRlIHBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGU6IFtzdHJpbmcsIHN0cmluZ107XG4gIHByaXZhdGUgc2hvd0NsZWFyZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgc2V2ZXJpdHlPcHRpb25zOiB7IFtrZXkgaW4gU2V2ZXJpdHlUeXBlXTogYm9vbGVhbiB9O1xuICBwcml2YXRlIHR5cGVGaWx0ZXJzOiBzdHJpbmc7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKSBkYXRlRmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBbGFybUxpc3RGb3JtRmlsdGVycz4oKTtcbiAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBkcm9wZG93bjogQnNEcm9wZG93bkRpcmVjdGl2ZTtcblxuICBmb3JtOiBSZXR1cm5UeXBlPEFsYXJtc0RhdGVGaWx0ZXJDb21wb25lbnRbJ2NyZWF0ZUZvcm0nXT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0RGVmYXVsdENvbnRleHQoKTtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUZvcm0oY29udGV4dCk7XG4gICAgdGhpcy5kYXRlID0gW1xuICAgICAgdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlLFxuICAgICAgdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZVxuICAgIF07XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICB0aGlzLnNob3dDbGVhcmVkID0gcGFyYW1zLnNob3dDbGVhcmVkID09PSAndHJ1ZSc7XG4gICAgICB0aGlzLnNldmVyaXR5T3B0aW9ucyA9IHtcbiAgICAgICAgW1NldmVyaXR5LkNSSVRJQ0FMXTogcGFyYW1zLmNyaXRpY2FsID09PSAndHJ1ZScsXG4gICAgICAgIFtTZXZlcml0eS5NQUpPUl06IHBhcmFtcy5tYWpvciA9PT0gJ3RydWUnLFxuICAgICAgICBbU2V2ZXJpdHkuTUlOT1JdOiBwYXJhbXMubWlub3IgPT09ICd0cnVlJyxcbiAgICAgICAgW1NldmVyaXR5LldBUk5JTkddOiBwYXJhbXMud2FybmluZyA9PT0gJ3RydWUnXG4gICAgICB9O1xuICAgICAgaWYgKHBhcmFtcy50eXBlRmlsdGVycykge1xuICAgICAgICB0aGlzLnR5cGVGaWx0ZXJzID0gcGFyYW1zLnR5cGVGaWx0ZXJzO1xuICAgICAgfVxuICAgICAgaWYgKCFwYXJhbXMuaW50ZXJ2YWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5pbnRlcnZhbCAhPT0gJ2N1c3RvbScpIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlVGltZShwYXJhbXMuaW50ZXJ2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgIGN1cnJlbnREYXRlQ29udGV4dEludGVydmFsOiBwYXJhbXMuaW50ZXJ2YWwsXG4gICAgICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGU6IHBhcmFtcy5sYXN0VXBkYXRlZEZyb20sXG4gICAgICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlOiBwYXJhbXMuY3JlYXRlZFRvXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGUgPSBbcGFyYW1zLmxhc3RVcGRhdGVkRnJvbSwgcGFyYW1zLmNyZWF0ZWRUb107XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmliZVRvSW50ZXJ2YWxDaGFuZ2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFwcGx5RGF0ZUZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBjb21iaW5lZEZvcm1FdmVudCA9IHtcbiAgICAgIHNob3dDbGVhcmVkOiB0aGlzLnNob3dDbGVhcmVkLFxuICAgICAgc2V2ZXJpdHlPcHRpb25zOiB0aGlzLnNldmVyaXR5T3B0aW9ucyxcbiAgICAgIHR5cGVGaWx0ZXJzOiB0aGlzLnR5cGVGaWx0ZXJzLFxuICAgICAgaW50ZXJ2YWw6IHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCxcbiAgICAgIHNlbGVjdGVkRGF0ZXM6IFtcbiAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlKSxcbiAgICAgICAgbmV3IERhdGUodGhpcy5mb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZSlcbiAgICAgIF0gYXMgRGF0ZVRpbWVDb250ZXh0XG4gICAgfTtcblxuICAgIC8vIG5lZWRlZCBmb3IgY3VzdG9tIGludGVydmFsXG4gICAgdGhpcy5kYXRlID0gW1xuICAgICAgdGhpcy5mb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLFxuICAgICAgdGhpcy5mb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVxuICAgIF07XG5cbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIGludGVydmFsOiB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICAgIGxhc3RVcGRhdGVkRnJvbTogY29tYmluZWRGb3JtRXZlbnQuc2VsZWN0ZWREYXRlc1swXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjcmVhdGVkVG86IGNvbWJpbmVkRm9ybUV2ZW50LnNlbGVjdGVkRGF0ZXNbMV0udG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICB9KTtcbiAgICB0aGlzLmRhdGVGaWx0ZXJDaGFuZ2UuZW1pdChjb21iaW5lZEZvcm1FdmVudCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6XG4gICAgICAgICAgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyA/IHZhbHVlWzBdIDogdmFsdWVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgY3VycmVudERhdGVDb250ZXh0VG9EYXRlOiB0eXBlb2YgdmFsdWVbMV0gPT09ICdzdHJpbmcnID8gdmFsdWVbMV0gOiB2YWx1ZVsxXS50b0lTT1N0cmluZygpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlVGltZShpbnRlcnZhbDogQWxhcm1GaWx0ZXJJbnRlcnZhbFsnaWQnXSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLmdldERhdGVUaW1lQ29udGV4dEJ5SW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmRhdGUgPSBkYXRlLm1hcChkID0+IGQudG9JU09TdHJpbmcoKSkgYXMgW3N0cmluZywgc3RyaW5nXTtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGU6IGRhdGVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlOiBkYXRlWzFdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGN1cnJlbnREYXRlQ29udGV4dEludGVydmFsOiBpbnRlcnZhbFxuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcbiAgICB0aGlzLmFwcGx5RGF0ZUZpbHRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0Q29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogdGhpcy5hbGFybXNWaWV3U2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKHRoaXMuREVGQVVMVF9JTlRFUlZBTCksXG4gICAgICBpbnRlcnZhbDogdGhpcy5ERUZBVUxUX0lOVEVSVkFMXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9JbnRlcnZhbENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGludGVydmFsID0+IHtcbiAgICAgICAgaWYgKGludGVydmFsID09PSAnY3VzdG9tJykge1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZTpcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUudmFsdWUgPT09IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5mb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZS52YWx1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLmZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUudmFsdWUsXG4gICAgICAgICAgICAgIGN1cnJlbnREYXRlQ29udGV4dEludGVydmFsOiBpbnRlcnZhbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVEYXRlVGltZShpbnRlcnZhbCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybShjb250ZXh0OiBXaWRnZXRUaW1lQ29udGV4dFN0YXRlRXh0ZW5kZWQpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZTogY29udGV4dC5kYXRlWzBdLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGU6IGNvbnRleHQuZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgY3VycmVudERhdGVDb250ZXh0RnJvbURhdGU6IGNvbnRleHQuZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgY3VycmVudERhdGVDb250ZXh0VG9EYXRlOiBjb250ZXh0LmRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dEludGVydmFsOiBjb250ZXh0LmludGVydmFsIHx8ICdjdXN0b20nXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gIGNsYXNzPVwiZC1mbGV4IGdhcC0xNiBwLWwteHMtMTYgcC1yLXhzLTE2IG0tdC14cy04IG0tYi14cy04XCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZHJvcGRvd24gZmxleC1ncm93XCJcbiAgICBjOHlEcm9wZG93bkRpcmVjdGlvblxuICAgICNkcm9wRGlyZWN0aW9uPVwiYnMtZHJvcGRvd25cIlxuICAgIGRyb3Bkb3duXG4gICAgW2luc2lkZUNsaWNrXT1cInRydWVcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgZm9ybS1jb250cm9sIGwtaC10aWdodCBkLWZsZXggYS1pLWNlbnRlclwiXG4gICAgICBhdHRyLmFyaWEtbGFiZWw9XCJ7eyBkYXRlWzBdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX0g4oCUIHt7IGRhdGVbMV0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fVwiXG4gICAgICB0b29sdGlwPVwie3tcbiAgICAgICAgZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbCA9PT0gJ25vbmUnXG4gICAgICAgICAgPyAnTm8gZGF0ZSBmaWx0ZXInXG4gICAgICAgICAgOiAoZGF0ZVswXSB8IGM4eURhdGU6IERBVEVfRk9STUFUKSArICcg4oCUICcgKyAoZGF0ZVsxXSB8IGM4eURhdGU6IERBVEVfRk9STUFUKVxuICAgICAgfX1cIlxuICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgZGF0YS1jeT1cImFsYXJtcy1kYXRlLWZpbHRlci0tZGF0ZS1waWNrZXItZHJvcGRvd24tYnV0dG9uXCJcbiAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICA+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgICAgYzh5SWNvbj1cInNjaGVkdWxlMVwiXG4gICAgICA+PC9pPlxuICAgICAgPGRpdiBjbGFzcz1cImQtY29sIHRleHQtbGVmdCBmaXQtd1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidGV4dC0xMlwiXG4gICAgICAgICAgZGF0YS1jeT1cIndpZGdldC10aW1lLWNvbnRleHQtLXNlbGVjdGVkLWludGVydmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IElOVEVSVkFMX1RJVExFU1tmb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LTEwIHRleHQtbXV0ZWQgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgZGF0YS1jeT1cImFsYXJtcy1kYXRlLWZpbHRlci0tc2VsZWN0ZWQtdGltZS1yYW5nZVwiXG4gICAgICAgICAgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlICE9PSAnbm9uZSdcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF0ZVswXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19IOKAlCB7eyBkYXRlWzFdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cImNhcmV0IG0tci0xNiBtLWwtNFwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDx1bFxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtLWRhdGUtcmFuZ2VcIlxuICAgICAgKmRyb3Bkb3duTWVudVxuICAgID5cbiAgICAgIDxjOHktaW50ZXJ2YWwtcGlja2VyXG4gICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbnREYXRlQ29udGV4dEludGVydmFsXCJcbiAgICAgICAgW0lOVEVSVkFMU109XCJJTlRFUlZBTFNcIlxuICAgICAgPjwvYzh5LWludGVydmFsLXBpY2tlcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm0uY29udHJvbHMuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwudmFsdWUgPT09ICdjdXN0b20nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWwtMTYgcC1yLTE2XCI+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICBjbGFzcz1cIm0tYi04XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInRnJvbWBkYXRlYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBmb3I9XCJ0ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBGcm9tYGRhdGVgXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGM4eS1kYXRlLXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgIGlkPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJmb3JtLnZhbHVlLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRnJvbWBkYXRlYCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1wiXG4gICAgICAgICAgICA+PC9jOHktZGF0ZS10aW1lLXBpY2tlcj5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZXMgW3Nob3ddPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZS5lcnJvcnNcIj5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgbmFtZT1cImRhdGVBZnRlclJhbmdlTWF4XCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGFmdGVyIHRoZSBsYXRlc3QgYWxsb3dlZCBkYXRlLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgbmFtZT1cImludmFsaWREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBpbnZhbGlkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXBcbiAgICAgICAgICAgIGNsYXNzPVwibS1iLThcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInVG9gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgZm9yPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFRvYGRhdGVgXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGM4eS1kYXRlLXRpbWUtcGlja2VyXG4gICAgICAgICAgICAgIGlkPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgW21pbkRhdGVdPVwiZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVG9gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZXJyb3JzID8gJ2hhcy1lcnJvcicgOiAnJ1wiXG4gICAgICAgICAgICA+PC9jOHktZGF0ZS10aW1lLXBpY2tlcj5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZXMgW3Nob3ddPVwiZm9ybS5jb250cm9scy50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUuZXJyb3JzXCI+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlQmVmb3JlUmFuZ2VNaW5cIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidUaGlzIGRhdGUgaXMgYmVmb3JlIHRoZSBlYXJsaWVzdCBhbGxvd2VkIGRhdGUuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICBuYW1lPVwiaW52YWxpZERhdGVUaW1lXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGludmFsaWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtMTYgZC1mbGV4IGdhcC04IHNlcGFyYXRvci10b3BcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGx5JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhcHBseURhdGVGaWx0ZXIoKTsgZHJvcGRvd24uaXNPcGVuID0gZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihmb3JtLnByaXN0aW5lICYmIGZvcm0udW50b3VjaGVkKSB8fCBmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQXBwbHlcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLWRhdGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtZGF0ZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy1kYXRlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFBbUIsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFFTCx3QkFBd0IsRUFDeEIsa0JBQWtCLEVBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7O0FBYzFELE1BQU0sT0FBTyx5QkFBeUI7SUF5QnBDLFlBQ1UsV0FBd0IsRUFDeEIsTUFBYyxFQUNkLGNBQThCLEVBQzlCLGlCQUFvQztRQUhwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7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TyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDNUQsMkJBQTJCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDMUQsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDekQsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDdkQsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxRQUFRO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUM7OEdBakxVLHlCQUF5QjtrR0FBekIseUJBQXlCLDRNQVJ6QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7Z0JBQ3hELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixvRUFxQlUsbUJBQW1CLGdEQ3REaEMsc3NLQStJQTs7MkZENUdhLHlCQUF5QjtrQkFYckMsU0FBUzsrQkFDRSx3QkFBd0IsYUFFdkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7NEJBQ3hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO2tLQU9RLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQVFJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDeUIsUUFBUTtzQkFBdkMsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTZXZlcml0eSwgU2V2ZXJpdHlUeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVDb250ZXh0LCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFsYXJtTGlzdEZvcm1GaWx0ZXJzLFxuICBJTlRFUlZBTF9USVRMRVNfRVhURU5ERUQsXG4gIElOVEVSVkFMU19FWFRFTkRFRCxcbiAgV2lkZ2V0VGltZUNvbnRleHRTdGF0ZUV4dGVuZGVkXG59IGZyb20gJy4vYWxhcm1zLm1vZGVsJztcbmltcG9ydCB7IEJzRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFsYXJtc1ZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9hbGFybXMtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsYXJtRmlsdGVySW50ZXJ2YWwgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtZGF0ZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLWRhdGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBbGFybXNEYXRlRmlsdGVyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtc0RhdGVGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcmVhZG9ubHkgSU5URVJWQUxTID0gSU5URVJWQUxTX0VYVEVOREVEO1xuICByZWFkb25seSBJTlRFUlZBTF9USVRMRVMgPSBJTlRFUlZBTF9USVRMRVNfRVhURU5ERUQ7XG4gIHJlYWRvbmx5IERBVEVfRk9STUFUID0gJ3Nob3J0JztcblxuICBASW5wdXQoKSBERUZBVUxUX0lOVEVSVkFMOiBBbGFybUZpbHRlckludGVydmFsWydpZCddID0gJ25vbmUnO1xuICBASW5wdXQoKSB1cGRhdGVRdWVyeVBhcmFtcyA9IHRydWU7XG4gIC8qKlxuICAgKiBEYXRlIHJhbmdlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZGF0ZSBwaWNrZXIuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlOiBbc3RyaW5nLCBzdHJpbmddO1xuICBub0ZpbHRlckxhYmVsID0gZ2V0dGV4dCgnTm8gZGF0ZSBmaWx0ZXInKTtcblxuICBwcml2YXRlIHNob3dDbGVhcmVkOiBib29sZWFuO1xuICBwcml2YXRlIHNldmVyaXR5T3B0aW9uczogeyBba2V5IGluIFNldmVyaXR5VHlwZV06IGJvb2xlYW4gfTtcbiAgcHJpdmF0ZSB0eXBlRmlsdGVyczogc3RyaW5nO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBAT3V0cHV0KCkgZGF0ZUZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QWxhcm1MaXN0Rm9ybUZpbHRlcnM+KCk7XG4gIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgZHJvcGRvd246IEJzRHJvcGRvd25EaXJlY3RpdmU7XG5cbiAgZm9ybTogUmV0dXJuVHlwZTxBbGFybXNEYXRlRmlsdGVyQ29tcG9uZW50WydjcmVhdGVGb3JtJ10+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgYWxhcm1zVmlld1NlcnZpY2U6IEFsYXJtc1ZpZXdTZXJ2aWNlXG4gICkge31cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldERlZmF1bHRDb250ZXh0KCk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVGb3JtKGNvbnRleHQpO1xuICAgIHRoaXMuZGF0ZSA9IFtcbiAgICAgIHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRGcm9tRGF0ZSxcbiAgICAgIHRoaXMuZm9ybS52YWx1ZS5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGVcbiAgICBdO1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy5zaG93Q2xlYXJlZCA9IHBhcmFtcy5zaG93Q2xlYXJlZCA9PT0gJ3RydWUnO1xuICAgICAgdGhpcy5zZXZlcml0eU9wdGlvbnMgPSB7XG4gICAgICAgIFtTZXZlcml0eS5DUklUSUNBTF06IHBhcmFtcy5jcml0aWNhbCA9PT0gJ3RydWUnLFxuICAgICAgICBbU2V2ZXJpdHkuTUFKT1JdOiBwYXJhbXMubWFqb3IgPT09ICd0cnVlJyxcbiAgICAgICAgW1NldmVyaXR5Lk1JTk9SXTogcGFyYW1zLm1pbm9yID09PSAndHJ1ZScsXG4gICAgICAgIFtTZXZlcml0eS5XQVJOSU5HXTogcGFyYW1zLndhcm5pbmcgPT09ICd0cnVlJ1xuICAgICAgfTtcbiAgICAgIGlmIChwYXJhbXMudHlwZUZpbHRlcnMpIHtcbiAgICAgICAgdGhpcy50eXBlRmlsdGVycyA9IHBhcmFtcy50eXBlRmlsdGVycztcbiAgICAgIH1cbiAgICAgIGlmICghcGFyYW1zLmludGVydmFsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuaW50ZXJ2YWwgIT09ICdjdXN0b20nKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVRpbWUocGFyYW1zLmludGVydmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogcGFyYW1zLmludGVydmFsLFxuICAgICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlOiBwYXJhbXMubGFzdFVwZGF0ZWRGcm9tLFxuICAgICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZTogcGFyYW1zLmNyZWF0ZWRUb1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRlID0gW3BhcmFtcy5sYXN0VXBkYXRlZEZyb20sIHBhcmFtcy5jcmVhdGVkVG9dO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb0ludGVydmFsQ2hhbmdlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBhcHBseURhdGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgY29tYmluZWRGb3JtRXZlbnQgPSB7XG4gICAgICBzaG93Q2xlYXJlZDogdGhpcy5zaG93Q2xlYXJlZCxcbiAgICAgIHNldmVyaXR5T3B0aW9uczogdGhpcy5zZXZlcml0eU9wdGlvbnMsXG4gICAgICB0eXBlRmlsdGVyczogdGhpcy50eXBlRmlsdGVycyxcbiAgICAgIGludGVydmFsOiB0aGlzLmZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwsXG4gICAgICBzZWxlY3RlZERhdGVzOiBbXG4gICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZSksXG4gICAgICAgIG5ldyBEYXRlKHRoaXMuZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGUpXG4gICAgICBdIGFzIERhdGVUaW1lQ29udGV4dFxuICAgIH07XG5cbiAgICAvLyBuZWVkZWQgZm9yIGN1c3RvbSBpbnRlcnZhbFxuICAgIHRoaXMuZGF0ZSA9IFtcbiAgICAgIHRoaXMuZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRGcm9tRGF0ZSxcbiAgICAgIHRoaXMuZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGVcbiAgICBdO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXG4gICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICBpbnRlcnZhbDogdGhpcy5mb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLFxuICAgICAgICBsYXN0VXBkYXRlZEZyb206IGNvbWJpbmVkRm9ybUV2ZW50LnNlbGVjdGVkRGF0ZXNbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgICAgY3JlYXRlZFRvOiBjb21iaW5lZEZvcm1FdmVudC5zZWxlY3RlZERhdGVzWzFdLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgfSk7XG4gICAgdGhpcy5kYXRlRmlsdGVyQ2hhbmdlLmVtaXQoY29tYmluZWRGb3JtRXZlbnQpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlOlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgPyB2YWx1ZVswXSA6IHZhbHVlWzBdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZTogdHlwZW9mIHZhbHVlWzFdID09PSAnc3RyaW5nJyA/IHZhbHVlWzFdIDogdmFsdWVbMV0udG9JU09TdHJpbmcoKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZVRpbWUoaW50ZXJ2YWw6IEFsYXJtRmlsdGVySW50ZXJ2YWxbJ2lkJ10pOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5hbGFybXNWaWV3U2VydmljZS5nZXREYXRlVGltZUNvbnRleHRCeUludGVydmFsKGludGVydmFsKTtcbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5kYXRlID0gZGF0ZS5tYXAoZCA9PiBkLnRvSVNPU3RyaW5nKCkpIGFzIFtzdHJpbmcsIHN0cmluZ107XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlOiBkYXRlWzBdLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZTogZGF0ZVsxXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogaW50ZXJ2YWxcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG4gICAgdGhpcy5hcHBseURhdGVGaWx0ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGU6IHRoaXMuYWxhcm1zVmlld1NlcnZpY2UuZ2V0RGF0ZVRpbWVDb250ZXh0QnlJbnRlcnZhbCh0aGlzLkRFRkFVTFRfSU5URVJWQUwpLFxuICAgICAgaW50ZXJ2YWw6IHRoaXMuREVGQVVMVF9JTlRFUlZBTFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvSW50ZXJ2YWxDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShpbnRlcnZhbCA9PiB7XG4gICAgICAgIGlmIChpbnRlcnZhbCA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGU6XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLnZhbHVlID09PSBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuZm9ybS5jb250cm9scy5jdXJyZW50RGF0ZUNvbnRleHRUb0RhdGUudmFsdWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5mb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLnZhbHVlLFxuICAgICAgICAgICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogaW50ZXJ2YWxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVRpbWUoaW50ZXJ2YWwpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oY29udGV4dDogV2lkZ2V0VGltZUNvbnRleHRTdGF0ZUV4dGVuZGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGU6IGNvbnRleHQuZGF0ZVswXS50b0lTT1N0cmluZygpLFxuICAgICAgdGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlOiBjb250ZXh0LmRhdGVbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dEZyb21EYXRlOiBjb250ZXh0LmRhdGVbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgIGN1cnJlbnREYXRlQ29udGV4dFRvRGF0ZTogY29udGV4dC5kYXRlWzFdLnRvSVNPU3RyaW5nKCksXG4gICAgICBjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbDogY29udGV4dC5pbnRlcnZhbCB8fCAnY3VzdG9tJ1xuICAgIH0pO1xuICB9XG59XG4iLCI8Zm9ybVxuICBjbGFzcz1cImQtZmxleCBnYXAtMTYgcC1sLXhzLTE2IHAtci14cy0xNiBtLXQteHMtOCBtLWIteHMtOFwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duIGZsZXgtZ3Jvd1wiXG4gICAgYzh5RHJvcGRvd25EaXJlY3Rpb25cbiAgICAjZHJvcERpcmVjdGlvbj1cImJzLWRyb3Bkb3duXCJcbiAgICBkcm9wZG93blxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBsLWgtdGlnaHQgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgYXR0ci5hcmlhLWxhYmVsPVwie3tcbiAgICAgICAgKGZvcm0udmFsdWUuY3VycmVudERhdGVDb250ZXh0SW50ZXJ2YWwgPT09ICdub25lJ1xuICAgICAgICAgID8gbm9GaWx0ZXJMYWJlbFxuICAgICAgICAgIDogKGRhdGVbMF0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCkgKyAnIOKAlCAnICsgKGRhdGVbMV0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVClcbiAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgfX1cIlxuICAgICAgdG9vbHRpcD1cInt7XG4gICAgICAgIChmb3JtLnZhbHVlLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsID09PSAnbm9uZSdcbiAgICAgICAgICA/IG5vRmlsdGVyTGFiZWxcbiAgICAgICAgICA6IChkYXRlWzBdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQpICsgJyDigJQgJyArIChkYXRlWzFdIHwgYzh5RGF0ZTogREFURV9GT1JNQVQpXG4gICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgIH19XCJcbiAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgIGRhdGEtY3k9XCJhbGFybXMtZGF0ZS1maWx0ZXItLWRhdGUtcGlja2VyLWRyb3Bkb3duLWJ1dHRvblwiXG4gICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgPlxuICAgICAgPGlcbiAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgIGM4eUljb249XCJzY2hlZHVsZTFcIlxuICAgICAgPjwvaT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWNvbCB0ZXh0LWxlZnQgZml0LXdcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRleHQtMTJcIlxuICAgICAgICAgIGRhdGEtY3k9XCJ3aWRnZXQtdGltZS1jb250ZXh0LS1zZWxlY3RlZC1pbnRlcnZhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBJTlRFUlZBTF9USVRMRVNbZm9ybS5jb250cm9scy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbC52YWx1ZV0gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidGV4dC0xMCB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJhbGFybXMtZGF0ZS1maWx0ZXItLXNlbGVjdGVkLXRpbWUtcmFuZ2VcIlxuICAgICAgICAgICpuZ0lmPVwiZm9ybS5jb250cm9scy5jdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbC52YWx1ZSAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGRhdGVbMF0gfCBjOHlEYXRlOiBEQVRFX0ZPUk1BVCB9fSDigJQge3sgZGF0ZVsxXSB8IGM4eURhdGU6IERBVEVfRk9STUFUIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjYXJldCBtLXItMTYgbS1sLTRcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8dWxcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LS1kYXRlLXJhbmdlXCJcbiAgICAgICpkcm9wZG93bk1lbnVcbiAgICA+XG4gICAgICA8Yzh5LWludGVydmFsLXBpY2tlclxuICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjdXJyZW50RGF0ZUNvbnRleHRJbnRlcnZhbFwiXG4gICAgICAgIFtJTlRFUlZBTFNdPVwiSU5URVJWQUxTXCJcbiAgICAgID48L2M4eS1pbnRlcnZhbC1waWNrZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmN1cnJlbnREYXRlQ29udGV4dEludGVydmFsLnZhbHVlID09PSAnY3VzdG9tJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1sLTE2IHAtci0xNlwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgY2xhc3M9XCJtLWItOFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0Zyb21gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgZm9yPVwidGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgRnJvbWBkYXRlYFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxjOHktZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgICAgICBpZD1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlXCJcbiAgICAgICAgICAgICAgW21heERhdGVdPVwiZm9ybS52YWx1ZS50ZW1wb3JhcnlVc2VyU2VsZWN0ZWRUb0RhdGVcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Zyb21gZGF0ZWAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZEZyb21EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgICAgPjwvYzh5LWRhdGUtdGltZS1waWNrZXI+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtzaG93XT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGUuZXJyb3JzXCI+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlQWZ0ZXJSYW5nZU1heFwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBhZnRlciB0aGUgbGF0ZXN0IGFsbG93ZWQgZGF0ZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgIG5hbWU9XCJpbnZhbGlkRGF0ZVRpbWVcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidUaGlzIGRhdGUgaXMgaW52YWxpZC4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICBjbGFzcz1cIm0tYi04XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1RvYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGZvcj1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBUb2BkYXRlYFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxjOHktZGF0ZS10aW1lLXBpY2tlclxuICAgICAgICAgICAgICBpZD1cInRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgIFttaW5EYXRlXT1cImZvcm0udmFsdWUudGVtcG9yYXJ5VXNlclNlbGVjdGVkRnJvbURhdGVcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RvYGRhdGVgJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtLmNvbnRyb2xzLnRlbXBvcmFyeVVzZXJTZWxlY3RlZFRvRGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9ycyA/ICdoYXMtZXJyb3InIDogJydcIlxuICAgICAgICAgICAgPjwvYzh5LWRhdGUtdGltZS1waWNrZXI+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtzaG93XT1cImZvcm0uY29udHJvbHMudGVtcG9yYXJ5VXNlclNlbGVjdGVkVG9EYXRlLmVycm9yc1wiPlxuICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGF0ZUJlZm9yZVJhbmdlTWluXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInVGhpcyBkYXRlIGlzIGJlZm9yZSB0aGUgZWFybGllc3QgYWxsb3dlZCBkYXRlLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgbmFtZT1cImludmFsaWREYXRlVGltZVwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ1RoaXMgZGF0ZSBpcyBpbnZhbGlkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTE2IGQtZmxleCBnYXAtOCBzZXBhcmF0b3ItdG9wXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlEYXRlRmlsdGVyKCk7IGRyb3Bkb3duLmlzT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZm9ybS5wcmlzdGluZSAmJiBmb3JtLnVudG91Y2hlZCkgfHwgZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
@@ -144,11 +144,11 @@ export class AlarmsTypeFilterComponent {
144
144
  return activeFilters.map(filter => filter.filters.type).join(',');
145
145
  }
146
146
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, deps: [{ token: i1.AlarmEventSelectorService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i3.ColorService }], target: i0.ɵɵFactoryTarget.Component }); }
147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: { alarms: "alarms", possibleFilters: "possibleFilters", activeFilters: "activeFilters" }, outputs: { onFilterChanged: "onFilterChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"Custom alarm type\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"Add\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"Remove\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: i8.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
147
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: { alarms: "alarms", possibleFilters: "possibleFilters", activeFilters: "activeFilters" }, outputs: { onFilterChanged: "onFilterChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"'Custom alarm type' | translate\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"'Add' | translate\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"'Remove' | translate\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: i8.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] }); }
148
148
  }
149
149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, decorators: [{
150
150
  type: Component,
151
- args: [{ selector: 'c8y-alarms-type-filter', template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"Custom alarm type\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"Add\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"Remove\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n" }]
151
+ args: [{ selector: 'c8y-alarms-type-filter', template: "<div class=\"d-flex a-i-center\">\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n (onHidden)=\"resetFilters()\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: unset; min-width: 250px\"\n *dropdownMenu\n >\n <div class=\"p-16 bg-level-2\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n [c8yIcon]=\"'info-circle'\"\n ></i>\n <strong tanslate>The list below may not be complete.</strong>\n </p>\n <p tanslate>\n Recent alarms are displayed below. Past alarms might not be shown. Optionally you can\n add a custom alarm.\n </p>\n </div>\n </div>\n <c8y-list-group>\n <div class=\"input-group p-t-16 p-b-16 p-r-32 p-l-32 separator-bottom\">\n <input\n class=\"form-control\"\n placeholder=\"'Custom alarm type' | translate\"\n type=\"text\"\n [(ngModel)]=\"customAlarmTypeInput\"\n (keydown)=\"confirmWithEnter($event)\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn-dot text-primary\"\n [attr.aria-label]=\"'Add custom alarm' | translate\"\n tooltip=\"'Add' | translate\"\n placement=\"top\"\n [delay]=\"500\"\n (click)=\"addCustomAlarmType()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li\n class=\"c8y-list__item__collapse--container-small cdk-drag\"\n style=\"cursor: pointer\"\n *ngFor=\"let alarmType of possibleFilters\"\n (click)=\"toggleAlarmType(alarmType)\"\n >\n <c8y-li-checkbox\n class=\"a-s-center m-t-4 p-r-0 p-l-0\"\n [selected]=\"alarmType.__active\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleAlarmType(alarmType); $event.stopPropagation()\"\n ></c8y-li-checkbox>\n <div class=\"d-flex a-i-center p-l-4\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\">\n <div class=\"c8y-colorpicker c8y-colorpicker--alarm\">\n <span\n class=\"circle-icon-wrapper\"\n [ngStyle]=\"{ 'background-color': alarmType.color }\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"'bell'\"\n ></i>\n </span>\n </div>\n </div>\n <span class=\"text-truncate text-12 flex-grow\">\n {{ alarmType.label }}\n </span>\n <button\n class=\"btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n tooltip=\"'Remove' | translate\"\n placement=\"top\"\n *ngIf=\"alarmType.__target === null\"\n [delay]=\"500\"\n (click)=\"removeCustomAlarm(alarmType); $event.stopPropagation()\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </c8y-li>\n <c8y-li *ngIf=\"possibleFilters.length === 0\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"\n 'There is no alarm to filter. You can still add a custom alarm.' | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-li>\n <div class=\"sticky-bottom p-16\">\n <button\n class=\"btn btn-block btn-primary\"\n [disabled]=\"possibleFilters.length === 0\"\n (click)=\"applyFilterChange(); $event.stopPropagation(); filtersDropdown.hide()\"\n translate\n >\n Apply\n </button>\n </div>\n </c8y-list-group>\n </div>\n </div>\n</div>\n" }]
152
152
  }], ctorParameters: () => [{ type: i1.AlarmEventSelectorService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i3.ColorService }], propDecorators: { alarms: [{
153
153
  type: Input
154
154
  }], possibleFilters: [{
@@ -158,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
158
158
  }], onFilterChanged: [{
159
159
  type: Output
160
160
  }] } });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBZ0IseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBTS9DLE1BQU0sT0FBTyx5QkFBeUI7SUFzQnBDLFlBQ1UseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWMsRUFDZCxZQUEwQjtRQUgxQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFyQnBDLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUdyQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRSxxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUVqQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUV6QyxhQUFRLEdB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LENBQUMsR0FBRyxnQ0FBZ0MsRUFBRSxHQUFHLGtDQUFrQyxDQUFDLEVBQzVFLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVPLHVDQUF1QyxDQUM3QyxZQUE0QixFQUM1QixnQkFBZ0IsR0FBRyxFQUFFO1FBRXJCLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQTZCO1FBQ2xELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7OEdBakxVLHlCQUF5QjtrR0FBekIseUJBQXlCLHNPQ3BCdEMscTRMQTRLQTs7MkZEeEphLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MktBS2xDLE1BQU07c0JBREwsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQWxhcm0sIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29sb3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybURldGFpbHMsIEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtLWV2ZW50LXNlbGVjdG9yJztcbmltcG9ydCB7IG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBASW5wdXQoKVxuICBwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdID0gW107XG5cbiAgQElucHV0KClcbiAgYWN0aXZlRmlsdGVyczogQWxhcm1EZXRhaWxzW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgb25GaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QWxhcm1EZXRhaWxzW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGN1c3RvbUFsYXJtVHlwZXM6IEFsYXJtRGV0YWlsc1tdID0gW107XG4gIGN1c3RvbUFsYXJtVHlwZUlucHV0ID0gJyc7XG5cbiAgcmVhZG9ubHkgcXVlcnlQYXJhbU5hbWUgPSAndHlwZUZpbHRlcic7XG4gIHJlYWRvbmx5IFNUT1JBR0VfQUNDRVNTX0tFWSA9ICdjdXN0b21BbGFybVR5cGVzJztcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29sb3JTZXJ2aWNlOiBDb2xvclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UXVlcnlQYXJhbWV0ZXJPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuYWxhcm1zICYmIGNoYW5nZXMuYWxhcm1zLmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFBvc3NpYmxlRmlsdGVycygpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFF1ZXJ5UGFyYW1ldGVyT2JzZXJ2YWJsZSgpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMucG9zc2libGVGaWx0ZXJzO1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlRmlsdGVycyA9IHRoaXMuc2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgICAgICAgICAgYWxhcm1zLFxuICAgICAgICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGU6IEFsYXJtRGV0YWlscykge1xuICAgIGFsYXJtVHlwZS5fX2FjdGl2ZSA9ICFhbGFybVR5cGUuX19hY3RpdmU7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbmQoXG4gICAgICBhbGFybSA9PiBhbGFybS5maWx0ZXJzLnR5cGUgPT09IHR5cGUuZmlsdGVycy50eXBlXG4gICAgKTtcbiAgICBhbGFybUZpbHRlci5fX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJDaGFuZ2UoKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gdGhpcy5wb3NzaWJsZUZpbHRlcnMubWFwKGFsYXJtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFsYXJtLFxuICAgICAgICBfX2FjdGl2ZTogZmFsc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJDaGFuZ2UoKSB7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZVxuICAgICk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMuY3VycmVudFF1ZXJ5UGFyYW07XG4gICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVycyA9IGFjdGl2ZXM7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHRoaXMuYWN0aXZlRmlsdGVycyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIHR5cGVGaWx0ZXI6IG5ld1F1ZXJ5UGFyYW0gfHwgbnVsbFxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXJ5UGFyYW0gPSBuZXdRdWVyeVBhcmFtO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy5mb3JFYWNoKHBvc3NpYmxlRmlsdGVyID0+IHtcbiAgICAgIHBvc3NpYmxlRmlsdGVyLl9fYWN0aXZlID0gdGhpcy5hY3RpdmVGaWx0ZXJzLnNvbWUoXG4gICAgICAgIChhY3RpdmVGaWx0ZXI6IEFsYXJtRGV0YWlscykgPT4gYWN0aXZlRmlsdGVyID09PSBwb3NzaWJsZUZpbHRlclxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUN1c3RvbUFsYXJtKGFsYXJtRGV0YWlsczogQWxhcm1EZXRhaWxzKSB7XG4gICAgdGhpcy5wb3NzaWJsZUZpbHRlcnMgPSB0aGlzLnBvc3NpYmxlRmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IGZpbHRlciAhPT0gYWxhcm1EZXRhaWxzKTtcbiAgICB0aGlzLnN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpO1xuICB9XG5cbiAgY29uZmlybVdpdGhFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tQWxhcm1UeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkQ3VzdG9tQWxhcm1UeXBlKCkge1xuICAgIGlmICghdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy51bnNoaWZ0KHtcbiAgICAgIGxhYmVsOiB0aGlzLmN1c3RvbUFsYXJtVHlwZUlucHV0LFxuICAgICAgY29sb3I6IGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmdlbmVyYXRlQ29sb3IodGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY3VzdG9tQWxhcm1UeXBlSW5wdXRcbiAgICAgIH0sXG4gICAgICB0aW1lbGluZVR5cGU6ICdBTEFSTScsXG4gICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgIF9fdGFyZ2V0OiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCA9ICcnO1xuICAgIHRoaXMuc3RvcmVDdXN0b21BbGFybVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpIHtcbiAgICBjb25zdCBjdXN0b21UeXBlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcigoZmlsdGVyOiBBbGFybURldGFpbHMpID0+ICFmaWx0ZXIuX190YXJnZXQpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfQUNDRVNTX0tFWSwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tVHlwZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tQWxhcm1UeXBlRnJvbVN0b3JhZ2UoKSB7XG4gICAgY29uc3QgdHlwZXMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0FDQ0VTU19LRVkpO1xuICAgIHJldHVybiB0eXBlcyA/IEpTT04ucGFyc2UodHlwZXMpIDogW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFBvc3NpYmxlRmlsdGVycygpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHRoaXMucXVlcnlQYXJhbU5hbWUpO1xuICAgIGNvbnN0IGFsYXJtVHlwZXNGcm9tQ3VycmVudGx5U2hvd25BbGFybXMgPVxuICAgICAgYXdhaXQgdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldFVuaXF1ZUFsYXJtc09ubHkodGhpcy5hbGFybXMuZGF0YSk7XG4gICAgY29uc3QgY3VzdG9tQWxhcm1UeXBlc0Zyb21Mb2NhbFN0b3JhZ2UgPSB0aGlzLmdldEN1c3RvbUFsYXJtVHlwZUZyb21TdG9yYWdlKCk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLnNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIFsuLi5jdXN0b21BbGFybVR5cGVzRnJvbUxvY2FsU3RvcmFnZSwgLi4uYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtc10sXG4gICAgICBxdWVyeVBhcmFtZXRlcnNcbiAgICApO1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gc2VsZWN0YWJsZUFsYXJtVHlwZXM7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIGZpbHRlclR5cGVzUXVlcnkgPSAnJ1xuICApOiBBbGFybURldGFpbHNbXSB7XG4gICAgY29uc3QgdHlwZXMgPSAoZmlsdGVyVHlwZXNRdWVyeSA/PyAnJykuc3BsaXQoJywnKTtcbiAgICByZXR1cm4gYWxhcm1GaWx0ZXJzLm1hcCgoYWxhcm06IEFsYXJtRGV0YWlscykgPT4gKHtcbiAgICAgIC4uLmFsYXJtLFxuICAgICAgX19hY3RpdmU6IHR5cGVzLmluY2x1ZGVzKGFsYXJtLmZpbHRlcnMudHlwZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICB0aXRsZT1cInt7ICdGaWx0ZXIgYnkgQWxhcm0gdHlwZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBkcm9wZG93blxuICAgICNmaWx0ZXJzRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgW2Nka1RyYXBGb2N1c109XCJmaWx0ZXJzRHJvcGRvd24uaXNPcGVuXCJcbiAgICAob25IaWRkZW4pPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDsgZWxzZSBhbGxUeXBlc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFjdGl2ZUZpbHRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkZXNlbGVjdChmaWx0ZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGxcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZmlsdGVyLmNvbG9yIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxUeXBlcz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICB7eyAnQWxsIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IHVuc2V0OyBtaW4td2lkdGg6IDI1MHB4XCJcbiAgICAgICpkcm9wZG93bk1lbnVcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mbyBtLXItNFwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cIidpbmZvLWNpcmNsZSdcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxzdHJvbmcgdGFuc2xhdGU+VGhlIGxpc3QgYmVsb3cgbWF5IG5vdCBiZSBjb21wbGV0ZS48L3N0cm9uZz5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgdGFuc2xhdGU+XG4gICAgICAgICAgICBSZWNlbnQgYWxhcm1zIGFyZSBkaXNwbGF5ZWQgYmVsb3cuIFBhc3QgYWxhcm1zIG1pZ2h0IG5vdCBiZSBzaG93bi4gT3B0aW9uYWxseSB5b3UgY2FuXG4gICAgICAgICAgICBhZGQgYSBjdXN0b20gYWxhcm0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1saXN0LWdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgcC10LTE2IHAtYi0xNiBwLXItMzIgcC1sLTMyIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ3VzdG9tIGFsYXJtIHR5cGVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXN0b21BbGFybVR5cGVJbnB1dFwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJjb25maXJtV2l0aEVudGVyKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWRkIGN1c3RvbSBhbGFybScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwPVwiQWRkXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRDdXN0b21BbGFybVR5cGUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sbGFwc2UtLWNvbnRhaW5lci1zbWFsbCBjZGstZHJhZ1wiXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBhbGFybVR5cGUgb2YgcG9zc2libGVGaWx0ZXJzXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxhcm1UeXBlKGFsYXJtVHlwZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1saS1jaGVja2JveFxuICAgICAgICAgICAgY2xhc3M9XCJhLXMtY2VudGVyIG0tdC00IHAtci0wIHAtbC0wXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZF09XCJhbGFybVR5cGUuX19hY3RpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgID48L2M4eS1saS1jaGVja2JveD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXIgcC1sLTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sb3JwaWNrZXIgcC10LTAgcC1iLTAgcC1sLTBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1jb2xvcnBpY2tlciBjOHktY29sb3JwaWNrZXItLWFsYXJtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2lyY2xlLWljb24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogYWxhcm1UeXBlLmNvbG9yIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgW2M4eUljb25dPVwiJ2JlbGwnXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHRleHQtMTIgZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgIHt7IGFsYXJtVHlwZS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgYnRuLWRvdC0tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCJSZW1vdmVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAqbmdJZj1cImFsYXJtVHlwZS5fX3RhcmdldCA9PT0gbnVsbFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ3VzdG9tQWxhcm0oYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGM4eS1saSAqbmdJZj1cInBvc3NpYmxlRmlsdGVycy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBjbGFzcz1cInAtdC04XCJcbiAgICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBhbGFybSBmb3VuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gYWxhcm0gdG8gZmlsdGVyLiBZb3UgY2FuIHN0aWxsIGFkZCBhIGN1c3RvbSBhbGFybS4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1ib3R0b20gcC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ibG9jayBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicG9zc2libGVGaWx0ZXJzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJDaGFuZ2UoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWx0ZXJzRHJvcGRvd24uaGlkZSgpXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBZ0IseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBTS9DLE1BQU0sT0FBTyx5QkFBeUI7SUFzQnBDLFlBQ1UseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWMsRUFDZCxZQUEwQjtRQUgxQiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFyQnBDLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQUdyQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRSxxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUVqQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUV6QyxhQUFRLEdB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LENBQUMsR0FBRyxnQ0FBZ0MsRUFBRSxHQUFHLGtDQUFrQyxDQUFDLEVBQzVFLGVBQWUsQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVPLHVDQUF1QyxDQUM3QyxZQUE0QixFQUM1QixnQkFBZ0IsR0FBRyxFQUFFO1FBRXJCLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLGFBQTZCO1FBQ2xELE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7OEdBakxVLHlCQUF5QjtrR0FBekIseUJBQXlCLHNPQ3BCdEMsKzZMQTRLQTs7MkZEeEphLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MktBS2xDLE1BQU07c0JBREwsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJQWxhcm0sIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29sb3JTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBbGFybURldGFpbHMsIEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FsYXJtLWV2ZW50LXNlbGVjdG9yJztcbmltcG9ydCB7IG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBASW5wdXQoKVxuICBwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdID0gW107XG5cbiAgQElucHV0KClcbiAgYWN0aXZlRmlsdGVyczogQWxhcm1EZXRhaWxzW10gPSBbXTtcblxuICBAT3V0cHV0KClcbiAgb25GaWx0ZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QWxhcm1EZXRhaWxzW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGN1c3RvbUFsYXJtVHlwZXM6IEFsYXJtRGV0YWlsc1tdID0gW107XG4gIGN1c3RvbUFsYXJtVHlwZUlucHV0ID0gJyc7XG5cbiAgcmVhZG9ubHkgcXVlcnlQYXJhbU5hbWUgPSAndHlwZUZpbHRlcic7XG4gIHJlYWRvbmx5IFNUT1JBR0VfQUNDRVNTX0tFWSA9ICdjdXN0b21BbGFybVR5cGVzJztcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29sb3JTZXJ2aWNlOiBDb2xvclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UXVlcnlQYXJhbWV0ZXJPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXMuYWxhcm1zICYmIGNoYW5nZXMuYWxhcm1zLmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmFjdGl2ZUZpbHRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldFBvc3NpYmxlRmlsdGVycygpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFF1ZXJ5UGFyYW1ldGVyT2JzZXJ2YWJsZSgpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMucG9zc2libGVGaWx0ZXJzO1xuICAgICAgICAgIGNvbnN0IHBvc3NpYmxlRmlsdGVycyA9IHRoaXMuc2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgICAgICAgICAgYWxhcm1zLFxuICAgICAgICAgICAgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChwb3NzaWJsZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gcG9zc2libGVGaWx0ZXJzO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGU6IEFsYXJtRGV0YWlscykge1xuICAgIGFsYXJtVHlwZS5fX2FjdGl2ZSA9ICFhbGFybVR5cGUuX19hY3RpdmU7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbmQoXG4gICAgICBhbGFybSA9PiBhbGFybS5maWx0ZXJzLnR5cGUgPT09IHR5cGUuZmlsdGVycy50eXBlXG4gICAgKTtcbiAgICBhbGFybUZpbHRlci5fX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJDaGFuZ2UoKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gdGhpcy5wb3NzaWJsZUZpbHRlcnMubWFwKGFsYXJtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFsYXJtLFxuICAgICAgICBfX2FjdGl2ZTogZmFsc2VcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5hcHBseUZpbHRlckNoYW5nZSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJDaGFuZ2UoKSB7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcihcbiAgICAgIChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZVxuICAgICk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMuY3VycmVudFF1ZXJ5UGFyYW07XG4gICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVycyA9IGFjdGl2ZXM7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlZC5lbWl0KHRoaXMuYWN0aXZlRmlsdGVycyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIHR5cGVGaWx0ZXI6IG5ld1F1ZXJ5UGFyYW0gfHwgbnVsbFxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXJ5UGFyYW0gPSBuZXdRdWVyeVBhcmFtO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpIHtcbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy5mb3JFYWNoKHBvc3NpYmxlRmlsdGVyID0+IHtcbiAgICAgIHBvc3NpYmxlRmlsdGVyLl9fYWN0aXZlID0gdGhpcy5hY3RpdmVGaWx0ZXJzLnNvbWUoXG4gICAgICAgIChhY3RpdmVGaWx0ZXI6IEFsYXJtRGV0YWlscykgPT4gYWN0aXZlRmlsdGVyID09PSBwb3NzaWJsZUZpbHRlclxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZUN1c3RvbUFsYXJtKGFsYXJtRGV0YWlsczogQWxhcm1EZXRhaWxzKSB7XG4gICAgdGhpcy5wb3NzaWJsZUZpbHRlcnMgPSB0aGlzLnBvc3NpYmxlRmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IGZpbHRlciAhPT0gYWxhcm1EZXRhaWxzKTtcbiAgICB0aGlzLnN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpO1xuICB9XG5cbiAgY29uZmlybVdpdGhFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIHRoaXMuYWRkQ3VzdG9tQWxhcm1UeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkQ3VzdG9tQWxhcm1UeXBlKCkge1xuICAgIGlmICghdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBvc3NpYmxlRmlsdGVycy51bnNoaWZ0KHtcbiAgICAgIGxhYmVsOiB0aGlzLmN1c3RvbUFsYXJtVHlwZUlucHV0LFxuICAgICAgY29sb3I6IGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmdlbmVyYXRlQ29sb3IodGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY3VzdG9tQWxhcm1UeXBlSW5wdXRcbiAgICAgIH0sXG4gICAgICB0aW1lbGluZVR5cGU6ICdBTEFSTScsXG4gICAgICBfX2FjdGl2ZTogdHJ1ZSxcbiAgICAgIF9fdGFyZ2V0OiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy5jdXN0b21BbGFybVR5cGVJbnB1dCA9ICcnO1xuICAgIHRoaXMuc3RvcmVDdXN0b21BbGFybVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlQ3VzdG9tQWxhcm1UeXBlcygpIHtcbiAgICBjb25zdCBjdXN0b21UeXBlcyA9IHRoaXMucG9zc2libGVGaWx0ZXJzLmZpbHRlcigoZmlsdGVyOiBBbGFybURldGFpbHMpID0+ICFmaWx0ZXIuX190YXJnZXQpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfQUNDRVNTX0tFWSwgSlNPTi5zdHJpbmdpZnkoY3VzdG9tVHlwZXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VzdG9tQWxhcm1UeXBlRnJvbVN0b3JhZ2UoKSB7XG4gICAgY29uc3QgdHlwZXMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0FDQ0VTU19LRVkpO1xuICAgIHJldHVybiB0eXBlcyA/IEpTT04ucGFyc2UodHlwZXMpIDogW107XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFBvc3NpYmxlRmlsdGVycygpIHtcbiAgICBjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KHRoaXMucXVlcnlQYXJhbU5hbWUpO1xuICAgIGNvbnN0IGFsYXJtVHlwZXNGcm9tQ3VycmVudGx5U2hvd25BbGFybXMgPVxuICAgICAgYXdhaXQgdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldFVuaXF1ZUFsYXJtc09ubHkodGhpcy5hbGFybXMuZGF0YSk7XG4gICAgY29uc3QgY3VzdG9tQWxhcm1UeXBlc0Zyb21Mb2NhbFN0b3JhZ2UgPSB0aGlzLmdldEN1c3RvbUFsYXJtVHlwZUZyb21TdG9yYWdlKCk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLnNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIFsuLi5jdXN0b21BbGFybVR5cGVzRnJvbUxvY2FsU3RvcmFnZSwgLi4uYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtc10sXG4gICAgICBxdWVyeVBhcmFtZXRlcnNcbiAgICApO1xuICAgIHRoaXMucG9zc2libGVGaWx0ZXJzID0gc2VsZWN0YWJsZUFsYXJtVHlwZXM7XG4gIH1cblxuICBwcml2YXRlIHNldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIGZpbHRlclR5cGVzUXVlcnkgPSAnJ1xuICApOiBBbGFybURldGFpbHNbXSB7XG4gICAgY29uc3QgdHlwZXMgPSAoZmlsdGVyVHlwZXNRdWVyeSA/PyAnJykuc3BsaXQoJywnKTtcbiAgICByZXR1cm4gYWxhcm1GaWx0ZXJzLm1hcCgoYWxhcm06IEFsYXJtRGV0YWlscykgPT4gKHtcbiAgICAgIC4uLmFsYXJtLFxuICAgICAgX19hY3RpdmU6IHR5cGVzLmluY2x1ZGVzKGFsYXJtLmZpbHRlcnMudHlwZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICB0aXRsZT1cInt7ICdGaWx0ZXIgYnkgQWxhcm0gdHlwZXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICBkcm9wZG93blxuICAgICNmaWx0ZXJzRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgW2Nka1RyYXBGb2N1c109XCJmaWx0ZXJzRHJvcGRvd24uaXNPcGVuXCJcbiAgICAob25IaWRkZW4pPVwicmVzZXRGaWx0ZXJzKClcIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDsgZWxzZSBhbGxUeXBlc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFjdGl2ZUZpbHRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkZXNlbGVjdChmaWx0ZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGxcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZmlsdGVyLmNvbG9yIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxUeXBlcz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICB7eyAnQWxsIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IHVuc2V0OyBtaW4td2lkdGg6IDI1MHB4XCJcbiAgICAgICpkcm9wZG93bk1lbnVcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaW5mbyBtLXItNFwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cIidpbmZvLWNpcmNsZSdcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxzdHJvbmcgdGFuc2xhdGU+VGhlIGxpc3QgYmVsb3cgbWF5IG5vdCBiZSBjb21wbGV0ZS48L3N0cm9uZz5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgdGFuc2xhdGU+XG4gICAgICAgICAgICBSZWNlbnQgYWxhcm1zIGFyZSBkaXNwbGF5ZWQgYmVsb3cuIFBhc3QgYWxhcm1zIG1pZ2h0IG5vdCBiZSBzaG93bi4gT3B0aW9uYWxseSB5b3UgY2FuXG4gICAgICAgICAgICBhZGQgYSBjdXN0b20gYWxhcm0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGM4eS1saXN0LWdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgcC10LTE2IHAtYi0xNiBwLXItMzIgcC1sLTMyIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiJ0N1c3RvbSBhbGFybSB0eXBlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1c3RvbUFsYXJtVHlwZUlucHV0XCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImNvbmZpcm1XaXRoRW50ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZGQgY3VzdG9tIGFsYXJtJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXA9XCInQWRkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ3VzdG9tQWxhcm1UeXBlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGM4eS1saVxuICAgICAgICAgIGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbGxhcHNlLS1jb250YWluZXItc21hbGwgY2RrLWRyYWdcIlxuICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWxhcm1UeXBlIG9mIHBvc3NpYmxlRmlsdGVyc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsYXJtVHlwZShhbGFybVR5cGUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktbGktY2hlY2tib3hcbiAgICAgICAgICAgIGNsYXNzPVwiYS1zLWNlbnRlciBtLXQtNCBwLXItMCBwLWwtMFwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwiYWxhcm1UeXBlLl9fYWN0aXZlXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGFybVR5cGUoYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICA+PC9jOHktbGktY2hlY2tib3g+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIHAtbC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbG9ycGlja2VyIHAtdC0wIHAtYi0wIHAtbC0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktY29sb3JwaWNrZXIgYzh5LWNvbG9ycGlja2VyLS1hbGFybVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGFsYXJtVHlwZS5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0cm9rZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjOHlJY29uXT1cIidiZWxsJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LTEyIGZsZXgtZ3Jvd1wiPlxuICAgICAgICAgICAgICB7eyBhbGFybVR5cGUubGFiZWwgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4tZG90IGJ0bi1kb3QtLWRhbmdlclwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAqbmdJZj1cImFsYXJtVHlwZS5fX3RhcmdldCA9PT0gbnVsbFwiXG4gICAgICAgICAgICAgIFtkZWxheV09XCI1MDBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ3VzdG9tQWxhcm0oYWxhcm1UeXBlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cIm1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGM4eS1saSAqbmdJZj1cInBvc3NpYmxlRmlsdGVycy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICBjbGFzcz1cInAtdC04XCJcbiAgICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidObyBhbGFybSBmb3VuZCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gYWxhcm0gdG8gZmlsdGVyLiBZb3UgY2FuIHN0aWxsIGFkZCBhIGN1c3RvbSBhbGFybS4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8L2M4eS1saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1ib3R0b20gcC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1ibG9jayBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicG9zc2libGVGaWx0ZXJzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJDaGFuZ2UoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWx0ZXJzRHJvcGRvd24uaGlkZSgpXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFwcGx5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==