@libs-ui/components-tabs 0.2.222 → 0.2.224
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.
|
@@ -161,17 +161,16 @@ export class LibsUiComponentsTabsComponent {
|
|
|
161
161
|
if (resetDisable) {
|
|
162
162
|
itemSelected.update(item => ({ ...item, disable: false }));
|
|
163
163
|
}
|
|
164
|
-
this.handlerClickItem(
|
|
164
|
+
this.handlerClickItem(itemSelected);
|
|
165
165
|
}
|
|
166
166
|
handlerSelectedKey(event) {
|
|
167
167
|
if (!event) {
|
|
168
168
|
return;
|
|
169
169
|
}
|
|
170
|
-
this.handlerClickItem(
|
|
170
|
+
this.handlerClickItem(convertObjectToSignal(event.item));
|
|
171
171
|
this.outDragTabChange.emit();
|
|
172
172
|
}
|
|
173
|
-
async handlerClickItem(
|
|
174
|
-
event.stopPropagation();
|
|
173
|
+
async handlerClickItem(item) {
|
|
175
174
|
if (item().disable || this.disable()) {
|
|
176
175
|
return;
|
|
177
176
|
}
|
|
@@ -203,7 +202,7 @@ export class LibsUiComponentsTabsComponent {
|
|
|
203
202
|
return [...items, item];
|
|
204
203
|
});
|
|
205
204
|
if (selected) {
|
|
206
|
-
this.handlerClickItem(
|
|
205
|
+
this.handlerClickItem(item);
|
|
207
206
|
}
|
|
208
207
|
}
|
|
209
208
|
async calculatorTabsItemDisplay() {
|
|
@@ -247,7 +246,7 @@ export class LibsUiComponentsTabsComponent {
|
|
|
247
246
|
this.onDestroy.complete();
|
|
248
247
|
}
|
|
249
248
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
250
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsComponent, isStandalone: true, selector: "libs_ui-components-tabs", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, heightTabItem: { classPropertyName: "heightTabItem", publicName: "heightTabItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, allowDragDropPosition: { classPropertyName: "allowDragDropPosition", publicName: "allowDragDropPosition", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configCss: { classPropertyName: "configCss", publicName: "configCss", isSignal: true, isRequired: false, transformFunction: null }, popoverShowMoreTabItem: { classPropertyName: "popoverShowMoreTabItem", publicName: "popoverShowMoreTabItem", isSignal: true, isRequired: false, transformFunction: null }, checkCanChangeTabSelected: { classPropertyName: "checkCanChangeTabSelected", publicName: "checkCanChangeTabSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", configCss: "configCssChange", outKeySelected: "outKeySelected", outFunctionsControl: "outFunctionsControl", outDragTabChange: "outDragTabChange", outDisplayMoreItem: "outDisplayMoreItem", outAction: "outAction" }, viewQueries: [{ propertyName: "headerEl", first: true, predicate: ["headerEl"], descendants: true, isSignal: true }, { propertyName: "headerLeftEl", first: true, predicate: ["headerLeftEl"], descendants: true, isSignal: true }, { propertyName: "headerRightEl", first: true, predicate: ["headerRightEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\"\n (outAction)=\"handlerAction($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: LibsUiComponentsDragContainerDirective, selector: "[LibsUiComponentsDragContainerDirective]", inputs: ["disableDragContainer", "mode", "directionDrag", "viewEncapsulation", "acceptDragSameGroup", "placeholder", "groupName", "dropToGroupName", "items", "stylesOverride"], outputs: ["itemsChange", "outDragStartContainer", "outDragOverContainer", "outDragLeaveContainer", "outDragEndContainer", "outDroppedContainer", "outDroppedContainerEmpty", "outFunctionControl"] }, { kind: "directive", type: LibsUiDragItemDirective, selector: "[LibsUiDragItemDirective]", inputs: ["fieldId", "item", "itemInContainerVirtualScroll", "throttleTimeHandlerDraggingEvent", "ignoreStopEvent", "onlyMouseDownStopEvent", "dragRootElement", "dragBoundary", "dragBoundaryAcceptMouseLeaveContainer", "elementContainer", "zIndex", "disable"], outputs: ["outDragStart", "outDragOver", "outDragLeave", "outDragEnd", "outDropped"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { 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: LibsUiComponentsTabsItemComponent, selector: "libs_ui-components-tabs-item", inputs: ["ignoreCalculatorTab", "step", "mode", "tabs", "item", "keySelected", "fieldLabel", "fieldKey", "cssDefault", "size", "disable", "disableLabel", "zIndex", "changeViewTab"], outputs: ["itemChange", "outAction"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
249
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsComponent, isStandalone: true, selector: "libs_ui-components-tabs", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, heightTabItem: { classPropertyName: "heightTabItem", publicName: "heightTabItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, allowDragDropPosition: { classPropertyName: "allowDragDropPosition", publicName: "allowDragDropPosition", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configCss: { classPropertyName: "configCss", publicName: "configCss", isSignal: true, isRequired: false, transformFunction: null }, popoverShowMoreTabItem: { classPropertyName: "popoverShowMoreTabItem", publicName: "popoverShowMoreTabItem", isSignal: true, isRequired: false, transformFunction: null }, checkCanChangeTabSelected: { classPropertyName: "checkCanChangeTabSelected", publicName: "checkCanChangeTabSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", configCss: "configCssChange", outKeySelected: "outKeySelected", outFunctionsControl: "outFunctionsControl", outDragTabChange: "outDragTabChange", outDisplayMoreItem: "outDisplayMoreItem", outAction: "outAction" }, viewQueries: [{ propertyName: "headerEl", first: true, predicate: ["headerEl"], descendants: true, isSignal: true }, { propertyName: "headerLeftEl", first: true, predicate: ["headerLeftEl"], descendants: true, isSignal: true }, { propertyName: "headerRightEl", first: true, predicate: ["headerRightEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div\n class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [class.!pointer-events-none]=\"item().disable || disable()\"\n [disable]=\"item().disable || disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem(item)\"\n (outAction)=\"handlerAction($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div\n class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: LibsUiComponentsDragContainerDirective, selector: "[LibsUiComponentsDragContainerDirective]", inputs: ["disableDragContainer", "mode", "directionDrag", "viewEncapsulation", "acceptDragSameGroup", "placeholder", "groupName", "dropToGroupName", "items", "stylesOverride"], outputs: ["itemsChange", "outDragStartContainer", "outDragOverContainer", "outDragLeaveContainer", "outDragEndContainer", "outDroppedContainer", "outDroppedContainerEmpty", "outFunctionControl"] }, { kind: "directive", type: LibsUiDragItemDirective, selector: "[LibsUiDragItemDirective]", inputs: ["fieldId", "item", "itemInContainerVirtualScroll", "throttleTimeHandlerDraggingEvent", "ignoreStopEvent", "onlyMouseDownStopEvent", "dragRootElement", "dragBoundary", "dragBoundaryAcceptMouseLeaveContainer", "elementContainer", "zIndex", "disable"], outputs: ["outDragStart", "outDragOver", "outDragLeave", "outDragEnd", "outDropped"] }, { 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: "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: LibsUiComponentsTabsItemComponent, selector: "libs_ui-components-tabs-item", inputs: ["ignoreCalculatorTab", "step", "mode", "tabs", "item", "keySelected", "fieldLabel", "fieldKey", "cssDefault", "size", "disable", "disableLabel", "zIndex", "changeViewTab"], outputs: ["itemChange", "outAction"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outKeySearch", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
251
250
|
}
|
|
252
251
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, decorators: [{
|
|
253
252
|
type: Component,
|
|
@@ -258,6 +257,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
258
257
|
LibsUiComponentsButtonsButtonComponent,
|
|
259
258
|
LibsUiComponentsTabsItemComponent,
|
|
260
259
|
LibsUiComponentsListComponent
|
|
261
|
-
], template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div
|
|
260
|
+
], template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div\n class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [class.!pointer-events-none]=\"item().disable || disable()\"\n [disable]=\"item().disable || disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem(item)\"\n (outAction)=\"handlerAction($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div\n class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"] }]
|
|
262
261
|
}] });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyxzQ0FBc0MsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZILE9BQU8sRUFBb0IsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQTBDLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFrQmpELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsbUJBQW1CO0lBQ1QsWUFBWSxHQUFHLE1BQU0sQ0FB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dUIsK1pBQ3ZCLGdDQUFnQyxxZUFDaEMsc0NBQXNDLHNqQkFDdEMsaUNBQWlDLHFTQUNqQyw2QkFBNkI7OzRGQUdwQiw2QkFBNkI7a0JBaEJ6QyxTQUFTOytCQUVFLHlCQUF5QixjQUd2QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1Asc0NBQXNDO3dCQUN0Qyx1QkFBdUI7d0JBQ3ZCLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0QyxpQ0FBaUM7d0JBQ2pDLDZCQUE2QjtxQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElEcm9wLCBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSwgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcCc7XG5pbXBvcnQgeyBJTGlzdERhdGFFbWl0S2V5LCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJUG9wb3ZlciwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgY29udmVydE9iamVjdFRvU2lnbmFsLCBpc05pbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJVGFiQ3NzQ29uZmlnLCBJVGFicywgSVRhYnNGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVRhYnNJdGVtLCBJVGFic0l0ZW1FdmVudCwgVFlQRV9UQUJfTU9ERSB9IGZyb20gJy4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vaXRlbS9pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWJNb3JlTGlzdENvbmZpZyB9IGZyb20gJy4vdXRpbHMvdGFicyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUsXG4gICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1RhYnNJdGVtQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcm90ZWN0ZWQgaXRlbXNEaXNwbGF5ID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4+PihbXSk7XG4gIHByb3RlY3RlZCBkaXNwbGF5TW9yZUl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgdGFiTW9yZUxpc3RDb25maWcgPSBjb21wdXRlZCgoKSA9PiB0YWJNb3JlTGlzdENvbmZpZyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5maWVsZEtleSgpLCB0aGlzLmZpZWxkTGFiZWwoKSwgdGhpcy50YWJzKCksIHRoaXMuZGlzYWJsZSgpKSk7XG4gIHByb3RlY3RlZCBjaGFuZ2VWaWV3VGFiID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIGdyb3VwTmFtZSA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSk7XG4gIHByb3RlY3RlZCBzdHlsZXNEcmFnRHJvcE92ZXJyaWRlQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVwZGF0ZVN0eWxlc0RyYWdEcm9wT3ZlcnJpZGUoKSk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgdGFicyA9IGlucHV0LnJlcXVpcmVkPElUYWJzPigpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IG1vZGVsLnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbW9kZSA9IGlucHV0PFRZUEVfVEFCX01PREU+KCdsZWZ0Jyk7XG4gIHJlYWRvbmx5IGZpZWxkS2V5ID0gaW5wdXQ8c3RyaW5nPigna2V5Jyk7XG4gIHJlYWRvbmx5IGZpZWxkTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCdsYWJlbCcpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaGVpZ2h0VGFiSXRlbSA9IGlucHV0PG51bWJlcj4oNDApO1xuICByZWFkb25seSBpZ25vcmVDYWxjdWxhdG9yVGFiID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaXplID0gaW5wdXQ8J2xhbmdlcicgfCAnbWVkaXVtJz4oJ21lZGl1bScpO1xuICByZWFkb25seSBhbGxvd0RyYWdEcm9wUG9zaXRpb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IGNvbmZpZ0NzcyA9IG1vZGVsPElUYWJDc3NDb25maWc+KCk7XG4gIHJlYWRvbmx5IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0gPSBpbnB1dDxJUG9wb3Zlcj4oKTtcbiAgcmVhZG9ubHkgY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCA9IGlucHV0PCgpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEtleVNlbGVjdGVkID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJVGFic0Z1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXREcmFnVGFiQ2hhbmdlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dERpc3BsYXlNb3JlSXRlbSA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRBY3Rpb24gPSBvdXRwdXQ8SVRhYnNJdGVtRXZlbnQ+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckxlZnRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyTGVmdEVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyUmlnaHRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyUmlnaHRFbCcpO1xuXG4gIC8qIElOSkVDVCovXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlVGFic0Nzc0NvbmZpZygpO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGFkZFRhYnNJdGVtOiB0aGlzLmFkZFRhYnNJdGVtLmJpbmQodGhpcyksXG4gICAgICBjYWxjdWxhdG9yVGFic0l0ZW1zRGlzcGxheTogdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5LmJpbmQodGhpcyksXG4gICAgICBzZWxlY3RlZFRhYnNJdGVtOiB0aGlzLmhhbmRsZXJTZWxlY3RlZFRhYnNJdGVtLmJpbmQodGhpcylcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tb2RlKCkgIT09ICdsZWZ0JyB8fCB0aGlzLmlnbm9yZUNhbGN1bGF0b3JUYWIoKSkge1xuICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgICAgdGhpcy5pdGVtc0Rpc3BsYXkuc2V0KHRoaXMudGFicygpLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50YWJzKCkuaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlVmlld1RhYi5waXBlKGRlYm91bmNlVGltZSgyMCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJzQ3NzQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ0NzcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb2RlKCkpIHtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAnbWwtWzIwcHhdIG1yLVsxNnB4XScsXG4gICAgICAgICAgb3RoZXI6ICdtbC1bMjBweF0gbXItWzE2cHhdJ1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAncHgtWzEycHhdIG1sLVsxOHB4XSBtci1bMThweF0nLFxuICAgICAgICAgIG90aGVyOiAncHgtWzEycHhdIG14LVsxOHB4XScsXG4gICAgICAgICAgaGVhZGVyOiAnZmxleCBqdXN0aWZ5LWNlbnRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyLWhhcy1saW5lJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ3B4LVsxNnB4XScsXG4gICAgICAgICAgb3RoZXI6ICdweC1bMTZweF0nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ2l0ZW1zLWNlbnRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3BhY2UtYmV0d2Vlbic6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdteC1hdXRvJyxcbiAgICAgICAgICBvdGhlcjogJ214LWF1dG8nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ3ctZnVsbCdcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3R5bGVzRHJhZ0Ryb3BPdmVycmlkZSgpIHtcbiAgICBpZiAodGhpcy5hbGxvd0RyYWdEcm9wUG9zaXRpb24oKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tcGxhY2Vob2xkZXInLFxuICAgICAgICAgIHN0eWxlczogJydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0nLFxuICAgICAgICAgIHN0eWxlczogJ2N1cnNvcjogbW92ZTsnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyYWdnaW5nJyxcbiAgICAgICAgICBzdHlsZXM6ICdjdXJzb3I6IG1vdmU7IGJhY2tncm91bmQ6ICNkZGRkZGQ7J1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtJyxcbiAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kaXNhYmxlJyxcbiAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJvcENvbnRhaW5lcihldmVudDogSURyb3ApIHtcbiAgICBjb25zdCB7IGl0ZW1EcmFnSW5mbyB9ID0gZXZlbnQ7XG4gICAgaWYgKCFpdGVtRHJhZ0luZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYnMoKS5pdGVtcztcbiAgICBjb25zdCB7IGluZGV4RHJhZywgaW5kZXhEcm9wIH0gPSBpdGVtRHJhZ0luZm87XG4gICAgaWYgKGlzTmlsKGluZGV4RHJhZykgfHwgaXNOaWwoaW5kZXhEcm9wKSB8fCBpbmRleERyb3AgPT09IGluZGV4RHJhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtRHJhZyA9IGl0ZW1zKClbaW5kZXhEcmFnIGFzIG51bWJlcl07XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyYWcgYXMgbnVtYmVyLCAxKTtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyb3AgYXMgbnVtYmVyLCAwLCBpdGVtRHJhZyk7XG4gICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICB9KTtcbiAgICB0aGlzLm91dERyYWdUYWJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVyU2VsZWN0ZWRUYWJzSXRlbShrZXk6IHN0cmluZywgcmVzZXREaXNhYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IHRoaXMudGFicygpLml0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuICAgIGlmICghaXRlbVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXNldERpc2FibGUpIHtcbiAgICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBkaXNhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckNsaWNrSXRlbSh7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4geyByZXR1cm4gfSB9IGFzIEV2ZW50LCBpdGVtU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGNvbnZlcnRPYmplY3RUb1NpZ25hbChldmVudC5pdGVtKSk7XG4gICAgdGhpcy5vdXREcmFnVGFiQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYnNJdGVtPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChpdGVtKCkuZGlzYWJsZSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gdGhpcy5jaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKCk7XG4gICAgaWYgKGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCgpO1xuICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZUl0ZW1TZWxlY3RlZChpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW06IFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4pIHtcbiAgICB0aGlzLmtleVNlbGVjdGVkLnNldChpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgdGhpcy5vdXRLZXlTZWxlY3RlZC5lbWl0KHRoaXMua2V5U2VsZWN0ZWQoKSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQWN0aW9uKGV2ZW50OiBJVGFic0l0ZW1FdmVudCkge1xuICAgIHRoaXMub3V0QWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRUYWJzSXRlbShpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFic0l0ZW0+LCBzZWxlY3RlZCA9IHRydWUsIGFkZEZpcnN0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXM7XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGlmIChhZGRGaXJzdCkge1xuICAgICAgICByZXR1cm4gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4uaXRlbXMsIGl0ZW1dO1xuICAgIH0pO1xuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCkge1xuICAgIGxldCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zKCk7XG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICBpZiAoaW5kZXhJdGVtU2VsZWN0ZWQgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChmYWxzZSk7XG4gICAgbGV0IGRpc3BsYXlNb3JlSXRlbSA9IGZhbHNlO1xuICAgIGNvbnN0IGhlYWRlcldpZHRoID0gdGhpcy5oZWFkZXJFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMDtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBpdGVtc1tpbmRleEl0ZW1TZWxlY3RlZF07XG4gICAgY29uc3QgaXRlbVNlbGVjdGVkV2lkdGggPSBpdGVtU2VsZWN0ZWQoKS5zcGVjaWZpY1dpZHRoO1xuICAgIGxldCB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ID0gKHRoaXMuaGVhZGVyTGVmdEVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwKSArICh0aGlzLmhlYWRlclJpZ2h0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgMzI7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghaXRlbSgpLnNwZWNpZmljV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IGZhbHNlIH0pKTtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGl0ZW0oKS5zcGVjaWZpY1dpZHRoIHx8IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKyBpdGVtV2lkdGggKyAoaW5kZXggPCBpbmRleEl0ZW1TZWxlY3RlZCA/IGl0ZW1TZWxlY3RlZFdpZHRoIDogMCk7XG4gICAgICB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ICs9IGl0ZW1XaWR0aDtcbiAgICAgIGlmICh3aWR0aCA+IGhlYWRlcldpZHRoKSB7XG4gICAgICAgIGRpc3BsYXlNb3JlSXRlbSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICB9KTtcbiAgICBpdGVtU2VsZWN0ZWQudXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgbm90RGlzcGxheSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0oKS5zcGVjaWZpY0Rpc3BsYXkgPT09IGZhbHNlKTtcbiAgICBpdGVtcyA9IGRpc3BsYXkuY29uY2F0KG5vdERpc3BsYXkpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIG9yZGVyOiBpbmRleCB9KSkpO1xuICAgIHRoaXMudGFicygpLml0ZW1zLnNldChpdGVtcy5zb3J0KChwcmV2LCBuZXh0KSA9PiAocHJldigpLm9yZGVyIHx8IDApIC0gKG5leHQoKS5vcmRlciB8fCAwKSkpO1xuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChkaXNwbGF5TW9yZUl0ZW0pO1xuICAgIHRoaXMub3V0RGlzcGxheU1vcmVJdGVtLmVtaXQodGhpcy5kaXNwbGF5TW9yZUl0ZW0oKSk7XG4gICAgdGhpcy5pdGVtc0Rpc3BsYXkuc2V0KHRoaXMudGFicygpLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxufSIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYlwiPlxuICA8ZGl2ICNoZWFkZXJFbFxuICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyIHotWzFdIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlciB8fCAnJyB9fVwiXG4gICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJoZWlnaHRUYWJJdGVtKClcIj5cbiAgICA8ZGl2ICNoZWFkZXJMZWZ0RWxcbiAgICAgIGNsYXNzPSdsaWJzLXVpLXRhYi1oZWFkZXItbGVmdCc+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXYubGlicy11aS10YWItaGVhZGVyLWxlZnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlckNlbnRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyQ2VudGVyIHx8ICcnIH19XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiIWZsZXggdy1mdWxsXCJcbiAgICAgICAgI2VsZW1lbnRDb250YWluZXJFbFxuICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICBbc3R5bGVzT3ZlcnJpZGVdPVwic3R5bGVzRHJhZ0Ryb3BPdmVycmlkZUNvbXB1dGVkKClcIlxuICAgICAgICBbZ3JvdXBOYW1lXT1cImdyb3VwTmFtZSgpXCJcbiAgICAgICAgWyhpdGVtcyldPVwiaXRlbXNEaXNwbGF5XCJcbiAgICAgICAgW2RpcmVjdGlvbkRyYWddPVwiJ2hvcml6b250YWwnXCJcbiAgICAgICAgW2Rpc2FibGVEcmFnQ29udGFpbmVyXT1cIiFhbGxvd0RyYWdEcm9wUG9zaXRpb24oKVwiXG4gICAgICAgIFthY2NlcHREcmFnU2FtZUdyb3VwXT1cImFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpXCJcbiAgICAgICAgKG91dERyb3BwZWRDb250YWluZXIpPVwiaGFuZGxlckRyb3BDb250YWluZXIoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zRGlzcGxheSgpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgPGRpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZVxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8ICFhbGxvd0RyYWdEcm9wUG9zaXRpb24oKVwiXG4gICAgICAgICAgICBbZWxlbWVudENvbnRhaW5lcl09XCJlbGVtZW50Q29udGFpbmVyRWxcIlxuICAgICAgICAgICAgW2RyYWdCb3VuZGFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyXT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBsaWJzLXVpLXRhYi1pdGVtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kZSgpID09PSAnc3BhY2UtYmV0d2VlbicgPyAoZWxlbWVudENvbnRhaW5lckVsLmNsaWVudFdpZHRoLyhpdGVtc0Rpc3BsYXkoKS5sZW5ndGggfHwgMSkpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIm1vZGUoKSA9PT0gJ2NlbnRlci1oYXMtbGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCJtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnXCI+XG4gICAgICAgICAgICBAaWYgKGFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpICYmICFkaXNhYmxlKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWljb24tYXJyYW5nZSB0ZXh0LVsjOWNhMmFkXSBhYnNvbHV0ZSB0b3AtWzE0cHhdIGxlZnQtWzRweF1cIj48L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXRhYnMtaXRlbSBjbGFzcz1cImgtZnVsbCB3LWZ1bGwgIHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVJdGVtIHx8ICcnIH19XCJcbiAgICAgICAgICAgICAgW3RhYnNdPVwidGFicygpXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgW3N0ZXBdPVwiJGluZGV4KzFcIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZUxhYmVsXT1cImRpc2FibGVMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cImtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbZmllbGRMYWJlbF09XCJmaWVsZExhYmVsKClcIlxuICAgICAgICAgICAgICBbZmllbGRLZXldPVwiZmllbGRLZXkoKVwiXG4gICAgICAgICAgICAgIFtjc3NEZWZhdWx0XT1cIigkZmlyc3QgPyBjb25maWdDc3MoKT8uZmlyc3QgOiBjb25maWdDc3MoKT8ub3RoZXIpIHx8ICcnXCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICAgIFttb2RlXT1cIm1vZGUoKVwiXG4gICAgICAgICAgICAgIFtpZ25vcmVDYWxjdWxhdG9yVGFiXT1cInRydWVcIlxuICAgICAgICAgICAgICBbY2hhbmdlVmlld1RhYl09XCJjaGFuZ2VWaWV3VGFiXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja0l0ZW0oJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgIChvdXRBY3Rpb24pPVwiaGFuZGxlckFjdGlvbigkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIEBpZiAobW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJyAmJiAhJGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzQwcHhdIGgtWzFweF0gYmctWyNlNmU3ZWFdXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICBbY2xhc3MubWwtYXV0b109XCJkaXNwbGF5TW9yZUl0ZW0oKSAmJiAhdGFicygpLnZpZXdNb3JlSWdub3JlTWFyZ2luTGVmdFwiPlxuICAgICAgQGlmIChkaXNwbGF5TW9yZUl0ZW0oKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBbbW9kZV09XCInY2xpY2stdG9nZ2xlJ1wiXG4gICAgICAgICAgW2lnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgICAgICB6SW5kZXg6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy56SW5kZXggfHwgMTAwMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/Lm1heEhlaWdodCB8fCAyODcsXG4gICAgICAgICAgICBtYXhXaWR0aDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/Lm1heFdpZHRoIHx8IDIwNDgsXG4gICAgICAgICAgICB3aWR0aDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LndpZHRoIHx8IDI3NywgXG4gICAgICAgICAgICBkaXJlY3Rpb246IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5kaXJlY3Rpb24gfHwgJ2JvdHRvbScsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnRlbXBsYXRlIHx8IG1lbnVFbCxcbiAgICAgICAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVBcnJvdzogdHJ1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ucG9zaXRpb24gfHwgeyBtb2RlOiAnZW5kJywgZGlzdGFuY2U6IDAgfVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC1bOHB4XSdcIlxuICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tbW9yZS12ZXJ0aWNhbCByb3RhdGUtOTAgdGV4dC1bMTZweF0gbXItMCdcIlxuICAgICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzoge2NvbnRlbnQ6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5jb250ZW50IHx8ICdpMThuX3ZpZXdfbW9yZSd9fVwiXG4gICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjaGVhZGVyUmlnaHRFbFxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItcmlnaHQge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlclJpZ2h0IHx8ICcnIH19XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXYubGlicy11aS10YWItaGVhZGVyLXJpZ2h0XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIHotMCB3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlciB8fCAnJyB9fVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImhlaWdodFRhYkl0ZW0oKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlckNlbnRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyQ2VudGVyIHx8ICcnIH19XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgdGFicygpLml0ZW1zKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXRhYnMtaXRlbSBjbGFzcz1cImgtZnVsbCB3LWZ1bGwge3sgdGFicygpLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICAgICAgW3RhYnNdPVwidGFicygpXCJcbiAgICAgICAgICAgIFtzaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3N0ZXBdPVwiJGluZGV4KzFcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cImtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2ZpZWxkTGFiZWxdPVwiZmllbGRMYWJlbCgpXCJcbiAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgIFtjc3NEZWZhdWx0XT1cIigkZmlyc3QgPyBjb25maWdDc3MoKT8uZmlyc3QgOiBjb25maWdDc3MoKT8ub3RoZXIpIHx8ICcnXCJcbiAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgW21vZGVdPVwibW9kZSgpXCJcbiAgICAgICAgICAgIFtjaGFuZ2VWaWV3VGFiXT1cImNoYW5nZVZpZXdUYWJcIlxuICAgICAgICAgICAgW2lnbm9yZUNhbGN1bGF0b3JUYWJdPVwiaWdub3JlQ2FsY3VsYXRvclRhYigpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI21lbnVFbD5cbiAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0IFtjb25maWddPVwidGFiTW9yZUxpc3RDb25maWcoKVwiXG4gICAgW21heEl0ZW1TaG93XT1cIjVcIlxuICAgIFtoaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICBbcGFkZGluZ0xlZnRJdGVtXT1cInRydWVcIlxuICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkS2V5KCRldmVudClcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyxzQ0FBc0MsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZILE9BQU8sRUFBb0IsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQTBDLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFrQmpELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsbUJBQW1CO0lBQ1QsWUFBWSxHQUFHLE1BQU0sQ0FB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QUFpQzt3QkFDakMsNkJBQTZCO3FCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSURyb3AsIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlLCBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IElQb3BvdmVyLCBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGlzTmlsLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElUYWJDc3NDb25maWcsIElUYWJzLCBJVGFic0Z1bmN0aW9uQ29udHJvbEV2ZW50LCBJVGFic0l0ZW0sIElUYWJzSXRlbUV2ZW50LCBUWVBFX1RBQl9NT0RFIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3RhYi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1RhYnNJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9pdGVtL2l0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IHRhYk1vcmVMaXN0Q29uZmlnIH0gZnJvbSAnLi91dGlscy90YWJzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzVGFic0l0ZW1Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBpdGVtc0Rpc3BsYXkgPSBzaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SVRhYnNJdGVtPj4+KFtdKTtcbiAgcHJvdGVjdGVkIGRpc3BsYXlNb3JlSXRlbSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCB0YWJNb3JlTGlzdENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHRhYk1vcmVMaXN0Q29uZmlnKHRoaXMudHJhbnNsYXRlLCB0aGlzLmZpZWxkS2V5KCksIHRoaXMuZmllbGRMYWJlbCgpLCB0aGlzLnRhYnMoKSwgdGhpcy5kaXNhYmxlKCkpKTtcbiAgcHJvdGVjdGVkIGNoYW5nZVZpZXdUYWIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcm90ZWN0ZWQgZ3JvdXBOYW1lID0gc2lnbmFsPHN0cmluZz4odXVpZCgpKTtcbiAgcHJvdGVjdGVkIHN0eWxlc0RyYWdEcm9wT3ZlcnJpZGVDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudXBkYXRlU3R5bGVzRHJhZ0Ryb3BPdmVycmlkZSgpKTtcblxuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCA9IHNpZ25hbDxJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSB0YWJzID0gaW5wdXQucmVxdWlyZWQ8SVRhYnM+KCk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gbW9kZWwucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBtb2RlID0gaW5wdXQ8VFlQRV9UQUJfTU9ERT4oJ2xlZnQnKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dDxzdHJpbmc+KCdrZXknKTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGlucHV0PHN0cmluZz4oJ2xhYmVsJyk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBoZWlnaHRUYWJJdGVtID0gaW5wdXQ8bnVtYmVyPig0MCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNhbGN1bGF0b3JUYWIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dDwnbGFuZ2VyJyB8ICdtZWRpdW0nPignbWVkaXVtJyk7XG4gIHJlYWRvbmx5IGFsbG93RHJhZ0Ryb3BQb3NpdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnQ3NzID0gbW9kZWw8SVRhYkNzc0NvbmZpZz4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlclNob3dNb3JlVGFiSXRlbSA9IGlucHV0PElQb3BvdmVyPigpO1xuICByZWFkb25seSBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gaW5wdXQ8KCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+KCk7XG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0S2V5U2VsZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElUYWJzRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG91dERyYWdUYWJDaGFuZ2UgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgb3V0RGlzcGxheU1vcmVJdGVtID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEFjdGlvbiA9IG91dHB1dDxJVGFic0l0ZW1FdmVudD4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2hlYWRlckVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyTGVmdEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJMZWZ0RWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJSaWdodEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJSaWdodEVsJyk7XG5cbiAgLyogSU5KRUNUKi9cbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVUYWJzQ3NzQ29uZmlnKCk7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgYWRkVGFic0l0ZW06IHRoaXMuYWRkVGFic0l0ZW0uYmluZCh0aGlzKSxcbiAgICAgIGNhbGN1bGF0b3JUYWJzSXRlbXNEaXNwbGF5OiB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkuYmluZCh0aGlzKSxcbiAgICAgIHNlbGVjdGVkVGFic0l0ZW06IHRoaXMuaGFuZGxlclNlbGVjdGVkVGFic0l0ZW0uYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIGlmICh0aGlzLm1vZGUoKSAhPT0gJ2xlZnQnIHx8IHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpKSB7XG4gICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgICB0aGlzLml0ZW1zRGlzcGxheS5zZXQodGhpcy50YWJzKCkuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnRhYnMoKS5pdGVtcygpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BsYXlNb3JlSXRlbS5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VWaWV3VGFiLnBpcGUoZGVib3VuY2VUaW1lKDIwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheSgpKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIHVwZGF0ZVRhYnNDc3NDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnQ3NzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vZGUoKSkge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdtbC1bMjBweF0gbXItWzE2cHhdJyxcbiAgICAgICAgICBvdGhlcjogJ21sLVsyMHB4XSBtci1bMTZweF0nXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdweC1bMTJweF0gbWwtWzE4cHhdIG1yLVsxOHB4XScsXG4gICAgICAgICAgb3RoZXI6ICdweC1bMTJweF0gbXgtWzE4cHhdJyxcbiAgICAgICAgICBoZWFkZXI6ICdmbGV4IGp1c3RpZnktY2VudGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZW50ZXItaGFzLWxpbmUnOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAncHgtWzE2cHhdJyxcbiAgICAgICAgICBvdGhlcjogJ3B4LVsxNnB4XScsXG4gICAgICAgICAgaGVhZGVyQ2VudGVyOiAnaXRlbXMtY2VudGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzcGFjZS1iZXR3ZWVuJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ214LWF1dG8nLFxuICAgICAgICAgIG90aGVyOiAnbXgtYXV0bycsXG4gICAgICAgICAgaGVhZGVyQ2VudGVyOiAndy1mdWxsJ1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHlsZXNEcmFnRHJvcE92ZXJyaWRlKCkge1xuICAgIGlmICh0aGlzLmFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1wbGFjZWhvbGRlcicsXG4gICAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbScsXG4gICAgICAgICAgc3R5bGVzOiAnY3Vyc29yOiBtb3ZlOydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJhZ2dpbmcnLFxuICAgICAgICAgIHN0eWxlczogJ2N1cnNvcjogbW92ZTsgYmFja2dyb3VuZDogI2RkZGRkZDsnXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0nLFxuICAgICAgICBzdHlsZXM6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRpc2FibGUnLFxuICAgICAgICBzdHlsZXM6ICcnXG4gICAgICB9XG4gICAgXVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJEcm9wQ29udGFpbmVyKGV2ZW50OiBJRHJvcCkge1xuICAgIGNvbnN0IHsgaXRlbURyYWdJbmZvIH0gPSBldmVudDtcbiAgICBpZiAoIWl0ZW1EcmFnSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zO1xuICAgIGNvbnN0IHsgaW5kZXhEcmFnLCBpbmRleERyb3AgfSA9IGl0ZW1EcmFnSW5mbztcbiAgICBpZiAoaXNOaWwoaW5kZXhEcmFnKSB8fCBpc05pbChpbmRleERyb3ApIHx8IGluZGV4RHJvcCA9PT0gaW5kZXhEcmFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1EcmFnID0gaXRlbXMoKVtpbmRleERyYWcgYXMgbnVtYmVyXTtcbiAgICBpdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgaXRlbXMuc3BsaWNlKGluZGV4RHJhZyBhcyBudW1iZXIsIDEpO1xuICAgICAgaXRlbXMuc3BsaWNlKGluZGV4RHJvcCBhcyBudW1iZXIsIDAsIGl0ZW1EcmFnKTtcbiAgICAgIHJldHVybiBbLi4uaXRlbXNdO1xuICAgIH0pO1xuICAgIHRoaXMub3V0RHJhZ1RhYkNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LnNldChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZXJTZWxlY3RlZFRhYnNJdGVtKGtleTogc3RyaW5nLCByZXNldERpc2FibGUgPSB0cnVlKSB7XG4gICAgY29uc3QgaXRlbVNlbGVjdGVkID0gdGhpcy50YWJzKCkuaXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG4gICAgaWYgKCFpdGVtU2VsZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlc2V0RGlzYWJsZSkge1xuICAgICAgaXRlbVNlbGVjdGVkLnVwZGF0ZShpdGVtID0+ICh7IC4uLml0ZW0sIGRpc2FibGU6IGZhbHNlIH0pKTtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKGl0ZW1TZWxlY3RlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdGVkS2V5KGV2ZW50OiBJTGlzdERhdGFFbWl0S2V5IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDbGlja0l0ZW0oY29udmVydE9iamVjdFRvU2lnbmFsKGV2ZW50Lml0ZW0pKTtcbiAgICB0aGlzLm91dERyYWdUYWJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbGlja0l0ZW0oaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYnNJdGVtPikge1xuICAgIGlmIChpdGVtKCkuZGlzYWJsZSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gdGhpcy5jaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKCk7XG4gICAgaWYgKGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCgpO1xuICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZUl0ZW1TZWxlY3RlZChpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW06IFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4pIHtcbiAgICB0aGlzLmtleVNlbGVjdGVkLnNldChpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgdGhpcy5vdXRLZXlTZWxlY3RlZC5lbWl0KHRoaXMua2V5U2VsZWN0ZWQoKSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQWN0aW9uKGV2ZW50OiBJVGFic0l0ZW1FdmVudCkge1xuICAgIHRoaXMub3V0QWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRUYWJzSXRlbShpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFic0l0ZW0+LCBzZWxlY3RlZCA9IHRydWUsIGFkZEZpcnN0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXM7XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGlmIChhZGRGaXJzdCkge1xuICAgICAgICByZXR1cm4gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4uaXRlbXMsIGl0ZW1dO1xuICAgIH0pO1xuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCkge1xuICAgIGxldCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zKCk7XG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICBpZiAoaW5kZXhJdGVtU2VsZWN0ZWQgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChmYWxzZSk7XG4gICAgbGV0IGRpc3BsYXlNb3JlSXRlbSA9IGZhbHNlO1xuICAgIGNvbnN0IGhlYWRlcldpZHRoID0gdGhpcy5oZWFkZXJFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMDtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBpdGVtc1tpbmRleEl0ZW1TZWxlY3RlZF07XG4gICAgY29uc3QgaXRlbVNlbGVjdGVkV2lkdGggPSBpdGVtU2VsZWN0ZWQoKS5zcGVjaWZpY1dpZHRoO1xuICAgIGxldCB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ID0gKHRoaXMuaGVhZGVyTGVmdEVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwKSArICh0aGlzLmhlYWRlclJpZ2h0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgMzI7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghaXRlbSgpLnNwZWNpZmljV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IGZhbHNlIH0pKTtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGl0ZW0oKS5zcGVjaWZpY1dpZHRoIHx8IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKyBpdGVtV2lkdGggKyAoaW5kZXggPCBpbmRleEl0ZW1TZWxlY3RlZCA/IGl0ZW1TZWxlY3RlZFdpZHRoIDogMCk7XG4gICAgICB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ICs9IGl0ZW1XaWR0aDtcbiAgICAgIGlmICh3aWR0aCA+IGhlYWRlcldpZHRoKSB7XG4gICAgICAgIGRpc3BsYXlNb3JlSXRlbSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICB9KTtcbiAgICBpdGVtU2VsZWN0ZWQudXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgbm90RGlzcGxheSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0oKS5zcGVjaWZpY0Rpc3BsYXkgPT09IGZhbHNlKTtcbiAgICBpdGVtcyA9IGRpc3BsYXkuY29uY2F0KG5vdERpc3BsYXkpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIG9yZGVyOiBpbmRleCB9KSkpO1xuICAgIHRoaXMudGFicygpLml0ZW1zLnNldChpdGVtcy5zb3J0KChwcmV2LCBuZXh0KSA9PiAocHJldigpLm9yZGVyIHx8IDApIC0gKG5leHQoKS5vcmRlciB8fCAwKSkpO1xuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChkaXNwbGF5TW9yZUl0ZW0pO1xuICAgIHRoaXMub3V0RGlzcGxheU1vcmVJdGVtLmVtaXQodGhpcy5kaXNwbGF5TW9yZUl0ZW0oKSk7XG4gICAgdGhpcy5pdGVtc0Rpc3BsYXkuc2V0KHRoaXMudGFicygpLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxufSIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYlwiPlxuICA8ZGl2ICNoZWFkZXJFbFxuICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyIHotWzFdIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlciB8fCAnJyB9fVwiXG4gICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJoZWlnaHRUYWJJdGVtKClcIj5cbiAgICA8ZGl2ICNoZWFkZXJMZWZ0RWxcbiAgICAgIGNsYXNzPSdsaWJzLXVpLXRhYi1oZWFkZXItbGVmdCc+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXYubGlicy11aS10YWItaGVhZGVyLWxlZnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXJDZW50ZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlckNlbnRlciB8fCAnJyB9fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIiFmbGV4IHctZnVsbFwiXG4gICAgICAgICNlbGVtZW50Q29udGFpbmVyRWxcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmVcbiAgICAgICAgW3N0eWxlc092ZXJyaWRlXT1cInN0eWxlc0RyYWdEcm9wT3ZlcnJpZGVDb21wdXRlZCgpXCJcbiAgICAgICAgW2dyb3VwTmFtZV09XCJncm91cE5hbWUoKVwiXG4gICAgICAgIFsoaXRlbXMpXT1cIml0ZW1zRGlzcGxheVwiXG4gICAgICAgIFtkaXJlY3Rpb25EcmFnXT1cIidob3Jpem9udGFsJ1wiXG4gICAgICAgIFtkaXNhYmxlRHJhZ0NvbnRhaW5lcl09XCIhYWxsb3dEcmFnRHJvcFBvc2l0aW9uKClcIlxuICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJhbGxvd0RyYWdEcm9wUG9zaXRpb24oKVwiXG4gICAgICAgIChvdXREcm9wcGVkQ29udGFpbmVyKT1cImhhbmRsZXJEcm9wQ29udGFpbmVyKCRldmVudClcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtc0Rpc3BsYXkoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxkaXYgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmVcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCAhYWxsb3dEcmFnRHJvcFBvc2l0aW9uKClcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb250YWluZXJdPVwiZWxlbWVudENvbnRhaW5lckVsXCJcbiAgICAgICAgICAgIFtkcmFnQm91bmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwicmVsYXRpdmUgbGlicy11aS10YWItaXRlbS1jb250YWluZXJcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1vZGUoKSA9PT0gJ3NwYWNlLWJldHdlZW4nID8gKGVsZW1lbnRDb250YWluZXJFbC5jbGllbnRXaWR0aC8oaXRlbXNEaXNwbGF5KCkubGVuZ3RoIHx8IDEpKSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbY2xhc3MuZmxleF09XCJtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwibW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJ1wiPlxuICAgICAgICAgICAgQGlmIChhbGxvd0RyYWdEcm9wUG9zaXRpb24oKSAmJiAhZGlzYWJsZSgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1pY29uLWFycmFuZ2UgdGV4dC1bIzljYTJhZF0gYWJzb2x1dGUgdG9wLVsxNHB4XSBsZWZ0LVs0cHhdXCI+PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy10YWJzLWl0ZW0gY2xhc3M9XCJoLWZ1bGwgdy1mdWxsICB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICAgIFt0YWJzXT1cInRhYnMoKVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICAgIFtzdGVwXT1cIiRpbmRleCsxXCJcbiAgICAgICAgICAgICAgW2NsYXNzLiFwb2ludGVyLWV2ZW50cy1ub25lXT1cIml0ZW0oKS5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cIml0ZW0oKS5kaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZExhYmVsXT1cImZpZWxkTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwibW9kZSgpXCJcbiAgICAgICAgICAgICAgW2lnbm9yZUNhbGN1bGF0b3JUYWJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjaGFuZ2VWaWV3VGFiXT1cImNoYW5nZVZpZXdUYWJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrSXRlbShpdGVtKVwiXG4gICAgICAgICAgICAgIChvdXRBY3Rpb24pPVwiaGFuZGxlckFjdGlvbigkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIEBpZiAobW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJyAmJiAhJGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzQwcHhdIGgtWzFweF0gYmctWyNlNmU3ZWFdXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICBbY2xhc3MubWwtYXV0b109XCJkaXNwbGF5TW9yZUl0ZW0oKSAmJiAhdGFicygpLnZpZXdNb3JlSWdub3JlTWFyZ2luTGVmdFwiPlxuICAgICAgQGlmIChkaXNwbGF5TW9yZUl0ZW0oKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBbbW9kZV09XCInY2xpY2stdG9nZ2xlJ1wiXG4gICAgICAgICAgW2lnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgICAgICB6SW5kZXg6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy56SW5kZXggfHwgMTAwMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/Lm1heEhlaWdodCB8fCAyODcsXG4gICAgICAgICAgICBtYXhXaWR0aDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/Lm1heFdpZHRoIHx8IDIwNDgsXG4gICAgICAgICAgICB3aWR0aDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LndpZHRoIHx8IDI3NywgXG4gICAgICAgICAgICBkaXJlY3Rpb246IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5kaXJlY3Rpb24gfHwgJ2JvdHRvbScsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnRlbXBsYXRlIHx8IG1lbnVFbCxcbiAgICAgICAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVBcnJvdzogdHJ1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ucG9zaXRpb24gfHwgeyBtb2RlOiAnZW5kJywgZGlzdGFuY2U6IDAgfVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC1bOHB4XSdcIlxuICAgICAgICAgICAgW2ljb25Pbmx5VHlwZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tbW9yZS12ZXJ0aWNhbCByb3RhdGUtOTAgdGV4dC1bMTZweF0gbXItMCdcIlxuICAgICAgICAgICAgW3BvcG92ZXJdPVwie2NvbmZpZzoge2NvbnRlbnQ6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5jb250ZW50IHx8ICdpMThuX3ZpZXdfbW9yZSd9fVwiXG4gICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjaGVhZGVyUmlnaHRFbFxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItcmlnaHQge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlclJpZ2h0IHx8ICcnIH19XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXYubGlicy11aS10YWItaGVhZGVyLXJpZ2h0XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIHotMCB3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlciB8fCAnJyB9fVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImhlaWdodFRhYkl0ZW0oKVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlckNlbnRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyQ2VudGVyIHx8ICcnIH19XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgdGFicygpLml0ZW1zKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXRhYnMtaXRlbSBjbGFzcz1cImgtZnVsbCB3LWZ1bGwge3sgdGFicygpLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICAgICAgW3RhYnNdPVwidGFicygpXCJcbiAgICAgICAgICAgIFtzaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3N0ZXBdPVwiJGluZGV4KzFcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cImtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2ZpZWxkTGFiZWxdPVwiZmllbGRMYWJlbCgpXCJcbiAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgIFtjc3NEZWZhdWx0XT1cIigkZmlyc3QgPyBjb25maWdDc3MoKT8uZmlyc3QgOiBjb25maWdDc3MoKT8ub3RoZXIpIHx8ICcnXCJcbiAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgW21vZGVdPVwibW9kZSgpXCJcbiAgICAgICAgICAgIFtjaGFuZ2VWaWV3VGFiXT1cImNoYW5nZVZpZXdUYWJcIlxuICAgICAgICAgICAgW2lnbm9yZUNhbGN1bGF0b3JUYWJdPVwiaWdub3JlQ2FsY3VsYXRvclRhYigpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI21lbnVFbD5cbiAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0IFtjb25maWddPVwidGFiTW9yZUxpc3RDb25maWcoKVwiXG4gICAgW21heEl0ZW1TaG93XT1cIjVcIlxuICAgIFtoaWRkZW5JbnB1dFNlYXJjaF09XCJ0cnVlXCJcbiAgICBbcGFkZGluZ0xlZnRJdGVtXT1cInRydWVcIlxuICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdGVkS2V5KCRldmVudClcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|