@tsi-developpement/tsi-shared-ui 1.8.46 → 1.8.48

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.
@@ -58,10 +58,12 @@ export class TsiActionErpCreateOrEditComponent extends TsiFormComponentBaseCompo
58
58
  field: "classe",
59
59
  header: 'shared_action_classeName',
60
60
  type: InputTypes.SEARCH_COMBO,
61
- listSourceUrl: this.administrationEndpoints.GetAllEntitiesInformations(),
61
+ listSourceUrl: this.administrationEndpoints.GetAllEntitiesInformationsMinimal(),
62
+ elementSourceUrl: this.administrationEndpoints.getEntityInfoElementSource(),
62
63
  idField: "className",
63
64
  labelField: "className",
64
65
  inputName: "classe",
66
+ isFiltered: true,
65
67
  watchForChanges: true,
66
68
  },
67
69
  {
@@ -380,10 +382,10 @@ export class TsiActionErpCreateOrEditComponent extends TsiFormComponentBaseCompo
380
382
  });
381
383
  }
382
384
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiActionErpCreateOrEditComponent, deps: [{ token: i1.ActionErpService }, { token: i2.NatureActionService }, { token: i1.ErrorResponseManagerService }, { token: i1.TsiNotificationService }, { token: i1.TsiConfirmationService }, { token: i1.EntityConfigurationService }, { token: i3.DialogService }, { token: i1.IdentityManagerService }, { token: i4.LocalizePipe }, { token: i3.DynamicDialogConfig }, { token: i3.DynamicDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
383
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiActionErpCreateOrEditComponent, selector: "lib-tsi-action-erp-create-or-edit", providers: [...appProviders, DialogService], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'shared_action_add_action'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"col-12\">\r\n <div class=\"grid row-gap-2\">\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_Nature_Action'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getNatureActionMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllNatureActionMinimal()\"\r\n [(bind)]=\"action.natureAction\" id-field=\"uid\" label-field=\"libelle\" [isFiltered]=\"true\"\r\n [inputName]=\"'NatureAction'\" [businessClass]=\"businessClassNames.NatureAction\"\r\n (bindChange)=\"onNatureActionChange($event)\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_numero'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Integer [inputName]=\"'Numero'\" [(inputField)]=\"action.numero\"\r\n [disabled]=\"true\"></Tsi-Integer></div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurDemandeur'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurDemandeur\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [isFiltered]=\"true\" [inputName]=\"'utilisateurDemandeur'\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_objet'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Objet'\" [(inputField)]=\"action.objet\"\r\n [rows]=\"3\"></Tsi-Text-Area></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_priorite'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allPrioriteActionCRMEnum\"\r\n [(bind)]=\"action.priorite\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Priorite'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurAssigne'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurAssigne\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [inputName]=\"'UtilisateurAssigne'\" [isFiltered]=\"true\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_resultat'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allResultatActionCRMEnum\"\r\n [(bind)]=\"action.resultat\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Resultat'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_lieu'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Lieu'\"\r\n [(inputField)]=\"action.lieu\"></Tsi-Text-Area></div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_ActionPrecedente'\"></Tsi-Label></div>\r\n <div class=\"col-7\"><Tsi-Integer [inputName]=\"'ActionPrecedente'\"\r\n [(inputField)]=\"action.codeActionPrecedente\" [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n <div class=\"col-1\">\r\n <Tsi-Button [icon]=\"'pi pi-caret-up'\" [disabled]=\"!action.actionPrecedente\"\r\n (onClick)=\"openActionPrecedentePopup()\">\r\n </Tsi-Button>\r\n \r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'anglais_echeance'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"form-group border p-2\">\r\n <div class=\"grid mb-1\">\r\n <div class=\"col-4\"></div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Debut' | localize }}</b>\r\n </div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Fin' | localize }}</b>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action_dateHeure_Prev'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutPrev'\"\r\n [(inputField)]=\"action.dateHeureDebutPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinPrev'\"\r\n [(inputField)]=\"action.dateHeureFinPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action.dateHeuree_Realisee'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutRealisee'\"\r\n [(inputField)]=\"action.dateHeureDebutRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinRealisee'\"\r\n [(inputField)]=\"action.dateHeureFinRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <p-fieldset [legend]=\"'action_Fieldset_alerte' | localize\">\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerte'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-4\"><Tsi-CheckBox [inputName]=\"'Alerte'\" [isBinary]=\"true\"\r\n [(inputField)]=\"action.alerte\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center \">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerteAvant'\"></Tsi-Label>\r\n </div>\r\n\r\n <div class=\"col-3 flex align-items-center gap-2\"><Tsi-Integer\r\n [inputName]=\"'AlerteAvant'\" [(inputField)]=\"action.alerteAvant\">\r\n </Tsi-Integer>\r\n <span class=\"text-nowrap\">{{'jours'| localize}}</span>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'Liste_des_action_details'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <div presentationDesigner=\"action_Generer\" class=\"grid\">\r\n <Tsi-Label class=\"col-1 col-offset-1\" [labelValue]=\"'action_Generer'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-4\" inputName=\"className\" id-field=\"className\"\r\n label-field=\"className\"\r\n [listSourceUrl]=\"this.administrationEndpoints.GetAllEntitiesInformations()\"\r\n [isFiltered]=\"false\" [(bind)]=\"classename\" [businessClass]=\"businessClass\"\r\n (bindChange)=\"onClasseSelected($event)\"> ></Tsi-Search-Combo>\r\n </div>\r\n <Tsi-Generic-Editable-Grid (onConsultClicked)=\"consultElement($event)\"\r\n [showConsultButton]=\"true\" [columns]=\"actiondetailcolom\"\r\n [gridData]=\"action.actionERPDetails\" [parent]=\"this\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'shared_action_participants'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"participantColumns\"\r\n [gridData]=\"action.actionERPUtilisateurs\" [parent]=\"this\" [showAddButton]=\"true\"\r\n [showDeleteButton]=\"true\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n </fieldset>\r\n\r\n <div *ngIf=\"mode !== modeRef.create\" class=\"grid mt-2\" presentationDesigner=\"actionnouvelle_actionERP\">\r\n <div class=\"col-8\">\r\n <Tsi-Button class=\"w-full\" (onClick)=\"openActionERPPopUp()\"\r\n [text]=\"'actionnouvelle_actionERP'\"></Tsi-Button>\r\n </div>\r\n </div>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\"\r\n [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.Fieldset, selector: "p-fieldset", inputs: ["legend", "toggleable", "collapsed", "style", "styleClass", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i9.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "events", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["itemsSave", "refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i10.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: i11.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i12.TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: ["required", "showTime", "showButtonBar"], outputs: ["inputFieldChange"] }, { kind: "component", type: i13.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i14.TsiTextAreaComponent, selector: "Tsi-Text-Area", inputs: ["rows", "cols"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i15.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i16.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: i17.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i18.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i19.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "directive", type: i20.PresentationDesignerDirective, selector: "[presentationDesigner]" }, { kind: "pipe", type: i21.LocalizePipe, name: "localize" }, { kind: "pipe", type: i22.ModalLabelPipe, name: "modalLabel" }] }); }
385
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiActionErpCreateOrEditComponent, selector: "lib-tsi-action-erp-create-or-edit", providers: [...appProviders, DialogService], usesInheritance: true, ngImport: i0, template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'shared_action_add_action'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"col-12\">\r\n <div class=\"grid row-gap-2\">\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_Nature_Action'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getNatureActionMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllNatureActionMinimal()\"\r\n [(bind)]=\"action.natureAction\" id-field=\"uid\" label-field=\"libelle\" [isFiltered]=\"true\"\r\n [inputName]=\"'NatureAction'\" [businessClass]=\"businessClassNames.NatureAction\"\r\n (bindChange)=\"onNatureActionChange($event)\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_numero'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Integer [inputName]=\"'Numero'\" [(inputField)]=\"action.numero\"\r\n [disabled]=\"true\"></Tsi-Integer></div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurDemandeur'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurDemandeur\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [isFiltered]=\"true\" [inputName]=\"'utilisateurDemandeur'\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_objet'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Objet'\" [(inputField)]=\"action.objet\"\r\n [rows]=\"3\"></Tsi-Text-Area></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_priorite'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allPrioriteActionCRMEnum\"\r\n [(bind)]=\"action.priorite\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Priorite'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurAssigne'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurAssigne\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [inputName]=\"'UtilisateurAssigne'\" [isFiltered]=\"true\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_resultat'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allResultatActionCRMEnum\"\r\n [(bind)]=\"action.resultat\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Resultat'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_lieu'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Lieu'\"\r\n [(inputField)]=\"action.lieu\"></Tsi-Text-Area></div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_ActionPrecedente'\"></Tsi-Label></div>\r\n <div class=\"col-7\"><Tsi-Integer [inputName]=\"'ActionPrecedente'\"\r\n [(inputField)]=\"action.codeActionPrecedente\" [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n <div class=\"col-1\">\r\n <Tsi-Button [icon]=\"'pi pi-caret-up'\" [disabled]=\"!action.actionPrecedente\"\r\n (onClick)=\"openActionPrecedentePopup()\">\r\n </Tsi-Button>\r\n \r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'anglais_echeance'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"form-group border p-2\">\r\n <div class=\"grid mb-1\">\r\n <div class=\"col-4\"></div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Debut' | localize }}</b>\r\n </div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Fin' | localize }}</b>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action_dateHeure_Prev'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutPrev'\"\r\n [(inputField)]=\"action.dateHeureDebutPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinPrev'\"\r\n [(inputField)]=\"action.dateHeureFinPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action.dateHeuree_Realisee'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutRealisee'\"\r\n [(inputField)]=\"action.dateHeureDebutRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinRealisee'\"\r\n [(inputField)]=\"action.dateHeureFinRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <p-fieldset [legend]=\"'action_Fieldset_alerte' | localize\">\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerte'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-4\"><Tsi-CheckBox [inputName]=\"'Alerte'\" [isBinary]=\"true\"\r\n [(inputField)]=\"action.alerte\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center \">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerteAvant'\"></Tsi-Label>\r\n </div>\r\n\r\n <div class=\"col-3 flex align-items-center gap-2\"><Tsi-Integer\r\n [inputName]=\"'AlerteAvant'\" [(inputField)]=\"action.alerteAvant\">\r\n </Tsi-Integer>\r\n <span class=\"text-nowrap\">{{'jours'| localize}}</span>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'Liste_des_action_details'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <div presentationDesigner=\"action_Generer\" class=\"grid\">\r\n <Tsi-Label class=\"col-1 col-offset-1\" [labelValue]=\"'action_Generer'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-4\" inputName=\"className\" id-field=\"className\"\r\n label-field=\"className\"\r\n [listSourceUrl]=\"this.administrationEndpoints.GetAllEntitiesInformationsMinimal()\"\r\n [elementSourceUrl]=\"this.administrationEndpoints.getEntityInfoElementSource()\"\r\n [isFiltered]=\"true\" [(bind)]=\"classename\" [businessClass]=\"businessClass\"\r\n (bindChange)=\"onClasseSelected($event)\"> ></Tsi-Search-Combo>\r\n </div>\r\n <Tsi-Generic-Editable-Grid (onConsultClicked)=\"consultElement($event)\"\r\n [showConsultButton]=\"true\" [columns]=\"actiondetailcolom\"\r\n [gridData]=\"action.actionERPDetails\" [parent]=\"this\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'shared_action_participants'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"participantColumns\"\r\n [gridData]=\"action.actionERPUtilisateurs\" [parent]=\"this\" [showAddButton]=\"true\"\r\n [showDeleteButton]=\"true\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n </fieldset>\r\n\r\n <div *ngIf=\"mode !== modeRef.create\" class=\"grid mt-2\" presentationDesigner=\"actionnouvelle_actionERP\">\r\n <div class=\"col-8\">\r\n <Tsi-Button class=\"w-full\" (onClick)=\"openActionERPPopUp()\"\r\n [text]=\"'actionnouvelle_actionERP'\"></Tsi-Button>\r\n </div>\r\n </div>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\"\r\n [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i7.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i8.Fieldset, selector: "p-fieldset", inputs: ["legend", "toggleable", "collapsed", "style", "styleClass", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i9.EditableGridComponent, selector: "Tsi-Generic-Editable-Grid", inputs: ["selectedItems", "configuration", "key", "items", "events", "showGlobalSearch", "showAddButton", "showDeleteButton", "showEditButton", "showRowSummary", "scrollHeight", "rowPerPage", "pageSize", "entityPrimaryKeyName", "columns", "gridData", "isTableLoading", "parent", "showSaveButton", "showActionColumn", "enableRowDisabling", "rowSummaryConfig", "showHaveSumary", "showRowSumary", "selectKeyOnly", "selectionMode", "showConsultButton", "editableGridBusinessClass", "orderColumn", "deleteLineButtonDisabled", "showDuplicateButton", "id"], outputs: ["itemsSave", "refreshEventEmitter", "saveDataEventEmitter", "rowChangedEventEmitter", "selectedRowEventEmitter", "addedRowEventEmitter", "focusOutEventEmitter", "cellChanged", "rowDeletedEventEmitter", "selectedItemsChange", "onRowSelect", "focusOutRow", "onConsultClicked", "rowDuplicatedEventEmitter"] }, { kind: "component", type: i10.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: i11.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i12.TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: ["required", "showTime", "showButtonBar"], outputs: ["inputFieldChange"] }, { kind: "component", type: i13.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i14.TsiTextAreaComponent, selector: "Tsi-Text-Area", inputs: ["rows", "cols"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i15.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i16.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: i17.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "component", type: i18.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i19.TsiFormComponent, selector: "tsi-form", inputs: ["class", "autocomplete", "optionalEndpoints", "disabled", "isLoading", "modalSize", "formEndpoint", "formName", "isReportingToolbarDisabled", "isCreateOnly", "statusInputDisabled"], outputs: ["onSave", "onSubmit", "onSubmitFormWorkflowConfiguration", "formRefChange", "onStatusChange"] }, { kind: "directive", type: i20.PresentationDesignerDirective, selector: "[presentationDesigner]" }, { kind: "pipe", type: i21.LocalizePipe, name: "localize" }, { kind: "pipe", type: i22.ModalLabelPipe, name: "modalLabel" }] }); }
384
386
  }
385
387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiActionErpCreateOrEditComponent, decorators: [{
386
388
  type: Component,
387
- args: [{ selector: 'lib-tsi-action-erp-create-or-edit', providers: [...appProviders, DialogService], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'shared_action_add_action'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"col-12\">\r\n <div class=\"grid row-gap-2\">\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_Nature_Action'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getNatureActionMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllNatureActionMinimal()\"\r\n [(bind)]=\"action.natureAction\" id-field=\"uid\" label-field=\"libelle\" [isFiltered]=\"true\"\r\n [inputName]=\"'NatureAction'\" [businessClass]=\"businessClassNames.NatureAction\"\r\n (bindChange)=\"onNatureActionChange($event)\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_numero'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Integer [inputName]=\"'Numero'\" [(inputField)]=\"action.numero\"\r\n [disabled]=\"true\"></Tsi-Integer></div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurDemandeur'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurDemandeur\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [isFiltered]=\"true\" [inputName]=\"'utilisateurDemandeur'\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_objet'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Objet'\" [(inputField)]=\"action.objet\"\r\n [rows]=\"3\"></Tsi-Text-Area></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_priorite'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allPrioriteActionCRMEnum\"\r\n [(bind)]=\"action.priorite\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Priorite'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurAssigne'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurAssigne\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [inputName]=\"'UtilisateurAssigne'\" [isFiltered]=\"true\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_resultat'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allResultatActionCRMEnum\"\r\n [(bind)]=\"action.resultat\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Resultat'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_lieu'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Lieu'\"\r\n [(inputField)]=\"action.lieu\"></Tsi-Text-Area></div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_ActionPrecedente'\"></Tsi-Label></div>\r\n <div class=\"col-7\"><Tsi-Integer [inputName]=\"'ActionPrecedente'\"\r\n [(inputField)]=\"action.codeActionPrecedente\" [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n <div class=\"col-1\">\r\n <Tsi-Button [icon]=\"'pi pi-caret-up'\" [disabled]=\"!action.actionPrecedente\"\r\n (onClick)=\"openActionPrecedentePopup()\">\r\n </Tsi-Button>\r\n \r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'anglais_echeance'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"form-group border p-2\">\r\n <div class=\"grid mb-1\">\r\n <div class=\"col-4\"></div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Debut' | localize }}</b>\r\n </div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Fin' | localize }}</b>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action_dateHeure_Prev'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutPrev'\"\r\n [(inputField)]=\"action.dateHeureDebutPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinPrev'\"\r\n [(inputField)]=\"action.dateHeureFinPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action.dateHeuree_Realisee'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutRealisee'\"\r\n [(inputField)]=\"action.dateHeureDebutRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinRealisee'\"\r\n [(inputField)]=\"action.dateHeureFinRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <p-fieldset [legend]=\"'action_Fieldset_alerte' | localize\">\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerte'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-4\"><Tsi-CheckBox [inputName]=\"'Alerte'\" [isBinary]=\"true\"\r\n [(inputField)]=\"action.alerte\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center \">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerteAvant'\"></Tsi-Label>\r\n </div>\r\n\r\n <div class=\"col-3 flex align-items-center gap-2\"><Tsi-Integer\r\n [inputName]=\"'AlerteAvant'\" [(inputField)]=\"action.alerteAvant\">\r\n </Tsi-Integer>\r\n <span class=\"text-nowrap\">{{'jours'| localize}}</span>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'Liste_des_action_details'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <div presentationDesigner=\"action_Generer\" class=\"grid\">\r\n <Tsi-Label class=\"col-1 col-offset-1\" [labelValue]=\"'action_Generer'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-4\" inputName=\"className\" id-field=\"className\"\r\n label-field=\"className\"\r\n [listSourceUrl]=\"this.administrationEndpoints.GetAllEntitiesInformations()\"\r\n [isFiltered]=\"false\" [(bind)]=\"classename\" [businessClass]=\"businessClass\"\r\n (bindChange)=\"onClasseSelected($event)\"> ></Tsi-Search-Combo>\r\n </div>\r\n <Tsi-Generic-Editable-Grid (onConsultClicked)=\"consultElement($event)\"\r\n [showConsultButton]=\"true\" [columns]=\"actiondetailcolom\"\r\n [gridData]=\"action.actionERPDetails\" [parent]=\"this\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'shared_action_participants'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"participantColumns\"\r\n [gridData]=\"action.actionERPUtilisateurs\" [parent]=\"this\" [showAddButton]=\"true\"\r\n [showDeleteButton]=\"true\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n </fieldset>\r\n\r\n <div *ngIf=\"mode !== modeRef.create\" class=\"grid mt-2\" presentationDesigner=\"actionnouvelle_actionERP\">\r\n <div class=\"col-8\">\r\n <Tsi-Button class=\"w-full\" (onClick)=\"openActionERPPopUp()\"\r\n [text]=\"'actionnouvelle_actionERP'\"></Tsi-Button>\r\n </div>\r\n </div>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\"\r\n [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>" }]
389
+ args: [{ selector: 'lib-tsi-action-erp-create-or-edit', providers: [...appProviders, DialogService], template: "<tsi-form class=\"form-horizontal\" autocomplete=\"off\" (onSubmit)=\"save()\" [isLoading]=\"isloading\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'shared_action_add_action'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n\r\n <fieldset [disabled]=\"isDeleteMode() || isConsultMode()\">\r\n <div class=\"col-12\">\r\n <div class=\"grid row-gap-2\">\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_Nature_Action'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getNatureActionMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllNatureActionMinimal()\"\r\n [(bind)]=\"action.natureAction\" id-field=\"uid\" label-field=\"libelle\" [isFiltered]=\"true\"\r\n [inputName]=\"'NatureAction'\" [businessClass]=\"businessClassNames.NatureAction\"\r\n (bindChange)=\"onNatureActionChange($event)\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_numero'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Integer [inputName]=\"'Numero'\" [(inputField)]=\"action.numero\"\r\n [disabled]=\"true\"></Tsi-Integer></div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurDemandeur'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurDemandeur\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [isFiltered]=\"true\" [inputName]=\"'utilisateurDemandeur'\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_objet'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Objet'\" [(inputField)]=\"action.objet\"\r\n [rows]=\"3\"></Tsi-Text-Area></div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 md:col-6\">\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_priorite'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allPrioriteActionCRMEnum\"\r\n [(bind)]=\"action.priorite\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Priorite'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_utilisateurAssigne'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"administrationEndpoints.getUtilisateurMinimal()\"\r\n [listSourceUrl]=\"administrationEndpoints.getAllUtilisateurMinimal()\"\r\n [(bind)]=\"action.utilisateurAssigne\" id-field=\"uid\" label-field=\"nomPrenom\"\r\n [inputName]=\"'UtilisateurAssigne'\" [isFiltered]=\"true\"\r\n [businessClass]=\"businessClassNames.Utilisateur\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_resultat'\"></Tsi-Label></div>\r\n <div class=\"col-8\">\r\n <Tsi-Search-Combo [listSourceUrl]=\"administrationEndpoints.allResultatActionCRMEnum\"\r\n [(bind)]=\"action.resultat\" id-field=\"key\" label-field=\"value\" [inputName]=\"'Resultat'\"\r\n [showSearchButton]=\"false\"></Tsi-Search-Combo>\r\n </div>\r\n </div>\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_lieu'\"></Tsi-Label></div>\r\n <div class=\"col-8\"><Tsi-Text-Area [inputName]=\"'Lieu'\"\r\n [(inputField)]=\"action.lieu\"></Tsi-Text-Area></div>\r\n </div>\r\n\r\n <div class=\"grid align-items-center\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'shared_action_ActionPrecedente'\"></Tsi-Label></div>\r\n <div class=\"col-7\"><Tsi-Integer [inputName]=\"'ActionPrecedente'\"\r\n [(inputField)]=\"action.codeActionPrecedente\" [disabled]=\"true\"></Tsi-Integer>\r\n </div>\r\n <div class=\"col-1\">\r\n <Tsi-Button [icon]=\"'pi pi-caret-up'\" [disabled]=\"!action.actionPrecedente\"\r\n (onClick)=\"openActionPrecedentePopup()\">\r\n </Tsi-Button>\r\n \r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <p-tabView>\r\n <p-tabPanel [header]=\"'anglais_echeance'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n\r\n <div class=\"grid\">\r\n <div class=\"col-8\">\r\n <div class=\"form-group border p-2\">\r\n <div class=\"grid mb-1\">\r\n <div class=\"col-4\"></div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Debut' | localize }}</b>\r\n </div>\r\n <div class=\"col-4 text-center\"><b>{{ 'action_Fin' | localize }}</b>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action_dateHeure_Prev'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutPrev'\"\r\n [(inputField)]=\"action.dateHeureDebutPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinPrev'\"\r\n [(inputField)]=\"action.dateHeureFinPrev\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center\">\r\n <div class=\"col-4\"><Tsi-Label\r\n [labelValue]=\"'action.dateHeuree_Realisee'\"></Tsi-Label></div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureDebutRealisee'\"\r\n [(inputField)]=\"action.dateHeureDebutRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n <div class=\"col-4\"><Tsi-Date-Picker [inputName]=\"'DateHeureFinRealisee'\"\r\n [(inputField)]=\"action.dateHeureFinRealisee\"\r\n [showTime]=\"true\"></Tsi-Date-Picker>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4\">\r\n <p-fieldset [legend]=\"'action_Fieldset_alerte' | localize\">\r\n <div class=\"grid flex align-items-center mb-2\">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerte'\"></Tsi-Label>\r\n </div>\r\n <div class=\"col-4\"><Tsi-CheckBox [inputName]=\"'Alerte'\" [isBinary]=\"true\"\r\n [(inputField)]=\"action.alerte\"></Tsi-CheckBox>\r\n </div>\r\n </div>\r\n <div class=\"grid flex align-items-center \">\r\n <div class=\"col-3\"><Tsi-Label [labelValue]=\"'action_alerteAvant'\"></Tsi-Label>\r\n </div>\r\n\r\n <div class=\"col-3 flex align-items-center gap-2\"><Tsi-Integer\r\n [inputName]=\"'AlerteAvant'\" [(inputField)]=\"action.alerteAvant\">\r\n </Tsi-Integer>\r\n <span class=\"text-nowrap\">{{'jours'| localize}}</span>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'Liste_des_action_details'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <div presentationDesigner=\"action_Generer\" class=\"grid\">\r\n <Tsi-Label class=\"col-1 col-offset-1\" [labelValue]=\"'action_Generer'\"></Tsi-Label>\r\n <Tsi-Search-Combo class=\"col-4\" inputName=\"className\" id-field=\"className\"\r\n label-field=\"className\"\r\n [listSourceUrl]=\"this.administrationEndpoints.GetAllEntitiesInformationsMinimal()\"\r\n [elementSourceUrl]=\"this.administrationEndpoints.getEntityInfoElementSource()\"\r\n [isFiltered]=\"true\" [(bind)]=\"classename\" [businessClass]=\"businessClass\"\r\n (bindChange)=\"onClasseSelected($event)\"> ></Tsi-Search-Combo>\r\n </div>\r\n <Tsi-Generic-Editable-Grid (onConsultClicked)=\"consultElement($event)\"\r\n [showConsultButton]=\"true\" [columns]=\"actiondetailcolom\"\r\n [gridData]=\"action.actionERPDetails\" [parent]=\"this\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n <p-tabPanel [header]=\"'shared_action_participants'| localize\">\r\n <ng-template pTemplate=\"content\">\r\n <Tsi-Generic-Editable-Grid [columns]=\"participantColumns\"\r\n [gridData]=\"action.actionERPUtilisateurs\" [parent]=\"this\" [showAddButton]=\"true\"\r\n [showDeleteButton]=\"true\"></Tsi-Generic-Editable-Grid>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n </div>\r\n </fieldset>\r\n\r\n <div *ngIf=\"mode !== modeRef.create\" class=\"grid mt-2\" presentationDesigner=\"actionnouvelle_actionERP\">\r\n <div class=\"col-8\">\r\n <Tsi-Button class=\"w-full\" (onClick)=\"openActionERPPopUp()\"\r\n [text]=\"'actionnouvelle_actionERP'\"></Tsi-Button>\r\n </div>\r\n </div>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\"\r\n [saveDisabled]=\"isSubmitDisabled()\" (onCancelClick)=\"hide()\"></Tsi-Modal-Footer>\r\n</tsi-form>" }]
388
390
  }], ctorParameters: () => [{ type: i1.ActionErpService }, { type: i2.NatureActionService }, { type: i1.ErrorResponseManagerService }, { type: i1.TsiNotificationService }, { type: i1.TsiConfirmationService }, { type: i1.EntityConfigurationService }, { type: i3.DialogService }, { type: i1.IdentityManagerService }, { type: i4.LocalizePipe }, { type: i3.DynamicDialogConfig }, { type: i3.DynamicDialogRef }] });
389
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWFjdGlvbi1lcnAtY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1hY3Rpb24tZXJwLWNyZWF0ZS1vci1lZGl0L3RzaS1hY3Rpb24tZXJwLWNyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktYWN0aW9uLWVycC1jcmVhdGUtb3ItZWRpdC90c2ktYWN0aW9uLWVycC1jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFtQyxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBeUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFF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QyxTQUFTOytCQUNFLG1DQUFtQyxhQUdsQyxDQUFDLEdBQUcsWUFBWSxFQUFFLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBBY3Rpb25FUlAsIEFjdGlvbkVSUERldGFpbCwgb2NjdXJlbmNlSW5mb3MsIFN0YXR1dEFjdGlvbkNSTUVudW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uRXJwL2FjdGlvbkVycCc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgSW5wdXRUeXBlcywgTW9kYWxTaXplRW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IEFjdGlvbkVycFNlcnZpY2UsIEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgVHNpQ29uZmlybWF0aW9uU2VydmljZSwgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsIFRzaU1vZGFsU2VydmljZSwgQ3VycmVudFVzZXJTZXJ2aWNlLCBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cyB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMnO1xyXG5pbXBvcnQgeyBHcmlkQ29sdW1uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBUeXBlUmVnaXN0cnlIZWxwZXIgfSBmcm9tICcuLi8uLi90c2ktaGVscGVycy90eXBlLXJlZ2lzdHJ5LmhlbHBlcic7XHJcbmltcG9ydCB7IEJ1c2luZXNzQ2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2NvbnN0cy9idXNpbmVzcy1jbGFzcy1uYW1lcyc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmF0dXJlQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjdGlvbkVycC9uYXR1cmUtYWN0aW9uLXNlcnZpY2Uuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRzaS1hY3Rpb24tZXJwLWNyZWF0ZS1vci1lZGl0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWFjdGlvbi1lcnAtY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90c2ktYWN0aW9uLWVycC1jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuY3NzJyxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnMsIERpYWxvZ1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lBY3Rpb25FcnBDcmVhdGVPckVkaXRDb21wb25lbnQgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYWN0aW9uID0gbmV3IEFjdGlvbkVSUCgpO1xyXG4gIGFkbWluaXN0cmF0aW9uRW5kcG9pbnRzID0gQWRtaW5pc3RyYXRpb25FbmRwb2ludHM7XHJcbiAgYnVzaW5uZXNzQ2xhc3NOYW1lOiBzdHJpbmcgPSBcIlwiXHJcbiAgb2NjdXJlbmNlSW5mb3M6IG9jY3VyZW5jZUluZm9zIHwgbnVsbCA9IG51bGw7XHJcbiAgY2xhc3NlbmFtZTogYW55ID0gbnVsbDtcclxuICBtb2RlUmVmID0gTW9kZXM7XHJcbiAgYnVzaW5lc3NDbGFzc05hbWVzID0gQnVzaW5lc3NDbGFzc05hbWVzO1xyXG4gIGFjdGlvblByZWNlZGVudGVDb2RlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2FjdGlvbnNlcnZpY2U6IEFjdGlvbkVycFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX25hdHVyZUFjdGlvbnNlcnZpY2U6IE5hdHVyZUFjdGlvblNlcnZpY2UsXHJcblxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBlbnRpdHlDb25maWd1cmF0aW9uU2VydmljZTogRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaWRlbnRpdHlNYW5hZ2VyU2VydmljZTogSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLCBwdWJsaWMgb3ZlcnJpZGUgcmVmPzogRHluYW1pY0RpYWxvZ1JlZixcclxuXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIocmVmLCBjb25maWcpXHJcbiAgICB0aGlzLmJ1c2lubmVzc0NsYXNzTmFtZSA9IGNvbmZpZz8uZGF0YT8uY3VzdG9tRGF0YT8ub2NjdXJlbmNlSW5mb3M/LmJ1c2luZXNzY2xhc3MgPz8gJyc7XHJcbiAgICB0aGlzLmJ1c2luZXNzQ2xhc3MgPSBCdXNpbmVzc0NsYXNzTmFtZXMuQWN0aW9uRVJQO1xyXG5cclxuICAgIGlmIChjb25maWc/LmRhdGE/LmN1c3RvbURhdGE/Lm9jY3VyZW5jZUluZm9zKSB7XHJcbiAgICAgIHRoaXMub2NjdXJlbmNlSW5mb3MgPSBjb25maWcuZGF0YS5jdXN0b21EYXRhLm9jY3VyZW5jZUluZm9zIGFzIG9jY3VyZW5jZUluZm9zO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGE/LmFjdGlvblN1aXZhbnRlICE9IHRydWUpIHtcclxuICAgICAgdGhpcy5hY3Rpb24ubmF0dXJlQWN0aW9uID0gdGhpcy5jdXN0b21EYXRhPy5uYXR1cmVBY3Rpb25cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3Rpb24uYWN0aW9uRVJQRGV0YWlscy5sZW5ndGggPT09IDAgJiYgdGhpcy5vY2N1cmVuY2VJbmZvcz8uYnVzaW5lc3NjbGFzcykge1xyXG5cclxuICAgICAgY29uc3Qgbm91dmVhdURldGFpbDogQWN0aW9uRVJQRGV0YWlsID0ge1xyXG4gICAgICAgIGNsYXNzZTogdGhpcy5vY2N1cmVuY2VJbmZvcz8uYnVzaW5lc3NjbGFzcyxcclxuICAgICAgICBvY2N1cmVuY2U6IHRoaXMub2NjdXJlbmNlSW5mb3M/Lm9jY3VyZW5jZT8udG9TdHJpbmcoKSxcclxuICAgICAgICBhY3Rpb25FUlA6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24uYWN0aW9uRVJQRGV0YWlscy5wdXNoKG5vdXZlYXVEZXRhaWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9uLmFjdGlvbkVSUERldGFpbHM/LmZpbmQoZCA9PiBkLmNsYXNzZSlcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICh0aGlzLm1vZGUgPT09IE1vZGVzLmVkaXQgfHwgdGhpcy5tb2RlID09PSBNb2Rlcy5kZWxldGUgfHwgdGhpcy5tb2RlID09PSBNb2Rlcy5jb25zdWx0KSAmJlxyXG4gICAgICB0aGlzLmlkICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5pZCAhPT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fYWN0aW9uc2VydmljZS5nZXRCeUlkKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uID0gZGF0YTtcclxuICAgICAgICAgIGlmICghdGhpcy5idXNpbm5lc3NDbGFzc05hbWUgJiYgdGhpcy5hY3Rpb24uYWN0aW9uRVJQRGV0YWlscz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2lubmVzc0NsYXNzTmFtZSA9IHRoaXMuYWN0aW9uLmFjdGlvbkVSUERldGFpbHNbMF0uY2xhc3NlID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLmFjdGlvbi5zdGF0dXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IHRoaXMuX2lkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpO1xyXG5cclxuICAgICAgaWYgKCF0b2tlbikgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24udXRpbGlzYXRldXJEZW1hbmRldXIgPSB0b2tlbi5wcmltYXJ5c2lkPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBhY3Rpb25kZXRhaWxjb2xvbTogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcImNsYXNzZVwiLFxyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uX2NsYXNzZU5hbWUnLFxyXG4gICAgICB0eXBlOiBJbnB1dFR5cGVzLlNFQVJDSF9DT01CTyxcclxuICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5HZXRBbGxFbnRpdGllc0luZm9ybWF0aW9ucygpLFxyXG4gICAgICBpZEZpZWxkOiBcImNsYXNzTmFtZVwiLFxyXG4gICAgICBsYWJlbEZpZWxkOiBcImNsYXNzTmFtZVwiLFxyXG4gICAgICBpbnB1dE5hbWU6IFwiY2xhc3NlXCIsXHJcbiAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcIm9jY3VyZW5jZVwiLFxyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uX29jY3VyZW5jZScsXHJcbiAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICBsaXN0U291cmNlVXJsOiAocm93OiBhbnkpID0+IHRoaXMuZ2V0T2NjdXJlbmNlTGlzdFVybChyb3cpLFxyXG4gICAgICBlbGVtZW50U291cmNlVXJsOiAocm93OiBhbnkpID0+IHRoaXMuZ2V0T2NjdXJlbmNlVXJsKHJvdyksXHJcbiAgICAgIGlkRmllbGQ6IFwiaWRcIixcclxuICAgICAgbGFiZWxGaWVsZDogXCJkaXNwbGF5TmFtZVwiLFxyXG4gICAgICBpbnB1dE5hbWU6IFwib2NjdXJlbmNlXCIsXHJcbiAgICAgIGlzRmlsdGVyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIHBhcnRpY2lwYW50Q29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcInV0aWxpc2F0ZXVyXCIsXHJcbiAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25fcGFydGljaXBhbnRfdXRpbGlzYXRldXInLFxyXG4gICAgICB0eXBlOiBJbnB1dFR5cGVzLlNFQVJDSF9DT01CTyxcclxuICAgICAgZWxlbWVudFNvdXJjZVVybDogdGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRVdGlsaXNhdGV1ck1pbmltYWwoKSxcclxuICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxVdGlsaXNhdGV1ck1pbmltYWwoKSxcclxuICAgICAgaWRGaWVsZDogXCJ1aWRcIixcclxuICAgICAgbGFiZWxGaWVsZDogXCJub21QcmVub21cIixcclxuICAgICAgaW5wdXROYW1lOiBcInV0aWxpc2F0ZXVyXCIsXHJcbiAgICAgIGlzRmlsdGVyZWQ6IHRydWUsXHJcbiAgICAgIGJ1c2luZXNzQ2xhc3M6IEJ1c2luZXNzQ2xhc3NOYW1lcy5VdGlsaXNhdGV1cixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcIm9ibGlnYXRvaXJlXCIsXHJcbiAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25fcGFydGljaXBhbnRfb2JsaWdhdG9pcmUnLFxyXG4gICAgICB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YLFxyXG4gICAgICBpbnB1dE5hbWU6IFwib2JsaWdhdG9pcmVcIixcclxuICAgICAgaXNCaW5hcnk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIGdldE9jY3VyZW5jZUxpc3RVcmwocm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qga2V5ID0gcm93Py5jbGFzc2U7XHJcbiAgICBpZiAoIWtleSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEVudGl0eURhdGEoa2V5KTtcclxuICB9XHJcblxyXG4gIGdldE9jY3VyZW5jZVVybChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBrZXkgPSByb3c/LmNsYXNzZTtcclxuICAgIGlmICgha2V5KSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gQWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0RW50aXR5RGF0YUJ5SWQoa2V5KTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICBzdXBlci5zYXZlKClcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYWN0aW9uLnN0YXR1dCA9IHRoaXMuc3RhdHVzXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgdGhpcy5fYWN0aW9uc2VydmljZS5jcmVhdGUodGhpcy5hY3Rpb24pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLm1vZGUgPT09IE1vZGVzLmVkaXQgJiZcclxuICAgICAgdGhpcy5pZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX2FjdGlvbnNlcnZpY2UudXBkYXRlKHRoaXMuYWN0aW9uLCB0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy51cGRhdGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuZGVsZXRlKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcmVzdWx0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3Rpb25zZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN1bHRFbGVtZW50KGl0ZW06IGFueSkge1xyXG4gICAgaWYgKCFpdGVtIHx8ICFpdGVtLmNsYXNzZSkge1xyXG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0ub2NjdXJlbmNlKSB7XHJcbiAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdhY3Rpb25fbm9fc2VsZWN0ZWRfaXRlbV9mb3JfY29uc3VsdGF0aW9uJykpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKGl0ZW0uY2xhc3NlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LmZvcm1OYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlPy5lcnJvcih0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mJykpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgaWQ6IGl0ZW0ub2NjdXJlbmNlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBkaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlPy5vcGVuKFxyXG4gICAgICAgICAgVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSxcclxuICAgICAgICAgIGNvbmZcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKChfKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcyBkJ2VudGl0w6kgOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjcmVhdGVFbGVtZW50KGNsYXNzZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWNsYXNzZSkge1xyXG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5JylcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyhjbGFzc2UpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2U/LmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ1JFQVRFLFxyXG4gICAgICAgICAgICBjdXN0b21EYXRhOiBlbnRpdHksXHJcbiAgICAgICAgICAgIGlkOiBudWxsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuZm9ybU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX2RpYWxvZ1NlcnZpY2U/Lm9wZW4oY29tcG9uZW50VHlwZSwgY29uZik7XHJcblxyXG4gICAgICAgIGlmICghZGlhbG9nUmVmZXJlbmNlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZmVyZW5jZS5vbkNsb3NlLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgdWlkID0gcmVzdWx0Py51aWQgPz8gcmVzdWx0Py5pZCA/PyByZXN1bHQ7XHJcblxyXG4gICAgICAgICAgaWYgKHVpZCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEZXRhaWw6IEFjdGlvbkVSUERldGFpbCA9IHtcclxuICAgICAgICAgICAgICBjbGFzc2U6IGNsYXNzZSxcclxuICAgICAgICAgICAgICBvY2N1cmVuY2U6IHVpZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgIGFjdGlvbkVSUDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbi5hY3Rpb25FUlBEZXRhaWxzID0gWy4uLnRoaXMuYWN0aW9uLmFjdGlvbkVSUERldGFpbHMsIG5ld0RldGFpbF07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzYXZlZFN1Y2Nlc3NmdWxseScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZT8uZXJyb3IoXHJcbiAgICAgICAgICB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mJylcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb25DbGFzc2VTZWxlY3RlZChzZWxlY3RlZDogYW55KSB7XHJcbiAgICBjb25zdCBjbGFzc2UgPSB0eXBlb2Ygc2VsZWN0ZWQgPT09ICdzdHJpbmcnXHJcbiAgICAgID8gc2VsZWN0ZWRcclxuICAgICAgOiBzZWxlY3RlZD8uY2xhc3NOYW1lO1xyXG4gICAgaWYgKCFjbGFzc2UpIHJldHVybjtcclxuICAgIHRoaXMuY3JlYXRlRWxlbWVudChjbGFzc2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3BlbkFjdGlvbkVSUFBvcFVwKCkge1xyXG5cclxuICAgIGNvbnN0IG5hdHVyZUFjdGlvblN1aXZhbnRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgIHRoaXMuX25hdHVyZUFjdGlvbnNlcnZpY2UuR2V0TmF0dXJlQWN0aW9uU3VpdmFudGVCeU9yZHJlKHRoaXMuYWN0aW9uLm5hdHVyZUFjdGlvbilcclxuICAgICk7XHJcbiAgICBjb25zdCBub3V2ZWxsZUFjdGlvbiA9IHtcclxuICAgICAgYWN0aW9uUHJlY2VkZW50ZTogdGhpcy5hY3Rpb24udWlkLFxyXG4gICAgICBjb2RlQWN0aW9uUHJlY2VkZW50ZTogdGhpcy5hY3Rpb24ubnVtZXJvLFxyXG4gICAgICBkYXRlSGV1cmVEZWJ1dFByZXY6IHRoaXMuYWN0aW9uLmRhdGVIZXVyZURlYnV0UHJldixcclxuICAgICAgZGF0ZUhldXJlRmluUHJldjogdGhpcy5hY3Rpb24uZGF0ZUhldXJlRmluUHJldixcclxuICAgICAgdXRpbGlzYXRldXJEZW1hbmRldXI6IHRoaXMuYWN0aW9uLnV0aWxpc2F0ZXVyRGVtYW5kZXVyLFxyXG4gICAgICBuYXR1cmVBY3Rpb246IG5hdHVyZUFjdGlvblN1aXZhbnRlPy51aWQsXHJcbiAgICAgIHV0aWxpc2F0ZXVyQXNzaWduZTogbmF0dXJlQWN0aW9uU3VpdmFudGU/LnJlYWxpc2F0ZXVyLFxyXG4gICAgICBzdGF0dXQ6IFN0YXR1dEFjdGlvbkNSTUVudW0uRW5BdHRlbnRlLFxyXG4gICAgICBhY3Rpb25FUlBEZXRhaWxzOiB0aGlzLmFjdGlvbi5hY3Rpb25FUlBEZXRhaWxzPy5tYXAoZGV0YWlsID0+ICh7XHJcbiAgICAgICAgY2xhc3NlOiBkZXRhaWwuY2xhc3NlLFxyXG4gICAgICAgIG9jY3VyZW5jZTogZGV0YWlsLm9jY3VyZW5jZSxcclxuICAgICAgICBhY3Rpb25FUlA6IHVuZGVmaW5lZFxyXG4gICAgICB9KSkgPz8gW10sXHJcbiAgICAgIGFjdGlvbkVSUFV0aWxpc2F0ZXVyczogW11cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1vZGU6IE1vZGVzLmNyZWF0ZSxcclxuICAgICAgICBhY3Rpb246IG5vdXZlbGxlQWN0aW9uLFxyXG4gICAgICAgIGFjdGlvblN1aXZhbnRlOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5MYXJnZS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFRzaUFjdGlvbkVycENyZWF0ZU9yRWRpdENvbXBvbmVudCwgY29uZik7XHJcblxyXG4gICAgdGhpcy5yZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24udWlkID0gcmVzdWx0O1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbk5hdHVyZUFjdGlvbkNoYW5nZShuYXR1cmVBY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIW5hdHVyZUFjdGlvbklkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fbmF0dXJlQWN0aW9uc2VydmljZS5nZXRCeUlkKG5hdHVyZUFjdGlvbklkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAobmF0dXJlQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKG5hdHVyZUFjdGlvbj8ucmVhbGlzYXRldXIpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uLnV0aWxpc2F0ZXVyQXNzaWduZSA9IG5hdHVyZUFjdGlvbi5yZWFsaXNhdGV1cjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5BY3Rpb25QcmVjZWRlbnRlUG9wdXAoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uLmFjdGlvblByZWNlZGVudGUpIHtcclxuICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihcclxuICAgICAgICB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF9hY3Rpb25fQWN0aW9uUHJlY2VkZW50ZV9ub3RfZm91bmQnKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1vZGU6IE1vZGVzLmVkaXQsXHJcbiAgICAgICAgaWQ6IHRoaXMuYWN0aW9uLmFjdGlvblByZWNlZGVudGUsXHJcblxyXG4gICAgICB9LFxyXG4gICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5MYXJnZS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFxyXG4gICAgICBUc2lBY3Rpb25FcnBDcmVhdGVPckVkaXRDb21wb25lbnQsXHJcbiAgICAgIGNvbmZcclxuICAgICk7XHJcblxyXG4gICAgZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChvblN1Ym1pdCk9XCJzYXZlKClcIiBbaXNMb2FkaW5nXT1cImlzbG9hZGluZ1wiPlxyXG4gICAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6bW9kZTonc2hhcmVkX2FjdGlvbl9hZGRfYWN0aW9uJ1wiIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+XHJcbiAgICA8L1RzaS1Nb2RhbC1IZWFkZXI+XHJcblxyXG4gICAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIHJvdy1nYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX05hdHVyZV9BY3Rpb24nXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtlbGVtZW50U291cmNlVXJsXT1cImFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldE5hdHVyZUFjdGlvbk1pbmltYWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0QWxsTmF0dXJlQWN0aW9uTWluaW1hbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImFjdGlvbi5uYXR1cmVBY3Rpb25cIiBpZC1maWVsZD1cInVpZFwiIGxhYmVsLWZpZWxkPVwibGliZWxsZVwiIFtpc0ZpbHRlcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ05hdHVyZUFjdGlvbidcIiBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzTmFtZXMuTmF0dXJlQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmluZENoYW5nZSk9XCJvbk5hdHVyZUFjdGlvbkNoYW5nZSgkZXZlbnQpXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2FjdGlvbl9udW1lcm8nXCI+PC9Uc2ktTGFiZWw+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPjxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cIidOdW1lcm8nXCIgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24ubnVtZXJvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvVHNpLUludGVnZXI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9hY3Rpb25fdXRpbGlzYXRldXJEZW1hbmRldXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtlbGVtZW50U291cmNlVXJsXT1cImFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldFV0aWxpc2F0ZXVyTWluaW1hbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxVdGlsaXNhdGV1ck1pbmltYWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJhY3Rpb24udXRpbGlzYXRldXJEZW1hbmRldXJcIiBpZC1maWVsZD1cInVpZFwiIGxhYmVsLWZpZWxkPVwibm9tUHJlbm9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNGaWx0ZXJlZF09XCJ0cnVlXCIgW2lucHV0TmFtZV09XCIndXRpbGlzYXRldXJEZW1hbmRldXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzTmFtZXMuVXRpbGlzYXRldXJcIj48L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX29iamV0J1wiPjwvVHNpLUxhYmVsPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj48VHNpLVRleHQtQXJlYSBbaW5wdXROYW1lXT1cIidPYmpldCdcIiBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5vYmpldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiM1wiPjwvVHNpLVRleHQtQXJlYT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2FjdGlvbl9wcmlvcml0ZSdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5hbGxQcmlvcml0ZUFjdGlvbkNSTUVudW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiYWN0aW9uLnByaW9yaXRlXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCIgW2lucHV0TmFtZV09XCInUHJpb3JpdGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlYXJjaEJ1dHRvbl09XCJmYWxzZVwiPjwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX3V0aWxpc2F0ZXVyQXNzaWduZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gW2VsZW1lbnRTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0VXRpbGlzYXRldXJNaW5pbWFsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cImFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEFsbFV0aWxpc2F0ZXVyTWluaW1hbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImFjdGlvbi51dGlsaXNhdGV1ckFzc2lnbmVcIiBpZC1maWVsZD1cInVpZFwiIGxhYmVsLWZpZWxkPVwibm9tUHJlbm9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidVdGlsaXNhdGV1ckFzc2lnbmUnXCIgW2lzRmlsdGVyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc05hbWVzLlV0aWxpc2F0ZXVyXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2FjdGlvbl9yZXN1bHRhdCdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5hbGxSZXN1bHRhdEFjdGlvbkNSTUVudW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiYWN0aW9uLnJlc3VsdGF0XCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCIgW2lucHV0TmFtZV09XCInUmVzdWx0YXQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlYXJjaEJ1dHRvbl09XCJmYWxzZVwiPjwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9hY3Rpb25fbGlldSdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+PFRzaS1UZXh0LUFyZWEgW2lucHV0TmFtZV09XCInTGlldSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiYWN0aW9uLmxpZXVcIj48L1RzaS1UZXh0LUFyZWE+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX0FjdGlvblByZWNlZGVudGUnXCI+PC9Uc2ktTGFiZWw+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtN1wiPjxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cIidBY3Rpb25QcmVjZWRlbnRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24uY29kZUFjdGlvblByZWNlZGVudGVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvVHNpLUludGVnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQnV0dG9uIFtpY29uXT1cIidwaSBwaS1jYXJldC11cCdcIiBbZGlzYWJsZWRdPVwiIWFjdGlvbi5hY3Rpb25QcmVjZWRlbnRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvcGVuQWN0aW9uUHJlY2VkZW50ZVBvcHVwKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPHAtdGFiVmlldz5cclxuICAgICAgICAgICAgICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FuZ2xhaXNfZWNoZWFuY2UnfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYm9yZGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCB0ZXh0LWNlbnRlclwiPjxiPnt7ICdhY3Rpb25fRGVidXQnIHwgbG9jYWxpemUgfX08L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCB0ZXh0LWNlbnRlclwiPjxiPnt7ICdhY3Rpb25fRmluJyB8IGxvY2FsaXplIH19PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhY3Rpb25fZGF0ZUhldXJlX1ByZXYnXCI+PC9Uc2ktTGFiZWw+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLURhdGUtUGlja2VyIFtpbnB1dE5hbWVdPVwiJ0RhdGVIZXVyZURlYnV0UHJldidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5kYXRlSGV1cmVEZWJ1dFByZXZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwidHJ1ZVwiPjwvVHNpLURhdGUtUGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLURhdGUtUGlja2VyIFtpbnB1dE5hbWVdPVwiJ0RhdGVIZXVyZUZpblByZXYnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24uZGF0ZUhldXJlRmluUHJldlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJ0cnVlXCI+PC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhY3Rpb24uZGF0ZUhldXJlZV9SZWFsaXNlZSdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPjxUc2ktRGF0ZS1QaWNrZXIgW2lucHV0TmFtZV09XCInRGF0ZUhldXJlRGVidXRSZWFsaXNlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5kYXRlSGV1cmVEZWJ1dFJlYWxpc2VlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cInRydWVcIj48L1RzaS1EYXRlLVBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+PFRzaS1EYXRlLVBpY2tlciBbaW5wdXROYW1lXT1cIidEYXRlSGV1cmVGaW5SZWFsaXNlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5kYXRlSGV1cmVGaW5SZWFsaXNlZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJ0cnVlXCI+PC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1maWVsZHNldCBbbGVnZW5kXT1cIidhY3Rpb25fRmllbGRzZXRfYWxlcnRlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ2FjdGlvbl9hbGVydGUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPjxUc2ktQ2hlY2tCb3ggW2lucHV0TmFtZV09XCInQWxlcnRlJ1wiIFtpc0JpbmFyeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24uYWxlcnRlXCI+PC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWN0aW9uX2FsZXJ0ZUF2YW50J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+PFRzaS1JbnRlZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ0FsZXJ0ZUF2YW50J1wiIFsoaW5wdXRGaWVsZCldPVwiYWN0aW9uLmFsZXJ0ZUF2YW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+e3snam91cnMnfCBsb2NhbGl6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1maWVsZHNldD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInTGlzdGVfZGVzX2FjdGlvbl9kZXRhaWxzJ3wgbG9jYWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cImFjdGlvbl9HZW5lcmVyXCIgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0xIGNvbC1vZmZzZXQtMVwiIFtsYWJlbFZhbHVlXT1cIidhY3Rpb25fR2VuZXJlcidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC00XCIgaW5wdXROYW1lPVwiY2xhc3NOYW1lXCIgaWQtZmllbGQ9XCJjbGFzc05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC1maWVsZD1cImNsYXNzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cInRoaXMuYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuR2V0QWxsRW50aXRpZXNJbmZvcm1hdGlvbnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cImZhbHNlXCIgWyhiaW5kKV09XCJjbGFzc2VuYW1lXCIgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kQ2hhbmdlKT1cIm9uQ2xhc3NlU2VsZWN0ZWQoJGV2ZW50KVwiPiA+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUdlbmVyaWMtRWRpdGFibGUtR3JpZCAob25Db25zdWx0Q2xpY2tlZCk9XCJjb25zdWx0RWxlbWVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvbnN1bHRCdXR0b25dPVwidHJ1ZVwiIFtjb2x1bW5zXT1cImFjdGlvbmRldGFpbGNvbG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZERhdGFdPVwiYWN0aW9uLmFjdGlvbkVSUERldGFpbHNcIiBbcGFyZW50XT1cInRoaXNcIj48L1RzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICAgICAgICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ3NoYXJlZF9hY3Rpb25fcGFydGljaXBhbnRzJ3wgbG9jYWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUdlbmVyaWMtRWRpdGFibGUtR3JpZCBbY29sdW1uc109XCJwYXJ0aWNpcGFudENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyaWREYXRhXT1cImFjdGlvbi5hY3Rpb25FUlBVdGlsaXNhdGV1cnNcIiBbcGFyZW50XT1cInRoaXNcIiBbc2hvd0FkZEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93RGVsZXRlQnV0dG9uXT1cInRydWVcIj48L1RzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICAgICAgPC9wLXRhYlZpZXc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2ZpZWxkc2V0PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJtb2RlICE9PSBtb2RlUmVmLmNyZWF0ZVwiIGNsYXNzPVwiZ3JpZCBtdC0yXCIgcHJlc2VudGF0aW9uRGVzaWduZXI9XCJhY3Rpb25ub3V2ZWxsZV9hY3Rpb25FUlBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgPFRzaS1CdXR0b24gY2xhc3M9XCJ3LWZ1bGxcIiAob25DbGljayk9XCJvcGVuQWN0aW9uRVJQUG9wVXAoKVwiXHJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInYWN0aW9ubm91dmVsbGVfYWN0aW9uRVJQJ1wiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxUc2ktTW9kYWwtRm9vdGVyIFtjYW5jZWxEaXNhYmxlZF09XCJzYXZpbmdcIlxyXG4gICAgICAgIFtzYXZlRGlzYWJsZWRdPVwiaXNTdWJtaXREaXNhYmxlZCgpXCIgKG9uQ2FuY2VsQ2xpY2spPVwiaGlkZSgpXCI+PC9Uc2ktTW9kYWwtRm9vdGVyPlxyXG48L3RzaS1mb3JtPiJdfQ==
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWFjdGlvbi1lcnAtY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL3RzaS1hY3Rpb24tZXJwLWNyZWF0ZS1vci1lZGl0L3RzaS1hY3Rpb24tZXJwLWNyZWF0ZS1vci1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktYWN0aW9uLWVycC1jcmVhdGUtb3ItZWRpdC90c2ktYWN0aW9uLWVycC1jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFtQyxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBeUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFF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Qyw0REFGakMsQ0FBQyxHQUFHLFlBQVksRUFBRSxhQUFhLENBQUMsaURDdkI3QyxzNWFBbU1XOzs0RkQxS0UsaUNBQWlDO2tCQU43QyxTQUFTOytCQUNFLG1DQUFtQyxhQUdsQyxDQUFDLEdBQUcsWUFBWSxFQUFFLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlJztcclxuaW1wb3J0IHsgYXBwUHJvdmlkZXJzIH0gZnJvbSAnLi4vLi4vY29uc3RzL2FwcC1wcm92aWRlcnMnO1xyXG5pbXBvcnQgeyBBY3Rpb25FUlAsIEFjdGlvbkVSUERldGFpbCwgb2NjdXJlbmNlSW5mb3MsIFN0YXR1dEFjdGlvbkNSTUVudW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uRXJwL2FjdGlvbkVycCc7XHJcbmltcG9ydCB7IENvbXBvbmVudF9Nb2RlcywgSW5wdXRUeXBlcywgTW9kYWxTaXplRW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IEFjdGlvbkVycFNlcnZpY2UsIEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgVHNpQ29uZmlybWF0aW9uU2VydmljZSwgRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsIFRzaU1vZGFsU2VydmljZSwgQ3VycmVudFVzZXJTZXJ2aWNlLCBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBZG1pbmlzdHJhdGlvbkVuZHBvaW50cyB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMnO1xyXG5pbXBvcnQgeyBHcmlkQ29sdW1uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBUeXBlUmVnaXN0cnlIZWxwZXIgfSBmcm9tICcuLi8uLi90c2ktaGVscGVycy90eXBlLXJlZ2lzdHJ5LmhlbHBlcic7XHJcbmltcG9ydCB7IEJ1c2luZXNzQ2xhc3NOYW1lcyB9IGZyb20gJy4uLy4uL2NvbnN0cy9idXNpbmVzcy1jbGFzcy1uYW1lcyc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmF0dXJlQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjdGlvbkVycC9uYXR1cmUtYWN0aW9uLXNlcnZpY2Uuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRzaS1hY3Rpb24tZXJwLWNyZWF0ZS1vci1lZGl0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWFjdGlvbi1lcnAtY3JlYXRlLW9yLWVkaXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90c2ktYWN0aW9uLWVycC1jcmVhdGUtb3ItZWRpdC5jb21wb25lbnQuY3NzJyxcclxuICBwcm92aWRlcnM6IFsuLi5hcHBQcm92aWRlcnMsIERpYWxvZ1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lBY3Rpb25FcnBDcmVhdGVPckVkaXRDb21wb25lbnQgZXh0ZW5kcyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYWN0aW9uID0gbmV3IEFjdGlvbkVSUCgpO1xyXG4gIGFkbWluaXN0cmF0aW9uRW5kcG9pbnRzID0gQWRtaW5pc3RyYXRpb25FbmRwb2ludHM7XHJcbiAgYnVzaW5uZXNzQ2xhc3NOYW1lOiBzdHJpbmcgPSBcIlwiXHJcbiAgb2NjdXJlbmNlSW5mb3M6IG9jY3VyZW5jZUluZm9zIHwgbnVsbCA9IG51bGw7XHJcbiAgY2xhc3NlbmFtZTogYW55ID0gbnVsbDtcclxuICBtb2RlUmVmID0gTW9kZXM7XHJcbiAgYnVzaW5lc3NDbGFzc05hbWVzID0gQnVzaW5lc3NDbGFzc05hbWVzO1xyXG4gIGFjdGlvblByZWNlZGVudGVDb2RlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgX2FjdGlvbnNlcnZpY2U6IEFjdGlvbkVycFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgX25hdHVyZUFjdGlvbnNlcnZpY2U6IE5hdHVyZUFjdGlvblNlcnZpY2UsXHJcblxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ub3RpZmljYXRpb25TZXJ2aWNlOiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybWF0aW9uU2VydmljZTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBlbnRpdHlDb25maWd1cmF0aW9uU2VydmljZTogRW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaWRlbnRpdHlNYW5hZ2VyU2VydmljZTogSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLCBwdWJsaWMgb3ZlcnJpZGUgcmVmPzogRHluYW1pY0RpYWxvZ1JlZixcclxuXHJcblxyXG4gICkge1xyXG4gICAgc3VwZXIocmVmLCBjb25maWcpXHJcbiAgICB0aGlzLmJ1c2lubmVzc0NsYXNzTmFtZSA9IGNvbmZpZz8uZGF0YT8uY3VzdG9tRGF0YT8ub2NjdXJlbmNlSW5mb3M/LmJ1c2luZXNzY2xhc3MgPz8gJyc7XHJcbiAgICB0aGlzLmJ1c2luZXNzQ2xhc3MgPSBCdXNpbmVzc0NsYXNzTmFtZXMuQWN0aW9uRVJQO1xyXG5cclxuICAgIGlmIChjb25maWc/LmRhdGE/LmN1c3RvbURhdGE/Lm9jY3VyZW5jZUluZm9zKSB7XHJcbiAgICAgIHRoaXMub2NjdXJlbmNlSW5mb3MgPSBjb25maWcuZGF0YS5jdXN0b21EYXRhLm9jY3VyZW5jZUluZm9zIGFzIG9jY3VyZW5jZUluZm9zO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWc/LmRhdGE/LmFjdGlvblN1aXZhbnRlICE9IHRydWUpIHtcclxuICAgICAgdGhpcy5hY3Rpb24ubmF0dXJlQWN0aW9uID0gdGhpcy5jdXN0b21EYXRhPy5uYXR1cmVBY3Rpb25cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3Rpb24uYWN0aW9uRVJQRGV0YWlscy5sZW5ndGggPT09IDAgJiYgdGhpcy5vY2N1cmVuY2VJbmZvcz8uYnVzaW5lc3NjbGFzcykge1xyXG5cclxuICAgICAgY29uc3Qgbm91dmVhdURldGFpbDogQWN0aW9uRVJQRGV0YWlsID0ge1xyXG4gICAgICAgIGNsYXNzZTogdGhpcy5vY2N1cmVuY2VJbmZvcz8uYnVzaW5lc3NjbGFzcyxcclxuICAgICAgICBvY2N1cmVuY2U6IHRoaXMub2NjdXJlbmNlSW5mb3M/Lm9jY3VyZW5jZT8udG9TdHJpbmcoKSxcclxuICAgICAgICBhY3Rpb25FUlA6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24uYWN0aW9uRVJQRGV0YWlscy5wdXNoKG5vdXZlYXVEZXRhaWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9uLmFjdGlvbkVSUERldGFpbHM/LmZpbmQoZCA9PiBkLmNsYXNzZSlcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICh0aGlzLm1vZGUgPT09IE1vZGVzLmVkaXQgfHwgdGhpcy5tb2RlID09PSBNb2Rlcy5kZWxldGUgfHwgdGhpcy5tb2RlID09PSBNb2Rlcy5jb25zdWx0KSAmJlxyXG4gICAgICB0aGlzLmlkICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5pZCAhPT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fYWN0aW9uc2VydmljZS5nZXRCeUlkKHRoaXMuaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uID0gZGF0YTtcclxuICAgICAgICAgIGlmICghdGhpcy5idXNpbm5lc3NDbGFzc05hbWUgJiYgdGhpcy5hY3Rpb24uYWN0aW9uRVJQRGV0YWlscz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c2lubmVzc0NsYXNzTmFtZSA9IHRoaXMuYWN0aW9uLmFjdGlvbkVSUERldGFpbHNbMF0uY2xhc3NlID8/ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLmFjdGlvbi5zdGF0dXQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IHRoaXMuX2lkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpO1xyXG5cclxuICAgICAgaWYgKCF0b2tlbikgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24udXRpbGlzYXRldXJEZW1hbmRldXIgPSB0b2tlbi5wcmltYXJ5c2lkPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBhY3Rpb25kZXRhaWxjb2xvbTogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcImNsYXNzZVwiLFxyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uX2NsYXNzZU5hbWUnLFxyXG4gICAgICB0eXBlOiBJbnB1dFR5cGVzLlNFQVJDSF9DT01CTyxcclxuICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5HZXRBbGxFbnRpdGllc0luZm9ybWF0aW9uc01pbmltYWwoKSxcclxuICAgICAgZWxlbWVudFNvdXJjZVVybDogdGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRFbnRpdHlJbmZvRWxlbWVudFNvdXJjZSgpLFxyXG4gICAgICBpZEZpZWxkOiBcImNsYXNzTmFtZVwiLFxyXG4gICAgICBsYWJlbEZpZWxkOiBcImNsYXNzTmFtZVwiLFxyXG4gICAgICBpbnB1dE5hbWU6IFwiY2xhc3NlXCIsXHJcbiAgICAgIGlzRmlsdGVyZWQ6IHRydWUsXHJcbiAgICAgIHdhdGNoRm9yQ2hhbmdlczogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcIm9jY3VyZW5jZVwiLFxyXG4gICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uX29jY3VyZW5jZScsXHJcbiAgICAgIHR5cGU6IElucHV0VHlwZXMuU0VBUkNIX0NPTUJPLFxyXG4gICAgICBsaXN0U291cmNlVXJsOiAocm93OiBhbnkpID0+IHRoaXMuZ2V0T2NjdXJlbmNlTGlzdFVybChyb3cpLFxyXG4gICAgICBlbGVtZW50U291cmNlVXJsOiAocm93OiBhbnkpID0+IHRoaXMuZ2V0T2NjdXJlbmNlVXJsKHJvdyksXHJcbiAgICAgIGlkRmllbGQ6IFwiaWRcIixcclxuICAgICAgbGFiZWxGaWVsZDogXCJkaXNwbGF5TmFtZVwiLFxyXG4gICAgICBpbnB1dE5hbWU6IFwib2NjdXJlbmNlXCIsXHJcbiAgICAgIGlzRmlsdGVyZWQ6IHRydWUsXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIHBhcnRpY2lwYW50Q29sdW1uczogQXJyYXk8R3JpZENvbHVtbj4gPSBbXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcInV0aWxpc2F0ZXVyXCIsXHJcbiAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25fcGFydGljaXBhbnRfdXRpbGlzYXRldXInLFxyXG4gICAgICB0eXBlOiBJbnB1dFR5cGVzLlNFQVJDSF9DT01CTyxcclxuICAgICAgZWxlbWVudFNvdXJjZVVybDogdGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRVdGlsaXNhdGV1ck1pbmltYWwoKSxcclxuICAgICAgbGlzdFNvdXJjZVVybDogdGhpcy5hZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxVdGlsaXNhdGV1ck1pbmltYWwoKSxcclxuICAgICAgaWRGaWVsZDogXCJ1aWRcIixcclxuICAgICAgbGFiZWxGaWVsZDogXCJub21QcmVub21cIixcclxuICAgICAgaW5wdXROYW1lOiBcInV0aWxpc2F0ZXVyXCIsXHJcbiAgICAgIGlzRmlsdGVyZWQ6IHRydWUsXHJcbiAgICAgIGJ1c2luZXNzQ2xhc3M6IEJ1c2luZXNzQ2xhc3NOYW1lcy5VdGlsaXNhdGV1cixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGZpZWxkOiBcIm9ibGlnYXRvaXJlXCIsXHJcbiAgICAgIGhlYWRlcjogJ3NoYXJlZF9hY3Rpb25fcGFydGljaXBhbnRfb2JsaWdhdG9pcmUnLFxyXG4gICAgICB0eXBlOiBJbnB1dFR5cGVzLkNIRUNLQk9YLFxyXG4gICAgICBpbnB1dE5hbWU6IFwib2JsaWdhdG9pcmVcIixcclxuICAgICAgaXNCaW5hcnk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIGdldE9jY3VyZW5jZUxpc3RVcmwocm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qga2V5ID0gcm93Py5jbGFzc2U7XHJcbiAgICBpZiAoIWtleSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIEFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEVudGl0eURhdGEoa2V5KTtcclxuICB9XHJcblxyXG4gIGdldE9jY3VyZW5jZVVybChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBrZXkgPSByb3c/LmNsYXNzZTtcclxuICAgIGlmICgha2V5KSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gQWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0RW50aXR5RGF0YUJ5SWQoa2V5KTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XHJcbiAgICBzdXBlci5zYXZlKClcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuYWN0aW9uLnN0YXR1dCA9IHRoaXMuc3RhdHVzXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSBNb2Rlcy5jcmVhdGUpIHtcclxuICAgICAgdGhpcy5fYWN0aW9uc2VydmljZS5jcmVhdGUodGhpcy5hY3Rpb24pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5pbmZvKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLm1vZGUgPT09IE1vZGVzLmVkaXQgJiZcclxuICAgICAgdGhpcy5pZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX2FjdGlvbnNlcnZpY2UudXBkYXRlKHRoaXMuYWN0aW9uLCB0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy51cGRhdGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuZGVsZXRlKSB7XHJcbiAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShcclxuICAgICAgICBMb2NhbGl6YXRpb25LZXlzLmNvbmZpcm1EZWxldGUsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcmVzdWx0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuaWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3Rpb25zZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN1bHRFbGVtZW50KGl0ZW06IGFueSkge1xyXG4gICAgaWYgKCFpdGVtIHx8ICFpdGVtLmNsYXNzZSkge1xyXG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKFwic2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0ub2NjdXJlbmNlKSB7XHJcbiAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdhY3Rpb25fbm9fc2VsZWN0ZWRfaXRlbV9mb3JfY29uc3VsdGF0aW9uJykpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlDb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnRpdHlJbmZvKGl0ZW0uY2xhc3NlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZW50aXR5OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWVudGl0eSB8fCAhZW50aXR5LmZvcm1OYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlPy5lcnJvcih0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mJykpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbW9kZTogQ29tcG9uZW50X01vZGVzLkNPTlNVTFQsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGE6IGVudGl0eSxcclxuICAgICAgICAgICAgaWQ6IGl0ZW0ub2NjdXJlbmNlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBkaWFsb2dSZWZlcmVuY2UgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlPy5vcGVuKFxyXG4gICAgICAgICAgVHlwZVJlZ2lzdHJ5SGVscGVyLmdldFR5cGUoZW50aXR5LmZvcm1OYW1lKSxcclxuICAgICAgICAgIGNvbmZcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWZlcmVuY2U/Lm9uQ2xvc2Uuc3Vic2NyaWJlKChfKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyBpbmZvcyBkJ2VudGl0w6kgOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBjcmVhdGVFbGVtZW50KGNsYXNzZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWNsYXNzZSkge1xyXG4gICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnc2VhcmNoX2NvbWJvX2NvbXBvbmVudF9uYW1lRW50aXR5JylcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0RW50aXR5SW5mbyhjbGFzc2UpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChlbnRpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZW50aXR5IHx8ICFlbnRpdHkuZm9ybU5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2U/LmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtb2RlOiBDb21wb25lbnRfTW9kZXMuQ1JFQVRFLFxyXG4gICAgICAgICAgICBjdXN0b21EYXRhOiBlbnRpdHksXHJcbiAgICAgICAgICAgIGlkOiBudWxsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uTWVkaXVtLmhlaWdodCxcclxuICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZShlbnRpdHkuZm9ybU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZmVyZW5jZSA9IHRoaXMuX2RpYWxvZ1NlcnZpY2U/Lm9wZW4oY29tcG9uZW50VHlwZSwgY29uZik7XHJcblxyXG4gICAgICAgIGlmICghZGlhbG9nUmVmZXJlbmNlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZmVyZW5jZS5vbkNsb3NlLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghcmVzdWx0KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgdWlkID0gcmVzdWx0Py51aWQgPz8gcmVzdWx0Py5pZCA/PyByZXN1bHQ7XHJcblxyXG4gICAgICAgICAgaWYgKHVpZCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEZXRhaWw6IEFjdGlvbkVSUERldGFpbCA9IHtcclxuICAgICAgICAgICAgICBjbGFzc2U6IGNsYXNzZSxcclxuICAgICAgICAgICAgICBvY2N1cmVuY2U6IHVpZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgIGFjdGlvbkVSUDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbi5hY3Rpb25FUlBEZXRhaWxzID0gWy4uLnRoaXMuYWN0aW9uLmFjdGlvbkVSUERldGFpbHMsIG5ld0RldGFpbF07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKCdzYXZlZFN1Y2Nlc3NmdWxseScpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZT8uZXJyb3IoXHJcbiAgICAgICAgICB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NlYXJjaF9jb21ib19jb21wb25lbnRfZm9ybV9uYW1lX25mJylcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb25DbGFzc2VTZWxlY3RlZChzZWxlY3RlZDogYW55KSB7XHJcbiAgICBjb25zdCBjbGFzc2UgPSB0eXBlb2Ygc2VsZWN0ZWQgPT09ICdzdHJpbmcnXHJcbiAgICAgID8gc2VsZWN0ZWRcclxuICAgICAgOiBzZWxlY3RlZD8uY2xhc3NOYW1lO1xyXG4gICAgaWYgKCFjbGFzc2UpIHJldHVybjtcclxuICAgIHRoaXMuY3JlYXRlRWxlbWVudChjbGFzc2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3BlbkFjdGlvbkVSUFBvcFVwKCkge1xyXG5cclxuICAgIGNvbnN0IG5hdHVyZUFjdGlvblN1aXZhbnRlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgIHRoaXMuX25hdHVyZUFjdGlvbnNlcnZpY2UuR2V0TmF0dXJlQWN0aW9uU3VpdmFudGVCeU9yZHJlKHRoaXMuYWN0aW9uLm5hdHVyZUFjdGlvbilcclxuICAgICk7XHJcbiAgICBjb25zdCBub3V2ZWxsZUFjdGlvbiA9IHtcclxuICAgICAgYWN0aW9uUHJlY2VkZW50ZTogdGhpcy5hY3Rpb24udWlkLFxyXG4gICAgICBjb2RlQWN0aW9uUHJlY2VkZW50ZTogdGhpcy5hY3Rpb24ubnVtZXJvLFxyXG4gICAgICBkYXRlSGV1cmVEZWJ1dFByZXY6IHRoaXMuYWN0aW9uLmRhdGVIZXVyZURlYnV0UHJldixcclxuICAgICAgZGF0ZUhldXJlRmluUHJldjogdGhpcy5hY3Rpb24uZGF0ZUhldXJlRmluUHJldixcclxuICAgICAgdXRpbGlzYXRldXJEZW1hbmRldXI6IHRoaXMuYWN0aW9uLnV0aWxpc2F0ZXVyRGVtYW5kZXVyLFxyXG4gICAgICBuYXR1cmVBY3Rpb246IG5hdHVyZUFjdGlvblN1aXZhbnRlPy51aWQsXHJcbiAgICAgIHV0aWxpc2F0ZXVyQXNzaWduZTogbmF0dXJlQWN0aW9uU3VpdmFudGU/LnJlYWxpc2F0ZXVyLFxyXG4gICAgICBzdGF0dXQ6IFN0YXR1dEFjdGlvbkNSTUVudW0uRW5BdHRlbnRlLFxyXG4gICAgICBhY3Rpb25FUlBEZXRhaWxzOiB0aGlzLmFjdGlvbi5hY3Rpb25FUlBEZXRhaWxzPy5tYXAoZGV0YWlsID0+ICh7XHJcbiAgICAgICAgY2xhc3NlOiBkZXRhaWwuY2xhc3NlLFxyXG4gICAgICAgIG9jY3VyZW5jZTogZGV0YWlsLm9jY3VyZW5jZSxcclxuICAgICAgICBhY3Rpb25FUlA6IHVuZGVmaW5lZFxyXG4gICAgICB9KSkgPz8gW10sXHJcbiAgICAgIGFjdGlvbkVSUFV0aWxpc2F0ZXVyczogW11cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1vZGU6IE1vZGVzLmNyZWF0ZSxcclxuICAgICAgICBhY3Rpb246IG5vdXZlbGxlQWN0aW9uLFxyXG4gICAgICAgIGFjdGlvblN1aXZhbnRlOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5MYXJnZS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFRzaUFjdGlvbkVycENyZWF0ZU9yRWRpdENvbXBvbmVudCwgY29uZik7XHJcblxyXG4gICAgdGhpcy5yZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5hY3Rpb24udWlkID0gcmVzdWx0O1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbk5hdHVyZUFjdGlvbkNoYW5nZShuYXR1cmVBY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIW5hdHVyZUFjdGlvbklkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fbmF0dXJlQWN0aW9uc2VydmljZS5nZXRCeUlkKG5hdHVyZUFjdGlvbklkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAobmF0dXJlQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKG5hdHVyZUFjdGlvbj8ucmVhbGlzYXRldXIpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uLnV0aWxpc2F0ZXVyQXNzaWduZSA9IG5hdHVyZUFjdGlvbi5yZWFsaXNhdGV1cjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5BY3Rpb25QcmVjZWRlbnRlUG9wdXAoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uLmFjdGlvblByZWNlZGVudGUpIHtcclxuICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihcclxuICAgICAgICB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ3NoYXJlZF9hY3Rpb25fQWN0aW9uUHJlY2VkZW50ZV9ub3RfZm91bmQnKVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG1vZGU6IE1vZGVzLmVkaXQsXHJcbiAgICAgICAgaWQ6IHRoaXMuYWN0aW9uLmFjdGlvblByZWNlZGVudGUsXHJcblxyXG4gICAgICB9LFxyXG4gICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5MYXJnZS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFxyXG4gICAgICBUc2lBY3Rpb25FcnBDcmVhdGVPckVkaXRDb21wb25lbnQsXHJcbiAgICAgIGNvbmZcclxuICAgICk7XHJcblxyXG4gICAgZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiIsIjx0c2ktZm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChvblN1Ym1pdCk9XCJzYXZlKClcIiBbaXNMb2FkaW5nXT1cImlzbG9hZGluZ1wiPlxyXG4gICAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6bW9kZTonc2hhcmVkX2FjdGlvbl9hZGRfYWN0aW9uJ1wiIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+XHJcbiAgICA8L1RzaS1Nb2RhbC1IZWFkZXI+XHJcblxyXG4gICAgPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJpc0RlbGV0ZU1vZGUoKSB8fCBpc0NvbnN1bHRNb2RlKClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIHJvdy1nYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX05hdHVyZV9BY3Rpb24nXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtlbGVtZW50U291cmNlVXJsXT1cImFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldE5hdHVyZUFjdGlvbk1pbmltYWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0QWxsTmF0dXJlQWN0aW9uTWluaW1hbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImFjdGlvbi5uYXR1cmVBY3Rpb25cIiBpZC1maWVsZD1cInVpZFwiIGxhYmVsLWZpZWxkPVwibGliZWxsZVwiIFtpc0ZpbHRlcmVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ05hdHVyZUFjdGlvbidcIiBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzTmFtZXMuTmF0dXJlQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmluZENoYW5nZSk9XCJvbk5hdHVyZUFjdGlvbkNoYW5nZSgkZXZlbnQpXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2FjdGlvbl9udW1lcm8nXCI+PC9Uc2ktTGFiZWw+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPjxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cIidOdW1lcm8nXCIgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24ubnVtZXJvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvVHNpLUludGVnZXI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9hY3Rpb25fdXRpbGlzYXRldXJEZW1hbmRldXInXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktU2VhcmNoLUNvbWJvIFtlbGVtZW50U291cmNlVXJsXT1cImFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldFV0aWxpc2F0ZXVyTWluaW1hbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5nZXRBbGxVdGlsaXNhdGV1ck1pbmltYWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhiaW5kKV09XCJhY3Rpb24udXRpbGlzYXRldXJEZW1hbmRldXJcIiBpZC1maWVsZD1cInVpZFwiIGxhYmVsLWZpZWxkPVwibm9tUHJlbm9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNGaWx0ZXJlZF09XCJ0cnVlXCIgW2lucHV0TmFtZV09XCIndXRpbGlzYXRldXJEZW1hbmRldXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzTmFtZXMuVXRpbGlzYXRldXJcIj48L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX29iamV0J1wiPjwvVHNpLUxhYmVsPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj48VHNpLVRleHQtQXJlYSBbaW5wdXROYW1lXT1cIidPYmpldCdcIiBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5vYmpldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiM1wiPjwvVHNpLVRleHQtQXJlYT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2FjdGlvbl9wcmlvcml0ZSdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5hbGxQcmlvcml0ZUFjdGlvbkNSTUVudW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiYWN0aW9uLnByaW9yaXRlXCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCIgW2lucHV0TmFtZV09XCInUHJpb3JpdGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlYXJjaEJ1dHRvbl09XCJmYWxzZVwiPjwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX3V0aWxpc2F0ZXVyQXNzaWduZSdcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gW2VsZW1lbnRTb3VyY2VVcmxdPVwiYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuZ2V0VXRpbGlzYXRldXJNaW5pbWFsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cImFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEFsbFV0aWxpc2F0ZXVyTWluaW1hbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGJpbmQpXT1cImFjdGlvbi51dGlsaXNhdGV1ckFzc2lnbmVcIiBpZC1maWVsZD1cInVpZFwiIGxhYmVsLWZpZWxkPVwibm9tUHJlbm9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXROYW1lXT1cIidVdGlsaXNhdGV1ckFzc2lnbmUnXCIgW2lzRmlsdGVyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc05hbWVzLlV0aWxpc2F0ZXVyXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInc2hhcmVkX2FjdGlvbl9yZXN1bHRhdCdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBbbGlzdFNvdXJjZVVybF09XCJhZG1pbmlzdHJhdGlvbkVuZHBvaW50cy5hbGxSZXN1bHRhdEFjdGlvbkNSTUVudW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoYmluZCldPVwiYWN0aW9uLnJlc3VsdGF0XCIgaWQtZmllbGQ9XCJrZXlcIiBsYWJlbC1maWVsZD1cInZhbHVlXCIgW2lucHV0TmFtZV09XCInUmVzdWx0YXQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlYXJjaEJ1dHRvbl09XCJmYWxzZVwiPjwvVHNpLVNlYXJjaC1Db21ibz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ3NoYXJlZF9hY3Rpb25fbGlldSdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+PFRzaS1UZXh0LUFyZWEgW2lucHV0TmFtZV09XCInTGlldSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiYWN0aW9uLmxpZXVcIj48L1RzaS1UZXh0LUFyZWE+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj48VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cIidzaGFyZWRfYWN0aW9uX0FjdGlvblByZWNlZGVudGUnXCI+PC9Uc2ktTGFiZWw+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtN1wiPjxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cIidBY3Rpb25QcmVjZWRlbnRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24uY29kZUFjdGlvblByZWNlZGVudGVcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvVHNpLUludGVnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQnV0dG9uIFtpY29uXT1cIidwaSBwaS1jYXJldC11cCdcIiBbZGlzYWJsZWRdPVwiIWFjdGlvbi5hY3Rpb25QcmVjZWRlbnRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvcGVuQWN0aW9uUHJlY2VkZW50ZVBvcHVwKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPHAtdGFiVmlldz5cclxuICAgICAgICAgICAgICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ2FuZ2xhaXNfZWNoZWFuY2UnfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYm9yZGVyIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCB0ZXh0LWNlbnRlclwiPjxiPnt7ICdhY3Rpb25fRGVidXQnIHwgbG9jYWxpemUgfX08L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCB0ZXh0LWNlbnRlclwiPjxiPnt7ICdhY3Rpb25fRmluJyB8IGxvY2FsaXplIH19PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhY3Rpb25fZGF0ZUhldXJlX1ByZXYnXCI+PC9Uc2ktTGFiZWw+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLURhdGUtUGlja2VyIFtpbnB1dE5hbWVdPVwiJ0RhdGVIZXVyZURlYnV0UHJldidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5kYXRlSGV1cmVEZWJ1dFByZXZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1RpbWVdPVwidHJ1ZVwiPjwvVHNpLURhdGUtUGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLURhdGUtUGlja2VyIFtpbnB1dE5hbWVdPVwiJ0RhdGVIZXVyZUZpblByZXYnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24uZGF0ZUhldXJlRmluUHJldlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJ0cnVlXCI+PC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj48VHNpLUxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFZhbHVlXT1cIidhY3Rpb24uZGF0ZUhldXJlZV9SZWFsaXNlZSdcIj48L1RzaS1MYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPjxUc2ktRGF0ZS1QaWNrZXIgW2lucHV0TmFtZV09XCInRGF0ZUhldXJlRGVidXRSZWFsaXNlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5kYXRlSGV1cmVEZWJ1dFJlYWxpc2VlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cInRydWVcIj48L1RzaS1EYXRlLVBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+PFRzaS1EYXRlLVBpY2tlciBbaW5wdXROYW1lXT1cIidEYXRlSGV1cmVGaW5SZWFsaXNlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cImFjdGlvbi5kYXRlSGV1cmVGaW5SZWFsaXNlZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJ0cnVlXCI+PC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1maWVsZHNldCBbbGVnZW5kXT1cIidhY3Rpb25fRmllbGRzZXRfYWxlcnRlJyB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiJ2FjdGlvbl9hbGVydGUnXCI+PC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPjxUc2ktQ2hlY2tCb3ggW2lucHV0TmFtZV09XCInQWxlcnRlJ1wiIFtpc0JpbmFyeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJhY3Rpb24uYWxlcnRlXCI+PC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PFRzaS1MYWJlbCBbbGFiZWxWYWx1ZV09XCInYWN0aW9uX2FsZXJ0ZUF2YW50J1wiPjwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+PFRzaS1JbnRlZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dE5hbWVdPVwiJ0FsZXJ0ZUF2YW50J1wiIFsoaW5wdXRGaWVsZCldPVwiYWN0aW9uLmFsZXJ0ZUF2YW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+e3snam91cnMnfCBsb2NhbGl6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1maWVsZHNldD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFiUGFuZWwgW2hlYWRlcl09XCInTGlzdGVfZGVzX2FjdGlvbl9kZXRhaWxzJ3wgbG9jYWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBwcmVzZW50YXRpb25EZXNpZ25lcj1cImFjdGlvbl9HZW5lcmVyXCIgY2xhc3M9XCJncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1MYWJlbCBjbGFzcz1cImNvbC0xIGNvbC1vZmZzZXQtMVwiIFtsYWJlbFZhbHVlXT1cIidhY3Rpb25fR2VuZXJlcidcIj48L1RzaS1MYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBjbGFzcz1cImNvbC00XCIgaW5wdXROYW1lPVwiY2xhc3NOYW1lXCIgaWQtZmllbGQ9XCJjbGFzc05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC1maWVsZD1cImNsYXNzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaXN0U291cmNlVXJsXT1cInRoaXMuYWRtaW5pc3RyYXRpb25FbmRwb2ludHMuR2V0QWxsRW50aXRpZXNJbmZvcm1hdGlvbnNNaW5pbWFsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFNvdXJjZVVybF09XCJ0aGlzLmFkbWluaXN0cmF0aW9uRW5kcG9pbnRzLmdldEVudGl0eUluZm9FbGVtZW50U291cmNlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNGaWx0ZXJlZF09XCJ0cnVlXCIgWyhiaW5kKV09XCJjbGFzc2VuYW1lXCIgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kQ2hhbmdlKT1cIm9uQ2xhc3NlU2VsZWN0ZWQoJGV2ZW50KVwiPiA+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUdlbmVyaWMtRWRpdGFibGUtR3JpZCAob25Db25zdWx0Q2xpY2tlZCk9XCJjb25zdWx0RWxlbWVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvbnN1bHRCdXR0b25dPVwidHJ1ZVwiIFtjb2x1bW5zXT1cImFjdGlvbmRldGFpbGNvbG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZERhdGFdPVwiYWN0aW9uLmFjdGlvbkVSUERldGFpbHNcIiBbcGFyZW50XT1cInRoaXNcIj48L1RzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICAgICAgICAgIDxwLXRhYlBhbmVsIFtoZWFkZXJdPVwiJ3NoYXJlZF9hY3Rpb25fcGFydGljaXBhbnRzJ3wgbG9jYWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUdlbmVyaWMtRWRpdGFibGUtR3JpZCBbY29sdW1uc109XCJwYXJ0aWNpcGFudENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyaWREYXRhXT1cImFjdGlvbi5hY3Rpb25FUlBVdGlsaXNhdGV1cnNcIiBbcGFyZW50XT1cInRoaXNcIiBbc2hvd0FkZEJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93RGVsZXRlQnV0dG9uXT1cInRydWVcIj48L1RzaS1HZW5lcmljLUVkaXRhYmxlLUdyaWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC10YWJQYW5lbD5cclxuICAgICAgICAgICAgPC9wLXRhYlZpZXc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2ZpZWxkc2V0PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJtb2RlICE9PSBtb2RlUmVmLmNyZWF0ZVwiIGNsYXNzPVwiZ3JpZCBtdC0yXCIgcHJlc2VudGF0aW9uRGVzaWduZXI9XCJhY3Rpb25ub3V2ZWxsZV9hY3Rpb25FUlBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuICAgICAgICAgICAgPFRzaS1CdXR0b24gY2xhc3M9XCJ3LWZ1bGxcIiAob25DbGljayk9XCJvcGVuQWN0aW9uRVJQUG9wVXAoKVwiXHJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInYWN0aW9ubm91dmVsbGVfYWN0aW9uRVJQJ1wiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxUc2ktTW9kYWwtRm9vdGVyIFtjYW5jZWxEaXNhYmxlZF09XCJzYXZpbmdcIlxyXG4gICAgICAgIFtzYXZlRGlzYWJsZWRdPVwiaXNTdWJtaXREaXNhYmxlZCgpXCIgKG9uQ2FuY2VsQ2xpY2spPVwiaGlkZSgpXCI+PC9Uc2ktTW9kYWwtRm9vdGVyPlxyXG48L3RzaS1mb3JtPiJdfQ==