@vendure/admin-ui 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/catalog/components/product-options-editor/product-options-editor.component.d.ts +6 -0
  2. package/core/common/base-detail.component.d.ts +28 -0
  3. package/core/common/version.d.ts +1 -1
  4. package/core/data/providers/interceptor.d.ts +11 -1
  5. package/core/providers/page/page.service.d.ts +7 -0
  6. package/esm2022/catalog/catalog.module.mjs +2 -2
  7. package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +3 -3
  8. package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +13 -5
  9. package/esm2022/core/common/base-detail.component.mjs +29 -1
  10. package/esm2022/core/common/base-list.component.mjs +1 -1
  11. package/esm2022/core/common/component-registry-types.mjs +1 -1
  12. package/esm2022/core/common/title-setter.mjs +1 -1
  13. package/esm2022/core/common/version.mjs +2 -2
  14. package/esm2022/core/data/providers/interceptor.mjs +32 -11
  15. package/esm2022/core/providers/bulk-action-registry/bulk-action-types.mjs +1 -1
  16. package/esm2022/core/providers/custom-field-component/custom-field-component.service.mjs +1 -1
  17. package/esm2022/core/providers/local-storage/local-storage.service.mjs +1 -4
  18. package/esm2022/core/providers/page/page.service.mjs +5 -2
  19. package/esm2022/core/shared/components/action-bar-items/action-bar-items.component.mjs +1 -1
  20. package/esm2022/core/shared/components/asset-file-input/asset-file-input.component.mjs +1 -1
  21. package/esm2022/core/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +1 -1
  22. package/esm2022/core/shared/components/currency-code-selector/currency-code-selector.component.mjs +1 -1
  23. package/esm2022/core/shared/components/data-table/data-table.component.mjs +1 -1
  24. package/esm2022/core/shared/components/language-code-selector/language-code-selector.component.mjs +1 -1
  25. package/esm2022/core/shared/components/select-toggle/select-toggle.component.mjs +3 -3
  26. package/esm2022/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +1 -1
  27. package/esm2022/core/shared/pipes/state-i18n-token.pipe.mjs +1 -1
  28. package/esm2022/customer/components/address-card/address-card.component.mjs +3 -3
  29. package/esm2022/customer/components/customer-list/customer-list.component.mjs +14 -10
  30. package/esm2022/customer/customer.module.mjs +1 -1
  31. package/esm2022/customer/customer.routes.mjs +2 -2
  32. package/esm2022/dashboard/components/dashboard/dashboard.component.mjs +1 -1
  33. package/esm2022/marketing/marketing.module.mjs +1 -1
  34. package/esm2022/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.mjs +3 -3
  35. package/esm2022/order/components/draft-order-detail/draft-order-detail.component.mjs +3 -3
  36. package/esm2022/order/components/order-detail/order-detail.component.mjs +2 -4
  37. package/esm2022/order/components/select-customer-dialog/select-customer-dialog.component.mjs +3 -3
  38. package/esm2022/order/order.module.mjs +1 -1
  39. package/esm2022/order/order.routes.mjs +1 -1
  40. package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +2 -3
  41. package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +8 -8
  42. package/esm2022/settings/settings.module.mjs +1 -1
  43. package/fesm2022/vendure-admin-ui-catalog.mjs +15 -7
  44. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  45. package/fesm2022/vendure-admin-ui-core.mjs +65 -16
  46. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  47. package/fesm2022/vendure-admin-ui-customer.mjs +16 -12
  48. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  49. package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
  50. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  51. package/fesm2022/vendure-admin-ui-order.mjs +7 -9
  52. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  53. package/fesm2022/vendure-admin-ui-settings.mjs +8 -9
  54. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  55. package/package.json +14 -14
  56. package/static/i18n-messages/cs.json +770 -768
  57. package/static/i18n-messages/de.json +771 -769
  58. package/static/i18n-messages/en.json +771 -769
  59. package/static/i18n-messages/es.json +770 -768
  60. package/static/i18n-messages/fr.json +770 -768
  61. package/static/i18n-messages/it.json +770 -768
  62. package/static/i18n-messages/pl.json +770 -768
  63. package/static/i18n-messages/pt_BR.json +770 -768
  64. package/static/i18n-messages/pt_PT.json +770 -768
  65. package/static/i18n-messages/ru.json +770 -768
  66. package/static/i18n-messages/uk.json +770 -768
  67. package/static/i18n-messages/zh_Hans.json +770 -768
  68. package/static/i18n-messages/zh_Hant.json +770 -768
  69. package/static/styles/global/_buttons.scss +24 -0
  70. package/static/theme.min.css +1 -1
@@ -3,7 +3,7 @@ import { UntypedFormArray, UntypedFormGroup } from '@angular/forms';
3
3
  import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
4
4
  import { BaseDetailComponent, createUpdatedTranslatable, findTranslation, Permission, } from '@vendure/admin-ui/core';
5
5
  import { combineLatest, forkJoin } from 'rxjs';
6
- import { map, mergeMap, take } from 'rxjs/operators';
6
+ import { map, mergeMap, take, tap } from 'rxjs/operators';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/router";
9
9
  import * as i2 from "@vendure/admin-ui/core";
@@ -24,12 +24,20 @@ export class ProductOptionsEditorComponent extends BaseDetailComponent {
24
24
  this.changeDetector = changeDetector;
25
25
  this.notificationService = notificationService;
26
26
  this.autoUpdateVariantNames = true;
27
+ this.paginationSettings = {};
27
28
  this.updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];
28
29
  this.optionGroupCustomFields = this.getCustomFieldConfig('ProductOptionGroup');
29
30
  this.optionCustomFields = this.getCustomFieldConfig('ProductOption');
30
31
  }
31
32
  ngOnInit() {
32
- this.optionGroups$ = this.route.snapshot.data.entity.pipe(map((product) => product.optionGroups));
33
+ this.optionGroups$ = this.route.snapshot.data.entity.pipe(map((product) => product.optionGroups), tap((optionGroups) => {
34
+ for (const group of optionGroups) {
35
+ this.paginationSettings[group.id] = {
36
+ currentPage: 1,
37
+ itemsPerPage: 10,
38
+ };
39
+ }
40
+ }));
33
41
  this.detailForm = new UntypedFormGroup({
34
42
  optionGroups: new UntypedFormArray([]),
35
43
  });
@@ -185,10 +193,10 @@ export class ProductOptionsEditorComponent extends BaseDetailComponent {
185
193
  return optionForm;
186
194
  }
187
195
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ProductOptionsEditorComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ServerConfigService }, { token: i2.DataService }, { token: i3.ProductDetailService }, { token: i4.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
188
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: ProductOptionsEditorComponent, selector: "vdr-product-options-editor", usesInheritance: true, ngImport: i0, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"10\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"], dependencies: [{ kind: "directive", type: i5.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i5.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i5.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i2.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i2.PageHeaderComponent, selector: "vdr-page-header" }, { kind: "component", type: i2.PageTitleComponent, selector: "vdr-page-title", inputs: ["title"] }, { kind: "component", type: i2.PageHeaderDescriptionComponent, selector: "vdr-page-header-description" }, { kind: "component", type: i2.PageBodyComponent, selector: "vdr-page-body" }, { kind: "component", type: i2.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i2.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i2.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.HasPermissionPipe, name: "hasPermission" }, { kind: "pipe", type: i2.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
196
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: ProductOptionsEditorComponent, selector: "vdr-product-options-editor", usesInheritance: true, ngImport: i0, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\r\n [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\r\n (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"], dependencies: [{ kind: "directive", type: i5.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i5.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i5.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i2.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i2.PageHeaderComponent, selector: "vdr-page-header" }, { kind: "component", type: i2.PageTitleComponent, selector: "vdr-page-title", inputs: ["title"] }, { kind: "component", type: i2.PageHeaderDescriptionComponent, selector: "vdr-page-header-description" }, { kind: "component", type: i2.PageBodyComponent, selector: "vdr-page-body" }, { kind: "component", type: i2.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i2.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i2.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.HasPermissionPipe, name: "hasPermission" }, { kind: "pipe", type: i2.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
189
197
  }
190
198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ProductOptionsEditorComponent, decorators: [{
191
199
  type: Component,
192
- args: [{ selector: 'vdr-product-options-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"10\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"] }]
200
+ args: [{ selector: 'vdr-product-options-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\r\n [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\r\n (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"] }]
193
201
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ServerConfigService }, { type: i2.DataService }, { type: i3.ProductDetailService }, { type: i4.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.NotificationService }]; } });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFlLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FRYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFZckQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLG1CQUF1QztJQVV0RixZQUNjLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsV0FBd0IsRUFDMUIsb0JBQTBDLEVBQzFDLFdBQStCLEVBQy9CLGNBQWlDLEVBQ2pDLG1CQUF3QztRQUVoRCxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQVQ3QyxVQUFL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QyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNILFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQzs4R0F0UFEsNkJBQTZCO2tHQUE3Qiw2QkFBNkIseUZDbkMxQyw2c09Bb0lBOzsyRkRqR2EsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNJLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQcm9kdWN0T3B0aW9uRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0T3B0aW9uR3JvdXAsXHJcbiAgICBQcm9kdWN0T3B0aW9uR3JvdXBGcmFnbWVudCxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBUcmFuc2xhdGlvbk9mLFxyXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlJztcclxuXHJcbnR5cGUgUHJvZHVjdFdpdGhPcHRpb25zID0gTm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnlbJ3Byb2R1Y3QnXT47XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLXByb2R1Y3Qtb3B0aW9ucy1lZGl0b3InLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0T3B0aW9uc0VkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8UHJvZHVjdFdpdGhPcHRpb25zPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBkZXRhaWxGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gICAgb3B0aW9uR3JvdXBzJDogT2JzZXJ2YWJsZTxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddPjtcclxuICAgIGxhbmd1YWdlQ29kZSQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlPjtcclxuICAgIGF2YWlsYWJsZUxhbmd1YWdlcyQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlW10+O1xyXG4gICAgb3B0aW9uR3JvdXBDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBvcHRpb25DdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBhdXRvVXBkYXRlVmFyaWFudE5hbWVzID0gdHJ1ZTtcclxuICAgIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb24gPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByb3RlY3RlZCBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbkdyb3VwJyk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25DdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25Hcm91cHMkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmVudGl0eS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHByb2R1Y3Q6IFByb2R1Y3RXaXRoT3B0aW9ucykgPT4gcHJvZHVjdC5vcHRpb25Hcm91cHMpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBvcHRpb25Hcm91cHM6IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9uR3JvdXBzKCk6IFVudHlwZWRGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJyk7XHJcbiAgICAgICAgcmV0dXJuIChvcHRpb25Hcm91cHMgYXMgVW50eXBlZEZvcm1BcnJheSkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wdGlvbnMob3B0aW9uR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBVbnR5cGVkRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHRpb25Hcm91cC5nZXQoJ29wdGlvbnMnKTtcclxuICAgICAgICByZXR1cm4gKG9wdGlvbnMgYXMgVW50eXBlZEZvcm1BcnJheSkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsRm9ybS5pbnZhbGlkIHx8IHRoaXMuZGV0YWlsRm9ybS5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgJHByb2R1Y3QgPSB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuZ2V0UHJvZHVjdCh0aGlzLmlkKS5tYXBTaW5nbGUoZGF0YSA9PiBkYXRhLnByb2R1Y3QhKTtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkLCAkcHJvZHVjdClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFt7IG9wdGlvbkdyb3VwcyB9LCBsYW5ndWFnZUNvZGUsIHByb2R1Y3RdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlT3BlcmF0aW9uczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uR3JvdXBGb3JtIG9mIHRoaXMuZ2V0T3B0aW9uR3JvdXBzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBFbnRpdHkgPSBvcHRpb25Hcm91cHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZyA9PiBvZy5pZCA9PT0gb3B0aW9uR3JvdXBGb3JtLnZhbHVlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cEVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwRW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cEZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnVwZGF0ZVByb2R1Y3RPcHRpb25Hcm91cChpbnB1dCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb25Gb3JtIG9mIHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25Hcm91cEZvcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwID0gb3B0aW9uR3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKG9nID0+IG9nLmlkID09PSBvcHRpb25Hcm91cEZvcm0udmFsdWUuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ub3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uRm9ybS52YWx1ZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkT3B0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Gb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3REZXRhaWxTZXJ2aWNlLnVwZGF0ZVByb2R1Y3RPcHRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAuLi5pbnB1dCwgYXV0b1VwZGF0ZTogdGhpcy5hdXRvVXBkYXRlVmFyaWFudE5hbWVzIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4odXBkYXRlT3BlcmF0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RPcHRpb25Hcm91cCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRPcHRpb25Hcm91cChcclxuICAgICAgICBvcHRpb25Hcm91cDogUHJvZHVjdE9wdGlvbkdyb3VwRnJhZ21lbnQsXHJcbiAgICAgICAgb3B0aW9uR3JvdXBGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBJbnB1dCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBvcHRpb25Hcm91cCxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogb3B0aW9uR3JvdXBGb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogb3B0aW9uR3JvdXAubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uKFxyXG4gICAgICAgIG9wdGlvbjogUHJvZHVjdE9wdGlvbkZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBvcHRpb24sXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMub3B0aW9uQ3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zLCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGdyb3Vwc0Zvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdvcHRpb25Hcm91cHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uR3JvdXAgb2YgZW50aXR5Lm9wdGlvbkdyb3Vwcykge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKG9wdGlvbkdyb3VwLCBsYW5ndWFnZUNvZGUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBGb3JtID0gdGhpcy5zZXRPcHRpb25Hcm91cEZvcm0ob3B0aW9uR3JvdXAsIGdyb3Vwc0Zvcm0sIGdyb3VwVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcywgZ3JvdXBGb3JtLCBvcHRpb25Hcm91cCwgZ3JvdXBUcmFuc2xhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9uc0Zvcm0gPSBncm91cEZvcm0uZ2V0KCdvcHRpb25zJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uc0Zvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwRm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgb3B0aW9uc0Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbkdyb3VwLm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvblRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKG9wdGlvbiwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkZvcm0gPSB0aGlzLnNldE9wdGlvbkZvcm0ob3B0aW9uLCBvcHRpb25zRm9ybSwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRzRm9ybSh0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcywgb3B0aW9uRm9ybSwgb3B0aW9uLCBvcHRpb25UcmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldEN1c3RvbUZpZWxkc0Zvcm08XHJcbiAgICAgICAgVCBleHRlbmRzIFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF0gfCBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICA+KFxyXG4gICAgICAgIGN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXSxcclxuICAgICAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgZW50aXR5OiBULFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8VD4sXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCA9IGZvcm1Hcm91cC5nZXQoWydjdXN0b21GaWVsZHMnXSk7XHJcbiAgICAgICAgICAgIGlmICghY3VzdG9tVmFsdWVGaWVsZHNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbCgnY3VzdG9tRmllbGRzJywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoY3VzdG9tRmllbGRzLCBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLCBlbnRpdHksIGN1cnJlbnRUcmFuc2xhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRPcHRpb25Hcm91cEZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdLFxyXG4gICAgICAgIGdyb3Vwc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdPixcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0ge1xyXG4gICAgICAgICAgICBpZDogZW50aXR5LmlkLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IGVudGl0eS5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogZW50aXR5LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgY29kZTogZW50aXR5LmNvZGUsXHJcbiAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbj8ubmFtZSA/PyAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBncm91cEZvcm0gPSBncm91cHNGb3JtLmNvbnRyb2xzLmZpbmQoY29udHJvbCA9PiBjb250cm9sLnZhbHVlLmlkID09PSBlbnRpdHkuaWQpIGFzXHJcbiAgICAgICAgICAgIHwgVW50eXBlZEZvcm1Hcm91cFxyXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoZ3JvdXBGb3JtKSB7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZShncm91cC5jb2RlKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnbmFtZScpPy5zZXRWYWx1ZShncm91cC5uYW1lKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ3VwZGF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC51cGRhdGVkQXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xyXG4gICAgICAgICAgICBncm91cHNGb3JtLnB1c2goZ3JvdXBGb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwRm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uRm9ybShcclxuICAgICAgICBlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF1bJ29wdGlvbnMnXVswXSxcclxuICAgICAgICBvcHRpb25zRm9ybTogVW50eXBlZEZvcm1BcnJheSxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF1bJ29wdGlvbnMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgb3B0aW9uRm9ybSA9IG9wdGlvbnNGb3JtLmNvbnRyb2xzLmZpbmQoY29udHJvbCA9PiBjb250cm9sLnZhbHVlLmlkID09PSBlbnRpdHkuaWQpIGFzXHJcbiAgICAgICAgICAgIHwgVW50eXBlZEZvcm1Hcm91cFxyXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAob3B0aW9uRm9ybSkge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnaWQnKT8uc2V0VmFsdWUoZ3JvdXAuaWQpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZShncm91cC5jb2RlKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCdjcmVhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAuY3JlYXRlZEF0KTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ3VwZGF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC51cGRhdGVkQXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgb3B0aW9uc0Zvcm0ucHVzaChvcHRpb25Gb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbkZvcm07XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWhlYWRlcj5cclxuICAgIDx2ZHItcGFnZS10aXRsZT48L3Zkci1wYWdlLXRpdGxlPlxyXG4gICAgPHZkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj57eyAnY2F0YWxvZy5wYWdlLWRlc2NyaXB0aW9uLW9wdGlvbnMtZWRpdG9yJyB8IHRyYW5zbGF0ZSB9fTwvdmRyLXBhZ2UtaGVhZGVyLWRlc2NyaXB0aW9uPlxyXG48L3Zkci1wYWdlLWhlYWRlcj5cclxuPHZkci1wYWdlLWJvZHk+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgICAgICA8dmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYXV0by11cGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXV0b1VwZGF0ZVZhcmlhbnROYW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjYXRhbG9nLmF1dG8tdXBkYXRlLXByb2R1Y3QtdmFyaWFudC1uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5wcmlzdGluZSB8fCBkZXRhaWxGb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgPC92ZHItYWN0aW9uLWJhcj5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCIgKm5nSWY9XCJvcHRpb25Hcm91cHMkIHwgYXN5bmMgYXMgb3B0aW9uR3JvdXBzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cIm9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbkdyb3VwIG9mIGdldE9wdGlvbkdyb3VwcygpOyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUFycmF5TmFtZV09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwib3B0aW9uR3JvdXAudmFsdWUuY29kZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvIFtlbnRpdHldPVwib3B0aW9uR3JvdXAudmFsdWVcIj48L3Zkci1wYWdlLWVudGl0eS1pbmZvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIiduYW1lLScgKyBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIGZvcj1cImNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInY29kZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT1cImN1c3RvbUZpZWxkc1wiICpuZ0lmPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJQcm9kdWN0T3B0aW9uR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJvcHRpb25Hcm91cEN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9wdGlvbkdyb3VwLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRhdGEtdGFibGUtMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImVkaXQtb3B0aW9ucy1saXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRPcHRpb25zKG9wdGlvbkdyb3VwKSBhcyBvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwib3B0aW9ucy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5pZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUudXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnY29kZScpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cIm9wdGlvbkN1c3RvbUZpZWxkcy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRhdGEtdGFibGUtMj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbjwvdmRyLXBhZ2UtYm9keT5cclxuIl19
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FPYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxtQkFBdUM7SUFXdEYsWUFDYyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQzFCLG9CQUEwQyxFQUMxQyxXQUErQixFQUMvQixjQUFpQyxFQUNqQyxtQkFBd0M7UUFFaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7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QUU7U0FDdkMsQ0FBQztRQUNGLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FFckUsQ0FBQztRQUNoQixJQUFJLFVBQVUsRUFBRTtZQUNaLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNILFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQzs4R0EvUFEsNkJBQTZCO2tHQUE3Qiw2QkFBNkIseUZDbEMxQyw4OE9Bc0lBOzsyRkRwR2EsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNJLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgR2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnksXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgIFByb2R1Y3RPcHRpb25Hcm91cEZyYWdtZW50LFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgIFRyYW5zbGF0aW9uT2YsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBJbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcblxyXG50eXBlIFByb2R1Y3RXaXRoT3B0aW9ucyA9IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5Wydwcm9kdWN0J10+O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1wcm9kdWN0LW9wdGlvbnMtZWRpdG9yJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdE9wdGlvbnNFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGV0YWlsQ29tcG9uZW50PFByb2R1Y3RXaXRoT3B0aW9ucz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZGV0YWlsRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICAgIG9wdGlvbkdyb3VwcyQ6IE9ic2VydmFibGU8UHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXT47XHJcbiAgICBsYW5ndWFnZUNvZGUkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZT47XHJcbiAgICBhdmFpbGFibGVMYW5ndWFnZXMkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZVtdPjtcclxuICAgIG9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgb3B0aW9uQ3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgYXV0b1VwZGF0ZVZhcmlhbnROYW1lcyA9IHRydWU7XHJcbiAgICBwYWdpbmF0aW9uU2V0dGluZ3M6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgY3VycmVudFBhZ2U6IG51bWJlcjsgaXRlbXNQZXJQYWdlOiBudW1iZXIgfSB9ID0ge307XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVQcm9kdWN0XTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcm90ZWN0ZWQgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdERldGFpbFNlcnZpY2U6IFByb2R1Y3REZXRhaWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihyb3V0ZSwgcm91dGVyLCBzZXJ2ZXJDb25maWdTZXJ2aWNlLCBkYXRhU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb25Hcm91cCcpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbicpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3B0aW9uR3JvdXBzJCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5lbnRpdHkucGlwZShcclxuICAgICAgICAgICAgbWFwKChwcm9kdWN0OiBQcm9kdWN0V2l0aE9wdGlvbnMpID0+IHByb2R1Y3Qub3B0aW9uR3JvdXBzKSxcclxuICAgICAgICAgICAgdGFwKChvcHRpb25Hcm91cHM6IFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ10pID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygb3B0aW9uR3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0dGluZ3NbZ3JvdXAuaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiAxMCxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgb3B0aW9uR3JvdXBzOiBuZXcgVW50eXBlZEZvcm1BcnJheShbXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wdGlvbkdyb3VwcygpOiBVbnR5cGVkRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwcyA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ29wdGlvbkdyb3VwcycpO1xyXG4gICAgICAgIHJldHVybiAob3B0aW9uR3JvdXBzIGFzIFVudHlwZWRGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIFVudHlwZWRGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcHRpb25zKG9wdGlvbkdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0aW9uR3JvdXAuZ2V0KCdvcHRpb25zJyk7XHJcbiAgICAgICAgcmV0dXJuIChvcHRpb25zIGFzIFVudHlwZWRGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIFVudHlwZWRGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRldGFpbEZvcm0uaW52YWxpZCB8fCB0aGlzLmRldGFpbEZvcm0ucHJpc3RpbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgIGNvbnN0ICRwcm9kdWN0ID0gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LmdldFByb2R1Y3QodGhpcy5pZCkubWFwU2luZ2xlKGRhdGEgPT4gZGF0YS5wcm9kdWN0ISk7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJCwgJHByb2R1Y3QpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbeyBvcHRpb25Hcm91cHMgfSwgbGFuZ3VhZ2VDb2RlLCBwcm9kdWN0XSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZU9wZXJhdGlvbnM6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwRm9ybSBvZiB0aGlzLmdldE9wdGlvbkdyb3VwcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwRW50aXR5ID0gb3B0aW9uR3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2cgPT4gb2cuaWQgPT09IG9wdGlvbkdyb3VwRm9ybS52YWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXBFbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZE9wdGlvbkdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cEVudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC51cGRhdGVQcm9kdWN0T3B0aW9uR3JvdXAoaW5wdXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uRm9ybSBvZiB0aGlzLmdldE9wdGlvbnMob3B0aW9uR3JvdXBGb3JtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Hcm91cCA9IG9wdGlvbkdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZChvZyA9PiBvZy5pZCA9PT0gb3B0aW9uR3JvdXBGb3JtLnZhbHVlLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Lm9wdGlvbnMuZmluZChvID0+IG8uaWQgPT09IG9wdGlvbkZvcm0udmFsdWUuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZE9wdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS51cGRhdGVQcm9kdWN0T3B0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLi4uaW5wdXQsIGF1dG9VcGRhdGU6IHRoaXMuYXV0b1VwZGF0ZVZhcmlhbnROYW1lcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbkdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgb3B0aW9uR3JvdXA6IFByb2R1Y3RPcHRpb25Hcm91cEZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkdyb3VwRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkdyb3VwRm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbkdyb3VwLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZE9wdGlvbihcclxuICAgICAgICBvcHRpb246IFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgICAgICBvcHRpb25Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uLFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBvcHRpb25Gb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9ucywgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cHNGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwIG9mIGVudGl0eS5vcHRpb25Hcm91cHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb25Hcm91cCwgbGFuZ3VhZ2VDb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRm9ybSA9IHRoaXMuc2V0T3B0aW9uR3JvdXBGb3JtKG9wdGlvbkdyb3VwLCBncm91cHNGb3JtLCBncm91cFRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZHNGb3JtKHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMsIGdyb3VwRm9ybSwgb3B0aW9uR3JvdXAsIGdyb3VwVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbnNGb3JtID0gZ3JvdXBGb3JtLmdldCgnb3B0aW9ucycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9uc0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cEZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIG9wdGlvbnNGb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25Hcm91cC5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25UcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb24sIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Gb3JtID0gdGhpcy5zZXRPcHRpb25Gb3JtKG9wdGlvbiwgb3B0aW9uc0Zvcm0sIG9wdGlvblRyYW5zbGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25DdXN0b21GaWVsZHMsIG9wdGlvbkZvcm0sIG9wdGlvbiwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRDdXN0b21GaWVsZHNGb3JtPFxyXG4gICAgICAgIFQgZXh0ZW5kcyBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdIHwgUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXVsnb3B0aW9ucyddWzBdLFxyXG4gICAgPihcclxuICAgICAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW10sXHJcbiAgICAgICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGVudGl0eTogVCxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFQ+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBmb3JtR3JvdXAuZ2V0KFsnY3VzdG9tRmllbGRzJ10pO1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbVZhbHVlRmllbGRzR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKGN1c3RvbUZpZWxkcywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCwgZW50aXR5LCBjdXJyZW50VHJhbnNsYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uR3JvdXBGb3JtKFxyXG4gICAgICAgIGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXSxcclxuICAgICAgICBncm91cHNGb3JtOiBVbnR5cGVkRm9ybUFycmF5LFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8UHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZ3JvdXBGb3JtID0gZ3JvdXBzRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGdyb3VwRm9ybSkge1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCdpZCcpPy5zZXRWYWx1ZShncm91cC5pZCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NyZWF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBncm91cEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgZ3JvdXBzRm9ybS5wdXNoKGdyb3VwRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBncm91cEZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldE9wdGlvbkZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICAgICAgb3B0aW9uc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB7XHJcbiAgICAgICAgICAgIGlkOiBlbnRpdHkuaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZW50aXR5LmNyZWF0ZWRBdCxcclxuICAgICAgICAgICAgdXBkYXRlZEF0OiBlbnRpdHkudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICBjb2RlOiBlbnRpdHkuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uPy5uYW1lID8/ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG9wdGlvbkZvcm0gPSBvcHRpb25zRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKG9wdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCduYW1lJyk/LnNldFZhbHVlKGdyb3VwLm5hbWUpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNGb3JtLnB1c2gob3B0aW9uRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25Gb3JtO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1oZWFkZXI+XHJcbiAgICA8dmRyLXBhZ2UtdGl0bGU+PC92ZHItcGFnZS10aXRsZT5cclxuICAgIDx2ZHItcGFnZS1oZWFkZXItZGVzY3JpcHRpb24+e3sgJ2NhdGFsb2cucGFnZS1kZXNjcmlwdGlvbi1vcHRpb25zLWVkaXRvcicgfCB0cmFuc2xhdGUgfX08L3Zkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj5cclxuPC92ZHItcGFnZS1oZWFkZXI+XHJcbjx2ZHItcGFnZS1ib2R5PlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF1dG9VcGRhdGVWYXJpYW50TmFtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5hdXRvLXVwZGF0ZS1wcm9kdWN0LXZhcmlhbnQtbmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0ucHJpc3RpbmUgfHwgZGV0YWlsRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiICpuZ0lmPVwib3B0aW9uR3JvdXBzJCB8IGFzeW5jIGFzIG9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJvcHRpb25Hcm91cHNcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBnZXRPcHRpb25Hcm91cHMoKTsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1BcnJheU5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbkdyb3VwLnZhbHVlLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyBbZW50aXR5XT1cIm9wdGlvbkdyb3VwLnZhbHVlXCI+PC92ZHItcGFnZS1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInbmFtZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJjb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2NvZGUtJyArIGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9XCJjdXN0b21GaWVsZHNcIiAqbmdJZj1cIm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvbkdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJvcHRpb25Hcm91cC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlZGl0LW9wdGlvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0T3B0aW9ucyhvcHRpb25Hcm91cCkgYXMgb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdPy5pdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwicGFnaW5hdGlvblNldHRpbmdzW29wdGlvbkdyb3VwLnZhbHVlLmlkXT8uY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdLmN1cnJlbnRQYWdlID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwib3B0aW9ucy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5pZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUudXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnY29kZScpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cIm9wdGlvbkN1c3RvbUZpZWxkcy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRhdGEtdGFibGUtMj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbjwvdmRyLXBhZ2UtYm9keT5cclxuIl19
@@ -136,6 +136,34 @@ export class TypedBaseDetailComponent extends BaseDetailComponent {
136
136
  this.setUpStreams();
137
137
  }
138
138
  }
139
+ /**
140
+ * @description
141
+ * A helper function for creating tabs that point to a {@link TypedBaseDetailComponent}. This takes
142
+ * care of the route resolver parts so that the detail component automatically has access to the
143
+ * correct resolved detail data.
144
+ *
145
+ * @example
146
+ * ```TypeScript
147
+ * \@NgModule({
148
+ * imports: [ReviewsSharedModule],
149
+ * declarations: [/* ... *\/],
150
+ * providers: [
151
+ * registerPageTab({
152
+ * location: 'product-detail',
153
+ * tab: 'Specs',
154
+ * route: 'specs',
155
+ * component: detailComponentWithResolver({
156
+ * component: ProductSpecDetailComponent,
157
+ * query: GetProductSpecsDocument,
158
+ * entityKey: 'spec',
159
+ * }),
160
+ * }),
161
+ * ],
162
+ * })
163
+ * export class ProductSpecsUiExtensionModule {}
164
+ * ```
165
+ * @docsCategory list-detail-views
166
+ */
139
167
  export function detailComponentWithResolver(config) {
140
168
  const resolveFn = (route, state) => {
141
169
  const router = inject(Router);
@@ -168,4 +196,4 @@ export function detailComponentWithResolver(config) {
168
196
  component: config.component,
169
197
  };
170
198
  }
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9jb21tb24vYmFzZS1kZXRhaWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFFN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQWEsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU81RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQVlyQyxZQUNjLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsV0FBd0I7UUFIeEIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFONUIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFPdEMsQ0FBQztJQUVKLElBQUk7UUFDQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMs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QkFDWCxNQUFNLEVBQUUsYUFBYTtnQkFDckIsTUFBTTthQUNULENBQUMsQ0FBQyxDQUNOLENBQUM7U0FDTDtJQUNMLENBQUMsQ0FBQztJQUNGLE9BQU87UUFDSCxTQUFTO1FBQ1QsWUFBWSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUssRUFBd0I7UUFDM0YsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO0tBQzlCLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGlvblN0YXJ0LCBSZXNvbHZlRm4sIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSZXN1bHRPZiwgVHlwZWREb2N1bWVudE5vZGUgfSBmcm9tICdAZ3JhcGhxbC10eXBlZC1kb2N1bWVudC1ub2RlL2NvcmUnO1xuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS9wcm92aWRlcnMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9kYXRhL3NlcnZlci1jb25maWcnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYlZhbHVlIH0gZnJvbSAnLi4vcHJvdmlkZXJzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRGVhY3RpdmF0ZUF3YXJlIH0gZnJvbSAnLi9kZWFjdGl2YXRlLWF3YXJlJztcbmltcG9ydCB7IEN1c3RvbUZpZWxkQ29uZmlnLCBDdXN0b21GaWVsZHMsIExhbmd1YWdlQ29kZSB9IGZyb20gJy4vZ2VuZXJhdGVkLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uT2YgfSBmcm9tICcuL3V0aWxpdGllcy9maW5kLXRyYW5zbGF0aW9uJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEEgYmFzZSBjbGFzcyBmb3IgZW50aXR5IGRldGFpbCB2aWV3cy4gSXQgc2hvdWxkIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcbiAqIHtAbGluayBCYXNlRW50aXR5UmVzb2x2ZXJ9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBUeXBlU2NyaXB0XG4gKiBcXEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogJ2FwcC1teS1lbnRpdHknLFxuICogICB0ZW1wbGF0ZVVybDogJy4vbXktZW50aXR5LmNvbXBvbmVudC5odG1sJyxcbiAqICAgc3R5bGVVcmxzOiBbJy4vbXktZW50aXR5LmNvbXBvbmVudC5zY3NzJ10sXG4gKiAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBHbG9iYWxTZXR0aW5nc0NvbXBvbmVudCBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8TXlFbnRpdHlGcmFnbWVudD4gaW1wbGVtZW50cyBPbkluaXQge1xuICogICBkZXRhaWxGb3JtOiBGb3JtR3JvdXA7XG4gKlxuICogICBjb25zdHJ1Y3RvcihcbiAqICAgICByb3V0ZXI6IFJvdXRlcixcbiAqICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gKiAgICAgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcbiAqICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICogICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICogICApIHtcbiAqICAgICBzdXBlcihyb3V0ZSwgcm91dGVyLCBzZXJ2ZXJDb25maWdTZXJ2aWNlLCBkYXRhU2VydmljZSk7XG4gKiAgICAgdGhpcy5kZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gKiAgICAgICBuYW1lOiBbJyddLFxuICogICAgIH0pO1xuICogICB9XG4gKlxuICogICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IE15RW50aXR5RnJhZ21lbnQsIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKTogdm9pZCB7XG4gKiAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xuICogICAgICAgbmFtZTogZW50aXR5Lm5hbWUsXG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBkb2NzQ2F0ZWdvcnkgbGlzdC1kZXRhaWwtdmlld3NcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEZXRhaWxDb21wb25lbnQ8RW50aXR5IGV4dGVuZHMgeyBpZDogc3RyaW5nOyB1cGRhdGVkQXQ/OiBzdHJpbmcgfT5cbiAgICBpbXBsZW1lbnRzIERlYWN0aXZhdGVBd2FyZVxue1xuICAgIGVudGl0eSQ6IE9ic2VydmFibGU8RW50aXR5PjtcbiAgICBhdmFpbGFibGVMYW5ndWFnZXMkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZVtdPjtcbiAgICBsYW5ndWFnZUNvZGUkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZT47XG4gICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGU7XG4gICAgaXNOZXckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGlkOiBzdHJpbmc7XG4gICAgYWJzdHJhY3QgZGV0YWlsRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgICkge31cblxuICAgIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZW50aXR5JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGRhdGEgPT4gKGRhdGEuZW50aXR5IGFzIE9ic2VydmFibGU8RW50aXR5PikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpKSxcbiAgICAgICAgICAgIGZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKGVudGl0eSA9PiAodGhpcy5pZCA9IGVudGl0eS5pZCkpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNOZXckID0gdGhpcy5lbnRpdHkkLnBpcGUoXG4gICAgICAgICAgICBtYXAoZW50aXR5ID0+ICFlbnRpdHk/LmlkKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldFVwU3RyZWFtcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRVcFN0cmVhbXMoKSB7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2VDb2RlJCA9IHRoaXMucm91dGUucGFyYW1NYXAucGlwZShcbiAgICAgICAgICAgIG1hcChwYXJhbU1hcCA9PiBwYXJhbU1hcC5nZXQoJ2xhbmcnKSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAobGFuZyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGxhbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGxhbmcgYXMgTGFuZ3VhZ2VDb2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jbGllbnQudWlTdGF0ZSgpLm1hcFNpbmdsZShkYXRhID0+IGRhdGEudWlTdGF0ZS5jb250ZW50TGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIHRhcCh2YWwgPT4gKHRoaXMubGFuZ3VhZ2VDb2RlID0gdmFsKSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyQgPSB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtlbnRpdHksIGxhbmd1YWdlQ29kZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyhlbnRpdHksIGxhbmd1YWdlQ29kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBzZXRMYW5ndWFnZShjb2RlOiBMYW5ndWFnZUNvZGUpIHtcbiAgICAgICAgdGhpcy5zZXRRdWVyeVBhcmFtKCdsYW5nJywgY29kZSk7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50LnNldENvbnRlbnRMYW5ndWFnZShjb2RlKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBjYW5EZWFjdGl2YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxGb3JtICYmIHRoaXMuZGV0YWlsRm9ybS5wcmlzdGluZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IEVudGl0eSwgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkO1xuXG4gICAgcHJvdGVjdGVkIHNldEN1c3RvbUZpZWxkRm9ybVZhbHVlczxUID0gRW50aXR5PihcbiAgICAgICAgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdLFxuICAgICAgICBmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCB8IG51bGwsXG4gICAgICAgIGVudGl0eTogVCxcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxUPixcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZERlZiBvZiBjdXN0b21GaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGZpZWxkRGVmLm5hbWU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgICAgICAgICAgZmllbGREZWYudHlwZSA9PT0gJ2xvY2FsZVN0cmluZycgfHwgZmllbGREZWYudHlwZSA9PT0gJ2xvY2FsZVRleHQnXG4gICAgICAgICAgICAgICAgICAgID8gKGN1cnJlbnRUcmFuc2xhdGlvbiBhcyBhbnkpPy5jdXN0b21GaWVsZHM/LltrZXldXG4gICAgICAgICAgICAgICAgICAgIDogKGVudGl0eSBhcyBhbnkpLmN1c3RvbUZpZWxkcz8uW2tleV07XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwPy5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDdXN0b21GaWVsZENvbmZpZyhrZXk6IEV4Y2x1ZGU8a2V5b2YgQ3VzdG9tRmllbGRzLCAnX190eXBlbmFtZSc+KTogQ3VzdG9tRmllbGRDb25maWdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzRm9yKGtleSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFF1ZXJ5UGFyYW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJy4vJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBBIHZlcnNpb24gb2YgdGhlIHtAbGluayBCYXNlRGV0YWlsQ29tcG9uZW50fSB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggYVxuICogW1R5cGVkRG9jdW1lbnROb2RlXShodHRwczovL3RoZS1ndWlsZC5kZXYvZ3JhcGhxbC9jb2RlZ2VuL3BsdWdpbnMvdHlwZXNjcmlwdC90eXBlZC1kb2N1bWVudC1ub2RlKS5cbiAqXG4gKiBAZG9jc0NhdGVnb3J5IGxpc3QtZGV0YWlsLXZpZXdzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQ8XG4gICAgVCBleHRlbmRzIFR5cGVkRG9jdW1lbnROb2RlPGFueSwgYW55PixcbiAgICBGaWVsZCBleHRlbmRzIGtleW9mIFJlc3VsdE9mPFQ+LFxuPiBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8Tm9uTnVsbGFibGU8UmVzdWx0T2Y8VD5bRmllbGRdPj4ge1xuICAgIHByb3RlY3RlZCByZXN1bHQkOiBPYnNlcnZhYmxlPFJlc3VsdE9mPFQ+PjtcbiAgICBwcm90ZWN0ZWQgZW50aXR5OiBSZXN1bHRPZjxUPltGaWVsZF07XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKGluamVjdChBY3RpdmF0ZWRSb3V0ZSksIGluamVjdChSb3V0ZXIpLCBpbmplY3QoU2VydmVyQ29uZmlnU2VydmljZSksIGluamVjdChEYXRhU2VydmljZSkpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZW50aXR5JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGRhdGEgPT5cbiAgICAgICAgICAgICAgICAoZGF0YS5kZXRhaWwuZW50aXR5IGFzIE9ic2VydmFibGU8UmVzdWx0T2Y8VD5bRmllbGRdPikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKGVudGl0eSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IGVudGl0eS5pZDtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0eSA9IGVudGl0eTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzdWx0JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgICAgICAgbWFwKGRhdGEgPT4gZGF0YS5kZXRhaWwucmVzdWx0KSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzTmV3JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGRhdGEgPT4gZGF0YS5kZXRhaWwuZW50aXR5KSxcbiAgICAgICAgICAgIG1hcChlbnRpdHkgPT4gIWVudGl0eSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRVcFN0cmVhbXMoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRhaWxDb21wb25lbnRXaXRoUmVzb2x2ZXI8XG4gICAgVCBleHRlbmRzIFR5cGVkRG9jdW1lbnROb2RlPGFueSwgeyBpZDogc3RyaW5nIH0+LFxuICAgIEZpZWxkIGV4dGVuZHMga2V5b2YgUmVzdWx0T2Y8VD4sXG4gICAgUiBleHRlbmRzIEZpZWxkLFxuPihjb25maWc6IHtcbiAgICBjb21wb25lbnQ6IFR5cGU8VHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PFQsIEZpZWxkPj47XG4gICAgcXVlcnk6IFQ7XG4gICAgZW50aXR5S2V5OiBSO1xuICAgIGdldEJyZWFkY3J1bWJzPzogKGVudGl0eTogUmVzdWx0T2Y8VD5bUl0pID0+IEJyZWFkY3J1bWJWYWx1ZTtcbn0pIHtcbiAgICBjb25zdCByZXNvbHZlRm46IFJlc29sdmVGbjx7IGVudGl0eTogT2JzZXJ2YWJsZTxSZXN1bHRPZjxUPltGaWVsZF0gfCBudWxsPjsgcmVzdWx0PzogUmVzdWx0T2Y8VD4gfT4gPSAoXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBzdGF0ZSxcbiAgICApID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgICAgIGNvbnN0IGRhdGFTZXJ2aWNlID0gaW5qZWN0KERhdGFTZXJ2aWNlKTtcbiAgICAgICAgY29uc3QgaWQgPSByb3V0ZS5wYXJhbU1hcC5nZXQoJ2lkJyk7XG5cbiAgICAgICAgLy8gQ29tcGxldGUgdGhlIGVudGl0eSBzdHJlYW0gdXBvbiBuYXZpZ2F0aW5nIGF3YXlcbiAgICAgICAgY29uc3QgbmF2aWdhdGVBd2F5JCA9IHJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uU3RhcnQpKTtcblxuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpZCBmb3VuZCBpbiByb3V0ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7IGVudGl0eTogb2YobnVsbCkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQkID0gZGF0YVNlcnZpY2VcbiAgICAgICAgICAgICAgICAucXVlcnkoY29uZmlnLnF1ZXJ5LCB7IGlkIH0pXG4gICAgICAgICAgICAgICAgLnJlZmV0Y2hPbkNoYW5uZWxDaGFuZ2UoKVxuICAgICAgICAgICAgICAgIC5zdHJlYW0kLnBpcGUodGFrZVVudGlsKG5hdmlnYXRlQXdheSQpLCBzaGFyZVJlcGxheSgxKSk7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkkID0gcmVzdWx0JC5waXBlKG1hcChyZXN1bHQgPT4gcmVzdWx0W2NvbmZpZy5lbnRpdHlLZXldKSk7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHlTdHJlYW0kID0gZW50aXR5JC5waXBlKGZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQkLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6IGVudGl0eVN0cmVhbSQsXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlRm4sXG4gICAgICAgIGJyZWFkY3J1bWJGbjogKHJlc3VsdDogYW55KSA9PiBjb25maWcuZ2V0QnJlYWRjcnVtYnM/LihyZXN1bHQpID8/IChbXSBhcyBCcmVhZGNydW1iVmFsdWVbXSksXG4gICAgICAgIGNvbXBvbmVudDogY29uZmlnLmNvbXBvbmVudCxcbiAgICB9O1xufVxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9jb21tb24vYmFzZS1kZXRhaWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFFN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQWEsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU81RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ0c7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtJQVlyQyxZQUNjLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsV0FBd0I7UUFIeEIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFONUIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFPdEMsQ0FBQztJQUVKLElBQUk7UUFDQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMs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LEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxFQUFFLGFBQWE7Z0JBQ3JCLE1BQU07YUFDVCxDQUFDLENBQUMsQ0FDTixDQUFDO1NBQ0w7SUFDTCxDQUFDLENBQUM7SUFDRixPQUFPO1FBQ0gsU0FBUztRQUNULFlBQVksRUFBRSxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFLLEVBQXdCO1FBQzNGLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztLQUM5QixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0aW9uU3RhcnQsIFJlc29sdmVGbiwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmVzdWx0T2YsIFR5cGVkRG9jdW1lbnROb2RlIH0gZnJvbSAnQGdyYXBocWwtdHlwZWQtZG9jdW1lbnQtbm9kZS9jb3JlJztcclxuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9kYXRhL3Byb3ZpZGVycy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXJ2ZXJDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YS9zZXJ2ZXItY29uZmlnJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYlZhbHVlIH0gZnJvbSAnLi4vcHJvdmlkZXJzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IERlYWN0aXZhdGVBd2FyZSB9IGZyb20gJy4vZGVhY3RpdmF0ZS1hd2FyZSc7XHJcbmltcG9ydCB7IEN1c3RvbUZpZWxkQ29uZmlnLCBDdXN0b21GaWVsZHMsIExhbmd1YWdlQ29kZSB9IGZyb20gJy4vZ2VuZXJhdGVkLXR5cGVzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25PZiB9IGZyb20gJy4vdXRpbGl0aWVzL2ZpbmQtdHJhbnNsYXRpb24nO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGVudGl0eSBkZXRhaWwgdmlld3MuIEl0IHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlXHJcbiAqIHtAbGluayBCYXNlRW50aXR5UmVzb2x2ZXJ9LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBUeXBlU2NyaXB0XHJcbiAqIFxcQENvbXBvbmVudCh7XHJcbiAqICAgc2VsZWN0b3I6ICdhcHAtbXktZW50aXR5JyxcclxuICogICB0ZW1wbGF0ZVVybDogJy4vbXktZW50aXR5LmNvbXBvbmVudC5odG1sJyxcclxuICogICBzdHlsZVVybHM6IFsnLi9teS1lbnRpdHkuY29tcG9uZW50LnNjc3MnXSxcclxuICogICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIEdsb2JhbFNldHRpbmdzQ29tcG9uZW50IGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxNeUVudGl0eUZyYWdtZW50PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAqICAgZGV0YWlsRm9ybTogRm9ybUdyb3VwO1xyXG4gKlxyXG4gKiAgIGNvbnN0cnVjdG9yKFxyXG4gKiAgICAgcm91dGVyOiBSb3V0ZXIsXHJcbiAqICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAqICAgICBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gKiAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICogICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gKiAgICkge1xyXG4gKiAgICAgc3VwZXIocm91dGUsIHJvdXRlciwgc2VydmVyQ29uZmlnU2VydmljZSwgZGF0YVNlcnZpY2UpO1xyXG4gKiAgICAgdGhpcy5kZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAqICAgICAgIG5hbWU6IFsnJ10sXHJcbiAqICAgICB9KTtcclxuICogICB9XHJcbiAqXHJcbiAqICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBNeUVudGl0eUZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSk6IHZvaWQge1xyXG4gKiAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gKiAgICAgICBuYW1lOiBlbnRpdHkubmFtZSxcclxuICogICAgIH0pO1xyXG4gKiAgIH1cclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQGRvY3NDYXRlZ29yeSBsaXN0LWRldGFpbC12aWV3c1xyXG4gKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEZXRhaWxDb21wb25lbnQ8RW50aXR5IGV4dGVuZHMgeyBpZDogc3RyaW5nOyB1cGRhdGVkQXQ/OiBzdHJpbmcgfT5cclxuICAgIGltcGxlbWVudHMgRGVhY3RpdmF0ZUF3YXJlXHJcbntcclxuICAgIGVudGl0eSQ6IE9ic2VydmFibGU8RW50aXR5PjtcclxuICAgIGF2YWlsYWJsZUxhbmd1YWdlcyQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlW10+O1xyXG4gICAgbGFuZ3VhZ2VDb2RlJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGU+O1xyXG4gICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGU7XHJcbiAgICBpc05ldyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgYWJzdHJhY3QgZGV0YWlsRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICAgIHByb3RlY3RlZCBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByb3RlY3RlZCBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICApIHt9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLmVudGl0eSQgPSB0aGlzLnJvdXRlLmRhdGEucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGRhdGEgPT4gKGRhdGEuZW50aXR5IGFzIE9ic2VydmFibGU8RW50aXR5PikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpKSxcclxuICAgICAgICAgICAgZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgIHRhcChlbnRpdHkgPT4gKHRoaXMuaWQgPSBlbnRpdHkuaWQpKSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmlzTmV3JCA9IHRoaXMuZW50aXR5JC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoZW50aXR5ID0+ICFlbnRpdHk/LmlkKSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldFVwU3RyZWFtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRVcFN0cmVhbXMoKSB7XHJcbiAgICAgICAgdGhpcy5sYW5ndWFnZUNvZGUkID0gdGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocGFyYW1NYXAgPT4gcGFyYW1NYXAuZ2V0KCdsYW5nJykpLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAobGFuZyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFuZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihsYW5nIGFzIExhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNsaWVudC51aVN0YXRlKCkubWFwU2luZ2xlKGRhdGEgPT4gZGF0YS51aVN0YXRlLmNvbnRlbnRMYW5ndWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICB0YXAodmFsID0+ICh0aGlzLmxhbmd1YWdlQ29kZSA9IHZhbCkpLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyQgPSB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XHJcblxyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoW2VudGl0eSwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyhlbnRpdHksIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGFuZ3VhZ2UoY29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVyeVBhcmFtKCdsYW5nJywgY29kZSk7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jbGllbnQuc2V0Q29udGVudExhbmd1YWdlKGNvZGUpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbkRlYWN0aXZhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsRm9ybSAmJiB0aGlzLmRldGFpbEZvcm0ucHJpc3RpbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHNldEZvcm1WYWx1ZXMoZW50aXR5OiBFbnRpdHksIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKTogdm9pZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzPFQgPSBFbnRpdHk+KFxyXG4gICAgICAgIGN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXSxcclxuICAgICAgICBmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCB8IG51bGwsXHJcbiAgICAgICAgZW50aXR5OiBULFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8VD4sXHJcbiAgICApIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkRGVmIG9mIGN1c3RvbUZpZWxkcykge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBmaWVsZERlZi5uYW1lO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9XHJcbiAgICAgICAgICAgICAgICBmaWVsZERlZi50eXBlID09PSAnbG9jYWxlU3RyaW5nJyB8fCBmaWVsZERlZi50eXBlID09PSAnbG9jYWxlVGV4dCdcclxuICAgICAgICAgICAgICAgICAgICA/IChjdXJyZW50VHJhbnNsYXRpb24gYXMgYW55KT8uY3VzdG9tRmllbGRzPy5ba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIDogKGVudGl0eSBhcyBhbnkpLmN1c3RvbUZpZWxkcz8uW2tleV07XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXA/LmdldChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0Q3VzdG9tRmllbGRDb25maWcoa2V5OiBFeGNsdWRlPGtleW9mIEN1c3RvbUZpZWxkcywgJ19fdHlwZW5hbWUnPik6IEN1c3RvbUZpZWxkQ29uZmlnW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzRm9yKGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldFF1ZXJ5UGFyYW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgJy4vJyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgICBba2V5XTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgdmVyc2lvbiBvZiB0aGUge0BsaW5rIEJhc2VEZXRhaWxDb21wb25lbnR9IHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aCBhXHJcbiAqIFtUeXBlZERvY3VtZW50Tm9kZV0oaHR0cHM6Ly90aGUtZ3VpbGQuZGV2L2dyYXBocWwvY29kZWdlbi9wbHVnaW5zL3R5cGVzY3JpcHQvdHlwZWQtZG9jdW1lbnQtbm9kZSkuXHJcbiAqXHJcbiAqIEBkb2NzQ2F0ZWdvcnkgbGlzdC1kZXRhaWwtdmlld3NcclxuICovXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQ8XHJcbiAgICBUIGV4dGVuZHMgVHlwZWREb2N1bWVudE5vZGU8YW55LCBhbnk+LFxyXG4gICAgRmllbGQgZXh0ZW5kcyBrZXlvZiBSZXN1bHRPZjxUPixcclxuPiBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8Tm9uTnVsbGFibGU8UmVzdWx0T2Y8VD5bRmllbGRdPj4ge1xyXG4gICAgcHJvdGVjdGVkIHJlc3VsdCQ6IE9ic2VydmFibGU8UmVzdWx0T2Y8VD4+O1xyXG4gICAgcHJvdGVjdGVkIGVudGl0eTogUmVzdWx0T2Y8VD5bRmllbGRdO1xyXG5cclxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcihpbmplY3QoQWN0aXZhdGVkUm91dGUpLCBpbmplY3QoUm91dGVyKSwgaW5qZWN0KFNlcnZlckNvbmZpZ1NlcnZpY2UpLCBpbmplY3QoRGF0YVNlcnZpY2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBpbml0KCkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PlxyXG4gICAgICAgICAgICAgICAgKGRhdGEuZGV0YWlsLmVudGl0eSBhcyBPYnNlcnZhYmxlPFJlc3VsdE9mPFQ+W0ZpZWxkXT4pLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCksXHJcbiAgICAgICAgICAgIHRhcChlbnRpdHkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IGVudGl0eS5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5O1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlc3VsdCQgPSB0aGlzLnJvdXRlLmRhdGEucGlwZShcclxuICAgICAgICAgICAgbWFwKGRhdGEgPT4gZGF0YS5kZXRhaWwucmVzdWx0KSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmlzTmV3JCA9IHRoaXMucm91dGUuZGF0YS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiBkYXRhLmRldGFpbC5lbnRpdHkpLFxyXG4gICAgICAgICAgICBtYXAoZW50aXR5ID0+ICFlbnRpdHkpLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0VXBTdHJlYW1zKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIHRhYnMgdGhhdCBwb2ludCB0byBhIHtAbGluayBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnR9LiBUaGlzIHRha2VzXHJcbiAqIGNhcmUgb2YgdGhlIHJvdXRlIHJlc29sdmVyIHBhcnRzIHNvIHRoYXQgdGhlIGRldGFpbCBjb21wb25lbnQgYXV0b21hdGljYWxseSBoYXMgYWNjZXNzIHRvIHRoZVxyXG4gKiBjb3JyZWN0IHJlc29sdmVkIGRldGFpbCBkYXRhLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBUeXBlU2NyaXB0XHJcbiAqIFxcQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbUmV2aWV3c1NoYXJlZE1vZHVsZV0sXHJcbiAqICAgZGVjbGFyYXRpb25zOiBbLyogLi4uICpcXC9dLFxyXG4gKiAgIHByb3ZpZGVyczogW1xyXG4gKiAgICAgcmVnaXN0ZXJQYWdlVGFiKHtcclxuICogICAgICAgbG9jYXRpb246ICdwcm9kdWN0LWRldGFpbCcsXHJcbiAqICAgICAgIHRhYjogJ1NwZWNzJyxcclxuICogICAgICAgcm91dGU6ICdzcGVjcycsXHJcbiAqICAgICAgIGNvbXBvbmVudDogZGV0YWlsQ29tcG9uZW50V2l0aFJlc29sdmVyKHtcclxuICogICAgICAgICBjb21wb25lbnQ6IFByb2R1Y3RTcGVjRGV0YWlsQ29tcG9uZW50LFxyXG4gKiAgICAgICAgIHF1ZXJ5OiBHZXRQcm9kdWN0U3BlY3NEb2N1bWVudCxcclxuICogICAgICAgICBlbnRpdHlLZXk6ICdzcGVjJyxcclxuICogICAgICAgfSksXHJcbiAqICAgICB9KSxcclxuICogICBdLFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgUHJvZHVjdFNwZWNzVWlFeHRlbnNpb25Nb2R1bGUge31cclxuICogYGBgXHJcbiAqIEBkb2NzQ2F0ZWdvcnkgbGlzdC1kZXRhaWwtdmlld3NcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZXRhaWxDb21wb25lbnRXaXRoUmVzb2x2ZXI8XHJcbiAgICBUIGV4dGVuZHMgVHlwZWREb2N1bWVudE5vZGU8YW55LCB7IGlkOiBzdHJpbmcgfT4sXHJcbiAgICBGaWVsZCBleHRlbmRzIGtleW9mIFJlc3VsdE9mPFQ+LFxyXG4gICAgUiBleHRlbmRzIEZpZWxkLFxyXG4+KGNvbmZpZzoge1xyXG4gICAgY29tcG9uZW50OiBUeXBlPFR5cGVkQmFzZURldGFpbENvbXBvbmVudDxULCBGaWVsZD4+O1xyXG4gICAgcXVlcnk6IFQ7XHJcbiAgICBlbnRpdHlLZXk6IFI7XHJcbiAgICBnZXRCcmVhZGNydW1icz86IChlbnRpdHk6IFJlc3VsdE9mPFQ+W1JdKSA9PiBCcmVhZGNydW1iVmFsdWU7XHJcbn0pIHtcclxuICAgIGNvbnN0IHJlc29sdmVGbjogUmVzb2x2ZUZuPHsgZW50aXR5OiBPYnNlcnZhYmxlPFJlc3VsdE9mPFQ+W0ZpZWxkXSB8IG51bGw+OyByZXN1bHQ/OiBSZXN1bHRPZjxUPiB9PiA9IChcclxuICAgICAgICByb3V0ZSxcclxuICAgICAgICBzdGF0ZSxcclxuICAgICkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTZXJ2aWNlID0gaW5qZWN0KERhdGFTZXJ2aWNlKTtcclxuICAgICAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtTWFwLmdldCgnaWQnKTtcclxuXHJcbiAgICAgICAgLy8gQ29tcGxldGUgdGhlIGVudGl0eSBzdHJlYW0gdXBvbiBuYXZpZ2F0aW5nIGF3YXlcclxuICAgICAgICBjb25zdCBuYXZpZ2F0ZUF3YXkkID0gcm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIEFjdGl2YXRpb25TdGFydCkpO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGlkIGZvdW5kIGluIHJvdXRlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gJ2NyZWF0ZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgZW50aXR5OiBvZihudWxsKSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQkID0gZGF0YVNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5xdWVyeShjb25maWcucXVlcnksIHsgaWQgfSlcclxuICAgICAgICAgICAgICAgIC5yZWZldGNoT25DaGFubmVsQ2hhbmdlKClcclxuICAgICAgICAgICAgICAgIC5zdHJlYW0kLnBpcGUodGFrZVVudGlsKG5hdmlnYXRlQXdheSQpLCBzaGFyZVJlcGxheSgxKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSQgPSByZXN1bHQkLnBpcGUobWFwKHJlc3VsdCA9PiByZXN1bHRbY29uZmlnLmVudGl0eUtleV0pKTtcclxuICAgICAgICAgICAgY29uc3QgZW50aXR5U3RyZWFtJCA9IGVudGl0eSQucGlwZShmaWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQkLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAocmVzdWx0ID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5OiBlbnRpdHlTdHJlYW0kLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNvbHZlRm4sXHJcbiAgICAgICAgYnJlYWRjcnVtYkZuOiAocmVzdWx0OiBhbnkpID0+IGNvbmZpZy5nZXRCcmVhZGNydW1icz8uKHJlc3VsdCkgPz8gKFtdIGFzIEJyZWFkY3J1bWJWYWx1ZVtdKSxcclxuICAgICAgICBjb21wb25lbnQ6IGNvbmZpZy5jb21wb25lbnQsXHJcbiAgICB9O1xyXG59XHJcbiJdfQ==
@@ -168,4 +168,4 @@ export class TypedBaseListComponent extends BaseListComponent {
168
168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: TypedBaseListComponent, decorators: [{
169
169
  type: Directive
170
170
  }], ctorParameters: function () { return []; } });
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvY29tbW9uL2Jhc2UtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUF1QixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUc3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUU3RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBZ0JqRTs7Ozs7Ozs7R0FRRztBQUVILGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8saUJBQWlCO0lBdUIxQixZQUFzQixNQUFjLEVBQVksS0FBcUI7UUFBL0MsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBcEJyRSxzQkFBaUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxxQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFNO1lBQ3pDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDdEMsWUFBWSxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFDO1FBTU8sYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFJakMsbUJBQWMsR0FBaUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDbEUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBVSxDQUFBLENBQUM7UUFDL0IsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFZLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELGFBQVEsR0FBbUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUVELENBQUM7SUFFekU7OztPQUdHO0lBQ0gsVUFBVSxDQUNOLFdBQW9DLEVBQ3BDLFNBQTBDLEVBQzFDLGNBQTZDLEVBQzdDLFFBQXlDO1FBRXpDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksY0FBYyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQ1gscUZBQXFGLENBQ3hGLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFFLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBOEIsRUFBRSxFQUFFO1lBQzlFLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ2hDLG9CQUFvQixFQUFFLENBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDOUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM5QixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUMxRCxvQkFBb0IsRUFBRSxDQUN6QixDQUFDO1FBRUYsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQzlELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sb0JBQW9CLENBQUMsR0FBRyxPQUErQjtRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDeEQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDM0UsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUNwQixDQUFDO1FBRUYsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQzthQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxJQUFZO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsT0FBZTtRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFXUyxhQUFhLENBQ25CLFNBQTBDLEVBQzFDLGNBQW9CLEVBQ3BCLFlBQWtGO1FBRWxGLE1BQU0sWUFBWSxHQUFHLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakcsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsV0FBVyxFQUFFLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3hGLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSztZQUN0QixtQkFBbUIsRUFBRSxPQUFPO1lBQzVCLEdBQUcsT0FBTztTQUNiLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBbkpRLGlCQUFpQjtrR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUY3QixTQUFTOztBQXdKVjs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8sc0JBS1QsU0FBUSxpQkFBMEU7SUFVbEY7UUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBTHhDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDcEQsbUJBQWMsR0FBMkIsRUFBRSxDQUFDO0lBR3BELENBQUM7SUFFUyxTQUFTLENBQUMsTUFLbkI7UUFDRyxLQUFLLENBQUMsVUFBVSxDQUNaLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFDL0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUM3QixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUssRUFBVSxDQUNuRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzVFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07YUFDMUMsT0FBTyxFQUFFO2FBQ1QsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQzthQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixPQUFPLElBQUkseUJBQXlCLENBQXlDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLE9BQU8sSUFBSSx1QkFBdUIsQ0FBdUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBa0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQThDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVELENBQUM7OEdBekRRLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQURsQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBRdWVyeVBhcmFtc0hhbmRsaW5nLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVzdWx0T2YsIFR5cGVkRG9jdW1lbnROb2RlLCBWYXJpYWJsZXNPZiB9IGZyb20gJ0BncmFwaHFsLXR5cGVkLWRvY3VtZW50LW5vZGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9kYXRhL3Byb3ZpZGVycy9kYXRhLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBRdWVyeVJlc3VsdCB9IGZyb20gJy4uL2RhdGEvcXVlcnktcmVzdWx0JztcbmltcG9ydCB7IFNlcnZlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9kYXRhL3NlcnZlci1jb25maWcnO1xuaW1wb3J0IHsgRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbiB9IGZyb20gJy4uL3Byb3ZpZGVycy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgRGF0YVRhYmxlU29ydENvbGxlY3Rpb24gfSBmcm9tICcuLi9wcm92aWRlcnMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLXNvcnQtY29sbGVjdGlvbic7XG5pbXBvcnQgeyBDdXN0b21GaWVsZENvbmZpZywgQ3VzdG9tRmllbGRzLCBMYW5ndWFnZUNvZGUgfSBmcm9tICcuL2dlbmVyYXRlZC10eXBlcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi91dGlsaXRpZXMvc2VsZWN0aW9uLW1hbmFnZXInO1xuXG5leHBvcnQgdHlwZSBMaXN0UXVlcnlGbjxSPiA9ICh0YWtlOiBudW1iZXIsIHNraXA6IG51bWJlciwgLi4uYXJnczogYW55W10pID0+IFF1ZXJ5UmVzdWx0PFIsIGFueT47XG5leHBvcnQgdHlwZSBNYXBwaW5nRm48VCwgUj4gPSAocmVzdWx0OiBSKSA9PiB7IGl0ZW1zOiBUW107IHRvdGFsSXRlbXM6IG51bWJlciB9O1xuZXhwb3J0IHR5cGUgT25QYWdlQ2hhbmdlRm48Vj4gPSAoc2tpcDogbnVtYmVyLCB0YWtlOiBudW1iZXIpID0+IFY7XG5cbi8qKlxuICogVW53cmFwcyBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IHdpdGggYW4gXCJpdGVtc1wiIHByb3BlcnR5LFxuICogcmV0dXJuaW5nIHRoZSB0eXBlIG9mIG9uZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LlxuICovXG5leHBvcnQgdHlwZSBJdGVtT2Y8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gVFtLXSBleHRlbmRzIHsgaXRlbXM6IGluZmVyIFIgfVxuICAgID8gUiBleHRlbmRzIGFueVtdXG4gICAgICAgID8gUltudW1iZXJdXG4gICAgICAgIDogUlxuICAgIDogbmV2ZXI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIGlzIGEgYmFzZSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZSBsb2dpYyByZXF1aXJlZCB0byBmZXRjaCBhbmQgbWFuaXB1bGF0ZVxuICogYSBsaXN0IG9mIGRhdGEgZnJvbSBhIHF1ZXJ5IHdoaWNoIHJldHVybnMgYSBQYWdpbmF0ZWRMaXN0IHR5cGUuXG4gKlxuICogSXQgaXMgbm9ybWFsbHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSB7QGxpbmsgRGF0YVRhYmxlMkNvbXBvbmVudH0uXG4gKlxuICogQGRvY3NDYXRlZ29yeSBsaXN0LWRldGFpbC12aWV3c1xuICovXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEJhc2VMaXN0Q29tcG9uZW50PFJlc3VsdFR5cGUsIEl0ZW1UeXBlLCBWYXJpYWJsZVR5cGUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gYW55PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBzZWFyY2hUZXJtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gICAgc2VsZWN0aW9uTWFuYWdlciA9IG5ldyBTZWxlY3Rpb25NYW5hZ2VyPGFueT4oe1xuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcbiAgICAgICAgaXRlbXNBcmVFcXVhbDogKGEsIGIpID0+IGEuaWQgPT09IGIuaWQsXG4gICAgICAgIGFkZGl0aXZlTW9kZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXN1bHQkOiBPYnNlcnZhYmxlPFJlc3VsdFR5cGU+O1xuICAgIGl0ZW1zJDogT2JzZXJ2YWJsZTxJdGVtVHlwZVtdPjtcbiAgICB0b3RhbEl0ZW1zJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGl0ZW1zUGVyUGFnZSQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjdXJyZW50UGFnZSQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHByaXZhdGUgbGlzdFF1ZXJ5OiBRdWVyeVJlc3VsdDxSZXN1bHRUeXBlLCBWYXJpYWJsZVR5cGU+O1xuICAgIHByaXZhdGUgbGlzdFF1ZXJ5Rm46IExpc3RRdWVyeUZuPFJlc3VsdFR5cGU+O1xuICAgIHByaXZhdGUgbWFwcGluZ0ZuOiBNYXBwaW5nRm48SXRlbVR5cGUsIFJlc3VsdFR5cGU+O1xuICAgIHByaXZhdGUgb25QYWdlQ2hhbmdlRm46IE9uUGFnZUNoYW5nZUZuPFZhcmlhYmxlVHlwZT4gPSAoc2tpcCwgdGFrZSkgPT5cbiAgICAgICAgKHsgb3B0aW9uczogeyBza2lwLCB0YWtlIH0gfSBhcyBhbnkpO1xuICAgIHByb3RlY3RlZCByZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHByaXZhdGUgZGVmYXVsdHM6IHsgdGFrZTogbnVtYmVyOyBza2lwOiBudW1iZXIgfSA9IHsgdGFrZTogMTAsIHNraXA6IDAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlciwgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFNldHMgdGhlIGZldGNoIGZ1bmN0aW9uIGZvciB0aGUgbGlzdCBiZWluZyBpbXBsZW1lbnRlZC5cbiAgICAgKi9cbiAgICBzZXRRdWVyeUZuKFxuICAgICAgICBsaXN0UXVlcnlGbjogTGlzdFF1ZXJ5Rm48UmVzdWx0VHlwZT4sXG4gICAgICAgIG1hcHBpbmdGbjogTWFwcGluZ0ZuPEl0ZW1UeXBlLCBSZXN1bHRUeXBlPixcbiAgICAgICAgb25QYWdlQ2hhbmdlRm4/OiBPblBhZ2VDaGFuZ2VGbjxWYXJpYWJsZVR5cGU+LFxuICAgICAgICBkZWZhdWx0cz86IHsgdGFrZTogbnVtYmVyOyBza2lwOiBudW1iZXIgfSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5saXN0UXVlcnlGbiA9IGxpc3RRdWVyeUZuO1xuICAgICAgICB0aGlzLm1hcHBpbmdGbiA9IG1hcHBpbmdGbjtcbiAgICAgICAgaWYgKG9uUGFnZUNoYW5nZUZuKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZUZuID0gb25QYWdlQ2hhbmdlRm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZmF1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5saXN0UXVlcnlGbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBObyBsaXN0UXVlcnlGbiBoYXMgYmVlbiBkZWZpbmVkLiBQbGVhc2UgY2FsbCBzdXBlci5zZXRRdWVyeUZuKCkgaW4gdGhlIGNvbnN0cnVjdG9yLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdFF1ZXJ5ID0gdGhpcy5saXN0UXVlcnlGbih0aGlzLmRlZmF1bHRzLnRha2UsIHRoaXMuZGVmYXVsdHMuc2tpcCk7XG5cbiAgICAgICAgY29uc3QgZmV0Y2hQYWdlID0gKFtjdXJyZW50UGFnZSwgaXRlbXNQZXJQYWdlLCBfXTogW251bWJlciwgbnVtYmVyLCB1bmRlZmluZWRdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWtlID0gaXRlbXNQZXJQYWdlO1xuICAgICAgICAgICAgY29uc3Qgc2tpcCA9IChjdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlO1xuICAgICAgICAgICAgdGhpcy5saXN0UXVlcnkucmVmLnJlZmV0Y2godGhpcy5vblBhZ2VDaGFuZ2VGbihza2lwLCB0YWtlKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZXN1bHQkID0gdGhpcy5saXN0UXVlcnkuc3RyZWFtJC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgICAgICAgdGhpcy5pdGVtcyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiB0aGlzLm1hcHBpbmdGbihkYXRhKS5pdGVtcykpO1xuICAgICAgICB0aGlzLnRvdGFsSXRlbXMkID0gdGhpcy5yZXN1bHQkLnBpcGUobWFwKGRhdGEgPT4gdGhpcy5tYXBwaW5nRm4oZGF0YSkudG90YWxJdGVtcykpO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlJCA9IHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKFxuICAgICAgICAgICAgbWFwKHFwbSA9PiBxcG0uZ2V0KCdwYWdlJykpLFxuICAgICAgICAgICAgbWFwKHBhZ2UgPT4gKCFwYWdlID8gMSA6ICtwYWdlKSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSQgPSB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAucGlwZShcbiAgICAgICAgICAgIG1hcChxcG0gPT4gcXBtLmdldCgncGVyUGFnZScpKSxcbiAgICAgICAgICAgIG1hcChwZXJQYWdlID0+ICghcGVyUGFnZSA/IHRoaXMuZGVmYXVsdHMudGFrZSA6ICtwZXJQYWdlKSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5jdXJyZW50UGFnZSQsIHRoaXMuaXRlbXNQZXJQYWdlJCwgdGhpcy5yZWZyZXNoJClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZmV0Y2hQYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBBY2NlcHRzIGEgbGlzdCBvZiBPYnNlcnZhYmxlcyB3aGljaCB3aWxsIHRyaWdnZXIgYSByZWZyZXNoIG9mIHRoZSBsaXN0IHdoZW4gYW55IG9mIHRoZW0gZW1pdC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVmcmVzaExpc3RPbkNoYW5nZXMoLi4uc3RyZWFtczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+Pikge1xuICAgICAgICBjb25zdCBzZWFyY2hUZXJtJCA9IHRoaXMuc2VhcmNoVGVybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgKDIgPCB2YWx1ZS5sZW5ndGggfHwgdmFsdWUubGVuZ3RoID09PSAwKSksXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgKTtcblxuICAgICAgICBtZXJnZShzZWFyY2hUZXJtJCwgLi4uc3RyZWFtcylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoJC5uZXh0KHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5saXN0UXVlcnkuY29tcGxldGVkJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogU2V0cyB0aGUgY3VycmVudCBwYWdlIG51bWJlciBpbiB0aGUgdXJsLlxuICAgICAqL1xuICAgIHNldFBhZ2VOdW1iZXIocGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0UXVlcnlQYXJhbSgncGFnZScsIHBhZ2UsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UgaW4gdGhlIHVybC5cbiAgICAgKi9cbiAgICBzZXRJdGVtc1BlclBhZ2UocGVyUGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0UXVlcnlQYXJhbSgncGVyUGFnZScsIHBlclBhZ2UsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBSZS1mZXRjaCB0aGUgY3VycmVudCBwYWdlIG9mIHJlc3VsdHMuXG4gICAgICovXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFF1ZXJ5UGFyYW0oXG4gICAgICAgIGhhc2g6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICAgICAgIG9wdGlvbnM/OiB7IHJlcGxhY2VVcmw/OiBib29sZWFuOyBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZyB9LFxuICAgICk7XG4gICAgcHJvdGVjdGVkIHNldFF1ZXJ5UGFyYW0oXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICB2YWx1ZTogYW55LFxuICAgICAgICBvcHRpb25zPzogeyByZXBsYWNlVXJsPzogYm9vbGVhbjsgcXVlcnlQYXJhbXNIYW5kbGluZz86IFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSxcbiAgICApO1xuICAgIHByb3RlY3RlZCBzZXRRdWVyeVBhcmFtKFxuICAgICAgICBrZXlPckhhc2g6IHN0cmluZyB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICAgICAgIHZhbHVlT3JPcHRpb25zPzogYW55LFxuICAgICAgICBtYXliZU9wdGlvbnM/OiB7IHJlcGxhY2VVcmw/OiBib29sZWFuOyBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZyB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBwYXJhbXNPYmplY3QgPSB0eXBlb2Yga2V5T3JIYXNoID09PSAnc3RyaW5nJyA/IHsgW2tleU9ySGFzaF06IHZhbHVlT3JPcHRpb25zIH0gOiBrZXlPckhhc2g7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGtleU9ySGFzaCA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiB2YWx1ZU9yT3B0aW9ucykgPz8ge307XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHR5cGVvZiBrZXlPckhhc2ggPT09ICdzdHJpbmcnID8geyBba2V5T3JIYXNoXTogdmFsdWVPck9wdGlvbnMgfSA6IGtleU9ySGFzaCxcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogQSB2ZXJzaW9uIG9mIHRoZSB7QGxpbmsgQmFzZUxpc3RDb21wb25lbnR9IHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aCBhXG4gKiBbVHlwZWREb2N1bWVudE5vZGVdKGh0dHBzOi8vdGhlLWd1aWxkLmRldi9ncmFwaHFsL2NvZGVnZW4vcGx1Z2lucy90eXBlc2NyaXB0L3R5cGVkLWRvY3VtZW50LW5vZGUpLlxuICpcbiAqIEBkb2NzQ2F0ZWdvcnkgbGlzdC1kZXRhaWwtdmlld3NcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgVHlwZWRCYXNlTGlzdENvbXBvbmVudDxcbiAgICAgICAgVCBleHRlbmRzIFR5cGVkRG9jdW1lbnROb2RlPGFueSwgVmFycz4sXG4gICAgICAgIEZpZWxkIGV4dGVuZHMga2V5b2YgUmVzdWx0T2Y8VD4sXG4gICAgICAgIFZhcnMgZXh0ZW5kcyB7IG9wdGlvbnM6IHsgZmlsdGVyOiBhbnk7IHNvcnQ6IGFueSB9IH0gPSBWYXJpYWJsZXNPZjxUPixcbiAgICA+XG4gICAgZXh0ZW5kcyBCYXNlTGlzdENvbXBvbmVudDxSZXN1bHRPZjxUPiwgSXRlbU9mPFJlc3VsdE9mPFQ+LCBGaWVsZD4sIFZhcmlhYmxlc09mPFQ+PlxuICAgIGltcGxlbWVudHMgT25Jbml0XG57XG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGVbXT47XG4gICAgY29udGVudExhbmd1YWdlJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGU+O1xuXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlID0gaW5qZWN0KERhdGFTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJvdGVjdGVkIHNlcnZlckNvbmZpZ1NlcnZpY2UgPSBpbmplY3QoU2VydmVyQ29uZmlnU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWZyZXNoU3RyZWFtczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiA9IFtdO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihpbmplY3QoUm91dGVyKSwgaW5qZWN0KEFjdGl2YXRlZFJvdXRlKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbmZpZ3VyZShjb25maWc6IHtcbiAgICAgICAgZG9jdW1lbnQ6IFQ7XG4gICAgICAgIGdldEl0ZW1zOiAoZGF0YTogUmVzdWx0T2Y8VD4pID0+IHsgaXRlbXM6IEFycmF5PEl0ZW1PZjxSZXN1bHRPZjxUPiwgRmllbGQ+PjsgdG90YWxJdGVtczogbnVtYmVyIH07XG4gICAgICAgIHNldFZhcmlhYmxlcz86IChza2lwOiBudW1iZXIsIHRha2U6IG51bWJlcikgPT4gVmFyaWFibGVzT2Y8VD47XG4gICAgICAgIHJlZnJlc2hMaXN0T25DaGFuZ2VzPzogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PjtcbiAgICB9KSB7XG4gICAgICAgIHN1cGVyLnNldFF1ZXJ5Rm4oXG4gICAgICAgICAgICAoYXJnczogYW55KSA9PiB0aGlzLmRhdGFTZXJ2aWNlLnF1ZXJ5KGNvbmZpZy5kb2N1bWVudCkucmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpLFxuICAgICAgICAgICAgZGF0YSA9PiBjb25maWcuZ2V0SXRlbXMoZGF0YSksXG4gICAgICAgICAgICAoc2tpcCwgdGFrZSkgPT4gY29uZmlnLnNldFZhcmlhYmxlcz8uKHNraXAsIHRha2UpID8/ICh7fSBhcyBhbnkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyQgPSB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XG4gICAgICAgIHRoaXMuY29udGVudExhbmd1YWdlJCA9IHRoaXMuZGF0YVNlcnZpY2UuY2xpZW50XG4gICAgICAgICAgICAudWlTdGF0ZSgpXG4gICAgICAgICAgICAubWFwU3RyZWFtKCh7IHVpU3RhdGUgfSkgPT4gdWlTdGF0ZS5jb250ZW50TGFuZ3VhZ2UpXG4gICAgICAgICAgICAucGlwZSh0YXAoKCkgPT4gdGhpcy5yZWZyZXNoKCkpKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoU3RyZWFtcyA9IGNvbmZpZy5yZWZyZXNoTGlzdE9uQ2hhbmdlcyA/PyBbXTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgc3VwZXIucmVmcmVzaExpc3RPbkNoYW5nZXModGhpcy5jb250ZW50TGFuZ3VhZ2UkLCAuLi50aGlzLnJlZnJlc2hTdHJlYW1zKTtcbiAgICB9XG5cbiAgICBjcmVhdGVGaWx0ZXJDb2xsZWN0aW9uKCk6IERhdGFUYWJsZUZpbHRlckNvbGxlY3Rpb248Tm9uTnVsbGFibGU8Tm9uTnVsbGFibGU8VmFyc1snb3B0aW9ucyddPlsnZmlsdGVyJ10+PiB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbjxOb25OdWxsYWJsZTxWYXJzWydvcHRpb25zJ11bJ2ZpbHRlciddPj4odGhpcy5yb3V0ZXIpO1xuICAgIH1cblxuICAgIGNyZWF0ZVNvcnRDb2xsZWN0aW9uKCk6IERhdGFUYWJsZVNvcnRDb2xsZWN0aW9uPE5vbk51bGxhYmxlPE5vbk51bGxhYmxlPFZhcnNbJ29wdGlvbnMnXT5bJ3NvcnQnXT4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhVGFibGVTb3J0Q29sbGVjdGlvbjxOb25OdWxsYWJsZTxWYXJzWydvcHRpb25zJ11bJ3NvcnQnXT4+KHRoaXMucm91dGVyKTtcbiAgICB9XG5cbiAgICBzZXRMYW5ndWFnZShjb2RlOiBMYW5ndWFnZUNvZGUpIHtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5jbGllbnQuc2V0Q29udGVudExhbmd1YWdlKGNvZGUpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGdldEN1c3RvbUZpZWxkQ29uZmlnKGtleTogRXhjbHVkZTxrZXlvZiBDdXN0b21GaWVsZHMsICdfX3R5cGVuYW1lJz4pOiBDdXN0b21GaWVsZENvbmZpZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmVyQ29uZmlnU2VydmljZS5nZXRDdXN0b21GaWVsZHNGb3Ioa2V5KTtcbiAgICB9XG59XG4iXX0=
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvY29tbW9uL2Jhc2UtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUF1QixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUc3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUU3RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBZ0JqRTs7Ozs7Ozs7R0FRRztBQUVILGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8saUJBQWlCO0lBdUIxQixZQUFzQixNQUFjLEVBQVksS0FBcUI7UUFBL0MsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBcEJyRSxzQkFBaUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxxQkFB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Q0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07YUFDMUMsT0FBTyxFQUFFO2FBQ1QsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQzthQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixPQUFPLElBQUkseUJBQXlCLENBQXlDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLE9BQU8sSUFBSSx1QkFBdUIsQ0FBdUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBa0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQThDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVELENBQUM7OEdBekRRLHNCQUFzQjtrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQURsQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUXVlcnlQYXJhbXNIYW5kbGluZywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmVzdWx0T2YsIFR5cGVkRG9jdW1lbnROb2RlLCBWYXJpYWJsZXNPZiB9IGZyb20gJ0BncmFwaHFsLXR5cGVkLWRvY3VtZW50LW5vZGUvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9kYXRhL3Byb3ZpZGVycy9kYXRhLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgUXVlcnlSZXN1bHQgfSBmcm9tICcuLi9kYXRhL3F1ZXJ5LXJlc3VsdCc7XHJcbmltcG9ydCB7IFNlcnZlckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9kYXRhL3NlcnZlci1jb25maWcnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXJDb2xsZWN0aW9uIH0gZnJvbSAnLi4vcHJvdmlkZXJzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXItY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IERhdGFUYWJsZVNvcnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vcHJvdmlkZXJzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1zb3J0LWNvbGxlY3Rpb24nO1xyXG5pbXBvcnQgeyBDdXN0b21GaWVsZENvbmZpZywgQ3VzdG9tRmllbGRzLCBMYW5ndWFnZUNvZGUgfSBmcm9tICcuL2dlbmVyYXRlZC10eXBlcyc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1hbmFnZXIgfSBmcm9tICcuL3V0aWxpdGllcy9zZWxlY3Rpb24tbWFuYWdlcic7XHJcblxyXG5leHBvcnQgdHlwZSBMaXN0UXVlcnlGbjxSPiA9ICh0YWtlOiBudW1iZXIsIHNraXA6IG51bWJlciwgLi4uYXJnczogYW55W10pID0+IFF1ZXJ5UmVzdWx0PFIsIGFueT47XHJcbmV4cG9ydCB0eXBlIE1hcHBpbmdGbjxULCBSPiA9IChyZXN1bHQ6IFIpID0+IHsgaXRlbXM6IFRbXTsgdG90YWxJdGVtczogbnVtYmVyIH07XHJcbmV4cG9ydCB0eXBlIE9uUGFnZUNoYW5nZUZuPFY+ID0gKHNraXA6IG51bWJlciwgdGFrZTogbnVtYmVyKSA9PiBWO1xyXG5cclxuLyoqXHJcbiAqIFVud3JhcHMgYSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCB3aXRoIGFuIFwiaXRlbXNcIiBwcm9wZXJ0eSxcclxuICogcmV0dXJuaW5nIHRoZSB0eXBlIG9mIG9uZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgSXRlbU9mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFRbS10gZXh0ZW5kcyB7IGl0ZW1zOiBpbmZlciBSIH1cclxuICAgID8gUiBleHRlbmRzIGFueVtdXHJcbiAgICAgICAgPyBSW251bWJlcl1cclxuICAgICAgICA6IFJcclxuICAgIDogbmV2ZXI7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIFRoaXMgaXMgYSBiYXNlIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGZldGNoIGFuZCBtYW5pcHVsYXRlXHJcbiAqIGEgbGlzdCBvZiBkYXRhIGZyb20gYSBxdWVyeSB3aGljaCByZXR1cm5zIGEgUGFnaW5hdGVkTGlzdCB0eXBlLlxyXG4gKlxyXG4gKiBJdCBpcyBub3JtYWxseSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHtAbGluayBEYXRhVGFibGUyQ29tcG9uZW50fS5cclxuICpcclxuICogQGRvY3NDYXRlZ29yeSBsaXN0LWRldGFpbC12aWV3c1xyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxyXG5leHBvcnQgY2xhc3MgQmFzZUxpc3RDb21wb25lbnQ8UmVzdWx0VHlwZSwgSXRlbVR5cGUsIFZhcmlhYmxlVHlwZSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBhbnk+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIHNlYXJjaFRlcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgIHNlbGVjdGlvbk1hbmFnZXIgPSBuZXcgU2VsZWN0aW9uTWFuYWdlcjxhbnk+KHtcclxuICAgICAgICBtdWx0aVNlbGVjdDogdHJ1ZSxcclxuICAgICAgICBpdGVtc0FyZUVxdWFsOiAoYSwgYikgPT4gYS5pZCA9PT0gYi5pZCxcclxuICAgICAgICBhZGRpdGl2ZU1vZGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHJlc3VsdCQ6IE9ic2VydmFibGU8UmVzdWx0VHlwZT47XHJcbiAgICBpdGVtcyQ6IE9ic2VydmFibGU8SXRlbVR5cGVbXT47XHJcbiAgICB0b3RhbEl0ZW1zJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgaXRlbXNQZXJQYWdlJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgY3VycmVudFBhZ2UkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBsaXN0UXVlcnk6IFF1ZXJ5UmVzdWx0PFJlc3VsdFR5cGUsIFZhcmlhYmxlVHlwZT47XHJcbiAgICBwcml2YXRlIGxpc3RRdWVyeUZuOiBMaXN0UXVlcnlGbjxSZXN1bHRUeXBlPjtcclxuICAgIHByaXZhdGUgbWFwcGluZ0ZuOiBNYXBwaW5nRm48SXRlbVR5cGUsIFJlc3VsdFR5cGU+O1xyXG4gICAgcHJpdmF0ZSBvblBhZ2VDaGFuZ2VGbjogT25QYWdlQ2hhbmdlRm48VmFyaWFibGVUeXBlPiA9IChza2lwLCB0YWtlKSA9PlxyXG4gICAgICAgICh7IG9wdGlvbnM6IHsgc2tpcCwgdGFrZSB9IH0gYXMgYW55KTtcclxuICAgIHByb3RlY3RlZCByZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gICAgcHJpdmF0ZSBkZWZhdWx0czogeyB0YWtlOiBudW1iZXI7IHNraXA6IG51bWJlciB9ID0geyB0YWtlOiAxMCwgc2tpcDogMCB9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlciwgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogU2V0cyB0aGUgZmV0Y2ggZnVuY3Rpb24gZm9yIHRoZSBsaXN0IGJlaW5nIGltcGxlbWVudGVkLlxyXG4gICAgICovXHJcbiAgICBzZXRRdWVyeUZuKFxyXG4gICAgICAgIGxpc3RRdWVyeUZuOiBMaXN0UXVlcnlGbjxSZXN1bHRUeXBlPixcclxuICAgICAgICBtYXBwaW5nRm46IE1hcHBpbmdGbjxJdGVtVHlwZSwgUmVzdWx0VHlwZT4sXHJcbiAgICAgICAgb25QYWdlQ2hhbmdlRm4/OiBPblBhZ2VDaGFuZ2VGbjxWYXJpYWJsZVR5cGU+LFxyXG4gICAgICAgIGRlZmF1bHRzPzogeyB0YWtlOiBudW1iZXI7IHNraXA6IG51bWJlciB9LFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5saXN0UXVlcnlGbiA9IGxpc3RRdWVyeUZuO1xyXG4gICAgICAgIHRoaXMubWFwcGluZ0ZuID0gbWFwcGluZ0ZuO1xyXG4gICAgICAgIGlmIChvblBhZ2VDaGFuZ2VGbikge1xyXG4gICAgICAgICAgICB0aGlzLm9uUGFnZUNoYW5nZUZuID0gb25QYWdlQ2hhbmdlRm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZWZhdWx0cykge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5saXN0UXVlcnlGbikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgTm8gbGlzdFF1ZXJ5Rm4gaGFzIGJlZW4gZGVmaW5lZC4gUGxlYXNlIGNhbGwgc3VwZXIuc2V0UXVlcnlGbigpIGluIHRoZSBjb25zdHJ1Y3Rvci5gLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpc3RRdWVyeSA9IHRoaXMubGlzdFF1ZXJ5Rm4odGhpcy5kZWZhdWx0cy50YWtlLCB0aGlzLmRlZmF1bHRzLnNraXApO1xyXG5cclxuICAgICAgICBjb25zdCBmZXRjaFBhZ2UgPSAoW2N1cnJlbnRQYWdlLCBpdGVtc1BlclBhZ2UsIF9dOiBbbnVtYmVyLCBudW1iZXIsIHVuZGVmaW5lZF0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGFrZSA9IGl0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgICAgY29uc3Qgc2tpcCA9IChjdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RRdWVyeS5yZWYucmVmZXRjaCh0aGlzLm9uUGFnZUNoYW5nZUZuKHNraXAsIHRha2UpKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlc3VsdCQgPSB0aGlzLmxpc3RRdWVyeS5zdHJlYW0kLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMkID0gdGhpcy5yZXN1bHQkLnBpcGUobWFwKGRhdGEgPT4gdGhpcy5tYXBwaW5nRm4oZGF0YSkuaXRlbXMpKTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMkID0gdGhpcy5yZXN1bHQkLnBpcGUobWFwKGRhdGEgPT4gdGhpcy5tYXBwaW5nRm4oZGF0YSkudG90YWxJdGVtcykpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UkID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChxcG0gPT4gcXBtLmdldCgncGFnZScpKSxcclxuICAgICAgICAgICAgbWFwKHBhZ2UgPT4gKCFwYWdlID8gMSA6ICtwYWdlKSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSQgPSB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAucGlwZShcclxuICAgICAgICAgICAgbWFwKHFwbSA9PiBxcG0uZ2V0KCdwZXJQYWdlJykpLFxyXG4gICAgICAgICAgICBtYXAocGVyUGFnZSA9PiAoIXBlclBhZ2UgPyB0aGlzLmRlZmF1bHRzLnRha2UgOiArcGVyUGFnZSkpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5jdXJyZW50UGFnZSQsIHRoaXMuaXRlbXNQZXJQYWdlJCwgdGhpcy5yZWZyZXNoJClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGZldGNoUGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIEFjY2VwdHMgYSBsaXN0IG9mIE9ic2VydmFibGVzIHdoaWNoIHdpbGwgdHJpZ2dlciBhIHJlZnJlc2ggb2YgdGhlIGxpc3Qgd2hlbiBhbnkgb2YgdGhlbSBlbWl0LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgcmVmcmVzaExpc3RPbkNoYW5nZXMoLi4uc3RyZWFtczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+Pikge1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFRlcm0kID0gdGhpcy5zZWFyY2hUZXJtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsICYmICgyIDwgdmFsdWUubGVuZ3RoIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkpLFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBtZXJnZShzZWFyY2hUZXJtJCwgLi4uc3RyZWFtcylcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaCQubmV4dCh1bmRlZmluZWQpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy5saXN0UXVlcnkuY29tcGxldGVkJC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgaW4gdGhlIHVybC5cclxuICAgICAqL1xyXG4gICAgc2V0UGFnZU51bWJlcihwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNldFF1ZXJ5UGFyYW0oJ3BhZ2UnLCBwYWdlLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpbiB0aGUgdXJsLlxyXG4gICAgICovXHJcbiAgICBzZXRJdGVtc1BlclBhZ2UocGVyUGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5zZXRRdWVyeVBhcmFtKCdwZXJQYWdlJywgcGVyUGFnZSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBSZS1mZXRjaCB0aGUgY3VycmVudCBwYWdlIG9mIHJlc3VsdHMuXHJcbiAgICAgKi9cclxuICAgIHJlZnJlc2goKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldFF1ZXJ5UGFyYW0oXHJcbiAgICAgICAgaGFzaDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcclxuICAgICAgICBvcHRpb25zPzogeyByZXBsYWNlVXJsPzogYm9vbGVhbjsgcXVlcnlQYXJhbXNIYW5kbGluZz86IFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSxcclxuICAgICk7XHJcbiAgICBwcm90ZWN0ZWQgc2V0UXVlcnlQYXJhbShcclxuICAgICAgICBrZXk6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZTogYW55LFxyXG4gICAgICAgIG9wdGlvbnM/OiB7IHJlcGxhY2VVcmw/OiBib29sZWFuOyBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZyB9LFxyXG4gICAgKTtcclxuICAgIHByb3RlY3RlZCBzZXRRdWVyeVBhcmFtKFxyXG4gICAgICAgIGtleU9ySGFzaDogc3RyaW5nIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcclxuICAgICAgICB2YWx1ZU9yT3B0aW9ucz86IGFueSxcclxuICAgICAgICBtYXliZU9wdGlvbnM/OiB7IHJlcGxhY2VVcmw/OiBib29sZWFuOyBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZyB9LFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zT2JqZWN0ID0gdHlwZW9mIGtleU9ySGFzaCA9PT0gJ3N0cmluZycgPyB7IFtrZXlPckhhc2hdOiB2YWx1ZU9yT3B0aW9ucyB9IDoga2V5T3JIYXNoO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGtleU9ySGFzaCA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiB2YWx1ZU9yT3B0aW9ucykgPz8ge307XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0eXBlb2Yga2V5T3JIYXNoID09PSAnc3RyaW5nJyA/IHsgW2tleU9ySGFzaF06IHZhbHVlT3JPcHRpb25zIH0gOiBrZXlPckhhc2gsXHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSB2ZXJzaW9uIG9mIHRoZSB7QGxpbmsgQmFzZUxpc3RDb21wb25lbnR9IHdoaWNoIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aCBhXHJcbiAqIFtUeXBlZERvY3VtZW50Tm9kZV0oaHR0cHM6Ly90aGUtZ3VpbGQuZGV2L2dyYXBocWwvY29kZWdlbi9wbHVnaW5zL3R5cGVzY3JpcHQvdHlwZWQtZG9jdW1lbnQtbm9kZSkuXHJcbiAqXHJcbiAqIEBkb2NzQ2F0ZWdvcnkgbGlzdC1kZXRhaWwtdmlld3NcclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgVHlwZWRCYXNlTGlzdENvbXBvbmVudDxcclxuICAgICAgICBUIGV4dGVuZHMgVHlwZWREb2N1bWVudE5vZGU8YW55LCBWYXJzPixcclxuICAgICAgICBGaWVsZCBleHRlbmRzIGtleW9mIFJlc3VsdE9mPFQ+LFxyXG4gICAgICAgIFZhcnMgZXh0ZW5kcyB7IG9wdGlvbnM6IHsgZmlsdGVyOiBhbnk7IHNvcnQ6IGFueSB9IH0gPSBWYXJpYWJsZXNPZjxUPixcclxuICAgID5cclxuICAgIGV4dGVuZHMgQmFzZUxpc3RDb21wb25lbnQ8UmVzdWx0T2Y8VD4sIEl0ZW1PZjxSZXN1bHRPZjxUPiwgRmllbGQ+LCBWYXJpYWJsZXNPZjxUPj5cclxuICAgIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICAgIGF2YWlsYWJsZUxhbmd1YWdlcyQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlW10+O1xyXG4gICAgY29udGVudExhbmd1YWdlJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGU+O1xyXG5cclxuICAgIHByb3RlY3RlZCBkYXRhU2VydmljZSA9IGluamVjdChEYXRhU2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgICBwcm90ZWN0ZWQgc2VydmVyQ29uZmlnU2VydmljZSA9IGluamVjdChTZXJ2ZXJDb25maWdTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVmcmVzaFN0cmVhbXM6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBbXTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdChSb3V0ZXIpLCBpbmplY3QoQWN0aXZhdGVkUm91dGUpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY29uZmlndXJlKGNvbmZpZzoge1xyXG4gICAgICAgIGRvY3VtZW50OiBUO1xyXG4gICAgICAgIGdldEl0ZW1zOiAoZGF0YTogUmVzdWx0T2Y8VD4pID0+IHsgaXRlbXM6IEFycmF5PEl0ZW1PZjxSZXN1bHRPZjxUPiwgRmllbGQ+PjsgdG90YWxJdGVtczogbnVtYmVyIH07XHJcbiAgICAgICAgc2V0VmFyaWFibGVzPzogKHNraXA6IG51bWJlciwgdGFrZTogbnVtYmVyKSA9PiBWYXJpYWJsZXNPZjxUPjtcclxuICAgICAgICByZWZyZXNoTGlzdE9uQ2hhbmdlcz86IEFycmF5PE9ic2VydmFibGU8YW55Pj47XHJcbiAgICB9KSB7XHJcbiAgICAgICAgc3VwZXIuc2V0UXVlcnlGbihcclxuICAgICAgICAgICAgKGFyZ3M6IGFueSkgPT4gdGhpcy5kYXRhU2VydmljZS5xdWVyeShjb25maWcuZG9jdW1lbnQpLnJlZmV0Y2hPbkNoYW5uZWxDaGFuZ2UoKSxcclxuICAgICAgICAgICAgZGF0YSA9PiBjb25maWcuZ2V0SXRlbXMoZGF0YSksXHJcbiAgICAgICAgICAgIChza2lwLCB0YWtlKSA9PiBjb25maWcuc2V0VmFyaWFibGVzPy4oc2tpcCwgdGFrZSkgPz8gKHt9IGFzIGFueSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyQgPSB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50TGFuZ3VhZ2UkID0gdGhpcy5kYXRhU2VydmljZS5jbGllbnRcclxuICAgICAgICAgICAgLnVpU3RhdGUoKVxyXG4gICAgICAgICAgICAubWFwU3RyZWFtKCh7IHVpU3RhdGUgfSkgPT4gdWlTdGF0ZS5jb250ZW50TGFuZ3VhZ2UpXHJcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLnJlZnJlc2goKSkpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFN0cmVhbXMgPSBjb25maWcucmVmcmVzaExpc3RPbkNoYW5nZXMgPz8gW107XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICBzdXBlci5yZWZyZXNoTGlzdE9uQ2hhbmdlcyh0aGlzLmNvbnRlbnRMYW5ndWFnZSQsIC4uLnRoaXMucmVmcmVzaFN0cmVhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUZpbHRlckNvbGxlY3Rpb24oKTogRGF0YVRhYmxlRmlsdGVyQ29sbGVjdGlvbjxOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxWYXJzWydvcHRpb25zJ10+WydmaWx0ZXInXT4+IHtcclxuICAgICAgICByZXR1cm4gbmV3IERhdGFUYWJsZUZpbHRlckNvbGxlY3Rpb248Tm9uTnVsbGFibGU8VmFyc1snb3B0aW9ucyddWydmaWx0ZXInXT4+KHRoaXMucm91dGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTb3J0Q29sbGVjdGlvbigpOiBEYXRhVGFibGVTb3J0Q29sbGVjdGlvbjxOb25OdWxsYWJsZTxOb25OdWxsYWJsZTxWYXJzWydvcHRpb25zJ10+Wydzb3J0J10+PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhVGFibGVTb3J0Q29sbGVjdGlvbjxOb25OdWxsYWJsZTxWYXJzWydvcHRpb25zJ11bJ3NvcnQnXT4+KHRoaXMucm91dGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRMYW5ndWFnZShjb2RlOiBMYW5ndWFnZUNvZGUpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmNsaWVudC5zZXRDb250ZW50TGFuZ3VhZ2UoY29kZSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VzdG9tRmllbGRDb25maWcoa2V5OiBFeGNsdWRlPGtleW9mIEN1c3RvbUZpZWxkcywgJ19fdHlwZW5hbWUnPik6IEN1c3RvbUZpZWxkQ29uZmlnW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZlckNvbmZpZ1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzRm9yKGtleSk7XHJcbiAgICB9XHJcbn1cclxuIl19