bways-report 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +463 -316
  2. package/esm2022/lib/core/config/bways-report-config.mjs +29 -32
  3. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  4. package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
  5. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  6. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  7. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  8. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  9. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  10. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +8 -1
  11. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +5 -2
  12. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  13. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  14. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  15. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  16. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
  17. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -50
  18. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  19. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  20. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  21. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  22. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  23. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  24. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  25. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  26. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +50 -40
  27. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
  28. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
  29. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +9 -8
  30. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +9 -4
  31. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  32. package/esm2022/lib/features/designer/designer.component.mjs +100 -67
  33. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  34. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  35. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  36. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  37. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  38. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  39. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  40. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  41. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  42. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
  43. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  44. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  45. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  46. package/esm2022/lib/features/runtime/report-execution.service.mjs +18 -5
  47. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +4 -2
  48. package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
  49. package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
  50. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  51. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
  52. package/esm2022/lib/provide-reporting.mjs +9 -29
  53. package/fesm2022/bways-report.mjs +1789 -1041
  54. package/fesm2022/bways-report.mjs.map +1 -1
  55. package/lib/core/config/bways-report-config.d.ts +14 -5
  56. package/lib/core/models/report-datasource.model.d.ts +5 -0
  57. package/lib/core/services/report-session-context.service.d.ts +9 -0
  58. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  59. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  60. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  61. package/lib/core/utils/report-request-scope.d.ts +14 -0
  62. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  63. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  64. package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
  65. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  66. package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
  67. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  68. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  69. package/lib/data-access/adapters/index.d.ts +1 -1
  70. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  71. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  72. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  73. package/lib/data-access/contracts/index.d.ts +1 -0
  74. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  75. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  76. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  77. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
  78. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
  79. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
  80. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  81. package/lib/features/designer/designer.component.d.ts +15 -2
  82. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  83. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  84. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  85. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  86. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  87. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  88. package/lib/features/runtime/report-execution.service.d.ts +3 -0
  89. package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -0
  90. package/lib/features/runtime/report-runtime.component.d.ts +1 -0
  91. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  93. package/package.json +2 -1
@@ -1,4 +1,4 @@
1
- import { computed, inject, Injectable, signal, } from '@angular/core';
1
+ import { computed, inject, Injectable, Injector, runInInjectionContext, signal, } from '@angular/core';
2
2
  import { toObservable } from '@angular/core/rxjs-interop';
3
3
  import { isObservable } from 'rxjs';
4
4
  import { REPORT_SESSION_CONTEXT, REPORT_SESSION_PROVIDER, } from '../tokens/session-context.token';
@@ -13,6 +13,12 @@ import * as i0 from "@angular/core";
13
13
  * eliminating silent failures or thread crashes in host integrations.
14
14
  */
15
15
  export class ReportSessionContextService {
16
+ injector = inject(Injector);
17
+ inheritedSession = inject(ReportSessionContextService, { skipSelf: true, optional: true });
18
+ localReader = signal(null);
19
+ localAsync = signal({});
20
+ localCleanup;
21
+ configuredSource;
16
22
  rawSource = inject(REPORT_SESSION_CONTEXT, {
17
23
  optional: true,
18
24
  });
@@ -32,6 +38,11 @@ export class ReportSessionContextService {
32
38
  * or when reactive signals update.
33
39
  */
34
40
  sessionContext = computed(() => {
41
+ const local = this.localReader();
42
+ if (local)
43
+ return { ...local(), ...this.manualRuntimeContext() };
44
+ if (this.inheritedSession)
45
+ return { ...this.inheritedSession.sessionContext(), ...this.manualRuntimeContext() };
35
46
  let providerMap = {};
36
47
  if (this.sessionProvider) {
37
48
  try {
@@ -94,11 +105,69 @@ export class ReportSessionContextService {
94
105
  */
95
106
  sessionContext$ = toObservable(this.sessionContext);
96
107
  constructor() {
97
- this.initSubscriptions();
108
+ if (!this.inheritedSession)
109
+ this.initSubscriptions();
98
110
  }
99
111
  ngOnDestroy() {
100
112
  this.observableSub?.unsubscribe();
101
113
  this.providerSub?.unsubscribe();
114
+ this.localCleanup?.();
115
+ }
116
+ /** Internal: changes only the session owned by an embedded designer. */
117
+ configureDesignerSession(config) {
118
+ const source = config?.sessionProvider ?? config?.session;
119
+ if (source === this.configuredSource)
120
+ return;
121
+ this.configuredSource = source;
122
+ this.localCleanup?.();
123
+ this.localCleanup = undefined;
124
+ this.localAsync.set({});
125
+ this.manualRuntimeContext.set({});
126
+ if (source === undefined) {
127
+ this.localReader.set(null);
128
+ return;
129
+ }
130
+ let child;
131
+ let target = source;
132
+ if (typeof source === 'function' && source.prototype?.getSessionContext) {
133
+ target = this.injector.get(source, null);
134
+ if (!target) {
135
+ child = Injector.create({ providers: [source], parent: this.injector });
136
+ target = child.get(source);
137
+ }
138
+ }
139
+ const read = () => runInInjectionContext(this.injector, () => {
140
+ let result = target?.getSessionContext ? target.getSessionContext() : target;
141
+ for (let i = 0; typeof result === 'function' && i < 3; i++)
142
+ result = result();
143
+ return result;
144
+ });
145
+ const initial = read();
146
+ let active = true;
147
+ let subscription;
148
+ if (isObservable(initial)) {
149
+ subscription = initial.subscribe({ next: value => this.localAsync.set(value ?? {}),
150
+ error: () => this.localAsync.set({}) });
151
+ this.localReader.set(() => this.localAsync());
152
+ }
153
+ else if (initial && typeof initial.then === 'function') {
154
+ initial.then((value) => { if (active)
155
+ this.localAsync.set(value ?? {}); }, () => { if (active)
156
+ this.localAsync.set({}); });
157
+ this.localReader.set(() => this.localAsync());
158
+ }
159
+ else {
160
+ this.localReader.set(() => {
161
+ const value = read();
162
+ return value && typeof value === 'object' && !isObservable(value) ? value : {};
163
+ });
164
+ }
165
+ this.localCleanup = () => {
166
+ active = false;
167
+ subscription?.unsubscribe();
168
+ if (child && 'destroy' in child)
169
+ child.destroy();
170
+ };
102
171
  }
103
172
  initSubscriptions() {
104
173
  if (this.rawSource && isObservable(this.rawSource)) {
@@ -360,4 +429,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
360
429
  providedIn: 'root',
361
430
  }]
362
431
  }], ctorParameters: () => [] });
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FLeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFrQm5FOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBOEIsc0JBQXNCLEVBQUU7UUFDdkYsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsTUFBTSxDQUFnQyx1QkFBdUIsRUFBRTtRQUNoRyxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNjLGVBQWUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVoRix3R0FBd0c7SUFDdkYsb0JBQW9CLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUNyRCxxQkFBcUIsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELHVCQUF1QixHQUFHLE1BQU0sQ0FBb0Is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LEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUM3RSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLGlCQUFpQixFQUFFLFdBQVc7WUFDOUIsd0JBQXdCLEVBQUUsa0JBQWtCO1NBQzdDLENBQUM7SUFDSixDQUFDO3dHQTNXVSwyQkFBMkI7NEdBQTNCLDJCQUEyQixjQUYxQixNQUFNOzs0RkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBzaWduYWwsXG4gIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX1NFU1NJT05fQ09OVEVYVCxcbiAgUkVQT1JUX1NFU1NJT05fUFJPVklERVIsXG4gIFNlc3Npb25Db250ZXh0TWFwLFxuICBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLFxuICBTZXNzaW9uQ29udGV4dFNvdXJjZSxcbiAgU2Vzc2lvblBhcmFtUHJpbWl0aXZlLFxufSBmcm9tICcuLi90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uUGFyYW1NYXRjaCB7XG4gIGlzTWF0Y2hlZDogYm9vbGVhbjtcbiAgc2Vzc2lvbktleTogc3RyaW5nO1xuICB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlO1xuICBmcmllbmRseUxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZFBhcmFtZXRlcnNSZXN1bHQge1xuICAvKiogVGhlIGNvbnNvbGlkYXRlZCBwYXJhbWV0ZXIgcGF5bG9hZCBmb3Igc3RvcmVkIHByb2NlZHVyZSBleGVjdXRpb24gKi9cbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBNYXAgb2Ygd2hpY2ggU1AgcGFyYW1ldGVycyB3ZXJlIGF1dG8tZGVyaXZlZCBmcm9tIHNlc3Npb24gY29udGV4dCAqL1xuICBhdXRvRGVyaXZlZFBhcmFtczogUmVjb3JkPHN0cmluZywgU2Vzc2lvblBhcmFtTWF0Y2g+O1xuICAvKiogQW55IHJlcXVpcmVkIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIG5laXRoZXIgaW4gc2Vzc2lvbiBjb250ZXh0IG5vciBleHBsaWNpdGx5IG1hcHBlZCAqL1xuICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW107XG59XG5cbi8qKlxuICogU2VydmljZSB0aGF0IG1hbmFnZXMgaG9zdCBhcHBsaWNhdGlvbiBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycyAoZS5nLiBicmFuY2hJZCwgY29tcGFueUlkLCB1c2VySWQpXG4gKiBhdCBydW50aW1lIGFuZCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIGJpbmRzIHRoZW0gdG8gU3RvcmVkIFByb2NlZHVyZSBwYXJhbWV0ZXJzLlxuICpcbiAqIERlc2lnbmVkIHRvIGNvbXBsZXRlbHkgc2hpZWxkIGVuZCB1c2VycyBmcm9tIGVudGVyaW5nIHRlY2huaWNhbCBzZXNzaW9uIHBhcmFtZXRlcnMgd2hpbGVcbiAqIGVsaW1pbmF0aW5nIHNpbGVudCBmYWlsdXJlcyBvciB0aHJlYWQgY3Jhc2hlcyBpbiBob3N0IGludGVncmF0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U291cmNlID0gaW5qZWN0PFNlc3Npb25Db250ZXh0U291cmNlIHwgbnVsbD4oUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uUHJvdmlkZXIgPSBpbmplY3Q8U2Vzc2lvbkNvbnRleHRQcm92aWRlciB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX1BST1ZJREVSLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydGluZ0NvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKiBJbnRlcm5hbCBtYW51YWwgcnVudGltZSBzZXNzaW9uIG92ZXJyaWRlcyAoZS5nLiBzZXQgdmlhIHNldFNlc3Npb25Db250ZXh0IG9yIHNldFNlc3Npb25QYXJhbWV0ZXIpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsUnVudGltZUNvbnRleHQgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsYXRlc3RPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlck9ic2VydmFibGVWYWx1ZSA9IHNpZ25hbDxTZXNzaW9uQ29udGV4dE1hcD4oe30pO1xuXG4gIHByaXZhdGUgb2JzZXJ2YWJsZVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwcm92aWRlclN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogUmVhY3RpdmUgc2lnbmFsIGV4cG9zaW5nIHRoZSBsaXZlIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzLlxuICAgKiBVcGRhdGVzIGF1dG9tYXRpY2FsbHkgd2hlbiBob3N0IGFwcCBtdXRhdGVzIHJ1bnRpbWUgc3RhdGUsIHdoZW4gb2JzZXJ2YWJsZXMgZW1pdCxcbiAgICogb3Igd2hlbiByZWFjdGl2ZSBzaWduYWxzIHVwZGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25Db250ZXh0OiBTaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGxldCBwcm92aWRlck1hcDogU2Vzc2lvbkNvbnRleHRNYXAgPSB7fTtcbiAgICBpZiAodGhpcy5zZXNzaW9uUHJvdmlkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2Vzc2lvblByb3ZpZGVyLmdldFNlc3Npb25Db250ZXh0KCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gKHJlcyBhcyAoKSA9PiBTZXNzaW9uQ29udGV4dE1hcCkoKTtcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBwcm92aWRlck1hcCA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgISgndGhlbicgaW4gcmVzKSkge1xuICAgICAgICAgIHByb3ZpZGVyTWFwID0gcmVzIGFzIFNlc3Npb25Db250ZXh0TWFwO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciByZWFkaW5nIFNlc3Npb25Db250ZXh0UHJvdmlkZXI6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdG9rZW5NYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMucmF3U291cmNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHRoaXMucmF3U291cmNlKSkge1xuICAgICAgICAgIHRva2VuTWFwID0gdGhpcy5sYXRlc3RPYnNlcnZhYmxlVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yYXdTb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJhd1NvdXJjZSgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lclJlcyA9IChyZXMgYXMgKCkgPT4gdW5rbm93bikoKTtcbiAgICAgICAgICAgIHRva2VuTWFwID0gaW5uZXJSZXMgJiYgdHlwZW9mIGlubmVyUmVzID09PSAnb2JqZWN0JyA/IChpbm5lclJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcCkgOiB7fTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRva2VuTWFwID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnID8gKHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcCkgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnb2JqZWN0JyAmJiB0aGlzLnJhd1NvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRva2VuTWFwID0gdGhpcy5yYXdTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGV2YWx1YXRpbmcgcmF3IHNlc3Npb24gc291cmNlOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFudWFsTWFwID0gdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dCgpO1xuICAgIGNvbnN0IGF1dG9EZXRlY3RlZCA9IHRoaXMuZGV0ZWN0QnJvd3NlclNlc3Npb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hdXRvRGV0ZWN0ZWQsXG4gICAgICAuLi5wcm92aWRlck1hcCxcbiAgICAgIC4uLnRva2VuTWFwLFxuICAgICAgLi4ubWFudWFsTWFwLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBsaXZlIHNlc3Npb24gcGFyYW1ldGVycyBmb3IgUnhKUy1iYXNlZCBpbnRlZ3JhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dCQ6IE9ic2VydmFibGU8U2Vzc2lvbkNvbnRleHRNYXA+ID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Vzc2lvbkNvbnRleHQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JzZXJ2YWJsZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByb3ZpZGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yYXdTb3VyY2UgJiYgaXNPYnNlcnZhYmxlKHRoaXMucmF3U291cmNlKSkge1xuICAgICAgdGhpcy5vYnNlcnZhYmxlU3ViID0gdGhpcy5yYXdTb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbCkgPT4ge1xuICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gY29udGV4dCBvYnNlcnZhYmxlOicsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uUHJvdmlkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2Vzc2lvblByb3ZpZGVyLmdldFNlc3Npb25Db250ZXh0KCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgIHRoaXMucHJvdmlkZXJTdWIgPSByZXMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUuc2V0KHsgLi4udmFsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gcHJvdmlkZXIgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICd0aGVuJyBpbiByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgKHJlcyBhcyBQcm9taXNlPHVua25vd24+KS50aGVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICkge1xuICAgICAgICAgIChyZXMgYXMgUHJvbWlzZTxTZXNzaW9uQ29udGV4dE1hcD4pXG4gICAgICAgICAgICAudGhlbigodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIHByb21pc2U6JywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBpbml0aWFsaXppbmcgc2Vzc2lvbiBwcm92aWRlcjonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSBydW50aW1lIHNlc3Npb24gY29udGV4dC5cbiAgICogQ2FuIGJlIGNhbGxlZCBkeW5hbWljYWxseSBhZnRlciB1c2VyIGF1dGhlbnRpY2F0aW9uLCBicmFuY2ggY2hhbmdlLCBldGMuXG4gICAqL1xuICBzZXRTZXNzaW9uQ29udGV4dChjb250ZXh0OiBTZXNzaW9uQ29udGV4dE1hcCk6IHZvaWQge1xuICAgIGlmIChjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoeyAuLi5jb250ZXh0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgb3Igc2V0cyBhIHNwZWNpZmljIHNlc3Npb24gcGFyYW1ldGVyIGF0IHJ1bnRpbWUgKGUuZy4gYnJhbmNoSWQgPSAyKS5cbiAgICovXG4gIHNldFNlc3Npb25QYXJhbWV0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uUGFyYW1QcmltaXRpdmUpOiB2b2lkIHtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQudXBkYXRlKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFueSBydW50aW1lIHNlc3Npb24gcGFyYW1ldGVycyBzZXQgdmlhIGBzZXRTZXNzaW9uQ29udGV4dGAgb3IgYHNldFNlc3Npb25QYXJhbWV0ZXJgLlxuICAgKi9cbiAgY2xlYXJTZXNzaW9uQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IHJldHVybnMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBjb250ZXh0IG1hcC5cbiAgICogQWx3YXlzIHB1bGxzIHRoZSBsYXRlc3QgcnVudGltZSBzdGF0ZS4gTmV2ZXIgdGhyb3dzIG9yIGNyYXNoZXMgdGhlIHRocmVhZC5cbiAgICovXG4gIGdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpOiBTZXNzaW9uQ29udGV4dE1hcCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25Db250ZXh0KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEZhaWxlZCB0byBldmFsdWF0ZSBzZXNzaW9uIGNvbnRleHQ6JywgZXJyKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IGRldGVjdHMgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gaG9zdCBwcm9qZWN0IGJyb3dzZXIgc3RvcmFnZVxuICAgKiAoc2Vzc2lvblN0b3JhZ2U6IHVzZXJfSW5mbywgY3VycmVudFVzZXI7IGxvY2FsU3RvcmFnZTogY3VycmVudFVzZXIsIENvbXBhbnlEYXRhLCB1c2VyX0luZm8pLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RCcm93c2VyU2Vzc2lvbigpOiBTZXNzaW9uQ29udGV4dE1hcCB7XG4gICAgY29uc3QgcmVzdWx0OiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNvbnN0IHNvdXJjZXM6IEFycmF5PHsgc3RvcmFnZTogU3RvcmFnZSB8IG51bGw7IGtleTogc3RyaW5nIH0+ID0gW1xuICAgICAgeyBzdG9yYWdlOiB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gc2Vzc2lvblN0b3JhZ2UgOiBudWxsLCBrZXk6ICd1c2VyX0luZm8nIH0sXG4gICAgICB7IHN0b3JhZ2U6IHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlIDogbnVsbCwga2V5OiAnY3VycmVudFVzZXInIH0sXG4gICAgICB7IHN0b3JhZ2U6IHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlIDogbnVsbCwga2V5OiAnQ29tcGFueURhdGEnIH0sXG4gICAgICB7IHN0b3JhZ2U6IHR5cGVvZiBzZXNzaW9uU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyBzZXNzaW9uU3RvcmFnZSA6IG51bGwsIGtleTogJ2N1cnJlbnRVc2VyJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ3VzZXJfSW5mbycgfSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBzcmMgb2Ygc291cmNlcykge1xuICAgICAgaWYgKCFzcmMuc3RvcmFnZSkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpdGVtID0gc3JjLnN0b3JhZ2UuZ2V0SXRlbShzcmMua2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgICAgICAgIGlmIChwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHYgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIHYgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoIShrIGluIHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFtrXSA9IHY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIEpTT04gcGFyc2UgZXJyb3JzIGluIHN0b3JhZ2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgYSBwYXJhbWV0ZXIgb3Igc2Vzc2lvbiBrZXkgaW50byBhIGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgc3RyaW5nXG4gICAqIGZvciByZWxpYWJsZSwgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIHN5bWJvbC1pbnNlbnNpdGl2ZSBtYXRjaGluZy5cbiAgICogU3RyaXBzIFNRTCBTZXJ2ZXIgSHVuZ2FyaWFuIHR5cGUgcHJlZml4ZXMgKGUuZy4gJ0BjaHJDb21wYW55SWQnIC0+ICdjb21wYW55aWQnKS5cbiAgICovXG4gIG5vcm1hbGl6ZUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFrZXkgfHwgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICByZXR1cm4ga2V5XG4gICAgICAucmVwbGFjZSgvXkArLywgJycpXG4gICAgICAucmVwbGFjZSgvXihjaHJ8aW50fHZjaHJ8bmNocnxkdHxzdHJ8bnVtfGJpdHxkZWN8Zmx0KSsvaSwgJycpXG4gICAgICAucmVwbGFjZSgvW19cXC1cXHNdKy9nLCAnJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgc3RvcmVkIHByb2NlZHVyZSBwYXJhbWV0ZXIgbWF0Y2hlcyBhbnkga2V5IGluIHRoZSBhY3RpdmUgc2Vzc2lvbiBjb250ZXh0LlxuICAgKiBTdXBwb3J0cyBleGFjdCwgbm9ybWFsaXplZCwgYW5kIGNvbW1vbiBFUlAgc3lub255bXMuXG4gICAqL1xuICBtYXRjaFBhcmFtZXRlcihwYXJhbU5hbWU6IHN0cmluZyk6IFNlc3Npb25QYXJhbU1hdGNoIHwgbnVsbCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3Qgc2Vzc2lvbktleXMgPSBPYmplY3Qua2V5cyhzZXNzaW9uKTtcbiAgICBpZiAoc2Vzc2lvbktleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJhbSA9IHRoaXMubm9ybWFsaXplS2V5KHBhcmFtTmFtZSk7XG5cbiAgICAvLyAxLiBFeGFjdCBtYXRjaCBvbiByYXcgbmFtZVxuICAgIGlmIChwYXJhbU5hbWUgaW4gc2Vzc2lvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNNYXRjaGVkOiB0cnVlLFxuICAgICAgICBzZXNzaW9uS2V5OiBwYXJhbU5hbWUsXG4gICAgICAgIHZhbHVlOiBzZXNzaW9uW3BhcmFtTmFtZV0sXG4gICAgICAgIGZyaWVuZGx5TGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihwYXJhbU5hbWUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAyLiBEaXJlY3Qgbm9ybWFsaXplZCBtYXRjaFxuICAgIGZvciAoY29uc3Qga2V5IG9mIHNlc3Npb25LZXlzKSB7XG4gICAgICBpZiAodGhpcy5ub3JtYWxpemVLZXkoa2V5KSA9PT0gbm9ybWFsaXplZFBhcmFtKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNNYXRjaGVkOiB0cnVlLFxuICAgICAgICAgIHNlc3Npb25LZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgIGZyaWVuZGx5TGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihrZXkpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIENvbW1vbiBFUlAgc3lub255bSBncm91cHMgKGJpZGlyZWN0aW9uYWwgbWF0Y2hpbmcpXG4gICAgY29uc3Qgc3lub255bUdyb3Vwczogc3RyaW5nW11bXSA9IFtcbiAgICAgIFsnYnJhbmNoJywgJ2JyYW5jaGlkJywgJ2JpZCcsICdicmFuY2hjb2RlJywgJ2xvY2F0aW9uaWQnLCAnbG9jYXRpb24nLCAnY29tcHVuaXQnLCAnY29tcHVuaXRpZCcsICd1bml0Y29kZScsICd1bml0aWQnLCAnY29tcHVuaXRzJ10sXG4gICAgICBbJ2NvbXBhbnknLCAnY29tcGFueWlkJywgJ2NpZCcsICdjb21wYW55Y29kZScsICd0ZW5hbnQnLCAndGVuYW50aWQnXSxcbiAgICAgIFsndXNlcicsICd1c2VyaWQnLCAndWlkJywgJ3VzZXJjb2RlJywgJ29wZXJhdG9yaWQnLCAnbG9naW51c2VyJywgJ3VzZXJuYW1lJ10sXG4gICAgICBbJ2ZpbmFuY2lhbHllYXInLCAnZmluYW5jaWFseWVhcmlkJywgJ3llYXJpZCcsICdmeWVhcicsICdmaXNjYWx5ZWFyJywgJ2ZpbnllYXInXSxcbiAgICAgIFsnbG9naW5pZGVudGl0eScsICdsb2dpbl9pZGVudGl0eScsICdzdGF0dXNjb2RlJywgJ3N0YXR1c19jb2RlJ10sXG4gICAgICBbJ29yZycsICdvcmdpZCcsICdvcmdhbml6YXRpb24nLCAnb3JnYW5pemF0aW9uaWQnXSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBncm91cCBvZiBzeW5vbnltR3JvdXBzKSB7XG4gICAgICBpZiAoZ3JvdXAuaW5jbHVkZXMobm9ybWFsaXplZFBhcmFtKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzZXNzaW9uS2V5cykge1xuICAgICAgICAgIGlmIChncm91cC5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZUtleShrZXkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaXNNYXRjaGVkOiB0cnVlLFxuICAgICAgICAgICAgICBzZXNzaW9uS2V5OiBrZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBzZXNzaW9uW2tleV0sXG4gICAgICAgICAgICAgIGZyaWVuZGx5TGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihrZXkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbmQgZGVyaXZlcyBhbGwgc3RvcmVkIHByb2NlZHVyZSBwYXJhbWV0ZXJzOlxuICAgKiAtIFByZXNlcnZlcyBleHBsaWNpdCBvdmVycmlkZXMgKGUuZy4gZnJvbSBjYW52YXMgZm9ybSBjb250cm9scyBvciBtYW51YWwgaW5wdXRzKVxuICAgKiAtIEF1dG9tYXRpY2FsbHkgaW5qZWN0cyBtYXRjaGVkIHNlc3Npb24gcGFyYW1ldGVyc1xuICAgKiAtIFZhbGlkYXRlcyB3aGV0aGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgZGVyaXZlUGFyYW1ldGVycyhcbiAgICBzcFBhcmFtczogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSxcbiAgICBleHBsaWNpdE1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4gICk6IERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0IHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTtcbiAgICBjb25zdCBmaW5hbFBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBjb25zdCBhdXRvRGVyaXZlZDogUmVjb3JkPHN0cmluZywgU2Vzc2lvblBhcmFtTWF0Y2g+ID0ge307XG4gICAgY29uc3QgdW5yZXNvbHZlZFJlcXVpcmVkOiBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHNwUGFyYW1zKSB7XG4gICAgICBjb25zdCBwYXJhbU5hbWUgPSBwYXJhbS5uYW1lO1xuICAgICAgY29uc3QgZXhwbGljaXRWYWwgPSBleHBsaWNpdE1hcHBpbmdzW3BhcmFtTmFtZV07XG5cbiAgICAgIC8vIENoZWNrIGlmIHVzZXIgb3IgY2FudmFzIGV4cGxpY2l0bHkgcHJvdmlkZWQgYSB2YWx1ZSAoYW5kIG5vdCBhbiBlbXB0eSBwbGFjZWhvbGRlcilcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0ID0gZXhwbGljaXRWYWwgIT09IHVuZGVmaW5lZCAmJiBleHBsaWNpdFZhbCAhPT0gJycgJiYgZXhwbGljaXRWYWwgIT09IG51bGw7XG5cbiAgICAgIGlmIChoYXNFeHBsaWNpdCkge1xuICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gZXhwbGljaXRWYWw7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc2Vzc2lvbiBjb250ZXh0IG1hdGNoIChza2lwIHdoZW4gYXV0b1BhcmFtZXRlciBpcyBkaXNhYmxlZClcbiAgICAgIGlmICh0aGlzLnJlcG9ydGluZ0NvbmZpZz8uYXV0b1BhcmFtZXRlciAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID0gdGhpcy5tYXRjaFBhcmFtZXRlcihwYXJhbU5hbWUpO1xuICAgICAgICBpZiAoc2Vzc2lvbk1hdGNoICYmIHNlc3Npb25NYXRjaC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25NYXRjaC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsUGFyYW1zW3BhcmFtTmFtZV0gPSBzZXNzaW9uTWF0Y2gudmFsdWU7XG4gICAgICAgICAgYXV0b0Rlcml2ZWRbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBkZWZhdWx0IHZhbHVlIGlzIHByb3ZpZGVkIGluIFNQIG1ldGFkYXRhXG4gICAgICBpZiAocGFyYW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgcGFyYW0uZGVmYXVsdFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGZpbmFsUGFyYW1zW3BhcmFtTmFtZV0gPSBwYXJhbS5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiByZXF1aXJlZCBidXQgbm90IHNhdGlzZmllZFxuICAgICAgaWYgKHBhcmFtLnJlcXVpcmVkKSB7XG4gICAgICAgIHVucmVzb2x2ZWRSZXF1aXJlZC5wdXNoKHBhcmFtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbHNvIGluY2x1ZGUgYW55IGV4dHJhIGV4cGxpY2l0IG1hcHBpbmdzIHRoYXQgZGlkbid0IG1hdGNoIHBhcmFtZXRlciBsaXN0XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGxpY2l0TWFwcGluZ3MpKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZmluYWxQYXJhbXMpICYmIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09ICcnKSB7XG4gICAgICAgIGZpbmFsUGFyYW1zW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtZXRlcnM6IGZpbmFsUGFyYW1zLFxuICAgICAgYXV0b0Rlcml2ZWRQYXJhbXM6IGF1dG9EZXJpdmVkLFxuICAgICAgdW5yZXNvbHZlZFJlcXVpcmVkUGFyYW1zOiB1bnJlc29sdmVkUmVxdWlyZWQsXG4gICAgfTtcbiAgfVxufVxuIl19
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHVCQUF1QixHQUt4QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQWtCbkU7Ozs7OztHQU1HO0FBSUgsTUFBTSxPQUFPLDJCQUEyQjtJQUNyQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0YsV0FBVyxHQUFHLE1BQU0sQ0FBbUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsVUFBVSxHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDcEQsWUFBWSxDQUFjO0lBQzFCLGdCQUFnQixDQUFzRTtJQUU3RSxTQUFTLEdBQUcsTUFBTSxDQUE4QixzQkFBc0IsRUFBRTtRQUN2RixRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNjLGVBQWUsR0FBRyxNQUFNLENBQWdDLHVCQUF1QixFQUFFO1FBQ2hHLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBQ2MsZUFBZSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWhGLHdHQUF3RztJQUN2RixvQkFBb0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELHFCQUFxQixHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUVqRSxhQUFhLENBQWdCO0lBQzdCLFdBQVcsQ0FBZ0I7SUFFbkM7Ozs7T0FJRztJQUNNLGNBQWMsR0FBOEIsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxLQUFLO1lBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1FBQ2pFLElBQUksSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7UUFDaEgsSUFBSSxXQUFXLEdBQXNCLEVBQUUsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUM5QixNQUFNLEdBQUcsR0FBSSxHQUErQixFQUFFLENBQUM7b0JBQy9DLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUNuQyxXQUFXLEdBQUcsR0FBRyxDQUFDO29CQUNwQixDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUMvQyxDQUFDO3FCQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzlELFdBQVcsR0FBRyxHQUF3QixDQUFDO2dCQUN6QyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksUUFBUSxHQUFzQixFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDO2dCQUNILElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNqQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzFDLENBQUM7cUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDOUIsTUFBTSxRQUFRLEdBQUksR0FBcUIsRUFBRSxDQUFDO3dCQUMxQyxRQUFRLEdBQUcsUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsUUFBOEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM3RixDQUFDO3lCQUFNLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzdCLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDMUMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFFBQVEsR0FBRyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBRSxHQUF5QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzlFLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDekUsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzVCLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFGLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFakQsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLEdBQUcsV0FBVztZQUNkLEdBQUcsUUFBUTtZQUNYLEdBQUcsU0FBUztTQUNiLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVIOztPQUVHO0lBQ00sZUFBZSxHQUFrQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTVGO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLHdCQUF3QixDQUFDLE1BQTRDO1FBQ25FLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxlQUFlLElBQUksTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUMxRCxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBQ2pFLElBQUksS0FBMkIsQ0FBQztRQUNoQyxJQUFJLE1BQU0sR0FBUSxNQUFNLENBQUM7UUFDekIsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFhLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ2hFLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM3RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQzlFLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksWUFBc0MsQ0FBQztRQUMzQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFCLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBMEIsSUFBSSxFQUFFLENBQUM7Z0JBQ3JHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN6RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxNQUFNO2dCQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDMUYsR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNO2dCQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDO2dCQUNyQixPQUFPLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDZixZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDNUIsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEtBQUs7Z0JBQUcsS0FBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVELENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDWixJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDbkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDN0MsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0VBQXNFLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVGLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDO2dCQUNILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO3dCQUMvQixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDWixJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQ0FDbkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDL0MsQ0FBQzt3QkFDSCxDQUFDO3dCQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFOzRCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQzdGLENBQUM7cUJBQ0YsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sSUFDTCxHQUFHO29CQUNILE9BQU8sR0FBRyxLQUFLLFFBQVE7b0JBQ3ZCLE1BQU0sSUFBSSxHQUFHO29CQUNiLE9BQVEsR0FBd0IsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUNwRCxDQUFDO29CQUNBLEdBQWtDO3lCQUNoQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDWixJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQzs0QkFDbkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQzt3QkFDL0MsQ0FBQztvQkFDSCxDQUFDLENBQUM7eUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDMUYsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsT0FBMEI7UUFDMUMsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLEdBQVcsRUFBRSxLQUE0QjtRQUMzRCxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QyxHQUFHLE9BQU87WUFDVixDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZGLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0I7UUFDMUIsTUFBTSxNQUFNLEdBQXNCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUVqRCxNQUFNLE9BQU8sR0FBb0Q7WUFDL0QsRUFBRSxPQUFPLEVBQUUsT0FBTyxjQUFjLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO1lBQzVGLEVBQUUsT0FBTyxFQUFFLE9BQU8sWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRTtZQUMxRixFQUFFLE9BQU8sRUFBRSxPQUFPLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUU7WUFDMUYsRUFBRSxPQUFPLEVBQUUsT0FBTyxjQUFjLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFO1lBQzlGLEVBQUUsT0FBTyxFQUFFLE9BQU8sWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRTtTQUN6RixDQUFDO1FBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87Z0JBQUUsU0FBUztZQUMzQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hDLElBQUksTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUN6QyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDOzRCQUM1QyxJQUNFLENBQUMsS0FBSyxTQUFTO2dDQUNmLENBQUMsS0FBSyxJQUFJO2dDQUNWLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUMsRUFDMUUsQ0FBQztnQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQztvQ0FDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDaEIsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxzQ0FBc0M7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9DLE9BQU8sR0FBRzthQUNQLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2FBQ2xCLE9BQU8sQ0FBQywrQ0FBK0MsRUFBRSxFQUFFLENBQUM7YUFDNUQsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7YUFDeEIsV0FBVyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxTQUFpQjtRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFMUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRCw2QkFBNkI7UUFDN0IsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFLENBQUM7WUFDekIsT0FBTztnQkFDTCxTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsU0FBUztnQkFDckIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQ3pCLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUM7YUFDN0MsQ0FBQztRQUNKLENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQy9DLE9BQU87b0JBQ0wsU0FBUyxFQUFFLElBQUk7b0JBQ2YsVUFBVSxFQUFFLEdBQUc7b0JBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ25CLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7aUJBQ3ZDLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxNQUFNLGFBQWEsR0FBZTtZQUNoQyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUM7WUFDbEksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQztZQUNwRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQztZQUM1RSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUM7WUFDaEYsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQztZQUNoRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixDQUFDO1NBQ25ELENBQUM7UUFFRixLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUM5QixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzNDLE9BQU87NEJBQ0wsU0FBUyxFQUFFLElBQUk7NEJBQ2YsVUFBVSxFQUFFLEdBQUc7NEJBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUM7NEJBQ25CLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7eUJBQ3ZDLENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUNkLFFBQXNDLEVBQ3RDLG1CQUE0QyxFQUFFO1FBRTlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hELE1BQU0sV0FBVyxHQUE0QixFQUFFLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQXNDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLGtCQUFrQixHQUFpQyxFQUFFLENBQUM7UUFFNUQsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzdCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWhELHFGQUFxRjtZQUNyRixNQUFNLFdBQVcsR0FBRyxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxFQUFFLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQztZQUU1RixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUNyQyxTQUFTO1lBQ1gsQ0FBQztZQUVELHdFQUF3RTtZQUN4RSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsYUFBYSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNsRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNwRixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDNUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQztvQkFDdEMsU0FBUztnQkFDWCxDQUFDO1lBQ0gsQ0FBQztZQUVELDhDQUE4QztZQUM5QyxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BFLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUM1QyxTQUFTO1lBQ1gsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDN0UsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsV0FBVztZQUN2QixpQkFBaUIsRUFBRSxXQUFXO1lBQzlCLHdCQUF3QixFQUFFLGtCQUFrQjtTQUM3QyxDQUFDO0lBQ0osQ0FBQzt3R0F0YVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ3YXlzUmVwb3J0Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgT25EZXN0cm95LFxuICBzaWduYWwsXG4gIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX1NFU1NJT05fQ09OVEVYVCxcbiAgUkVQT1JUX1NFU1NJT05fUFJPVklERVIsXG4gIFNlc3Npb25Db250ZXh0TWFwLFxuICBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLFxuICBTZXNzaW9uQ29udGV4dFNvdXJjZSxcbiAgU2Vzc2lvblBhcmFtUHJpbWl0aXZlLFxufSBmcm9tICcuLi90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uUGFyYW1NYXRjaCB7XG4gIGlzTWF0Y2hlZDogYm9vbGVhbjtcbiAgc2Vzc2lvbktleTogc3RyaW5nO1xuICB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlO1xuICBmcmllbmRseUxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZFBhcmFtZXRlcnNSZXN1bHQge1xuICAvKiogVGhlIGNvbnNvbGlkYXRlZCBwYXJhbWV0ZXIgcGF5bG9hZCBmb3Igc3RvcmVkIHByb2NlZHVyZSBleGVjdXRpb24gKi9cbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBNYXAgb2Ygd2hpY2ggU1AgcGFyYW1ldGVycyB3ZXJlIGF1dG8tZGVyaXZlZCBmcm9tIHNlc3Npb24gY29udGV4dCAqL1xuICBhdXRvRGVyaXZlZFBhcmFtczogUmVjb3JkPHN0cmluZywgU2Vzc2lvblBhcmFtTWF0Y2g+O1xuICAvKiogQW55IHJlcXVpcmVkIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIG5laXRoZXIgaW4gc2Vzc2lvbiBjb250ZXh0IG5vciBleHBsaWNpdGx5IG1hcHBlZCAqL1xuICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW107XG59XG5cbi8qKlxuICogU2VydmljZSB0aGF0IG1hbmFnZXMgaG9zdCBhcHBsaWNhdGlvbiBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycyAoZS5nLiBicmFuY2hJZCwgY29tcGFueUlkLCB1c2VySWQpXG4gKiBhdCBydW50aW1lIGFuZCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIGJpbmRzIHRoZW0gdG8gU3RvcmVkIFByb2NlZHVyZSBwYXJhbWV0ZXJzLlxuICpcbiAqIERlc2lnbmVkIHRvIGNvbXBsZXRlbHkgc2hpZWxkIGVuZCB1c2VycyBmcm9tIGVudGVyaW5nIHRlY2huaWNhbCBzZXNzaW9uIHBhcmFtZXRlcnMgd2hpbGVcbiAqIGVsaW1pbmF0aW5nIHNpbGVudCBmYWlsdXJlcyBvciB0aHJlYWQgY3Jhc2hlcyBpbiBob3N0IGludGVncmF0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluaGVyaXRlZFNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IHNraXBTZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFJlYWRlciA9IHNpZ25hbDwoKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxBc3luYyA9IHNpZ25hbDxTZXNzaW9uQ29udGV4dE1hcD4oe30pO1xuICBwcml2YXRlIGxvY2FsQ2xlYW51cD86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgY29uZmlndXJlZFNvdXJjZTogQndheXNSZXBvcnRDb25maWdbJ3Nlc3Npb24nXSB8IEJ3YXlzUmVwb3J0Q29uZmlnWydzZXNzaW9uUHJvdmlkZXInXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJhd1NvdXJjZSA9IGluamVjdDxTZXNzaW9uQ29udGV4dFNvdXJjZSB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblByb3ZpZGVyID0gaW5qZWN0PFNlc3Npb25Db250ZXh0UHJvdmlkZXIgfCBudWxsPihSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRpbmdDb25maWcgPSBpbmplY3QoUkVQT1JUSU5HX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogSW50ZXJuYWwgbWFudWFsIHJ1bnRpbWUgc2Vzc2lvbiBvdmVycmlkZXMgKGUuZy4gc2V0IHZpYSBzZXRTZXNzaW9uQ29udGV4dCBvciBzZXRTZXNzaW9uUGFyYW1ldGVyKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbnVhbFJ1bnRpbWVDb250ZXh0ID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF0ZXN0T2JzZXJ2YWJsZVZhbHVlID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcblxuICBwcml2YXRlIG9ic2VydmFibGVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJvdmlkZXJTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZlIHNpZ25hbCBleHBvc2luZyB0aGUgbGl2ZSBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycy5cbiAgICogVXBkYXRlcyBhdXRvbWF0aWNhbGx5IHdoZW4gaG9zdCBhcHAgbXV0YXRlcyBydW50aW1lIHN0YXRlLCB3aGVuIG9ic2VydmFibGVzIGVtaXQsXG4gICAqIG9yIHdoZW4gcmVhY3RpdmUgc2lnbmFscyB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dDogU2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsb2NhbCA9IHRoaXMubG9jYWxSZWFkZXIoKTtcbiAgICBpZiAobG9jYWwpIHJldHVybiB7IC4uLmxvY2FsKCksIC4uLnRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKSB9O1xuICAgIGlmICh0aGlzLmluaGVyaXRlZFNlc3Npb24pIHJldHVybiB7IC4uLnRoaXMuaW5oZXJpdGVkU2Vzc2lvbi5zZXNzaW9uQ29udGV4dCgpLCAuLi50aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0KCkgfTtcbiAgICBsZXQgcHJvdmlkZXJNYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IChyZXMgYXMgKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApKCk7XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvdmlkZXJNYXAgPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgcHJvdmlkZXJNYXAgPSB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICEoJ3RoZW4nIGluIHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgcmVhZGluZyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWFwOiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0aGlzLnJhd1NvdXJjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yYXdTb3VyY2UoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXMgPSAocmVzIGFzICgpID0+IHVua25vd24pKCk7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IGlubmVyUmVzICYmIHR5cGVvZiBpbm5lclJlcyA9PT0gJ29iamVjdCcgPyAoaW5uZXJSZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgICAgdG9rZW5NYXAgPSB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IChyZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJhd1NvdXJjZSA9PT0gJ29iamVjdCcgJiYgdGhpcy5yYXdTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMucmF3U291cmNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBldmFsdWF0aW5nIHJhdyBzZXNzaW9uIHNvdXJjZTonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbnVhbE1hcCA9IHRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKTtcbiAgICBjb25zdCBhdXRvRGV0ZWN0ZWQgPSB0aGlzLmRldGVjdEJyb3dzZXJTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXV0b0RldGVjdGVkLFxuICAgICAgLi4ucHJvdmlkZXJNYXAsXG4gICAgICAuLi50b2tlbk1hcCxcbiAgICAgIC4uLm1hbnVhbE1hcCxcbiAgICB9O1xuICB9KTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgbGl2ZSBzZXNzaW9uIHBhcmFtZXRlcnMgZm9yIFJ4SlMtYmFzZWQgaW50ZWdyYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkNvbnRleHQkOiBPYnNlcnZhYmxlPFNlc3Npb25Db250ZXh0TWFwPiA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlc3Npb25Db250ZXh0KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaW5oZXJpdGVkU2Vzc2lvbikgdGhpcy5pbml0U3Vic2NyaXB0aW9ucygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vYnNlcnZhYmxlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJvdmlkZXJTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5sb2NhbENsZWFudXA/LigpO1xuICB9XG5cbiAgLyoqIEludGVybmFsOiBjaGFuZ2VzIG9ubHkgdGhlIHNlc3Npb24gb3duZWQgYnkgYW4gZW1iZWRkZWQgZGVzaWduZXIuICovXG4gIGNvbmZpZ3VyZURlc2lnbmVyU2Vzc2lvbihjb25maWc6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZSA9IGNvbmZpZz8uc2Vzc2lvblByb3ZpZGVyID8/IGNvbmZpZz8uc2Vzc2lvbjtcbiAgICBpZiAoc291cmNlID09PSB0aGlzLmNvbmZpZ3VyZWRTb3VyY2UpIHJldHVybjtcbiAgICB0aGlzLmNvbmZpZ3VyZWRTb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy5sb2NhbENsZWFudXA/LigpO1xuICAgIHRoaXMubG9jYWxDbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubG9jYWxBc3luYy5zZXQoe30pO1xuICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHt9KTtcbiAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHsgdGhpcy5sb2NhbFJlYWRlci5zZXQobnVsbCk7IHJldHVybjsgfVxuICAgIGxldCBjaGlsZDogSW5qZWN0b3IgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHRhcmdldDogYW55ID0gc291cmNlO1xuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nICYmIHNvdXJjZS5wcm90b3R5cGU/LmdldFNlc3Npb25Db250ZXh0KSB7XG4gICAgICB0YXJnZXQgPSB0aGlzLmluamVjdG9yLmdldChzb3VyY2UgYXMgYW55LCBudWxsKTtcbiAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgIGNoaWxkID0gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbc291cmNlIGFzIGFueV0sIHBhcmVudDogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgdGFyZ2V0ID0gY2hpbGQuZ2V0KHNvdXJjZSBhcyBhbnkpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZWFkID0gKCk6IGFueSA9PiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHRhcmdldD8uZ2V0U2Vzc2lvbkNvbnRleHQgPyB0YXJnZXQuZ2V0U2Vzc2lvbkNvbnRleHQoKSA6IHRhcmdldDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyB0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nICYmIGkgPCAzOyBpKyspIHJlc3VsdCA9IHJlc3VsdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICBjb25zdCBpbml0aWFsID0gcmVhZCgpO1xuICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuICAgIGxldCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYnNlcnZhYmxlKGluaXRpYWwpKSB7XG4gICAgICBzdWJzY3JpcHRpb24gPSBpbml0aWFsLnN1YnNjcmliZSh7IG5leHQ6IHZhbHVlID0+IHRoaXMubG9jYWxBc3luYy5zZXQodmFsdWUgYXMgU2Vzc2lvbkNvbnRleHRNYXAgPz8ge30pLFxuICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5sb2NhbEFzeW5jLnNldCh7fSkgfSk7XG4gICAgICB0aGlzLmxvY2FsUmVhZGVyLnNldCgoKSA9PiB0aGlzLmxvY2FsQXN5bmMoKSk7XG4gICAgfSBlbHNlIGlmIChpbml0aWFsICYmIHR5cGVvZiBpbml0aWFsLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluaXRpYWwudGhlbigodmFsdWU6IFNlc3Npb25Db250ZXh0TWFwKSA9PiB7IGlmIChhY3RpdmUpIHRoaXMubG9jYWxBc3luYy5zZXQodmFsdWUgPz8ge30pOyB9LFxuICAgICAgICAoKSA9PiB7IGlmIChhY3RpdmUpIHRoaXMubG9jYWxBc3luYy5zZXQoe30pOyB9KTtcbiAgICAgIHRoaXMubG9jYWxSZWFkZXIuc2V0KCgpID0+IHRoaXMubG9jYWxBc3luYygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2NhbFJlYWRlci5zZXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlYWQoKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIWlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubG9jYWxDbGVhbnVwID0gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICBzdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoY2hpbGQgJiYgJ2Rlc3Ryb3knIGluIGNoaWxkKSAoY2hpbGQgYXMgYW55KS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmF3U291cmNlICYmIGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZVN1YiA9IHRoaXMucmF3U291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIGNvbnRleHQgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHtcbiAgICAgICAgICB0aGlzLnByb3ZpZGVyU3ViID0gcmVzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIG9ic2VydmFibGU6JywgZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgcmVzICYmXG4gICAgICAgICAgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAndGhlbicgaW4gcmVzICYmXG4gICAgICAgICAgdHlwZW9mIChyZXMgYXMgUHJvbWlzZTx1bmtub3duPikudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICAocmVzIGFzIFByb21pc2U8U2Vzc2lvbkNvbnRleHRNYXA+KVxuICAgICAgICAgICAgLnRoZW4oKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlck9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGZyb20gc2Vzc2lvbiBwcm92aWRlciBwcm9taXNlOicsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgaW5pdGlhbGl6aW5nIHNlc3Npb24gcHJvdmlkZXI6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBvciByZXBsYWNlcyB0aGUgcnVudGltZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIENhbiBiZSBjYWxsZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdXNlciBhdXRoZW50aWNhdGlvbiwgYnJhbmNoIGNoYW5nZSwgZXRjLlxuICAgKi9cbiAgc2V0U2Vzc2lvbkNvbnRleHQoY29udGV4dDogU2Vzc2lvbkNvbnRleHRNYXApOiB2b2lkIHtcbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHsgLi4uY29udGV4dCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIG9yIHNldHMgYSBzcGVjaWZpYyBzZXNzaW9uIHBhcmFtZXRlciBhdCBydW50aW1lIChlLmcuIGJyYW5jaElkID0gMikuXG4gICAqL1xuICBzZXRTZXNzaW9uUGFyYW1ldGVyKGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlKTogdm9pZCB7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnVwZGF0ZSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbnkgcnVudGltZSBzZXNzaW9uIHBhcmFtZXRlcnMgc2V0IHZpYSBgc2V0U2Vzc2lvbkNvbnRleHRgIG9yIGBzZXRTZXNzaW9uUGFyYW1ldGVyYC5cbiAgICovXG4gIGNsZWFyU2Vzc2lvbkNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSByZXR1cm5zIHRoZSBjdXJyZW50IHNlc3Npb24gY29udGV4dCBtYXAuXG4gICAqIEFsd2F5cyBwdWxscyB0aGUgbGF0ZXN0IHJ1bnRpbWUgc3RhdGUuIE5ldmVyIHRocm93cyBvciBjcmFzaGVzIHRoZSB0aHJlYWQuXG4gICAqL1xuICBnZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29udGV4dCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBGYWlsZWQgdG8gZXZhbHVhdGUgc2Vzc2lvbiBjb250ZXh0OicsIGVycik7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBkZXRlY3RzIHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIGhvc3QgcHJvamVjdCBicm93c2VyIHN0b3JhZ2VcbiAgICogKHNlc3Npb25TdG9yYWdlOiB1c2VyX0luZm8sIGN1cnJlbnRVc2VyOyBsb2NhbFN0b3JhZ2U6IGN1cnJlbnRVc2VyLCBDb21wYW55RGF0YSwgdXNlcl9JbmZvKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZWN0QnJvd3NlclNlc3Npb24oKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIGNvbnN0IHJlc3VsdDogU2Vzc2lvbkNvbnRleHRNYXAgPSB7fTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiByZXN1bHQ7XG5cbiAgICBjb25zdCBzb3VyY2VzOiBBcnJheTx7IHN0b3JhZ2U6IFN0b3JhZ2UgfCBudWxsOyBrZXk6IHN0cmluZyB9PiA9IFtcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIHNlc3Npb25TdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IHNlc3Npb25TdG9yYWdlIDogbnVsbCwga2V5OiAndXNlcl9JbmZvJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ2N1cnJlbnRVc2VyJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ0NvbXBhbnlEYXRhJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gc2Vzc2lvblN0b3JhZ2UgOiBudWxsLCBrZXk6ICdjdXJyZW50VXNlcicgfSxcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UgOiBudWxsLCBrZXk6ICd1c2VyX0luZm8nIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZXMpIHtcbiAgICAgIGlmICghc3JjLnN0b3JhZ2UpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNyYy5zdG9yYWdlLmdldEl0ZW0oc3JjLmtleSk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB2ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoayBpbiByZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBKU09OIHBhcnNlIGVycm9ycyBpbiBzdG9yYWdlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcGFyYW1ldGVyIG9yIHNlc3Npb24ga2V5IGludG8gYSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHN0cmluZ1xuICAgKiBmb3IgcmVsaWFibGUsIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBzeW1ib2wtaW5zZW5zaXRpdmUgbWF0Y2hpbmcuXG4gICAqIFN0cmlwcyBTUUwgU2VydmVyIEh1bmdhcmlhbiB0eXBlIHByZWZpeGVzIChlLmcuICdAY2hyQ29tcGFueUlkJyAtPiAnY29tcGFueWlkJykuXG4gICAqL1xuICBub3JtYWxpemVLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleVxuICAgICAgLnJlcGxhY2UoL15AKy8sICcnKVxuICAgICAgLnJlcGxhY2UoL14oY2hyfGludHx2Y2hyfG5jaHJ8ZHR8c3RyfG51bXxiaXR8ZGVjfGZsdCkrL2ksICcnKVxuICAgICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgJycpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1hdGNoZXMgYW55IGtleSBpbiB0aGUgYWN0aXZlIHNlc3Npb24gY29udGV4dC5cbiAgICogU3VwcG9ydHMgZXhhY3QsIG5vcm1hbGl6ZWQsIGFuZCBjb21tb24gRVJQIHN5bm9ueW1zLlxuICAgKi9cbiAgbWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lOiBzdHJpbmcpOiBTZXNzaW9uUGFyYW1NYXRjaCB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IHNlc3Npb25LZXlzID0gT2JqZWN0LmtleXMoc2Vzc2lvbik7XG4gICAgaWYgKHNlc3Npb25LZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub3JtYWxpemVkUGFyYW0gPSB0aGlzLm5vcm1hbGl6ZUtleShwYXJhbU5hbWUpO1xuXG4gICAgLy8gMS4gRXhhY3QgbWF0Y2ggb24gcmF3IG5hbWVcbiAgICBpZiAocGFyYW1OYW1lIGluIHNlc3Npb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgc2Vzc2lvbktleTogcGFyYW1OYW1lLFxuICAgICAgICB2YWx1ZTogc2Vzc2lvbltwYXJhbU5hbWVdLFxuICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIocGFyYW1OYW1lKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gMi4gRGlyZWN0IG5vcm1hbGl6ZWQgbWF0Y2hcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZXNzaW9uS2V5cykge1xuICAgICAgaWYgKHRoaXMubm9ybWFsaXplS2V5KGtleSkgPT09IG5vcm1hbGl6ZWRQYXJhbSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICBzZXNzaW9uS2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHNlc3Npb25ba2V5XSxcbiAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBDb21tb24gRVJQIHN5bm9ueW0gZ3JvdXBzIChiaWRpcmVjdGlvbmFsIG1hdGNoaW5nKVxuICAgIGNvbnN0IHN5bm9ueW1Hcm91cHM6IHN0cmluZ1tdW10gPSBbXG4gICAgICBbJ2JyYW5jaCcsICdicmFuY2hpZCcsICdiaWQnLCAnYnJhbmNoY29kZScsICdsb2NhdGlvbmlkJywgJ2xvY2F0aW9uJywgJ2NvbXB1bml0JywgJ2NvbXB1bml0aWQnLCAndW5pdGNvZGUnLCAndW5pdGlkJywgJ2NvbXB1bml0cyddLFxuICAgICAgWydjb21wYW55JywgJ2NvbXBhbnlpZCcsICdjaWQnLCAnY29tcGFueWNvZGUnLCAndGVuYW50JywgJ3RlbmFudGlkJ10sXG4gICAgICBbJ3VzZXInLCAndXNlcmlkJywgJ3VpZCcsICd1c2VyY29kZScsICdvcGVyYXRvcmlkJywgJ2xvZ2ludXNlcicsICd1c2VybmFtZSddLFxuICAgICAgWydmaW5hbmNpYWx5ZWFyJywgJ2ZpbmFuY2lhbHllYXJpZCcsICd5ZWFyaWQnLCAnZnllYXInLCAnZmlzY2FseWVhcicsICdmaW55ZWFyJ10sXG4gICAgICBbJ2xvZ2luaWRlbnRpdHknLCAnbG9naW5faWRlbnRpdHknLCAnc3RhdHVzY29kZScsICdzdGF0dXNfY29kZSddLFxuICAgICAgWydvcmcnLCAnb3JnaWQnLCAnb3JnYW5pemF0aW9uJywgJ29yZ2FuaXphdGlvbmlkJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3lub255bUdyb3Vwcykge1xuICAgICAgaWYgKGdyb3VwLmluY2x1ZGVzKG5vcm1hbGl6ZWRQYXJhbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVLZXkoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGRlcml2ZXMgYWxsIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyczpcbiAgICogLSBQcmVzZXJ2ZXMgZXhwbGljaXQgb3ZlcnJpZGVzIChlLmcuIGZyb20gY2FudmFzIGZvcm0gY29udHJvbHMgb3IgbWFudWFsIGlucHV0cylcbiAgICogLSBBdXRvbWF0aWNhbGx5IGluamVjdHMgbWF0Y2hlZCBzZXNzaW9uIHBhcmFtZXRlcnNcbiAgICogLSBWYWxpZGF0ZXMgd2hldGhlciByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBmdWxmaWxsZWRcbiAgICovXG4gIGRlcml2ZVBhcmFtZXRlcnMoXG4gICAgc3BQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10sXG4gICAgZXhwbGljaXRNYXBwaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuICApOiBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3QgZmluYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgYXV0b0Rlcml2ZWQ6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPiA9IHt9O1xuICAgIGNvbnN0IHVucmVzb2x2ZWRSZXF1aXJlZDogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzcFBhcmFtcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIGNvbnN0IGV4cGxpY2l0VmFsID0gZXhwbGljaXRNYXBwaW5nc1twYXJhbU5hbWVdO1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIG9yIGNhbnZhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGEgdmFsdWUgKGFuZCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdCA9IGV4cGxpY2l0VmFsICE9PSB1bmRlZmluZWQgJiYgZXhwbGljaXRWYWwgIT09ICcnICYmIGV4cGxpY2l0VmFsICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzRXhwbGljaXQpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IGV4cGxpY2l0VmFsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlc3Npb24gY29udGV4dCBtYXRjaCAoc2tpcCB3aGVuIGF1dG9QYXJhbWV0ZXIgaXMgZGlzYWJsZWQpXG4gICAgICBpZiAodGhpcy5yZXBvcnRpbmdDb25maWc/LmF1dG9QYXJhbWV0ZXIgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25NYXRjaCA9IHRoaXMubWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lKTtcbiAgICAgICAgaWYgKHNlc3Npb25NYXRjaCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gc2Vzc2lvbk1hdGNoLnZhbHVlO1xuICAgICAgICAgIGF1dG9EZXJpdmVkW3BhcmFtTmFtZV0gPSBzZXNzaW9uTWF0Y2g7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgZGVmYXVsdCB2YWx1ZSBpcyBwcm92aWRlZCBpbiBTUCBtZXRhZGF0YVxuICAgICAgaWYgKHBhcmFtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gcGFyYW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcmVxdWlyZWQgYnV0IG5vdCBzYXRpc2ZpZWRcbiAgICAgIGlmIChwYXJhbS5yZXF1aXJlZCkge1xuICAgICAgICB1bnJlc29sdmVkUmVxdWlyZWQucHVzaChwYXJhbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxzbyBpbmNsdWRlIGFueSBleHRyYSBleHBsaWNpdCBtYXBwaW5ncyB0aGF0IGRpZG4ndCBtYXRjaCBwYXJhbWV0ZXIgbGlzdFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhleHBsaWNpdE1hcHBpbmdzKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGZpbmFsUGFyYW1zKSAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSAnJykge1xuICAgICAgICBmaW5hbFBhcmFtc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYXJhbWV0ZXJzOiBmaW5hbFBhcmFtcyxcbiAgICAgIGF1dG9EZXJpdmVkUGFyYW1zOiBhdXRvRGVyaXZlZCxcbiAgICAgIHVucmVzb2x2ZWRSZXF1aXJlZFBhcmFtczogdW5yZXNvbHZlZFJlcXVpcmVkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /** Internal reactive configuration owned by one embedded designer. */
3
+ export const DESIGNER_LOCAL_CONFIG = new InjectionToken('DESIGNER_LOCAL_CONFIG');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItY29uZmlnLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS90b2tlbnMvZGVzaWduZXItY29uZmlnLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHdkQsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFtQyx1QkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQndheXNSZXBvcnRDb25maWcgfSBmcm9tICcuLi9jb25maWcvYndheXMtcmVwb3J0LWNvbmZpZyc7XG5cbi8qKiBJbnRlcm5hbCByZWFjdGl2ZSBjb25maWd1cmF0aW9uIG93bmVkIGJ5IG9uZSBlbWJlZGRlZCBkZXNpZ25lci4gKi9cbmV4cG9ydCBjb25zdCBERVNJR05FUl9MT0NBTF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2lnbmFsPEJ3YXlzUmVwb3J0Q29uZmlnIHwgbnVsbD4+KCdERVNJR05FUl9MT0NBTF9DT05GSUcnKTtcbiJdfQ==
@@ -23,4 +23,4 @@ export const CHART_COMPONENT = new InjectionToken('CHART_COMPONENT');
23
23
  * Injection token for the reporting library configuration.
24
24
  */
25
25
  export const REPORTING_CONFIG = new InjectionToken('REPORTING_CONFIG');
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBK0NyRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsZ0JBQWdCLENBQUMsQ0FBQztBQUVsRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsaUJBQWlCLENBQUMsQ0FBQztBQUVwRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFrQixrQkFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uIHRva2Vucy5cbiAqXG4gKiBDb3JlIGNvbmZpZ3VyYXRpb24gbW9kZWxzIGFuZCBpbmplY3Rpb24gdG9rZW5zLlxuICogRGVjb3VwbGVkIGZyb20gVUkgcHJpbWl0aXZlcyBhbmQgZGF0YS1hY2Nlc3MgYWRhcHRlcnMuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBMaWJyYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdDb25maWcge1xuICAvKiogRGVmYXVsdCBwYWdlIHNpemUgZm9yIGdyaWRzLiAqL1xuICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcblxuICAvKiogRGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgYWNyb3NzIHRoZSBsaWJyYXJ5LiAqL1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIERlc2lnbmVyIGZlYXR1cmUgaXMgZW5hYmxlZC4gKi9cbiAgZW5hYmxlRGVzaWduZXI6IGJvb2xlYW47XG5cbiAgLyoqIEN1cnJlbnQgc2NoZW1hIHZlcnNpb24gZm9yIG5ldyByZXBvcnRzLiAqL1xuICBzY2hlbWFWZXJzaW9uOiBudW1iZXI7XG5cbiAgLyoqIEJhc2UgVVJMIGZvciBiYWNrZW5kIHJlcG9ydGluZyBlbmRwb2ludHMgKE5lc3RKUyAvIC5ORVQgLyBSRVNUIEFQSSkuICovXG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgYXV0b21hdGljIGJhY2tlbmQgc2NoZW1hIGRpc2NvdmVyeSAoU1BzICYgVGFibGVzKSBpcyBlbmFibGVkLiAqL1xuICBlbmFibGVTY2hlbWFEaXNjb3Zlcnk/OiBib29sZWFuO1xuXG4gIC8qKiBPcHRpb25hbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZHJvcGRvd24gbG9va3VwIHF1ZXJpZXMgKGRlZmF1bHRzIHRvIDMwMDAwMG1zIC8gNSBtaW51dGVzKS4gKi9cbiAgbG9va3VwVGltZW91dE1zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBjYXRlZ29yeSBJRHMgdG8gc2hvdyBpbiB0aGUgZGVzaWduZXIgcGFsZXR0ZS5cbiAgICogV2hlbiBudWxsL3VuZGVmaW5lZCwgYWxsIGNhdGVnb3JpZXMgYXJlIHNob3duLlxuICAgKiBTZXQgYnkgdGhlIEJ3YXlzUmVwb3J0Q29uZmlnIG5vcm1hbGl6ZXIgZnJvbSBmcmllbmRseSBuYW1lcy5cbiAgICovXG4gIGFsbG93ZWRDYXRlZ29yaWVzPzogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGF1dG8tYmluZCBTUCBwYXJhbWV0ZXJzIGZyb20gdGhlIHNlc3Npb24gY29udGV4dC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1BhcmFtZXRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJhc2Ugcm91dGUgcGF0aCBmb3IgbGl2ZSByZXBvcnQgcGFnZXMuXG4gICAqIEBkZWZhdWx0ICdyZXBvcnRzJ1xuICAgKi9cbiAgcm91dGVCYXNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyaWQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IHByb3ZpZGVzIHRoZWlyIGdyaWQgY29tcG9uZW50IChCV2F5cy1ncmlkLCBBRyBHcmlkIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCByZXNvbHZlcyBpdCBhdCBydW50aW1lLlxuICovXG5leHBvcnQgY29uc3QgR1JJRF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTx1bmtub3duPj4oJ0dSSURfQ09NUE9ORU5UJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciB0aGUgY2hhcnQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IGNhbiBwcm92aWRlIHRoZWlyIHByZWZlcnJlZCBjaGFydCBjb21wb25lbnQgKENoYXJ0LmpzLCBIaWdoY2hhcnRzLCBBcGV4Q2hhcnRzIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRDaGFydEJyaWRnZUNvbXBvbmVudGAgZGVsZWdhdGVzIHJlbmRlcmluZyB0byBpdCwgb3IgZmFsbHMgYmFjayB0byBidWlsdC1pbiBTVkcgY2hhcnRzLlxuICovXG5leHBvcnQgY29uc3QgQ0hBUlRfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8dW5rbm93bj4+KCdDSEFSVF9DT01QT05FTlQnKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHRoZSByZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVQT1JUSU5HX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZXBvcnRpbmdDb25maWc+KCdSRVBPUlRJTkdfQ09ORklHJyk7XG4iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWNvbmZpZy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBb0RyRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsZ0JBQWdCLENBQUMsQ0FBQztBQUVsRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsaUJBQWlCLENBQUMsQ0FBQztBQUVwRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFrQixrQkFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uIHRva2Vucy5cbiAqXG4gKiBDb3JlIGNvbmZpZ3VyYXRpb24gbW9kZWxzIGFuZCBpbmplY3Rpb24gdG9rZW5zLlxuICogRGVjb3VwbGVkIGZyb20gVUkgcHJpbWl0aXZlcyBhbmQgZGF0YS1hY2Nlc3MgYWRhcHRlcnMuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBMaWJyYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdDb25maWcge1xuICAvKiogRGVmYXVsdCBwYWdlIHNpemUgZm9yIGdyaWRzLiAqL1xuICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcblxuICAvKiogRGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgYWNyb3NzIHRoZSBsaWJyYXJ5LiAqL1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIERlc2lnbmVyIGZlYXR1cmUgaXMgZW5hYmxlZC4gKi9cbiAgZW5hYmxlRGVzaWduZXI6IGJvb2xlYW47XG5cbiAgLyoqIEN1cnJlbnQgc2NoZW1hIHZlcnNpb24gZm9yIG5ldyByZXBvcnRzLiAqL1xuICBzY2hlbWFWZXJzaW9uOiBudW1iZXI7XG5cbiAgLyoqIEJhc2UgVVJMIGZvciBiYWNrZW5kIHJlcG9ydGluZyBlbmRwb2ludHMgKE5lc3RKUyAvIC5ORVQgLyBSRVNUIEFQSSkuICovXG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgYXV0b21hdGljIGJhY2tlbmQgc2NoZW1hIGRpc2NvdmVyeSAoU1BzICYgVGFibGVzKSBpcyBlbmFibGVkLiAqL1xuICBlbmFibGVTY2hlbWFEaXNjb3Zlcnk/OiBib29sZWFuO1xuXG4gIC8qKiBPcHRpb25hbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZHJvcGRvd24gbG9va3VwIHF1ZXJpZXMgKGRlZmF1bHRzIHRvIDMwMDAwMG1zIC8gNSBtaW51dGVzKS4gKi9cbiAgbG9va3VwVGltZW91dE1zPzogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIGR1cmF0aW9uIG9mIGFuIGV4ZWN1dGlvbiByZXF1ZXN0IChkZWZhdWx0cyB0byBsb29rdXBUaW1lb3V0TXMpLiAqL1xuICBleGVjdXRpb25UaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBFeGFjdCBIVFRQKFMpIG9yaWdpbnMgcGVybWl0dGVkIHRvIHJlY2VpdmUgQVBJIGNyZWRlbnRpYWxzIGFuZCBjdXN0b20gaGVhZGVycy4gU2FtZS1vcmlnaW4gaXMgdHJ1c3RlZCBieSBkZWZhdWx0LiAqL1xuICB0cnVzdGVkQXBpT3JpZ2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBjYXRlZ29yeSBJRHMgdG8gc2hvdyBpbiB0aGUgZGVzaWduZXIgcGFsZXR0ZS5cbiAgICogV2hlbiBudWxsL3VuZGVmaW5lZCwgYWxsIGNhdGVnb3JpZXMgYXJlIHNob3duLlxuICAgKiBTZXQgYnkgdGhlIEJ3YXlzUmVwb3J0Q29uZmlnIG5vcm1hbGl6ZXIgZnJvbSBmcmllbmRseSBuYW1lcy5cbiAgICovXG4gIGFsbG93ZWRDYXRlZ29yaWVzPzogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGF1dG8tYmluZCBTUCBwYXJhbWV0ZXJzIGZyb20gdGhlIHNlc3Npb24gY29udGV4dC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1BhcmFtZXRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJhc2Ugcm91dGUgcGF0aCBmb3IgbGl2ZSByZXBvcnQgcGFnZXMuXG4gICAqIEBkZWZhdWx0ICdyZXBvcnRzJ1xuICAgKi9cbiAgcm91dGVCYXNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyaWQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IHByb3ZpZGVzIHRoZWlyIGdyaWQgY29tcG9uZW50IChCV2F5cy1ncmlkLCBBRyBHcmlkIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCByZXNvbHZlcyBpdCBhdCBydW50aW1lLlxuICovXG5leHBvcnQgY29uc3QgR1JJRF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTx1bmtub3duPj4oJ0dSSURfQ09NUE9ORU5UJyk7XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciB0aGUgY2hhcnQgY29tcG9uZW50LlxuICpcbiAqIFRoZSBob3N0IGNhbiBwcm92aWRlIHRoZWlyIHByZWZlcnJlZCBjaGFydCBjb21wb25lbnQgKENoYXJ0LmpzLCBIaWdoY2hhcnRzLCBBcGV4Q2hhcnRzIHdyYXBwZXIsIGV0Yy4pXG4gKiBhbmQgdGhlIGBSZXBvcnRDaGFydEJyaWRnZUNvbXBvbmVudGAgZGVsZWdhdGVzIHJlbmRlcmluZyB0byBpdCwgb3IgZmFsbHMgYmFjayB0byBidWlsdC1pbiBTVkcgY2hhcnRzLlxuICovXG5leHBvcnQgY29uc3QgQ0hBUlRfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8dW5rbm93bj4+KCdDSEFSVF9DT01QT05FTlQnKTtcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHRoZSByZXBvcnRpbmcgbGlicmFyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgUkVQT1JUSU5HX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxSZXBvcnRpbmdDb25maWc+KCdSRVBPUlRJTkdfQ09ORklHJyk7XG4iXX0=
@@ -0,0 +1,22 @@
1
+ /** Built-in report storage uses the same reporting service; no separate save URL is required. */
2
+ export function resolveReportsEndpoint(source) {
3
+ const clean = (value) => value.trim().replace(/\/+$/, '');
4
+ if (source.reportsEndpoint?.trim())
5
+ return clean(source.reportsEndpoint);
6
+ if (source.apiBaseUrl?.trim())
7
+ return clean(source.apiBaseUrl) + '/reports';
8
+ const endpoints = [source.executeEndpoint, source.spEndpoint, source.tablesEndpoint, source.lookupEndpoint, source.apisEndpoint];
9
+ for (const endpoint of endpoints) {
10
+ if (!endpoint?.trim())
11
+ continue;
12
+ const path = clean(endpoint.split(/[?#]/, 1)[0]);
13
+ const base = path.replace(/\/(?:schema\/)?(?:execute|procedures|tables|lookup|apis)$/i, '');
14
+ if (base !== path)
15
+ return base + '/reports';
16
+ }
17
+ const absolute = endpoints.find(endpoint => endpoint && /^https?:\/\//i.test(endpoint));
18
+ if (absolute)
19
+ return new URL('/api/reporting/reports', absolute).href;
20
+ return '/api/reporting/reports';
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWVuZHBvaW50LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3V0aWxzL3JlcG9ydC1lbmRwb2ludC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLGlHQUFpRztBQUNqRyxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBK0I7SUFDcEUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUU7UUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDekUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRTtRQUFFLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDNUUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqSSxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQUUsU0FBUztRQUNoQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLDREQUE0RCxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLElBQUksSUFBSSxLQUFLLElBQUk7WUFBRSxPQUFPLElBQUksR0FBRyxVQUFVLENBQUM7SUFDOUMsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLElBQUksUUFBUTtRQUFFLE9BQU8sSUFBSSxHQUFHLENBQUMsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RFLE9BQU8sd0JBQXdCLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBSZXBvcnRpbmdFbmRwb2ludFNvdXJjZSB7XG4gIHJlcG9ydHNFbmRwb2ludD86IHN0cmluZyB8IG51bGw7XG4gIGFwaUJhc2VVcmw/OiBzdHJpbmcgfCBudWxsO1xuICBleGVjdXRlRW5kcG9pbnQ/OiBzdHJpbmcgfCBudWxsO1xuICBzcEVuZHBvaW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgdGFibGVzRW5kcG9pbnQ/OiBzdHJpbmcgfCBudWxsO1xuICBsb29rdXBFbmRwb2ludD86IHN0cmluZyB8IG51bGw7XG4gIGFwaXNFbmRwb2ludD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBCdWlsdC1pbiByZXBvcnQgc3RvcmFnZSB1c2VzIHRoZSBzYW1lIHJlcG9ydGluZyBzZXJ2aWNlOyBubyBzZXBhcmF0ZSBzYXZlIFVSTCBpcyByZXF1aXJlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVwb3J0c0VuZHBvaW50KHNvdXJjZTogUmVwb3J0aW5nRW5kcG9pbnRTb3VyY2UpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbiA9ICh2YWx1ZTogc3RyaW5nKSA9PiB2YWx1ZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIGlmIChzb3VyY2UucmVwb3J0c0VuZHBvaW50Py50cmltKCkpIHJldHVybiBjbGVhbihzb3VyY2UucmVwb3J0c0VuZHBvaW50KTtcbiAgaWYgKHNvdXJjZS5hcGlCYXNlVXJsPy50cmltKCkpIHJldHVybiBjbGVhbihzb3VyY2UuYXBpQmFzZVVybCkgKyAnL3JlcG9ydHMnO1xuICBjb25zdCBlbmRwb2ludHMgPSBbc291cmNlLmV4ZWN1dGVFbmRwb2ludCwgc291cmNlLnNwRW5kcG9pbnQsIHNvdXJjZS50YWJsZXNFbmRwb2ludCwgc291cmNlLmxvb2t1cEVuZHBvaW50LCBzb3VyY2UuYXBpc0VuZHBvaW50XTtcbiAgZm9yIChjb25zdCBlbmRwb2ludCBvZiBlbmRwb2ludHMpIHtcbiAgICBpZiAoIWVuZHBvaW50Py50cmltKCkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBhdGggPSBjbGVhbihlbmRwb2ludC5zcGxpdCgvWz8jXS8sIDEpWzBdKTtcbiAgICBjb25zdCBiYXNlID0gcGF0aC5yZXBsYWNlKC9cXC8oPzpzY2hlbWFcXC8pPyg/OmV4ZWN1dGV8cHJvY2VkdXJlc3x0YWJsZXN8bG9va3VwfGFwaXMpJC9pLCAnJyk7XG4gICAgaWYgKGJhc2UgIT09IHBhdGgpIHJldHVybiBiYXNlICsgJy9yZXBvcnRzJztcbiAgfVxuICBjb25zdCBhYnNvbHV0ZSA9IGVuZHBvaW50cy5maW5kKGVuZHBvaW50ID0+IGVuZHBvaW50ICYmIC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QoZW5kcG9pbnQpKTtcbiAgaWYgKGFic29sdXRlKSByZXR1cm4gbmV3IFVSTCgnL2FwaS9yZXBvcnRpbmcvcmVwb3J0cycsIGFic29sdXRlKS5ocmVmO1xuICByZXR1cm4gJy9hcGkvcmVwb3J0aW5nL3JlcG9ydHMnO1xufVxuIl19
@@ -0,0 +1,48 @@
1
+ import { DestroyRef, inject } from '@angular/core';
2
+ import { defer, finalize, map, take, timeout } from 'rxjs';
3
+ import { ReportSessionContextService } from '../services/report-session-context.service';
4
+ import { BWAYS_REPORT_ENDPOINTS } from '../../data-access/adapters/endpoint-tokens';
5
+ import { REPORTING_CONFIG } from '../tokens/reporting-config.token';
6
+ /** One owner per component. Replacing a channel cancels its previous request. */
7
+ export class ReportRequestScope {
8
+ session = inject(ReportSessionContextService, { optional: true });
9
+ endpoints = inject(BWAYS_REPORT_ENDPOINTS, { optional: true });
10
+ config = inject(REPORTING_CONFIG, { optional: true });
11
+ active = new Map();
12
+ constructor() { inject(DestroyRef).onDestroy(() => this.cancelAll()); }
13
+ context() {
14
+ return JSON.stringify([this.session?.getCurrentSessionContext() ?? {}, this.endpoints ? { ...this.endpoints } : null]);
15
+ }
16
+ cancel(channel, settle = true) {
17
+ const slot = this.active.get(channel);
18
+ if (!slot)
19
+ return;
20
+ this.active.delete(channel);
21
+ slot.subscription?.unsubscribe();
22
+ if (settle)
23
+ slot.settled();
24
+ }
25
+ isActive(channel) { return this.active.has(channel); }
26
+ cancelAll() { for (const channel of [...this.active.keys()])
27
+ this.cancel(channel); }
28
+ run(channel, factory, next, error, settled = () => { }) {
29
+ // The caller has already set the new request's busy state. A replaced
30
+ // request must not clear it while the replacement is still pending.
31
+ this.cancel(channel, false);
32
+ const context = this.context();
33
+ const slot = { settled };
34
+ this.active.set(channel, slot);
35
+ const duration = this.config?.executionTimeoutMs ?? this.config?.lookupTimeoutMs ?? 300000;
36
+ slot.subscription = defer(factory).pipe(take(1), timeout({ first: duration }), map(value => {
37
+ if (this.context() !== context)
38
+ throw new Error('Reporting context changed. Please retry.');
39
+ return value;
40
+ }), finalize(() => {
41
+ if (this.active.get(channel) === slot) {
42
+ this.active.delete(channel);
43
+ settled();
44
+ }
45
+ })).subscribe({ next, error: value => error(value instanceof Error ? value : new Error(String(value))) });
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJlcXVlc3Qtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3V0aWxzL3JlcG9ydC1yZXF1ZXN0LXNjb3BlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBNEIsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVwRSxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLGtCQUFrQjtJQUNaLE9BQU8sR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxTQUFTLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBZ0UsQ0FBQztJQUVsRyxnQkFBZ0IsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6SCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQWUsRUFBRSxNQUFNLEdBQUcsSUFBSTtRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE1BQU07WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFlLElBQWEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsU0FBUyxLQUFXLEtBQUssTUFBTSxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRixHQUFHLENBQUksT0FBZSxFQUFFLE9BQTRCLEVBQUUsSUFBd0IsRUFDNUUsS0FBNkIsRUFBRSxVQUFzQixHQUFHLEVBQUUsR0FBRSxDQUFDO1FBQzdELHNFQUFzRTtRQUN0RSxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUF5RCxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGtCQUFrQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxJQUFJLE1BQU0sQ0FBQztRQUMzRixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFDckMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssT0FBTztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDNUYsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFBQyxPQUFPLEVBQUUsQ0FBQztZQUFDLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWZlciwgZmluYWxpemUsIG1hcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCB0YWtlLCB0aW1lb3V0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuXG4vKiogT25lIG93bmVyIHBlciBjb21wb25lbnQuIFJlcGxhY2luZyBhIGNoYW5uZWwgY2FuY2VscyBpdHMgcHJldmlvdXMgcmVxdWVzdC4gKi9cbmV4cG9ydCBjbGFzcyBSZXBvcnRSZXF1ZXN0U2NvcGUge1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50cyA9IGluamVjdChCV0FZU19SRVBPUlRfRU5EUE9JTlRTLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZSA9IG5ldyBNYXA8c3RyaW5nLCB7IHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjsgc2V0dGxlZDogKCkgPT4gdm9pZCB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHRoaXMuY2FuY2VsQWxsKCkpOyB9XG5cbiAgY29udGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShbdGhpcy5zZXNzaW9uPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fSwgdGhpcy5lbmRwb2ludHMgPyB7IC4uLnRoaXMuZW5kcG9pbnRzIH0gOiBudWxsXSk7XG4gIH1cblxuICBjYW5jZWwoY2hhbm5lbDogc3RyaW5nLCBzZXR0bGUgPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3Qgc2xvdCA9IHRoaXMuYWN0aXZlLmdldChjaGFubmVsKTtcbiAgICBpZiAoIXNsb3QpIHJldHVybjtcbiAgICB0aGlzLmFjdGl2ZS5kZWxldGUoY2hhbm5lbCk7XG4gICAgc2xvdC5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHNldHRsZSkgc2xvdC5zZXR0bGVkKCk7XG4gIH1cblxuICBpc0FjdGl2ZShjaGFubmVsOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWN0aXZlLmhhcyhjaGFubmVsKTsgfVxuXG4gIGNhbmNlbEFsbCgpOiB2b2lkIHsgZm9yIChjb25zdCBjaGFubmVsIG9mIFsuLi50aGlzLmFjdGl2ZS5rZXlzKCldKSB0aGlzLmNhbmNlbChjaGFubmVsKTsgfVxuXG4gIHJ1bjxUPihjaGFubmVsOiBzdHJpbmcsIGZhY3Rvcnk6ICgpID0+IE9ic2VydmFibGU8VD4sIG5leHQ6ICh2YWx1ZTogVCkgPT4gdm9pZCxcbiAgICBlcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZCwgc2V0dGxlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9KTogdm9pZCB7XG4gICAgLy8gVGhlIGNhbGxlciBoYXMgYWxyZWFkeSBzZXQgdGhlIG5ldyByZXF1ZXN0J3MgYnVzeSBzdGF0ZS4gQSByZXBsYWNlZFxuICAgIC8vIHJlcXVlc3QgbXVzdCBub3QgY2xlYXIgaXQgd2hpbGUgdGhlIHJlcGxhY2VtZW50IGlzIHN0aWxsIHBlbmRpbmcuXG4gICAgdGhpcy5jYW5jZWwoY2hhbm5lbCwgZmFsc2UpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQoKTtcbiAgICBjb25zdCBzbG90OiB7IHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjsgc2V0dGxlZDogKCkgPT4gdm9pZCB9ID0geyBzZXR0bGVkIH07XG4gICAgdGhpcy5hY3RpdmUuc2V0KGNoYW5uZWwsIHNsb3QpO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5jb25maWc/LmV4ZWN1dGlvblRpbWVvdXRNcyA/PyB0aGlzLmNvbmZpZz8ubG9va3VwVGltZW91dE1zID8/IDMwMDAwMDtcbiAgICBzbG90LnN1YnNjcmlwdGlvbiA9IGRlZmVyKGZhY3RvcnkpLnBpcGUoXG4gICAgICB0YWtlKDEpLCB0aW1lb3V0KHsgZmlyc3Q6IGR1cmF0aW9uIH0pLFxuICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCgpICE9PSBjb250ZXh0KSB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9ydGluZyBjb250ZXh0IGNoYW5nZWQuIFBsZWFzZSByZXRyeS4nKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSksXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZS5nZXQoY2hhbm5lbCkgPT09IHNsb3QpIHsgdGhpcy5hY3RpdmUuZGVsZXRlKGNoYW5uZWwpOyBzZXR0bGVkKCk7IH1cbiAgICAgIH0pLFxuICAgICkuc3Vic2NyaWJlKHsgbmV4dCwgZXJyb3I6IHZhbHVlID0+IGVycm9yKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB2YWx1ZSA6IG5ldyBFcnJvcihTdHJpbmcodmFsdWUpKSkgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { resolveParameterMappings } from '../../core/utils/report-parameter.util';
1
2
  /**
2
3
  * Endpoint-based data source adapter.
3
4
  *
@@ -30,6 +31,9 @@ export class EndpointDataSourceAdapter extends ReportDataSourceAdapter {
30
31
  bodyTemplate: dataSource.bodyTemplate,
31
32
  }, parameters);
32
33
  }
34
+ if (!this.endpoints.executeEndpoint) {
35
+ return throwError(() => new Error('[bways-report] No executeEndpoint configured.'));
36
+ }
33
37
  const session = this.sessionService?.sessionContext() ?? {};
34
38
  let headers = new HttpHeaders();
35
39
  if (session['companyId'] !== undefined && session['companyId'] !== null) {
@@ -44,6 +48,9 @@ export class EndpointDataSourceAdapter extends ReportDataSourceAdapter {
44
48
  name: dataSource.endpoint || dataSource.name,
45
49
  schema: dataSource.schema ?? 'dbo',
46
50
  parameters: { ...parameters },
51
+ columns: dataSource.columns,
52
+ top: dataSource.top,
53
+ filter: dataSource.filter ? resolveParameterMappings(dataSource.filter, session, parameters) : undefined,
47
54
  dataSource: {
48
55
  id: dataSource.id || dataSource.name,
49
56
  type: kind === 'procedure' ? 'stored_procedure' : (dataSource.type || 'table'),
@@ -89,4 +96,4 @@ export class EndpointDataSourceAdapter extends ReportDataSourceAdapter {
89
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointDataSourceAdapter, decorators: [{
90
97
  type: Injectable
91
98
  }] });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWUzRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsdUJBQXVCO0lBQ25ELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNDLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxtQkFBbUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENB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QUFDLElBQUksS0FBSyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEcsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQTlFVSx5QkFBeUI7NEdBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW5kcG9pbnQtYmFzZWQgZGF0YSBzb3VyY2UgYWRhcHRlci5cbiAqXG4gKiBDYWxscyB0aGUgYGV4ZWN1dGVFbmRwb2ludGAgZGlyZWN0bHkgd2l0aCBhIG5vcm1hbGl6ZWQgcGF5bG9hZC5cbiAqIFJlcGxhY2VzIHRoZSBgYXBpQmFzZVVybCArIC9leGVjdXRlYCBwYXR0ZXJuLlxuICovXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kYXRhc291cmNlLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1hcGktZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdFJvd0FycmF5IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBCV0FZU19SRVBPUlRfRU5EUE9JTlRTIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuXG4vKipcbiAqIFJlcXVlc3QgcGF5bG9hZCBmb3IgdGhlIHNpbXBsaWZpZWQgZXhlY3V0ZSBlbmRwb2ludC5cbiAqL1xuaW50ZXJmYWNlIEVuZHBvaW50RXhlY3V0ZVBheWxvYWQge1xuICBraW5kOiAncHJvY2VkdXJlJyB8ICd0YWJsZSc7XG4gIG5hbWU6IHN0cmluZztcbiAgc2NoZW1hOiBzdHJpbmc7XG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb2x1bW5zPzogc3RyaW5nW107XG4gIHRvcD86IG51bWJlcjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVuZHBvaW50RGF0YVNvdXJjZUFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBleGVjdXRlKFxuICAgIGRhdGFTb3VyY2U6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uLFxuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgaWYgKHRoaXMuaXNBcGlTb3VyY2UoZGF0YVNvdXJjZSkgJiYgdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlLmV4ZWN1dGVBcGkoXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRwb2ludDogZGF0YVNvdXJjZS5lbmRwb2ludCB8fCBkYXRhU291cmNlLm5hbWUsXG4gICAgICAgICAgbWV0aG9kOiBkYXRhU291cmNlLm1ldGhvZCBhcyBhbnksXG4gICAgICAgICAgZGF0YVBhdGg6IGRhdGFTb3VyY2UuZGF0YVBhdGgsXG4gICAgICAgICAgaGVhZGVyczogZGF0YVNvdXJjZS5oZWFkZXJzLFxuICAgICAgICAgIHVzZVByb3h5OiBkYXRhU291cmNlLnVzZVByb3h5LFxuICAgICAgICAgIGJvZHlUZW1wbGF0ZTogZGF0YVNvdXJjZS5ib2R5VGVtcGxhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHBhcmFtZXRlcnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LnNlc3Npb25Db250ZXh0KCkgPz8ge307XG5cbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIGlmIChzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgIH1cbiAgICBpZiAoc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmQgPSB0aGlzLnJlc29sdmVLaW5kKGRhdGFTb3VyY2UpO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBraW5kLFxuICAgICAgbmFtZTogZGF0YVNvdXJjZS5lbmRwb2ludCB8fCBkYXRhU291cmNlLm5hbWUsXG4gICAgICBzY2hlbWE6IGRhdGFTb3VyY2Uuc2NoZW1hID8/ICdkYm8nLFxuICAgICAgcGFyYW1ldGVyczogeyAuLi5wYXJhbWV0ZXJzIH0sXG4gICAgICBkYXRhU291cmNlOiB7XG4gICAgICAgIGlkOiBkYXRhU291cmNlLmlkIHx8IGRhdGFTb3VyY2UubmFtZSxcbiAgICAgICAgdHlwZToga2luZCA9PT0gJ3Byb2NlZHVyZScgPyAnc3RvcmVkX3Byb2NlZHVyZScgOiAoZGF0YVNvdXJjZS50eXBlIHx8ICd0YWJsZScpLFxuICAgICAgICBuYW1lOiBkYXRhU291cmNlLmVuZHBvaW50IHx8IGRhdGFTb3VyY2UubmFtZSxcbiAgICAgICAgc2NoZW1hOiBkYXRhU291cmNlLnNjaGVtYSA/PyAnZGJvJyxcbiAgICAgIH0sXG4gICAgICBzZXNzaW9uQ29udGV4dDogc2Vzc2lvbixcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8dW5rbm93bj4odGhpcy5lbmRwb2ludHMuZXhlY3V0ZUVuZHBvaW50LCBwYXlsb2FkLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiBleHRyYWN0Um93QXJyYXkocmVzcG9uc2UpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ1JlcG9ydCBleGVjdXRpb24gZmFpbGVkJztcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoQXJyYXkuaXNBcnJheShtc2cpID8gbXNnLmpvaW4oJywgJykgOiBtc2cpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVLaW5kKGRzOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbik6ICdwcm9jZWR1cmUnIHwgJ3RhYmxlJyB7XG4gICAgaWYgKGRzLm1ldGhvZCA9PT0gJ1NUT1JFRF9QUk9DRURVUkUnKSByZXR1cm4gJ3Byb2NlZHVyZSc7XG4gICAgaWYgKGRzLnR5cGUgPT09ICdzdG9yZWRfcHJvY2VkdXJlJykgcmV0dXJuICdwcm9jZWR1cmUnO1xuICAgIGlmIChkcy50eXBlID09PSAndGFibGUnIHx8IGRzLnR5cGUgPT09ICd2aWV3JykgcmV0dXJuICd0YWJsZSc7XG4gICAgLy8gSGV1cmlzdGljOiBuYW1lcyBzdGFydGluZyB3aXRoIHVzcF8gLyBzcF8gYXJlIHByb2NlZHVyZXNcbiAgICBjb25zdCBuYW1lID0gKGRzLmVuZHBvaW50IHx8IGRzLm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgndXNwXycpIHx8IG5hbWUuc3RhcnRzV2l0aCgnc3BfJykpIHJldHVybiAncHJvY2VkdXJlJztcbiAgICByZXR1cm4gJ3RhYmxlJztcbiAgfVxuXG4gIHByaXZhdGUgaXNBcGlTb3VyY2UoZHM6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKGRzLnR5cGUgPT09ICdhcGknKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBlcCA9IChkcy5lbmRwb2ludCB8fCBkcy5uYW1lIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKGVwLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBlcC5zdGFydHNXaXRoKCdodHRwczovLycpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZHMudHlwZSAhPT0gJ3RhYmxlJyAmJiBkcy50eXBlICE9PSAndmlldycgJiYgZHMudHlwZSAhPT0gJ3N0b3JlZF9wcm9jZWR1cmUnICYmIGVwLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2xGOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFNUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWUzRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsdUJBQXVCO0lBQ25ELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUIsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzNDLGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxtQkFBbUIsR0FBRyxNQUFN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QztJQUNqQixDQUFDO0lBRU8sV0FBVyxDQUFDLEVBQThCO1FBQ2hELElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7d0dBcEZVLHlCQUF5Qjs0R0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwnO1xuLyoqXG4gKiBFbmRwb2ludC1iYXNlZCBkYXRhIHNvdXJjZSBhZGFwdGVyLlxuICpcbiAqIENhbGxzIHRoZSBgZXhlY3V0ZUVuZHBvaW50YCBkaXJlY3RseSB3aXRoIGEgbm9ybWFsaXplZCBwYXlsb2FkLlxuICogUmVwbGFjZXMgdGhlIGBhcGlCYXNlVXJsICsgL2V4ZWN1dGVgIHBhdHRlcm4uXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRhdGFzb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LWFwaS1leGVjdXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBleHRyYWN0Um93QXJyYXkgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2RhdGEtbm9ybWFsaXphdGlvbi51dGlsJztcbmltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5cbi8qKlxuICogUmVxdWVzdCBwYXlsb2FkIGZvciB0aGUgc2ltcGxpZmllZCBleGVjdXRlIGVuZHBvaW50LlxuICovXG5pbnRlcmZhY2UgRW5kcG9pbnRFeGVjdXRlUGF5bG9hZCB7XG4gIGtpbmQ6ICdwcm9jZWR1cmUnIHwgJ3RhYmxlJztcbiAgbmFtZTogc3RyaW5nO1xuICBzY2hlbWE6IHN0cmluZztcbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgdG9wPzogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnREYXRhU291cmNlQWRhcHRlciBleHRlbmRzIFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50cyA9IGluamVjdChCV0FZU19SRVBPUlRfRU5EUE9JTlRTKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpRXhlY3V0aW9uU2VydmljZSA9IGluamVjdChSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGV4ZWN1dGUoXG4gICAgZGF0YVNvdXJjZTogUmVwb3J0RGF0YVNvdXJjZURlZmluaXRpb24sXG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogT2JzZXJ2YWJsZTx1bmtub3duW10+IHtcbiAgICBpZiAodGhpcy5pc0FwaVNvdXJjZShkYXRhU291cmNlKSAmJiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UuZXhlY3V0ZUFwaShcbiAgICAgICAge1xuICAgICAgICAgIGVuZHBvaW50OiBkYXRhU291cmNlLmVuZHBvaW50IHx8IGRhdGFTb3VyY2UubmFtZSxcbiAgICAgICAgICBtZXRob2Q6IGRhdGFTb3VyY2UubWV0aG9kIGFzIGFueSxcbiAgICAgICAgICBkYXRhUGF0aDogZGF0YVNvdXJjZS5kYXRhUGF0aCxcbiAgICAgICAgICBoZWFkZXJzOiBkYXRhU291cmNlLmhlYWRlcnMsXG4gICAgICAgICAgdXNlUHJveHk6IGRhdGFTb3VyY2UudXNlUHJveHksXG4gICAgICAgICAgYm9keVRlbXBsYXRlOiBkYXRhU291cmNlLmJvZHlUZW1wbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1ldGVyc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyBleGVjdXRlRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdYLUNvbXBhbnktSWQnLCBTdHJpbmcoc2Vzc2lvblsnY29tcGFueUlkJ10pKTtcbiAgICB9XG4gICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQnJhbmNoLUlkJywgU3RyaW5nKHNlc3Npb25bJ2JyYW5jaElkJ10pKTtcbiAgICB9XG5cbiAgICBjb25zdCBraW5kID0gdGhpcy5yZXNvbHZlS2luZChkYXRhU291cmNlKTtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAga2luZCxcbiAgICAgIG5hbWU6IGRhdGFTb3VyY2UuZW5kcG9pbnQgfHwgZGF0YVNvdXJjZS5uYW1lLFxuICAgICAgc2NoZW1hOiBkYXRhU291cmNlLnNjaGVtYSA/PyAnZGJvJyxcbiAgICAgIHBhcmFtZXRlcnM6IHsgLi4ucGFyYW1ldGVycyB9LFxuICAgICAgY29sdW1uczogZGF0YVNvdXJjZS5jb2x1bW5zLFxuICAgICAgdG9wOiBkYXRhU291cmNlLnRvcCxcbiAgICAgIGZpbHRlcjogZGF0YVNvdXJjZS5maWx0ZXIgPyByZXNvbHZlUGFyYW1ldGVyTWFwcGluZ3MoZGF0YVNvdXJjZS5maWx0ZXIsIHNlc3Npb24sIHBhcmFtZXRlcnMpIDogdW5kZWZpbmVkLFxuICAgICAgZGF0YVNvdXJjZToge1xuICAgICAgICBpZDogZGF0YVNvdXJjZS5pZCB8fCBkYXRhU291cmNlLm5hbWUsXG4gICAgICAgIHR5cGU6IGtpbmQgPT09ICdwcm9jZWR1cmUnID8gJ3N0b3JlZF9wcm9jZWR1cmUnIDogKGRhdGFTb3VyY2UudHlwZSB8fCAndGFibGUnKSxcbiAgICAgICAgbmFtZTogZGF0YVNvdXJjZS5lbmRwb2ludCB8fCBkYXRhU291cmNlLm5hbWUsXG4gICAgICAgIHNjaGVtYTogZGF0YVNvdXJjZS5zY2hlbWEgPz8gJ2RibycsXG4gICAgICB9LFxuICAgICAgc2Vzc2lvbkNvbnRleHQ6IHNlc3Npb24sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHVua25vd24+KHRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludCwgcGF5bG9hZCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gZXh0cmFjdFJvd0FycmF5KHJlc3BvbnNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdSZXBvcnQgZXhlY3V0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlS2luZChkczogUmVwb3J0RGF0YVNvdXJjZURlZmluaXRpb24pOiAncHJvY2VkdXJlJyB8ICd0YWJsZScge1xuICAgIGlmIChkcy5tZXRob2QgPT09ICdTVE9SRURfUFJPQ0VEVVJFJykgcmV0dXJuICdwcm9jZWR1cmUnO1xuICAgIGlmIChkcy50eXBlID09PSAnc3RvcmVkX3Byb2NlZHVyZScpIHJldHVybiAncHJvY2VkdXJlJztcbiAgICBpZiAoZHMudHlwZSA9PT0gJ3RhYmxlJyB8fCBkcy50eXBlID09PSAndmlldycpIHJldHVybiAndGFibGUnO1xuICAgIC8vIEhldXJpc3RpYzogbmFtZXMgc3RhcnRpbmcgd2l0aCB1c3BfIC8gc3BfIGFyZSBwcm9jZWR1cmVzXG4gICAgY29uc3QgbmFtZSA9IChkcy5lbmRwb2ludCB8fCBkcy5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ3VzcF8nKSB8fCBuYW1lLnN0YXJ0c1dpdGgoJ3NwXycpKSByZXR1cm4gJ3Byb2NlZHVyZSc7XG4gICAgcmV0dXJuICd0YWJsZSc7XG4gIH1cblxuICBwcml2YXRlIGlzQXBpU291cmNlKGRzOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmIChkcy50eXBlID09PSAnYXBpJykgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgZXAgPSAoZHMuZW5kcG9pbnQgfHwgZHMubmFtZSB8fCAnJykudHJpbSgpO1xuICAgIGlmIChlcC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgZXAuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGRzLnR5cGUgIT09ICd0YWJsZScgJiYgZHMudHlwZSAhPT0gJ3ZpZXcnICYmIGRzLnR5cGUgIT09ICdzdG9yZWRfcHJvY2VkdXJlJyAmJiBlcC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -63,6 +63,9 @@ export class EndpointLookupAdapter extends ReportLookupAdapter {
63
63
  }
64
64
  const kind = request.sourceType === 'procedure' ? 'procedure' : 'table';
65
65
  const targetUrl = this.endpoints.lookupEndpoint || this.endpoints.executeEndpoint;
66
+ if (!targetUrl) {
67
+ return throwError(() => new Error('[bways-report] No lookupEndpoint or executeEndpoint configured.'));
68
+ }
66
69
  const payload = {
67
70
  // Lookup contract fields (used by /api/reporting/lookup)
68
71
  entityName: request.entityName ?? '',
@@ -109,7 +112,7 @@ export class EndpointLookupAdapter extends ReportLookupAdapter {
109
112
  return obs$;
110
113
  }
111
114
  generateCacheKey(req) {
112
- return `${req.sourceType}:${req.entityName || req.apiEndpoint}:${req.valueField}:${req.displayField}:${req.dataPath ?? ''}:${JSON.stringify(req.filter ?? {})}:${JSON.stringify(req.parameters ?? {})}`;
115
+ return JSON.stringify(this.sessionService?.getCurrentSessionContext() ?? {}) + ':' + `${req.sourceType}:${req.entityName || req.apiEndpoint}:${req.valueField}:${req.displayField}:${req.dataPath ?? ''}:${req.schema ?? 'dbo'}:${req.limit ?? 500}:${JSON.stringify(req.filter ?? {})}:${JSON.stringify(req.parameters ?? {})}`;
113
116
  }
114
117
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointLookupAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
115
118
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointLookupAdapter });
@@ -117,4 +120,4 @@ export class EndpointLookupAdapter extends ReportLookupAdapter {
117
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EndpointLookupAdapter, decorators: [{
118
121
  type: Injectable
119
122
  }] });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtbG9va3VwLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9lbmRwb2ludC1sb29rdXAuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUdMLG1CQUFtQixHQUNwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFRM0QsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjtJQUMzQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMzQyxjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekUsbUJBQW1CLEdBQUcsTUFB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RGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuZHBvaW50LWJhc2VkIGxvb2t1cCBhZGFwdGVyLlxuICpcbiAqIFJldXNlcyB0aGUgYGV4ZWN1dGVFbmRwb2ludGAgdG8gZmV0Y2ggZHJvcGRvd24gb3B0aW9uIHJvd3MuXG4gKiBObyBzZXBhcmF0ZSBsb29rdXAgZW5kcG9pbnQgaXMgbmVlZGVkIOKAlCB3ZSBqdXN0IFBPU1QgdG8gdGhlXG4gKiBzYW1lIGV4ZWN1dGUgZW5kcG9pbnQgd2l0aCB0aGUgdGFibGUvU1AgdGhhdCBiYWNrcyB0aGUgZHJvcGRvd24uXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgTG9va3VwT3B0aW9uSXRlbSxcbiAgTG9va3VwUXVlcnlSZXF1ZXN0LFxuICBSZXBvcnRMb29rdXBBZGFwdGVyLFxufSBmcm9tICcuLi9jb250cmFjdHMvbG9va3VwLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1hcGktZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0sIGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4vZW5kcG9pbnQtdG9rZW5zJztcblxuaW50ZXJmYWNlIENhY2hlRW50cnkge1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgZGF0YTogTG9va3VwT3B0aW9uSXRlbVtdO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRMb29rdXBBZGFwdGVyIGV4dGVuZHMgUmVwb3J0TG9va3VwQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlRW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+PigpO1xuXG4gIGZldGNoT3B0aW9ucyhyZXF1ZXN0OiBMb29rdXBRdWVyeVJlcXVlc3QpOiBPYnNlcnZhYmxlPExvb2t1cE9wdGlvbkl0ZW1bXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZW5lcmF0ZUNhY2hlS2V5KHJlcXVlc3QpO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuZXhwaXJlc0F0ID4gbm93KSB7XG4gICAgICByZXR1cm4gb2YoY2FjaGVkLmRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bm5pbmcgPSB0aGlzLmluRmxpZ2h0LmdldChjYWNoZUtleSk7XG4gICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgIHJldHVybiBydW5uaW5nO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBBUEktYmFzZWQgZHJvcGRvd24gbG9va3Vwc1xuICAgIGlmICgocmVxdWVzdC5zb3VyY2VUeXBlID09PSAnYXBpJyB8fCByZXF1ZXN0LmFwaUVuZHBvaW50KSAmJiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGVuZHBvaW50VXJsID0gcmVxdWVzdC5hcGlFbmRwb2ludCB8fCByZXF1ZXN0LmVudGl0eU5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBvYnMkID0gdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlXG4gICAgICAgIC5leGVjdXRlQXBpKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuZHBvaW50OiBlbmRwb2ludFVybCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiByZXF1ZXN0LmRhdGFQYXRoLFxuICAgICAgICAgICAgdXNlUHJveHk6IHJlcXVlc3QudXNlUHJveHksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMgYXMgYW55LFxuICAgICAgICAgIHJlcXVlc3QuZmlsdGVyIGFzIGFueVxuICAgICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+XG4gICAgICAgICAgICBpdGVtcy5tYXAoKHI6IGFueSkgPT5cbiAgICAgICAgICAgICAgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0ociwgcmVxdWVzdC52YWx1ZUZpZWxkLCByZXF1ZXN0LmRpc3BsYXlGaWVsZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHRhcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgNjAwXzAwMCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pbkZsaWdodC5kZWxldGUoY2FjaGVLZXkpKSxcbiAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApO1xuXG4gICAgICB0aGlzLmluRmxpZ2h0LnNldChjYWNoZUtleSwgb2JzJCk7XG4gICAgICByZXR1cm4gb2JzJDtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIGlmIChzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgIH1cbiAgICBpZiAoc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmQgPSByZXF1ZXN0LnNvdXJjZVR5cGUgPT09ICdwcm9jZWR1cmUnID8gJ3Byb2NlZHVyZScgOiAndGFibGUnO1xuICAgIGNvbnN0IHRhcmdldFVybCA9IHRoaXMuZW5kcG9pbnRzLmxvb2t1cEVuZHBvaW50IHx8IHRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludDtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgLy8gTG9va3VwIGNvbnRyYWN0IGZpZWxkcyAodXNlZCBieSAvYXBpL3JlcG9ydGluZy9sb29rdXApXG4gICAgICBlbnRpdHlOYW1lOiByZXF1ZXN0LmVudGl0eU5hbWUgPz8gJycsXG4gICAgICBzb3VyY2VUeXBlOiByZXF1ZXN0LnNvdXJjZVR5cGUgPz8gKGtpbmQgPT09ICdwcm9jZWR1cmUnID8gJ3N0b3JlZF9wcm9jZWR1cmUnIDogJ3RhYmxlJyksXG4gICAgICBzY2hlbWE6IHJlcXVlc3Quc2NoZW1hID8/ICdkYm8nLFxuICAgICAgdmFsdWVGaWVsZDogcmVxdWVzdC52YWx1ZUZpZWxkLFxuICAgICAgZGlzcGxheUZpZWxkOiByZXF1ZXN0LmRpc3BsYXlGaWVsZCxcbiAgICAgIGZpbHRlcjogcmVxdWVzdC5maWx0ZXIsXG4gICAgICBsaW1pdDogcmVxdWVzdC5saW1pdCA/PyA1MDAsXG5cbiAgICAgIC8vIEV4ZWN1dGUgc2ltcGxpZmllZCBjb250cmFjdCBmaWVsZHNcbiAgICAgIGtpbmQsXG4gICAgICBuYW1lOiByZXF1ZXN0LmVudGl0eU5hbWUgPz8gJycsXG4gICAgICBjb2x1bW5zOiBbcmVxdWVzdC52YWx1ZUZpZWxkLCByZXF1ZXN0LmRpc3BsYXlGaWVsZF0uZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgdG9wOiByZXF1ZXN0LmxpbWl0ID8/IDUwMCxcblxuICAgICAgLy8gRXhlY3V0ZSByaWNoIGNvbnRyYWN0IGZpZWxkcyAocHJldmVudHMgXCJkYXRhU291cmNlIHNob3VsZCBub3QgYmUgZW1wdHlcIilcbiAgICAgIGRhdGFTb3VyY2U6IHtcbiAgICAgICAgaWQ6IHJlcXVlc3QuZW50aXR5TmFtZSA/PyAnZHMtbG9va3VwJyxcbiAgICAgICAgdHlwZToga2luZCA9PT0gJ3Byb2NlZHVyZScgPyAnc3RvcmVkX3Byb2NlZHVyZScgOiAndGFibGUnLFxuICAgICAgICBuYW1lOiByZXF1ZXN0LmVudGl0eU5hbWUgPz8gJycsXG4gICAgICAgIHNjaGVtYTogcmVxdWVzdC5zY2hlbWEgPz8gJ2RibycsXG4gICAgICB9LFxuICAgICAgcGFyYW1ldGVyczogcmVxdWVzdC5wYXJhbWV0ZXJzID8/IHt9LFxuICAgICAgc2Vzc2lvbkNvbnRleHQ6IHNlc3Npb24sXG4gICAgfTtcblxuICAgIGNvbnN0IG9icyQgPSB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHVua25vd24+KHRhcmdldFVybCwgcGF5bG9hZCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhd0l0ZW1zID0gZXh0cmFjdFJvd0FycmF5KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gcmF3SXRlbXMubWFwKChyOiBhbnkpID0+XG4gICAgICAgICAgICBleHRyYWN0TG9va3VwT3B0aW9uSXRlbShyLCByZXF1ZXN0LnZhbHVlRmllbGQsIHJlcXVlc3QuZGlzcGxheUZpZWxkKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIDYwMF8wMDAsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0xvb2t1cCByZXF1ZXN0IGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbkZsaWdodC5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKTtcblxuICAgIHRoaXMuaW5GbGlnaHQuc2V0KGNhY2hlS2V5LCBvYnMkKTtcbiAgICByZXR1cm4gb2JzJDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVDYWNoZUtleShyZXE6IExvb2t1cFF1ZXJ5UmVxdWVzdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3JlcS5zb3VyY2VUeXBlfToke3JlcS5lbnRpdHlOYW1lIHx8IHJlcS5hcGlFbmRwb2ludH06JHtyZXEudmFsdWVGaWVsZH06JHtyZXEuZGlzcGxheUZpZWxkfToke3JlcS5kYXRhUGF0aCA/PyAnJ306JHtKU09OLnN0cmluZ2lmeShyZXEuZmlsdGVyID8/IHt9KX06JHtKU09OLnN0cmluZ2lmeShyZXEucGFyYW1ldGVycyA/PyB7fSl9YDtcbiAgfVxufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtbG9va3VwLmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9lbmRwb2ludC1sb29rdXAuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUdMLG1CQUFtQixHQUNwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFRM0QsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjtJQUMzQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLFNBQVMsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMzQyxjQUFjLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekUsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFNUUsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQ3RDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBMEMsQ0FBQztJQUU5RSxZQUFZLENBQUMsT0FBMkI7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUV2QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQ3BFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUI7aUJBQ2xDLFVBQVUsQ0FDVDtnQkFDRSxRQUFRLEVBQUUsV0FBVztnQkFDckIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2dCQUMxQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7YUFDM0IsRUFDRCxPQUFPLENBQUMsVUFBaUIsRUFDekIsT0FBTyxDQUFDLE1BQWEsQ0FDdEI7aUJBQ0EsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ1osS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQ25CLHVCQUF1QixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FDckUsQ0FDRixFQUNELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNaLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO3dCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU87d0JBQy9CLElBQUksRUFBRSxLQUFLO3FCQUNaLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzlDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1lBRUosSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzVELElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDeEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7UUFDbEYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRztZQUNkLHlEQUF5RDtZQUN6RCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ3BDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN2RixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLO1lBQy9CLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUM5QixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7WUFDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQUc7WUFFM0IscUNBQXFDO1lBQ3JDLElBQUk7WUFDSixJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQzlCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDbkUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRztZQUV6QiwyRUFBMkU7WUFDM0UsVUFBVSxFQUFFO2dCQUNWLEVBQUUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLFdBQVc7Z0JBQ3JDLElBQUksRUFBRSxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTztnQkFDekQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRTtnQkFDOUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSzthQUNoQztZQUNELFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7WUFDcEMsY0FBYyxFQUFFLE9BQU87U0FDeEIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJO2FBQ25CLElBQUksQ0FBVSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7YUFDOUMsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2YsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQzdCLHVCQUF1QixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FDckUsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTztvQkFDL0IsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7WUFDM0UsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVKLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDblUsQ0FBQzt3R0FwSVUscUJBQXFCOzRHQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVuZHBvaW50LWJhc2VkIGxvb2t1cCBhZGFwdGVyLlxuICpcbiAqIFJldXNlcyB0aGUgYGV4ZWN1dGVFbmRwb2ludGAgdG8gZmV0Y2ggZHJvcGRvd24gb3B0aW9uIHJvd3MuXG4gKiBObyBzZXBhcmF0ZSBsb29rdXAgZW5kcG9pbnQgaXMgbmVlZGVkIOKAlCB3ZSBqdXN0IFBPU1QgdG8gdGhlXG4gKiBzYW1lIGV4ZWN1dGUgZW5kcG9pbnQgd2l0aCB0aGUgdGFibGUvU1AgdGhhdCBiYWNrcyB0aGUgZHJvcGRvd24uXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgTG9va3VwT3B0aW9uSXRlbSxcbiAgTG9va3VwUXVlcnlSZXF1ZXN0LFxuICBSZXBvcnRMb29rdXBBZGFwdGVyLFxufSBmcm9tICcuLi9jb250cmFjdHMvbG9va3VwLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1hcGktZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0sIGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4vZW5kcG9pbnQtdG9rZW5zJztcblxuaW50ZXJmYWNlIENhY2hlRW50cnkge1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgZGF0YTogTG9va3VwT3B0aW9uSXRlbVtdO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRW5kcG9pbnRMb29rdXBBZGFwdGVyIGV4dGVuZHMgUmVwb3J0TG9va3VwQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHMgPSBpbmplY3QoQldBWVNfUkVQT1JUX0VORFBPSU5UUyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlRW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5GbGlnaHQgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+PigpO1xuXG4gIGZldGNoT3B0aW9ucyhyZXF1ZXN0OiBMb29rdXBRdWVyeVJlcXVlc3QpOiBPYnNlcnZhYmxlPExvb2t1cE9wdGlvbkl0ZW1bXT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZW5lcmF0ZUNhY2hlS2V5KHJlcXVlc3QpO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuZXhwaXJlc0F0ID4gbm93KSB7XG4gICAgICByZXR1cm4gb2YoY2FjaGVkLmRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bm5pbmcgPSB0aGlzLmluRmxpZ2h0LmdldChjYWNoZUtleSk7XG4gICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgIHJldHVybiBydW5uaW5nO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBBUEktYmFzZWQgZHJvcGRvd24gbG9va3Vwc1xuICAgIGlmICgocmVxdWVzdC5zb3VyY2VUeXBlID09PSAnYXBpJyB8fCByZXF1ZXN0LmFwaUVuZHBvaW50KSAmJiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGVuZHBvaW50VXJsID0gcmVxdWVzdC5hcGlFbmRwb2ludCB8fCByZXF1ZXN0LmVudGl0eU5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBvYnMkID0gdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlXG4gICAgICAgIC5leGVjdXRlQXBpKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuZHBvaW50OiBlbmRwb2ludFVybCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiByZXF1ZXN0LmRhdGFQYXRoLFxuICAgICAgICAgICAgdXNlUHJveHk6IHJlcXVlc3QudXNlUHJveHksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMgYXMgYW55LFxuICAgICAgICAgIHJlcXVlc3QuZmlsdGVyIGFzIGFueVxuICAgICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+XG4gICAgICAgICAgICBpdGVtcy5tYXAoKHI6IGFueSkgPT5cbiAgICAgICAgICAgICAgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0ociwgcmVxdWVzdC52YWx1ZUZpZWxkLCByZXF1ZXN0LmRpc3BsYXlGaWVsZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHRhcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgNjAwXzAwMCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtcyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pbkZsaWdodC5kZWxldGUoY2FjaGVLZXkpKSxcbiAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApO1xuXG4gICAgICB0aGlzLmluRmxpZ2h0LnNldChjYWNoZUtleSwgb2JzJCk7XG4gICAgICByZXR1cm4gb2JzJDtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIGlmIChzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2NvbXBhbnlJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgIH1cbiAgICBpZiAoc2Vzc2lvblsnYnJhbmNoSWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IG51bGwpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGtpbmQgPSByZXF1ZXN0LnNvdXJjZVR5cGUgPT09ICdwcm9jZWR1cmUnID8gJ3Byb2NlZHVyZScgOiAndGFibGUnO1xuICAgIGNvbnN0IHRhcmdldFVybCA9IHRoaXMuZW5kcG9pbnRzLmxvb2t1cEVuZHBvaW50IHx8IHRoaXMuZW5kcG9pbnRzLmV4ZWN1dGVFbmRwb2ludDtcbiAgICBpZiAoIXRhcmdldFVybCkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBObyBsb29rdXBFbmRwb2ludCBvciBleGVjdXRlRW5kcG9pbnQgY29uZmlndXJlZC4nKSk7XG4gICAgfVxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAvLyBMb29rdXAgY29udHJhY3QgZmllbGRzICh1c2VkIGJ5IC9hcGkvcmVwb3J0aW5nL2xvb2t1cClcbiAgICAgIGVudGl0eU5hbWU6IHJlcXVlc3QuZW50aXR5TmFtZSA/PyAnJyxcbiAgICAgIHNvdXJjZVR5cGU6IHJlcXVlc3Quc291cmNlVHlwZSA/PyAoa2luZCA9PT0gJ3Byb2NlZHVyZScgPyAnc3RvcmVkX3Byb2NlZHVyZScgOiAndGFibGUnKSxcbiAgICAgIHNjaGVtYTogcmVxdWVzdC5zY2hlbWEgPz8gJ2RibycsXG4gICAgICB2YWx1ZUZpZWxkOiByZXF1ZXN0LnZhbHVlRmllbGQsXG4gICAgICBkaXNwbGF5RmllbGQ6IHJlcXVlc3QuZGlzcGxheUZpZWxkLFxuICAgICAgZmlsdGVyOiByZXF1ZXN0LmZpbHRlcixcbiAgICAgIGxpbWl0OiByZXF1ZXN0LmxpbWl0ID8/IDUwMCxcblxuICAgICAgLy8gRXhlY3V0ZSBzaW1wbGlmaWVkIGNvbnRyYWN0IGZpZWxkc1xuICAgICAga2luZCxcbiAgICAgIG5hbWU6IHJlcXVlc3QuZW50aXR5TmFtZSA/PyAnJyxcbiAgICAgIGNvbHVtbnM6IFtyZXF1ZXN0LnZhbHVlRmllbGQsIHJlcXVlc3QuZGlzcGxheUZpZWxkXS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICB0b3A6IHJlcXVlc3QubGltaXQgPz8gNTAwLFxuXG4gICAgICAvLyBFeGVjdXRlIHJpY2ggY29udHJhY3QgZmllbGRzIChwcmV2ZW50cyBcImRhdGFTb3VyY2Ugc2hvdWxkIG5vdCBiZSBlbXB0eVwiKVxuICAgICAgZGF0YVNvdXJjZToge1xuICAgICAgICBpZDogcmVxdWVzdC5lbnRpdHlOYW1lID8/ICdkcy1sb29rdXAnLFxuICAgICAgICB0eXBlOiBraW5kID09PSAncHJvY2VkdXJlJyA/ICdzdG9yZWRfcHJvY2VkdXJlJyA6ICd0YWJsZScsXG4gICAgICAgIG5hbWU6IHJlcXVlc3QuZW50aXR5TmFtZSA/PyAnJyxcbiAgICAgICAgc2NoZW1hOiByZXF1ZXN0LnNjaGVtYSA/PyAnZGJvJyxcbiAgICAgIH0sXG4gICAgICBwYXJhbWV0ZXJzOiByZXF1ZXN0LnBhcmFtZXRlcnMgPz8ge30sXG4gICAgICBzZXNzaW9uQ29udGV4dDogc2Vzc2lvbixcbiAgICB9O1xuXG4gICAgY29uc3Qgb2JzJCA9IHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8dW5rbm93bj4odGFyZ2V0VXJsLCBwYXlsb2FkLCB7IGhlYWRlcnMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3SXRlbXMgPSBleHRyYWN0Um93QXJyYXkocmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiByYXdJdGVtcy5tYXAoKHI6IGFueSkgPT5cbiAgICAgICAgICAgIGV4dHJhY3RMb29rdXBPcHRpb25JdGVtKHIsIHJlcXVlc3QudmFsdWVGaWVsZCwgcmVxdWVzdC5kaXNwbGF5RmllbGQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZS5zZXQoY2FjaGVLZXksIHtcbiAgICAgICAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgNjAwXzAwMCxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCAnTG9va3VwIHJlcXVlc3QgZmFpbGVkJztcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoQXJyYXkuaXNBcnJheShtc2cpID8gbXNnLmpvaW4oJywgJykgOiBtc2cpKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmluRmxpZ2h0LmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgICApO1xuXG4gICAgdGhpcy5pbkZsaWdodC5zZXQoY2FjaGVLZXksIG9icyQpO1xuICAgIHJldHVybiBvYnMkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KHJlcTogTG9va3VwUXVlcnlSZXF1ZXN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5zZXNzaW9uU2VydmljZT8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge30pICsgJzonICsgYCR7cmVxLnNvdXJjZVR5cGV9OiR7cmVxLmVudGl0eU5hbWUgfHwgcmVxLmFwaUVuZHBvaW50fToke3JlcS52YWx1ZUZpZWxkfToke3JlcS5kaXNwbGF5RmllbGR9OiR7cmVxLmRhdGFQYXRoID8/ICcnfToke3JlcS5zY2hlbWEgPz8gJ2Ribyd9OiR7cmVxLmxpbWl0ID8/IDUwMH06JHtKU09OLnN0cmluZ2lmeShyZXEuZmlsdGVyID8/IHt9KX06JHtKU09OLnN0cmluZ2lmeShyZXEucGFyYW1ldGVycyA/PyB7fSl9YDtcbiAgfVxufVxuIl19