@libs-ui/components-preview-text-data 0.2.356-3 → 0.2.356-5
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.
|
@@ -355,10 +355,10 @@ export class LibsUiComponentsPreviewTextDataComponent {
|
|
|
355
355
|
});
|
|
356
356
|
}
|
|
357
357
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
358
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPreviewTextDataComponent, isStandalone: true, selector: "libs_ui-components-preview_text_data", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, langSelected: { classPropertyName: "langSelected", publicName: "langSelected", isSignal: true, isRequired: true, transformFunction: null }, langsAccept: { classPropertyName: "langsAccept", publicName: "langsAccept", isSignal: true, isRequired: false, transformFunction: null }, langsChangeLabel: { classPropertyName: "langsChangeLabel", publicName: "langsChangeLabel", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, hiddenAction: { classPropertyName: "hiddenAction", publicName: "hiddenAction", isSignal: true, isRequired: false, transformFunction: null }, lintIgnorePatterns: { classPropertyName: "lintIgnorePatterns", publicName: "lintIgnorePatterns", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { langSelected: "langSelectedChange", outChange: "outChange", syntaxErrors: "syntaxErrors" }, viewQueries: [{ propertyName: "containerPreview", first: true, predicate: ["containerPreview"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
358
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPreviewTextDataComponent, isStandalone: true, selector: "libs_ui-components-preview_text_data", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, langSelected: { classPropertyName: "langSelected", publicName: "langSelected", isSignal: true, isRequired: true, transformFunction: null }, langsAccept: { classPropertyName: "langsAccept", publicName: "langsAccept", isSignal: true, isRequired: false, transformFunction: null }, langsChangeLabel: { classPropertyName: "langsChangeLabel", publicName: "langsChangeLabel", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, hiddenAction: { classPropertyName: "hiddenAction", publicName: "hiddenAction", isSignal: true, isRequired: false, transformFunction: null }, lintIgnorePatterns: { classPropertyName: "lintIgnorePatterns", publicName: "lintIgnorePatterns", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { langSelected: "langSelectedChange", outChange: "outChange", syntaxErrors: "syntaxErrors" }, viewQueries: [{ propertyName: "containerPreview", first: true, predicate: ["containerPreview"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "dropdownTemplateRefNotSearchNoData", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
359
359
|
}
|
|
360
360
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, decorators: [{
|
|
361
361
|
type: Component,
|
|
362
362
|
args: [{ selector: 'libs_ui-components-preview_text_data', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent], template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"] }]
|
|
363
363
|
}], ctorParameters: () => [] });
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcHJldmlldy10ZXh0LWRhdGEvc3JjL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JMLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sbUJBQW1CLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQWtCLGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFakcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLCtCQUErQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFB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QyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLDhCQUE4QjtRQUM5QixNQUFNLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekksZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7WUFDaEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDeEgsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdkIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM3QixhQUFhLEVBQUUsVUFBVTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTNaVSx3Q0FBd0M7NEZBQXhDLHdDQUF3QywwN0NDeEJyRCxxNERBeUNBLG8zQkRuQlksaUNBQWlDLGkxREFBRSxzQ0FBc0M7OzRGQUV4RSx3Q0FBd0M7a0JBVHBELFNBQVM7K0JBRUUsc0NBQXNDLGNBR3BDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGlDQUFpQyxFQUFFLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc3ludGF4VHJlZSB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmd1YWdlJztcbmltcG9ydCB7IERpYWdub3N0aWMsIGxpbnRlciwgbGludEd1dHRlciB9IGZyb20gJ0Bjb2RlbWlycm9yL2xpbnQnO1xuaW1wb3J0IHsgQ29tcGFydG1lbnQsIEV4dGVuc2lvbiwgVGV4dCB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IEVkaXRvclZpZXcsIGxpbmVOdW1iZXJzLCBWaWV3VXBkYXRlIH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgdHlwZSB7IFN5bnRheE5vZGVSZWYgfSBmcm9tICdAbGV6ZXIvY29tbW9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBiYXNpY1NldHVwIH0gZnJvbSAnY29kZW1pcnJvcjYnO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdExhbmd1YWdlLCBodHRwUmVxdWVzdENvbmZpZ0dldE9wdGlvbnNMYW5nLCBsYW5ndWFnZVJlZ2lzdHJ5LCBvcHRpb25zTGFuZ0RhdGEgfSBmcm9tICcuL3ByZXZpZXctdGV4dC1kYXRhLmRlZmluZSc7XG5pbXBvcnQgeyBJTGFuZ3VhZ2VPcHRpb25zLCBJUHJldmlld1RleHREYXRhQ2hhbmdlLCBQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUIH0gZnJvbSAnLi9wcmV2aWV3LXRleHQtZGF0YS5pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXByZXZpZXdfdGV4dF9kYXRhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1ByZXZpZXdUZXh0RGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgZWRpdG9yVmlld0luc3RhbmNlPzogRWRpdG9yVmlldztcbiAgcHJpdmF0ZSByZWFkb25seSB3cmFwQ29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZUNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGluZU51bWJlckNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGludGVyQ29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgcHJpdmF0ZSBjb250ZW50U3RhdGVOb1dyYXAgPSBzaWduYWwoJycpO1xuXG4gIC8qKiBDYWNoZSDEkeG7gyB0csOhbmggbG9hZCBs4bqhaSBsYW5ndWFnZSDEkcOjIGxvYWQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEV4dGVuc2lvbj4oKTtcblxuICAvKiogRmxhZyDEkeG7gyB0csOhbmggdXBkYXRlIGVkaXRvciBraGkgxJFhbmcga2jhu59pIHThuqFvICovXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOSkVDVEVEIFNFUlZJQ0VTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJPVEVDVEVEIFNJR05BTFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNXcmFwID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnTG9hZERhdGFJc0h0dHBDb25maWcgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPihodHRwUmVxdWVzdENvbmZpZ0dldE9wdGlvbnNMYW5nKHVuZGVmaW5lZCkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGFiZWxMYW5nID0gY29tcHV0ZWQoKCkgPT4gb3B0aW9uc0xhbmdEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMubGFuZ1NlbGVjdGVkKCkpPy5sYWJlbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhY2NlcHRDaGFuZ2VMYW5nID0gY29tcHV0ZWQoKCkgPT4gISh0aGlzLmxhbmdTZWxlY3RlZCgpICYmIHRoaXMubGFuZ3NBY2NlcHQoKT8ubGVuZ3RoID09PSAxICYmIHRoaXMubGFuZ3NBY2NlcHQoKT8uaW5jbHVkZXModGhpcy5sYW5nU2VsZWN0ZWQoKSkpKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTlBVVFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBjb250ZW50ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWU/OiBzdHJpbmcpID0+IHZhbHVlID8/ICcnLFxuICB9KTtcblxuICByZWFkb25seSBsYW5nU2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUPigpO1xuICByZWFkb25seSBsYW5nc0FjY2VwdCA9IGlucHV0PEFycmF5PFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQ+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsYW5nc0NoYW5nZUxhYmVsID0gaW5wdXQ8SUxhbmd1YWdlT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcblxuICByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWU/OiBib29sZWFuKSA9PiB2YWx1ZSA/PyBmYWxzZSxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGlkZGVuQWN0aW9uID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZT86IGJvb2xlYW4pID0+IHZhbHVlID8/IGZhbHNlLFxuICB9KTtcblxuICByZWFkb25seSBsaW50SWdub3JlUGF0dGVybnMgPSBpbnB1dDxBcnJheTxzdHJpbmc+LCBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkPihbJ0Nhbm5vdCB1c2UgaW1wb3J0IHN0YXRlbWVudCBvdXRzaWRlIGEgbW9kdWxlJywgJ1VuZXhwZWN0ZWQgdG9rZW4gZXhwb3J0JywgJ2ltcG9ydCAnLCAnQGFuZ3VsYXIvY29yZSddLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWU/OiBBcnJheTxzdHJpbmc+KSA9PiB2YWx1ZSA/PyBbJ0Nhbm5vdCB1c2UgaW1wb3J0IHN0YXRlbWVudCBvdXRzaWRlIGEgbW9kdWxlJywgJ1VuZXhwZWN0ZWQgdG9rZW4gZXhwb3J0JywgJ2ltcG9ydCAnLCAnQGFuZ3VsYXIvY29yZSddLFxuICB9KTtcblxuICByZWFkb25seSBiYWNrZ3JvdW5kID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcjZjhmOWZhJywge1xuICAgIHRyYW5zZm9ybTogKHZhbHVlPzogc3RyaW5nKSA9PiB2YWx1ZSA/PyAnI2Y4ZjlmYScsXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE9VVFBVVFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBvdXRDaGFuZ2UgPSBvdXRwdXQ8SVByZXZpZXdUZXh0RGF0YUNoYW5nZT4oKTtcbiAgcmVhZG9ubHkgc3ludGF4RXJyb3JzID0gb3V0cHV0PERpYWdub3N0aWNbXT4oKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWSUVXIENISUxEUkVOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJQcmV2aWV3ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY29udGFpbmVyUHJldmlldycpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPTlNUUlVDVE9SIC0gU2V0dXAgZWZmZWN0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEVmZmVjdCDEkeG7gyBzeW5jIGNvbnRlbnQgdOG7qyBpbnB1dCB2w6BvIGVkaXRvclxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdDb250ZW50ID0gdGhpcy5jb250ZW50KCk7XG4gICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZW50ID0gdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2Uuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChuZXdDb250ZW50ICE9PSBjdXJyZW50Q29udGVudCkge1xuICAgICAgICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGNoYW5nZXM6IHtcbiAgICAgICAgICAgICAgZnJvbTogMCxcbiAgICAgICAgICAgICAgdG86IGN1cnJlbnRDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgaW5zZXJ0OiBuZXdDb250ZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYW51cCBraGkgY29tcG9uZW50IGLhu4sgZGVzdHJveVxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubGFuZ3VhZ2VDYWNoZS5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTElGRUNZQ0xFIEhPT0tTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGFuZ3NBY2NlcHQoKT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbmZpZ0xvYWREYXRhSXNIdHRwQ29uZmlnLnNldChodHRwUmVxdWVzdENvbmZpZ0dldE9wdGlvbnNMYW5nKHRoaXMubGFuZ3NBY2NlcHQoKSwgdGhpcy5sYW5nc0NoYW5nZUxhYmVsKCkpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplRWRpdG9yKCk7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgTUVUSE9EUyAtIEVkaXRvciBpbml0aWFsaXphdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBLaOG7n2kgdOG6oW8gZWRpdG9yIHbhu5tpIGPDoWMgZXh0ZW5zaW9ucyBjxqEgYuG6o25cbiAgICogTGFuZ3VhZ2UgxJHGsOG7o2MgbG9hZCBhc3luYyDEkeG7gyB04buRaSDGsHUgYnVuZGxlIHNpemVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYW5ndWFnZUV4dGVuc2lvbiA9IGF3YWl0IHRoaXMubG9hZExhbmd1YWdlRXh0ZW5zaW9uKHRoaXMubGFuZ1NlbGVjdGVkKCkpO1xuICAgIGNvbnN0IGxpbnRlckV4dGVuc2lvbiA9IGF3YWl0IHRoaXMubG9hZExpbnRlckV4dGVuc2lvbih0aGlzLmxhbmdTZWxlY3RlZCgpKTtcblxuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlID0gbmV3IEVkaXRvclZpZXcoe1xuICAgICAgZG9jOiB0aGlzLmNvbnRlbnQoKSxcbiAgICAgIHBhcmVudDogdGhpcy5jb250YWluZXJQcmV2aWV3KCkubmF0aXZlRWxlbWVudCxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9ucyhsYW5ndWFnZUV4dGVuc2lvbiwgbGludGVyRXh0ZW5zaW9uKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBkYW5oIHPDoWNoIGV4dGVuc2lvbnMgY2hvIGVkaXRvclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVFeHRlbnNpb25zKGxhbmd1YWdlRXh0ZW5zaW9uOiBFeHRlbnNpb24sIGxpbnRlckV4dGVuc2lvbjogRXh0ZW5zaW9uKTogRXh0ZW5zaW9uW10ge1xuICAgIHJldHVybiBbXG4gICAgICBiYXNpY1NldHVwLFxuICAgICAgdGhpcy5sYW5ndWFnZUNvbXBhcnRtZW50Lm9mKGxhbmd1YWdlRXh0ZW5zaW9uKSxcbiAgICAgIHRoaXMubGludGVyQ29tcGFydG1lbnQub2YobGludGVyRXh0ZW5zaW9uKSxcbiAgICAgIHRoaXMuY3JlYXRlTGlnaHRUaGVtZSgpLFxuICAgICAgRWRpdG9yVmlldy5lZGl0YWJsZS5vZih0aGlzLmVkaXRhYmxlKCkpLFxuICAgICAgdGhpcy53cmFwQ29tcGFydG1lbnQub2YoRWRpdG9yVmlldy5saW5lV3JhcHBpbmcpLFxuICAgICAgdGhpcy5saW5lTnVtYmVyQ29tcGFydG1lbnQub2YobGluZU51bWJlcnMoKSksXG4gICAgICBsaW50R3V0dGVyKCksXG4gICAgICB0aGlzLmNyZWF0ZUJyYWNrZXRUaGVtZSgpLFxuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVMaXN0ZW5lcigpLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBsYW5ndWFnZSBleHRlbnNpb24gduG7m2kgY2FjaGluZ1xuICAgKiBN4buXaSBsYW5ndWFnZSBjaOG7iSDEkcaw4bujYyBsb2FkIDEgbOG6p25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZExhbmd1YWdlRXh0ZW5zaW9uKGxhbmc6IFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQpOiBQcm9taXNlPEV4dGVuc2lvbj4ge1xuICAgIGNvbnN0IGxvd2VyTGFuZyA9IGxhbmcudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubGFuZ3VhZ2VDYWNoZS5nZXQobG93ZXJMYW5nKTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCByZWdpc3RyeUl0ZW0gPSBsYW5ndWFnZVJlZ2lzdHJ5W2xvd2VyTGFuZ107XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcmVnaXN0cnlJdGVtID8gYXdhaXQgcmVnaXN0cnlJdGVtLmxvYWRlcigpIDogYXdhaXQgY3JlYXRlRGVmYXVsdExhbmd1YWdlKCk7XG5cbiAgICB0aGlzLmxhbmd1YWdlQ2FjaGUuc2V0KGxvd2VyTGFuZywgZXh0ZW5zaW9uKTtcbiAgICByZXR1cm4gZXh0ZW5zaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbGludGVyIGV4dGVuc2lvbiBu4bq/dSBjw7NcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZExpbnRlckV4dGVuc2lvbihsYW5nOiBQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUKTogUHJvbWlzZTxFeHRlbnNpb24+IHtcbiAgICBjb25zdCBsb3dlckxhbmcgPSBsYW5nLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcmVnaXN0cnlJdGVtID0gbGFuZ3VhZ2VSZWdpc3RyeVtsb3dlckxhbmddO1xuXG4gICAgaWYgKHJlZ2lzdHJ5SXRlbT8ubGludGVyKSB7XG4gICAgICByZXR1cm4gcmVnaXN0cnlJdGVtLmxpbnRlcih0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGludGVyKCgpID0+IFtdKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgTUVUSE9EUyAtIFRoZW1lIGNvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGNyZWF0ZUxpZ2h0VGhlbWUoKTogRXh0ZW5zaW9uIHtcbiAgICByZXR1cm4gRWRpdG9yVmlldy50aGVtZSh7XG4gICAgICAnJic6IHsgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmQoKSwgY29sb3I6ICcjMzMzJyB9LFxuICAgICAgJy5jbS1jb250ZW50JzogeyBjYXJldENvbG9yOiAnIzExMScgfSxcbiAgICAgICcuY20tYWN0aXZlTGluZSc6IHsgYmFja2dyb3VuZENvbG9yOiAnI2YwZjBmMCcgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnJhY2tldFRoZW1lKCk6IEV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIEVkaXRvclZpZXcudGhlbWUoe1xuICAgICAgJy5jbS1tYXRjaGluZ0JyYWNrZXQnOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLCAyMDAsIDI1NSwgMC4xNSknLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgxMDAsIDIwMCwgMjU1LCAwLjQpJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgICAgICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGVhc2UnLFxuICAgICAgfSxcbiAgICAgICcuY20tbm9ubWF0Y2hpbmdCcmFja2V0Jzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMTAwLCAxMDAsIDAuMTUpJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjU1LCAxMDAsIDEwMCwgMC4zKScsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzNweCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBNRVRIT0RTIC0gVXBkYXRlIGxpc3RlbmVyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBjcmVhdGVVcGRhdGVMaXN0ZW5lcigpOiBFeHRlbnNpb24ge1xuICAgIHJldHVybiBFZGl0b3JWaWV3LnVwZGF0ZUxpc3RlbmVyLm9mKCh1cGRhdGU6IFZpZXdVcGRhdGUpID0+IHtcbiAgICAgIGlmICh1cGRhdGUuZG9jQ2hhbmdlZCAmJiB0aGlzLmVkaXRhYmxlKCkpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB1cGRhdGUuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgIGNvbnRlbnQ6IG5ld1ZhbHVlLFxuICAgICAgICAgIGlzV3JhcDogIXRoaXMuaXNXcmFwKCksXG4gICAgICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ1NlbGVjdGVkKCksXG4gICAgICAgICAgY29udGV4dENoYW5nZTogJ2NvbnRlbnQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIC0gTGludGVyIGZhY3RvcmllcyAoxJHGsOG7o2MgZ+G7jWkgdOG7qyByZWdpc3RyeSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogVOG6oW8gSmF2YVNjcmlwdCBsaW50ZXJcbiAgICogU+G7rSBk4bulbmcgRnVuY3Rpb24gY29uc3RydWN0b3IgxJHhu4MgdmFsaWRhdGUgc3ludGF4XG4gICAqL1xuICBjcmVhdGVKc0xpbnRlcigpOiBFeHRlbnNpb24ge1xuICAgIHJldHVybiBsaW50ZXIoKHZpZXcpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSB2aWV3LnN0YXRlLmRvYy50b1N0cmluZygpO1xuICAgICAgY29uc3QgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXSA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24odGV4dCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGdldChlcnIsICdtZXNzYWdlJywgJycpO1xuICAgICAgICBjb25zdCBzaG91bGRJZ25vcmUgPSB0aGlzLmxpbnRJZ25vcmVQYXR0ZXJucygpLnNvbWUoKHBhdHRlcm4pID0+IG1lc3NhZ2UuaW5jbHVkZXMocGF0dGVybikpO1xuXG4gICAgICAgIGlmICghc2hvdWxkSWdub3JlKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgICBmcm9tOiAwLFxuICAgICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc3ludGF4RXJyb3JzLmVtaXQoZGlhZ25vc3RpY3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBKU09OIGxpbnRlclxuICAgKiBT4butIGThu6VuZyBKU09OLnBhcnNlIMSR4buDIHZhbGlkYXRlXG4gICAqL1xuICBjcmVhdGVKc29uTGludGVyKCk6IEV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIGxpbnRlcigodmlldykgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgZnJvbTogMCxcbiAgICAgICAgICB0bzogdGV4dC5sZW5ndGgsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogZ2V0KGVyciwgJ21lc3NhZ2UnLCAnJyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN5bnRheEVycm9ycy5lbWl0KGRpYWdub3N0aWNzKTtcbiAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBTUUwgbGludGVyXG4gICAqL1xuICBjcmVhdGVTcWxMaW50ZXIoKTogRXh0ZW5zaW9uIHtcbiAgICByZXR1cm4gbGludGVyKCh2aWV3KSA9PiB7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgICBjb25zdCBkb2MgPSB2aWV3LnN0YXRlLmRvYztcbiAgICAgIGNvbnN0IHRyZWUgPSBzeW50YXhUcmVlKHZpZXcuc3RhdGUpO1xuXG4gICAgICB0cmVlLml0ZXJhdGUoe1xuICAgICAgICBlbnRlcjogKG5vZGU6IFN5bnRheE5vZGVSZWYpID0+IHtcbiAgICAgICAgICBpZiAoIW5vZGUudHlwZS5pc0Vycm9yKSByZXR1cm47XG5cbiAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAgICAgIGZyb206IE1hdGgubWF4KDAsIG5vZGUuZnJvbSAtIDEpLFxuICAgICAgICAgICAgdG86IG5vZGUuZnJvbSxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5idWlsZFNxbEVycm9yTWVzc2FnZShkb2MsIG5vZGUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3ludGF4RXJyb3JzLmVtaXQoZGlhZ25vc3RpY3MpO1xuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNxbEVycm9yTWVzc2FnZShkb2M6IFRleHQsIG5vZGU6IFN5bnRheE5vZGVSZWYpOiBzdHJpbmcge1xuICAgIGlmIChub2RlLmZyb20gIT09IG5vZGUudG8pIHtcbiAgICAgIGNvbnN0IHRleHQgPSBkb2Muc2xpY2VTdHJpbmcobm9kZS5mcm9tLCBub2RlLnRvKTtcbiAgICAgIHJldHVybiBgU1FMIHN5bnRheCBlcnJvciBuZWFyIFwiJHt0ZXh0fVwiYDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2VG9rZW4gPSB0aGlzLmdldFRva2VuQmVmb3JlKGRvYywgbm9kZS5mcm9tKTtcblxuICAgIGlmICghcHJldlRva2VuKSB7XG4gICAgICByZXR1cm4gJ1NRTCBzeW50YXggZXJyb3IgYXQgYmVnaW5uaW5nIG9mIHN0YXRlbWVudCc7XG4gICAgfVxuXG4gICAgaWYgKC9GUk9NJC9pLnRlc3QocHJldlRva2VuKSkge1xuICAgICAgcmV0dXJuICdFeHBlY3RlZCB0YWJsZSBuYW1lIGFmdGVyIEZST00nO1xuICAgIH1cblxuICAgIGlmICgvU0VMRUNUJC9pLnRlc3QocHJldlRva2VuKSkge1xuICAgICAgcmV0dXJuICdFeHBlY3RlZCBjb2x1bW4gbGlzdCBhZnRlciBTRUxFQ1QnO1xuICAgIH1cblxuICAgIGlmICgvV0hFUkUkL2kudGVzdChwcmV2VG9rZW4pKSB7XG4gICAgICByZXR1cm4gJ0V4cGVjdGVkIGNvbmRpdGlvbiBhZnRlciBXSEVSRSc7XG4gICAgfVxuXG4gICAgaWYgKC9cXCgkLy50ZXN0KHByZXZUb2tlbikpIHtcbiAgICAgIHJldHVybiAnTWlzc2luZyBjbG9zaW5nIFwiKVwiJztcbiAgICB9XG5cbiAgICByZXR1cm4gYFVuZXhwZWN0ZWQgZW5kIG9mIFNRTCBhZnRlciBcIiR7cHJldlRva2VufVwiYDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9rZW5CZWZvcmUoZG9jOiBUZXh0LCBwb3M6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBwb3MgLSAzMCk7XG4gICAgY29uc3QgdGV4dCA9IGRvYy5zbGljZVN0cmluZyhzdGFydCwgcG9zKTtcblxuICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgvKFxcUyspXFxzKiQvKTtcbiAgICByZXR1cm4gbWF0Y2g/LlsxXSA/PyAnJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBST1RFQ1RFRCBNRVRIT0RTIC0gRXZlbnQgaGFuZGxlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNvcHkoKTogdm9pZCB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5jb250ZW50KCkgfHwgJycpO1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93Q29tcFR5cGVUZXh0SW5mbygnU2FvIGNow6lwIHRow6BuaCBjw7RuZycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJMaW5lV3JhcCgpOiB2b2lkIHtcbiAgICAvLyBM4bqleSBu4buZaSBkdW5nIG3hu5tpIG5o4bqldCB04burIGVkaXRvciBzYXUga2hpIMSRw6MgeMOzYSBuZXdsaW5lc1xuICAgIGNvbnN0IGN1cnJlbnRDb250ZW50ID0gdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LnN0YXRlLmRvYy50b1N0cmluZygpIHx8ICcnO1xuICAgIGlmICh0aGlzLmlzV3JhcCgpKSB7XG4gICAgICB0aGlzLmNvbnRlbnRTdGF0ZU5vV3JhcC5zZXQoY3VycmVudENvbnRlbnQpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkQ29udGVudCA9IHRoaXMuaXNXcmFwKCkgJiYgY3VycmVudENvbnRlbnQgPyBjdXJyZW50Q29udGVudC5yZXBsYWNlKC9cXG4vZywgJyAnKSA6IHRoaXMuY29udGVudFN0YXRlTm9XcmFwKCk7XG4gICAgdGhpcy5pc1dyYXAudXBkYXRlKCh2YWwpID0+ICF2YWwpO1xuXG4gICAgaWYgKGN1cnJlbnRDb250ZW50ICE9PSB1cGRhdGVkQ29udGVudCkge1xuICAgICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRpc3BhdGNoKHtcbiAgICAgICAgY2hhbmdlczogeyBmcm9tOiAwLCB0bzogY3VycmVudENvbnRlbnQubGVuZ3RoLCBpbnNlcnQ6IHVwZGF0ZWRDb250ZW50IH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBCYXRjaCBj4bqjIDIgZGlzcGF0Y2ggdGjDoG5oIDEgxJHhu4MgdOG7kWkgxrB1IHBlcmZvcm1hbmNlXG4gICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRpc3BhdGNoKHtcbiAgICAgIGVmZmVjdHM6IFt0aGlzLndyYXBDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZSh0aGlzLmlzV3JhcCgpID8gRWRpdG9yVmlldy5saW5lV3JhcHBpbmcgOiBbXSksIHRoaXMubGluZU51bWJlckNvbXBhcnRtZW50LnJlY29uZmlndXJlKHRoaXMuaXNXcmFwKCkgPyBsaW5lTnVtYmVycygpIDogW10pXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0S2V5KGRhdGE/OiBJRW1pdFNlbGVjdEtleSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZGF0YT8ua2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGFuZyA9IGRhdGEua2V5IGFzIFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQ7XG4gICAgdGhpcy5sYW5nU2VsZWN0ZWQuc2V0KG5ld0xhbmcpO1xuXG4gICAgLy8gTG9hZCBsYW5ndWFnZSB2w6AgbGludGVyIG3hu5tpXG4gICAgY29uc3QgW2xhbmd1YWdlRXh0ZW5zaW9uLCBsaW50ZXJFeHRlbnNpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZExhbmd1YWdlRXh0ZW5zaW9uKG5ld0xhbmcpLCB0aGlzLmxvYWRMaW50ZXJFeHRlbnNpb24obmV3TGFuZyldKTtcblxuICAgIC8vIFJlY29uZmlndXJlIHRoYXkgdsOsIHThuqFvIG3hu5tpIHN0YXRlIMSR4buDIGdp4buvIGzhuqFpIGRvY3VtZW50IGNvbnRlbnRcbiAgICB0aGlzLmVkaXRvclZpZXdJbnN0YW5jZT8uZGlzcGF0Y2goe1xuICAgICAgZWZmZWN0czogW3RoaXMubGFuZ3VhZ2VDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShsYW5ndWFnZUV4dGVuc2lvbiksIHRoaXMubGludGVyQ29tcGFydG1lbnQucmVjb25maWd1cmUobGludGVyRXh0ZW5zaW9uKV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCgpLFxuICAgICAgaXNXcmFwOiAhdGhpcy5pc1dyYXAoKSxcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmdTZWxlY3RlZCgpLFxuICAgICAgY29udGV4dENoYW5nZTogJ2xhbmd1YWdlJyxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImxpYnMtdWktcHJldmlldy1kYXRhLWNvbnRhaW5lciBmbGV4IGZsZXgtY29sIHctZnVsbCBoLWF1dG8gcm91bmRlZC1bOHB4XSBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHB4LVs4cHhdXCJcbiAgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJiYWNrZ3JvdW5kKClcIlxuICBbY2xhc3MucHQtWzhweF1dPVwiIWhpZGRlbkFjdGlvbigpXCI+XG4gIEBpZiAoIWhpZGRlbkFjdGlvbigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGNvbnRlbnQtYmV0d2VlbiBjb2xvci1bIzZhNzM4M11cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgY2xhc3NJbmNsdWRlPVwidy1bMjAwcHhdXCJcbiAgICAgICAgW2xpc3RDb25maWddPVwiY29uZmlnTG9hZERhdGFJc0h0dHBDb25maWcoKVwiXG4gICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiNVwiXG4gICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiFlZGl0YWJsZSgpIHx8ICFhY2NlcHRDaGFuZ2VMYW5nKClcIlxuICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0S2V5KCRldmVudClcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExhbmcoKSB8fCAnJ1wiXG4gICAgICAgICAgW3NpemVCdXR0b25dPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImVkaXRhYmxlKCkgJiYgYWNjZXB0Q2hhbmdlTGFuZygpID8gJ2xpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCcgOiAnJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtWzBweF0nICsgKGVkaXRhYmxlKCkgJiYgYWNjZXB0Q2hhbmdlTGFuZygpID8gJycgOiAnIXBvaW50ZXItZXZlbnRzLW5vbmUgIWN1cnNvci1kZWZhdWx0IGhvdmVyOiF0ZXh0LVsjNkE3MzgzXScpXCIgLz5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiaXNXcmFwKCkgPyAnaTE4bl9yZW1vdmVfbGluZV93cmFwJyA6ICdpMThuX2xpbmVfd3JhcCdcIlxuICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImlzV3JhcCgpID8gJ2xpYnMtdWktaWNvbi11bndyYXAnIDogJ2xpYnMtdWktaWNvbi13cmFwJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbW8tbGliLXAtMHB4IG1vLWxpYi1tci0xNnB4J1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJMaW5lV3JhcCgpXCIgLz5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9jb3B5J1wiXG4gICAgICAgICAgW3NpemVCdXR0b25dPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jb3B5J1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbW8tbGliLXAtMHB4J1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDb3B5KClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbiAgPGRpdiAjY29udGFpbmVyUHJldmlldz48L2Rpdj5cbjwvZGl2PlxuIl19
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcHJldmlldy10ZXh0LWRhdGEvc3JjL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JMLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sbUJBQW1CLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQWtCLGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFakcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLCtCQUErQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQVl2SSxNQUFNLE9BQU8sd0NBQXdDO0lBQ25ELDZFQUE2RTtJQUM3RSxxQkFBcUI7SUFDckIsNkVBQTZFO0lBRXJFLGtCQUFrQixDQUFjO0lBQ3ZCLGVBQWUsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLG1CQUFtQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDeEMscUJBQXFCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUMxQyxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQy9DLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV4QywrQ0FBK0M7SUFDOUIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO0lBRTlELG9EQUFvRDtJQUM1QyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRTlCLDZFQUE2RTtJQUM3RSxvQkFBb0I7SUFDcEIsNkVBQTZFO0lBRTVELG1CQUFtQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3hELFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakQsNkVBQTZFO0lBQzdFLG9CQUFvQjtJQUNwQiw2RUFBNkU7SUFFMUQsTUFBTSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUMvQiwwQkFBMEIsR0FBRyxNQUFNLENBQWtCLCtCQUErQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDakcsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25HLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXRLLDZFQUE2RTtJQUM3RSxTQUFTO0lBQ1QsNkVBQTZFO0lBRXBFLE9BQU8sR0FBRyxLQUFLLENBQTZCLEVBQUUsRUFBRTtRQUN2RCxTQUFTLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFO0tBQzNDLENBQUMsQ0FBQztJQUVNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO0lBQ3BFLFdBQVcsR0FBRyxLQUFLLEVBQXlELENBQUM7SUFDN0UsZ0JBQWdCLEdBQUcsS0FBSyxFQUFnQyxDQUFDO0lBRXpELFFBQVEsR0FBRyxLQUFLLENBQStCLEtBQUssRUFBRTtRQUM3RCxTQUFTLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxLQUFLO0tBQy9DLENBQUMsQ0FBQztJQUVNLFlBQVksR0FBRyxLQUFLLENBQStCLEtBQUssRUFBRTtRQUNqRSxTQUFTLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxLQUFLO0tBQy9DLENBQUMsQ0FBQztJQUVNLGtCQUFrQixHQUFHLEtBQUssQ0FBMkMsQ0FBQyw4Q0FBOEMsRUFBRSx5QkFBeUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLEVBQUU7UUFDckwsU0FBUyxFQUFFLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsOENBQThDLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQztLQUN2SixDQUFDLENBQUM7SUFFTSxVQUFVLEdBQUcsS0FBSyxDQUE2QixTQUFTLEVBQUU7UUFDakUsU0FBUyxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksU0FBUztLQUNsRCxDQUFDLENBQUM7SUFFSCw2RUFBNkU7SUFDN0UsVUFBVTtJQUNWLDZFQUE2RTtJQUVwRSxTQUFTLEdBQUcsTUFBTSxFQUEwQixDQUFDO0lBQzdDLFlBQVksR0FBRyxNQUFNLEVBQWdCLENBQUM7SUFFL0MsNkVBQTZFO0lBQzdFLGdCQUFnQjtJQUNoQiw2RUFBNkU7SUFFNUQsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsa0JBQWtCLENBQUMsQ0FBQztJQUV2Ryw2RUFBNkU7SUFDN0UsOEJBQThCO0lBQzlCLDZFQUE2RTtJQUU3RTtRQUNFLDZDQUE2QztRQUM3QyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BFLElBQUksVUFBVSxLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO3dCQUMvQixPQUFPLEVBQUU7NEJBQ1AsSUFBSSxFQUFFLENBQUM7NEJBQ1AsRUFBRSxFQUFFLGNBQWMsQ0FBQyxNQUFNOzRCQUN6QixNQUFNLEVBQUUsVUFBVTt5QkFDbkI7cUJBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxrQkFBa0I7SUFDbEIsNkVBQTZFO0lBRTdFLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEgsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsMENBQTBDO0lBQzFDLDZFQUE2RTtJQUU3RTs7O09BR0c7SUFDSyxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDaEYsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksVUFBVSxDQUFDO1lBQ3ZDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxhQUFhO1lBQzdDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDO1NBQ3RFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLGlCQUE0QixFQUFFLGVBQTBCO1FBQy9FLE9BQU87WUFDTCxVQUFVO1lBQ1YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QyxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQXdDO1FBQzFFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0scUJBQXFCLEVBQUUsQ0FBQztRQUU3RixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQXdDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqRCxJQUFJLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN6QixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCw2RUFBNkU7SUFDN0Usd0NBQXdDO0lBQ3hDLDZFQUE2RTtJQUVyRSxnQkFBZ0I7UUFDdEIsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3RCLEdBQUcsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUMxRCxhQUFhLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO1lBQ3JDLGdCQUFnQixFQUFFLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRTtTQUNqRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztZQUN0QixxQkFBcUIsRUFBRTtnQkFDckIsZUFBZSxFQUFFLDJCQUEyQjtnQkFDNUMsTUFBTSxFQUFFLG9DQUFvQztnQkFDNUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFVBQVUsRUFBRSxlQUFlO2FBQzVCO1lBQ0Qsd0JBQXdCLEVBQUU7Z0JBQ3hCLGVBQWUsRUFBRSwyQkFBMkI7Z0JBQzVDLE1BQU0sRUFBRSxvQ0FBb0M7Z0JBQzVDLFlBQVksRUFBRSxLQUFLO2FBQ3BCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxvQ0FBb0M7SUFDcEMsNkVBQTZFO0lBRXJFLG9CQUFvQjtRQUMxQixPQUFPLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBa0IsRUFBRSxFQUFFO1lBQ3pELElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNsQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQzdCLGFBQWEsRUFBRSxTQUFTO2lCQUN6QixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLDJEQUEyRDtJQUMzRCw2RUFBNkU7SUFFN0U7OztPQUdHO0lBQ0gsY0FBYztRQUNaLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztZQUVyQyxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFFNUYsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNsQixXQUFXLENBQUMsSUFBSSxDQUFDO3dCQUNmLElBQUksRUFBRSxDQUFDO3dCQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTTt3QkFDZixRQUFRLEVBQUUsT0FBTzt3QkFDakIsT0FBTztxQkFDUixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCO1FBQ2QsT0FBTyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFdBQVcsR0FBaUIsRUFBRSxDQUFDO1lBRXJDLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO2dCQUN0QixXQUFXLENBQUMsSUFBSSxDQUFDO29CQUNmLElBQUksRUFBRSxDQUFDO29CQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDZixRQUFRLEVBQUUsT0FBTztvQkFDakIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztpQkFDakMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsTUFBTSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUMzQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBDLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ1gsS0FBSyxFQUFFLENBQUMsSUFBbUIsRUFBRSxFQUFFO29CQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO3dCQUFFLE9BQU87b0JBRS9CLFdBQVcsQ0FBQyxJQUFJLENBQUM7d0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO3dCQUNoQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ2IsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztxQkFDOUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxHQUFTLEVBQUUsSUFBbUI7UUFDekQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sMEJBQTBCLElBQUksR0FBRyxDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyw0Q0FBNEMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTyxnQ0FBZ0MsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxtQ0FBbUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxnQ0FBZ0MsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxxQkFBcUIsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxnQ0FBZ0MsU0FBUyxHQUFHLENBQUM7SUFDdEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFTLEVBQUUsR0FBVztRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsNkVBQTZFO0lBQzdFLHFDQUFxQztJQUNyQyw2RUFBNkU7SUFFbkUsV0FBVztRQUNuQixTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVTLGVBQWU7UUFDdkIsMERBQTBEO1FBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4SCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsQyxJQUFJLGNBQWMsS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO2dCQUNoQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUU7YUFDeEUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDO1lBQ2hDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN0SyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQXFCO1FBQ3BELElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUF5QyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLDhCQUE4QjtRQUM5QixNQUFNLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekksZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUM7WUFDaEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDeEgsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdkIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM3QixhQUFhLEVBQUUsVUFBVTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTNaVSx3Q0FBd0M7NEZBQXhDLHdDQUF3QywwN0NDeEJyRCxxNERBeUNBLG8zQkRuQlksaUNBQWlDLHUzREFBRSxzQ0FBc0M7OzRGQUV4RSx3Q0FBd0M7a0JBVHBELFNBQVM7K0JBRUUsc0NBQXNDLGNBR3BDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLGlDQUFpQyxFQUFFLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc3ludGF4VHJlZSB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmd1YWdlJztcbmltcG9ydCB7IERpYWdub3N0aWMsIGxpbnRlciwgbGludEd1dHRlciB9IGZyb20gJ0Bjb2RlbWlycm9yL2xpbnQnO1xuaW1wb3J0IHsgQ29tcGFydG1lbnQsIEV4dGVuc2lvbiwgVGV4dCB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IEVkaXRvclZpZXcsIGxpbmVOdW1iZXJzLCBWaWV3VXBkYXRlIH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgdHlwZSB7IFN5bnRheE5vZGVSZWYgfSBmcm9tICdAbGV6ZXIvY29tbW9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWxpc3QnO1xuaW1wb3J0IHsgTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBiYXNpY1NldHVwIH0gZnJvbSAnY29kZW1pcnJvcjYnO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdExhbmd1YWdlLCBodHRwUmVxdWVzdENvbmZpZ0dldE9wdGlvbnNMYW5nLCBsYW5ndWFnZVJlZ2lzdHJ5LCBvcHRpb25zTGFuZ0RhdGEgfSBmcm9tICcuL3ByZXZpZXctdGV4dC1kYXRhLmRlZmluZSc7XG5pbXBvcnQgeyBJTGFuZ3VhZ2VPcHRpb25zLCBJUHJldmlld1RleHREYXRhQ2hhbmdlLCBQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUIH0gZnJvbSAnLi9wcmV2aWV3LXRleHQtZGF0YS5pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXByZXZpZXdfdGV4dF9kYXRhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1ByZXZpZXdUZXh0RGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgZWRpdG9yVmlld0luc3RhbmNlPzogRWRpdG9yVmlldztcbiAgcHJpdmF0ZSByZWFkb25seSB3cmFwQ29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZUNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGluZU51bWJlckNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGludGVyQ29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgcHJpdmF0ZSBjb250ZW50U3RhdGVOb1dyYXAgPSBzaWduYWwoJycpO1xuXG4gIC8qKiBDYWNoZSDEkeG7gyB0csOhbmggbG9hZCBs4bqhaSBsYW5ndWFnZSDEkcOjIGxvYWQgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEV4dGVuc2lvbj4oKTtcblxuICAvKiogRmxhZyDEkeG7gyB0csOhbmggdXBkYXRlIGVkaXRvciBraGkgxJFhbmcga2jhu59pIHThuqFvICovXG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOSkVDVEVEIFNFUlZJQ0VTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJPVEVDVEVEIFNJR05BTFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNXcmFwID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnTG9hZERhdGFJc0h0dHBDb25maWcgPSBzaWduYWw8SUxpc3RDb25maWdJdGVtPihodHRwUmVxdWVzdENvbmZpZ0dldE9wdGlvbnNMYW5nKHVuZGVmaW5lZCkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGFiZWxMYW5nID0gY29tcHV0ZWQoKCkgPT4gb3B0aW9uc0xhbmdEYXRhLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMubGFuZ1NlbGVjdGVkKCkpPy5sYWJlbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhY2NlcHRDaGFuZ2VMYW5nID0gY29tcHV0ZWQoKCkgPT4gISh0aGlzLmxhbmdTZWxlY3RlZCgpICYmIHRoaXMubGFuZ3NBY2NlcHQoKT8ubGVuZ3RoID09PSAxICYmIHRoaXMubGFuZ3NBY2NlcHQoKT8uaW5jbHVkZXModGhpcy5sYW5nU2VsZWN0ZWQoKSkpKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTlBVVFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBjb250ZW50ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWU/OiBzdHJpbmcpID0+IHZhbHVlID8/ICcnLFxuICB9KTtcblxuICByZWFkb25seSBsYW5nU2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUPigpO1xuICByZWFkb25seSBsYW5nc0FjY2VwdCA9IGlucHV0PEFycmF5PFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQ+IHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsYW5nc0NoYW5nZUxhYmVsID0gaW5wdXQ8SUxhbmd1YWdlT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcblxuICByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWU/OiBib29sZWFuKSA9PiB2YWx1ZSA/PyBmYWxzZSxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGlkZGVuQWN0aW9uID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZT86IGJvb2xlYW4pID0+IHZhbHVlID8/IGZhbHNlLFxuICB9KTtcblxuICByZWFkb25seSBsaW50SWdub3JlUGF0dGVybnMgPSBpbnB1dDxBcnJheTxzdHJpbmc+LCBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkPihbJ0Nhbm5vdCB1c2UgaW1wb3J0IHN0YXRlbWVudCBvdXRzaWRlIGEgbW9kdWxlJywgJ1VuZXhwZWN0ZWQgdG9rZW4gZXhwb3J0JywgJ2ltcG9ydCAnLCAnQGFuZ3VsYXIvY29yZSddLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWU/OiBBcnJheTxzdHJpbmc+KSA9PiB2YWx1ZSA/PyBbJ0Nhbm5vdCB1c2UgaW1wb3J0IHN0YXRlbWVudCBvdXRzaWRlIGEgbW9kdWxlJywgJ1VuZXhwZWN0ZWQgdG9rZW4gZXhwb3J0JywgJ2ltcG9ydCAnLCAnQGFuZ3VsYXIvY29yZSddLFxuICB9KTtcblxuICByZWFkb25seSBiYWNrZ3JvdW5kID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcjZjhmOWZhJywge1xuICAgIHRyYW5zZm9ybTogKHZhbHVlPzogc3RyaW5nKSA9PiB2YWx1ZSA/PyAnI2Y4ZjlmYScsXG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE9VVFBVVFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICByZWFkb25seSBvdXRDaGFuZ2UgPSBvdXRwdXQ8SVByZXZpZXdUZXh0RGF0YUNoYW5nZT4oKTtcbiAgcmVhZG9ubHkgc3ludGF4RXJyb3JzID0gb3V0cHV0PERpYWdub3N0aWNbXT4oKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWSUVXIENISUxEUkVOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJQcmV2aWV3ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY29udGFpbmVyUHJldmlldycpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPTlNUUlVDVE9SIC0gU2V0dXAgZWZmZWN0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEVmZmVjdCDEkeG7gyBzeW5jIGNvbnRlbnQgdOG7qyBpbnB1dCB2w6BvIGVkaXRvclxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdDb250ZW50ID0gdGhpcy5jb250ZW50KCk7XG4gICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb250ZW50ID0gdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2Uuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChuZXdDb250ZW50ICE9PSBjdXJyZW50Q29udGVudCkge1xuICAgICAgICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGNoYW5nZXM6IHtcbiAgICAgICAgICAgICAgZnJvbTogMCxcbiAgICAgICAgICAgICAgdG86IGN1cnJlbnRDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgaW5zZXJ0OiBuZXdDb250ZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYW51cCBraGkgY29tcG9uZW50IGLhu4sgZGVzdHJveVxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMubGFuZ3VhZ2VDYWNoZS5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTElGRUNZQ0xFIEhPT0tTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGFuZ3NBY2NlcHQoKT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbmZpZ0xvYWREYXRhSXNIdHRwQ29uZmlnLnNldChodHRwUmVxdWVzdENvbmZpZ0dldE9wdGlvbnNMYW5nKHRoaXMubGFuZ3NBY2NlcHQoKSwgdGhpcy5sYW5nc0NoYW5nZUxhYmVsKCkpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplRWRpdG9yKCk7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgTUVUSE9EUyAtIEVkaXRvciBpbml0aWFsaXphdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBLaOG7n2kgdOG6oW8gZWRpdG9yIHbhu5tpIGPDoWMgZXh0ZW5zaW9ucyBjxqEgYuG6o25cbiAgICogTGFuZ3VhZ2UgxJHGsOG7o2MgbG9hZCBhc3luYyDEkeG7gyB04buRaSDGsHUgYnVuZGxlIHNpemVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYW5ndWFnZUV4dGVuc2lvbiA9IGF3YWl0IHRoaXMubG9hZExhbmd1YWdlRXh0ZW5zaW9uKHRoaXMubGFuZ1NlbGVjdGVkKCkpO1xuICAgIGNvbnN0IGxpbnRlckV4dGVuc2lvbiA9IGF3YWl0IHRoaXMubG9hZExpbnRlckV4dGVuc2lvbih0aGlzLmxhbmdTZWxlY3RlZCgpKTtcblxuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlID0gbmV3IEVkaXRvclZpZXcoe1xuICAgICAgZG9jOiB0aGlzLmNvbnRlbnQoKSxcbiAgICAgIHBhcmVudDogdGhpcy5jb250YWluZXJQcmV2aWV3KCkubmF0aXZlRWxlbWVudCxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9ucyhsYW5ndWFnZUV4dGVuc2lvbiwgbGludGVyRXh0ZW5zaW9uKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBkYW5oIHPDoWNoIGV4dGVuc2lvbnMgY2hvIGVkaXRvclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVFeHRlbnNpb25zKGxhbmd1YWdlRXh0ZW5zaW9uOiBFeHRlbnNpb24sIGxpbnRlckV4dGVuc2lvbjogRXh0ZW5zaW9uKTogRXh0ZW5zaW9uW10ge1xuICAgIHJldHVybiBbXG4gICAgICBiYXNpY1NldHVwLFxuICAgICAgdGhpcy5sYW5ndWFnZUNvbXBhcnRtZW50Lm9mKGxhbmd1YWdlRXh0ZW5zaW9uKSxcbiAgICAgIHRoaXMubGludGVyQ29tcGFydG1lbnQub2YobGludGVyRXh0ZW5zaW9uKSxcbiAgICAgIHRoaXMuY3JlYXRlTGlnaHRUaGVtZSgpLFxuICAgICAgRWRpdG9yVmlldy5lZGl0YWJsZS5vZih0aGlzLmVkaXRhYmxlKCkpLFxuICAgICAgdGhpcy53cmFwQ29tcGFydG1lbnQub2YoRWRpdG9yVmlldy5saW5lV3JhcHBpbmcpLFxuICAgICAgdGhpcy5saW5lTnVtYmVyQ29tcGFydG1lbnQub2YobGluZU51bWJlcnMoKSksXG4gICAgICBsaW50R3V0dGVyKCksXG4gICAgICB0aGlzLmNyZWF0ZUJyYWNrZXRUaGVtZSgpLFxuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVMaXN0ZW5lcigpLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBsYW5ndWFnZSBleHRlbnNpb24gduG7m2kgY2FjaGluZ1xuICAgKiBN4buXaSBsYW5ndWFnZSBjaOG7iSDEkcaw4bujYyBsb2FkIDEgbOG6p25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZExhbmd1YWdlRXh0ZW5zaW9uKGxhbmc6IFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQpOiBQcm9taXNlPEV4dGVuc2lvbj4ge1xuICAgIGNvbnN0IGxvd2VyTGFuZyA9IGxhbmcudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubGFuZ3VhZ2VDYWNoZS5nZXQobG93ZXJMYW5nKTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCByZWdpc3RyeUl0ZW0gPSBsYW5ndWFnZVJlZ2lzdHJ5W2xvd2VyTGFuZ107XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcmVnaXN0cnlJdGVtID8gYXdhaXQgcmVnaXN0cnlJdGVtLmxvYWRlcigpIDogYXdhaXQgY3JlYXRlRGVmYXVsdExhbmd1YWdlKCk7XG5cbiAgICB0aGlzLmxhbmd1YWdlQ2FjaGUuc2V0KGxvd2VyTGFuZywgZXh0ZW5zaW9uKTtcbiAgICByZXR1cm4gZXh0ZW5zaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbGludGVyIGV4dGVuc2lvbiBu4bq/dSBjw7NcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZExpbnRlckV4dGVuc2lvbihsYW5nOiBQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUKTogUHJvbWlzZTxFeHRlbnNpb24+IHtcbiAgICBjb25zdCBsb3dlckxhbmcgPSBsYW5nLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcmVnaXN0cnlJdGVtID0gbGFuZ3VhZ2VSZWdpc3RyeVtsb3dlckxhbmddO1xuXG4gICAgaWYgKHJlZ2lzdHJ5SXRlbT8ubGludGVyKSB7XG4gICAgICByZXR1cm4gcmVnaXN0cnlJdGVtLmxpbnRlcih0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGludGVyKCgpID0+IFtdKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBVEUgTUVUSE9EUyAtIFRoZW1lIGNvbmZpZ3VyYXRpb25cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGNyZWF0ZUxpZ2h0VGhlbWUoKTogRXh0ZW5zaW9uIHtcbiAgICByZXR1cm4gRWRpdG9yVmlldy50aGVtZSh7XG4gICAgICAnJic6IHsgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmQoKSwgY29sb3I6ICcjMzMzJyB9LFxuICAgICAgJy5jbS1jb250ZW50JzogeyBjYXJldENvbG9yOiAnIzExMScgfSxcbiAgICAgICcuY20tYWN0aXZlTGluZSc6IHsgYmFja2dyb3VuZENvbG9yOiAnI2YwZjBmMCcgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnJhY2tldFRoZW1lKCk6IEV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIEVkaXRvclZpZXcudGhlbWUoe1xuICAgICAgJy5jbS1tYXRjaGluZ0JyYWNrZXQnOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLCAyMDAsIDI1NSwgMC4xNSknLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgxMDAsIDIwMCwgMjU1LCAwLjQpJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgICAgICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGVhc2UnLFxuICAgICAgfSxcbiAgICAgICcuY20tbm9ubWF0Y2hpbmdCcmFja2V0Jzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMTAwLCAxMDAsIDAuMTUpJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjU1LCAxMDAsIDEwMCwgMC4zKScsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzNweCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBNRVRIT0RTIC0gVXBkYXRlIGxpc3RlbmVyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBjcmVhdGVVcGRhdGVMaXN0ZW5lcigpOiBFeHRlbnNpb24ge1xuICAgIHJldHVybiBFZGl0b3JWaWV3LnVwZGF0ZUxpc3RlbmVyLm9mKCh1cGRhdGU6IFZpZXdVcGRhdGUpID0+IHtcbiAgICAgIGlmICh1cGRhdGUuZG9jQ2hhbmdlZCAmJiB0aGlzLmVkaXRhYmxlKCkpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB1cGRhdGUuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgIGNvbnRlbnQ6IG5ld1ZhbHVlLFxuICAgICAgICAgIGlzV3JhcDogIXRoaXMuaXNXcmFwKCksXG4gICAgICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ1NlbGVjdGVkKCksXG4gICAgICAgICAgY29udGV4dENoYW5nZTogJ2NvbnRlbnQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIC0gTGludGVyIGZhY3RvcmllcyAoxJHGsOG7o2MgZ+G7jWkgdOG7qyByZWdpc3RyeSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogVOG6oW8gSmF2YVNjcmlwdCBsaW50ZXJcbiAgICogU+G7rSBk4bulbmcgRnVuY3Rpb24gY29uc3RydWN0b3IgxJHhu4MgdmFsaWRhdGUgc3ludGF4XG4gICAqL1xuICBjcmVhdGVKc0xpbnRlcigpOiBFeHRlbnNpb24ge1xuICAgIHJldHVybiBsaW50ZXIoKHZpZXcpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSB2aWV3LnN0YXRlLmRvYy50b1N0cmluZygpO1xuICAgICAgY29uc3QgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXSA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24odGV4dCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGdldChlcnIsICdtZXNzYWdlJywgJycpO1xuICAgICAgICBjb25zdCBzaG91bGRJZ25vcmUgPSB0aGlzLmxpbnRJZ25vcmVQYXR0ZXJucygpLnNvbWUoKHBhdHRlcm4pID0+IG1lc3NhZ2UuaW5jbHVkZXMocGF0dGVybikpO1xuXG4gICAgICAgIGlmICghc2hvdWxkSWdub3JlKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgICBmcm9tOiAwLFxuICAgICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc3ludGF4RXJyb3JzLmVtaXQoZGlhZ25vc3RpY3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBKU09OIGxpbnRlclxuICAgKiBT4butIGThu6VuZyBKU09OLnBhcnNlIMSR4buDIHZhbGlkYXRlXG4gICAqL1xuICBjcmVhdGVKc29uTGludGVyKCk6IEV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIGxpbnRlcigodmlldykgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgZnJvbTogMCxcbiAgICAgICAgICB0bzogdGV4dC5sZW5ndGgsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogZ2V0KGVyciwgJ21lc3NhZ2UnLCAnJyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN5bnRheEVycm9ycy5lbWl0KGRpYWdub3N0aWNzKTtcbiAgICAgIHJldHVybiBkaWFnbm9zdGljcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBU4bqhbyBTUUwgbGludGVyXG4gICAqL1xuICBjcmVhdGVTcWxMaW50ZXIoKTogRXh0ZW5zaW9uIHtcbiAgICByZXR1cm4gbGludGVyKCh2aWV3KSA9PiB7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgICBjb25zdCBkb2MgPSB2aWV3LnN0YXRlLmRvYztcbiAgICAgIGNvbnN0IHRyZWUgPSBzeW50YXhUcmVlKHZpZXcuc3RhdGUpO1xuXG4gICAgICB0cmVlLml0ZXJhdGUoe1xuICAgICAgICBlbnRlcjogKG5vZGU6IFN5bnRheE5vZGVSZWYpID0+IHtcbiAgICAgICAgICBpZiAoIW5vZGUudHlwZS5pc0Vycm9yKSByZXR1cm47XG5cbiAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAgICAgIGZyb206IE1hdGgubWF4KDAsIG5vZGUuZnJvbSAtIDEpLFxuICAgICAgICAgICAgdG86IG5vZGUuZnJvbSxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5idWlsZFNxbEVycm9yTWVzc2FnZShkb2MsIG5vZGUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3ludGF4RXJyb3JzLmVtaXQoZGlhZ25vc3RpY3MpO1xuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNxbEVycm9yTWVzc2FnZShkb2M6IFRleHQsIG5vZGU6IFN5bnRheE5vZGVSZWYpOiBzdHJpbmcge1xuICAgIGlmIChub2RlLmZyb20gIT09IG5vZGUudG8pIHtcbiAgICAgIGNvbnN0IHRleHQgPSBkb2Muc2xpY2VTdHJpbmcobm9kZS5mcm9tLCBub2RlLnRvKTtcbiAgICAgIHJldHVybiBgU1FMIHN5bnRheCBlcnJvciBuZWFyIFwiJHt0ZXh0fVwiYDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2VG9rZW4gPSB0aGlzLmdldFRva2VuQmVmb3JlKGRvYywgbm9kZS5mcm9tKTtcblxuICAgIGlmICghcHJldlRva2VuKSB7XG4gICAgICByZXR1cm4gJ1NRTCBzeW50YXggZXJyb3IgYXQgYmVnaW5uaW5nIG9mIHN0YXRlbWVudCc7XG4gICAgfVxuXG4gICAgaWYgKC9GUk9NJC9pLnRlc3QocHJldlRva2VuKSkge1xuICAgICAgcmV0dXJuICdFeHBlY3RlZCB0YWJsZSBuYW1lIGFmdGVyIEZST00nO1xuICAgIH1cblxuICAgIGlmICgvU0VMRUNUJC9pLnRlc3QocHJldlRva2VuKSkge1xuICAgICAgcmV0dXJuICdFeHBlY3RlZCBjb2x1bW4gbGlzdCBhZnRlciBTRUxFQ1QnO1xuICAgIH1cblxuICAgIGlmICgvV0hFUkUkL2kudGVzdChwcmV2VG9rZW4pKSB7XG4gICAgICByZXR1cm4gJ0V4cGVjdGVkIGNvbmRpdGlvbiBhZnRlciBXSEVSRSc7XG4gICAgfVxuXG4gICAgaWYgKC9cXCgkLy50ZXN0KHByZXZUb2tlbikpIHtcbiAgICAgIHJldHVybiAnTWlzc2luZyBjbG9zaW5nIFwiKVwiJztcbiAgICB9XG5cbiAgICByZXR1cm4gYFVuZXhwZWN0ZWQgZW5kIG9mIFNRTCBhZnRlciBcIiR7cHJldlRva2VufVwiYDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG9rZW5CZWZvcmUoZG9jOiBUZXh0LCBwb3M6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBwb3MgLSAzMCk7XG4gICAgY29uc3QgdGV4dCA9IGRvYy5zbGljZVN0cmluZyhzdGFydCwgcG9zKTtcblxuICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgvKFxcUyspXFxzKiQvKTtcbiAgICByZXR1cm4gbWF0Y2g/LlsxXSA/PyAnJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBST1RFQ1RFRCBNRVRIT0RTIC0gRXZlbnQgaGFuZGxlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNvcHkoKTogdm9pZCB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5jb250ZW50KCkgfHwgJycpO1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93Q29tcFR5cGVUZXh0SW5mbygnU2FvIGNow6lwIHRow6BuaCBjw7RuZycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJMaW5lV3JhcCgpOiB2b2lkIHtcbiAgICAvLyBM4bqleSBu4buZaSBkdW5nIG3hu5tpIG5o4bqldCB04burIGVkaXRvciBzYXUga2hpIMSRw6MgeMOzYSBuZXdsaW5lc1xuICAgIGNvbnN0IGN1cnJlbnRDb250ZW50ID0gdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LnN0YXRlLmRvYy50b1N0cmluZygpIHx8ICcnO1xuICAgIGlmICh0aGlzLmlzV3JhcCgpKSB7XG4gICAgICB0aGlzLmNvbnRlbnRTdGF0ZU5vV3JhcC5zZXQoY3VycmVudENvbnRlbnQpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkQ29udGVudCA9IHRoaXMuaXNXcmFwKCkgJiYgY3VycmVudENvbnRlbnQgPyBjdXJyZW50Q29udGVudC5yZXBsYWNlKC9cXG4vZywgJyAnKSA6IHRoaXMuY29udGVudFN0YXRlTm9XcmFwKCk7XG4gICAgdGhpcy5pc1dyYXAudXBkYXRlKCh2YWwpID0+ICF2YWwpO1xuXG4gICAgaWYgKGN1cnJlbnRDb250ZW50ICE9PSB1cGRhdGVkQ29udGVudCkge1xuICAgICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRpc3BhdGNoKHtcbiAgICAgICAgY2hhbmdlczogeyBmcm9tOiAwLCB0bzogY3VycmVudENvbnRlbnQubGVuZ3RoLCBpbnNlcnQ6IHVwZGF0ZWRDb250ZW50IH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBCYXRjaCBj4bqjIDIgZGlzcGF0Y2ggdGjDoG5oIDEgxJHhu4MgdOG7kWkgxrB1IHBlcmZvcm1hbmNlXG4gICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRpc3BhdGNoKHtcbiAgICAgIGVmZmVjdHM6IFt0aGlzLndyYXBDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZSh0aGlzLmlzV3JhcCgpID8gRWRpdG9yVmlldy5saW5lV3JhcHBpbmcgOiBbXSksIHRoaXMubGluZU51bWJlckNvbXBhcnRtZW50LnJlY29uZmlndXJlKHRoaXMuaXNXcmFwKCkgPyBsaW5lTnVtYmVycygpIDogW10pXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0S2V5KGRhdGE/OiBJRW1pdFNlbGVjdEtleSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZGF0YT8ua2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGFuZyA9IGRhdGEua2V5IGFzIFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQ7XG4gICAgdGhpcy5sYW5nU2VsZWN0ZWQuc2V0KG5ld0xhbmcpO1xuXG4gICAgLy8gTG9hZCBsYW5ndWFnZSB2w6AgbGludGVyIG3hu5tpXG4gICAgY29uc3QgW2xhbmd1YWdlRXh0ZW5zaW9uLCBsaW50ZXJFeHRlbnNpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZExhbmd1YWdlRXh0ZW5zaW9uKG5ld0xhbmcpLCB0aGlzLmxvYWRMaW50ZXJFeHRlbnNpb24obmV3TGFuZyldKTtcblxuICAgIC8vIFJlY29uZmlndXJlIHRoYXkgdsOsIHThuqFvIG3hu5tpIHN0YXRlIMSR4buDIGdp4buvIGzhuqFpIGRvY3VtZW50IGNvbnRlbnRcbiAgICB0aGlzLmVkaXRvclZpZXdJbnN0YW5jZT8uZGlzcGF0Y2goe1xuICAgICAgZWZmZWN0czogW3RoaXMubGFuZ3VhZ2VDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShsYW5ndWFnZUV4dGVuc2lvbiksIHRoaXMubGludGVyQ29tcGFydG1lbnQucmVjb25maWd1cmUobGludGVyRXh0ZW5zaW9uKV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCgpLFxuICAgICAgaXNXcmFwOiAhdGhpcy5pc1dyYXAoKSxcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmdTZWxlY3RlZCgpLFxuICAgICAgY29udGV4dENoYW5nZTogJ2xhbmd1YWdlJyxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImxpYnMtdWktcHJldmlldy1kYXRhLWNvbnRhaW5lciBmbGV4IGZsZXgtY29sIHctZnVsbCBoLWF1dG8gcm91bmRlZC1bOHB4XSBsaWJzLXVpLWJvcmRlci1nZW5lcmFsIHB4LVs4cHhdXCJcbiAgW3N0eWxlLi0tYmFja2dyb3VuZC1jb2xvcl09XCJiYWNrZ3JvdW5kKClcIlxuICBbY2xhc3MucHQtWzhweF1dPVwiIWhpZGRlbkFjdGlvbigpXCI+XG4gIEBpZiAoIWhpZGRlbkFjdGlvbigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGNvbnRlbnQtYmV0d2VlbiBjb2xvci1bIzZhNzM4M11cIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd25cbiAgICAgICAgY2xhc3NJbmNsdWRlPVwidy1bMjAwcHhdXCJcbiAgICAgICAgW2xpc3RDb25maWddPVwiY29uZmlnTG9hZERhdGFJc0h0dHBDb25maWcoKVwiXG4gICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiNVwiXG4gICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiFlZGl0YWJsZSgpIHx8ICFhY2NlcHRDaGFuZ2VMYW5nKClcIlxuICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0S2V5KCRldmVudClcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExhbmcoKSB8fCAnJ1wiXG4gICAgICAgICAgW3NpemVCdXR0b25dPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImVkaXRhYmxlKCkgJiYgYWNjZXB0Q2hhbmdlTGFuZygpID8gJ2xpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCcgOiAnJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtWzBweF0nICsgKGVkaXRhYmxlKCkgJiYgYWNjZXB0Q2hhbmdlTGFuZygpID8gJycgOiAnIXBvaW50ZXItZXZlbnRzLW5vbmUgIWN1cnNvci1kZWZhdWx0IGhvdmVyOiF0ZXh0LVsjNkE3MzgzXScpXCIgLz5cbiAgICAgIDwvbGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiaXNXcmFwKCkgPyAnaTE4bl9yZW1vdmVfbGluZV93cmFwJyA6ICdpMThuX2xpbmVfd3JhcCdcIlxuICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cImlzV3JhcCgpID8gJ2xpYnMtdWktaWNvbi11bndyYXAnIDogJ2xpYnMtdWktaWNvbi13cmFwJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbW8tbGliLXAtMHB4IG1vLWxpYi1tci0xNnB4J1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJMaW5lV3JhcCgpXCIgLz5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9jb3B5J1wiXG4gICAgICAgICAgW3NpemVCdXR0b25dPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1jb3B5J1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInbW8tbGliLXAtMHB4J1wiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJDb3B5KClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbiAgPGRpdiAjY29udGFpbmVyUHJldmlldz48L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -492,7 +492,7 @@ class LibsUiComponentsPreviewTextDataComponent {
|
|
|
492
492
|
});
|
|
493
493
|
}
|
|
494
494
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
495
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPreviewTextDataComponent, isStandalone: true, selector: "libs_ui-components-preview_text_data", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, langSelected: { classPropertyName: "langSelected", publicName: "langSelected", isSignal: true, isRequired: true, transformFunction: null }, langsAccept: { classPropertyName: "langsAccept", publicName: "langsAccept", isSignal: true, isRequired: false, transformFunction: null }, langsChangeLabel: { classPropertyName: "langsChangeLabel", publicName: "langsChangeLabel", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, hiddenAction: { classPropertyName: "hiddenAction", publicName: "hiddenAction", isSignal: true, isRequired: false, transformFunction: null }, lintIgnorePatterns: { classPropertyName: "lintIgnorePatterns", publicName: "lintIgnorePatterns", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { langSelected: "langSelectedChange", outChange: "outChange", syntaxErrors: "syntaxErrors" }, viewQueries: [{ propertyName: "containerPreview", first: true, predicate: ["containerPreview"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
495
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPreviewTextDataComponent, isStandalone: true, selector: "libs_ui-components-preview_text_data", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, langSelected: { classPropertyName: "langSelected", publicName: "langSelected", isSignal: true, isRequired: true, transformFunction: null }, langsAccept: { classPropertyName: "langsAccept", publicName: "langsAccept", isSignal: true, isRequired: false, transformFunction: null }, langsChangeLabel: { classPropertyName: "langsChangeLabel", publicName: "langsChangeLabel", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, hiddenAction: { classPropertyName: "hiddenAction", publicName: "hiddenAction", isSignal: true, isRequired: false, transformFunction: null }, lintIgnorePatterns: { classPropertyName: "lintIgnorePatterns", publicName: "lintIgnorePatterns", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { langSelected: "langSelectedChange", outChange: "outChange", syntaxErrors: "syntaxErrors" }, viewQueries: [{ propertyName: "containerPreview", first: true, predicate: ["containerPreview"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "dropdownTemplateRefNotSearchNoData", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
496
496
|
}
|
|
497
497
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, decorators: [{
|
|
498
498
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-preview-text-data.mjs","sources":["../../../../../libs-ui/components/preview-text-data/src/preview-text-data.define.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.html","../../../../../libs-ui/components/preview-text-data/src/libs-ui-components-preview-text-data.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { Extension } from '@codemirror/state';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IHttpRequestConfig, returnListObject } from '@libs-ui/services-http-request';\nimport { UtilsHttpParamsRequest } from '@libs-ui/utils';\nimport { LibsUiComponentsPreviewTextDataComponent } from './preview-text-data.component';\nimport { ILanguageOptions, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT } from './preview-text-data.interfaces';\n\n/**\n * Danh sách các ngôn ngữ được hỗ trợ\n * Sử dụng const array để tránh tạo mới mỗi lần truy cập\n */\nexport const optionsLangData: Array<ILanguageOptions> = [\n { id: 'text', label: 'Plain Text' },\n { id: 'javascript', label: 'JavaScript/TypeScript' },\n { id: 'html', label: 'HTML' },\n { id: 'css', label: 'CSS/SCSS/SASS' },\n { id: 'markdown', label: 'Markdown' },\n { id: 'json', label: 'JSON' },\n { id: 'sql', label: 'SQL' },\n { id: 'xml', label: 'XML' },\n { id: 'yaml', label: 'YAML' },\n { id: 'python', label: 'Python' },\n { id: 'java', label: 'Java' },\n { id: 'cpp', label: 'C/C++' },\n { id: 'php', label: 'PHP' },\n { id: 'go', label: 'Go' },\n] as const;\n\nexport const httpRequestConfigGetOptionsLang = (langsAccept?: Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>, langsChangeLabel?: ILanguageOptions): IListConfigItem => {\n const langs = [...optionsLangData].filter((item) => !langsAccept || !langsAccept.length || langsAccept.includes(item.id as PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT));\n\n langs.forEach((item) => ({\n id: item.id,\n label: langsChangeLabel?.label || item.label,\n }));\n\n return {\n type: 'text',\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(langs),\n functionName: 'list',\n argumentsValue: [new UtilsHttpParamsRequest({ fromObject: { page: 1, per_page: 40 } })],\n }),\n configTemplateText: signal({\n fieldKey: 'id',\n notUseVirtualScroll: true,\n }),\n };\n};\n\ntype T_LanguageLoader = () => Promise<Extension>;\ntype T_LinterLoader = (component: LibsUiComponentsPreviewTextDataComponent) => Promise<Extension>;\ninterface I_LanguageRegistryItem {\n loader: T_LanguageLoader;\n linter?: T_LinterLoader;\n}\n\nexport const languageRegistry: Record<string, I_LanguageRegistryItem> = {\n javascript: {\n loader: async () => {\n const { javascript } = await import('@codemirror/lang-javascript');\n return javascript({ jsx: true, typescript: true });\n },\n linter: async (component) => component.createJsLinter(),\n },\n html: {\n loader: async () => {\n const { html } = await import('@codemirror/lang-html');\n return html();\n },\n },\n css: {\n loader: async () => {\n const { css } = await import('@codemirror/lang-css');\n return css();\n },\n },\n markdown: {\n loader: async () => {\n const { markdown } = await import('@codemirror/lang-markdown');\n return markdown();\n },\n },\n json: {\n loader: async () => {\n const { json } = await import('@codemirror/lang-json');\n return json();\n },\n linter: async (component) => component.createJsonLinter(),\n },\n sql: {\n loader: async () => {\n const { sql } = await import('@codemirror/lang-sql');\n return sql();\n },\n linter: async (component) => component.createSqlLinter(),\n },\n xml: {\n loader: async () => {\n const { xml } = await import('@codemirror/lang-xml');\n return xml();\n },\n },\n yaml: {\n loader: async () => {\n const { yaml } = await import('@codemirror/lang-yaml');\n return yaml();\n },\n },\n python: {\n loader: async () => {\n const { python } = await import('@codemirror/lang-python');\n return python();\n },\n },\n java: {\n loader: async () => {\n const { java } = await import('@codemirror/lang-java');\n return java();\n },\n },\n cpp: {\n loader: async () => {\n const { cpp } = await import('@codemirror/lang-cpp');\n return cpp();\n },\n },\n php: {\n loader: async () => {\n const { php } = await import('@codemirror/lang-php');\n return php();\n },\n },\n go: {\n loader: async () => {\n const { go } = await import('@codemirror/lang-go');\n return go();\n },\n },\n};\n\n/**\n * Tạo default language extension cho plain text\n * Sử dụng khi ngôn ngữ không được hỗ trợ\n */\nexport const createDefaultLanguage = async (): Promise<Extension> => {\n const { StreamLanguage } = await import('@codemirror/language');\n return StreamLanguage.define({\n token(stream) {\n stream.skipToEnd();\n return null;\n },\n });\n};\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, input, model, OnInit, output, signal, viewChild } from '@angular/core';\nimport { syntaxTree } from '@codemirror/language';\nimport { Diagnostic, linter, lintGutter } from '@codemirror/lint';\nimport { Compartment, Extension, Text } from '@codemirror/state';\nimport { EditorView, lineNumbers, ViewUpdate } from '@codemirror/view';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { LibsUiNotificationService } from '@libs-ui/services-notification';\nimport { get } from '@libs-ui/utils';\nimport { basicSetup } from 'codemirror6';\nimport { createDefaultLanguage, httpRequestConfigGetOptionsLang, languageRegistry, optionsLangData } from './preview-text-data.define';\nimport { ILanguageOptions, IPreviewTextDataChange, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT } from './preview-text-data.interfaces';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-preview_text_data',\n templateUrl: './preview-text-data.component.html',\n styleUrls: ['./preview-text-data.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent],\n})\nexport class LibsUiComponentsPreviewTextDataComponent implements OnInit, AfterViewInit {\n // ==========================================================================\n // PRIVATE PROPERTIES\n // ==========================================================================\n\n private editorViewInstance?: EditorView;\n private readonly wrapCompartment = new Compartment();\n private readonly languageCompartment = new Compartment();\n private readonly lineNumberCompartment = new Compartment();\n private readonly linterCompartment = new Compartment();\n private contentStateNoWrap = signal('');\n\n /** Cache để tránh load lại language đã load */\n private readonly languageCache = new Map<string, Extension>();\n\n /** Flag để tránh update editor khi đang khởi tạo */\n private isInitialized = false;\n\n // ==========================================================================\n // INJECTED SERVICES\n // ==========================================================================\n\n private readonly notificationService = inject(LibsUiNotificationService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ==========================================================================\n // PROTECTED SIGNALS\n // ==========================================================================\n\n protected readonly isWrap = signal<boolean>(true);\n protected readonly configLoadDataIsHttpConfig = signal<IListConfigItem>(httpRequestConfigGetOptionsLang(undefined));\n protected readonly labelLang = computed(() => optionsLangData.find((item) => item.id === this.langSelected())?.label);\n protected readonly acceptChangeLang = computed(() => !(this.langSelected() && this.langsAccept()?.length === 1 && this.langsAccept()?.includes(this.langSelected())));\n\n // ==========================================================================\n // INPUTS\n // ==========================================================================\n\n readonly content = input<string, string | undefined>('', {\n transform: (value?: string) => value ?? '',\n });\n\n readonly langSelected = model.required<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>();\n readonly langsAccept = input<Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT> | undefined>();\n readonly langsChangeLabel = input<ILanguageOptions | undefined>();\n\n readonly editable = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n readonly hiddenAction = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n readonly lintIgnorePatterns = input<Array<string>, Array<string> | undefined>(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {\n transform: (value?: Array<string>) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],\n });\n\n readonly background = input<string, string | undefined>('#f8f9fa', {\n transform: (value?: string) => value ?? '#f8f9fa',\n });\n\n // ==========================================================================\n // OUTPUTS\n // ==========================================================================\n\n readonly outChange = output<IPreviewTextDataChange>();\n readonly syntaxErrors = output<Diagnostic[]>();\n\n // ==========================================================================\n // VIEW CHILDREN\n // ==========================================================================\n\n private readonly containerPreview = viewChild.required<ElementRef<HTMLDivElement>>('containerPreview');\n\n // ==========================================================================\n // CONSTRUCTOR - Setup effects\n // ==========================================================================\n\n constructor() {\n // Effect để sync content từ input vào editor\n effect(() => {\n const newContent = this.content();\n if (this.isInitialized && this.editorViewInstance) {\n const currentContent = this.editorViewInstance.state.doc.toString();\n if (newContent !== currentContent) {\n this.editorViewInstance.dispatch({\n changes: {\n from: 0,\n to: currentContent.length,\n insert: newContent,\n },\n });\n }\n }\n });\n\n // Cleanup khi component bị destroy\n this.destroyRef.onDestroy(() => {\n this.editorViewInstance?.destroy();\n this.languageCache.clear();\n });\n }\n\n // ==========================================================================\n // LIFECYCLE HOOKS\n // ==========================================================================\n\n ngOnInit(): void {\n if (this.langsAccept()?.length) {\n this.configLoadDataIsHttpConfig.set(httpRequestConfigGetOptionsLang(this.langsAccept(), this.langsChangeLabel()));\n }\n }\n\n async ngAfterViewInit(): Promise<void> {\n await this.initializeEditor();\n this.isInitialized = true;\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Editor initialization\n // ==========================================================================\n\n /**\n * Khởi tạo editor với các extensions cơ bản\n * Language được load async để tối ưu bundle size\n */\n private async initializeEditor(): Promise<void> {\n const languageExtension = await this.loadLanguageExtension(this.langSelected());\n const linterExtension = await this.loadLinterExtension(this.langSelected());\n\n this.editorViewInstance = new EditorView({\n doc: this.content(),\n parent: this.containerPreview().nativeElement,\n extensions: this.createExtensions(languageExtension, linterExtension),\n });\n }\n\n /**\n * Tạo danh sách extensions cho editor\n */\n private createExtensions(languageExtension: Extension, linterExtension: Extension): Extension[] {\n return [\n basicSetup,\n this.languageCompartment.of(languageExtension),\n this.linterCompartment.of(linterExtension),\n this.createLightTheme(),\n EditorView.editable.of(this.editable()),\n this.wrapCompartment.of(EditorView.lineWrapping),\n this.lineNumberCompartment.of(lineNumbers()),\n lintGutter(),\n this.createBracketTheme(),\n this.createUpdateListener(),\n ];\n }\n\n /**\n * Load language extension với caching\n * Mỗi language chỉ được load 1 lần\n */\n private async loadLanguageExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n\n const cached = this.languageCache.get(lowerLang);\n if (cached) {\n return cached;\n }\n const registryItem = languageRegistry[lowerLang];\n const extension = registryItem ? await registryItem.loader() : await createDefaultLanguage();\n\n this.languageCache.set(lowerLang, extension);\n return extension;\n }\n\n /**\n * Load linter extension nếu có\n */\n private async loadLinterExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n const registryItem = languageRegistry[lowerLang];\n\n if (registryItem?.linter) {\n return registryItem.linter(this);\n }\n\n return linter(() => []);\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Theme configuration\n // ==========================================================================\n\n private createLightTheme(): Extension {\n return EditorView.theme({\n '&': { backgroundColor: this.background(), color: '#333' },\n '.cm-content': { caretColor: '#111' },\n '.cm-activeLine': { backgroundColor: '#f0f0f0' },\n });\n }\n\n private createBracketTheme(): Extension {\n return EditorView.theme({\n '.cm-matchingBracket': {\n backgroundColor: 'rgba(100, 200, 255, 0.15)',\n border: '1px solid rgba(100, 200, 255, 0.4)',\n borderRadius: '3px',\n transition: 'all 0.2s ease',\n },\n '.cm-nonmatchingBracket': {\n backgroundColor: 'rgba(255, 100, 100, 0.15)',\n border: '1px solid rgba(255, 100, 100, 0.3)',\n borderRadius: '3px',\n },\n });\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Update listener\n // ==========================================================================\n\n private createUpdateListener(): Extension {\n return EditorView.updateListener.of((update: ViewUpdate) => {\n if (update.docChanged && this.editable()) {\n const newValue = update.state.doc.toString();\n this.outChange.emit({\n content: newValue,\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'content',\n });\n }\n });\n }\n\n // ==========================================================================\n // PUBLIC METHODS - Linter factories (được gọi từ registry)\n // ==========================================================================\n\n /**\n * Tạo JavaScript linter\n * Sử dụng Function constructor để validate syntax\n */\n createJsLinter(): Extension {\n return linter((view) => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n\n try {\n new Function(text);\n } catch (err: unknown) {\n const message = get(err, 'message', '');\n const shouldIgnore = this.lintIgnorePatterns().some((pattern) => message.includes(pattern));\n\n if (!shouldIgnore) {\n diagnostics.push({\n from: 0,\n to: text.length,\n severity: 'error',\n message,\n });\n this.syntaxErrors.emit(diagnostics);\n }\n }\n\n return diagnostics;\n });\n }\n\n /**\n * Tạo JSON linter\n * Sử dụng JSON.parse để validate\n */\n createJsonLinter(): Extension {\n return linter((view) => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n\n try {\n JSON.parse(text);\n } catch (err: unknown) {\n diagnostics.push({\n from: 0,\n to: text.length,\n severity: 'error',\n message: get(err, 'message', ''),\n });\n }\n\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /**\n * Tạo SQL linter\n */\n createSqlLinter(): Extension {\n return linter((view) => {\n const diagnostics: Diagnostic[] = [];\n const doc = view.state.doc;\n const tree = syntaxTree(view.state);\n\n tree.iterate({\n enter: (node: SyntaxNodeRef) => {\n if (!node.type.isError) return;\n\n diagnostics.push({\n from: Math.max(0, node.from - 1),\n to: node.from,\n severity: 'error',\n message: this.buildSqlErrorMessage(doc, node),\n });\n },\n });\n\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n private buildSqlErrorMessage(doc: Text, node: SyntaxNodeRef): string {\n if (node.from !== node.to) {\n const text = doc.sliceString(node.from, node.to);\n return `SQL syntax error near \"${text}\"`;\n }\n\n const prevToken = this.getTokenBefore(doc, node.from);\n\n if (!prevToken) {\n return 'SQL syntax error at beginning of statement';\n }\n\n if (/FROM$/i.test(prevToken)) {\n return 'Expected table name after FROM';\n }\n\n if (/SELECT$/i.test(prevToken)) {\n return 'Expected column list after SELECT';\n }\n\n if (/WHERE$/i.test(prevToken)) {\n return 'Expected condition after WHERE';\n }\n\n if (/\\($/.test(prevToken)) {\n return 'Missing closing \")\"';\n }\n\n return `Unexpected end of SQL after \"${prevToken}\"`;\n }\n\n private getTokenBefore(doc: Text, pos: number): string {\n const start = Math.max(0, pos - 30);\n const text = doc.sliceString(start, pos);\n\n const match = text.match(/(\\S+)\\s*$/);\n return match?.[1] ?? '';\n }\n\n // ==========================================================================\n // PROTECTED METHODS - Event handlers\n // ==========================================================================\n\n protected handlerCopy(): void {\n navigator.clipboard.writeText(this.content() || '');\n this.notificationService.showCompTypeTextInfo('Sao chép thành công');\n }\n\n protected handlerLineWrap(): void {\n // Lấy nội dung mới nhất từ editor sau khi đã xóa newlines\n const currentContent = this.editorViewInstance?.state.doc.toString() || '';\n if (this.isWrap()) {\n this.contentStateNoWrap.set(currentContent);\n }\n const updatedContent = this.isWrap() && currentContent ? currentContent.replace(/\\n/g, ' ') : this.contentStateNoWrap();\n this.isWrap.update((val) => !val);\n\n if (currentContent !== updatedContent) {\n this.editorViewInstance?.dispatch({\n changes: { from: 0, to: currentContent.length, insert: updatedContent },\n });\n }\n\n // Batch cả 2 dispatch thành 1 để tối ưu performance\n this.editorViewInstance?.dispatch({\n effects: [this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []), this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [])],\n });\n }\n\n protected async handlerSelectKey(data?: IEmitSelectKey): Promise<void> {\n if (!data?.key) {\n return;\n }\n\n const newLang = data.key as PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT;\n this.langSelected.set(newLang);\n\n // Load language và linter mới\n const [languageExtension, linterExtension] = await Promise.all([this.loadLanguageExtension(newLang), this.loadLinterExtension(newLang)]);\n\n // Reconfigure thay vì tạo mới state để giữ lại document content\n this.editorViewInstance?.dispatch({\n effects: [this.languageCompartment.reconfigure(languageExtension), this.linterCompartment.reconfigure(linterExtension)],\n });\n\n this.outChange.emit({\n content: this.content(),\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'language',\n });\n }\n}\n","<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-preview-text-data.mjs","sources":["../../../../../libs-ui/components/preview-text-data/src/preview-text-data.define.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.html","../../../../../libs-ui/components/preview-text-data/src/libs-ui-components-preview-text-data.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { Extension } from '@codemirror/state';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IHttpRequestConfig, returnListObject } from '@libs-ui/services-http-request';\nimport { UtilsHttpParamsRequest } from '@libs-ui/utils';\nimport { LibsUiComponentsPreviewTextDataComponent } from './preview-text-data.component';\nimport { ILanguageOptions, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT } from './preview-text-data.interfaces';\n\n/**\n * Danh sách các ngôn ngữ được hỗ trợ\n * Sử dụng const array để tránh tạo mới mỗi lần truy cập\n */\nexport const optionsLangData: Array<ILanguageOptions> = [\n { id: 'text', label: 'Plain Text' },\n { id: 'javascript', label: 'JavaScript/TypeScript' },\n { id: 'html', label: 'HTML' },\n { id: 'css', label: 'CSS/SCSS/SASS' },\n { id: 'markdown', label: 'Markdown' },\n { id: 'json', label: 'JSON' },\n { id: 'sql', label: 'SQL' },\n { id: 'xml', label: 'XML' },\n { id: 'yaml', label: 'YAML' },\n { id: 'python', label: 'Python' },\n { id: 'java', label: 'Java' },\n { id: 'cpp', label: 'C/C++' },\n { id: 'php', label: 'PHP' },\n { id: 'go', label: 'Go' },\n] as const;\n\nexport const httpRequestConfigGetOptionsLang = (langsAccept?: Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>, langsChangeLabel?: ILanguageOptions): IListConfigItem => {\n const langs = [...optionsLangData].filter((item) => !langsAccept || !langsAccept.length || langsAccept.includes(item.id as PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT));\n\n langs.forEach((item) => ({\n id: item.id,\n label: langsChangeLabel?.label || item.label,\n }));\n\n return {\n type: 'text',\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(langs),\n functionName: 'list',\n argumentsValue: [new UtilsHttpParamsRequest({ fromObject: { page: 1, per_page: 40 } })],\n }),\n configTemplateText: signal({\n fieldKey: 'id',\n notUseVirtualScroll: true,\n }),\n };\n};\n\ntype T_LanguageLoader = () => Promise<Extension>;\ntype T_LinterLoader = (component: LibsUiComponentsPreviewTextDataComponent) => Promise<Extension>;\ninterface I_LanguageRegistryItem {\n loader: T_LanguageLoader;\n linter?: T_LinterLoader;\n}\n\nexport const languageRegistry: Record<string, I_LanguageRegistryItem> = {\n javascript: {\n loader: async () => {\n const { javascript } = await import('@codemirror/lang-javascript');\n return javascript({ jsx: true, typescript: true });\n },\n linter: async (component) => component.createJsLinter(),\n },\n html: {\n loader: async () => {\n const { html } = await import('@codemirror/lang-html');\n return html();\n },\n },\n css: {\n loader: async () => {\n const { css } = await import('@codemirror/lang-css');\n return css();\n },\n },\n markdown: {\n loader: async () => {\n const { markdown } = await import('@codemirror/lang-markdown');\n return markdown();\n },\n },\n json: {\n loader: async () => {\n const { json } = await import('@codemirror/lang-json');\n return json();\n },\n linter: async (component) => component.createJsonLinter(),\n },\n sql: {\n loader: async () => {\n const { sql } = await import('@codemirror/lang-sql');\n return sql();\n },\n linter: async (component) => component.createSqlLinter(),\n },\n xml: {\n loader: async () => {\n const { xml } = await import('@codemirror/lang-xml');\n return xml();\n },\n },\n yaml: {\n loader: async () => {\n const { yaml } = await import('@codemirror/lang-yaml');\n return yaml();\n },\n },\n python: {\n loader: async () => {\n const { python } = await import('@codemirror/lang-python');\n return python();\n },\n },\n java: {\n loader: async () => {\n const { java } = await import('@codemirror/lang-java');\n return java();\n },\n },\n cpp: {\n loader: async () => {\n const { cpp } = await import('@codemirror/lang-cpp');\n return cpp();\n },\n },\n php: {\n loader: async () => {\n const { php } = await import('@codemirror/lang-php');\n return php();\n },\n },\n go: {\n loader: async () => {\n const { go } = await import('@codemirror/lang-go');\n return go();\n },\n },\n};\n\n/**\n * Tạo default language extension cho plain text\n * Sử dụng khi ngôn ngữ không được hỗ trợ\n */\nexport const createDefaultLanguage = async (): Promise<Extension> => {\n const { StreamLanguage } = await import('@codemirror/language');\n return StreamLanguage.define({\n token(stream) {\n stream.skipToEnd();\n return null;\n },\n });\n};\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, input, model, OnInit, output, signal, viewChild } from '@angular/core';\nimport { syntaxTree } from '@codemirror/language';\nimport { Diagnostic, linter, lintGutter } from '@codemirror/lint';\nimport { Compartment, Extension, Text } from '@codemirror/state';\nimport { EditorView, lineNumbers, ViewUpdate } from '@codemirror/view';\nimport type { SyntaxNodeRef } from '@lezer/common';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { LibsUiNotificationService } from '@libs-ui/services-notification';\nimport { get } from '@libs-ui/utils';\nimport { basicSetup } from 'codemirror6';\nimport { createDefaultLanguage, httpRequestConfigGetOptionsLang, languageRegistry, optionsLangData } from './preview-text-data.define';\nimport { ILanguageOptions, IPreviewTextDataChange, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT } from './preview-text-data.interfaces';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-preview_text_data',\n templateUrl: './preview-text-data.component.html',\n styleUrls: ['./preview-text-data.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent],\n})\nexport class LibsUiComponentsPreviewTextDataComponent implements OnInit, AfterViewInit {\n // ==========================================================================\n // PRIVATE PROPERTIES\n // ==========================================================================\n\n private editorViewInstance?: EditorView;\n private readonly wrapCompartment = new Compartment();\n private readonly languageCompartment = new Compartment();\n private readonly lineNumberCompartment = new Compartment();\n private readonly linterCompartment = new Compartment();\n private contentStateNoWrap = signal('');\n\n /** Cache để tránh load lại language đã load */\n private readonly languageCache = new Map<string, Extension>();\n\n /** Flag để tránh update editor khi đang khởi tạo */\n private isInitialized = false;\n\n // ==========================================================================\n // INJECTED SERVICES\n // ==========================================================================\n\n private readonly notificationService = inject(LibsUiNotificationService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ==========================================================================\n // PROTECTED SIGNALS\n // ==========================================================================\n\n protected readonly isWrap = signal<boolean>(true);\n protected readonly configLoadDataIsHttpConfig = signal<IListConfigItem>(httpRequestConfigGetOptionsLang(undefined));\n protected readonly labelLang = computed(() => optionsLangData.find((item) => item.id === this.langSelected())?.label);\n protected readonly acceptChangeLang = computed(() => !(this.langSelected() && this.langsAccept()?.length === 1 && this.langsAccept()?.includes(this.langSelected())));\n\n // ==========================================================================\n // INPUTS\n // ==========================================================================\n\n readonly content = input<string, string | undefined>('', {\n transform: (value?: string) => value ?? '',\n });\n\n readonly langSelected = model.required<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>();\n readonly langsAccept = input<Array<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT> | undefined>();\n readonly langsChangeLabel = input<ILanguageOptions | undefined>();\n\n readonly editable = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n readonly hiddenAction = input<boolean, boolean | undefined>(false, {\n transform: (value?: boolean) => value ?? false,\n });\n\n readonly lintIgnorePatterns = input<Array<string>, Array<string> | undefined>(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {\n transform: (value?: Array<string>) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],\n });\n\n readonly background = input<string, string | undefined>('#f8f9fa', {\n transform: (value?: string) => value ?? '#f8f9fa',\n });\n\n // ==========================================================================\n // OUTPUTS\n // ==========================================================================\n\n readonly outChange = output<IPreviewTextDataChange>();\n readonly syntaxErrors = output<Diagnostic[]>();\n\n // ==========================================================================\n // VIEW CHILDREN\n // ==========================================================================\n\n private readonly containerPreview = viewChild.required<ElementRef<HTMLDivElement>>('containerPreview');\n\n // ==========================================================================\n // CONSTRUCTOR - Setup effects\n // ==========================================================================\n\n constructor() {\n // Effect để sync content từ input vào editor\n effect(() => {\n const newContent = this.content();\n if (this.isInitialized && this.editorViewInstance) {\n const currentContent = this.editorViewInstance.state.doc.toString();\n if (newContent !== currentContent) {\n this.editorViewInstance.dispatch({\n changes: {\n from: 0,\n to: currentContent.length,\n insert: newContent,\n },\n });\n }\n }\n });\n\n // Cleanup khi component bị destroy\n this.destroyRef.onDestroy(() => {\n this.editorViewInstance?.destroy();\n this.languageCache.clear();\n });\n }\n\n // ==========================================================================\n // LIFECYCLE HOOKS\n // ==========================================================================\n\n ngOnInit(): void {\n if (this.langsAccept()?.length) {\n this.configLoadDataIsHttpConfig.set(httpRequestConfigGetOptionsLang(this.langsAccept(), this.langsChangeLabel()));\n }\n }\n\n async ngAfterViewInit(): Promise<void> {\n await this.initializeEditor();\n this.isInitialized = true;\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Editor initialization\n // ==========================================================================\n\n /**\n * Khởi tạo editor với các extensions cơ bản\n * Language được load async để tối ưu bundle size\n */\n private async initializeEditor(): Promise<void> {\n const languageExtension = await this.loadLanguageExtension(this.langSelected());\n const linterExtension = await this.loadLinterExtension(this.langSelected());\n\n this.editorViewInstance = new EditorView({\n doc: this.content(),\n parent: this.containerPreview().nativeElement,\n extensions: this.createExtensions(languageExtension, linterExtension),\n });\n }\n\n /**\n * Tạo danh sách extensions cho editor\n */\n private createExtensions(languageExtension: Extension, linterExtension: Extension): Extension[] {\n return [\n basicSetup,\n this.languageCompartment.of(languageExtension),\n this.linterCompartment.of(linterExtension),\n this.createLightTheme(),\n EditorView.editable.of(this.editable()),\n this.wrapCompartment.of(EditorView.lineWrapping),\n this.lineNumberCompartment.of(lineNumbers()),\n lintGutter(),\n this.createBracketTheme(),\n this.createUpdateListener(),\n ];\n }\n\n /**\n * Load language extension với caching\n * Mỗi language chỉ được load 1 lần\n */\n private async loadLanguageExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n\n const cached = this.languageCache.get(lowerLang);\n if (cached) {\n return cached;\n }\n const registryItem = languageRegistry[lowerLang];\n const extension = registryItem ? await registryItem.loader() : await createDefaultLanguage();\n\n this.languageCache.set(lowerLang, extension);\n return extension;\n }\n\n /**\n * Load linter extension nếu có\n */\n private async loadLinterExtension(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): Promise<Extension> {\n const lowerLang = lang.toLowerCase();\n const registryItem = languageRegistry[lowerLang];\n\n if (registryItem?.linter) {\n return registryItem.linter(this);\n }\n\n return linter(() => []);\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Theme configuration\n // ==========================================================================\n\n private createLightTheme(): Extension {\n return EditorView.theme({\n '&': { backgroundColor: this.background(), color: '#333' },\n '.cm-content': { caretColor: '#111' },\n '.cm-activeLine': { backgroundColor: '#f0f0f0' },\n });\n }\n\n private createBracketTheme(): Extension {\n return EditorView.theme({\n '.cm-matchingBracket': {\n backgroundColor: 'rgba(100, 200, 255, 0.15)',\n border: '1px solid rgba(100, 200, 255, 0.4)',\n borderRadius: '3px',\n transition: 'all 0.2s ease',\n },\n '.cm-nonmatchingBracket': {\n backgroundColor: 'rgba(255, 100, 100, 0.15)',\n border: '1px solid rgba(255, 100, 100, 0.3)',\n borderRadius: '3px',\n },\n });\n }\n\n // ==========================================================================\n // PRIVATE METHODS - Update listener\n // ==========================================================================\n\n private createUpdateListener(): Extension {\n return EditorView.updateListener.of((update: ViewUpdate) => {\n if (update.docChanged && this.editable()) {\n const newValue = update.state.doc.toString();\n this.outChange.emit({\n content: newValue,\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'content',\n });\n }\n });\n }\n\n // ==========================================================================\n // PUBLIC METHODS - Linter factories (được gọi từ registry)\n // ==========================================================================\n\n /**\n * Tạo JavaScript linter\n * Sử dụng Function constructor để validate syntax\n */\n createJsLinter(): Extension {\n return linter((view) => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n\n try {\n new Function(text);\n } catch (err: unknown) {\n const message = get(err, 'message', '');\n const shouldIgnore = this.lintIgnorePatterns().some((pattern) => message.includes(pattern));\n\n if (!shouldIgnore) {\n diagnostics.push({\n from: 0,\n to: text.length,\n severity: 'error',\n message,\n });\n this.syntaxErrors.emit(diagnostics);\n }\n }\n\n return diagnostics;\n });\n }\n\n /**\n * Tạo JSON linter\n * Sử dụng JSON.parse để validate\n */\n createJsonLinter(): Extension {\n return linter((view) => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n\n try {\n JSON.parse(text);\n } catch (err: unknown) {\n diagnostics.push({\n from: 0,\n to: text.length,\n severity: 'error',\n message: get(err, 'message', ''),\n });\n }\n\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n /**\n * Tạo SQL linter\n */\n createSqlLinter(): Extension {\n return linter((view) => {\n const diagnostics: Diagnostic[] = [];\n const doc = view.state.doc;\n const tree = syntaxTree(view.state);\n\n tree.iterate({\n enter: (node: SyntaxNodeRef) => {\n if (!node.type.isError) return;\n\n diagnostics.push({\n from: Math.max(0, node.from - 1),\n to: node.from,\n severity: 'error',\n message: this.buildSqlErrorMessage(doc, node),\n });\n },\n });\n\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n private buildSqlErrorMessage(doc: Text, node: SyntaxNodeRef): string {\n if (node.from !== node.to) {\n const text = doc.sliceString(node.from, node.to);\n return `SQL syntax error near \"${text}\"`;\n }\n\n const prevToken = this.getTokenBefore(doc, node.from);\n\n if (!prevToken) {\n return 'SQL syntax error at beginning of statement';\n }\n\n if (/FROM$/i.test(prevToken)) {\n return 'Expected table name after FROM';\n }\n\n if (/SELECT$/i.test(prevToken)) {\n return 'Expected column list after SELECT';\n }\n\n if (/WHERE$/i.test(prevToken)) {\n return 'Expected condition after WHERE';\n }\n\n if (/\\($/.test(prevToken)) {\n return 'Missing closing \")\"';\n }\n\n return `Unexpected end of SQL after \"${prevToken}\"`;\n }\n\n private getTokenBefore(doc: Text, pos: number): string {\n const start = Math.max(0, pos - 30);\n const text = doc.sliceString(start, pos);\n\n const match = text.match(/(\\S+)\\s*$/);\n return match?.[1] ?? '';\n }\n\n // ==========================================================================\n // PROTECTED METHODS - Event handlers\n // ==========================================================================\n\n protected handlerCopy(): void {\n navigator.clipboard.writeText(this.content() || '');\n this.notificationService.showCompTypeTextInfo('Sao chép thành công');\n }\n\n protected handlerLineWrap(): void {\n // Lấy nội dung mới nhất từ editor sau khi đã xóa newlines\n const currentContent = this.editorViewInstance?.state.doc.toString() || '';\n if (this.isWrap()) {\n this.contentStateNoWrap.set(currentContent);\n }\n const updatedContent = this.isWrap() && currentContent ? currentContent.replace(/\\n/g, ' ') : this.contentStateNoWrap();\n this.isWrap.update((val) => !val);\n\n if (currentContent !== updatedContent) {\n this.editorViewInstance?.dispatch({\n changes: { from: 0, to: currentContent.length, insert: updatedContent },\n });\n }\n\n // Batch cả 2 dispatch thành 1 để tối ưu performance\n this.editorViewInstance?.dispatch({\n effects: [this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []), this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [])],\n });\n }\n\n protected async handlerSelectKey(data?: IEmitSelectKey): Promise<void> {\n if (!data?.key) {\n return;\n }\n\n const newLang = data.key as PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT;\n this.langSelected.set(newLang);\n\n // Load language và linter mới\n const [languageExtension, linterExtension] = await Promise.all([this.loadLanguageExtension(newLang), this.loadLinterExtension(newLang)]);\n\n // Reconfigure thay vì tạo mới state để giữ lại document content\n this.editorViewInstance?.dispatch({\n effects: [this.languageCompartment.reconfigure(languageExtension), this.linterCompartment.reconfigure(linterExtension)],\n });\n\n this.outChange.emit({\n content: this.content(),\n isWrap: !this.isWrap(),\n language: this.langSelected(),\n contextChange: 'language',\n });\n }\n}\n","<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig()\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable() || !acceptChangeLang()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() && acceptChangeLang() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() && acceptChangeLang() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAQA;;;AAGG;AACI,MAAM,eAAe,GAA4B;AACtD,IAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;AACnC,IAAA,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,uBAAuB,EAAE;AACpD,IAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7B,IAAA,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE;AACrC,IAAA,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACrC,IAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7B,IAAA,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC3B,IAAA,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC3B,IAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7B,IAAA,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACjC,IAAA,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7B,IAAA,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;AAC7B,IAAA,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC3B,IAAA,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;;MAGd,+BAA+B,GAAG,CAAC,WAAuD,EAAE,gBAAmC,KAAqB;AAC/J,IAAA,MAAM,KAAK,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAwC,CAAC,CAAC;IAE/J,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM;QACvB,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,QAAA,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK;AAC7C,KAAA,CAAC,CAAC;IAEH,OAAO;AACL,QAAA,IAAI,EAAE,MAAM;QACZ,eAAe,EAAE,MAAM,CAAqB;AAC1C,YAAA,cAAc,EAAE,gBAAgB,CAAC,KAAK,CAAC;AACvC,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,cAAc,EAAE,CAAC,IAAI,sBAAsB,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SACxF,CAAC;QACF,kBAAkB,EAAE,MAAM,CAAC;AACzB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,mBAAmB,EAAE,IAAI;SAC1B,CAAC;KACH;AACH;AASO,MAAM,gBAAgB,GAA2C;AACtE,IAAA,UAAU,EAAE;QACV,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,OAAO,6BAA6B,CAAC;AAClE,YAAA,OAAO,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,EAAE,OAAO,SAAS,KAAK,SAAS,CAAC,cAAc,EAAE;AACxD,KAAA;AACD,IAAA,IAAI,EAAE;QACJ,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,uBAAuB,CAAC;YACtD,OAAO,IAAI,EAAE;QACf,CAAC;AACF,KAAA;AACD,IAAA,GAAG,EAAE;QACH,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC;YACpD,OAAO,GAAG,EAAE;QACd,CAAC;AACF,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,2BAA2B,CAAC;YAC9D,OAAO,QAAQ,EAAE;QACnB,CAAC;AACF,KAAA;AACD,IAAA,IAAI,EAAE;QACJ,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,uBAAuB,CAAC;YACtD,OAAO,IAAI,EAAE;QACf,CAAC;QACD,MAAM,EAAE,OAAO,SAAS,KAAK,SAAS,CAAC,gBAAgB,EAAE;AAC1D,KAAA;AACD,IAAA,GAAG,EAAE;QACH,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC;YACpD,OAAO,GAAG,EAAE;QACd,CAAC;QACD,MAAM,EAAE,OAAO,SAAS,KAAK,SAAS,CAAC,eAAe,EAAE;AACzD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC;YACpD,OAAO,GAAG,EAAE;QACd,CAAC;AACF,KAAA;AACD,IAAA,IAAI,EAAE;QACJ,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,uBAAuB,CAAC;YACtD,OAAO,IAAI,EAAE;QACf,CAAC;AACF,KAAA;AACD,IAAA,MAAM,EAAE;QACN,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,yBAAyB,CAAC;YAC1D,OAAO,MAAM,EAAE;QACjB,CAAC;AACF,KAAA;AACD,IAAA,IAAI,EAAE;QACJ,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,uBAAuB,CAAC;YACtD,OAAO,IAAI,EAAE;QACf,CAAC;AACF,KAAA;AACD,IAAA,GAAG,EAAE;QACH,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC;YACpD,OAAO,GAAG,EAAE;QACd,CAAC;AACF,KAAA;AACD,IAAA,GAAG,EAAE;QACH,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC;YACpD,OAAO,GAAG,EAAE;QACd,CAAC;AACF,KAAA;AACD,IAAA,EAAE,EAAE;QACF,MAAM,EAAE,YAAW;YACjB,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,OAAO,qBAAqB,CAAC;YAClD,OAAO,EAAE,EAAE;QACb,CAAC;AACF,KAAA;;AAGH;;;AAGG;AACI,MAAM,qBAAqB,GAAG,YAA+B;IAClE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC;IAC/D,OAAO,cAAc,CAAC,MAAM,CAAC;AAC3B,QAAA,KAAK,CAAC,MAAM,EAAA;YACV,MAAM,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,IAAI;QACb,CAAC;AACF,KAAA,CAAC;AACJ;;MClIa,wCAAwC,CAAA;;;;AAK3C,IAAA,kBAAkB;AACT,IAAA,eAAe,GAAG,IAAI,WAAW,EAAE;AACnC,IAAA,mBAAmB,GAAG,IAAI,WAAW,EAAE;AACvC,IAAA,qBAAqB,GAAG,IAAI,WAAW,EAAE;AACzC,IAAA,iBAAiB,GAAG,IAAI,WAAW,EAAE;AAC9C,IAAA,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC;;AAGtB,IAAA,aAAa,GAAG,IAAI,GAAG,EAAqB;;IAGrD,aAAa,GAAG,KAAK;;;;AAMZ,IAAA,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACvD,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;;;AAM7B,IAAA,MAAM,GAAG,MAAM,CAAU,IAAI,CAAC;IAC9B,0BAA0B,GAAG,MAAM,CAAkB,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAChG,SAAS,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC;AAClG,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;;;;AAM5J,IAAA,OAAO,GAAG,KAAK,CAA6B,EAAE,EAAE;QACvD,SAAS,EAAE,CAAC,KAAc,KAAK,KAAK,IAAI,EAAE;AAC3C,KAAA,CAAC;AAEO,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAsC;IACnE,WAAW,GAAG,KAAK,EAAyD;IAC5E,gBAAgB,GAAG,KAAK,EAAgC;AAExD,IAAA,QAAQ,GAAG,KAAK,CAA+B,KAAK,EAAE;QAC7D,SAAS,EAAE,CAAC,KAAe,KAAK,KAAK,IAAI,KAAK;AAC/C,KAAA,CAAC;AAEO,IAAA,YAAY,GAAG,KAAK,CAA+B,KAAK,EAAE;QACjE,SAAS,EAAE,CAAC,KAAe,KAAK,KAAK,IAAI,KAAK;AAC/C,KAAA,CAAC;AAEO,IAAA,kBAAkB,GAAG,KAAK,CAA2C,CAAC,8CAA8C,EAAE,yBAAyB,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE;AACrL,QAAA,SAAS,EAAE,CAAC,KAAqB,KAAK,KAAK,IAAI,CAAC,8CAA8C,EAAE,yBAAyB,EAAE,SAAS,EAAE,eAAe,CAAC;AACvJ,KAAA,CAAC;AAEO,IAAA,UAAU,GAAG,KAAK,CAA6B,SAAS,EAAE;QACjE,SAAS,EAAE,CAAC,KAAc,KAAK,KAAK,IAAI,SAAS;AAClD,KAAA,CAAC;;;;IAMO,SAAS,GAAG,MAAM,EAA0B;IAC5C,YAAY,GAAG,MAAM,EAAgB;;;;AAM7B,IAAA,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAA6B,kBAAkB,CAAC;;;;AAMtG,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE;YACjC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACjD,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;AACnE,gBAAA,IAAI,UAAU,KAAK,cAAc,EAAE;AACjC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAC/B,wBAAA,OAAO,EAAE;AACP,4BAAA,IAAI,EAAE,CAAC;4BACP,EAAE,EAAE,cAAc,CAAC,MAAM;AACzB,4BAAA,MAAM,EAAE,UAAU;AACnB,yBAAA;AACF,qBAAA,CAAC;gBACJ;YACF;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;;;;IAMA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,+BAA+B,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACnH;IACF;AAEA,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC3B;;;;AAMA;;;AAGG;AACK,IAAA,MAAM,gBAAgB,GAAA;AAC5B,QAAA,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/E,QAAA,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAE3E,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,UAAU,CAAC;AACvC,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa;YAC7C,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,eAAe,CAAC;AACtE,SAAA,CAAC;IACJ;AAEA;;AAEG;IACK,gBAAgB,CAAC,iBAA4B,EAAE,eAA0B,EAAA;QAC/E,OAAO;YACL,UAAU;AACV,YAAA,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,iBAAiB,CAAC;AAC9C,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,eAAe,CAAC;YAC1C,IAAI,CAAC,gBAAgB,EAAE;YACvB,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;AAChD,YAAA,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;AAC5C,YAAA,UAAU,EAAE;YACZ,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,oBAAoB,EAAE;SAC5B;IACH;AAEA;;;AAGG;IACK,MAAM,qBAAqB,CAAC,IAAwC,EAAA;AAC1E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;QAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;QAChD,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;AACA,QAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,GAAG,MAAM,qBAAqB,EAAE;QAE5F,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;AAC5C,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;IACK,MAAM,mBAAmB,CAAC,IAAwC,EAAA;AACxE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE;AACpC,QAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC;AAEhD,QAAA,IAAI,YAAY,EAAE,MAAM,EAAE;AACxB,YAAA,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC;AAEA,QAAA,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;IACzB;;;;IAMQ,gBAAgB,GAAA;QACtB,OAAO,UAAU,CAAC,KAAK,CAAC;AACtB,YAAA,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;AAC1D,YAAA,aAAa,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;AACrC,YAAA,gBAAgB,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE;AACjD,SAAA,CAAC;IACJ;IAEQ,kBAAkB,GAAA;QACxB,OAAO,UAAU,CAAC,KAAK,CAAC;AACtB,YAAA,qBAAqB,EAAE;AACrB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,MAAM,EAAE,oCAAoC;AAC5C,gBAAA,YAAY,EAAE,KAAK;AACnB,gBAAA,UAAU,EAAE,eAAe;AAC5B,aAAA;AACD,YAAA,wBAAwB,EAAE;AACxB,gBAAA,eAAe,EAAE,2BAA2B;AAC5C,gBAAA,MAAM,EAAE,oCAAoC;AAC5C,gBAAA,YAAY,EAAE,KAAK;AACpB,aAAA;AACF,SAAA,CAAC;IACJ;;;;IAMQ,oBAAoB,GAAA;QAC1B,OAAO,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAkB,KAAI;YACzD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;AAC5C,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;AACtB,oBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC7B,oBAAA,aAAa,EAAE,SAAS;AACzB,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;;;;AAMA;;;AAGG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,MAAM,CAAC,CAAC,IAAI,KAAI;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;YACtC,MAAM,WAAW,GAAiB,EAAE;AAEpC,YAAA,IAAI;AACF,gBAAA,IAAI,QAAQ,CAAC,IAAI,CAAC;YACpB;YAAE,OAAO,GAAY,EAAE;gBACrB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;gBACvC,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAE3F,IAAI,CAAC,YAAY,EAAE;oBACjB,WAAW,CAAC,IAAI,CAAC;AACf,wBAAA,IAAI,EAAE,CAAC;wBACP,EAAE,EAAE,IAAI,CAAC,MAAM;AACf,wBAAA,QAAQ,EAAE,OAAO;wBACjB,OAAO;AACR,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;gBACrC;YACF;AAEA,YAAA,OAAO,WAAW;AACpB,QAAA,CAAC,CAAC;IACJ;AAEA;;;AAGG;IACH,gBAAgB,GAAA;AACd,QAAA,OAAO,MAAM,CAAC,CAAC,IAAI,KAAI;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;YACtC,MAAM,WAAW,GAAiB,EAAE;AAEpC,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAClB;YAAE,OAAO,GAAY,EAAE;gBACrB,WAAW,CAAC,IAAI,CAAC;AACf,oBAAA,IAAI,EAAE,CAAC;oBACP,EAAE,EAAE,IAAI,CAAC,MAAM;AACf,oBAAA,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;AACjC,iBAAA,CAAC;YACJ;AAEA,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,YAAA,OAAO,WAAW;AACpB,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACH,eAAe,GAAA;AACb,QAAA,OAAO,MAAM,CAAC,CAAC,IAAI,KAAI;YACrB,MAAM,WAAW,GAAiB,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;YAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC;AACX,gBAAA,KAAK,EAAE,CAAC,IAAmB,KAAI;AAC7B,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;wBAAE;oBAExB,WAAW,CAAC,IAAI,CAAC;AACf,wBAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;wBAChC,EAAE,EAAE,IAAI,CAAC,IAAI;AACb,wBAAA,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC;AAC9C,qBAAA,CAAC;gBACJ,CAAC;AACF,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,YAAA,OAAO,WAAW;AACpB,QAAA,CAAC,CAAC;IACJ;IAEQ,oBAAoB,CAAC,GAAS,EAAE,IAAmB,EAAA;QACzD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,CAAG;QAC1C;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;QAErD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,4CAA4C;QACrD;AAEA,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,OAAO,gCAAgC;QACzC;AAEA,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC9B,YAAA,OAAO,mCAAmC;QAC5C;AAEA,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC7B,YAAA,OAAO,gCAAgC;QACzC;AAEA,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACzB,YAAA,OAAO,qBAAqB;QAC9B;QAEA,OAAO,CAAA,6BAAA,EAAgC,SAAS,CAAA,CAAA,CAAG;IACrD;IAEQ,cAAc,CAAC,GAAS,EAAE,GAAW,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AACrC,QAAA,OAAO,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE;IACzB;;;;IAMU,WAAW,GAAA;AACnB,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;IACtE;IAEU,eAAe,GAAA;;AAEvB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE;AAC1E,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC;QAC7C;QACA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACvH,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;AAEjC,QAAA,IAAI,cAAc,KAAK,cAAc,EAAE;AACrC,YAAA,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AAChC,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE;AACxE,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;YAChC,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,YAAY,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;AACtK,SAAA,CAAC;IACJ;IAEU,MAAM,gBAAgB,CAAC,IAAqB,EAAA;AACpD,QAAA,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YACd;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAyC;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;;QAG9B,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;;AAGxI,QAAA,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC;AAChC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AACxH,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;AAC7B,YAAA,aAAa,EAAE,UAAU;AAC1B,SAAA,CAAC;IACJ;wGA3ZW,wCAAwC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wCAAwC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBrD,q4DAyCA,EAAA,MAAA,EAAA,CAAA,4zBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnBY,iCAAiC,u3DAAE,sCAAsC,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,yBAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,mCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAExE,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBATpD,SAAS;+BAEE,sCAAsC,EAAA,UAAA,EAGpC,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,iCAAiC,EAAE,sCAAsC,CAAC,EAAA,QAAA,EAAA,q4DAAA,EAAA,MAAA,EAAA,CAAA,4zBAAA,CAAA,EAAA;;;AEtBtF;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-preview-text-data",
|
|
3
|
-
"version": "0.2.356-
|
|
3
|
+
"version": "0.2.356-5",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
|
-
"@libs-ui/components-buttons-button": "0.2.356-
|
|
7
|
-
"@libs-ui/components-dropdown": "0.2.356-
|
|
8
|
-
"@libs-ui/services-notification": "0.2.356-
|
|
9
|
-
"@libs-ui/utils": "0.2.356-
|
|
6
|
+
"@libs-ui/components-buttons-button": "0.2.356-5",
|
|
7
|
+
"@libs-ui/components-dropdown": "0.2.356-5",
|
|
8
|
+
"@libs-ui/services-notification": "0.2.356-5",
|
|
9
|
+
"@libs-ui/utils": "0.2.356-5"
|
|
10
10
|
},
|
|
11
11
|
"sideEffects": false,
|
|
12
12
|
"module": "fesm2022/libs-ui-components-preview-text-data.mjs",
|