@cqa-lib/cqa-ui 1.1.175 → 1.1.177
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.
- package/esm2020/lib/compare-runs/compare-runs.component.mjs +1 -1
- package/esm2020/lib/dynamic-select/dynamic-select-field.component.mjs +3 -3
- package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +70 -5
- package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +15 -3
- package/esm2020/lib/iterations-loop/iterations-loop.component.mjs +1 -1
- package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +29 -9
- package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +330 -0
- package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +205 -0
- package/esm2020/lib/table/dynamic-table/dynamic-table.component.mjs +35 -3
- package/esm2020/lib/templates/table-template.component.mjs +7 -4
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step-data.mjs +5 -0
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step-ref.mjs +32 -0
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.component.mjs +71 -0
- package/esm2020/lib/test-case-details/custom-edit-step/custom-edit-step.service.mjs +97 -0
- package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +59 -9
- package/esm2020/lib/ui-kit.module.mjs +18 -3
- package/esm2020/lib/utils/tw-overlay-container.mjs +6 -3
- package/esm2020/public-api.mjs +7 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +939 -34
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +926 -34
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/dynamic-select/dynamic-select-field.component.d.ts +1 -0
- package/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.d.ts +18 -3
- package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +7 -1
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +2 -1
- package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +61 -0
- package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +61 -0
- package/lib/table/dynamic-table/dynamic-table.component.d.ts +7 -1
- package/lib/templates/table-template.component.d.ts +6 -1
- package/lib/test-case-details/custom-edit-step/custom-edit-step-data.d.ts +8 -0
- package/lib/test-case-details/custom-edit-step/custom-edit-step-ref.d.ts +13 -0
- package/lib/test-case-details/custom-edit-step/custom-edit-step.component.d.ts +25 -0
- package/lib/test-case-details/custom-edit-step/custom-edit-step.service.d.ts +23 -0
- package/lib/test-case-details/normal-step/normal-step.component.d.ts +9 -0
- package/lib/ui-kit.module.d.ts +26 -23
- package/package.json +1 -1
- package/public-api.d.ts +6 -0
- package/styles.css +1 -1
package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs
CHANGED
|
@@ -4,11 +4,18 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "../../badge/badge.component";
|
|
5
5
|
import * as i2 from "../../templates/table-template.component";
|
|
6
6
|
import * as i3 from "@angular/common";
|
|
7
|
+
import * as i4 from "@angular/material/tooltip";
|
|
7
8
|
export class DbQueryExecutionItemComponent {
|
|
8
9
|
constructor(cdr) {
|
|
9
10
|
this.cdr = cdr;
|
|
10
11
|
this.isExpanded = false;
|
|
11
12
|
this.responseTableColumns = [];
|
|
13
|
+
// Tooltip states for collapsed view
|
|
14
|
+
this.showQueryCopiedCollapsed = false;
|
|
15
|
+
this.showResponseCopiedCollapsed = false;
|
|
16
|
+
// Tooltip states for expanded view
|
|
17
|
+
this.showQueryCopiedExpanded = false;
|
|
18
|
+
this.showResponseCopiedExpanded = false;
|
|
12
19
|
this.emptyStateConfig = {
|
|
13
20
|
title: 'No Data',
|
|
14
21
|
description: 'No data returned from this query.',
|
|
@@ -29,15 +36,62 @@ export class DbQueryExecutionItemComponent {
|
|
|
29
36
|
this.cdr.markForCheck();
|
|
30
37
|
this.cdr.detectChanges();
|
|
31
38
|
}
|
|
32
|
-
|
|
39
|
+
copyQueryCollapsed() {
|
|
33
40
|
if (this.queryResult?.query) {
|
|
34
41
|
navigator.clipboard.writeText(this.queryResult.query).then(() => {
|
|
42
|
+
this.showQueryCopiedCollapsed = true;
|
|
43
|
+
// Clear any existing timeout
|
|
44
|
+
if (this.queryCopiedCollapsedTimeout) {
|
|
45
|
+
clearTimeout(this.queryCopiedCollapsedTimeout);
|
|
46
|
+
}
|
|
47
|
+
// Hide tooltip after 2 seconds
|
|
48
|
+
this.queryCopiedCollapsedTimeout = setTimeout(() => {
|
|
49
|
+
this.showQueryCopiedCollapsed = false;
|
|
50
|
+
}, 2000);
|
|
35
51
|
});
|
|
36
52
|
}
|
|
37
53
|
}
|
|
38
|
-
|
|
54
|
+
copyQueryExpanded() {
|
|
55
|
+
if (this.queryResult?.query) {
|
|
56
|
+
navigator.clipboard.writeText(this.queryResult.query).then(() => {
|
|
57
|
+
this.showQueryCopiedExpanded = true;
|
|
58
|
+
// Clear any existing timeout
|
|
59
|
+
if (this.queryCopiedExpandedTimeout) {
|
|
60
|
+
clearTimeout(this.queryCopiedExpandedTimeout);
|
|
61
|
+
}
|
|
62
|
+
// Hide tooltip after 2 seconds
|
|
63
|
+
this.queryCopiedExpandedTimeout = setTimeout(() => {
|
|
64
|
+
this.showQueryCopiedExpanded = false;
|
|
65
|
+
}, 2000);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
copyResponseCollapsed() {
|
|
70
|
+
const response = JSON.stringify(this.queryResult.data, null, 2);
|
|
71
|
+
navigator.clipboard.writeText(response).then(() => {
|
|
72
|
+
this.showResponseCopiedCollapsed = true;
|
|
73
|
+
// Clear any existing timeout
|
|
74
|
+
if (this.responseCopiedCollapsedTimeout) {
|
|
75
|
+
clearTimeout(this.responseCopiedCollapsedTimeout);
|
|
76
|
+
}
|
|
77
|
+
// Hide tooltip after 2 seconds
|
|
78
|
+
this.responseCopiedCollapsedTimeout = setTimeout(() => {
|
|
79
|
+
this.showResponseCopiedCollapsed = false;
|
|
80
|
+
}, 2000);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
copyResponseExpanded() {
|
|
39
84
|
const response = JSON.stringify(this.queryResult.data, null, 2);
|
|
40
85
|
navigator.clipboard.writeText(response).then(() => {
|
|
86
|
+
this.showResponseCopiedExpanded = true;
|
|
87
|
+
// Clear any existing timeout
|
|
88
|
+
if (this.responseCopiedExpandedTimeout) {
|
|
89
|
+
clearTimeout(this.responseCopiedExpandedTimeout);
|
|
90
|
+
}
|
|
91
|
+
// Hide tooltip after 2 seconds
|
|
92
|
+
this.responseCopiedExpandedTimeout = setTimeout(() => {
|
|
93
|
+
this.showResponseCopiedExpanded = false;
|
|
94
|
+
}, 2000);
|
|
41
95
|
});
|
|
42
96
|
}
|
|
43
97
|
formatDuration(seconds) {
|
|
@@ -104,12 +158,21 @@ export class DbQueryExecutionItemComponent {
|
|
|
104
158
|
this.pageIndex = event.pageIndex;
|
|
105
159
|
this.pageSize = event.pageSize;
|
|
106
160
|
}
|
|
161
|
+
get cellJsonPathGetter() {
|
|
162
|
+
const baseName = this.variableName || this.queryKey || 'data';
|
|
163
|
+
const pageIdx = this.pageIndex;
|
|
164
|
+
const pageSz = this.pageSize;
|
|
165
|
+
return (rowIndex, colId) => {
|
|
166
|
+
const actualIndex = pageIdx * pageSz + rowIndex;
|
|
167
|
+
return `${baseName}[${actualIndex}].${colId}`;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
107
170
|
}
|
|
108
171
|
DbQueryExecutionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbQueryExecutionItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
109
|
-
DbQueryExecutionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: { queryNumber: "queryNumber", queryKey: "queryKey", queryResult: "queryResult", status: "status", variableName: "variableName" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158]\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E]\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQuery(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n </button>\n <button\n (click)=\"copyResponse(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n </button>\n \n <!-- Chevron Icon -->\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n class=\"cqa-transition-transform cqa-ml-2\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQuery()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponse()\"\n class=\"cqa-cursor-pointer cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\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"] }, { type: i2.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtons", "otherDropDownButtons", "otherSelectDropDownButtons", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
172
|
+
DbQueryExecutionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: { queryNumber: "queryNumber", queryKey: "queryKey", queryResult: "queryResult", status: "status", variableName: "variableName", onJsonPathCopiedHandler: "onJsonPathCopiedHandler" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-flex-wrap\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap cqa-gap-2 cqa-w-[calc(100%-15px)]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158] cqa-min-w-max\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E] cqa-min-w-max\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQueryCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <button\n (click)=\"copyResponseCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-min-w-max\">\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand to view the query and response.'\"\n matTooltipPosition=\"above\"\n class=\"cqa-transition-transform cqa-min-w-max\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQueryExpanded()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponseExpanded()\"\n class=\"cqa-cursor-pointer cqa-rounded cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\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"] }, { type: i2.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtons", "otherDropDownButtons", "otherSelectDropDownButtons", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading", "cellJsonPathGetter", "onJsonPathCopiedHandler"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
110
173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbQueryExecutionItemComponent, decorators: [{
|
|
111
174
|
type: Component,
|
|
112
|
-
args: [{ selector: 'cqa-db-query-execution-item', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158]\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E]\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQuery(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n </button>\n <button\n (click)=\"copyResponse(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n </button>\n \n <!-- Chevron Icon -->\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n class=\"cqa-transition-transform cqa-ml-2\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQuery()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponse()\"\n class=\"cqa-cursor-pointer cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
175
|
+
args: [{ selector: 'cqa-db-query-execution-item', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-flex-wrap\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap cqa-gap-2 cqa-w-[calc(100%-15px)]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158] cqa-min-w-max\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E] cqa-min-w-max\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQueryCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <button\n (click)=\"copyResponseCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-min-w-max\">\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand to view the query and response.'\"\n matTooltipPosition=\"above\"\n class=\"cqa-transition-transform cqa-min-w-max\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQueryExpanded()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponseExpanded()\"\n class=\"cqa-cursor-pointer cqa-rounded cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
113
176
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { queryNumber: [{
|
|
114
177
|
type: Input
|
|
115
178
|
}], queryKey: [{
|
|
@@ -120,5 +183,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
120
183
|
type: Input
|
|
121
184
|
}], variableName: [{
|
|
122
185
|
type: Input
|
|
186
|
+
}], onJsonPathCopiedHandler: [{
|
|
187
|
+
type: Input
|
|
123
188
|
}] } });
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2RiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtL2RiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9kYi1xdWVyeS1leGVjdXRpb24taXRlbS9kYi1xdWVyeS1leGVjdXRpb24taXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFJNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7O0FBUWhGLE1BQU0sT0FBTyw2QkFBNkI7SUFvQnhDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYjFDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQXlCLEVBQUUsQ0FBQztRQUVoRCxxQkFBZ0IsR0FBcUI7WUFDbkMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsV0FBVyxFQUFFLG1DQUFtQztZQUNoRCxRQUFRLEVBQUUsa0JBQWtCLENBQUMsU0FBUztZQUN0QyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFFRixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGFBQVEsR0FBVyxFQUFFLENBQUM7SUFFdUIsQ0FBQztJQUU5QyxRQUFRO1FBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHlC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akMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO3dHQUdyQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERiUXVlcnlSZXN1bHQgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgRGJRdWVyeUV4ZWN1dGlvbkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBxdWVyeU51bWJlciE6IG51bWJlcjtcbiAgQElucHV0KCkgcXVlcnlLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHF1ZXJ5UmVzdWx0ITogRGJRdWVyeVJlc3VsdDtcbiAgQElucHV0KCkgc3RhdHVzITogJ3Bhc3NlZCcgfCAnZmFpbGVkJztcbiAgQElucHV0KCkgdmFyaWFibGVOYW1lPzogc3RyaW5nO1xuXG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVzcG9uc2VUYWJsZUNvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIFxuICBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gRGF0YScsXG4gICAgZGVzY3JpcHRpb246ICdObyBkYXRhIHJldHVybmVkIGZyb20gdGhpcyBxdWVyeS4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFtdLFxuICB9O1xuXG4gIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwUmVzcG9uc2VUYWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuc2V0dXBSZXNwb25zZVRhYmxlQ29sdW1ucygpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjb3B5UXVlcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlSZXN1bHQ/LnF1ZXJ5KSB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnF1ZXJ5UmVzdWx0LnF1ZXJ5KS50aGVuKCgpID0+IHtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlSZXNwb25zZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMucXVlcnlSZXN1bHQuZGF0YSwgbnVsbCwgMik7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocmVzcG9uc2UpLnRoZW4oKCkgPT4ge1xuICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0RHVyYXRpb24oc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoc2Vjb25kcyA8IDEpIHtcbiAgICAgIHJldHVybiBgJHsoc2Vjb25kcyAqIDEwMDApLnRvRml4ZWQoMCl9bXNgO1xuICAgIH1cbiAgICBpZiAoc2Vjb25kcyA8IDYwICYmICFOdW1iZXIuaXNJbnRlZ2VyKHNlY29uZHMpKSB7XG4gICAgICByZXR1cm4gYCR7c2Vjb25kcy50b0ZpeGVkKDEpfXNgO1xuICAgIH1cbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2hvdXJzfWhgKTtcbiAgICB9XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIH1cbiAgICBpZiAoc2VjcyA+IDAgfHwgKGhvdXJzID09PSAwICYmIG1pbnV0ZXMgPT09IDApKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3NlY3N9c2ApO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHlSZXNwb25zZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVJlc3VsdD8uZGF0YT8ubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlc3BvbnNlVGFibGVDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnF1ZXJ5UmVzdWx0Py5kYXRhIHx8IFtdO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNwb25zZVRhYmxlQ29sdW1ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgdW5pcXVlIGtleXMgZnJvbSB0aGUgZGF0YSBvYmplY3RzXG4gICAgY29uc3QgZmlyc3RJdGVtID0gZGF0YVswXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0SXRlbSAhPT0gJ29iamVjdCcgfHwgZmlyc3RJdGVtID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlVGFibGVDb2x1bW5zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0SXRlbSk7XG4gICAgdGhpcy5yZXNwb25zZVRhYmxlQ29sdW1ucyA9IGtleXMubWFwKGtleSA9PiAoe1xuICAgICAgZmllbGRJZDoga2V5LFxuICAgICAgZmllbGROYW1lOiBrZXksXG4gICAgICBmaWVsZFZhbHVlOiBrZXksXG4gICAgICBpc1Nob3c6IHRydWUsXG4gICAgICB3ZWlnaHQ6IDEsXG4gICAgICByZW5kZXI6IChyb3c6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1trZXldID8/ICctJztcbiAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMEYxNzJCXVwiPlxuICAgICAgICAgICAgJHt0aGlzLmVzY2FwZUh0bWwoZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYDtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGVzY2FwZUh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1ib3JkZXIgIWNxYS1ib3JkZXItYi0yIGNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtbGcgY3FhLW92ZXJmbG93LWhpZGRlblwiIFtuZ0NsYXNzXT1cInsnY3FhLWJnLVsjRjhGQUZDXSBjcWEtYm9yZGVyLVsjRTJFOEYwXSc6IHN0YXR1cyA9PT0gJ3Bhc3NlZCcsICdjcWEtYmctWyNGRUYyRjJdIGNxYS1ib3JkZXItWyNGRkM5QzldJzogc3RhdHVzID09PSAnZmFpbGVkJ31cIj5cbiAgPCEtLSBIZWFkZXIgKENvbGxhcHNlZCBWaWV3KSAtLT5cbiAgPGRpdiBcbiAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtcHgtNCBjcWEtcHktMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgcm9sZT1cImJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC0xXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzMxNDE1OF1cIj5RdWVyeSB7eyBxdWVyeU51bWJlciB9fTwvc3Bhbj5cbiAgICAgIFxuICAgICAgPCEtLSBTdGF0dXMgQmFkZ2UgLS0+XG4gICAgICA8Y3FhLWJhZGdlIGNsYXNzPVwiY3FhLW1iLTAuNVwiXG4gICAgICAgICpuZ0lmPVwic3RhdHVzID09PSAncGFzc2VkJ1wiXG4gICAgICAgIGxhYmVsPVwiUGFzc2VkXCJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiI0RDRkNFN1wiXG4gICAgICAgIHRleHRDb2xvcj1cIiMyMkM1NUVcIlxuICAgICAgICBpbmxpbmVTdHlsZXM9XCJib3JkZXItcmFkaXVzOiA1MHB4O1wiXG4gICAgICAgIGljb249XCJjaGVja19jaXJjbGVcIlxuICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgPGNxYS1iYWRnZSBjbGFzcz1cImNxYS1tYi0wLjVcIlxuICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gJ2ZhaWxlZCdcIlxuICAgICAgICBsYWJlbD1cIkZhaWxlZFwiXG4gICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNGRUUyRTJcIlxuICAgICAgICB0ZXh0Q29sb3I9XCIjREMyNjI2XCJcbiAgICAgICAgaWNvbj1cImVycm9yXCJcbiAgICAgICAgaW5saW5lU3R5bGVzPVwiYm9yZGVyLXJhZGl1czogNTBweDtcIlxuICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgXG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRleHQtWyM2Mjc0OEVdXCIgKm5nSWY9XCJxdWVyeVJlc3VsdD8uZHVyYXRpb24gfHwgcXVlcnlSZXN1bHQ/LmRhdGE/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAge3sgZm9ybWF0RHVyYXRpb24ocXVlcnlSZXN1bHQ/LmR1cmF0aW9uKSB9fVxuICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXJ5UmVzdWx0Py5kYXRhPy5sZW5ndGggPiAwICYmIHF1ZXJ5UmVzdWx0Py5kdXJhdGlvblwiPiDigKIgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXJ5UmVzdWx0Py5kYXRhPy5sZW5ndGggPiAwXCI+e3sgcXVlcnlSZXN1bHQ/LmRhdGE/Lmxlbmd0aCB8fCAwIH19IHJvd3M8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjb3B5UXVlcnkoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzQ1NTU2Q10gY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzIgMTAuNjY2N0gzLjk5OTk5QzMuNjQ2MzcgMTAuNjY2NyAzLjMwNzIzIDEwLjUyNjMgMy4wNTcxOCAxMC4yNzYyQzIuODA3MTMgMTAuMDI2MiAyLjY2NjY2IDkuNjg3MDQgMi42NjY2NiA5LjMzMzQxVjQuMDAwMDhDMi42NjY2NiAzLjY0NjQ2IDIuODA3MTMgMy4zMDczMiAzLjA1NzE4IDMuMDU3MjdDMy4zMDcyMyAyLjgwNzIyIDMuNjQ2MzcgMi42NjY3NSAzLjk5OTk5IDIuNjY2NzVIOS4zMzMzMkM5LjY4Njk1IDIuNjY2NzUgMTAuMDI2MSAyLjgwNzIyIDEwLjI3NjEgMy4wNTcyN0MxMC41MjYyIDMuMzA3MzIgMTAuNjY2NyAzLjY0NjQ2IDEwLjY2NjcgNC4wMDAwOFY1LjMzMzQxTTYuNjY2NjYgMTMuMzMzNEgxMkMxMi4zNTM2IDEzLjMzMzQgMTIuNjkyOCAxMy4xOTI5IDEyLjk0MjggMTIuOTQyOUMxMy4xOTI4IDEyLjY5MjggMTMuMzMzMyAxMi4zNTM3IDEzLjMzMzMgMTIuMDAwMVY2LjY2Njc1QzEzLjMzMzMgNi4zMTMxMyAxMy4xOTI4IDUuOTczOTkgMTIuOTQyOCA1LjcyMzk0QzEyLjY5MjggNS40NzM4OSAxMi4zNTM2IDUuMzMzNDEgMTIgNS4zMzM0MUg2LjY2NjY2QzYuMzEzMDMgNS4zMzM0MSA1Ljk3MzkgNS40NzM4OSA1LjcyMzg1IDUuNzIzOTRDNS40NzM4IDUuOTczOTkgNS4zMzMzMiA2LjMxMzEzIDUuMzMzMzIgNi42NjY3NVYxMi4wMDAxQzUuMzMzMzIgMTIuMzUzNyA1LjQ3MzggMTIuNjkyOCA1LjcyMzg1IDEyLjk0MjlDNS45NzM5IDEzLjE5MjkgNi4zMTMwMyAxMy4zMzM0IDYuNjY2NjYgMTMuMzMzNFpcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgQ29weSBRdWVyeVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjb3B5UmVzcG9uc2UoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzQ1NTU2Q10gY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzIgMTAuNjY2N0gzLjk5OTk5QzMuNjQ2MzcgMTAuNjY2NyAzLjMwNzIzIDEwLjUyNjMgMy4wNTcxOCAxMC4yNzYyQzIuODA3MTMgMTAuMDI2MiAyLjY2NjY2IDkuNjg3MDQgMi42NjY2NiA5LjMzMzQxVjQuMDAwMDhDMi42NjY2NiAzLjY0NjQ2IDIuODA3MTMgMy4zMDczMiAzLjA1NzE4IDMuMDU3MjdDMy4zMDcyMyAyLjgwNzIyIDMuNjQ2MzcgMi42NjY3NSAzLjk5OTk5IDIuNjY2NzVIOS4zMzMzMkM5LjY4Njk1IDIuNjY2NzUgMTAuMDI2MSAyLjgwNzIyIDEwLjI3NjEgMy4wNTcyN0MxMC41MjYyIDMuMzA3MzIgMTAuNjY2NyAzLjY0NjQ2IDEwLjY2NjcgNC4wMDAwOFY1LjMzMzQxTTYuNjY2NjYgMTMuMzMzNEgxMkMxMi4zNTM2IDEzLjMzMzQgMTIuNjkyOCAxMy4xOTI5IDEyLjk0MjggMTIuOTQyOUMxMy4xOTI4IDEyLjY5MjggMTMuMzMzMyAxMi4zNTM3IDEzLjMzMzMgMTIuMDAwMVY2LjY2Njc1QzEzLjMzMzMgNi4zMTMxMyAxMy4xOTI4IDUuOTczOTkgMTIuOTQyOCA1LjcyMzk0QzEyLjY5MjggNS40NzM4OSAxMi4zNTM2IDUuMzMzNDEgMTIgNS4zMzM0MUg2LjY2NjY2QzYuMzEzMDMgNS4zMzM0MSA1Ljk3MzkgNS40NzM4OSA1LjcyMzg1IDUuNzIzOTRDNS40NzM4IDUuOTczOTkgNS4zMzMzMiA2LjMxMzEzIDUuMzMzMzIgNi42NjY3NVYxMi4wMDAxQzUuMzMzMzIgMTIuMzUzNyA1LjQ3MzggMTIuNjkyOCA1LjcyMzg1IDEyLjk0MjlDNS45NzM5IDEzLjE5MjkgNi4zMTMwMyAxMy4zMzM0IDYuNjY2NjYgMTMuMzMzNFpcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgQ29weSBSZXNwb25zZVxuICAgICAgPC9idXR0b24+XG4gICAgICBcbiAgICAgIDwhLS0gQ2hldnJvbiBJY29uIC0tPlxuICAgICAgPHN2ZyBcbiAgICAgICAgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBcbiAgICAgICAgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm0gY3FhLW1sLTJcIiBcbiAgICAgICAgd2lkdGg9XCIxNFwiIFxuICAgICAgICBoZWlnaHQ9XCIxNFwiIFxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgXG4gICAgICAgIGZpbGw9XCJub25lXCIgXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZCA9PT0gdHJ1ZVwiIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWItMCBjcWEtYm9yZGVyLWwtMCBjcWEtYm9yZGVyLXItMCBjcWEtYm9yZGVyLXNvbGlkXCIgW25nQ2xhc3NdPVwieydjcWEtYm9yZGVyLVsjRTJFOEYwXSc6IHN0YXR1cyA9PT0gJ3Bhc3NlZCcsICdjcWEtYm9yZGVyLVsjRkZDOUM5XSc6IHN0YXR1cyA9PT0gJ2ZhaWxlZCd9XCI+XG4gICAgPCEtLSBRdWVyeSBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMzMTQxNThdIGNxYS1tYi0yXCI+UXVlcnk8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmUgY3FhLWJnLVsjMEYxNzJCXSBjcWEtcm91bmRlZC1bMTBweF0gY3FhLXAtMyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiY29weVF1ZXJ5KClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10b3AtMiBjcWEtcmlnaHQtMiBjcWEtcC0xLjUgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1iZy1bIzMzNDE1NV0gY3FhLXJvdW5kZWRcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM5NEEzQjhcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHByZSBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRleHQtWyNGMUY1RjldIGNxYS1mb250LW1vbm8gY3FhLXdoaXRlc3BhY2UtcHJlLXdyYXAgY3FhLW92ZXJmbG93LXgtYXV0byBjcWEtbS0wXCI+PGNvZGU+e3sgcXVlcnlSZXN1bHQ/LnF1ZXJ5IH19PC9jb2RlPjwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwidmFyaWFibGVOYW1lXCIgY2xhc3M9XCJjcWEtbXQtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjNDU1NTZDXVwiPlxuICAgICAgICBTdG9yZWQgYXMgdmFyaWFibGU6IDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS1iZy1bI0YxRjVGOV0gY3FhLXB4LTEgY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWyM0NTU1NkNdXCI+e3sgdmFyaWFibGVOYW1lIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW10LTRcIiAqbmdJZj1cInF1ZXJ5UmVzdWx0Py5kYXRhXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMzMTQxNThdXCI+UmVzcG9uc2U8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJjb3B5UmVzcG9uc2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXJvdW5kZWRcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM2MzYzNjNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8Y3FhLXRhYmxlLXRlbXBsYXRlXG4gICAgICAgICpuZ0lmPVwiIWlzRW1wdHlSZXNwb25zZSAmJiBxdWVyeVJlc3VsdD8uZGF0YVwiXG4gICAgICAgIFtjb2x1bW5zXT1cInJlc3BvbnNlVGFibGVDb2x1bW5zXCJcbiAgICAgICAgW2RhdGFdPVwicXVlcnlSZXN1bHQ/LmRhdGEgfHwgW11cIlxuICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgIFtpc0VtcHR5U3RhdGVdPVwiaXNFbXB0eVJlc3BvbnNlXCJcbiAgICAgICAgW2VtcHR5U3RhdGVDb25maWddPVwiZW1wdHlTdGF0ZUNvbmZpZ1wiXG4gICAgICAgIFtzaG93U2VhcmNoQmFyXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd1NldHRpbmdzQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dBdXRvUmVmcmVzaEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93T3RoZXJCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cImZhbHNlXCJcbiAgICAgICAgW3NlcnZlclNpZGVQYWdpbmF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLXRhYmxlLXRlbXBsYXRlPlxuICAgICAgXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNFbXB0eVJlc3BvbnNlXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyM0NTU1NkNdIGNxYS1weS00IGNxYS10ZXh0LWNlbnRlclwiPlxuICAgICAgICBObyBkYXRhIHJldHVybmVkIGZyb20gdGhpcyBxdWVyeS5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2RiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtL2RiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9kYi1xdWVyeS1leGVjdXRpb24taXRlbS9kYi1xdWVyeS1leGVjdXRpb24taXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFJNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7OztBQVFoRixNQUFNLE9BQU8sNkJBQTZCO0lBaUN4QyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXpCMUMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1Qix5QkFBb0IsR0FBeUIsRUFBRSxDQUFDO1FBRWhELG9DQUFvQztRQUNwQyw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFFMUMsZ0NBQTJCLEdBQVksS0FBSyxDQUFDO1FBRzdDLG1DQUFtQztRQUNuQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFFekMsK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBRzVDLHFCQUFnQixHQUFxQjtZQUNuQyxLQUFLLEVBQUUsU0FBUztZQUNoQixXQUFXLEVBQUUsbUNBQW1DO1lBQ2hELFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTO1lBQ3RDLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUVGLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztJQUV1QixDQUFDO0lBRTlDLFFBQVE7UUFDTixJQUFJLENB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QUFJLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNoRCxDQUFDLENBQUM7SUFDSixDQUFDOzswSEFyTVUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsMFNDWjFDLHVxV0E2SkE7MkZEakphLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSw2QkFBNkIsUUFHakMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO3dHQUdyQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYlF1ZXJ5UmVzdWx0IH0gZnJvbSAnLi4vZXhlY3V0aW9uLXN0ZXAubW9kZWxzJztcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbmZpZyB9IGZyb20gJy4uLy4uL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRU1QVFlfU1RBVEVfSU1BR0VTIH0gZnJvbSAnLi4vLi4vYXNzZXRzL2ltYWdlcy9pbWFnZS1hc3NldHMuY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWRiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIERiUXVlcnlFeGVjdXRpb25JdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcXVlcnlOdW1iZXIhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHF1ZXJ5S2V5ITogc3RyaW5nO1xuICBASW5wdXQoKSBxdWVyeVJlc3VsdCE6IERiUXVlcnlSZXN1bHQ7XG4gIEBJbnB1dCgpIHN0YXR1cyE6ICdwYXNzZWQnIHwgJ2ZhaWxlZCc7XG4gIEBJbnB1dCgpIHZhcmlhYmxlTmFtZT86IHN0cmluZztcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6IHN0cmluZyB9KSA9PiB2b2lkO1xuXG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVzcG9uc2VUYWJsZUNvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIFxuICAvLyBUb29sdGlwIHN0YXRlcyBmb3IgY29sbGFwc2VkIHZpZXdcbiAgc2hvd1F1ZXJ5Q29waWVkQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcXVlcnlDb3BpZWRDb2xsYXBzZWRUaW1lb3V0PzogYW55O1xuICBzaG93UmVzcG9uc2VDb3BpZWRDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNwb25zZUNvcGllZENvbGxhcHNlZFRpbWVvdXQ/OiBhbnk7XG4gIFxuICAvLyBUb29sdGlwIHN0YXRlcyBmb3IgZXhwYW5kZWQgdmlld1xuICBzaG93UXVlcnlDb3BpZWRFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHF1ZXJ5Q29waWVkRXhwYW5kZWRUaW1lb3V0PzogYW55O1xuICBzaG93UmVzcG9uc2VDb3BpZWRFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlc3BvbnNlQ29waWVkRXhwYW5kZWRUaW1lb3V0PzogYW55O1xuICBcbiAgZW1wdHlTdGF0ZUNvbmZpZzogRW1wdHlTdGF0ZUNvbmZpZyA9IHtcbiAgICB0aXRsZTogJ05vIERhdGEnLFxuICAgIGRlc2NyaXB0aW9uOiAnTm8gZGF0YSByZXR1cm5lZCBmcm9tIHRoaXMgcXVlcnkuJyxcbiAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLkRBU0hCT0FSRCxcbiAgICBhY3Rpb25zOiBbXSxcbiAgfTtcblxuICBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cFJlc3BvbnNlVGFibGVDb2x1bW5zKCk7XG4gIH1cblxuICB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICB0aGlzLnNldHVwUmVzcG9uc2VUYWJsZUNvbHVtbnMoKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY29weVF1ZXJ5Q29sbGFwc2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXJ5UmVzdWx0Py5xdWVyeSkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5xdWVyeVJlc3VsdC5xdWVyeSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd1F1ZXJ5Q29waWVkQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFyIGFueSBleGlzdGluZyB0aW1lb3V0XG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5Q29waWVkQ29sbGFwc2VkVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnF1ZXJ5Q29waWVkQ29sbGFwc2VkVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEhpZGUgdG9vbHRpcCBhZnRlciAyIHNlY29uZHNcbiAgICAgICAgdGhpcy5xdWVyeUNvcGllZENvbGxhcHNlZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dRdWVyeUNvcGllZENvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICB9LCAyMDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlRdWVyeUV4cGFuZGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXJ5UmVzdWx0Py5xdWVyeSkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5xdWVyeVJlc3VsdC5xdWVyeSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd1F1ZXJ5Q29waWVkRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYXIgYW55IGV4aXN0aW5nIHRpbWVvdXRcbiAgICAgICAgaWYgKHRoaXMucXVlcnlDb3BpZWRFeHBhbmRlZFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5xdWVyeUNvcGllZEV4cGFuZGVkVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEhpZGUgdG9vbHRpcCBhZnRlciAyIHNlY29uZHNcbiAgICAgICAgdGhpcy5xdWVyeUNvcGllZEV4cGFuZGVkVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd1F1ZXJ5Q29waWVkRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjb3B5UmVzcG9uc2VDb2xsYXBzZWQoKTogdm9pZCB7ICAgIFxuICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeVJlc3VsdC5kYXRhLCBudWxsLCAyKTtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChyZXNwb25zZSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnNob3dSZXNwb25zZUNvcGllZENvbGxhcHNlZCA9IHRydWU7XG4gICAgICBcbiAgICAgIC8vIENsZWFyIGFueSBleGlzdGluZyB0aW1lb3V0XG4gICAgICBpZiAodGhpcy5yZXNwb25zZUNvcGllZENvbGxhcHNlZFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9uc2VDb3BpZWRDb2xsYXBzZWRUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGlkZSB0b29sdGlwIGFmdGVyIDIgc2Vjb25kc1xuICAgICAgdGhpcy5yZXNwb25zZUNvcGllZENvbGxhcHNlZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93UmVzcG9uc2VDb3BpZWRDb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIH0sIDIwMDApO1xuICAgIH0pO1xuICB9XG5cbiAgY29weVJlc3BvbnNlRXhwYW5kZWQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5UmVzdWx0LmRhdGEsIG51bGwsIDIpO1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHJlc3BvbnNlKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd1Jlc3BvbnNlQ29waWVkRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgdGltZW91dFxuICAgICAgaWYgKHRoaXMucmVzcG9uc2VDb3BpZWRFeHBhbmRlZFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzcG9uc2VDb3BpZWRFeHBhbmRlZFRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBIaWRlIHRvb2x0aXAgYWZ0ZXIgMiBzZWNvbmRzXG4gICAgICB0aGlzLnJlc3BvbnNlQ29waWVkRXhwYW5kZWRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd1Jlc3BvbnNlQ29waWVkRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgIH0sIDIwMDApO1xuICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0RHVyYXRpb24oc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoc2Vjb25kcyA8IDEpIHtcbiAgICAgIHJldHVybiBgJHsoc2Vjb25kcyAqIDEwMDApLnRvRml4ZWQoMCl9bXNgO1xuICAgIH1cbiAgICBpZiAoc2Vjb25kcyA8IDYwICYmICFOdW1iZXIuaXNJbnRlZ2VyKHNlY29uZHMpKSB7XG4gICAgICByZXR1cm4gYCR7c2Vjb25kcy50b0ZpeGVkKDEpfXNgO1xuICAgIH1cbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2hvdXJzfWhgKTtcbiAgICB9XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIH1cbiAgICBpZiAoc2VjcyA+IDAgfHwgKGhvdXJzID09PSAwICYmIG1pbnV0ZXMgPT09IDApKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3NlY3N9c2ApO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHlSZXNwb25zZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVJlc3VsdD8uZGF0YT8ubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlc3BvbnNlVGFibGVDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnF1ZXJ5UmVzdWx0Py5kYXRhIHx8IFtdO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNwb25zZVRhYmxlQ29sdW1ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgdW5pcXVlIGtleXMgZnJvbSB0aGUgZGF0YSBvYmplY3RzXG4gICAgY29uc3QgZmlyc3RJdGVtID0gZGF0YVswXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0SXRlbSAhPT0gJ29iamVjdCcgfHwgZmlyc3RJdGVtID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlVGFibGVDb2x1bW5zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0SXRlbSk7XG4gICAgdGhpcy5yZXNwb25zZVRhYmxlQ29sdW1ucyA9IGtleXMubWFwKGtleSA9PiAoe1xuICAgICAgZmllbGRJZDoga2V5LFxuICAgICAgZmllbGROYW1lOiBrZXksXG4gICAgICBmaWVsZFZhbHVlOiBrZXksXG4gICAgICBpc1Nob3c6IHRydWUsXG4gICAgICB3ZWlnaHQ6IDEsXG4gICAgICByZW5kZXI6IChyb3c6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1trZXldID8/ICctJztcbiAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMEYxNzJCXVwiPlxuICAgICAgICAgICAgJHt0aGlzLmVzY2FwZUh0bWwoZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYDtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGVzY2FwZUh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gIH1cblxuICBnZXQgY2VsbEpzb25QYXRoR2V0dGVyKCk6IChyb3dJbmRleDogbnVtYmVyLCBjb2xJZDogc3RyaW5nKSA9PiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VOYW1lID0gdGhpcy52YXJpYWJsZU5hbWUgfHwgdGhpcy5xdWVyeUtleSB8fCAnZGF0YSc7XG4gICAgY29uc3QgcGFnZUlkeCA9IHRoaXMucGFnZUluZGV4O1xuICAgIGNvbnN0IHBhZ2VTeiA9IHRoaXMucGFnZVNpemU7XG4gICAgcmV0dXJuIChyb3dJbmRleDogbnVtYmVyLCBjb2xJZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBhY3R1YWxJbmRleCA9IHBhZ2VJZHggKiBwYWdlU3ogKyByb3dJbmRleDtcbiAgICAgIHJldHVybiBgJHtiYXNlTmFtZX1bJHthY3R1YWxJbmRleH1dLiR7Y29sSWR9YDtcbiAgICB9O1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtYm9yZGVyICFjcWEtYm9yZGVyLWItMiBjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLWxnIGNxYS1vdmVyZmxvdy1oaWRkZW5cIiBbbmdDbGFzc109XCJ7J2NxYS1iZy1bI0Y4RkFGQ10gY3FhLWJvcmRlci1bI0UyRThGMF0nOiBzdGF0dXMgPT09ICdwYXNzZWQnLCAnY3FhLWJnLVsjRkVGMkYyXSBjcWEtYm9yZGVyLVsjRkZDOUM5XSc6IHN0YXR1cyA9PT0gJ2ZhaWxlZCd9XCI+XG4gIDwhLS0gSGVhZGVyIChDb2xsYXBzZWQgVmlldykgLS0+XG4gIDxkaXYgXG4gICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1mbGV4LXdyYXBcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgcm9sZT1cImJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWZsZXgtd3JhcCAgY3FhLWdhcC0yIGNxYS13LVtjYWxjKDEwMCUtMTVweCldXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLWZsZXgtMVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzMxNDE1OF0gY3FhLW1pbi13LW1heFwiPlF1ZXJ5IHt7IHF1ZXJ5TnVtYmVyIH19PC9zcGFuPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBTdGF0dXMgQmFkZ2UgLS0+XG4gICAgICAgIDxjcWEtYmFkZ2UgY2xhc3M9XCJjcWEtbWItMC41XCJcbiAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gJ3Bhc3NlZCdcIlxuICAgICAgICAgIGxhYmVsPVwiUGFzc2VkXCJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCIjRENGQ0U3XCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCIjMjJDNTVFXCJcbiAgICAgICAgICBpbmxpbmVTdHlsZXM9XCJib3JkZXItcmFkaXVzOiA1MHB4OyBtYXJnaW4tdG9wOiAycHg7XCJcbiAgICAgICAgICBpY29uPVwiY2hlY2tfY2lyY2xlXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICAgIDxjcWEtYmFkZ2UgY2xhc3M9XCJjcWEtbWItMC41XCJcbiAgICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gJ2ZhaWxlZCdcIlxuICAgICAgICAgIGxhYmVsPVwiRmFpbGVkXCJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCIjRkVFMkUyXCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCIjREMyNjI2XCJcbiAgICAgICAgICBpY29uPVwiZXJyb3JcIlxuICAgICAgICAgIGlubGluZVN0eWxlcz1cImJvcmRlci1yYWRpdXM6IDUwcHg7IG1hcmdpbi10b3A6IDJweDtcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICA8L2NxYS1iYWRnZT5cbiAgICAgICAgXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzYyNzQ4RV0gY3FhLW1pbi13LW1heFwiICpuZ0lmPVwicXVlcnlSZXN1bHQ/LmR1cmF0aW9uIHx8IHF1ZXJ5UmVzdWx0Py5kYXRhPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAge3sgZm9ybWF0RHVyYXRpb24ocXVlcnlSZXN1bHQ/LmR1cmF0aW9uKSB9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicXVlcnlSZXN1bHQ/LmRhdGE/Lmxlbmd0aCA+IDAgJiYgcXVlcnlSZXN1bHQ/LmR1cmF0aW9uXCI+IOKAoiA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJxdWVyeVJlc3VsdD8uZGF0YT8ubGVuZ3RoID4gMFwiPnt7IHF1ZXJ5UmVzdWx0Py5kYXRhPy5sZW5ndGggfHwgMCB9fSByb3dzPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjb3B5UXVlcnlDb2xsYXBzZWQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzQ1NTU2Q10gY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtcmVsYXRpdmVcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk01LjMzMzMyIDEwLjY2NjdIMy45OTk5OUMzLjY0NjM3IDEwLjY2NjcgMy4zMDcyMyAxMC41MjYzIDMuMDU3MTggMTAuMjc2MkMyLjgwNzEzIDEwLjAyNjIgMi42NjY2NiA5LjY4NzA0IDIuNjY2NjYgOS4zMzM0MVY0LjAwMDA4QzIuNjY2NjYgMy42NDY0NiAyLjgwNzEzIDMuMzA3MzIgMy4wNTcxOCAzLjA1NzI3QzMuMzA3MjMgMi44MDcyMiAzLjY0NjM3IDIuNjY2NzUgMy45OTk5OSAyLjY2Njc1SDkuMzMzMzJDOS42ODY5NSAyLjY2Njc1IDEwLjAyNjEgMi44MDcyMiAxMC4yNzYxIDMuMDU3MjdDMTAuNTI2MiAzLjMwNzMyIDEwLjY2NjcgMy42NDY0NiAxMC42NjY3IDQuMDAwMDhWNS4zMzM0MU02LjY2NjY2IDEzLjMzMzRIMTJDMTIuMzUzNiAxMy4zMzM0IDEyLjY5MjggMTMuMTkyOSAxMi45NDI4IDEyLjk0MjlDMTMuMTkyOCAxMi42OTI4IDEzLjMzMzMgMTIuMzUzNyAxMy4zMzMzIDEyLjAwMDFWNi42NjY3NUMxMy4zMzMzIDYuMzEzMTMgMTMuMTkyOCA1Ljk3Mzk5IDEyLjk0MjggNS43MjM5NEMxMi42OTI4IDUuNDczODkgMTIuMzUzNiA1LjMzMzQxIDEyIDUuMzMzNDFINi42NjY2NkM2LjMxMzAzIDUuMzMzNDEgNS45NzM5IDUuNDczODkgNS43MjM4NSA1LjcyMzk0QzUuNDczOCA1Ljk3Mzk5IDUuMzMzMzIgNi4zMTMxMyA1LjMzMzMyIDYuNjY2NzVWMTIuMDAwMUM1LjMzMzMyIDEyLjM1MzcgNS40NzM4IDEyLjY5MjggNS43MjM4NSAxMi45NDI5QzUuOTczOSAxMy4xOTI5IDYuMzEzMDMgMTMuMzMzNCA2LjY2NjY2IDEzLjMzMzRaXCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgIENvcHkgUXVlcnlcbiAgICAgICAgXG4gICAgICAgIDwhLS0gQ29waWVkIFRvb2x0aXAgLS0+XG4gICAgICAgIDxkaXYgXG4gICAgICAgICAgKm5nSWY9XCJzaG93UXVlcnlDb3BpZWRDb2xsYXBzZWRcIiBcbiAgICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLTAgY3FhLWxlZnQtNyBjcWEtcHgtMiBjcWEtcHktMSBjcWEtYmctWyMwQjBCMEJdIGNxYS10ZXh0LXdoaXRlIGNxYS10ZXh0LVsxMHB4XSBjcWEtcm91bmRlZCBjcWEtd2hpdGVzcGFjZS1ub3dyYXAgY3FhLXotNTAgY3FhLXNoYWRvdy1sZ1wiXG4gICAgICAgICAgc3R5bGU9XCJhbmltYXRpb246IGZhZGVJbk91dCAwLjJzIGVhc2UtaW4tb3V0O1wiPlxuICAgICAgICAgIENvcGllZCFcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImNvcHlSZXNwb25zZUNvbGxhcHNlZCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1weC0yIGNxYS1weS0xIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNDU1NTZDXSBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1yZWxhdGl2ZVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzIgMTAuNjY2N0gzLjk5OTk5QzMuNjQ2MzcgMTAuNjY2NyAzLjMwNzIzIDEwLjUyNjMgMy4wNTcxOCAxMC4yNzYyQzIuODA3MTMgMTAuMDI2MiAyLjY2NjY2IDkuNjg3MDQgMi42NjY2NiA5LjMzMzQxVjQuMDAwMDhDMi42NjY2NiAzLjY0NjQ2IDIuODA3MTMgMy4zMDczMiAzLjA1NzE4IDMuMDU3MjdDMy4zMDcyMyAyLjgwNzIyIDMuNjQ2MzcgMi42NjY3NSAzLjk5OTk5IDIuNjY2NzVIOS4zMzMzMkM5LjY4Njk1IDIuNjY2NzUgMTAuMDI2MSAyLjgwNzIyIDEwLjI3NjEgMy4wNTcyN0MxMC41MjYyIDMuMzA3MzIgMTAuNjY2NyAzLjY0NjQ2IDEwLjY2NjcgNC4wMDAwOFY1LjMzMzQxTTYuNjY2NjYgMTMuMzMzNEgxMkMxMi4zNTM2IDEzLjMzMzQgMTIuNjkyOCAxMy4xOTI5IDEyLjk0MjggMTIuOTQyOUMxMy4xOTI4IDEyLjY5MjggMTMuMzMzMyAxMi4zNTM3IDEzLjMzMzMgMTIuMDAwMVY2LjY2Njc1QzEzLjMzMzMgNi4zMTMxMyAxMy4xOTI4IDUuOTczOTkgMTIuOTQyOCA1LjcyMzk0QzEyLjY5MjggNS40NzM4OSAxMi4zNTM2IDUuMzMzNDEgMTIgNS4zMzM0MUg2LjY2NjY2QzYuMzEzMDMgNS4zMzM0MSA1Ljk3MzkgNS40NzM4OSA1LjcyMzg1IDUuNzIzOTRDNS40NzM4IDUuOTczOTkgNS4zMzMzMiA2LjMxMzEzIDUuMzMzMzIgNi42NjY3NVYxMi4wMDAxQzUuMzMzMzIgMTIuMzUzNyA1LjQ3MzggMTIuNjkyOCA1LjcyMzg1IDEyLjk0MjlDNS45NzM5IDEzLjE5MjkgNi4zMTMwMyAxMy4zMzM0IDYuNjY2NjYgMTMuMzMzNFpcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgQ29weSBSZXNwb25zZVxuICAgICAgICBcbiAgICAgICAgPCEtLSBDb3BpZWQgVG9vbHRpcCAtLT5cbiAgICAgICAgPGRpdiBcbiAgICAgICAgICAqbmdJZj1cInNob3dSZXNwb25zZUNvcGllZENvbGxhcHNlZFwiIFxuICAgICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10b3AtMCBjcWEtbGVmdC03ICBjcWEtcHgtMiBjcWEtcHktMSBjcWEtYmctWyMwQjBCMEJdIGNxYS10ZXh0LXdoaXRlIGNxYS10ZXh0LVsxMHB4XSBjcWEtcm91bmRlZCBjcWEtd2hpdGVzcGFjZS1ub3dyYXAgY3FhLXotNTAgY3FhLXNoYWRvdy1sZ1wiXG4gICAgICAgICAgc3R5bGU9XCJhbmltYXRpb246IGZhZGVJbk91dCAwLjJzIGVhc2UtaW4tb3V0O1wiPlxuICAgICAgICAgIENvcGllZCFcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1taW4tdy1tYXhcIj5cbiAgICAgIDxzdmcgXG4gICAgICAgIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgXG4gICAgICAgIFttYXRUb29sdGlwXT1cImlzRXhwYW5kZWQgPyAnQ29sbGFwc2UnIDogJ0V4cGFuZCB0byB2aWV3IHRoZSBxdWVyeSBhbmQgcmVzcG9uc2UuJ1wiXG4gICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm0gY3FhLW1pbi13LW1heFwiIFxuICAgICAgICB3aWR0aD1cIjE0XCIgXG4gICAgICAgIGhlaWdodD1cIjE0XCIgXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBcbiAgICAgICAgZmlsbD1cIm5vbmVcIiBcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTMuNSA1TDcgOC41TDEwLjUgNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkID09PSB0cnVlXCIgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItYi0wIGNxYS1ib3JkZXItbC0wIGNxYS1ib3JkZXItci0wIGNxYS1ib3JkZXItc29saWRcIiBbbmdDbGFzc109XCJ7J2NxYS1ib3JkZXItWyNFMkU4RjBdJzogc3RhdHVzID09PSAncGFzc2VkJywgJ2NxYS1ib3JkZXItWyNGRkM5QzldJzogc3RhdHVzID09PSAnZmFpbGVkJ31cIj5cbiAgICA8IS0tIFF1ZXJ5IFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1weC00IGNxYS1weS0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzMxNDE1OF0gY3FhLW1iLTJcIj5RdWVyeTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1yZWxhdGl2ZSBjcWEtYmctWyMwRjE3MkJdIGNxYS1yb3VuZGVkLVsxMHB4XSBjcWEtcC0zIGNxYS1vdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJjb3B5UXVlcnlFeHBhbmRlZCgpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLTIgY3FhLXJpZ2h0LTIgY3FhLXAtMS41IGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtYmctWyMzMzQxNTVdIGNxYS1yb3VuZGVkXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTUuMzMzMzIgMTAuNjY2N0gzLjk5OTk5QzMuNjQ2MzcgMTAuNjY2NyAzLjMwNzIzIDEwLjUyNjMgMy4wNTcxOCAxMC4yNzYyQzIuODA3MTMgMTAuMDI2MiAyLjY2NjY2IDkuNjg3MDQgMi42NjY2NiA5LjMzMzQxVjQuMDAwMDhDMi42NjY2NiAzLjY0NjQ2IDIuODA3MTMgMy4zMDczMiAzLjA1NzE4IDMuMDU3MjdDMy4zMDcyMyAyLjgwNzIyIDMuNjQ2MzcgMi42NjY3NSAzLjk5OTk5IDIuNjY2NzVIOS4zMzMzMkM5LjY4Njk1IDIuNjY2NzUgMTAuMDI2MSAyLjgwNzIyIDEwLjI3NjEgMy4wNTcyN0MxMC41MjYyIDMuMzA3MzIgMTAuNjY2NyAzLjY0NjQ2IDEwLjY2NjcgNC4wMDAwOFY1LjMzMzQxTTYuNjY2NjYgMTMuMzMzNEgxMkMxMi4zNTM2IDEzLjMzMzQgMTIuNjkyOCAxMy4xOTI5IDEyLjk0MjggMTIuOTQyOUMxMy4xOTI4IDEyLjY5MjggMTMuMzMzMyAxMi4zNTM3IDEzLjMzMzMgMTIuMDAwMVY2LjY2Njc1QzEzLjMzMzMgNi4zMTMxMyAxMy4xOTI4IDUuOTczOTkgMTIuOTQyOCA1LjcyMzk0QzEyLjY5MjggNS40NzM4OSAxMi4zNTM2IDUuMzMzNDEgMTIgNS4zMzM0MUg2LjY2NjY2QzYuMzEzMDMgNS4zMzM0MSA1Ljk3MzkgNS40NzM4OSA1LjcyMzg1IDUuNzIzOTRDNS40NzM4IDUuOTczOTkgNS4zMzMzMiA2LjMxMzEzIDUuMzMzMzIgNi42NjY3NVYxMi4wMDAxQzUuMzMzMzIgMTIuMzUzNyA1LjQ3MzggMTIuNjkyOCA1LjcyMzg1IDEyLjk0MjlDNS45NzM5IDEzLjE5MjkgNi4zMTMwMyAxMy4zMzM0IDYuNjY2NjYgMTMuMzMzNFpcIiBzdHJva2U9XCIjOTRBM0I4XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIENvcGllZCBUb29sdGlwIC0tPlxuICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAqbmdJZj1cInNob3dRdWVyeUNvcGllZEV4cGFuZGVkXCIgXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtcmlnaHQtMCBjcWEtdG9wLWZ1bGwgY3FhLW10LTEgY3FhLXB4LTIgY3FhLXB5LTEgY3FhLWJnLVsjMEIwQjBCXSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLXJvdW5kZWQgY3FhLXdoaXRlc3BhY2Utbm93cmFwIGNxYS16LTUwIGNxYS1zaGFkb3ctbGdcIlxuICAgICAgICAgICAgc3R5bGU9XCJhbmltYXRpb246IGZhZGVJbk91dCAwLjJzIGVhc2UtaW4tb3V0O1wiPlxuICAgICAgICAgICAgQ29waWVkIVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHByZSBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRleHQtWyNGMUY1RjldIGNxYS1mb250LW1vbm8gY3FhLXdoaXRlc3BhY2UtcHJlLXdyYXAgY3FhLW92ZXJmbG93LXgtYXV0byBjcWEtbS0wXCI+PGNvZGU+e3sgcXVlcnlSZXN1bHQ/LnF1ZXJ5IH19PC9jb2RlPjwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwidmFyaWFibGVOYW1lXCIgY2xhc3M9XCJjcWEtbXQtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjNDU1NTZDXVwiPlxuICAgICAgICBTdG9yZWQgYXMgdmFyaWFibGU6IDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS1iZy1bI0YxRjVGOV0gY3FhLXB4LTEgY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWyM0NTU1NkNdXCI+e3sgdmFyaWFibGVOYW1lIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW10LTRcIiAqbmdJZj1cInF1ZXJ5UmVzdWx0Py5kYXRhXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMzMTQxNThdXCI+UmVzcG9uc2U8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJjb3B5UmVzcG9uc2VFeHBhbmRlZCgpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlciBjcWEtcm91bmRlZCBjcWEtcmVsYXRpdmVcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM2MzYzNjNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gQ29waWVkIFRvb2x0aXAgLS0+XG4gICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1Jlc3BvbnNlQ29waWVkRXhwYW5kZWRcIiBcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS1yaWdodC0wIGNxYS10b3AtZnVsbCBjcWEtbXQtMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtYmctWyMwQjBCMEJdIGNxYS10ZXh0LXdoaXRlIGNxYS10ZXh0LVsxMHB4XSBjcWEtcm91bmRlZCBjcWEtd2hpdGVzcGFjZS1ub3dyYXAgY3FhLXotNTAgY3FhLXNoYWRvdy1sZ1wiXG4gICAgICAgICAgICBzdHlsZT1cImFuaW1hdGlvbjogZmFkZUluT3V0IDAuMnMgZWFzZS1pbi1vdXQ7XCI+XG4gICAgICAgICAgICBDb3BpZWQhXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxjcWEtdGFibGUtdGVtcGxhdGVcbiAgICAgICAgKm5nSWY9XCIhaXNFbXB0eVJlc3BvbnNlICYmIHF1ZXJ5UmVzdWx0Py5kYXRhXCJcbiAgICAgICAgW2NvbHVtbnNdPVwicmVzcG9uc2VUYWJsZUNvbHVtbnNcIlxuICAgICAgICBbZGF0YV09XCJxdWVyeVJlc3VsdD8uZGF0YSB8fCBbXVwiXG4gICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgW2lzRW1wdHlTdGF0ZV09XCJpc0VtcHR5UmVzcG9uc2VcIlxuICAgICAgICBbZW1wdHlTdGF0ZUNvbmZpZ109XCJlbXB0eVN0YXRlQ29uZmlnXCJcbiAgICAgICAgW3Nob3dTZWFyY2hCYXJdPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd0ZpbHRlckJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93U2V0dGluZ3NCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd0F1dG9SZWZyZXNoQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dPdGhlckJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93RmlsdGVyUGFuZWxdPVwiZmFsc2VcIlxuICAgICAgICBbc2VydmVyU2lkZVBhZ2luYXRpb25dPVwiZmFsc2VcIlxuICAgICAgICBbY2VsbEpzb25QYXRoR2V0dGVyXT1cImNlbGxKc29uUGF0aEdldHRlclwiXG4gICAgICAgIFtvbkpzb25QYXRoQ29waWVkSGFuZGxlcl09XCJvbkpzb25QYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS10YWJsZS10ZW1wbGF0ZT5cbiAgICAgIFxuICAgICAgPGRpdiAqbmdJZj1cImlzRW1wdHlSZXNwb25zZVwiIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS10ZXh0LVsjNDU1NTZDXSBjcWEtcHktNCBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgTm8gZGF0YSByZXR1cm5lZCBmcm9tIHRoaXMgcXVlcnkuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|