@firestitch/report 18.0.11 → 18.0.13
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/app/reports/dialogs/entity-functions/entity-functions.component.d.ts +22 -0
- package/app/reports/dialogs/global-settings/components/semantic-database/semantic-database.component.d.ts +6 -21
- package/app/reports/dialogs/global-settings/global-settings.component.d.ts +3 -3
- package/app/reports/dialogs/instruction-history/instruction-history.component.d.ts +16 -0
- package/app/reports/interfaces/report.interface.d.ts +10 -1
- package/app/reports/report-filter-items.d.ts +7 -0
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +4 -2
- package/esm2022/app/reports/dialogs/entity-functions/entity-functions.component.mjs +81 -0
- package/esm2022/app/reports/dialogs/global-settings/components/semantic-database/semantic-database.component.mjs +23 -71
- package/esm2022/app/reports/dialogs/global-settings/global-settings.component.mjs +31 -22
- package/esm2022/app/reports/dialogs/instruction-history/instruction-history.component.mjs +60 -0
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +28 -7
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/report-filter-items.mjs +28 -10
- package/fesm2022/{firestitch-report-echarts-DaBOoR9Z.mjs → firestitch-report-echarts-D9IzyGer.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-DaBOoR9Z.mjs.map → firestitch-report-echarts-D9IzyGer.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-Cwsww3Jz.mjs → firestitch-report-firestitch-report-BwC8lvzk.mjs} +219 -130
- package/fesm2022/firestitch-report-firestitch-report-BwC8lvzk.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/app/reports/dialogs/global-settings/components/history/history.component.d.ts +0 -8
- package/esm2022/app/reports/dialogs/global-settings/components/history/history.component.mjs +0 -32
- package/fesm2022/firestitch-report-firestitch-report-Cwsww3Jz.mjs.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SemanticEntityFunction, SemanticEntityFunctions } from '../../interfaces/report.interface';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export interface EntityFunctionsDialogData {
|
|
4
|
+
entityKey: string;
|
|
5
|
+
source: 'model' | 'handler';
|
|
6
|
+
}
|
|
7
|
+
export declare class EntityFunctionsComponent {
|
|
8
|
+
private static readonly KIND_COLORS;
|
|
9
|
+
private static readonly KIND_ORDER;
|
|
10
|
+
private readonly _data;
|
|
11
|
+
readonly entityKey: string;
|
|
12
|
+
readonly sourceLabel: string;
|
|
13
|
+
readonly entityFunctions: import("@angular/core").WritableSignal<SemanticEntityFunctions>;
|
|
14
|
+
readonly discoveredClass: import("@angular/core").Signal<string>;
|
|
15
|
+
readonly functions: import("@angular/core").Signal<SemanticEntityFunction[]>;
|
|
16
|
+
constructor();
|
|
17
|
+
kindColor(kind: string): string;
|
|
18
|
+
private _sortFunctions;
|
|
19
|
+
private _kindRank;
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EntityFunctionsComponent, never>;
|
|
21
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EntityFunctionsComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
22
|
+
}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
import { SemanticBuildEntity, SemanticBuildStage, SemanticBuildStatus
|
|
1
|
+
import { SemanticBuildEntity, SemanticBuildStage, SemanticBuildStatus } from '../../../../interfaces/report.interface';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export declare class SemanticDatabaseComponent {
|
|
4
4
|
private static readonly ACTIVE_STATES;
|
|
5
5
|
private static readonly STATE_LABELS;
|
|
6
6
|
private static readonly DONE_COLOR;
|
|
7
7
|
private static readonly PENDING_COLOR;
|
|
8
|
-
private static readonly KIND_COLORS;
|
|
9
|
-
private static readonly KIND_ORDER;
|
|
10
8
|
readonly stageKeys: string[];
|
|
11
9
|
readonly stageLabels: Record<string, string>;
|
|
12
10
|
readonly status: import("@angular/core").WritableSignal<SemanticBuildStatus>;
|
|
13
11
|
readonly building: import("@angular/core").WritableSignal<boolean>;
|
|
14
12
|
readonly buildActive: import("@angular/core").Signal<boolean>;
|
|
15
13
|
readonly buildStateLabel: import("@angular/core").Signal<string>;
|
|
16
|
-
private readonly _entityFunctions;
|
|
17
14
|
private _buildFinalized;
|
|
15
|
+
private readonly _dialog;
|
|
18
16
|
private readonly _reportData;
|
|
19
17
|
private readonly _process;
|
|
20
18
|
private readonly _prompt;
|
|
@@ -40,27 +38,14 @@ export declare class SemanticDatabaseComponent {
|
|
|
40
38
|
private _announceOutcome;
|
|
41
39
|
stageColor(stage: SemanticBuildStage): string;
|
|
42
40
|
stageTooltip(stage: SemanticBuildStage): string;
|
|
43
|
-
kindColor(kind: string): string;
|
|
44
41
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* the
|
|
42
|
+
* Open the child dialog listing one group of an entity's cached functions —
|
|
43
|
+
* the model class's or the handler class's. The dialog fetches fresh on open,
|
|
44
|
+
* so the tab never holds function payloads.
|
|
48
45
|
*/
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* First expand of an entity: fetch its cached functions through the per-entity
|
|
52
|
-
* endpoint. Subsequent expands reuse the loaded copy (a finished build clears
|
|
53
|
-
* the copies so a re-expand refetches fresh data).
|
|
54
|
-
*/
|
|
55
|
-
entityOpened(entity: SemanticBuildEntity): void;
|
|
46
|
+
openFunctions(entity: SemanticBuildEntity, source: 'model' | 'handler'): void;
|
|
56
47
|
private _init;
|
|
57
48
|
private _refreshStatus;
|
|
58
|
-
/**
|
|
59
|
-
* Order once at load time (kind priority, then method name) so the template
|
|
60
|
-
* renders the list as-is.
|
|
61
|
-
*/
|
|
62
|
-
private _sortFunctions;
|
|
63
|
-
private _kindRank;
|
|
64
49
|
static ɵfac: i0.ɵɵFactoryDeclaration<SemanticDatabaseComponent, never>;
|
|
65
50
|
static ɵcmp: i0.ɵɵComponentDeclaration<SemanticDatabaseComponent, "fs-ai-report-global-settings-semantic-database", never, {}, {}, never, never, true, never>;
|
|
66
51
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FsMarkdownEditorConfig } from '@firestitch/markdown-editor';
|
|
2
|
-
import {
|
|
2
|
+
import { ReportInstructions, ReportSettings } from '../../interfaces/report.interface';
|
|
3
3
|
import { SemanticDatabaseComponent } from './components/semantic-database/semantic-database.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class GlobalSettingsComponent {
|
|
@@ -12,13 +12,13 @@ export declare class GlobalSettingsComponent {
|
|
|
12
12
|
readonly concurrency: import("@angular/core").WritableSignal<number>;
|
|
13
13
|
readonly loaded: import("@angular/core").Signal<boolean>;
|
|
14
14
|
private readonly _dialogRef;
|
|
15
|
+
private readonly _dialog;
|
|
15
16
|
private readonly _reportData;
|
|
16
17
|
private readonly _message;
|
|
17
|
-
private readonly _prompt;
|
|
18
18
|
private readonly _destroyRef;
|
|
19
19
|
constructor();
|
|
20
20
|
save: () => import("rxjs").Observable<ReportSettings> | import("rxjs").Observable<ReportInstructions>;
|
|
21
|
-
|
|
21
|
+
openHistory(): void;
|
|
22
22
|
private _init;
|
|
23
23
|
private _applyInstructions;
|
|
24
24
|
private _applySettings;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ReportInstruction } from '../../interfaces/report.interface';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export interface InstructionHistoryDialogData {
|
|
4
|
+
versions: ReportInstruction[];
|
|
5
|
+
}
|
|
6
|
+
export declare class InstructionHistoryComponent {
|
|
7
|
+
private readonly _data;
|
|
8
|
+
readonly versions: import("@angular/core").WritableSignal<ReportInstruction[]>;
|
|
9
|
+
private readonly _reportData;
|
|
10
|
+
private readonly _prompt;
|
|
11
|
+
private readonly _message;
|
|
12
|
+
private readonly _destroyRef;
|
|
13
|
+
restore(version: ReportInstruction): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InstructionHistoryComponent, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InstructionHistoryComponent, "ng-component", never, {}, {}, never, never, true, never>;
|
|
16
|
+
}
|
|
@@ -118,6 +118,10 @@ export interface ReportFilter {
|
|
|
118
118
|
hasOptions: boolean;
|
|
119
119
|
config: Record<string, unknown>;
|
|
120
120
|
}
|
|
121
|
+
export interface ReportFilterOption {
|
|
122
|
+
value: unknown;
|
|
123
|
+
label: string;
|
|
124
|
+
}
|
|
121
125
|
export interface ReportFilterGroup {
|
|
122
126
|
id: number;
|
|
123
127
|
label: string | null;
|
|
@@ -211,6 +215,8 @@ export interface SemanticBuildEntity {
|
|
|
211
215
|
enums: SemanticBuildEnum[];
|
|
212
216
|
computedFields: string[];
|
|
213
217
|
functionCount: number;
|
|
218
|
+
modelFunctionCount: number;
|
|
219
|
+
handlerFunctionCount: number;
|
|
214
220
|
stages: Record<string, SemanticBuildStage>;
|
|
215
221
|
}
|
|
216
222
|
export interface SemanticBuildDetail {
|
|
@@ -220,16 +226,19 @@ export interface SemanticBuildDetail {
|
|
|
220
226
|
entities: SemanticBuildEntity[];
|
|
221
227
|
}
|
|
222
228
|
export interface SemanticEntityFunction {
|
|
229
|
+
class: string;
|
|
223
230
|
method: string;
|
|
224
231
|
signature: string;
|
|
225
232
|
kind: string;
|
|
226
233
|
summary: string;
|
|
227
234
|
produces: string;
|
|
235
|
+
source: 'model' | 'handler';
|
|
228
236
|
}
|
|
229
237
|
export interface SemanticEntityFunctions {
|
|
230
238
|
entity: string;
|
|
231
239
|
generatedAt: Date | null;
|
|
232
|
-
|
|
240
|
+
modelClass: string | null;
|
|
241
|
+
handlerClass: string | null;
|
|
233
242
|
functions: SemanticEntityFunction[];
|
|
234
243
|
}
|
|
235
244
|
export interface SemanticBuildStatus {
|
|
@@ -7,6 +7,13 @@ export declare function loadGroupOptions(group: ReportFilterGroup, reportData: R
|
|
|
7
7
|
name: string;
|
|
8
8
|
value: unknown;
|
|
9
9
|
}[]>;
|
|
10
|
+
export declare function resolveOptionValues(options$: Observable<{
|
|
11
|
+
name: string;
|
|
12
|
+
value: unknown;
|
|
13
|
+
}[]>, values: unknown[]): Observable<{
|
|
14
|
+
name: string;
|
|
15
|
+
value: unknown;
|
|
16
|
+
}[]>;
|
|
10
17
|
export declare function matchOptions(options$: Observable<{
|
|
11
18
|
name: string;
|
|
12
19
|
value: unknown;
|
|
@@ -94,9 +94,11 @@ export class ComponentListComponent {
|
|
|
94
94
|
name,
|
|
95
95
|
type: ItemType.AutoCompleteChips,
|
|
96
96
|
label,
|
|
97
|
+
// The server sends { value, label }: the filter matches on the value
|
|
98
|
+
// (an entity's stable id) while the viewer reads the label.
|
|
97
99
|
values: () => this._reportData.filterOptions(this.reportId, filter.id)
|
|
98
100
|
.pipe(map((options) => (options ?? [])
|
|
99
|
-
.map((option) => ({ name:
|
|
101
|
+
.map((option) => ({ name: option.label, value: option.value })))),
|
|
100
102
|
};
|
|
101
103
|
case 'keyword':
|
|
102
104
|
default:
|
|
@@ -196,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
196
198
|
type: ViewChild,
|
|
197
199
|
args: [FsListComponent]
|
|
198
200
|
}] } });
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRyxPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7OztBQUd0RiwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLHdFQUF3RTtBQUN4RSx3RUFBd0U7QUFDeEUsK0RBQStEO0FBWS9ELE1BQU0sT0FBTyxzQkFBc0I7SUFFakIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBa0I7SUFDM0IsTUFBTSxDQUFpQztJQUdoRCxhQUFhLENBQWtC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b0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQTVMVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixnTkFNdEIsZUFBZSxnREM3QzVCLGlnQkFrQkEseXlCRGlCSSxRQUFRLDRDQUNSLFlBQVk7OzRGQUdILHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDRSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFFBQVE7d0JBQ1IsWUFBWTtxQkFDYjs4QkFJZSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFHQyxhQUFhO3NCQURuQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZywgRnNMaXN0TW9kdWxlLCBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGEsXG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgTGlzdENvbmZpZyxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXIsXG4gIFJlcG9ydEZpbHRlckdyb3VwLFxuICBSZXNvbHZlZEZpbHRlclZhbHVlLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZGF0ZUJvdW5kU3RyaW5nIH0gZnJvbSAnLi4vLi4vcmVwb3J0LWZpbHRlci1pdGVtcyc7XG5pbXBvcnQgeyBSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXBvcnQtZmlsdGVyLXN0YXRlLnNlcnZpY2UnO1xuXG5cbi8vIEEgbGlzdCBjb21wb25lbnQ6IEZzTGlzdCArIEZzRmlsdGVyIHJlbmRlcmVkIGZyb20gdGhlIGNvbXBvbmVudCdzIGNvbmZpZyBhbmRcbi8vIGl0cyByZXBvcnRfZmlsdGVycyByb3dzLiBUaGUgY29tcG9uZW50J3Mgb3duIGZpbHRlciBiYXIgY2FycmllcyBpdHMgZmlsdGVyc1xuLy8gd2hvc2UgZ3JvdXAgcmVuZGVycyBhdCB0aGUgY29tcG9uZW50IGxldmVsOyByZXBvcnQtbGV2ZWwgZ3JvdXBzIGFwcGx5XG4vLyB0aHJvdWdoIHRoZSBzaGFyZWQgZmlsdGVyLXN0YXRlIHNlcnZpY2UgYW5kIG1lcmdlIGludG8gZXZlcnkgcmVxdWVzdC5cbi8vIFBhZ2luZyBhbmQgc29ydGluZyBhcmUgcHVzaGVkIGludG8gdGhlIFNRTCB3cmFwIHNlcnZlci1zaWRlLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydC1jb21wb25lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wb25lbnQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXBvbmVudC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGF0ZVBpcGUsXG4gICAgRnNMaXN0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBwdWJsaWMgcmVwb3J0SWQ6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50O1xuICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBzOiBNYXA8bnVtYmVyLCBSZXBvcnRGaWx0ZXJHcm91cD47XG5cbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQpXG4gIHB1YmxpYyBsaXN0Q29tcG9uZW50OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgcHVibGljIGxpc3RDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIGNvbHVtbnM6IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyBmb3JtYXQ/OiBzdHJpbmcgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSBfZmlsdGVyU3RhdGUgPSBpbmplY3QoUmVwb3J0RmlsdGVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gKHRoaXMuY29tcG9uZW50LmNvbmZpZyA/PyB7fSkgYXMgTGlzdENvbmZpZztcbiAgICB0aGlzLmNvbHVtbnMgPSBjb25maWcuY29sdW1ucyA/PyBbXTtcblxuICAgIHRoaXMuX2luaXRMaXN0Q29uZmlnKGNvbmZpZyk7XG5cbiAgICAvLyBSZXBvcnQtbGV2ZWwgZmlsdGVyIGNoYW5nZXMgdGhhdCBzY29wZSB0aGlzIGNvbXBvbmVudCByZS1ydW4gdGhlIGxpc3QuXG4gICAgdGhpcy5fZmlsdGVyU3RhdGUuY2hhbmdlc0Zvcih0aGlzLmNvbXBvbmVudClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5saXN0Q29tcG9uZW50Py5yZWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0TGlzdENvbmZpZyhjb25maWc6IExpc3RDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RDb25maWcgPSB7XG4gICAgICAvLyBJbnNpZGUgYSByZXBvcnQgY29tcG9uZW50IHRoZSBsaXN0IGlzIGEgY2xlYW4gZGF0YSBwYW5lIOKAlCBubyBzdGF0dXNcbiAgICAgIC8vIGJhciwgbm8gcmVsb2FkIGJ1dHRvbiAoZmlsdGVyIGNoYW5nZXMgYWxyZWFkeSByZWZldGNoKS5cbiAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gTmV2ZXIgdG91Y2ggdGhlIFVSTCBvciBwZXJzaXN0IGZpbHRlci9wYWdpbmcgc3RhdGUg4oCUIHJlcG9ydCBmaWx0ZXJpbmdcbiAgICAgIC8vIGlzIHNlc3Npb24tb25seS5cbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgcGVyc2lzdDogZmFsc2UsXG4gICAgICBzb3J0OiBjb25maWcuc29ydFxuICAgICAgICA/IHsgdmFsdWU6IGNvbmZpZy5zb3J0LmNvbHVtbiwgZGlyZWN0aW9uOiBjb25maWcuc29ydC5kaXJlY3Rpb24gPz8gJ2FzYycgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIExvYWQtbW9yZTogdGhlIGxpc3Qga2VlcHMgYSBmaXhlZCwgc2Nyb2xsYWJsZSBoZWlnaHQgYW5kIGFwcGVuZHMgdGhlXG4gICAgICAvLyBuZXh0IHBhZ2UgaW4gcGxhY2UgaW5zdGVhZCBvZiBzd2FwcGluZyBwYWdlcy4gVGhlIGJ1dHRvbiBpcyBwaW5uZWQgdG9cbiAgICAgIC8vIHRoZSBib3R0b20gb2YgdGhlIHNjcm9sbCBwYW5lIChzZWUgY29tcG9uZW50IFNDU1MpLlxuICAgICAgLy9cbiAgICAgIC8vIFVzZXMgdGhlIE9mZnNldCBzdHJhdGVneSAob2Zmc2V0ICsgbGltaXQpIHJhdGhlciB0aGFuIE1hbnk6IGluXG4gICAgICAvLyBAZmlyZXN0aXRjaC9saXN0IHRoZSBwYWdpbmF0aW9uIHRlbXBsYXRlIHJlc29sdmVzIGBoYXNNYW55U3RyYXRlZ3lgXG4gICAgICAvLyBCRUZPUkUgYGxvYWRNb3JlRW5hYmxlZGAsIGFuZCBNYW55IHJlbmRlcnMgYSBmb3J3YXJkLW9ubHkgcGFnZSBwYWdlciDigJRcbiAgICAgIC8vIHNvIE1hbnkgd291bGQgc3VwcHJlc3MgdGhlIGxvYWQtbW9yZSBidXR0b24gZW50aXJlbHkuIE9mZnNldCArIGxvYWRNb3JlXG4gICAgICAvLyBpcyB0aGUgY29tYmluYXRpb24gdGhhdCBhY3R1YWxseSByZW5kZXJzIGFuZCBhcHBlbmRzLiBgX2ZldGNoYCBhbHJlYWR5XG4gICAgICAvLyBkZXJpdmVzIGBwYWdlYCBmcm9tIGBvZmZzZXRgLCBzbyB0aGUgc2VydmVyLXNpZGUgd3JhcCBpcyB1bmFmZmVjdGVkLlxuICAgICAgcGFnaW5nOiB7XG4gICAgICAgIGxpbWl0OiBjb25maWcucGFnZVNpemUgPz8gMjUsXG4gICAgICAgIHN0cmF0ZWd5OiBQYWdpbmF0aW9uU3RyYXRlZ3kuT2Zmc2V0LFxuICAgICAgfSxcbiAgICAgIGxvYWRNb3JlOiB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxhYmVsOiAnTG9hZCBtb3JlJyxcbiAgICAgICAgYnV0dG9uVHlwZTogJ3N0cm9rZWQnLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuX293bkZpbHRlcnMoKS5tYXAoKGZpbHRlcikgPT4gdGhpcy5fZmlsdGVySXRlbShmaWx0ZXIpKSxcbiAgICAgIGZldGNoOiAocXVlcnk6IGFueSkgPT4gdGhpcy5fZmV0Y2gocXVlcnkpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsdGVycyB0aGlzIGxpc3QgcmVuZGVycyBpbiBpdHMgb3duIGJhcjogaXRzIHJlcG9ydF9maWx0ZXJzIHdob3NlXG4gIC8vIGdyb3VwIGlzIGNvbXBvbmVudC1sZXZlbC4gUmVwb3J0LWxldmVsIGdyb3VwcyByZW5kZXIgaW4gdGhlIHJlcG9ydCBiYXIuXG4gIHByaXZhdGUgX293bkZpbHRlcnMoKTogUmVwb3J0RmlsdGVyW10ge1xuICAgIHJldHVybiAodGhpcy5jb21wb25lbnQuZmlsdGVycyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5nZXQoZmlsdGVyLmZpbHRlckdyb3VwSWQpO1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZW5hYmxlZCAmJiAoIWdyb3VwIHx8IGdyb3VwLmxldmVsID09PSAnY29tcG9uZW50JyB8fCBncm91cC5sZXZlbCA9PT0gJ2JvdGgnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVySXRlbShmaWx0ZXI6IFJlcG9ydEZpbHRlcik6IGFueSB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZ2V0KGZpbHRlci5maWx0ZXJHcm91cElkKTtcbiAgICBjb25zdCBuYW1lID0gYGYke2ZpbHRlci5pZH1gO1xuICAgIGNvbnN0IGxhYmVsID0gZmlsdGVyLmxhYmVsIHx8IGdyb3VwPy5sYWJlbCB8fCBmaWx0ZXIuZmlsdGVyQ29sdW1uO1xuXG4gICAgc3dpdGNoIChncm91cD8udHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZVJhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkRhdGVSYW5nZSxcbiAgICAgICAgICBsYWJlbDogW2Ake2xhYmVsfSBGcm9tYCwgYCR7bGFiZWx9IFRvYF0sXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5BdXRvQ29tcGxldGVDaGlwcyxcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB2YWx1ZXM6ICgpID0+IHRoaXMuX3JlcG9ydERhdGEuZmlsdGVyT3B0aW9ucyh0aGlzLnJlcG9ydElkLCBmaWx0ZXIuaWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKChvcHRpb25zOiB1bmtub3duW10pID0+IChvcHRpb25zID8/IFtdKVxuICAgICAgICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gKHsgbmFtZTogU3RyaW5nKG9wdGlvbiksIHZhbHVlOiBvcHRpb24gfSkpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ2tleXdvcmQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmV0Y2gocXVlcnk6IGFueSk6IE9ic2VydmFibGU8eyBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdOyBwYWdpbmc6IGFueSB9PiB7XG4gICAgLy8gTWFueS9sb2FkLW1vcmUgc2VuZHMgYG9mZnNldGAgKyBgbGltaXRgIChub3QgYHBhZ2VgKTsgZGVyaXZlIHRoZSBwYWdlIHNvXG4gICAgLy8gdGhlIHNlcnZlci1zaWRlIHdyYXAga2VlcHMgd29ya2luZyB1bmNoYW5nZWQuIFBhZ2Ugc3RyYXRlZ3kgc3RpbGwgc2VuZHNcbiAgICAvLyBgcGFnZWAgZGlyZWN0bHkuXG4gICAgY29uc3QgcGFnZVNpemUgPSBxdWVyeS5saW1pdCA/PyAyNTtcbiAgICBjb25zdCBwYWdlID0gcXVlcnkucGFnZVxuICAgICAgPz8gKHF1ZXJ5Lm9mZnNldCAhPSBudWxsID8gTWF0aC5mbG9vcihxdWVyeS5vZmZzZXQgLyBwYWdlU2l6ZSkgKyAxIDogMSk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0ge1xuICAgICAgcGFnZSxcbiAgICAgIHBhZ2VTaXplLFxuICAgIH07XG5cbiAgICBjb25zdCBvcmRlciA9IFN0cmluZyhxdWVyeS5vcmRlciA/PyAnJyk7XG4gICAgaWYgKG9yZGVyKSB7XG4gICAgICBjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dID0gb3JkZXIuc3BsaXQoJywnKTtcbiAgICAgIHN0YXRlLnNvcnQgPSB7IGNvbHVtbiwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gPT09ICdkZXNjJyA/ICdkZXNjJyA6ICdhc2MnIH07XG4gICAgfVxuXG4gICAgLy8gUmVwb3J0LWxldmVsIHZhbHVlcyBmcm9tIHRoZSBzaGFyZWQgc2Vzc2lvbiBzdGF0ZSwgbWVyZ2VkIHdpdGggdGhpc1xuICAgIC8vIGxpc3QncyBvd24gZmlsdGVyLWJhciB2YWx1ZXMgKG93biB2YWx1ZXMgd2luIHBlciBmaWx0ZXIpLlxuICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IE1hcDxudW1iZXIsIFJlc29sdmVkRmlsdGVyVmFsdWU+KCk7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLl9maWx0ZXJTdGF0ZS5yZXNvbHZlRm9yQ29tcG9uZW50KHRoaXMuY29tcG9uZW50KSkge1xuICAgICAgcmVzb2x2ZWQuc2V0KHZhbHVlLmZpbHRlcklkLCB2YWx1ZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy5fYmFyVmFsdWVzKHF1ZXJ5KSkge1xuICAgICAgcmVzb2x2ZWQuc2V0KHZhbHVlLmZpbHRlcklkLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERhdGFcbiAgICAgIC5jb21wb25lbnREYXRhKHRoaXMucmVwb3J0SWQsIHRoaXMuY29tcG9uZW50LmlkLCBbLi4ucmVzb2x2ZWQudmFsdWVzKCldLCBzdGF0ZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGRhdGE6IENvbXBvbmVudERhdGEpID0+ICh7XG4gICAgICAgICAgZGF0YTogZGF0YS5yb3dzID8/IFtdLFxuICAgICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgbGltaXQ6IGRhdGEucGFnaW5nPy5wYWdlU2l6ZSA/PyBzdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIHJlY29yZHM6IGRhdGEucGFnaW5nPy50b3RhbCA/PyAoZGF0YS5yb3dzPy5sZW5ndGggPz8gMCksXG4gICAgICAgICAgICBwYWdlOiBkYXRhLnBhZ2luZz8ucGFnZSA/PyBzdGF0ZS5wYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBUaGUgbGlzdCdzIG93biBGc0ZpbHRlciB2YWx1ZXMsIHJlYWQgYmFjayBvdXQgb2YgdGhlIGZldGNoIHF1ZXJ5IGJ5IHRoZVxuICAvLyBgZjxmaWx0ZXJJZD5gIG5hbWluZyBjb252ZW50aW9uLlxuICBwcml2YXRlIF9iYXJWYWx1ZXMocXVlcnk6IGFueSk6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSB7XG4gICAgY29uc3QgdmFsdWVzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHRoaXMuX293bkZpbHRlcnMoKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZ2V0KGZpbHRlci5maWx0ZXJHcm91cElkKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBgZiR7ZmlsdGVyLmlkfWA7XG5cbiAgICAgIGlmIChncm91cD8udHlwZSA9PT0gJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgY29uc3QgZnJvbSA9IGRhdGVCb3VuZFN0cmluZyhxdWVyeVtgJHtuYW1lfUZyb21gXSk7XG4gICAgICAgIGNvbnN0IHRvID0gZGF0ZUJvdW5kU3RyaW5nKHF1ZXJ5W2Ake25hbWV9VG9gXSk7XG4gICAgICAgIGlmIChmcm9tIHx8IHRvKSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goeyBmaWx0ZXJJZDogZmlsdGVyLmlkLCBzdGFydDogZnJvbSwgZW5kOiB0byB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChncm91cD8udHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgLy8gZnMtZmlsdGVyIGpvaW5zIGEgbXVsdGktc2VsZWN0IGludG8gb25lIFwiYSxiXCIgc3RyaW5nOyBzcGxpdCBpdCBiYWNrXG4gICAgICAgIC8vIHNvIGVhY2ggdmFsdWUgYmluZHMgc2VwYXJhdGVseSAoZWxzZSBgY29sIElOICgnYSxiJylgIG1hdGNoZXMgbm90aGluZykuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gcXVlcnlbbmFtZV07XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZClcbiAgICAgICAgICA/IHNlbGVjdGVkXG4gICAgICAgICAgOiAoc2VsZWN0ZWQgPyBTdHJpbmcoc2VsZWN0ZWQpLnNwbGl0KCcsJykgOiBbXSk7XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh7IGZpbHRlcklkOiBmaWx0ZXIuaWQsIHZhbHVlczogc2VsZWN0ZWRWYWx1ZXMgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXdvcmQgPSBTdHJpbmcocXVlcnlbbmFtZV0gPz8gJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKGtleXdvcmQpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh7IGZpbHRlcklkOiBmaWx0ZXIuaWQsIHZhbHVlOiBrZXl3b3JkIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxufVxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCI+XG4gIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW4uY29sdW1uKSB7XG4gICAgPGZzLWxpc3QtY29sdW1uXG4gICAgICBbbmFtZV09XCJjb2x1bW4uY29sdW1uXCJcbiAgICAgIFt0aXRsZV09XCJjb2x1bW4ubGFiZWwgfHwgY29sdW1uLmNvbHVtblwiXG4gICAgICBbc29ydGFibGVdPVwidHJ1ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmZvcm1hdCA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAge3sgcm93W2NvbHVtbi5jb2x1bW5dIHwgZGF0ZTogJ21lZGl1bURhdGUnIH19XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IHJvd1tjb2x1bW4uY29sdW1uXSB9fVxuICAgICAgICB9XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gIH1cbjwvZnMtbGlzdD5cbiJdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2NvbXBvbmVudHMvY29tcG9uZW50LWxpc3QvY29tcG9uZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRyxPQUFPLEVBQWMsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVdwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7OztBQUd0RiwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLHdFQUF3RTtBQUN4RSx3RUFBd0U7QUFDeEUsK0RBQStEO0FBWS9ELE1BQU0sT0FBTyxzQkFBc0I7SUFFakIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBa0I7SUFDM0IsTUFBTSxDQUFpQztJQUdoRCxhQUFhLENBQWtC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LENBQUM7Z0JBQ2pELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQTlMVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixnTkFNdEIsZUFBZSxnREM5QzVCLGlnQkFrQkEseXlCRGtCSSxRQUFRLDRDQUNSLFlBQVk7OzRGQUdILHNCQUFzQjtrQkFYbEMsU0FBUzsrQkFDRSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFFBQVE7d0JBQ1IsWUFBWTtxQkFDYjs4QkFJZSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFHQyxhQUFhO3NCQURuQixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZywgRnNMaXN0TW9kdWxlLCBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGEsXG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgTGlzdENvbmZpZyxcbiAgUmVwb3J0Q29tcG9uZW50LFxuICBSZXBvcnRGaWx0ZXIsXG4gIFJlcG9ydEZpbHRlckdyb3VwLFxuICBSZXBvcnRGaWx0ZXJPcHRpb24sXG4gIFJlc29sdmVkRmlsdGVyVmFsdWUsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBkYXRlQm91bmRTdHJpbmcgfSBmcm9tICcuLi8uLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlclN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC1maWx0ZXItc3RhdGUuc2VydmljZSc7XG5cblxuLy8gQSBsaXN0IGNvbXBvbmVudDogRnNMaXN0ICsgRnNGaWx0ZXIgcmVuZGVyZWQgZnJvbSB0aGUgY29tcG9uZW50J3MgY29uZmlnIGFuZFxuLy8gaXRzIHJlcG9ydF9maWx0ZXJzIHJvd3MuIFRoZSBjb21wb25lbnQncyBvd24gZmlsdGVyIGJhciBjYXJyaWVzIGl0cyBmaWx0ZXJzXG4vLyB3aG9zZSBncm91cCByZW5kZXJzIGF0IHRoZSBjb21wb25lbnQgbGV2ZWw7IHJlcG9ydC1sZXZlbCBncm91cHMgYXBwbHlcbi8vIHRocm91Z2ggdGhlIHNoYXJlZCBmaWx0ZXItc3RhdGUgc2VydmljZSBhbmQgbWVyZ2UgaW50byBldmVyeSByZXF1ZXN0LlxuLy8gUGFnaW5nIGFuZCBzb3J0aW5nIGFyZSBwdXNoZWQgaW50byB0aGUgU1FMIHdyYXAgc2VydmVyLXNpZGUuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmVwb3J0LWNvbXBvbmVudC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBvbmVudC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tcG9uZW50LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBEYXRlUGlwZSxcbiAgICBGc0xpc3RNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHB1YmxpYyByZXBvcnRJZDogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBncm91cHM6IE1hcDxudW1iZXIsIFJlcG9ydEZpbHRlckdyb3VwPjtcblxuICBAVmlld0NoaWxkKEZzTGlzdENvbXBvbmVudClcbiAgcHVibGljIGxpc3RDb21wb25lbnQ6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgbGlzdENvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgY29sdW1uczogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGZvcm1hdD86IHN0cmluZyB9W10gPSBbXTtcblxuICBwcml2YXRlIF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIF9maWx0ZXJTdGF0ZSA9IGluamVjdChSZXBvcnRGaWx0ZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSAodGhpcy5jb21wb25lbnQuY29uZmlnID8/IHt9KSBhcyBMaXN0Q29uZmlnO1xuICAgIHRoaXMuY29sdW1ucyA9IGNvbmZpZy5jb2x1bW5zID8/IFtdO1xuXG4gICAgdGhpcy5faW5pdExpc3RDb25maWcoY29uZmlnKTtcblxuICAgIC8vIFJlcG9ydC1sZXZlbCBmaWx0ZXIgY2hhbmdlcyB0aGF0IHNjb3BlIHRoaXMgY29tcG9uZW50IHJlLXJ1biB0aGUgbGlzdC5cbiAgICB0aGlzLl9maWx0ZXJTdGF0ZS5jaGFuZ2VzRm9yKHRoaXMuY29tcG9uZW50KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxpc3RDb21wb25lbnQ/LnJlbG9hZCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRMaXN0Q29uZmlnKGNvbmZpZzogTGlzdENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMubGlzdENvbmZpZyA9IHtcbiAgICAgIC8vIEluc2lkZSBhIHJlcG9ydCBjb21wb25lbnQgdGhlIGxpc3QgaXMgYSBjbGVhbiBkYXRhIHBhbmUg4oCUIG5vIHN0YXR1c1xuICAgICAgLy8gYmFyLCBubyByZWxvYWQgYnV0dG9uIChmaWx0ZXIgY2hhbmdlcyBhbHJlYWR5IHJlZmV0Y2gpLlxuICAgICAgc3RhdHVzOiBmYWxzZSxcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBOZXZlciB0b3VjaCB0aGUgVVJMIG9yIHBlcnNpc3QgZmlsdGVyL3BhZ2luZyBzdGF0ZSDigJQgcmVwb3J0IGZpbHRlcmluZ1xuICAgICAgLy8gaXMgc2Vzc2lvbi1vbmx5LlxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBwZXJzaXN0OiBmYWxzZSxcbiAgICAgIHNvcnQ6IGNvbmZpZy5zb3J0XG4gICAgICAgID8geyB2YWx1ZTogY29uZmlnLnNvcnQuY29sdW1uLCBkaXJlY3Rpb246IGNvbmZpZy5zb3J0LmRpcmVjdGlvbiA/PyAnYXNjJyB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgLy8gTG9hZC1tb3JlOiB0aGUgbGlzdCBrZWVwcyBhIGZpeGVkLCBzY3JvbGxhYmxlIGhlaWdodCBhbmQgYXBwZW5kcyB0aGVcbiAgICAgIC8vIG5leHQgcGFnZSBpbiBwbGFjZSBpbnN0ZWFkIG9mIHN3YXBwaW5nIHBhZ2VzLiBUaGUgYnV0dG9uIGlzIHBpbm5lZCB0b1xuICAgICAgLy8gdGhlIGJvdHRvbSBvZiB0aGUgc2Nyb2xsIHBhbmUgKHNlZSBjb21wb25lbnQgU0NTUykuXG4gICAgICAvL1xuICAgICAgLy8gVXNlcyB0aGUgT2Zmc2V0IHN0cmF0ZWd5IChvZmZzZXQgKyBsaW1pdCkgcmF0aGVyIHRoYW4gTWFueTogaW5cbiAgICAgIC8vIEBmaXJlc3RpdGNoL2xpc3QgdGhlIHBhZ2luYXRpb24gdGVtcGxhdGUgcmVzb2x2ZXMgYGhhc01hbnlTdHJhdGVneWBcbiAgICAgIC8vIEJFRk9SRSBgbG9hZE1vcmVFbmFibGVkYCwgYW5kIE1hbnkgcmVuZGVycyBhIGZvcndhcmQtb25seSBwYWdlIHBhZ2VyIOKAlFxuICAgICAgLy8gc28gTWFueSB3b3VsZCBzdXBwcmVzcyB0aGUgbG9hZC1tb3JlIGJ1dHRvbiBlbnRpcmVseS4gT2Zmc2V0ICsgbG9hZE1vcmVcbiAgICAgIC8vIGlzIHRoZSBjb21iaW5hdGlvbiB0aGF0IGFjdHVhbGx5IHJlbmRlcnMgYW5kIGFwcGVuZHMuIGBfZmV0Y2hgIGFscmVhZHlcbiAgICAgIC8vIGRlcml2ZXMgYHBhZ2VgIGZyb20gYG9mZnNldGAsIHNvIHRoZSBzZXJ2ZXItc2lkZSB3cmFwIGlzIHVuYWZmZWN0ZWQuXG4gICAgICBwYWdpbmc6IHtcbiAgICAgICAgbGltaXQ6IGNvbmZpZy5wYWdlU2l6ZSA/PyAyNSxcbiAgICAgICAgc3RyYXRlZ3k6IFBhZ2luYXRpb25TdHJhdGVneS5PZmZzZXQsXG4gICAgICB9LFxuICAgICAgbG9hZE1vcmU6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbGFiZWw6ICdMb2FkIG1vcmUnLFxuICAgICAgICBidXR0b25UeXBlOiAnc3Ryb2tlZCcsXG4gICAgICB9LFxuICAgICAgZmlsdGVyczogdGhpcy5fb3duRmlsdGVycygpLm1hcCgoZmlsdGVyKSA9PiB0aGlzLl9maWx0ZXJJdGVtKGZpbHRlcikpLFxuICAgICAgZmV0Y2g6IChxdWVyeTogYW55KSA9PiB0aGlzLl9mZXRjaChxdWVyeSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBmaWx0ZXJzIHRoaXMgbGlzdCByZW5kZXJzIGluIGl0cyBvd24gYmFyOiBpdHMgcmVwb3J0X2ZpbHRlcnMgd2hvc2VcbiAgLy8gZ3JvdXAgaXMgY29tcG9uZW50LWxldmVsLiBSZXBvcnQtbGV2ZWwgZ3JvdXBzIHJlbmRlciBpbiB0aGUgcmVwb3J0IGJhci5cbiAgcHJpdmF0ZSBfb3duRmlsdGVycygpOiBSZXBvcnRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuICh0aGlzLmNvbXBvbmVudC5maWx0ZXJzID8/IFtdKVxuICAgICAgLmZpbHRlcigoZmlsdGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHM/LmdldChmaWx0ZXIuZmlsdGVyR3JvdXBJZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlci5lbmFibGVkICYmICghZ3JvdXAgfHwgZ3JvdXAubGV2ZWwgPT09ICdjb21wb25lbnQnIHx8IGdyb3VwLmxldmVsID09PSAnYm90aCcpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXJJdGVtKGZpbHRlcjogUmVwb3J0RmlsdGVyKTogYW55IHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5nZXQoZmlsdGVyLmZpbHRlckdyb3VwSWQpO1xuICAgIGNvbnN0IG5hbWUgPSBgZiR7ZmlsdGVyLmlkfWA7XG4gICAgY29uc3QgbGFiZWwgPSBmaWx0ZXIubGFiZWwgfHwgZ3JvdXA/LmxhYmVsIHx8IGZpbHRlci5maWx0ZXJDb2x1bW47XG5cbiAgICBzd2l0Y2ggKGdyb3VwPy50eXBlKSB7XG4gICAgICBjYXNlICdkYXRlUmFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuRGF0ZVJhbmdlLFxuICAgICAgICAgIGxhYmVsOiBbYCR7bGFiZWx9IEZyb21gLCBgJHtsYWJlbH0gVG9gXSxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkF1dG9Db21wbGV0ZUNoaXBzLFxuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgc2VuZHMgeyB2YWx1ZSwgbGFiZWwgfTogdGhlIGZpbHRlciBtYXRjaGVzIG9uIHRoZSB2YWx1ZVxuICAgICAgICAgIC8vIChhbiBlbnRpdHkncyBzdGFibGUgaWQpIHdoaWxlIHRoZSB2aWV3ZXIgcmVhZHMgdGhlIGxhYmVsLlxuICAgICAgICAgIHZhbHVlczogKCkgPT4gdGhpcy5fcmVwb3J0RGF0YS5maWx0ZXJPcHRpb25zKHRoaXMucmVwb3J0SWQsIGZpbHRlci5pZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBtYXAoKG9wdGlvbnM6IFJlcG9ydEZpbHRlck9wdGlvbltdKSA9PiAob3B0aW9ucyA/PyBbXSlcbiAgICAgICAgICAgICAgICAubWFwKChvcHRpb24pID0+ICh7IG5hbWU6IG9wdGlvbi5sYWJlbCwgdmFsdWU6IG9wdGlvbi52YWx1ZSB9KSkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAna2V5d29yZCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuS2V5d29yZCxcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9mZXRjaChxdWVyeTogYW55KTogT2JzZXJ2YWJsZTx7IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107IHBhZ2luZzogYW55IH0+IHtcbiAgICAvLyBNYW55L2xvYWQtbW9yZSBzZW5kcyBgb2Zmc2V0YCArIGBsaW1pdGAgKG5vdCBgcGFnZWApOyBkZXJpdmUgdGhlIHBhZ2Ugc29cbiAgICAvLyB0aGUgc2VydmVyLXNpZGUgd3JhcCBrZWVwcyB3b3JraW5nIHVuY2hhbmdlZC4gUGFnZSBzdHJhdGVneSBzdGlsbCBzZW5kc1xuICAgIC8vIGBwYWdlYCBkaXJlY3RseS5cbiAgICBjb25zdCBwYWdlU2l6ZSA9IHF1ZXJ5LmxpbWl0ID8/IDI1O1xuICAgIGNvbnN0IHBhZ2UgPSBxdWVyeS5wYWdlXG4gICAgICA/PyAocXVlcnkub2Zmc2V0ICE9IG51bGwgPyBNYXRoLmZsb29yKHF1ZXJ5Lm9mZnNldCAvIHBhZ2VTaXplKSArIDEgOiAxKTtcblxuICAgIGNvbnN0IHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUgPSB7XG4gICAgICBwYWdlLFxuICAgICAgcGFnZVNpemUsXG4gICAgfTtcblxuICAgIGNvbnN0IG9yZGVyID0gU3RyaW5nKHF1ZXJ5Lm9yZGVyID8/ICcnKTtcbiAgICBpZiAob3JkZXIpIHtcbiAgICAgIGNvbnN0IFtjb2x1bW4sIGRpcmVjdGlvbl0gPSBvcmRlci5zcGxpdCgnLCcpO1xuICAgICAgc3RhdGUuc29ydCA9IHsgY29sdW1uLCBkaXJlY3Rpb246IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycgfTtcbiAgICB9XG5cbiAgICAvLyBSZXBvcnQtbGV2ZWwgdmFsdWVzIGZyb20gdGhlIHNoYXJlZCBzZXNzaW9uIHN0YXRlLCBtZXJnZWQgd2l0aCB0aGlzXG4gICAgLy8gbGlzdCdzIG93biBmaWx0ZXItYmFyIHZhbHVlcyAob3duIHZhbHVlcyB3aW4gcGVyIGZpbHRlcikuXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgTWFwPG51bWJlciwgUmVzb2x2ZWRGaWx0ZXJWYWx1ZT4oKTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMuX2ZpbHRlclN0YXRlLnJlc29sdmVGb3JDb21wb25lbnQodGhpcy5jb21wb25lbnQpKSB7XG4gICAgICByZXNvbHZlZC5zZXQodmFsdWUuZmlsdGVySWQsIHZhbHVlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLl9iYXJWYWx1ZXMocXVlcnkpKSB7XG4gICAgICByZXNvbHZlZC5zZXQodmFsdWUuZmlsdGVySWQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YVxuICAgICAgLmNvbXBvbmVudERhdGEodGhpcy5yZXBvcnRJZCwgdGhpcy5jb21wb25lbnQuaWQsIFsuLi5yZXNvbHZlZC52YWx1ZXMoKV0sIHN0YXRlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogQ29tcG9uZW50RGF0YSkgPT4gKHtcbiAgICAgICAgICBkYXRhOiBkYXRhLnJvd3MgPz8gW10sXG4gICAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICBsaW1pdDogZGF0YS5wYWdpbmc/LnBhZ2VTaXplID8/IHN0YXRlLnBhZ2VTaXplLFxuICAgICAgICAgICAgcmVjb3JkczogZGF0YS5wYWdpbmc/LnRvdGFsID8/IChkYXRhLnJvd3M/Lmxlbmd0aCA/PyAwKSxcbiAgICAgICAgICAgIHBhZ2U6IGRhdGEucGFnaW5nPy5wYWdlID8/IHN0YXRlLnBhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBsaXN0J3Mgb3duIEZzRmlsdGVyIHZhbHVlcywgcmVhZCBiYWNrIG91dCBvZiB0aGUgZmV0Y2ggcXVlcnkgYnkgdGhlXG4gIC8vIGBmPGZpbHRlcklkPmAgbmFtaW5nIGNvbnZlbnRpb24uXG4gIHByaXZhdGUgX2JhclZhbHVlcyhxdWVyeTogYW55KTogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdIHtcbiAgICBjb25zdCB2YWx1ZXM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5fb3duRmlsdGVycygpKSB7XG4gICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5nZXQoZmlsdGVyLmZpbHRlckdyb3VwSWQpO1xuICAgICAgY29uc3QgbmFtZSA9IGBmJHtmaWx0ZXIuaWR9YDtcblxuICAgICAgaWYgKGdyb3VwPy50eXBlID09PSAnZGF0ZVJhbmdlJykge1xuICAgICAgICBjb25zdCBmcm9tID0gZGF0ZUJvdW5kU3RyaW5nKHF1ZXJ5W2Ake25hbWV9RnJvbWBdKTtcbiAgICAgICAgY29uc3QgdG8gPSBkYXRlQm91bmRTdHJpbmcocXVlcnlbYCR7bmFtZX1Ub2BdKTtcbiAgICAgICAgaWYgKGZyb20gfHwgdG8pIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaCh7IGZpbHRlcklkOiBmaWx0ZXIuaWQsIHN0YXJ0OiBmcm9tLCBlbmQ6IHRvIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGdyb3VwPy50eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICAvLyBmcy1maWx0ZXIgam9pbnMgYSBtdWx0aS1zZWxlY3QgaW50byBvbmUgXCJhLGJcIiBzdHJpbmc7IHNwbGl0IGl0IGJhY2tcbiAgICAgICAgLy8gc28gZWFjaCB2YWx1ZSBiaW5kcyBzZXBhcmF0ZWx5IChlbHNlIGBjb2wgSU4gKCdhLGInKWAgbWF0Y2hlcyBub3RoaW5nKS5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBxdWVyeVtuYW1lXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkKVxuICAgICAgICAgID8gc2VsZWN0ZWRcbiAgICAgICAgICA6IChzZWxlY3RlZCA/IFN0cmluZyhzZWxlY3RlZCkuc3BsaXQoJywnKSA6IFtdKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHsgZmlsdGVySWQ6IGZpbHRlci5pZCwgdmFsdWVzOiBzZWxlY3RlZFZhbHVlcyB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5d29yZCA9IFN0cmluZyhxdWVyeVtuYW1lXSA/PyAnJykudHJpbSgpO1xuICAgICAgICBpZiAoa2V5d29yZCkge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHsgZmlsdGVySWQ6IGZpbHRlci5pZCwgdmFsdWU6IGtleXdvcmQgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG59XG4iLCI8ZnMtbGlzdCBbY29uZmlnXT1cImxpc3RDb25maWdcIj5cbiAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbi5jb2x1bW4pIHtcbiAgICA8ZnMtbGlzdC1jb2x1bW5cbiAgICAgIFtuYW1lXT1cImNvbHVtbi5jb2x1bW5cIlxuICAgICAgW3RpdGxlXT1cImNvbHVtbi5sYWJlbCB8fCBjb2x1bW4uY29sdW1uXCJcbiAgICAgIFtzb3J0YWJsZV09XCJ0cnVlXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgQGlmIChjb2x1bW4uZm9ybWF0ID09PSAnZGF0ZScpIHtcbiAgICAgICAgICB7eyByb3dbY29sdW1uLmNvbHVtbl0gfCBkYXRlOiAnbWVkaXVtRGF0ZScgfX1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAge3sgcm93W2NvbHVtbi5jb2x1bW5dIH19XG4gICAgICAgIH1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgfVxuPC9mcy1saXN0PlxuIl19
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { MatButton } from '@angular/material/button';
|
|
4
|
+
import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent } from '@angular/material/dialog';
|
|
5
|
+
import { FsChipModule } from '@firestitch/chip';
|
|
6
|
+
import { FsDateModule } from '@firestitch/date';
|
|
7
|
+
import { FsDialogModule } from '@firestitch/dialog';
|
|
8
|
+
import { FsSkeletonModule } from '@firestitch/skeleton';
|
|
9
|
+
import { ReportData } from '../../data/report.data';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@firestitch/chip";
|
|
12
|
+
import * as i2 from "@firestitch/date";
|
|
13
|
+
import * as i3 from "@firestitch/dialog";
|
|
14
|
+
import * as i4 from "@firestitch/skeleton";
|
|
15
|
+
// One group of an entity's AI-classified cached code functions — the model
|
|
16
|
+
// class's or the handler class's, per the source it was opened for. Fetched on
|
|
17
|
+
// open from the shared per-entity endpoint (one payload carries both groups,
|
|
18
|
+
// each row tagged with its source) and filtered client-side.
|
|
19
|
+
export class EntityFunctionsComponent {
|
|
20
|
+
// One color per AI classification kind, so a function's nature reads at a glance.
|
|
21
|
+
static KIND_COLORS = {
|
|
22
|
+
'calculation': '#1565c0',
|
|
23
|
+
'business-rule': '#6a1b9a',
|
|
24
|
+
'query': '#00695c',
|
|
25
|
+
'mutation': '#e65100',
|
|
26
|
+
'accessor': '#546e7a',
|
|
27
|
+
'other': '#757575',
|
|
28
|
+
};
|
|
29
|
+
// Interesting logic first: derived values and rules, then data access, then the rest.
|
|
30
|
+
static KIND_ORDER = ['calculation', 'business-rule', 'query', 'mutation', 'accessor', 'other'];
|
|
31
|
+
_data = inject(MAT_DIALOG_DATA);
|
|
32
|
+
entityKey = this._data.entityKey;
|
|
33
|
+
sourceLabel = this._data.source === 'model' ? 'Model functions' : 'Handler functions';
|
|
34
|
+
// null until loaded — gates the list behind the skeleton.
|
|
35
|
+
entityFunctions = signal(null);
|
|
36
|
+
// The class this group's functions were discovered from.
|
|
37
|
+
discoveredClass = computed(() => {
|
|
38
|
+
const loaded = this.entityFunctions();
|
|
39
|
+
return this._data.source === 'model' ? loaded?.modelClass : loaded?.handlerClass;
|
|
40
|
+
});
|
|
41
|
+
// This group's functions, ordered by kind priority then method name.
|
|
42
|
+
functions = computed(() => this._sortFunctions((this.entityFunctions()?.functions ?? [])
|
|
43
|
+
.filter((fn) => fn.source === this._data.source)));
|
|
44
|
+
constructor() {
|
|
45
|
+
inject(ReportData).semanticEntityFunctions(this._data.entityKey)
|
|
46
|
+
.pipe(takeUntilDestroyed())
|
|
47
|
+
.subscribe((entityFunctions) => {
|
|
48
|
+
this.entityFunctions.set(entityFunctions);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
kindColor(kind) {
|
|
52
|
+
return EntityFunctionsComponent.KIND_COLORS[kind] ?? EntityFunctionsComponent.KIND_COLORS.other;
|
|
53
|
+
}
|
|
54
|
+
_sortFunctions(functions) {
|
|
55
|
+
return [...functions]
|
|
56
|
+
.sort((a, b) => {
|
|
57
|
+
const kindDiff = this._kindRank(a.kind) - this._kindRank(b.kind);
|
|
58
|
+
return kindDiff !== 0 ? kindDiff : a.method.localeCompare(b.method);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
_kindRank(kind) {
|
|
62
|
+
const rank = EntityFunctionsComponent.KIND_ORDER.indexOf(kind);
|
|
63
|
+
return rank === -1 ? EntityFunctionsComponent.KIND_ORDER.length : rank;
|
|
64
|
+
}
|
|
65
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EntityFunctionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
66
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: EntityFunctionsComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <fs-dialog-title>\n {{ entityKey }} \u2014 {{ sourceLabel }}\n </fs-dialog-title>\n <mat-dialog-content>\n <div *fsSkeleton=\"entityFunctions()\">\n @if (entityFunctions(); as fns) {\n @if (functions().length) {\n @if (fns.generatedAt) {\n <div class=\"hint functions-generated\">\n Discovered from {{ discoveredClass() }} ·\n <fs-date\n [date]=\"fns.generatedAt\"\n format=\"date-time\">\n </fs-date>\n </div>\n }\n <div class=\"functions-list\">\n @for (fn of functions(); track fn.class + '::' + fn.method) {\n <div class=\"function-row\">\n <div class=\"function-head\">\n <fs-chip\n size=\"tiny\"\n [backgroundColor]=\"kindColor(fn.kind)\"\n color=\"#ffffff\">\n {{ fn.kind }}\n </fs-chip>\n <code class=\"function-method\">{{ fn.method }}</code>\n </div>\n <div class=\"function-summary\">{{ fn.summary }}</div>\n @if (fn.produces) {\n <div class=\"function-produces hint\">Produces: {{ fn.produces }}</div>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"hint\">\n No functions cached for this entity yet \u2014 run a build to discover its code.\n </div>\n }\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".hint{margin:0;color:#0009;font-size:13px;line-height:1.5}.functions-generated{margin-bottom:10px}.functions-list{display:flex;flex-direction:column}.functions-list .function-row{display:flex;flex-direction:column;gap:3px;padding:10px 0}.functions-list .function-row+.function-row{border-top:1px solid rgba(0,0,0,.08)}.functions-list .function-row .function-head{display:flex;align-items:center;gap:8px}.functions-list .function-row .function-method{font-family:monospace;font-size:13px;font-weight:600}.functions-list .function-row .function-summary{color:#000000bf}.functions-list .function-row .function-produces{padding-left:10px}\n"], dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: FsChipModule }, { kind: "component", type: i1.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "value", "maxWidth", "width", "backgroundColor", "borderColor", "color", "shape", "outlined", "outlineDash", "icon", "image", "selected", "disabled", "padding", "contrastColor", "size"], outputs: ["selectedToggled", "removed", "click"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "component", type: i2.FsDateComponent, selector: "fs-date", inputs: ["date", "format", "timezone"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i3.FsDialogTitleComponent, selector: "fs-dialog-title", inputs: ["close", "dockToggle", "back"] }, { kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i4.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
67
|
+
}
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EntityFunctionsComponent, decorators: [{
|
|
69
|
+
type: Component,
|
|
70
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
71
|
+
MatButton,
|
|
72
|
+
MatDialogContent,
|
|
73
|
+
MatDialogActions,
|
|
74
|
+
MatDialogClose,
|
|
75
|
+
FsChipModule,
|
|
76
|
+
FsDateModule,
|
|
77
|
+
FsDialogModule,
|
|
78
|
+
FsSkeletonModule,
|
|
79
|
+
], template: "<fs-dialog>\n <fs-dialog-title>\n {{ entityKey }} \u2014 {{ sourceLabel }}\n </fs-dialog-title>\n <mat-dialog-content>\n <div *fsSkeleton=\"entityFunctions()\">\n @if (entityFunctions(); as fns) {\n @if (functions().length) {\n @if (fns.generatedAt) {\n <div class=\"hint functions-generated\">\n Discovered from {{ discoveredClass() }} ·\n <fs-date\n [date]=\"fns.generatedAt\"\n format=\"date-time\">\n </fs-date>\n </div>\n }\n <div class=\"functions-list\">\n @for (fn of functions(); track fn.class + '::' + fn.method) {\n <div class=\"function-row\">\n <div class=\"function-head\">\n <fs-chip\n size=\"tiny\"\n [backgroundColor]=\"kindColor(fn.kind)\"\n color=\"#ffffff\">\n {{ fn.kind }}\n </fs-chip>\n <code class=\"function-method\">{{ fn.method }}</code>\n </div>\n <div class=\"function-summary\">{{ fn.summary }}</div>\n @if (fn.produces) {\n <div class=\"function-produces hint\">Produces: {{ fn.produces }}</div>\n }\n </div>\n }\n </div>\n } @else {\n <div class=\"hint\">\n No functions cached for this entity yet \u2014 run a build to discover its code.\n </div>\n }\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".hint{margin:0;color:#0009;font-size:13px;line-height:1.5}.functions-generated{margin-bottom:10px}.functions-list{display:flex;flex-direction:column}.functions-list .function-row{display:flex;flex-direction:column;gap:3px;padding:10px 0}.functions-list .function-row+.function-row{border-top:1px solid rgba(0,0,0,.08)}.functions-list .function-row .function-head{display:flex;align-items:center;gap:8px}.functions-list .function-row .function-method{font-family:monospace;font-size:13px;font-weight:600}.functions-list .function-row .function-summary{color:#000000bf}.functions-list .function-row .function-produces{padding-left:10px}\n"] }]
|
|
80
|
+
}], ctorParameters: () => [] });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWZ1bmN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGlhbG9ncy9lbnRpdHktZnVuY3Rpb25zL2VudGl0eS1mdW5jdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvZW50aXR5LWZ1bmN0aW9ucy9lbnRpdHktZnVuY3Rpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFhcEQsMkVBQTJFO0FBQzNFLCtFQUErRTtBQUMvRSw2RUFBNkU7QUFDN0UsNkRBQTZEO0FBaUI3RCxNQUFNLE9BQU8sd0JBQXdCO0lBRW5DLGtGQUFrRjtJQUMxRSxNQUFNLENBQVUsV0FBVyxHQUEyQjtRQUM1RCxhQUFhLEVBQUUsU0FBUztRQUN4Qixl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QztJQUN6RSxDQUFDO3dHQS9EVSx3QkFBd0I7NEZBQXhCLHdCQUF3Qix3RUM1Q3JDLG95REFzREEsc3JCRHBCSSxTQUFTLGlMQUNULGdCQUFnQix5R0FDaEIsZ0JBQWdCLDRIQUNoQixjQUFjLG9MQUNkLFlBQVkscVhBQ1osWUFBWSw0SUFDWixjQUFjLDhUQUNkLGdCQUFnQjs7NEZBR1Asd0JBQXdCO2tCQWhCcEMsU0FBUztzQ0FHUyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixjQUFjO3dCQUNkLGdCQUFnQjtxQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc0NoaXBNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jaGlwJztcbmltcG9ydCB7IEZzRGF0ZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RhdGUnO1xuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kaWFsb2cnO1xuaW1wb3J0IHsgRnNTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NrZWxldG9uJztcblxuaW1wb3J0IHsgUmVwb3J0RGF0YSB9IGZyb20gJy4uLy4uL2RhdGEvcmVwb3J0LmRhdGEnO1xuaW1wb3J0IHtcbiAgU2VtYW50aWNFbnRpdHlGdW5jdGlvbixcbiAgU2VtYW50aWNFbnRpdHlGdW5jdGlvbnMsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlGdW5jdGlvbnNEaWFsb2dEYXRhIHtcbiAgZW50aXR5S2V5OiBzdHJpbmc7XG4gIHNvdXJjZTogJ21vZGVsJyB8ICdoYW5kbGVyJztcbn1cblxuXG4vLyBPbmUgZ3JvdXAgb2YgYW4gZW50aXR5J3MgQUktY2xhc3NpZmllZCBjYWNoZWQgY29kZSBmdW5jdGlvbnMg4oCUIHRoZSBtb2RlbFxuLy8gY2xhc3MncyBvciB0aGUgaGFuZGxlciBjbGFzcydzLCBwZXIgdGhlIHNvdXJjZSBpdCB3YXMgb3BlbmVkIGZvci4gRmV0Y2hlZCBvblxuLy8gb3BlbiBmcm9tIHRoZSBzaGFyZWQgcGVyLWVudGl0eSBlbmRwb2ludCAob25lIHBheWxvYWQgY2FycmllcyBib3RoIGdyb3Vwcyxcbi8vIGVhY2ggcm93IHRhZ2dlZCB3aXRoIGl0cyBzb3VyY2UpIGFuZCBmaWx0ZXJlZCBjbGllbnQtc2lkZS5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LWZ1bmN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VudGl0eS1mdW5jdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIEZzQ2hpcE1vZHVsZSxcbiAgICBGc0RhdGVNb2R1bGUsXG4gICAgRnNEaWFsb2dNb2R1bGUsXG4gICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRW50aXR5RnVuY3Rpb25zQ29tcG9uZW50IHtcblxuICAvLyBPbmUgY29sb3IgcGVyIEFJIGNsYXNzaWZpY2F0aW9uIGtpbmQsIHNvIGEgZnVuY3Rpb24ncyBuYXR1cmUgcmVhZHMgYXQgYSBnbGFuY2UuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEtJTkRfQ09MT1JTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICdjYWxjdWxhdGlvbic6ICcjMTU2NWMwJyxcbiAgICAnYnVzaW5lc3MtcnVsZSc6ICcjNmExYjlhJyxcbiAgICAncXVlcnknOiAnIzAwNjk1YycsXG4gICAgJ211dGF0aW9uJzogJyNlNjUxMDAnLFxuICAgICdhY2Nlc3Nvcic6ICcjNTQ2ZTdhJyxcbiAgICAnb3RoZXInOiAnIzc1NzU3NScsXG4gIH07XG5cbiAgLy8gSW50ZXJlc3RpbmcgbG9naWMgZmlyc3Q6IGRlcml2ZWQgdmFsdWVzIGFuZCBydWxlcywgdGhlbiBkYXRhIGFjY2VzcywgdGhlbiB0aGUgcmVzdC5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgS0lORF9PUkRFUiA9IFsnY2FsY3VsYXRpb24nLCAnYnVzaW5lc3MtcnVsZScsICdxdWVyeScsICdtdXRhdGlvbicsICdhY2Nlc3NvcicsICdvdGhlciddO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBpbmplY3Q8RW50aXR5RnVuY3Rpb25zRGlhbG9nRGF0YT4oTUFUX0RJQUxPR19EQVRBKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5S2V5ID0gdGhpcy5fZGF0YS5lbnRpdHlLZXk7XG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VMYWJlbCA9IHRoaXMuX2RhdGEuc291cmNlID09PSAnbW9kZWwnID8gJ01vZGVsIGZ1bmN0aW9ucycgOiAnSGFuZGxlciBmdW5jdGlvbnMnO1xuXG4gIC8vIG51bGwgdW50aWwgbG9hZGVkIOKAlCBnYXRlcyB0aGUgbGlzdCBiZWhpbmQgdGhlIHNrZWxldG9uLlxuICBwdWJsaWMgcmVhZG9ubHkgZW50aXR5RnVuY3Rpb25zID0gc2lnbmFsPFNlbWFudGljRW50aXR5RnVuY3Rpb25zIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gVGhlIGNsYXNzIHRoaXMgZ3JvdXAncyBmdW5jdGlvbnMgd2VyZSBkaXNjb3ZlcmVkIGZyb20uXG4gIHB1YmxpYyByZWFkb25seSBkaXNjb3ZlcmVkQ2xhc3MgPSBjb21wdXRlZDxzdHJpbmcgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gdGhpcy5lbnRpdHlGdW5jdGlvbnMoKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhLnNvdXJjZSA9PT0gJ21vZGVsJyA/IGxvYWRlZD8ubW9kZWxDbGFzcyA6IGxvYWRlZD8uaGFuZGxlckNsYXNzO1xuICB9KTtcblxuICAvLyBUaGlzIGdyb3VwJ3MgZnVuY3Rpb25zLCBvcmRlcmVkIGJ5IGtpbmQgcHJpb3JpdHkgdGhlbiBtZXRob2QgbmFtZS5cbiAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9ucyA9IGNvbXB1dGVkPFNlbWFudGljRW50aXR5RnVuY3Rpb25bXT4oKCkgPT5cbiAgICB0aGlzLl9zb3J0RnVuY3Rpb25zKFxuICAgICAgKHRoaXMuZW50aXR5RnVuY3Rpb25zKCk/LmZ1bmN0aW9ucyA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigoZm4pID0+IGZuLnNvdXJjZSA9PT0gdGhpcy5fZGF0YS5zb3VyY2UpLFxuICAgICksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaW5qZWN0KFJlcG9ydERhdGEpLnNlbWFudGljRW50aXR5RnVuY3Rpb25zKHRoaXMuX2RhdGEuZW50aXR5S2V5KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChlbnRpdHlGdW5jdGlvbnM6IFNlbWFudGljRW50aXR5RnVuY3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuZW50aXR5RnVuY3Rpb25zLnNldChlbnRpdHlGdW5jdGlvbnMpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMga2luZENvbG9yKGtpbmQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEVudGl0eUZ1bmN0aW9uc0NvbXBvbmVudC5LSU5EX0NPTE9SU1traW5kXSA/PyBFbnRpdHlGdW5jdGlvbnNDb21wb25lbnQuS0lORF9DT0xPUlMub3RoZXI7XG4gIH1cblxuICBwcml2YXRlIF9zb3J0RnVuY3Rpb25zKGZ1bmN0aW9uczogU2VtYW50aWNFbnRpdHlGdW5jdGlvbltdKTogU2VtYW50aWNFbnRpdHlGdW5jdGlvbltdIHtcbiAgICByZXR1cm4gWy4uLmZ1bmN0aW9uc11cbiAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGtpbmREaWZmID0gdGhpcy5fa2luZFJhbmsoYS5raW5kKSAtIHRoaXMuX2tpbmRSYW5rKGIua2luZCk7XG5cbiAgICAgICAgcmV0dXJuIGtpbmREaWZmICE9PSAwID8ga2luZERpZmYgOiBhLm1ldGhvZC5sb2NhbGVDb21wYXJlKGIubWV0aG9kKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfa2luZFJhbmsoa2luZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCByYW5rID0gRW50aXR5RnVuY3Rpb25zQ29tcG9uZW50LktJTkRfT1JERVIuaW5kZXhPZihraW5kKTtcblxuICAgIHJldHVybiByYW5rID09PSAtMSA/IEVudGl0eUZ1bmN0aW9uc0NvbXBvbmVudC5LSU5EX09SREVSLmxlbmd0aCA6IHJhbms7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2c+XG4gIDxmcy1kaWFsb2ctdGl0bGU+XG4gICAge3sgZW50aXR5S2V5IH19IOKAlCB7eyBzb3VyY2VMYWJlbCB9fVxuICA8L2ZzLWRpYWxvZy10aXRsZT5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2ICpmc1NrZWxldG9uPVwiZW50aXR5RnVuY3Rpb25zKClcIj5cbiAgICAgIEBpZiAoZW50aXR5RnVuY3Rpb25zKCk7IGFzIGZucykge1xuICAgICAgICBAaWYgKGZ1bmN0aW9ucygpLmxlbmd0aCkge1xuICAgICAgICAgIEBpZiAoZm5zLmdlbmVyYXRlZEF0KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGludCBmdW5jdGlvbnMtZ2VuZXJhdGVkXCI+XG4gICAgICAgICAgICAgIERpc2NvdmVyZWQgZnJvbSB7eyBkaXNjb3ZlcmVkQ2xhc3MoKSB9fSAmbWlkZG90O1xuICAgICAgICAgICAgICA8ZnMtZGF0ZVxuICAgICAgICAgICAgICAgICAgW2RhdGVdPVwiZm5zLmdlbmVyYXRlZEF0XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1hdD1cImRhdGUtdGltZVwiPlxuICAgICAgICAgICAgICA8L2ZzLWRhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ1bmN0aW9ucy1saXN0XCI+XG4gICAgICAgICAgICBAZm9yIChmbiBvZiBmdW5jdGlvbnMoKTsgdHJhY2sgZm4uY2xhc3MgKyAnOjonICsgZm4ubWV0aG9kKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdW5jdGlvbi1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnVuY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICAgICAgPGZzLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwidGlueVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCJraW5kQ29sb3IoZm4ua2luZClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiI2ZmZmZmZlwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBmbi5raW5kIH19XG4gICAgICAgICAgICAgICAgICA8L2ZzLWNoaXA+XG4gICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz1cImZ1bmN0aW9uLW1ldGhvZFwiPnt7IGZuLm1ldGhvZCB9fTwvY29kZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnVuY3Rpb24tc3VtbWFyeVwiPnt7IGZuLnN1bW1hcnkgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICBAaWYgKGZuLnByb2R1Y2VzKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnVuY3Rpb24tcHJvZHVjZXMgaGludFwiPlByb2R1Y2VzOiB7eyBmbi5wcm9kdWNlcyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoaW50XCI+XG4gICAgICAgICAgICBObyBmdW5jdGlvbnMgY2FjaGVkIGZvciB0aGlzIGVudGl0eSB5ZXQg4oCUIHJ1biBhIGJ1aWxkIHRvIGRpc2NvdmVyIGl0cyBjb2RlLlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidW5kZWZpbmVkXCI+XG4gICAgICBDbG9zZVxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbjwvZnMtZGlhbG9nPlxuIl19
|