@mtna/web-form-angular 1.0.2-SNAPSHOT.2 → 1.0.2

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 (135) hide show
  1. package/_index.scss +1 -2
  2. package/bundles/mtna-web-form-angular.umd.js +1219 -539
  3. package/bundles/mtna-web-form-angular.umd.js.map +1 -1
  4. package/esm2015/lib/components/acknowledge-dialog/acknowledge-dialog.component.js +2 -2
  5. package/esm2015/lib/components/base-form/base-form.component.js +243 -0
  6. package/esm2015/lib/components/base-form/index.js +2 -0
  7. package/esm2015/lib/components/base-items/base-group-item.component.js +5 -5
  8. package/esm2015/lib/components/base-items/base-parent-value-item.component.js +3 -2
  9. package/esm2015/lib/components/base-items/base-section-item.component.js +6 -5
  10. package/esm2015/lib/components/form/form.component.js +13 -239
  11. package/esm2015/lib/components/form-item/form-item.component.js +2 -2
  12. package/esm2015/lib/components/form-item-component-provider/form-item-injected-components.js +7 -1
  13. package/esm2015/lib/components/form-item-dialog/form-item-dialog.component.js +6 -5
  14. package/esm2015/lib/components/form-item-dialog/form-item-dialog.module.js +5 -4
  15. package/esm2015/lib/components/form-item-impl/boolean/boolean.component.js +2 -2
  16. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.component.js +7 -5
  17. package/esm2015/lib/components/form-item-impl/checkbox/checkbox.module.js +5 -1
  18. package/esm2015/lib/components/form-item-impl/date/date.component.js +3 -2
  19. package/esm2015/lib/components/form-item-impl/date-range/date-range.component.js +6 -2
  20. package/esm2015/lib/components/form-item-impl/dropdown/dropdown.component.js +2 -2
  21. package/esm2015/lib/components/form-item-impl/file-upload/file-upload.component.js +3 -2
  22. package/esm2015/lib/components/form-item-impl/form-group/form-group.component.js +2 -2
  23. package/esm2015/lib/components/form-item-impl/i18n-input/i18n-input.component.js +3 -2
  24. package/esm2015/lib/components/form-item-impl/input/input.component.js +3 -2
  25. package/esm2015/lib/components/form-item-impl/multiple-choice/multiple-choice.component.js +2 -2
  26. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.js +3 -2
  27. package/esm2015/lib/components/form-item-impl/search/resource-search.component.js +2 -2
  28. package/esm2015/lib/components/form-item-impl/year-quarter/year-quarter.component.js +2 -3
  29. package/esm2015/lib/components/form-stepper/form-step/form-step.component.js +10 -3
  30. package/esm2015/lib/components/form-stepper/form-step-group/form-step-group.component.js +4 -2
  31. package/esm2015/lib/components/form-stepper/form-stepper/form-stepper.component.js +52 -10
  32. package/esm2015/lib/components/form-stepper/form-stepper.module.js +17 -5
  33. package/esm2015/lib/components/index.js +2 -1
  34. package/esm2015/lib/components/progressive-form/index.js +3 -0
  35. package/esm2015/lib/components/progressive-form/progressive-form/index.js +3 -0
  36. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.component.js +287 -0
  37. package/esm2015/lib/components/progressive-form/progressive-form/progressive-form.module.js +68 -0
  38. package/esm2015/lib/components/progressive-form/progressive-form-section/index.js +3 -0
  39. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.js +27 -0
  40. package/esm2015/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.js +54 -0
  41. package/esm2015/lib/components/step-card/step-card.component.js +10 -2
  42. package/esm2015/lib/components/step-card/step-card.module.js +27 -4
  43. package/esm2015/lib/models/form-stepper/form-step-group.model.js +8 -2
  44. package/esm2015/lib/models/form-stepper/form-step.model.js +7 -1
  45. package/esm2015/lib/models/index.js +2 -1
  46. package/esm2015/lib/models/progressive-form/index.js +4 -0
  47. package/esm2015/lib/models/progressive-form/outline-step.model.js +2 -0
  48. package/esm2015/lib/models/progressive-form/progressive-form-section.model.js +6 -0
  49. package/esm2015/lib/models/progressive-form/progressive-form.model.js +6 -0
  50. package/esm2015/lib/pipes/child-step-active.pipe.js +28 -0
  51. package/esm2015/lib/pipes/coerce-form-step-group.pipe.js +29 -0
  52. package/esm2015/lib/pipes/coerce-form-step.pipe.js +29 -0
  53. package/esm2015/lib/pipes/date-quarter.pipe.js +13 -13
  54. package/esm2015/lib/pipes/get-active-form-step-item.pipe.js +33 -0
  55. package/esm2015/lib/pipes/get-progressive-form-item.pipe.js +40 -0
  56. package/esm2015/lib/pipes/get-selected-option.pipe.js +4 -3
  57. package/esm2015/lib/pipes/get-step-aria-label.pipe.js +55 -0
  58. package/esm2015/lib/pipes/index.js +7 -1
  59. package/esm2015/lib/pipes/items-with-value.pipe.js +5 -10
  60. package/esm2015/lib/services/dialog.service.js +4 -3
  61. package/esm2015/lib/services/form-manager.service.js +19 -7
  62. package/esm2015/lib/services/ng-form.service.js +7 -1
  63. package/esm2015/lib/services/ui.service.js +15 -15
  64. package/esm2015/lib/utilities/generate-form-steps.js +20 -5
  65. package/esm2015/lib/utilities/serializer-util.js +12 -5
  66. package/esm2015/lib/utilities/update-step-status.js +1 -1
  67. package/esm2015/public-api.js +1 -2
  68. package/fesm2015/mtna-web-form-angular.js +962 -364
  69. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  70. package/lib/components/base-form/base-form.component.d.ts +89 -0
  71. package/lib/components/base-form/index.d.ts +1 -0
  72. package/lib/components/base-items/base-group-item.component.d.ts +2 -0
  73. package/lib/components/base-items/base-section-item.component.d.ts +2 -1
  74. package/lib/components/form/form.component.d.ts +4 -86
  75. package/lib/components/form-item-dialog/form-item-dialog.module.d.ts +2 -1
  76. package/lib/components/form-item-impl/checkbox/_checkbox-theme.scss +11 -2
  77. package/lib/components/form-item-impl/checkbox/checkbox.component.d.ts +1 -0
  78. package/lib/components/form-item-impl/checkbox/checkbox.module.d.ts +11 -10
  79. package/lib/components/form-item-impl/date/date.component.d.ts +1 -0
  80. package/lib/components/form-item-impl/date-range/date-range.component.d.ts +1 -0
  81. package/lib/components/form-item-impl/dropdown/_dropdown-theme.scss +35 -0
  82. package/lib/components/form-item-impl/file-upload/file-upload.component.d.ts +1 -0
  83. package/lib/components/form-item-impl/i18n-input/i18n-input.component.d.ts +1 -0
  84. package/lib/components/form-item-impl/input/input.component.d.ts +1 -0
  85. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.d.ts +1 -0
  86. package/lib/components/form-stepper/form-step/form-step.component.d.ts +7 -0
  87. package/lib/components/form-stepper/form-step-group/form-step-group.component.d.ts +2 -0
  88. package/lib/components/form-stepper/form-stepper/_form-stepper-theme.scss +30 -15
  89. package/lib/components/form-stepper/form-stepper/form-stepper.component.d.ts +15 -1
  90. package/lib/components/form-stepper/form-stepper.module.d.ts +5 -1
  91. package/lib/components/index.d.ts +1 -0
  92. package/lib/components/progressive-form/index.d.ts +2 -0
  93. package/lib/components/progressive-form/progressive-form/index.d.ts +2 -0
  94. package/lib/components/progressive-form/progressive-form/progressive-form.component.d.ts +101 -0
  95. package/lib/components/progressive-form/progressive-form/progressive-form.module.d.ts +19 -0
  96. package/lib/components/progressive-form/progressive-form-section/index.d.ts +2 -0
  97. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.component.d.ts +9 -0
  98. package/lib/components/progressive-form/progressive-form-section/progressive-form-section.module.d.ts +16 -0
  99. package/lib/components/step-card/step-card.component.d.ts +3 -1
  100. package/lib/components/step-card/step-card.module.d.ts +2 -1
  101. package/lib/core/_all-color.scss +2 -2
  102. package/lib/core/_all-theme.scss +2 -2
  103. package/lib/core/_all-typography.scss +2 -2
  104. package/lib/models/form-stepper/form-step-group.model.d.ts +5 -1
  105. package/lib/models/form-stepper/form-step.model.d.ts +3 -0
  106. package/lib/models/index.d.ts +1 -0
  107. package/lib/models/progressive-form/index.d.ts +3 -0
  108. package/lib/models/progressive-form/outline-step.model.d.ts +7 -0
  109. package/lib/models/progressive-form/progressive-form-section.model.d.ts +4 -0
  110. package/lib/models/progressive-form/progressive-form.model.d.ts +7 -0
  111. package/lib/pipes/child-step-active.pipe.d.ts +13 -0
  112. package/lib/pipes/coerce-form-step-group.pipe.d.ts +13 -0
  113. package/lib/pipes/coerce-form-step.pipe.d.ts +13 -0
  114. package/lib/pipes/get-active-form-step-item.pipe.d.ts +13 -0
  115. package/lib/pipes/get-progressive-form-item.pipe.d.ts +14 -0
  116. package/lib/pipes/get-step-aria-label.pipe.d.ts +17 -0
  117. package/lib/pipes/index.d.ts +6 -0
  118. package/lib/pipes/items-with-value.pipe.d.ts +0 -1
  119. package/lib/services/dialog.service.d.ts +1 -0
  120. package/lib/services/form-manager.service.d.ts +13 -4
  121. package/lib/services/ng-form.service.d.ts +6 -0
  122. package/lib/utilities/generate-form-steps.d.ts +5 -1
  123. package/lib/utilities/update-step-status.d.ts +2 -2
  124. package/package.json +1 -1
  125. package/public-api.d.ts +0 -1
  126. package/esm2015/lib/directives/base-form-item-control.directive.js +0 -58
  127. package/esm2015/lib/directives/base-parent-item-control.directive.js +0 -42
  128. package/esm2015/lib/directives/base-single-selection-parent.directive.js +0 -53
  129. package/esm2015/lib/directives/form-item.directive.js +0 -22
  130. package/esm2015/lib/directives/index.js +0 -5
  131. package/lib/directives/base-form-item-control.directive.d.ts +0 -26
  132. package/lib/directives/base-parent-item-control.directive.d.ts +0 -19
  133. package/lib/directives/base-single-selection-parent.directive.d.ts +0 -26
  134. package/lib/directives/form-item.directive.d.ts +0 -13
  135. package/lib/directives/index.d.ts +0 -4
@@ -7,6 +7,7 @@ import * as i1 from "@angular/material/dialog";
7
7
  export class MtnaWfDialogService {
8
8
  constructor(dialog) {
9
9
  this.dialog = dialog;
10
+ this._acknowledgementText = $localize `Acknowledgement`;
10
11
  }
11
12
  /**
12
13
  * Display the acknowledgement the user agreed to for a given option.
@@ -15,7 +16,7 @@ export class MtnaWfDialogService {
15
16
  showAcknowledgement(acknowledgementItem) {
16
17
  this.dialog.open(MtnaWfFormItemDialogComponent, {
17
18
  closeOnNavigation: true,
18
- data: new MtnaWfFormItemDialogData(acknowledgementItem.items, acknowledgementItem.title.value || 'Acknowledgement'),
19
+ data: new MtnaWfFormItemDialogData(acknowledgementItem.items, acknowledgementItem.title.value || this._acknowledgementText),
19
20
  disableClose: false,
20
21
  hasBackdrop: true,
21
22
  maxWidth: '500px',
@@ -30,7 +31,7 @@ export class MtnaWfDialogService {
30
31
  return this.dialog
31
32
  .open(MtnaWfAcknowledgeDialogComponent, {
32
33
  closeOnNavigation: true,
33
- data: new MtnaWfFormItemDialogData(acknowledgementItem.items, acknowledgementItem.title.value || 'Acknowledgement'),
34
+ data: new MtnaWfFormItemDialogData(acknowledgementItem.items, acknowledgementItem.title.value || this._acknowledgementText),
34
35
  disableClose: true,
35
36
  hasBackdrop: true,
36
37
  maxWidth: '500px',
@@ -44,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
44
45
  type: Injectable,
45
46
  args: [{ providedIn: 'root' }]
46
47
  }], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUszQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNqSCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBR2pGLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBb0IsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztJQUFHLENBQUM7SUFFekM7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsbUJBQTRCO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQzlDLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsSUFBSSxFQUFFLElBQUksd0JBQXdCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksaUJBQWlCLENBQUM7WUFDbkgsWUFBWSxFQUFFLEtBQUs7WUFDbkIsV0FBVyxFQUFFLElBQUk7WUFDakIsUUFBUSxFQUFFLE9BQU87U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxtQkFBNEI7UUFDaEQsT0FBTyxJQUFJLENBQUMsTUFBTTthQUNmLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTtZQUN0QyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLElBQUksRUFBRSxJQUFJLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLGlCQUFpQixDQUFDO1lBQ25ILFlBQVksRUFBRSxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUM7YUFDRCxXQUFXLEVBQUUsQ0FBQztJQUNuQixDQUFDOztpSEFoQ1UsbUJBQW1CO3FIQUFuQixtQkFBbUIsY0FETixNQUFNOzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE10bmFXZkFja25vd2xlZGdlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hY2tub3dsZWRnZS1kaWFsb2cvYWNrbm93bGVkZ2UtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdG5hV2ZGb3JtSXRlbURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS1pdGVtLWRpYWxvZy9mb3JtLWl0ZW0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdG5hV2ZGb3JtSXRlbURpYWxvZ0RhdGEgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1pdGVtLWRpYWxvZy1kYXRhLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZEaWFsb2dTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgYWNrbm93bGVkZ2VtZW50IHRoZSB1c2VyIGFncmVlZCB0byBmb3IgYSBnaXZlbiBvcHRpb24uXG4gICAqIEBwYXJhbSBhY2tub3dsZWRnZW1lbnRJdGVtIFRoZSB7QGxpbmsgU2VjdGlvbn0gdGhhdCByZXByZXNlbnRzIHRoZSBhY2tub3dsZWRnZW1lbnQgdGV4dCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgc2hvd0Fja25vd2xlZGdlbWVudChhY2tub3dsZWRnZW1lbnRJdGVtOiBTZWN0aW9uKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihNdG5hV2ZGb3JtSXRlbURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICBkYXRhOiBuZXcgTXRuYVdmRm9ybUl0ZW1EaWFsb2dEYXRhKGFja25vd2xlZGdlbWVudEl0ZW0uaXRlbXMsIGFja25vd2xlZGdlbWVudEl0ZW0udGl0bGUudmFsdWUgfHwgJ0Fja25vd2xlZGdlbWVudCcpLFxuICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgbWF4V2lkdGg6ICc1MDBweCcsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBzb21lIHRleHQgaW4gYSBkaWFsb2cgdGhhdCB0aGUgdXNlciBuZWVkcyB0byBcImFja25vd2xlZGdlXCIgYmVmb3JlIHRoZXkgY2FuIG1ha2UgYSBjZXJ0YWluIHNlbGVjdGlvbi5cbiAgICogQHBhcmFtIGFja25vd2xlZGdlbWVudEl0ZW0gVGhlIHtAbGluayBTZWN0aW9ufSB0aGF0IHJlcHJlc2VudHMgdGhlIHRleHQgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGZvciBhY2tub3dsZWRnZW1lbnQuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHVzZXIgYWNrbm93bGVkZ2VzIChhZ3JlZXMpLlxuICAgKi9cbiAgdmVyaWZ5QWNrbm93bGVkZ2VtZW50KGFja25vd2xlZGdlbWVudEl0ZW06IFNlY3Rpb24pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dcbiAgICAgIC5vcGVuKE10bmFXZkFja25vd2xlZGdlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICBkYXRhOiBuZXcgTXRuYVdmRm9ybUl0ZW1EaWFsb2dEYXRhKGFja25vd2xlZGdlbWVudEl0ZW0uaXRlbXMsIGFja25vd2xlZGdlbWVudEl0ZW0udGl0bGUudmFsdWUgfHwgJ0Fja25vd2xlZGdlbWVudCcpLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBtYXhXaWR0aDogJzUwMHB4JyxcbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKTtcbiAgfVxufVxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUszQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNqSCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBR2pGLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBb0IsTUFBaUI7UUFBakIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyQyx5QkFBb0IsR0FBRyxTQUFTLENBQUEsaUJBQWlCLENBQUM7SUFEVixDQUFDO0lBR3pDOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLG1CQUE0QjtRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUM5QyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLElBQUksRUFBRSxJQUFJLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUMzSCxZQUFZLEVBQUUsS0FBSztZQUNuQixXQUFXLEVBQUUsSUFBSTtZQUNqQixRQUFRLEVBQUUsT0FBTztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHFCQUFxQixDQUFDLG1CQUE0QjtRQUNoRCxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsSUFBSSxDQUFDLGdDQUFnQyxFQUFFO1lBQ3RDLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsSUFBSSxFQUFFLElBQUksd0JBQXdCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQzNILFlBQVksRUFBRSxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUM7YUFDRCxXQUFXLEVBQUUsQ0FBQztJQUNuQixDQUFDOztpSEFqQ1UsbUJBQW1CO3FIQUFuQixtQkFBbUIsY0FETixNQUFNOzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE10bmFXZkFja25vd2xlZGdlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hY2tub3dsZWRnZS1kaWFsb2cvYWNrbm93bGVkZ2UtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdG5hV2ZGb3JtSXRlbURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS1pdGVtLWRpYWxvZy9mb3JtLWl0ZW0tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdG5hV2ZGb3JtSXRlbURpYWxvZ0RhdGEgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1pdGVtLWRpYWxvZy1kYXRhLm1vZGVsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hV2ZEaWFsb2dTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge31cbiAgX2Fja25vd2xlZGdlbWVudFRleHQgPSAkbG9jYWxpemVgQWNrbm93bGVkZ2VtZW50YDtcblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgYWNrbm93bGVkZ2VtZW50IHRoZSB1c2VyIGFncmVlZCB0byBmb3IgYSBnaXZlbiBvcHRpb24uXG4gICAqIEBwYXJhbSBhY2tub3dsZWRnZW1lbnRJdGVtIFRoZSB7QGxpbmsgU2VjdGlvbn0gdGhhdCByZXByZXNlbnRzIHRoZSBhY2tub3dsZWRnZW1lbnQgdGV4dCB0byBkaXNwbGF5IHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgc2hvd0Fja25vd2xlZGdlbWVudChhY2tub3dsZWRnZW1lbnRJdGVtOiBTZWN0aW9uKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihNdG5hV2ZGb3JtSXRlbURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICBkYXRhOiBuZXcgTXRuYVdmRm9ybUl0ZW1EaWFsb2dEYXRhKGFja25vd2xlZGdlbWVudEl0ZW0uaXRlbXMsIGFja25vd2xlZGdlbWVudEl0ZW0udGl0bGUudmFsdWUgfHwgdGhpcy5fYWNrbm93bGVkZ2VtZW50VGV4dCksXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBtYXhXaWR0aDogJzUwMHB4JyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHNvbWUgdGV4dCBpbiBhIGRpYWxvZyB0aGF0IHRoZSB1c2VyIG5lZWRzIHRvIFwiYWNrbm93bGVkZ2VcIiBiZWZvcmUgdGhleSBjYW4gbWFrZSBhIGNlcnRhaW4gc2VsZWN0aW9uLlxuICAgKiBAcGFyYW0gYWNrbm93bGVkZ2VtZW50SXRlbSBUaGUge0BsaW5rIFNlY3Rpb259IHRoYXQgcmVwcmVzZW50cyB0aGUgdGV4dCBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgZm9yIGFja25vd2xlZGdlbWVudC5cbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgdXNlciBhY2tub3dsZWRnZXMgKGFncmVlcykuXG4gICAqL1xuICB2ZXJpZnlBY2tub3dsZWRnZW1lbnQoYWNrbm93bGVkZ2VtZW50SXRlbTogU2VjdGlvbik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ1xuICAgICAgLm9wZW4oTXRuYVdmQWNrbm93bGVkZ2VEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgIGRhdGE6IG5ldyBNdG5hV2ZGb3JtSXRlbURpYWxvZ0RhdGEoYWNrbm93bGVkZ2VtZW50SXRlbS5pdGVtcywgYWNrbm93bGVkZ2VtZW50SXRlbS50aXRsZS52YWx1ZSB8fCB0aGlzLl9hY2tub3dsZWRnZW1lbnRUZXh0KSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgbWF4V2lkdGg6ICc1MDBweCcsXG4gICAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKCk7XG4gIH1cbn1cbiJdfQ==
@@ -3,6 +3,7 @@ import { isType } from '@mtna/core-ts';
3
3
  import { isConditionalItem, isForm, isFormItemGroupImpl, isOptionGroupItemImpl, isOptionItemImpl, isRepeatableItem, isSection, isTableItem, MtnaWfFormItemChange, } from '@mtna/web-form-ts';
4
4
  import { Subject } from 'rxjs';
5
5
  import { take } from 'rxjs/operators';
6
+ import { isProgressiveFormSection } from '../models/progressive-form/progressive-form-section.model';
6
7
  import { findFormControl, MtnaWfSerializer } from '../utilities';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "./api.service";
@@ -15,12 +16,13 @@ import * as i3 from "./ui.service";
15
16
  * @export
16
17
  */
17
18
  export class MtnaWfManagerService {
18
- constructor(apiService, ngFormManager, uiService) {
19
+ constructor(apiService, ngFormService, uiService) {
19
20
  this.apiService = apiService;
20
- this.ngFormManager = ngFormManager;
21
+ this.ngFormService = ngFormService;
21
22
  this.uiService = uiService;
22
23
  this.components = new Map();
23
24
  this.formChange$ = new Subject();
25
+ this.progressiveFormChange$ = new Subject();
24
26
  /** A map of all {@link FormItemValidationResult} keyed on id */
25
27
  this._formItemValidationResults = {};
26
28
  /**
@@ -54,7 +56,7 @@ export class MtnaWfManagerService {
54
56
  let newForm = this._modifyFormItem(this._mtnaForm, change);
55
57
  // modify the conditions of all effected form items
56
58
  newForm = this._modifyFormItemConditions(newForm, change);
57
- this.ngFormManager.removeControl(change.id, change.parentIds);
59
+ this.ngFormService.removeControl(change.id, change.parentIds);
58
60
  this.formChange$.next(newForm);
59
61
  }
60
62
  else {
@@ -64,7 +66,7 @@ export class MtnaWfManagerService {
64
66
  .subscribe((newItem) => {
65
67
  const newFormControl = this.serializeMtnaFormItem(newItem);
66
68
  if (newFormControl && this._mtnaForm) {
67
- this.ngFormManager.addControl(newItem.instanceId, change.parentIds, newFormControl);
69
+ this.ngFormService.addControl(newItem.instanceId, change.parentIds, newFormControl);
68
70
  // Add the new repeatable item into the mtnaform
69
71
  let newForm = this._modifyFormItem(this._mtnaForm, Object.assign(Object.assign({}, change), { id: newItem.instanceId }), newItem);
70
72
  // Generate a list of all formitem conditions needing change & modify those items in the form
@@ -94,6 +96,16 @@ export class MtnaWfManagerService {
94
96
  getFormItemValidationResults() {
95
97
  return this._formItemValidationResults;
96
98
  }
99
+ /**
100
+ * Returns a new MtnaForm using the MtnaForm & reacive form values from the MtnaWfNgFormService's internal form.
101
+ *
102
+ * @param ngFormValues JSON object of ngFormValues
103
+ * @returns
104
+ */
105
+ updateForm(ngFormValues) {
106
+ const currentForm = this.ngFormService.getFormValue();
107
+ return Object.assign(Object.assign({}, currentForm), { items: MtnaWfSerializer.insertFormItemValues(currentForm, ngFormValues, this.uiService.getDisabledStates(), this.dynamicFormConditional, this.dynamicWebFormItemBuilder) });
108
+ }
97
109
  /**
98
110
  * Returns a new MtnaForm using the previous MtnaForm & reactive form values.
99
111
  *
@@ -212,7 +224,7 @@ export class MtnaWfManagerService {
212
224
  return item;
213
225
  }
214
226
  }
215
- if (isForm(item) || isSection(item) || isFormItemGroupImpl(item) || isRepeatableItem(item)) {
227
+ if (isForm(item) || isSection(item) || isProgressiveFormSection(item) || isFormItemGroupImpl(item) || isRepeatableItem(item)) {
216
228
  const items = [...item.items];
217
229
  const indexToModify = item.items.findIndex((i) => i.instanceId === change.parentIds[0]);
218
230
  const itemToModify = item.items[indexToModify];
@@ -446,7 +458,7 @@ export class MtnaWfManagerService {
446
458
  }
447
459
  }
448
460
  // Only revalidate controls actually changes
449
- const form = this.ngFormManager.getForm();
461
+ const form = this.ngFormService.getForm();
450
462
  if (form) {
451
463
  for (const id of controlIdsToRevalidate) {
452
464
  const control = findFormControl(id, form);
@@ -462,4 +474,4 @@ MtnaWfManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0",
462
474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfManagerService, decorators: [{
463
475
  type: Injectable
464
476
  }], ctorParameters: function () { return [{ type: i1.MtnaWfApiService }, { type: i2.MtnaWfNgFormService }, { type: i3.MtnaWfUIService }]; } });
465
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFRTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLG9CQUFvQixHQVVyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBaUJqRTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFrQi9CLFlBQXNCLFVBQTRCLEVBQVksYUFBa0MsRUFBWSxTQUEwQjtRQUFoSCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBakI1SCxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzVDLGdFQUFnRTtRQUN0RCwrQkFBMEIsR0FBNkMsRUFBRSxDQUFDO1FBbUpwRjs7Ozs7OztXQU9HO1FBQ08sMkJBQXNCLEdBQWdDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztJQTdJNkQsQ0FBQztJQVQx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Q0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7U0FDRjtRQUVELDRDQUE0QztRQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxFQUFFO1lBQ1IsS0FBSyxNQUFNLEVBQUUsSUFBSSxzQkFBc0IsRUFBRTtnQkFDdkMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQ2xDO2FBQ0Y7U0FDRjtJQUNILENBQUM7O2tIQXhoQlUsb0JBQW9CO3NIQUFwQixvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHtcbiAgQ29uZGl0aW9uYWxJdGVtLFxuICBDb25kaXRpb25DaGFuZ2UsXG4gIEZvcm0sXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwLFxuICBGb3JtSXRlbUltcGwsXG4gIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdCxcbiAgaXNDb25kaXRpb25hbEl0ZW0sXG4gIGlzRm9ybSxcbiAgaXNGb3JtSXRlbUdyb3VwSW1wbCxcbiAgaXNPcHRpb25Hcm91cEl0ZW1JbXBsLFxuICBpc09wdGlvbkl0ZW1JbXBsLFxuICBpc1JlcGVhdGFibGVJdGVtLFxuICBpc1NlY3Rpb24sXG4gIGlzVGFibGVJdGVtLFxuICBNdG5hV2ZGb3JtSXRlbUNoYW5nZSxcbiAgTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb24sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgT3B0aW9uSXRlbUltcGwsXG4gIFJlcGVhdGFibGVJdGVtLFxuICBTZWN0aW9uLFxuICBUYWJsZUl0ZW0sXG4gIFRhYmxlUm93SXRlbSxcbiAgVmFsdWVJdGVtLFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCYXNlRm9ybUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgZmluZEZvcm1Db250cm9sLCBNdG5hV2ZTZXJpYWxpemVyIH0gZnJvbSAnLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IE10bmFXZkFwaVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IE10bmFXZk5nRm9ybVNlcnZpY2UgfSBmcm9tICcuL25nLWZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBNdG5hV2ZVSVNlcnZpY2UgfSBmcm9tICcuL3VpLnNlcnZpY2UnO1xuXG4vKipcbiAqIHR5cGVzIG9mIEZvcm1JdGVtcyB0aGF0IGNhbiBiZSBwYXNzZWQgaW50byB0aGUgJ21vZGlmeU10bmFGb3JtSXRlbScgbWV0aG9kIHRvIGFkZC9yZW1vdmUgaXRlbXNcbiAqL1xudHlwZSBQYXJlbnRJdGVtVW5pb24gPVxuICB8IEZvcm1cbiAgfCBTZWN0aW9uXG4gIHwgRm9ybUl0ZW1Hcm91cFxuICB8IFJlcGVhdGFibGVJdGVtXG4gIHwgVGFibGVJdGVtXG4gIHwgT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPlxuICB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PjtcblxuLyoqXG4gKiBBbGxvd3MgYSBjYWxsZXIgdG8gKGRlKXNlcmlhbGl6YWUgYW4gTXRuYUZvcm0uIEl0IGNvbnRhaW5zIHRoZSBkZXRlcm1pbmluZyBsb2dpYyBmb3IgcmV0dXJuaW5nIHNwZWNpZmljIGZvcm0gY29udHJvbHNcbiAqIGFuZCBkZXNlcmlhbGl6aW5nIG5ldyBNdG5hRm9ybXMgZnJvbSB0aGUgcmVhY3RpdmUgdmFsdWVzLCBhcyB3ZWxsIGFzIHJlZ2lzdGVyaW5nIGN1c3RvbSBGb3JtIEl0ZW1zICYgZnVuY3Rpb25zLlxuICpcbiAqIEBleHBvcnRcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE10bmFXZk1hbmFnZXJTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGNvbXBvbmVudHMgPSBuZXcgTWFwPHN0cmluZywgVHlwZTxCYXNlRm9ybUl0ZW0+PigpO1xuICBwcm90ZWN0ZWQgZm9ybUNoYW5nZSQgPSBuZXcgU3ViamVjdDxGb3JtPigpO1xuICAvKiogQSBtYXAgb2YgYWxsIHtAbGluayBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHR9IGtleWVkIG9uIGlkICovXG4gIHByb3RlY3RlZCBfZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0czogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiA9IHt9O1xuICAvKiogQ29uZGl0aW9uQ2hhbmdlcyBvbiAnYWRkJyBtdXN0IHdhaXQgdW50aWwgdGhlIGZvcm0gcmVyZW5kZXJzIHRvIHRvZ2dsZSBpdGVtcyAqL1xuICBwcm90ZWN0ZWQgaXRlbVRvZ2dsZVF1ZTogQXJyYXk8Q29uZGl0aW9uQ2hhbmdlPiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfbXRuYUZvcm06IEZvcm0gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIE10bmFGb3JtIGNoYW5nZXMuIFVzZWQgdG8gaW5mb3JtIGEgc3Vic2NyaWJlciB0aGF0IGFuIE10bmFGb3JtIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8TXRuYUZvcm0+IHRvIHdoaWNoIGEgY2FsbGVyIGNhbiBzdWJzY3JpYmVcbiAgICovXG4gIGdldCBmb3JtQ2hhbmdlcygpOiBPYnNlcnZhYmxlPEZvcm0+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhcGlTZXJ2aWNlOiBNdG5hV2ZBcGlTZXJ2aWNlLCBwcm90ZWN0ZWQgbmdGb3JtTWFuYWdlcjogTXRuYVdmTmdGb3JtU2VydmljZSwgcHJvdGVjdGVkIHVpU2VydmljZTogTXRuYVdmVUlTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgYSBGb3JtSXRlbSBmcm9tIHRoZSBmb3JtICYgbW9kaWZpZXMgb3RoZXIgYWZmZWN0ZWQgRm9ybUl0ZW1zXG4gICAqIEBwYXJhbSBjaGFuZ2UgTXRuYVdmRm9ybUl0ZW1DaGFuZ2VcbiAgICovXG4gIGNoYW5nZU10bmFGb3JtSXRlbShjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKSB7XG4gICAgaWYgKCF0aGlzLl9tdG5hRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcmVwZWF0YWJsZSBpdGVtIGZyb20gdGhlIG10bmFmb3JtXG4gICAgICBsZXQgbmV3Rm9ybSA9IHRoaXMuX21vZGlmeUZvcm1JdGVtKHRoaXMuX210bmFGb3JtLCBjaGFuZ2UpIGFzIEZvcm07XG4gICAgICAvLyBtb2RpZnkgdGhlIGNvbmRpdGlvbnMgb2YgYWxsIGVmZmVjdGVkIGZvcm0gaXRlbXNcbiAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgY2hhbmdlKTtcblxuICAgICAgdGhpcy5uZ0Zvcm1NYW5hZ2VyLnJlbW92ZUNvbnRyb2woY2hhbmdlLmlkLCBjaGFuZ2UucGFyZW50SWRzKTtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZSQubmV4dChuZXdGb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAgIC5nZXRSZXBlYXRhYmxlSXRlbSh0aGlzLl9tdG5hRm9ybS5pbnN0YW5jZUlkLCBjaGFuZ2UuaWQpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKG5ld0l0ZW06IEZvcm1JdGVtSW1wbDx1bmtub3duPikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0Zvcm1Db250cm9sID0gdGhpcy5zZXJpYWxpemVNdG5hRm9ybUl0ZW0obmV3SXRlbSk7XG4gICAgICAgICAgaWYgKG5ld0Zvcm1Db250cm9sICYmIHRoaXMuX210bmFGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm5nRm9ybU1hbmFnZXIuYWRkQ29udHJvbChuZXdJdGVtLmluc3RhbmNlSWQsIGNoYW5nZS5wYXJlbnRJZHMsIG5ld0Zvcm1Db250cm9sKTtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHJlcGVhdGFibGUgaXRlbSBpbnRvIHRoZSBtdG5hZm9ybVxuICAgICAgICAgICAgbGV0IG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbSh0aGlzLl9tdG5hRm9ybSwgeyAuLi5jaGFuZ2UsIGlkOiBuZXdJdGVtLmluc3RhbmNlSWQgfSwgbmV3SXRlbSkgYXMgRm9ybTtcblxuICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBsaXN0IG9mIGFsbCBmb3JtaXRlbSBjb25kaXRpb25zIG5lZWRpbmcgY2hhbmdlICYgbW9kaWZ5IHRob3NlIGl0ZW1zIGluIHRoZSBmb3JtXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25DaGFuZ2VzID0gdGhpcy5nZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KG5ld0l0ZW0sICdBREQnKTtcbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgeyAuLi5jaGFuZ2UsIGNvbmRpdGlvbkNoYW5nZXMgfSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1Ub2dnbGVRdWUgPSBjb25kaXRpb25DaGFuZ2VzO1xuICAgICAgICAgICAgLy8gZW1pdCB0aGUgbmV3IG10bmFmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm1DaGFuZ2UkLm5leHQobmV3Rm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIENvbmRpdGlvbkNoYW5nZSBhcnJheSBmb3IgaXRlbXMgZXhpc3RpbmcgaW4gdGhlIDxpdGVtPiB3aGljaCBlbmFibGUvZGlzYWJsZSBGb3JtSXRlbXMgb3V0c2lkZSB0aGUgPGl0ZW0+J3Mgc2NvcGUuXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgZWZmZWN0cyB0aGUgY29uZGl0aW9uIG9mIG90aGVyIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gYWN0aW9uIFdoZXRoZXIgdGhpcyBpdGVtIHdhcyBhZGRlZCAoQUREKSwgb3IgcmVtb3ZlZCAoUkVNT1ZFKVxuICAgKiBAcmV0dXJucyBBcnJheTxDb25kaXRpb25DaGFuZ2U+XG4gICAqL1xuICBnZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KGl0ZW06IEZvcm1JdGVtLCBhY3Rpb24/OiBNdG5hV2ZGb3JtSXRlbUNoYW5nZUFjdGlvbik6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4ge1xuICAgIGNvbnN0IGludGVybmFsTWFwID0ge307XG4gICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChpdGVtLCBpbnRlcm5hbE1hcCk7XG4gICAgY29uc3QgY29uZGl0aW9uQ2hhbmdlcyA9IG5ldyBBcnJheTxDb25kaXRpb25DaGFuZ2U+KCk7XG4gICAgdGhpcy5fYnVpbGRDb25kaXRpb25DaGFuZ2VBcnJheShpdGVtLCBjb25kaXRpb25DaGFuZ2VzLCBpbnRlcm5hbE1hcCwgYWN0aW9uKTtcbiAgICByZXR1cm4gY29uZGl0aW9uQ2hhbmdlcztcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgdG9wIGxldmVsIHZhbGlkYXRpb24gcmVzdWx0cyAodXN1YWxseSB0aGUgZXJyb3JzKSwga2V5ZWQgb24gSUQuICovXG4gIGdldEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMoKTogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgcHJldmlvdXMgTXRuYUZvcm0gJiByZWFjdGl2ZSBmb3JtIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIG10bmFGb3JtIE10bmFGb3JtIHJlcXVpcmluZyB2YWx1ZSBpbnNlcnRpb25cbiAgICogQHBhcmFtIG5nRm9ybVZhbHVlcyBKU09OIG9iamVjdCBvZiAgbmdGb3JtIHZhbHVlc1xuICAgKiBAcmV0dXJucyBuZXcgTXRuYUZvcm1cbiAgICovXG4gIGluc2VydE5ld1ZhbHVlcyhtdG5hRm9ybTogRm9ybSwgbmdGb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tdG5hRm9ybSxcbiAgICAgIGl0ZW1zOiBNdG5hV2ZTZXJpYWxpemVyLmluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgICBtdG5hRm9ybSxcbiAgICAgICAgbmdGb3JtVmFsdWVzLFxuICAgICAgICB0aGlzLnVpU2VydmljZS5nZXREaXNhYmxlZFN0YXRlcygpLFxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtQ29uZGl0aW9uYWwsXG4gICAgICAgIHRoaXMuZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlclxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBGb3JtIHwgRm9ybUl0ZW0gaW50byBGb3JtQ29udHJvbChzKVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBGb3JtIHwgRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAgICogQHJldHVybnMgRm9ybUdyb3VwIHwgRm9ybUNvbnRyb2xcbiAgICovXG4gIHNlcmlhbGl6ZU10bmFGb3JtSXRlbShpdGVtOiBGb3JtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+KTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIE10bmFXZlNlcmlhbGl6ZXIuZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgIGl0ZW0sXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5keW5hbWljRm9ybUNvbmRpdGlvbmFsLFxuICAgICAgdGhpcy5keW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXJcbiAgICApO1xuICB9XG5cbiAgLy8jcmVnaW9uIEN1c3RvbSBDb21wb25lbnQvRnVuY3Rpb24gUmVnaXN0cmF0aW9uXG4gIGdldER5bmFtaWNDb21wb25lbnQoaWQ6IHN0cmluZyk6IFR5cGU8QmFzZUZvcm1JdGVtPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cy5nZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIG1hcCBvZiBjb21wb25lbnRzIHRvIGJlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGluc2lkZSBhbiBNdG5hRm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudHMgdGhlIG1hcCBvZiBjb21wb25lbnRzIHRoYXQgYSBWYWx1ZUl0ZW0gd2lsbCB1c2UgZm9yIHJlbmRlcmluZ1xuICAgKiBAcHJvcCBzdHJpbmcgLSB0aGUgdHlwZShpdGVtSWQgc3VmZml4KSBvZiBjb21wb25lbnQsIHVzZWQgZm9yIHJldHJpZXZhbFxuICAgKiBAcHJvcCBUeXBlIC0gdGhlIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCwgYW4gZXh0ZW5zaW9uIG9mIEJhc2VGb3JtSXRlbVxuICAgKi9cbiAgcmVnaXN0ZXJEeW5hbWljQ29tcG9uZW50cyhjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBUeXBlPEJhc2VGb3JtSXRlbT4+KSB7XG4gICAgdGhpcy5jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIE10bmFGb3JtIG9uIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIGJlIHVzZWQgZm9yIGludGVybmFsIG1vZGlmaWNhdGlvblxuICAgKi9cbiAgc2V0TXRuYUZvcm0oZm9ybTogRm9ybSkge1xuICAgIHRoaXMuX210bmFGb3JtID0geyAuLi5mb3JtIH07XG4gICAgaWYgKCEhdGhpcy5pdGVtVG9nZ2xlUXVlICYmICEhdGhpcy5pdGVtVG9nZ2xlUXVlLmxlbmd0aCkge1xuICAgICAgLy8gVGhlIGZvcm0gbmVlZHMgdGltZSB0byByZXJlbmRlciwgc28gd2UgcHVzaCB0aGlzIGxvb3AgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgdGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2hhbmdlLmVuYWJsZWRJdGVtcywgY2hhbmdlLmRpc2FibGVkSXRlbXMsICEhY2hhbmdlLmVuYWJsZSwgY2hhbmdlLmVuYWJsZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZVF1ZSA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBlcnJvcnMgY29taW5nIGZyb20gdGhlIHNlcnZlciBhbmQgcmV2YWxpZGF0ZSB0aG9zZSBjb250cm9sc1xuICAgIHRoaXMuX3VwZGF0ZVNlcnZlclNpZGVFcnJvcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgRm9ybVNlcnZpY2UgZXh0ZW5zaW9uIGNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBjYWxsIHRoZVxuICAgKiBkeW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyL2R5bmFtaWNSZWFjdGl2ZUZvcm1Db250cm9sQnVpbGRlciBtZXRob2RzLiBEdXJpbmcgd2ViIGZvcm0gZ2VuZXJhdGlvbiwgdGhpcyBtZXRob2QgaXMgY2hlY2tlZCAmXG4gICAqIHRoZSBjdXJyZW50IEZvcm1JdGVtIGlzIHBhc3NlZCBpbiwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIG92ZXJyaWRpbmcgbWV0aG9kLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljRm9ybUNvbmRpdGlvbmFsID0gKGl0ZW06IEZvcm1JdGVtKSA9PiBpdGVtLml0ZW1JZC5pbmNsdWRlcyh7c29tZSBpdGVtSWR9KVxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIGR5bmFtaWNGb3JtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIGZvcm0gZ2VuZXJhdGlvbiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIGEgbmV3IFZhbHVlSXRlbTxhbnk+LlxuICAgKiBTdGVwIDNcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihzZWN0aW9uOiBTZWN0aW9uIHwgRm9ybSwgaXRlbTogRm9ybUl0ZW0sIG5nRm9ybVZhbHVlOiBhbnkpOiBWYWx1ZUl0ZW0ge1xuICAgKiBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2VuZXJhdGVOZXdWYWx1ZShpdGVtLCByZlZhbHVlLCBzZWN0aW9uKTtcbiAgICogcmV0dXJuIHsgLi4uaXRlbSwgLi4ubmV3VmFsdWUgfVxuICAgKiB9XG4gICAqIEBwYXJhbSBzZWN0aW9uIHRoZSBjdXJyZW50IEZvcm1TZWN0aW9uXG4gICAqIEBwYXJhbSBpdGVtIHRoZSBjdXJyZW50IEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSB0aGUgbmdGb3JtIEpTT04gdmFsdWVcbiAgICogQHJldHVybnMgYSBuZXcgVmFsdWVJdGVtXG4gICAqL1xuICBwcm90ZWN0ZWQgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiAgICBzZWN0aW9uOiBGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU/OiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuICApOiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIHJlYWN0aXZlIGZvcm0gZ2VuZXJhdGlvblxuICAgKiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXIoaXRlbTogRm9ybUl0ZW0pIHtcbiAgICogcmV0dXJuIHRoaXMuYnVpbGRGb3JtQ29udHJvbEZvckR5bmFtaWNDb21wb25lbnQoaXRlbTogRm9ybUl0ZW0pO1xuICAgKiB9XG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHVzZWQgdG8gZ2VuZXJhdGUgZm9ybSBjb250cm9sc1xuICAgKiBAcmV0dXJucyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgZHluYW1pY1JlYWN0aXZlRm9ybUNvbnRyb2xCdWlsZGVyKGl0ZW06IEZvcm1JdGVtKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSU5URVJOQUwgTUVUSE9EU1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgRm9ybSB0byBpbnNlcnQgb3IgcmVtb3ZlIGEgZGVzaWduYXRlZCBGb3JtSXRlbS5cbiAgICogQHBhcmFtIGl0ZW0gTXRuYUZvcm0gdG8gc2VhcmNoIHRocm91Z2hcbiAgICogQHBhcmFtIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UgZm9yIGFkZGluZyBvciByZW1vdmluZyBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZXdJdGVtIEZvcm1JdGVtIHRvIGFkZCB0byBpdHMgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX21vZGlmeUZvcm1JdGVtPEkgZXh0ZW5kcyBGb3JtIHwgU2VjdGlvbiB8IEZvcm1JdGVtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+PihcbiAgICBpdGVtOiBJLFxuICAgIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gICAgbmV3SXRlbT86IEZvcm1JdGVtXG4gICk6IEZvcm0gfCBTZWN0aW9uIHwgRm9ybUl0ZW0gfCBGb3JtSXRlbUltcGw8dW5rbm93bj4ge1xuICAgIGlmICghY2hhbmdlLnBhcmVudElkcy5sZW5ndGgpIHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHJlYWNoIHRoZSBQYXJlbnQgRm9ybUl0ZW1cbiAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFUExBQ0UnKSB7XG4gICAgICAgIGlmICgnaXRlbXMnIGluIGl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IG5ld0l0ZW0/Lmluc3RhbmNlSWQpO1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgICAgIGlmIChuZXdJdGVtKSB7XG4gICAgICAgICAgICBuZXdJdGVtcy5zcGxpY2UoaW5kZXgsIDEsIG5ld0l0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBpdGVtczogbmV3SXRlbXMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgaXRlbXM6IGNoYW5nZS5hY3Rpb25UeXBlID09PSAnQUREJyA/IGl0ZW0uaXRlbXMuY29uY2F0KG5ld0l0ZW0gfHwgW10pIDogaXRlbS5pdGVtcy5maWx0ZXIoKGkpID0+IGkuaW5zdGFuY2VJZCAhPT0gY2hhbmdlLmlkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0Zvcm0oaXRlbSkgfHwgaXNTZWN0aW9uKGl0ZW0pIHx8IGlzRm9ybUl0ZW1Hcm91cEltcGwoaXRlbSkgfHwgaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgY29uc3QgaXRlbXMgPSBbLi4uaXRlbS5pdGVtc107XG4gICAgICBjb25zdCBpbmRleFRvTW9kaWZ5ID0gaXRlbS5pdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSk7XG4gICAgICBjb25zdCBpdGVtVG9Nb2RpZnkgPSBpdGVtLml0ZW1zW2luZGV4VG9Nb2RpZnldIGFzIFBhcmVudEl0ZW1VbmlvbjtcblxuICAgICAgaXRlbXMuc3BsaWNlKFxuICAgICAgICBpbmRleFRvTW9kaWZ5LFxuICAgICAgICAxLFxuICAgICAgICB0aGlzLl9tb2RpZnlGb3JtSXRlbShpdGVtVG9Nb2RpZnksIHsgLi4uY2hhbmdlLCBwYXJlbnRJZHM6IGNoYW5nZS5wYXJlbnRJZHMuc2xpY2UoMSkgfSwgbmV3SXRlbSkgYXMgRm9ybUl0ZW1cbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBpdGVtcyxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc1RhYmxlSXRlbShpdGVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGlmeVRhYmxlSXRlbShpdGVtIGFzIFRhYmxlSXRlbSwgY2hhbmdlLCBuZXdJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGlzT3B0aW9uSXRlbUltcGwoaXRlbSkgfHwgaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kaWZ5T3B0aW9uSXRlbShcbiAgICAgICAgaXRlbSBhcyBPcHRpb25JdGVtSW1wbDxPcHRpb248dW5rbm93bj4sIHVua25vd24+IHwgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIG5ld0l0ZW1cbiAgICAgIClbMF07XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyBhbiBPcHRpb25JdGVtTWFwIG9mIGEgRm9ybUl0ZW0gdG8gaW5zZXJ0IG9yIHJlbW92ZSBhIGRlc2lnbmF0ZWQgRm9ybUl0ZW1cbiAgICogQHBhcmFtIG9wdGlvbkl0ZW0gRm9ybUl0ZW0gd2l0aCBhbiBvcHRpb25JdGVtTWFwLCBlLmcuIE9wdGlvbkl0ZW1JbXBsIHwgT3B0aW9uR3JvdXBJdGVtSW1wbFxuICAgKiBAcGFyYW0gY2hhbmdlIE10bmFXZkZvcm1JdGVtQ2hhbmdlIGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gbmV3SXRlbSBGb3JtSXRlbSB0byBiZSBhZGRlZCB0byBpdHMgcGFyZW50XG4gICAqIEByZXR1cm5zIEZvcm1JdGVtIHdpdGggYW4gb3B0aW9uSXRlbU1hcCBjb250YWluaW5nIEZvcm1JdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBfbW9kaWZ5T3B0aW9uSXRlbShcbiAgICBvcHRpb25JdGVtOiBPcHRpb25JdGVtSW1wbDxPcHRpb248dW5rbm93bj4sIHVua25vd24+IHwgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICAgIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gICAgbmV3SXRlbT86IEZvcm1JdGVtXG4gICk6IFtPcHRpb25JdGVtSW1wbDxPcHRpb248dW5rbm93bj4sIHVua25vd24+IHwgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LCBib29sZWFuXSB7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgY29uc3Qgb3B0aW9uSXRlbU1hcDogeyBbaWQ6IHN0cmluZ106IEZvcm1JdGVtIH0gPSB7fTtcbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIG1hcCBhbmQgc2V0IHRoZSBpdGVtcyB0byBhIG5ldyBtYXBcbiAgICAvLyBDaGVjayBpZiBhbnkgRm9ybUl0ZW0gaW4gdGhlIG1hcCBtYXRjaGVzIHRoZSBuZXh0IHBhcmVudCBJRFxuICAgIGZvciAoY29uc3QgaWQgaW4gb3B0aW9uSXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcCwgaWQpKSB7XG4gICAgICAgIC8vIElmIG9uZSBtYXRjaGVzLCBtb2RpZnkgJiBzZXQgaXQgb24gdGhlIG5ldyBtYXBcbiAgICAgICAgaWYgKG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0uaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSkge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBvcHRpb25JdGVtTWFwW2lkXSA9IHRoaXMuX21vZGlmeUZvcm1JdGVtKFxuICAgICAgICAgICAgb3B0aW9uSXRlbS5vcHRpb25JdGVtTWFwW2lkXSBhcyBQYXJlbnRJdGVtVW5pb24sXG4gICAgICAgICAgICB7IC4uLmNoYW5nZSwgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpIH0sXG4gICAgICAgICAgICBuZXdJdGVtXG4gICAgICAgICAgKSBhcyBGb3JtSXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25JdGVtTWFwW2lkXSA9IG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcFtpZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcmV0dXJuIHRoZSBpdGVtIHdpdGggaXRzIG5ldyBvcHRpb25JdGVtTWFwLCAmIHdoZXRoZXIgd2UgZm91bmQgdGhlIG1hdGNoaW5nIGl0ZW1cbiAgICByZXR1cm4gW3sgLi4ub3B0aW9uSXRlbSwgb3B0aW9uSXRlbU1hcCB9LCBmb3VuZF07XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2VzIHRhYmxlIHJvd3MgdG8gaW5zZXJ0IG9yIHJlbW92ZSBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSB0YWJsZUl0ZW0gVGFibGVJdGVtIHRvIHRyYXZlcnNlXG4gICAqIEBwYXJhbSBjaGFuZ2UgTXRuYVdmRm9ybUl0ZW1DaGFuZ2UgZm9yIGFkZGluZyBvciByZW1vdmluZyBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZXdJdGVtIEZvcm1JdGVtIHRvIGJlIGFkZGVkIHRvIGl0cyBwYXJlbnRcbiAgICogQHJldHVybnMgVGFibGVJdGVtIHdpdGggYSBGb3JtSXRlbSBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9tb2RpZnlUYWJsZUl0ZW0odGFibGVJdGVtOiBUYWJsZUl0ZW0sIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsIG5ld0l0ZW0/OiBGb3JtSXRlbSk6IFRhYmxlSXRlbSB7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgLy8gTWFwIHRoZSB0YWJsZSByb3dzIHRvIGZpbmQgdGhlIEZvcm1JdGVtIHdpdGggbWF0Y2hpbmcgaW5zdGFuY2VJZFxuICAgIGNvbnN0IHRhYmxlUm93czogVGFibGVSb3dJdGVtW10gPSB0YWJsZUl0ZW0udGFibGVSb3dzLm1hcCgocm93OiBUYWJsZVJvd0l0ZW0pID0+IHtcbiAgICAgIC8vIElmIHRoZSBpdGVtIHdhcyBmb3VuZCwgc2tpcCBtYXBwaW5nIGZ1cnRoZXIgcm93c1xuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJvdyxcbiAgICAgICAgICBpdGVtczogcm93Lml0ZW1zLm1hcCgocm93SXRlbTogRm9ybUl0ZW0pID0+IHtcbiAgICAgICAgICAgIC8vIElmIHdlIGZvdW5kIHRoZSBuZXh0IG1hdGNoaW5nIEZvcm1JdGVtLCB0b2dnbGUgJ2ZvdW5kJywgYW5kIHJldHVybiB0aGUgbW9kaWZpZWQgRm9ybUl0ZW1cbiAgICAgICAgICAgIGlmICghIXJvd0l0ZW0gJiYgcm93SXRlbS5pbnN0YW5jZUlkID09PSBjaGFuZ2UucGFyZW50SWRzWzBdKSB7XG4gICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vZGlmeUZvcm1JdGVtKFxuICAgICAgICAgICAgICAgIHJvd0l0ZW0gYXMgUGFyZW50SXRlbVVuaW9uLFxuICAgICAgICAgICAgICAgIHsgLi4uY2hhbmdlLCBwYXJlbnRJZHM6IGNoYW5nZS5wYXJlbnRJZHMuc2xpY2UoMSkgfSxcbiAgICAgICAgICAgICAgICBuZXdJdGVtXG4gICAgICAgICAgICAgICkgYXMgRm9ybUl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGUgRm9ybUl0ZW0gaW5zdGFuY2VJZCBkb2Vzbid0IG1hdGNoLCBidXQgaXQgaGFzIEZvcm1JdGVtcyBpbiBpdHMgJ29wdGlvbkl0ZW1NYXAnLFxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiBhIG1hdGNoaW5nIEZvcm1JdGVtIGV4aXN0cyBpbiBpdHMgbWFwXG4gICAgICAgICAgICBpZiAoJ29wdGlvbkl0ZW1NYXAnIGluIHJvd0l0ZW0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV0dXJuZWQgPSB0aGlzLl9tb2RpZnlPcHRpb25JdGVtKFxuICAgICAgICAgICAgICAgIHJvd0l0ZW0gYXMgT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgICAgICAgICAgICBjaGFuZ2UsXG4gICAgICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmb3VuZCA9IHJldHVybmVkWzFdO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuZWRbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcm93SXRlbTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByb3c7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgLi4udGFibGVJdGVtLCB0YWJsZVJvd3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgaW5zdGFuY2VJZHMgZnJvbSB0aGUgJ2l0ZW1JZHMnIGluIGEgRm9ybUl0ZW0ncyBjb25kaXRpb25cbiAgICogQHBhcmFtIGZvcm0gTXRuYUZvcm0gdG8gc2VhcmNoIHRocm91Z2ggJiByZXBsYWNlIGZvcm1pdGVtcyB3aXRoIHRoZSBuZXcgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBjaGFuZ2UgVGhlIGNoYW5nZSB0aGF0IHJlY2VudGx5IG9jY3VycmVkIGluIHRoZSBtdG5hRm9ybVxuICAgKi9cbiAgcHJpdmF0ZSBfbW9kaWZ5Rm9ybUl0ZW1Db25kaXRpb25zKGZvcm06IEZvcm0sIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UpOiBGb3JtIHtcbiAgICBsZXQgbmV3Rm9ybSA9IGZvcm07XG4gICAgaWYgKGNoYW5nZS5jb25kaXRpb25DaGFuZ2VzKSB7XG4gICAgICBjb25zdCBmb3JtSXRlbXM6IHsgW2tleTogc3RyaW5nXTogRm9ybUl0ZW0gfCBDb25kaXRpb25hbEl0ZW0gfSA9IHt9O1xuICAgICAgZm9yIChjb25zdCBjYyBvZiBjaGFuZ2UuY29uZGl0aW9uQ2hhbmdlcykge1xuICAgICAgICBmb3IgKGNvbnN0IHRvZ2dsZWRJZCBvZiBbLi4uY2MuZW5hYmxlZEl0ZW1zLCAuLi5jYy5kaXNhYmxlZEl0ZW1zXSkge1xuICAgICAgICAgIGxldCBmb3JtSXRlbSA9IGZvcm1JdGVtc1t0b2dnbGVkSWRdO1xuICAgICAgICAgIGNvbnN0IGZvcm1JdGVtQ29tcG9uZW50ID0gdGhpcy51aVNlcnZpY2UuZ2V0SXRlbSh0b2dnbGVkSWQpO1xuICAgICAgICAgIGlmICghZm9ybUl0ZW0gJiYgZm9ybUl0ZW1Db21wb25lbnQ/Lml0ZW0pIHtcbiAgICAgICAgICAgIGZvcm1JdGVtID0gZm9ybUl0ZW1Db21wb25lbnQ/Lml0ZW07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0NvbmRpdGlvbmFsSXRlbShmb3JtSXRlbSkgJiYgZm9ybUl0ZW0uY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQ29uZGl0aW9uSXRlbUlkcyA9IGZvcm1JdGVtLmNvbmRpdGlvbi5pdGVtSWRzIHx8IFtdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUlkcyA9XG4gICAgICAgICAgICAgIGNoYW5nZS5hY3Rpb25UeXBlID09PSAnQUREJ1xuICAgICAgICAgICAgICAgID8gWy4uLml0ZW1Db25kaXRpb25JdGVtSWRzLCBjYy5lbmFibGVySWRdXG4gICAgICAgICAgICAgICAgOiBpdGVtQ29uZGl0aW9uSXRlbUlkcy5maWx0ZXIoKGkpID0+IGkgIT09IGNjLmVuYWJsZXJJZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW06IENvbmRpdGlvbmFsSXRlbSA9IHsgLi4uZm9ybUl0ZW0sIGNvbmRpdGlvbjogeyAuLi5mb3JtSXRlbS5jb25kaXRpb24sIGl0ZW1JZHMgfSB9O1xuICAgICAgICAgICAgY29uc3QgbmV3Q2hhbmdlID0gbmV3IE10bmFXZkZvcm1JdGVtQ2hhbmdlKG5ld0l0ZW0uaW5zdGFuY2VJZCwgZm9ybUl0ZW1Db21wb25lbnQ/LnBhcmVudElkcyB8fCBbXSwgJ1JFUExBQ0UnKTtcblxuICAgICAgICAgICAgbmV3Rm9ybSA9IHRoaXMuX21vZGlmeUZvcm1JdGVtKG5ld0Zvcm0sIG5ld0NoYW5nZSwgbmV3SXRlbSBhcyBGb3JtSXRlbSAmIENvbmRpdGlvbmFsSXRlbSkgYXMgRm9ybTtcbiAgICAgICAgICAgIGZvcm1JdGVtc1t0b2dnbGVkSWRdID0gbmV3SXRlbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZS5hY3Rpb25UeXBlID09PSAnUkVNT1ZFJykge1xuICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLnRvZ2dsZUZvcm1JdGVtcyhjYy5lbmFibGVkSXRlbXMsIGNjLmRpc2FibGVkSXRlbXMsICEhY2MuZW5hYmxlLCBjYy5lbmFibGVySWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIG1hcCBvZiBhbGwgaW5zdGFuY2VJZHMgaW5zaWRlIGFuIGl0ZW0uIENoZWNrcyAnaXRlbXMnICYgJ29wdGlvbkl0ZW1NYXAnXG4gICAqIEBwYXJhbSBpdGVtIEl0ZW0gdG8gcmVjdXJzZVxuICAgKiBAcGFyYW0gaWRNYXAgbWFwIG9mIHRoZSBpdGVtJ3MgaW50ZXJuYWwgaW5zdGFuY2VJZHNcbiAgICovXG4gIHByaXZhdGUgX2J1aWxkSW50ZXJuYWxJZHNNYXAoaXRlbTogRm9ybUl0ZW0sIGlkTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikge1xuICAgIGlkTWFwW2l0ZW0uaW5zdGFuY2VJZF0gPSB0cnVlO1xuICAgIGlmIChpc1R5cGU8eyBpdGVtczogRm9ybUl0ZW1bXSB9PihpdGVtLCAnaXRlbXMnKSkge1xuICAgICAgY29uc3QgaXRlbXM6IEZvcm1JdGVtW10gPSBpdGVtLml0ZW1zO1xuICAgICAgZm9yIChjb25zdCBzdWJJdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIHRoaXMuX2J1aWxkSW50ZXJuYWxJZHNNYXAoc3ViSXRlbSwgaWRNYXApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNUeXBlPHsgb3B0aW9uSXRlbU1hcDogeyBbaWQ6IHN0cmluZ106IEZvcm1JdGVtIH0gfT4oaXRlbSwgJ29wdGlvbkl0ZW1NYXAnKSkge1xuICAgICAgY29uc3QgbWFwOiB7IFtpZDogc3RyaW5nXTogRm9ybUl0ZW0gfSA9IGl0ZW0ub3B0aW9uSXRlbU1hcDtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gbWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBpZCkpIHtcbiAgICAgICAgICB0aGlzLl9idWlsZEludGVybmFsSWRzTWFwKG1hcFtpZF0sIGlkTWFwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYW4gYXJyYXkgb2YgQ29uZGl0aW9uQ2hhbmdlcyB0byBiZSBpbXBsZW1lbnRlZCBpbiBhbiBNdG5hRm9ybS5cbiAgICogQHBhcmFtIGl0ZW0gRm9ybUl0ZW0gdGhhdCB3YXMgYWRkZWQvcmVtb3ZlZCwgd2hpY2ggYWZmZWN0cyBjb25kaXRpb25zIG9mIG90aGVyIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gY2hhbmdlcyBBcnJheSB0byBidWlsZCB1cFxuICAgKiBAcGFyYW0gaW50ZXJuYWxJZE1hcCBNYXAgb2YgYWxsIGluc3RhbmNlSWRzIGxvY2F0ZWQgaW4gdGhlIGl0ZW07IGluIG9yZGVyIHRvIGV4Y2x1ZGUgdGhlbSBmcm9tIHRoZSBjb25kaXRpb24gY2hhbmdlc1xuICAgKiBAcGFyYW0gYWN0aW9uIFdoZXRoZXIgdGhlIGl0ZW0gd2FzIGFkZGVkIG9yIHJlbW92ZWRcbiAgICovXG4gIHByaXZhdGUgX2J1aWxkQ29uZGl0aW9uQ2hhbmdlQXJyYXkoXG4gICAgaXRlbTogRm9ybUl0ZW0sXG4gICAgY2hhbmdlczogQXJyYXk8Q29uZGl0aW9uQ2hhbmdlPixcbiAgICBpbnRlcm5hbElkTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcbiAgICBhY3Rpb24/OiBNdG5hV2ZGb3JtSXRlbUNoYW5nZUFjdGlvblxuICApIHtcbiAgICBpZiAoaXNPcHRpb25JdGVtSW1wbChpdGVtKSkge1xuICAgICAgY29uc3QgZW5hYmxlID0gISFhY3Rpb24gJiYgYWN0aW9uID09PSAnQUREJyA/IGl0ZW0ub3B0aW9uLnNlbGVjdGVkIHx8IGl0ZW0udmFsdWUgPT09IGl0ZW0ub3B0aW9uLm9wdGlvbi5pZCA6IGZhbHNlO1xuICAgICAgdGhpcy5fcHVzaENvbmRpdGlvblRvQXJyYXkoaXRlbS5pbnN0YW5jZUlkLCBpdGVtLm9wdGlvbi5lbmFibGVkSXRlbXMsIGl0ZW0ub3B0aW9uLmRpc2FibGVkSXRlbXMsIGNoYW5nZXMsIGludGVybmFsSWRNYXAsIGVuYWJsZSk7XG4gICAgICB0aGlzLl9idWlsZEFycmF5RnJvbU9wdGlvbkl0ZW1NYXAoaXRlbSwgY2hhbmdlcywgaW50ZXJuYWxJZE1hcCk7XG4gICAgfSBlbHNlIGlmIChpc09wdGlvbkdyb3VwSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGl0ZW0ub3B0aW9ucykge1xuICAgICAgICBjb25zdCBlbmFibGUgPVxuICAgICAgICAgICEhYWN0aW9uICYmIGFjdGlvbiA9PT0gJ0FERCcgPyBvcHRpb24uc2VsZWN0ZWQgfHwgKCEhaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLnNvbWUoKHYpID0+IHYgPT09IG9wdGlvbi5vcHRpb24uaWQpKSA6IGZhbHNlO1xuICAgICAgICB0aGlzLl9wdXNoQ29uZGl0aW9uVG9BcnJheShpdGVtLmluc3RhbmNlSWQsIG9wdGlvbi5lbmFibGVkSXRlbXMsIG9wdGlvbi5kaXNhYmxlZEl0ZW1zLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBlbmFibGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYnVpbGRBcnJheUZyb21PcHRpb25JdGVtTWFwKGl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXAsIGFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChpc1R5cGU8eyBpdGVtczogRm9ybUl0ZW1bXSB9PihpdGVtLCAnaXRlbXMnKSkge1xuICAgICAgY29uc3QgaXRlbXM6IEZvcm1JdGVtW10gPSBpdGVtLml0ZW1zO1xuICAgICAgZm9yIChjb25zdCBzdWJJdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIHRoaXMuX2J1aWxkQ29uZGl0aW9uQ2hhbmdlQXJyYXkoc3ViSXRlbSwgY2hhbmdlcywgaW50ZXJuYWxJZE1hcCwgYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuIGFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgZnJvbSBhbiBpdGVtJ3Mgb3B0aW9uSXRlbU1hcFxuICAgKiBAcGFyYW0gaXRlbSBGb3JtSXRlbSB3aXRoIGFuIG9wdGlvbkl0ZW1NYXBcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgQXJyYXkgb2YgQ29uZGl0aW9uQ2hhbmdlcyB0byBwdXNoIG9uIG5ldyBjaGFuZ2VzXG4gICAqIEBwYXJhbSBpdGVtTWFwIG1hcCBvZiBpbnN0YW5jZUlkcyBleGlzaXRpbmcgaW4gYW4gaXRlbTsgaW4gb3JkZXIgdG8gZXhjbHVkZSB0aGVtIGZyb20gdGhlIGNoYW5nZXNcbiAgICogQHBhcmFtIGFjdGlvbiBXaGV0aGVyIGFuIGl0ZW0gd2FzIGFkZGVkIG9yIHJlbW92ZWRcbiAgICovXG4gIHByaXZhdGUgX2J1aWxkQXJyYXlGcm9tT3B0aW9uSXRlbU1hcChcbiAgICBpdGVtOiBPcHRpb25JdGVtSW1wbDxPcHRpb248dW5rbm93bj4sIHVua25vd24+IHwgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICAgIGNvbmRpdGlvbnM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaXRlbU1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgYWN0aW9uPzogTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb25cbiAgKSB7XG4gICAgaWYgKGl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgICAgZm9yIChjb25zdCBpZCBpbiBpdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBpdGVtLm9wdGlvbkl0ZW1NYXBbaWRdO1xuICAgICAgICAgIHRoaXMuX2J1aWxkQ29uZGl0aW9uQ2hhbmdlQXJyYXkoc3ViSXRlbSwgY29uZGl0aW9ucywgaXRlbU1hcCwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdXNoZXMgYSBuZXcgQ29uZGl0aW9uQ2hhbmdlIG9udG8gdGhlIGNvbmRpdGlvbnMgYXJyYXkuIElmIGEgQ29uZGl0aW9uQ2hhbmdlIHdpdGggbWF0Y2hpbmcgaWQgZXhpc3RzLFxuICAgKiBpdCBtZXJnZXMgdGhlIG5ldyB2YWx1ZXMgaW50byBpdFxuICAgKiBAcGFyYW0gZW5hYmxlcklkIGluc3RhbmNlSWQgb2YgdGhlIGl0ZW0gdGhhdCBlbmFibGVzIG90aGVyIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gZW5hYmxlZCB0aGUgaXRlbSdzICdlbmFibGVkSXRlbXMnIGFycmF5XG4gICAqIEBwYXJhbSBkaXNhYmxlZCB0aGUgaXRlbSdzICdkaXNhYmxlZEl0ZW1zJyBhcnJheVxuICAgKiBAcGFyYW0gY29uZGl0aW9ucyBBcnJheSBvZiBDb25kaXRpb25DaGFuZ2VzIHRvIGJ1aWxkIHVwXG4gICAqIEBwYXJhbSBpdGVtTWFwIG1hcCBvZiBpbnN0YW5jZUlkcyBpbnNpZGUgYW4gaXRlbTsgdG8gZW5zdXJlIG5vIGludGVybmFsIGlkcyBhcmUgaW5jbHVkZWQgaW4gYSBjaGFuZ2VcbiAgICogQHBhcmFtIGVuYWJsZSBXaGV0aGVyIHRoZSAnZW5hYmxlZEl0ZW1zJyBzaG91bGQgdG9nZ2xlZCBlbmFibGVkXG4gICAqL1xuICBwcml2YXRlIF9wdXNoQ29uZGl0aW9uVG9BcnJheShcbiAgICBlbmFibGVySWQ6IHN0cmluZyxcbiAgICBlbmFibGVkOiBzdHJpbmdbXSxcbiAgICBkaXNhYmxlZDogc3RyaW5nW10sXG4gICAgY29uZGl0aW9uczogQXJyYXk8Q29uZGl0aW9uQ2hhbmdlPixcbiAgICBpdGVtTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcbiAgICBlbmFibGU6IGJvb2xlYW5cbiAgKSB7XG4gICAgY29uc3QgZW5hYmxlZEl0ZW1zID0gZW5hYmxlZC5maWx0ZXIoKGUpID0+ICFpdGVtTWFwW2VdKTtcbiAgICBjb25zdCBkaXNhYmxlZEl0ZW1zID0gZGlzYWJsZWQuZmlsdGVyKChkKSA9PiAhaXRlbU1hcFtkXSk7XG4gICAgaWYgKCEhZW5hYmxlZEl0ZW1zLmxlbmd0aCB8fCAhIWRpc2FibGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGNvbmRpdGlvbnMuZmluZEluZGV4KChjKSA9PiBjLmVuYWJsZXJJZCA9PT0gZW5hYmxlcklkKTtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKHsgZW5hYmxlcklkOiBlbmFibGVySWQsIGVuYWJsZWRJdGVtcywgZGlzYWJsZWRJdGVtcywgZW5hYmxlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJldiA9IGNvbmRpdGlvbnNbaW5kZXhdO1xuICAgICAgICBjb25zdCBuZXdJZDogQ29uZGl0aW9uQ2hhbmdlID0ge1xuICAgICAgICAgIGVuYWJsZXJJZCxcbiAgICAgICAgICBlbmFibGVkSXRlbXM6IFsuLi5wcmV2LmVuYWJsZWRJdGVtcywgLi4uZW5hYmxlZEl0ZW1zXSxcbiAgICAgICAgICBkaXNhYmxlZEl0ZW1zOiBbLi4ucHJldi5kaXNhYmxlZEl0ZW1zLCAuLi5kaXNhYmxlZEl0ZW1zXSxcbiAgICAgICAgICBlbmFibGUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbmRpdGlvbnMuc3BsaWNlKGluZGV4LCAxLCBuZXdJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGFsbCB2YWxpZGF0aW9uIGVycm9ycyBvbiB0aGUgc2VydmljZS5cbiAgICogUmV2YWxpZGF0ZSBmb3JtIGNvbnRyb2xzIHRoYXQgcHJldmlvdXNseSBoYWQgZXJyb3JzIG9yIGhhdmUgbmV3IGVycm9ycyBub3cuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVTZXJ2ZXJTaWRlRXJyb3JzKCkge1xuICAgIC8vIEtlZXAgdHJhY2sgb2YgSURzIGZvciBlYWNoIGNvbnRyb2wgdGhhdCBuZWVkcyB0byBiZSByZXZhbGlkYXRlZFxuICAgIGNvbnN0IGNvbnRyb2xJZHNUb1JldmFsaWRhdGUgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIENvbGxlY3QgY29udHJvbHMgcHJldmlvdXNseSBpbiBlcnJvciB0byByZXZhbGlkYXRlXG4gICAgaWYgKHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0cykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMsIGlkKSkge1xuICAgICAgICAgIGNvbnRyb2xJZHNUb1JldmFsaWRhdGUuYWRkKGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIG91dCBhbGwgcHJldmlvdXMgc3RvcmVkIGVycm9yc1xuICAgIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMgPSB7fTtcbiAgICBpZiAodGhpcy5fbXRuYUZvcm0/LnZhbGlkYXRpb25SZXN1bHQpIHtcbiAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHRoaXMuX210bmFGb3JtLnZhbGlkYXRpb25SZXN1bHQuZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25TdGF0dXMgPT09ICdFUlJPUlMnKSB7XG4gICAgICAgICAgLy8gU3RvcmUgZXJyb3JzIHNvIHRoYXQgdGhlIHZhbGlkYXRpb25SZXN1bHRWYWxpZGF0b3IgY2FuIHZhbGlkYXRlIGVhY2ggY29udHJvbFxuICAgICAgICAgIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHNbcmVzdWx0LmlkXSA9IHJlc3VsdDtcbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJldmFsaWRhdGUgdGhlc2UgY29udHJvbHMgdGhhdCBoYXZlIGVycm9yc1xuICAgICAgICAgIGNvbnRyb2xJZHNUb1JldmFsaWRhdGUuYWRkKHJlc3VsdC5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IHJldmFsaWRhdGUgY29udHJvbHMgYWN0dWFsbHkgY2hhbmdlc1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLm5nRm9ybU1hbmFnZXIuZ2V0Rm9ybSgpO1xuICAgIGlmIChmb3JtKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIGNvbnRyb2xJZHNUb1JldmFsaWRhdGUpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZpbmRGb3JtQ29udHJvbChpZCwgZm9ybSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFRTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLG9CQUFvQixHQVVyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBaUJqRTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFvQi9CLFlBQXNCLFVBQTRCLEVBQVksYUFBa0MsRUFBWSxTQUEwQjtRQUFoSCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBbkI1SCxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNwRCwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUNsRSxnRUFBZ0U7UUFDdEQsK0JBQTBCLEdBQTZDLEVB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c0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hDO2FBQ0Y7U0FDRjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxnQkFBZ0IsRUFBRTtZQUNwQyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLEVBQUU7Z0JBQzlFLElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtvQkFDeEMsK0VBQStFO29CQUMvRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDcEQsd0RBQXdEO29CQUN4RCxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN2QzthQUNGO1NBQ0Y7UUFFRCw0Q0FBNEM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLEtBQUssTUFBTSxFQUFFLElBQUksc0JBQXNCLEVBQUU7Z0JBQ3ZDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLElBQUksT0FBTyxFQUFFO29CQUNYLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2lCQUNsQzthQUNGO1NBQ0Y7SUFDSCxDQUFDOztrSEE5aUJVLG9CQUFvQjtzSEFBcEIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1R5cGUgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcbmltcG9ydCB7XG4gIENvbmRpdGlvbmFsSXRlbSxcbiAgQ29uZGl0aW9uQ2hhbmdlLFxuICBGb3JtLFxuICBGb3JtSXRlbSxcbiAgRm9ybUl0ZW1Hcm91cCxcbiAgRm9ybUl0ZW1JbXBsLFxuICBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQsXG4gIGlzQ29uZGl0aW9uYWxJdGVtLFxuICBpc0Zvcm0sXG4gIGlzRm9ybUl0ZW1Hcm91cEltcGwsXG4gIGlzT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgaXNPcHRpb25JdGVtSW1wbCxcbiAgaXNSZXBlYXRhYmxlSXRlbSxcbiAgaXNTZWN0aW9uLFxuICBpc1RhYmxlSXRlbSxcbiAgTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gIE10bmFXZkZvcm1JdGVtQ2hhbmdlQWN0aW9uLFxuICBPcHRpb24sXG4gIE9wdGlvbkdyb3VwSXRlbUltcGwsXG4gIE9wdGlvbkl0ZW1JbXBsLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU2VjdGlvbixcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQmFzZUZvcm1JdGVtLCBQcm9ncmVzc2l2ZUZvcm0gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgaXNQcm9ncmVzc2l2ZUZvcm1TZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL3Byb2dyZXNzaXZlLWZvcm0vcHJvZ3Jlc3NpdmUtZm9ybS1zZWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IGZpbmRGb3JtQ29udHJvbCwgTXRuYVdmU2VyaWFsaXplciB9IGZyb20gJy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBNdG5hV2ZBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBNdG5hV2ZOZ0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi9uZy1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXRuYVdmVUlTZXJ2aWNlIH0gZnJvbSAnLi91aS5zZXJ2aWNlJztcblxuLyoqXG4gKiB0eXBlcyBvZiBGb3JtSXRlbXMgdGhhdCBjYW4gYmUgcGFzc2VkIGludG8gdGhlICdtb2RpZnlNdG5hRm9ybUl0ZW0nIG1ldGhvZCB0byBhZGQvcmVtb3ZlIGl0ZW1zXG4gKi9cbnR5cGUgUGFyZW50SXRlbVVuaW9uID1cbiAgfCBGb3JtXG4gIHwgU2VjdGlvblxuICB8IEZvcm1JdGVtR3JvdXBcbiAgfCBSZXBlYXRhYmxlSXRlbVxuICB8IFRhYmxlSXRlbVxuICB8IE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj5cbiAgfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj47XG5cbi8qKlxuICogQWxsb3dzIGEgY2FsbGVyIHRvIChkZSlzZXJpYWxpemFlIGFuIE10bmFGb3JtLiBJdCBjb250YWlucyB0aGUgZGV0ZXJtaW5pbmcgbG9naWMgZm9yIHJldHVybmluZyBzcGVjaWZpYyBmb3JtIGNvbnRyb2xzXG4gKiBhbmQgZGVzZXJpYWxpemluZyBuZXcgTXRuYUZvcm1zIGZyb20gdGhlIHJlYWN0aXZlIHZhbHVlcywgYXMgd2VsbCBhcyByZWdpc3RlcmluZyBjdXN0b20gRm9ybSBJdGVtcyAmIGZ1bmN0aW9ucy5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB7XG4gIHByb3RlY3RlZCBjb21wb25lbnRzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGU8QmFzZUZvcm1JdGVtPj4oKTtcbiAgcHJvdGVjdGVkIGZvcm1DaGFuZ2UkID0gbmV3IFN1YmplY3Q8Rm9ybSB8IFByb2dyZXNzaXZlRm9ybT4oKTtcbiAgcHJvdGVjdGVkIHByb2dyZXNzaXZlRm9ybUNoYW5nZSQgPSBuZXcgU3ViamVjdDxQcm9ncmVzc2l2ZUZvcm0+KCk7XG4gIC8qKiBBIG1hcCBvZiBhbGwge0BsaW5rIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdH0ga2V5ZWQgb24gaWQgKi9cbiAgcHJvdGVjdGVkIF9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQ+ID0ge307XG4gIC8qKiBDb25kaXRpb25DaGFuZ2VzIG9uICdhZGQnIG11c3Qgd2FpdCB1bnRpbCB0aGUgZm9ybSByZXJlbmRlcnMgdG8gdG9nZ2xlIGl0ZW1zICovXG4gIHByb3RlY3RlZCBpdGVtVG9nZ2xlUXVlOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF9tdG5hRm9ybTogRm9ybSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF9tdG5hUHJvZ3Jlc3NpdmVGb3JtOiBQcm9ncmVzc2l2ZUZvcm0gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIE10bmFGb3JtIGNoYW5nZXMuIFVzZWQgdG8gaW5mb3JtIGEgc3Vic2NyaWJlciB0aGF0IGFuIE10bmFGb3JtIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8TXRuYUZvcm0+IHRvIHdoaWNoIGEgY2FsbGVyIGNhbiBzdWJzY3JpYmVcbiAgICovXG4gIGdldCBmb3JtQ2hhbmdlcygpOiBPYnNlcnZhYmxlPEZvcm0+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhcGlTZXJ2aWNlOiBNdG5hV2ZBcGlTZXJ2aWNlLCBwcm90ZWN0ZWQgbmdGb3JtU2VydmljZTogTXRuYVdmTmdGb3JtU2VydmljZSwgcHJvdGVjdGVkIHVpU2VydmljZTogTXRuYVdmVUlTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgYSBGb3JtSXRlbSBmcm9tIHRoZSBmb3JtICYgbW9kaWZpZXMgb3RoZXIgYWZmZWN0ZWQgRm9ybUl0ZW1zXG4gICAqIEBwYXJhbSBjaGFuZ2UgTXRuYVdmRm9ybUl0ZW1DaGFuZ2VcbiAgICovXG4gIGNoYW5nZU10bmFGb3JtSXRlbShjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKSB7XG4gICAgaWYgKCF0aGlzLl9tdG5hRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcmVwZWF0YWJsZSBpdGVtIGZyb20gdGhlIG10bmFmb3JtXG4gICAgICBsZXQgbmV3Rm9ybSA9IHRoaXMuX21vZGlmeUZvcm1JdGVtKHRoaXMuX210bmFGb3JtLCBjaGFuZ2UpIGFzIEZvcm07XG4gICAgICAvLyBtb2RpZnkgdGhlIGNvbmRpdGlvbnMgb2YgYWxsIGVmZmVjdGVkIGZvcm0gaXRlbXNcbiAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgY2hhbmdlKTtcblxuICAgICAgdGhpcy5uZ0Zvcm1TZXJ2aWNlLnJlbW92ZUNvbnRyb2woY2hhbmdlLmlkLCBjaGFuZ2UucGFyZW50SWRzKTtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZSQubmV4dChuZXdGb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAgIC5nZXRSZXBlYXRhYmxlSXRlbSh0aGlzLl9tdG5hRm9ybS5pbnN0YW5jZUlkLCBjaGFuZ2UuaWQpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKG5ld0l0ZW06IEZvcm1JdGVtSW1wbDx1bmtub3duPikgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0Zvcm1Db250cm9sID0gdGhpcy5zZXJpYWxpemVNdG5hRm9ybUl0ZW0obmV3SXRlbSk7XG4gICAgICAgICAgaWYgKG5ld0Zvcm1Db250cm9sICYmIHRoaXMuX210bmFGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm5nRm9ybVNlcnZpY2UuYWRkQ29udHJvbChuZXdJdGVtLmluc3RhbmNlSWQsIGNoYW5nZS5wYXJlbnRJZHMsIG5ld0Zvcm1Db250cm9sKTtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHJlcGVhdGFibGUgaXRlbSBpbnRvIHRoZSBtdG5hZm9ybVxuICAgICAgICAgICAgbGV0IG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbSh0aGlzLl9tdG5hRm9ybSwgeyAuLi5jaGFuZ2UsIGlkOiBuZXdJdGVtLmluc3RhbmNlSWQgfSwgbmV3SXRlbSkgYXMgRm9ybTtcblxuICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBsaXN0IG9mIGFsbCBmb3JtaXRlbSBjb25kaXRpb25zIG5lZWRpbmcgY2hhbmdlICYgbW9kaWZ5IHRob3NlIGl0ZW1zIGluIHRoZSBmb3JtXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25DaGFuZ2VzID0gdGhpcy5nZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KG5ld0l0ZW0sICdBREQnKTtcbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgeyAuLi5jaGFuZ2UsIGNvbmRpdGlvbkNoYW5nZXMgfSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1Ub2dnbGVRdWUgPSBjb25kaXRpb25DaGFuZ2VzO1xuICAgICAgICAgICAgLy8gZW1pdCB0aGUgbmV3IG10bmFmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm1DaGFuZ2UkLm5leHQobmV3Rm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIENvbmRpdGlvbkNoYW5nZSBhcnJheSBmb3IgaXRlbXMgZXhpc3RpbmcgaW4gdGhlIDxpdGVtPiB3aGljaCBlbmFibGUvZGlzYWJsZSBGb3JtSXRlbXMgb3V0c2lkZSB0aGUgPGl0ZW0+J3Mgc2NvcGUuXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgZWZmZWN0cyB0aGUgY29uZGl0aW9uIG9mIG90aGVyIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gYWN0aW9uIFdoZXRoZXIgdGhpcyBpdGVtIHdhcyBhZGRlZCAoQUREKSwgb3IgcmVtb3ZlZCAoUkVNT1ZFKVxuICAgKiBAcmV0dXJucyBBcnJheTxDb25kaXRpb25DaGFuZ2U+XG4gICAqL1xuICBnZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KGl0ZW06IEZvcm1JdGVtLCBhY3Rpb24/OiBNdG5hV2ZGb3JtSXRlbUNoYW5nZUFjdGlvbik6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4ge1xuICAgIGNvbnN0IGludGVybmFsTWFwID0ge307XG4gICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChpdGVtLCBpbnRlcm5hbE1hcCk7XG4gICAgY29uc3QgY29uZGl0aW9uQ2hhbmdlcyA9IG5ldyBBcnJheTxDb25kaXRpb25DaGFuZ2U+KCk7XG4gICAgdGhpcy5fYnVpbGRDb25kaXRpb25DaGFuZ2VBcnJheShpdGVtLCBjb25kaXRpb25DaGFuZ2VzLCBpbnRlcm5hbE1hcCwgYWN0aW9uKTtcbiAgICByZXR1cm4gY29uZGl0aW9uQ2hhbmdlcztcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgdG9wIGxldmVsIHZhbGlkYXRpb24gcmVzdWx0cyAodXN1YWxseSB0aGUgZXJyb3JzKSwga2V5ZWQgb24gSUQuICovXG4gIGdldEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMoKTogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgTXRuYUZvcm0gJiByZWFjaXZlIGZvcm0gdmFsdWVzIGZyb20gdGhlIE10bmFXZk5nRm9ybVNlcnZpY2UncyBpbnRlcm5hbCBmb3JtLlxuICAgKlxuICAgKiBAcGFyYW0gbmdGb3JtVmFsdWVzIEpTT04gb2JqZWN0IG9mIG5nRm9ybVZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlRm9ybShuZ0Zvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRm9ybSB7XG4gICAgY29uc3QgY3VycmVudEZvcm0gPSB0aGlzLm5nRm9ybVNlcnZpY2UuZ2V0Rm9ybVZhbHVlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmN1cnJlbnRGb3JtLFxuICAgICAgaXRlbXM6IE10bmFXZlNlcmlhbGl6ZXIuaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICAgIGN1cnJlbnRGb3JtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZXMsXG4gICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc2FibGVkU3RhdGVzKCksXG4gICAgICAgIHRoaXMuZHluYW1pY0Zvcm1Db25kaXRpb25hbCxcbiAgICAgICAgdGhpcy5keW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgcHJldmlvdXMgTXRuYUZvcm0gJiByZWFjdGl2ZSBmb3JtIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIG10bmFGb3JtIE10bmFGb3JtIHJlcXVpcmluZyB2YWx1ZSBpbnNlcnRpb25cbiAgICogQHBhcmFtIG5nRm9ybVZhbHVlcyBKU09OIG9iamVjdCBvZiAgbmdGb3JtIHZhbHVlc1xuICAgKiBAcmV0dXJucyBuZXcgTXRuYUZvcm1cbiAgICovXG4gIGluc2VydE5ld1ZhbHVlcyhtdG5hRm9ybTogRm9ybSwgbmdGb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tdG5hRm9ybSxcbiAgICAgIGl0ZW1zOiBNdG5hV2ZTZXJpYWxpemVyLmluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgICBtdG5hRm9ybSxcbiAgICAgICAgbmdGb3JtVmFsdWVzLFxuICAgICAgICB0aGlzLnVpU2VydmljZS5nZXREaXNhYmxlZFN0YXRlcygpLFxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtQ29uZGl0aW9uYWwsXG4gICAgICAgIHRoaXMuZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlclxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBGb3JtIHwgRm9ybUl0ZW0gaW50byBGb3JtQ29udHJvbChzKVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBGb3JtIHwgRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAgICogQHJldHVybnMgRm9ybUdyb3VwIHwgRm9ybUNvbnRyb2xcbiAgICovXG4gIHNlcmlhbGl6ZU10bmFGb3JtSXRlbShpdGVtOiBGb3JtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+KTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIE10bmFXZlNlcmlhbGl6ZXIuZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgIGl0ZW0sXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5keW5hbWljRm9ybUNvbmRpdGlvbmFsLFxuICAgICAgdGhpcy5keW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXJcbiAgICApO1xuICB9XG5cbiAgLy8jcmVnaW9uIEN1c3RvbSBDb21wb25lbnQvRnVuY3Rpb24gUmVnaXN0cmF0aW9uXG4gIGdldER5bmFtaWNDb21wb25lbnQoaWQ6IHN0cmluZyk6IFR5cGU8QmFzZUZvcm1JdGVtPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cy5nZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIG1hcCBvZiBjb21wb25lbnRzIHRvIGJlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGluc2lkZSBhbiBNdG5hRm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudHMgdGhlIG1hcCBvZiBjb21wb25lbnRzIHRoYXQgYSBWYWx1ZUl0ZW0gd2lsbCB1c2UgZm9yIHJlbmRlcmluZ1xuICAgKiBAcHJvcCBzdHJpbmcgLSB0aGUgdHlwZShpdGVtSWQgc3VmZml4KSBvZiBjb21wb25lbnQsIHVzZWQgZm9yIHJldHJpZXZhbFxuICAgKiBAcHJvcCBUeXBlIC0gdGhlIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCwgYW4gZXh0ZW5zaW9uIG9mIEJhc2VGb3JtSXRlbVxuICAgKi9cbiAgcmVnaXN0ZXJEeW5hbWljQ29tcG9uZW50cyhjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBUeXBlPEJhc2VGb3JtSXRlbT4+KSB7XG4gICAgdGhpcy5jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIE10bmFGb3JtIG9uIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIGJlIHVzZWQgZm9yIGludGVybmFsIG1vZGlmaWNhdGlvblxuICAgKi9cbiAgc2V0TXRuYUZvcm0oZm9ybTogRm9ybSkge1xuICAgIHRoaXMuX210bmFGb3JtID0geyAuLi5mb3JtIH07XG4gICAgaWYgKCEhdGhpcy5pdGVtVG9nZ2xlUXVlICYmICEhdGhpcy5pdGVtVG9nZ2xlUXVlLmxlbmd0aCkge1xuICAgICAgLy8gVGhlIGZvcm0gbmVlZHMgdGltZSB0byByZXJlbmRlciwgc28gd2UgcHVzaCB0aGlzIGxvb3AgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgdGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2hhbmdlLmVuYWJsZWRJdGVtcywgY2hhbmdlLmRpc2FibGVkSXRlbXMsICEhY2hhbmdlLmVuYWJsZSwgY2hhbmdlLmVuYWJsZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZVF1ZSA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBlcnJvcnMgY29taW5nIGZyb20gdGhlIHNlcnZlciBhbmQgcmV2YWxpZGF0ZSB0aG9zZSBjb250cm9sc1xuICAgIHRoaXMuX3VwZGF0ZVNlcnZlclNpZGVFcnJvcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgRm9ybVNlcnZpY2UgZXh0ZW5zaW9uIGNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBjYWxsIHRoZVxuICAgKiBkeW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyL2R5bmFtaWNSZWFjdGl2ZUZvcm1Db250cm9sQnVpbGRlciBtZXRob2RzLiBEdXJpbmcgd2ViIGZvcm0gZ2VuZXJhdGlvbiwgdGhpcyBtZXRob2QgaXMgY2hlY2tlZCAmXG4gICAqIHRoZSBjdXJyZW50IEZvcm1JdGVtIGlzIHBhc3NlZCBpbiwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIG92ZXJyaWRpbmcgbWV0aG9kLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljRm9ybUNvbmRpdGlvbmFsID0gKGl0ZW06IEZvcm1JdGVtKSA9PiBpdGVtLml0ZW1JZC5pbmNsdWRlcyh7c29tZSBpdGVtSWR9KVxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIGR5bmFtaWNGb3JtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIGZvcm0gZ2VuZXJhdGlvbiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIGEgbmV3IFZhbHVlSXRlbTxhbnk+LlxuICAgKiBTdGVwIDNcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihzZWN0aW9uOiBTZWN0aW9uIHwgRm9ybSwgaXRlbTogRm9ybUl0ZW0sIG5nRm9ybVZhbHVlOiBhbnkpOiBWYWx1ZUl0ZW0ge1xuICAgKiBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2VuZXJhdGVOZXdWYWx1ZShpdGVtLCByZlZhbHVlLCBzZWN0aW9uKTtcbiAgICogcmV0dXJuIHsgLi4uaXRlbSwgLi4ubmV3VmFsdWUgfVxuICAgKiB9XG4gICAqIEBwYXJhbSBzZWN0aW9uIHRoZSBjdXJyZW50IEZvcm1TZWN0aW9uXG4gICAqIEBwYXJhbSBpdGVtIHRoZSBjdXJyZW50IEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSB0aGUgbmdGb3JtIEpTT04gdmFsdWVcbiAgICogQHJldHVybnMgYSBuZXcgVmFsdWVJdGVtXG4gICAqL1xuICBwcm90ZWN0ZWQgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiAgICBzZWN0aW9uOiBGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU/OiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuICApOiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIHJlYWN0aXZlIGZvcm0gZ2VuZXJhdGlvblxuICAgKiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXIoaXRlbTogRm9ybUl0ZW0pIHtcbiAgICogcmV0dXJuIHRoaXMuYnVpbGRGb3JtQ29udHJvbEZvckR5bmFtaWNDb21wb25lbnQoaXRlbTogRm9ybUl0ZW0pO1xuICAgKiB9XG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHVzZWQgdG8gZ2VuZXJhdGUgZm9ybSBjb250cm9sc1xuICAgKiBAcmV0dXJucyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgZHluYW1pY1JlYWN0aXZlRm9ybUNvbnRyb2xCdWlsZGVyKGl0ZW06IEZvcm1JdGVtKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSU5URVJOQUwgTUVUSE9EU1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgRm9ybSB0byBpbnNlcnQgb3IgcmVtb3ZlIGEgZGVzaWduYXRlZCBGb3JtSXRlbS5cbiAgICogQHBhcmFtIGl0ZW0gTXRuYUZvcm0gdG8gc2VhcmNoIHRocm91Z2hcbiAgICogQHBhcmFtIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UgZm9yIGFkZGluZyBvciByZW1vdmluZyBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZXdJdGVtIEZvcm1JdGVtIHRvIGFkZCB0byBpdHMgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX21vZGlmeUZvcm1JdGVtPEkgZXh0ZW5kcyBGb3JtIHwgU2VjdGlvbiB8IEZvcm1JdGVtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+PihcbiAgICBpdGVtOiBJLFxuICAgIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gICAgbmV3SXRlbT86IEZvcm1JdGVtXG4gICk6IEZvcm0gfCBTZWN0aW9uIHwgRm9ybUl0ZW0gfCBGb3JtSXRlbUltcGw8dW5rbm93bj4ge1xuICAgIGlmICghY2hhbmdlLnBhcmVudElkcy5sZW5ndGgpIHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHJlYWNoIHRoZSBQYXJlbnQgRm9ybUl0ZW1cbiAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFUExBQ0UnKSB7XG4gICAgICAgIGlmICgnaXRlbXMnIGluIGl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IG5ld0l0ZW0/Lmluc3RhbmNlSWQpO1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgICAgIGlmIChuZXdJdGVtKSB7XG4gICAgICAgICAgICBuZXdJdGVtcy5zcGxpY2UoaW5kZXgsIDEsIG5ld0l0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBpdGVtczogbmV3SXRlbXMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgaXRlbXM6IGNoYW5nZS5hY3Rpb25UeXBlID09PSAnQUREJyA/IGl0ZW0uaXRlbXMuY29uY2F0KG5ld0l0ZW0gfHwgW10pIDogaXRlbS5pdGVtcy5maWx0ZXIoKGkpID0+IGkuaW5zdGFuY2VJZCAhPT0gY2hhbmdlLmlkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0Zvcm0oaXRlbSkgfHwgaXNTZWN0aW9uKGl0ZW0pIHx8IGlzUHJvZ3Jlc3NpdmVGb3JtU2VjdGlvbihpdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGl0ZW0pIHx8IGlzUmVwZWF0YWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgY29uc3QgaW5kZXhUb01vZGlmeSA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pO1xuICAgICAgY29uc3QgaXRlbVRvTW9kaWZ5ID0gaXRlbS5pdGVtc1tpbmRleFRvTW9kaWZ5XSBhcyBQYXJlbnRJdGVtVW5pb247XG5cbiAgICAgIGl0ZW1zLnNwbGljZShcbiAgICAgICAgaW5kZXhUb01vZGlmeSxcbiAgICAgICAgMSxcbiAgICAgICAgdGhpcy5fbW9kaWZ5Rm9ybUl0ZW0oaXRlbVRvTW9kaWZ5LCB7IC4uLmNoYW5nZSwgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpIH0sIG5ld0l0ZW0pIGFzIEZvcm1JdGVtXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgaXRlbXMsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlUYWJsZUl0ZW0oaXRlbSBhcyBUYWJsZUl0ZW0sIGNoYW5nZSwgbmV3SXRlbSk7XG4gICAgfSBlbHNlIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgICAgIGl0ZW0gYXMgT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBuZXdJdGVtXG4gICAgICApWzBdO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgYW4gT3B0aW9uSXRlbU1hcCBvZiBhIEZvcm1JdGVtIHRvIGluc2VydCBvciByZW1vdmUgYSBkZXNpZ25hdGVkIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBvcHRpb25JdGVtIEZvcm1JdGVtIHdpdGggYW4gb3B0aW9uSXRlbU1hcCwgZS5nLiBPcHRpb25JdGVtSW1wbCB8IE9wdGlvbkdyb3VwSXRlbUltcGxcbiAgICogQHBhcmFtIGNoYW5nZSBNdG5hV2ZGb3JtSXRlbUNoYW5nZSBmb3IgYWRkaW5nIG9yIHJlbW92aW5nIGEgRm9ybUl0ZW1cbiAgICogQHBhcmFtIG5ld0l0ZW0gRm9ybUl0ZW0gdG8gYmUgYWRkZWQgdG8gaXRzIHBhcmVudFxuICAgKiBAcmV0dXJucyBGb3JtSXRlbSB3aXRoIGFuIG9wdGlvbkl0ZW1NYXAgY29udGFpbmluZyBGb3JtSXRlbXNcbiAgICovXG4gIHByaXZhdGUgX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgb3B0aW9uSXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLFxuICAgIG5ld0l0ZW0/OiBGb3JtSXRlbVxuICApOiBbT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgYm9vbGVhbl0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9ID0ge307XG4gICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBtYXAgYW5kIHNldCB0aGUgaXRlbXMgdG8gYSBuZXcgbWFwXG4gICAgLy8gQ2hlY2sgaWYgYW55IEZvcm1JdGVtIGluIHRoZSBtYXAgbWF0Y2hlcyB0aGUgbmV4dCBwYXJlbnQgSURcbiAgICBmb3IgKGNvbnN0IGlkIGluIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgICAvLyBJZiBvbmUgbWF0Y2hlcywgbW9kaWZ5ICYgc2V0IGl0IG9uIHRoZSBuZXcgbWFwXG4gICAgICAgIGlmIChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgUGFyZW50SXRlbVVuaW9uLFxuICAgICAgICAgICAgeyAuLi5jaGFuZ2UsIHBhcmVudElkczogY2hhbmdlLnBhcmVudElkcy5zbGljZSgxKSB9LFxuICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICkgYXMgRm9ybUl0ZW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSBvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiB0aGUgaXRlbSB3aXRoIGl0cyBuZXcgb3B0aW9uSXRlbU1hcCwgJiB3aGV0aGVyIHdlIGZvdW5kIHRoZSBtYXRjaGluZyBpdGVtXG4gICAgcmV0dXJuIFt7IC4uLm9wdGlvbkl0ZW0sIG9wdGlvbkl0ZW1NYXAgfSwgZm91bmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0YWJsZSByb3dzIHRvIGluc2VydCBvciByZW1vdmUgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gdGFibGVJdGVtIFRhYmxlSXRlbSB0byB0cmF2ZXJzZVxuICAgKiBAcGFyYW0gY2hhbmdlIE10bmFXZkZvcm1JdGVtQ2hhbmdlIGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gbmV3SXRlbSBGb3JtSXRlbSB0byBiZSBhZGRlZCB0byBpdHMgcGFyZW50XG4gICAqIEByZXR1cm5zIFRhYmxlSXRlbSB3aXRoIGEgRm9ybUl0ZW0gYWRkZWQgb3IgcmVtb3ZlZFxuICAgKi9cbiAgcHJpdmF0ZSBfbW9kaWZ5VGFibGVJdGVtKHRhYmxlSXRlbTogVGFibGVJdGVtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLCBuZXdJdGVtPzogRm9ybUl0ZW0pOiBUYWJsZUl0ZW0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIC8vIE1hcCB0aGUgdGFibGUgcm93cyB0byBmaW5kIHRoZSBGb3JtSXRlbSB3aXRoIG1hdGNoaW5nIGluc3RhbmNlSWRcbiAgICBjb25zdCB0YWJsZVJvd3M6IFRhYmxlUm93SXRlbVtdID0gdGFibGVJdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiB7XG4gICAgICAvLyBJZiB0aGUgaXRlbSB3YXMgZm91bmQsIHNraXAgbWFwcGluZyBmdXJ0aGVyIHJvd3NcbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgaXRlbXM6IHJvdy5pdGVtcy5tYXAoKHJvd0l0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCB0aGUgbmV4dCBtYXRjaGluZyBGb3JtSXRlbSwgdG9nZ2xlICdmb3VuZCcsIGFuZCByZXR1cm4gdGhlIG1vZGlmaWVkIEZvcm1JdGVtXG4gICAgICAgICAgICBpZiAoISFyb3dJdGVtICYmIHJvd0l0ZW0uaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIFBhcmVudEl0ZW1VbmlvbixcbiAgICAgICAgICAgICAgICB7IC4uLmNoYW5nZSwgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpIH0sXG4gICAgICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICAgICApIGFzIEZvcm1JdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIEZvcm1JdGVtIGluc3RhbmNlSWQgZG9lc24ndCBtYXRjaCwgYnV0IGl0IGhhcyBGb3JtSXRlbXMgaW4gaXRzICdvcHRpb25JdGVtTWFwJyxcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSBtYXRjaGluZyBGb3JtSXRlbSBleGlzdHMgaW4gaXRzIG1hcFxuICAgICAgICAgICAgaWYgKCdvcHRpb25JdGVtTWFwJyBpbiByb3dJdGVtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldHVybmVkID0gdGhpcy5fbW9kaWZ5T3B0aW9uSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj4gfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICAgICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZm91bmQgPSByZXR1cm5lZFsxXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvd0l0ZW07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICAgIHJldHVybiB7IC4uLnRhYmxlSXRlbSwgdGFibGVSb3dzIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIGluc3RhbmNlSWRzIGZyb20gdGhlICdpdGVtSWRzJyBpbiBhIEZvcm1JdGVtJ3MgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIHNlYXJjaCB0aHJvdWdoICYgcmVwbGFjZSBmb3JtaXRlbXMgd2l0aCB0aGUgbmV3IGNvbmRpdGlvblxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgdGhhdCByZWNlbnRseSBvY2N1cnJlZCBpbiB0aGUgbXRuYUZvcm1cbiAgICovXG4gIHByaXZhdGUgX21vZGlmeUZvcm1JdGVtQ29uZGl0aW9ucyhmb3JtOiBGb3JtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKTogRm9ybSB7XG4gICAgbGV0IG5ld0Zvcm0gPSBmb3JtO1xuICAgIGlmIChjaGFuZ2UuY29uZGl0aW9uQ2hhbmdlcykge1xuICAgICAgY29uc3QgZm9ybUl0ZW1zOiB7IFtrZXk6IHN0cmluZ106IEZvcm1JdGVtIHwgQ29uZGl0aW9uYWxJdGVtIH0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgY2Mgb2YgY2hhbmdlLmNvbmRpdGlvbkNoYW5nZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2dnbGVkSWQgb2YgWy4uLmNjLmVuYWJsZWRJdGVtcywgLi4uY2MuZGlzYWJsZWRJdGVtc10pIHtcbiAgICAgICAgICBsZXQgZm9ybUl0ZW0gPSBmb3JtSXRlbXNbdG9nZ2xlZElkXTtcbiAgICAgICAgICBjb25zdCBmb3JtSXRlbUNvbXBvbmVudCA9IHRoaXMudWlTZXJ2aWNlLmdldEl0ZW0odG9nZ2xlZElkKTtcbiAgICAgICAgICBpZiAoIWZvcm1JdGVtICYmIGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtKSB7XG4gICAgICAgICAgICBmb3JtSXRlbSA9IGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oZm9ybUl0ZW0pICYmIGZvcm1JdGVtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbUNvbmRpdGlvbkl0ZW1JZHMgPSBmb3JtSXRlbS5jb25kaXRpb24uaXRlbUlkcyB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JZHMgPVxuICAgICAgICAgICAgICBjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ0FERCdcbiAgICAgICAgICAgICAgICA/IFsuLi5pdGVtQ29uZGl0aW9uSXRlbUlkcywgY2MuZW5hYmxlcklkXVxuICAgICAgICAgICAgICAgIDogaXRlbUNvbmRpdGlvbkl0ZW1JZHMuZmlsdGVyKChpKSA9PiBpICE9PSBjYy5lbmFibGVySWQpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBDb25kaXRpb25hbEl0ZW0gPSB7IC4uLmZvcm1JdGVtLCBjb25kaXRpb246IHsgLi4uZm9ybUl0ZW0uY29uZGl0aW9uLCBpdGVtSWRzIH0gfTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYW5nZSA9IG5ldyBNdG5hV2ZGb3JtSXRlbUNoYW5nZShuZXdJdGVtLmluc3RhbmNlSWQsIGZvcm1JdGVtQ29tcG9uZW50Py5wYXJlbnRJZHMgfHwgW10sICdSRVBMQUNFJyk7XG5cbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShuZXdGb3JtLCBuZXdDaGFuZ2UsIG5ld0l0ZW0gYXMgRm9ybUl0ZW0gJiBDb25kaXRpb25hbEl0ZW0pIGFzIEZvcm07XG4gICAgICAgICAgICBmb3JtSXRlbXNbdG9nZ2xlZElkXSA9IG5ld0l0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2MuZW5hYmxlZEl0ZW1zLCBjYy5kaXNhYmxlZEl0ZW1zLCAhIWNjLmVuYWJsZSwgY2MuZW5hYmxlcklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Rm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBtYXAgb2YgYWxsIGluc3RhbmNlSWRzIGluc2lkZSBhbiBpdGVtLiBDaGVja3MgJ2l0ZW1zJyAmICdvcHRpb25JdGVtTWFwJ1xuICAgKiBAcGFyYW0gaXRlbSBJdGVtIHRvIHJlY3Vyc2VcbiAgICogQHBhcmFtIGlkTWFwIG1hcCBvZiB0aGUgaXRlbSdzIGludGVybmFsIGluc3RhbmNlSWRzXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEludGVybmFsSWRzTWFwKGl0ZW06IEZvcm1JdGVtLCBpZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICBpZE1hcFtpdGVtLmluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZEludGVybmFsSWRzTWFwKHN1Ykl0ZW0sIGlkTWFwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHlwZTx7IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9IH0+KGl0ZW0sICdvcHRpb25JdGVtTWFwJykpIHtcbiAgICAgIGNvbnN0IG1hcDogeyBbaWQ6IHN0cmluZ106IEZvcm1JdGVtIH0gPSBpdGVtLm9wdGlvbkl0ZW1NYXA7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChtYXBbaWRdLCBpZE1hcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuIGFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gYW4gTXRuYUZvcm0uXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgd2FzIGFkZGVkL3JlbW92ZWQsIHdoaWNoIGFmZmVjdHMgY29uZGl0aW9ucyBvZiBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGNoYW5nZXMgQXJyYXkgdG8gYnVpbGQgdXBcbiAgICogQHBhcmFtIGludGVybmFsSWRNYXAgTWFwIG9mIGFsbCBpbnN0YW5jZUlkcyBsb2NhdGVkIGluIHRoZSBpdGVtOyBpbiBvcmRlciB0byBleGNsdWRlIHRoZW0gZnJvbSB0aGUgY29uZGl0aW9uIGNoYW5nZXNcbiAgICogQHBhcmFtIGFjdGlvbiBXaGV0aGVyIHRoZSBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIGNoYW5nZXM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaW50ZXJuYWxJZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgYWN0aW9uPzogTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb25cbiAgKSB7XG4gICAgaWYgKGlzT3B0aW9uSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIGNvbnN0IGVuYWJsZSA9ICEhYWN0aW9uICYmIGFjdGlvbiA9PT0gJ0FERCcgPyBpdGVtLm9wdGlvbi5zZWxlY3RlZCB8fCBpdGVtLnZhbHVlID09PSBpdGVtLm9wdGlvbi5vcHRpb24uaWQgOiBmYWxzZTtcbiAgICAgIHRoaXMuX3B1c2hDb25kaXRpb25Ub0FycmF5KGl0ZW0uaW5zdGFuY2VJZCwgaXRlbS5vcHRpb24uZW5hYmxlZEl0ZW1zLCBpdGVtLm9wdGlvbi5kaXNhYmxlZEl0ZW1zLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBlbmFibGUpO1xuICAgICAgdGhpcy5fYnVpbGRBcnJheUZyb21PcHRpb25JdGVtTWFwKGl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXApO1xuICAgIH0gZWxzZSBpZiAoaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBpdGVtLm9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlID1cbiAgICAgICAgICAhIWFjdGlvbiAmJiBhY3Rpb24gPT09ICdBREQnID8gb3B0aW9uLnNlbGVjdGVkIHx8ICghIWl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5zb21lKCh2KSA9PiB2ID09PSBvcHRpb24ub3B0aW9uLmlkKSkgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHVzaENvbmRpdGlvblRvQXJyYXkoaXRlbS5pbnN0YW5jZUlkLCBvcHRpb24uZW5hYmxlZEl0ZW1zLCBvcHRpb24uZGlzYWJsZWRJdGVtcywgY2hhbmdlcywgaW50ZXJuYWxJZE1hcCwgZW5hYmxlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1aWxkQXJyYXlGcm9tT3B0aW9uSXRlbU1hcChpdGVtLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXAsIGFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBDb25kaXRpb25DaGFuZ2VzIGZyb20gYW4gaXRlbSdzIG9wdGlvbkl0ZW1NYXBcbiAgICogQHBhcmFtIGl0ZW0gRm9ybUl0ZW0gd2l0aCBhbiBvcHRpb25JdGVtTWFwXG4gICAqIEBwYXJhbSBjb25kaXRpb25zIEFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gcHVzaCBvbiBuZXcgY2hhbmdlc1xuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgZXhpc2l0aW5nIGluIGFuIGl0ZW07IGluIG9yZGVyIHRvIGV4Y2x1ZGUgdGhlbSBmcm9tIHRoZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBhY3Rpb24gV2hldGhlciBhbiBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEFycmF5RnJvbU9wdGlvbkl0ZW1NYXAoXG4gICAgaXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjb25kaXRpb25zOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+LFxuICAgIGl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuICAgIGFjdGlvbj86IE10bmFXZkZvcm1JdGVtQ2hhbmdlQWN0aW9uXG4gICkge1xuICAgIGlmIChpdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gaXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgICAgICBjb25zdCBzdWJJdGVtID0gaXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNvbmRpdGlvbnMsIGl0ZW1NYXAsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIGEgbmV3IENvbmRpdGlvbkNoYW5nZSBvbnRvIHRoZSBjb25kaXRpb25zIGFycmF5LiBJZiBhIENvbmRpdGlvbkNoYW5nZSB3aXRoIG1hdGNoaW5nIGlkIGV4aXN0cyxcbiAgICogaXQgbWVyZ2VzIHRoZSBuZXcgdmFsdWVzIGludG8gaXRcbiAgICogQHBhcmFtIGVuYWJsZXJJZCBpbnN0YW5jZUlkIG9mIHRoZSBpdGVtIHRoYXQgZW5hYmxlcyBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGVuYWJsZWQgdGhlIGl0ZW0ncyAnZW5hYmxlZEl0ZW1zJyBhcnJheVxuICAgKiBAcGFyYW0gZGlzYWJsZWQgdGhlIGl0ZW0ncyAnZGlzYWJsZWRJdGVtcycgYXJyYXlcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgQXJyYXkgb2YgQ29uZGl0aW9uQ2hhbmdlcyB0byBidWlsZCB1cFxuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgaW5zaWRlIGFuIGl0ZW07IHRvIGVuc3VyZSBubyBpbnRlcm5hbCBpZHMgYXJlIGluY2x1ZGVkIGluIGEgY2hhbmdlXG4gICAqIEBwYXJhbSBlbmFibGUgV2hldGhlciB0aGUgJ2VuYWJsZWRJdGVtcycgc2hvdWxkIHRvZ2dsZWQgZW5hYmxlZFxuICAgKi9cbiAgcHJpdmF0ZSBfcHVzaENvbmRpdGlvblRvQXJyYXkoXG4gICAgZW5hYmxlcklkOiBzdHJpbmcsXG4gICAgZW5hYmxlZDogc3RyaW5nW10sXG4gICAgZGlzYWJsZWQ6IHN0cmluZ1tdLFxuICAgIGNvbmRpdGlvbnM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaXRlbU1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgZW5hYmxlOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGVuYWJsZWQuZmlsdGVyKChlKSA9PiAhaXRlbU1hcFtlXSk7XG4gICAgY29uc3QgZGlzYWJsZWRJdGVtcyA9IGRpc2FibGVkLmZpbHRlcigoZCkgPT4gIWl0ZW1NYXBbZF0pO1xuICAgIGlmICghIWVuYWJsZWRJdGVtcy5sZW5ndGggfHwgISFkaXNhYmxlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5kZXggPSBjb25kaXRpb25zLmZpbmRJbmRleCgoYykgPT4gYy5lbmFibGVySWQgPT09IGVuYWJsZXJJZCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGVuYWJsZXJJZDogZW5hYmxlcklkLCBlbmFibGVkSXRlbXMsIGRpc2FibGVkSXRlbXMsIGVuYWJsZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjb25kaXRpb25zW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV3SWQ6IENvbmRpdGlvbkNoYW5nZSA9IHtcbiAgICAgICAgICBlbmFibGVySWQsXG4gICAgICAgICAgZW5hYmxlZEl0ZW1zOiBbLi4ucHJldi5lbmFibGVkSXRlbXMsIC4uLmVuYWJsZWRJdGVtc10sXG4gICAgICAgICAgZGlzYWJsZWRJdGVtczogWy4uLnByZXYuZGlzYWJsZWRJdGVtcywgLi4uZGlzYWJsZWRJdGVtc10sXG4gICAgICAgICAgZW5hYmxlLFxuICAgICAgICB9O1xuICAgICAgICBjb25kaXRpb25zLnNwbGljZShpbmRleCwgMSwgbmV3SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHNlcnZpY2UuXG4gICAqIFJldmFsaWRhdGUgZm9ybSBjb250cm9scyB0aGF0IHByZXZpb3VzbHkgaGFkIGVycm9ycyBvciBoYXZlIG5ldyBlcnJvcnMgbm93LlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlU2VydmVyU2lkZUVycm9ycygpIHtcbiAgICAvLyBLZWVwIHRyYWNrIG9mIElEcyBmb3IgZWFjaCBjb250cm9sIHRoYXQgbmVlZHMgdG8gYmUgcmV2YWxpZGF0ZWRcbiAgICBjb25zdCBjb250cm9sSWRzVG9SZXZhbGlkYXRlID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBDb2xsZWN0IGNvbnRyb2xzIHByZXZpb3VzbHkgaW4gZXJyb3IgdG8gcmV2YWxpZGF0ZVxuICAgIGlmICh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLCBpZCkpIHtcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBvdXQgYWxsIHByZXZpb3VzIHN0b3JlZCBlcnJvcnNcbiAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzID0ge307XG4gICAgaWYgKHRoaXMuX210bmFGb3JtPy52YWxpZGF0aW9uUmVzdWx0KSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0aGlzLl9tdG5hRm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uU3RhdHVzID09PSAnRVJST1JTJykge1xuICAgICAgICAgIC8vIFN0b3JlIGVycm9ycyBzbyB0aGF0IHRoZSB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIGNhbiB2YWxpZGF0ZSBlYWNoIGNvbnRyb2xcbiAgICAgICAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzW3Jlc3VsdC5pZF0gPSByZXN1bHQ7XG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZXZhbGlkYXRlIHRoZXNlIGNvbnRyb2xzIHRoYXQgaGF2ZSBlcnJvcnNcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChyZXN1bHQuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSByZXZhbGlkYXRlIGNvbnRyb2xzIGFjdHVhbGx5IGNoYW5nZXNcbiAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBjb250cm9sSWRzVG9SZXZhbGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaW5kRm9ybUNvbnRyb2woaWQsIGZvcm0pO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -2,6 +2,12 @@ import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { skipWhile, take } from 'rxjs/operators';
4
4
  import * as i0 from "@angular/core";
5
+ /**
6
+ * This service manages and interacts with an Angular FormGroup. It provides functionality
7
+ * to add or remove form controls dynamically, track the form's state, and notify other
8
+ * components about unsaved changes. This service is used to centralize form handling and
9
+ * state management, providing a reliableway to monitor and respond to form changes.
10
+ */
5
11
  export class MtnaWfNgFormService {
6
12
  constructor() {
7
13
  this.unsavedChanges$ = new BehaviorSubject(false);
@@ -147,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
147
153
  type: Injectable,
148
154
  args: [{ providedIn: 'root' }]
149
155
  }] });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL25nLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxlQUFlLEVBQXFDLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBR2pELE1BQU0sT0FBTyxtQkFBbUI7SUFEaEM7UUFHVSxvQkFBZSxHQUFxQixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztLQTBKakY7SUF2SkM7O09BRUc7SUFDSCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBQyxTQUFpQixFQUFFLFNBQW1CLEVBQUUsVUFBMkI7UUFDNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFjLENBQUM7UUFDOUQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEQsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlCLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsU0FBaUIsRUFBRSxTQUFtQjtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFP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QSxTQUFTLENBQUMsR0FBRyxFQUFFLFdBQUMsT0FBQSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLEtBQUssQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7WUFDMUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzVDO0lBQ0gsQ0FBQzs7aUhBM0pVLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRE4sTUFBTTs0RkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE10bmFXZk5nRm9ybVNlcnZpY2Uge1xuICBwcml2YXRlIG5nRm9ybTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVuc2F2ZWRDaGFuZ2VzJDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEluZm9ybXMgYSBjYWxsZXIgd2hlbiB0aGUgTXRuYUZvcm0gaXMgZGlydHkgYW5kIGhhcyB1bnNhdmVkIGNoYW5nZXMuXG4gICAqL1xuICBnZXQgdW5zYXZlZENoYW5nZXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMudW5zYXZlZENoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbnRyb2wgZnJvbSB0aGUgbmdGb3JtXG4gICAqIEBwYXJhbSBjb250cm9sSWQgaWQgb2YgdGhlIGNvbnRyb2wgYmVpbmcgYWRkZWRcbiAgICogQHBhcmFtIHBhcmVudElkcyBhcnJheSBvZiBpZHMgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSBwYXJlbnQgY29udHJvbFxuICAgKiBAcGFyYW0gbmV3Q29udHJvbCB0aGUgbmV3IGZvcm0gY29udHJvbCB0byBiZSBhZGRlZFxuICAgKi9cbiAgYWRkQ29udHJvbChjb250cm9sSWQ6IHN0cmluZywgcGFyZW50SWRzOiBzdHJpbmdbXSwgbmV3Q29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCF0aGlzLm5nRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudENvbnRyb2wgPSB0aGlzLm5nRm9ybS5nZXQocGFyZW50SWRzKSBhcyBGb3JtR3JvdXA7XG4gICAgcGFyZW50Q29udHJvbC5hZGRDb250cm9sKGNvbnRyb2xJZCwgbmV3Q29udHJvbCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9yY2VVbnNhdmVkQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29udHJvbCBmcm9tIHRoZSBuZ0Zvcm0uXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sSWQgaXMgb2YgdGhlIGNvbnRyb2wgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBwYXJlbnRJZHMgcnJheSBvZiBpZHMgcmVwcmVzZW50aW5nIHRoZSBwYXRoIHRvIHRoZSBwYXJlbnQgY29udHJvbFxuICAgKi9cbiAgcmVtb3ZlQ29udHJvbChjb250cm9sSWQ6IHN0cmluZywgcGFyZW50SWRzOiBzdHJpbmdbXSkge1xuICAgIGlmICghdGhpcy5uZ0Zvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRDb250cm9sID0gdGhpcy5uZ0Zvcm0uZ2V0KHBhcmVudElkcykgYXMgRm9ybUdyb3VwO1xuICAgIHBhcmVudENvbnRyb2wucmVtb3ZlQ29udHJvbChjb250cm9sSWQpO1xuICAgIHBhcmVudENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIHBhcmVudENvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcmNlVW5zYXZlZENoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZm9ybSBpZiBpdCBleGlzdHNcbiAgICogQHJldHVybnMgdGhlIGFuZ3VsYXIgZm9ybSBvciBudWxsXG4gICAqL1xuICBnZXRGb3JtKCk6IEZvcm1Hcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubmdGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGZvcm0gdmFsdWVzXG4gICAqL1xuICBnZXRGb3JtVmFsdWUoKSB7XG4gICAgLy8gVGhpcyBpbmNsdWRlcyB2YWx1ZXMgZm9yIGRpc2FibGVkIGNvbnRyb2xzLlxuICAgIC8vIFdlIGxvb3AgdGhyb3VnaCBNdG5hRm9ybSB0byBpbnNlcnQgdmFsdWVzLFxuICAgIC8vIHNvIHdlIG5lZWQgdGhlIGRpc2FibGVkIGNvbnRyb2xzIHRvIGVuc3VyZSBubyBpbmZvIGxvc3MuXG4gICAgcmV0dXJuIHRoaXMubmdGb3JtPy5nZXRSYXdWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYSBmb3JtIGhhcyBiZWVuIHNldCBvbiB0aGlzIHNlcnZpY2VcbiAgICovXG4gIGhhc0Zvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5uZ0Zvcm07XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgZm9ybSBpcyBkaXJ0eS5cbiAgICovXG4gIGlzRm9ybURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubmdGb3JtICYmIHRoaXMubmdGb3JtLmRpcnR5O1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlcyBmcm9tIHZhbHVlIGNoYW5nZXMgJiBzZXRzIHRoZSBuZ0Zvcm0gdG8gbnVsbC5cbiAgICogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGFueSBjb21wb25lbnQgdXNpbmcgYW4gTXRuYUZvcm0gaXMgZGVzdHJveWVkLlxuICAgKi9cbiAgZGlzcG9zZUZvcm0oKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMubmdGb3JtID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgdW5zYXZlZENoYW5nZXMgb2JzZXJ2YWJsZSB0byBlbWl0IHRydWUuXG4gICAqIFVzZSB3aXRoIGNhcmUsIG9uZSBleGFtcGxlIGlzIHdoZW4gcmVwZWF0YWJsZSBpdGVtcyBhcmUgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBmb3JtLlxuICAgKi9cbiAgZm9yY2VVbnNhdmVkQ2hhbmdlKCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVWYWx1ZUNoYW5nZXMoKTtcbiAgICB0aGlzLnVuc2F2ZWRDaGFuZ2VzJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIG5nRm9ybSBhcyBwcmlzdGluZSAmIHVudG91Y2hlZC5cbiAgICovXG4gIG1hcmtBc1ByaXN0aW5lQW5kVW50b3VjaGVkKCkge1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy5uZ0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubmdGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybS5kaXJ0eSk7XG4gICAgICB0aGlzLm9ic2VydmVOZ0Zvcm1DaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgbmdGb3JtLlxuICAgKi9cbiAgcmVzZXRGb3JtKCkge1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy5uZ0Zvcm0ucmVzZXQoKTtcbiAgICAgIHRoaXMudW5zYXZlZENoYW5nZXMkLm5leHQodGhpcy5uZ0Zvcm0uZGlydHkpO1xuICAgICAgdGhpcy5vYnNlcnZlTmdGb3JtQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgRm9ybUdyb3VwIG9uIHRoZSBzZXJ2aWNlIHNvIGFuIGV4dGVybmFsIHNvdXJjZSBtYXkgb2JzZXJ2ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gbmdGb3JtIEZvcm1Hcm91cCB0byBiZSByZWdpc3RlcmVkLlxuICAgKi9cbiAgc2V0Rm9ybShuZ0Zvcm06IEZvcm1Hcm91cCkge1xuICAgIHRoaXMubmdGb3JtID0gbmdGb3JtO1xuICAgIHRoaXMudW5zYXZlZENoYW5nZXMkLm5leHQodGhpcy5uZ0Zvcm0uZGlydHkpO1xuICAgIGlmICh0aGlzLm5nRm9ybS5wcmlzdGluZSkge1xuICAgICAgdGhpcy5vYnNlcnZlTmdGb3JtQ2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmVzIHRvIG5nRm9ybSBzdGF0dXMgY2hhbmdlcyAmIHVwZGF0ZXMgdGhlIHVuc2F2ZWRDaGFuZ2VzIG9ic2VydmFibGVcbiAgICovXG4gIHByaXZhdGUgb2JzZXJ2ZU5nRm9ybUNoYW5nZXMoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpO1xuICAgIGlmICh0aGlzLm5nRm9ybSkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubmdGb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwV2hpbGUoKCkgPT4gKHRoaXMubmdGb3JtID8gdGhpcy5uZ0Zvcm0ucHJpc3RpbmUgOiB0cnVlKSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybT8uZGlydHkpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgbmdGb3JtIHN0YXR1cyBjaGFuZ2Ugc3Vic2NyaXB0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpIHtcbiAgICBpZiAoISF0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uICYmICF0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2ViLWZvcm0tYW5ndWxhci9zcmMvbGliL3NlcnZpY2VzL25nLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQXFDLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRWpEOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQUdVLG9CQUFlLEdBQXFCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0tBMEpqRjtJQXZKQzs7T0FFRztJQUNILElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLFNBQWlCLEVBQUUsU0FBbUIsRUFBRSxVQUEyQjtRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFPO1NBQ1I7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQWMsQ0FBQztRQUM5RCxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUIsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxTQUFpQixFQUFFLFNBQW1CO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxF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Q0FBQyxDQUNSO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsV0FBQyxPQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQUEsSUFBSSxDQUFDLE1BQU0sMENBQUUsS0FBSyxDQUFDLENBQUEsRUFBQSxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRTtZQUMxRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUM7SUFDSCxDQUFDOztpSEEzSlUsbUJBQW1CO3FIQUFuQixtQkFBbUIsY0FETixNQUFNOzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIFRoaXMgc2VydmljZSBtYW5hZ2VzIGFuZCBpbnRlcmFjdHMgd2l0aCBhbiBBbmd1bGFyIEZvcm1Hcm91cC4gSXQgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eVxuICogdG8gYWRkIG9yIHJlbW92ZSBmb3JtIGNvbnRyb2xzIGR5bmFtaWNhbGx5LCB0cmFjayB0aGUgZm9ybSdzIHN0YXRlLCBhbmQgbm90aWZ5IG90aGVyXG4gKiBjb21wb25lbnRzIGFib3V0IHVuc2F2ZWQgY2hhbmdlcy4gVGhpcyBzZXJ2aWNlIGlzIHVzZWQgdG8gY2VudHJhbGl6ZSBmb3JtIGhhbmRsaW5nIGFuZFxuICogc3RhdGUgbWFuYWdlbWVudCwgcHJvdmlkaW5nIGEgcmVsaWFibGV3YXkgdG8gbW9uaXRvciBhbmQgcmVzcG9uZCB0byBmb3JtIGNoYW5nZXMuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTXRuYVdmTmdGb3JtU2VydmljZSB7XG4gIHByaXZhdGUgbmdGb3JtOiBGb3JtR3JvdXAgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdW5zYXZlZENoYW5nZXMkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5mb3JtcyBhIGNhbGxlciB3aGVuIHRoZSBNdG5hRm9ybSBpcyBkaXJ0eSBhbmQgaGFzIHVuc2F2ZWQgY2hhbmdlcy5cbiAgICovXG4gIGdldCB1bnNhdmVkQ2hhbmdlcygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy51bnNhdmVkQ2hhbmdlcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY29udHJvbCBmcm9tIHRoZSBuZ0Zvcm1cbiAgICogQHBhcmFtIGNvbnRyb2xJZCBpZCBvZiB0aGUgY29udHJvbCBiZWluZyBhZGRlZFxuICAgKiBAcGFyYW0gcGFyZW50SWRzIGFycmF5IG9mIGlkcyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIHBhcmVudCBjb250cm9sXG4gICAqIEBwYXJhbSBuZXdDb250cm9sIHRoZSBuZXcgZm9ybSBjb250cm9sIHRvIGJlIGFkZGVkXG4gICAqL1xuICBhZGRDb250cm9sKGNvbnRyb2xJZDogc3RyaW5nLCBwYXJlbnRJZHM6IHN0cmluZ1tdLCBuZXdDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICBpZiAoIXRoaXMubmdGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50Q29udHJvbCA9IHRoaXMubmdGb3JtLmdldChwYXJlbnRJZHMpIGFzIEZvcm1Hcm91cDtcbiAgICBwYXJlbnRDb250cm9sLmFkZENvbnRyb2woY29udHJvbElkLCBuZXdDb250cm9sKTtcbiAgICBwYXJlbnRDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBwYXJlbnRDb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JjZVVuc2F2ZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjb250cm9sIGZyb20gdGhlIG5nRm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBpcyBvZiB0aGUgY29udHJvbCB0byByZW1vdmVcbiAgICogQHBhcmFtIHBhcmVudElkcyBycmF5IG9mIGlkcyByZXByZXNlbnRpbmcgdGhlIHBhdGggdG8gdGhlIHBhcmVudCBjb250cm9sXG4gICAqL1xuICByZW1vdmVDb250cm9sKGNvbnRyb2xJZDogc3RyaW5nLCBwYXJlbnRJZHM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKCF0aGlzLm5nRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudENvbnRyb2wgPSB0aGlzLm5nRm9ybS5nZXQocGFyZW50SWRzKSBhcyBGb3JtR3JvdXA7XG4gICAgcGFyZW50Q29udHJvbC5yZW1vdmVDb250cm9sKGNvbnRyb2xJZCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgcGFyZW50Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9yY2VVbnNhdmVkQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmb3JtIGlmIGl0IGV4aXN0c1xuICAgKiBAcmV0dXJucyB0aGUgYW5ndWxhciBmb3JtIG9yIG51bGxcbiAgICovXG4gIGdldEZvcm0oKTogRm9ybUdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5uZ0Zvcm07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgZm9ybSB2YWx1ZXNcbiAgICovXG4gIGdldEZvcm1WYWx1ZSgpIHtcbiAgICAvLyBUaGlzIGluY2x1ZGVzIHZhbHVlcyBmb3IgZGlzYWJsZWQgY29udHJvbHMuXG4gICAgLy8gV2UgbG9vcCB0aHJvdWdoIE10bmFGb3JtIHRvIGluc2VydCB2YWx1ZXMsXG4gICAgLy8gc28gd2UgbmVlZCB0aGUgZGlzYWJsZWQgY29udHJvbHMgdG8gZW5zdXJlIG5vIGluZm8gbG9zcy5cbiAgICByZXR1cm4gdGhpcy5uZ0Zvcm0/LmdldFJhd1ZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgV2hldGhlciBhIGZvcm0gaGFzIGJlZW4gc2V0IG9uIHRoaXMgc2VydmljZVxuICAgKi9cbiAgaGFzRm9ybSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLm5nRm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmb3JtIGlzIGRpcnR5LlxuICAgKi9cbiAgaXNGb3JtRGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5uZ0Zvcm0gJiYgdGhpcy5uZ0Zvcm0uZGlydHk7XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmVzIGZyb20gdmFsdWUgY2hhbmdlcyAmIHNldHMgdGhlIG5nRm9ybSB0byBudWxsLlxuICAgKiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gYW55IGNvbXBvbmVudCB1c2luZyBhbiBNdG5hRm9ybSBpcyBkZXN0cm95ZWQuXG4gICAqL1xuICBkaXNwb3NlRm9ybSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlVmFsdWVDaGFuZ2VzKCk7XG4gICAgdGhpcy5uZ0Zvcm0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSB1bnNhdmVkQ2hhbmdlcyBvYnNlcnZhYmxlIHRvIGVtaXQgdHJ1ZS5cbiAgICogVXNlIHdpdGggY2FyZSwgb25lIGV4YW1wbGUgaXMgd2hlbiByZXBlYXRhYmxlIGl0ZW1zIGFyZSBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGZvcm0uXG4gICAqL1xuICBmb3JjZVVuc2F2ZWRDaGFuZ2UoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVZhbHVlQ2hhbmdlcygpO1xuICAgIHRoaXMudW5zYXZlZENoYW5nZXMkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgbmdGb3JtIGFzIHByaXN0aW5lICYgdW50b3VjaGVkLlxuICAgKi9cbiAgbWFya0FzUHJpc3RpbmVBbmRVbnRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMubmdGb3JtKSB7XG4gICAgICB0aGlzLm5nRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgdGhpcy5uZ0Zvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLnVuc2F2ZWRDaGFuZ2VzJC5uZXh0KHRoaXMubmdGb3JtLmRpcnR5KTtcbiAgICAgIHRoaXMub2JzZXJ2ZU5nRm9ybUNoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBuZ0Zvcm0uXG4gICAqL1xuICByZXNldEZvcm0oKSB7XG4gICAgaWYgKHRoaXMubmdGb3JtKSB7XG4gICAgICB0aGlzLm5nRm9ybS5yZXNldCgpO1xuICAgICAgdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybS5kaXJ0eSk7XG4gICAgICB0aGlzLm9ic2VydmVOZ0Zvcm1DaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBGb3JtR3JvdXAgb24gdGhlIHNlcnZpY2Ugc28gYW4gZXh0ZXJuYWwgc291cmNlIG1heSBvYnNlcnZlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBuZ0Zvcm0gRm9ybUdyb3VwIHRvIGJlIHJlZ2lzdGVyZWQuXG4gICAqL1xuICBzZXRGb3JtKG5nRm9ybTogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy5uZ0Zvcm0gPSBuZ0Zvcm07XG4gICAgdGhpcy51bnNhdmVkQ2hhbmdlcyQubmV4dCh0aGlzLm5nRm9ybS5kaXJ0eSk7XG4gICAgaWYgKHRoaXMubmdGb3JtLnByaXN0aW5lKSB7XG4gICAgICB0aGlzLm9ic2VydmVOZ0Zvcm1DaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gbmdGb3JtIHN0YXR1cyBjaGFuZ2VzICYgdXBkYXRlcyB0aGUgdW5zYXZlZENoYW5nZXMgb2JzZXJ2YWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBvYnNlcnZlTmdGb3JtQ2hhbmdlcygpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlVmFsdWVDaGFuZ2VzKCk7XG4gICAgaWYgKHRoaXMubmdGb3JtKSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5uZ0Zvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHNraXBXaGlsZSgoKSA9PiAodGhpcy5uZ0Zvcm0gPyB0aGlzLm5nRm9ybS5wcmlzdGluZSA6IHRydWUpKSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVuc2F2ZWRDaGFuZ2VzJC5uZXh0KHRoaXMubmdGb3JtPy5kaXJ0eSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBuZ0Zvcm0gc3RhdHVzIGNoYW5nZSBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBwcml2YXRlIHVuc3Vic2NyaWJlVmFsdWVDaGFuZ2VzKCkge1xuICAgIGlmICghIXRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24gJiYgIXRoaXMudmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=