@tsi-developpement/tsi-shared-ui 1.10.24 → 1.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/esm2022/lib/end-points/endpoints.mjs +3 -3
  2. package/esm2022/lib/end-points/reporting-endpoints.mjs +3 -1
  3. package/esm2022/lib/models/reporting/report-template-response.mjs +1 -1
  4. package/esm2022/lib/services/fichier/generic-fichier.service.mjs +23 -0
  5. package/esm2022/lib/services/fichier/upload-generic-fichier.service.mjs +44 -0
  6. package/esm2022/lib/services/reporting/reporting.service.mjs +4 -1
  7. package/esm2022/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.mjs +15 -3
  8. package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +55 -3
  9. package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +7 -7
  10. package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +7 -7
  11. package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +8 -8
  12. package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +7 -7
  13. package/esm2022/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.mjs +10 -10
  14. package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +8 -9
  15. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +120 -52
  16. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -1
  17. package/lib/end-points/endpoints.d.ts +1 -1
  18. package/lib/end-points/reporting-endpoints.d.ts +2 -0
  19. package/lib/models/reporting/report-template-response.d.ts +1 -0
  20. package/lib/providers/shared-ui-tsi.provider.d.ts +1 -1
  21. package/lib/services/fichier/{fichier.service.d.ts → generic-fichier.service.d.ts} +3 -3
  22. package/lib/services/fichier/{fichier-upload.service.d.ts → upload-generic-fichier.service.d.ts} +3 -3
  23. package/lib/services/reporting/reporting.service.d.ts +1 -0
  24. package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +3 -0
  25. package/lib/tsi-components/manage-reporting/manage-reporting.component.d.ts +1 -0
  26. package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +3 -3
  27. package/lib/tsi-components/reporting/reporting.component.d.ts +3 -3
  28. package/lib/tsi-components/tsi-form/tsi-form.component.d.ts +3 -3
  29. package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +3 -3
  30. package/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.d.ts +3 -3
  31. package/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.d.ts +3 -3
  32. package/package.json +1 -1
  33. package/esm2022/lib/services/fichier/fichier-upload.service.mjs +0 -44
  34. package/esm2022/lib/services/fichier/fichier.service.mjs +0 -23
@@ -33,6 +33,12 @@ export class AddReportPopupComponent extends TsiFormComponentBaseComponent {
33
33
  && !this.config.data?.fromEndpoint?.includes("getallpaged")
34
34
  && this.config.data?.fromEndpoint != undefined;
35
35
  }
36
+ get lockAllButName() {
37
+ return this.mode === this.modes.duplicate;
38
+ }
39
+ get lockAllButDisplay() {
40
+ return this.mode === this.modes.edit && this.isReadOnlySource;
41
+ }
36
42
  constructor(ref, reportingService, config, notificationService, dashboardModuleService, _confirm, _httpClient, _router) {
37
43
  super(ref, config);
38
44
  this.ref = ref;
@@ -51,6 +57,7 @@ export class AddReportPopupComponent extends TsiFormComponentBaseComponent {
51
57
  this.isGetByIdRequest = false;
52
58
  this.modes = Modes;
53
59
  this.isEditionPersonnalise = false;
60
+ this.isReadOnlySource = false;
54
61
  this.administrationEndpoints = AdministrationEndpoints;
55
62
  this.selectedEndpoints = [];
56
63
  this.endpointsOptions = [];
@@ -85,6 +92,7 @@ export class AddReportPopupComponent extends TsiFormComponentBaseComponent {
85
92
  this.report.formName = this.config.data.value.formName;
86
93
  this.report.reportNameAbrege = this.config.data.value.shortName;
87
94
  this.report.display = this.config.data.value.display;
95
+ this.isReadOnlySource = this.config.data.value.isReadOnly === true;
88
96
  if (this.enableMultiSelectEndpoints) {
89
97
  this.endpointsOptions = this.report.endPointKey
90
98
  ? this.report.endPointKey.split(';').map(x => ({ label: x, value: x }))
@@ -170,6 +178,10 @@ export class AddReportPopupComponent extends TsiFormComponentBaseComponent {
170
178
  this.notificationService.warn("shared_reporting_report_endpoint_required");
171
179
  return;
172
180
  }
181
+ if (this.mode === this.modes.duplicate || this.lockAllButDisplay) {
182
+ this.hide(this.report);
183
+ return;
184
+ }
173
185
  this._confirm
174
186
  .confirm(this.l('shared_reporting_report_confirmRedirection'), undefined, (result) => {
175
187
  if (result) {
@@ -199,10 +211,10 @@ export class AddReportPopupComponent extends TsiFormComponentBaseComponent {
199
211
  });
200
212
  }
201
213
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddReportPopupComponent, deps: [{ token: i1.DynamicDialogRef }, { token: i2.ReportingService }, { token: i1.DynamicDialogConfig }, { token: i3.TsiNotificationService }, { token: i4.DashboardModuleService }, { token: i5.TsiConfirmationService }, { token: i6.HttpClient }, { token: i7.Router }], target: i0.ɵɵFactoryTarget.Component }); }
202
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddReportPopupComponent, selector: "app-add-report-popup", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\">\r\n <h4>\r\n <Tsi-Label [labelValue]=\"'Nouveau Rapport'\"></Tsi-Label>\r\n </h4>\r\n <p-panel header=\"Informations\">\r\n <div class=\"grid \">\r\n <!-- Type -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_type\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo [disabled]=\"this.mode !== modes.create\" id-field=\"key\" label-field=\"value\"\r\n [(bind)]=\"report.reportType\" [datasource]=\"dataSource\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Nom du rapport -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'reportName'\" [(inputField)]=\"report.reportName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Nom abr\u00E9g\u00E9 -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportNameAbrege\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-3\">\r\n <Tsi-Text-Box [inputName]=\"'reportNameAbrege'\" [(inputField)]=\"report.reportNameAbrege\"></Tsi-Text-Box>\r\n </div>\r\n <div class=\"flex col-6\">\r\n <!-- Ordre de tri -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_triOrdre\"></Tsi-Label>\r\n <Tsi-Integer [inputName]=\"'triOrdre'\" [(inputField)]=\"report.triOrdre\"></Tsi-Integer>\r\n </div>\r\n <!-- Afficher dashboard -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_display\"></Tsi-Label>\r\n <Tsi-CheckBox [inputName]=\"'display'\" [(inputField)]=\"report.display\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <!-- Module -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_Module\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo id-field=\"code\" label-field=\"libelle\" [multiple]=\"false\" [(bind)]=\"report.module\"\r\n [datasource]=\"modules\" [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Deuxi\u00E9me Impress -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_imppress\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-5\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'imppress'\" [(inputField)]=\"report.impress\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Edition unique -->\r\n <div class=\"col-4 col-form-label flx\">\r\n <Tsi-CheckBox [inputName]=\"'EditionUnique'\" [(inputField)]=\"report.editionUnique\"></Tsi-CheckBox>&nbsp;\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_EditionUnique\"></Tsi-Label>\r\n </div>\r\n <!-- Endpoint -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_endpoint\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo *ngIf=\"!isReportForFiche && !enableMultiSelectEndpoints\" id-field=\"key\" label-field=\"value\"\r\n [disabled]=\"modes.edit === mode || isEditionPersonnalise === false\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [elementSourceUrl]=\"administrationEndpoints.getApiAsKeyValuePair()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePair()\" [isFiltered]=\"true\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"customReportingMode && !enableMultiSelectEndpoints \" id-field=\"value\" label-field=\"value\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"isReportForFiche\"\r\n id-field=\"value\"\r\n label-field=\"value\"\r\n [(bind)]=\"selectedEndpoints\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\"\r\n [multiple]=\"true\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\">\r\n </Tsi-Search-Combo>\r\n\r\n <p-multiSelect *ngIf=\"!isReportForFiche && enableMultiSelectEndpoints\" [options]=\"endpointsOptions\" [(ngModel)]=\"selectedEndpoints\"\r\n selectedItemsLabel=\"{0} {{ 'endpoint_selected' | localize }}\" optionLabel=\"value\"\r\n optionValue=\"value\"\r\n [style]=\"{'min-width': '180px'}\" placeholder=\"{{ 'shared_reporting_choose_endpoints' | localize }}\"\r\n (onPanelShow)=\"handleOpen()\"\r\n [filter]=\"true\"\r\n (onFilter)=\"onFilter($event)\"\r\n display=\"chip\"\r\n class=\"rounded-multiselect\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2\">\r\n <span>{{ option.value}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </div>\r\n\r\n\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_formName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-6\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'formName'\"\r\n [(inputField)]=\"report.formName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Param -->\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_param\"></Tsi-Label>\r\n </div>\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'param'\" [(inputField)]=\"report.param\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </p-panel>\r\n <br />\r\n <p-panel header=\"Configuration Pivot Grid\">\r\n <div class=\"grid \">\r\n <!-- Class or view -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Class or view'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'dddd'\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Query -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Query'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9 col-form-label\">\r\n <Tsi-Text-Area [rows]=\"2\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </p-panel>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"saving\" (onCancelClick)=\"hide()\" \r\n [showSaveAndCloseButton]=\"false\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [".flx{display:flex;justify-content:center;align-items:center}::ng-deep .rounded-multiselect .p-multiselect{border-radius:12px!important}::ng-deep .rounded-multiselect .p-multiselect-label{border-radius:12px!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i11.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i12.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i13.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i14.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i15.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i16.TsiTextAreaComponent, selector: "Tsi-Text-Area", inputs: ["rows", "cols"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i17.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i18.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i19.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i20.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "showManageWorkflowButton", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "openWorkflow", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i21.LocalizePipe, name: "localize" }] }); }
214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddReportPopupComponent, selector: "app-add-report-popup", providers: [...appProviders], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\">\r\n <h4>\r\n <Tsi-Label [labelValue]=\"config.data?.title ?? 'Nouveau Rapport'\"></Tsi-Label>\r\n </h4>\r\n <p-panel header=\"Informations\">\r\n <div class=\"grid \">\r\n <!-- Type -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_type\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo [disabled]=\"this.mode !== modes.create\" id-field=\"key\" label-field=\"value\"\r\n [(bind)]=\"report.reportType\" [datasource]=\"dataSource\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Nom du rapport -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [disabled]=\"lockAllButDisplay\" [inputName]=\"'reportName'\" [(inputField)]=\"report.reportName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Nom abr\u00E9g\u00E9 -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportNameAbrege\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-3\">\r\n <Tsi-Text-Box [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'reportNameAbrege'\" [(inputField)]=\"report.reportNameAbrege\"></Tsi-Text-Box>\r\n </div>\r\n <div class=\"flex col-6\">\r\n <!-- Ordre de tri -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_triOrdre\"></Tsi-Label>\r\n <Tsi-Integer [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'triOrdre'\" [(inputField)]=\"report.triOrdre\"></Tsi-Integer>\r\n </div>\r\n <!-- Afficher dashboard -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_display\"></Tsi-Label>\r\n <Tsi-CheckBox [disabled]=\"lockAllButName\" [inputName]=\"'display'\" [(inputField)]=\"report.display\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <!-- Module -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_Module\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo [disabled]=\"lockAllButName || lockAllButDisplay\" id-field=\"code\" label-field=\"libelle\" [multiple]=\"false\" [(bind)]=\"report.module\"\r\n [datasource]=\"modules\" [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Deuxi\u00E9me Impress -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_imppress\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-5\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'imppress'\" [(inputField)]=\"report.impress\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Edition unique -->\r\n <div class=\"col-4 col-form-label flx\">\r\n <Tsi-CheckBox [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'EditionUnique'\" [(inputField)]=\"report.editionUnique\"></Tsi-CheckBox>&nbsp;\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_EditionUnique\"></Tsi-Label>\r\n </div>\r\n <!-- Endpoint -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_endpoint\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo *ngIf=\"!isReportForFiche && !enableMultiSelectEndpoints\" id-field=\"key\" label-field=\"value\"\r\n [disabled]=\"modes.edit === mode || isEditionPersonnalise === false || lockAllButName || lockAllButDisplay\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [elementSourceUrl]=\"administrationEndpoints.getApiAsKeyValuePair()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePair()\" [isFiltered]=\"true\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"customReportingMode && !enableMultiSelectEndpoints \" id-field=\"value\" label-field=\"value\"\r\n [disabled]=\"lockAllButName || lockAllButDisplay\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"isReportForFiche\"\r\n id-field=\"value\"\r\n label-field=\"value\"\r\n [disabled]=\"lockAllButName || lockAllButDisplay\"\r\n [(bind)]=\"selectedEndpoints\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\"\r\n [multiple]=\"true\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\">\r\n </Tsi-Search-Combo>\r\n\r\n <p-multiSelect *ngIf=\"!isReportForFiche && enableMultiSelectEndpoints\" [options]=\"endpointsOptions\" [(ngModel)]=\"selectedEndpoints\"\r\n [disabled]=\"lockAllButName || lockAllButDisplay\"\r\n selectedItemsLabel=\"{0} {{ 'endpoint_selected' | localize }}\" optionLabel=\"value\"\r\n optionValue=\"value\"\r\n [style]=\"{'min-width': '180px'}\" placeholder=\"{{ 'shared_reporting_choose_endpoints' | localize }}\"\r\n (onPanelShow)=\"handleOpen()\"\r\n [filter]=\"true\"\r\n (onFilter)=\"onFilter($event)\"\r\n display=\"chip\"\r\n class=\"rounded-multiselect\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2\">\r\n <span>{{ option.value}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </div>\r\n\r\n\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_formName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-6\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'formName'\"\r\n [(inputField)]=\"report.formName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Param -->\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_param\"></Tsi-Label>\r\n </div>\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-9\">\r\n <Tsi-Text-Box [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'param'\" [(inputField)]=\"report.param\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </p-panel>\r\n <br />\r\n <p-panel header=\"Configuration Pivot Grid\">\r\n <div class=\"grid \">\r\n <!-- Class or view -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Class or view'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'dddd'\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Query -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Query'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9 col-form-label\">\r\n <Tsi-Text-Area [rows]=\"2\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </p-panel>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"saving\" (onCancelClick)=\"hide()\" \r\n [showSaveAndCloseButton]=\"false\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [".flx{display:flex;justify-content:center;align-items:center}::ng-deep .rounded-multiselect .p-multiselect{border-radius:12px!important}::ng-deep .rounded-multiselect .p-multiselect-label{border-radius:12px!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i11.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i12.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i13.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "listSourceParams", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "searchDebounceTime", "comboType", "statusMetadata", "currentRowItem", "datasource", "bind", "maxSelectedLabels", "tooltipMaxDisplayedItems", "bindMode", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick", "selectionChange"] }, { kind: "component", type: i14.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i15.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i16.TsiTextAreaComponent, selector: "Tsi-Text-Area", inputs: ["rows", "cols"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i17.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i18.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i19.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate", "additionalButtonLabel", "additionalButtonIcon", "additionalButtonDisabled", "showAdditionalButton", "showSaveAndCloseButton", "mode"], outputs: ["onCancelClick", "onSaveClick", "onAdditionalButtonClick"] }, { kind: "component", type: i20.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "showManageWorkflowButton", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "openWorkflow", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "pipe", type: i21.LocalizePipe, name: "localize" }] }); }
203
215
  }
204
216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddReportPopupComponent, decorators: [{
205
217
  type: Component,
206
- args: [{ selector: 'app-add-report-popup', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\">\r\n <h4>\r\n <Tsi-Label [labelValue]=\"'Nouveau Rapport'\"></Tsi-Label>\r\n </h4>\r\n <p-panel header=\"Informations\">\r\n <div class=\"grid \">\r\n <!-- Type -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_type\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo [disabled]=\"this.mode !== modes.create\" id-field=\"key\" label-field=\"value\"\r\n [(bind)]=\"report.reportType\" [datasource]=\"dataSource\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Nom du rapport -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'reportName'\" [(inputField)]=\"report.reportName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Nom abr\u00E9g\u00E9 -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportNameAbrege\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-3\">\r\n <Tsi-Text-Box [inputName]=\"'reportNameAbrege'\" [(inputField)]=\"report.reportNameAbrege\"></Tsi-Text-Box>\r\n </div>\r\n <div class=\"flex col-6\">\r\n <!-- Ordre de tri -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_triOrdre\"></Tsi-Label>\r\n <Tsi-Integer [inputName]=\"'triOrdre'\" [(inputField)]=\"report.triOrdre\"></Tsi-Integer>\r\n </div>\r\n <!-- Afficher dashboard -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_display\"></Tsi-Label>\r\n <Tsi-CheckBox [inputName]=\"'display'\" [(inputField)]=\"report.display\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <!-- Module -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_Module\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo id-field=\"code\" label-field=\"libelle\" [multiple]=\"false\" [(bind)]=\"report.module\"\r\n [datasource]=\"modules\" [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Deuxi\u00E9me Impress -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_imppress\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-5\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'imppress'\" [(inputField)]=\"report.impress\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Edition unique -->\r\n <div class=\"col-4 col-form-label flx\">\r\n <Tsi-CheckBox [inputName]=\"'EditionUnique'\" [(inputField)]=\"report.editionUnique\"></Tsi-CheckBox>&nbsp;\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_EditionUnique\"></Tsi-Label>\r\n </div>\r\n <!-- Endpoint -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_endpoint\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo *ngIf=\"!isReportForFiche && !enableMultiSelectEndpoints\" id-field=\"key\" label-field=\"value\"\r\n [disabled]=\"modes.edit === mode || isEditionPersonnalise === false\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [elementSourceUrl]=\"administrationEndpoints.getApiAsKeyValuePair()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePair()\" [isFiltered]=\"true\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"customReportingMode && !enableMultiSelectEndpoints \" id-field=\"value\" label-field=\"value\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"isReportForFiche\"\r\n id-field=\"value\"\r\n label-field=\"value\"\r\n [(bind)]=\"selectedEndpoints\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\"\r\n [multiple]=\"true\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\">\r\n </Tsi-Search-Combo>\r\n\r\n <p-multiSelect *ngIf=\"!isReportForFiche && enableMultiSelectEndpoints\" [options]=\"endpointsOptions\" [(ngModel)]=\"selectedEndpoints\"\r\n selectedItemsLabel=\"{0} {{ 'endpoint_selected' | localize }}\" optionLabel=\"value\"\r\n optionValue=\"value\"\r\n [style]=\"{'min-width': '180px'}\" placeholder=\"{{ 'shared_reporting_choose_endpoints' | localize }}\"\r\n (onPanelShow)=\"handleOpen()\"\r\n [filter]=\"true\"\r\n (onFilter)=\"onFilter($event)\"\r\n display=\"chip\"\r\n class=\"rounded-multiselect\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2\">\r\n <span>{{ option.value}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </div>\r\n\r\n\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_formName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-6\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'formName'\"\r\n [(inputField)]=\"report.formName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Param -->\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_param\"></Tsi-Label>\r\n </div>\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'param'\" [(inputField)]=\"report.param\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </p-panel>\r\n <br />\r\n <p-panel header=\"Configuration Pivot Grid\">\r\n <div class=\"grid \">\r\n <!-- Class or view -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Class or view'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'dddd'\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Query -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Query'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9 col-form-label\">\r\n <Tsi-Text-Area [rows]=\"2\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </p-panel>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"saving\" (onCancelClick)=\"hide()\" \r\n [showSaveAndCloseButton]=\"false\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [".flx{display:flex;justify-content:center;align-items:center}::ng-deep .rounded-multiselect .p-multiselect{border-radius:12px!important}::ng-deep .rounded-multiselect .p-multiselect-label{border-radius:12px!important}\n"] }]
218
+ args: [{ selector: 'app-add-report-popup', providers: [...appProviders], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\">\r\n <h4>\r\n <Tsi-Label [labelValue]=\"config.data?.title ?? 'Nouveau Rapport'\"></Tsi-Label>\r\n </h4>\r\n <p-panel header=\"Informations\">\r\n <div class=\"grid \">\r\n <!-- Type -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_type\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo [disabled]=\"this.mode !== modes.create\" id-field=\"key\" label-field=\"value\"\r\n [(bind)]=\"report.reportType\" [datasource]=\"dataSource\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Nom du rapport -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [disabled]=\"lockAllButDisplay\" [inputName]=\"'reportName'\" [(inputField)]=\"report.reportName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Nom abr\u00E9g\u00E9 -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_reportNameAbrege\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-3\">\r\n <Tsi-Text-Box [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'reportNameAbrege'\" [(inputField)]=\"report.reportNameAbrege\"></Tsi-Text-Box>\r\n </div>\r\n <div class=\"flex col-6\">\r\n <!-- Ordre de tri -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_triOrdre\"></Tsi-Label>\r\n <Tsi-Integer [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'triOrdre'\" [(inputField)]=\"report.triOrdre\"></Tsi-Integer>\r\n </div>\r\n <!-- Afficher dashboard -->\r\n <div class=\"flex gap-4 w-6\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_display\"></Tsi-Label>\r\n <Tsi-CheckBox [disabled]=\"lockAllButName\" [inputName]=\"'display'\" [(inputField)]=\"report.display\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <!-- Module -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_Module\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo [disabled]=\"lockAllButName || lockAllButDisplay\" id-field=\"code\" label-field=\"libelle\" [multiple]=\"false\" [(bind)]=\"report.module\"\r\n [datasource]=\"modules\" [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n </div>\r\n <!-- Deuxi\u00E9me Impress -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_imppress\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-5\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'imppress'\" [(inputField)]=\"report.impress\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Edition unique -->\r\n <div class=\"col-4 col-form-label flx\">\r\n <Tsi-CheckBox [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'EditionUnique'\" [(inputField)]=\"report.editionUnique\"></Tsi-CheckBox>&nbsp;\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_EditionUnique\"></Tsi-Label>\r\n </div>\r\n <!-- Endpoint -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_endpoint\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Search-Combo *ngIf=\"!isReportForFiche && !enableMultiSelectEndpoints\" id-field=\"key\" label-field=\"value\"\r\n [disabled]=\"modes.edit === mode || isEditionPersonnalise === false || lockAllButName || lockAllButDisplay\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [elementSourceUrl]=\"administrationEndpoints.getApiAsKeyValuePair()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePair()\" [isFiltered]=\"true\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"customReportingMode && !enableMultiSelectEndpoints \" id-field=\"value\" label-field=\"value\"\r\n [disabled]=\"lockAllButName || lockAllButDisplay\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\" [(bind)]=\"report.endPointKey\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\">\r\n </Tsi-Search-Combo>\r\n\r\n <Tsi-Search-Combo *ngIf=\"isReportForFiche\"\r\n id-field=\"value\"\r\n label-field=\"value\"\r\n [disabled]=\"lockAllButName || lockAllButDisplay\"\r\n [(bind)]=\"selectedEndpoints\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllApiAsKeyValuePairByBusinessClassName(this.reportBusinessClass)\"\r\n [isFiltered]=\"false\"\r\n [multiple]=\"true\"\r\n (selectedLabelChange)=\"selectedEndpointChange($event)\">\r\n </Tsi-Search-Combo>\r\n\r\n <p-multiSelect *ngIf=\"!isReportForFiche && enableMultiSelectEndpoints\" [options]=\"endpointsOptions\" [(ngModel)]=\"selectedEndpoints\"\r\n [disabled]=\"lockAllButName || lockAllButDisplay\"\r\n selectedItemsLabel=\"{0} {{ 'endpoint_selected' | localize }}\" optionLabel=\"value\"\r\n optionValue=\"value\"\r\n [style]=\"{'min-width': '180px'}\" placeholder=\"{{ 'shared_reporting_choose_endpoints' | localize }}\"\r\n (onPanelShow)=\"handleOpen()\"\r\n [filter]=\"true\"\r\n (onFilter)=\"onFilter($event)\"\r\n display=\"chip\"\r\n class=\"rounded-multiselect\">\r\n <ng-template let-option pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2\">\r\n <span>{{ option.value}}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </div>\r\n\r\n\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_formName\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-6\">\r\n <Tsi-Text-Box [disabled]=\"true\" [inputName]=\"'formName'\"\r\n [(inputField)]=\"report.formName\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Param -->\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-3 col-form-label\">\r\n <Tsi-Label labelValue=\"administration_edition_personnalise_param\"></Tsi-Label>\r\n </div>\r\n <div *ngIf=\"isGetByIdRequest\" class=\"col-9\">\r\n <Tsi-Text-Box [disabled]=\"lockAllButName || lockAllButDisplay\" [inputName]=\"'param'\" [(inputField)]=\"report.param\"></Tsi-Text-Box>\r\n </div>\r\n </div>\r\n </p-panel>\r\n <br />\r\n <p-panel header=\"Configuration Pivot Grid\">\r\n <div class=\"grid \">\r\n <!-- Class or view -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Class or view'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9\">\r\n <Tsi-Text-Box [inputName]=\"'dddd'\"></Tsi-Text-Box>\r\n </div>\r\n <!-- Query -->\r\n <div class=\"col-3 col-form-label\">\r\n <Tsi-Label [labelValue]=\"'Query'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-9 col-form-label\">\r\n <Tsi-Text-Area [rows]=\"2\"></Tsi-Text-Area>\r\n </div>\r\n </div>\r\n </p-panel>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" [saveDisabled]=\"saving\" (onCancelClick)=\"hide()\" \r\n [showSaveAndCloseButton]=\"false\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [".flx{display:flex;justify-content:center;align-items:center}::ng-deep .rounded-multiselect .p-multiselect{border-radius:12px!important}::ng-deep .rounded-multiselect .p-multiselect-label{border-radius:12px!important}\n"] }]
207
219
  }], ctorParameters: () => [{ type: i1.DynamicDialogRef }, { type: i2.ReportingService }, { type: i1.DynamicDialogConfig }, { type: i3.TsiNotificationService }, { type: i4.DashboardModuleService }, { type: i5.TsiConfirmationService }, { type: i6.HttpClient }, { type: i7.Router }] });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlcG9ydC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9hZGQtcmVwb3J0LXBvcHVwL2FkZC1yZXBvcnQtcG9wdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL21hbmFnZS1yZXBvcnRpbmcvYWRkLXJlcG9ydC1wb3B1cC9hZGQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUVuSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw2QkFBNkI7SUFxQnhFLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7ZUFDcEQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQztlQUN4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SSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN4QixDQUFDO1FBQ0gsQ0FBQyxDQUNBLENBQUM7SUFFTixDQUFDO0lBRUQsc0JBQXNCLENBQUMsYUFBa0I7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxzQkFBc0I7YUFDeEIsYUFBYSxFQUFFO2FBQ2YsU0FBUyxDQUNSO1lBQ0UsSUFBSSxFQUFFLENBQUMsTUFBYSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FDRixDQUFBO0lBQ0wsQ0FBQzsrR0F4TlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsK0NBRnZCLENBQUMsR0FBRyxZQUFZLENBQUMsaURDbEI5Qixpa1FBa0pXOzs0RkQ5SEUsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vLi4vZW5kLXBvaW50cyc7XHJcbmltcG9ydCB7IFRzaVJlcG9ydFR5cGUsIE1vZGVzIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhc2hib2FyZE1vZHVsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXBvcnRpbmcvZGFzaGJvYXJkLW1vZHVsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVwb3J0aW5nL3JlcG9ydGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1jb25maXJtYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hZGQtcmVwb3J0LXBvcHVwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXJlcG9ydC1wb3B1cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLXJlcG9ydC1wb3B1cC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogWy4uLmFwcFByb3ZpZGVyc11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50IGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBkYXRhU291cmNlOiB7IGtleTogVHNpUmVwb3J0VHlwZSwgdmFsdWU6IHN0cmluZyB9W10gPSBbXHJcbiAgICB7IGtleTogVHNpUmVwb3J0VHlwZS5MaXN0LCB2YWx1ZTogXCJFbmQgdXNlciByZXBvcnRcIiB9LFxyXG4gICAgeyBrZXk6IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkLCB2YWx1ZTogXCJEYXNoYm9hcmRcIiB9LFxyXG4gICAgeyBrZXk6IFRzaVJlcG9ydFR5cGUuUlRGLCB2YWx1ZTogXCJSVEZcIiB9XHJcbiAgXTtcclxuXHJcbiAgaXNHZXRCeUlkUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vZGVzID0gTW9kZXM7XHJcbiAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRtaW5pc3RyYXRpb25FbmRwb2ludHMgPSBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cztcclxuICByZXBvcnRCdXNpbmVzc0NsYXNzPzogc3RyaW5nXHJcbiAgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW5cclxuXHJcbiAgc2VsZWN0ZWRFbmRwb2ludHM6IGFueVtdID0gW11cclxuICBlbmRwb2ludHNPcHRpb25zOiBhbnlbXSA9IFtdXHJcbiAgZW5hYmxlTXVsdGlTZWxlY3RFbmRwb2ludHM6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBwcml2YXRlIF9pc1JlcG9ydEZvckZpY2hlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc1JlcG9ydEZvckZpY2hlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9yb3V0ZXIudXJsLmluY2x1ZGVzKCdlZGl0aW9uLXBlcnNvbmFsaXNlZScpXHJcbiAgICAgICYmICF0aGlzLmNvbmZpZy5kYXRhPy5mcm9tRW5kcG9pbnQ/LmluY2x1ZGVzKFwiZ2V0YWxscGFnZWRcIilcclxuICAgICAgJiYgdGhpcy5jb25maWcuZGF0YT8uZnJvbUVuZHBvaW50ICE9IHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgcmVwb3J0ID0ge1xyXG4gICAgcmVwb3J0VHlwZTogJycsXHJcbiAgICByZXBvcnROYW1lOiAnJyxcclxuICAgIHJlcG9ydE5hbWVBYnJlZ2U6ICcnLFxyXG4gICAgdHJpT3JkcmU6IDAsXHJcbiAgICBtb2R1bGU6ICcnLFxyXG4gICAgaW1wcmVzczogJycsXHJcbiAgICBlZGl0aW9uVW5pcXVlOiBmYWxzZSxcclxuICAgIGVuZFBvaW50S2V5OiAnJyxcclxuICAgIGVuZFBvaW50VmFsdWU6ICcnLFxyXG4gICAgcGFyYW06ICcnLFxyXG4gICAgZm9ybU5hbWU6ICcnLFxyXG4gICAgZGlzcGxheTogZmFsc2UsXHJcbiAgfVxyXG5cclxuICBtb2R1bGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBvdmVycmlkZSByZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgcmVwb3J0aW5nU2VydmljZTogUmVwb3J0aW5nU2VydmljZSxcclxuICAgIHB1YmxpYyBvdmVycmlkZSBjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhc2hib2FyZE1vZHVsZVNlcnZpY2U6IERhc2hib2FyZE1vZHVsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maXJtOiBUc2lDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBzdXBlcihyZWYsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmVuYWJsZU11bHRpU2VsZWN0RW5kcG9pbnRzID0gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcygnZWRpdGlvbi1wZXJzb25hbGlzZWUnKSB8fCB0aGlzLmlzUmVwb3J0Rm9yRmljaGU7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGEudmFsdWUpIHtcclxuICAgICAgY29uc29sZS5sb2coXCI+Pj4gdGhpcy5jb25maWcuZGF0YTogXCIsIHRoaXMuY29uZmlnLmRhdGEpO1xyXG4gICAgICB0aGlzLnJlcG9ydC5yZXBvcnRUeXBlID0gdGhpcy5jb25maWcuZGF0YS52YWx1ZS5yZXBvcnRUeXBlO1xyXG4gICAgICB0aGlzLnJlcG9ydC5yZXBvcnROYW1lID0gdGhpcy5jb25maWcuZGF0YS52YWx1ZS5uYW1lO1xyXG4gICAgICB0aGlzLnJlcG9ydC5lbmRQb2ludEtleSA9IHRoaXMuY29uZmlnLmRhdGEudmFsdWU/LnJlc3RFbmRwb2ludDtcclxuICAgICAgdGhpcy5yZXBvcnQuZW5kUG9pbnRWYWx1ZSA9IHRoaXMuY29uZmlnLmRhdGEudmFsdWU/LnJlc3RFbmRwb2ludDtcclxuICAgICAgdGhpcy5yZXBvcnQubW9kdWxlID0gdGhpcy5jb25maWcuZGF0YS52YWx1ZS5tb2R1bGU7XHJcbiAgICAgIHRoaXMucmVwb3J0LnRyaU9yZHJlID0gdGhpcy5jb25maWcuZGF0YS52YWx1ZS5vcmRlcjtcclxuICAgICAgdGhpcy5yZXBvcnQuZm9ybU5hbWUgPSB0aGlzLmNvbmZpZy5kYXRhLnZhbHVlLmZvcm1OYW1lO1xyXG4gICAgICB0aGlzLnJlcG9ydC5yZXBvcnROYW1lQWJyZWdlID0gdGhpcy5jb25maWcuZGF0YS52YWx1ZS5zaG9ydE5hbWU7XHJcbiAgICAgIHRoaXMucmVwb3J0LmRpc3BsYXkgPSB0aGlzLmNvbmZpZy5kYXRhLnZhbHVlLmRpc3BsYXk7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVNdWx0aVNlbGVjdEVuZHBvaW50cykge1xyXG4gICAgICAgIHRoaXMuZW5kcG9pbnRzT3B0aW9ucyA9IHRoaXMucmVwb3J0LmVuZFBvaW50S2V5XHJcbiAgICAgICAgICA/IHRoaXMucmVwb3J0LmVuZFBvaW50S2V5LnNwbGl0KCc7JykubWFwKHggPT4gKHsgbGFiZWw6IHgsIHZhbHVlOiB4IH0pKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRW5kcG9pbnRzID0gdGhpcy5yZXBvcnQuZW5kUG9pbnRLZXlcclxuICAgICAgICAgID8gdGhpcy5yZXBvcnQuZW5kUG9pbnRLZXkuc3BsaXQoJzsnKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVwb3J0QnVzaW5lc3NDbGFzcyA9IHRoaXMuY29uZmlnLmRhdGE/LnJlcG9ydEJ1c2luZXNzQ2xhc3NcclxuICAgIHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSA9IHRoaXMuY29uZmlnLmRhdGE/LmN1c3RvbVJlcG9ydGluZ01vZGVcclxuXHJcbiAgICBpZiAodGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0LmVuZFBvaW50S2V5ID0gdGhpcy5jb25maWcuZGF0YT8uZnJvbUVuZHBvaW50XHJcbiAgICAgIHRoaXMucmVwb3J0LmVuZFBvaW50VmFsdWUgPSB0aGlzLmNvbmZpZy5kYXRhPy5mcm9tRW5kcG9pbnRcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGE/LmZyb21FbmRwb2ludCAmJiAhdGhpcy5pc1JlcG9ydEZvckZpY2hlICYmICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUgJiYgIXRoaXMuZW5hYmxlTXVsdGlTZWxlY3RFbmRwb2ludHMpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldEFwaUFzS2V5VmFsdWVCeVZhbHVlKGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNvbmZpZy5kYXRhLmZyb21FbmRwb2ludCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydC5lbmRQb2ludEtleSA9IHJlc1swXT8ua2V5O1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnQuZW5kUG9pbnRWYWx1ZSA9IHJlc1swXT8udmFsdWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGUgPSB0aGlzLmNvbmZpZy5kYXRhLm1vZGVcclxuICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlID0gdGhpcy5jb25maWcuZGF0YS5pc0VkaXRpb25QZXJzb25uYWxpc2VcclxuICAgIGNvbnNvbGUubG9nKHRoaXMubW9kZSlcclxuXHJcbiAgICB0aGlzLmFsbG93U2F2ZVdpdGhvdXRDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdldEFsbE1vZHVsZXMoKTtcclxuICB9XHJcblxyXG4gIHJlcG9ydFR5cGVDaGFuZ2UoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dClcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZU9wZW4oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5faHR0cENsaWVudC5nZXQ8YW55W10+KFxyXG4gICAgICAgICAgZW5jb2RlVVJJKHRoaXMuYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0QWxsQXBpQXNLZXlWYWx1ZVBhaXIoKSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBkYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBbLi4uIHRoaXMuc2VsZWN0ZWRFbmRwb2ludHMubWFwKHggPT4gKHsgbGFiZWw6IHgsIHZhbHVlOiB4IH0pKSxcclxuICAgICAgLi4udGhpcy5lbmRwb2ludHNPcHRpb25zXVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBlbmRwb2ludHM6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX2dlbmVyYXRlSHR0cFBhcmFtcyhldmVudD8uZmlsdGVyKTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLl9odHRwQ2xpZW50LmdldDxhbnlbXT4oXHJcbiAgICAgICAgICBlbmNvZGVVUkkodGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxBcGlBc0tleVZhbHVlUGFpcigpKSxcclxuICAgICAgICAgIHsgcGFyYW1zIH1cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBkYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBbLi4udGhpcy5zZWxlY3RlZEVuZHBvaW50cy5tYXAoeCA9PiAoeyBsYWJlbDogeCwgdmFsdWU6IHggfSkpLCAuLi50aGlzLmVuZHBvaW50c09wdGlvbnNdXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGVuZHBvaW50czonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3B0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2dlbmVyYXRlSHR0cFBhcmFtcyhmaWx0ZXI/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKGZpbHRlcikge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd2YWx1ZScsIGZpbHRlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2F2ZSgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5lbmFibGVNdWx0aVNlbGVjdEVuZHBvaW50cykge1xyXG4gICAgICB0aGlzLnJlcG9ydC5lbmRQb2ludEtleSA9IHRoaXMuc2VsZWN0ZWRFbmRwb2ludHMuam9pbignOycpO1xyXG4gICAgICB0aGlzLnJlcG9ydC5lbmRQb2ludFZhbHVlID0gdGhpcy5zZWxlY3RlZEVuZHBvaW50cy5qb2luKCc7Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIuc2F2ZSgpXHJcbiAgICBcclxuICAgIGlmICh0aGlzLnJlcG9ydC5yZXBvcnRUeXBlID09PSAnJykge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcInNoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3R5cGVfcmVxdWlyZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMucmVwb3J0LnJlcG9ydE5hbWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFwic2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZV9yZXF1aXJlZFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UgJiYgdGhpcy5yZXBvcnQuZW5kUG9pbnRLZXkgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFwic2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfZW5kcG9pbnRfcmVxdWlyZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jb25maXJtXHJcbiAgICAgIC5jb25maXJtKHRoaXMubCgnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfY29uZmlybVJlZGlyZWN0aW9uJyksIHVuZGVmaW5lZCwgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYW5SZWRpcmVjdCcsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcclxuICAgICAgICAgIHRoaXMuaGlkZSh0aGlzLnJlcG9ydCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYW5SZWRpcmVjdCcsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XHJcbiAgICAgICAgICB0aGlzLmhpZGUodGhpcy5yZXBvcnQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRFbmRwb2ludENoYW5nZShlbmRwb2ludFZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucmVwb3J0KVxyXG4gICAgdGhpcy5yZXBvcnQuZW5kUG9pbnRWYWx1ZSA9IGVuZHBvaW50VmFsdWU7XHJcbiAgICB0aGlzLmlzR2V0QnlJZFJlcXVlc3QgPSBlbmRwb2ludFZhbHVlLmluY2x1ZGVzKFwie2lkfVwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsTW9kdWxlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkTW9kdWxlU2VydmljZVxyXG4gICAgICAuZ2V0QWxsTW9kdWxlcygpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmV4dDogKHZhbHVlczogYW55W10pID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlcyAmJiBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICB9XHJcbn1cclxuIiwiPHRzaS1mb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKG9uU3VibWl0KT1cInNhdmUoKVwiPlxyXG4gICAgPGg0PlxyXG4gICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ05vdXZlYXUgUmFwcG9ydCdcIj48L1RzaS1MYWJlbD5cclxuICAgIDwvaDQ+XHJcbiAgICA8cC1wYW5lbCBoZWFkZXI9XCJJbmZvcm1hdGlvbnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBcIj5cclxuICAgICAgICAgICAgPCEtLSBUeXBlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgbGFiZWxWYWx1ZT1cImFkbWluaXN0cmF0aW9uX2VkaXRpb25fcGVyc29ubmFsaXNlX3R5cGVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gW2Rpc2FibGVkXT1cInRoaXMubW9kZSAhPT0gbW9kZXMuY3JlYXRlXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cInJlcG9ydC5yZXBvcnRUeXBlXCIgW2RhdGFzb3VyY2VdPVwiZGF0YVNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBOb20gZHUgcmFwcG9ydCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV9yZXBvcnROYW1lXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCIncmVwb3J0TmFtZSdcIiBbKGlucHV0RmllbGQpXT1cInJlcG9ydC5yZXBvcnROYW1lXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIE5vbSBhYnLDqWfDqSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV9yZXBvcnROYW1lQWJyZWdlXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCIncmVwb3J0TmFtZUFicmVnZSdcIiBbKGlucHV0RmllbGQpXT1cInJlcG9ydC5yZXBvcnROYW1lQWJyZWdlXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBPcmRyZSBkZSB0cmkgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCB3LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV90cmlPcmRyZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cIid0cmlPcmRyZSdcIiBbKGlucHV0RmllbGQpXT1cInJlcG9ydC50cmlPcmRyZVwiPjwvVHNpLUludGVnZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gQWZmaWNoZXIgZGFzaGJvYXJkIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgdy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBsYWJlbFZhbHVlPVwiYWRtaW5pc3RyYXRpb25fZWRpdGlvbl9wZXJzb25uYWxpc2VfZGlzcGxheVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggW2lucHV0TmFtZV09XCInZGlzcGxheSdcIiBbKGlucHV0RmllbGQpXT1cInJlcG9ydC5kaXNwbGF5XCI+PC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gTW9kdWxlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgbGFiZWxWYWx1ZT1cImFkbWluaXN0cmF0aW9uX2VkaXRpb25fcGVyc29ubmFsaXNlX01vZHVsZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBpZC1maWVsZD1cImNvZGVcIiBsYWJlbC1maWVsZD1cImxpYmVsbGVcIiBbbXVsdGlwbGVdPVwiZmFsc2VcIiBbKGJpbmQpXT1cInJlcG9ydC5tb2R1bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhc291cmNlXT1cIm1vZHVsZXNcIiBbaXNGaWx0ZXJlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBEZXV4acOpbWUgSW1wcmVzcyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV9pbXBwcmVzc1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IFtkaXNhYmxlZF09XCJ0cnVlXCIgW2lucHV0TmFtZV09XCInaW1wcHJlc3MnXCIgWyhpbnB1dEZpZWxkKV09XCJyZXBvcnQuaW1wcmVzc1wiPjwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBFZGl0aW9uIHVuaXF1ZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1mb3JtLWxhYmVsIGZseFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1DaGVja0JveCBbaW5wdXROYW1lXT1cIidFZGl0aW9uVW5pcXVlJ1wiIFsoaW5wdXRGaWVsZCldPVwicmVwb3J0LmVkaXRpb25VbmlxdWVcIj48L1RzaS1DaGVja0JveD4mbmJzcDtcclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgbGFiZWxWYWx1ZT1cImFkbWluaXN0cmF0aW9uX2VkaXRpb25fcGVyc29ubmFsaXNlX0VkaXRpb25VbmlxdWVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gRW5kcG9pbnQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBsYWJlbFZhbHVlPVwiYWRtaW5pc3RyYXRpb25fZWRpdGlvbl9wZXJzb25uYWxpc2VfZW5kcG9pbnRcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gKm5nSWY9XCIhaXNSZXBvcnRGb3JGaWNoZSAmJiAhZW5hYmxlTXVsdGlTZWxlY3RFbmRwb2ludHNcIiBpZC1maWVsZD1cImtleVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2Rlcy5lZGl0ID09PSBtb2RlIHx8IGlzRWRpdGlvblBlcnNvbm5hbGlzZSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZExhYmVsQ2hhbmdlKT1cInNlbGVjdGVkRW5kcG9pbnRDaGFuZ2UoJGV2ZW50KVwiIFsoYmluZCldPVwicmVwb3J0LmVuZFBvaW50S2V5XCJcclxuICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBcGlBc0tleVZhbHVlUGFpcigpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxBcGlBc0tleVZhbHVlUGFpcigpXCIgW2lzRmlsdGVyZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvICpuZ0lmPVwiY3VzdG9tUmVwb3J0aW5nTW9kZSAmJiAhZW5hYmxlTXVsdGlTZWxlY3RFbmRwb2ludHMgXCIgaWQtZmllbGQ9XCJ2YWx1ZVwiIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZExhYmVsQ2hhbmdlKT1cInNlbGVjdGVkRW5kcG9pbnRDaGFuZ2UoJGV2ZW50KVwiIFsoYmluZCldPVwicmVwb3J0LmVuZFBvaW50S2V5XCJcclxuICAgICAgICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxBcGlBc0tleVZhbHVlUGFpckJ5QnVzaW5lc3NDbGFzc05hbWUodGhpcy5yZXBvcnRCdXNpbmVzc0NsYXNzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzRmlsdGVyZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyAqbmdJZj1cImlzUmVwb3J0Rm9yRmljaGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwic2VsZWN0ZWRFbmRwb2ludHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cImFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEFsbEFwaUFzS2V5VmFsdWVQYWlyQnlCdXNpbmVzc0NsYXNzTmFtZSh0aGlzLnJlcG9ydEJ1c2luZXNzQ2xhc3MpXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNGaWx0ZXJlZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZExhYmVsQ2hhbmdlKT1cInNlbGVjdGVkRW5kcG9pbnRDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG5cclxuICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0ICpuZ0lmPVwiIWlzUmVwb3J0Rm9yRmljaGUgJiYgZW5hYmxlTXVsdGlTZWxlY3RFbmRwb2ludHNcIiBbb3B0aW9uc109XCJlbmRwb2ludHNPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVuZHBvaW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtc0xhYmVsPVwiezB9IHt7ICdlbmRwb2ludF9zZWxlY3RlZCcgfCBsb2NhbGl6ZSB9fVwiIG9wdGlvbkxhYmVsPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7J21pbi13aWR0aCc6ICcxODBweCd9XCIgcGxhY2Vob2xkZXI9XCJ7eyAnc2hhcmVkX3JlcG9ydGluZ19jaG9vc2VfZW5kcG9pbnRzJyB8IGxvY2FsaXplIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAob25QYW5lbFNob3cpPVwiaGFuZGxlT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkZpbHRlcik9XCJvbkZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwiY2hpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLW11bHRpc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb24gcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi52YWx1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgbGFiZWxWYWx1ZT1cImFkbWluaXN0cmF0aW9uX2VkaXRpb25fcGVyc29ubmFsaXNlX2Zvcm1OYW1lXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2Rpc2FibGVkXT1cInRydWVcIiBbaW5wdXROYW1lXT1cIidmb3JtTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwicmVwb3J0LmZvcm1OYW1lXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIFBhcmFtIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNHZXRCeUlkUmVxdWVzdFwiIGNsYXNzPVwiY29sLTMgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgbGFiZWxWYWx1ZT1cImFkbWluaXN0cmF0aW9uX2VkaXRpb25fcGVyc29ubmFsaXNlX3BhcmFtXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNHZXRCeUlkUmVxdWVzdFwiIGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCIncGFyYW0nXCIgWyhpbnB1dEZpZWxkKV09XCJyZXBvcnQucGFyYW1cIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3AtcGFuZWw+XHJcbiAgICA8YnIgLz5cclxuICAgIDxwLXBhbmVsIGhlYWRlcj1cIkNvbmZpZ3VyYXRpb24gUGl2b3QgR3JpZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIFwiPlxyXG4gICAgICAgICAgICA8IS0tIENsYXNzIG9yIHZpZXcgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInQ2xhc3Mgb3IgdmlldydcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBbaW5wdXROYW1lXT1cIidkZGRkJ1wiPjwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBRdWVyeSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidRdWVyeSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOSBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUFyZWEgW3Jvd3NdPVwiMlwiPjwvVHNpLVRleHQtQXJlYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3AtcGFuZWw+XHJcblxyXG4gICAgPFRzaS1Nb2RhbC1Gb290ZXIgW2NhbmNlbERpc2FibGVkXT1cInNhdmluZ1wiIFtzYXZlRGlzYWJsZWRdPVwic2F2aW5nXCIgKG9uQ2FuY2VsQ2xpY2spPVwiaGlkZSgpXCIgXHJcbiAgICBbc2hvd1NhdmVBbmRDbG9zZUJ1dHRvbl09XCJmYWxzZVwiPjwvVHNpLU1vZGFsLUZvb3Rlcj5cclxuPC90c2ktZm9ybT4iXX0=
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlcG9ydC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvbWFuYWdlLXJlcG9ydGluZy9hZGQtcmVwb3J0LXBvcHVwL2FkZC1yZXBvcnQtcG9wdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL21hbmFnZS1yZXBvcnRpbmcvYWRkLXJlcG9ydC1wb3B1cC9hZGQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUVuSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSw2QkFBNkI7SUFzQnhFLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7ZUFDcEQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQztlQUN4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Q3RCLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FDRixDQUFBO0lBQ0wsQ0FBQzsrR0F2T1UsdUJBQXVCO21HQUF2Qix1QkFBdUIsK0NBRnZCLENBQUMsR0FBRyxZQUFZLENBQUMsaURDbEI5QiwwcFJBcUpXOzs0RkRqSUUsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vLi4vZW5kLXBvaW50cyc7XHJcbmltcG9ydCB7IFRzaVJlcG9ydFR5cGUsIE1vZGVzIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhc2hib2FyZE1vZHVsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXBvcnRpbmcvZGFzaGJvYXJkLW1vZHVsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVwb3J0aW5nL3JlcG9ydGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1jb25maXJtYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hZGQtcmVwb3J0LXBvcHVwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXJlcG9ydC1wb3B1cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLXJlcG9ydC1wb3B1cC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogWy4uLmFwcFByb3ZpZGVyc11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZFJlcG9ydFBvcHVwQ29tcG9uZW50IGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBkYXRhU291cmNlOiB7IGtleTogVHNpUmVwb3J0VHlwZSwgdmFsdWU6IHN0cmluZyB9W10gPSBbXHJcbiAgICB7IGtleTogVHNpUmVwb3J0VHlwZS5MaXN0LCB2YWx1ZTogXCJFbmQgdXNlciByZXBvcnRcIiB9LFxyXG4gICAgeyBrZXk6IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkLCB2YWx1ZTogXCJEYXNoYm9hcmRcIiB9LFxyXG4gICAgeyBrZXk6IFRzaVJlcG9ydFR5cGUuUlRGLCB2YWx1ZTogXCJSVEZcIiB9XHJcbiAgXTtcclxuXHJcbiAgaXNHZXRCeUlkUmVxdWVzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vZGVzID0gTW9kZXM7XHJcbiAgaXNFZGl0aW9uUGVyc29ubmFsaXNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNSZWFkT25seVNvdXJjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFkbWluaXN0cmF0aW9uRW5kcG9pbnRzID0gQWRtaW5pc3RyYXRpb25FbmRwb2ludHM7XHJcbiAgcmVwb3J0QnVzaW5lc3NDbGFzcz86IHN0cmluZ1xyXG4gIGN1c3RvbVJlcG9ydGluZ01vZGU/OiBib29sZWFuXHJcblxyXG4gIHNlbGVjdGVkRW5kcG9pbnRzOiBhbnlbXSA9IFtdXHJcbiAgZW5kcG9pbnRzT3B0aW9uczogYW55W10gPSBbXVxyXG4gIGVuYWJsZU11bHRpU2VsZWN0RW5kcG9pbnRzOiBib29sZWFuID0gZmFsc2VcclxuXHJcbiAgcHJpdmF0ZSBfaXNSZXBvcnRGb3JGaWNoZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBnZXQgaXNSZXBvcnRGb3JGaWNoZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcygnZWRpdGlvbi1wZXJzb25hbGlzZWUnKVxyXG4gICAgICAmJiAhdGhpcy5jb25maWcuZGF0YT8uZnJvbUVuZHBvaW50Py5pbmNsdWRlcyhcImdldGFsbHBhZ2VkXCIpXHJcbiAgICAgICYmIHRoaXMuY29uZmlnLmRhdGE/LmZyb21FbmRwb2ludCAhPSB1bmRlZmluZWRcclxuICB9XHJcblxyXG4gIGdldCBsb2NrQWxsQnV0TmFtZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT09IHRoaXMubW9kZXMuZHVwbGljYXRlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvY2tBbGxCdXREaXNwbGF5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gdGhpcy5tb2Rlcy5lZGl0ICYmIHRoaXMuaXNSZWFkT25seVNvdXJjZTtcclxuICB9XHJcblxyXG4gIHJlcG9ydCA9IHtcclxuICAgIHJlcG9ydFR5cGU6ICcnLFxyXG4gICAgcmVwb3J0TmFtZTogJycsXHJcbiAgICByZXBvcnROYW1lQWJyZWdlOiAnJyxcclxuICAgIHRyaU9yZHJlOiAwLFxyXG4gICAgbW9kdWxlOiAnJyxcclxuICAgIGltcHJlc3M6ICcnLFxyXG4gICAgZWRpdGlvblVuaXF1ZTogZmFsc2UsXHJcbiAgICBlbmRQb2ludEtleTogJycsXHJcbiAgICBlbmRQb2ludFZhbHVlOiAnJyxcclxuICAgIHBhcmFtOiAnJyxcclxuICAgIGZvcm1OYW1lOiAnJyxcclxuICAgIGRpc3BsYXk6IGZhbHNlLFxyXG4gIH1cclxuXHJcbiAgbW9kdWxlczogYW55W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHVibGljIHJlcG9ydGluZ1NlcnZpY2U6IFJlcG9ydGluZ1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXNoYm9hcmRNb2R1bGVTZXJ2aWNlOiBEYXNoYm9hcmRNb2R1bGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgc3VwZXIocmVmLCBjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5lbmFibGVNdWx0aVNlbGVjdEVuZHBvaW50cyA9IHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoJ2VkaXRpb24tcGVyc29uYWxpc2VlJykgfHwgdGhpcy5pc1JlcG9ydEZvckZpY2hlO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhLnZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiPj4+IHRoaXMuY29uZmlnLmRhdGE6IFwiLCB0aGlzLmNvbmZpZy5kYXRhKTtcclxuICAgICAgdGhpcy5yZXBvcnQucmVwb3J0VHlwZSA9IHRoaXMuY29uZmlnLmRhdGEudmFsdWUucmVwb3J0VHlwZTtcclxuICAgICAgdGhpcy5yZXBvcnQucmVwb3J0TmFtZSA9IHRoaXMuY29uZmlnLmRhdGEudmFsdWUubmFtZTtcclxuICAgICAgdGhpcy5yZXBvcnQuZW5kUG9pbnRLZXkgPSB0aGlzLmNvbmZpZy5kYXRhLnZhbHVlPy5yZXN0RW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMucmVwb3J0LmVuZFBvaW50VmFsdWUgPSB0aGlzLmNvbmZpZy5kYXRhLnZhbHVlPy5yZXN0RW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMucmVwb3J0Lm1vZHVsZSA9IHRoaXMuY29uZmlnLmRhdGEudmFsdWUubW9kdWxlO1xyXG4gICAgICB0aGlzLnJlcG9ydC50cmlPcmRyZSA9IHRoaXMuY29uZmlnLmRhdGEudmFsdWUub3JkZXI7XHJcbiAgICAgIHRoaXMucmVwb3J0LmZvcm1OYW1lID0gdGhpcy5jb25maWcuZGF0YS52YWx1ZS5mb3JtTmFtZTtcclxuICAgICAgdGhpcy5yZXBvcnQucmVwb3J0TmFtZUFicmVnZSA9IHRoaXMuY29uZmlnLmRhdGEudmFsdWUuc2hvcnROYW1lO1xyXG4gICAgICB0aGlzLnJlcG9ydC5kaXNwbGF5ID0gdGhpcy5jb25maWcuZGF0YS52YWx1ZS5kaXNwbGF5O1xyXG4gICAgICB0aGlzLmlzUmVhZE9ubHlTb3VyY2UgPSB0aGlzLmNvbmZpZy5kYXRhLnZhbHVlLmlzUmVhZE9ubHkgPT09IHRydWU7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVNdWx0aVNlbGVjdEVuZHBvaW50cykge1xyXG4gICAgICAgIHRoaXMuZW5kcG9pbnRzT3B0aW9ucyA9IHRoaXMucmVwb3J0LmVuZFBvaW50S2V5XHJcbiAgICAgICAgICA/IHRoaXMucmVwb3J0LmVuZFBvaW50S2V5LnNwbGl0KCc7JykubWFwKHggPT4gKHsgbGFiZWw6IHgsIHZhbHVlOiB4IH0pKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRW5kcG9pbnRzID0gdGhpcy5yZXBvcnQuZW5kUG9pbnRLZXlcclxuICAgICAgICAgID8gdGhpcy5yZXBvcnQuZW5kUG9pbnRLZXkuc3BsaXQoJzsnKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVwb3J0QnVzaW5lc3NDbGFzcyA9IHRoaXMuY29uZmlnLmRhdGE/LnJlcG9ydEJ1c2luZXNzQ2xhc3NcclxuICAgIHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSA9IHRoaXMuY29uZmlnLmRhdGE/LmN1c3RvbVJlcG9ydGluZ01vZGVcclxuXHJcbiAgICBpZiAodGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0LmVuZFBvaW50S2V5ID0gdGhpcy5jb25maWcuZGF0YT8uZnJvbUVuZHBvaW50XHJcbiAgICAgIHRoaXMucmVwb3J0LmVuZFBvaW50VmFsdWUgPSB0aGlzLmNvbmZpZy5kYXRhPy5mcm9tRW5kcG9pbnRcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGE/LmZyb21FbmRwb2ludCAmJiAhdGhpcy5pc1JlcG9ydEZvckZpY2hlICYmICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUgJiYgIXRoaXMuZW5hYmxlTXVsdGlTZWxlY3RFbmRwb2ludHMpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldEFwaUFzS2V5VmFsdWVCeVZhbHVlKGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNvbmZpZy5kYXRhLmZyb21FbmRwb2ludCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydC5lbmRQb2ludEtleSA9IHJlc1swXT8ua2V5O1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnQuZW5kUG9pbnRWYWx1ZSA9IHJlc1swXT8udmFsdWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZGUgPSB0aGlzLmNvbmZpZy5kYXRhLm1vZGVcclxuICAgIHRoaXMuaXNFZGl0aW9uUGVyc29ubmFsaXNlID0gdGhpcy5jb25maWcuZGF0YS5pc0VkaXRpb25QZXJzb25uYWxpc2VcclxuICAgIGNvbnNvbGUubG9nKHRoaXMubW9kZSlcclxuXHJcbiAgICB0aGlzLmFsbG93U2F2ZVdpdGhvdXRDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdldEFsbE1vZHVsZXMoKTtcclxuICB9XHJcblxyXG4gIHJlcG9ydFR5cGVDaGFuZ2UoZXZ0OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGV2dClcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZU9wZW4oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5faHR0cENsaWVudC5nZXQ8YW55W10+KFxyXG4gICAgICAgICAgZW5jb2RlVVJJKHRoaXMuYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0QWxsQXBpQXNLZXlWYWx1ZVBhaXIoKSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBkYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBbLi4uIHRoaXMuc2VsZWN0ZWRFbmRwb2ludHMubWFwKHggPT4gKHsgbGFiZWw6IHgsIHZhbHVlOiB4IH0pKSxcclxuICAgICAgLi4udGhpcy5lbmRwb2ludHNPcHRpb25zXVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBlbmRwb2ludHM6JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX2dlbmVyYXRlSHR0cFBhcmFtcyhldmVudD8uZmlsdGVyKTtcclxuXHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLl9odHRwQ2xpZW50LmdldDxhbnlbXT4oXHJcbiAgICAgICAgICBlbmNvZGVVUkkodGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxBcGlBc0tleVZhbHVlUGFpcigpKSxcclxuICAgICAgICAgIHsgcGFyYW1zIH1cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBkYXRhIHx8IFtdO1xyXG4gICAgICB0aGlzLmVuZHBvaW50c09wdGlvbnMgPSBbLi4udGhpcy5zZWxlY3RlZEVuZHBvaW50cy5tYXAoeCA9PiAoeyBsYWJlbDogeCwgdmFsdWU6IHggfSkpLCAuLi50aGlzLmVuZHBvaW50c09wdGlvbnNdXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGVuZHBvaW50czonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3B0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2dlbmVyYXRlSHR0cFBhcmFtcyhmaWx0ZXI/OiBzdHJpbmcpOiBIdHRwUGFyYW1zIHtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgaWYgKGZpbHRlcikge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd2YWx1ZScsIGZpbHRlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2F2ZSgpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGhpcy5lbmFibGVNdWx0aVNlbGVjdEVuZHBvaW50cykge1xyXG4gICAgICB0aGlzLnJlcG9ydC5lbmRQb2ludEtleSA9IHRoaXMuc2VsZWN0ZWRFbmRwb2ludHMuam9pbignOycpO1xyXG4gICAgICB0aGlzLnJlcG9ydC5lbmRQb2ludFZhbHVlID0gdGhpcy5zZWxlY3RlZEVuZHBvaW50cy5qb2luKCc7Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIuc2F2ZSgpXHJcbiAgICBcclxuICAgIGlmICh0aGlzLnJlcG9ydC5yZXBvcnRUeXBlID09PSAnJykge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybihcInNoYXJlZF9yZXBvcnRpbmdfcmVwb3J0X3R5cGVfcmVxdWlyZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMucmVwb3J0LnJlcG9ydE5hbWUgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFwic2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfbmFtZV9yZXF1aXJlZFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pc0VkaXRpb25QZXJzb25uYWxpc2UgJiYgdGhpcy5yZXBvcnQuZW5kUG9pbnRLZXkgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKFwic2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfZW5kcG9pbnRfcmVxdWlyZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLm1vZGVzLmR1cGxpY2F0ZSB8fCB0aGlzLmxvY2tBbGxCdXREaXNwbGF5KSB7XHJcbiAgICAgIHRoaXMuaGlkZSh0aGlzLnJlcG9ydCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jb25maXJtXHJcbiAgICAgIC5jb25maXJtKHRoaXMubCgnc2hhcmVkX3JlcG9ydGluZ19yZXBvcnRfY29uZmlybVJlZGlyZWN0aW9uJyksIHVuZGVmaW5lZCwgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYW5SZWRpcmVjdCcsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcclxuICAgICAgICAgIHRoaXMuaGlkZSh0aGlzLnJlcG9ydCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYW5SZWRpcmVjdCcsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XHJcbiAgICAgICAgICB0aGlzLmhpZGUodGhpcy5yZXBvcnQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRFbmRwb2ludENoYW5nZShlbmRwb2ludFZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMucmVwb3J0KVxyXG4gICAgdGhpcy5yZXBvcnQuZW5kUG9pbnRWYWx1ZSA9IGVuZHBvaW50VmFsdWU7XHJcbiAgICB0aGlzLmlzR2V0QnlJZFJlcXVlc3QgPSBlbmRwb2ludFZhbHVlLmluY2x1ZGVzKFwie2lkfVwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsTW9kdWxlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkTW9kdWxlU2VydmljZVxyXG4gICAgICAuZ2V0QWxsTW9kdWxlcygpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmV4dDogKHZhbHVlczogYW55W10pID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlcyAmJiBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICB9XHJcbn1cclxuIiwiPHRzaS1mb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKG9uU3VibWl0KT1cInNhdmUoKVwiPlxyXG4gICAgPGg0PlxyXG4gICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiY29uZmlnLmRhdGE/LnRpdGxlID8/ICdOb3V2ZWF1IFJhcHBvcnQnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICA8L2g0PlxyXG4gICAgPHAtcGFuZWwgaGVhZGVyPVwiSW5mb3JtYXRpb25zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgXCI+XHJcbiAgICAgICAgICAgIDwhLS0gVHlwZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV90eXBlXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtkaXNhYmxlZF09XCJ0aGlzLm1vZGUgIT09IG1vZGVzLmNyZWF0ZVwiIGlkLWZpZWxkPVwia2V5XCIgbGFiZWwtZmllbGQ9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJyZXBvcnQucmVwb3J0VHlwZVwiIFtkYXRhc291cmNlXT1cImRhdGFTb3VyY2VcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gTm9tIGR1IHJhcHBvcnQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBsYWJlbFZhbHVlPVwiYWRtaW5pc3RyYXRpb25fZWRpdGlvbl9wZXJzb25uYWxpc2VfcmVwb3J0TmFtZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IFtkaXNhYmxlZF09XCJsb2NrQWxsQnV0RGlzcGxheVwiIFtpbnB1dE5hbWVdPVwiJ3JlcG9ydE5hbWUnXCIgWyhpbnB1dEZpZWxkKV09XCJyZXBvcnQucmVwb3J0TmFtZVwiPjwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBOb20gYWJyw6lnw6kgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBsYWJlbFZhbHVlPVwiYWRtaW5pc3RyYXRpb25fZWRpdGlvbl9wZXJzb25uYWxpc2VfcmVwb3J0TmFtZUFicmVnZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IFtkaXNhYmxlZF09XCJsb2NrQWxsQnV0TmFtZSB8fCBsb2NrQWxsQnV0RGlzcGxheVwiIFtpbnB1dE5hbWVdPVwiJ3JlcG9ydE5hbWVBYnJlZ2UnXCIgWyhpbnB1dEZpZWxkKV09XCJyZXBvcnQucmVwb3J0TmFtZUFicmVnZVwiPjwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gT3JkcmUgZGUgdHJpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgdy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBsYWJlbFZhbHVlPVwiYWRtaW5pc3RyYXRpb25fZWRpdGlvbl9wZXJzb25uYWxpc2VfdHJpT3JkcmVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUludGVnZXIgW2Rpc2FibGVkXT1cImxvY2tBbGxCdXROYW1lIHx8IGxvY2tBbGxCdXREaXNwbGF5XCIgW2lucHV0TmFtZV09XCIndHJpT3JkcmUnXCIgWyhpbnB1dEZpZWxkKV09XCJyZXBvcnQudHJpT3JkcmVcIj48L1RzaS1JbnRlZ2VyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEFmZmljaGVyIGRhc2hib2FyZCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IHctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgbGFiZWxWYWx1ZT1cImFkbWluaXN0cmF0aW9uX2VkaXRpb25fcGVyc29ubmFsaXNlX2Rpc3BsYXlcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IFtkaXNhYmxlZF09XCJsb2NrQWxsQnV0TmFtZVwiIFtpbnB1dE5hbWVdPVwiJ2Rpc3BsYXknXCIgWyhpbnB1dEZpZWxkKV09XCJyZXBvcnQuZGlzcGxheVwiPjwvVHNpLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIE1vZHVsZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV9Nb2R1bGVcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gW2Rpc2FibGVkXT1cImxvY2tBbGxCdXROYW1lIHx8IGxvY2tBbGxCdXREaXNwbGF5XCIgaWQtZmllbGQ9XCJjb2RlXCIgbGFiZWwtZmllbGQ9XCJsaWJlbGxlXCIgW211bHRpcGxlXT1cImZhbHNlXCIgWyhiaW5kKV09XCJyZXBvcnQubW9kdWxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGF0YXNvdXJjZV09XCJtb2R1bGVzXCIgW2lzRmlsdGVyZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gRGV1eGnDqW1lIEltcHJlc3MgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBsYWJlbFZhbHVlPVwiYWRtaW5pc3RyYXRpb25fZWRpdGlvbl9wZXJzb25uYWxpc2VfaW1wcHJlc3NcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1UZXh0LUJveCBbZGlzYWJsZWRdPVwidHJ1ZVwiIFtpbnB1dE5hbWVdPVwiJ2ltcHByZXNzJ1wiIFsoaW5wdXRGaWVsZCldPVwicmVwb3J0LmltcHJlc3NcIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gRWRpdGlvbiB1bmlxdWUgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtZm9ybS1sYWJlbCBmbHhcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggW2Rpc2FibGVkXT1cImxvY2tBbGxCdXROYW1lIHx8IGxvY2tBbGxCdXREaXNwbGF5XCIgW2lucHV0TmFtZV09XCInRWRpdGlvblVuaXF1ZSdcIiBbKGlucHV0RmllbGQpXT1cInJlcG9ydC5lZGl0aW9uVW5pcXVlXCI+PC9Uc2ktQ2hlY2tCb3g+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV9FZGl0aW9uVW5pcXVlXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEVuZHBvaW50IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgbGFiZWxWYWx1ZT1cImFkbWluaXN0cmF0aW9uX2VkaXRpb25fcGVyc29ubmFsaXNlX2VuZHBvaW50XCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvICpuZ0lmPVwiIWlzUmVwb3J0Rm9yRmljaGUgJiYgIWVuYWJsZU11bHRpU2VsZWN0RW5kcG9pbnRzXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kZXMuZWRpdCA9PT0gbW9kZSB8fCBpc0VkaXRpb25QZXJzb25uYWxpc2UgPT09IGZhbHNlIHx8IGxvY2tBbGxCdXROYW1lIHx8IGxvY2tBbGxCdXREaXNwbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRMYWJlbENoYW5nZSk9XCJzZWxlY3RlZEVuZHBvaW50Q2hhbmdlKCRldmVudClcIiBbKGJpbmQpXT1cInJlcG9ydC5lbmRQb2ludEtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0QXBpQXNLZXlWYWx1ZVBhaXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0QWxsQXBpQXNLZXlWYWx1ZVBhaXIoKVwiIFtpc0ZpbHRlcmVkXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyAqbmdJZj1cImN1c3RvbVJlcG9ydGluZ01vZGUgJiYgIWVuYWJsZU11bHRpU2VsZWN0RW5kcG9pbnRzIFwiIGlkLWZpZWxkPVwidmFsdWVcIiBsYWJlbC1maWVsZD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9ja0FsbEJ1dE5hbWUgfHwgbG9ja0FsbEJ1dERpc3BsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZExhYmVsQ2hhbmdlKT1cInNlbGVjdGVkRW5kcG9pbnRDaGFuZ2UoJGV2ZW50KVwiIFsoYmluZCldPVwicmVwb3J0LmVuZFBvaW50S2V5XCJcclxuICAgICAgICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxBcGlBc0tleVZhbHVlUGFpckJ5QnVzaW5lc3NDbGFzc05hbWUodGhpcy5yZXBvcnRCdXNpbmVzc0NsYXNzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzRmlsdGVyZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDwvVHNpLVNlYXJjaC1Db21ibz5cclxuXHJcbiAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyAqbmdJZj1cImlzUmVwb3J0Rm9yRmljaGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLWZpZWxkPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2NrQWxsQnV0TmFtZSB8fCBsb2NrQWxsQnV0RGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJzZWxlY3RlZEVuZHBvaW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0QWxsQXBpQXNLZXlWYWx1ZVBhaXJCeUJ1c2luZXNzQ2xhc3NOYW1lKHRoaXMucmVwb3J0QnVzaW5lc3NDbGFzcylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkTGFiZWxDaGFuZ2UpPVwic2VsZWN0ZWRFbmRwb2ludENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L1RzaS1TZWFyY2gtQ29tYm8+XHJcblxyXG4gICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgKm5nSWY9XCIhaXNSZXBvcnRGb3JGaWNoZSAmJiBlbmFibGVNdWx0aVNlbGVjdEVuZHBvaW50c1wiIFtvcHRpb25zXT1cImVuZHBvaW50c09wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRW5kcG9pbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9ja0FsbEJ1dE5hbWUgfHwgbG9ja0FsbEJ1dERpc3BsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXNMYWJlbD1cInswfSB7eyAnZW5kcG9pbnRfc2VsZWN0ZWQnIHwgbG9jYWxpemUgfX1cIiBvcHRpb25MYWJlbD1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieydtaW4td2lkdGgnOiAnMTgwcHgnfVwiIHBsYWNlaG9sZGVyPVwie3sgJ3NoYXJlZF9yZXBvcnRpbmdfY2hvb3NlX2VuZHBvaW50cycgfCBsb2NhbGl6ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uUGFuZWxTaG93KT1cImhhbmRsZU9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAob25GaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheT1cImNoaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1tdWx0aXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBvcHRpb24udmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV9mb3JtTmFtZVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IFtkaXNhYmxlZF09XCJ0cnVlXCIgW2lucHV0TmFtZV09XCInZm9ybU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cInJlcG9ydC5mb3JtTmFtZVwiPjwvVHNpLVRleHQtQm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBQYXJhbSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzR2V0QnlJZFJlcXVlc3RcIiBjbGFzcz1cImNvbC0zIGNvbC1mb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIGxhYmVsVmFsdWU9XCJhZG1pbmlzdHJhdGlvbl9lZGl0aW9uX3BlcnNvbm5hbGlzZV9wYXJhbVwiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzR2V0QnlJZFJlcXVlc3RcIiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8VHNpLVRleHQtQm94IFtkaXNhYmxlZF09XCJsb2NrQWxsQnV0TmFtZSB8fCBsb2NrQWxsQnV0RGlzcGxheVwiIFtpbnB1dE5hbWVdPVwiJ3BhcmFtJ1wiIFsoaW5wdXRGaWVsZCldPVwicmVwb3J0LnBhcmFtXCI+PC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXBhbmVsPlxyXG4gICAgPGJyIC8+XHJcbiAgICA8cC1wYW5lbCBoZWFkZXI9XCJDb25maWd1cmF0aW9uIFBpdm90IEdyaWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBcIj5cclxuICAgICAgICAgICAgPCEtLSBDbGFzcyBvciB2aWV3IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ0NsYXNzIG9yIHZpZXcnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCInZGRkZCdcIj48L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gUXVlcnkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBjb2wtZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInUXVlcnknXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTkgY29sLWZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1BcmVhIFtyb3dzXT1cIjJcIj48L1RzaS1UZXh0LUFyZWE+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9wLXBhbmVsPlxyXG5cclxuICAgIDxUc2ktTW9kYWwtRm9vdGVyIFtjYW5jZWxEaXNhYmxlZF09XCJzYXZpbmdcIiBbc2F2ZURpc2FibGVkXT1cInNhdmluZ1wiIChvbkNhbmNlbENsaWNrKT1cImhpZGUoKVwiIFxyXG4gICAgW3Nob3dTYXZlQW5kQ2xvc2VCdXR0b25dPVwiZmFsc2VcIj48L1RzaS1Nb2RhbC1Gb290ZXI+XHJcbjwvdHNpLWZvcm0+Il19