@pepperi-addons/ngx-composite-lib 0.4.2-beta.6 → 0.4.2-beta.61

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 (130) hide show
  1. package/color-settings/color-settings.component.d.ts +3 -2
  2. package/core/common/services/dimx.service.d.ts +4 -0
  3. package/esm2020/color-settings/color-settings.component.mjs +6 -3
  4. package/esm2020/core/common/directives/reset-configuration-field.directive.mjs +5 -4
  5. package/esm2020/core/common/services/dimx.service.mjs +1 -1
  6. package/esm2020/data-view-builder/data-view-builder.component.mjs +1 -1
  7. package/esm2020/file-status-panel/file-status-panel.module.mjs +23 -3
  8. package/esm2020/flow-picker-button/flow-picker-button.component.mjs +91 -0
  9. package/esm2020/flow-picker-button/flow-picker-button.module.mjs +36 -0
  10. package/esm2020/flow-picker-button/flow-picker-button.service.mjs +21 -0
  11. package/esm2020/flow-picker-button/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs +5 -0
  12. package/esm2020/flow-picker-button/public-api.mjs +6 -0
  13. package/esm2020/generic-form/generic-form.component.mjs +3 -3
  14. package/esm2020/generic-list/generic-list.component.mjs +64 -7
  15. package/esm2020/generic-list/generic-list.service.mjs +6 -2
  16. package/esm2020/group-buttons-settings/group-buttons-settings.component.mjs +17 -4
  17. package/esm2020/group-buttons-settings/group-buttons-settings.model.mjs +1 -1
  18. package/esm2020/icon-picker/icon-picker.component.mjs +79 -0
  19. package/esm2020/icon-picker/icon-picker.module.mjs +44 -0
  20. package/esm2020/icon-picker/icon-picker.service.mjs +17 -0
  21. package/esm2020/icon-picker/pepperi-addons-ngx-composite-lib-icon-picker.mjs +5 -0
  22. package/esm2020/icon-picker/public-api.mjs +6 -0
  23. package/esm2020/manage-parameters/manage-parameter/manage-parameter.component.mjs +82 -0
  24. package/esm2020/manage-parameters/manage-parameters.component.mjs +153 -0
  25. package/esm2020/manage-parameters/manage-parameters.model.mjs +24 -0
  26. package/esm2020/manage-parameters/manage-parameters.module.mjs +45 -0
  27. package/esm2020/manage-parameters/manage-parameters.service.mjs +142 -0
  28. package/esm2020/manage-parameters/pepperi-addons-ngx-composite-lib-manage-parameters.mjs +5 -0
  29. package/esm2020/manage-parameters/public-api.mjs +8 -0
  30. package/esm2020/rich-text/pepperi-addons-ngx-composite-lib-rich-text.mjs +5 -0
  31. package/esm2020/rich-text/public-api.mjs +6 -0
  32. package/esm2020/rich-text/rich-text.component.mjs +154 -0
  33. package/esm2020/rich-text/rich-text.module.mjs +52 -0
  34. package/esm2020/rich-text/rich-text.service.mjs +21 -0
  35. package/esm2020/shadow-settings/shadow-settings.component.mjs +7 -4
  36. package/esm2020/show-if-badge/pepperi-addons-ngx-composite-lib-show-if-badge.mjs +5 -0
  37. package/esm2020/show-if-badge/public-api.mjs +6 -0
  38. package/esm2020/show-if-badge/show-if-badge.component.mjs +44 -0
  39. package/esm2020/show-if-badge/show-if-badge.module.mjs +50 -0
  40. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.mjs +5 -2
  41. package/fesm2015/pepperi-addons-ngx-composite-lib-color-settings.mjs.map +1 -1
  42. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +1 -1
  43. package/fesm2015/pepperi-addons-ngx-composite-lib-data-view-builder.mjs.map +1 -1
  44. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +22 -3
  45. package/fesm2015/pepperi-addons-ngx-composite-lib-file-status-panel.mjs.map +1 -1
  46. package/fesm2015/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs +158 -0
  47. package/fesm2015/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs.map +1 -0
  48. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.mjs +2 -2
  49. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-form.mjs.map +1 -1
  50. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.mjs +70 -7
  51. package/fesm2015/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -1
  52. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +16 -3
  53. package/fesm2015/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs.map +1 -1
  54. package/fesm2015/pepperi-addons-ngx-composite-lib-icon-picker.mjs +146 -0
  55. package/fesm2015/pepperi-addons-ngx-composite-lib-icon-picker.mjs.map +1 -0
  56. package/fesm2015/pepperi-addons-ngx-composite-lib-manage-parameters.mjs +441 -0
  57. package/fesm2015/pepperi-addons-ngx-composite-lib-manage-parameters.mjs.map +1 -0
  58. package/fesm2015/pepperi-addons-ngx-composite-lib-rich-text.mjs +234 -0
  59. package/fesm2015/pepperi-addons-ngx-composite-lib-rich-text.mjs.map +1 -0
  60. package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +6 -3
  61. package/fesm2015/pepperi-addons-ngx-composite-lib-shadow-settings.mjs.map +1 -1
  62. package/fesm2015/pepperi-addons-ngx-composite-lib-show-if-badge.mjs +100 -0
  63. package/fesm2015/pepperi-addons-ngx-composite-lib-show-if-badge.mjs.map +1 -0
  64. package/fesm2015/pepperi-addons-ngx-composite-lib.mjs +4 -3
  65. package/fesm2015/pepperi-addons-ngx-composite-lib.mjs.map +1 -1
  66. package/fesm2020/pepperi-addons-ngx-composite-lib-color-settings.mjs +5 -2
  67. package/fesm2020/pepperi-addons-ngx-composite-lib-color-settings.mjs.map +1 -1
  68. package/fesm2020/pepperi-addons-ngx-composite-lib-data-view-builder.mjs +1 -1
  69. package/fesm2020/pepperi-addons-ngx-composite-lib-data-view-builder.mjs.map +1 -1
  70. package/fesm2020/pepperi-addons-ngx-composite-lib-file-status-panel.mjs +22 -3
  71. package/fesm2020/pepperi-addons-ngx-composite-lib-file-status-panel.mjs.map +1 -1
  72. package/fesm2020/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs +152 -0
  73. package/fesm2020/pepperi-addons-ngx-composite-lib-flow-picker-button.mjs.map +1 -0
  74. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-form.mjs +2 -2
  75. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-form.mjs.map +1 -1
  76. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs +68 -7
  77. package/fesm2020/pepperi-addons-ngx-composite-lib-generic-list.mjs.map +1 -1
  78. package/fesm2020/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs +16 -3
  79. package/fesm2020/pepperi-addons-ngx-composite-lib-group-buttons-settings.mjs.map +1 -1
  80. package/fesm2020/pepperi-addons-ngx-composite-lib-icon-picker.mjs +145 -0
  81. package/fesm2020/pepperi-addons-ngx-composite-lib-icon-picker.mjs.map +1 -0
  82. package/fesm2020/pepperi-addons-ngx-composite-lib-manage-parameters.mjs +438 -0
  83. package/fesm2020/pepperi-addons-ngx-composite-lib-manage-parameters.mjs.map +1 -0
  84. package/fesm2020/pepperi-addons-ngx-composite-lib-rich-text.mjs +230 -0
  85. package/fesm2020/pepperi-addons-ngx-composite-lib-rich-text.mjs.map +1 -0
  86. package/fesm2020/pepperi-addons-ngx-composite-lib-shadow-settings.mjs +6 -3
  87. package/fesm2020/pepperi-addons-ngx-composite-lib-shadow-settings.mjs.map +1 -1
  88. package/fesm2020/pepperi-addons-ngx-composite-lib-show-if-badge.mjs +100 -0
  89. package/fesm2020/pepperi-addons-ngx-composite-lib-show-if-badge.mjs.map +1 -0
  90. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs +4 -3
  91. package/fesm2020/pepperi-addons-ngx-composite-lib.mjs.map +1 -1
  92. package/flow-picker-button/flow-picker-button.component.d.ts +25 -0
  93. package/flow-picker-button/flow-picker-button.module.d.ts +11 -0
  94. package/flow-picker-button/flow-picker-button.service.d.ts +9 -0
  95. package/flow-picker-button/index.d.ts +5 -0
  96. package/flow-picker-button/public-api.d.ts +2 -0
  97. package/generic-list/generic-list.component.d.ts +17 -5
  98. package/generic-list/generic-list.service.d.ts +2 -1
  99. package/group-buttons-settings/group-buttons-settings.component.d.ts +4 -1
  100. package/group-buttons-settings/group-buttons-settings.model.d.ts +1 -1
  101. package/icon-picker/icon-picker.component.d.ts +24 -0
  102. package/icon-picker/icon-picker.module.d.ts +13 -0
  103. package/icon-picker/icon-picker.service.d.ts +8 -0
  104. package/icon-picker/index.d.ts +5 -0
  105. package/icon-picker/public-api.d.ts +2 -0
  106. package/manage-parameters/index.d.ts +5 -0
  107. package/manage-parameters/manage-parameter/manage-parameter.component.d.ts +28 -0
  108. package/manage-parameters/manage-parameters.component.d.ts +33 -0
  109. package/manage-parameters/manage-parameters.model.d.ts +21 -0
  110. package/manage-parameters/manage-parameters.module.d.ts +14 -0
  111. package/manage-parameters/manage-parameters.service.d.ts +16 -0
  112. package/manage-parameters/public-api.d.ts +3 -0
  113. package/package.json +42 -2
  114. package/rich-text/index.d.ts +5 -0
  115. package/rich-text/public-api.d.ts +2 -0
  116. package/rich-text/rich-text.component.d.ts +43 -0
  117. package/rich-text/rich-text.module.d.ts +16 -0
  118. package/rich-text/rich-text.service.d.ts +9 -0
  119. package/shadow-settings/shadow-settings.component.d.ts +2 -1
  120. package/show-if-badge/index.d.ts +5 -0
  121. package/show-if-badge/public-api.d.ts +2 -0
  122. package/show-if-badge/show-if-badge.component.d.ts +20 -0
  123. package/show-if-badge/show-if-badge.module.d.ts +16 -0
  124. package/src/assets/i18n/en.ngx-composite-lib.json +36 -3
  125. package/src/assets/images/brand-leaf-full@1x.png +0 -0
  126. package/src/assets/images/brand-leaf-full@2x.png +0 -0
  127. package/src/assets/images/brand-leaf-round.png +0 -0
  128. package/src/assets/images/brand-leaf-round@2x.png +0 -0
  129. package/src/assets/images/brand-leaf-skiny@1x.png +0 -0
  130. package/src/assets/images/brand-leaf-skiny@2x.png +0 -0
@@ -165,10 +165,10 @@ export class GenericFormComponent {
165
165
  }
166
166
  }
167
167
  GenericFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GenericFormComponent, deps: [{ token: i1.PepLayoutService }, { token: i2.PepGenericFormService }], target: i0.ɵɵFactoryTarget.Component });
168
- GenericFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: GenericFormComponent, selector: "pep-generic-form", inputs: { dataSource: "dataSource", dataView: "dataView", isLocked: "isLocked", inline: "inline", showTopBar: "showTopBar", addPadding: "addPadding" }, outputs: { valueChange: "valueChange", fieldClick: "fieldClick", formValidationChange: "formValidationChange" }, providers: [PepGenericFormService], viewQueries: [{ propertyName: "pepListContainer", first: true, predicate: ["pepFormContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n</div>\n\n<pep-page-layout *ngIf=\"!inline\" [addPadding]=\"addPadding\">\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <div pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [inline]=\"inline\"> \n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n\n <!-- <div footer-start-content>\n <ng-content select=\"[bottom-left-buttons]\"></ng-content>\n </div>\n <div footer-end-content>\n <ng-content select=\"[bottom-right-buttons]\"></ng-content>\n </div> -->\n </pep-top-bar>\n</ng-template>\n\n<ng-template #formTemplate>\n <!-- class=\"form-view\" -->\n <div [ngClass]=\"{'form-view': showTopBar}\">\n <ng-container #pepFormContainer></ng-container>\n </div>\n</ng-template>\n", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.PepPageLayoutComponent, selector: "pep-page-layout", inputs: ["addPadding", "showShadow"] }, { kind: "component", type: i5.PepTopBarComponent, selector: "pep-top-bar", inputs: ["inline", "title"], outputs: ["footerStateChange"] }] });
168
+ GenericFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: GenericFormComponent, selector: "pep-generic-form", inputs: { dataSource: "dataSource", dataView: "dataView", isLocked: "isLocked", inline: "inline", showTopBar: "showTopBar", addPadding: "addPadding" }, outputs: { valueChange: "valueChange", fieldClick: "fieldClick", formValidationChange: "formValidationChange" }, providers: [PepGenericFormService], viewQueries: [{ propertyName: "pepListContainer", first: true, predicate: ["pepFormContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n</div>\n\n<pep-page-layout *ngIf=\"!inline\" [addPadding]=\"addPadding\">\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <div pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [inline]=\"inline\"> \n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n\n <!-- <div footer-start-content>\n <ng-content select=\"[bottom-left-buttons]\"></ng-content>\n </div>\n <div footer-end-content>\n <ng-content select=\"[bottom-right-buttons]\"></ng-content>\n </div> -->\n </pep-top-bar>\n</ng-template>\n\n<ng-template #formTemplate>\n <!-- class=\"form-view\" -->\n <div [ngClass]=\"{'form-view': showTopBar, 'padding-bottom': !showTopBar}\">\n <ng-container #pepFormContainer></ng-container>\n </div>\n</ng-template>\n", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}.padding-bottom{padding-bottom:var(--pep-spacing-lg, 1rem)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.PepPageLayoutComponent, selector: "pep-page-layout", inputs: ["addPadding", "showShadow"] }, { kind: "component", type: i5.PepTopBarComponent, selector: "pep-top-bar", inputs: ["inline", "title"], outputs: ["footerStateChange"] }] });
169
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: GenericFormComponent, decorators: [{
170
170
  type: Component,
171
- args: [{ selector: 'pep-generic-form', providers: [PepGenericFormService], template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n</div>\n\n<pep-page-layout *ngIf=\"!inline\" [addPadding]=\"addPadding\">\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <div pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [inline]=\"inline\"> \n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n\n <!-- <div footer-start-content>\n <ng-content select=\"[bottom-left-buttons]\"></ng-content>\n </div>\n <div footer-end-content>\n <ng-content select=\"[bottom-right-buttons]\"></ng-content>\n </div> -->\n </pep-top-bar>\n</ng-template>\n\n<ng-template #formTemplate>\n <!-- class=\"form-view\" -->\n <div [ngClass]=\"{'form-view': showTopBar}\">\n <ng-container #pepFormContainer></ng-container>\n </div>\n</ng-template>\n", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}\n"] }]
171
+ args: [{ selector: 'pep-generic-form', providers: [PepGenericFormService], template: "<div *ngIf=\"inline\" class=\"inline-container\" [ngClass]=\"{ 'add-padding': addPadding }\">\n <div *ngIf=\"showTopBar\" class=\"inline-top-bar-container\">\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n</div>\n\n<pep-page-layout *ngIf=\"!inline\" [addPadding]=\"addPadding\">\n <ng-container *ngIf=\"showTopBar\" pep-top-area>\n <ng-container *ngTemplateOutlet=\"topBarTemplate\"></ng-container>\n </ng-container>\n <div pep-main-area class=\"main-area-container\">\n <ng-container *ngTemplateOutlet=\"formTemplate\"></ng-container>\n </div>\n</pep-page-layout>\n\n<ng-template #topBarTemplate>\n <pep-top-bar [inline]=\"inline\"> \n <div header-start-content>\n <ng-content select=\"[left-buttons]\"></ng-content>\n </div>\n <div header-end-content>\n <ng-content select=\"[right-buttons]\"></ng-content>\n </div>\n\n <!-- <div footer-start-content>\n <ng-content select=\"[bottom-left-buttons]\"></ng-content>\n </div>\n <div footer-end-content>\n <ng-content select=\"[bottom-right-buttons]\"></ng-content>\n </div> -->\n </pep-top-bar>\n</ng-template>\n\n<ng-template #formTemplate>\n <!-- class=\"form-view\" -->\n <div [ngClass]=\"{'form-view': showTopBar, 'padding-bottom': !showTopBar}\">\n <ng-container #pepFormContainer></ng-container>\n </div>\n</ng-template>\n", styles: [":host{height:inherit;display:block}.main-area-container{display:grid;height:inherit}.inline-container{height:inherit;display:grid;grid-template-rows:auto 1fr}.inline-container.add-padding{padding-inline:var(--pep-spacing-lg, 1rem)}.padding-bottom{padding-bottom:var(--pep-spacing-lg, 1rem)}\n"] }]
172
172
  }], ctorParameters: function () { return [{ type: i1.PepLayoutService }, { type: i2.PepGenericFormService }]; }, propDecorators: { pepListContainer: [{
173
173
  type: ViewChild,
174
174
  args: ['pepFormContainer', { read: ViewContainerRef }]
@@ -191,4 +191,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
191
191
  }], formValidationChange: [{
192
192
  type: Output
193
193
  }] } });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtZm9ybS9nZW5lcmljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZ2VuZXJpYy1mb3JtL2dlbmVyaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNoQixZQUFZLEdBRWYsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUNILFNBQVMsRUFDVCxjQUFjLEVBRWQsT0FBTyxFQUVWLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7QUFTL0QsTUFBTSxPQUFPLG9CQUFvQjtJQTJDN0IsWUFDWSxhQUErQixFQUNoQyxtQkFBMEM7UUFEekMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQ2hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUF4QnJELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUdmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFHbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixnQkFBVyxHQUE2QyxJQUFJLFlBQVksRUFBOEIsQ0FBQztRQUd2RyxlQUFVLEdBQTZDLElBQUksWUFBWSxFQUE4QixDQUFDO1FBR3RHLHlCQUFvQixHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBUXRFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFNB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XG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEV2ZW50RW1pdHRlciwgICBcbiAgICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vaW1wb3J0IHsgUGVwRm9ybUNvbXBvbmVudCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBJUGVwR2VuZXJpY0Zvcm1EYXRhVmlldyxcbiAgICBJUGVwR2VuZXJpY0Zvcm1WYWx1ZUNoYW5nZSxcbiAgICBJUGVwR2VuZXJpY0Zvcm1GaWVsZFVwZGF0ZSxcbiAgICBJUGVwR2VuZXJpY0Zvcm1EYXRhXG59IGZyb20gJy4vZ2VuZXJpYy1mb3JtLm1vZGVsJztcbmltcG9ydCB7XG4gICAgVUlDb250cm9sLFxuICAgIE9iamVjdHNEYXRhUm93LFxuICAgIE9iamVjdHNEYXRhUm93Q2VsbCxcbiAgICBQZXBHdWlkLFxuICAgIFBlcExheW91dFNlcnZpY2Vcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgRGF0YVZpZXdDb252ZXJ0ZXIgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvZGF0YS12aWV3cyc7XG5pbXBvcnQgeyBQZXBHZW5lcmljRm9ybVNlcnZpY2UgfSBmcm9tICcuL2dlbmVyaWMtZm9ybS5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1nZW5lcmljLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dlbmVyaWMtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1BlcEdlbmVyaWNGb3JtU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgX3BlcEZvcm1Db250YWluZXI6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XG4gICAgQFZpZXdDaGlsZCgncGVwRm9ybUNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHNldCBwZXBMaXN0Q29udGFpbmVyKHZhbDogVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICB0aGlzLl9wZXBGb3JtQ29udGFpbmVyID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RhdGE6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbDogYW55KSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9ybURhdGE6IE9iamVjdHNEYXRhUm93O1xuICAgIHByaXZhdGUgX3VpQ29udHJvbDogVUlDb250cm9sO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFWaWV3KHZhbDogSVBlcEdlbmVyaWNGb3JtRGF0YVZpZXcpIHtcbiAgICAgICAgdGhpcy5pbml0Rm9ybSh2YWwpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgaXNMb2NrZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgaW5saW5lID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dUb3BCYXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWRkUGFkZGluZyA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwR2VuZXJpY0Zvcm1WYWx1ZUNoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZmllbGRDbGljazogRXZlbnRFbWl0dGVyPElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEdlbmVyaWNGb3JtVmFsdWVDaGFuZ2U+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtVmFsaWRhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBfcGVwRm9ybTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoICAgICAgICBcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgX2dlbmVyaWNGb3JtU2VydmljZTogUGVwR2VuZXJpY0Zvcm1TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSgpLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2Zvcm1EYXRhID0gbmV3IE9iamVjdHNEYXRhUm93KCk7XG4gICAgICAgIHRoaXMuX3VpQ29udHJvbCA9IG5ldyBVSUNvbnRyb2woKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gICAgICAgIFxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEZvcm0oZGF0YVZpZXc6IElQZXBHZW5lcmljRm9ybURhdGFWaWV3KSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BlcEZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGVwRm9ybUNvbnRhaW5lci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVwRm9ybUNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9ybURhdGEgPSBuZXcgT2JqZWN0c0RhdGFSb3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdWlDb250cm9sID0gbmV3IFVJQ29udHJvbCgpO1xuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCB7IFBlcEZvcm1Db21wb25lbnQgfSA9IGF3YWl0IGltcG9ydCgnQHBlcHBlcmktYWRkb25zL25neC1saWIvZm9ybScpOyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX3BlcEZvcm1Db250YWluZXIuY3JlYXRlQ29tcG9uZW50KFBlcEZvcm1Db21wb25lbnQpOyAgICBcblxuICAgICAgICAgICAgICAgIHRoaXMuX3BlcEZvcm0gPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtRGF0YS5Jc0VkaXRhYmxlID0gIXRoaXMuaXNMb2NrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybURhdGEuVUlEID0gZGF0YVZpZXcuVUlEIHx8IFBlcEd1aWQubmV3R3VpZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbERhdGEgPSBEYXRhVmlld0NvbnZlcnRlci50b1VJQ29udHJvbERhdGEoZGF0YVZpZXcpO1xuICAgICAgICAgICAgICAgIGlmICh1aUNvbnRyb2xEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1aUNvbnRyb2xEYXRhPy5Db250cm9sRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91aUNvbnRyb2wuQ29udHJvbEZpZWxkcyA9IHVpQ29udHJvbERhdGEuQ29udHJvbEZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+IHRoaXMuX2dlbmVyaWNGb3JtU2VydmljZS5jb252ZXJ0VG9VaUNvbnRyb2xGaWVsZChmaWVsZCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VpQ29udHJvbC5Db2x1bW5zID0gdWlDb250cm9sRGF0YS5Db2x1bW5zO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl91aUNvbnRyb2wuQ29udHJvbEZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtRGF0YS5GaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VpQ29udHJvbC5Db250cm9sRmllbGRzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2VuZXJpY0Zvcm1TZXJ2aWNlLmhhc1Byb3BlcnR5KHRoaXMuX2RhdGEsIGl0ZW0uQXBpTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9kYXRhW2l0ZW0uQXBpTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhVmlld0ZpZWxkOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFWaWV3LkZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVmlld0ZpZWxkID0gZGF0YVZpZXcuRmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQuRmllbGRJRCA9PT0gaXRlbS5BcGlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEZpZWxkRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkVmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsVmFsdWVzOiBkYXRhVmlld0ZpZWxkPy5PcHRpb25hbFZhbHVlcz8ubGVuZ3RoID8gZGF0YVZpZXdGaWVsZC5PcHRpb25hbFZhbHVlcyA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbFByb3BzOiBkYXRhVmlld0ZpZWxkPy5BZGRpdGlvbmFsUHJvcHMgfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1EYXRhLkZpZWxkcy5wdXNoKHRoaXMuX2dlbmVyaWNGb3JtU2VydmljZS5jcmVhdGVGb3JtRmllbGQoY29udHJvbEZpZWxkRGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5sYXlvdXRUeXBlID0gJ2Zvcm0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxheW91dCA9IHRoaXMuX3VpQ29udHJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRhID0gdGhpcy5fZm9ybURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaXNJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxvY2tGaWVsZHMgPSB0aGlzLmlzTG9ja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZCgkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmllbGRDbGljay5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25maWVsZENsaWNrZWQoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmZvcm1WYWxpZGF0aW9uQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvcm1WYWxpZGF0aW9uQ2hhbmdlZCgkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGVzIGZvcm0gZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSBmaWVsZCBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSBvZiB0aGUgcmVxdWlyZWQgdXBkYXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWVsZFZhbHVlKGZpZWxkQ2hhbmdlZDogSVBlcEdlbmVyaWNGb3JtVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5fZGF0YVtmaWVsZENoYW5nZWQuQXBpTmFtZV0gPSBmaWVsZENoYW5nZWQuVmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0RGF0YSgpOiBJUGVwR2VuZXJpY0Zvcm1EYXRhIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVJRDogdGhpcy5fZm9ybURhdGEuVUlELFxuICAgICAgICAgICAgVmFsdWVzOiB0aGlzLl9kYXRhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiB1cGRhdGVzIGZvcm0gZmllbGQocykgcGFyYW1zXG4gICAgKiBAcGFyYW0gZmllbGRzXG4gICAgKi9cbiAgICB1cGRhdGVGaWVsZHMoZmllbGRzOiBJUGVwR2VuZXJpY0Zvcm1GaWVsZFVwZGF0ZVtdKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBkYXRhIHZpZXcgd2l0aCBjdXJyZW50IGRhdGFcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZm9ybURhdGEuRmllbGRzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5BcGlOYW1lID09PSBrZXkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZm9ybURhdGEuRmllbGRzW2luZGV4XSBhcyB7IFtrOiBzdHJpbmddOiBhbnkgfTtcbiAgICAgICAgICAgICAgICBpdGVtLlZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZm9ybURhdGEuRmllbGRzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5BcGlOYW1lID09PSBmaWVsZC5GaWVsZElkKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGQuUGFyYW1zKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2VuZXJpY0Zvcm1TZXJ2aWNlLmhhc1Byb3BlcnR5KHRoaXMuX2Zvcm1EYXRhLkZpZWxkc1tpbmRleF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9mb3JtRGF0YS5GaWVsZHNbaW5kZXhdIGFzIHsgW2s6IHN0cmluZ106IGFueSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnVmFsdWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tYW51YWxseSB1cGRhdGluZyBmb3JtYXR0ZWRWYWx1ZSBiZWNhdXNlIEZvcm1hdHRlZFZhbHVlIGlzIGxlZ2FjeSB1c2VkIGJ5IHdlYmFwcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uRm9ybWF0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BlcEZvcm0uUmVsb2FkRm9ybSgpXG4gICAgICAgIHRoaXMuX3BlcEZvcm0uZGF0YSA9IHRoaXMuX2Zvcm1EYXRhO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlID0ge1xuICAgICAgICAgICAgVUlEOiBldmVudC5pZCxcbiAgICAgICAgICAgIEFwaU5hbWU6IGV2ZW50LmtleSxcbiAgICAgICAgICAgIFZhbHVlOiBldmVudC52YWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoZmllbGQpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZmllbGQpO1xuICAgIH1cblxuICAgIG9uZmllbGRDbGlja2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlID0ge1xuICAgICAgICAgICAgVUlEOiBldmVudC5pZCxcbiAgICAgICAgICAgIEFwaU5hbWU6IGV2ZW50LmtleSxcbiAgICAgICAgICAgIFZhbHVlOiBldmVudC52YWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoZmllbGQpO1xuICAgICAgICB0aGlzLmZpZWxkQ2xpY2suZW1pdChmaWVsZCk7XG4gICAgfVxuXG4gICAgb25Gb3JtVmFsaWRhdGlvbkNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuXG59XG4iLCI8ZGl2ICpuZ0lmPVwiaW5saW5lXCIgY2xhc3M9XCJpbmxpbmUtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnYWRkLXBhZGRpbmcnOiBhZGRQYWRkaW5nIH1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1RvcEJhclwiIGNsYXNzPVwiaW5saW5lLXRvcC1iYXItY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BCYXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb3JtVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48cGVwLXBhZ2UtbGF5b3V0ICpuZ0lmPVwiIWlubGluZVwiIFthZGRQYWRkaW5nXT1cImFkZFBhZGRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvcEJhclwiIHBlcC10b3AtYXJlYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcEJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBwZXAtbWFpbi1hcmVhIGNsYXNzPVwibWFpbi1hcmVhLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L3BlcC1wYWdlLWxheW91dD5cblxuPG5nLXRlbXBsYXRlICN0b3BCYXJUZW1wbGF0ZT5cbiAgICA8cGVwLXRvcC1iYXIgW2lubGluZV09XCJpbmxpbmVcIj4gXG4gICAgICAgIDxkaXYgaGVhZGVyLXN0YXJ0LWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdC1idXR0b25zXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaGVhZGVyLWVuZC1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIDxkaXYgZm9vdGVyLXN0YXJ0LWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYm90dG9tLWxlZnQtYnV0dG9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZvb3Rlci1lbmQtY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltib3R0b20tcmlnaHQtYnV0dG9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L3BlcC10b3AtYmFyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb3JtVGVtcGxhdGU+XG4gICAgPCEtLSBjbGFzcz1cImZvcm0tdmlld1wiICAtLT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZm9ybS12aWV3Jzogc2hvd1RvcEJhcn1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjcGVwRm9ybUNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2dlbmVyaWMtZm9ybS9nZW5lcmljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvZ2VuZXJpYy1mb3JtL2dlbmVyaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNoQixZQUFZLEdBRWYsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUNILFNBQVMsRUFDVCxjQUFjLEVBRWQsT0FBTyxFQUVWLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7QUFTL0QsTUFBTSxPQUFPLG9CQUFvQjtJQTJDN0IsWUFDWSxhQUErQixFQUNoQyxtQkFBMEM7UUFEekMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQ2hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUF4QnJELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFHakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUdmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFHbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixnQkFBVyxHQUE2QyxJQUFJLFlBQVksRUFBOEIsQ0FBQztRQUd2RyxlQUFVLEdBQTZDLElBQUksWUFBWSxFQUE4QixDQUFDO1FBR3RHLHlCQUFvQixHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBUXRFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFNB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XG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEV2ZW50RW1pdHRlciwgICBcbiAgICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vaW1wb3J0IHsgUGVwRm9ybUNvbXBvbmVudCB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBJUGVwR2VuZXJpY0Zvcm1EYXRhVmlldyxcbiAgICBJUGVwR2VuZXJpY0Zvcm1WYWx1ZUNoYW5nZSxcbiAgICBJUGVwR2VuZXJpY0Zvcm1GaWVsZFVwZGF0ZSxcbiAgICBJUGVwR2VuZXJpY0Zvcm1EYXRhXG59IGZyb20gJy4vZ2VuZXJpYy1mb3JtLm1vZGVsJztcbmltcG9ydCB7XG4gICAgVUlDb250cm9sLFxuICAgIE9iamVjdHNEYXRhUm93LFxuICAgIE9iamVjdHNEYXRhUm93Q2VsbCxcbiAgICBQZXBHdWlkLFxuICAgIFBlcExheW91dFNlcnZpY2Vcbn0gZnJvbSAnQHBlcHBlcmktYWRkb25zL25neC1saWInO1xuaW1wb3J0IHsgRGF0YVZpZXdDb252ZXJ0ZXIgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvZGF0YS12aWV3cyc7XG5pbXBvcnQgeyBQZXBHZW5lcmljRm9ybVNlcnZpY2UgfSBmcm9tICcuL2dlbmVyaWMtZm9ybS5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1nZW5lcmljLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dlbmVyaWMtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1BlcEdlbmVyaWNGb3JtU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgX3BlcEZvcm1Db250YWluZXI6IFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ7XG4gICAgQFZpZXdDaGlsZCgncGVwRm9ybUNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHNldCBwZXBMaXN0Q29udGFpbmVyKHZhbDogVmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICB0aGlzLl9wZXBGb3JtQ29udGFpbmVyID0gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RhdGE6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbDogYW55KSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9ybURhdGE6IE9iamVjdHNEYXRhUm93O1xuICAgIHByaXZhdGUgX3VpQ29udHJvbDogVUlDb250cm9sO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFWaWV3KHZhbDogSVBlcEdlbmVyaWNGb3JtRGF0YVZpZXcpIHtcbiAgICAgICAgdGhpcy5pbml0Rm9ybSh2YWwpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgaXNMb2NrZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgaW5saW5lID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNob3dUb3BCYXIgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWRkUGFkZGluZyA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwR2VuZXJpY0Zvcm1WYWx1ZUNoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyPElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZmllbGRDbGljazogRXZlbnRFbWl0dGVyPElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBlcEdlbmVyaWNGb3JtVmFsdWVDaGFuZ2U+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtVmFsaWRhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcHJpdmF0ZSBfcGVwRm9ybTogYW55O1xuXG4gICAgY29uc3RydWN0b3IoICAgICAgICBcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRTZXJ2aWNlOiBQZXBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgX2dlbmVyaWNGb3JtU2VydmljZTogUGVwR2VuZXJpY0Zvcm1TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5vblJlc2l6ZSQucGlwZSgpLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2Zvcm1EYXRhID0gbmV3IE9iamVjdHNEYXRhUm93KCk7XG4gICAgICAgIHRoaXMuX3VpQ29udHJvbCA9IG5ldyBVSUNvbnRyb2woKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gICAgICAgIFxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEZvcm0oZGF0YVZpZXc6IElQZXBHZW5lcmljRm9ybURhdGFWaWV3KSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BlcEZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGVwRm9ybUNvbnRhaW5lci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVwRm9ybUNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9ybURhdGEgPSBuZXcgT2JqZWN0c0RhdGFSb3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdWlDb250cm9sID0gbmV3IFVJQ29udHJvbCgpO1xuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCB7IFBlcEZvcm1Db21wb25lbnQgfSA9IGF3YWl0IGltcG9ydCgnQHBlcHBlcmktYWRkb25zL25neC1saWIvZm9ybScpOyAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX3BlcEZvcm1Db250YWluZXIuY3JlYXRlQ29tcG9uZW50KFBlcEZvcm1Db21wb25lbnQpOyAgICBcblxuICAgICAgICAgICAgICAgIHRoaXMuX3BlcEZvcm0gPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtRGF0YS5Jc0VkaXRhYmxlID0gIXRoaXMuaXNMb2NrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybURhdGEuVUlEID0gZGF0YVZpZXcuVUlEIHx8IFBlcEd1aWQubmV3R3VpZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVpQ29udHJvbERhdGEgPSBEYXRhVmlld0NvbnZlcnRlci50b1VJQ29udHJvbERhdGEoZGF0YVZpZXcpO1xuICAgICAgICAgICAgICAgIGlmICh1aUNvbnRyb2xEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1aUNvbnRyb2xEYXRhPy5Db250cm9sRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91aUNvbnRyb2wuQ29udHJvbEZpZWxkcyA9IHVpQ29udHJvbERhdGEuQ29udHJvbEZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+IHRoaXMuX2dlbmVyaWNGb3JtU2VydmljZS5jb252ZXJ0VG9VaUNvbnRyb2xGaWVsZChmaWVsZCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VpQ29udHJvbC5Db2x1bW5zID0gdWlDb250cm9sRGF0YS5Db2x1bW5zO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl91aUNvbnRyb2wuQ29udHJvbEZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtRGF0YS5GaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VpQ29udHJvbC5Db250cm9sRmllbGRzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2VuZXJpY0Zvcm1TZXJ2aWNlLmhhc1Byb3BlcnR5KHRoaXMuX2RhdGEsIGl0ZW0uQXBpTmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9kYXRhW2l0ZW0uQXBpTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhVmlld0ZpZWxkOiBhbnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFWaWV3LkZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVmlld0ZpZWxkID0gZGF0YVZpZXcuRmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQuRmllbGRJRCA9PT0gaXRlbS5BcGlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEZpZWxkRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEZpZWxkVmFsdWU6IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsVmFsdWVzOiBkYXRhVmlld0ZpZWxkPy5PcHRpb25hbFZhbHVlcz8ubGVuZ3RoID8gZGF0YVZpZXdGaWVsZC5PcHRpb25hbFZhbHVlcyA6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbFByb3BzOiBkYXRhVmlld0ZpZWxkPy5BZGRpdGlvbmFsUHJvcHMgfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1EYXRhLkZpZWxkcy5wdXNoKHRoaXMuX2dlbmVyaWNGb3JtU2VydmljZS5jcmVhdGVGb3JtRmllbGQoY29udHJvbEZpZWxkRGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5sYXlvdXRUeXBlID0gJ2Zvcm0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxheW91dCA9IHRoaXMuX3VpQ29udHJvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRhID0gdGhpcy5fZm9ybURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaXNJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmxvY2tGaWVsZHMgPSB0aGlzLmlzTG9ja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnZhbHVlQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZCgkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZmllbGRDbGljay5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25maWVsZENsaWNrZWQoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmZvcm1WYWxpZGF0aW9uQ2hhbmdlLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvcm1WYWxpZGF0aW9uQ2hhbmdlZCgkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGVzIGZvcm0gZmllbGQncyB2YWx1ZVxuICAgICAqIEBwYXJhbSBmaWVsZCBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSBvZiB0aGUgcmVxdWlyZWQgdXBkYXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWVsZFZhbHVlKGZpZWxkQ2hhbmdlZDogSVBlcEdlbmVyaWNGb3JtVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5fZGF0YVtmaWVsZENoYW5nZWQuQXBpTmFtZV0gPSBmaWVsZENoYW5nZWQuVmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0RGF0YSgpOiBJUGVwR2VuZXJpY0Zvcm1EYXRhIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVJRDogdGhpcy5fZm9ybURhdGEuVUlELFxuICAgICAgICAgICAgVmFsdWVzOiB0aGlzLl9kYXRhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiB1cGRhdGVzIGZvcm0gZmllbGQocykgcGFyYW1zXG4gICAgKiBAcGFyYW0gZmllbGRzXG4gICAgKi9cbiAgICB1cGRhdGVGaWVsZHMoZmllbGRzOiBJUGVwR2VuZXJpY0Zvcm1GaWVsZFVwZGF0ZVtdKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBkYXRhIHZpZXcgd2l0aCBjdXJyZW50IGRhdGFcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZm9ybURhdGEuRmllbGRzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5BcGlOYW1lID09PSBrZXkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZm9ybURhdGEuRmllbGRzW2luZGV4XSBhcyB7IFtrOiBzdHJpbmddOiBhbnkgfTtcbiAgICAgICAgICAgICAgICBpdGVtLlZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZm9ybURhdGEuRmllbGRzLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5BcGlOYW1lID09PSBmaWVsZC5GaWVsZElkKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGQuUGFyYW1zKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2VuZXJpY0Zvcm1TZXJ2aWNlLmhhc1Byb3BlcnR5KHRoaXMuX2Zvcm1EYXRhLkZpZWxkc1tpbmRleF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9mb3JtRGF0YS5GaWVsZHNbaW5kZXhdIGFzIHsgW2s6IHN0cmluZ106IGFueSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnVmFsdWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tYW51YWxseSB1cGRhdGluZyBmb3JtYXR0ZWRWYWx1ZSBiZWNhdXNlIEZvcm1hdHRlZFZhbHVlIGlzIGxlZ2FjeSB1c2VkIGJ5IHdlYmFwcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uRm9ybWF0dGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BlcEZvcm0uUmVsb2FkRm9ybSgpXG4gICAgICAgIHRoaXMuX3BlcEZvcm0uZGF0YSA9IHRoaXMuX2Zvcm1EYXRhO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlID0ge1xuICAgICAgICAgICAgVUlEOiBldmVudC5pZCxcbiAgICAgICAgICAgIEFwaU5hbWU6IGV2ZW50LmtleSxcbiAgICAgICAgICAgIFZhbHVlOiBldmVudC52YWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoZmllbGQpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoZmllbGQpO1xuICAgIH1cblxuICAgIG9uZmllbGRDbGlja2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmllbGQ6IElQZXBHZW5lcmljRm9ybVZhbHVlQ2hhbmdlID0ge1xuICAgICAgICAgICAgVUlEOiBldmVudC5pZCxcbiAgICAgICAgICAgIEFwaU5hbWU6IGV2ZW50LmtleSxcbiAgICAgICAgICAgIFZhbHVlOiBldmVudC52YWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoZmllbGQpO1xuICAgICAgICB0aGlzLmZpZWxkQ2xpY2suZW1pdChmaWVsZCk7XG4gICAgfVxuXG4gICAgb25Gb3JtVmFsaWRhdGlvbkNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuXG59XG4iLCI8ZGl2ICpuZ0lmPVwiaW5saW5lXCIgY2xhc3M9XCJpbmxpbmUtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwieyAnYWRkLXBhZGRpbmcnOiBhZGRQYWRkaW5nIH1cIj5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1RvcEJhclwiIGNsYXNzPVwiaW5saW5lLXRvcC1iYXItY29udGFpbmVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BCYXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb3JtVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48cGVwLXBhZ2UtbGF5b3V0ICpuZ0lmPVwiIWlubGluZVwiIFthZGRQYWRkaW5nXT1cImFkZFBhZGRpbmdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvcEJhclwiIHBlcC10b3AtYXJlYT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcEJhclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBwZXAtbWFpbi1hcmVhIGNsYXNzPVwibWFpbi1hcmVhLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L3BlcC1wYWdlLWxheW91dD5cblxuPG5nLXRlbXBsYXRlICN0b3BCYXJUZW1wbGF0ZT5cbiAgICA8cGVwLXRvcC1iYXIgW2lubGluZV09XCJpbmxpbmVcIj4gXG4gICAgICAgIDxkaXYgaGVhZGVyLXN0YXJ0LWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGVmdC1idXR0b25zXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgaGVhZGVyLWVuZC1jb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIDxkaXYgZm9vdGVyLXN0YXJ0LWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYm90dG9tLWxlZnQtYnV0dG9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZvb3Rlci1lbmQtY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltib3R0b20tcmlnaHQtYnV0dG9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICA8L3BlcC10b3AtYmFyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb3JtVGVtcGxhdGU+XG4gICAgPCEtLSBjbGFzcz1cImZvcm0tdmlld1wiICAtLT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZm9ybS12aWV3Jzogc2hvd1RvcEJhciwgJ3BhZGRpbmctYm90dG9tJzogIXNob3dUb3BCYXJ9XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgI3BlcEZvcm1Db250YWluZXI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19