@libs-ui/components-inputs-multi-language 0.2.320-0 → 0.2.321-0

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.
@@ -352,7 +352,7 @@ export class LibsUiComponentsInputsMultiLanguageComponent {
352
352
  this.onDestroy.complete();
353
353
  }
354
354
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsMultiLanguageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
355
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsMultiLanguageComponent, isStandalone: true, selector: "libs_ui-components-inputs-multi_language", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, viewType: { classPropertyName: "viewType", publicName: "viewType", isSignal: true, isRequired: false, transformFunction: null }, singleLanguage: { classPropertyName: "singleLanguage", publicName: "singleLanguage", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, ignoreAdd: { classPropertyName: "ignoreAdd", publicName: "ignoreAdd", isSignal: true, isRequired: false, transformFunction: null }, titleField: { classPropertyName: "titleField", publicName: "titleField", isSignal: true, isRequired: false, transformFunction: null }, keyHeader: { classPropertyName: "keyHeader", publicName: "keyHeader", isSignal: true, isRequired: false, transformFunction: null }, textArea: { classPropertyName: "textArea", publicName: "textArea", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, extendClass: { classPropertyName: "extendClass", publicName: "extendClass", isSignal: true, isRequired: false, transformFunction: null }, extendClassContent: { classPropertyName: "extendClassContent", publicName: "extendClassContent", isSignal: true, isRequired: false, transformFunction: null }, viewPosition: { classPropertyName: "viewPosition", publicName: "viewPosition", isSignal: true, isRequired: false, transformFunction: null }, ignoreRemove: { classPropertyName: "ignoreRemove", publicName: "ignoreRemove", isSignal: true, isRequired: false, transformFunction: null }, validMaxLength: { classPropertyName: "validMaxLength", publicName: "validMaxLength", isSignal: true, isRequired: false, transformFunction: null }, validMinLength: { classPropertyName: "validMinLength", publicName: "validMinLength", isSignal: true, isRequired: false, transformFunction: null }, countCharacters: { classPropertyName: "countCharacters", publicName: "countCharacters", isSignal: true, isRequired: false, transformFunction: null }, viewContent: { classPropertyName: "viewContent", publicName: "viewContent", isSignal: true, isRequired: false, transformFunction: null }, classIncludeKey: { classPropertyName: "classIncludeKey", publicName: "classIncludeKey", isSignal: true, isRequired: false, transformFunction: null }, classIncludeValue: { classPropertyName: "classIncludeValue", publicName: "classIncludeValue", isSignal: true, isRequired: false, transformFunction: null }, dataLanguage: { classPropertyName: "dataLanguage", publicName: "dataLanguage", isSignal: true, isRequired: false, transformFunction: null }, multiLine: { classPropertyName: "multiLine", publicName: "multiLine", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "dataChange", ignoreAdd: "ignoreAddChange", extendClass: "extendClassChange", dataLanguage: "dataLanguageChange", outEventMultiLanguage: "outEventMultiLanguage", outChangeTypeLanguage: "outChangeTypeLanguage", outFunctionsControl: "outFunctionsControl", outChangeValueInput: "outChangeValueInput" }, ngImport: i0, template: "<div class=\"w-full\">\n @if (titleField(); as titleField) {\n <div class=\"libs-ui-font-h6m mb-[4px]\">{{ titleField | translate }}</div>\n }\n @for (key of languageDisplay(); track key) {\n @if (!viewContent()) {\n <div\n [class.mt-[4px]]=\"!$first\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[8px]]=\"countCharacters() && !$first\">\n <div class=\"flex {{ extendClass() }}\">\n @if (!singleLanguage()) {\n <div>\n <libs_ui-components-dropdown\n [listConfig]=\"listConfigItem()\"\n [httpRequestDetailItemById]=\"httpRequestDetail()\"\n [listKeysDisable]=\"languageDisplay() | LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe: key\"\n [readonly]=\"$index === 0 || readonly()\"\n [listKeySelected]=\"key\"\n [zIndex]=\"zIndex()\"\n [classInclude]=\"'w-[150px]'\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectChange($event, key)\" />\n </div>\n }\n <div\n class=\"flex relative p-0 {{ extendClassContent() }}\"\n [class.w-[calc(100%-150px)]]=\"!textArea() && !singleLanguage() && viewPosition() === 'row'\"\n [class.w-full]=\"textArea() || singleLanguage() || viewPosition() === 'column'\">\n @for (item of data(); track item) {\n @if ((item.type !== 'editor' && !item.isOneValue) || (item.isOneValue && $first)) {\n <div\n class=\"relative {{ item.classIncludeInput }}\"\n [class.w-full]=\"(singleLanguage() && !multiLine()) || readonly() || $first\"\n [class.w-[calc(100%-28px)]]=\"textArea() || (!singleLanguage() && multiLine())\"\n [class.w-[calc(100%-40px)]]=\"!textArea() && !singleLanguage() && !multiLine() && !readonly()\"\n [class.w-[calc(100%-70px)]]=\"!textArea() && !singleLanguage() && multiLine()\"\n [class.mt-[8px]]=\"viewPosition() === 'column'\"\n [class.ml-[12px]]=\"!singleLanguage() && !textArea() && viewPosition() === 'row'\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n <libs_ui-components-inputs-valid\n [dataType]=\"item.type === 'number' ? 'int' : item.type === 'text' ? 'string' : item.type === 'bigint' ? 'bigint' : 'float'\"\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [labelConfig]=\"countCharacters() ? { classInclude: 'absolute -top-[20px]', required: true } : undefined\"\n [tagInput]=\"textArea() ? 'textarea' : 'input'\"\n [placeholder]=\"item.placeholder || '' | translate\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"\n $index === 0 && data().length <= 1\n ? validRequiredDefault()\n : $index === 0 && data().length > 1 && item.validRequiredLangDefault\n ? item.validRequiredLangDefault\n : item.validRequired\n ? item.validRequired\n : validRequired() || { isRequired: false }\n \"\n [unitsRight]=\"currencyUnits()\"\n [keySelectedUnitRight]=\"key\"\n [readonly]=\"readonly()\"\n [showCount]=\"countCharacters()\"\n [maxLength]=\"validMaxLength.length ? validMaxLength.length : undefined\"\n [fixedFloat]=\"item.type === 'bigint' ? 4 : 14\"\n [validMinLength]=\"{ length: validMinLength()?.length || -1, message: 'i18n_minimum_length_number', interpolateParams: { number: validMinLength()?.length } }\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n (outValueChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerInputFunctionControl($event, key)\" />\n }\n </div>\n }\n @if (item.type === 'editor') {\n <div class=\"w-[calc(100%-28px)]\">\n <div class=\"h-[250px]\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n <libs_ui-components-inputs-quill\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [validRequired]=\"$index === 0 && data().length <= 1 ? validRequiredDefault() : validRequired()\"\n [placeholder]=\"item.placeholder || '' | translate\"\n [readonly]=\"readonly()\"\n (outFocus)=\"handlerInputChange()\"\n (outChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerQuillFunctionControl($event)\" />\n }\n </div>\n </div>\n }\n }\n @if ($index > 0 && data().length === 1 && !ignoreRemove() && !readonly()) {\n <div class=\"h-[32px] flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemoveLanguage($event, key)\" />\n </div>\n }\n </div>\n </div>\n @if ($index === 0 && !singleLanguage() && options().length !== languageDisplay().length && viewType() !== 'integer' && !readonly()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [label]=\"'i18n_add_language'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classInclude]=\"'!px-0 mt-[8px]'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n </div>\n }\n @if (viewContent()) {\n <div class=\"flex\">\n @if (singleLanguage()) {\n <div\n class=\"flex\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeKey()\"\n [innerHTML]=\"key | LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe: options()\" />\n </div>\n }\n <div\n class=\"w-[calc(100%-100px)]\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.flex]=\"!singleLanguage || $first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeValue()\"\n [innerHTML]=\"(dataLanguageChange()[key] || dataLanguageChange()[key] === 0 ? dataLanguageChange()[key] + '' : '') | LibsUiPipesEscapeHtmlPipe\"\n [config]=\"{ zIndex: zIndex() }\" />\n </div>\n </div>\n }\n }\n @if (viewType() === 'integer' && !this.ignoreAdd() && !readonly()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [classIconLeft]=\"'libs-ui-icon-add mr-[8px] text-[10px]'\"\n [classLabel]=\"'libs-ui-font-h5r'\"\n [classInclude]=\"'!pb-0'\"\n [label]=\"'i18n_add_currency'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { 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: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { 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"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe, name: "LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe" }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe, name: "LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe" }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageGetItemPipe, name: "LibsUiComponentsInputsMultiLanguageGetItemPipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsInputsQuillComponent, selector: "libs_ui-components-inputs-quill", inputs: ["isShowToolBar", "isToolbarPositionFixed", "classIncludeToolbar", "stylesIncludeToolbar", "toolbarConfig", "placeholder", "label", "item", "autoUpdateValueWhenTextChange", "fieldNameBind", "readonly", "showErrorLabel", "showErrorBorder", "onlyShowErrorBorderInContent", "classIncludeTemplate", "classInclude", "handlersExpand", "validRequired", "validMinLength", "validMaxLength", "zIndex", "dataConfigMention", "blotsRegister", "autoFocus", "focusBottom", "blockUndoRedoKeyboard", "templateToolBarPersonalize", "template", "uploadImageConfig", "heightAuto", "elementScrollHeightAuto", "ignoreShowPopupEditLink", "ignoreCommunicateMicroEventPopup"], outputs: ["itemChange", "outShowPopupEditLink", "outMessageError", "outBlur", "outFocus", "outChange", "outFunctionsControl", "outSelectionChange", "outTextChange", "outContextMenu"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
355
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsMultiLanguageComponent, isStandalone: true, selector: "libs_ui-components-inputs-multi_language", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, viewType: { classPropertyName: "viewType", publicName: "viewType", isSignal: true, isRequired: false, transformFunction: null }, singleLanguage: { classPropertyName: "singleLanguage", publicName: "singleLanguage", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, ignoreAdd: { classPropertyName: "ignoreAdd", publicName: "ignoreAdd", isSignal: true, isRequired: false, transformFunction: null }, titleField: { classPropertyName: "titleField", publicName: "titleField", isSignal: true, isRequired: false, transformFunction: null }, keyHeader: { classPropertyName: "keyHeader", publicName: "keyHeader", isSignal: true, isRequired: false, transformFunction: null }, textArea: { classPropertyName: "textArea", publicName: "textArea", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, extendClass: { classPropertyName: "extendClass", publicName: "extendClass", isSignal: true, isRequired: false, transformFunction: null }, extendClassContent: { classPropertyName: "extendClassContent", publicName: "extendClassContent", isSignal: true, isRequired: false, transformFunction: null }, viewPosition: { classPropertyName: "viewPosition", publicName: "viewPosition", isSignal: true, isRequired: false, transformFunction: null }, ignoreRemove: { classPropertyName: "ignoreRemove", publicName: "ignoreRemove", isSignal: true, isRequired: false, transformFunction: null }, validMaxLength: { classPropertyName: "validMaxLength", publicName: "validMaxLength", isSignal: true, isRequired: false, transformFunction: null }, validMinLength: { classPropertyName: "validMinLength", publicName: "validMinLength", isSignal: true, isRequired: false, transformFunction: null }, countCharacters: { classPropertyName: "countCharacters", publicName: "countCharacters", isSignal: true, isRequired: false, transformFunction: null }, viewContent: { classPropertyName: "viewContent", publicName: "viewContent", isSignal: true, isRequired: false, transformFunction: null }, classIncludeKey: { classPropertyName: "classIncludeKey", publicName: "classIncludeKey", isSignal: true, isRequired: false, transformFunction: null }, classIncludeValue: { classPropertyName: "classIncludeValue", publicName: "classIncludeValue", isSignal: true, isRequired: false, transformFunction: null }, dataLanguage: { classPropertyName: "dataLanguage", publicName: "dataLanguage", isSignal: true, isRequired: false, transformFunction: null }, multiLine: { classPropertyName: "multiLine", publicName: "multiLine", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, acceptNegativeValue: { classPropertyName: "acceptNegativeValue", publicName: "acceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null }, valueUpDownNumber: { classPropertyName: "valueUpDownNumber", publicName: "valueUpDownNumber", isSignal: true, isRequired: false, transformFunction: null }, maxValueNumber: { classPropertyName: "maxValueNumber", publicName: "maxValueNumber", isSignal: true, isRequired: false, transformFunction: null }, onlyAcceptNegativeValue: { classPropertyName: "onlyAcceptNegativeValue", publicName: "onlyAcceptNegativeValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { data: "dataChange", ignoreAdd: "ignoreAddChange", extendClass: "extendClassChange", dataLanguage: "dataLanguageChange", outEventMultiLanguage: "outEventMultiLanguage", outChangeTypeLanguage: "outChangeTypeLanguage", outFunctionsControl: "outFunctionsControl", outChangeValueInput: "outChangeValueInput" }, ngImport: i0, template: "<div class=\"w-full\">\n @if (titleField(); as titleField) {\n <div class=\"libs-ui-font-h6m mb-[4px]\">{{ titleField | translate }}</div>\n }\n @for (key of languageDisplay(); track key) {\n @if (!viewContent()) {\n <div\n [class.mt-[4px]]=\"!$first\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[8px]]=\"countCharacters() && !$first\">\n <div class=\"flex {{ extendClass() }}\">\n @if (!singleLanguage()) {\n <div>\n <libs_ui-components-dropdown\n [listConfig]=\"listConfigItem()\"\n [httpRequestDetailItemById]=\"httpRequestDetail()\"\n [listKeysDisable]=\"languageDisplay() | LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe: key\"\n [readonly]=\"$index === 0 || readonly()\"\n [listKeySelected]=\"key\"\n [zIndex]=\"zIndex()\"\n [classInclude]=\"'w-[150px]'\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectChange($event, key)\" />\n </div>\n }\n <div\n class=\"flex relative p-0 {{ extendClassContent() }}\"\n [class.w-[calc(100%-150px)]]=\"!textArea() && !singleLanguage() && viewPosition() === 'row'\"\n [class.w-full]=\"textArea() || singleLanguage() || viewPosition() === 'column'\">\n @for (item of data(); track item) {\n @if ((item.type !== 'editor' && !item.isOneValue) || (item.isOneValue && $first)) {\n <div\n class=\"relative {{ item.classIncludeInput }}\"\n [class.w-full]=\"(singleLanguage() && !multiLine()) || readonly() || $first\"\n [class.w-[calc(100%-28px)]]=\"textArea() || (!singleLanguage() && multiLine())\"\n [class.w-[calc(100%-40px)]]=\"!textArea() && !singleLanguage() && !multiLine() && !readonly()\"\n [class.w-[calc(100%-70px)]]=\"!textArea() && !singleLanguage() && multiLine()\"\n [class.mt-[8px]]=\"viewPosition() === 'column'\"\n [class.ml-[12px]]=\"!singleLanguage() && !textArea() && viewPosition() === 'row'\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n @let constHtmlPlaceholder = item.placeholder || ' ';\n <libs_ui-components-inputs-valid\n [dataType]=\"item.type === 'number' ? 'int' : item.type === 'text' ? 'string' : item.type === 'bigint' ? 'bigint' : 'float'\"\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [labelConfig]=\"countCharacters() ? { classInclude: 'absolute -top-[20px]', required: true } : undefined\"\n [tagInput]=\"textArea() ? 'textarea' : 'input'\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"\n $index === 0 && data().length <= 1\n ? validRequiredDefault()\n : $index === 0 && data().length > 1 && item.validRequiredLangDefault\n ? item.validRequiredLangDefault\n : item.validRequired\n ? item.validRequired\n : validRequired() || { isRequired: false }\n \"\n [unitsRight]=\"currencyUnits()\"\n [keySelectedUnitRight]=\"key\"\n [readonly]=\"readonly()\"\n [showCount]=\"countCharacters()\"\n [maxLength]=\"validMaxLength.length ? validMaxLength.length : undefined\"\n [fixedFloat]=\"item.type === 'bigint' ? 4 : 14\"\n [validMinLength]=\"{ length: validMinLength()?.length || -1, message: 'i18n_minimum_length_number', interpolateParams: { number: validMinLength()?.length } }\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n (outValueChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerInputFunctionControl($event, key)\" />\n }\n </div>\n }\n @if (item.type === 'editor') {\n <div class=\"w-[calc(100%-28px)]\">\n <div class=\"h-[250px]\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n @let constHtmlPlaceholder = item.placeholder || ' ';\n <libs_ui-components-inputs-quill\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [validRequired]=\"$index === 0 && data().length <= 1 ? validRequiredDefault() : validRequired()\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [readonly]=\"readonly()\"\n (outFocus)=\"handlerInputChange()\"\n (outChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerQuillFunctionControl($event)\" />\n }\n </div>\n </div>\n }\n }\n @if ($index > 0 && data().length === 1 && !ignoreRemove() && !readonly()) {\n <div class=\"h-[32px] flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemoveLanguage($event, key)\" />\n </div>\n }\n </div>\n </div>\n @if ($index === 0 && !singleLanguage() && options().length !== languageDisplay().length && viewType() !== 'integer' && !readonly()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [label]=\"'i18n_add_language'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classInclude]=\"'!px-0 mt-[8px]'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n </div>\n }\n @if (viewContent()) {\n <div class=\"flex\">\n @if (singleLanguage()) {\n <div\n class=\"flex\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeKey()\"\n [innerHTML]=\"key | LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe: options()\" />\n </div>\n }\n <div\n class=\"w-[calc(100%-100px)]\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.flex]=\"!singleLanguage || $first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeValue()\"\n [innerHTML]=\"(dataLanguageChange()[key] || dataLanguageChange()[key] === 0 ? dataLanguageChange()[key] + '' : '') | LibsUiPipesEscapeHtmlPipe\"\n [config]=\"{ zIndex: zIndex() }\" />\n </div>\n </div>\n }\n }\n @if (viewType() === 'integer' && !this.ignoreAdd() && !readonly()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [classIconLeft]=\"'libs-ui-icon-add mr-[8px] text-[10px]'\"\n [classLabel]=\"'libs-ui-font-h5r'\"\n [classInclude]=\"'!pb-0'\"\n [label]=\"'i18n_add_currency'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { 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: LibsUiComponentsInputsValidComponent, selector: "libs_ui-components-inputs-valid", inputs: ["item", "labelConfig", "emitEmptyInDataTypeNumber", "ignoreBlockInputMaxValue", "fieldNameBind", "showCount", "typeComponentSelectItem", "valueComponentSelectItem", "disableComponentSelectItem", "tagInput", "dataType", "typeInput", "modeInput", "resetAutoCompletePassword", "textAreaEnterNotNewLine", "fixedFloat", "acceptNegativeValue", "valueUpDownNumber", "ignoreWidthInput100", "classIncludeInput", "classContainerInput", "readonly", "disable", "noBorder", "backgroundNone", "useColorModeExist", "placeholder", "keepPlaceholderOnly", "classContainerBottomInput", "autoRemoveEmoji", "defaultHeight", "maxHeightTextArea", "minHeightTextArea", "ignoreShowError", "borderError", "iconLeftClass", "popoverContentIconLeft", "iconRightClass", "popoverContentIconRight", "zIndexPopoverContent", "unitsLeft", "configUnitLeft", "keySelectedUnitLeft", "unitsRight", "configUnitRight", "keySelectedUnitRight", "maxValueNumber", "minValueNumber", "ignoreContentLeft", "ignoreContentRight", "isBaselineStyle", "valuePatternShowError", "validPattern", "validRequired", "validMinLength", "validMinValue", "validMaxValue", "validMaxLength", "functionValid", "maxLength", "positionMessageErrorStartInput", "classInclude", "resize", "templateLeftBottomInput", "templateRightBottomInput", "onlyAcceptNegativeValue", "autoAddZeroLessThan10InTypeInt", "maxLengthNumberCount", "classMessageErrorInclude", "ignoreStopPropagationEvent", "ignoreUnitRightClassReadOnly", "paddingRightCustomSpecific", "focusTimeOut", "debounceTimeValidate"], outputs: ["itemChange", "outValueChange", "outSelect", "outIconLeft", "outIconRight", "outClickButtonLabel", "outSwitchEventLabel", "outLabelRightClick", "outEnterInputEvent", "outHeightAreaChange", "outFunctionsControl", "outFocusAndBlur", "outChangeValueByButtonUpDown"] }, { 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"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe, name: "LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe" }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe, name: "LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe" }, { kind: "pipe", type: LibsUiComponentsInputsMultiLanguageGetItemPipe, name: "LibsUiComponentsInputsMultiLanguageGetItemPipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsInputsQuillComponent, selector: "libs_ui-components-inputs-quill", inputs: ["isShowToolBar", "isToolbarPositionFixed", "classIncludeToolbar", "stylesIncludeToolbar", "toolbarConfig", "placeholder", "label", "item", "autoUpdateValueWhenTextChange", "fieldNameBind", "readonly", "showErrorLabel", "showErrorBorder", "onlyShowErrorBorderInContent", "classIncludeTemplate", "classInclude", "handlersExpand", "validRequired", "validMinLength", "validMaxLength", "zIndex", "dataConfigMention", "blotsRegister", "autoFocus", "focusBottom", "blockUndoRedoKeyboard", "templateToolBarPersonalize", "template", "uploadImageConfig", "heightAuto", "elementScrollHeightAuto", "ignoreShowPopupEditLink", "ignoreCommunicateMicroEventPopup"], outputs: ["itemChange", "outShowPopupEditLink", "outMessageError", "outBlur", "outFocus", "outChange", "outFunctionsControl", "outSelectionChange", "outTextChange", "outContextMenu"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
356
356
  }
357
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsMultiLanguageComponent, decorators: [{
358
358
  type: Component,
@@ -367,6 +367,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
367
367
  LibsUiComponentsInputsMultiLanguageGetItemPipe,
368
368
  LibsUiPipesEscapeHtmlPipe,
369
369
  LibsUiComponentsInputsQuillComponent,
370
- ], template: "<div class=\"w-full\">\n @if (titleField(); as titleField) {\n <div class=\"libs-ui-font-h6m mb-[4px]\">{{ titleField | translate }}</div>\n }\n @for (key of languageDisplay(); track key) {\n @if (!viewContent()) {\n <div\n [class.mt-[4px]]=\"!$first\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[8px]]=\"countCharacters() && !$first\">\n <div class=\"flex {{ extendClass() }}\">\n @if (!singleLanguage()) {\n <div>\n <libs_ui-components-dropdown\n [listConfig]=\"listConfigItem()\"\n [httpRequestDetailItemById]=\"httpRequestDetail()\"\n [listKeysDisable]=\"languageDisplay() | LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe: key\"\n [readonly]=\"$index === 0 || readonly()\"\n [listKeySelected]=\"key\"\n [zIndex]=\"zIndex()\"\n [classInclude]=\"'w-[150px]'\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectChange($event, key)\" />\n </div>\n }\n <div\n class=\"flex relative p-0 {{ extendClassContent() }}\"\n [class.w-[calc(100%-150px)]]=\"!textArea() && !singleLanguage() && viewPosition() === 'row'\"\n [class.w-full]=\"textArea() || singleLanguage() || viewPosition() === 'column'\">\n @for (item of data(); track item) {\n @if ((item.type !== 'editor' && !item.isOneValue) || (item.isOneValue && $first)) {\n <div\n class=\"relative {{ item.classIncludeInput }}\"\n [class.w-full]=\"(singleLanguage() && !multiLine()) || readonly() || $first\"\n [class.w-[calc(100%-28px)]]=\"textArea() || (!singleLanguage() && multiLine())\"\n [class.w-[calc(100%-40px)]]=\"!textArea() && !singleLanguage() && !multiLine() && !readonly()\"\n [class.w-[calc(100%-70px)]]=\"!textArea() && !singleLanguage() && multiLine()\"\n [class.mt-[8px]]=\"viewPosition() === 'column'\"\n [class.ml-[12px]]=\"!singleLanguage() && !textArea() && viewPosition() === 'row'\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n <libs_ui-components-inputs-valid\n [dataType]=\"item.type === 'number' ? 'int' : item.type === 'text' ? 'string' : item.type === 'bigint' ? 'bigint' : 'float'\"\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [labelConfig]=\"countCharacters() ? { classInclude: 'absolute -top-[20px]', required: true } : undefined\"\n [tagInput]=\"textArea() ? 'textarea' : 'input'\"\n [placeholder]=\"item.placeholder || '' | translate\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"\n $index === 0 && data().length <= 1\n ? validRequiredDefault()\n : $index === 0 && data().length > 1 && item.validRequiredLangDefault\n ? item.validRequiredLangDefault\n : item.validRequired\n ? item.validRequired\n : validRequired() || { isRequired: false }\n \"\n [unitsRight]=\"currencyUnits()\"\n [keySelectedUnitRight]=\"key\"\n [readonly]=\"readonly()\"\n [showCount]=\"countCharacters()\"\n [maxLength]=\"validMaxLength.length ? validMaxLength.length : undefined\"\n [fixedFloat]=\"item.type === 'bigint' ? 4 : 14\"\n [validMinLength]=\"{ length: validMinLength()?.length || -1, message: 'i18n_minimum_length_number', interpolateParams: { number: validMinLength()?.length } }\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n (outValueChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerInputFunctionControl($event, key)\" />\n }\n </div>\n }\n @if (item.type === 'editor') {\n <div class=\"w-[calc(100%-28px)]\">\n <div class=\"h-[250px]\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n <libs_ui-components-inputs-quill\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [validRequired]=\"$index === 0 && data().length <= 1 ? validRequiredDefault() : validRequired()\"\n [placeholder]=\"item.placeholder || '' | translate\"\n [readonly]=\"readonly()\"\n (outFocus)=\"handlerInputChange()\"\n (outChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerQuillFunctionControl($event)\" />\n }\n </div>\n </div>\n }\n }\n @if ($index > 0 && data().length === 1 && !ignoreRemove() && !readonly()) {\n <div class=\"h-[32px] flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemoveLanguage($event, key)\" />\n </div>\n }\n </div>\n </div>\n @if ($index === 0 && !singleLanguage() && options().length !== languageDisplay().length && viewType() !== 'integer' && !readonly()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [label]=\"'i18n_add_language'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classInclude]=\"'!px-0 mt-[8px]'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n </div>\n }\n @if (viewContent()) {\n <div class=\"flex\">\n @if (singleLanguage()) {\n <div\n class=\"flex\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeKey()\"\n [innerHTML]=\"key | LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe: options()\" />\n </div>\n }\n <div\n class=\"w-[calc(100%-100px)]\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.flex]=\"!singleLanguage || $first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeValue()\"\n [innerHTML]=\"(dataLanguageChange()[key] || dataLanguageChange()[key] === 0 ? dataLanguageChange()[key] + '' : '') | LibsUiPipesEscapeHtmlPipe\"\n [config]=\"{ zIndex: zIndex() }\" />\n </div>\n </div>\n }\n }\n @if (viewType() === 'integer' && !this.ignoreAdd() && !readonly()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [classIconLeft]=\"'libs-ui-icon-add mr-[8px] text-[10px]'\"\n [classLabel]=\"'libs-ui-font-h5r'\"\n [classInclude]=\"'!pb-0'\"\n [label]=\"'i18n_add_currency'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n</div>\n" }]
370
+ ], template: "<div class=\"w-full\">\n @if (titleField(); as titleField) {\n <div class=\"libs-ui-font-h6m mb-[4px]\">{{ titleField | translate }}</div>\n }\n @for (key of languageDisplay(); track key) {\n @if (!viewContent()) {\n <div\n [class.mt-[4px]]=\"!$first\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[8px]]=\"countCharacters() && !$first\">\n <div class=\"flex {{ extendClass() }}\">\n @if (!singleLanguage()) {\n <div>\n <libs_ui-components-dropdown\n [listConfig]=\"listConfigItem()\"\n [httpRequestDetailItemById]=\"httpRequestDetail()\"\n [listKeysDisable]=\"languageDisplay() | LibsUiComponentsInputsMultiLanguageGetDisableKeyPipe: key\"\n [readonly]=\"$index === 0 || readonly()\"\n [listKeySelected]=\"key\"\n [zIndex]=\"zIndex()\"\n [classInclude]=\"'w-[150px]'\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectChange($event, key)\" />\n </div>\n }\n <div\n class=\"flex relative p-0 {{ extendClassContent() }}\"\n [class.w-[calc(100%-150px)]]=\"!textArea() && !singleLanguage() && viewPosition() === 'row'\"\n [class.w-full]=\"textArea() || singleLanguage() || viewPosition() === 'column'\">\n @for (item of data(); track item) {\n @if ((item.type !== 'editor' && !item.isOneValue) || (item.isOneValue && $first)) {\n <div\n class=\"relative {{ item.classIncludeInput }}\"\n [class.w-full]=\"(singleLanguage() && !multiLine()) || readonly() || $first\"\n [class.w-[calc(100%-28px)]]=\"textArea() || (!singleLanguage() && multiLine())\"\n [class.w-[calc(100%-40px)]]=\"!textArea() && !singleLanguage() && !multiLine() && !readonly()\"\n [class.w-[calc(100%-70px)]]=\"!textArea() && !singleLanguage() && multiLine()\"\n [class.mt-[8px]]=\"viewPosition() === 'column'\"\n [class.ml-[12px]]=\"!singleLanguage() && !textArea() && viewPosition() === 'row'\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n @let constHtmlPlaceholder = item.placeholder || ' ';\n <libs_ui-components-inputs-valid\n [dataType]=\"item.type === 'number' ? 'int' : item.type === 'text' ? 'string' : item.type === 'bigint' ? 'bigint' : 'float'\"\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [labelConfig]=\"countCharacters() ? { classInclude: 'absolute -top-[20px]', required: true } : undefined\"\n [tagInput]=\"textArea() ? 'textarea' : 'input'\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [emitEmptyInDataTypeNumber]=\"true\"\n [validRequired]=\"\n $index === 0 && data().length <= 1\n ? validRequiredDefault()\n : $index === 0 && data().length > 1 && item.validRequiredLangDefault\n ? item.validRequiredLangDefault\n : item.validRequired\n ? item.validRequired\n : validRequired() || { isRequired: false }\n \"\n [unitsRight]=\"currencyUnits()\"\n [keySelectedUnitRight]=\"key\"\n [readonly]=\"readonly()\"\n [showCount]=\"countCharacters()\"\n [maxLength]=\"validMaxLength.length ? validMaxLength.length : undefined\"\n [fixedFloat]=\"item.type === 'bigint' ? 4 : 14\"\n [validMinLength]=\"{ length: validMinLength()?.length || -1, message: 'i18n_minimum_length_number', interpolateParams: { number: validMinLength()?.length } }\"\n [acceptNegativeValue]=\"acceptNegativeValue()\"\n [valueUpDownNumber]=\"valueUpDownNumber()\"\n [maxValueNumber]=\"maxValueNumber()\"\n [onlyAcceptNegativeValue]=\"onlyAcceptNegativeValue()\"\n (outValueChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerInputFunctionControl($event, key)\" />\n }\n </div>\n }\n @if (item.type === 'editor') {\n <div class=\"w-[calc(100%-28px)]\">\n <div class=\"h-[250px]\">\n @if (item.keyBindData | LibsUiComponentsInputsMultiLanguageGetItemPipe: dataLanguageChange; as itemMap) {\n @let constHtmlPlaceholder = item.placeholder || ' ';\n <libs_ui-components-inputs-quill\n [(item)]=\"itemMap\"\n [fieldNameBind]=\"key\"\n [validRequired]=\"$index === 0 && data().length <= 1 ? validRequiredDefault() : validRequired()\"\n [placeholder]=\"constHtmlPlaceholder | translate\"\n [readonly]=\"readonly()\"\n (outFocus)=\"handlerInputChange()\"\n (outChange)=\"handlerInputChange()\"\n (outFunctionsControl)=\"handlerQuillFunctionControl($event)\" />\n }\n </div>\n </div>\n }\n }\n @if ($index > 0 && data().length === 1 && !ignoreRemove() && !readonly()) {\n <div class=\"h-[32px] flex items-center ml-[16px]\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-custom'\"\n [buttonCustom]=\"{\n configStepColor: {\n text: '#071631',\n text_hover: '#ee2d41',\n text_active: '#ee2d41',\n text_disable: '071631',\n },\n rootColor: '#071631',\n }\"\n [iconOnlyType]=\"true\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: 1205 } }\"\n [classIconLeft]=\"'libs-ui-icon-remove'\"\n [classInclude]=\"'!p-0'\"\n (outClick)=\"handlerRemoveLanguage($event, key)\" />\n </div>\n }\n </div>\n </div>\n @if ($index === 0 && !singleLanguage() && options().length !== languageDisplay().length && viewType() !== 'integer' && !readonly()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [label]=\"'i18n_add_language'\"\n [classIconLeft]=\"'libs-ui-icon-add'\"\n [classInclude]=\"'!px-0 mt-[8px]'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n </div>\n }\n @if (viewContent()) {\n <div class=\"flex\">\n @if (singleLanguage()) {\n <div\n class=\"flex\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeKey()\"\n [innerHTML]=\"key | LibsUiComponentsInputsMultiLanguageDisplayLanguagePipe: options()\" />\n </div>\n }\n <div\n class=\"w-[calc(100%-100px)]\"\n [class.hidden]=\"singleLanguage() && !$first\"\n [class.flex]=\"!singleLanguage || $first\"\n [class.mt-[4px]]=\"!singleLanguage() && !$first\">\n <libs_ui-components-popover\n [type]=\"'text'\"\n [classInclude]=\"classIncludeValue()\"\n [innerHTML]=\"(dataLanguageChange()[key] || dataLanguageChange()[key] === 0 ? dataLanguageChange()[key] + '' : '') | LibsUiPipesEscapeHtmlPipe\"\n [config]=\"{ zIndex: zIndex() }\" />\n </div>\n </div>\n }\n }\n @if (viewType() === 'integer' && !this.ignoreAdd() && !readonly()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [classIconLeft]=\"'libs-ui-icon-add mr-[8px] text-[10px]'\"\n [classLabel]=\"'libs-ui-font-h5r'\"\n [classInclude]=\"'!pb-0'\"\n [label]=\"'i18n_add_currency'\"\n (outClick)=\"handlerAddLanguage($event)\" />\n }\n</div>\n" }]
371
371
  }], ctorParameters: () => [] });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvbXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvbXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQWtCLGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUE4QixvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BILE9BQU8sRUFBaUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2SixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSxzREFBc0QsRUFBRSxNQUFNLCtC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RCx5MVFBZ0tBLDJDRHhJSSxlQUFlLDRGQUNmLGlDQUFpQyxpMURBQ2pDLG9DQUFvQyxzMURBQ3BDLHNDQUFzQyxzakJBQ3RDLGdDQUFnQywrZkFDaEMsb0RBQW9ELHdGQUNwRCxzREFBc0QsMEZBQ3RELDhDQUE4QyxrRkFDOUMseUJBQXlCLGtFQUN6QixvQ0FBb0M7OzRGQUczQiw0Q0FBNEM7a0JBbkJ4RCxTQUFTOytCQUVFLDBDQUEwQyxjQUV4QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZUFBZTt3QkFDZixpQ0FBaUM7d0JBQ2pDLG9DQUFvQzt3QkFDcEMsc0NBQXNDO3dCQUN0QyxnQ0FBZ0M7d0JBQ2hDLG9EQUFvRDt3QkFDcEQsc0RBQXNEO3dCQUN0RCw4Q0FBOEM7d0JBQzlDLHlCQUF5Qjt3QkFDekIsb0NBQW9DO3FCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtcXVpbGwnO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVZhbGlkTGVuZ3RoLCBJVmFsaWRSZXF1aXJlZCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWVzY2FwZS1odG1sJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCBpc05pbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUN1cnJlbmN5VW5pdCwgSURhdGFJdGVtLCBJRGF0YU11bHRpTGFuZ3VhZ2UsIElFdmVudE11bHRpTGFuZ3VhZ2UsIElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCwgSU9wdGlvbiwgVFlQRV9WSUVXX01VTFRJX0xBTkdVQUdFIH0gZnJvbSAnLi9pbnRlcmZhY2VzL211bHRpLWxhbmd1YWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZURpc3BsYXlMYW5ndWFnZVBpcGUgfSBmcm9tICcuL3BpcGVzL2Rpc3BsYXktbGFuZ3VhZ2UucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldERpc2FibGVLZXlQaXBlIH0gZnJvbSAnLi9waXBlcy9nZXQtZGlzYWJsZS1rZXkucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldEl0ZW1QaXBlIH0gZnJvbSAnLi9waXBlcy9nZXQtaXRlbS5waXBlJztcbmltcG9ydCB7IGN1cnJlbmNpZXNPcHRpb25zLCBjdXJyZW5jaWVzU3VwcG9ydCwgaHR0cFJlcXVlc3REZXRhaWwsIGxhbmdPcHRpb25zLCBsYW5ndWFnZVN1cHBvcnQsIGxpc3RDb25maWdJdGVtLCB2YWxpZFJlcXVpcmVkIH0gZnJvbSAnLi91dGlscy9tdWx0aS1sYW5ndWFnZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtbXVsdGlfbGFuZ3VhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0RGlzYWJsZUtleVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VEaXNwbGF5TGFuZ3VhZ2VQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGUsXG4gICAgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBsYW5ndWFnZURpc3BsYXkgPSBzaWduYWw8QXJyYXk8c3RyaW5nPj4oW10pO1xuICBwcm90ZWN0ZWQgZGF0YUxhbmd1YWdlQ2hhbmdlID0gc2lnbmFsPElEYXRhTXVsdGlMYW5ndWFnZT4oe30pO1xuICBwcm90ZWN0ZWQgbGFuZ0RlZmF1bHQgPSBzaWduYWw8QXJyYXk8c3RyaW5nPj4obGFuZ3VhZ2VTdXBwb3J0KCkpO1xuICBwcm90ZWN0ZWQgY3VycmVuY3lVbml0cyA9IHNpZ25hbDxBcnJheTxJQ3VycmVuY3lVbml0Pj4oW10pO1xuICBwcm90ZWN0ZWQgb3B0aW9ucyA9IHNpZ25hbDxBcnJheTxJT3B0aW9uPj4obGFuZ09wdGlvbnMoKSk7XG4gIHByb3RlY3RlZCB2YWxpZFJlcXVpcmVkRGVmYXVsdCA9IHNpZ25hbDxJVmFsaWRSZXF1aXJlZD4odmFsaWRSZXF1aXJlZCgpKTtcbiAgcHJvdGVjdGVkIGxpc3RDb25maWdJdGVtID0gY29tcHV0ZWQoKCkgPT4gbGlzdENvbmZpZ0l0ZW0odGhpcy5vcHRpb25zKCkpKTtcbiAgcHJvdGVjdGVkIGh0dHBSZXF1ZXN0RGV0YWlsID0gY29tcHV0ZWQoKCkgPT4gaHR0cFJlcXVlc3REZXRhaWwodGhpcy5vcHRpb25zKCkpKTtcblxuICBwcml2YXRlIGlucHV0RnVuY3Rpb25Db250cm9sID0gc2lnbmFsPE1hcDxzdHJpbmcsIElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIHF1aWxsRnVuY3Rpb25Db250cm9sID0gc2lnbmFsPEFycmF5PElRdWlsbEZ1bmN0aW9uQ29udHJvbEV2ZW50Pj4oW10pO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IHZpZXdUeXBlID0gaW5wdXQ8VFlQRV9WSUVXX01VTFRJX0xBTkdVQUdFLCBUWVBFX1ZJRVdfTVVMVElfTEFOR1VBR0UgfCB1bmRlZmluZWQ+KCd0ZXh0JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ3RleHQnIH0pO1xuICByZWFkb25seSBzaW5nbGVMYW5ndWFnZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRhdGEgPSBtb2RlbDxBcnJheTxJRGF0YUl0ZW0+PihbXSk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZCwgSVZhbGlkUmVxdWlyZWQgfCB1bmRlZmluZWQ+KHZhbGlkUmVxdWlyZWQoKSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdmFsaWRSZXF1aXJlZCgpIH0pO1xuICByZWFkb25seSBpZ25vcmVBZGQgPSBtb2RlbDxib29sZWFuPigpO1xuICByZWFkb25seSB0aXRsZUZpZWxkID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBrZXlIZWFkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHRleHRBcmVhID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGV4dGVuZENsYXNzID0gbW9kZWw8c3RyaW5nPigpO1xuICByZWFkb25seSBleHRlbmRDbGFzc0NvbnRlbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHZpZXdQb3NpdGlvbiA9IGlucHV0PCdyb3cnIHwgJ2NvbHVtbic+KCdyb3cnKTtcbiAgcmVhZG9ubHkgaWdub3JlUmVtb3ZlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhMZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGgsIElWYWxpZExlbmd0aCB8IHVuZGVmaW5lZD4oeyBsZW5ndGg6IDAgfSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8geyBsZW5ndGg6IDAgfSB9KTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5MZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGg+KCk7XG4gIHJlYWRvbmx5IGNvdW50Q2hhcmFjdGVycyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZpZXdDb250ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlS2V5ID0gaW5wdXQ8c3RyaW5nPignbGlicy11aS1mb250LWg0cicpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVWYWx1ZSA9IGlucHV0PHN0cmluZz4oJ2xpYnMtdWktZm9udC1oNHMnKTtcbiAgcmVhZG9ubHkgZGF0YUxhbmd1YWdlID0gbW9kZWw8SURhdGFNdWx0aUxhbmd1YWdlPih7fSk7XG4gIHJlYWRvbmx5IG11bHRpTGluZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZhbHVlVXBEb3duTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtYXhWYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb25seUFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEV2ZW50TXVsdGlMYW5ndWFnZSA9IG91dHB1dDxJRXZlbnRNdWx0aUxhbmd1YWdlPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VUeXBlTGFuZ3VhZ2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlSW5wdXQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAodmlld1R5cGUgPT09ICdpbnRlZ2VyJykge1xuICAgICAgICAgIHRoaXMubGFuZ0RlZmF1bHQuc2V0KGN1cnJlbmNpZXNTdXBwb3J0KCkpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZXQoY3VycmVuY2llc09wdGlvbnMoKSk7XG4gICAgICAgICAgdGhpcy5vcHRpb25zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeVVuaXRzKCkucHVzaCh7XG4gICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgICBpZDogaXRlbS5rZXksXG4gICAgICAgICAgICAgIHR5cGU6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmN1cnJlbmN5VW5pdHMudXBkYXRlKCh2YWx1ZSkgPT4gWy4uLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFMYW5ndWFnZSA9IHRoaXMuZGF0YUxhbmd1YWdlKCk7XG4gICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLnNldChjbG9uZURlZXAoZGF0YUxhbmd1YWdlKSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNTZWxlY3RlZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlKCkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKS5maW5kKChpdGVtKSA9PiBpdGVtLmtleSA9PT0ga2V5KSkge1xuICAgICAgICAgICAgb3B0aW9uc1NlbGVjdGVkLmFkZChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmxhbmdEZWZhdWx0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5sYW5nRGVmYXVsdCgpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc05pbChnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleSkpKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnNTZWxlY3RlZC5hZGQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhbmd1YWdlRGlzcGxheS5zZXQoQXJyYXkuZnJvbShvcHRpb25zU2VsZWN0ZWQpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNpbmdsZUxhbmd1YWdlID0gdGhpcy5zaW5nbGVMYW5ndWFnZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRDaGFuZ2VUeXBlTGFuZ3VhZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgaWYgKCFzaW5nbGVMYW5ndWFnZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmxhbmdEZWZhdWx0KClbMF07XG4gICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlLnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBba2V5XTogZ2V0KHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLCBrZXkpIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkUmVxdWlyZWQgPSB0aGlzLnZhbGlkUmVxdWlyZWQoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICghdmFsaWRSZXF1aXJlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkUmVxdWlyZWREZWZhdWx0LnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBpc1JlcXVpcmVkOiB2YWxpZFJlcXVpcmVkLmlzUmVxdWlyZWQgfSkpO1xuICAgICAgICBpZiAoIXZhbGlkUmVxdWlyZWQuaXNSZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICAgIHRoaXMuZXh0ZW5kQ2xhc3MudXBkYXRlKCh2YWx1ZSkgPT4gYCR7dmFsdWUgfHwgJyd9ICR7dGhpcy52aWV3UG9zaXRpb24oKSA9PT0gJ3JvdycgPyAnZmxleC1yb3cnIDogJ2ZsZXgtY29sJ31gKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKSxcbiAgICAgIGdldERhdGE6IHRoaXMuZ2V0RGF0YS5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlcklucHV0RnVuY3Rpb25Db250cm9sKGV2ZW50OiBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBrZXk6IHN0cmluZykge1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS5zZXQoa2V5LCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclF1aWxsRnVuY3Rpb25Db250cm9sKGV2ZW50OiBJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucXVpbGxGdW5jdGlvbkNvbnRyb2wudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCBldmVudF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RDaGFuZ2UoZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkLCBrZXlPbGQ6IHN0cmluZykge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQua2V5ID09PSBrZXlPbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYW5ndWFnZURpc3BsYXkudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUubWFwKChpdGVtKSA9PiAoaXRlbSA9PT0ga2V5T2xkID8gKGV2ZW50LmtleSBhcyBzdHJpbmcpIDogaXRlbSkpKTtcbiAgICBkZWxldGUgdGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UoKVtrZXlPbGRdO1xuICAgIGRlbGV0ZSB0aGlzLmRhdGFMYW5ndWFnZSgpW2tleU9sZF07XG4gICAgdGhpcy5zZXREZWZhdWx0RGF0YShldmVudC5rZXkgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQWRkTGFuZ3VhZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMub3B0aW9ucygpLmZpbmQoKGl0ZW0pID0+ICF0aGlzLmxhbmd1YWdlRGlzcGxheSgpLmluY2x1ZGVzKGl0ZW0ua2V5KSk7XG4gICAgaWYgKCFsYW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFuZ3VhZ2VEaXNwbGF5LnVwZGF0ZSgodmFsdWUpID0+IFsuLi52YWx1ZSwgbGFuZy5rZXldKTtcbiAgICB0aGlzLnNldERlZmF1bHREYXRhKGxhbmcua2V5KTtcbiAgICBpZiAodGhpcy5vcHRpb25zKCkubGVuZ3RoID09PSB0aGlzLmxhbmd1YWdlRGlzcGxheSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5pZ25vcmVBZGQuc2V0KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLm91dEV2ZW50TXVsdGlMYW5ndWFnZS5lbWl0KHsgYWN0aW9uOiAnYWRkJywgZGF0YTogdGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UoKSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVtb3ZlTGFuZ3VhZ2UoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaWdub3JlQWRkLnNldCh0cnVlKTtcbiAgICB0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZS51cGRhdGUoKHZhbHVlKSA9PiB7XG4gICAgICBkZWxldGUgdmFsdWVba2V5XTtcbiAgICAgIHJldHVybiB7IC4uLnZhbHVlIH07XG4gICAgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUlzTXVsdGlLZXkoKTtcbiAgICB0aGlzLmxhbmd1YWdlRGlzcGxheS51cGRhdGUoKHZhbHVlKSA9PiB2YWx1ZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IGtleSkpO1xuICAgIHRoaXMub3V0RXZlbnRNdWx0aUxhbmd1YWdlLmVtaXQoeyBhY3Rpb246ICdyZW1vdmUnLCBkYXRhOiB0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSgpIH0pO1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGF0YSgpIHtcbiAgICBpZiAodGhpcy5zaW5nbGVMYW5ndWFnZSgpKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmxhbmdEZWZhdWx0KClbMF07XG4gICAgICB0aGlzLmRhdGFMYW5ndWFnZS51cGRhdGUoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgW2tleV06IGdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwga2V5KSB9KSk7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhTGFuZ3VhZ2UoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YSgpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGEoKSkge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5nRGVmYXVsdCgpWzBdO1xuICAgICAgICBjb25zdCBrZXkgPSBpdGVtLmtleUJpbmREYXRhO1xuICAgICAgICBjb25zdCBkYXRhQnlLZXkgPSBrZXkgPyBnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChrZXkgJiYgZGF0YUJ5S2V5ICYmIGxhbmcgJiYgIWdldDxhbnk+KGRhdGFCeUtleSwgbGFuZykgJiYgIWdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwgbGFuZykpIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2VuZXJhdGVEYXRhKCkge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmdEZWZhdWx0KClbMF07XG4gICAgaWYgKHRoaXMuZGF0YSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5kYXRhKCkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gaXRlbS5rZXlCaW5kRGF0YTtcbiAgICAgICAgaWYgKCFpbmRleCAmJiBpc05pbChnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGxhbmcpKSkge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdERhdGEobGFuZyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5IHx8ICFpc05pbChnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleSkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBba2V5XTogeyBbbGFuZ106ICcnIH0gfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRhKCkubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuZGF0YUxhbmd1YWdlKCkgfHwgIU9iamVjdC5rZXlzKHRoaXMuZGF0YUxhbmd1YWdlKCkpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHREYXRhKGxhbmcpO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhLnNldChbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiB0aGlzLnZpZXdUeXBlKCksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIoKSxcbiAgICAgICAgICBpc09uZVZhbHVlOiBmYWxzZSxcbiAgICAgICAgICBrZXlCaW5kRGF0YTogJycsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldERlZmF1bHREYXRhKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIFtrZXldOiAnJyB9KSk7XG4gICAgdGhpcy5kYXRhTGFuZ3VhZ2UudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIFtrZXldOiAnJyB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS52YWx1ZXMoKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMucXVpbGxGdW5jdGlvbkNvbnRyb2woKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2luZ2xlTGFuZ3VhZ2UoKSkge1xuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhKCkubGVuZ3RoID09PSAxKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlRGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlSXNNdWx0aUtleSgpO1xuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVEZWZhdWx0KCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgaWYgKHRoaXMudmFsaWRSZXF1aXJlZCgpLmlzUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudmFsaWRSZXF1aXJlZERlZmF1bHQudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIGlzUmVxdWlyZWQ6IHRydWUgfSkpO1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkSW5wdXQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlKCkpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy52YWxpZFJlcXVpcmVkRGVmYXVsdC51cGRhdGUoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgaXNSZXF1aXJlZDogZmFsc2UgfSkpO1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkSW5wdXQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UoKSkpIHtcbiAgICAgIGlmIChrZXkgIT09ICdpZCcgJiYga2V5ICE9PSB0aGlzLmtleUhlYWRlcigpICYmIGdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwga2V5KSAmJiBrZXkgIT09IHRoaXMubGFuZ0RlZmF1bHQoKVswXSkge1xuICAgICAgICB0aGlzLnZhbGlkUmVxdWlyZWREZWZhdWx0LnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBpc1JlcXVpcmVkOiB0cnVlIH0pKTtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkSW5wdXQoKSkpIHtcbiAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsaWRSZXF1aXJlZERlZmF1bHQudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIGlzUmVxdWlyZWQ6IGZhbHNlIH0pKTtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tWYWxpZElucHV0KCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS52YWx1ZXMoKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUlzTXVsdGlLZXkoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSgpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEoKVswXS52YWxpZFJlcXVpcmVkPy5pc1JlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKCFpdGVtLmtleUJpbmREYXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKGdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwgaXRlbS5rZXlCaW5kRGF0YSkpLmZvckVhY2goYXN5bmMgKGtleUJpbmQpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSgpKSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gaXRlbS5rZXlCaW5kRGF0YSB8fCBrZXkgPT09IGtleUJpbmQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0KHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLCBrZXkpICYmIHRoaXMub3B0aW9ucygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSBrZXkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YSgpLmZvckVhY2goYXN5bmMgKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdC5pc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhKCkuZm9yRWFjaChhc3luYyAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQuaXNSZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmQgPSBnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleUJpbmQpO1xuICAgICAgICAgIGNvbnN0IGRhdGFMYW5ndWFnZUNoYW5nZUJ5S2V5QmluZERhdGEgPSBpdGVtLmtleUJpbmREYXRhID8gZ2V0KHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLCBpdGVtLmtleUJpbmREYXRhKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoKCFkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmQgJiYgIWdldChkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmREYXRhLCBrZXlCaW5kKSkgfHwgKGRhdGFMYW5ndWFnZUNoYW5nZUJ5S2V5QmluZCAmJiBnZXQoZGF0YUxhbmd1YWdlQ2hhbmdlQnlLZXlCaW5kRGF0YSwga2V5QmluZCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZGF0YUxhbmd1YWdlQ2hhbmdlQnlLZXlCaW5kKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRmlyc3QgPSB0aGlzLmRhdGEoKVswXTtcbiAgICAgICAgICAgIGlmIChkYXRhRmlyc3QgJiYgZGF0YUZpcnN0LnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdCkge1xuICAgICAgICAgICAgICBkYXRhRmlyc3QudmFsaWRSZXF1aXJlZExhbmdEZWZhdWx0LmlzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrVmFsaWRJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWdldChkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmREYXRhLCBrZXlCaW5kKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNlY29uZCA9IHRoaXMuZGF0YSgpWzFdO1xuICAgICAgICAgICAgaWYgKGRhdGFTZWNvbmQgJiYgZGF0YVNlY29uZC52YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgZGF0YVNlY29uZC52YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQuaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVySW5wdXRDaGFuZ2UoKSB7XG4gICAgdGhpcy5vdXRDaGFuZ2VWYWx1ZUlucHV0LmVtaXQoKTtcbiAgICB0aW1lcig1MDApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnZhbGlkYXRlKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgQGlmICh0aXRsZUZpZWxkKCk7IGFzIHRpdGxlRmllbGQpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2bSBtYi1bNHB4XVwiPnt7IHRpdGxlRmllbGQgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgfVxuICBAZm9yIChrZXkgb2YgbGFuZ3VhZ2VEaXNwbGF5KCk7IHRyYWNrIGtleSkge1xuICAgIEBpZiAoIXZpZXdDb250ZW50KCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW2NsYXNzLm10LVs0cHhdXT1cIiEkZmlyc3RcIlxuICAgICAgICBbY2xhc3MuaGlkZGVuXT1cInNpbmdsZUxhbmd1YWdlKCkgJiYgISRmaXJzdFwiXG4gICAgICAgIFtjbGFzcy5tdC1bOHB4XV09XCJjb3VudENoYXJhY3RlcnMoKSAmJiAhJGZpcnN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHt7IGV4dGVuZENsYXNzKCkgfX1cIj5cbiAgICAgICAgICBAaWYgKCFzaW5nbGVMYW5ndWFnZSgpKSB7XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZ0l0ZW0oKVwiXG4gICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwiaHR0cFJlcXVlc3REZXRhaWwoKVwiXG4gICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJsYW5ndWFnZURpc3BsYXkoKSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0RGlzYWJsZUtleVBpcGU6IGtleVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiRpbmRleCA9PT0gMCB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImtleVwiXG4gICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndy1bMTUwcHhdJ1wiXG4gICAgICAgICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0Q2hhbmdlKCRldmVudCwga2V5KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHJlbGF0aXZlIHAtMCB7eyBleHRlbmRDbGFzc0NvbnRlbnQoKSB9fVwiXG4gICAgICAgICAgICBbY2xhc3Mudy1bY2FsYygxMDAlLTE1MHB4KV1dPVwiIXRleHRBcmVhKCkgJiYgIXNpbmdsZUxhbmd1YWdlKCkgJiYgdmlld1Bvc2l0aW9uKCkgPT09ICdyb3cnXCJcbiAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwidGV4dEFyZWEoKSB8fCBzaW5nbGVMYW5ndWFnZSgpIHx8IHZpZXdQb3NpdGlvbigpID09PSAnY29sdW1uJ1wiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgQGlmICgoaXRlbS50eXBlICE9PSAnZWRpdG9yJyAmJiAhaXRlbS5pc09uZVZhbHVlKSB8fCAoaXRlbS5pc09uZVZhbHVlICYmICRmaXJzdCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHt7IGl0ZW0uY2xhc3NJbmNsdWRlSW5wdXQgfX1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctZnVsbF09XCIoc2luZ2xlTGFuZ3VhZ2UoKSAmJiAhbXVsdGlMaW5lKCkpIHx8IHJlYWRvbmx5KCkgfHwgJGZpcnN0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy53LVtjYWxjKDEwMCUtMjhweCldXT1cInRleHRBcmVhKCkgfHwgKCFzaW5nbGVMYW5ndWFnZSgpICYmIG11bHRpTGluZSgpKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Mudy1bY2FsYygxMDAlLTQwcHgpXV09XCIhdGV4dEFyZWEoKSAmJiAhc2luZ2xlTGFuZ3VhZ2UoKSAmJiAhbXVsdGlMaW5lKCkgJiYgIXJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctW2NhbGMoMTAwJS03MHB4KV1dPVwiIXRleHRBcmVhKCkgJiYgIXNpbmdsZUxhbmd1YWdlKCkgJiYgbXVsdGlMaW5lKClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm10LVs4cHhdXT1cInZpZXdQb3NpdGlvbigpID09PSAnY29sdW1uJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWwtWzEycHhdXT1cIiFzaW5nbGVMYW5ndWFnZSgpICYmICF0ZXh0QXJlYSgpICYmIHZpZXdQb3NpdGlvbigpID09PSAncm93J1wiPlxuICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmtleUJpbmREYXRhIHwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZTogZGF0YUxhbmd1YWdlQ2hhbmdlOyBhcyBpdGVtTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFUeXBlXT1cIml0ZW0udHlwZSA9PT0gJ251bWJlcicgPyAnaW50JyA6IGl0ZW0udHlwZSA9PT0gJ3RleHQnID8gJ3N0cmluZycgOiBpdGVtLnR5cGUgPT09ICdiaWdpbnQnID8gJ2JpZ2ludCcgOiAnZmxvYXQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1NYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29uZmlnXT1cImNvdW50Q2hhcmFjdGVycygpID8geyBjbGFzc0luY2x1ZGU6ICdhYnNvbHV0ZSAtdG9wLVsyMHB4XScsIHJlcXVpcmVkOiB0cnVlIH0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0YWdJbnB1dF09XCJ0ZXh0QXJlYSgpID8gJ3RleHRhcmVhJyA6ICdpbnB1dCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpdGVtLnBsYWNlaG9sZGVyIHx8ICcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsaWRSZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleCA9PT0gMCAmJiBkYXRhKCkubGVuZ3RoIDw9IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWxpZFJlcXVpcmVkRGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJGluZGV4ID09PSAwICYmIGRhdGEoKS5sZW5ndGggPiAxICYmIGl0ZW0udmFsaWRSZXF1aXJlZExhbmdEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS52YWxpZFJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGl0ZW0udmFsaWRSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWxpZFJlcXVpcmVkKCkgfHwgeyBpc1JlcXVpcmVkOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdW5pdHNSaWdodF09XCJjdXJyZW5jeVVuaXRzKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvdW50XT1cImNvdW50Q2hhcmFjdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cInZhbGlkTWF4TGVuZ3RoLmxlbmd0aCA/IHZhbGlkTWF4TGVuZ3RoLmxlbmd0aCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpeGVkRmxvYXRdPVwiaXRlbS50eXBlID09PSAnYmlnaW50JyA/IDQgOiAxNFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbGlkTWluTGVuZ3RoXT1cInsgbGVuZ3RoOiB2YWxpZE1pbkxlbmd0aCgpPy5sZW5ndGggfHwgLTEsIG1lc3NhZ2U6ICdpMThuX21pbmltdW1fbGVuZ3RoX251bWJlcicsIGludGVycG9sYXRlUGFyYW1zOiB7IG51bWJlcjogdmFsaWRNaW5MZW5ndGgoKT8ubGVuZ3RoIH0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwidmFsdWVVcERvd25OdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm1heFZhbHVlTnVtYmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZV09XCJvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlcklucHV0Q2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJJbnB1dEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIGtleSlcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXRlbS50eXBlID09PSAnZWRpdG9yJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVtjYWxjKDEwMCUtMjhweCldXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1bMjUwcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5rZXlCaW5kRGF0YSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGU6IGRhdGFMYW5ndWFnZUNoYW5nZTsgYXMgaXRlbU1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXF1aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1NYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWxpZFJlcXVpcmVkXT1cIiRpbmRleCA9PT0gMCAmJiBkYXRhKCkubGVuZ3RoIDw9IDEgPyB2YWxpZFJlcXVpcmVkRGVmYXVsdCgpIDogdmFsaWRSZXF1aXJlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpdGVtLnBsYWNlaG9sZGVyIHx8ICcnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGb2N1cyk9XCJoYW5kbGVySW5wdXRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdlKT1cImhhbmRsZXJJbnB1dENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJRdWlsbEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoJGluZGV4ID4gMCAmJiBkYXRhKCkubGVuZ3RoID09PSAxICYmICFpZ25vcmVSZW1vdmUoKSAmJiAhcmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1bMzJweF0gZmxleCBpdGVtcy1jZW50ZXIgbWwtWzE2cHhdXCI+XG4gICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLWN1c3RvbSdcIlxuICAgICAgICAgICAgICAgICAgW2J1dHRvbkN1c3RvbV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1N0ZXBDb2xvcjoge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcjMDcxNjMxJyxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2hvdmVyOiAnI2VlMmQ0MScsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dF9hY3RpdmU6ICcjZWUyZDQxJyxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2Rpc2FibGU6ICcwNzE2MzEnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByb290Q29sb3I6ICcjMDcxNjMxJyxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuX2RlbGV0ZScsIHpJbmRleDogMTIwNSB9IH1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1yZW1vdmUnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlTGFuZ3VhZ2UoJGV2ZW50LCBrZXkpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKCRpbmRleCA9PT0gMCAmJiAhc2luZ2xlTGFuZ3VhZ2UoKSAmJiBvcHRpb25zKCkubGVuZ3RoICE9PSBsYW5ndWFnZURpc3BsYXkoKS5sZW5ndGggJiYgdmlld1R5cGUoKSAhPT0gJ2ludGVnZXInICYmICFyZWFkb25seSgpKSB7XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInaTE4bl9hZGRfbGFuZ3VhZ2UnXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tYWRkJ1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcHgtMCBtdC1bOHB4XSdcIlxuICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJBZGRMYW5ndWFnZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAodmlld0NvbnRlbnQoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgQGlmIChzaW5nbGVMYW5ndWFnZSgpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4XCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwic2luZ2xlTGFuZ3VhZ2UoKSAmJiAhJGZpcnN0XCJcbiAgICAgICAgICAgIFtjbGFzcy5tdC1bNHB4XV09XCIhc2luZ2xlTGFuZ3VhZ2UoKSAmJiAhJGZpcnN0XCI+XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGVLZXkoKVwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwia2V5IHwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VEaXNwbGF5TGFuZ3VhZ2VQaXBlOiBvcHRpb25zKClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInctW2NhbGMoMTAwJS0xMDBweCldXCJcbiAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cInNpbmdsZUxhbmd1YWdlKCkgJiYgISRmaXJzdFwiXG4gICAgICAgICAgW2NsYXNzLmZsZXhdPVwiIXNpbmdsZUxhbmd1YWdlIHx8ICRmaXJzdFwiXG4gICAgICAgICAgW2NsYXNzLm10LVs0cHhdXT1cIiFzaW5nbGVMYW5ndWFnZSgpICYmICEkZmlyc3RcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzSW5jbHVkZVZhbHVlKClcIlxuICAgICAgICAgICAgW2lubmVySFRNTF09XCIoZGF0YUxhbmd1YWdlQ2hhbmdlKClba2V5XSB8fCBkYXRhTGFuZ3VhZ2VDaGFuZ2UoKVtrZXldID09PSAwID8gZGF0YUxhbmd1YWdlQ2hhbmdlKClba2V5XSArICcnIDogJycpIHwgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cInsgekluZGV4OiB6SW5kZXgoKSB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cbiAgQGlmICh2aWV3VHlwZSgpID09PSAnaW50ZWdlcicgJiYgIXRoaXMuaWdub3JlQWRkKCkgJiYgIXJlYWRvbmx5KCkpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uLWxpbmstcHJpbWFyeVwiXG4gICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWFkZCBtci1bOHB4XSB0ZXh0LVsxMHB4XSdcIlxuICAgICAgW2NsYXNzTGFiZWxdPVwiJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwYi0wJ1wiXG4gICAgICBbbGFiZWxdPVwiJ2kxOG5fYWRkX2N1cnJlbmN5J1wiXG4gICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckFkZExhbmd1YWdlKCRldmVudClcIiAvPlxuICB9XG48L2Rpdj5cbiJdfQ==
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvbXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9tdWx0aS1sYW5ndWFnZS9zcmMvbXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQWtCLGlDQUFpQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUE4QixvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BILE9BQU8sRUFBaUUsb0NBQW9DLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2SixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSxzREFBc0QsRUFBRSxNQUFNLCtC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RCwyK1FBa0tBLDJDRDFJSSxlQUFlLDRGQUNmLGlDQUFpQyxpMURBQ2pDLG9DQUFvQyxzMURBQ3BDLHNDQUFzQyxzakJBQ3RDLGdDQUFnQywrZkFDaEMsb0RBQW9ELHdGQUNwRCxzREFBc0QsMEZBQ3RELDhDQUE4QyxrRkFDOUMseUJBQXlCLGtFQUN6QixvQ0FBb0M7OzRGQUczQiw0Q0FBNEM7a0JBbkJ4RCxTQUFTOytCQUVFLDBDQUEwQyxjQUV4QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZUFBZTt3QkFDZixpQ0FBaUM7d0JBQ2pDLG9DQUFvQzt3QkFDcEMsc0NBQXNDO3dCQUN0QyxnQ0FBZ0M7d0JBQ2hDLG9EQUFvRDt3QkFDcEQsc0RBQXNEO3dCQUN0RCw4Q0FBOEM7d0JBQzlDLHlCQUF5Qjt3QkFDekIsb0NBQW9DO3FCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtcXVpbGwnO1xuaW1wb3J0IHsgSUlucHV0VmFsaWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVZhbGlkTGVuZ3RoLCBJVmFsaWRSZXF1aXJlZCwgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1pbnB1dHMtdmFsaWQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWVzY2FwZS1odG1sJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCBpc05pbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUN1cnJlbmN5VW5pdCwgSURhdGFJdGVtLCBJRGF0YU11bHRpTGFuZ3VhZ2UsIElFdmVudE11bHRpTGFuZ3VhZ2UsIElJbnB1dE11bHRpTGFuZ3VhZ2VGdW5jdGlvbkNvbnRyb2xFdmVudCwgSU9wdGlvbiwgVFlQRV9WSUVXX01VTFRJX0xBTkdVQUdFIH0gZnJvbSAnLi9pbnRlcmZhY2VzL211bHRpLWxhbmd1YWdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZURpc3BsYXlMYW5ndWFnZVBpcGUgfSBmcm9tICcuL3BpcGVzL2Rpc3BsYXktbGFuZ3VhZ2UucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldERpc2FibGVLZXlQaXBlIH0gZnJvbSAnLi9waXBlcy9nZXQtZGlzYWJsZS1rZXkucGlwZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZUdldEl0ZW1QaXBlIH0gZnJvbSAnLi9waXBlcy9nZXQtaXRlbS5waXBlJztcbmltcG9ydCB7IGN1cnJlbmNpZXNPcHRpb25zLCBjdXJyZW5jaWVzU3VwcG9ydCwgaHR0cFJlcXVlc3REZXRhaWwsIGxhbmdPcHRpb25zLCBsYW5ndWFnZVN1cHBvcnQsIGxpc3RDb25maWdJdGVtLCB2YWxpZFJlcXVpcmVkIH0gZnJvbSAnLi91dGlscy9tdWx0aS1sYW5ndWFnZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtbXVsdGlfbGFuZ3VhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktbGFuZ3VhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1ZhbGlkQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0RGlzYWJsZUtleVBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VEaXNwbGF5TGFuZ3VhZ2VQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGUsXG4gICAgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBsYW5ndWFnZURpc3BsYXkgPSBzaWduYWw8QXJyYXk8c3RyaW5nPj4oW10pO1xuICBwcm90ZWN0ZWQgZGF0YUxhbmd1YWdlQ2hhbmdlID0gc2lnbmFsPElEYXRhTXVsdGlMYW5ndWFnZT4oe30pO1xuICBwcm90ZWN0ZWQgbGFuZ0RlZmF1bHQgPSBzaWduYWw8QXJyYXk8c3RyaW5nPj4obGFuZ3VhZ2VTdXBwb3J0KCkpO1xuICBwcm90ZWN0ZWQgY3VycmVuY3lVbml0cyA9IHNpZ25hbDxBcnJheTxJQ3VycmVuY3lVbml0Pj4oW10pO1xuICBwcm90ZWN0ZWQgb3B0aW9ucyA9IHNpZ25hbDxBcnJheTxJT3B0aW9uPj4obGFuZ09wdGlvbnMoKSk7XG4gIHByb3RlY3RlZCB2YWxpZFJlcXVpcmVkRGVmYXVsdCA9IHNpZ25hbDxJVmFsaWRSZXF1aXJlZD4odmFsaWRSZXF1aXJlZCgpKTtcbiAgcHJvdGVjdGVkIGxpc3RDb25maWdJdGVtID0gY29tcHV0ZWQoKCkgPT4gbGlzdENvbmZpZ0l0ZW0odGhpcy5vcHRpb25zKCkpKTtcbiAgcHJvdGVjdGVkIGh0dHBSZXF1ZXN0RGV0YWlsID0gY29tcHV0ZWQoKCkgPT4gaHR0cFJlcXVlc3REZXRhaWwodGhpcy5vcHRpb25zKCkpKTtcblxuICBwcml2YXRlIGlucHV0RnVuY3Rpb25Db250cm9sID0gc2lnbmFsPE1hcDxzdHJpbmcsIElJbnB1dFZhbGlkRnVuY3Rpb25Db250cm9sRXZlbnQ+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIHF1aWxsRnVuY3Rpb25Db250cm9sID0gc2lnbmFsPEFycmF5PElRdWlsbEZ1bmN0aW9uQ29udHJvbEV2ZW50Pj4oW10pO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IHZpZXdUeXBlID0gaW5wdXQ8VFlQRV9WSUVXX01VTFRJX0xBTkdVQUdFLCBUWVBFX1ZJRVdfTVVMVElfTEFOR1VBR0UgfCB1bmRlZmluZWQ+KCd0ZXh0JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ3RleHQnIH0pO1xuICByZWFkb25seSBzaW5nbGVMYW5ndWFnZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRhdGEgPSBtb2RlbDxBcnJheTxJRGF0YUl0ZW0+PihbXSk7XG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJVmFsaWRSZXF1aXJlZCwgSVZhbGlkUmVxdWlyZWQgfCB1bmRlZmluZWQ+KHZhbGlkUmVxdWlyZWQoKSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdmFsaWRSZXF1aXJlZCgpIH0pO1xuICByZWFkb25seSBpZ25vcmVBZGQgPSBtb2RlbDxib29sZWFuPigpO1xuICByZWFkb25seSB0aXRsZUZpZWxkID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBrZXlIZWFkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHRleHRBcmVhID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGV4dGVuZENsYXNzID0gbW9kZWw8c3RyaW5nPigpO1xuICByZWFkb25seSBleHRlbmRDbGFzc0NvbnRlbnQgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IHZpZXdQb3NpdGlvbiA9IGlucHV0PCdyb3cnIHwgJ2NvbHVtbic+KCdyb3cnKTtcbiAgcmVhZG9ubHkgaWdub3JlUmVtb3ZlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdmFsaWRNYXhMZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGgsIElWYWxpZExlbmd0aCB8IHVuZGVmaW5lZD4oeyBsZW5ndGg6IDAgfSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8geyBsZW5ndGg6IDAgfSB9KTtcbiAgcmVhZG9ubHkgdmFsaWRNaW5MZW5ndGggPSBpbnB1dDxJVmFsaWRMZW5ndGg+KCk7XG4gIHJlYWRvbmx5IGNvdW50Q2hhcmFjdGVycyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZpZXdDb250ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlS2V5ID0gaW5wdXQ8c3RyaW5nPignbGlicy11aS1mb250LWg0cicpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVWYWx1ZSA9IGlucHV0PHN0cmluZz4oJ2xpYnMtdWktZm9udC1oNHMnKTtcbiAgcmVhZG9ubHkgZGF0YUxhbmd1YWdlID0gbW9kZWw8SURhdGFNdWx0aUxhbmd1YWdlPih7fSk7XG4gIHJlYWRvbmx5IG11bHRpTGluZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWNjZXB0TmVnYXRpdmVWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZhbHVlVXBEb3duTnVtYmVyID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBtYXhWYWx1ZU51bWJlciA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb25seUFjY2VwdE5lZ2F0aXZlVmFsdWUgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEV2ZW50TXVsdGlMYW5ndWFnZSA9IG91dHB1dDxJRXZlbnRNdWx0aUxhbmd1YWdlPigpO1xuICByZWFkb25seSBvdXRDaGFuZ2VUeXBlTGFuZ3VhZ2UgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dENoYW5nZVZhbHVlSW5wdXQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1R5cGUgPSB0aGlzLnZpZXdUeXBlKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICBpZiAodmlld1R5cGUgPT09ICdpbnRlZ2VyJykge1xuICAgICAgICAgIHRoaXMubGFuZ0RlZmF1bHQuc2V0KGN1cnJlbmNpZXNTdXBwb3J0KCkpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5zZXQoY3VycmVuY2llc09wdGlvbnMoKSk7XG4gICAgICAgICAgdGhpcy5vcHRpb25zKCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW5jeVVuaXRzKCkucHVzaCh7XG4gICAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgICBpZDogaXRlbS5rZXksXG4gICAgICAgICAgICAgIHR5cGU6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmN1cnJlbmN5VW5pdHMudXBkYXRlKCh2YWx1ZSkgPT4gWy4uLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFMYW5ndWFnZSA9IHRoaXMuZGF0YUxhbmd1YWdlKCk7XG4gICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLnNldChjbG9uZURlZXAoZGF0YUxhbmd1YWdlKSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNTZWxlY3RlZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlKCkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKS5maW5kKChpdGVtKSA9PiBpdGVtLmtleSA9PT0ga2V5KSkge1xuICAgICAgICAgICAgb3B0aW9uc1NlbGVjdGVkLmFkZChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmxhbmdEZWZhdWx0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5sYW5nRGVmYXVsdCgpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc05pbChnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleSkpKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnNTZWxlY3RlZC5hZGQoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhbmd1YWdlRGlzcGxheS5zZXQoQXJyYXkuZnJvbShvcHRpb25zU2VsZWN0ZWQpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNpbmdsZUxhbmd1YWdlID0gdGhpcy5zaW5nbGVMYW5ndWFnZSgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5vdXRDaGFuZ2VUeXBlTGFuZ3VhZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgaWYgKCFzaW5nbGVMYW5ndWFnZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmxhbmdEZWZhdWx0KClbMF07XG4gICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlLnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBba2V5XTogZ2V0KHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLCBrZXkpIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkUmVxdWlyZWQgPSB0aGlzLnZhbGlkUmVxdWlyZWQoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgIGlmICghdmFsaWRSZXF1aXJlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkUmVxdWlyZWREZWZhdWx0LnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBpc1JlcXVpcmVkOiB2YWxpZFJlcXVpcmVkLmlzUmVxdWlyZWQgfSkpO1xuICAgICAgICBpZiAoIXZhbGlkUmVxdWlyZWQuaXNSZXF1aXJlZCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICAgIHRoaXMuZXh0ZW5kQ2xhc3MudXBkYXRlKCh2YWx1ZSkgPT4gYCR7dmFsdWUgfHwgJyd9ICR7dGhpcy52aWV3UG9zaXRpb24oKSA9PT0gJ3JvdycgPyAnZmxleC1yb3cnIDogJ2ZsZXgtY29sJ31gKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJSW5wdXRNdWx0aUxhbmd1YWdlRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja0lzVmFsaWQ6IHRoaXMudmFsaWRhdGUuYmluZCh0aGlzKSxcbiAgICAgIGdldERhdGE6IHRoaXMuZ2V0RGF0YS5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlcklucHV0RnVuY3Rpb25Db250cm9sKGV2ZW50OiBJSW5wdXRWYWxpZEZ1bmN0aW9uQ29udHJvbEV2ZW50LCBrZXk6IHN0cmluZykge1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS5zZXQoa2V5LCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclF1aWxsRnVuY3Rpb25Db250cm9sKGV2ZW50OiBJUXVpbGxGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucXVpbGxGdW5jdGlvbkNvbnRyb2wudXBkYXRlKChpdGVtcykgPT4gWy4uLml0ZW1zLCBldmVudF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RDaGFuZ2UoZXZlbnQ6IElFbWl0U2VsZWN0S2V5IHwgdW5kZWZpbmVkLCBrZXlPbGQ6IHN0cmluZykge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQua2V5ID09PSBrZXlPbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYW5ndWFnZURpc3BsYXkudXBkYXRlKCh2YWx1ZSkgPT4gdmFsdWUubWFwKChpdGVtKSA9PiAoaXRlbSA9PT0ga2V5T2xkID8gKGV2ZW50LmtleSBhcyBzdHJpbmcpIDogaXRlbSkpKTtcbiAgICBkZWxldGUgdGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UoKVtrZXlPbGRdO1xuICAgIGRlbGV0ZSB0aGlzLmRhdGFMYW5ndWFnZSgpW2tleU9sZF07XG4gICAgdGhpcy5zZXREZWZhdWx0RGF0YShldmVudC5rZXkgYXMgc3RyaW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQWRkTGFuZ3VhZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMub3B0aW9ucygpLmZpbmQoKGl0ZW0pID0+ICF0aGlzLmxhbmd1YWdlRGlzcGxheSgpLmluY2x1ZGVzKGl0ZW0ua2V5KSk7XG4gICAgaWYgKCFsYW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubGFuZ3VhZ2VEaXNwbGF5LnVwZGF0ZSgodmFsdWUpID0+IFsuLi52YWx1ZSwgbGFuZy5rZXldKTtcbiAgICB0aGlzLnNldERlZmF1bHREYXRhKGxhbmcua2V5KTtcbiAgICBpZiAodGhpcy5vcHRpb25zKCkubGVuZ3RoID09PSB0aGlzLmxhbmd1YWdlRGlzcGxheSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5pZ25vcmVBZGQuc2V0KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLm91dEV2ZW50TXVsdGlMYW5ndWFnZS5lbWl0KHsgYWN0aW9uOiAnYWRkJywgZGF0YTogdGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UoKSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVtb3ZlTGFuZ3VhZ2UoZXZlbnQ6IEV2ZW50LCBrZXk6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaWdub3JlQWRkLnNldCh0cnVlKTtcbiAgICB0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZS51cGRhdGUoKHZhbHVlKSA9PiB7XG4gICAgICBkZWxldGUgdmFsdWVba2V5XTtcbiAgICAgIHJldHVybiB7IC4uLnZhbHVlIH07XG4gICAgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUlzTXVsdGlLZXkoKTtcbiAgICB0aGlzLmxhbmd1YWdlRGlzcGxheS51cGRhdGUoKHZhbHVlKSA9PiB2YWx1ZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IGtleSkpO1xuICAgIHRoaXMub3V0RXZlbnRNdWx0aUxhbmd1YWdlLmVtaXQoeyBhY3Rpb246ICdyZW1vdmUnLCBkYXRhOiB0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSgpIH0pO1xuICAgIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGF0YSgpIHtcbiAgICBpZiAodGhpcy5zaW5nbGVMYW5ndWFnZSgpKSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmxhbmdEZWZhdWx0KClbMF07XG4gICAgICB0aGlzLmRhdGFMYW5ndWFnZS51cGRhdGUoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgW2tleV06IGdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwga2V5KSB9KSk7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhTGFuZ3VhZ2UoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YSgpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmRhdGEoKSkge1xuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5nRGVmYXVsdCgpWzBdO1xuICAgICAgICBjb25zdCBrZXkgPSBpdGVtLmtleUJpbmREYXRhO1xuICAgICAgICBjb25zdCBkYXRhQnlLZXkgPSBrZXkgPyBnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChrZXkgJiYgZGF0YUJ5S2V5ICYmIGxhbmcgJiYgIWdldDxhbnk+KGRhdGFCeUtleSwgbGFuZykgJiYgIWdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwgbGFuZykpIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2VuZXJhdGVEYXRhKCkge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmdEZWZhdWx0KClbMF07XG4gICAgaWYgKHRoaXMuZGF0YSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5kYXRhKCkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gaXRlbS5rZXlCaW5kRGF0YTtcbiAgICAgICAgaWYgKCFpbmRleCAmJiBpc05pbChnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGxhbmcpKSkge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdERhdGEobGFuZyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5IHx8ICFpc05pbChnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleSkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBba2V5XTogeyBbbGFuZ106ICcnIH0gfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRhKCkubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMuZGF0YUxhbmd1YWdlKCkgfHwgIU9iamVjdC5rZXlzKHRoaXMuZGF0YUxhbmd1YWdlKCkpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldERlZmF1bHREYXRhKGxhbmcpO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhLnNldChbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiB0aGlzLnZpZXdUeXBlKCksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIoKSxcbiAgICAgICAgICBpc09uZVZhbHVlOiBmYWxzZSxcbiAgICAgICAgICBrZXlCaW5kRGF0YTogJycsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldERlZmF1bHREYXRhKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIFtrZXldOiAnJyB9KSk7XG4gICAgdGhpcy5kYXRhTGFuZ3VhZ2UudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIFtrZXldOiAnJyB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS52YWx1ZXMoKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMucXVpbGxGdW5jdGlvbkNvbnRyb2woKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc2luZ2xlTGFuZ3VhZ2UoKSkge1xuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhKCkubGVuZ3RoID09PSAxKSB7XG4gICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlRGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlSXNNdWx0aUtleSgpO1xuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVEZWZhdWx0KCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgaWYgKHRoaXMudmFsaWRSZXF1aXJlZCgpLmlzUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMudmFsaWRSZXF1aXJlZERlZmF1bHQudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIGlzUmVxdWlyZWQ6IHRydWUgfSkpO1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkSW5wdXQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlKCkpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy52YWxpZFJlcXVpcmVkRGVmYXVsdC51cGRhdGUoKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgaXNSZXF1aXJlZDogZmFsc2UgfSkpO1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkSW5wdXQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UoKSkpIHtcbiAgICAgIGlmIChrZXkgIT09ICdpZCcgJiYga2V5ICE9PSB0aGlzLmtleUhlYWRlcigpICYmIGdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwga2V5KSAmJiBrZXkgIT09IHRoaXMubGFuZ0RlZmF1bHQoKVswXSkge1xuICAgICAgICB0aGlzLnZhbGlkUmVxdWlyZWREZWZhdWx0LnVwZGF0ZSgodmFsdWUpID0+ICh7IC4uLnZhbHVlLCBpc1JlcXVpcmVkOiB0cnVlIH0pKTtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jaGVja1ZhbGlkSW5wdXQoKSkpIHtcbiAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsaWRSZXF1aXJlZERlZmF1bHQudXBkYXRlKCh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIGlzUmVxdWlyZWQ6IGZhbHNlIH0pKTtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCkpKSB7XG4gICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tWYWxpZElucHV0KCkge1xuICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5wdXRGdW5jdGlvbkNvbnRyb2woKS52YWx1ZXMoKSkge1xuICAgICAgaWYgKCEoYXdhaXQgY29udHJvbC5jaGVja0lzVmFsaWQoKSkpIHtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUlzTXVsdGlLZXkoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSgpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEoKVswXS52YWxpZFJlcXVpcmVkPy5pc1JlcXVpcmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKCFpdGVtLmtleUJpbmREYXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKGdldCh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSwgaXRlbS5rZXlCaW5kRGF0YSkpLmZvckVhY2goYXN5bmMgKGtleUJpbmQpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmRhdGFMYW5ndWFnZUNoYW5nZSgpKSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gaXRlbS5rZXlCaW5kRGF0YSB8fCBrZXkgPT09IGtleUJpbmQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0KHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLCBrZXkpICYmIHRoaXMub3B0aW9ucygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSBrZXkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YSgpLmZvckVhY2goYXN5bmMgKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdC5pc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhKCkuZm9yRWFjaChhc3luYyAoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy52YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQuaXNSZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmQgPSBnZXQodGhpcy5kYXRhTGFuZ3VhZ2VDaGFuZ2UsIGtleUJpbmQpO1xuICAgICAgICAgIGNvbnN0IGRhdGFMYW5ndWFnZUNoYW5nZUJ5S2V5QmluZERhdGEgPSBpdGVtLmtleUJpbmREYXRhID8gZ2V0KHRoaXMuZGF0YUxhbmd1YWdlQ2hhbmdlLCBpdGVtLmtleUJpbmREYXRhKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoKCFkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmQgJiYgIWdldChkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmREYXRhLCBrZXlCaW5kKSkgfHwgKGRhdGFMYW5ndWFnZUNoYW5nZUJ5S2V5QmluZCAmJiBnZXQoZGF0YUxhbmd1YWdlQ2hhbmdlQnlLZXlCaW5kRGF0YSwga2V5QmluZCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZGF0YUxhbmd1YWdlQ2hhbmdlQnlLZXlCaW5kKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRmlyc3QgPSB0aGlzLmRhdGEoKVswXTtcbiAgICAgICAgICAgIGlmIChkYXRhRmlyc3QgJiYgZGF0YUZpcnN0LnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdCkge1xuICAgICAgICAgICAgICBkYXRhRmlyc3QudmFsaWRSZXF1aXJlZExhbmdEZWZhdWx0LmlzUmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrVmFsaWRJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWdldChkYXRhTGFuZ3VhZ2VDaGFuZ2VCeUtleUJpbmREYXRhLCBrZXlCaW5kKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNlY29uZCA9IHRoaXMuZGF0YSgpWzFdO1xuICAgICAgICAgICAgaWYgKGRhdGFTZWNvbmQgJiYgZGF0YVNlY29uZC52YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgZGF0YVNlY29uZC52YWxpZFJlcXVpcmVkTGFuZ0RlZmF1bHQuaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tWYWxpZElucHV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVySW5wdXRDaGFuZ2UoKSB7XG4gICAgdGhpcy5vdXRDaGFuZ2VWYWx1ZUlucHV0LmVtaXQoKTtcbiAgICB0aW1lcig1MDApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnZhbGlkYXRlKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgQGlmICh0aXRsZUZpZWxkKCk7IGFzIHRpdGxlRmllbGQpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg2bSBtYi1bNHB4XVwiPnt7IHRpdGxlRmllbGQgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgfVxuICBAZm9yIChrZXkgb2YgbGFuZ3VhZ2VEaXNwbGF5KCk7IHRyYWNrIGtleSkge1xuICAgIEBpZiAoIXZpZXdDb250ZW50KCkpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW2NsYXNzLm10LVs0cHhdXT1cIiEkZmlyc3RcIlxuICAgICAgICBbY2xhc3MuaGlkZGVuXT1cInNpbmdsZUxhbmd1YWdlKCkgJiYgISRmaXJzdFwiXG4gICAgICAgIFtjbGFzcy5tdC1bOHB4XV09XCJjb3VudENoYXJhY3RlcnMoKSAmJiAhJGZpcnN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHt7IGV4dGVuZENsYXNzKCkgfX1cIj5cbiAgICAgICAgICBAaWYgKCFzaW5nbGVMYW5ndWFnZSgpKSB7XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgW2xpc3RDb25maWddPVwibGlzdENvbmZpZ0l0ZW0oKVwiXG4gICAgICAgICAgICAgICAgW2h0dHBSZXF1ZXN0RGV0YWlsSXRlbUJ5SWRdPVwiaHR0cFJlcXVlc3REZXRhaWwoKVwiXG4gICAgICAgICAgICAgICAgW2xpc3RLZXlzRGlzYWJsZV09XCJsYW5ndWFnZURpc3BsYXkoKSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0RGlzYWJsZUtleVBpcGU6IGtleVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiRpbmRleCA9PT0gMCB8fCByZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICBbbGlzdEtleVNlbGVjdGVkXT1cImtleVwiXG4gICAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndy1bMTUwcHhdJ1wiXG4gICAgICAgICAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0Q2hhbmdlKCRldmVudCwga2V5KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHJlbGF0aXZlIHAtMCB7eyBleHRlbmRDbGFzc0NvbnRlbnQoKSB9fVwiXG4gICAgICAgICAgICBbY2xhc3Mudy1bY2FsYygxMDAlLTE1MHB4KV1dPVwiIXRleHRBcmVhKCkgJiYgIXNpbmdsZUxhbmd1YWdlKCkgJiYgdmlld1Bvc2l0aW9uKCkgPT09ICdyb3cnXCJcbiAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwidGV4dEFyZWEoKSB8fCBzaW5nbGVMYW5ndWFnZSgpIHx8IHZpZXdQb3NpdGlvbigpID09PSAnY29sdW1uJ1wiPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgQGlmICgoaXRlbS50eXBlICE9PSAnZWRpdG9yJyAmJiAhaXRlbS5pc09uZVZhbHVlKSB8fCAoaXRlbS5pc09uZVZhbHVlICYmICRmaXJzdCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIHt7IGl0ZW0uY2xhc3NJbmNsdWRlSW5wdXQgfX1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctZnVsbF09XCIoc2luZ2xlTGFuZ3VhZ2UoKSAmJiAhbXVsdGlMaW5lKCkpIHx8IHJlYWRvbmx5KCkgfHwgJGZpcnN0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy53LVtjYWxjKDEwMCUtMjhweCldXT1cInRleHRBcmVhKCkgfHwgKCFzaW5nbGVMYW5ndWFnZSgpICYmIG11bHRpTGluZSgpKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Mudy1bY2FsYygxMDAlLTQwcHgpXV09XCIhdGV4dEFyZWEoKSAmJiAhc2luZ2xlTGFuZ3VhZ2UoKSAmJiAhbXVsdGlMaW5lKCkgJiYgIXJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctW2NhbGMoMTAwJS03MHB4KV1dPVwiIXRleHRBcmVhKCkgJiYgIXNpbmdsZUxhbmd1YWdlKCkgJiYgbXVsdGlMaW5lKClcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm10LVs4cHhdXT1cInZpZXdQb3NpdGlvbigpID09PSAnY29sdW1uJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWwtWzEycHhdXT1cIiFzaW5nbGVMYW5ndWFnZSgpICYmICF0ZXh0QXJlYSgpICYmIHZpZXdQb3NpdGlvbigpID09PSAncm93J1wiPlxuICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmtleUJpbmREYXRhIHwgTGlic1VpQ29tcG9uZW50c0lucHV0c011bHRpTGFuZ3VhZ2VHZXRJdGVtUGlwZTogZGF0YUxhbmd1YWdlQ2hhbmdlOyBhcyBpdGVtTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIEBsZXQgY29uc3RIdG1sUGxhY2Vob2xkZXIgPSBpdGVtLnBsYWNlaG9sZGVyIHx8ICcgJztcbiAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdmFsaWRcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YVR5cGVdPVwiaXRlbS50eXBlID09PSAnbnVtYmVyJyA/ICdpbnQnIDogaXRlbS50eXBlID09PSAndGV4dCcgPyAnc3RyaW5nJyA6IGl0ZW0udHlwZSA9PT0gJ2JpZ2ludCcgPyAnYmlnaW50JyA6ICdmbG9hdCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbU1hcFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkTmFtZUJpbmRdPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb25maWddPVwiY291bnRDaGFyYWN0ZXJzKCkgPyB7IGNsYXNzSW5jbHVkZTogJ2Fic29sdXRlIC10b3AtWzIwcHhdJywgcmVxdWlyZWQ6IHRydWUgfSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RhZ0lucHV0XT1cInRleHRBcmVhKCkgPyAndGV4dGFyZWEnIDogJ2lucHV0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbnN0SHRtbFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZW1pdEVtcHR5SW5EYXRhVHlwZU51bWJlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsaWRSZXF1aXJlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleCA9PT0gMCAmJiBkYXRhKCkubGVuZ3RoIDw9IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWxpZFJlcXVpcmVkRGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJGluZGV4ID09PSAwICYmIGRhdGEoKS5sZW5ndGggPiAxICYmIGl0ZW0udmFsaWRSZXF1aXJlZExhbmdEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtLnZhbGlkUmVxdWlyZWRMYW5nRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS52YWxpZFJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGl0ZW0udmFsaWRSZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWxpZFJlcXVpcmVkKCkgfHwgeyBpc1JlcXVpcmVkOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdW5pdHNSaWdodF09XCJjdXJyZW5jeVVuaXRzKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtrZXlTZWxlY3RlZFVuaXRSaWdodF09XCJrZXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvdW50XT1cImNvdW50Q2hhcmFjdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cInZhbGlkTWF4TGVuZ3RoLmxlbmd0aCA/IHZhbGlkTWF4TGVuZ3RoLmxlbmd0aCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpeGVkRmxvYXRdPVwiaXRlbS50eXBlID09PSAnYmlnaW50JyA/IDQgOiAxNFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbGlkTWluTGVuZ3RoXT1cInsgbGVuZ3RoOiB2YWxpZE1pbkxlbmd0aCgpPy5sZW5ndGggfHwgLTEsIG1lc3NhZ2U6ICdpMThuX21pbmltdW1fbGVuZ3RoX251bWJlcicsIGludGVycG9sYXRlUGFyYW1zOiB7IG51bWJlcjogdmFsaWRNaW5MZW5ndGgoKT8ubGVuZ3RoIH0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdE5lZ2F0aXZlVmFsdWVdPVwiYWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVVcERvd25OdW1iZXJdPVwidmFsdWVVcERvd25OdW1iZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21heFZhbHVlTnVtYmVyXT1cIm1heFZhbHVlTnVtYmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZV09XCJvbmx5QWNjZXB0TmVnYXRpdmVWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAob3V0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlcklucHV0Q2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJJbnB1dEZ1bmN0aW9uQ29udHJvbCgkZXZlbnQsIGtleSlcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXRlbS50eXBlID09PSAnZWRpdG9yJykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVtjYWxjKDEwMCUtMjhweCldXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1bMjUwcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5rZXlCaW5kRGF0YSB8IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNdWx0aUxhbmd1YWdlR2V0SXRlbVBpcGU6IGRhdGFMYW5ndWFnZUNoYW5nZTsgYXMgaXRlbU1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgIEBsZXQgY29uc3RIdG1sUGxhY2Vob2xkZXIgPSBpdGVtLnBsYWNlaG9sZGVyIHx8ICcgJztcbiAgICAgICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWlucHV0cy1xdWlsbFxuICAgICAgICAgICAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtTWFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZE5hbWVCaW5kXT1cImtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsaWRSZXF1aXJlZF09XCIkaW5kZXggPT09IDAgJiYgZGF0YSgpLmxlbmd0aCA8PSAxID8gdmFsaWRSZXF1aXJlZERlZmF1bHQoKSA6IHZhbGlkUmVxdWlyZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29uc3RIdG1sUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZvY3VzKT1cImhhbmRsZXJJbnB1dENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRDaGFuZ2UpPVwiaGFuZGxlcklucHV0Q2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclF1aWxsRnVuY3Rpb25Db250cm9sKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmICgkaW5kZXggPiAwICYmIGRhdGEoKS5sZW5ndGggPT09IDEgJiYgIWlnbm9yZVJlbW92ZSgpICYmICFyZWFkb25seSgpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBtbC1bMTZweF1cIj5cbiAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstY3VzdG9tJ1wiXG4gICAgICAgICAgICAgICAgICBbYnV0dG9uQ3VzdG9tXT1cIntcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU3RlcENvbG9yOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogJyMwNzE2MzEnLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHRfaG92ZXI6ICcjZWUyZDQxJyxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2FjdGl2ZTogJyNlZTJkNDEnLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHRfZGlzYWJsZTogJzA3MTYzMScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJvb3RDb2xvcjogJyMwNzE2MzEnLFxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwieyBjb25maWc6IHsgY29udGVudDogJ2kxOG5fZGVsZXRlJywgekluZGV4OiAxMjA1IH0gfVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLXJlbW92ZSdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtMCdcIlxuICAgICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJSZW1vdmVMYW5ndWFnZSgkZXZlbnQsIGtleSlcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoJGluZGV4ID09PSAwICYmICFzaW5nbGVMYW5ndWFnZSgpICYmIG9wdGlvbnMoKS5sZW5ndGggIT09IGxhbmd1YWdlRGlzcGxheSgpLmxlbmd0aCAmJiB2aWV3VHlwZSgpICE9PSAnaW50ZWdlcicgJiYgIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstcHJpbWFyeSdcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidpMThuX2FkZF9sYW5ndWFnZSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hZGQnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFweC0wIG10LVs4cHhdJ1wiXG4gICAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckFkZExhbmd1YWdlKCRldmVudClcIiAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmICh2aWV3Q29udGVudCgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICBAaWYgKHNpbmdsZUxhbmd1YWdlKCkpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJzaW5nbGVMYW5ndWFnZSgpICYmICEkZmlyc3RcIlxuICAgICAgICAgICAgW2NsYXNzLm10LVs0cHhdXT1cIiFzaW5nbGVMYW5ndWFnZSgpICYmICEkZmlyc3RcIj5cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzSW5jbHVkZUtleSgpXCJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJrZXkgfCBMaWJzVWlDb21wb25lbnRzSW5wdXRzTXVsdGlMYW5ndWFnZURpc3BsYXlMYW5ndWFnZVBpcGU6IG9wdGlvbnMoKVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidy1bY2FsYygxMDAlLTEwMHB4KV1cIlxuICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwic2luZ2xlTGFuZ3VhZ2UoKSAmJiAhJGZpcnN0XCJcbiAgICAgICAgICBbY2xhc3MuZmxleF09XCIhc2luZ2xlTGFuZ3VhZ2UgfHwgJGZpcnN0XCJcbiAgICAgICAgICBbY2xhc3MubXQtWzRweF1dPVwiIXNpbmdsZUxhbmd1YWdlKCkgJiYgISRmaXJzdFwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NJbmNsdWRlVmFsdWUoKVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cIihkYXRhTGFuZ3VhZ2VDaGFuZ2UoKVtrZXldIHx8IGRhdGFMYW5ndWFnZUNoYW5nZSgpW2tleV0gPT09IDAgPyBkYXRhTGFuZ3VhZ2VDaGFuZ2UoKVtrZXldICsgJycgOiAnJykgfCBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlXCJcbiAgICAgICAgICAgIFtjb25maWddPVwieyB6SW5kZXg6IHpJbmRleCgpIH1cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuICBAaWYgKHZpZXdUeXBlKCkgPT09ICdpbnRlZ2VyJyAmJiAhdGhpcy5pZ25vcmVBZGQoKSAmJiAhcmVhZG9ubHkoKSkge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgIHR5cGU9XCJidXR0b24tbGluay1wcmltYXJ5XCJcbiAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tYWRkIG1yLVs4cHhdIHRleHQtWzEwcHhdJ1wiXG4gICAgICBbY2xhc3NMYWJlbF09XCInbGlicy11aS1mb250LWg1cidcIlxuICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXBiLTAnXCJcbiAgICAgIFtsYWJlbF09XCInaTE4bl9hZGRfY3VycmVuY3knXCJcbiAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQWRkTGFuZ3VhZ2UoJGV2ZW50KVwiIC8+XG4gIH1cbjwvZGl2PlxuIl19