bways-report 0.1.9 → 0.2.1

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 (109) hide show
  1. package/README.md +506 -313
  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/models/report-grid.model.mjs +1 -1
  5. package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
  6. package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  8. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  9. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  10. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  11. package/esm2022/lib/core/utils/report-parameter.util.mjs +68 -15
  12. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  13. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +16 -1
  14. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +14 -2
  15. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  16. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  17. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  18. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  19. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +13 -37
  20. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +13 -50
  21. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  22. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  23. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  24. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  25. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  26. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  27. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  28. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  29. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +53 -41
  30. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +551 -123
  31. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +39 -6
  32. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
  33. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +11 -10
  34. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +13 -6
  35. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  36. package/esm2022/lib/features/designer/designer.component.mjs +107 -69
  37. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  38. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  39. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  40. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  41. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  42. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  43. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  44. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  45. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  46. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
  47. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  48. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  49. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  50. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
  51. package/esm2022/lib/features/runtime/report-execution.service.mjs +52 -8
  52. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +18 -21
  53. package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
  54. package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
  55. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  56. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +21 -10
  57. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
  58. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
  59. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
  60. package/esm2022/lib/provide-reporting.mjs +9 -29
  61. package/fesm2022/bways-report.mjs +2072 -1088
  62. package/fesm2022/bways-report.mjs.map +1 -1
  63. package/lib/core/config/bways-report-config.d.ts +14 -5
  64. package/lib/core/models/report-datasource.model.d.ts +5 -0
  65. package/lib/core/models/report-grid.model.d.ts +1 -1
  66. package/lib/core/services/report-overlay.service.d.ts +14 -0
  67. package/lib/core/services/report-session-context.service.d.ts +9 -0
  68. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  69. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  70. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  71. package/lib/core/utils/report-parameter.util.d.ts +13 -1
  72. package/lib/core/utils/report-request-scope.d.ts +14 -0
  73. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  74. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  75. package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
  76. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  77. package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
  78. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  79. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  80. package/lib/data-access/adapters/index.d.ts +1 -1
  81. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  82. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  83. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  84. package/lib/data-access/contracts/index.d.ts +1 -0
  85. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  86. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  87. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  88. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
  89. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
  90. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
  91. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
  92. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  93. package/lib/features/designer/designer.component.d.ts +16 -2
  94. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  95. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  96. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  97. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  98. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  99. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  100. package/lib/features/runtime/report-execution.service.d.ts +3 -0
  101. package/lib/features/runtime/report-grid-bridge.component.d.ts +3 -2
  102. package/lib/features/runtime/report-runtime.component.d.ts +1 -0
  103. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  104. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  105. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
  106. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
  107. package/package.json +9 -5
  108. package/styles/theme.css +184 -0
  109. package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
@@ -1,4 +1,10 @@
1
- import { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, input, output, signal, } from '@angular/core';
1
+ import { ReportOverlayService } from '../../core/services/report-overlay.service';
2
+ import { CdkScrollable } from '@angular/cdk/scrolling';
3
+ import { ReportRequestScope } from '../../core/utils/report-request-scope';
4
+ import { normalizeReportDefinition } from '../persistence/services/schema-validator.service';
5
+ import { map } from 'rxjs';
6
+ import { DesignerConfigService } from './services/designer-config.service';
7
+ import { ChangeDetectionStrategy, Component, DestroyRef, computed, effect, HostListener, Input, Injector, inject, input, output, signal, untracked, } from '@angular/core';
2
8
  import { CommonModule } from '@angular/common';
3
9
  import { FormsModule } from '@angular/forms';
4
10
  import { ReportPersistenceAdapter } from '../../data-access/contracts/report-persistence.contract';
@@ -6,6 +12,7 @@ import { ReportDataSourceAdapter } from '../../data-access/contracts/data-source
6
12
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
7
13
  import { DesignerStateService } from './services/designer-state.service';
8
14
  import { Router } from '@angular/router';
15
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
16
  import { Dialog, DialogModule } from '@angular/cdk/dialog';
10
17
  import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
11
18
  import { ReportSavedDialogComponent } from './components/dialogs/report-saved-dialog.component';
@@ -16,16 +23,35 @@ import { PropertyEditorComponent } from './components/property-editor/property-e
16
23
  import { ReportRuntimeComponent } from '../runtime/report-runtime.component';
17
24
  import { ReportExecutionService } from '../runtime/report-execution.service';
18
25
  import { RptIconComponent } from '../../primitives/components/icon/rpt-icon.component';
26
+ import { DesignerEndpointsService, DESIGNER_ENDPOINT_PROVIDERS } from './services/designer-endpoints.service';
19
27
  import { DragDropModule } from '@angular/cdk/drag-drop';
20
28
  import * as i0 from "@angular/core";
21
29
  import * as i1 from "@angular/cdk/drag-drop";
22
30
  export class DesignerComponent {
31
+ requests = new ReportRequestScope();
32
+ loadError = signal(null);
33
+ injector = inject(Injector);
34
+ destroyRef = inject(DestroyRef);
35
+ saveDialogOpen = false;
36
+ endpointScope = inject(DesignerEndpointsService);
37
+ configuration = inject(DesignerConfigService);
38
+ /** Page-local settings; omitted values inherit optional application defaults. */
39
+ set config(value) {
40
+ this.configuration.set(value);
41
+ this.sessionService?.configureDesignerSession(value);
42
+ this.endpointScope.refresh();
43
+ }
44
+ /** Override any subset of configured URLs for this designer and its preview. */
45
+ set apiUrl(value) {
46
+ this.endpointScope.setOverrides(value);
47
+ }
23
48
  designerState = inject(DesignerStateService);
24
49
  persistenceAdapter = inject(ReportPersistenceAdapter, { optional: true });
25
50
  dataSourceAdapter = inject(ReportDataSourceAdapter, { optional: true });
26
51
  sessionService = inject(ReportSessionContextService, { optional: true });
27
52
  executionService = inject(ReportExecutionService, { optional: true });
28
53
  dialog = inject(Dialog, { optional: true });
54
+ overlaySupport = inject(ReportOverlayService);
29
55
  router = inject(Router, { optional: true });
30
56
  reportingConfig = inject(REPORTING_CONFIG, { optional: true });
31
57
  /** Optional reportId to load from persistence adapter */
@@ -105,10 +131,19 @@ export class DesignerComponent {
105
131
  loadedReportDef = null;
106
132
  lastEmittedDef = null;
107
133
  constructor() {
134
+ let previousContext = '';
135
+ effect(() => {
136
+ const context = this.requests.context();
137
+ if (context === previousContext)
138
+ return;
139
+ previousContext = context;
140
+ untracked(() => { this.requests.cancelAll(); this.previewData.set(null); this.loadedReportId = null; });
141
+ }, { allowSignalWrites: true });
108
142
  effect(() => {
109
143
  const def = this.definition();
110
144
  if (!def)
111
145
  return;
146
+ this.requests.cancel('definition');
112
147
  // Skip if this definition is reference-identical to what the designer just emitted or current internal state
113
148
  if (def === this.lastEmittedDef || def === this.designerState.definition()) {
114
149
  this.loadedReportDef = def;
@@ -119,17 +154,29 @@ export class DesignerComponent {
119
154
  if (isNewReport || (def !== this.loadedReportDef && !this.designerState.isDirty())) {
120
155
  this.loadedReportId = def.id;
121
156
  this.loadedReportDef = def;
122
- this.designerState.loadDefinition(def);
157
+ try {
158
+ this.designerState.loadDefinition(normalizeReportDefinition(def));
159
+ this.loadError.set(null);
160
+ }
161
+ catch (error) {
162
+ this.loadError.set(error instanceof Error ? error.message : String(error));
163
+ }
123
164
  }
124
165
  }, { allowSignalWrites: true });
125
166
  effect(() => {
126
167
  const id = this.reportId();
168
+ this.requests.context();
169
+ if (!id || this.definition()) {
170
+ this.requests.cancel('definition');
171
+ return;
172
+ }
127
173
  if (id && id !== this.loadedReportId && !this.definition() && this.persistenceAdapter) {
128
174
  this.loadedReportId = id;
129
- this.persistenceAdapter.load(id).subscribe((def) => {
175
+ this.requests.run('definition', () => this.persistenceAdapter.load(id).pipe(map(normalizeReportDefinition)), def => {
130
176
  this.loadedReportDef = def;
131
177
  this.designerState.loadDefinition(def);
132
- });
178
+ this.loadError.set(null);
179
+ }, error => { this.loadedReportId = null; this.loadError.set(error.message); });
133
180
  }
134
181
  }, { allowSignalWrites: true });
135
182
  effect(() => {
@@ -167,66 +214,57 @@ export class DesignerComponent {
167
214
  });
168
215
  }
169
216
  }
170
- onSave() {
171
- const current = this.currentDefinition();
172
- if (this.persistenceAdapter) {
173
- this.persistenceAdapter.save(current).subscribe({
174
- next: (savedDef) => {
175
- this.designerState.markSaved();
176
- this.reportSaved.emit(savedDef);
177
- this.showToast('Report saved successfully');
178
- this.openSavedDialog(savedDef);
179
- },
180
- error: (err) => {
181
- console.error('[Designer] Save failed:', err);
182
- this.showToast('Failed to save report');
183
- },
184
- });
185
- }
186
- else {
187
- this.designerState.markSaved();
188
- this.reportSaved.emit(current);
189
- this.showToast('Report state saved');
190
- this.openSavedDialog(current);
191
- }
217
+ retryLoad() {
218
+ const id = this.reportId();
219
+ if (!id || !this.persistenceAdapter)
220
+ return;
221
+ this.requests.run('definition', () => this.persistenceAdapter.load(id).pipe(map(normalizeReportDefinition)), def => {
222
+ this.loadedReportId = id;
223
+ this.loadedReportDef = def;
224
+ this.designerState.loadDefinition(def);
225
+ this.loadError.set(null);
226
+ }, error => this.loadError.set(error.message));
192
227
  }
193
- openSavedDialog(savedDef) {
194
- if (!this.dialog)
228
+ onSave() {
229
+ if (this.saveDialogOpen)
230
+ return;
231
+ if (!this.dialog) {
232
+ this.showToast('The report review dialog is unavailable.');
195
233
  return;
234
+ }
235
+ this.overlaySupport.ensureStyles();
196
236
  const routeBase = this.reportingConfig?.routeBase || 'reports';
197
237
  const dialogRef = this.dialog.open(ReportSavedDialogComponent, {
198
- data: { report: savedDef, routeBase },
199
- width: 'min(860px, 92vw)',
200
- maxWidth: '860px',
201
- maxHeight: '84vh',
202
- panelClass: 'rpt-dialog-panel',
203
- disableClose: false,
238
+ injector: this.injector,
239
+ data: { report: this.currentDefinition(), routeBase },
240
+ width: 'min(860px, calc(100vw - 32px))', maxWidth: '860px', maxHeight: 'calc(100dvh - 32px)',
241
+ panelClass: 'rpt-dialog-panel', backdropClass: 'rpt-dialog-backdrop', disableClose: false,
242
+ ariaLabelledBy: 'dialog-title', autoFocus: '#rpt-dlg-id',
204
243
  });
205
- dialogRef.closed.subscribe((result) => {
206
- if (result) {
207
- if (result.report) {
208
- this.designerState.updateReportSettings({
209
- name: result.report.name,
210
- description: result.report.description,
211
- slug: result.report.slug,
212
- menuGroup: result.report.menuGroup,
213
- isPublished: result.report.isPublished,
214
- });
215
- }
216
- if (result.action === 'open_live_page' && this.router) {
217
- const targetSlug = result.report.slug || result.report.id;
218
- const url = `/${routeBase.replace(/^\/+|\/+$/g, '')}/${targetSlug}`;
244
+ this.saveDialogOpen = true;
245
+ const unregisterDestroy = this.destroyRef.onDestroy(() => dialogRef.close());
246
+ dialogRef.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(result => {
247
+ unregisterDestroy();
248
+ this.saveDialogOpen = false;
249
+ if (!result)
250
+ return;
251
+ this.designerState.updateReportSettings(result.report);
252
+ this.designerState.markSaved();
253
+ this.reportSaved.emit(result.report);
254
+ this.showToast('Report saved successfully');
255
+ if (result.action === 'open_live_page') {
256
+ const slug = result.report.slug || result.report.id;
257
+ const url = '/' + routeBase.replace(/^\/+|\/+$/g, '') + '/' + slug;
258
+ if (this.router)
219
259
  this.router.navigateByUrl(url);
220
- }
260
+ else if (typeof window !== 'undefined')
261
+ window.location.assign(url);
221
262
  }
222
263
  });
223
264
  }
224
265
  onPreviewExecute(event) {
225
266
  if (this.executionService) {
226
- this.executionService.execute(event.definition, event.parameters).subscribe({
227
- next: (data) => this.previewData.set(data),
228
- error: (err) => console.error('[Designer Preview] Execution failed:', err),
229
- });
267
+ this.requests.run('preview', () => this.executionService.execute(event.definition, event.parameters), data => this.previewData.set(data), error => this.loadError.set(error.message));
230
268
  return;
231
269
  }
232
270
  const grid = event.definition.grid;
@@ -268,14 +306,7 @@ export class DesignerComponent {
268
306
  const session = this.sessionService?.getCurrentSessionContext() ?? {};
269
307
  const compMappings = ds?.parameterMappings || {};
270
308
  const executionParams = { ...compMappings, ...session, ...event.parameters };
271
- this.dataSourceAdapter.execute(ds, executionParams).subscribe({
272
- next: (data) => {
273
- this.previewData.set(data);
274
- },
275
- error: (err) => {
276
- console.error('[Designer Preview] Execution failed:', err);
277
- },
278
- });
309
+ this.requests.run('preview', () => this.dataSourceAdapter.execute(ds, executionParams), data => this.previewData.set(data), error => this.loadError.set(error.message));
279
310
  }
280
311
  copyJson() {
281
312
  if (navigator.clipboard) {
@@ -333,8 +364,9 @@ export class DesignerComponent {
333
364
  setTimeout(() => this.saveMessage.set(null), 3000);
334
365
  }
335
366
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
336
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignerComponent, isStandalone: true, selector: "rpt-designer", inputs: { reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, definition: { classPropertyName: "definition", publicName: "initialReport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reportSaved: "save", definitionChanged: "definitionChange" }, host: { listeners: { "window:resize": "onResize()", "window:keydown": "onKeyDown($event)" } }, providers: [DesignerStateService], ngImport: i0, template: `
367
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignerComponent, isStandalone: true, selector: "rpt-designer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: false, isRequired: false, transformFunction: null }, apiUrl: { classPropertyName: "apiUrl", publicName: "apiUrl", isSignal: false, isRequired: false, transformFunction: null }, reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, definition: { classPropertyName: "definition", publicName: "initialReport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reportSaved: "save", definitionChanged: "definitionChange" }, host: { listeners: { "window:resize": "onResize()", "window:keydown": "onKeyDown($event)" } }, providers: [DesignerStateService, ...DESIGNER_ENDPOINT_PROVIDERS], ngImport: i0, template: `
337
368
  <div class="designer-shell">
369
+ @if (loadError()) { <div role="alert">{{ loadError() }} <button type="button" (click)="retryLoad()">Retry</button></div> }
338
370
  <!-- Top Actions Toolbar with Sidebar Controls -->
339
371
  <rpt-designer-toolbar
340
372
  [isLeftPanelCollapsed]="isLeftPanelCollapsed()"
@@ -371,7 +403,7 @@ export class DesignerComponent {
371
403
  <rpt-design-canvas />
372
404
  }
373
405
  @case ('preview') {
374
- <div class="preview-mode-container">
406
+ <div class="preview-mode-container" cdkScrollable>
375
407
  <div class="preview-banner">
376
408
  <rpt-icon name="eye" [size]="15" />
377
409
  <span>Live Preview Mode — Running with actual Reactive Forms & Dynamic Grid</span>
@@ -533,12 +565,13 @@ export class DesignerComponent {
533
565
  </div>
534
566
  }
535
567
  </div>
536
- `, isInline: true, styles: [":host{display:block;width:100%;height:100%;min-height:400px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", inputs: ["isLeftPanelCollapsed", "isRightPanelCollapsed"], outputs: ["toggleLeftPanel", "toggleRightPanel", "saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette", outputs: ["collapseRequested"] }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor", outputs: ["collapseRequested"] }, { kind: "component", type: ReportRuntimeComponent, selector: "rpt-report-runtime, rpt-runtime", inputs: ["reportId", "report", "resultData"], outputs: ["resetRequested", "execute", "executed", "exportRequested", "printRequested", "customActionTriggered", "gridStateChange", "columnDefsChange", "selectionChange", "selectionChanged", "rowActionTriggered", "drilldownRequested"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
568
+ `, isInline: true, styles: [":host{display:flex;flex-direction:column;flex:1 1 0%;min-width:0;width:100%;height:100%;min-height:0;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{flex:1;min-height:0;display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;min-height:0;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", inputs: ["isLeftPanelCollapsed", "isRightPanelCollapsed"], outputs: ["toggleLeftPanel", "toggleRightPanel", "saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette", outputs: ["collapseRequested"] }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor", outputs: ["collapseRequested"] }, { kind: "component", type: ReportRuntimeComponent, selector: "rpt-report-runtime, rpt-runtime", inputs: ["reportId", "report", "resultData"], outputs: ["resetRequested", "execute", "executed", "exportRequested", "printRequested", "customActionTriggered", "gridStateChange", "columnDefsChange", "selectionChange", "selectionChanged", "rowActionTriggered", "drilldownRequested"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
537
569
  }
538
570
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, decorators: [{
539
571
  type: Component,
540
572
  args: [{ selector: 'rpt-designer', standalone: true, imports: [
541
573
  CommonModule,
574
+ CdkScrollable,
542
575
  FormsModule,
543
576
  DragDropModule,
544
577
  DialogModule,
@@ -548,8 +581,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
548
581
  PropertyEditorComponent,
549
582
  ReportRuntimeComponent,
550
583
  RptIconComponent,
551
- ], providers: [DesignerStateService], template: `
584
+ ], providers: [DesignerStateService, ...DESIGNER_ENDPOINT_PROVIDERS], template: `
552
585
  <div class="designer-shell">
586
+ @if (loadError()) { <div role="alert">{{ loadError() }} <button type="button" (click)="retryLoad()">Retry</button></div> }
553
587
  <!-- Top Actions Toolbar with Sidebar Controls -->
554
588
  <rpt-designer-toolbar
555
589
  [isLeftPanelCollapsed]="isLeftPanelCollapsed()"
@@ -586,7 +620,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
586
620
  <rpt-design-canvas />
587
621
  }
588
622
  @case ('preview') {
589
- <div class="preview-mode-container">
623
+ <div class="preview-mode-container" cdkScrollable>
590
624
  <div class="preview-banner">
591
625
  <rpt-icon name="eye" [size]="15" />
592
626
  <span>Live Preview Mode — Running with actual Reactive Forms & Dynamic Grid</span>
@@ -748,12 +782,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
748
782
  </div>
749
783
  }
750
784
  </div>
751
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;min-height:400px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
752
- }], ctorParameters: () => [], propDecorators: { onResize: [{
785
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:flex;flex-direction:column;flex:1 1 0%;min-width:0;width:100%;height:100%;min-height:0;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{flex:1;min-height:0;display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;min-height:0;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
786
+ }], ctorParameters: () => [], propDecorators: { config: [{
787
+ type: Input
788
+ }], apiUrl: [{
789
+ type: Input
790
+ }], onResize: [{
753
791
  type: HostListener,
754
792
  args: ['window:resize']
755
793
  }], onKeyDown: [{
756
794
  type: HostListener,
757
795
  args: ['window:keydown', ['$event']]
758
796
  }] } });
759
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSwwQkFBMEIsRUFBMkIsTUFBTSxvREFBb0QsQ0FBQztBQUN6SCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMz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c1dBQ3RCLGdCQUFnQjs7NEZBaXpCUCxpQkFBaUI7a0JBOXpCN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLHFCQUFxQjt3QkFDckIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLGdCQUFnQjtxQkFDakIsYUFDVSxDQUFDLG9CQUFvQixDQUFDLFlBQ3ZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdNVCxtQkFvbUJnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQXlEL0MsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWU7Z0JBVTdCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3JlcG9ydC1wZXJzaXN0ZW5jZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lclN0YXRlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlhbG9nLCBEaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LCBSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9kaWFsb2dzL3JlcG9ydC1zYXZlZC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sYmFyL2Rlc2lnbmVyLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LXBhbGV0dGUvY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbkNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXNpZ24tY2FudmFzL2Rlc2lnbi1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IFByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LWVkaXRvci9wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuLi9ydW50aW1lL3JlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRFeGVjdXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1kZXNpZ25lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCxcbiAgICBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50LFxuICAgIERlc2lnbkNhbnZhc0NvbXBvbmVudCxcbiAgICBQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCxcbiAgICBSZXBvcnRSdW50aW1lQ29tcG9uZW50LFxuICAgIFJwdEljb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0Rlc2lnbmVyU3RhdGVTZXJ2aWNlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGVzaWduZXItc2hlbGxcIj5cbiAgICAgIDwhLS0gVG9wIEFjdGlvbnMgVG9vbGJhciB3aXRoIFNpZGViYXIgQ29udHJvbHMgLS0+XG4gICAgICA8cnB0LWRlc2lnbmVyLXRvb2xiYXJcbiAgICAgICAgW2lzTGVmdFBhbmVsQ29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICBbaXNSaWdodFBhbmVsQ29sbGFwc2VkXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgKHRvZ2dsZUxlZnRQYW5lbCk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiXG4gICAgICAgICh0b2dnbGVSaWdodFBhbmVsKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiXG4gICAgICAgIChzYXZlUmVxdWVzdGVkKT1cIm9uU2F2ZSgpXCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gTWFpbiAzLVBhbmVsIExheW91dCB3aXRoIENESyBEcm9wIExpc3QgR3JvdXAgY29ubmVjdGluZyBQYWxldHRlICYgQ2FudmFzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXdvcmtiZW5jaFwiIGNka0Ryb3BMaXN0R3JvdXA+XG4gICAgICAgIDwhLS0gQmFja2Ryb3AgZm9yIGNvbXBhY3QvbW9iaWxlIHNsaWRlLW91dCBkcmF3ZXJzIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nICYmICghaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSB8fCAhaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ3b3JrYmVuY2gtZHJhd2VyLWJhY2tkcm9wXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUFsbFBhbmVscygpXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAxLiBMZWZ0IFBhbmVsOiBDb21wb25lbnQgUGFsZXR0ZSAob25seSBzaG93biBpbiBkZXNpZ24gbW9kZSkgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2JlbmNoLWxlZnQtY29udGFpbmVyXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpXCI+XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJ3b3JrYmVuY2gtbGVmdC1wYW5lbFwiPlxuICAgICAgICAgICAgICA8cnB0LWNvbXBvbmVudC1wYWxldHRlIChjb2xsYXBzZVJlcXVlc3RlZCk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiIC8+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAyLiBDZW50ZXIgUGFuZWw6IERlc2lnbiBDYW52YXMgT1IgTGl2ZSBQcmV2aWV3IE9SIEpTT04gU2NoZW1hIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cIndvcmtiZW5jaC1jZW50ZXItcGFuZWxcIj5cbiAgICAgICAgICBAc3dpdGNoICh2aWV3TW9kZSgpKSB7XG4gICAgICAgICAgICBAY2FzZSAoJ2Rlc2lnbicpIHtcbiAgICAgICAgICAgICAgPHJwdC1kZXNpZ24tY2FudmFzIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW1vZGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctYmFubmVyXCI+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImV5ZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPkxpdmUgUHJldmlldyBNb2RlIOKAlCBSdW5uaW5nIHdpdGggYWN0dWFsIFJlYWN0aXZlIEZvcm1zICYgRHluYW1pYyBHcmlkPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtcnVudGltZSBbcmVwb3J0XT1cImN1cnJlbnREZWZpbml0aW9uKClcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnanNvbicpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tbW9kZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1lZGl0b3ItY2FyZFwiIFtjbGFzcy50aGVtZS1kYXJrXT1cImVkaXRvclRoZW1lKCkgPT09ICdkYXJrJ1wiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBUb3AgU2NoZW1hIFRvb2xiYXIgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tYmFubmVyLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYWRnZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNvZGVcIiBbc2l6ZV09XCIxNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGl0bGUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLXRpdGxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tdGl0bGVcIj5SZXBvcnQgRGVmaW5pdGlvbiBTY2hlbWE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zY2hlbWEtdGFnXCI+dnt7IGN1cnJlbnREZWZpbml0aW9uKCkuc2NoZW1hVmVyc2lvbiB8fCAxIH19LjAg4oCiIEpTT048L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLW1ldGEtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zdGF0LXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGN1cnJlbnREZWZpbml0aW9uKCkuY29tcG9uZW50cy5sZW5ndGggfX08L3N0cm9uZz4gY29tcG9uZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zdGF0LWRpdmlkZXJcIj7igKI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi1zdGF0LXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGpzb25TdGF0cygpLmxpbmVzIH19PC9zdHJvbmc+IGxpbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtZGl2aWRlclwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGpzb25TdGF0cygpLnNpemVLYiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tYmFubmVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWpzb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwid3JhcExpbmVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVdyYXBMaW5lcygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVG9nZ2xlIFdvcmQgV3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJsaXN0XCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+V3JhcDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tanNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRvclRoZW1lKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdTd2l0Y2ggdG8gTGlnaHQgVGhlbWUnIDogJ1N3aXRjaCB0byBEYXJrIFRoZW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdzcGFya2xlcycgOiAnc2xpZGVycydcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBlZGl0b3JUaGVtZSgpID09PSAnZGFyaycgPyAnRGFyaycgOiAnTGlnaHQnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1qc29uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRKc29uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEb3dubG9hZCBkZWZpbml0aW9uIGFzIEpTT04gZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJkb3dubG9hZFwiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkV4cG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tY29weS1qc29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb3BpZWRdPVwiY29weVN0YXR1cygpID09PSAnQ29waWVkISdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvcHlKc29uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IHNjaGVtYSBKU09OIHRvIGNsaXBib2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImNvcHlTdGF0dXMoKSA9PT0gJ0NvcGllZCEnID8gJ2NoZWNrJyA6ICdjb3B5J1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvcHlTdGF0dXMoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBDb2RlIFZpZXdwb3J0IHdpdGggTGluZSBOdW1iZXJzIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdmlld3BvcnRcIiBbY2xhc3Mud3JhcC1lbmFibGVkXT1cIndyYXBMaW5lcygpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLXNjcm9sbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJqc29uLWNvZGUtdGFibGVcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGxpbmUgb2YgaGlnaGxpZ2h0ZWRMaW5lcygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJqc29uLWNvZGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJqc29uLWxpbmUtbnVtYmVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3sgJGluZGV4ICsgMSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJqc29uLWxpbmUtdGV4dFwiPjxzcGFuIFtpbm5lckhUTUxdPVwibGluZVwiPjwvc3Bhbj48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPCEtLSAzLiBSaWdodCBQYW5lbDogUHJvcGVydHkgRWRpdG9yIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiPlxuICAgICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLXJpZ2h0LXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxycHQtcHJvcGVydHktZWRpdG9yIChjb2xsYXBzZVJlcXVlc3RlZCk9XCJ0b2dnbGVSaWdodFBhbmVsKClcIiAvPlxuICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ29tcGFjdC9Nb2JpbGUgV29ya2JlbmNoIEJvdHRvbSBOYXZpZ2F0aW9uIEJhciAtLT5cbiAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgPG5hdiBjbGFzcz1cImNvbXBhY3Qtd29ya2JlbmNoLWJhclwiIGFyaWEtbGFiZWw9XCJNb2JpbGUgV29ya2JlbmNoIE5hdmlnYXRpb25cIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tcGFjdC1uYXYtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiIWlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5MZWZ0UGFuZWxPbmx5KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJPcGVuIENvbXBvbmVudCBQYWxldHRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxheWVyc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNvbXBvbmVudHM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tcGFjdC1uYXYtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSAmJiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VBbGxQYW5lbHMoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkZ1bGwgQ2FudmFzIFZpZXdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZWRpdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNhbnZhczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SaWdodFBhbmVsT25seSgpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBQcm9wZXJ0aWVzIEluc3BlY3RvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJzZXR0aW5nc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPlByb3BlcnRpZXM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmF2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFNhdmUgTm90aWZpY2F0aW9uIFRvYXN0IC0tPlxuICAgICAgQGlmIChzYXZlTWVzc2FnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlLXRvYXN0XCI+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjaGVja1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8c3Bhbj57eyBzYXZlTWVzc2FnZSgpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcblxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAuZGVzaWduZXItc2hlbGwge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMjY4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCAud29ya2JlbmNoLWxlZnQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiA0MjBweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQtc21vb3RoLCAyNTBtcykgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB6LWluZGV4OiAyMDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQgLndvcmtiZW5jaC1yaWdodC1wYW5lbCB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICB9XG5cblxuXG4gICAgLmNvbXBhY3Qtd29ya2JlbmNoLWJhciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWRyYXdlci1iYWNrZHJvcCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xuICAgICAgLmNvbXBhY3Qtd29ya2JlbmNoLWJhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgICBwYWRkaW5nOiAwIDEycHg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICB6LWluZGV4OiA0NTtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgcGFkZGluZzogNnB4IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tcnB0LWZvbnQtd2VpZ2h0LW1lZGl1bSwgNTAwKTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0biBycHQtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuOmhvdmVyIHJwdC1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4uYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tcnB0LWZvbnQtd2VpZ2h0LXNlbWlib2xkLCA2MDApO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgzNywgOTksIDIzNSwgMC4wOCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuLmFjdGl2ZSBycHQtaWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogMXB4O1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLWRyYXdlci1iYWNrZHJvcCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMzUpO1xuICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcbiAgICAgICAgei1pbmRleDogNTA7XG4gICAgICB9XG5cbiAgICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICB3aWR0aDogMjgwcHg7XG4gICAgICAgIG1heC13aWR0aDogODV2dztcbiAgICAgICAgei1pbmRleDogNjA7XG4gICAgICAgIGJveC1zaGFkb3c6IDRweCAwIDI0cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB9XG4gICAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgICAgIHdpZHRoOiAyODBweCAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICB3aWR0aDogMzgwcHg7XG4gICAgICAgIG1heC13aWR0aDogOTV2dztcbiAgICAgICAgei1pbmRleDogNjA7XG4gICAgICAgIGJveC1zaGFkb3c6IC00cHggMCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgfVxuICAgICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgICAgICB3aWR0aDogMzgwcHggIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogUHJldmlldyBNb2RlICovXG4gICAgLnByZXZpZXctbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWJhbm5lciB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDE2cHggYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogIzFlNDBhZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiZmRiZmU7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC8qIEpTT04gU2NoZW1hIE1vZGUgLSBFbnRlcnByaXNlIExpZ2h0ICYgQWRhcHRhYmxlIERlc2lnbiAqL1xuICAgIC5qc29uLW1vZGUtY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgcGFkZGluZzogMjBweCAyNHB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJnLCAjZjhmYWZjKTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLmpzb24tZWRpdG9yLWNhcmQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXItc3VidGxlLCAjZTJlOGYwKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KSwgMCAxcHggMnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjAzKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGVhc2UsIGJvcmRlci1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5qc29uLWVkaXRvci1jYXJkLnRoZW1lLWRhcmsge1xuICAgICAgYmFja2dyb3VuZDogIzBmMTcyYTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzFlMjkzYjtcbiAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgIH1cblxuICAgIC8qIFN1Yi1oZWFkZXIgYmFubmVyICovXG4gICAgLmpzb24tYmFubmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZ2FwOiAxNnB4O1xuICAgICAgcGFkZGluZzogMTJweCAxOHB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXItc3VidGxlLCAjZTJlOGYwKTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlLCBib3JkZXItY29sb3IgMjAwbXMgZWFzZTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1iYW5uZXIge1xuICAgICAgYmFja2dyb3VuZDogIzBiMTEyMDtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLmpzb24tYmFubmVyLWxlZnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuXG4gICAgLmpzb24tYmFkZ2UtaWNvbiB7XG4gICAgICB3aWR0aDogMzJweDtcbiAgICAgIGhlaWdodDogMzJweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTgpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWJhZGdlLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgzNywgOTksIDIzNSwgMC4yKTtcbiAgICAgIGNvbG9yOiAjNjBhNWZhO1xuICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk2LCAxNjUsIDI1MCwgMC4zKTtcbiAgICB9XG5cbiAgICAuanNvbi10aXRsZS1ncm91cCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogMnB4O1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRpdGxlIHtcbiAgICAgIGNvbG9yOiAjZjFmNWY5O1xuICAgIH1cblxuICAgIC5qc29uLXNjaGVtYS10YWcge1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgICAgIHBhZGRpbmc6IDFweCA3cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1zY2hlbWEtdGFnIHtcbiAgICAgIGJhY2tncm91bmQ6ICMxZTI5M2I7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGJvcmRlci1jb2xvcjogIzMzNDE1NTtcbiAgICB9XG5cbiAgICAuanNvbi1tZXRhLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1tZXRhLXJvdyB7XG4gICAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICB9XG5cbiAgICAuanNvbi1zdGF0LXBpbGwgc3Ryb25nIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXN0YXQtcGlsbCBzdHJvbmcge1xuICAgICAgY29sb3I6ICNjYmQ1ZTE7XG4gICAgfVxuXG4gICAgLmpzb24tc3RhdC1kaXZpZGVyIHtcbiAgICAgIGNvbG9yOiAjY2JkNWUxO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXN0YXQtZGl2aWRlciB7XG4gICAgICBjb2xvcjogIzMzNDE1NTtcbiAgICB9XG5cbiAgICAuanNvbi1iYW5uZXItYWN0aW9ucyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIHBhZGRpbmc6IDVweCAxMXB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5idG4tanNvbi1hY3Rpb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWhvdmVyLCAjOTRhM2I4KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbi5hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuYnRuLWpzb24tYWN0aW9uIHtcbiAgICAgIGJhY2tncm91bmQ6ICMxZTI5M2I7XG4gICAgICBib3JkZXItY29sb3I6ICMzMzQxNTU7XG4gICAgICBjb2xvcjogI2NiZDVlMTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuYnRuLWpzb24tYWN0aW9uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICMzMzQxNTU7XG4gICAgICBib3JkZXItY29sb3I6ICM0NzU1Njk7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuYnRuLWpzb24tYWN0aW9uLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KTtcbiAgICAgIGNvbG9yOiAjNjBhNWZhO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjM2I4MmY2O1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgcGFkZGluZzogNXB4IDEzcHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMzcsIDk5LCAyMzUsIDAuMik7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZTtcbiAgICB9XG5cbiAgICAuYnRuLWNvcHktanNvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG5cbiAgICAuYnRuLWNvcHktanNvbi5jb3BpZWQge1xuICAgICAgYmFja2dyb3VuZDogIzEwYjk4MTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzEwYjk4MTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYmEoMTYsIDE4NSwgMTI5LCAwLjIpO1xuICAgIH1cblxuICAgIC8qIFZpZXdwb3J0ICYgQ29kZSBUYWJsZSAqL1xuICAgIC5qc29uLXZpZXdwb3J0IHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjAwbXMgZWFzZTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi12aWV3cG9ydCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgIH1cblxuICAgIC5qc29uLXNjcm9sbC1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICB9XG5cbiAgICAuanNvbi1jb2RlLXRhYmxlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHktbW9ubywgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZSk7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgfVxuXG4gICAgLmpzb24tY29kZS1yb3cge1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5qc29uLWNvZGUtcm93OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tY29kZS1yb3c6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgNDEsIDU5LCAwLjYpO1xuICAgIH1cblxuICAgIC5qc29uLWxpbmUtbnVtYmVyIHtcbiAgICAgIHdpZHRoOiA0NHB4O1xuICAgICAgbWluLXdpZHRoOiA0NHB4O1xuICAgICAgbWF4LXdpZHRoOiA1NnB4O1xuICAgICAgcGFkZGluZzogMXB4IDEycHggMXB4IDhweDtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgY29sb3I6ICM5NGEzYjg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2UyZThmMDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tbGluZS1udW1iZXIge1xuICAgICAgYmFja2dyb3VuZDogIzBiMTEyMDtcbiAgICAgIGNvbG9yOiAjNDc1NTY5O1xuICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMWUyOTNiO1xuICAgIH1cblxuICAgIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICBwYWRkaW5nOiAxcHggMTZweDtcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmU7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLndyYXAtZW5hYmxlZCAuanNvbi1saW5lLXRleHQge1xuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICBjb2xvcjogI2UyZThmMDtcbiAgICB9XG5cbiAgICAvKiBTeW50YXggVG9rZW5zOiBMaWdodCBNb2RlIChDcmlzcCAmIEhpZ2gtQ29udHJhc3QpICovXG4gICAgLmpzb24tdG9rZW4ta2V5IHtcbiAgICAgIGNvbG9yOiAjMWU0MGFmO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1zdHJpbmcge1xuICAgICAgY29sb3I6ICMwNDc4NTc7XG4gICAgfVxuXG4gICAgLmpzb24tdG9rZW4tbnVtYmVyIHtcbiAgICAgIGNvbG9yOiAjN2MzYWVkO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1ib29sZWFuIHtcbiAgICAgIGNvbG9yOiAjZDk3NzA2O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1udWxsIHtcbiAgICAgIGNvbG9yOiAjZGMyNjI2O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG5cbiAgICAvKiBTeW50YXggVG9rZW5zOiBEYXJrIE1vZGUgKENhbGlicmF0ZWQgTmlnaHQgTW9kZSkgKi9cbiAgICAudGhlbWUtZGFyayAuanNvbi10b2tlbi1rZXkge1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzRhZGU4MDtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi10b2tlbi1udW1iZXIge1xuICAgICAgY29sb3I6ICNjMDg0ZmM7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLWJvb2xlYW4ge1xuICAgICAgY29sb3I6ICNmYmJmMjQ7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLW51bGwge1xuICAgICAgY29sb3I6ICNmODcxNzE7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICAvKiBTYXZlIFRvYXN0IE5vdGlmaWNhdGlvbiAqL1xuICAgIC5zYXZlLXRvYXN0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogMjRweDtcbiAgICAgIHJpZ2h0OiAyNHB4O1xuICAgICAgYmFja2dyb3VuZDogIzEwYjk4MTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjg1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgei1pbmRleDogMTAwO1xuICAgICAgYW5pbWF0aW9uOiBycHQtZmFkZS1pbiAyMDBtcyBlYXNlO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1mYWRlLWluIHtcbiAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCk7IH1cbiAgICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERlc2lnbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcmVhZG9ubHkgZGVzaWduZXJTdGF0ZSA9IGluamVjdChEZXNpZ25lclN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdGVuY2VBZGFwdGVyID0gaW5qZWN0KFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhU291cmNlQWRhcHRlciA9IGluamVjdChSZXBvcnREYXRhU291cmNlQWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0aW9uU2VydmljZSA9IGluamVjdChSZXBvcnRFeGVjdXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZyA9IGluamVjdChEaWFsb2csIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRpbmdDb25maWcgPSBpbmplY3QoUkVQT1JUSU5HX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogT3B0aW9uYWwgcmVwb3J0SWQgdG8gbG9hZCBmcm9tIHBlcnNpc3RlbmNlIGFkYXB0ZXIgKi9cbiAgcmVhZG9ubHkgcmVwb3J0SWQgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgLyoqIE9wdGlvbmFsIGRlZmluaXRpb24gdG8gbG9hZCBkaXJlY3RseSAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2luaXRpYWxSZXBvcnQnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgc2F2ZXMgdGhlIHJlcG9ydCAqL1xuICByZWFkb25seSByZXBvcnRTYXZlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnc2F2ZScgfSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHJlcG9ydCBkZWZpbml0aW9uIGNoYW5nZXMgaW4gdGhlIHZpc3VhbCBkZXNpZ25lciAqL1xuICByZWFkb25seSBkZWZpbml0aW9uQ2hhbmdlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnZGVmaW5pdGlvbkNoYW5nZScgfSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERlZmluaXRpb24gPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdmlld01vZGUgPSB0aGlzLmRlc2lnbmVyU3RhdGUudmlld01vZGU7XG5cbiAgcmVhZG9ubHkgcHJldmlld0RhdGEgPSBzaWduYWw8dW5rbm93bltdIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNhdmVNZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjb3B5U3RhdHVzID0gc2lnbmFsPHN0cmluZz4oJ0NvcHkgSlNPTicpO1xuICByZWFkb25seSBpc0xlZnRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgdG9nZ2xlTGVmdFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICB0b2dnbGVSaWdodFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgb3BlbkxlZnRQYW5lbE9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIG9wZW5SaWdodFBhbmVsT25seSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgY2xvc2VBbGxQYW5lbHMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uUmVzaXplKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDkwMCkge1xuICAgICAgaWYgKCF0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkKCkgJiYgIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNDdHJsT3JDbWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCBpc0lucHV0ID0gdGFyZ2V0ICYmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5pc0NvbnRlbnRFZGl0YWJsZSk7XG4gICAgaWYgKGlzSW5wdXQpIHJldHVybjtcblxuICAgIGlmIChpc0N0cmxPckNtZCAmJiAhZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZUxlZnRQYW5lbCgpO1xuICAgIH0gZWxzZSBpZiAoaXNDdHJsT3JDbWQgJiYgZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZVJpZ2h0UGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICByZWFkb25seSBmb3JtYXR0ZWRKc29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnREZWZpbml0aW9uKCksIG51bGwsIDIpO1xuICB9KTtcblxuICByZWFkb25seSBlZGl0b3JUaGVtZSA9IHNpZ25hbDwnbGlnaHQnIHwgJ2RhcmsnPignbGlnaHQnKTtcbiAgcmVhZG9ubHkgd3JhcExpbmVzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBqc29uU3RhdHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybWF0dGVkSnNvbigpO1xuICAgIGNvbnN0IGxpbmVzID0ganNvbiA/IGpzb24uc3BsaXQoJ1xcbicpLmxlbmd0aCA6IDA7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgQmxvYihbanNvbl0pLnNpemU7XG4gICAgY29uc3Qgc2l6ZUtiID0gYnl0ZXMgPCAxMDI0ID8gYCR7Ynl0ZXN9IEJgIDogYCR7KGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgO1xuICAgIHJldHVybiB7IGxpbmVzLCBzaXplS2IgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRMaW5lcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5mb3JtYXR0ZWRKc29uKCk7XG4gICAgaWYgKCFqc29uKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHRoaXMuc3ludGF4SGlnaGxpZ2h0SnNvbihqc29uKS5zcGxpdCgnXFxuJyk7XG4gIH0pO1xuXG4gIHByaXZhdGUgbG9hZGVkUmVwb3J0SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxvYWRlZFJlcG9ydERlZjogUmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkRGVmOiBSZXBvcnREZWZpbml0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLmRlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKCFkZWYpIHJldHVybjtcblxuICAgICAgICAvLyBTa2lwIGlmIHRoaXMgZGVmaW5pdGlvbiBpcyByZWZlcmVuY2UtaWRlbnRpY2FsIHRvIHdoYXQgdGhlIGRlc2lnbmVyIGp1c3QgZW1pdHRlZCBvciBjdXJyZW50IGludGVybmFsIHN0YXRlXG4gICAgICAgIGlmIChkZWYgPT09IHRoaXMubGFzdEVtaXR0ZWREZWYgfHwgZGVmID09PSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbigpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSByZWxvYWQgaWYgcmVwb3J0IElEIGNoYW5nZWQgKGRpZmZlcmVudCByZXBvcnQpLCBvciBpbml0aWFsIGxvYWQsIG9yIGV4dGVybmFsIGRlZmluaXRpb24gd2hlbiBub3QgYWN0aXZlbHkgZWRpdGluZ1xuICAgICAgICBjb25zdCBpc05ld1JlcG9ydCA9IGRlZi5pZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZDtcbiAgICAgICAgaWYgKGlzTmV3UmVwb3J0IHx8IChkZWYgIT09IHRoaXMubG9hZGVkUmVwb3J0RGVmICYmICF0aGlzLmRlc2lnbmVyU3RhdGUuaXNEaXJ0eSgpKSkge1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0SWQgPSBkZWYuaWQ7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKGRlZik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMucmVwb3J0SWQoKTtcbiAgICAgICAgaWYgKGlkICYmIGlkICE9PSB0aGlzLmxvYWRlZFJlcG9ydElkICYmICF0aGlzLmRlZmluaXRpb24oKSAmJiB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlcikge1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0SWQgPSBpZDtcbiAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlci5sb2FkKGlkKS5zdWJzY3JpYmUoKGRlZikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uKCk7XG4gICAgICBpZiAodGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHkoKSkge1xuICAgICAgICB0aGlzLmxhc3RFbWl0dGVkRGVmID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBjdXJyZW50O1xuICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gY3VycmVudC5pZDtcbiAgICAgICAgdGhpcy5kZWZpbml0aW9uQ2hhbmdlZC5lbWl0KGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDkwMCkge1xuICAgICAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDEyMDApIHtcbiAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5kZWZpbml0aW9uKCkgJiYgIXRoaXMucmVwb3J0SWQoKSkge1xuICAgICAgLy8gU3RhcnQgd2l0aCBhIGNsZWFuIHJlcG9ydCBkZWZpbml0aW9uXG4gICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oe1xuICAgICAgICBpZDogYHJwdC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA4KX1gLFxuICAgICAgICBuYW1lOiAnTmV3IEN1c3RvbSBSZXBvcnQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Zpc3VhbGx5IGRlc2lnbmVkIHJlcG9ydGluZyBwYWdlIGNyZWF0ZWQgd2l0aCBCV2F5cy1SZXBvcnQuJyxcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgbGF5b3V0OiB7IGNvbHVtbnM6IDEyLCBnYXA6IDE2LCBwYWRkaW5nOiAyNCwgZGlyZWN0aW9uOiAnbHRyJyB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICAgIGRhdGFTb3VyY2VzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGVmaW5pdGlvbigpO1xuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQWRhcHRlcikge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIuc2F2ZShjdXJyZW50KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoc2F2ZWREZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubWFya1NhdmVkKCk7XG4gICAgICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KHNhdmVkRGVmKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnUmVwb3J0IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgIHRoaXMub3BlblNhdmVkRGlhbG9nKHNhdmVkRGVmKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbRGVzaWduZXJdIFNhdmUgZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHJlcG9ydCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5tYXJrU2F2ZWQoKTtcbiAgICAgIHRoaXMucmVwb3J0U2F2ZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdSZXBvcnQgc3RhdGUgc2F2ZWQnKTtcbiAgICAgIHRoaXMub3BlblNhdmVkRGlhbG9nKGN1cnJlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlblNhdmVkRGlhbG9nKHNhdmVkRGVmOiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZykgcmV0dXJuO1xuXG4gICAgY29uc3Qgcm91dGVCYXNlID0gdGhpcy5yZXBvcnRpbmdDb25maWc/LnJvdXRlQmFzZSB8fCAncmVwb3J0cyc7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCwgeyByZXBvcnQ6IFJlcG9ydERlZmluaXRpb247IHJvdXRlQmFzZT86IHN0cmluZyB9PihcbiAgICAgIFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBkYXRhOiB7IHJlcG9ydDogc2F2ZWREZWYsIHJvdXRlQmFzZSB9LFxuICAgICAgICB3aWR0aDogJ21pbig4NjBweCwgOTJ2dyknLFxuICAgICAgICBtYXhXaWR0aDogJzg2MHB4JyxcbiAgICAgICAgbWF4SGVpZ2h0OiAnODR2aCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdycHQtZGlhbG9nLXBhbmVsJyxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZGlhbG9nUmVmLmNsb3NlZC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnJlcG9ydCkge1xuICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS51cGRhdGVSZXBvcnRTZXR0aW5ncyh7XG4gICAgICAgICAgICBuYW1lOiByZXN1bHQucmVwb3J0Lm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcmVzdWx0LnJlcG9ydC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNsdWc6IHJlc3VsdC5yZXBvcnQuc2x1ZyxcbiAgICAgICAgICAgIG1lbnVHcm91cDogcmVzdWx0LnJlcG9ydC5tZW51R3JvdXAsXG4gICAgICAgICAgICBpc1B1Ymxpc2hlZDogcmVzdWx0LnJlcG9ydC5pc1B1Ymxpc2hlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ29wZW5fbGl2ZV9wYWdlJyAmJiB0aGlzLnJvdXRlcikge1xuICAgICAgICAgIGNvbnN0IHRhcmdldFNsdWcgPSByZXN1bHQucmVwb3J0LnNsdWcgfHwgcmVzdWx0LnJlcG9ydC5pZDtcbiAgICAgICAgICBjb25zdCB1cmwgPSBgLyR7cm91dGVCYXNlLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKX0vJHt0YXJnZXRTbHVnfWA7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblByZXZpZXdFeGVjdXRlKGV2ZW50OiB7XG4gICAgZGVmaW5pdGlvbjogUmVwb3J0RGVmaW5pdGlvbjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIHRoaXMuZXhlY3V0aW9uU2VydmljZS5leGVjdXRlKGV2ZW50LmRlZmluaXRpb24sIGV2ZW50LnBhcmFtZXRlcnMpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lciBQcmV2aWV3XSBFeGVjdXRpb24gZmFpbGVkOicsIGVyciksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncmlkID0gZXZlbnQuZGVmaW5pdGlvbi5ncmlkO1xuICAgIGlmICghZ3JpZCkge1xuICAgICAgY29uc29sZS53YXJuKCdbRGVzaWduZXIgUHJldmlld10gTm8gZ3JpZCBhdHRhY2hlZCB0byByZXBvcnQgZGVmaW5pdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5maW5kKChkKSA9PiBkLmlkID09PSBncmlkLmRhdGFTb3VyY2VJZCk7XG4gICAgaWYgKCFkcyAmJiBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICBkcyA9IGV2ZW50LmRlZmluaXRpb24uZGF0YVNvdXJjZXNbMF07XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgLy8gTG9vayBmb3IgU3RvcmVkIFByb2NlZHVyZSBvciBUYWJsZSBjb25maWd1cmVkIG9uIGFueSBjb21wb25lbnQgaW4gdGhlIHJlcG9ydFxuICAgICAgY29uc3QgY29tcFdpdGhFbnRpdHkgPSBldmVudC5kZWZpbml0aW9uLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5kYXRhU291cmNlPy5lbnRpdHlOYW1lKTtcbiAgICAgIGlmIChjb21wV2l0aEVudGl0eT8uZGF0YVNvdXJjZT8uZW50aXR5TmFtZSkge1xuICAgICAgICBkcyA9IHtcbiAgICAgICAgICBpZDogJ3NwLScgKyBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgbmFtZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIGVuZHBvaW50OiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNjaGVtYSB8fCAnZGJvJyxcbiAgICAgICAgICB0eXBlOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgfHwgJ3Byb2NlZHVyZScsXG4gICAgICAgICAgbWV0aG9kOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgPyAnR0VUJyA6ICdTVE9SRURfUFJPQ0VEVVJFJyxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5wYXJhbWV0ZXJNYXBwaW5ncyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgZHMgPSB7XG4gICAgICAgIGlkOiAnZGVmYXVsdC1kcycsXG4gICAgICAgIG5hbWU6ICdSZXBvcnQgRGF0YScsXG4gICAgICAgIGVuZHBvaW50OiAnZGVmYXVsdCcsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGRhdGFTb3VyY2VBZGFwdGVyIGF2YWlsYWJsZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgY29tcE1hcHBpbmdzID0gKGRzIGFzIGFueSk/LnBhcmFtZXRlck1hcHBpbmdzIHx8IHt9O1xuICAgIGNvbnN0IGV4ZWN1dGlvblBhcmFtcyA9IHsgLi4uY29tcE1hcHBpbmdzLCAuLi5zZXNzaW9uLCAuLi5ldmVudC5wYXJhbWV0ZXJzIH07XG5cbiAgICB0aGlzLmRhdGFTb3VyY2VBZGFwdGVyLmV4ZWN1dGUoZHMsIGV4ZWN1dGlvblBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMucHJldmlld0RhdGEuc2V0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lciBQcmV2aWV3XSBFeGVjdXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY29weUpzb24oKTogdm9pZCB7XG4gICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZm9ybWF0dGVkSnNvbigpKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb3B5U3RhdHVzLnNldCgnQ29waWVkIScpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcHkgSlNPTicpLCAyMDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkSnNvbigpOiB2b2lkIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5mb3JtYXR0ZWRKc29uKCk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtqc29uXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGNvbnN0IHNsdWcgPSAodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLm5hbWUgfHwgJ3JlcG9ydCcpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05Xy1dL2csICctJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIGxpbmsuZG93bmxvYWQgPSBgJHtzbHVnfS5yZXBvcnQuanNvbmA7XG4gICAgbGluay5jbGljaygpO1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfVxuXG4gIHRvZ2dsZUVkaXRvclRoZW1lKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yVGhlbWUudXBkYXRlKChjdXJyZW50KSA9PiAoY3VycmVudCA9PT0gJ2xpZ2h0JyA/ICdkYXJrJyA6ICdsaWdodCcpKTtcbiAgfVxuXG4gIHRvZ2dsZVdyYXBMaW5lcygpOiB2b2lkIHtcbiAgICB0aGlzLndyYXBMaW5lcy51cGRhdGUoKHYpID0+ICF2KTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGF4SGlnaGxpZ2h0SnNvbihqc29uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZWQgPSBqc29uXG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblxuICAgIHJldHVybiBlc2NhcGVkLnJlcGxhY2UoXG4gICAgICAvKFwiKFxcXFx1W2EtekEtWjAtOV17NH18XFxcXFtedV18W15cXFxcXCJdKSpcIihcXHMqOik/fFxcYih0cnVlfGZhbHNlfG51bGwpXFxifC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/KS9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGxldCBjbHMgPSAnanNvbi10b2tlbi1udW1iZXInO1xuICAgICAgICBpZiAoL15cIi8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICBpZiAoLzokLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4ta2V5JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tc3RyaW5nJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoL3RydWV8ZmFsc2UvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tYm9vbGVhbic7XG4gICAgICAgIH0gZWxzZSBpZiAoL251bGwvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tbnVsbCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7Y2xzfVwiPiR7bWF0Y2h9PC9zcGFuPmA7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG1lc3NhZ2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zYXZlTWVzc2FnZS5zZXQobnVsbCksIDMwMDApO1xuICB9XG59XG4iXX0=
797
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5TVQsbUJBMm1CZ0IsdUJBQXVCLENBQUMsTUFBTTt3REFhbEMsTUFBTTtzQkFBbEIsS0FBSztnQkFPTyxNQUFNO3NCQUFsQixLQUFLO2dCQTJETixRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZTtnQkFVN0IsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3J0T3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgUmVwb3J0UmVxdWVzdFNjb3BlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9yZXBvcnQtcmVxdWVzdC1zY29wZSc7XG5pbXBvcnQgeyBub3JtYWxpemVSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vcGVyc2lzdGVuY2Uvc2VydmljZXMvc2NoZW1hLXZhbGlkYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQndheXNSZXBvcnRDb25maWcgfSBmcm9tICcuLi8uLi9jb3JlL2NvbmZpZy9id2F5cy1yZXBvcnQtY29uZmlnJztcbmltcG9ydCB7IERlc2lnbmVyQ29uZmlnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgSW5qZWN0b3IsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3JlcG9ydC1wZXJzaXN0ZW5jZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lclN0YXRlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRGlhbG9nLCBEaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LCBSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9kaWFsb2dzL3JlcG9ydC1zYXZlZC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sYmFyL2Rlc2lnbmVyLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LXBhbGV0dGUvY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbkNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXNpZ24tY2FudmFzL2Rlc2lnbi1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IFByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LWVkaXRvci9wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuLi9ydW50aW1lL3JlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRFeGVjdXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEJ3YXlzUmVwb3J0QXBpVXJscyB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgeyBEZXNpZ25lckVuZHBvaW50c1NlcnZpY2UsIERFU0lHTkVSX0VORFBPSU5UX1BST1ZJREVSUyB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItZW5kcG9pbnRzLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtZGVzaWduZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENka1Njcm9sbGFibGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCxcbiAgICBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50LFxuICAgIERlc2lnbkNhbnZhc0NvbXBvbmVudCxcbiAgICBQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCxcbiAgICBSZXBvcnRSdW50aW1lQ29tcG9uZW50LFxuICAgIFJwdEljb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0Rlc2lnbmVyU3RhdGVTZXJ2aWNlLCAuLi5ERVNJR05FUl9FTkRQT0lOVF9QUk9WSURFUlNdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25lci1zaGVsbFwiPlxuICAgICAgQGlmIChsb2FkRXJyb3IoKSkgeyA8ZGl2IHJvbGU9XCJhbGVydFwiPnt7IGxvYWRFcnJvcigpIH19IDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZXRyeUxvYWQoKVwiPlJldHJ5PC9idXR0b24+PC9kaXY+IH1cbiAgICAgIDwhLS0gVG9wIEFjdGlvbnMgVG9vbGJhciB3aXRoIFNpZGViYXIgQ29udHJvbHMgLS0+XG4gICAgICA8cnB0LWRlc2lnbmVyLXRvb2xiYXJcbiAgICAgICAgW2lzTGVmdFBhbmVsQ29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICBbaXNSaWdodFBhbmVsQ29sbGFwc2VkXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgKHRvZ2dsZUxlZnRQYW5lbCk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiXG4gICAgICAgICh0b2dnbGVSaWdodFBhbmVsKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiXG4gICAgICAgIChzYXZlUmVxdWVzdGVkKT1cIm9uU2F2ZSgpXCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gTWFpbiAzLVBhbmVsIExheW91dCB3aXRoIENESyBEcm9wIExpc3QgR3JvdXAgY29ubmVjdGluZyBQYWxldHRlICYgQ2FudmFzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXdvcmtiZW5jaFwiIGNka0Ryb3BMaXN0R3JvdXA+XG4gICAgICAgIDwhLS0gQmFja2Ryb3AgZm9yIGNvbXBhY3QvbW9iaWxlIHNsaWRlLW91dCBkcmF3ZXJzIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nICYmICghaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSB8fCAhaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ3b3JrYmVuY2gtZHJhd2VyLWJhY2tkcm9wXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUFsbFBhbmVscygpXCJcbiAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAxLiBMZWZ0IFBhbmVsOiBDb21wb25lbnQgUGFsZXR0ZSAob25seSBzaG93biBpbiBkZXNpZ24gbW9kZSkgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2JlbmNoLWxlZnQtY29udGFpbmVyXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpXCI+XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJ3b3JrYmVuY2gtbGVmdC1wYW5lbFwiPlxuICAgICAgICAgICAgICA8cnB0LWNvbXBvbmVudC1wYWxldHRlIChjb2xsYXBzZVJlcXVlc3RlZCk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiIC8+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSAyLiBDZW50ZXIgUGFuZWw6IERlc2lnbiBDYW52YXMgT1IgTGl2ZSBQcmV2aWV3IE9SIEpTT04gU2NoZW1hIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cIndvcmtiZW5jaC1jZW50ZXItcGFuZWxcIj5cbiAgICAgICAgICBAc3dpdGNoICh2aWV3TW9kZSgpKSB7XG4gICAgICAgICAgICBAY2FzZSAoJ2Rlc2lnbicpIHtcbiAgICAgICAgICAgICAgPHJwdC1kZXNpZ24tY2FudmFzIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LW1vZGUtY29udGFpbmVyXCIgY2RrU2Nyb2xsYWJsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZXllXCIgW3NpemVdPVwiMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBQcmV2aWV3IE1vZGUg4oCUIFJ1bm5pbmcgd2l0aCBhY3R1YWwgUmVhY3RpdmUgRm9ybXMgJiBEeW5hbWljIEdyaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1ydW50aW1lIFtyZXBvcnRdPVwiY3VycmVudERlZmluaXRpb24oKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdqc29uJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWVkaXRvci1jYXJkXCIgW2NsYXNzLnRoZW1lLWRhcmtdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIFRvcCBTY2hlbWEgVG9vbGJhciAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhZGdlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi10aXRsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi10aXRsZVwiPlJlcG9ydCBEZWZpbml0aW9uIFNjaGVtYTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXNjaGVtYS10YWdcIj52e3sgY3VycmVudERlZmluaXRpb24oKS5zY2hlbWFWZXJzaW9uIHx8IDEgfX0uMCDigKIgSlNPTjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tbWV0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgY3VycmVudERlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCB9fTwvc3Ryb25nPiBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtZGl2aWRlclwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sganNvblN0YXRzKCkubGluZXMgfX08L3N0cm9uZz4gbGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1kaXZpZGVyXCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sganNvblN0YXRzKCkuc2l6ZUtiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tanNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ3cmFwTGluZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlV3JhcExpbmVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJUb2dnbGUgV29yZCBXcmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxpc3RcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5XcmFwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1qc29uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdG9yVGhlbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ1N3aXRjaCB0byBMaWdodCBUaGVtZScgOiAnU3dpdGNoIHRvIERhcmsgVGhlbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ3NwYXJrbGVzJyA6ICdzbGlkZXJzJ1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdEYXJrJyA6ICdMaWdodCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWpzb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkRvd25sb2FkIGRlZmluaXRpb24gYXMgSlNPTiBmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImRvd25sb2FkXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jb3B5LWpzb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvcGllZF09XCJjb3B5U3RhdHVzKCkgPT09ICdDb3BpZWQhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weUpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvcHkgc2NoZW1hIEpTT04gdG8gY2xpcGJvYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiY29weVN0YXR1cygpID09PSAnQ29waWVkIScgPyAnY2hlY2snIDogJ2NvcHknXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29weVN0YXR1cygpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIENvZGUgVmlld3BvcnQgd2l0aCBMaW5lIE51bWJlcnMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi12aWV3cG9ydFwiIFtjbGFzcy53cmFwLWVuYWJsZWRdPVwid3JhcExpbmVzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tc2Nyb2xsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImpzb24tY29kZS10YWJsZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobGluZSBvZiBoaWdobGlnaHRlZExpbmVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImpzb24tY29kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS1udW1iZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS10ZXh0XCI+PHNwYW4gW2lubmVySFRNTF09XCJsaW5lXCI+PC9zcGFuPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIDMuIFJpZ2h0IFBhbmVsOiBQcm9wZXJ0eSBFZGl0b3IgKG9ubHkgc2hvd24gaW4gZGVzaWduIG1vZGUpIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtiZW5jaC1yaWdodC1jb250YWluZXJcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCI+XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJ3b3JrYmVuY2gtcmlnaHQtcGFuZWxcIj5cbiAgICAgICAgICAgICAgPHJwdC1wcm9wZXJ0eS1lZGl0b3IgKGNvbGxhcHNlUmVxdWVzdGVkKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiIC8+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb21wYWN0L01vYmlsZSBXb3JrYmVuY2ggQm90dG9tIE5hdmlnYXRpb24gQmFyIC0tPlxuICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICA8bmF2IGNsYXNzPVwiY29tcGFjdC13b3JrYmVuY2gtYmFyXCIgYXJpYS1sYWJlbD1cIk1vYmlsZSBXb3JrYmVuY2ggTmF2aWdhdGlvblwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkxlZnRQYW5lbE9ubHkoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIk9wZW4gQ29tcG9uZW50IFBhbGV0dGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwibGF5ZXJzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q29tcG9uZW50czwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpICYmIGlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUFsbFBhbmVscygpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiRnVsbCBDYW52YXMgVmlld1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJlZGl0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q2FudmFzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbXBhY3QtbmF2LWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblJpZ2h0UGFuZWxPbmx5KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJPcGVuIFByb3BlcnRpZXMgSW5zcGVjdG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInNldHRpbmdzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+UHJvcGVydGllczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uYXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU2F2ZSBOb3RpZmljYXRpb24gVG9hc3QgLS0+XG4gICAgICBAaWYgKHNhdmVNZXNzYWdlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNhdmUtdG9hc3RcIj5cbiAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDxzcGFuPnt7IHNhdmVNZXNzYWdlKCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDEgMSAwJTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXNoZWxsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMjY4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCAud29ya2JlbmNoLWxlZnQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogNDIwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LXBhbmVsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgfVxuXG5cblxuICAgIC5jb21wYWN0LXdvcmtiZW5jaC1iYXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3Age1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgICAgIC5jb21wYWN0LXdvcmtiZW5jaC1iYXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgICAgcGFkZGluZzogMCAxMnB4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgei1pbmRleDogNDU7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBib3gtc2hhZG93OiAwIC0ycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXJwdC1mb250LXdlaWdodC1tZWRpdW0sIDUwMCk7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4gcnB0LWljb24ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICAgIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG46aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpob3ZlciBycHQtaWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuLmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWxpZ2h0LCAjZWZmNmZmKTtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXJwdC1mb250LXdlaWdodC1zZW1pYm9sZCwgNjAwKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMDgpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bi5hY3RpdmUgcnB0LWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDFweDtcbiAgICAgIH1cblxuICAgICAgLndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3Age1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjM1KTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7XG4gICAgICAgIHotaW5kZXg6IDUwO1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDI4MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDg1dnc7XG4gICAgICAgIHotaW5kZXg6IDYwO1xuICAgICAgICBib3gtc2hhZG93OiA0cHggMCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgfVxuICAgICAgLndvcmtiZW5jaC1sZWZ0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICAgICAgICB3aWR0aDogMjgwcHggIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDM4MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDk1dnc7XG4gICAgICAgIHotaW5kZXg6IDYwO1xuICAgICAgICBib3gtc2hhZG93OiAtNHB4IDAgMjRweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIH1cbiAgICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICAgICAgd2lkdGg6IDM4MHB4ICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIFByZXZpZXcgTW9kZSAqL1xuICAgIC5wcmV2aWV3LW1vZGUtY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNWY5O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctYmFubmVyIHtcbiAgICAgIG1heC13aWR0aDogMTQwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG8gMTZweCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiAjMWU0MGFmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JmZGJmZTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMThweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjhyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLyogSlNPTiBTY2hlbWEgTW9kZSAtIEVudGVycHJpc2UgTGlnaHQgJiBBZGFwdGFibGUgRGVzaWduICovXG4gICAgLmpzb24tbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmOGZhZmMpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAuanNvbi1lZGl0b3ItY2FyZCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDFweCAycHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjAwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDIwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tZWRpdG9yLWNhcmQudGhlbWUtZGFyayB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMWUyOTNiO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gICAgfVxuXG4gICAgLyogU3ViLWhlYWRlciBiYW5uZXIgKi9cbiAgICAuanNvbi1iYW5uZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE4cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGVhc2UsIGJvcmRlci1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWJhbm5lciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAuanNvbi1iYW5uZXItbGVmdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG5cbiAgICAuanNvbi1iYWRnZS1pY29uIHtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4xOCk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tYmFkZ2UtaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoOTYsIDE2NSwgMjUwLCAwLjMpO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiAycHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdGl0bGUge1xuICAgICAgY29sb3I6ICNmMWY1Zjk7XG4gICAgfVxuXG4gICAgLmpzb24tc2NoZW1hLXRhZyB7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICAgICAgcGFkZGluZzogMXB4IDdweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgICBjb2xvcjogIzQ3NTU2OTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXNjaGVtYS10YWcge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIH1cblxuICAgIC5qc29uLXN0YXQtcGlsbCBzdHJvbmcge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1waWxsIHN0cm9uZyB7XG4gICAgICBjb2xvcjogI2NiZDVlMTtcbiAgICB9XG5cbiAgICAuanNvbi1zdGF0LWRpdmlkZXIge1xuICAgICAgY29sb3I6ICNjYmQ1ZTE7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1kaXZpZGVyIHtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLWJhbm5lci1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgcGFkZGluZzogNXB4IDExcHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24ge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGJvcmRlci1jb2xvcjogIzMzNDE1NTtcbiAgICAgIGNvbG9yOiAjY2JkNWUxO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogIzMzNDE1NTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzQ3NTU2OTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gICAgfVxuXG4gICAgLmJ0bi1jb3B5LWpzb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA1cHggMTNweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgzNywgOTksIDIzNSwgMC4yKTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uLmNvcGllZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMTBiOTgxO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgxNiwgMTg1LCAxMjksIDAuMik7XG4gICAgfVxuXG4gICAgLyogVmlld3BvcnQgJiBDb2RlIFRhYmxlICovXG4gICAgLmpzb24tdmlld3BvcnQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXZpZXdwb3J0IHtcbiAgICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7XG4gICAgfVxuXG4gICAgLmpzb24tc2Nyb2xsLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgIC5qc29uLWNvZGUtdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseS1tb25vLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlKTtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICB9XG5cbiAgICAuanNvbi1jb2RlLXJvdyB7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tY29kZS1yb3c6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1jb2RlLXJvdzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCA0MSwgNTksIDAuNik7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS1udW1iZXIge1xuICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICBtaW4td2lkdGg6IDQ0cHg7XG4gICAgICBtYXgtd2lkdGg6IDU2cHg7XG4gICAgICBwYWRkaW5nOiAxcHggMTJweCAxcHggOHB4O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1saW5lLW51bWJlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIHBhZGRpbmc6IDFweCAxNnB4O1xuICAgICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBjb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAud3JhcC1lbmFibGVkIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIGNvbG9yOiAjZTJlOGYwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IExpZ2h0IE1vZGUgKENyaXNwICYgSGlnaC1Db250cmFzdCkgKi9cbiAgICAuanNvbi10b2tlbi1rZXkge1xuICAgICAgY29sb3I6ICMxZTQwYWY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzA0Nzg1NztcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1udW1iZXIge1xuICAgICAgY29sb3I6ICM3YzNhZWQ7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLWJvb2xlYW4ge1xuICAgICAgY29sb3I6ICNkOTc3MDY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLW51bGwge1xuICAgICAgY29sb3I6ICNkYzI2MjY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IERhcmsgTW9kZSAoQ2FsaWJyYXRlZCBOaWdodCBNb2RlKSAqL1xuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLWtleSB7XG4gICAgICBjb2xvcjogIzYwYTVmYTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tc3RyaW5nIHtcbiAgICAgIGNvbG9yOiAjNGFkZTgwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLW51bWJlciB7XG4gICAgICBjb2xvcjogI2MwODRmYztcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tYm9vbGVhbiB7XG4gICAgICBjb2xvcjogI2ZiYmYyNDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tbnVsbCB7XG4gICAgICBjb2xvcjogI2Y4NzE3MTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIC8qIFNhdmUgVG9hc3QgTm90aWZpY2F0aW9uICovXG4gICAgLnNhdmUtdG9hc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyNHB4O1xuICAgICAgcmlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgICBhbmltYXRpb246IHJwdC1mYWRlLWluIDIwMG1zIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RzID0gbmV3IFJlcG9ydFJlcXVlc3RTY29wZSgpO1xuICByZWFkb25seSBsb2FkRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgc2F2ZURpYWxvZ09wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludFNjb3BlID0gaW5qZWN0KERlc2lnbmVyRW5kcG9pbnRzU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWd1cmF0aW9uID0gaW5qZWN0KERlc2lnbmVyQ29uZmlnU2VydmljZSk7XG5cbiAgLyoqIFBhZ2UtbG9jYWwgc2V0dGluZ3M7IG9taXR0ZWQgdmFsdWVzIGluaGVyaXQgb3B0aW9uYWwgYXBwbGljYXRpb24gZGVmYXVsdHMuICovXG4gIEBJbnB1dCgpIHNldCBjb25maWcodmFsdWU6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZXQodmFsdWUpO1xuICAgIHRoaXMuc2Vzc2lvblNlcnZpY2U/LmNvbmZpZ3VyZURlc2lnbmVyU2Vzc2lvbih2YWx1ZSk7XG4gICAgdGhpcy5lbmRwb2ludFNjb3BlLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKiBPdmVycmlkZSBhbnkgc3Vic2V0IG9mIGNvbmZpZ3VyZWQgVVJMcyBmb3IgdGhpcyBkZXNpZ25lciBhbmQgaXRzIHByZXZpZXcuICovXG4gIEBJbnB1dCgpIHNldCBhcGlVcmwodmFsdWU6IEJ3YXlzUmVwb3J0QXBpVXJscyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmVuZHBvaW50U2NvcGUuc2V0T3ZlcnJpZGVzKHZhbHVlKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGRlc2lnbmVyU3RhdGUgPSBpbmplY3QoRGVzaWduZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RlbmNlQWRhcHRlciA9IGluamVjdChSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNvdXJjZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0RXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2cgPSBpbmplY3QoRGlhbG9nLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlTdXBwb3J0ID0gaW5qZWN0KFJlcG9ydE92ZXJsYXlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydGluZ0NvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKiBPcHRpb25hbCByZXBvcnRJZCB0byBsb2FkIGZyb20gcGVyc2lzdGVuY2UgYWRhcHRlciAqL1xuICByZWFkb25seSByZXBvcnRJZCA9IGlucHV0PHN0cmluZz4oKTtcblxuICAvKiogT3B0aW9uYWwgZGVmaW5pdGlvbiB0byBsb2FkIGRpcmVjdGx5ICovXG4gIHJlYWRvbmx5IGRlZmluaXRpb24gPSBpbnB1dDxSZXBvcnREZWZpbml0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnaW5pdGlhbFJlcG9ydCcgfSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBzYXZlcyB0aGUgcmVwb3J0ICovXG4gIHJlYWRvbmx5IHJlcG9ydFNhdmVkID0gb3V0cHV0PFJlcG9ydERlZmluaXRpb24+KHsgYWxpYXM6ICdzYXZlJyB9KTtcblxuICAvKiogRW1pdHRlZCB3aGVuZXZlciB0aGUgcmVwb3J0IGRlZmluaXRpb24gY2hhbmdlcyBpbiB0aGUgdmlzdWFsIGRlc2lnbmVyICovXG4gIHJlYWRvbmx5IGRlZmluaXRpb25DaGFuZ2VkID0gb3V0cHV0PFJlcG9ydERlZmluaXRpb24+KHsgYWxpYXM6ICdkZWZpbml0aW9uQ2hhbmdlJyB9KTtcblxuICByZWFkb25seSBjdXJyZW50RGVmaW5pdGlvbiA9IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uO1xuICByZWFkb25seSB2aWV3TW9kZSA9IHRoaXMuZGVzaWduZXJTdGF0ZS52aWV3TW9kZTtcblxuICByZWFkb25seSBwcmV2aWV3RGF0YSA9IHNpZ25hbDx1bmtub3duW10gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc2F2ZU1lc3NhZ2UgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGNvcHlTdGF0dXMgPSBzaWduYWw8c3RyaW5nPignQ29weSBKU09OJyk7XG4gIHJlYWRvbmx5IGlzTGVmdFBhbmVsQ29sbGFwc2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICB0b2dnbGVMZWZ0UGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC51cGRhdGUoKHYpID0+ICF2KTtcbiAgfVxuXG4gIHRvZ2dsZVJpZ2h0UGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICBvcGVuTGVmdFBhbmVsT25seSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnNldChmYWxzZSk7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgb3BlblJpZ2h0UGFuZWxPbmx5KCk6IHZvaWQge1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldChmYWxzZSk7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICBjbG9zZUFsbFBhbmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTAwKSB7XG4gICAgICBpZiAoIXRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSAmJiAhdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKSkge1xuICAgICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc0N0cmxPckNtZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGlzSW5wdXQgPSB0YXJnZXQgJiYgKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8ICh0YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmlzQ29udGVudEVkaXRhYmxlKTtcbiAgICBpZiAoaXNJbnB1dCkgcmV0dXJuO1xuXG4gICAgaWYgKGlzQ3RybE9yQ21kICYmICFldmVudC5hbHRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdiJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlTGVmdFBhbmVsKCk7XG4gICAgfSBlbHNlIGlmIChpc0N0cmxPckNtZCAmJiBldmVudC5hbHRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdiJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlUmlnaHRQYW5lbCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IGZvcm1hdHRlZEpzb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuY3VycmVudERlZmluaXRpb24oKSwgbnVsbCwgMik7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVkaXRvclRoZW1lID0gc2lnbmFsPCdsaWdodCcgfCAnZGFyayc+KCdsaWdodCcpO1xuICByZWFkb25seSB3cmFwTGluZXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGpzb25TdGF0cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5mb3JtYXR0ZWRKc29uKCk7XG4gICAgY29uc3QgbGluZXMgPSBqc29uID8ganNvbi5zcGxpdCgnXFxuJykubGVuZ3RoIDogMDtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBCbG9iKFtqc29uXSkuc2l6ZTtcbiAgICBjb25zdCBzaXplS2IgPSBieXRlcyA8IDEwMjQgPyBgJHtieXRlc30gQmAgOiBgJHsoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmA7XG4gICAgcmV0dXJuIHsgbGluZXMsIHNpemVLYiB9O1xuICB9KTtcblxuICByZWFkb25seSBoaWdobGlnaHRlZExpbmVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmZvcm1hdHRlZEpzb24oKTtcbiAgICBpZiAoIWpzb24pIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5zeW50YXhIaWdobGlnaHRKc29uKGpzb24pLnNwbGl0KCdcXG4nKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9hZGVkUmVwb3J0RGVmOiBSZXBvcnREZWZpbml0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWREZWY6IFJlcG9ydERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBsZXQgcHJldmlvdXNDb250ZXh0ID0gJyc7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnJlcXVlc3RzLmNvbnRleHQoKTtcbiAgICAgIGlmIChjb250ZXh0ID09PSBwcmV2aW91c0NvbnRleHQpIHJldHVybjtcbiAgICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4geyB0aGlzLnJlcXVlc3RzLmNhbmNlbEFsbCgpOyB0aGlzLnByZXZpZXdEYXRhLnNldChudWxsKTsgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IG51bGw7IH0pO1xuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLmRlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKCFkZWYpIHJldHVybjtcbiAgICAgICAgdGhpcy5yZXF1ZXN0cy5jYW5jZWwoJ2RlZmluaXRpb24nKTtcblxuICAgICAgICAvLyBTa2lwIGlmIHRoaXMgZGVmaW5pdGlvbiBpcyByZWZlcmVuY2UtaWRlbnRpY2FsIHRvIHdoYXQgdGhlIGRlc2lnbmVyIGp1c3QgZW1pdHRlZCBvciBjdXJyZW50IGludGVybmFsIHN0YXRlXG4gICAgICAgIGlmIChkZWYgPT09IHRoaXMubGFzdEVtaXR0ZWREZWYgfHwgZGVmID09PSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbigpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSByZWxvYWQgaWYgcmVwb3J0IElEIGNoYW5nZWQgKGRpZmZlcmVudCByZXBvcnQpLCBvciBpbml0aWFsIGxvYWQsIG9yIGV4dGVybmFsIGRlZmluaXRpb24gd2hlbiBub3QgYWN0aXZlbHkgZWRpdGluZ1xuICAgICAgICBjb25zdCBpc05ld1JlcG9ydCA9IGRlZi5pZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZDtcbiAgICAgICAgaWYgKGlzTmV3UmVwb3J0IHx8IChkZWYgIT09IHRoaXMubG9hZGVkUmVwb3J0RGVmICYmICF0aGlzLmRlc2lnbmVyU3RhdGUuaXNEaXJ0eSgpKSkge1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0SWQgPSBkZWYuaWQ7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgdHJ5IHsgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKG5vcm1hbGl6ZVJlcG9ydERlZmluaXRpb24oZGVmKSk7IHRoaXMubG9hZEVycm9yLnNldChudWxsKTsgfVxuICAgICAgICAgIGNhdGNoIChlcnJvcikgeyB0aGlzLmxvYWRFcnJvci5zZXQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTsgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnJlcG9ydElkKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdHMuY29udGV4dCgpO1xuICAgICAgICBpZiAoIWlkIHx8IHRoaXMuZGVmaW5pdGlvbigpKSB7IHRoaXMucmVxdWVzdHMuY2FuY2VsKCdkZWZpbml0aW9uJyk7IHJldHVybjsgfVxuICAgICAgICBpZiAoaWQgJiYgaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQgJiYgIXRoaXMuZGVmaW5pdGlvbigpICYmIHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGlkO1xuICAgICAgICAgIHRoaXMucmVxdWVzdHMucnVuKCdkZWZpbml0aW9uJywgKCkgPT4gdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIhLmxvYWQoaWQpLnBpcGUobWFwKG5vcm1hbGl6ZVJlcG9ydERlZmluaXRpb24pKSwgZGVmID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKGRlZik7IHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICAgICAgICB9LCBlcnJvciA9PiB7IHRoaXMubG9hZGVkUmVwb3J0SWQgPSBudWxsOyB0aGlzLmxvYWRFcnJvci5zZXQoZXJyb3IubWVzc2FnZSk7IH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb24oKTtcbiAgICAgIGlmICh0aGlzLmRlc2lnbmVyU3RhdGUuaXNEaXJ0eSgpKSB7XG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWREZWYgPSBjdXJyZW50O1xuICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGN1cnJlbnQ7XG4gICAgICAgIHRoaXMubG9hZGVkUmVwb3J0SWQgPSBjdXJyZW50LmlkO1xuICAgICAgICB0aGlzLmRlZmluaXRpb25DaGFuZ2VkLmVtaXQoY3VycmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgOTAwKSB7XG4gICAgICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTIwMCkge1xuICAgICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlZmluaXRpb24oKSAmJiAhdGhpcy5yZXBvcnRJZCgpKSB7XG4gICAgICAvLyBTdGFydCB3aXRoIGEgY2xlYW4gcmVwb3J0IGRlZmluaXRpb25cbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbih7XG4gICAgICAgIGlkOiBgcnB0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDgpfWAsXG4gICAgICAgIG5hbWU6ICdOZXcgQ3VzdG9tIFJlcG9ydCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVmlzdWFsbHkgZGVzaWduZWQgcmVwb3J0aW5nIHBhZ2UgY3JlYXRlZCB3aXRoIEJXYXlzLVJlcG9ydC4nLFxuICAgICAgICBzY2hlbWFWZXJzaW9uOiAxLFxuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBsYXlvdXQ6IHsgY29sdW1uczogMTIsIGdhcDogMTYsIHBhZGRpbmc6IDI0LCBkaXJlY3Rpb246ICdsdHInIH0sXG4gICAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICAgICAgZGF0YVNvdXJjZXM6IFtdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0cnlMb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5yZXBvcnRJZCgpO1xuICAgIGlmICghaWQgfHwgIXRoaXMucGVyc2lzdGVuY2VBZGFwdGVyKSByZXR1cm47XG4gICAgdGhpcy5yZXF1ZXN0cy5ydW4oJ2RlZmluaXRpb24nLCAoKSA9PiB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlciEubG9hZChpZCkucGlwZShtYXAobm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbikpLCBkZWYgPT4ge1xuICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGlkOyB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGRlZjtcbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbihkZWYpOyB0aGlzLmxvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgfSwgZXJyb3IgPT4gdGhpcy5sb2FkRXJyb3Iuc2V0KGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zYXZlRGlhbG9nT3BlbikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5kaWFsb2cpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdUaGUgcmVwb3J0IHJldmlldyBkaWFsb2cgaXMgdW5hdmFpbGFibGUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3ZlcmxheVN1cHBvcnQuZW5zdXJlU3R5bGVzKCk7XG4gICAgY29uc3Qgcm91dGVCYXNlID0gdGhpcy5yZXBvcnRpbmdDb25maWc/LnJvdXRlQmFzZSB8fCAncmVwb3J0cyc7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCwgeyByZXBvcnQ6IFJlcG9ydERlZmluaXRpb247IHJvdXRlQmFzZT86IHN0cmluZyB9PihcbiAgICAgIFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICAgICAgZGF0YTogeyByZXBvcnQ6IHRoaXMuY3VycmVudERlZmluaXRpb24oKSwgcm91dGVCYXNlIH0sXG4gICAgICAgIHdpZHRoOiAnbWluKDg2MHB4LCBjYWxjKDEwMHZ3IC0gMzJweCkpJywgbWF4V2lkdGg6ICc4NjBweCcsIG1heEhlaWdodDogJ2NhbGMoMTAwZHZoIC0gMzJweCknLFxuICAgICAgICBwYW5lbENsYXNzOiAncnB0LWRpYWxvZy1wYW5lbCcsIGJhY2tkcm9wQ2xhc3M6ICdycHQtZGlhbG9nLWJhY2tkcm9wJywgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdkaWFsb2ctdGl0bGUnLCBhdXRvRm9jdXM6ICcjcnB0LWRsZy1pZCcsXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnNhdmVEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICBjb25zdCB1bnJlZ2lzdGVyRGVzdHJveSA9IHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gZGlhbG9nUmVmLmNsb3NlKCkpO1xuICAgIGRpYWxvZ1JlZi5jbG9zZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICB1bnJlZ2lzdGVyRGVzdHJveSgpO1xuICAgICAgdGhpcy5zYXZlRGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgaWYgKCFyZXN1bHQpIHJldHVybjtcbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS51cGRhdGVSZXBvcnRTZXR0aW5ncyhyZXN1bHQucmVwb3J0KTtcbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5tYXJrU2F2ZWQoKTtcbiAgICAgIHRoaXMucmVwb3J0U2F2ZWQuZW1pdChyZXN1bHQucmVwb3J0KTtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdSZXBvcnQgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PT0gJ29wZW5fbGl2ZV9wYWdlJykge1xuICAgICAgICBjb25zdCBzbHVnID0gcmVzdWx0LnJlcG9ydC5zbHVnIHx8IHJlc3VsdC5yZXBvcnQuaWQ7XG4gICAgICAgIGNvbnN0IHVybCA9ICcvJyArIHJvdXRlQmFzZS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLycgKyBzbHVnO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIpIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uUHJldmlld0V4ZWN1dGUoZXZlbnQ6IHtcbiAgICBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXhlY3V0aW9uU2VydmljZSkge1xuICAgICAgdGhpcy5yZXF1ZXN0cy5ydW4oJ3ByZXZpZXcnLCAoKSA9PiB0aGlzLmV4ZWN1dGlvblNlcnZpY2UhLmV4ZWN1dGUoZXZlbnQuZGVmaW5pdGlvbiwgZXZlbnQucGFyYW1ldGVycyksXG4gICAgICAgIGRhdGEgPT4gdGhpcy5wcmV2aWV3RGF0YS5zZXQoZGF0YSksIGVycm9yID0+IHRoaXMubG9hZEVycm9yLnNldChlcnJvci5tZXNzYWdlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZ3JpZCA9IGV2ZW50LmRlZmluaXRpb24uZ3JpZDtcbiAgICBpZiAoIWdyaWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGdyaWQgYXR0YWNoZWQgdG8gcmVwb3J0IGRlZmluaXRpb24uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGRzID0gZXZlbnQuZGVmaW5pdGlvbi5kYXRhU291cmNlcz8uZmluZCgoZCkgPT4gZC5pZCA9PT0gZ3JpZC5kYXRhU291cmNlSWQpO1xuICAgIGlmICghZHMgJiYgZXZlbnQuZGVmaW5pdGlvbi5kYXRhU291cmNlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzWzBdO1xuICAgIH1cblxuICAgIGlmICghZHMpIHtcbiAgICAgIC8vIExvb2sgZm9yIFN0b3JlZCBQcm9jZWR1cmUgb3IgVGFibGUgY29uZmlndXJlZCBvbiBhbnkgY29tcG9uZW50IGluIHRoZSByZXBvcnRcbiAgICAgIGNvbnN0IGNvbXBXaXRoRW50aXR5ID0gZXZlbnQuZGVmaW5pdGlvbi5jb21wb25lbnRzLmZpbmQoKGMpID0+IGMuZGF0YVNvdXJjZT8uZW50aXR5TmFtZSk7XG4gICAgICBpZiAoY29tcFdpdGhFbnRpdHk/LmRhdGFTb3VyY2U/LmVudGl0eU5hbWUpIHtcbiAgICAgICAgZHMgPSB7XG4gICAgICAgICAgaWQ6ICdzcC0nICsgY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIG5hbWU6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UuZW50aXR5TmFtZSxcbiAgICAgICAgICBlbmRwb2ludDogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIHNjaGVtYTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zY2hlbWEgfHwgJ2RibycsXG4gICAgICAgICAgdHlwZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zb3VyY2VUeXBlIHx8ICdwcm9jZWR1cmUnLFxuICAgICAgICAgIG1ldGhvZDogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAndGFibGUnID8gJ0dFVCcgOiAnU1RPUkVEX1BST0NFRFVSRScsXG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UucGFyYW1ldGVyTWFwcGluZ3MsXG4gICAgICAgIH0gYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZHMpIHtcbiAgICAgIGRzID0ge1xuICAgICAgICBpZDogJ2RlZmF1bHQtZHMnLFxuICAgICAgICBuYW1lOiAnUmVwb3J0IERhdGEnLFxuICAgICAgICBlbmRwb2ludDogJ2RlZmF1bHQnLFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2VBZGFwdGVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tEZXNpZ25lciBQcmV2aWV3XSBObyBkYXRhU291cmNlQWRhcHRlciBhdmFpbGFibGUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IGNvbXBNYXBwaW5ncyA9IChkcyBhcyBhbnkpPy5wYXJhbWV0ZXJNYXBwaW5ncyB8fCB7fTtcbiAgICBjb25zdCBleGVjdXRpb25QYXJhbXMgPSB7IC4uLmNvbXBNYXBwaW5ncywgLi4uc2Vzc2lvbiwgLi4uZXZlbnQucGFyYW1ldGVycyB9O1xuXG4gICAgdGhpcy5yZXF1ZXN0cy5ydW4oJ3ByZXZpZXcnLCAoKSA9PiB0aGlzLmRhdGFTb3VyY2VBZGFwdGVyIS5leGVjdXRlKGRzISwgZXhlY3V0aW9uUGFyYW1zKSxcbiAgICAgIGRhdGEgPT4gdGhpcy5wcmV2aWV3RGF0YS5zZXQoZGF0YSksIGVycm9yID0+IHRoaXMubG9hZEVycm9yLnNldChlcnJvci5tZXNzYWdlKSk7XG4gIH1cblxuICBjb3B5SnNvbigpOiB2b2lkIHtcbiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5mb3JtYXR0ZWRKc29uKCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmNvcHlTdGF0dXMuc2V0KCdDb3BpZWQhJyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb3B5U3RhdHVzLnNldCgnQ29weSBKU09OJyksIDIwMDApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZG93bmxvYWRKc29uKCk6IHZvaWQge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmZvcm1hdHRlZEpzb24oKTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgY29uc3Qgc2x1ZyA9ICh0aGlzLmN1cnJlbnREZWZpbml0aW9uKCkubmFtZSB8fCAncmVwb3J0JylcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTlfLV0vZywgJy0nKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9IGAke3NsdWd9LnJlcG9ydC5qc29uYDtcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICB9XG5cbiAgdG9nZ2xlRWRpdG9yVGhlbWUoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JUaGVtZS51cGRhdGUoKGN1cnJlbnQpID0+IChjdXJyZW50ID09PSAnbGlnaHQnID8gJ2RhcmsnIDogJ2xpZ2h0JykpO1xuICB9XG5cbiAgdG9nZ2xlV3JhcExpbmVzKCk6IHZvaWQge1xuICAgIHRoaXMud3JhcExpbmVzLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50YXhIaWdobGlnaHRKc29uKGpzb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZXNjYXBlZCA9IGpzb25cbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuXG4gICAgcmV0dXJuIGVzY2FwZWQucmVwbGFjZShcbiAgICAgIC8oXCIoXFxcXHVbYS16QS1aMC05XXs0fXxcXFxcW151XXxbXlxcXFxcIl0pKlwiKFxccyo6KT98XFxiKHRydWV8ZmFsc2V8bnVsbClcXGJ8LT9cXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8pL2csXG4gICAgICAobWF0Y2gpID0+IHtcbiAgICAgICAgbGV0IGNscyA9ICdqc29uLXRva2VuLW51bWJlcic7XG4gICAgICAgIGlmICgvXlwiLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgIGlmICgvOiQvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgICBjbHMgPSAnanNvbi10b2tlbi1rZXknO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbHMgPSAnanNvbi10b2tlbi1zdHJpbmcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgvdHJ1ZXxmYWxzZS8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICBjbHMgPSAnanNvbi10b2tlbi1ib29sZWFuJztcbiAgICAgICAgfSBlbHNlIGlmICgvbnVsbC8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICBjbHMgPSAnanNvbi10b2tlbi1udWxsJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtjbHN9XCI+JHttYXRjaH08L3NwYW4+YDtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9hc3QobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlTWVzc2FnZS5zZXQobWVzc2FnZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNhdmVNZXNzYWdlLnNldChudWxsKSwgMzAwMCk7XG4gIH1cbn1cbiJdfQ==