@eqproject/eqp-dynamic-module 2.8.33 → 2.8.34

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.
@@ -226,10 +226,10 @@ export class DynamicModuleFieldFixComponent {
226
226
  }
227
227
  }
228
228
  DynamicModuleFieldFixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, deps: [{ token: i1.MatDialog }, { token: i2.UtilityHelperService }], target: i0.ɵɵFactoryTarget.Component });
229
- DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n <dbgetter \r\n [hidden]=\"!field.InListView\" \r\n class=\"flex\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue"] }] });
229
+ DynamicModuleFieldFixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DynamicModuleFieldFixComponent, selector: "dynamic-module-field-fix", inputs: { configurations: "configurations", endPointConfiguration: "endPointConfiguration", field: "field", form: "form", record: "record", inConfig: "inConfig", userID: "userID", QueryEditorComponent: "QueryEditorComponent" }, outputs: { recordChange: "recordChange", out: "out" }, viewQueries: [{ propertyName: "dialogInnerFormRecord", first: true, predicate: ["dialogInnerFormRecord"], descendants: true, static: true }, { propertyName: "fieldTemplate", predicate: ["fieldTemplate"], descendants: true }, { propertyName: "listInnerFormRecords", predicate: ["listInnerFormRecords"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n class=\"dbgetter\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"], dependencies: [{ kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextFieldTemplateComponent, selector: "text-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i6.BooleanFieldTemplateComponent, selector: "boolean-field-template", inputs: ["field", "record"], outputs: ["recordChange"] }, { kind: "component", type: i7.DateFieldTemplateComponent, selector: "date-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i8.TextareaFieldTemplateComponent, selector: "textarea-field-template", inputs: ["field", "record"], outputs: ["recordChange"] }, { kind: "component", type: i9.NumericFieldTemplateComponent, selector: "numeric-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i10.ListValueFieldTemplateComponent, selector: "list-value-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i11.AttachmentFieldTemplateComponent, selector: "attachment-field-template", inputs: ["onlyImages", "field", "record", "inConfig"], outputs: ["recordChange", "onAttachmentsChange"] }, { kind: "component", type: i12.ImageFieldTemplateComponent, selector: "image-field-template", inputs: ["endPointConfiguration", "record", "field", "inConfig"], outputs: ["recordChange", "imageDraw"] }, { kind: "component", type: i13.ListFormRecordComponent, selector: "list-form-record", inputs: ["configurations", "endPointConfiguration", "formID", "form", "externalButtons"], outputs: ["onViewRecord", "onAddViewEditRecord", "onDeleteRecord", "onAfterDeleteRecord"] }, { kind: "component", type: i14.ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: ["record", "field", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i15.LabelFieldTemplateComponent, selector: "label-field-template", inputs: ["field", "record", "inConfig"], outputs: ["recordChange"] }, { kind: "component", type: i16.ImageWithMarkersFieldTemplateComponent, selector: "image-with-markers-field-template", inputs: ["endPointConfiguration", "record", "field", "inConfig"], outputs: ["recordChange", "imageMark"] }, { kind: "component", type: i17.DbgetterComponent, selector: "dbgetter", inputs: ["form", "field", "record", "inConfig", "DirectlyOpenTable", "QueryEditorComponent", "data"], outputs: ["out", "selectedValue"] }] });
230
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DynamicModuleFieldFixComponent, decorators: [{
231
231
  type: Component,
232
- args: [{ selector: 'dynamic-module-field-fix', template: "<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n</div>\r\n\r\n<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n <div class=\"col-12 mt-2\">\r\n <dbgetter \r\n [hidden]=\"!field.InListView\" \r\n class=\"flex\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}\n"] }]
232
+ args: [{ selector: 'dynamic-module-field-fix', template: "<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\"> \r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\"> \r\n \r\n <div class=\"row datagetter\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n <dbgetter \r\n class=\"dbgetter\"\r\n [hidden]=\"!field.InListView\" \r\n [form]=\"form\" \r\n [(record)]=\"record\" \r\n [field]=\"field\" \r\n [DirectlyOpenTable]=\"directlyOpenTable\" \r\n [QueryEditorComponent]=\"QueryEditorComponent\" \r\n [inConfig]=\"inConfig\" \r\n (out)=\"onExternalComponentOut($event)\" \r\n (selectedValue)=\"onSelectedValue($event)\">\r\n </dbgetter>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\"> \r\n \r\n <div class=\"row\" *ngIf=\"dmloaded\">\r\n <div class=\"col-12\">\r\n <ng-container [ngTemplateOutlet]=\"fieldsTemplate\" [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </text-field-template>\r\n\r\n <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </textarea-field-template>\r\n\r\n <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </boolean-field-template>\r\n\r\n <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </date-field-template>\r\n\r\n <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </numeric-field-template>\r\n\r\n <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </list-value-field-template>\r\n\r\n <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </attachment-field-template>\r\n\r\n <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageDraw)=\"onImageDraw($event)\">\r\n </image-field-template> \r\n\r\n <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\" [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\" (imageMark)=\"onImageMark($event)\">\r\n </image-with-markers-field-template> \r\n\r\n <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n >\r\n </image-field-selector-template>\r\n\r\n <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n </label-field-template>\r\n\r\n <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n </list-form-record>\r\n</ng-template>", styles: [".dbgetterfield{align-items:center;justify-content:flex-start;height:80px}.dbgetterfield span{margin-right:15px}.datagetter .col-12{position:relative}.datagetter .dbgetter{position:absolute;right:13px;top:6px}\n"] }]
233
233
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.UtilityHelperService }]; }, propDecorators: { configurations: [{
234
234
  type: Input
235
235
  }], endPointConfiguration: [{
@@ -260,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
260
260
  type: ViewChildren,
261
261
  args: ['listInnerFormRecords']
262
262
  }] } });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFhLGFBQWEsRUFBRSxrQkFBa0IsRUFBZSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV0RCxPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBS3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9qRSxNQUFNLE9BQU8sOEJBQThCO0lBcUN6QyxZQUNVLE1BQWlCLEVBQ2pCLG9CQUEwQztRQUQxQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFyQzNDLG1C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QUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFdkIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7OzRIQTVQUSw4QkFBOEI7Z0hBQTlCLDhCQUE4QiwrcEJDckIzQyxvaUtBd0ZjOzRGRG5FRCw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UsMEJBQTBCO21JQU0zQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxHQUFHO3NCQUFaLE1BQU07Z0JBbUIrQyxxQkFBcUI7c0JBQTFFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdyQixhQUFhO3NCQUEzQyxZQUFZO3VCQUFDLGVBQWU7Z0JBQ1Msb0JBQW9CO3NCQUF6RCxZQUFZO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0sIERhdGFHZXR0ZXJUeXBlRW51bSwgQW5zd2VyU3R5bGUsIERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0Rm9ybVJlY29yZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tcmVjb3Jkcy9saXN0LWZvcm0tcmVjb3JkL2xpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5BdHRhY2htZW50JztcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybTtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcblxyXG4gIGNvbmZpZ0xpc3Q6IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnKCk7XHJcbiAgRmllbGRUeXBlRW51bSA9IEZpZWxkVHlwZUVudW07XHJcbiAgRGF0YUdldHRlclR5cGVFbnVtID0gRGF0YUdldHRlclR5cGVFbnVtO1xyXG4gIERCR2V0dGVyVmFsdWU6IGFueSA9IG51bGw7XHJcbiAgREJHZXR0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBEQkdldHRlckV4YWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgREJHZXR0ZXJIYXZlUXVlc3Rpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlyZWN0bHlPcGVuVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkbWxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIGkgcmVjb3JkIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpb1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtOiBGb3JtO1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtUmVjb3JkOiBSZWNvcmQ7XHJcbiAgaW5kZXhJbm5lckZvcm1SZWNvcmQ6IG51bWJlcjtcclxuICBvbmx5Vmlld0lubmVyRm9ybVJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlY29yZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0lubmVyRm9ybVJlY29yZCcsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0lubmVyRm9ybVJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcImZpZWxkVGVtcGxhdGVcIikgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZHJlbignbGlzdElubmVyRm9ybVJlY29yZHMnKSBsaXN0SW5uZXJGb3JtUmVjb3JkczogUXVlcnlMaXN0PExpc3RGb3JtUmVjb3JkQ29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuXHJcbiAgdXBkYXRlRmllbGQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5maWVsZFRlbXBsYXRlICYmIHRoaXMuZmllbGRUZW1wbGF0ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZmllbGRUZW1wbGF0ZS5mb3JFYWNoKGYgPT4gZi51cGRhdGVGaWVsZCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJkeW5hbWljLW1vZHVsZS1maWVsZFwiLHRoaXMuZmllbGQpO1xyXG5cclxuICAgIHRoaXMuY29uZmlnTGlzdC52YWx1ZXMgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdXHJcbiAgICB0aGlzLmNvbmZpZ0xpc3Quc2hvd1RpdGxlID0gdHJ1ZTtcclxuICAgIHRoaXMuY29uZmlnTGlzdC5kZWZhdWx0TGlzdEFjdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nICE9IFwiXCIpe1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIgPSBKU09OLnBhcnNlKGF0b2IodGhpcy5maWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyICE9IG51bGwgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVsnRGEgbW9kdWxvIGRpbmFtaWNvJ10pe1xyXG4gICAgICB0aGlzLm1hbmFnZURNR2V0dGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB2YWxvcmUgZGkgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byByZWNvcmQuXHJcbiAgICogU2VydmUgYWQgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGkgdHV0dGkgaSBjYW1waSBjaGUgaGFubm8gdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgb25SZWNvcmRDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB1bmEgSW5uZXJGb3JtIGEgcGFydGlyZSBkYWwgRmllbGQgY2hlIGxhIHJhcHByZXNlbnRhLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBhIHBhcnRpcmUgZGFsIHF1YWxlIHNpIHZ1b2xlIHJlY3VwZXJhcmUgbGEgSW5uZXJGb3JtLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIG9nZ2V0dG8gZGkgdGlwbyBGb3JtLlxyXG4gICAqL1xyXG4gIGdldElubmVyRm9ybUZyb21GaWVsZChmaWVsZDogQmFzZUZpZWxkKTogRm9ybSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLklubmVyRm9ybXMgJiYgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChmID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoZiA9PiBmLk5hbWUgPT0gZmllbGQuTGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogTWV0b2RvIHBlciBhcHJpcmUgdW4gZGlhbG9nIGluIGN1aSBhZ2dpdW5nZXJlL21vZGlmaWNhcmUvdmlzdWFsaXp6YXJlIHVuIHJlY29yZCBhcHBhcnRlbmVudGVcclxuICogYSB1bmEgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAqIEBwYXJhbSByZWNvcmQgRXZlbnRvIGRpIG91dHB1dCBkZWwgY29tcG9uZW50ZSBsaXN0LWZvcm0tcmVjb3JkLCBjb250aWVuZSBpbCByZWNvcmQgc2VsZXppb25hdG8gZSB1biBib29sZW5vIGNoZSBpbmRpY2EgXHJcbiAqIHNlIGwndXRlbnRlIHZ1b2xlIG1vZGlmaWNhcmUgbyB2aXN1YWxpenphcmUgbCdlbGVtZW50byBzZWxlemlvbmF0by5cclxuICogQHBhcmFtIGlubmVyRm9ybSBDb250aWVuZSBsYSBGb3JtIGRpIGRldHRhZ2xpbyBkYWxsYSBxdWFsZSDDqCBzdGF0byByaWNoaWVzdG8gaWwgcmVjb3JkLlxyXG4gKi9cclxuICBvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkKHJlY29yZDogeyByZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4gfSwgZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IHRoaXMuZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkKTtcclxuICAgIGlmIChyZWNvcmQgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID0gbnVsbDtcclxuICAgICAgdGhpcy5vbmx5Vmlld0lubmVyRm9ybVJlY29yZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybVJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVjb3JkLnJlY29yZCkpO1xyXG4gICAgICB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID0gdGhpcy5yZWNvcmRbZmllbGQuTmFtZV0uaW5kZXhPZihyZWNvcmQpO1xyXG4gICAgICB0aGlzLm9ubHlWaWV3SW5uZXJGb3JtUmVjb3JkID0gcmVjb3JkLm9ubHlWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVjb3JkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybVJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzc1JSdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIHNhbHZhdGFnZ2lvIG8gYWxsYSBjaGl1c3VyYSBkZWwgZGlhbG9nIGRpIGFnZ2l1bnRhL21vZGlmaWNhL3Zpc3VhbGl6emF6aW9uZVxyXG4gICAqIGRpIHVuIHJlY29yZCBkaSB1bmEgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIHJlc3RpdHVpdG8gZGFsIGNvbXBvbmVudGUgYWRkLWZvcm0tZmllbGQgKHF1ZXN0byBxdWkpIGNvbnRlbmVudGUgaWwgUmVjb3JkIFxyXG4gICAqIGFnZ2lvcm5hdG8gZGFsbCd1dGVudGUuIFNlIG51bGwgYWxsb3JhIGwndXRlbnRlIG5vbiBoYSBtb2RpZmljYXRvIG51bGxhIGUgaGEgY2hpdXNvIGlsIGRpYWxvZy5cclxuICAgKi9cclxuICBvblNhdmVJbm5lckZvcm1SZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmIChyZWNvcmQgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBhcnJheU5hbWU6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0uTmFtZS5zcGxpdCgnICcpLmpvaW4oJ18nKTtcclxuICAgICAgaWYgKHRoaXMuaW5kZXhJbm5lckZvcm1SZWNvcmQgIT0gbnVsbCAmJiB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID49IDApIHtcclxuICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdW3RoaXMuaW5kZXhJbm5lckZvcm1SZWNvcmRdID0gcmVjb3JkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdLnB1c2gocmVjb3JkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dJbm5lckZvcm1SZWNvcmRSZWYuY2xvc2UoKTtcclxuXHJcbiAgICAvLyBSaWNhcmljbyBsYSB0YWJlbGxhIGRlaSByZWNvcmQgcGVyIHZpc3VhbGl6emFyZSBsZSBtb2RpZmljaGUgZmF0dGUgZGFsbCd1dGVudGUuXHJcbiAgICBpZiAodGhpcy5saXN0SW5uZXJGb3JtUmVjb3JkcyAmJiB0aGlzLmxpc3RJbm5lckZvcm1SZWNvcmRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saXN0SW5uZXJGb3JtUmVjb3Jkcy5mb3JFYWNoKGxpc3QgPT4ge1xyXG4gICAgICAgIGlmIChsaXN0ICYmIGxpc3QudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgICAgICBsaXN0LnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUGFzc28gbCdpbW1hZ2luZSBkaXNlZ25hdGEgYWwgbGl2ZWxsbyBzdXBlcmlvcmVcclxuICBvbkltYWdlRHJhdyhldmVudDogRHluQXR0YWNobWVudCl7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZXZlbnQ7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gICAgLy8gUGFzc28gbCdpbW1hZ2luZSBkaXNlZ25hdGEgYWwgbGl2ZWxsbyBzdXBlcmlvcmVcclxuICAgIG9uSW1hZ2VNYXJrKGV2ZW50OiBEeW5BdHRhY2htZW50KXtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGV2ZW50O1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0ZWRWYWx1ZSh2YWx1ZTogYW55KXtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuREJHZXR0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKHZhbHVlWzBdID09IFwiKioqKkNMT1NFKioqKlwiKXsgcmV0dXJuOyB9XHJcblxyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdmFsdWVbMF07XHJcbiAgICAgIHRoaXMuREJHZXR0ZXJWYWx1ZSA9IHZhbHVlWzBdO1xyXG4gICAgICB0aGlzLkRCR2V0dGVyRXhhY3QgPSB2YWx1ZVsxXTtcclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZSA9PSAnPycpICE9IG51bGwpeyB0aGlzLkRCR2V0dGVySGF2ZVF1ZXN0aW9ucyA9IHRydWU7IH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFuYWdlRE1HZXR0ZXIoKXtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJGb3JtQ29kZVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwibW9kZVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogMixcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnVzZXJJRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiT3JnYUlEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUNvZGVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChyZXMgPT0gbnVsbCB8fCByZXMuQW5zd2Vycy5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuZG1sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmFyIGFuc3dlcnMgPSByZXMuQW5zd2VycztcclxuXHJcbiAgICAgICAgICAvLyBGaWx0cm8gY29udGVzdHVhbGl6emF6aW9uZVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbnRlc3R1YWxpemF0aW9uICE9IG51bGwgJiYgXHJcbiAgICAgICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbi5lbnRpdHlETUFkZGl0aW9uYWxQYXJhbSAhPSBudWxsICYmIFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgIT0gbnVsbCAmJiBcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXN0dWFsaXphdGlvblBhcmFtID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbi5lbnRpdHlETUFkZGl0aW9uYWxQYXJhbTsgLy8gRXNlbXBpbzogJ0ZLX01lZGljYWxFeGFtaW5hdGlvbidcclxuICAgICAgICAgICAgdmFyIGNvbnRlc3R1YWxpemF0aW9uSWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXNbY29udGVzdHVhbGl6YXRpb25QYXJhbV0gIT0gbnVsbCA/IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1tjb250ZXN0dWFsaXphdGlvblBhcmFtXSA6IG51bGw7IC8vIEVzZW1waW86IDEzNTFcclxuICAgICAgICAgICAgaWYgKGNvbnRlc3R1YWxpemF0aW9uSWQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gRXNpc3RlIHNpYSBGS19NZWRpY2FsRXhhbWluYXRpb24gc2lhIDEzNTFcclxuICAgICAgICAgICAgICBhbnN3ZXJzID0gW107XHJcbiAgICAgICAgICAgICAgcmVzLkFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFuc3dlckFkZGl0aW9uYWxQYXJhbXMgPSBKU09OLnBhcnNlKHJlcy5BZGRpdGlvbmFsUGFyYW1zW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyQWRkaXRpb25hbFBhcmFtc1tjb250ZXN0dWFsaXphdGlvblBhcmFtXSA9PSBjb250ZXN0dWFsaXphdGlvbklkKXtcclxuICAgICAgICAgICAgICAgICAgYW5zd2Vycy5wdXNoKGFuc3dlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgIC8vIEZpbHRybyBjYXJkaW5hbGl0w6BcclxuXHJcbiAgICAgICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgICAgIGlmIChhbnN3ZXJzLmxlbmd0aCA9PSAxKXtcclxuICAgICAgICAgICAgYW5zd2VyID0gYW5zd2Vyc1swXS5BbnN3ZXI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ2FyZGluYWxpdHkgPT0gRGF0YUdldHRlckNhcmRpbmFsaXR5RW51bVsnUElVIFJFQ0VOVEUnXSl7XHJcbiAgICAgICAgICAgIGFuc3dlciA9IGFuc3dlcnNbMF0uQW5zd2VyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5zd2VyID0gYW5zd2Vyc1swXS5BbnN3ZXI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTm9uIGRvdnJlYmJlIHN1Y2NlZGVyZSwgbWEgc2Ugbm9uIHRyb3ZhIG5lYW5jaGUgdW5hIHJpc3Bvc3RhLCBhbGxvcmEgdXNjaWFtb1xyXG4gICAgICAgICAgaWYgKGFuc3dlciA9PSBudWxsKXsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgICAgdmFyIGFuc3dlck9iaiA9IEpTT04ucGFyc2UoYW5zd2VyKTtcclxuICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBhbnN3ZXJPYmpbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZV07XHJcbiAgICAgICAgICB0aGlzLmRtbG9hZGVkID0gdHJ1ZTsgICAgICAgICAgXHJcbiAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTsgICAgXHJcbiAgICB9ICAgIFxyXG4gICAgXHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydNYW51YWxlJ10gfHwgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0Zvcm11bGEnXVwiPiBcclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj4gXHJcbiAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTJcIj5cclxuICAgICAgICAgICAgPGRiZ2V0dGVyICBcclxuICAgICAgICAgICAgW2hpZGRlbl09XCIhZmllbGQuSW5MaXN0Vmlld1wiIFxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXhcIiBcclxuICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiIFxyXG4gICAgICAgICAgICBbKHJlY29yZCldPVwicmVjb3JkXCIgXHJcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiIFxyXG4gICAgICAgICAgICBbRGlyZWN0bHlPcGVuVGFibGVdPVwiZGlyZWN0bHlPcGVuVGFibGVcIiBcclxuICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgXHJcbiAgICAgICAgICAgIFtpbkNvbmZpZ109XCJpbkNvbmZpZ1wiIFxyXG4gICAgICAgICAgICAob3V0KT1cIm9uRXh0ZXJuYWxDb21wb25lbnRPdXQoJGV2ZW50KVwiIFxyXG4gICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJvblNlbGVjdGVkVmFsdWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2RiZ2V0dGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXVwiPiBcclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZG1sb2FkZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRzVGVtcGxhdGU+XHJcblxyXG4gICAgPHRleHQtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXVwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC90ZXh0LWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDx0ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydBcmVhIGRpIHRlc3RvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L3RleHRhcmVhLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxib29sZWFuLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0Jvb2xlYW5vJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2Jvb2xlYW4tZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGRhdGUtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRGF0YSBlL28gb3JhJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2RhdGUtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPG51bWVyaWMtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gbnVtZXJpY28nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8YXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydBbGxlZ2F0byddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8aW1hZ2UtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnSW1tYWdpbmUnXVwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2luQ29uZmlnXT1cImluQ29uZmlnXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIiAoaW1hZ2VEcmF3KT1cIm9uSW1hZ2VEcmF3KCRldmVudClcIj5cclxuICAgIDwvaW1hZ2UtZmllbGQtdGVtcGxhdGU+IFxyXG5cclxuICAgIDxpbWFnZS13aXRoLW1hcmtlcnMtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnSW1tYWdpbmUgY29uIG1hcmtlcnMnXVwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2luQ29uZmlnXT1cImluQ29uZmlnXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIiAoaW1hZ2VNYXJrKT1cIm9uSW1hZ2VNYXJrKCRldmVudClcIj5cclxuICAgIDwvaW1hZ2Utd2l0aC1tYXJrZXJzLWZpZWxkLXRlbXBsYXRlPiBcclxuXHJcbiAgICA8aW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ11cIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCJcclxuICAgID5cclxuICAgIDwvaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGU+XHJcblxyXG4gICAgPGxhYmVsLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0V0aWNoZXR0YSddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9sYWJlbC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tIEZPUk0gREkgREVUVEFHTElPIChMQVNDSUFSRSBJTiBGT05ETykgLS0+XHJcbiAgICA8bGlzdC1mb3JtLXJlY29yZCAjbGlzdElubmVyRm9ybVJlY29yZHMgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRm9ybSBkaSBkZXR0YWdsaW8nXVwiXHJcbiAgICAgICAgW2Zvcm1dPVwiZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkKVwiIFtjb25maWd1cmF0aW9uc109XCJjb25maWdMaXN0XCJcclxuICAgICAgICAob25BZGRWaWV3RWRpdFJlY29yZCk9XCJvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkKCRldmVudCwgZmllbGQpXCI+XHJcbiAgICA8L2xpc3QtZm9ybS1yZWNvcmQ+XHJcbjwvbmctdGVtcGxhdGU+Il19
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQTBCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHaEksT0FBTyxFQUFhLGFBQWEsRUFBRSxrQkFBa0IsRUFBZSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV0RCxPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBS3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9qRSxNQUFNLE9BQU8sOEJBQThCO0lBcUN6QyxZQUNVLE1BQWlCLEVBQ2pCLG9CQUEwQztRQUQxQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFyQzNDLG1C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QUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFdkIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7OzRIQTVQUSw4QkFBOEI7Z0hBQTlCLDhCQUE4QiwrcEJDckIzQyx1bEtBc0ZjOzRGRGpFRCw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0UsMEJBQTBCO21JQU0zQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxHQUFHO3NCQUFaLE1BQU07Z0JBbUIrQyxxQkFBcUI7c0JBQTFFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdyQixhQUFhO3NCQUEzQyxZQUFZO3VCQUFDLGVBQWU7Z0JBQ1Msb0JBQW9CO3NCQUF6RCxZQUFZO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0sIERhdGFHZXR0ZXJUeXBlRW51bSwgQW5zd2VyU3R5bGUsIERhdGFHZXR0ZXJDYXJkaW5hbGl0eUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0Rm9ybVJlY29yZENvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tcmVjb3Jkcy9saXN0LWZvcm0tcmVjb3JkL2xpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5BdHRhY2htZW50JztcclxuaW1wb3J0IHsgRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGEsIGV2ZW50T3V0IH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIElCYXNlRmllbGRDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBCYXNlRmllbGQ7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybTtcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxldmVudE91dD4oKTtcclxuXHJcblxyXG4gIGNvbmZpZ0xpc3Q6IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnID0gbmV3IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnKCk7XHJcbiAgRmllbGRUeXBlRW51bSA9IEZpZWxkVHlwZUVudW07XHJcbiAgRGF0YUdldHRlclR5cGVFbnVtID0gRGF0YUdldHRlclR5cGVFbnVtO1xyXG4gIERCR2V0dGVyVmFsdWU6IGFueSA9IG51bGw7XHJcbiAgREJHZXR0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBEQkdldHRlckV4YWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgREJHZXR0ZXJIYXZlUXVlc3Rpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlyZWN0bHlPcGVuVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkbWxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyNyZWdpb24gUHJvcHJpZXTDoCBwZXIgYWdnaXVuZ2VyZS9tb2RpZmljYXJlIGkgcmVjb3JkIGRpIHVuYSBmb3JtIGRpIGRldHRhZ2xpb1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtOiBGb3JtO1xyXG4gIHNlbGVjdGVkSW5uZXJGb3JtUmVjb3JkOiBSZWNvcmQ7XHJcbiAgaW5kZXhJbm5lckZvcm1SZWNvcmQ6IG51bWJlcjtcclxuICBvbmx5Vmlld0lubmVyRm9ybVJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpYWxvZ0lubmVyRm9ybVJlY29yZFJlZjogTWF0RGlhbG9nUmVmPFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0lubmVyRm9ybVJlY29yZCcsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0lubmVyRm9ybVJlY29yZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcImZpZWxkVGVtcGxhdGVcIikgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcbiAgQFZpZXdDaGlsZHJlbignbGlzdElubmVyRm9ybVJlY29yZHMnKSBsaXN0SW5uZXJGb3JtUmVjb3JkczogUXVlcnlMaXN0PExpc3RGb3JtUmVjb3JkQ29tcG9uZW50PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuXHJcbiAgdXBkYXRlRmllbGQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5maWVsZFRlbXBsYXRlICYmIHRoaXMuZmllbGRUZW1wbGF0ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZmllbGRUZW1wbGF0ZS5mb3JFYWNoKGYgPT4gZi51cGRhdGVGaWVsZCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJkeW5hbWljLW1vZHVsZS1maWVsZFwiLHRoaXMuZmllbGQpO1xyXG5cclxuICAgIHRoaXMuY29uZmlnTGlzdC52YWx1ZXMgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdXHJcbiAgICB0aGlzLmNvbmZpZ0xpc3Quc2hvd1RpdGxlID0gdHJ1ZTtcclxuICAgIHRoaXMuY29uZmlnTGlzdC5kZWZhdWx0TGlzdEFjdGlvbnMgPSBuZXcgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQoKVxyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBudWxsICYmIHRoaXMuZmllbGQuRGF0YUdldHRlclZhbHVlQmFzZTY0U3RyaW5nICE9IFwiXCIpe1xyXG4gICAgICB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIgPSBKU09OLnBhcnNlKGF0b2IodGhpcy5maWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyICE9IG51bGwgJiYgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bVsnRGEgbW9kdWxvIGRpbmFtaWNvJ10pe1xyXG4gICAgICB0aGlzLm1hbmFnZURNR2V0dGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB2YWxvcmUgZGkgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byByZWNvcmQuXHJcbiAgICogU2VydmUgYWQgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGkgdHV0dGkgaSBjYW1waSBjaGUgaGFubm8gdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgb25SZWNvcmRDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB1bmEgSW5uZXJGb3JtIGEgcGFydGlyZSBkYWwgRmllbGQgY2hlIGxhIHJhcHByZXNlbnRhLlxyXG4gICAqIEBwYXJhbSBmaWVsZCBDYW1wbyBhIHBhcnRpcmUgZGFsIHF1YWxlIHNpIHZ1b2xlIHJlY3VwZXJhcmUgbGEgSW5uZXJGb3JtLlxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIG9nZ2V0dG8gZGkgdGlwbyBGb3JtLlxyXG4gICAqL1xyXG4gIGdldElubmVyRm9ybUZyb21GaWVsZChmaWVsZDogQmFzZUZpZWxkKTogRm9ybSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLklubmVyRm9ybXMgJiYgdGhpcy5mb3JtLklubmVyRm9ybXMuZmluZChmID0+IGYuTmFtZSA9PSBmaWVsZC5MYWJlbCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZpbmQoZiA9PiBmLk5hbWUgPT0gZmllbGQuTGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogTWV0b2RvIHBlciBhcHJpcmUgdW4gZGlhbG9nIGluIGN1aSBhZ2dpdW5nZXJlL21vZGlmaWNhcmUvdmlzdWFsaXp6YXJlIHVuIHJlY29yZCBhcHBhcnRlbmVudGVcclxuICogYSB1bmEgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAqIEBwYXJhbSByZWNvcmQgRXZlbnRvIGRpIG91dHB1dCBkZWwgY29tcG9uZW50ZSBsaXN0LWZvcm0tcmVjb3JkLCBjb250aWVuZSBpbCByZWNvcmQgc2VsZXppb25hdG8gZSB1biBib29sZW5vIGNoZSBpbmRpY2EgXHJcbiAqIHNlIGwndXRlbnRlIHZ1b2xlIG1vZGlmaWNhcmUgbyB2aXN1YWxpenphcmUgbCdlbGVtZW50byBzZWxlemlvbmF0by5cclxuICogQHBhcmFtIGlubmVyRm9ybSBDb250aWVuZSBsYSBGb3JtIGRpIGRldHRhZ2xpbyBkYWxsYSBxdWFsZSDDqCBzdGF0byByaWNoaWVzdG8gaWwgcmVjb3JkLlxyXG4gKi9cclxuICBvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkKHJlY29yZDogeyByZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4gfSwgZmllbGQ6IEJhc2VGaWVsZCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybSA9IHRoaXMuZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkKTtcclxuICAgIGlmIChyZWNvcmQgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW5uZXJGb3JtUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID0gbnVsbDtcclxuICAgICAgdGhpcy5vbmx5Vmlld0lubmVyRm9ybVJlY29yZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElubmVyRm9ybVJlY29yZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVjb3JkLnJlY29yZCkpO1xyXG4gICAgICB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID0gdGhpcy5yZWNvcmRbZmllbGQuTmFtZV0uaW5kZXhPZihyZWNvcmQpO1xyXG4gICAgICB0aGlzLm9ubHlWaWV3SW5uZXJGb3JtUmVjb3JkID0gcmVjb3JkLm9ubHlWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlhbG9nSW5uZXJGb3JtUmVjb3JkUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0lubmVyRm9ybVJlY29yZCwge1xyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzc1JSdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIHNhbHZhdGFnZ2lvIG8gYWxsYSBjaGl1c3VyYSBkZWwgZGlhbG9nIGRpIGFnZ2l1bnRhL21vZGlmaWNhL3Zpc3VhbGl6emF6aW9uZVxyXG4gICAqIGRpIHVuIHJlY29yZCBkaSB1bmEgZm9ybSBkaSBkZXR0YWdsaW8uXHJcbiAgICogQHBhcmFtIHJlY29yZCBPZ2dldHRvIHJlc3RpdHVpdG8gZGFsIGNvbXBvbmVudGUgYWRkLWZvcm0tZmllbGQgKHF1ZXN0byBxdWkpIGNvbnRlbmVudGUgaWwgUmVjb3JkIFxyXG4gICAqIGFnZ2lvcm5hdG8gZGFsbCd1dGVudGUuIFNlIG51bGwgYWxsb3JhIGwndXRlbnRlIG5vbiBoYSBtb2RpZmljYXRvIG51bGxhIGUgaGEgY2hpdXNvIGlsIGRpYWxvZy5cclxuICAgKi9cclxuICBvblNhdmVJbm5lckZvcm1SZWNvcmQocmVjb3JkOiBSZWNvcmQpIHtcclxuICAgIGlmIChyZWNvcmQgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBhcnJheU5hbWU6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRJbm5lckZvcm0uTmFtZS5zcGxpdCgnICcpLmpvaW4oJ18nKTtcclxuICAgICAgaWYgKHRoaXMuaW5kZXhJbm5lckZvcm1SZWNvcmQgIT0gbnVsbCAmJiB0aGlzLmluZGV4SW5uZXJGb3JtUmVjb3JkID49IDApIHtcclxuICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdW3RoaXMuaW5kZXhJbm5lckZvcm1SZWNvcmRdID0gcmVjb3JkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdLnB1c2gocmVjb3JkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dJbm5lckZvcm1SZWNvcmRSZWYuY2xvc2UoKTtcclxuXHJcbiAgICAvLyBSaWNhcmljbyBsYSB0YWJlbGxhIGRlaSByZWNvcmQgcGVyIHZpc3VhbGl6emFyZSBsZSBtb2RpZmljaGUgZmF0dGUgZGFsbCd1dGVudGUuXHJcbiAgICBpZiAodGhpcy5saXN0SW5uZXJGb3JtUmVjb3JkcyAmJiB0aGlzLmxpc3RJbm5lckZvcm1SZWNvcmRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5saXN0SW5uZXJGb3JtUmVjb3Jkcy5mb3JFYWNoKGxpc3QgPT4ge1xyXG4gICAgICAgIGlmIChsaXN0ICYmIGxpc3QudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgICAgICBsaXN0LnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUGFzc28gbCdpbW1hZ2luZSBkaXNlZ25hdGEgYWwgbGl2ZWxsbyBzdXBlcmlvcmVcclxuICBvbkltYWdlRHJhdyhldmVudDogRHluQXR0YWNobWVudCl7XHJcbiAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gZXZlbnQ7XHJcbiAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICB9XHJcblxyXG4gICAgLy8gUGFzc28gbCdpbW1hZ2luZSBkaXNlZ25hdGEgYWwgbGl2ZWxsbyBzdXBlcmlvcmVcclxuICAgIG9uSW1hZ2VNYXJrKGV2ZW50OiBEeW5BdHRhY2htZW50KXtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGV2ZW50O1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkV4dGVybmFsQ29tcG9uZW50T3V0KGV2OiBldmVudE91dCl7XHJcbiAgICAgIHRoaXMub3V0LmVtaXQoZXYpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0ZWRWYWx1ZSh2YWx1ZTogYW55KXtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuREJHZXR0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKHZhbHVlWzBdID09IFwiKioqKkNMT1NFKioqKlwiKXsgcmV0dXJuOyB9XHJcblxyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdmFsdWVbMF07XHJcbiAgICAgIHRoaXMuREJHZXR0ZXJWYWx1ZSA9IHZhbHVlWzBdO1xyXG4gICAgICB0aGlzLkRCR2V0dGVyRXhhY3QgPSB2YWx1ZVsxXTtcclxuICAgICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWUub3BlbmVkRmllbGRzLmZpbmQoeCA9PiB4LlF1ZXJ5UHJvcGVydHlWYWx1ZSA9PSAnPycpICE9IG51bGwpeyB0aGlzLkRCR2V0dGVySGF2ZVF1ZXN0aW9ucyA9IHRydWU7IH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFuYWdlRE1HZXR0ZXIoKXtcclxuICAgICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgICAgbmV3IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4oKTtcclxuXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJGb3JtQ29kZVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZSxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwibW9kZVwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogMixcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnVzZXJJRCxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiT3JnYUlEXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUNvZGVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChyZXMgPT0gbnVsbCB8fCByZXMuQW5zd2Vycy5sZW5ndGggPT0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuZG1sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmFyIGFuc3dlcnMgPSByZXMuQW5zd2VycztcclxuXHJcbiAgICAgICAgICAvLyBGaWx0cm8gY29udGVzdHVhbGl6emF6aW9uZVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlckNvbnRlc3R1YWxpemF0aW9uICE9IG51bGwgJiYgXHJcbiAgICAgICAgICAgICAgdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbi5lbnRpdHlETUFkZGl0aW9uYWxQYXJhbSAhPSBudWxsICYmIFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgIT0gbnVsbCAmJiBcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIHZhciBjb250ZXN0dWFsaXphdGlvblBhcmFtID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb250ZXN0dWFsaXphdGlvbi5lbnRpdHlETUFkZGl0aW9uYWxQYXJhbTsgLy8gRXNlbXBpbzogJ0ZLX01lZGljYWxFeGFtaW5hdGlvbidcclxuICAgICAgICAgICAgdmFyIGNvbnRlc3R1YWxpemF0aW9uSWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXNbY29udGVzdHVhbGl6YXRpb25QYXJhbV0gIT0gbnVsbCA/IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtc1tjb250ZXN0dWFsaXphdGlvblBhcmFtXSA6IG51bGw7IC8vIEVzZW1waW86IDEzNTFcclxuICAgICAgICAgICAgaWYgKGNvbnRlc3R1YWxpemF0aW9uSWQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gRXNpc3RlIHNpYSBGS19NZWRpY2FsRXhhbWluYXRpb24gc2lhIDEzNTFcclxuICAgICAgICAgICAgICBhbnN3ZXJzID0gW107XHJcbiAgICAgICAgICAgICAgcmVzLkFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFuc3dlckFkZGl0aW9uYWxQYXJhbXMgPSBKU09OLnBhcnNlKHJlcy5BZGRpdGlvbmFsUGFyYW1zW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyQWRkaXRpb25hbFBhcmFtc1tjb250ZXN0dWFsaXphdGlvblBhcmFtXSA9PSBjb250ZXN0dWFsaXphdGlvbklkKXtcclxuICAgICAgICAgICAgICAgICAgYW5zd2Vycy5wdXNoKGFuc3dlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgIC8vIEZpbHRybyBjYXJkaW5hbGl0w6BcclxuXHJcbiAgICAgICAgICB2YXIgYW5zd2VyID0gbnVsbDtcclxuICAgICAgICAgIGlmIChhbnN3ZXJzLmxlbmd0aCA9PSAxKXtcclxuICAgICAgICAgICAgYW5zd2VyID0gYW5zd2Vyc1swXS5BbnN3ZXI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyQ2FyZGluYWxpdHkgPT0gRGF0YUdldHRlckNhcmRpbmFsaXR5RW51bVsnUElVIFJFQ0VOVEUnXSl7XHJcbiAgICAgICAgICAgIGFuc3dlciA9IGFuc3dlcnNbMF0uQW5zd2VyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYW5zd2VyID0gYW5zd2Vyc1swXS5BbnN3ZXI7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTm9uIGRvdnJlYmJlIHN1Y2NlZGVyZSwgbWEgc2Ugbm9uIHRyb3ZhIG5lYW5jaGUgdW5hIHJpc3Bvc3RhLCBhbGxvcmEgdXNjaWFtb1xyXG4gICAgICAgICAgaWYgKGFuc3dlciA9PSBudWxsKXsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgICAgdmFyIGFuc3dlck9iaiA9IEpTT04ucGFyc2UoYW5zd2VyKTtcclxuICAgICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBhbnN3ZXJPYmpbdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJDb2x1bW5Gb3JjZV07XHJcbiAgICAgICAgICB0aGlzLmRtbG9hZGVkID0gdHJ1ZTsgICAgICAgICAgXHJcbiAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7IH1cclxuICAgICAgKTsgICAgXHJcbiAgICB9ICAgIFxyXG4gICAgXHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydNYW51YWxlJ10gfHwgZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0Zvcm11bGEnXVwiPiBcclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW1bJ0RhIGRhdGFiYXNlJ11cIj4gXHJcbiAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZGF0YWdldHRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZHNUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkOiBmaWVsZCwgcmVjb3JkOiByZWNvcmQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGJnZXR0ZXIgIFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYmdldHRlclwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIiFmaWVsZC5Jbkxpc3RWaWV3XCIgXHJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCIgXHJcbiAgICAgICAgICAgICAgICBbKHJlY29yZCldPVwicmVjb3JkXCIgXHJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIiBcclxuICAgICAgICAgICAgICAgIFtEaXJlY3RseU9wZW5UYWJsZV09XCJkaXJlY3RseU9wZW5UYWJsZVwiIFxyXG4gICAgICAgICAgICAgICAgW1F1ZXJ5RWRpdG9yQ29tcG9uZW50XT1cIlF1ZXJ5RWRpdG9yQ29tcG9uZW50XCIgXHJcbiAgICAgICAgICAgICAgICBbaW5Db25maWddPVwiaW5Db25maWdcIiBcclxuICAgICAgICAgICAgICAgIChvdXQpPVwib25FeHRlcm5hbENvbXBvbmVudE91dCgkZXZlbnQpXCIgXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZSk9XCJvblNlbGVjdGVkVmFsdWUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2RiZ2V0dGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtWydEYSBtb2R1bG8gZGluYW1pY28nXVwiPiBcclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZG1sb2FkZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRzVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZDogZmllbGQsIHJlY29yZDogcmVjb3JkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRzVGVtcGxhdGU+XHJcblxyXG4gICAgPHRleHQtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXVwiXHJcbiAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC90ZXh0LWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDx0ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydBcmVhIGRpIHRlc3RvJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L3RleHRhcmVhLWZpZWxkLXRlbXBsYXRlPlxyXG5cclxuICAgIDxib29sZWFuLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0Jvb2xlYW5vJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2Jvb2xlYW4tZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPGRhdGUtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRGF0YSBlL28gb3JhJ11cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLlRvb2x0aXBcIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICA8L2RhdGUtZmllbGQtdGVtcGxhdGU+XHJcblxyXG4gICAgPG51bWVyaWMtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnQ2FtcG8gbnVtZXJpY28nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQuVG9vbHRpcFwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8YXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSAqbmdJZj1cImZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydBbGxlZ2F0byddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIj5cclxuICAgIDwvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8aW1hZ2UtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnSW1tYWdpbmUnXVwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2luQ29uZmlnXT1cImluQ29uZmlnXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIiAoaW1hZ2VEcmF3KT1cIm9uSW1hZ2VEcmF3KCRldmVudClcIj5cclxuICAgIDwvaW1hZ2UtZmllbGQtdGVtcGxhdGU+IFxyXG5cclxuICAgIDxpbWFnZS13aXRoLW1hcmtlcnMtZmllbGQtdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnSW1tYWdpbmUgY29uIG1hcmtlcnMnXVwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW2luQ29uZmlnXT1cImluQ29uZmlnXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5EZXNjcmlwdGlvblwiIFsocmVjb3JkKV09XCJyZWNvcmRcIiBbZmllbGRdPVwiZmllbGRcIiAocmVjb3JkQ2hhbmdlKT1cIm9uUmVjb3JkQ2hhbmdlKClcIiAoaW1hZ2VNYXJrKT1cIm9uSW1hZ2VNYXJrKCRldmVudClcIj5cclxuICAgIDwvaW1hZ2Utd2l0aC1tYXJrZXJzLWZpZWxkLXRlbXBsYXRlPiBcclxuXHJcbiAgICA8aW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUgI2ZpZWxkVGVtcGxhdGUgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ11cIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiZmllbGQuRGVzY3JpcHRpb25cIiBbKHJlY29yZCldPVwicmVjb3JkXCIgW2ZpZWxkXT1cImZpZWxkXCIgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCJcclxuICAgID5cclxuICAgIDwvaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGU+XHJcblxyXG4gICAgPGxhYmVsLWZpZWxkLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlICpuZ0lmPVwiZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0V0aWNoZXR0YSddXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5Ub29sdGlwXCIgWyhyZWNvcmQpXT1cInJlY29yZFwiIFtmaWVsZF09XCJmaWVsZFwiIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgPC9sYWJlbC1maWVsZC10ZW1wbGF0ZT5cclxuXHJcbiAgICA8IS0tIEZPUk0gREkgREVUVEFHTElPIChMQVNDSUFSRSBJTiBGT05ETykgLS0+XHJcbiAgICA8bGlzdC1mb3JtLXJlY29yZCAjbGlzdElubmVyRm9ybVJlY29yZHMgKm5nSWY9XCJmaWVsZC5GaWVsZFR5cGUgPT0gRmllbGRUeXBlRW51bVsnRm9ybSBkaSBkZXR0YWdsaW8nXVwiXHJcbiAgICAgICAgW2Zvcm1dPVwiZ2V0SW5uZXJGb3JtRnJvbUZpZWxkKGZpZWxkKVwiIFtjb25maWd1cmF0aW9uc109XCJjb25maWdMaXN0XCJcclxuICAgICAgICAob25BZGRWaWV3RWRpdFJlY29yZCk9XCJvbkFkZFZpZXdFZGl0SW5uZXJGb3JtUmVjb3JkKCRldmVudCwgZmllbGQpXCI+XHJcbiAgICA8L2xpc3QtZm9ybS1yZWNvcmQ+XHJcbjwvbmctdGVtcGxhdGU+Il19