@cqa-lib/cqa-ui 1.1.452 → 1.1.454

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.
@@ -136,10 +136,10 @@ export class NewVersionHistoryDetailComponent {
136
136
  }
137
137
  }
138
138
  NewVersionHistoryDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewVersionHistoryDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
139
- NewVersionHistoryDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewVersionHistoryDetailComponent, selector: "cqa-new-version-history-detail", inputs: { selectedVersion: "selectedVersion", selectedIsCurrent: "selectedIsCurrent", isRestoring: "isRestoring", getAuthorLabelFn: "getAuthorLabelFn", getFieldLabelFn: "getFieldLabelFn", getStepPrefixFn: "getStepPrefixFn", getCategoryLabelFn: "getCategoryLabelFn", formatDisplayValueFn: "formatDisplayValueFn", getStepActionHtmlFn: "getStepActionHtmlFn", hiddenFields: "hiddenFields", parseFieldAsTableFn: "parseFieldAsTableFn", getValueBadgeConfigFn: "getValueBadgeConfigFn", getInlineDiffFn: "getInlineDiffFn" }, outputs: { compare: "compare", restore: "restore" }, ngImport: i0, template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <!-- ========== Header (same as old component) ========== -->\n <div class=\"d-flex align-items-start justify-content-between cqa-nvh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-nvh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-nvh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.createdDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-nvh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-nvh-detail-actions\">\n <!-- <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button> -->\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <!-- ========== Summary bar ========== -->\n <!-- <div *ngIf=\"stepsSummary\" class=\"cqa-nvh-detail-summary-bar\">\n <span *ngIf=\"stepsSummary.added\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--added\">+{{ stepsSummary.added }} added</span>\n <span *ngIf=\"stepsSummary.modified\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--modified\">{{ stepsSummary.modified }} modified</span>\n <span *ngIf=\"stepsSummary.removed\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--removed\">{{ stepsSummary.removed }} removed</span>\n <span *ngIf=\"stepsSummary.unchanged\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--unchanged\">{{ stepsSummary.unchanged }} unchanged</span>\n </div> -->\n\n <!-- ========== Test Case Changes ========== -->\n <ng-container *ngIf=\"hasTestCaseChanges\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Test Case Changes</span>\n <cqa-badge [label]=\"'' + testCaseChangedFields.length\" size=\"small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let field of testCaseChangedFields; trackBy: trackByField\" class=\"cqa-nvh-change-card\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: selectedVersion.testCase.old?.[field],\n newValue: selectedVersion.testCase.new?.[field],\n field: field,\n oldStepData: selectedVersion.testCase.old,\n newStepData: selectedVersion.testCase.new\n }\">\n </ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Added ========== -->\n <ng-container *ngIf=\"stepsAdded.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Added</span>\n <cqa-badge [label]=\"'' + stepsAdded.length\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsAdded; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--added\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Added\" size=\"small\" backgroundColor=\"#ECFDF3\" textColor=\"#027A48\"\n borderColor=\"#A7F3D0\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Deleted ========== -->\n <ng-container *ngIf=\"stepsDeleted.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Removed</span>\n <cqa-badge [label]=\"'' + stepsDeleted.length\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsDeleted; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--removed\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Removed\" size=\"small\" backgroundColor=\"#FEF3F2\" textColor=\"#B42318\"\n borderColor=\"#FECDCA\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Updated ========== -->\n <ng-container *ngIf=\"stepsUpdated.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Modified</span>\n <cqa-badge [label]=\"'' + stepsUpdated.length\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsUpdated; trackBy: trackByStepId\" class=\"cqa-nvh-change-card\">\n <!-- Step header with category badge -->\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge [label]=\"getCategoryLabelFn(step.category)\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n\n <!-- Changed fields with before/after -->\n <div *ngFor=\"let field of visibleChangedFields(step); trackBy: trackByField\" class=\"cqa-nvh-field-diff\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: step.old?.[field],\n newValue: step.new?.[field],\n field: field,\n oldStepData: step.old,\n newStepData: step.new\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Empty state ========== -->\n <div *ngIf=\"!hasAnyChanges\" class=\"cqa-nvh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-nvh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>\n\n<!-- ===== Reusable before/after block ===== -->\n<ng-template #beforeAfterBlock let-oldValue=\"oldValue\" let-newValue=\"newValue\" let-field=\"field\" let-oldStepData=\"oldStepData\" let-newStepData=\"newStepData\">\n <!-- 1. Custom table via parseFieldAsTableFn (e.g. testDataList) -->\n <ng-container *ngIf=\"parseFieldAsTableFn(field, oldValue, oldStepData) || parseFieldAsTableFn(field, newValue, newStepData); else nativeObjectCheck\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseFieldAsTableFn(field, oldValue, oldStepData),\n newObj: parseFieldAsTableFn(field, newValue, newStepData)\n }\">\n </ng-container>\n </ng-container>\n\n <!-- 2. Native object / JSON string -->\n <ng-template #nativeObjectCheck>\n <ng-container *ngIf=\"parseObjectValue(oldValue) || parseObjectValue(newValue); else simpleValue\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseObjectValue(oldValue),\n newObj: parseObjectValue(newValue)\n }\">\n </ng-container>\n </ng-container>\n </ng-template>\n\n <!-- 3. Primitive fallback -->\n <ng-template #simpleValue>\n <ng-container *ngIf=\"getInlineDiffFn(oldValue, newValue, field, oldStepData, newStepData) as diff; else plainBeforeAfter\">\n <!-- Inline diff view: no --before/--after color modifiers; diff HTML owns all token colors -->\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.oldHtml\"></span>\n </div>\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.newHtml\"></span>\n </div>\n </div>\n </ng-container>\n\n <!-- Plain text fallback (no diff) -->\n <ng-template #plainBeforeAfter>\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--before\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(oldValue, field, oldStepData) }}</span>\n </div>\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--after\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(newValue, field, newStepData) }}</span>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<!-- ===== Shared object table ===== -->\n<ng-template #objTable let-oldObj=\"oldObj\" let-newObj=\"newObj\">\n <div class=\"cqa-nvh-obj-table\" *ngIf=\"objectKeys(oldObj, newObj).length > 0\">\n <div class=\"cqa-nvh-obj-header\">\n <span></span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--before\">Before</span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--after\">After</span>\n </div>\n <div\n *ngFor=\"let key of objectKeys(oldObj, newObj); trackBy: trackByKey\"\n class=\"cqa-nvh-obj-row\">\n <span class=\"cqa-nvh-obj-key\">{{ getFieldLabelFn(key) }}</span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--before\">\n {{ formatPrimitiveValue(oldObj?.[key]) }}\n </span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--after\">\n {{ formatPrimitiveValue(newObj?.[key]) }}\n </span>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "date": i4.DatePipe } });
139
+ NewVersionHistoryDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NewVersionHistoryDetailComponent, selector: "cqa-new-version-history-detail", inputs: { selectedVersion: "selectedVersion", selectedIsCurrent: "selectedIsCurrent", isRestoring: "isRestoring", getAuthorLabelFn: "getAuthorLabelFn", getFieldLabelFn: "getFieldLabelFn", getStepPrefixFn: "getStepPrefixFn", getCategoryLabelFn: "getCategoryLabelFn", formatDisplayValueFn: "formatDisplayValueFn", getStepActionHtmlFn: "getStepActionHtmlFn", hiddenFields: "hiddenFields", parseFieldAsTableFn: "parseFieldAsTableFn", getValueBadgeConfigFn: "getValueBadgeConfigFn", getInlineDiffFn: "getInlineDiffFn" }, outputs: { compare: "compare", restore: "restore" }, ngImport: i0, template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <!-- ========== Header (same as old component) ========== -->\n <div class=\"d-flex align-items-start justify-content-between cqa-nvh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-nvh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-nvh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.createdDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-nvh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-nvh-detail-actions\">\n <!-- <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button> -->\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <!-- ========== Summary bar ========== -->\n <!-- <div *ngIf=\"stepsSummary\" class=\"cqa-nvh-detail-summary-bar\">\n <span *ngIf=\"stepsSummary.added\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--added\">+{{ stepsSummary.added }} added</span>\n <span *ngIf=\"stepsSummary.modified\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--modified\">{{ stepsSummary.modified }} modified</span>\n <span *ngIf=\"stepsSummary.removed\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--removed\">{{ stepsSummary.removed }} removed</span>\n <span *ngIf=\"stepsSummary.unchanged\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--unchanged\">{{ stepsSummary.unchanged }} unchanged</span>\n </div> -->\n\n <!-- ========== Test Case Changes ========== -->\n <ng-container *ngIf=\"hasTestCaseChanges\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Test Case Changes</span>\n <cqa-badge [label]=\"'' + testCaseChangedFields.length\" size=\"small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let field of testCaseChangedFields; trackBy: trackByField\" class=\"cqa-nvh-change-card\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: selectedVersion.testCase.old?.[field],\n newValue: selectedVersion.testCase.new?.[field],\n field: field,\n oldStepData: selectedVersion.testCase.old,\n newStepData: selectedVersion.testCase.new\n }\">\n </ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Added ========== -->\n <ng-container *ngIf=\"stepsAdded.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Added</span>\n <cqa-badge [label]=\"'' + stepsAdded.length\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsAdded; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--added\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Added\" size=\"small\" backgroundColor=\"#ECFDF3\" textColor=\"#027A48\"\n borderColor=\"#A7F3D0\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Deleted ========== -->\n <ng-container *ngIf=\"stepsDeleted.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Removed</span>\n <cqa-badge [label]=\"'' + stepsDeleted.length\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsDeleted; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--removed\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Removed\" size=\"small\" backgroundColor=\"#FEF3F2\" textColor=\"#B42318\"\n borderColor=\"#FECDCA\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Updated ========== -->\n <ng-container *ngIf=\"stepsUpdated.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Modified</span>\n <cqa-badge [label]=\"'' + stepsUpdated.length\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsUpdated; trackBy: trackByStepId\" class=\"cqa-nvh-change-card\">\n <!-- Step header with category badge -->\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge [label]=\"getCategoryLabelFn(step.category)\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n\n <!-- Changed fields with before/after -->\n <div *ngFor=\"let field of visibleChangedFields(step); trackBy: trackByField\" class=\"cqa-nvh-field-diff\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: step.old?.[field],\n newValue: step.new?.[field],\n field: field,\n oldStepData: step.old,\n newStepData: step.new\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Empty state ========== -->\n <div *ngIf=\"!hasAnyChanges\" class=\"cqa-nvh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-nvh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>\n\n<!-- ===== Reusable before/after block ===== -->\n<ng-template #beforeAfterBlock let-oldValue=\"oldValue\" let-newValue=\"newValue\" let-field=\"field\" let-oldStepData=\"oldStepData\" let-newStepData=\"newStepData\">\n <!-- 1. Custom table via parseFieldAsTableFn (e.g. testDataList) -->\n <ng-container *ngIf=\"parseFieldAsTableFn(field, oldValue, oldStepData) || parseFieldAsTableFn(field, newValue, newStepData); else nativeObjectCheck\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseFieldAsTableFn(field, oldValue, oldStepData),\n newObj: parseFieldAsTableFn(field, newValue, newStepData)\n }\">\n </ng-container>\n </ng-container>\n\n <!-- 2. Native object / JSON string -->\n <ng-template #nativeObjectCheck>\n <ng-container *ngIf=\"parseObjectValue(oldValue) || parseObjectValue(newValue); else simpleValue\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseObjectValue(oldValue),\n newObj: parseObjectValue(newValue)\n }\">\n </ng-container>\n </ng-container>\n </ng-template>\n\n <!-- 3. Primitive fallback -->\n <ng-template #simpleValue>\n <ng-container *ngIf=\"getInlineDiffFn(oldValue, newValue, field, oldStepData, newStepData) as diff; else plainBeforeAfter\">\n <!-- Inline diff view: no --before/--after color modifiers; diff HTML owns all token colors -->\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.oldHtml\"></span>\n </div>\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.newHtml\"></span>\n </div>\n </div>\n </ng-container>\n\n <!-- Plain text fallback (no diff) -->\n <ng-template #plainBeforeAfter>\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--before\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(oldValue, field, oldStepData) }}</span>\n </div>\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--after\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(newValue, field, newStepData) }}</span>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<!-- ===== Shared object table ===== -->\n<ng-template #objTable let-oldObj=\"oldObj\" let-newObj=\"newObj\">\n <div class=\"cqa-nvh-obj-table\" *ngIf=\"objectKeys(oldObj, newObj).length > 0\">\n <div class=\"cqa-nvh-obj-header\">\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-key-header\"></span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--before\">Before</span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--after\">After</span>\n </div>\n <div\n *ngFor=\"let key of objectKeys(oldObj, newObj); trackBy: trackByKey\"\n class=\"cqa-nvh-obj-row\"\n [class.cqa-nvh-obj-row--changed]=\"formatPrimitiveValue(oldObj?.[key]) !== formatPrimitiveValue(newObj?.[key])\">\n <span class=\"cqa-nvh-obj-key\">{{ getFieldLabelFn(key) }}</span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--before\">\n {{ formatPrimitiveValue(oldObj?.[key]) }}\n </span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--after\">\n {{ formatPrimitiveValue(newObj?.[key]) }}\n </span>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i3.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "date": i4.DatePipe } });
140
140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NewVersionHistoryDetailComponent, decorators: [{
141
141
  type: Component,
142
- args: [{ selector: 'cqa-new-version-history-detail', template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <!-- ========== Header (same as old component) ========== -->\n <div class=\"d-flex align-items-start justify-content-between cqa-nvh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-nvh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-nvh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.createdDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-nvh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-nvh-detail-actions\">\n <!-- <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button> -->\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <!-- ========== Summary bar ========== -->\n <!-- <div *ngIf=\"stepsSummary\" class=\"cqa-nvh-detail-summary-bar\">\n <span *ngIf=\"stepsSummary.added\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--added\">+{{ stepsSummary.added }} added</span>\n <span *ngIf=\"stepsSummary.modified\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--modified\">{{ stepsSummary.modified }} modified</span>\n <span *ngIf=\"stepsSummary.removed\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--removed\">{{ stepsSummary.removed }} removed</span>\n <span *ngIf=\"stepsSummary.unchanged\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--unchanged\">{{ stepsSummary.unchanged }} unchanged</span>\n </div> -->\n\n <!-- ========== Test Case Changes ========== -->\n <ng-container *ngIf=\"hasTestCaseChanges\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Test Case Changes</span>\n <cqa-badge [label]=\"'' + testCaseChangedFields.length\" size=\"small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let field of testCaseChangedFields; trackBy: trackByField\" class=\"cqa-nvh-change-card\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: selectedVersion.testCase.old?.[field],\n newValue: selectedVersion.testCase.new?.[field],\n field: field,\n oldStepData: selectedVersion.testCase.old,\n newStepData: selectedVersion.testCase.new\n }\">\n </ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Added ========== -->\n <ng-container *ngIf=\"stepsAdded.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Added</span>\n <cqa-badge [label]=\"'' + stepsAdded.length\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsAdded; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--added\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Added\" size=\"small\" backgroundColor=\"#ECFDF3\" textColor=\"#027A48\"\n borderColor=\"#A7F3D0\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Deleted ========== -->\n <ng-container *ngIf=\"stepsDeleted.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Removed</span>\n <cqa-badge [label]=\"'' + stepsDeleted.length\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsDeleted; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--removed\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Removed\" size=\"small\" backgroundColor=\"#FEF3F2\" textColor=\"#B42318\"\n borderColor=\"#FECDCA\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Updated ========== -->\n <ng-container *ngIf=\"stepsUpdated.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Modified</span>\n <cqa-badge [label]=\"'' + stepsUpdated.length\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsUpdated; trackBy: trackByStepId\" class=\"cqa-nvh-change-card\">\n <!-- Step header with category badge -->\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge [label]=\"getCategoryLabelFn(step.category)\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n\n <!-- Changed fields with before/after -->\n <div *ngFor=\"let field of visibleChangedFields(step); trackBy: trackByField\" class=\"cqa-nvh-field-diff\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: step.old?.[field],\n newValue: step.new?.[field],\n field: field,\n oldStepData: step.old,\n newStepData: step.new\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Empty state ========== -->\n <div *ngIf=\"!hasAnyChanges\" class=\"cqa-nvh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-nvh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>\n\n<!-- ===== Reusable before/after block ===== -->\n<ng-template #beforeAfterBlock let-oldValue=\"oldValue\" let-newValue=\"newValue\" let-field=\"field\" let-oldStepData=\"oldStepData\" let-newStepData=\"newStepData\">\n <!-- 1. Custom table via parseFieldAsTableFn (e.g. testDataList) -->\n <ng-container *ngIf=\"parseFieldAsTableFn(field, oldValue, oldStepData) || parseFieldAsTableFn(field, newValue, newStepData); else nativeObjectCheck\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseFieldAsTableFn(field, oldValue, oldStepData),\n newObj: parseFieldAsTableFn(field, newValue, newStepData)\n }\">\n </ng-container>\n </ng-container>\n\n <!-- 2. Native object / JSON string -->\n <ng-template #nativeObjectCheck>\n <ng-container *ngIf=\"parseObjectValue(oldValue) || parseObjectValue(newValue); else simpleValue\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseObjectValue(oldValue),\n newObj: parseObjectValue(newValue)\n }\">\n </ng-container>\n </ng-container>\n </ng-template>\n\n <!-- 3. Primitive fallback -->\n <ng-template #simpleValue>\n <ng-container *ngIf=\"getInlineDiffFn(oldValue, newValue, field, oldStepData, newStepData) as diff; else plainBeforeAfter\">\n <!-- Inline diff view: no --before/--after color modifiers; diff HTML owns all token colors -->\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.oldHtml\"></span>\n </div>\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.newHtml\"></span>\n </div>\n </div>\n </ng-container>\n\n <!-- Plain text fallback (no diff) -->\n <ng-template #plainBeforeAfter>\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--before\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(oldValue, field, oldStepData) }}</span>\n </div>\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--after\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(newValue, field, newStepData) }}</span>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<!-- ===== Shared object table ===== -->\n<ng-template #objTable let-oldObj=\"oldObj\" let-newObj=\"newObj\">\n <div class=\"cqa-nvh-obj-table\" *ngIf=\"objectKeys(oldObj, newObj).length > 0\">\n <div class=\"cqa-nvh-obj-header\">\n <span></span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--before\">Before</span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--after\">After</span>\n </div>\n <div\n *ngFor=\"let key of objectKeys(oldObj, newObj); trackBy: trackByKey\"\n class=\"cqa-nvh-obj-row\">\n <span class=\"cqa-nvh-obj-key\">{{ getFieldLabelFn(key) }}</span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--before\">\n {{ formatPrimitiveValue(oldObj?.[key]) }}\n </span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--after\">\n {{ formatPrimitiveValue(newObj?.[key]) }}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [] }]
142
+ args: [{ selector: 'cqa-new-version-history-detail', template: "<ng-container *ngIf=\"selectedVersion; else noSelection\">\n <!-- ========== Header (same as old component) ========== -->\n <div class=\"d-flex align-items-start justify-content-between cqa-nvh-detail-header\">\n <div>\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n <h3 class=\"cqa-nvh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <div class=\"cqa-nvh-detail-meta\">\n {{ getAuthorLabelFn(selectedVersion) }} \u00B7 {{ selectedVersion.createdDate | date:'MMM d, yyyy \u00B7 h:mm a' }}\n </div>\n <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-nvh-detail-summary\">\n {{ selectedVersion.changeSummary }}\n </div>\n </div>\n <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-nvh-detail-actions\">\n <!-- <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button> -->\n <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n </div>\n </div>\n\n <!-- ========== Summary bar ========== -->\n <!-- <div *ngIf=\"stepsSummary\" class=\"cqa-nvh-detail-summary-bar\">\n <span *ngIf=\"stepsSummary.added\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--added\">+{{ stepsSummary.added }} added</span>\n <span *ngIf=\"stepsSummary.modified\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--modified\">{{ stepsSummary.modified }} modified</span>\n <span *ngIf=\"stepsSummary.removed\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--removed\">{{ stepsSummary.removed }} removed</span>\n <span *ngIf=\"stepsSummary.unchanged\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--unchanged\">{{ stepsSummary.unchanged }} unchanged</span>\n </div> -->\n\n <!-- ========== Test Case Changes ========== -->\n <ng-container *ngIf=\"hasTestCaseChanges\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Test Case Changes</span>\n <cqa-badge [label]=\"'' + testCaseChangedFields.length\" size=\"small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let field of testCaseChangedFields; trackBy: trackByField\" class=\"cqa-nvh-change-card\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: selectedVersion.testCase.old?.[field],\n newValue: selectedVersion.testCase.new?.[field],\n field: field,\n oldStepData: selectedVersion.testCase.old,\n newStepData: selectedVersion.testCase.new\n }\">\n </ng-container>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Added ========== -->\n <ng-container *ngIf=\"stepsAdded.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Added</span>\n <cqa-badge [label]=\"'' + stepsAdded.length\" size=\"small\" backgroundColor=\"#ECFDF3\"\n textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsAdded; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--added\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Added\" size=\"small\" backgroundColor=\"#ECFDF3\" textColor=\"#027A48\"\n borderColor=\"#A7F3D0\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Deleted ========== -->\n <ng-container *ngIf=\"stepsDeleted.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Removed</span>\n <cqa-badge [label]=\"'' + stepsDeleted.length\" size=\"small\" backgroundColor=\"#FEF3F2\"\n textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsDeleted; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--removed\">\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge label=\"Removed\" size=\"small\" backgroundColor=\"#FEF3F2\" textColor=\"#B42318\"\n borderColor=\"#FECDCA\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Steps Updated ========== -->\n <ng-container *ngIf=\"stepsUpdated.length\">\n <div class=\"cqa-nvh-section-header\">\n <span class=\"cqa-nvh-section-label\">Steps Modified</span>\n <cqa-badge [label]=\"'' + stepsUpdated.length\" size=\"small\" backgroundColor=\"#FFFAEB\"\n textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n </div>\n\n <div class=\"cqa-nvh-changes-list\">\n <div *ngFor=\"let step of stepsUpdated; trackBy: trackByStepId\" class=\"cqa-nvh-change-card\">\n <!-- Step header with category badge -->\n <div class=\"cqa-nvh-step-header\">\n <cqa-badge [label]=\"getCategoryLabelFn(step.category)\" size=\"small\" backgroundColor=\"#EDF1F3\"\n textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n </div>\n\n <!-- Changed fields with before/after -->\n <div *ngFor=\"let field of visibleChangedFields(step); trackBy: trackByField\" class=\"cqa-nvh-field-diff\">\n <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n <ng-container\n *ngTemplateOutlet=\"beforeAfterBlock; context: {\n oldValue: step.old?.[field],\n newValue: step.new?.[field],\n field: field,\n oldStepData: step.old,\n newStepData: step.new\n }\">\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- ========== Empty state ========== -->\n <div *ngIf=\"!hasAnyChanges\" class=\"cqa-nvh-detail-empty\">\n <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n </div>\n</ng-container>\n\n<ng-template #noSelection>\n <div class=\"cqa-nvh-detail-no-selection\">\n Select a version to view details.\n </div>\n</ng-template>\n\n<!-- ===== Reusable before/after block ===== -->\n<ng-template #beforeAfterBlock let-oldValue=\"oldValue\" let-newValue=\"newValue\" let-field=\"field\" let-oldStepData=\"oldStepData\" let-newStepData=\"newStepData\">\n <!-- 1. Custom table via parseFieldAsTableFn (e.g. testDataList) -->\n <ng-container *ngIf=\"parseFieldAsTableFn(field, oldValue, oldStepData) || parseFieldAsTableFn(field, newValue, newStepData); else nativeObjectCheck\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseFieldAsTableFn(field, oldValue, oldStepData),\n newObj: parseFieldAsTableFn(field, newValue, newStepData)\n }\">\n </ng-container>\n </ng-container>\n\n <!-- 2. Native object / JSON string -->\n <ng-template #nativeObjectCheck>\n <ng-container *ngIf=\"parseObjectValue(oldValue) || parseObjectValue(newValue); else simpleValue\">\n <ng-container\n *ngTemplateOutlet=\"objTable; context: {\n oldObj: parseObjectValue(oldValue),\n newObj: parseObjectValue(newValue)\n }\">\n </ng-container>\n </ng-container>\n </ng-template>\n\n <!-- 3. Primitive fallback -->\n <ng-template #simpleValue>\n <ng-container *ngIf=\"getInlineDiffFn(oldValue, newValue, field, oldStepData, newStepData) as diff; else plainBeforeAfter\">\n <!-- Inline diff view: no --before/--after color modifiers; diff HTML owns all token colors -->\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.oldHtml\"></span>\n </div>\n <div class=\"cqa-nvh-value-row\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.newHtml\"></span>\n </div>\n </div>\n </ng-container>\n\n <!-- Plain text fallback (no diff) -->\n <ng-template #plainBeforeAfter>\n <div class=\"cqa-nvh-before-after\">\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--before\">\n <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n borderColor=\"#FFE2E2\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(oldValue, field, oldStepData) }}</span>\n </div>\n <div class=\"cqa-nvh-value-row cqa-nvh-value-row--after\">\n <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n borderColor=\"#D0FAE5\"></cqa-badge>\n <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n <cqa-badge [label]=\"badge.label\" size=\"small\"\n [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\"></cqa-badge>\n </ng-container>\n <span class=\"cqa-nvh-value-text\">{{ formatDisplayValueFn(newValue, field, newStepData) }}</span>\n </div>\n </div>\n </ng-template>\n </ng-template>\n</ng-template>\n\n<!-- ===== Shared object table ===== -->\n<ng-template #objTable let-oldObj=\"oldObj\" let-newObj=\"newObj\">\n <div class=\"cqa-nvh-obj-table\" *ngIf=\"objectKeys(oldObj, newObj).length > 0\">\n <div class=\"cqa-nvh-obj-header\">\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-key-header\"></span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--before\">Before</span>\n <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--after\">After</span>\n </div>\n <div\n *ngFor=\"let key of objectKeys(oldObj, newObj); trackBy: trackByKey\"\n class=\"cqa-nvh-obj-row\"\n [class.cqa-nvh-obj-row--changed]=\"formatPrimitiveValue(oldObj?.[key]) !== formatPrimitiveValue(newObj?.[key])\">\n <span class=\"cqa-nvh-obj-key\">{{ getFieldLabelFn(key) }}</span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--before\">\n {{ formatPrimitiveValue(oldObj?.[key]) }}\n </span>\n <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--after\">\n {{ formatPrimitiveValue(newObj?.[key]) }}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [] }]
143
143
  }], propDecorators: { selectedVersion: [{
144
144
  type: Input
145
145
  }], selectedIsCurrent: [{
@@ -171,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
171
171
  }], restore: [{
172
172
  type: Output
173
173
  }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBT3ZFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFMN0M7UUFNbUIsc0JBQWlCLEdBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUdqRCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIscUJBQWdCLEdBQTZCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxvQkFBZSxHQUE4QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzlELG9CQUFlLEdBQTBCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUN0RCx1QkFBa0IsR0FBaUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUMxRix5QkFBb0IsR0FBMkQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xILHdCQUFtQixHQUEwQixHQUFH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TUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1uZXctdmVyc2lvbi1oaXN0b3J5LWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZXctdmVyc2lvbi1oaXN0b3J5LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgTmV3VmVyc2lvbkhpc3RvcnlEZXRhaWxDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHByaW9yaXRpemVkRmllbGRzOiBzdHJpbmdbXSA9IFsnYWN0aW9uJ107XG5cbiAgQElucHV0KCkgc2VsZWN0ZWRWZXJzaW9uOiBhbnk7XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXNDdXJyZW50ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzUmVzdG9yaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZ2V0QXV0aG9yTGFiZWxGbjogKHZlcnNpb246IGFueSkgPT4gc3RyaW5nID0gKCkgPT4gJyc7XG4gIEBJbnB1dCgpIGdldEZpZWxkTGFiZWxGbjogKGZpZWxkOiBzdHJpbmcpID0+IHN0cmluZyA9IChmaWVsZCkgPT4gZmllbGQ7XG4gIEBJbnB1dCgpIGdldFN0ZXBQcmVmaXhGbjogKHN0ZXA6IGFueSkgPT4gc3RyaW5nID0gKCkgPT4gJ1N0ZXAnO1xuICBASW5wdXQoKSBnZXRDYXRlZ29yeUxhYmVsRm46IChjYXRlZ29yeTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoY2F0KSA9PiAoY2F0IHx8ICdPdGhlcicpICsgJyBDaGFuZ2VzJztcbiAgQElucHV0KCkgZm9ybWF0RGlzcGxheVZhbHVlRm46ICh2YWx1ZTogYW55LCBmaWVsZD86IHN0cmluZywgc3RlcERhdGE/OiBhbnkpID0+IHN0cmluZyA9ICh2KSA9PiB2ID09IG51bGwgPyAnLScgOiBTdHJpbmcodik7XG4gIEBJbnB1dCgpIGdldFN0ZXBBY3Rpb25IdG1sRm46IChzdGVwOiBhbnkpID0+IHN0cmluZyA9ICgpID0+ICcnO1xuICBASW5wdXQoKSBoaWRkZW5GaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIHBhcnNlRmllbGRBc1RhYmxlRm46IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55LCBzdGVwRGF0YT86IGFueSkgPT4gUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSAoKSA9PiBudWxsO1xuICAvKiogUmV0dXJuIGEgYmFkZ2UgY29uZmlnIHRvIHJlbmRlciBiZWZvcmUgdGhlIHZhbHVlIHRleHQsIG9yIG51bGwgZm9yIG5vIGJhZGdlLiAqL1xuICBASW5wdXQoKSBnZXRWYWx1ZUJhZGdlQ29uZmlnRm46ICh2YWx1ZTogYW55LCBmaWVsZDogc3RyaW5nLCBzdGVwRGF0YT86IGFueSkgPT4geyBsYWJlbDogc3RyaW5nOyBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZzsgdGV4dENvbG9yOiBzdHJpbmc7IGJvcmRlckNvbG9yOiBzdHJpbmcgfSB8IG51bGwgPSAoKSA9PiBudWxsO1xuICAvKiogUmV0dXJuIHsgb2xkSHRtbCwgbmV3SHRtbCB9IHdpdGggaW5saW5lIGRpZmYgbWFya3VwLCBvciBudWxsIHRvIHVzZSBwbGFpbiB0ZXh0IHJlbmRlcmluZy4gKi9cbiAgQElucHV0KCkgZ2V0SW5saW5lRGlmZkZuOiAob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSwgZmllbGQ6IHN0cmluZywgb2xkU3RlcERhdGE/OiBhbnksIG5ld1N0ZXBEYXRhPzogYW55KSA9PiB7IG9sZEh0bWw6IHN0cmluZzsgbmV3SHRtbDogc3RyaW5nIH0gfCBudWxsID0gKCkgPT4gbnVsbDtcblxuICBAT3V0cHV0KCkgY29tcGFyZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlc3RvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZ2V0IGhhc1Rlc3RDYXNlQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZlcnNpb24/LnRlc3RDYXNlPy5oYXNDaGFuZ2VzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IHRlc3RDYXNlQ2hhbmdlZEZpZWxkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUZpZWxkcyh0aGlzLnNlbGVjdGVkVmVyc2lvbj8udGVzdENhc2U/LmNoYW5nZWRGaWVsZHMgfHwgW10pO1xuICB9XG5cbiAgdmlzaWJsZUZpZWxkcyhmaWVsZHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmhpZGRlbkZpZWxkcz8ubGVuZ3RoXG4gICAgICA/IGZpZWxkcy5maWx0ZXIoZiA9PiAhdGhpcy5oaWRkZW5GaWVsZHMuaW5jbHVkZXMoZikpXG4gICAgICA6IFsuLi5maWVsZHNdO1xuICAgIHJldHVybiB0aGlzLnByaW9yaXRpemVGaWVsZHModmlzaWJsZSk7XG4gIH1cblxuICB2aXNpYmxlQ2hhbmdlZEZpZWxkcyhzdGVwOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUZpZWxkcyhzdGVwPy5jaGFuZ2VkRmllbGRzIHx8IFtdKTtcbiAgfVxuXG4gIGdldCBzdGVwc0FkZGVkKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZlcnNpb24/LnN0ZXBzPy5hZGRlZCB8fCBbXTtcbiAgfVxuXG4gIGdldCBzdGVwc0RlbGV0ZWQoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmVyc2lvbj8uc3RlcHM/LmRlbGV0ZWQgfHwgW107XG4gIH1cblxuICBnZXQgc3RlcHNVcGRhdGVkKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZlcnNpb24/LnN0ZXBzPy51cGRhdGVkIHx8IFtdO1xuICB9XG5cbiAgZ2V0IHN0ZXBzU3VtbWFyeSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmVyc2lvbj8uc3RlcHM/LnN1bW1hcnk7XG4gIH1cblxuICBnZXQgaGFzQW55Q2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUZXN0Q2FzZUNoYW5nZXNcbiAgICAgIHx8IHRoaXMuc3RlcHNBZGRlZC5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLnN0ZXBzRGVsZXRlZC5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLnN0ZXBzVXBkYXRlZC5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIHBhcnNlIHRoZSB2YWx1ZSBhcyBhIHBsYWluIG9iamVjdCAob3IgYSBKU09OIHN0cmluZyB0aGF0IGlzIGFuIG9iamVjdCkuXG4gICAqIFJldHVybnMgdGhlIHBhcnNlZCBvYmplY3QsIG9yIG51bGwgaWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QvSlNPTi1vYmplY3QuXG4gICAqL1xuICBwYXJzZU9iamVjdFZhbHVlKHZhbHVlOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsgcmV0dXJuIHZhbHVlOyB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCd7JykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRyaW1tZWQpO1xuICAgICAgICAgIGlmIChwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggeyAvKiBub3QgdmFsaWQgSlNPTiAqLyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIFJldHVybnMgb25seSB0aGUga2V5cyB3aGVyZSBvbGQgYW5kIG5ldyB2YWx1ZXMgZGlmZmVyLiAqL1xuICBvYmplY3RLZXlzKG9sZE9iajogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG5ld09iajogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQoW1xuICAgICAgLi4uT2JqZWN0LmtleXMob2xkT2JqIHx8IHt9KSxcbiAgICAgIC4uLk9iamVjdC5rZXlzKG5ld09iaiB8fCB7fSlcbiAgICBdKTtcbiAgICBjb25zdCBjaGFuZ2VkID0gQXJyYXkuZnJvbShhbGxLZXlzKS5maWx0ZXIoa2V5ID0+XG4gICAgICBKU09OLnN0cmluZ2lmeSgob2xkT2JqIHx8IHt9KVtrZXldKSAhPT0gSlNPTi5zdHJpbmdpZnkoKG5ld09iaiB8fCB7fSlba2V5XSlcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnByaW9yaXRpemVGaWVsZHMoY2hhbmdlZCk7XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIHRoZSB2YWx1ZSBmb3IgYSBrZXkgZGlmZmVycyBiZXR3ZWVuIG9sZCBhbmQgbmV3LiAqL1xuICBpc0tleUNoYW5nZWQob2xkT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgbmV3T2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoKG9sZE9iaiB8fCB7fSlba2V5XSkgIT09IEpTT04uc3RyaW5naWZ5KChuZXdPYmogfHwge30pW2tleV0pO1xuICB9XG5cbiAgZm9ybWF0UHJpbWl0aXZlVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHsgcmV0dXJuICctJzsgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgeyByZXR1cm4gdmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnOyB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7IHJldHVybiAnLSc7IH1cbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0sIGkpID0+XG4gICAgICAgIGAke2kgKyAxfS4gJHt0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShpdGVtKSA6IFN0cmluZyhpdGVtKX1gXG4gICAgICApLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgeyByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpOyB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICB0cmFja0J5S2V5KF9pbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIHRyYWNrQnlGaWVsZChfaW5kZXg6IG51bWJlciwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgdHJhY2tCeVN0ZXBJZChfaW5kZXg6IG51bWJlciwgc3RlcDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RlcC5zdGVwSWQgPz8gc3RlcC5vbGQ/LmlkID8/IHN0ZXAubmV3Py5pZCA/PyBfaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHByaW9yaXRpemVGaWVsZHMoZmllbGRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIGNvbnN0IHByaW9yaXRpemVkID0gdGhpcy5wcmlvcml0aXplZEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGRzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgaWYgKCFwcmlvcml0aXplZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJpb3JpdGl6ZWRTZXQgPSBuZXcgU2V0KHByaW9yaXRpemVkKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSBmaWVsZHMuZmlsdGVyKGZpZWxkID0+ICFwcmlvcml0aXplZFNldC5oYXMoZmllbGQpKTtcbiAgICByZXR1cm4gWy4uLnByaW9yaXRpemVkLCAuLi5yZW1haW5pbmddO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWZXJzaW9uOyBlbHNlIG5vU2VsZWN0aW9uXCI+XG4gIDwhLS0gPT09PT09PT09PSBIZWFkZXIgKHNhbWUgYXMgb2xkIGNvbXBvbmVudCkgPT09PT09PT09PSAtLT5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjcWEtbnZoLWRldGFpbC1oZWFkZXJcIj5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogOHB4OyBtYXJnaW4tYm90dG9tOiA2cHg7XCI+XG4gICAgICAgIDxoMyBjbGFzcz1cImNxYS1udmgtZGV0YWlsLXZlcnNpb24tbnVtYmVyXCI+VmVyc2lvbiB7eyBzZWxlY3RlZFZlcnNpb24udmVyc2lvbk51bWJlciB9fTwvaDM+XG4gICAgICAgIDxjcWEtYmFkZ2UgKm5nSWY9XCJzZWxlY3RlZElzQ3VycmVudFwiIGxhYmVsPVwiQ3VycmVudFwiIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJpbmZvXCIgYmFja2dyb3VuZENvbG9yPVwiI0VGRjRGRlwiXG4gICAgICAgICAgdGV4dENvbG9yPVwiIzNmNDNlZVwiIGJvcmRlckNvbG9yPVwiI0M3RDdGRVwiPjwvY3FhLWJhZGdlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtbWV0YVwiPlxuICAgICAgICB7eyBnZXRBdXRob3JMYWJlbEZuKHNlbGVjdGVkVmVyc2lvbikgfX0gwrcge3sgc2VsZWN0ZWRWZXJzaW9uLmNyZWF0ZWREYXRlIHwgZGF0ZTonTU1NIGQsIHl5eXkgwrcgaDptbSBhJyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRWZXJzaW9uLmNoYW5nZVN1bW1hcnlcIiBjbGFzcz1cImNxYS1udmgtZGV0YWlsLXN1bW1hcnlcIj5cbiAgICAgICAge3sgc2VsZWN0ZWRWZXJzaW9uLmNoYW5nZVN1bW1hcnkgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhc2VsZWN0ZWRJc0N1cnJlbnRcIiBjbGFzcz1cImNxYS1udmgtZGV0YWlsLWFjdGlvbnNcIj5cbiAgICAgIDwhLS0gPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgdGV4dD1cIkNvbXBhcmUgd2l0aCBDdXJyZW50XCIgKGNsaWNrZWQpPVwiY29tcGFyZS5lbWl0KClcIj48L2NxYS1idXR0b24+IC0tPlxuICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIGljb249XCJyZWZyZXNoXCIgW3RleHRdPVwiaXNSZXN0b3JpbmcgPyAnUmVzdG9yaW5nLi4uJyA6ICdSZXN0b3JlIHRoaXMgVmVyc2lvbidcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZXN0b3JpbmdcIiAoY2xpY2tlZCk9XCJyZXN0b3JlLmVtaXQoKVwiPjwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSA9PT09PT09PT09IFN1bW1hcnkgYmFyID09PT09PT09PT0gLS0+XG4gIDwhLS0gPGRpdiAqbmdJZj1cInN0ZXBzU3VtbWFyeVwiIGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtc3VtbWFyeS1iYXJcIj5cbiAgICA8c3BhbiAqbmdJZj1cInN0ZXBzU3VtbWFyeS5hZGRlZFwiIGNsYXNzPVwiY3FhLW52aC1zdW1tYXJ5LWNoaXAgY3FhLW52aC1zdW1tYXJ5LWNoaXAtLWFkZGVkXCI+K3t7IHN0ZXBzU3VtbWFyeS5hZGRlZCB9fSBhZGRlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInN0ZXBzU3VtbWFyeS5tb2RpZmllZFwiIGNsYXNzPVwiY3FhLW52aC1zdW1tYXJ5LWNoaXAgY3FhLW52aC1zdW1tYXJ5LWNoaXAtLW1vZGlmaWVkXCI+e3sgc3RlcHNTdW1tYXJ5Lm1vZGlmaWVkIH19IG1vZGlmaWVkPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwic3RlcHNTdW1tYXJ5LnJlbW92ZWRcIiBjbGFzcz1cImNxYS1udmgtc3VtbWFyeS1jaGlwIGNxYS1udmgtc3VtbWFyeS1jaGlwLS1yZW1vdmVkXCI+e3sgc3RlcHNTdW1tYXJ5LnJlbW92ZWQgfX0gcmVtb3ZlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInN0ZXBzU3VtbWFyeS51bmNoYW5nZWRcIiBjbGFzcz1cImNxYS1udmgtc3VtbWFyeS1jaGlwIGNxYS1udmgtc3VtbWFyeS1jaGlwLS11bmNoYW5nZWRcIj57eyBzdGVwc1N1bW1hcnkudW5jaGFuZ2VkIH19IHVuY2hhbmdlZDwvc3Bhbj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gPT09PT09PT09PSBUZXN0IENhc2UgQ2hhbmdlcyA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzVGVzdENhc2VDaGFuZ2VzXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1udmgtc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1zZWN0aW9uLWxhYmVsXCI+VGVzdCBDYXNlIENoYW5nZXM8L3NwYW4+XG4gICAgICA8Y3FhLWJhZGdlIFtsYWJlbF09XCInJyArIHRlc3RDYXNlQ2hhbmdlZEZpZWxkcy5sZW5ndGhcIiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwiaW5mb1wiXG4gICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNFRkY0RkZcIiB0ZXh0Q29sb3I9XCIjM2Y0M2VlXCIgYm9yZGVyQ29sb3I9XCIjQzdEN0ZFXCI+PC9jcWEtYmFkZ2U+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1jaGFuZ2VzLWxpc3RcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHRlc3RDYXNlQ2hhbmdlZEZpZWxkczsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCIgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZS1jYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZS1maWVsZC1sYWJlbFwiPnt7IGdldEZpZWxkTGFiZWxGbihmaWVsZCkgfX08L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmVmb3JlQWZ0ZXJCbG9jazsgY29udGV4dDoge1xuICAgICAgICAgICAgb2xkVmFsdWU6IHNlbGVjdGVkVmVyc2lvbi50ZXN0Q2FzZS5vbGQ/LltmaWVsZF0sXG4gICAgICAgICAgICBuZXdWYWx1ZTogc2VsZWN0ZWRWZXJzaW9uLnRlc3RDYXNlLm5ldz8uW2ZpZWxkXSxcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgIG9sZFN0ZXBEYXRhOiBzZWxlY3RlZFZlcnNpb24udGVzdENhc2Uub2xkLFxuICAgICAgICAgICAgbmV3U3RlcERhdGE6IHNlbGVjdGVkVmVyc2lvbi50ZXN0Q2FzZS5uZXdcbiAgICAgICAgICB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gPT09PT09PT09PSBTdGVwcyBBZGRlZCA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcHNBZGRlZC5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXNlY3Rpb24tbGFiZWxcIj5TdGVwcyBBZGRlZDwvc3Bhbj5cbiAgICAgIDxjcWEtYmFkZ2UgW2xhYmVsXT1cIicnICsgc3RlcHNBZGRlZC5sZW5ndGhcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRUNGREYzXCJcbiAgICAgICAgdGV4dENvbG9yPVwiIzAyN0E0OFwiIGJvcmRlckNvbG9yPVwiI0E3RjNEMFwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1udmgtY2hhbmdlcy1saXN0XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzQWRkZWQ7IHRyYWNrQnk6IHRyYWNrQnlTdGVwSWRcIiBjbGFzcz1cImNxYS1udmgtY2hhbmdlLWNhcmQgY3FhLW52aC1jaGFuZ2UtY2FyZC0tYWRkZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtc3RlcC1oZWFkZXJcIj5cbiAgICAgICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQWRkZWRcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRUNGREYzXCIgdGV4dENvbG9yPVwiIzAyN0E0OFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNBN0YzRDBcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc3RlcC1wcmVmaXhcIj57eyBnZXRTdGVwUHJlZml4Rm4oc3RlcCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXN0ZXAtYWN0aW9uIGNxYS1hY3Rpb24tZm9ybWF0XCIgW2lubmVySFRNTF09XCJnZXRTdGVwQWN0aW9uSHRtbEZuKHN0ZXApXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tID09PT09PT09PT0gU3RlcHMgRGVsZXRlZCA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcHNEZWxldGVkLmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc2VjdGlvbi1sYWJlbFwiPlN0ZXBzIFJlbW92ZWQ8L3NwYW4+XG4gICAgICA8Y3FhLWJhZGdlIFtsYWJlbF09XCInJyArIHN0ZXBzRGVsZXRlZC5sZW5ndGhcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRkVGM0YyXCJcbiAgICAgICAgdGV4dENvbG9yPVwiI0I0MjMxOFwiIGJvcmRlckNvbG9yPVwiI0ZFQ0RDQVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1udmgtY2hhbmdlcy1saXN0XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzRGVsZXRlZDsgdHJhY2tCeTogdHJhY2tCeVN0ZXBJZFwiIGNsYXNzPVwiY3FhLW52aC1jaGFuZ2UtY2FyZCBjcWEtbnZoLWNoYW5nZS1jYXJkLS1yZW1vdmVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXN0ZXAtaGVhZGVyXCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIlJlbW92ZWRcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRkVGM0YyXCIgdGV4dENvbG9yPVwiI0I0MjMxOFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNGRUNEQ0FcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc3RlcC1wcmVmaXhcIj57eyBnZXRTdGVwUHJlZml4Rm4oc3RlcCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXN0ZXAtYWN0aW9uIGNxYS1hY3Rpb24tZm9ybWF0XCIgW2lubmVySFRNTF09XCJnZXRTdGVwQWN0aW9uSHRtbEZuKHN0ZXApXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tID09PT09PT09PT0gU3RlcHMgVXBkYXRlZCA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcHNVcGRhdGVkLmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc2VjdGlvbi1sYWJlbFwiPlN0ZXBzIE1vZGlmaWVkPC9zcGFuPlxuICAgICAgPGNxYS1iYWRnZSBbbGFiZWxdPVwiJycgKyBzdGVwc1VwZGF0ZWQubGVuZ3RoXCIgc2l6ZT1cInNtYWxsXCIgYmFja2dyb3VuZENvbG9yPVwiI0ZGRkFFQlwiXG4gICAgICAgIHRleHRDb2xvcj1cIiNCNTQ3MDhcIiBib3JkZXJDb2xvcj1cIiNGRURGODlcIj48L2NxYS1iYWRnZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZXMtbGlzdFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3RlcCBvZiBzdGVwc1VwZGF0ZWQ7IHRyYWNrQnk6IHRyYWNrQnlTdGVwSWRcIiBjbGFzcz1cImNxYS1udmgtY2hhbmdlLWNhcmRcIj5cbiAgICAgICAgPCEtLSBTdGVwIGhlYWRlciB3aXRoIGNhdGVnb3J5IGJhZGdlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1zdGVwLWhlYWRlclwiPlxuICAgICAgICAgIDxjcWEtYmFkZ2UgW2xhYmVsXT1cImdldENhdGVnb3J5TGFiZWxGbihzdGVwLmNhdGVnb3J5KVwiIHNpemU9XCJzbWFsbFwiIGJhY2tncm91bmRDb2xvcj1cIiNFREYxRjNcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwiIzYzNkE3MVwiIGJvcmRlckNvbG9yPVwiI0RCREVFMVwiPjwvY3FhLWJhZGdlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1zdGVwLXByZWZpeFwiPnt7IGdldFN0ZXBQcmVmaXhGbihzdGVwKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc3RlcC1hY3Rpb24gY3FhLWFjdGlvbi1mb3JtYXRcIiBbaW5uZXJIVE1MXT1cImdldFN0ZXBBY3Rpb25IdG1sRm4oc3RlcClcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2hhbmdlZCBmaWVsZHMgd2l0aCBiZWZvcmUvYWZ0ZXIgLS0+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHZpc2libGVDaGFuZ2VkRmllbGRzKHN0ZXApOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIiBjbGFzcz1cImNxYS1udmgtZmllbGQtZGlmZlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZS1maWVsZC1sYWJlbFwiPnt7IGdldEZpZWxkTGFiZWxGbihmaWVsZCkgfX08L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJlZm9yZUFmdGVyQmxvY2s7IGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgb2xkVmFsdWU6IHN0ZXAub2xkPy5bZmllbGRdLFxuICAgICAgICAgICAgICBuZXdWYWx1ZTogc3RlcC5uZXc/LltmaWVsZF0sXG4gICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgb2xkU3RlcERhdGE6IHN0ZXAub2xkLFxuICAgICAgICAgICAgICBuZXdTdGVwRGF0YTogc3RlcC5uZXdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSA9PT09PT09PT09IEVtcHR5IHN0YXRlID09PT09PT09PT0gLS0+XG4gIDxkaXYgKm5nSWY9XCIhaGFzQW55Q2hhbmdlc1wiIGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtZW1wdHlcIj5cbiAgICA8Y3FhLWVtcHR5LXN0YXRlIHRpdGxlPVwiTm8gY2hhbmdlc1wiIGRlc2NyaXB0aW9uPVwiTm8gY2hhbmdlcyByZWNvcmRlZCBmb3IgdGhpcyB2ZXJzaW9uLlwiPjwvY3FhLWVtcHR5LXN0YXRlPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI25vU2VsZWN0aW9uPlxuICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtbm8tc2VsZWN0aW9uXCI+XG4gICAgU2VsZWN0IGEgdmVyc2lvbiB0byB2aWV3IGRldGFpbHMuXG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSA9PT09PSBSZXVzYWJsZSBiZWZvcmUvYWZ0ZXIgYmxvY2sgPT09PT0gLS0+XG48bmctdGVtcGxhdGUgI2JlZm9yZUFmdGVyQmxvY2sgbGV0LW9sZFZhbHVlPVwib2xkVmFsdWVcIiBsZXQtbmV3VmFsdWU9XCJuZXdWYWx1ZVwiIGxldC1maWVsZD1cImZpZWxkXCIgbGV0LW9sZFN0ZXBEYXRhPVwib2xkU3RlcERhdGFcIiBsZXQtbmV3U3RlcERhdGE9XCJuZXdTdGVwRGF0YVwiPlxuICA8IS0tIDEuIEN1c3RvbSB0YWJsZSB2aWEgcGFyc2VGaWVsZEFzVGFibGVGbiAoZS5nLiB0ZXN0RGF0YUxpc3QpIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VGaWVsZEFzVGFibGVGbihmaWVsZCwgb2xkVmFsdWUsIG9sZFN0ZXBEYXRhKSB8fCBwYXJzZUZpZWxkQXNUYWJsZUZuKGZpZWxkLCBuZXdWYWx1ZSwgbmV3U3RlcERhdGEpOyBlbHNlIG5hdGl2ZU9iamVjdENoZWNrXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvYmpUYWJsZTsgY29udGV4dDoge1xuICAgICAgICBvbGRPYmo6IHBhcnNlRmllbGRBc1RhYmxlRm4oZmllbGQsIG9sZFZhbHVlLCBvbGRTdGVwRGF0YSksXG4gICAgICAgIG5ld09iajogcGFyc2VGaWVsZEFzVGFibGVGbihmaWVsZCwgbmV3VmFsdWUsIG5ld1N0ZXBEYXRhKVxuICAgICAgfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIDIuIE5hdGl2ZSBvYmplY3QgLyBKU09OIHN0cmluZyAtLT5cbiAgPG5nLXRlbXBsYXRlICNuYXRpdmVPYmplY3RDaGVjaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VPYmplY3RWYWx1ZShvbGRWYWx1ZSkgfHwgcGFyc2VPYmplY3RWYWx1ZShuZXdWYWx1ZSk7IGVsc2Ugc2ltcGxlVmFsdWVcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvYmpUYWJsZTsgY29udGV4dDoge1xuICAgICAgICAgIG9sZE9iajogcGFyc2VPYmplY3RWYWx1ZShvbGRWYWx1ZSksXG4gICAgICAgICAgbmV3T2JqOiBwYXJzZU9iamVjdFZhbHVlKG5ld1ZhbHVlKVxuICAgICAgICB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIDMuIFByaW1pdGl2ZSBmYWxsYmFjayAtLT5cbiAgPG5nLXRlbXBsYXRlICNzaW1wbGVWYWx1ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0SW5saW5lRGlmZkZuKG9sZFZhbHVlLCBuZXdWYWx1ZSwgZmllbGQsIG9sZFN0ZXBEYXRhLCBuZXdTdGVwRGF0YSkgYXMgZGlmZjsgZWxzZSBwbGFpbkJlZm9yZUFmdGVyXCI+XG4gICAgICA8IS0tIElubGluZSBkaWZmIHZpZXc6IG5vIC0tYmVmb3JlLy0tYWZ0ZXIgY29sb3IgbW9kaWZpZXJzOyBkaWZmIEhUTUwgb3ducyBhbGwgdG9rZW4gY29sb3JzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtYmVmb3JlLWFmdGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXJvd1wiPlxuICAgICAgICAgIDxjcWEtYmFkZ2UgbGFiZWw9XCJCZWZvcmVcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRkVGMkYyXCIgdGV4dENvbG9yPVwiI0ZCMkMzNlwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNGRkUyRTJcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VmFsdWVCYWRnZUNvbmZpZ0ZuKG9sZFZhbHVlLCBmaWVsZCwgb2xkU3RlcERhdGEpIGFzIGJhZGdlXCI+XG4gICAgICAgICAgICA8Y3FhLWJhZGdlIFtsYWJlbF09XCJiYWRnZS5sYWJlbFwiIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiYmFkZ2UuYmFja2dyb3VuZENvbG9yXCIgW3RleHRDb2xvcl09XCJiYWRnZS50ZXh0Q29sb3JcIlxuICAgICAgICAgICAgICBbYm9yZGVyQ29sb3JdPVwiYmFkZ2UuYm9yZGVyQ29sb3JcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtdmFsdWUtdGV4dFwiIFtpbm5lckhUTUxdPVwiZGlmZi5vbGRIdG1sXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtdmFsdWUtcm93XCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkFmdGVyXCIgc2l6ZT1cInNtYWxsXCIgYmFja2dyb3VuZENvbG9yPVwiI0VDRkRGNVwiIHRleHRDb2xvcj1cIiMwMDk5NjZcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9XCIjRDBGQUU1XCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFZhbHVlQmFkZ2VDb25maWdGbihuZXdWYWx1ZSwgZmllbGQsIG5ld1N0ZXBEYXRhKSBhcyBiYWRnZVwiPlxuICAgICAgICAgICAgPGNxYS1iYWRnZSBbbGFiZWxdPVwiYmFkZ2UubGFiZWxcIiBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cImJhZGdlLmJhY2tncm91bmRDb2xvclwiIFt0ZXh0Q29sb3JdPVwiYmFkZ2UudGV4dENvbG9yXCJcbiAgICAgICAgICAgICAgW2JvcmRlckNvbG9yXT1cImJhZGdlLmJvcmRlckNvbG9yXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXRleHRcIiBbaW5uZXJIVE1MXT1cImRpZmYubmV3SHRtbFwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gUGxhaW4gdGV4dCBmYWxsYmFjayAobm8gZGlmZikgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNwbGFpbkJlZm9yZUFmdGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtYmVmb3JlLWFmdGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXJvdyBjcWEtbnZoLXZhbHVlLXJvdy0tYmVmb3JlXCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkJlZm9yZVwiIHNpemU9XCJzbWFsbFwiIGJhY2tncm91bmRDb2xvcj1cIiNGRUYyRjJcIiB0ZXh0Q29sb3I9XCIjRkIyQzM2XCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPVwiI0ZGRTJFMlwiPjwvY3FhLWJhZGdlPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRWYWx1ZUJhZGdlQ29uZmlnRm4ob2xkVmFsdWUsIGZpZWxkLCBvbGRTdGVwRGF0YSkgYXMgYmFkZ2VcIj5cbiAgICAgICAgICAgIDxjcWEtYmFkZ2UgW2xhYmVsXT1cImJhZGdlLmxhYmVsXCIgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCJiYWRnZS5iYWNrZ3JvdW5kQ29sb3JcIiBbdGV4dENvbG9yXT1cImJhZGdlLnRleHRDb2xvclwiXG4gICAgICAgICAgICAgIFtib3JkZXJDb2xvcl09XCJiYWRnZS5ib3JkZXJDb2xvclwiPjwvY3FhLWJhZGdlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC12YWx1ZS10ZXh0XCI+e3sgZm9ybWF0RGlzcGxheVZhbHVlRm4ob2xkVmFsdWUsIGZpZWxkLCBvbGRTdGVwRGF0YSkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC12YWx1ZS1yb3cgY3FhLW52aC12YWx1ZS1yb3ctLWFmdGVyXCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkFmdGVyXCIgc2l6ZT1cInNtYWxsXCIgYmFja2dyb3VuZENvbG9yPVwiI0VDRkRGNVwiIHRleHRDb2xvcj1cIiMwMDk5NjZcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9XCIjRDBGQUU1XCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFZhbHVlQmFkZ2VDb25maWdGbihuZXdWYWx1ZSwgZmllbGQsIG5ld1N0ZXBEYXRhKSBhcyBiYWRnZVwiPlxuICAgICAgICAgICAgPGNxYS1iYWRnZSBbbGFiZWxdPVwiYmFkZ2UubGFiZWxcIiBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cImJhZGdlLmJhY2tncm91bmRDb2xvclwiIFt0ZXh0Q29sb3JdPVwiYmFkZ2UudGV4dENvbG9yXCJcbiAgICAgICAgICAgICAgW2JvcmRlckNvbG9yXT1cImJhZGdlLmJvcmRlckNvbG9yXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXRleHRcIj57eyBmb3JtYXREaXNwbGF5VmFsdWVGbihuZXdWYWx1ZSwgZmllbGQsIG5ld1N0ZXBEYXRhKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSA9PT09PSBTaGFyZWQgb2JqZWN0IHRhYmxlID09PT09IC0tPlxuPG5nLXRlbXBsYXRlICNvYmpUYWJsZSBsZXQtb2xkT2JqPVwib2xkT2JqXCIgbGV0LW5ld09iaj1cIm5ld09ialwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1vYmotdGFibGVcIiAqbmdJZj1cIm9iamVjdEtleXMob2xkT2JqLCBuZXdPYmopLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1vYmotaGVhZGVyXCI+XG4gICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtb2JqLWNvbC1sYWJlbCBjcWEtbnZoLW9iai1jb2wtbGFiZWwtLWJlZm9yZVwiPkJlZm9yZTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1vYmotY29sLWxhYmVsIGNxYS1udmgtb2JqLWNvbC1sYWJlbC0tYWZ0ZXJcIj5BZnRlcjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAqbmdGb3I9XCJsZXQga2V5IG9mIG9iamVjdEtleXMob2xkT2JqLCBuZXdPYmopOyB0cmFja0J5OiB0cmFja0J5S2V5XCJcbiAgICAgIGNsYXNzPVwiY3FhLW52aC1vYmotcm93XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtb2JqLWtleVwiPnt7IGdldEZpZWxkTGFiZWxGbihrZXkpIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLW9iai12YWwgY3FhLW52aC1vYmotdmFsLS1iZWZvcmVcIj5cbiAgICAgICAge3sgZm9ybWF0UHJpbWl0aXZlVmFsdWUob2xkT2JqPy5ba2V5XSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1vYmotdmFsIGNxYS1udmgtb2JqLXZhbC0tYWZ0ZXJcIj5cbiAgICAgICAge3sgZm9ybWF0UHJpbWl0aXZlVmFsdWUobmV3T2JqPy5ba2V5XSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwvbmV3LXZlcnNpb24taGlzdG9yeS1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBT3ZFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFMN0M7UUFNbUIsc0JBQWlCLEdBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUdqRCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIscUJBQWdCLEdBQTZCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxvQkFBZSxHQUE4QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQzlELG9CQUFlLEdBQTBCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUN0RCx1QkFBa0IsR0FBaUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUMxRix5QkFBb0IsR0FBMkQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xILHdCQUFtQixHQUEwQixHQUFH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TUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1uZXctdmVyc2lvbi1oaXN0b3J5LWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZXctdmVyc2lvbi1oaXN0b3J5LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgTmV3VmVyc2lvbkhpc3RvcnlEZXRhaWxDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHByaW9yaXRpemVkRmllbGRzOiBzdHJpbmdbXSA9IFsnYWN0aW9uJ107XG5cbiAgQElucHV0KCkgc2VsZWN0ZWRWZXJzaW9uOiBhbnk7XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXNDdXJyZW50ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzUmVzdG9yaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZ2V0QXV0aG9yTGFiZWxGbjogKHZlcnNpb246IGFueSkgPT4gc3RyaW5nID0gKCkgPT4gJyc7XG4gIEBJbnB1dCgpIGdldEZpZWxkTGFiZWxGbjogKGZpZWxkOiBzdHJpbmcpID0+IHN0cmluZyA9IChmaWVsZCkgPT4gZmllbGQ7XG4gIEBJbnB1dCgpIGdldFN0ZXBQcmVmaXhGbjogKHN0ZXA6IGFueSkgPT4gc3RyaW5nID0gKCkgPT4gJ1N0ZXAnO1xuICBASW5wdXQoKSBnZXRDYXRlZ29yeUxhYmVsRm46IChjYXRlZ29yeTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoY2F0KSA9PiAoY2F0IHx8ICdPdGhlcicpICsgJyBDaGFuZ2VzJztcbiAgQElucHV0KCkgZm9ybWF0RGlzcGxheVZhbHVlRm46ICh2YWx1ZTogYW55LCBmaWVsZD86IHN0cmluZywgc3RlcERhdGE/OiBhbnkpID0+IHN0cmluZyA9ICh2KSA9PiB2ID09IG51bGwgPyAnLScgOiBTdHJpbmcodik7XG4gIEBJbnB1dCgpIGdldFN0ZXBBY3Rpb25IdG1sRm46IChzdGVwOiBhbnkpID0+IHN0cmluZyA9ICgpID0+ICcnO1xuICBASW5wdXQoKSBoaWRkZW5GaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIHBhcnNlRmllbGRBc1RhYmxlRm46IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55LCBzdGVwRGF0YT86IGFueSkgPT4gUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSAoKSA9PiBudWxsO1xuICAvKiogUmV0dXJuIGEgYmFkZ2UgY29uZmlnIHRvIHJlbmRlciBiZWZvcmUgdGhlIHZhbHVlIHRleHQsIG9yIG51bGwgZm9yIG5vIGJhZGdlLiAqL1xuICBASW5wdXQoKSBnZXRWYWx1ZUJhZGdlQ29uZmlnRm46ICh2YWx1ZTogYW55LCBmaWVsZDogc3RyaW5nLCBzdGVwRGF0YT86IGFueSkgPT4geyBsYWJlbDogc3RyaW5nOyBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZzsgdGV4dENvbG9yOiBzdHJpbmc7IGJvcmRlckNvbG9yOiBzdHJpbmcgfSB8IG51bGwgPSAoKSA9PiBudWxsO1xuICAvKiogUmV0dXJuIHsgb2xkSHRtbCwgbmV3SHRtbCB9IHdpdGggaW5saW5lIGRpZmYgbWFya3VwLCBvciBudWxsIHRvIHVzZSBwbGFpbiB0ZXh0IHJlbmRlcmluZy4gKi9cbiAgQElucHV0KCkgZ2V0SW5saW5lRGlmZkZuOiAob2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSwgZmllbGQ6IHN0cmluZywgb2xkU3RlcERhdGE/OiBhbnksIG5ld1N0ZXBEYXRhPzogYW55KSA9PiB7IG9sZEh0bWw6IHN0cmluZzsgbmV3SHRtbDogc3RyaW5nIH0gfCBudWxsID0gKCkgPT4gbnVsbDtcblxuICBAT3V0cHV0KCkgY29tcGFyZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlc3RvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZ2V0IGhhc1Rlc3RDYXNlQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZlcnNpb24/LnRlc3RDYXNlPy5oYXNDaGFuZ2VzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IHRlc3RDYXNlQ2hhbmdlZEZpZWxkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUZpZWxkcyh0aGlzLnNlbGVjdGVkVmVyc2lvbj8udGVzdENhc2U/LmNoYW5nZWRGaWVsZHMgfHwgW10pO1xuICB9XG5cbiAgdmlzaWJsZUZpZWxkcyhmaWVsZHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmhpZGRlbkZpZWxkcz8ubGVuZ3RoXG4gICAgICA/IGZpZWxkcy5maWx0ZXIoZiA9PiAhdGhpcy5oaWRkZW5GaWVsZHMuaW5jbHVkZXMoZikpXG4gICAgICA6IFsuLi5maWVsZHNdO1xuICAgIHJldHVybiB0aGlzLnByaW9yaXRpemVGaWVsZHModmlzaWJsZSk7XG4gIH1cblxuICB2aXNpYmxlQ2hhbmdlZEZpZWxkcyhzdGVwOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUZpZWxkcyhzdGVwPy5jaGFuZ2VkRmllbGRzIHx8IFtdKTtcbiAgfVxuXG4gIGdldCBzdGVwc0FkZGVkKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZlcnNpb24/LnN0ZXBzPy5hZGRlZCB8fCBbXTtcbiAgfVxuXG4gIGdldCBzdGVwc0RlbGV0ZWQoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmVyc2lvbj8uc3RlcHM/LmRlbGV0ZWQgfHwgW107XG4gIH1cblxuICBnZXQgc3RlcHNVcGRhdGVkKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFZlcnNpb24/LnN0ZXBzPy51cGRhdGVkIHx8IFtdO1xuICB9XG5cbiAgZ2V0IHN0ZXBzU3VtbWFyeSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmVyc2lvbj8uc3RlcHM/LnN1bW1hcnk7XG4gIH1cblxuICBnZXQgaGFzQW55Q2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUZXN0Q2FzZUNoYW5nZXNcbiAgICAgIHx8IHRoaXMuc3RlcHNBZGRlZC5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLnN0ZXBzRGVsZXRlZC5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLnN0ZXBzVXBkYXRlZC5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIHBhcnNlIHRoZSB2YWx1ZSBhcyBhIHBsYWluIG9iamVjdCAob3IgYSBKU09OIHN0cmluZyB0aGF0IGlzIGFuIG9iamVjdCkuXG4gICAqIFJldHVybnMgdGhlIHBhcnNlZCBvYmplY3QsIG9yIG51bGwgaWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QvSlNPTi1vYmplY3QuXG4gICAqL1xuICBwYXJzZU9iamVjdFZhbHVlKHZhbHVlOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHsgcmV0dXJuIG51bGw7IH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsgcmV0dXJuIHZhbHVlOyB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCd7JykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRyaW1tZWQpO1xuICAgICAgICAgIGlmIChwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggeyAvKiBub3QgdmFsaWQgSlNPTiAqLyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIFJldHVybnMgb25seSB0aGUga2V5cyB3aGVyZSBvbGQgYW5kIG5ldyB2YWx1ZXMgZGlmZmVyLiAqL1xuICBvYmplY3RLZXlzKG9sZE9iajogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG5ld09iajogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQoW1xuICAgICAgLi4uT2JqZWN0LmtleXMob2xkT2JqIHx8IHt9KSxcbiAgICAgIC4uLk9iamVjdC5rZXlzKG5ld09iaiB8fCB7fSlcbiAgICBdKTtcbiAgICBjb25zdCBjaGFuZ2VkID0gQXJyYXkuZnJvbShhbGxLZXlzKS5maWx0ZXIoa2V5ID0+XG4gICAgICBKU09OLnN0cmluZ2lmeSgob2xkT2JqIHx8IHt9KVtrZXldKSAhPT0gSlNPTi5zdHJpbmdpZnkoKG5ld09iaiB8fCB7fSlba2V5XSlcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnByaW9yaXRpemVGaWVsZHMoY2hhbmdlZCk7XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIHRoZSB2YWx1ZSBmb3IgYSBrZXkgZGlmZmVycyBiZXR3ZWVuIG9sZCBhbmQgbmV3LiAqL1xuICBpc0tleUNoYW5nZWQob2xkT2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgbmV3T2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoKG9sZE9iaiB8fCB7fSlba2V5XSkgIT09IEpTT04uc3RyaW5naWZ5KChuZXdPYmogfHwge30pW2tleV0pO1xuICB9XG5cbiAgZm9ybWF0UHJpbWl0aXZlVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHsgcmV0dXJuICctJzsgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgeyByZXR1cm4gdmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnOyB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7IHJldHVybiAnLSc7IH1cbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0sIGkpID0+XG4gICAgICAgIGAke2kgKyAxfS4gJHt0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShpdGVtKSA6IFN0cmluZyhpdGVtKX1gXG4gICAgICApLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgeyByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpOyB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICB0cmFja0J5S2V5KF9pbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIHRyYWNrQnlGaWVsZChfaW5kZXg6IG51bWJlciwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgdHJhY2tCeVN0ZXBJZChfaW5kZXg6IG51bWJlciwgc3RlcDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RlcC5zdGVwSWQgPz8gc3RlcC5vbGQ/LmlkID8/IHN0ZXAubmV3Py5pZCA/PyBfaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHByaW9yaXRpemVGaWVsZHMoZmllbGRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIWZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIGNvbnN0IHByaW9yaXRpemVkID0gdGhpcy5wcmlvcml0aXplZEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGRzLmluY2x1ZGVzKGZpZWxkKSk7XG4gICAgaWYgKCFwcmlvcml0aXplZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJpb3JpdGl6ZWRTZXQgPSBuZXcgU2V0KHByaW9yaXRpemVkKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSBmaWVsZHMuZmlsdGVyKGZpZWxkID0+ICFwcmlvcml0aXplZFNldC5oYXMoZmllbGQpKTtcbiAgICByZXR1cm4gWy4uLnByaW9yaXRpemVkLCAuLi5yZW1haW5pbmddO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWZXJzaW9uOyBlbHNlIG5vU2VsZWN0aW9uXCI+XG4gIDwhLS0gPT09PT09PT09PSBIZWFkZXIgKHNhbWUgYXMgb2xkIGNvbXBvbmVudCkgPT09PT09PT09PSAtLT5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjcWEtbnZoLWRldGFpbC1oZWFkZXJcIj5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogOHB4OyBtYXJnaW4tYm90dG9tOiA2cHg7XCI+XG4gICAgICAgIDxoMyBjbGFzcz1cImNxYS1udmgtZGV0YWlsLXZlcnNpb24tbnVtYmVyXCI+VmVyc2lvbiB7eyBzZWxlY3RlZFZlcnNpb24udmVyc2lvbk51bWJlciB9fTwvaDM+XG4gICAgICAgIDxjcWEtYmFkZ2UgKm5nSWY9XCJzZWxlY3RlZElzQ3VycmVudFwiIGxhYmVsPVwiQ3VycmVudFwiIHNpemU9XCJzbWFsbFwiIHZhcmlhbnQ9XCJpbmZvXCIgYmFja2dyb3VuZENvbG9yPVwiI0VGRjRGRlwiXG4gICAgICAgICAgdGV4dENvbG9yPVwiIzNmNDNlZVwiIGJvcmRlckNvbG9yPVwiI0M3RDdGRVwiPjwvY3FhLWJhZGdlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtbWV0YVwiPlxuICAgICAgICB7eyBnZXRBdXRob3JMYWJlbEZuKHNlbGVjdGVkVmVyc2lvbikgfX0gwrcge3sgc2VsZWN0ZWRWZXJzaW9uLmNyZWF0ZWREYXRlIHwgZGF0ZTonTU1NIGQsIHl5eXkgwrcgaDptbSBhJyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRWZXJzaW9uLmNoYW5nZVN1bW1hcnlcIiBjbGFzcz1cImNxYS1udmgtZGV0YWlsLXN1bW1hcnlcIj5cbiAgICAgICAge3sgc2VsZWN0ZWRWZXJzaW9uLmNoYW5nZVN1bW1hcnkgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhc2VsZWN0ZWRJc0N1cnJlbnRcIiBjbGFzcz1cImNxYS1udmgtZGV0YWlsLWFjdGlvbnNcIj5cbiAgICAgIDwhLS0gPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgdGV4dD1cIkNvbXBhcmUgd2l0aCBDdXJyZW50XCIgKGNsaWNrZWQpPVwiY29tcGFyZS5lbWl0KClcIj48L2NxYS1idXR0b24+IC0tPlxuICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIGljb249XCJyZWZyZXNoXCIgW3RleHRdPVwiaXNSZXN0b3JpbmcgPyAnUmVzdG9yaW5nLi4uJyA6ICdSZXN0b3JlIHRoaXMgVmVyc2lvbidcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZXN0b3JpbmdcIiAoY2xpY2tlZCk9XCJyZXN0b3JlLmVtaXQoKVwiPjwvY3FhLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSA9PT09PT09PT09IFN1bW1hcnkgYmFyID09PT09PT09PT0gLS0+XG4gIDwhLS0gPGRpdiAqbmdJZj1cInN0ZXBzU3VtbWFyeVwiIGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtc3VtbWFyeS1iYXJcIj5cbiAgICA8c3BhbiAqbmdJZj1cInN0ZXBzU3VtbWFyeS5hZGRlZFwiIGNsYXNzPVwiY3FhLW52aC1zdW1tYXJ5LWNoaXAgY3FhLW52aC1zdW1tYXJ5LWNoaXAtLWFkZGVkXCI+K3t7IHN0ZXBzU3VtbWFyeS5hZGRlZCB9fSBhZGRlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInN0ZXBzU3VtbWFyeS5tb2RpZmllZFwiIGNsYXNzPVwiY3FhLW52aC1zdW1tYXJ5LWNoaXAgY3FhLW52aC1zdW1tYXJ5LWNoaXAtLW1vZGlmaWVkXCI+e3sgc3RlcHNTdW1tYXJ5Lm1vZGlmaWVkIH19IG1vZGlmaWVkPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwic3RlcHNTdW1tYXJ5LnJlbW92ZWRcIiBjbGFzcz1cImNxYS1udmgtc3VtbWFyeS1jaGlwIGNxYS1udmgtc3VtbWFyeS1jaGlwLS1yZW1vdmVkXCI+e3sgc3RlcHNTdW1tYXJ5LnJlbW92ZWQgfX0gcmVtb3ZlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInN0ZXBzU3VtbWFyeS51bmNoYW5nZWRcIiBjbGFzcz1cImNxYS1udmgtc3VtbWFyeS1jaGlwIGNxYS1udmgtc3VtbWFyeS1jaGlwLS11bmNoYW5nZWRcIj57eyBzdGVwc1N1bW1hcnkudW5jaGFuZ2VkIH19IHVuY2hhbmdlZDwvc3Bhbj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gPT09PT09PT09PSBUZXN0IENhc2UgQ2hhbmdlcyA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzVGVzdENhc2VDaGFuZ2VzXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1udmgtc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1zZWN0aW9uLWxhYmVsXCI+VGVzdCBDYXNlIENoYW5nZXM8L3NwYW4+XG4gICAgICA8Y3FhLWJhZGdlIFtsYWJlbF09XCInJyArIHRlc3RDYXNlQ2hhbmdlZEZpZWxkcy5sZW5ndGhcIiBzaXplPVwic21hbGxcIiB2YXJpYW50PVwiaW5mb1wiXG4gICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNFRkY0RkZcIiB0ZXh0Q29sb3I9XCIjM2Y0M2VlXCIgYm9yZGVyQ29sb3I9XCIjQzdEN0ZFXCI+PC9jcWEtYmFkZ2U+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1jaGFuZ2VzLWxpc3RcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHRlc3RDYXNlQ2hhbmdlZEZpZWxkczsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCIgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZS1jYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZS1maWVsZC1sYWJlbFwiPnt7IGdldEZpZWxkTGFiZWxGbihmaWVsZCkgfX08L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmVmb3JlQWZ0ZXJCbG9jazsgY29udGV4dDoge1xuICAgICAgICAgICAgb2xkVmFsdWU6IHNlbGVjdGVkVmVyc2lvbi50ZXN0Q2FzZS5vbGQ/LltmaWVsZF0sXG4gICAgICAgICAgICBuZXdWYWx1ZTogc2VsZWN0ZWRWZXJzaW9uLnRlc3RDYXNlLm5ldz8uW2ZpZWxkXSxcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgIG9sZFN0ZXBEYXRhOiBzZWxlY3RlZFZlcnNpb24udGVzdENhc2Uub2xkLFxuICAgICAgICAgICAgbmV3U3RlcERhdGE6IHNlbGVjdGVkVmVyc2lvbi50ZXN0Q2FzZS5uZXdcbiAgICAgICAgICB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gPT09PT09PT09PSBTdGVwcyBBZGRlZCA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcHNBZGRlZC5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXNlY3Rpb24tbGFiZWxcIj5TdGVwcyBBZGRlZDwvc3Bhbj5cbiAgICAgIDxjcWEtYmFkZ2UgW2xhYmVsXT1cIicnICsgc3RlcHNBZGRlZC5sZW5ndGhcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRUNGREYzXCJcbiAgICAgICAgdGV4dENvbG9yPVwiIzAyN0E0OFwiIGJvcmRlckNvbG9yPVwiI0E3RjNEMFwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1udmgtY2hhbmdlcy1saXN0XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzQWRkZWQ7IHRyYWNrQnk6IHRyYWNrQnlTdGVwSWRcIiBjbGFzcz1cImNxYS1udmgtY2hhbmdlLWNhcmQgY3FhLW52aC1jaGFuZ2UtY2FyZC0tYWRkZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtc3RlcC1oZWFkZXJcIj5cbiAgICAgICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQWRkZWRcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRUNGREYzXCIgdGV4dENvbG9yPVwiIzAyN0E0OFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNBN0YzRDBcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc3RlcC1wcmVmaXhcIj57eyBnZXRTdGVwUHJlZml4Rm4oc3RlcCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXN0ZXAtYWN0aW9uIGNxYS1hY3Rpb24tZm9ybWF0XCIgW2lubmVySFRNTF09XCJnZXRTdGVwQWN0aW9uSHRtbEZuKHN0ZXApXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tID09PT09PT09PT0gU3RlcHMgRGVsZXRlZCA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcHNEZWxldGVkLmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc2VjdGlvbi1sYWJlbFwiPlN0ZXBzIFJlbW92ZWQ8L3NwYW4+XG4gICAgICA8Y3FhLWJhZGdlIFtsYWJlbF09XCInJyArIHN0ZXBzRGVsZXRlZC5sZW5ndGhcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRkVGM0YyXCJcbiAgICAgICAgdGV4dENvbG9yPVwiI0I0MjMxOFwiIGJvcmRlckNvbG9yPVwiI0ZFQ0RDQVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1udmgtY2hhbmdlcy1saXN0XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzRGVsZXRlZDsgdHJhY2tCeTogdHJhY2tCeVN0ZXBJZFwiIGNsYXNzPVwiY3FhLW52aC1jaGFuZ2UtY2FyZCBjcWEtbnZoLWNoYW5nZS1jYXJkLS1yZW1vdmVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXN0ZXAtaGVhZGVyXCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIlJlbW92ZWRcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRkVGM0YyXCIgdGV4dENvbG9yPVwiI0I0MjMxOFwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNGRUNEQ0FcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc3RlcC1wcmVmaXhcIj57eyBnZXRTdGVwUHJlZml4Rm4oc3RlcCkgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXN0ZXAtYWN0aW9uIGNxYS1hY3Rpb24tZm9ybWF0XCIgW2lubmVySFRNTF09XCJnZXRTdGVwQWN0aW9uSHRtbEZuKHN0ZXApXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tID09PT09PT09PT0gU3RlcHMgVXBkYXRlZCA9PT09PT09PT09IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcHNVcGRhdGVkLmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc2VjdGlvbi1sYWJlbFwiPlN0ZXBzIE1vZGlmaWVkPC9zcGFuPlxuICAgICAgPGNxYS1iYWRnZSBbbGFiZWxdPVwiJycgKyBzdGVwc1VwZGF0ZWQubGVuZ3RoXCIgc2l6ZT1cInNtYWxsXCIgYmFja2dyb3VuZENvbG9yPVwiI0ZGRkFFQlwiXG4gICAgICAgIHRleHRDb2xvcj1cIiNCNTQ3MDhcIiBib3JkZXJDb2xvcj1cIiNGRURGODlcIj48L2NxYS1iYWRnZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZXMtbGlzdFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc3RlcCBvZiBzdGVwc1VwZGF0ZWQ7IHRyYWNrQnk6IHRyYWNrQnlTdGVwSWRcIiBjbGFzcz1cImNxYS1udmgtY2hhbmdlLWNhcmRcIj5cbiAgICAgICAgPCEtLSBTdGVwIGhlYWRlciB3aXRoIGNhdGVnb3J5IGJhZGdlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1zdGVwLWhlYWRlclwiPlxuICAgICAgICAgIDxjcWEtYmFkZ2UgW2xhYmVsXT1cImdldENhdGVnb3J5TGFiZWxGbihzdGVwLmNhdGVnb3J5KVwiIHNpemU9XCJzbWFsbFwiIGJhY2tncm91bmRDb2xvcj1cIiNFREYxRjNcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwiIzYzNkE3MVwiIGJvcmRlckNvbG9yPVwiI0RCREVFMVwiPjwvY3FhLWJhZGdlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1zdGVwLXByZWZpeFwiPnt7IGdldFN0ZXBQcmVmaXhGbihzdGVwKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtc3RlcC1hY3Rpb24gY3FhLWFjdGlvbi1mb3JtYXRcIiBbaW5uZXJIVE1MXT1cImdldFN0ZXBBY3Rpb25IdG1sRm4oc3RlcClcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2hhbmdlZCBmaWVsZHMgd2l0aCBiZWZvcmUvYWZ0ZXIgLS0+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHZpc2libGVDaGFuZ2VkRmllbGRzKHN0ZXApOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIiBjbGFzcz1cImNxYS1udmgtZmllbGQtZGlmZlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLWNoYW5nZS1maWVsZC1sYWJlbFwiPnt7IGdldEZpZWxkTGFiZWxGbihmaWVsZCkgfX08L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImJlZm9yZUFmdGVyQmxvY2s7IGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgb2xkVmFsdWU6IHN0ZXAub2xkPy5bZmllbGRdLFxuICAgICAgICAgICAgICBuZXdWYWx1ZTogc3RlcC5uZXc/LltmaWVsZF0sXG4gICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgb2xkU3RlcERhdGE6IHN0ZXAub2xkLFxuICAgICAgICAgICAgICBuZXdTdGVwRGF0YTogc3RlcC5uZXdcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSA9PT09PT09PT09IEVtcHR5IHN0YXRlID09PT09PT09PT0gLS0+XG4gIDxkaXYgKm5nSWY9XCIhaGFzQW55Q2hhbmdlc1wiIGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtZW1wdHlcIj5cbiAgICA8Y3FhLWVtcHR5LXN0YXRlIHRpdGxlPVwiTm8gY2hhbmdlc1wiIGRlc2NyaXB0aW9uPVwiTm8gY2hhbmdlcyByZWNvcmRlZCBmb3IgdGhpcyB2ZXJzaW9uLlwiPjwvY3FhLWVtcHR5LXN0YXRlPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI25vU2VsZWN0aW9uPlxuICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1kZXRhaWwtbm8tc2VsZWN0aW9uXCI+XG4gICAgU2VsZWN0IGEgdmVyc2lvbiB0byB2aWV3IGRldGFpbHMuXG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSA9PT09PSBSZXVzYWJsZSBiZWZvcmUvYWZ0ZXIgYmxvY2sgPT09PT0gLS0+XG48bmctdGVtcGxhdGUgI2JlZm9yZUFmdGVyQmxvY2sgbGV0LW9sZFZhbHVlPVwib2xkVmFsdWVcIiBsZXQtbmV3VmFsdWU9XCJuZXdWYWx1ZVwiIGxldC1maWVsZD1cImZpZWxkXCIgbGV0LW9sZFN0ZXBEYXRhPVwib2xkU3RlcERhdGFcIiBsZXQtbmV3U3RlcERhdGE9XCJuZXdTdGVwRGF0YVwiPlxuICA8IS0tIDEuIEN1c3RvbSB0YWJsZSB2aWEgcGFyc2VGaWVsZEFzVGFibGVGbiAoZS5nLiB0ZXN0RGF0YUxpc3QpIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VGaWVsZEFzVGFibGVGbihmaWVsZCwgb2xkVmFsdWUsIG9sZFN0ZXBEYXRhKSB8fCBwYXJzZUZpZWxkQXNUYWJsZUZuKGZpZWxkLCBuZXdWYWx1ZSwgbmV3U3RlcERhdGEpOyBlbHNlIG5hdGl2ZU9iamVjdENoZWNrXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvYmpUYWJsZTsgY29udGV4dDoge1xuICAgICAgICBvbGRPYmo6IHBhcnNlRmllbGRBc1RhYmxlRm4oZmllbGQsIG9sZFZhbHVlLCBvbGRTdGVwRGF0YSksXG4gICAgICAgIG5ld09iajogcGFyc2VGaWVsZEFzVGFibGVGbihmaWVsZCwgbmV3VmFsdWUsIG5ld1N0ZXBEYXRhKVxuICAgICAgfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIDIuIE5hdGl2ZSBvYmplY3QgLyBKU09OIHN0cmluZyAtLT5cbiAgPG5nLXRlbXBsYXRlICNuYXRpdmVPYmplY3RDaGVjaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyc2VPYmplY3RWYWx1ZShvbGRWYWx1ZSkgfHwgcGFyc2VPYmplY3RWYWx1ZShuZXdWYWx1ZSk7IGVsc2Ugc2ltcGxlVmFsdWVcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvYmpUYWJsZTsgY29udGV4dDoge1xuICAgICAgICAgIG9sZE9iajogcGFyc2VPYmplY3RWYWx1ZShvbGRWYWx1ZSksXG4gICAgICAgICAgbmV3T2JqOiBwYXJzZU9iamVjdFZhbHVlKG5ld1ZhbHVlKVxuICAgICAgICB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIDMuIFByaW1pdGl2ZSBmYWxsYmFjayAtLT5cbiAgPG5nLXRlbXBsYXRlICNzaW1wbGVWYWx1ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0SW5saW5lRGlmZkZuKG9sZFZhbHVlLCBuZXdWYWx1ZSwgZmllbGQsIG9sZFN0ZXBEYXRhLCBuZXdTdGVwRGF0YSkgYXMgZGlmZjsgZWxzZSBwbGFpbkJlZm9yZUFmdGVyXCI+XG4gICAgICA8IS0tIElubGluZSBkaWZmIHZpZXc6IG5vIC0tYmVmb3JlLy0tYWZ0ZXIgY29sb3IgbW9kaWZpZXJzOyBkaWZmIEhUTUwgb3ducyBhbGwgdG9rZW4gY29sb3JzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtYmVmb3JlLWFmdGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXJvd1wiPlxuICAgICAgICAgIDxjcWEtYmFkZ2UgbGFiZWw9XCJCZWZvcmVcIiBzaXplPVwic21hbGxcIiBiYWNrZ3JvdW5kQ29sb3I9XCIjRkVGMkYyXCIgdGV4dENvbG9yPVwiI0ZCMkMzNlwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNGRkUyRTJcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VmFsdWVCYWRnZUNvbmZpZ0ZuKG9sZFZhbHVlLCBmaWVsZCwgb2xkU3RlcERhdGEpIGFzIGJhZGdlXCI+XG4gICAgICAgICAgICA8Y3FhLWJhZGdlIFtsYWJlbF09XCJiYWRnZS5sYWJlbFwiIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiYmFkZ2UuYmFja2dyb3VuZENvbG9yXCIgW3RleHRDb2xvcl09XCJiYWRnZS50ZXh0Q29sb3JcIlxuICAgICAgICAgICAgICBbYm9yZGVyQ29sb3JdPVwiYmFkZ2UuYm9yZGVyQ29sb3JcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtdmFsdWUtdGV4dFwiIFtpbm5lckhUTUxdPVwiZGlmZi5vbGRIdG1sXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtdmFsdWUtcm93XCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkFmdGVyXCIgc2l6ZT1cInNtYWxsXCIgYmFja2dyb3VuZENvbG9yPVwiI0VDRkRGNVwiIHRleHRDb2xvcj1cIiMwMDk5NjZcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9XCIjRDBGQUU1XCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFZhbHVlQmFkZ2VDb25maWdGbihuZXdWYWx1ZSwgZmllbGQsIG5ld1N0ZXBEYXRhKSBhcyBiYWRnZVwiPlxuICAgICAgICAgICAgPGNxYS1iYWRnZSBbbGFiZWxdPVwiYmFkZ2UubGFiZWxcIiBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cImJhZGdlLmJhY2tncm91bmRDb2xvclwiIFt0ZXh0Q29sb3JdPVwiYmFkZ2UudGV4dENvbG9yXCJcbiAgICAgICAgICAgICAgW2JvcmRlckNvbG9yXT1cImJhZGdlLmJvcmRlckNvbG9yXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXRleHRcIiBbaW5uZXJIVE1MXT1cImRpZmYubmV3SHRtbFwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gUGxhaW4gdGV4dCBmYWxsYmFjayAobm8gZGlmZikgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNwbGFpbkJlZm9yZUFmdGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1udmgtYmVmb3JlLWFmdGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXJvdyBjcWEtbnZoLXZhbHVlLXJvdy0tYmVmb3JlXCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkJlZm9yZVwiIHNpemU9XCJzbWFsbFwiIGJhY2tncm91bmRDb2xvcj1cIiNGRUYyRjJcIiB0ZXh0Q29sb3I9XCIjRkIyQzM2XCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPVwiI0ZGRTJFMlwiPjwvY3FhLWJhZGdlPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRWYWx1ZUJhZGdlQ29uZmlnRm4ob2xkVmFsdWUsIGZpZWxkLCBvbGRTdGVwRGF0YSkgYXMgYmFkZ2VcIj5cbiAgICAgICAgICAgIDxjcWEtYmFkZ2UgW2xhYmVsXT1cImJhZGdlLmxhYmVsXCIgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCJiYWRnZS5iYWNrZ3JvdW5kQ29sb3JcIiBbdGV4dENvbG9yXT1cImJhZGdlLnRleHRDb2xvclwiXG4gICAgICAgICAgICAgIFtib3JkZXJDb2xvcl09XCJiYWRnZS5ib3JkZXJDb2xvclwiPjwvY3FhLWJhZGdlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC12YWx1ZS10ZXh0XCI+e3sgZm9ybWF0RGlzcGxheVZhbHVlRm4ob2xkVmFsdWUsIGZpZWxkLCBvbGRTdGVwRGF0YSkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC12YWx1ZS1yb3cgY3FhLW52aC12YWx1ZS1yb3ctLWFmdGVyXCI+XG4gICAgICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIkFmdGVyXCIgc2l6ZT1cInNtYWxsXCIgYmFja2dyb3VuZENvbG9yPVwiI0VDRkRGNVwiIHRleHRDb2xvcj1cIiMwMDk5NjZcIlxuICAgICAgICAgICAgYm9yZGVyQ29sb3I9XCIjRDBGQUU1XCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFZhbHVlQmFkZ2VDb25maWdGbihuZXdWYWx1ZSwgZmllbGQsIG5ld1N0ZXBEYXRhKSBhcyBiYWRnZVwiPlxuICAgICAgICAgICAgPGNxYS1iYWRnZSBbbGFiZWxdPVwiYmFkZ2UubGFiZWxcIiBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cImJhZGdlLmJhY2tncm91bmRDb2xvclwiIFt0ZXh0Q29sb3JdPVwiYmFkZ2UudGV4dENvbG9yXCJcbiAgICAgICAgICAgICAgW2JvcmRlckNvbG9yXT1cImJhZGdlLmJvcmRlckNvbG9yXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLXZhbHVlLXRleHRcIj57eyBmb3JtYXREaXNwbGF5VmFsdWVGbihuZXdWYWx1ZSwgZmllbGQsIG5ld1N0ZXBEYXRhKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSA9PT09PSBTaGFyZWQgb2JqZWN0IHRhYmxlID09PT09IC0tPlxuPG5nLXRlbXBsYXRlICNvYmpUYWJsZSBsZXQtb2xkT2JqPVwib2xkT2JqXCIgbGV0LW5ld09iaj1cIm5ld09ialwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1vYmotdGFibGVcIiAqbmdJZj1cIm9iamVjdEtleXMob2xkT2JqLCBuZXdPYmopLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW52aC1vYmotaGVhZGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtb2JqLWNvbC1sYWJlbCBjcWEtbnZoLW9iai1jb2wta2V5LWhlYWRlclwiPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1vYmotY29sLWxhYmVsIGNxYS1udmgtb2JqLWNvbC1sYWJlbC0tYmVmb3JlXCI+QmVmb3JlPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLW9iai1jb2wtbGFiZWwgY3FhLW52aC1vYmotY29sLWxhYmVsLS1hZnRlclwiPkFmdGVyPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBrZXkgb2Ygb2JqZWN0S2V5cyhvbGRPYmosIG5ld09iaik7IHRyYWNrQnk6IHRyYWNrQnlLZXlcIlxuICAgICAgY2xhc3M9XCJjcWEtbnZoLW9iai1yb3dcIlxuICAgICAgW2NsYXNzLmNxYS1udmgtb2JqLXJvdy0tY2hhbmdlZF09XCJmb3JtYXRQcmltaXRpdmVWYWx1ZShvbGRPYmo/LltrZXldKSAhPT0gZm9ybWF0UHJpbWl0aXZlVmFsdWUobmV3T2JqPy5ba2V5XSlcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW52aC1vYmota2V5XCI+e3sgZ2V0RmllbGRMYWJlbEZuKGtleSkgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1udmgtb2JqLXZhbCBjcWEtbnZoLW9iai12YWwtLWJlZm9yZVwiPlxuICAgICAgICB7eyBmb3JtYXRQcmltaXRpdmVWYWx1ZShvbGRPYmo/LltrZXldKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbnZoLW9iai12YWwgY3FhLW52aC1vYmotdmFsLS1hZnRlclwiPlxuICAgICAgICB7eyBmb3JtYXRQcmltaXRpdmVWYWx1ZShuZXdPYmo/LltrZXldKSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -14,15 +14,16 @@ export class VersionHistoryListComponent {
14
14
  this.getAuthorInitialsFn = () => '';
15
15
  this.getAuthorLabelFn = () => '';
16
16
  this.getChangeTypeBadgeFn = () => ({ backgroundColor: '#F2F4F7', textColor: '#344054', borderColor: '#E4E7EC' });
17
+ this.getChangeSummaryBadgeFn = (v) => ({ label: v?.changeSummary || '', backgroundColor: '#F2F4F7', textColor: '#344054', borderColor: '#E4E7EC' });
17
18
  this.versionSelected = new EventEmitter();
18
19
  this.listScroll = new EventEmitter();
19
20
  }
20
21
  }
21
22
  VersionHistoryListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
- VersionHistoryListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryListComponent, selector: "cqa-version-history-list", inputs: { versions: "versions", selectedVersionId: "selectedVersionId", currentVersionId: "currentVersionId", isLoadingList: "isLoadingList", isLoadingMore: "isLoadingMore", emptyStateConfig: "emptyStateConfig", getRelativeTimeFn: "getRelativeTimeFn", getAuthorInitialsFn: "getAuthorInitialsFn", getAuthorLabelFn: "getAuthorLabelFn", getChangeTypeBadgeFn: "getChangeTypeBadgeFn" }, outputs: { versionSelected: "versionSelected", listScroll: "listScroll" }, ngImport: i0, template: "<div class=\"cqa-vh-list-container\" (scroll)=\"listScroll.emit($event)\">\n <div class=\"d-flex align-items-center justify-content-between fz-14 fw-semi-bold cqa-vh-list-header\">\n {{ versions.length }} Versions\n </div>\n\n <div *ngIf=\"isLoadingList\" class=\"cqa-vh-list-skeleton\">\n <div *ngFor=\"let i of [1,2,3,4]\" class=\"cqa-vh-list-skeleton-row\">\n <div class=\"animated-background rounded-circle cqa-vh-list-skeleton-dot\"></div>\n <div style=\"flex: 1;\">\n <div class=\"animated-background\" style=\"height: 14px; width: 50%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 80%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 45%; border-radius: 4px;\"></div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingList\">\n <div *ngIf=\"!versions.length\" class=\"cqa-vh-list-empty\">\n <cqa-empty-state [title]=\"emptyStateConfig?.title\" [description]=\"emptyStateConfig?.description\"\n [imageUrl]=\"emptyStateConfig?.imageUrl\"></cqa-empty-state>\n </div>\n <div class=\"cqa-vh-list-body\">\n <div\n *ngFor=\"let v of versions\"\n (click)=\"versionSelected.emit(v.id)\"\n class=\"cqa-vh-list-item\"\n [class.cqa-vh-list-item--selected]=\"v.id === selectedVersionId\">\n <div class=\"d-flex align-items-start\" style=\"gap: 12px;\">\n <div style=\"padding-top: 3px; flex-shrink: 0;\">\n <span class=\"cqa-vh-list-item-radio\"\n [class.cqa-vh-list-item-radio--selected]=\"v.id === selectedVersionId\">\n <span *ngIf=\"v.id === selectedVersionId\" class=\"cqa-vh-list-item-radio-dot\"></span>\n </span>\n </div>\n <div style=\"flex: 1; min-width: 0;\">\n <div class=\"d-flex align-items-center justify-content-between\" style=\"margin-bottom: 4px;\">\n <div class=\"d-flex align-items-center\" style=\"gap: 6px;\">\n <span class=\"cqa-vh-list-item-version\"\n [class.cqa-vh-list-item-version--selected]=\"v.id === selectedVersionId\">\n v{{ v.versionNumber }}\n </span>\n <cqa-badge *ngIf=\"v.id === currentVersionId\" label=\"Current\" size=\"extra-small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <span class=\"cqa-vh-list-item-time\">{{ getRelativeTimeFn(v.createdDate) }}</span>\n </div>\n\n <div *ngIf=\"v.changeSummary\" class=\"cqa-vh-list-item-summary\">\n {{ v.changeSummary }}\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between\">\n <div class=\"d-flex align-items-center\" style=\"gap: 8px;\">\n <span class=\"cqa-vh-list-item-avatar\">{{ getAuthorInitialsFn(v) }}</span>\n <span class=\"cqa-vh-list-item-author\">{{ getAuthorLabelFn(v) }}</span>\n </div>\n <div *ngIf=\"v.changes?.length\">\n <cqa-badge [label]=\"v.changeType\" size=\"extra-small\"\n [backgroundColor]=\"getChangeTypeBadgeFn(v.changeType).backgroundColor\"\n [textColor]=\"getChangeTypeBadgeFn(v.changeType).textColor\"\n [borderColor]=\"getChangeTypeBadgeFn(v.changeType).borderColor\"></cqa-badge>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isLoadingMore\" class=\"cqa-vh-list-loading-more\">\n Loading more...\n </div>\n </div>\n </ng-container>\n</div>\n", components: [{ type: i1.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }, { type: i2.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
23
+ VersionHistoryListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryListComponent, selector: "cqa-version-history-list", inputs: { versions: "versions", selectedVersionId: "selectedVersionId", currentVersionId: "currentVersionId", isLoadingList: "isLoadingList", isLoadingMore: "isLoadingMore", emptyStateConfig: "emptyStateConfig", getRelativeTimeFn: "getRelativeTimeFn", getAuthorInitialsFn: "getAuthorInitialsFn", getAuthorLabelFn: "getAuthorLabelFn", getChangeTypeBadgeFn: "getChangeTypeBadgeFn", getChangeSummaryBadgeFn: "getChangeSummaryBadgeFn" }, outputs: { versionSelected: "versionSelected", listScroll: "listScroll" }, ngImport: i0, template: "<div class=\"cqa-vh-list-container\" (scroll)=\"listScroll.emit($event)\">\n <div class=\"d-flex align-items-center justify-content-between fz-14 fw-semi-bold cqa-vh-list-header\">\n {{ versions.length }} Versions\n </div>\n\n <div *ngIf=\"isLoadingList\" class=\"cqa-vh-list-skeleton\">\n <div *ngFor=\"let i of [1,2,3,4]\" class=\"cqa-vh-list-skeleton-row\">\n <div class=\"animated-background rounded-circle cqa-vh-list-skeleton-dot\"></div>\n <div style=\"flex: 1;\">\n <div class=\"animated-background\" style=\"height: 14px; width: 50%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 80%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 45%; border-radius: 4px;\"></div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingList\">\n <div *ngIf=\"!versions.length\" class=\"cqa-vh-list-empty\">\n <cqa-empty-state [title]=\"emptyStateConfig?.title\" [description]=\"emptyStateConfig?.description\"\n [imageUrl]=\"emptyStateConfig?.imageUrl\"></cqa-empty-state>\n </div>\n <div class=\"cqa-vh-list-body\">\n <div\n *ngFor=\"let v of versions\"\n (click)=\"versionSelected.emit(v.id)\"\n class=\"cqa-vh-list-item\"\n [class.cqa-vh-list-item--selected]=\"v.id === selectedVersionId\">\n <div class=\"d-flex align-items-start\" style=\"gap: 12px;\">\n <div style=\"padding-top: 3px; flex-shrink: 0;\">\n <span class=\"cqa-vh-list-item-radio\"\n [class.cqa-vh-list-item-radio--selected]=\"v.id === selectedVersionId\">\n <span *ngIf=\"v.id === selectedVersionId\" class=\"cqa-vh-list-item-radio-dot\"></span>\n </span>\n </div>\n <div style=\"flex: 1; min-width: 0;\">\n <div class=\"d-flex align-items-center justify-content-between\" style=\"margin-bottom: 4px;\">\n <div class=\"d-flex align-items-center\" style=\"gap: 6px;\">\n <span class=\"cqa-vh-list-item-version\"\n [class.cqa-vh-list-item-version--selected]=\"v.id === selectedVersionId\">\n v{{ v.versionNumber }}\n </span>\n <cqa-badge *ngIf=\"v.id === currentVersionId\" label=\"Current\" size=\"extra-small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <span class=\"cqa-vh-list-item-time\">{{ getRelativeTimeFn(v.createdDate) }}</span>\n </div>\n\n <div *ngIf=\"v.changeSummary\" class=\"cqa-vh-list-item-summary\">\n <ng-container *ngIf=\"getChangeSummaryBadgeFn(v) as badge\">\n <cqa-badge\n [label]=\"badge.label\"\n size=\"extra-small\"\n [backgroundColor]=\"badge.backgroundColor\"\n [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\">\n </cqa-badge>\n </ng-container>\n </div>\n\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-top: 4px;\">\n <span class=\"cqa-vh-list-item-avatar\">{{ getAuthorInitialsFn(v) }}</span>\n <span class=\"cqa-vh-list-item-author\">{{ getAuthorLabelFn(v) }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isLoadingMore\" class=\"cqa-vh-list-loading-more\">\n Loading more...\n </div>\n </div>\n </ng-container>\n</div>\n", components: [{ type: i1.EmptyStateComponent, selector: "cqa-empty-state", inputs: ["preset", "imageUrl", "title", "description", "actions"], outputs: ["actionClick"] }, { type: i2.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
23
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryListComponent, decorators: [{
24
25
  type: Component,
25
- args: [{ selector: 'cqa-version-history-list', template: "<div class=\"cqa-vh-list-container\" (scroll)=\"listScroll.emit($event)\">\n <div class=\"d-flex align-items-center justify-content-between fz-14 fw-semi-bold cqa-vh-list-header\">\n {{ versions.length }} Versions\n </div>\n\n <div *ngIf=\"isLoadingList\" class=\"cqa-vh-list-skeleton\">\n <div *ngFor=\"let i of [1,2,3,4]\" class=\"cqa-vh-list-skeleton-row\">\n <div class=\"animated-background rounded-circle cqa-vh-list-skeleton-dot\"></div>\n <div style=\"flex: 1;\">\n <div class=\"animated-background\" style=\"height: 14px; width: 50%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 80%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 45%; border-radius: 4px;\"></div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingList\">\n <div *ngIf=\"!versions.length\" class=\"cqa-vh-list-empty\">\n <cqa-empty-state [title]=\"emptyStateConfig?.title\" [description]=\"emptyStateConfig?.description\"\n [imageUrl]=\"emptyStateConfig?.imageUrl\"></cqa-empty-state>\n </div>\n <div class=\"cqa-vh-list-body\">\n <div\n *ngFor=\"let v of versions\"\n (click)=\"versionSelected.emit(v.id)\"\n class=\"cqa-vh-list-item\"\n [class.cqa-vh-list-item--selected]=\"v.id === selectedVersionId\">\n <div class=\"d-flex align-items-start\" style=\"gap: 12px;\">\n <div style=\"padding-top: 3px; flex-shrink: 0;\">\n <span class=\"cqa-vh-list-item-radio\"\n [class.cqa-vh-list-item-radio--selected]=\"v.id === selectedVersionId\">\n <span *ngIf=\"v.id === selectedVersionId\" class=\"cqa-vh-list-item-radio-dot\"></span>\n </span>\n </div>\n <div style=\"flex: 1; min-width: 0;\">\n <div class=\"d-flex align-items-center justify-content-between\" style=\"margin-bottom: 4px;\">\n <div class=\"d-flex align-items-center\" style=\"gap: 6px;\">\n <span class=\"cqa-vh-list-item-version\"\n [class.cqa-vh-list-item-version--selected]=\"v.id === selectedVersionId\">\n v{{ v.versionNumber }}\n </span>\n <cqa-badge *ngIf=\"v.id === currentVersionId\" label=\"Current\" size=\"extra-small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <span class=\"cqa-vh-list-item-time\">{{ getRelativeTimeFn(v.createdDate) }}</span>\n </div>\n\n <div *ngIf=\"v.changeSummary\" class=\"cqa-vh-list-item-summary\">\n {{ v.changeSummary }}\n </div>\n\n <div class=\"d-flex align-items-center justify-content-between\">\n <div class=\"d-flex align-items-center\" style=\"gap: 8px;\">\n <span class=\"cqa-vh-list-item-avatar\">{{ getAuthorInitialsFn(v) }}</span>\n <span class=\"cqa-vh-list-item-author\">{{ getAuthorLabelFn(v) }}</span>\n </div>\n <div *ngIf=\"v.changes?.length\">\n <cqa-badge [label]=\"v.changeType\" size=\"extra-small\"\n [backgroundColor]=\"getChangeTypeBadgeFn(v.changeType).backgroundColor\"\n [textColor]=\"getChangeTypeBadgeFn(v.changeType).textColor\"\n [borderColor]=\"getChangeTypeBadgeFn(v.changeType).borderColor\"></cqa-badge>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isLoadingMore\" class=\"cqa-vh-list-loading-more\">\n Loading more...\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [] }]
26
+ args: [{ selector: 'cqa-version-history-list', template: "<div class=\"cqa-vh-list-container\" (scroll)=\"listScroll.emit($event)\">\n <div class=\"d-flex align-items-center justify-content-between fz-14 fw-semi-bold cqa-vh-list-header\">\n {{ versions.length }} Versions\n </div>\n\n <div *ngIf=\"isLoadingList\" class=\"cqa-vh-list-skeleton\">\n <div *ngFor=\"let i of [1,2,3,4]\" class=\"cqa-vh-list-skeleton-row\">\n <div class=\"animated-background rounded-circle cqa-vh-list-skeleton-dot\"></div>\n <div style=\"flex: 1;\">\n <div class=\"animated-background\" style=\"height: 14px; width: 50%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 80%; border-radius: 4px; margin-bottom: 10px;\"></div>\n <div class=\"animated-background\" style=\"height: 12px; width: 45%; border-radius: 4px;\"></div>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"!isLoadingList\">\n <div *ngIf=\"!versions.length\" class=\"cqa-vh-list-empty\">\n <cqa-empty-state [title]=\"emptyStateConfig?.title\" [description]=\"emptyStateConfig?.description\"\n [imageUrl]=\"emptyStateConfig?.imageUrl\"></cqa-empty-state>\n </div>\n <div class=\"cqa-vh-list-body\">\n <div\n *ngFor=\"let v of versions\"\n (click)=\"versionSelected.emit(v.id)\"\n class=\"cqa-vh-list-item\"\n [class.cqa-vh-list-item--selected]=\"v.id === selectedVersionId\">\n <div class=\"d-flex align-items-start\" style=\"gap: 12px;\">\n <div style=\"padding-top: 3px; flex-shrink: 0;\">\n <span class=\"cqa-vh-list-item-radio\"\n [class.cqa-vh-list-item-radio--selected]=\"v.id === selectedVersionId\">\n <span *ngIf=\"v.id === selectedVersionId\" class=\"cqa-vh-list-item-radio-dot\"></span>\n </span>\n </div>\n <div style=\"flex: 1; min-width: 0;\">\n <div class=\"d-flex align-items-center justify-content-between\" style=\"margin-bottom: 4px;\">\n <div class=\"d-flex align-items-center\" style=\"gap: 6px;\">\n <span class=\"cqa-vh-list-item-version\"\n [class.cqa-vh-list-item-version--selected]=\"v.id === selectedVersionId\">\n v{{ v.versionNumber }}\n </span>\n <cqa-badge *ngIf=\"v.id === currentVersionId\" label=\"Current\" size=\"extra-small\" variant=\"info\"\n backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n </div>\n <span class=\"cqa-vh-list-item-time\">{{ getRelativeTimeFn(v.createdDate) }}</span>\n </div>\n\n <div *ngIf=\"v.changeSummary\" class=\"cqa-vh-list-item-summary\">\n <ng-container *ngIf=\"getChangeSummaryBadgeFn(v) as badge\">\n <cqa-badge\n [label]=\"badge.label\"\n size=\"extra-small\"\n [backgroundColor]=\"badge.backgroundColor\"\n [textColor]=\"badge.textColor\"\n [borderColor]=\"badge.borderColor\">\n </cqa-badge>\n </ng-container>\n </div>\n\n <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-top: 4px;\">\n <span class=\"cqa-vh-list-item-avatar\">{{ getAuthorInitialsFn(v) }}</span>\n <span class=\"cqa-vh-list-item-author\">{{ getAuthorLabelFn(v) }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isLoadingMore\" class=\"cqa-vh-list-loading-more\">\n Loading more...\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [] }]
26
27
  }], propDecorators: { versions: [{
27
28
  type: Input
28
29
  }], selectedVersionId: [{
@@ -43,9 +44,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
43
44
  type: Input
44
45
  }], getChangeTypeBadgeFn: [{
45
46
  type: Input
47
+ }], getChangeSummaryBadgeFn: [{
48
+ type: Input
46
49
  }], versionSelected: [{
47
50
  type: Output
48
51
  }], listScroll: [{
49
52
  type: Output
50
53
  }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvdmVyc2lvbi1oaXN0b3J5LWxpc3QvdmVyc2lvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvdmVyc2lvbi1oaXN0b3J5LWxpc3QvdmVyc2lvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFPdkUsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQU1XLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN4QyxxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3RCLHNCQUFpQixHQUFnQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUQsd0JBQW1CLEdBQTZCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxxQkFBZ0IsR0FBNkIsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RELHlCQUFvQixHQUMzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTdFLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztLQUNsRDs7d0hBaEJZLDJCQUEyQjs0R0FBM0IsMkJBQTJCLHlnQkNQeEMsc3VIQXlFQTsyRkRsRWEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLDBCQUEwQjs4QkFLM0IsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS12ZXJzaW9uLWhpc3RvcnktbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi92ZXJzaW9uLWhpc3RvcnktbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgVmVyc2lvbkhpc3RvcnlMaXN0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgdmVyc2lvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkVmVyc2lvbklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY3VycmVudFZlcnNpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgZ2V0UmVsYXRpdmVUaW1lRm46IChlcG9jaE1zOiBudW1iZXIpID0+IHN0cmluZyA9ICgpID0+ICcnO1xuICBASW5wdXQoKSBnZXRBdXRob3JJbml0aWFsc0ZuOiAodmVyc2lvbjogYW55KSA9PiBzdHJpbmcgPSAoKSA9PiAnJztcbiAgQElucHV0KCkgZ2V0QXV0aG9yTGFiZWxGbjogKHZlcnNpb246IGFueSkgPT4gc3RyaW5nID0gKCkgPT4gJyc7XG4gIEBJbnB1dCgpIGdldENoYW5nZVR5cGVCYWRnZUZuOiAoY2hhbmdlVHlwZTogc3RyaW5nKSA9PiB7IGJhY2tncm91bmRDb2xvcjogc3RyaW5nOyB0ZXh0Q29sb3I6IHN0cmluZzsgYm9yZGVyQ29sb3I6IHN0cmluZyB9ID1cbiAgICAoKSA9PiAoeyBiYWNrZ3JvdW5kQ29sb3I6ICcjRjJGNEY3JywgdGV4dENvbG9yOiAnIzM0NDA1NCcsIGJvcmRlckNvbG9yOiAnI0U0RTdFQycgfSk7XG5cbiAgQE91dHB1dCgpIHZlcnNpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgbGlzdFNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXZoLWxpc3QtY29udGFpbmVyXCIgKHNjcm9sbCk9XCJsaXN0U2Nyb2xsLmVtaXQoJGV2ZW50KVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmei0xNCBmdy1zZW1pLWJvbGQgY3FhLXZoLWxpc3QtaGVhZGVyXCI+XG4gICAge3sgdmVyc2lvbnMubGVuZ3RoIH19IFZlcnNpb25zXG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdMaXN0XCIgY2xhc3M9XCJjcWEtdmgtbGlzdC1za2VsZXRvblwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgWzEsMiwzLDRdXCIgY2xhc3M9XCJjcWEtdmgtbGlzdC1za2VsZXRvbi1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlZC1iYWNrZ3JvdW5kIHJvdW5kZWQtY2lyY2xlIGNxYS12aC1saXN0LXNrZWxldG9uLWRvdFwiPjwvZGl2PlxuICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlZC1iYWNrZ3JvdW5kXCIgc3R5bGU9XCJoZWlnaHQ6IDE0cHg7IHdpZHRoOiA1MCU7IGJvcmRlci1yYWRpdXM6IDRweDsgbWFyZ2luLWJvdHRvbTogMTBweDtcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGVkLWJhY2tncm91bmRcIiBzdHlsZT1cImhlaWdodDogMTJweDsgd2lkdGg6IDgwJTsgYm9yZGVyLXJhZGl1czogNHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4O1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYW5pbWF0ZWQtYmFja2dyb3VuZFwiIHN0eWxlPVwiaGVpZ2h0OiAxMnB4OyB3aWR0aDogNDUlOyBib3JkZXItcmFkaXVzOiA0cHg7XCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdMaXN0XCI+XG4gICAgPGRpdiAqbmdJZj1cIiF2ZXJzaW9ucy5sZW5ndGhcIiBjbGFzcz1cImNxYS12aC1saXN0LWVtcHR5XCI+XG4gICAgICA8Y3FhLWVtcHR5LXN0YXRlIFt0aXRsZV09XCJlbXB0eVN0YXRlQ29uZmlnPy50aXRsZVwiIFtkZXNjcmlwdGlvbl09XCJlbXB0eVN0YXRlQ29uZmlnPy5kZXNjcmlwdGlvblwiXG4gICAgICAgIFtpbWFnZVVybF09XCJlbXB0eVN0YXRlQ29uZmlnPy5pbWFnZVVybFwiPjwvY3FhLWVtcHR5LXN0YXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtdmgtbGlzdC1ib2R5XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCB2IG9mIHZlcnNpb25zXCJcbiAgICAgICAgKGNsaWNrKT1cInZlcnNpb25TZWxlY3RlZC5lbWl0KHYuaWQpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdmgtbGlzdC1pdGVtXCJcbiAgICAgICAgW2NsYXNzLmNxYS12aC1saXN0LWl0ZW0tLXNlbGVjdGVkXT1cInYuaWQgPT09IHNlbGVjdGVkVmVyc2lvbklkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnRcIiBzdHlsZT1cImdhcDogMTJweDtcIj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDNweDsgZmxleC1zaHJpbms6IDA7XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1saXN0LWl0ZW0tcmFkaW9cIlxuICAgICAgICAgICAgICBbY2xhc3MuY3FhLXZoLWxpc3QtaXRlbS1yYWRpby0tc2VsZWN0ZWRdPVwidi5pZCA9PT0gc2VsZWN0ZWRWZXJzaW9uSWRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2LmlkID09PSBzZWxlY3RlZFZlcnNpb25JZFwiIGNsYXNzPVwiY3FhLXZoLWxpc3QtaXRlbS1yYWRpby1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7IG1pbi13aWR0aDogMDtcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiA0cHg7XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJnYXA6IDZweDtcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1saXN0LWl0ZW0tdmVyc2lvblwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuY3FhLXZoLWxpc3QtaXRlbS12ZXJzaW9uLS1zZWxlY3RlZF09XCJ2LmlkID09PSBzZWxlY3RlZFZlcnNpb25JZFwiPlxuICAgICAgICAgICAgICAgICAgdnt7IHYudmVyc2lvbk51bWJlciB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8Y3FhLWJhZGdlICpuZ0lmPVwidi5pZCA9PT0gY3VycmVudFZlcnNpb25JZFwiIGxhYmVsPVwiQ3VycmVudFwiIHNpemU9XCJleHRyYS1zbWFsbFwiIHZhcmlhbnQ9XCJpbmZvXCJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNFRkY0RkZcIiB0ZXh0Q29sb3I9XCIjM2Y0M2VlXCIgYm9yZGVyQ29sb3I9XCIjQzdEN0ZFXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1saXN0LWl0ZW0tdGltZVwiPnt7IGdldFJlbGF0aXZlVGltZUZuKHYuY3JlYXRlZERhdGUpIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2LmNoYW5nZVN1bW1hcnlcIiBjbGFzcz1cImNxYS12aC1saXN0LWl0ZW0tc3VtbWFyeVwiPlxuICAgICAgICAgICAgICB7eyB2LmNoYW5nZVN1bW1hcnkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiZ2FwOiA4cHg7XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtbGlzdC1pdGVtLWF2YXRhclwiPnt7IGdldEF1dGhvckluaXRpYWxzRm4odikgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtbGlzdC1pdGVtLWF1dGhvclwiPnt7IGdldEF1dGhvckxhYmVsRm4odikgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidi5jaGFuZ2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWJhZGdlIFtsYWJlbF09XCJ2LmNoYW5nZVR5cGVcIiBzaXplPVwiZXh0cmEtc21hbGxcIlxuICAgICAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCJnZXRDaGFuZ2VUeXBlQmFkZ2VGbih2LmNoYW5nZVR5cGUpLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cImdldENoYW5nZVR5cGVCYWRnZUZuKHYuY2hhbmdlVHlwZSkudGV4dENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIFtib3JkZXJDb2xvcl09XCJnZXRDaGFuZ2VUeXBlQmFkZ2VGbih2LmNoYW5nZVR5cGUpLmJvcmRlckNvbG9yXCI+PC9jcWEtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdNb3JlXCIgY2xhc3M9XCJjcWEtdmgtbGlzdC1sb2FkaW5nLW1vcmVcIj5cbiAgICAgICAgTG9hZGluZyBtb3JlLi4uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvdmVyc2lvbi1oaXN0b3J5LWxpc3QvdmVyc2lvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvdmVyc2lvbi1oaXN0b3J5LWxpc3QvdmVyc2lvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFPdkUsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQU1XLGFBQVEsR0FBVSxFQUFFLENBQUM7UUFDckIsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUN4QyxxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3RCLHNCQUFpQixHQUFnQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUQsd0JBQW1CLEdBQTZCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxxQkFBZ0IsR0FBNkIsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RELHlCQUFvQixHQUMzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLDRCQUF1QixHQUM5QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsYUFBYSxJQUFJLEVBQUUsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFN0csb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0tBQ2xEOzt3SEFsQlksMkJBQTJCOzRHQUEzQiwyQkFBMkIsNmpCQ1B4QywybUhBeUVBOzJGRGxFYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UsMEJBQTBCOzhCQUszQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS12ZXJzaW9uLWhpc3RvcnktbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi92ZXJzaW9uLWhpc3RvcnktbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgVmVyc2lvbkhpc3RvcnlMaXN0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgdmVyc2lvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkVmVyc2lvbklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgY3VycmVudFZlcnNpb25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nTW9yZSA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgZ2V0UmVsYXRpdmVUaW1lRm46IChlcG9jaE1zOiBudW1iZXIpID0+IHN0cmluZyA9ICgpID0+ICcnO1xuICBASW5wdXQoKSBnZXRBdXRob3JJbml0aWFsc0ZuOiAodmVyc2lvbjogYW55KSA9PiBzdHJpbmcgPSAoKSA9PiAnJztcbiAgQElucHV0KCkgZ2V0QXV0aG9yTGFiZWxGbjogKHZlcnNpb246IGFueSkgPT4gc3RyaW5nID0gKCkgPT4gJyc7XG4gIEBJbnB1dCgpIGdldENoYW5nZVR5cGVCYWRnZUZuOiAoY2hhbmdlVHlwZTogc3RyaW5nKSA9PiB7IGJhY2tncm91bmRDb2xvcjogc3RyaW5nOyB0ZXh0Q29sb3I6IHN0cmluZzsgYm9yZGVyQ29sb3I6IHN0cmluZyB9ID1cbiAgICAoKSA9PiAoeyBiYWNrZ3JvdW5kQ29sb3I6ICcjRjJGNEY3JywgdGV4dENvbG9yOiAnIzM0NDA1NCcsIGJvcmRlckNvbG9yOiAnI0U0RTdFQycgfSk7XG4gIEBJbnB1dCgpIGdldENoYW5nZVN1bW1hcnlCYWRnZUZuOiAodmVyc2lvbjogYW55KSA9PiB7IGxhYmVsOiBzdHJpbmc7IGJhY2tncm91bmRDb2xvcjogc3RyaW5nOyB0ZXh0Q29sb3I6IHN0cmluZzsgYm9yZGVyQ29sb3I6IHN0cmluZyB9ID1cbiAgICAodikgPT4gKHsgbGFiZWw6IHY/LmNoYW5nZVN1bW1hcnkgfHwgJycsIGJhY2tncm91bmRDb2xvcjogJyNGMkY0RjcnLCB0ZXh0Q29sb3I6ICcjMzQ0MDU0JywgYm9yZGVyQ29sb3I6ICcjRTRFN0VDJyB9KTtcblxuICBAT3V0cHV0KCkgdmVyc2lvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBsaXN0U2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdmgtbGlzdC1jb250YWluZXJcIiAoc2Nyb2xsKT1cImxpc3RTY3JvbGwuZW1pdCgkZXZlbnQpXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZ6LTE0IGZ3LXNlbWktYm9sZCBjcWEtdmgtbGlzdC1oZWFkZXJcIj5cbiAgICB7eyB2ZXJzaW9ucy5sZW5ndGggfX0gVmVyc2lvbnNcbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0xpc3RcIiBjbGFzcz1cImNxYS12aC1saXN0LXNrZWxldG9uXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBbMSwyLDMsNF1cIiBjbGFzcz1cImNxYS12aC1saXN0LXNrZWxldG9uLXJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGVkLWJhY2tncm91bmQgcm91bmRlZC1jaXJjbGUgY3FhLXZoLWxpc3Qtc2tlbGV0b24tZG90XCI+PC9kaXY+XG4gICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGVkLWJhY2tncm91bmRcIiBzdHlsZT1cImhlaWdodDogMTRweDsgd2lkdGg6IDUwJTsgYm9yZGVyLXJhZGl1czogNHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4O1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYW5pbWF0ZWQtYmFja2dyb3VuZFwiIHN0eWxlPVwiaGVpZ2h0OiAxMnB4OyB3aWR0aDogODAlOyBib3JkZXItcmFkaXVzOiA0cHg7IG1hcmdpbi1ib3R0b206IDEwcHg7XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlZC1iYWNrZ3JvdW5kXCIgc3R5bGU9XCJoZWlnaHQ6IDEycHg7IHdpZHRoOiA0NSU7IGJvcmRlci1yYWRpdXM6IDRweDtcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ0xpc3RcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXZlcnNpb25zLmxlbmd0aFwiIGNsYXNzPVwiY3FhLXZoLWxpc3QtZW1wdHlcIj5cbiAgICAgIDxjcWEtZW1wdHktc3RhdGUgW3RpdGxlXT1cImVtcHR5U3RhdGVDb25maWc/LnRpdGxlXCIgW2Rlc2NyaXB0aW9uXT1cImVtcHR5U3RhdGVDb25maWc/LmRlc2NyaXB0aW9uXCJcbiAgICAgICAgW2ltYWdlVXJsXT1cImVtcHR5U3RhdGVDb25maWc/LmltYWdlVXJsXCI+PC9jcWEtZW1wdHktc3RhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS12aC1saXN0LWJvZHlcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHYgb2YgdmVyc2lvbnNcIlxuICAgICAgICAoY2xpY2spPVwidmVyc2lvblNlbGVjdGVkLmVtaXQodi5pZClcIlxuICAgICAgICBjbGFzcz1cImNxYS12aC1saXN0LWl0ZW1cIlxuICAgICAgICBbY2xhc3MuY3FhLXZoLWxpc3QtaXRlbS0tc2VsZWN0ZWRdPVwidi5pZCA9PT0gc2VsZWN0ZWRWZXJzaW9uSWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydFwiIHN0eWxlPVwiZ2FwOiAxMnB4O1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLXRvcDogM3B4OyBmbGV4LXNocmluazogMDtcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLWxpc3QtaXRlbS1yYWRpb1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5jcWEtdmgtbGlzdC1pdGVtLXJhZGlvLS1zZWxlY3RlZF09XCJ2LmlkID09PSBzZWxlY3RlZFZlcnNpb25JZFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInYuaWQgPT09IHNlbGVjdGVkVmVyc2lvbklkXCIgY2xhc3M9XCJjcWEtdmgtbGlzdC1pdGVtLXJhZGlvLWRvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTsgbWluLXdpZHRoOiAwO1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDRweDtcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogNnB4O1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLWxpc3QtaXRlbS12ZXJzaW9uXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jcWEtdmgtbGlzdC1pdGVtLXZlcnNpb24tLXNlbGVjdGVkXT1cInYuaWQgPT09IHNlbGVjdGVkVmVyc2lvbklkXCI+XG4gICAgICAgICAgICAgICAgICB2e3sgdi52ZXJzaW9uTnVtYmVyIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxjcWEtYmFkZ2UgKm5nSWY9XCJ2LmlkID09PSBjdXJyZW50VmVyc2lvbklkXCIgbGFiZWw9XCJDdXJyZW50XCIgc2l6ZT1cImV4dHJhLXNtYWxsXCIgdmFyaWFudD1cImluZm9cIlxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiI0VGRjRGRlwiIHRleHRDb2xvcj1cIiMzZjQzZWVcIiBib3JkZXJDb2xvcj1cIiNDN0Q3RkVcIj48L2NxYS1iYWRnZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLWxpc3QtaXRlbS10aW1lXCI+e3sgZ2V0UmVsYXRpdmVUaW1lRm4odi5jcmVhdGVkRGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInYuY2hhbmdlU3VtbWFyeVwiIGNsYXNzPVwiY3FhLXZoLWxpc3QtaXRlbS1zdW1tYXJ5XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDaGFuZ2VTdW1tYXJ5QmFkZ2VGbih2KSBhcyBiYWRnZVwiPlxuICAgICAgICAgICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJiYWRnZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwiZXh0cmEtc21hbGxcIlxuICAgICAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCJiYWRnZS5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCJiYWRnZS50ZXh0Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgW2JvcmRlckNvbG9yXT1cImJhZGdlLmJvcmRlckNvbG9yXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJnYXA6IDhweDsgbWFyZ2luLXRvcDogNHB4O1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1saXN0LWl0ZW0tYXZhdGFyXCI+e3sgZ2V0QXV0aG9ySW5pdGlhbHNGbih2KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtbGlzdC1pdGVtLWF1dGhvclwiPnt7IGdldEF1dGhvckxhYmVsRm4odikgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVcIiBjbGFzcz1cImNxYS12aC1saXN0LWxvYWRpbmctbW9yZVwiPlxuICAgICAgICBMb2FkaW5nIG1vcmUuLi5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
@@ -8,6 +8,12 @@ export class VersionHistoryRestoreConfirmComponent {
8
8
  this.authorName = '';
9
9
  this.getChangeHeadlineFn = null;
10
10
  }
11
+ get settingsChanges() {
12
+ return (this.restoringToVersion?.changes || []).filter((c) => c.category === 'settings');
13
+ }
14
+ get stepChanges() {
15
+ return (this.restoringToVersion?.changes || []).filter((c) => c.category !== 'settings');
16
+ }
11
17
  getRestoreToLabel() {
12
18
  if (!this.restoringToVersion) {
13
19
  return '';
@@ -24,10 +30,10 @@ export class VersionHistoryRestoreConfirmComponent {
24
30
  }
25
31
  }
26
32
  VersionHistoryRestoreConfirmComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryRestoreConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27
- VersionHistoryRestoreConfirmComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryRestoreConfirmComponent, selector: "cqa-version-history-restore-confirm", inputs: { restoringToVersion: "restoringToVersion", currentVersionNumber: "currentVersionNumber", newVersionNumber: "newVersionNumber", authorName: "authorName", getChangeHeadlineFn: "getChangeHeadlineFn" }, ngImport: i0, template: "<div class=\"cqa-vh-restore-confirm\">\n\n <!-- Info grid -->\n <div class=\"cqa-vh-restore-info-grid\">\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">New version created</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Current version</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} \u2014 preserved in history</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Author</span>\n <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n </div>\n </div>\n\n <!-- Changes that will be reverted -->\n <div *ngIf=\"restoringToVersion?.changes?.length\">\n <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of restoringToVersion.changes; let i = index\"\n class=\"cqa-vh-restore-change-item\">\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Preservation note -->\n <div class=\"cqa-vh-restore-note\">\n <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n <span class=\"cqa-vh-restore-note-text\">\n All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n </span>\n </div>\n\n</div>\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
33
+ VersionHistoryRestoreConfirmComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: VersionHistoryRestoreConfirmComponent, selector: "cqa-version-history-restore-confirm", inputs: { restoringToVersion: "restoringToVersion", currentVersionNumber: "currentVersionNumber", newVersionNumber: "newVersionNumber", authorName: "authorName", getChangeHeadlineFn: "getChangeHeadlineFn" }, ngImport: i0, template: "<div class=\"cqa-vh-restore-confirm\">\n\n <!-- Info grid -->\n <div class=\"cqa-vh-restore-info-grid\">\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">New version created</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Current version</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} \u2014 preserved in history</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Author</span>\n <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n </div>\n </div>\n\n <!-- Changes that will be reverted -->\n <div *ngIf=\"restoringToVersion?.changes?.length\">\n <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n\n <!-- Settings changes -->\n <ng-container *ngIf=\"settingsChanges.length\">\n <div class=\"cqa-vh-restore-changes-subheader\">\n <span class=\"material-symbols-outlined cqa-vh-restore-subheader-icon\">settings</span>\n Test Case Settings\n </div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of settingsChanges; let i = index\" class=\"cqa-vh-restore-change-item\">\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n </div>\n </div>\n </ng-container>\n\n <!-- Step changes -->\n <ng-container *ngIf=\"stepChanges.length\">\n <div class=\"cqa-vh-restore-changes-subheader\" [style.marginTop]=\"settingsChanges.length ? '12px' : '0'\">\n <span class=\"material-symbols-outlined cqa-vh-restore-subheader-icon\">list_alt</span>\n Step Changes\n </div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of stepChanges; let i = index\" class=\"cqa-vh-restore-change-item\">\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Preservation note -->\n <div class=\"cqa-vh-restore-note\">\n <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n <span class=\"cqa-vh-restore-note-text\">\n All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n </span>\n </div>\n\n</div>\n", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
28
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: VersionHistoryRestoreConfirmComponent, decorators: [{
29
35
  type: Component,
30
- args: [{ selector: 'cqa-version-history-restore-confirm', template: "<div class=\"cqa-vh-restore-confirm\">\n\n <!-- Info grid -->\n <div class=\"cqa-vh-restore-info-grid\">\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">New version created</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Current version</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} \u2014 preserved in history</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Author</span>\n <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n </div>\n </div>\n\n <!-- Changes that will be reverted -->\n <div *ngIf=\"restoringToVersion?.changes?.length\">\n <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of restoringToVersion.changes; let i = index\"\n class=\"cqa-vh-restore-change-item\">\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Preservation note -->\n <div class=\"cqa-vh-restore-note\">\n <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n <span class=\"cqa-vh-restore-note-text\">\n All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n </span>\n </div>\n\n</div>\n", styles: [] }]
36
+ args: [{ selector: 'cqa-version-history-restore-confirm', template: "<div class=\"cqa-vh-restore-confirm\">\n\n <!-- Info grid -->\n <div class=\"cqa-vh-restore-info-grid\">\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">New version created</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Current version</span>\n <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} \u2014 preserved in history</span>\n </div>\n <div class=\"cqa-vh-restore-info-row\">\n <span class=\"cqa-vh-restore-info-label\">Author</span>\n <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n </div>\n </div>\n\n <!-- Changes that will be reverted -->\n <div *ngIf=\"restoringToVersion?.changes?.length\">\n <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n\n <!-- Settings changes -->\n <ng-container *ngIf=\"settingsChanges.length\">\n <div class=\"cqa-vh-restore-changes-subheader\">\n <span class=\"material-symbols-outlined cqa-vh-restore-subheader-icon\">settings</span>\n Test Case Settings\n </div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of settingsChanges; let i = index\" class=\"cqa-vh-restore-change-item\">\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n </div>\n </div>\n </ng-container>\n\n <!-- Step changes -->\n <ng-container *ngIf=\"stepChanges.length\">\n <div class=\"cqa-vh-restore-changes-subheader\" [style.marginTop]=\"settingsChanges.length ? '12px' : '0'\">\n <span class=\"material-symbols-outlined cqa-vh-restore-subheader-icon\">list_alt</span>\n Step Changes\n </div>\n <div class=\"cqa-vh-restore-changes-list\">\n <div *ngFor=\"let change of stepChanges; let i = index\" class=\"cqa-vh-restore-change-item\">\n <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n </div>\n </div>\n </ng-container>\n </div>\n\n <!-- Preservation note -->\n <div class=\"cqa-vh-restore-note\">\n <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n <span class=\"cqa-vh-restore-note-text\">\n All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n </span>\n </div>\n\n</div>\n", styles: [] }]
31
37
  }], propDecorators: { restoringToVersion: [{
32
38
  type: Input
33
39
  }], currentVersionNumber: [{
@@ -39,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
39
45
  }], getChangeHeadlineFn: [{
40
46
  type: Input
41
47
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1oaXN0b3J5LXJlc3RvcmUtY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3ZlcnNpb24taGlzdG9yeS92ZXJzaW9uLWhpc3RvcnktcmVzdG9yZS1jb25maXJtL3ZlcnNpb24taGlzdG9yeS1yZXN0b3JlLWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvdmVyc2lvbi1oaXN0b3J5LXJlc3RvcmUtY29uZmlybS92ZXJzaW9uLWhpc3RvcnktcmVzdG9yZS1jb25maXJtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLHFDQUFxQztJQUxsRDtRQU9XLHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQUNqQyxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFDN0IsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4Qix3QkFBbUIsR0FBcUMsSUFBSSxDQUFDO0tBZ0J2RTtJQWRDLGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztTQUFFO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7WUFDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBVTtRQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSTtZQUM3RSxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDOztrSUFuQlUscUNBQXFDO3NIQUFyQyxxQ0FBcUMsMlJDUGxELGk3REEyQ0E7MkZEcENhLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDRSxxQ0FBcUM7OEJBS3RDLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdmVyc2lvbi1oaXN0b3J5LXJlc3RvcmUtY29uZmlybScsXG4gIHRlbXBsYXRlVXJsOiAnLi92ZXJzaW9uLWhpc3RvcnktcmVzdG9yZS1jb25maXJtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBWZXJzaW9uSGlzdG9yeVJlc3RvcmVDb25maXJtQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcmVzdG9yaW5nVG9WZXJzaW9uOiBhbnk7XG4gIEBJbnB1dCgpIGN1cnJlbnRWZXJzaW9uTnVtYmVyOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBuZXdWZXJzaW9uTnVtYmVyOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBhdXRob3JOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZ2V0Q2hhbmdlSGVhZGxpbmVGbjogKChjaGFuZ2U6IGFueSkgPT4gc3RyaW5nKSB8IG51bGwgPSBudWxsO1xuXG4gIGdldFJlc3RvcmVUb0xhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnJlc3RvcmluZ1RvVmVyc2lvbikgeyByZXR1cm4gJyc7IH1cbiAgICBjb25zdCBkYXRlID0gdGhpcy5yZXN0b3JpbmdUb1ZlcnNpb24uZGlzcGxheURhdGVcbiAgICAgID8gdGhpcy5mb3JtYXREYXRlKHRoaXMucmVzdG9yaW5nVG9WZXJzaW9uLmRpc3BsYXlEYXRlKVxuICAgICAgOiAnJztcbiAgICByZXR1cm4gJ3YnICsgdGhpcy5yZXN0b3JpbmdUb1ZlcnNpb24udmVyc2lvbk51bWJlciArIChkYXRlID8gJyDigJQgJyArIGRhdGUgOiAnJyk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGQgPSBkYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGUgOiBuZXcgRGF0ZShkYXRlKTtcbiAgICByZXR1cm4gZC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycgfSkgKyAnLCAnICtcbiAgICAgIGQudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY29uZmlybVwiPlxuXG4gIDwhLS0gSW5mbyBncmlkIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby1ncmlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tcm93XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tbGFiZWxcIj5SZXN0b3JpbmcgdG88L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tdmFsdWVcIj57eyBnZXRSZXN0b3JlVG9MYWJlbCgpIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1pbmZvLXJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1pbmZvLWxhYmVsXCI+TmV3IHZlcnNpb24gY3JlYXRlZDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby12YWx1ZVwiPnZ7eyBuZXdWZXJzaW9uTnVtYmVyIH19IChhdXRvLWluY3JlbWVudGVkKTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby1sYWJlbFwiPkN1cnJlbnQgdmVyc2lvbjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby12YWx1ZVwiPnZ7eyBjdXJyZW50VmVyc2lvbk51bWJlciB9fSDigJQgcHJlc2VydmVkIGluIGhpc3Rvcnk8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tcm93XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tbGFiZWxcIj5BdXRob3I8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tdmFsdWVcIj57eyBhdXRob3JOYW1lIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENoYW5nZXMgdGhhdCB3aWxsIGJlIHJldmVydGVkIC0tPlxuICA8ZGl2ICpuZ0lmPVwicmVzdG9yaW5nVG9WZXJzaW9uPy5jaGFuZ2VzPy5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY2hhbmdlcy10aXRsZVwiPkNoYW5nZXMgdGhhdCB3aWxsIGJlIHJldmVydGVkPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWNoYW5nZXMtbGlzdFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2hhbmdlIG9mIHJlc3RvcmluZ1RvVmVyc2lvbi5jaGFuZ2VzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1jaGFuZ2UtaXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY2hhbmdlLWluZGV4XCI+e3sgaSArIDEgfX08L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1jaGFuZ2Utc2VudGVuY2VcIj57eyBnZXRDaGFuZ2VIZWFkbGluZUZuID8gZ2V0Q2hhbmdlSGVhZGxpbmVGbihjaGFuZ2UpIDogY2hhbmdlPy5zZW50ZW5jZSB8fCAnJyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFByZXNlcnZhdGlvbiBub3RlIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtbm90ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjcWEtdmgtcmVzdG9yZS1ub3RlLWljb25cIj5pbmZvPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtbm90ZS10ZXh0XCI+XG4gICAgICBBbGwgdmVyc2lvbiBoaXN0b3J5IHdpbGwgYmUgZnVsbHkgcHJlc2VydmVkLiBUaGlzIHJlc3RvcmUgYWN0aW9uIHdpbGwgaXRzZWxmIGFwcGVhciBhcyBhIG5ldyB2ZXJzaW9uIGVudHJ5IGluIHRoZSB0aW1lbGluZS5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1oaXN0b3J5LXJlc3RvcmUtY29uZmlybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3ZlcnNpb24taGlzdG9yeS92ZXJzaW9uLWhpc3RvcnktcmVzdG9yZS1jb25maXJtL3ZlcnNpb24taGlzdG9yeS1yZXN0b3JlLWNvbmZpcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi92ZXJzaW9uLWhpc3RvcnkvdmVyc2lvbi1oaXN0b3J5LXJlc3RvcmUtY29uZmlybS92ZXJzaW9uLWhpc3RvcnktcmVzdG9yZS1jb25maXJtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLHFDQUFxQztJQUxsRDtRQU9XLHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQUNqQyxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFDN0IsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4Qix3QkFBbUIsR0FBcUMsSUFBSSxDQUFDO0tBd0J2RTtJQXRCQyxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztTQUFFO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7WUFDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBVTtRQUNuQixNQUFNLENBQUMsR0FBRyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSTtZQUM3RSxDQUFDLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDOztrSUEzQlUscUNBQXFDO3NIQUFyQyxxQ0FBcUMsMlJDUGxELHM4RkFnRUE7MkZEekRhLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDRSxxQ0FBcUM7OEJBS3RDLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdmVyc2lvbi1oaXN0b3J5LXJlc3RvcmUtY29uZmlybScsXG4gIHRlbXBsYXRlVXJsOiAnLi92ZXJzaW9uLWhpc3RvcnktcmVzdG9yZS1jb25maXJtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBWZXJzaW9uSGlzdG9yeVJlc3RvcmVDb25maXJtQ29tcG9uZW50IHtcbiAgQElucHV0KCkgcmVzdG9yaW5nVG9WZXJzaW9uOiBhbnk7XG4gIEBJbnB1dCgpIGN1cnJlbnRWZXJzaW9uTnVtYmVyOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBuZXdWZXJzaW9uTnVtYmVyOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBhdXRob3JOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZ2V0Q2hhbmdlSGVhZGxpbmVGbjogKChjaGFuZ2U6IGFueSkgPT4gc3RyaW5nKSB8IG51bGwgPSBudWxsO1xuXG4gIGdldCBzZXR0aW5nc0NoYW5nZXMoKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5yZXN0b3JpbmdUb1ZlcnNpb24/LmNoYW5nZXMgfHwgW10pLmZpbHRlcigoYzogYW55KSA9PiBjLmNhdGVnb3J5ID09PSAnc2V0dGluZ3MnKTtcbiAgfVxuXG4gIGdldCBzdGVwQ2hhbmdlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuICh0aGlzLnJlc3RvcmluZ1RvVmVyc2lvbj8uY2hhbmdlcyB8fCBbXSkuZmlsdGVyKChjOiBhbnkpID0+IGMuY2F0ZWdvcnkgIT09ICdzZXR0aW5ncycpO1xuICB9XG5cbiAgZ2V0UmVzdG9yZVRvTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucmVzdG9yaW5nVG9WZXJzaW9uKSB7IHJldHVybiAnJzsgfVxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnJlc3RvcmluZ1RvVmVyc2lvbi5kaXNwbGF5RGF0ZVxuICAgICAgPyB0aGlzLmZvcm1hdERhdGUodGhpcy5yZXN0b3JpbmdUb1ZlcnNpb24uZGlzcGxheURhdGUpXG4gICAgICA6ICcnO1xuICAgIHJldHVybiAndicgKyB0aGlzLnJlc3RvcmluZ1RvVmVyc2lvbi52ZXJzaW9uTnVtYmVyICsgKGRhdGUgPyAnIOKAlCAnICsgZGF0ZSA6ICcnKTtcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgZCA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZSA6IG5ldyBEYXRlKGRhdGUpO1xuICAgIHJldHVybiBkLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJyB9KSArICcsICcgK1xuICAgICAgZC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywgeyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnIH0pO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1jb25maXJtXCI+XG5cbiAgPCEtLSBJbmZvIGdyaWQgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1pbmZvLWdyaWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby1sYWJlbFwiPlJlc3RvcmluZyB0bzwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby12YWx1ZVwiPnt7IGdldFJlc3RvcmVUb0xhYmVsKCkgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tcm93XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWluZm8tbGFiZWxcIj5OZXcgdmVyc2lvbiBjcmVhdGVkPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1pbmZvLXZhbHVlXCI+dnt7IG5ld1ZlcnNpb25OdW1iZXIgfX0gKGF1dG8taW5jcmVtZW50ZWQpPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1pbmZvLXJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1pbmZvLWxhYmVsXCI+Q3VycmVudCB2ZXJzaW9uPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1pbmZvLXZhbHVlXCI+dnt7IGN1cnJlbnRWZXJzaW9uTnVtYmVyIH19IOKAlCBwcmVzZXJ2ZWQgaW4gaGlzdG9yeTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby1sYWJlbFwiPkF1dGhvcjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtaW5mby12YWx1ZVwiPnt7IGF1dGhvck5hbWUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2hhbmdlcyB0aGF0IHdpbGwgYmUgcmV2ZXJ0ZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJyZXN0b3JpbmdUb1ZlcnNpb24/LmNoYW5nZXM/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1jaGFuZ2VzLXRpdGxlXCI+Q2hhbmdlcyB0aGF0IHdpbGwgYmUgcmV2ZXJ0ZWQ8L2Rpdj5cblxuICAgIDwhLS0gU2V0dGluZ3MgY2hhbmdlcyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2V0dGluZ3NDaGFuZ2VzLmxlbmd0aFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWNoYW5nZXMtc3ViaGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjcWEtdmgtcmVzdG9yZS1zdWJoZWFkZXItaWNvblwiPnNldHRpbmdzPC9zcGFuPlxuICAgICAgICBUZXN0IENhc2UgU2V0dGluZ3NcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWNoYW5nZXMtbGlzdFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGFuZ2Ugb2Ygc2V0dGluZ3NDaGFuZ2VzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1jaGFuZ2UtaXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdmgtcmVzdG9yZS1jaGFuZ2UtaW5kZXhcIj57eyBpICsgMSB9fTwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY2hhbmdlLXNlbnRlbmNlXCI+e3sgZ2V0Q2hhbmdlSGVhZGxpbmVGbiA/IGdldENoYW5nZUhlYWRsaW5lRm4oY2hhbmdlKSA6IGNoYW5nZT8uc2VudGVuY2UgfHwgJycgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFN0ZXAgY2hhbmdlcyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcENoYW5nZXMubGVuZ3RoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY2hhbmdlcy1zdWJoZWFkZXJcIiBbc3R5bGUubWFyZ2luVG9wXT1cInNldHRpbmdzQ2hhbmdlcy5sZW5ndGggPyAnMTJweCcgOiAnMCdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNxYS12aC1yZXN0b3JlLXN1YmhlYWRlci1pY29uXCI+bGlzdF9hbHQ8L3NwYW4+XG4gICAgICAgIFN0ZXAgQ2hhbmdlc1xuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY2hhbmdlcy1saXN0XCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNoYW5nZSBvZiBzdGVwQ2hhbmdlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY2hhbmdlLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtY2hhbmdlLWluZGV4XCI+e3sgaSArIDEgfX08L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS12aC1yZXN0b3JlLWNoYW5nZS1zZW50ZW5jZVwiPnt7IGdldENoYW5nZUhlYWRsaW5lRm4gPyBnZXRDaGFuZ2VIZWFkbGluZUZuKGNoYW5nZSkgOiBjaGFuZ2U/LnNlbnRlbmNlIHx8ICcnIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8IS0tIFByZXNlcnZhdGlvbiBub3RlIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtbm90ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjcWEtdmgtcmVzdG9yZS1ub3RlLWljb25cIj5pbmZvPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLXZoLXJlc3RvcmUtbm90ZS10ZXh0XCI+XG4gICAgICBBbGwgdmVyc2lvbiBoaXN0b3J5IHdpbGwgYmUgZnVsbHkgcHJlc2VydmVkLiBUaGlzIHJlc3RvcmUgYWN0aW9uIHdpbGwgaXRzZWxmIGFwcGVhciBhcyBhIG5ldyB2ZXJzaW9uIGVudHJ5IGluIHRoZSB0aW1lbGluZS5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==