@valtimo/zgw 12.21.0 → 12.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -323,9 +323,9 @@ export class DocumentenApiMetadataModalComponent {
323
323
  }
324
324
  }
325
325
  informatieobjecttypeSelected(event) {
326
- if (event.item.id) {
326
+ if (event.id) {
327
327
  this.documentenApiMetadataForm.patchValue({
328
- informatieobjecttype: event.item.id,
328
+ informatieobjecttype: event.id,
329
329
  });
330
330
  }
331
331
  }
@@ -475,7 +475,7 @@ export class DocumentenApiMetadataModalComponent {
475
475
  this.hideFields.includes('trefwoorden'));
476
476
  }
477
477
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DocumentService }, { token: i3.DocumentenApiTagService }, { token: i4.FormBuilder }, { token: i5.KeycloakService }, { token: i6.ModalService }, { token: i7.TranslateService }, { token: i6.ValtimoModalService }, { token: i8.DocumentenApiVersionService }], target: i0.ɵɵFactoryTarget.Component }); }
478
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DocumentenApiMetadataModalComponent, isStandalone: true, selector: "valtimo-documenten-api-metadata-modal", inputs: { disabled$: "disabled$", file$: "file$", hideFields: "hideFields", defaultValues: "defaultValues", disableAuthor: "disableAuthor", disableConfidentialityLevel: "disableConfidentialityLevel", disableDescription: "disableDescription", disableDocumentTitle: "disableDocumentTitle", disableDocumentType: "disableDocumentType", disableFilename: "disableFilename", disableLanguage: "disableLanguage", disableStatus: "disableStatus", supportsTrefwoorden: "supportsTrefwoorden", disableCreationDate: "disableCreationDate", isEditMode: "isEditMode", open: "open" }, outputs: { metadata: "metadata", modalClose: "modalClose" }, viewQueries: [{ propertyName: "metadataModal", first: true, predicate: ["metadataModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n editDisabled: editDisabled$ | async,\n languageItems: languageItems$ | async,\n confidentialityLevelItems: confidentialityLevelItems$ | async,\n documentTypeItems: documentTypeItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n [cdsLayer]=\"1\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.editDisabled\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('bestandsnaam')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.bestandsnaam\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('auteur')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.auteur\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('taal')) {\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('vertrouwelijkheidaanduiding')) {\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n (clear)=\"confidentialityLevelFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.confidentialityLevelItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('informatieobjecttype')) {\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n }\n @if (supportsTrefwoorden && !hideFields.includes('trefwoorden')) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems?.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('titel')) {\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n }\n @if (!hideFields.includes('beschrijving')) {\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"false\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n }\n @if (!hideFields.includes('creatiedatum')) {\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n }\n @if (!hideFields.includes('status')) {\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n (clear)=\"statusFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n }\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonInputModule }, { kind: "component", type: i9.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i9.TextareaLabelComponent, selector: "cds-textarea-label, ibm-textarea-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textAreaTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i9.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i9.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i9.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i9.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i9.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i9.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i9.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: InputLabelModule }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: ModalModule }, { kind: "directive", type: i9.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i9.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i9.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SelectModule }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "component", type: i9.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: VModalModule }, { kind: "component", type: i6.VModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter", "parentId"], outputs: ["closeEvent"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i9.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }] }); }
478
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DocumentenApiMetadataModalComponent, isStandalone: true, selector: "valtimo-documenten-api-metadata-modal", inputs: { disabled$: "disabled$", file$: "file$", hideFields: "hideFields", defaultValues: "defaultValues", disableAuthor: "disableAuthor", disableConfidentialityLevel: "disableConfidentialityLevel", disableDescription: "disableDescription", disableDocumentTitle: "disableDocumentTitle", disableDocumentType: "disableDocumentType", disableFilename: "disableFilename", disableLanguage: "disableLanguage", disableStatus: "disableStatus", supportsTrefwoorden: "supportsTrefwoorden", disableCreationDate: "disableCreationDate", isEditMode: "isEditMode", open: "open" }, outputs: { metadata: "metadata", modalClose: "modalClose" }, viewQueries: [{ propertyName: "metadataModal", first: true, predicate: ["metadataModal"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n editDisabled: editDisabled$ | async,\n languageItems: languageItems$ | async,\n confidentialityLevelItems: confidentialityLevelItems$ | async,\n documentTypeItems: documentTypeItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n [cdsLayer]=\"1\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.editDisabled\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('bestandsnaam')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.bestandsnaam\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('auteur')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.auteur\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('taal')) {\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('vertrouwelijkheidaanduiding')) {\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n (clear)=\"confidentialityLevelFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.confidentialityLevelItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('informatieobjecttype')) {\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n (clear)=\"informatieobjecttypeFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n }\n @if (supportsTrefwoorden && !hideFields.includes('trefwoorden')) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems?.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('titel')) {\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n }\n @if (!hideFields.includes('beschrijving')) {\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"false\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n }\n @if (!hideFields.includes('creatiedatum')) {\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n }\n @if (!hideFields.includes('status')) {\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n (clear)=\"statusFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n }\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i9.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonInputModule }, { kind: "component", type: i9.Label, selector: "cds-label, ibm-label", inputs: ["labelInputID", "disabled", "skeleton", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i9.TextareaLabelComponent, selector: "cds-textarea-label, ibm-textarea-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textAreaTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "component", type: i9.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel"] }, { kind: "directive", type: i9.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "directive", type: i9.TextArea, selector: "[cdsTextArea], [ibmTextArea]", inputs: ["theme", "invalid", "skeleton"] }, { kind: "ngmodule", type: ComboBoxModule }, { kind: "component", type: i9.ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: ["placeholder", "openMenuAria", "closeMenuAria", "clearSelectionsTitle", "clearSelectionsAria", "clearSelectionTitle", "clearSelectionAria", "id", "labelId", "items", "type", "size", "itemValueKey", "label", "hideLabel", "helperText", "appendInline", "invalid", "invalidText", "warn", "warnText", "maxLength", "theme", "selectionFeedback", "autocomplete", "dropUp", "disabled"], outputs: ["selected", "submit", "close", "search", "clear"] }, { kind: "component", type: i9.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i9.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i10.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i9.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "ngmodule", type: InputLabelModule }, { kind: "ngmodule", type: InputModule }, { kind: "ngmodule", type: ModalModule }, { kind: "directive", type: i9.ModalHeaderHeading, selector: "[cdsModalHeaderHeading], [ibmModalHeaderHeading]" }, { kind: "ngmodule", type: RadioModule }, { kind: "component", type: i9.Radio, selector: "cds-radio, ibm-radio", inputs: ["checked", "name", "disabled", "labelPlacement", "ariaLabelledby", "ariaLabel", "required", "value", "skeleton", "id"], outputs: ["change"] }, { kind: "component", type: i9.RadioGroup, selector: "cds-radio-group, ibm-radio-group", inputs: ["selected", "value", "name", "disabled", "skeleton", "orientation", "labelPlacement", "legend", "ariaLabel", "ariaLabelledby", "helperText", "invalid", "invalidText", "warn", "warnText"], outputs: ["change"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SelectModule }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "component", type: i9.Tooltip, selector: "cds-tooltip, ibm-tooltip", inputs: ["id", "enterDelayMs", "leaveDelayMs", "disabled", "description", "templateContext"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: VModalModule }, { kind: "component", type: i6.VModalComponent, selector: "v-modal", inputs: ["appearingDelayMs", "maxWidthPx", "hideFooter", "parentId"], outputs: ["closeEvent"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i9.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }] }); }
479
479
  }
480
480
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DocumentenApiMetadataModalComponent, decorators: [{
481
481
  type: Component,
@@ -498,7 +498,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
498
498
  TranslateModule,
499
499
  VModalModule,
500
500
  LayerModule,
501
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n editDisabled: editDisabled$ | async,\n languageItems: languageItems$ | async,\n confidentialityLevelItems: confidentialityLevelItems$ | async,\n documentTypeItems: documentTypeItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n [cdsLayer]=\"1\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.editDisabled\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('bestandsnaam')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.bestandsnaam\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('auteur')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.auteur\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('taal')) {\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('vertrouwelijkheidaanduiding')) {\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n (clear)=\"confidentialityLevelFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.confidentialityLevelItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('informatieobjecttype')) {\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n }\n @if (supportsTrefwoorden && !hideFields.includes('trefwoorden')) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems?.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('titel')) {\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n }\n @if (!hideFields.includes('beschrijving')) {\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"false\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n }\n @if (!hideFields.includes('creatiedatum')) {\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n }\n @if (!hideFields.includes('status')) {\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n (clear)=\"statusFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n }\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
501
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<v-modal\n #metadataModal\n *ngIf=\"{\n file: file$ | async,\n disabled: disabled$ | async,\n editDisabled: editDisabled$ | async,\n languageItems: languageItems$ | async,\n confidentialityLevelItems: confidentialityLevelItems$ | async,\n documentTypeItems: documentTypeItems$ | async,\n statusItems: statusItems$ | async,\n tagItems: tagItems$ | async,\n userEmail: userEmail$ | async,\n open: open$ | async,\n additionalDate: additionalDocumentDate$ | async,\n } as obs\"\n [maxWidthPx]=\"1280\"\n (closeEvent)=\"closeModal()\"\n [cdsLayer]=\"1\"\n>\n <div role=\"header\">\n @if (isEditMode) {\n <h3 cdsModalHeaderHeading>\n {{ 'document.editMetadata' | translate }}\n </h3>\n } @else {\n <h3 cdsModalHeaderHeading>\n {{ 'document.fillInMetadata' | translate }}\n </h3>\n }\n </div>\n\n <div role=\"content\">\n @if (obs.open) {\n <ng-container *ngTemplateOutlet=\"metadataForm; context: {obs: obs}\"></ng-container>\n }\n </div>\n\n <div role=\"footer\" class=\"metadata-modal-footer\">\n <button cdsButton=\"ghost\" (click)=\"closeModal()\" [disabled]=\"obs.disabled\">\n {{ 'document.cancel' | translate }}\n </button>\n\n <button\n cdsButton=\"primary\"\n type=\"submit\"\n [disabled]=\"obs.disabled || !documentenApiMetadataForm.valid || obs.editDisabled\"\n (click)=\"save()\"\n >\n {{ 'document.save' | translate }}\n </button>\n </div>\n</v-modal>\n\n<ng-template #metadataForm let-obs=\"obs\">\n <form [formGroup]=\"documentenApiMetadataForm\">\n <div class=\"documenten-metadata-form-columns-container\">\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('bestandsnaam')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.filename' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.filenameTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.bestandsnaam\"\n [placeholder]=\"'document.filenamePlaceholder' | translate\"\n cdsText\n type=\"text\"\n id=\"bestandsnaam\"\n formControlName=\"bestandsnaam\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('auteur')) {\n <cds-text-label class=\"documenten-metada-form-input\">\n {{ 'document.author' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.authorTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <input\n [value]=\"defaultValues.auteur\"\n [placeholder]=\"'document.authorPlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n id=\"auteur\"\n formControlName=\"auteur\"\n />\n </cds-text-label>\n }\n @if (!hideFields.includes('taal')) {\n <cds-text-label>\n {{ 'document.language' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.languageTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-dropdown\n [disabled]=\"obs.disabled || (languageDisabled$ | async)\"\n [appendInline]=\"true\"\n [placeholder]=\"'document.languagePlaceholder' | translate\"\n id=\"language\"\n (selected)=\"languageSelected($event)\"\n >\n <cds-dropdown-list [items]=\"obs.languageItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </div>\n }\n @if (!hideFields.includes('vertrouwelijkheidaanduiding')) {\n <cds-label>\n {{ 'document.confidentialityLevel' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.confidentialityLevelTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.confidentialityPlaceholder' | translate\"\n id=\"vertrouwelijkheidaanduiding\"\n [appendInline]=\"true\"\n [disabled]=\"obs.disabled || (confidentialityLevelDisabled$ | async)\"\n (selected)=\"confidentialityLevelSelected($event)\"\n (clear)=\"confidentialityLevelFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.confidentialityLevelItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('informatieobjecttype')) {\n <cds-label>\n {{ 'document.informatieobjecttype' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.informatieobjecttypeTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.informatieobjecttypePlaceholder' | translate\"\n [disabled]=\"obs.disabled || (informatieobjecttypeDisabled$ | async)\"\n id=\"informatieobjecttype\"\n [appendInline]=\"true\"\n (selected)=\"informatieobjecttypeSelected($event)\"\n (clear)=\"informatieobjecttypeFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.documentTypeItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-text-label name=\"'additionalDate'\">\n {{ 'document.additionalDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.additionalDateTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <cds-radio-group [orientation]=\"'horizontal'\" class=\"documenten-metada-form-input\">\n <cds-radio\n *ngFor=\"let option of ADDITONAL_DOCUMENT_DATE_OPTIONS\"\n [value]=\"option.value\"\n [checked]=\"obs.additionalDate === option.value\"\n [required]=\"true\"\n (click)=\"setAdditionalDate(option.value)\"\n name=\"radio-inline\"\n >\n {{ option.translationKey | translate }}\n </cds-radio>\n </cds-radio-group>\n }\n @if (supportsTrefwoorden && !hideFields.includes('trefwoorden')) {\n <cds-text-label>\n {{ 'document.tags' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.tagsTooltip' | translate\"\n [align]=\"'bottom-left'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [type]=\"'multi'\"\n [placeholder]=\"'document.tagsPlaceholder' | translate\"\n [disabled]=\"obs.disabled || obs.tagItems?.length === 0\"\n [appendInline]=\"true\"\n (selected)=\"tagsSelected($event)\"\n >\n >\n <cds-dropdown-list [items]=\"obs.tagItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n </div>\n\n <div class=\"documenten-metadata-form-column\">\n @if (!hideFields.includes('titel')) {\n <cds-text-label>\n {{ 'document.inputTitle' | translate }}\n <input\n [placeholder]=\"'document.inputTitlePlaceholder' | translate\"\n [required]=\"true\"\n cdsText\n class=\"documenten-metada-form-input\"\n id=\"titel\"\n formControlName=\"titel\"\n />\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputTitleTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-text-label>\n }\n @if (!hideFields.includes('beschrijving')) {\n <cds-textarea-label>\n {{ 'document.inputDescription' | translate }}\n <textarea\n [placeholder]=\"'document.inputDescriptionPlaceholder' | translate\"\n [required]=\"false\"\n [rows]=\"5\"\n cdsTextArea\n class=\"documenten-metada-form-description-input documenten-metada-form-input\"\n id=\"beschrijving\"\n formControlName=\"beschrijving\"\n ></textarea>\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.inputDescriptionTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-textarea-label>\n }\n @if (!hideFields.includes('creatiedatum')) {\n <cds-label>\n {{ 'document.creationDate' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.creationDateTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n <div class=\"documenten-metada-form-input\">\n <cds-date-picker\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"creatiedatum\"\n formControlName=\"creatiedatum\"\n >\n </cds-date-picker>\n </div>\n </cds-label>\n }\n @if (!hideFields.includes('status')) {\n <cds-label>\n {{ 'document.status' | translate }}\n <cds-tooltip\n [isOpen]=\"false\"\n [description]=\"'document.statusTooltip' | translate\"\n [align]=\"'bottom'\"\n >\n <i class=\"mdi mdi-help-circle-outline\"></i>\n </cds-tooltip>\n </cds-label>\n <div class=\"documenten-metada-form-input\">\n <cds-combo-box\n [placeholder]=\"'document.statusPlaceholder' | translate\"\n [disabled]=\"obs.disabled || (statusDisabled$ | async)\"\n id=\"status\"\n [appendInline]=\"true\"\n (selected)=\"statusSelected($event)\"\n (clear)=\"statusFormControl.setValue(null)\"\n >\n <cds-dropdown-list [items]=\"obs.statusItems || []\"></cds-dropdown-list>\n </cds-combo-box>\n </div>\n }\n @if (!hideFields.includes('aanvullendeDatum')) {\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'received'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"ontvangstdatum\"\n formControlName=\"ontvangstdatum\"\n ></cds-date-picker>\n <cds-date-picker\n *ngIf=\"obs.additionalDate === 'sent'\"\n [label]=\"'document.additionalDate' | translate\"\n [placeholder]=\"'DD-MM-YYYY'\"\n [dateFormat]=\"'d-m-Y'\"\n id=\"verzenddatum\"\n formControlName=\"verzenddatum\"\n ></cds-date-picker>\n }\n </div>\n </div>\n </form>\n</ng-template>\n", styles: [".documenten-metadata-form-columns-container{display:flex;justify-content:space-between}.documenten-metadata-form-column{flex:1;margin-right:1rem}.documenten-metada-form-input{margin-bottom:18px!important;width:100%!important}.documenten-metada-form-description-input{width:100%}::ng-deep .cds--date-picker,::ng-deep .cds--date-picker-container,::ng-deep .cds--date-picker__input,::ng-deep .cds--date-picker-input__wrapper,::ng-deep .cds--date-picker-input__wrapper>span{width:100%}::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:100%}.metadata-modal-footer{display:flex;justify-content:flex-end}.metadata-modal-footer button{width:100%}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
502
502
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.DocumentService }, { type: i3.DocumentenApiTagService }, { type: i4.FormBuilder }, { type: i5.KeycloakService }, { type: i6.ModalService }, { type: i7.TranslateService }, { type: i6.ValtimoModalService }, { type: i8.DocumentenApiVersionService }], propDecorators: { metadataModal: [{
503
503
  type: ViewChild,
504
504
  args: ['metadataModal']
@@ -539,4 +539,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
539
539
  }], modalClose: [{
540
540
  type: Output
541
541
  }] } });
542
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFVbkcsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUlMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsZ0JBQWdC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Q2IsZUFBZTt3QkFDZixZQUFZO3dCQUNaLFdBQVc7cUJBQ1o7cVZBRzJCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFFakIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBT08sMkJBQTJCO3NCQUF2QyxLQUFLO2dCQU9PLGtCQUFrQjtzQkFBOUIsS0FBSztnQkFPTyxvQkFBb0I7c0JBQWhDLEtBQUs7Z0JBT08sbUJBQW1CO3NCQUEvQixLQUFLO2dCQU9PLGVBQWU7c0JBQTNCLEtBQUs7Z0JBT08sZUFBZTtzQkFBM0IsS0FBSztnQkFPTyxhQUFhO3NCQUF6QixLQUFLO2dCQU9HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBT0csVUFBVTtzQkFBbEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQVVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBBZGRpdGlvbmFsRG9jdW1lbnREYXRlLFxuICBDb25maWRlbnRpYWxpdHlMZXZlbCxcbiAgRG9jdW1lbnRlbkFwaU1ldGFkYXRhLFxuICBEb2N1bWVudExhbmd1YWdlLFxuICBEb2N1bWVudFN0YXR1cyxcbiAgU3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0tleWNsb2FrU2VydmljZX0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtR3JvdXAsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElucHV0TGFiZWxNb2R1bGUsXG4gIElucHV0TW9kdWxlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFNlbGVjdE1vZHVsZSxcbiAgVmFsdGltb01vZGFsU2VydmljZSxcbiAgVk1vZGFsQ29tcG9uZW50LFxuICBWTW9kYWxNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIENvbWJvQm94TW9kdWxlLFxuICBEYXRlUGlja2VyTW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUgYXMgQ2FyYm9uSW5wdXRNb2R1bGUsXG4gIExheWVyTW9kdWxlLFxuICBMaXN0SXRlbSxcbiAgTW9kYWxNb2R1bGUsXG4gIFJhZGlvTW9kdWxlLFxuICBUYWdNb2R1bGUsXG4gIFRvb2x0aXBNb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpVGFnU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9jdW1lbnRlbi1hcGktdGFnLnNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpVXBsb2FkRmllbGREZWZhdWx0VmFsdWVzfSBmcm9tICcuLi8uLi9tb2RlbHMvZG9jdW1lbnRlbi1hcGktdXBsb2FkLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7RG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhcmJvbklucHV0TW9kdWxlLFxuICAgIENvbWJvQm94TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBNb2RhbE1vZHVsZSxcbiAgICBSYWRpb01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgVk1vZGFsTW9kdWxlLFxuICAgIExheWVyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGVuQXBpTWV0YWRhdGFNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbWV0YWRhdGFNb2RhbCcpIG1ldGFkYXRhTW9kYWw6IFZNb2RhbENvbXBvbmVudDtcblxuICBASW5wdXQoKSBkaXNhYmxlZCQhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBASW5wdXQoKSBmaWxlJCE6IE9ic2VydmFibGU8YW55PjtcblxuICBASW5wdXQoKSBoaWRlRmllbGRzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZXM6IERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZERlZmF1bHRWYWx1ZXMgPSB7fTtcbiAgQElucHV0KCkgc2V0IGRpc2FibGVBdXRob3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuYXV0ZXVyLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRldXIuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlQ29uZmlkZW50aWFsaXR5TGV2ZWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVEZXNjcmlwdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5iZXNjaHJpanZpbmcuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJlc2NocmlqdmluZy5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVEb2N1bWVudFRpdGxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnRpdGVsLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aXRlbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVEb2N1bWVudFR5cGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVGaWxlbmFtZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5iZXN0YW5kc25hYW0uZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVMYW5ndWFnZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZVN0YXR1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zdGF0dXNGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdHVzRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHN1cHBvcnRzVHJlZndvb3JkZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGRpc2FibGVDcmVhdGlvbkRhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY3JlYXRpZWRhdHVtLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGllZGF0dW0uZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGlzRWRpdE1vZGU6IGJvb2xlYW47XG5cbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgQElucHV0KCkgc2V0IG9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9wZW4kLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuTW9kYWwodGhpcy5tZXRhZGF0YU1vZGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuY2xvc2VNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBtZXRhZGF0YTogRXZlbnRFbWl0dGVyPERvY3VtZW50ZW5BcGlNZXRhZGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBtb2RhbENsb3NlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGZpbGVuYW1lRXh0ZW5zaW9uOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIGJlc3RhbmRzbmFhbTogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICB0aXRlbDogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBhdXRldXI6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgYmVzY2hyaWp2aW5nOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHRhYWw6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgaW5mb3JtYXRpZW9iamVjdHR5cGU6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgc3RhdHVzOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICBjcmVhdGllZGF0dW06IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgb250dmFuZ3N0ZGF0dW06IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgdmVyemVuZGRhdHVtOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHRyZWZ3b29yZGVuOiB0aGlzLmZiLmNvbnRyb2woW10pLFxuICB9KTtcblxuICBwdWJsaWMgZ2V0IGNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCd2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmcnKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbmZpZGVudGlhbGl0eUxldmVsRGlzYWJsZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmRpc2FibGVkKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdpbmZvcm1hdGllb2JqZWN0dHlwZScpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5mb3JtYXRpZW9iamVjdHR5cGVEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2VGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3RhYWwnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2VEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdHVzRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdzdGF0dXMnKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN0YXR1c0Rpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGFnRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3RyZWZ3b29yZGVuJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNyZWF0aWVkYXR1bSgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2NyZWF0aWVkYXR1bScpO1xuICB9XG5cbiAgcHVibGljIGdldCB0aXRlbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3RpdGVsJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJlc2NocmlqdmluZygpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2Jlc2NocmlqdmluZycpO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRldXIoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdhdXRldXInKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYmVzdGFuZHNuYWFtKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgnYmVzdGFuZHNuYWFtJyk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdERpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBDT05GSURFTlRJQUxJVFlfTEVWRUxTOiBBcnJheTxDb25maWRlbnRpYWxpdHlMZXZlbD4gPSBbXG4gICAgJ29wZW5iYWFyJyxcbiAgICAnYmVwZXJrdF9vcGVuYmFhcicsXG4gICAgJ2ludGVybicsXG4gICAgJ3phYWt2ZXJ0cm91d2VsaWprJyxcbiAgICAndmVydHJvdXdlbGlqaycsXG4gICAgJ2NvbmZpZGVudGllZWwnLFxuICAgICdnZWhlaW0nLFxuICAgICd6ZWVyX2dlaGVpbScsXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC52YWx1ZSlcbiAgICApLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2N1cnJlbnRDb25maWRlbnRpYWxpdHlMZXZlbF0pID0+XG4gICAgICB0aGlzLkNPTkZJREVOVElBTElUWV9MRVZFTFMubWFwKGNvbmZpZGVudGlhbGl0eUxldmVsID0+ICh7XG4gICAgICAgIGlkOiBjb25maWRlbnRpYWxpdHlMZXZlbCxcbiAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGRvY3VtZW50LiR7Y29uZmlkZW50aWFsaXR5TGV2ZWx9YCksXG4gICAgICAgIHNlbGVjdGVkOiBjdXJyZW50Q29uZmlkZW50aWFsaXR5TGV2ZWwgPT09IGNvbmZpZGVudGlhbGl0eUxldmVsLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBBRERJVE9OQUxfRE9DVU1FTlRfREFURV9PUFRJT05TOiBBcnJheTx7XG4gICAgdmFsdWU6IEFkZGl0aW9uYWxEb2N1bWVudERhdGU7XG4gICAgdHJhbnNsYXRpb25LZXk6IHN0cmluZztcbiAgfT4gPSBbXG4gICAge1xuICAgICAgdmFsdWU6ICduZWl0aGVyJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZG9jdW1lbnQubm9BZGRpdGlvbmFsRGF0ZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ3NlbnQnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdkb2N1bWVudC5zZW5kRGF0ZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ3JlY2VpdmVkJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZG9jdW1lbnQucmVjZWlwdERhdGUnLFxuICAgIH0sXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBjbGVhclN0YXR1c1NlbGVjdGlvbiQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkaXRpb25hbERvY3VtZW50RGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFkZGl0aW9uYWxEb2N1bWVudERhdGU+KCduZWl0aGVyJyk7XG4gIHB1YmxpYyByZWFkb25seSBTVEFUVVNFUzogQXJyYXk8RG9jdW1lbnRTdGF0dXM+ID0gW1xuICAgICdpbl9iZXdlcmtpbmcnLFxuICAgICd0ZXJfdmFzdHN0ZWxsaW5nJyxcbiAgICAnZGVmaW5pdGllZicsXG4gICAgJ2dlYXJjaGl2ZWVyZCcsXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBSRUNFSVBUX1NUQVRVU0VTOiBBcnJheTxEb2N1bWVudFN0YXR1cz4gPSBbJ2RlZmluaXRpZWYnLCAnZ2VhcmNoaXZlZXJkJ107XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERvY3VtZW50ZW5BcGlNZXRhZGF0YT4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQsXG4gICAgdGhpcy5zdGF0dXNGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5zdGF0dXNGb3JtQ29udHJvbC52YWx1ZSkpLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIHRhcCgoW2FkZGl0aW9uYWxEb2N1bWVudERhdGUsIGN1cnJlbnRTdGF0dXNdKSA9PiB7XG4gICAgICB0aGlzLmZvcm1EYXRhJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoZm9ybURhdGEgPT4gISFmb3JtRGF0YSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoZm9ybURhdGEgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFkZGl0aW9uYWxEb2N1bWVudERhdGUgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgICAgICAgIChmb3JtRGF0YS5zdGF0dXMgPT09ICdpbl9iZXdlcmtpbmcnIHx8IGZvcm1EYXRhLnN0YXR1cyA9PT0gJ3Rlcl92YXN0c3RlbGxpbmcnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclN0YXR1c1NlbGVjdGlvbiQubmV4dChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pLFxuICAgIG1hcCgoW2FkZGl0aW9uYWxEb2N1bWVudERhdGUsIGN1cnJlbnRTdGF0dXNdKSA9PlxuICAgICAgKGFkZGl0aW9uYWxEb2N1bWVudERhdGUgPT09ICdyZWNlaXZlZCcgPyB0aGlzLlJFQ0VJUFRfU1RBVFVTRVMgOiB0aGlzLlNUQVRVU0VTKS5tYXAoXG4gICAgICAgIHN0YXR1cyA9PiAoe1xuICAgICAgICAgIGlkOiBzdGF0dXMsXG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGRvY3VtZW50LiR7c3RhdHVzfWApLFxuICAgICAgICAgIHNlbGVjdGVkOiBjdXJyZW50U3RhdHVzID09PSBzdGF0dXMsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YWdJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMudmFsdGltb01vZGFsU2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlKSksXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgdGFnRm9ybUNvbnRyb2xWYWx1ZV0pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVGFnU2VydmljZS5nZXRUYWdzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICBvZih0YWdGb3JtQ29udHJvbFZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFt0YWdzLCB0YWdGb3JtQ29udHJvbFZhbHVlXSkgPT5cbiAgICAgIHRhZ3MubWFwKHRhZyA9PiAoe1xuICAgICAgICBpZDogdGFnLnZhbHVlLFxuICAgICAgICBjb250ZW50OiB0YWcudmFsdWUsXG4gICAgICAgIHNlbGVjdGVkOiAhIXRhZ0Zvcm1Db250cm9sVmFsdWUgPyB0YWdGb3JtQ29udHJvbFZhbHVlLmluY2x1ZGVzKHRhZy52YWx1ZSkgOiBmYWxzZSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgTEFOR1VBR0VTOiBBcnJheTxEb2N1bWVudExhbmd1YWdlPiA9IFsnbmxkJywgJ2VuZycsICdkZXUnXTtcbiAgcHVibGljIGxhbmd1YWdlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC52YWx1ZSkpLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2N1cnJlbnRMYW5ndWFnZV0pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLkxBTkdVQUdFUy5tYXAoXG4gICAgICAgIChsYW5ndWFnZTogYW55KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtsYW5ndWFnZX1gKSxcbiAgICAgICAgICAgIGlkOiBsYW5ndWFnZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmd1YWdlLFxuICAgICAgICAgIH0pIGFzIExpc3RJdGVtXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50VHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy52YWx0aW1vTW9kYWxTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLmluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2wudmFsdWUpXG4gICAgKSxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudFR5cGVzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICBvZihpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtkb2N1bWVudFR5cGVzLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGRvY3VtZW50VHlwZXMubWFwKCh0eXBlOiBhbnkpID0+ICh7XG4gICAgICAgIGlkOiB0eXBlLnVybCxcbiAgICAgICAgY29udGVudDogdHlwZS5uYW1lLFxuICAgICAgICBzZWxlY3RlZDogaW5mb3JtYXRpZW9iamVjdHR5cGVWYWx1ZSA9PT0gdHlwZS51cmwsXG4gICAgICB9KSlcbiAgICApXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyRW1haWwkID0gZnJvbSh0aGlzLmtleWNsb2FrU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKSkucGlwZShcbiAgICBtYXAodXNlclByb2ZpbGUgPT4gdXNlclByb2ZpbGU/LmVtYWlsIHx8ICcnKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQ6IE9ic2VydmFibGU8U3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPiA9XG4gICAgdGhpcy52YWx0aW1vTW9kYWxTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZS5nZXRTdXBwb3J0ZWRBcGlGZWF0dXJlcyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZmlsZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlOiBEb2N1bWVudGVuQXBpVGFnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleWNsb2FrU2VydmljZTogS2V5Y2xvYWtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdGltb01vZGFsU2VydmljZTogVmFsdGltb01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZTogRG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuRmlsZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlbkRpc2FibGVkU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuRmlsZW5hbWVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Eb2N1bWVudERlZmluaXRpb25TdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fZmlsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9maWxlTmFtZUFuZEF1dGhvclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVkaXREaXNhYmxlZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbGFuZ3VhZ2VTZWxlY3RlZChldmVudDoge2l0ZW06IHtpZDogc3RyaW5nfX0pIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICB0YWFsOiBldmVudC5pdGVtLmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRhZ3NTZWxlY3RlZChldmVudDogQXJyYXk8TGlzdEl0ZW0+KSB7XG4gICAgdGhpcy50YWdGb3JtQ29udHJvbC5wYXRjaFZhbHVlKGV2ZW50LmZpbHRlcih0YWcgPT4gdGFnLnNlbGVjdGVkKS5tYXAodGFnID0+IHRhZy5pZCkpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoZXZlbnQ6IHtpZDogc3RyaW5nfSkge1xuICAgIGlmIChldmVudC5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICB2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmc6IGV2ZW50LmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXR1c1NlbGVjdGVkKGV2ZW50OiB7aWQ6IHN0cmluZ30pIHtcbiAgICBpZiAoZXZlbnQuaWQpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgc3RhdHVzOiBldmVudC5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbmZvcm1hdGllb2JqZWN0dHlwZVNlbGVjdGVkKGV2ZW50OiB7aXRlbToge2lkOiBzdHJpbmd9fSkge1xuICAgIGlmIChldmVudC5pdGVtLmlkKSB7XG4gICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIGluZm9ybWF0aWVvYmplY3R0eXBlOiBldmVudC5pdGVtLmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZWZpbGxGb3JtKGZpbGUpIHtcbiAgICB0aGlzLnByZWZpbGxGaWxlbmFtZUFuZEF1dGhvcigpO1xuXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYmVzY2hyaWp2aW5nLFxuICAgICAgICB0YWFsLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICB2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmcsXG4gICAgICAgIG9udHZhbmdzdGRhdHVtLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW0sXG4gICAgICAgIHRyZWZ3b29yZGVuLFxuICAgICAgfSA9IGZpbGU7XG5cbiAgICAgIGlmICh2ZXJ6ZW5kZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgnc2VudCcpO1xuICAgICAgZWxzZSBpZiAob250dmFuZ3N0ZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgncmVjZWl2ZWQnKTtcbiAgICAgIGVsc2UgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRTdGF0dXMgPSB0aGlzLmRlZmF1bHRWYWx1ZXMuc3RhdHVzO1xuICAgICAgY29uc3QgdmFsaWREZWZhdWx0U3RhdHVzID0gdGhpcy5TVEFUVVNFUy5pbmNsdWRlcyhkZWZhdWx0U3RhdHVzIGFzIERvY3VtZW50U3RhdHVzKSAmJiBkZWZhdWx0U3RhdHVzO1xuICAgICAgY29uc3QgdmFsaWRQcmVmaWxsU3RhdHVzID0gdGhpcy5TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpICYmIHN0YXR1cztcblxuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBiZXNjaHJpanZpbmc6IGJlc2NocmlqdmluZyB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMuYmVzY2hyaWp2aW5nLFxuICAgICAgICB0YWFsOiB0YWFsIHx8IHRoaXMuZGVmYXVsdFZhbHVlcy50YWFsLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogaW5mb3JtYXRpZW9iamVjdHR5cGUgfHwgdGhpcy5kZWZhdWx0VmFsdWVzLmluZm9ybWF0aWVvYmplY3R0eXBlLFxuICAgICAgICBzdGF0dXM6IHZhbGlkUHJlZmlsbFN0YXR1cyB8fCB2YWxpZERlZmF1bHRTdGF0dXMgfHwgbnVsbCxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOlxuICAgICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZyB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMudmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nLFxuICAgICAgICBvbnR2YW5nc3RkYXR1bTogb250dmFuZ3N0ZGF0dW0gPyBuZXcgRGF0ZShvbnR2YW5nc3RkYXR1bSkgOiBudWxsLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW06IHZlcnplbmRkYXR1bSA/IG5ldyBEYXRlKHZlcnplbmRkYXR1bSkgOiBudWxsLFxuICAgICAgICB0cmVmd29vcmRlbjogdHJlZndvb3JkZW4gfHwgdGhpcy5kZWZhdWx0VmFsdWVzLnRyZWZ3b29yZGVuLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXREYXRlKCdjcmVhdGllZGF0dW0nKTtcbiAgICB0aGlzLmZvcm1hdERhdGUoJ3ZlcnplbmRkYXR1bScpO1xuICAgIHRoaXMuZm9ybWF0RGF0ZSgnb250dmFuZ3N0ZGF0dW0nKTtcblxuICAgIGNvbnN0IHJhd1ZhbHVlID0gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgbWFwcGVkUmF3VmFsdWUgPSBPYmplY3Qua2V5cyhyYXdWYWx1ZSkucmVkdWNlKFxuICAgICAgKGFjYywgY3VycmVudEtleSkgPT5cbiAgICAgICAgcmF3VmFsdWVbY3VycmVudEtleV0gIT09IHVuZGVmaW5lZCA/IHsuLi5hY2MsIFtjdXJyZW50S2V5XTogcmF3VmFsdWVbY3VycmVudEtleV19IDogYWNjLFxuICAgICAge31cbiAgICApIGFzIERvY3VtZW50ZW5BcGlNZXRhZGF0YTtcblxuICAgIGlmICh0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0udmFsaWQpIHRoaXMubWV0YWRhdGEuZW1pdChtYXBwZWRSYXdWYWx1ZSk7XG5cbiAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmNsb3NlTW9kYWwoKCkgPT4ge1xuICAgICAgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG4gICAgICB0aGlzLm1vZGFsQ2xvc2UuZW1pdCgpO1xuICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVmaWxsRmlsZW5hbWVBbmRBdXRob3IoKSB7XG4gICAgdGhpcy5fZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbGUkLCB0aGlzLnVzZXJFbWFpbCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW2ZpbGUsIHVzZXJFbWFpbF0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGZpbGU/LmJlc3RhbmRzbmFhbSB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMuYmVzdGFuZHNuYWFtIHx8IGZpbGU/Lm5hbWU7XG4gICAgICAgICAgdGhpcy5maWxlbmFtZUV4dGVuc2lvbiA9IGZpbGVuYW1lPy5zcGxpdCgnLicpPy5wb3AoKSB8fCAnJztcbiAgICAgICAgICBpZiAodGhpcy5maWxlbmFtZUV4dGVuc2lvbi5sZW5ndGggPT09IGZpbGVuYW1lPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZW5hbWVFeHRlbnNpb24gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiBmaWxlbmFtZSxcbiAgICAgICAgICAgIGF1dGV1cjogZmlsZT8uYXV0ZXVyIHx8IHRoaXMuZGVmYXVsdFZhbHVlcy5hdXRldXIgfHwgdXNlckVtYWlsLFxuICAgICAgICAgICAgY3JlYXRpZWRhdHVtOiBmaWxlPy5jcmVhdGllZGF0dW0gfHwgbmV3IERhdGUoRGF0ZS5ub3coKSksXG4gICAgICAgICAgICB0aXRlbDpcbiAgICAgICAgICAgICAgZmlsZT8udGl0ZWwgfHxcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzLnRpdGVsIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsZW5hbWVUb1RpdGxlKGZpbGU/Lm5hbWUgfHwgdGhpcy5kZWZhdWx0VmFsdWVzLmJlc3RhbmRzbmFhbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRoaXMuYXJlQWxsRmllbGRzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsZW5hbWVUb1RpdGxlKGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKTtcbiAgICByZXR1cm4gZmlsZW5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaWxlbmFtZS5zbGljZSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShjb250cm9sTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgW2NvbnRyb2xOYW1lXTogdGhpcy50b0Zvcm1hdHRlZERhdGUoY29udHJvbC52YWx1ZSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvRm9ybWF0dGVkRGF0ZShkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLmZpbGUkKSB7XG4gICAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZmlsZSQsXG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQsXG4gICAgICBdKS5zdWJzY3JpYmUoKFtmaWxlLCBzdXBwb3J0XSkgPT4ge1xuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgIHRoaXMucHJlZmlsbEZvcm0oZmlsZSk7XG4gICAgICAgICAgdGhpcy5lZGl0RGlzYWJsZWQkLm5leHQoXG4gICAgICAgICAgICAhc3VwcG9ydC5zdXBwb3J0c1VwZGF0aW5nRGVmaW5pdGl2ZURvY3VtZW50ICYmXG4gICAgICAgICAgICAgIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZicgJiZcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRNb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5EaXNhYmxlZFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGlzYWJsZWQkPy5zdWJzY3JpYmUoZGlzYWJsZWQgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZW5hbWVTdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGJlc3RhbmRzbmFhbSA9PiB7XG4gICAgICAgIGlmIChiZXN0YW5kc25hYW0gJiYgdGhpcy5maWxlbmFtZUV4dGVuc2lvbikge1xuICAgICAgICAgIGxldCBjb3JyZWN0QmVzdGFuZHNuYWFtID1cbiAgICAgICAgICAgIGJlc3RhbmRzbmFhbS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpICsgJy4nICsgdGhpcy5maWxlbmFtZUV4dGVuc2lvbjtcbiAgICAgICAgICBpZiAoY29ycmVjdEJlc3RhbmRzbmFhbSAhPSBiZXN0YW5kc25hYW0pIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiBjb3JyZWN0QmVzdGFuZHNuYWFtLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Eb2N1bWVudERlZmluaXRpb25TdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnJvdXRlPy5wYXJhbXMgfHwgb2YobnVsbCksIHRoaXMucm91dGU/LmZpcnN0Q2hpbGQ/LnBhcmFtcyB8fCBvZihudWxsKV0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChcbiAgICAgICAgICAgIChbcGFyYW1zLCBmaXJzdENoaWxkUGFyYW1zXSkgPT5cbiAgICAgICAgICAgICAgKHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fCBmaXJzdENoaWxkUGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSBhcyBzdHJpbmdcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpbHRlcihkb2N1bWVudERlZmluaXRpb25OYW1lID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgICB0aGlzLnZhbHRpbW9Nb2RhbFNlcnZpY2Uuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWRkaXRpb25hbERhdGUodmFsdWU6IEFkZGl0aW9uYWxEb2N1bWVudERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVBbGxGaWVsZHNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnYWFudnVsbGVuZGVEYXR1bScpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2F1dGV1cicpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ3ZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZycpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2NyZWF0aWVkYXR1bScpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2Jlc2NocmlqdmluZycpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RpdGVsJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnaW5mb3JtYXRpZW9iamVjdHR5cGUnKSAmJlxuICAgICAgdGhpcy5oaWRlRmllbGRzLmluY2x1ZGVzKCdiZXN0YW5kc25hYW0nKSAmJlxuICAgICAgdGhpcy5oaWRlRmllbGRzLmluY2x1ZGVzKCd0YWFsJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnc3RhdHVzJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygndHJlZndvb3JkZW4nKVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPHYtbW9kYWxcbiAgI21ldGFkYXRhTW9kYWxcbiAgKm5nSWY9XCJ7XG4gICAgZmlsZTogZmlsZSQgfCBhc3luYyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQkIHwgYXN5bmMsXG4gICAgZWRpdERpc2FibGVkOiBlZGl0RGlzYWJsZWQkIHwgYXN5bmMsXG4gICAgbGFuZ3VhZ2VJdGVtczogbGFuZ3VhZ2VJdGVtcyQgfCBhc3luYyxcbiAgICBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zOiBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50VHlwZUl0ZW1zOiBkb2N1bWVudFR5cGVJdGVtcyQgfCBhc3luYyxcbiAgICBzdGF0dXNJdGVtczogc3RhdHVzSXRlbXMkIHwgYXN5bmMsXG4gICAgdGFnSXRlbXM6IHRhZ0l0ZW1zJCB8IGFzeW5jLFxuICAgIHVzZXJFbWFpbDogdXNlckVtYWlsJCB8IGFzeW5jLFxuICAgIG9wZW46IG9wZW4kIHwgYXN5bmMsXG4gICAgYWRkaXRpb25hbERhdGU6IGFkZGl0aW9uYWxEb2N1bWVudERhdGUkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbiAgW21heFdpZHRoUHhdPVwiMTI4MFwiXG4gIChjbG9zZUV2ZW50KT1cImNsb3NlTW9kYWwoKVwiXG4gIFtjZHNMYXllcl09XCIxXCJcbj5cbiAgPGRpdiByb2xlPVwiaGVhZGVyXCI+XG4gICAgQGlmIChpc0VkaXRNb2RlKSB7XG4gICAgICA8aDMgY2RzTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAgICB7eyAnZG9jdW1lbnQuZWRpdE1ldGFkYXRhJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMz5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7ICdkb2N1bWVudC5maWxsSW5NZXRhZGF0YScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaDM+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IHJvbGU9XCJjb250ZW50XCI+XG4gICAgQGlmIChvYnMub3Blbikge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1ldGFkYXRhRm9ybTsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiByb2xlPVwiZm9vdGVyXCIgY2xhc3M9XCJtZXRhZGF0YS1tb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cImdob3N0XCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIj5cbiAgICAgIHt7ICdkb2N1bWVudC5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAhZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS52YWxpZCB8fCBvYnMuZWRpdERpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdkb2N1bWVudC5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNtZXRhZGF0YUZvcm0gbGV0LW9icz1cIm9ic1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtbnMtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtblwiPlxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdiZXN0YW5kc25hYW0nKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbCBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5maWxlbmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5maWxlbmFtZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlZmF1bHRWYWx1ZXMuYmVzdGFuZHNuYWFtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5maWxlbmFtZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBpZD1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnYXV0ZXVyJykpIHtcbiAgICAgICAgICA8Y2RzLXRleHQtbGFiZWwgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuYXV0aG9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmF1dGhvclRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlZmF1bHRWYWx1ZXMuYXV0ZXVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5hdXRob3JQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgaWQ9XCJhdXRldXJcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRldXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RhYWwnKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5sYW5ndWFnZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5sYW5ndWFnZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChsYW5ndWFnZURpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQubGFuZ3VhZ2VQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImxhbmd1YWdlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLmxhbmd1YWdlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygndmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nJykpIHtcbiAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1jb21iby1ib3hcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5jb25maWRlbnRpYWxpdHlQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cInZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZ1wiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgKGNvbmZpZGVudGlhbGl0eUxldmVsRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGVhcik9XCJjb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuY29uZmlkZW50aWFsaXR5TGV2ZWxJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1jb21iby1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnaW5mb3JtYXRpZW9iamVjdHR5cGUnKSkge1xuICAgICAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChpbmZvcm1hdGllb2JqZWN0dHlwZURpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIGlkPVwiaW5mb3JtYXRpZW9iamVjdHR5cGVcIlxuICAgICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwiaW5mb3JtYXRpZW9iamVjdHR5cGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuZG9jdW1lbnRUeXBlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnYWFudnVsbGVuZGVEYXR1bScpKSB7XG4gICAgICAgICAgPGNkcy10ZXh0LWxhYmVsIG5hbWU9XCInYWRkaXRpb25hbERhdGUnXCI+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuYWRkaXRpb25hbERhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuYWRkaXRpb25hbERhdGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgPGNkcy1yYWRpby1ncm91cCBbb3JpZW50YXRpb25dPVwiJ2hvcml6b250YWwnXCIgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLXJhZGlvXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgQURESVRPTkFMX0RPQ1VNRU5UX0RBVEVfT1BUSU9OU1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJvYnMuYWRkaXRpb25hbERhdGUgPT09IG9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFkZGl0aW9uYWxEYXRlKG9wdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICBuYW1lPVwicmFkaW8taW5saW5lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLnRyYW5zbGF0aW9uS2V5IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Nkcy1yYWRpbz5cbiAgICAgICAgICA8L2Nkcy1yYWRpby1ncm91cD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHN1cHBvcnRzVHJlZndvb3JkZW4gJiYgIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RyZWZ3b29yZGVuJykpIHtcbiAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQudGFncycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC50YWdzVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWNvbWJvLWJveFxuICAgICAgICAgICAgICBbdHlwZV09XCInbXVsdGknXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC50YWdzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCBvYnMudGFnSXRlbXM/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJ0YWdzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMudGFnSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtY29tYm8tYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhdGEtZm9ybS1jb2x1bW5cIj5cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygndGl0ZWwnKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5pbnB1dFRpdGxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuaW5wdXRUaXRsZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgY2RzVGV4dFxuICAgICAgICAgICAgICBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICBpZD1cInRpdGVsXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGl0ZWxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5pbnB1dFRpdGxlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdiZXNjaHJpanZpbmcnKSkge1xuICAgICAgICAgIDxjZHMtdGV4dGFyZWEtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5wdXREZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb25QbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcm93c109XCI1XCJcbiAgICAgICAgICAgICAgY2RzVGV4dEFyZWFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWRlc2NyaXB0aW9uLWlucHV0IGRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIlxuICAgICAgICAgICAgICBpZD1cImJlc2NocmlqdmluZ1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc2NocmlqdmluZ1wiXG4gICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5pbnB1dERlc2NyaXB0aW9uVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dGFyZWEtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnY3JlYXRpZWRhdHVtJykpIHtcbiAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmNyZWF0aW9uRGF0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5jcmVhdGlvbkRhdGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICAgIDxjZHMtZGF0ZS1waWNrZXJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAgICAgICBpZD1cImNyZWF0aWVkYXR1bVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRpZWRhdHVtXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Nkcy1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3N0YXR1cycpKSB7XG4gICAgICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5zdGF0dXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuc3RhdHVzVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICAgIDxjZHMtY29tYm8tYm94XG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQuc3RhdHVzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAoc3RhdHVzRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgaWQ9XCJzdGF0dXNcIlxuICAgICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic3RhdHVzU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGVhcik9XCJzdGF0dXNGb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLnN0YXR1c0l0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICAgIDwvY2RzLWNvbWJvLWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdhYW52dWxsZW5kZURhdHVtJykpIHtcbiAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAqbmdJZj1cIm9icy5hZGRpdGlvbmFsRGF0ZSA9PT0gJ3JlY2VpdmVkJ1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0RELU1NLVlZWVknXCJcbiAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkLW0tWSdcIlxuICAgICAgICAgICAgaWQ9XCJvbnR2YW5nc3RkYXR1bVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvbnR2YW5nc3RkYXR1bVwiXG4gICAgICAgICAgPjwvY2RzLWRhdGUtcGlja2VyPlxuICAgICAgICAgIDxjZHMtZGF0ZS1waWNrZXJcbiAgICAgICAgICAgICpuZ0lmPVwib2JzLmFkZGl0aW9uYWxEYXRlID09PSAnc2VudCdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidkb2N1bWVudC5hZGRpdGlvbmFsRGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAgIGlkPVwidmVyemVuZGRhdHVtXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZlcnplbmRkYXR1bVwiXG4gICAgICAgICAgPjwvY2RzLWRhdGUtcGlja2VyPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
542
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby96Z3cvc3JjL2xpYi9tb2R1bGVzL2RvY3VtZW50ZW4tYXBpL2NvbXBvbmVudHMvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwvZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFVbkcsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsZUFBZSxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBSXRFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUlMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsZ0JBQWdC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QUNaLFdBQVc7cUJBQ1o7cVZBRzJCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFFakIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBT08sMkJBQTJCO3NCQUF2QyxLQUFLO2dCQU9PLGtCQUFrQjtzQkFBOUIsS0FBSztnQkFPTyxvQkFBb0I7c0JBQWhDLEtBQUs7Z0JBT08sbUJBQW1CO3NCQUEvQixLQUFLO2dCQU9PLGVBQWU7c0JBQTNCLEtBQUs7Z0JBT08sZUFBZTtzQkFBM0IsS0FBSztnQkFPTyxhQUFhO3NCQUF6QixLQUFLO2dCQU9HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBT0csVUFBVTtzQkFBbEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQVVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBBZGRpdGlvbmFsRG9jdW1lbnREYXRlLFxuICBDb25maWRlbnRpYWxpdHlMZXZlbCxcbiAgRG9jdW1lbnRlbkFwaU1ldGFkYXRhLFxuICBEb2N1bWVudExhbmd1YWdlLFxuICBEb2N1bWVudFN0YXR1cyxcbiAgU3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzLFxufSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0tleWNsb2FrU2VydmljZX0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtR3JvdXAsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIElucHV0TGFiZWxNb2R1bGUsXG4gIElucHV0TW9kdWxlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFNlbGVjdE1vZHVsZSxcbiAgVmFsdGltb01vZGFsU2VydmljZSxcbiAgVk1vZGFsQ29tcG9uZW50LFxuICBWTW9kYWxNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL2NvbXBvbmVudHMnO1xuXG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIENvbWJvQm94TW9kdWxlLFxuICBEYXRlUGlja2VyTW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgSWNvbk1vZHVsZSxcbiAgSW5wdXRNb2R1bGUgYXMgQ2FyYm9uSW5wdXRNb2R1bGUsXG4gIExheWVyTW9kdWxlLFxuICBMaXN0SXRlbSxcbiAgTW9kYWxNb2R1bGUsXG4gIFJhZGlvTW9kdWxlLFxuICBUYWdNb2R1bGUsXG4gIFRvb2x0aXBNb2R1bGUsXG59IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpVGFnU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG9jdW1lbnRlbi1hcGktdGFnLnNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtEb2N1bWVudGVuQXBpVXBsb2FkRmllbGREZWZhdWx0VmFsdWVzfSBmcm9tICcuLi8uLi9tb2RlbHMvZG9jdW1lbnRlbi1hcGktdXBsb2FkLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7RG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnRlbi1hcGktbWV0YWRhdGEtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudGVuLWFwaS1tZXRhZGF0YS1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhcmJvbklucHV0TW9kdWxlLFxuICAgIENvbWJvQm94TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEYXRlUGlja2VyTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBNb2RhbE1vZHVsZSxcbiAgICBSYWRpb01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNlbGVjdE1vZHVsZSxcbiAgICBUYWdNb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgVk1vZGFsTW9kdWxlLFxuICAgIExheWVyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudGVuQXBpTWV0YWRhdGFNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnbWV0YWRhdGFNb2RhbCcpIG1ldGFkYXRhTW9kYWw6IFZNb2RhbENvbXBvbmVudDtcblxuICBASW5wdXQoKSBkaXNhYmxlZCQhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBASW5wdXQoKSBmaWxlJCE6IE9ic2VydmFibGU8YW55PjtcblxuICBASW5wdXQoKSBoaWRlRmllbGRzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZXM6IERvY3VtZW50ZW5BcGlVcGxvYWRGaWVsZERlZmF1bHRWYWx1ZXMgPSB7fTtcbiAgQElucHV0KCkgc2V0IGRpc2FibGVBdXRob3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuYXV0ZXVyLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRldXIuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlQ29uZmlkZW50aWFsaXR5TGV2ZWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVEZXNjcmlwdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5iZXNjaHJpanZpbmcuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJlc2NocmlqdmluZy5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVEb2N1bWVudFRpdGxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnRpdGVsLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aXRlbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVEb2N1bWVudFR5cGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVGaWxlbmFtZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5iZXN0YW5kc25hYW0uZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS5lbmFibGUoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2V0IGRpc2FibGVMYW5ndWFnZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYW5ndWFnZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBzZXQgZGlzYWJsZVN0YXR1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zdGF0dXNGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdHVzRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHN1cHBvcnRzVHJlZndvb3JkZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGRpc2FibGVDcmVhdGlvbkRhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY3JlYXRpZWRhdHVtLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGllZGF0dW0uZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGlzRWRpdE1vZGU6IGJvb2xlYW47XG5cbiAgcHVibGljIHJlYWRvbmx5IG9wZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgQElucHV0KCkgc2V0IG9wZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLm9wZW4kLm5leHQodmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuTW9kYWwodGhpcy5tZXRhZGF0YU1vZGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuY2xvc2VNb2RhbCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBtZXRhZGF0YTogRXZlbnRFbWl0dGVyPERvY3VtZW50ZW5BcGlNZXRhZGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBtb2RhbENsb3NlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIGZpbGVuYW1lRXh0ZW5zaW9uOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm06IEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIGJlc3RhbmRzbmFhbTogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICB0aXRlbDogdGhpcy5mYi5jb250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICBhdXRldXI6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgYmVzY2hyaWp2aW5nOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHRhYWw6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgaW5mb3JtYXRpZW9iamVjdHR5cGU6IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgc3RhdHVzOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZzogdGhpcy5mYi5jb250cm9sKCcnKSxcbiAgICBjcmVhdGllZGF0dW06IHRoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgb250dmFuZ3N0ZGF0dW06IHRoaXMuZmIuY29udHJvbCgnJyksXG4gICAgdmVyemVuZGRhdHVtOiB0aGlzLmZiLmNvbnRyb2woJycpLFxuICAgIHRyZWZ3b29yZGVuOiB0aGlzLmZiLmNvbnRyb2woW10pLFxuICB9KTtcblxuICBwdWJsaWMgZ2V0IGNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCd2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmcnKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbmZpZGVudGlhbGl0eUxldmVsRGlzYWJsZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZGVudGlhbGl0eUxldmVsRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLmRpc2FibGVkKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdpbmZvcm1hdGllb2JqZWN0dHlwZScpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5mb3JtYXRpZW9iamVjdHR5cGVEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2VGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3RhYWwnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFuZ3VhZ2VEaXNhYmxlZCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdHVzRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdzdGF0dXMnKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN0YXR1c0Rpc2FibGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgIG1hcCgoKSA9PiB0aGlzLmluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2wuZGlzYWJsZWQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGFnRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3RyZWZ3b29yZGVuJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNyZWF0aWVkYXR1bSgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2NyZWF0aWVkYXR1bScpO1xuICB9XG5cbiAgcHVibGljIGdldCB0aXRlbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ3RpdGVsJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJlc2NocmlqdmluZygpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5nZXQoJ2Jlc2NocmlqdmluZycpO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRldXIoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZ2V0KCdhdXRldXInKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYmVzdGFuZHNuYWFtKCk6IEFic3RyYWN0Q29udHJvbDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldCgnYmVzdGFuZHNuYWFtJyk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdERpc2FibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyByZWFkb25seSBDT05GSURFTlRJQUxJVFlfTEVWRUxTOiBBcnJheTxDb25maWRlbnRpYWxpdHlMZXZlbD4gPSBbXG4gICAgJ29wZW5iYWFyJyxcbiAgICAnYmVwZXJrdF9vcGVuYmFhcicsXG4gICAgJ2ludGVybicsXG4gICAgJ3phYWt2ZXJ0cm91d2VsaWprJyxcbiAgICAndmVydHJvdXdlbGlqaycsXG4gICAgJ2NvbmZpZGVudGllZWwnLFxuICAgICdnZWhlaW0nLFxuICAgICd6ZWVyX2dlaGVpbScsXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5jb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuY29uZmlkZW50aWFsaXR5TGV2ZWxGb3JtQ29udHJvbC52YWx1ZSlcbiAgICApLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2N1cnJlbnRDb25maWRlbnRpYWxpdHlMZXZlbF0pID0+XG4gICAgICB0aGlzLkNPTkZJREVOVElBTElUWV9MRVZFTFMubWFwKGNvbmZpZGVudGlhbGl0eUxldmVsID0+ICh7XG4gICAgICAgIGlkOiBjb25maWRlbnRpYWxpdHlMZXZlbCxcbiAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGRvY3VtZW50LiR7Y29uZmlkZW50aWFsaXR5TGV2ZWx9YCksXG4gICAgICAgIHNlbGVjdGVkOiBjdXJyZW50Q29uZmlkZW50aWFsaXR5TGV2ZWwgPT09IGNvbmZpZGVudGlhbGl0eUxldmVsLFxuICAgICAgfSkpXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBBRERJVE9OQUxfRE9DVU1FTlRfREFURV9PUFRJT05TOiBBcnJheTx7XG4gICAgdmFsdWU6IEFkZGl0aW9uYWxEb2N1bWVudERhdGU7XG4gICAgdHJhbnNsYXRpb25LZXk6IHN0cmluZztcbiAgfT4gPSBbXG4gICAge1xuICAgICAgdmFsdWU6ICduZWl0aGVyJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZG9jdW1lbnQubm9BZGRpdGlvbmFsRGF0ZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ3NlbnQnLFxuICAgICAgdHJhbnNsYXRpb25LZXk6ICdkb2N1bWVudC5zZW5kRGF0ZScsXG4gICAgfSxcbiAgICB7XG4gICAgICB2YWx1ZTogJ3JlY2VpdmVkJyxcbiAgICAgIHRyYW5zbGF0aW9uS2V5OiAnZG9jdW1lbnQucmVjZWlwdERhdGUnLFxuICAgIH0sXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBjbGVhclN0YXR1c1NlbGVjdGlvbiQgPSBuZXcgU3ViamVjdDxudWxsPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgYWRkaXRpb25hbERvY3VtZW50RGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFkZGl0aW9uYWxEb2N1bWVudERhdGU+KCduZWl0aGVyJyk7XG4gIHB1YmxpYyByZWFkb25seSBTVEFUVVNFUzogQXJyYXk8RG9jdW1lbnRTdGF0dXM+ID0gW1xuICAgICdpbl9iZXdlcmtpbmcnLFxuICAgICd0ZXJfdmFzdHN0ZWxsaW5nJyxcbiAgICAnZGVmaW5pdGllZicsXG4gICAgJ2dlYXJjaGl2ZWVyZCcsXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBSRUNFSVBUX1NUQVRVU0VTOiBBcnJheTxEb2N1bWVudFN0YXR1cz4gPSBbJ2RlZmluaXRpZWYnLCAnZ2VhcmNoaXZlZXJkJ107XG4gIHB1YmxpYyByZWFkb25seSBmb3JtRGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERvY3VtZW50ZW5BcGlNZXRhZGF0YT4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQsXG4gICAgdGhpcy5zdGF0dXNGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5zdGF0dXNGb3JtQ29udHJvbC52YWx1ZSkpLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIHRhcCgoW2FkZGl0aW9uYWxEb2N1bWVudERhdGUsIGN1cnJlbnRTdGF0dXNdKSA9PiB7XG4gICAgICB0aGlzLmZvcm1EYXRhJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoZm9ybURhdGEgPT4gISFmb3JtRGF0YSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoZm9ybURhdGEgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFkZGl0aW9uYWxEb2N1bWVudERhdGUgPT09ICdyZWNlaXZlZCcgJiZcbiAgICAgICAgICAgIChmb3JtRGF0YS5zdGF0dXMgPT09ICdpbl9iZXdlcmtpbmcnIHx8IGZvcm1EYXRhLnN0YXR1cyA9PT0gJ3Rlcl92YXN0c3RlbGxpbmcnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclN0YXR1c1NlbGVjdGlvbiQubmV4dChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pLFxuICAgIG1hcCgoW2FkZGl0aW9uYWxEb2N1bWVudERhdGUsIGN1cnJlbnRTdGF0dXNdKSA9PlxuICAgICAgKGFkZGl0aW9uYWxEb2N1bWVudERhdGUgPT09ICdyZWNlaXZlZCcgPyB0aGlzLlJFQ0VJUFRfU1RBVFVTRVMgOiB0aGlzLlNUQVRVU0VTKS5tYXAoXG4gICAgICAgIHN0YXR1cyA9PiAoe1xuICAgICAgICAgIGlkOiBzdGF0dXMsXG4gICAgICAgICAgY29udGVudDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYGRvY3VtZW50LiR7c3RhdHVzfWApLFxuICAgICAgICAgIHNlbGVjdGVkOiBjdXJyZW50U3RhdHVzID09PSBzdGF0dXMsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YWdJdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+PiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMudmFsdGltb01vZGFsU2VydmljZS5kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICB0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLnRhZ0Zvcm1Db250cm9sLnZhbHVlKSksXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSksXG4gICAgc3dpdGNoTWFwKChbZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgdGFnRm9ybUNvbnRyb2xWYWx1ZV0pID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpVGFnU2VydmljZS5nZXRUYWdzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICBvZih0YWdGb3JtQ29udHJvbFZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFt0YWdzLCB0YWdGb3JtQ29udHJvbFZhbHVlXSkgPT5cbiAgICAgIHRhZ3MubWFwKHRhZyA9PiAoe1xuICAgICAgICBpZDogdGFnLnZhbHVlLFxuICAgICAgICBjb250ZW50OiB0YWcudmFsdWUsXG4gICAgICAgIHNlbGVjdGVkOiAhIXRhZ0Zvcm1Db250cm9sVmFsdWUgPyB0YWdGb3JtQ29udHJvbFZhbHVlLmluY2x1ZGVzKHRhZy52YWx1ZSkgOiBmYWxzZSxcbiAgICAgIH0pKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgTEFOR1VBR0VTOiBBcnJheTxEb2N1bWVudExhbmd1YWdlPiA9IFsnbmxkJywgJ2VuZycsICdkZXUnXTtcbiAgcHVibGljIGxhbmd1YWdlSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmxhbmd1YWdlRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMubGFuZ3VhZ2VGb3JtQ29udHJvbC52YWx1ZSkpLFxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2N1cnJlbnRMYW5ndWFnZV0pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLkxBTkdVQUdFUy5tYXAoXG4gICAgICAgIChsYW5ndWFnZTogYW55KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgZG9jdW1lbnQuJHtsYW5ndWFnZX1gKSxcbiAgICAgICAgICAgIGlkOiBsYW5ndWFnZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmd1YWdlLFxuICAgICAgICAgIH0pIGFzIExpc3RJdGVtXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50VHlwZUl0ZW1zJDogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy52YWx0aW1vTW9kYWxTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMuaW5mb3JtYXRpZW9iamVjdHR5cGVGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLmluZm9ybWF0aWVvYmplY3R0eXBlRm9ybUNvbnRyb2wudmFsdWUpXG4gICAgKSxcbiAgXSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZS5nZXREb2N1bWVudFR5cGVzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUpLFxuICAgICAgICBvZihpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAoKFtkb2N1bWVudFR5cGVzLCBpbmZvcm1hdGllb2JqZWN0dHlwZVZhbHVlXSkgPT5cbiAgICAgIGRvY3VtZW50VHlwZXMubWFwKCh0eXBlOiBhbnkpID0+ICh7XG4gICAgICAgIGlkOiB0eXBlLnVybCxcbiAgICAgICAgY29udGVudDogdHlwZS5uYW1lLFxuICAgICAgICBzZWxlY3RlZDogaW5mb3JtYXRpZW9iamVjdHR5cGVWYWx1ZSA9PT0gdHlwZS51cmwsXG4gICAgICB9KSlcbiAgICApXG4gICk7XG4gIHB1YmxpYyByZWFkb25seSB1c2VyRW1haWwkID0gZnJvbSh0aGlzLmtleWNsb2FrU2VydmljZS5sb2FkVXNlclByb2ZpbGUoKSkucGlwZShcbiAgICBtYXAodXNlclByb2ZpbGUgPT4gdXNlclByb2ZpbGU/LmVtYWlsIHx8ICcnKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQ6IE9ic2VydmFibGU8U3VwcG9ydGVkRG9jdW1lbnRlbkFwaUZlYXR1cmVzPiA9XG4gICAgdGhpcy52YWx0aW1vTW9kYWxTZXJ2aWNlLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZG9jdW1lbnREZWZpbml0aW9uTmFtZSA9PlxuICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZS5nZXRTdXBwb3J0ZWRBcGlGZWF0dXJlcyhkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZmlsZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlUYWdTZXJ2aWNlOiBEb2N1bWVudGVuQXBpVGFnU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleWNsb2FrU2VydmljZTogS2V5Y2xvYWtTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdGltb01vZGFsU2VydmljZTogVmFsdGltb01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ZW5BcGlWZXJzaW9uU2VydmljZTogRG9jdW1lbnRlbkFwaVZlcnNpb25TZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuRmlsZVN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlbkRpc2FibGVkU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuRmlsZW5hbWVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Eb2N1bWVudERlZmluaXRpb25TdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fZmlsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9maWxlTmFtZUFuZEF1dGhvclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVkaXREaXNhYmxlZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbGFuZ3VhZ2VTZWxlY3RlZChldmVudDoge2l0ZW06IHtpZDogc3RyaW5nfX0pIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICB0YWFsOiBldmVudC5pdGVtLmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRhZ3NTZWxlY3RlZChldmVudDogQXJyYXk8TGlzdEl0ZW0+KSB7XG4gICAgdGhpcy50YWdGb3JtQ29udHJvbC5wYXRjaFZhbHVlKGV2ZW50LmZpbHRlcih0YWcgPT4gdGFnLnNlbGVjdGVkKS5tYXAodGFnID0+IHRhZy5pZCkpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoZXZlbnQ6IHtpZDogc3RyaW5nfSkge1xuICAgIGlmIChldmVudC5pZCkge1xuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICB2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmc6IGV2ZW50LmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXR1c1NlbGVjdGVkKGV2ZW50OiB7aWQ6IHN0cmluZ30pIHtcbiAgICBpZiAoZXZlbnQuaWQpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgc3RhdHVzOiBldmVudC5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbmZvcm1hdGllb2JqZWN0dHlwZVNlbGVjdGVkKGV2ZW50OiB7aWQ6IHN0cmluZ30pIHtcbiAgICBpZiAoZXZlbnQuaWQpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgaW5mb3JtYXRpZW9iamVjdHR5cGU6IGV2ZW50LmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZWZpbGxGb3JtKGZpbGUpIHtcbiAgICB0aGlzLnByZWZpbGxGaWxlbmFtZUFuZEF1dGhvcigpO1xuXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYmVzY2hyaWp2aW5nLFxuICAgICAgICB0YWFsLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICB2ZXJ0cm91d2VsaWpraGVpZGFhbmR1aWRpbmcsXG4gICAgICAgIG9udHZhbmdzdGRhdHVtLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW0sXG4gICAgICAgIHRyZWZ3b29yZGVuLFxuICAgICAgfSA9IGZpbGU7XG5cbiAgICAgIGlmICh2ZXJ6ZW5kZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgnc2VudCcpO1xuICAgICAgZWxzZSBpZiAob250dmFuZ3N0ZGF0dW0pIHRoaXMuYWRkaXRpb25hbERvY3VtZW50RGF0ZSQubmV4dCgncmVjZWl2ZWQnKTtcbiAgICAgIGVsc2UgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRTdGF0dXMgPSB0aGlzLmRlZmF1bHRWYWx1ZXMuc3RhdHVzO1xuICAgICAgY29uc3QgdmFsaWREZWZhdWx0U3RhdHVzID0gdGhpcy5TVEFUVVNFUy5pbmNsdWRlcyhkZWZhdWx0U3RhdHVzIGFzIERvY3VtZW50U3RhdHVzKSAmJiBkZWZhdWx0U3RhdHVzO1xuICAgICAgY29uc3QgdmFsaWRQcmVmaWxsU3RhdHVzID0gdGhpcy5TVEFUVVNFUy5pbmNsdWRlcyhzdGF0dXMpICYmIHN0YXR1cztcblxuICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBiZXNjaHJpanZpbmc6IGJlc2NocmlqdmluZyB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMuYmVzY2hyaWp2aW5nLFxuICAgICAgICB0YWFsOiB0YWFsIHx8IHRoaXMuZGVmYXVsdFZhbHVlcy50YWFsLFxuICAgICAgICBpbmZvcm1hdGllb2JqZWN0dHlwZTogaW5mb3JtYXRpZW9iamVjdHR5cGUgfHwgdGhpcy5kZWZhdWx0VmFsdWVzLmluZm9ybWF0aWVvYmplY3R0eXBlLFxuICAgICAgICBzdGF0dXM6IHZhbGlkUHJlZmlsbFN0YXR1cyB8fCB2YWxpZERlZmF1bHRTdGF0dXMgfHwgbnVsbCxcbiAgICAgICAgdmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nOlxuICAgICAgICAgIHZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZyB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMudmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nLFxuICAgICAgICBvbnR2YW5nc3RkYXR1bTogb250dmFuZ3N0ZGF0dW0gPyBuZXcgRGF0ZShvbnR2YW5nc3RkYXR1bSkgOiBudWxsLFxuICAgICAgICB2ZXJ6ZW5kZGF0dW06IHZlcnplbmRkYXR1bSA/IG5ldyBEYXRlKHZlcnplbmRkYXR1bSkgOiBudWxsLFxuICAgICAgICB0cmVmd29vcmRlbjogdHJlZndvb3JkZW4gfHwgdGhpcy5kZWZhdWx0VmFsdWVzLnRyZWZ3b29yZGVuLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXREYXRlKCdjcmVhdGllZGF0dW0nKTtcbiAgICB0aGlzLmZvcm1hdERhdGUoJ3ZlcnplbmRkYXR1bScpO1xuICAgIHRoaXMuZm9ybWF0RGF0ZSgnb250dmFuZ3N0ZGF0dW0nKTtcblxuICAgIGNvbnN0IHJhd1ZhbHVlID0gdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgbWFwcGVkUmF3VmFsdWUgPSBPYmplY3Qua2V5cyhyYXdWYWx1ZSkucmVkdWNlKFxuICAgICAgKGFjYywgY3VycmVudEtleSkgPT5cbiAgICAgICAgcmF3VmFsdWVbY3VycmVudEtleV0gIT09IHVuZGVmaW5lZCA/IHsuLi5hY2MsIFtjdXJyZW50S2V5XTogcmF3VmFsdWVbY3VycmVudEtleV19IDogYWNjLFxuICAgICAge31cbiAgICApIGFzIERvY3VtZW50ZW5BcGlNZXRhZGF0YTtcblxuICAgIGlmICh0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0udmFsaWQpIHRoaXMubWV0YWRhdGEuZW1pdChtYXBwZWRSYXdWYWx1ZSk7XG5cbiAgICB0aGlzLmNsb3NlTW9kYWwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmNsb3NlTW9kYWwoKCkgPT4ge1xuICAgICAgdGhpcy5hZGRpdGlvbmFsRG9jdW1lbnREYXRlJC5uZXh0KCduZWl0aGVyJyk7XG4gICAgICB0aGlzLm1vZGFsQ2xvc2UuZW1pdCgpO1xuICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVmaWxsRmlsZW5hbWVBbmRBdXRob3IoKSB7XG4gICAgdGhpcy5fZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fZmlsZU5hbWVBbmRBdXRob3JTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbGUkLCB0aGlzLnVzZXJFbWFpbCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoW2ZpbGUsIHVzZXJFbWFpbF0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGZpbGU/LmJlc3RhbmRzbmFhbSB8fCB0aGlzLmRlZmF1bHRWYWx1ZXMuYmVzdGFuZHNuYWFtIHx8IGZpbGU/Lm5hbWU7XG4gICAgICAgICAgdGhpcy5maWxlbmFtZUV4dGVuc2lvbiA9IGZpbGVuYW1lPy5zcGxpdCgnLicpPy5wb3AoKSB8fCAnJztcbiAgICAgICAgICBpZiAodGhpcy5maWxlbmFtZUV4dGVuc2lvbi5sZW5ndGggPT09IGZpbGVuYW1lPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZW5hbWVFeHRlbnNpb24gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kb2N1bWVudGVuQXBpTWV0YWRhdGFGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiBmaWxlbmFtZSxcbiAgICAgICAgICAgIGF1dGV1cjogZmlsZT8uYXV0ZXVyIHx8IHRoaXMuZGVmYXVsdFZhbHVlcy5hdXRldXIgfHwgdXNlckVtYWlsLFxuICAgICAgICAgICAgY3JlYXRpZWRhdHVtOiBmaWxlPy5jcmVhdGllZGF0dW0gfHwgbmV3IERhdGUoRGF0ZS5ub3coKSksXG4gICAgICAgICAgICB0aXRlbDpcbiAgICAgICAgICAgICAgZmlsZT8udGl0ZWwgfHxcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzLnRpdGVsIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsZW5hbWVUb1RpdGxlKGZpbGU/Lm5hbWUgfHwgdGhpcy5kZWZhdWx0VmFsdWVzLmJlc3RhbmRzbmFhbSksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHRoaXMuYXJlQWxsRmllbGRzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsZW5hbWVUb1RpdGxlKGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKCFmaWxlbmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKTtcbiAgICByZXR1cm4gZmlsZW5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaWxlbmFtZS5zbGljZSgxKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShjb250cm9sTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgW2NvbnRyb2xOYW1lXTogdGhpcy50b0Zvcm1hdHRlZERhdGUoY29udHJvbC52YWx1ZSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvRm9ybWF0dGVkRGF0ZShkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGlmICh0aGlzLmZpbGUkKSB7XG4gICAgICB0aGlzLl9maWxlU3Vic2NyaXB0aW9uID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZmlsZSQsXG4gICAgICAgIHRoaXMuX3N1cHBvcnRlZERvY3VtZW50ZW5BcGlGZWF0dXJlcyQsXG4gICAgICBdKS5zdWJzY3JpYmUoKFtmaWxlLCBzdXBwb3J0XSkgPT4ge1xuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgIHRoaXMucHJlZmlsbEZvcm0oZmlsZSk7XG4gICAgICAgICAgdGhpcy5lZGl0RGlzYWJsZWQkLm5leHQoXG4gICAgICAgICAgICAhc3VwcG9ydC5zdXBwb3J0c1VwZGF0aW5nRGVmaW5pdGl2ZURvY3VtZW50ICYmXG4gICAgICAgICAgICAgIGZpbGUuc3RhdHVzID09PSAnZGVmaW5pdGllZicgJiZcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRNb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9wZW5EaXNhYmxlZFN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGlzYWJsZWQkPy5zdWJzY3JpYmUoZGlzYWJsZWQgPT4ge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm0uZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRmlsZW5hbWVTdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmJlc3RhbmRzbmFhbS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGJlc3RhbmRzbmFhbSA9PiB7XG4gICAgICAgIGlmIChiZXN0YW5kc25hYW0gJiYgdGhpcy5maWxlbmFtZUV4dGVuc2lvbikge1xuICAgICAgICAgIGxldCBjb3JyZWN0QmVzdGFuZHNuYWFtID1cbiAgICAgICAgICAgIGJlc3RhbmRzbmFhbS5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpICsgJy4nICsgdGhpcy5maWxlbmFtZUV4dGVuc2lvbjtcbiAgICAgICAgICBpZiAoY29ycmVjdEJlc3RhbmRzbmFhbSAhPSBiZXN0YW5kc25hYW0pIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgYmVzdGFuZHNuYWFtOiBjb3JyZWN0QmVzdGFuZHNuYWFtLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Eb2N1bWVudERlZmluaXRpb25TdWJzY3JpcHRpb24oKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnJvdXRlPy5wYXJhbXMgfHwgb2YobnVsbCksIHRoaXMucm91dGU/LmZpcnN0Q2hpbGQ/LnBhcmFtcyB8fCBvZihudWxsKV0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcChcbiAgICAgICAgICAgIChbcGFyYW1zLCBmaXJzdENoaWxkUGFyYW1zXSkgPT5cbiAgICAgICAgICAgICAgKHBhcmFtcz8uZG9jdW1lbnREZWZpbml0aW9uTmFtZSB8fCBmaXJzdENoaWxkUGFyYW1zPy5kb2N1bWVudERlZmluaXRpb25OYW1lKSBhcyBzdHJpbmdcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpbHRlcihkb2N1bWVudERlZmluaXRpb25OYW1lID0+ICEhZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT5cbiAgICAgICAgICB0aGlzLnZhbHRpbW9Nb2RhbFNlcnZpY2Uuc2V0RG9jdW1lbnREZWZpbml0aW9uTmFtZShkb2N1bWVudERlZmluaXRpb25OYW1lKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWRkaXRpb25hbERhdGUodmFsdWU6IEFkZGl0aW9uYWxEb2N1bWVudERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLmFkZGl0aW9uYWxEb2N1bWVudERhdGUkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVBbGxGaWVsZHNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnYWFudnVsbGVuZGVEYXR1bScpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2F1dGV1cicpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ3ZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZycpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2NyZWF0aWVkYXR1bScpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ2Jlc2NocmlqdmluZycpICYmXG4gICAgICB0aGlzLmhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RpdGVsJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnaW5mb3JtYXRpZW9iamVjdHR5cGUnKSAmJlxuICAgICAgdGhpcy5oaWRlRmllbGRzLmluY2x1ZGVzKCdiZXN0YW5kc25hYW0nKSAmJlxuICAgICAgdGhpcy5oaWRlRmllbGRzLmluY2x1ZGVzKCd0YWFsJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygnc3RhdHVzJykgJiZcbiAgICAgIHRoaXMuaGlkZUZpZWxkcy5pbmNsdWRlcygndHJlZndvb3JkZW4nKVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPHYtbW9kYWxcbiAgI21ldGFkYXRhTW9kYWxcbiAgKm5nSWY9XCJ7XG4gICAgZmlsZTogZmlsZSQgfCBhc3luYyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQkIHwgYXN5bmMsXG4gICAgZWRpdERpc2FibGVkOiBlZGl0RGlzYWJsZWQkIHwgYXN5bmMsXG4gICAgbGFuZ3VhZ2VJdGVtczogbGFuZ3VhZ2VJdGVtcyQgfCBhc3luYyxcbiAgICBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zOiBjb25maWRlbnRpYWxpdHlMZXZlbEl0ZW1zJCB8IGFzeW5jLFxuICAgIGRvY3VtZW50VHlwZUl0ZW1zOiBkb2N1bWVudFR5cGVJdGVtcyQgfCBhc3luYyxcbiAgICBzdGF0dXNJdGVtczogc3RhdHVzSXRlbXMkIHwgYXN5bmMsXG4gICAgdGFnSXRlbXM6IHRhZ0l0ZW1zJCB8IGFzeW5jLFxuICAgIHVzZXJFbWFpbDogdXNlckVtYWlsJCB8IGFzeW5jLFxuICAgIG9wZW46IG9wZW4kIHwgYXN5bmMsXG4gICAgYWRkaXRpb25hbERhdGU6IGFkZGl0aW9uYWxEb2N1bWVudERhdGUkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbiAgW21heFdpZHRoUHhdPVwiMTI4MFwiXG4gIChjbG9zZUV2ZW50KT1cImNsb3NlTW9kYWwoKVwiXG4gIFtjZHNMYXllcl09XCIxXCJcbj5cbiAgPGRpdiByb2xlPVwiaGVhZGVyXCI+XG4gICAgQGlmIChpc0VkaXRNb2RlKSB7XG4gICAgICA8aDMgY2RzTW9kYWxIZWFkZXJIZWFkaW5nPlxuICAgICAgICB7eyAnZG9jdW1lbnQuZWRpdE1ldGFkYXRhJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9oMz5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxoMyBjZHNNb2RhbEhlYWRlckhlYWRpbmc+XG4gICAgICAgIHt7ICdkb2N1bWVudC5maWxsSW5NZXRhZGF0YScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaDM+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8ZGl2IHJvbGU9XCJjb250ZW50XCI+XG4gICAgQGlmIChvYnMub3Blbikge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1ldGFkYXRhRm9ybTsgY29udGV4dDoge29iczogb2JzfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPGRpdiByb2xlPVwiZm9vdGVyXCIgY2xhc3M9XCJtZXRhZGF0YS1tb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNkc0J1dHRvbj1cImdob3N0XCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIj5cbiAgICAgIHt7ICdkb2N1bWVudC5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZHNCdXR0b249XCJwcmltYXJ5XCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAhZG9jdW1lbnRlbkFwaU1ldGFkYXRhRm9ybS52YWxpZCB8fCBvYnMuZWRpdERpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgID5cbiAgICAgIHt7ICdkb2N1bWVudC5zYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdi1tb2RhbD5cblxuPG5nLXRlbXBsYXRlICNtZXRhZGF0YUZvcm0gbGV0LW9icz1cIm9ic1wiPlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImRvY3VtZW50ZW5BcGlNZXRhZGF0YUZvcm1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtbnMtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGF0YS1mb3JtLWNvbHVtblwiPlxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdiZXN0YW5kc25hYW0nKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbCBjbGFzcz1cImRvY3VtZW50ZW4tbWV0YWRhLWZvcm0taW5wdXRcIj5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5maWxlbmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5maWxlbmFtZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlZmF1bHRWYWx1ZXMuYmVzdGFuZHNuYWFtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5maWxlbmFtZVBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBpZD1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJlc3RhbmRzbmFhbVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnYXV0ZXVyJykpIHtcbiAgICAgICAgICA8Y2RzLXRleHQtbGFiZWwgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuYXV0aG9yJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmF1dGhvclRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImRlZmF1bHRWYWx1ZXMuYXV0ZXVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5hdXRob3JQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgaWQ9XCJhdXRldXJcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRldXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RhYWwnKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5sYW5ndWFnZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxjZHMtdG9vbHRpcFxuICAgICAgICAgICAgICBbaXNPcGVuXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidkb2N1bWVudC5sYW5ndWFnZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkIHx8IChsYW5ndWFnZURpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQubGFuZ3VhZ2VQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cImxhbmd1YWdlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImxhbmd1YWdlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLmxhbmd1YWdlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygndmVydHJvdXdlbGlqa2hlaWRhYW5kdWlkaW5nJykpIHtcbiAgICAgICAgICA8Y2RzLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmNvbmZpZGVudGlhbGl0eUxldmVsVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1jb21iby1ib3hcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5jb25maWRlbnRpYWxpdHlQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBpZD1cInZlcnRyb3V3ZWxpamtoZWlkYWFuZHVpZGluZ1wiXG4gICAgICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgKGNvbmZpZGVudGlhbGl0eUxldmVsRGlzYWJsZWQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImNvbmZpZGVudGlhbGl0eUxldmVsU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGVhcik9XCJjb25maWRlbnRpYWxpdHlMZXZlbEZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuY29uZmlkZW50aWFsaXR5TGV2ZWxJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1jb21iby1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnaW5mb3JtYXRpZW9iamVjdHR5cGUnKSkge1xuICAgICAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5mb3JtYXRpZW9iamVjdHR5cGVUb29sdGlwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthbGlnbl09XCInYm90dG9tLWxlZnQnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWNvbWJvLWJveFxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmluZm9ybWF0aWVvYmplY3R0eXBlUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9icy5kaXNhYmxlZCB8fCAoaW5mb3JtYXRpZW9iamVjdHR5cGVEaXNhYmxlZCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICBpZD1cImluZm9ybWF0aWVvYmplY3R0eXBlXCJcbiAgICAgICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImluZm9ybWF0aWVvYmplY3R0eXBlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGVhcik9XCJpbmZvcm1hdGllb2JqZWN0dHlwZUZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMuZG9jdW1lbnRUeXBlSXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICAgICAgPC9jZHMtY29tYm8tYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ2FhbnZ1bGxlbmRlRGF0dW0nKSkge1xuICAgICAgICAgIDxjZHMtdGV4dC1sYWJlbCBuYW1lPVwiJ2FkZGl0aW9uYWxEYXRlJ1wiPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LmFkZGl0aW9uYWxEYXRlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbS1sZWZ0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1oZWxwLWNpcmNsZS1vdXRsaW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9jZHMtdG9vbHRpcD5cbiAgICAgICAgICA8L2Nkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgIDxjZHMtcmFkaW8tZ3JvdXAgW29yaWVudGF0aW9uXT1cIidob3Jpem9udGFsJ1wiIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1yYWRpb1xuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIEFERElUT05BTF9ET0NVTUVOVF9EQVRFX09QVElPTlNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwib2JzLmFkZGl0aW9uYWxEYXRlID09PSBvcHRpb24udmFsdWVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZXRBZGRpdGlvbmFsRGF0ZShvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgbmFtZT1cInJhZGlvLWlubGluZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi50cmFuc2xhdGlvbktleSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9jZHMtcmFkaW8+XG4gICAgICAgICAgPC9jZHMtcmFkaW8tZ3JvdXA+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzdXBwb3J0c1RyZWZ3b29yZGVuICYmICFoaWRlRmllbGRzLmluY2x1ZGVzKCd0cmVmd29vcmRlbicpKSB7XG4gICAgICAgICAgPGNkcy10ZXh0LWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LnRhZ3MnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQudGFnc1Rvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20tbGVmdCdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgPC9jZHMtdGV4dC1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgPGNkcy1jb21iby1ib3hcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ211bHRpJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZG9jdW1lbnQudGFnc1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgb2JzLnRhZ0l0ZW1zPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwidGFnc1NlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwib2JzLnRhZ0l0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgICAgIDwvY2RzLWNvbWJvLWJveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYXRhLWZvcm0tY29sdW1uXCI+XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ3RpdGVsJykpIHtcbiAgICAgICAgICA8Y2RzLXRleHQtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuaW5wdXRUaXRsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LmlucHV0VGl0bGVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGNkc1RleHRcbiAgICAgICAgICAgICAgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgaWQ9XCJ0aXRlbFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGVsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5wdXRUaXRsZVRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLXRleHQtbGFiZWw+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnYmVzY2hyaWp2aW5nJykpIHtcbiAgICAgICAgICA8Y2RzLXRleHRhcmVhLWxhYmVsPlxuICAgICAgICAgICAge3sgJ2RvY3VtZW50LmlucHV0RGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidkb2N1bWVudC5pbnB1dERlc2NyaXB0aW9uUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3Jvd3NdPVwiNVwiXG4gICAgICAgICAgICAgIGNkc1RleHRBcmVhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1kZXNjcmlwdGlvbi1pbnB1dCBkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCJcbiAgICAgICAgICAgICAgaWQ9XCJiZXNjaHJpanZpbmdcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiZXNjaHJpanZpbmdcIlxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuaW5wdXREZXNjcmlwdGlvblRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLXRleHRhcmVhLWxhYmVsPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWhpZGVGaWVsZHMuaW5jbHVkZXMoJ2NyZWF0aWVkYXR1bScpKSB7XG4gICAgICAgICAgPGNkcy1sYWJlbD5cbiAgICAgICAgICAgIHt7ICdkb2N1bWVudC5jcmVhdGlvbkRhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8Y2RzLXRvb2x0aXBcbiAgICAgICAgICAgICAgW2lzT3Blbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCInZG9jdW1lbnQuY3JlYXRpb25EYXRlVG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbYWxpZ25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktaGVscC1jaXJjbGUtb3V0bGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvY2RzLXRvb2x0aXA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jdW1lbnRlbi1tZXRhZGEtZm9ybS1pbnB1dFwiPlxuICAgICAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICAgICAgICAgaWQ9XCJjcmVhdGllZGF0dW1cIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNyZWF0aWVkYXR1bVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9jZHMtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nkcy1sYWJlbD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFoaWRlRmllbGRzLmluY2x1ZGVzKCdzdGF0dXMnKSkge1xuICAgICAgICAgIDxjZHMtbGFiZWw+XG4gICAgICAgICAgICB7eyAnZG9jdW1lbnQuc3RhdHVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGNkcy10b29sdGlwXG4gICAgICAgICAgICAgIFtpc09wZW5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ2RvY3VtZW50LnN0YXR1c1Rvb2x0aXAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2FsaWduXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWhlbHAtY2lyY2xlLW91dGxpbmVcIj48L2k+XG4gICAgICAgICAgICA8L2Nkcy10b29sdGlwPlxuICAgICAgICAgIDwvY2RzLWxhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudGVuLW1ldGFkYS1mb3JtLWlucHV0XCI+XG4gICAgICAgICAgICA8Y2RzLWNvbWJvLWJveFxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2RvY3VtZW50LnN0YXR1c1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgKHN0YXR1c0Rpc2FibGVkJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgIGlkPVwic3RhdHVzXCJcbiAgICAgICAgICAgICAgW2FwcGVuZElubGluZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cInN0YXR1c1NlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xlYXIpPVwic3RhdHVzRm9ybUNvbnRyb2wuc2V0VmFsdWUobnVsbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIm9icy5zdGF0dXNJdGVtcyB8fCBbXVwiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gICAgICAgICAgICA8L2Nkcy1jb21iby1ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghaGlkZUZpZWxkcy5pbmNsdWRlcygnYWFudnVsbGVuZGVEYXR1bScpKSB7XG4gICAgICAgICAgPGNkcy1kYXRlLXBpY2tlclxuICAgICAgICAgICAgKm5nSWY9XCJvYnMuYWRkaXRpb25hbERhdGUgPT09ICdyZWNlaXZlZCdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidkb2N1bWVudC5hZGRpdGlvbmFsRGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidERC1NTS1ZWVlZJ1wiXG4gICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZC1tLVknXCJcbiAgICAgICAgICAgIGlkPVwib250dmFuZ3N0ZGF0dW1cIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib250dmFuZ3N0ZGF0dW1cIlxuICAgICAgICAgID48L2Nkcy1kYXRlLXBpY2tlcj5cbiAgICAgICAgICA8Y2RzLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAqbmdJZj1cIm9icy5hZGRpdGlvbmFsRGF0ZSA9PT0gJ3NlbnQnXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInZG9jdW1lbnQuYWRkaXRpb25hbERhdGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInREQtTU0tWVlZWSdcIlxuICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2QtbS1ZJ1wiXG4gICAgICAgICAgICBpZD1cInZlcnplbmRkYXR1bVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2ZXJ6ZW5kZGF0dW1cIlxuICAgICAgICAgID48L2Nkcy1kYXRlLXBpY2tlcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=