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,3 +1,4 @@
1
+ import { ReportRequestScope } from '../../core/utils/report-request-scope';
1
2
  import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, viewChild, } from '@angular/core';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import { FormsModule } from '@angular/forms';
@@ -8,6 +9,10 @@ import { ReportPersistenceAdapter } from '../../data-access/contracts/report-per
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@angular/forms";
10
11
  export class RptReportComponent {
12
+ requests = new ReportRequestScope();
13
+ presetError = signal(null);
14
+ isSavingPreset = signal(false);
15
+ persistedDefinition = signal(null);
11
16
  exportService = inject(ReportExportService);
12
17
  persistence = inject(ReportPersistenceAdapter, { optional: true });
13
18
  id = input(undefined);
@@ -36,7 +41,9 @@ export class RptReportComponent {
36
41
  return this.report();
37
42
  });
38
43
  activeDefinition = computed(() => {
39
- return this.report() ?? this.runtimeComponent()?.currentDefinition() ?? null;
44
+ const source = this.report() ?? this.runtimeComponent()?.currentDefinition() ?? null;
45
+ const persisted = this.persistedDefinition();
46
+ return persisted?.source === source && persisted.context === this.requests.context() ? persisted.saved : source;
40
47
  });
41
48
  recordCount = computed(() => {
42
49
  return this.runtimeComponent()?.resultData()?.length ?? 0;
@@ -109,51 +116,48 @@ export class RptReportComponent {
109
116
  }
110
117
  saveCurrentPreset() {
111
118
  const name = this.newPresetName().trim();
112
- if (!name)
119
+ const def = this.activeDefinition();
120
+ if (!name || !def?.grid || this.isSavingPreset())
113
121
  return;
114
- const presetId = `preset_${Date.now()}`;
115
- const newPreset = {
116
- id: presetId,
117
- name,
118
- gridState: this.latestGridState() ?? {},
119
- createdAt: new Date().toISOString(),
122
+ const preset = {
123
+ id: 'preset_' + Date.now() + '_' + Math.random().toString(36).slice(2, 8), name,
124
+ gridState: this.latestGridState() ?? {}, createdAt: new Date().toISOString(),
120
125
  };
121
- const def = this.activeDefinition();
122
- if (def && def.grid) {
123
- if (!def.grid.options)
124
- def.grid.options = {};
125
- const currentPresets = def.grid.options.presets ?? [];
126
- def.grid.options.presets = [...currentPresets, newPreset];
127
- if (this.persistence && def.id) {
128
- this.persistence.save(def).subscribe({
129
- next: () => { },
130
- error: () => { },
131
- });
132
- }
133
- }
134
- this.customPresets.update((prev) => [...prev, newPreset]);
135
- this.activePresetId.set(presetId);
136
- this.presetSaved.emit({ name, preset: newPreset });
137
- this.closeSavePresetModal();
126
+ const presets = [...(def.grid.options?.presets ?? []), preset];
127
+ this.persistPresets(def, presets, () => {
128
+ this.activePresetId.set(preset.id);
129
+ this.presetSaved.emit({ name, preset });
130
+ this.closeSavePresetModal();
131
+ });
138
132
  }
139
133
  deletePreset(presetId) {
140
- if (presetId === 'default')
141
- return;
142
- this.customPresets.update((prev) => prev.filter((p) => p.id !== presetId));
143
134
  const def = this.activeDefinition();
144
- if (def && def.grid && def.grid.options) {
145
- const current = def.grid.options.presets ?? [];
146
- def.grid.options.presets = current.filter((p) => p.id !== presetId);
147
- if (this.persistence && def.id) {
148
- this.persistence.save(def).subscribe({
149
- next: () => { },
150
- error: () => { },
151
- });
152
- }
153
- }
154
- if (this.activePresetId() === presetId) {
155
- this.onSelectPreset('default');
135
+ if (presetId === 'default' || !def?.grid || this.isSavingPreset())
136
+ return;
137
+ const presets = (def.grid.options?.presets ?? []).filter(p => p.id !== presetId);
138
+ this.persistPresets(def, presets, () => {
139
+ this.customPresets.update(prev => prev.filter(p => p.id !== presetId));
140
+ if (this.activePresetId() === presetId)
141
+ this.onSelectPreset('default');
142
+ });
143
+ }
144
+ persistPresets(def, presets, success) {
145
+ if (!this.persistence || !Number.isInteger(def.version) || def.version < 0) {
146
+ this.presetError.set('Report storage and a valid saved version are required to save views.');
147
+ return;
156
148
  }
149
+ const source = this.report() ?? this.runtimeComponent()?.currentDefinition();
150
+ if (!source)
151
+ return;
152
+ const next = { ...def, grid: { ...def.grid, options: { ...def.grid.options, presets } } };
153
+ this.isSavingPreset.set(true);
154
+ this.presetError.set(null);
155
+ this.requests.run('preset', () => this.persistence.save(next, { expectedVersion: def.version }), saved => {
156
+ if ((this.report() ?? this.runtimeComponent()?.currentDefinition()) !== source)
157
+ return;
158
+ this.persistedDefinition.set({ source, saved, context: this.requests.context() });
159
+ success();
160
+ }, error => this.presetError.set(error.message), () => this.isSavingPreset.set(false));
157
161
  }
158
162
  onExportExcel() {
159
163
  const data = this.runtimeComponent()?.resultData();
@@ -194,6 +198,8 @@ export class RptReportComponent {
194
198
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptReportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
195
199
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RptReportComponent, isStandalone: true, selector: "rpt-report, rpt-view", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, report: { classPropertyName: "report", publicName: "report", isSignal: true, isRequired: false, transformFunction: null }, parameters: { classPropertyName: "parameters", publicName: "parameters", isSignal: true, isRequired: false, transformFunction: null }, showExport: { classPropertyName: "showExport", publicName: "showExport", isSignal: true, isRequired: false, transformFunction: null }, enablePresets: { classPropertyName: "enablePresets", publicName: "enablePresets", isSignal: true, isRequired: false, transformFunction: null }, autoExecute: { classPropertyName: "autoExecute", publicName: "autoExecute", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowClick: "rowClick", dataLoaded: "dataLoaded", gridStateChange: "gridStateChange", selectionChange: "selectionChange", selectionChanged: "selectionChanged", presetSaved: "presetSaved", presetChange: "presetChange", exportRequested: "exportRequested", printRequested: "printRequested" }, viewQueries: [{ propertyName: "runtimeComponent", first: true, predicate: ReportRuntimeComponent, descendants: true, isSignal: true }], ngImport: i0, template: `
196
200
  <div class="rpt-facade-container">
201
+ @if (presetError()) { <p role="alert">{{ presetError() }}</p> }
202
+ @if (isSavingPreset()) { <p role="status">Saving view...</p> }
197
203
  <!-- Top Action & Preset Bar -->
198
204
  @if (showToolbar()) {
199
205
  <div class="rpt-facade-toolbar">
@@ -370,6 +376,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
370
376
  type: Component,
371
377
  args: [{ selector: 'rpt-report, rpt-view', standalone: true, imports: [CommonModule, FormsModule, ReportRuntimeComponent, RptIconComponent], template: `
372
378
  <div class="rpt-facade-container">
379
+ @if (presetError()) { <p role="alert">{{ presetError() }}</p> }
380
+ @if (isSavingPreset()) { <p role="status">Saving view...</p> }
373
381
  <!-- Top Action & Preset Bar -->
374
382
  @if (showToolbar()) {
375
383
  <div class="rpt-facade-toolbar">
@@ -542,4 +550,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
542
550
  </div>
543
551
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-facade-container{width:100%;position:relative}.rpt-facade-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;background:#fff;border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));margin-bottom:14px;flex-wrap:wrap}.rpt-toolbar-left,.rpt-toolbar-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.rpt-report-title-badge{display:inline-flex;align-items:center;gap:6px;font-size:.875rem;font-weight:700;color:#0f172a;padding-right:4px}.rpt-title-dot{width:8px;height:8px;border-radius:50%;background:var(--rpt-color-primary, #2563eb)}.rpt-record-count-chip{display:inline-flex;align-items:center;gap:5px;background:#f1f5f9;color:#475569;font-size:.725rem;font-weight:600;padding:3px 8px;border-radius:var(--rpt-border-radius-full, 9999px);border:1px solid #e2e8f0}.rpt-chip-dot{width:6px;height:6px;border-radius:50%;background:#10b981}.rpt-preset-control{display:flex;align-items:center;gap:6px;background:#f8fafc;padding:3px 6px;border-radius:var(--rpt-border-radius, 6px);border:1px solid #e2e8f0}.rpt-preset-label{display:inline-flex;align-items:center;gap:4px;font-size:.725rem;font-weight:600;color:#64748b}.rpt-preset-select{border:1px solid #cbd5e1;border-radius:var(--rpt-border-radius-sm, 4px);padding:3px 8px;font-size:.75rem;font-weight:500;color:#0f172a;background:#fff;outline:none;cursor:pointer;transition:border-color var(--rpt-transition-speed, .15s) ease}.rpt-preset-select:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px var(--rpt-color-primary-focus, rgba(37, 99, 235, .25))}.rpt-btn-save-view{display:inline-flex;align-items:center;gap:4px;background:var(--rpt-color-primary-light, #eff6ff);border:1px solid #bfdbfe;color:var(--rpt-color-primary, #2563eb);font-size:.725rem;font-weight:600;padding:3px 8px;border-radius:var(--rpt-border-radius-sm, 4px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.rpt-btn-save-view:hover{background:#dbeafe;border-color:#93c5fd}.rpt-export-btn{display:inline-flex;align-items:center;gap:5px;border-radius:var(--rpt-border-radius, 6px);padding:5px 12px;font-size:.75rem;font-weight:600;cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.rpt-export-btn:disabled{opacity:.45;cursor:not-allowed}.rpt-export-excel{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d}.rpt-export-excel:hover:not(:disabled){background:#dcfce7;border-color:#86efac}.rpt-export-csv{background:#f8fafc;border:1px solid #cbd5e1;color:#334155}.rpt-export-csv:hover:not(:disabled){background:#f1f5f9;border-color:#94a3b8;color:#0f172a}.rpt-export-print{background:#eef2ff;border:1px solid #c7d2fe;color:#4338ca}.rpt-export-print:hover:not(:disabled){background:#e0e7ff;border-color:#a5b4fc}.rpt-modal-backdrop{position:fixed;inset:0;background:#0f172a73;backdrop-filter:blur(6px);z-index:1100}.rpt-modal-dialog{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(460px,92vw);background:#fff;border:1px solid #cbd5e1;border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 20px 25px -5px #00000026,0 8px 10px -6px #0000001a;z-index:1101;display:flex;flex-direction:column;overflow:hidden;animation:rpt-modal-pop .16s cubic-bezier(.16,1,.3,1)}@keyframes rpt-modal-pop{0%{opacity:0;transform:translate(-50%,-46%) scale(.97)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}.rpt-modal-header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #e2e8f0;background:#f8fafc}.rpt-modal-header-title{display:inline-flex;align-items:center;gap:8px;color:var(--rpt-color-primary, #2563eb)}.rpt-modal-title{font-size:.95rem;font-weight:700;color:#0f172a;margin:0}.rpt-modal-close{background:transparent;border:none;color:#64748b;font-size:1.1rem;cursor:pointer;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .12s ease}.rpt-modal-close:hover{background:#e2e8f0;color:#0f172a}.rpt-modal-body{padding:18px}.rpt-modal-hint{font-size:.8rem;color:#64748b;margin:0 0 16px;line-height:1.45}.rpt-input-group{margin-bottom:16px}.rpt-field-label{display:block;font-size:.75rem;font-weight:600;color:#334155;margin-bottom:6px}.rpt-modal-input{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:var(--rpt-border-radius, 6px);padding:8px 12px;font-size:.85rem;outline:none;transition:all var(--rpt-transition-speed, .15s) ease}.rpt-modal-input:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 3px var(--rpt-color-primary-focus, rgba(37, 99, 235, .25))}.rpt-existing-presets{border-top:1px solid #e2e8f0;padding-top:12px;margin-top:8px}.rpt-existing-label{display:block;font-size:.725rem;font-weight:600;color:#64748b;margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}.rpt-presets-list{max-height:140px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}.rpt-preset-row{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:4px}.rpt-preset-info{display:inline-flex;align-items:center;gap:8px}.rpt-preset-row-name{font-size:.775rem;font-weight:600;color:#1e293b}.rpt-preset-active-tag{font-size:.65rem;font-weight:600;background:#dbeafe;color:#1d4ed8;padding:1px 6px;border-radius:9999px}.rpt-btn-del-preset{background:transparent;border:none;color:#94a3b8;cursor:pointer;padding:4px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:all .12s ease}.rpt-btn-del-preset:hover{background:#fee2e2;color:#dc2626}.rpt-modal-footer{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:12px 18px;border-top:1px solid #e2e8f0;background:#f8fafc}.rpt-btn-cancel{background:#fff;border:1px solid #cbd5e1;border-radius:var(--rpt-border-radius, 6px);padding:6px 14px;font-size:.775rem;font-weight:500;color:#475569;cursor:pointer;transition:all .12s ease}.rpt-btn-cancel:hover{background:#f1f5f9;color:#0f172a}.rpt-btn-confirm{background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);padding:6px 16px;font-size:.775rem;font-weight:600;cursor:pointer;transition:all .12s ease}.rpt-btn-confirm:hover:not(:disabled){background:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-btn-confirm:disabled{opacity:.5;cursor:not-allowed}\n"] }]
544
552
  }] });
545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL3JwdC1yZXBvcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7OztBQXdpQm5HLE1BQU0sT0FBTyxrQkFBa0I7SUFDWixhQUFhLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDNUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTNFLEVBQUUsR0FBRyxLQUFLLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxLQUFLLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQzlDLFVBQVUsR0FBRyxLQUFLLENBQTBCLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELFVBQVUsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDbEMsYUFBYSxHQUFHLEtBQUssQ0FB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QUFFLFdBQVcsMGdDQUFFLHNCQUFzQixzV0FBRSxnQkFBZ0I7OzRGQTJoQmxFLGtCQUFrQjtrQkE5aEI5QixTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDLFlBQ3BFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEtULG1CQTRXZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBHcmlkUm93Q2xpY2tBY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vZXhwb3J0L3NlcnZpY2VzL3JlcG9ydC1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRSdW50aW1lQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtcnVudGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRWaWV3UHJlc2V0IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBncmlkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmb3JtVmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXJlcG9ydCwgcnB0LXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVwb3J0UnVudGltZUNvbXBvbmVudCwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1mYWNhZGUtY29udGFpbmVyXCI+XG4gICAgICA8IS0tIFRvcCBBY3Rpb24gJiBQcmVzZXQgQmFyIC0tPlxuICAgICAgQGlmIChzaG93VG9vbGJhcigpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZmFjYWRlLXRvb2xiYXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRvb2xiYXItbGVmdFwiPlxuICAgICAgICAgICAgQGlmIChhY3RpdmVEZWZpbml0aW9uKCk/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1yZXBvcnQtdGl0bGUtYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC10aXRsZS1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtdGl0bGUtdGV4dFwiPnt7IGFjdGl2ZURlZmluaXRpb24oKT8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAocmVjb3JkQ291bnQoKSA+IDApIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtcmVjb3JkLWNvdW50LWNoaXBcIiB0aXRsZT1cIkN1cnJlbnQgZGF0YXNldCBzaXplXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtY2hpcC1kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtdGFidWxhci1udW1zXCI+e3sgcmVjb3JkQ291bnQoKSB9fSByb3dzPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gU2F2ZWQgVmlld3MgLyBQcmVzZXQgU3dpdGNoZXIgLS0+XG4gICAgICAgICAgICBAaWYgKGVuYWJsZVByZXNldHMoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXByZXNldC1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicnB0LXByZXNldC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJib29rbWFya1wiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlZpZXc6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcHJlc2V0LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhY3RpdmVQcmVzZXRJZCgpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0UHJlc2V0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjdCByZXBvcnQgdmlldyBwcmVzZXRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkZWZhdWx0XCI+RGVmYXVsdCBWaWV3PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICBAZm9yIChwcmVzZXQgb2Ygc2F2ZWRQcmVzZXRzKCk7IHRyYWNrIHByZXNldC5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJwcmVzZXQuaWRcIj57eyBwcmVzZXQubmFtZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuLXNhdmUtdmlld1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNhdmVQcmVzZXRNb2RhbCgpXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU2F2ZSBjdXJyZW50IGdyaWQgdmlldyBvciBtYW5hZ2UgcHJlc2V0c1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJwbHVzXCIgW3NpemVdPVwiMTFcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+U2F2ZSBWaWV3PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRXhwb3J0IEFjdGlvbnMgLS0+XG4gICAgICAgICAgQGlmIChzaG93RXhwb3J0KCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdG9vbGJhci1yaWdodFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtZXhwb3J0LWJ0biBycHQtZXhwb3J0LWV4Y2VsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeHBvcnRFeGNlbCgpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXJlY29yZENvdW50KClcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiRXhwb3J0IHJlc3VsdCB0YWJsZSB0byBFeGNlbCBzcHJlYWRzaGVldCAoLnhscylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJmaWxlLXRleHRcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+RXhjZWw8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtZXhwb3J0LWJ0biBycHQtZXhwb3J0LWNzdlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwb3J0Q3N2KClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVjb3JkQ291bnQoKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJFeHBvcnQgcmVzdWx0IHRhYmxlIHRvIENTViBmaWxlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZG93bmxvYWRcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+Q1NWPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWV4cG9ydC1idG4gcnB0LWV4cG9ydC1wcmludFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUHJpbnRSZXBvcnQoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyZWNvcmRDb3VudCgpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlByaW50IHJlcG9ydCB3aXRoIGJyYW5kZWQgbGF5b3V0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicHJpbnRlclwiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj5QcmludDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIENvcmUgUnVudGltZSBFbmdpbmUgLS0+XG4gICAgICA8cnB0LXJlcG9ydC1ydW50aW1lXG4gICAgICAgICNydW50aW1lUmVmXG4gICAgICAgIFtyZXBvcnRJZF09XCJpZCgpXCJcbiAgICAgICAgW3JlcG9ydF09XCJjdXJyZW50RGVmaW5pdGlvbigpXCJcbiAgICAgICAgKHJvd0FjdGlvblRyaWdnZXJlZCk9XCJvblJvd0FjdGlvblRyaWdnZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgKGdyaWRTdGF0ZUNoYW5nZSk9XCJvbkdyaWRTdGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChleHBvcnRSZXF1ZXN0ZWQpPVwiZXhwb3J0UmVxdWVzdGVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChwcmludFJlcXVlc3RlZCk9XCJwcmludFJlcXVlc3RlZC5lbWl0KCRldmVudClcIlxuICAgICAgLz5cblxuICAgICAgPCEtLSBTYXZlIFZpZXcgUHJlc2V0IE1vZGFsIC0tPlxuICAgICAgQGlmIChpc1NhdmVQcmVzZXRNb2RhbE9wZW4oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LW1vZGFsLWJhY2tkcm9wXCIgKGNsaWNrKT1cImNsb3NlU2F2ZVByZXNldE1vZGFsKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1tb2RhbC1kaWFsb2dcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsPVwiU2F2ZSBWaWV3IFByZXNldFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LW1vZGFsLWhlYWRlci10aXRsZVwiPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImJvb2ttYXJrXCIgW3NpemVdPVwiMTZcIiAvPlxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJycHQtbW9kYWwtdGl0bGVcIj5DdXN0b20gVmlldyBQcmVzZXRzPC9oND5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJycHQtbW9kYWwtY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VTYXZlUHJlc2V0TW9kYWwoKVwiIGFyaWEtbGFiZWw9XCJDbG9zZSBtb2RhbFwiPuKclTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJycHQtbW9kYWwtaGludFwiPlxuICAgICAgICAgICAgICBTYXZlIHlvdXIgYWN0aXZlIGNvbHVtbiBvcmRlcmluZywgd2lkdGhzLCBzb3J0aW5ncywgYW5kIGZpbHRlcnMgaW50byBhIHJldXNhYmxlIHZpZXcgcHJlc2V0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJwdC1maWVsZC1sYWJlbFwiPk5ldyBWaWV3IE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtbW9kYWwtaW5wdXRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBIaWdoIFZhbHVlIFRyYW5zYWN0aW9ucyAtIFEzXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJuZXdQcmVzZXROYW1lKClcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm5ld1ByZXNldE5hbWUuc2V0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVDdXJyZW50UHJlc2V0KClcIlxuICAgICAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRXhpc3RpbmcgUHJlc2V0cyBNYW5hZ2VtZW50IExpc3QgLS0+XG4gICAgICAgICAgICBAaWYgKHNhdmVkUHJlc2V0cygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1leGlzdGluZy1wcmVzZXRzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtZXhpc3RpbmctbGFiZWxcIj5TYXZlZCBWaWV3cyBpbiB0aGlzIHJlcG9ydDo8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1wcmVzZXRzLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHByZXNldCBvZiBzYXZlZFByZXNldHMoKTsgdHJhY2sgcHJlc2V0LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcHJlc2V0LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcHJlc2V0LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXByZXNldC1yb3ctbmFtZVwiPnt7IHByZXNldC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcmVzZXQuaWQgPT09IGFjdGl2ZVByZXNldElkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtcHJlc2V0LWFjdGl2ZS10YWdcIj5BY3RpdmU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1idG4tZGVsLXByZXNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUHJlc2V0KHByZXNldC5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEZWxldGUgdmlldyBwcmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbGV0ZSB2aWV3IHByZXNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJ0cmFzaFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInJwdC1idG4tY2FuY2VsXCIgKGNsaWNrKT1cImNsb3NlU2F2ZVByZXNldE1vZGFsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0bi1jb25maXJtXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFuZXdQcmVzZXROYW1lKCkudHJpbSgpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVDdXJyZW50UHJlc2V0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTYXZlIFZpZXdcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZmFjYWRlLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgLnJwdC1mYWNhZGUtdG9vbGJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LXhzLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA0KSk7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNHB4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cbiAgICAucnB0LXRvb2xiYXItbGVmdCwgLnJwdC10b29sYmFyLXJpZ2h0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiAxMHB4O1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cbiAgICAucnB0LXJlcG9ydC10aXRsZS1iYWRnZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6ICMwZjE3MmE7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XG4gICAgfVxuICAgIC5ycHQtdGl0bGUtZG90IHtcbiAgICAgIHdpZHRoOiA4cHg7XG4gICAgICBoZWlnaHQ6IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLnJwdC1yZWNvcmQtY291bnQtY2hpcCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgICBjb2xvcjogIzQ3NTU2OTtcbiAgICAgIGZvbnQtc2l6ZTogMC43MjVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZzogM3B4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWZ1bGwsIDk5OTlweCk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIH1cbiAgICAucnB0LWNoaXAtZG90IHtcbiAgICAgIHdpZHRoOiA2cHg7XG4gICAgICBoZWlnaHQ6IDZweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGJhY2tncm91bmQ6ICMxMGI5ODE7XG4gICAgfVxuICAgIC5ycHQtcHJlc2V0LWNvbnRyb2wge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDZweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBwYWRkaW5nOiAzcHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIH1cbiAgICAucnB0LXByZXNldC1sYWJlbCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43MjVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgfVxuICAgIC5ycHQtcHJlc2V0LXNlbGVjdCB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCk7XG4gICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LXByZXNldC1zZWxlY3Q6Zm9jdXMge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktZm9jdXMsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpKTtcbiAgICB9XG4gICAgLnJwdC1idG4tc2F2ZS12aWV3IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNHB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JmZGJmZTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXNpemU6IDAuNzI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHBhZGRpbmc6IDNweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1zbSwgNHB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNhdmUtdmlldzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZGJlYWZlO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjOTNjNWZkO1xuICAgIH1cbiAgICAucnB0LWV4cG9ydC1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA1cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIHBhZGRpbmc6IDVweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtZXhwb3J0LWJ0bjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjQ1O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gICAgLnJwdC1leHBvcnQtZXhjZWwge1xuICAgICAgYmFja2dyb3VuZDogI2YwZmRmNDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmY3ZDA7XG4gICAgICBjb2xvcjogIzE1ODAzZDtcbiAgICB9XG4gICAgLnJwdC1leHBvcnQtZXhjZWw6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogI2RjZmNlNztcbiAgICAgIGJvcmRlci1jb2xvcjogIzg2ZWZhYztcbiAgICB9XG4gICAgLnJwdC1leHBvcnQtY3N2IHtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgY29sb3I6ICMzMzQxNTU7XG4gICAgfVxuICAgIC5ycHQtZXhwb3J0LWNzdjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjOTRhM2I4O1xuICAgICAgY29sb3I6ICMwZjE3MmE7XG4gICAgfVxuICAgIC5ycHQtZXhwb3J0LXByaW50IHtcbiAgICAgIGJhY2tncm91bmQ6ICNlZWYyZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzdkMmZlO1xuICAgICAgY29sb3I6ICM0MzM4Y2E7XG4gICAgfVxuICAgIC5ycHQtZXhwb3J0LXByaW50OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlMGU3ZmY7XG4gICAgICBib3JkZXItY29sb3I6ICNhNWI0ZmM7XG4gICAgfVxuICAgIC8qIE1vZGFsICovXG4gICAgLnJwdC1tb2RhbC1iYWNrZHJvcCB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICBpbnNldDogMDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC40NSk7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTtcbiAgICAgIHotaW5kZXg6IDExMDA7XG4gICAgfVxuICAgIC5ycHQtbW9kYWwtZGlhbG9nIHtcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB3aWR0aDogbWluKDQ2MHB4LCA5MnZ3KTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDIwcHggMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgOHB4IDEwcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMTAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYW5pbWF0aW9uOiBycHQtbW9kYWwtcG9wIDE2MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgIH1cbiAgICBAa2V5ZnJhbWVzIHJwdC1tb2RhbC1wb3Age1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC00NiUpIHNjYWxlKDAuOTcpOyB9XG4gICAgICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDEpOyB9XG4gICAgfVxuICAgIC5ycHQtbW9kYWwtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgcGFkZGluZzogMTRweCAxOHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgIH1cbiAgICAucnB0LW1vZGFsLWhlYWRlci10aXRsZSB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtbW9kYWwtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAucnB0LW1vZGFsLWNsb3NlIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICBmb250LXNpemU6IDEuMXJlbTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHdpZHRoOiAyOHB4O1xuICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxMjBtcyBlYXNlO1xuICAgIH1cbiAgICAucnB0LW1vZGFsLWNsb3NlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNlMmU4ZjA7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICB9XG4gICAgLnJwdC1tb2RhbC1ib2R5IHtcbiAgICAgIHBhZGRpbmc6IDE4cHg7XG4gICAgfVxuICAgIC5ycHQtbW9kYWwtaGludCB7XG4gICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgICAgbWFyZ2luOiAwIDAgMTZweCAwO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNDU7XG4gICAgfVxuICAgIC5ycHQtaW5wdXQtZ3JvdXAge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICB9XG4gICAgLnJwdC1maWVsZC1sYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogIzMzNDE1NTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDZweDtcbiAgICB9XG4gICAgLnJwdC1tb2RhbC1pbnB1dCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LW1vZGFsLWlucHV0OmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWZvY3VzLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KSk7XG4gICAgfVxuICAgIC5ycHQtZXhpc3RpbmctcHJlc2V0cyB7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2UyZThmMDtcbiAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIH1cbiAgICAucnB0LWV4aXN0aW5nLWxhYmVsIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgZm9udC1zaXplOiAwLjcyNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7XG4gICAgfVxuICAgIC5ycHQtcHJlc2V0cy1saXN0IHtcbiAgICAgIG1heC1oZWlnaHQ6IDE0MHB4O1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgfVxuICAgIC5ycHQtcHJlc2V0LXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgfVxuICAgIC5ycHQtcHJlc2V0LWluZm8ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuICAgIC5ycHQtcHJlc2V0LXJvdy1uYW1lIHtcbiAgICAgIGZvbnQtc2l6ZTogMC43NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuICAgIC5ycHQtcHJlc2V0LWFjdGl2ZS10YWcge1xuICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGJhY2tncm91bmQ6ICNkYmVhZmU7XG4gICAgICBjb2xvcjogIzFkNGVkODtcbiAgICAgIHBhZGRpbmc6IDFweCA2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgfVxuICAgIC5ycHQtYnRuLWRlbC1wcmVzZXQge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHBhZGRpbmc6IDRweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1idG4tZGVsLXByZXNldDpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmVlMmUyO1xuICAgICAgY29sb3I6ICNkYzI2MjY7XG4gICAgfVxuICAgIC5ycHQtbW9kYWwtZm9vdGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgIGdhcDogMTBweDtcbiAgICAgIHBhZGRpbmc6IDEycHggMThweDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICB9XG4gICAgLnJwdC1idG4tY2FuY2VsIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBwYWRkaW5nOiA2cHggMTRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1idG4tY2FuY2VsOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICB9XG4gICAgLnJwdC1idG4tY29uZmlybSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgcGFkZGluZzogNnB4IDE2cHg7XG4gICAgICBmb250LXNpemU6IDAuNzc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxMjBtcyBlYXNlO1xuICAgIH1cbiAgICAucnB0LWJ0bi1jb25maXJtOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gICAgLnJwdC1idG4tY29uZmlybTpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBScHRSZXBvcnRDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cG9ydFNlcnZpY2UgPSBpbmplY3QoUmVwb3J0RXhwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVyc2lzdGVuY2UgPSBpbmplY3QoUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGlkID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSByZXBvcnQgPSBpbnB1dDxSZXBvcnREZWZpbml0aW9uIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHBhcmFtZXRlcnMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuICByZWFkb25seSBzaG93RXhwb3J0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGVuYWJsZVByZXNldHMgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgYXV0b0V4ZWN1dGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDx7XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBhY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG4gIH0+KCk7XG4gIHJlYWRvbmx5IGRhdGFMb2FkZWQgPSBvdXRwdXQ8dW5rbm93bltdPigpO1xuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZWQgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHByZXNldFNhdmVkID0gb3V0cHV0PHsgbmFtZTogc3RyaW5nOyBwcmVzZXQ6IFJlcG9ydFZpZXdQcmVzZXQgfT4oKTtcbiAgcmVhZG9ubHkgcHJlc2V0Q2hhbmdlID0gb3V0cHV0PFJlcG9ydFZpZXdQcmVzZXQgfCBudWxsPigpO1xuICByZWFkb25seSBleHBvcnRSZXF1ZXN0ZWQgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBwcmludFJlcXVlc3RlZCA9IG91dHB1dDxhbnk+KCk7XG5cbiAgcmVhZG9ubHkgcnVudGltZUNvbXBvbmVudCA9IHZpZXdDaGlsZChSZXBvcnRSdW50aW1lQ29tcG9uZW50KTtcblxuICAvLyBQcmVzZXQgc3RhdGVzXG4gIHJlYWRvbmx5IGFjdGl2ZVByZXNldElkID0gc2lnbmFsPHN0cmluZz4oJ2RlZmF1bHQnKTtcbiAgcmVhZG9ubHkgaXNTYXZlUHJlc2V0TW9kYWxPcGVuID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbmV3UHJlc2V0TmFtZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgbGF0ZXN0R3JpZFN0YXRlID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGN1c3RvbVByZXNldHMgPSBzaWduYWw8UmVwb3J0Vmlld1ByZXNldFtdPihbXSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERlZmluaXRpb24gPSBjb21wdXRlZDxSZXBvcnREZWZpbml0aW9uIHwgbnVsbD4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydCgpO1xuICB9KTtcblxuICByZWFkb25seSBhY3RpdmVEZWZpbml0aW9uID0gY29tcHV0ZWQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGw+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnQoKSA/PyB0aGlzLnJ1bnRpbWVDb21wb25lbnQoKT8uY3VycmVudERlZmluaXRpb24oKSA/PyBudWxsO1xuICB9KTtcblxuICByZWFkb25seSByZWNvcmRDb3VudCA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVDb21wb25lbnQoKT8ucmVzdWx0RGF0YSgpPy5sZW5ndGggPz8gMDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2hvd1Rvb2xiYXIgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0V4cG9ydCgpIHx8IHRoaXMuZW5hYmxlUHJlc2V0cygpO1xuICB9KTtcblxuICByZWFkb25seSBzYXZlZFByZXNldHMgPSBjb21wdXRlZDxSZXBvcnRWaWV3UHJlc2V0W10+KCgpID0+IHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBjb25zdCBpbml0aWFsUHJlc2V0cyA9ICgoZGVmPy5ncmlkPy5vcHRpb25zIGFzIGFueSk/LnByZXNldHMgYXMgUmVwb3J0Vmlld1ByZXNldFtdKSA/PyBbXTtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgUmVwb3J0Vmlld1ByZXNldD4oKTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgaW5pdGlhbFByZXNldHMpIHtcbiAgICAgIGlmIChwICYmIHAuaWQpIG1hcC5zZXQocC5pZCwgcCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLmN1c3RvbVByZXNldHMoKSkge1xuICAgICAgaWYgKHAgJiYgcC5pZCkgbWFwLnNldChwLmlkLCBwKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20obWFwLnZhbHVlcygpKTtcbiAgfSk7XG5cbiAgb25Sb3dBY3Rpb25UcmlnZ2VyZWQoZXZlbnQ6IHtcbiAgICBhY3Rpb246IEdyaWRSb3dDbGlja0FjdGlvbjtcbiAgICByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHtcbiAgICAgIHJvdzogZXZlbnQucm93LFxuICAgICAgcGFyYW1ldGVyczogZXZlbnQucGFyYW1ldGVycyxcbiAgICAgIGFjdGlvbjogZXZlbnQuYWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgb25HcmlkU3RhdGVDaGFuZ2VkKHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmxhdGVzdEdyaWRTdGF0ZS5zZXQoc3RhdGUpO1xuICAgIHRoaXMuZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoc3RhdGUpO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2Uocm93czogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHJvd3MpO1xuICB9XG5cbiAgb25TZWxlY3RQcmVzZXQocHJlc2V0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlUHJlc2V0SWQuc2V0KHByZXNldElkKTtcbiAgICBpZiAocHJlc2V0SWQgPT09ICdkZWZhdWx0Jykge1xuICAgICAgdGhpcy5wcmVzZXRDaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVzZXQgPSB0aGlzLnNhdmVkUHJlc2V0cygpLmZpbmQoKHApID0+IHAuaWQgPT09IHByZXNldElkKTtcbiAgICBpZiAocHJlc2V0KSB7XG4gICAgICBpZiAocHJlc2V0LmdyaWRTdGF0ZSkge1xuICAgICAgICB0aGlzLmxhdGVzdEdyaWRTdGF0ZS5zZXQocHJlc2V0LmdyaWRTdGF0ZSk7XG4gICAgICAgIHRoaXMuZ3JpZFN0YXRlQ2hhbmdlLmVtaXQocHJlc2V0LmdyaWRTdGF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnByZXNldENoYW5nZS5lbWl0KHByZXNldCk7XG4gICAgfVxuICB9XG5cbiAgY29uZmlybVNhdmVQcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlQ3VycmVudFByZXNldCgpO1xuICB9XG5cbiAgZXhwb3J0RXhjZWwoKTogdm9pZCB7XG4gICAgdGhpcy5vbkV4cG9ydEV4Y2VsKCk7XG4gIH1cblxuICBleHBvcnRDc3YoKTogdm9pZCB7XG4gICAgdGhpcy5vbkV4cG9ydENzdigpO1xuICB9XG5cbiAgcHJpbnQoKTogdm9pZCB7XG4gICAgdGhpcy5vblByaW50UmVwb3J0KCk7XG4gIH1cblxuICBvcGVuU2F2ZVByZXNldE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubmV3UHJlc2V0TmFtZS5zZXQoJycpO1xuICAgIHRoaXMuaXNTYXZlUHJlc2V0TW9kYWxPcGVuLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlU2F2ZVByZXNldE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTYXZlUHJlc2V0TW9kYWxPcGVuLnNldChmYWxzZSk7XG4gIH1cblxuICBzYXZlQ3VycmVudFByZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uZXdQcmVzZXROYW1lKCkudHJpbSgpO1xuICAgIGlmICghbmFtZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJlc2V0SWQgPSBgcHJlc2V0XyR7RGF0ZS5ub3coKX1gO1xuICAgIGNvbnN0IG5ld1ByZXNldDogUmVwb3J0Vmlld1ByZXNldCA9IHtcbiAgICAgIGlkOiBwcmVzZXRJZCxcbiAgICAgIG5hbWUsXG4gICAgICBncmlkU3RhdGU6IHRoaXMubGF0ZXN0R3JpZFN0YXRlKCkgPz8ge30sXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmID0gdGhpcy5hY3RpdmVEZWZpbml0aW9uKCk7XG4gICAgaWYgKGRlZiAmJiBkZWYuZ3JpZCkge1xuICAgICAgaWYgKCFkZWYuZ3JpZC5vcHRpb25zKSBkZWYuZ3JpZC5vcHRpb25zID0ge307XG4gICAgICBjb25zdCBjdXJyZW50UHJlc2V0czogUmVwb3J0Vmlld1ByZXNldFtdID0gKGRlZi5ncmlkLm9wdGlvbnMgYXMgYW55KS5wcmVzZXRzID8/IFtdO1xuICAgICAgKGRlZi5ncmlkLm9wdGlvbnMgYXMgYW55KS5wcmVzZXRzID0gWy4uLmN1cnJlbnRQcmVzZXRzLCBuZXdQcmVzZXRdO1xuXG4gICAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZSAmJiBkZWYuaWQpIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZS5zYXZlKGRlZikuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7fSxcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge30sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VzdG9tUHJlc2V0cy51cGRhdGUoKHByZXYpID0+IFsuLi5wcmV2LCBuZXdQcmVzZXRdKTtcbiAgICB0aGlzLmFjdGl2ZVByZXNldElkLnNldChwcmVzZXRJZCk7XG4gICAgdGhpcy5wcmVzZXRTYXZlZC5lbWl0KHsgbmFtZSwgcHJlc2V0OiBuZXdQcmVzZXQgfSk7XG4gICAgdGhpcy5jbG9zZVNhdmVQcmVzZXRNb2RhbCgpO1xuICB9XG5cbiAgZGVsZXRlUHJlc2V0KHByZXNldElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocHJlc2V0SWQgPT09ICdkZWZhdWx0JykgcmV0dXJuO1xuXG4gICAgdGhpcy5jdXN0b21QcmVzZXRzLnVwZGF0ZSgocHJldikgPT4gcHJldi5maWx0ZXIoKHApID0+IHAuaWQgIT09IHByZXNldElkKSk7XG5cbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBpZiAoZGVmICYmIGRlZi5ncmlkICYmIGRlZi5ncmlkLm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSAoKGRlZi5ncmlkLm9wdGlvbnMgYXMgYW55KS5wcmVzZXRzIGFzIFJlcG9ydFZpZXdQcmVzZXRbXSkgPz8gW107XG4gICAgICAoZGVmLmdyaWQub3B0aW9ucyBhcyBhbnkpLnByZXNldHMgPSBjdXJyZW50LmZpbHRlcigocCkgPT4gcC5pZCAhPT0gcHJlc2V0SWQpO1xuXG4gICAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZSAmJiBkZWYuaWQpIHtcbiAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZS5zYXZlKGRlZikuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7fSxcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge30sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2ZVByZXNldElkKCkgPT09IHByZXNldElkKSB7XG4gICAgICB0aGlzLm9uU2VsZWN0UHJlc2V0KCdkZWZhdWx0Jyk7XG4gICAgfVxuICB9XG5cbiAgb25FeHBvcnRFeGNlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LnJlc3VsdERhdGEoKTtcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBjb25zdCBjb2xzID0gZGVmPy5ncmlkPy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgZmllbGQ6IGMuZmllbGQsIGhlYWRlcjogYy5sYWJlbCB9KSk7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydEV4Y2VsKGRhdGEgYXMgYW55LCB7XG4gICAgICBmaWxlTmFtZTogZGVmPy5uYW1lID8gYCR7ZGVmLm5hbWV9Lnhsc2AgOiAncmVwb3J0LnhscycsXG4gICAgICBjb2x1bW5zOiBjb2xzLFxuICAgICAgYnJhbmRlZEhlYWRlcjogeyByZXBvcnRUaXRsZTogZGVmPy5uYW1lIH0sXG4gICAgfSk7XG4gIH1cblxuICBvbkV4cG9ydENzdigpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LnJlc3VsdERhdGEoKTtcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBjb25zdCBjb2xzID0gZGVmPy5ncmlkPy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgZmllbGQ6IGMuZmllbGQsIGhlYWRlcjogYy5sYWJlbCB9KSk7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydENzdihkYXRhIGFzIGFueSwge1xuICAgICAgZmlsZU5hbWU6IGRlZj8ubmFtZSA/IGAke2RlZi5uYW1lfS5jc3ZgIDogJ3JlcG9ydC5jc3YnLFxuICAgICAgY29sdW1uczogY29scyxcbiAgICAgIGJyYW5kZWRIZWFkZXI6IHsgcmVwb3J0VGl0bGU6IGRlZj8ubmFtZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25QcmludFJlcG9ydCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LnJlc3VsdERhdGEoKTtcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBjb25zdCBjb2xzID0gZGVmPy5ncmlkPy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgZmllbGQ6IGMuZmllbGQsIGhlYWRlcjogYy5sYWJlbCB9KSk7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLnByaW50UmVwb3J0KGRhdGEgYXMgYW55LCB7XG4gICAgICB0aXRsZTogZGVmPy5uYW1lIHx8ICdSZXBvcnQgUHJpbnQgUHJldmlldycsXG4gICAgICBjb2x1bW5zOiBjb2xzLFxuICAgICAgYnJhbmRlZEhlYWRlcjogeyByZXBvcnRUaXRsZTogZGVmPy5uYW1lIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
553
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL3JwdC1yZXBvcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7OztBQTBpQm5HLE1BQU0sT0FBTyxrQkFBa0I7SUFDWixRQUFRLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQzVDLFdBQVcsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQzFDLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsbUJBQW1CLEdBQUcsTUFBTSxDQUFnRixJQUFJLENBQUMsQ0FBQztJQUNsSCxhQUFhLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDNUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJ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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThLVCxzK01BL0tTLFlBQVksOEJBQUUsV0FBVywwZ0NBQUUsc0JBQXNCLHNXQUFFLGdCQUFnQjs7NEZBNmhCbEUsa0JBQWtCO2tCQWhpQjlCLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsWUFDcEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThLVCxtQkE0V2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvcnRSZXF1ZXN0U2NvcGUgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1yZXF1ZXN0LXNjb3BlJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBHcmlkUm93Q2xpY2tBY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vZXhwb3J0L3NlcnZpY2VzL3JlcG9ydC1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRSdW50aW1lQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtcnVudGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRWaWV3UHJlc2V0IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBncmlkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmb3JtVmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXJlcG9ydCwgcnB0LXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVwb3J0UnVudGltZUNvbXBvbmVudCwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1mYWNhZGUtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKHByZXNldEVycm9yKCkpIHsgPHAgcm9sZT1cImFsZXJ0XCI+e3sgcHJlc2V0RXJyb3IoKSB9fTwvcD4gfVxuICAgICAgQGlmIChpc1NhdmluZ1ByZXNldCgpKSB7IDxwIHJvbGU9XCJzdGF0dXNcIj5TYXZpbmcgdmlldy4uLjwvcD4gfVxuICAgICAgPCEtLSBUb3AgQWN0aW9uICYgUHJlc2V0IEJhciAtLT5cbiAgICAgIEBpZiAoc2hvd1Rvb2xiYXIoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWZhY2FkZS10b29sYmFyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC10b29sYmFyLWxlZnRcIj5cbiAgICAgICAgICAgIEBpZiAoYWN0aXZlRGVmaW5pdGlvbigpPy5uYW1lKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcmVwb3J0LXRpdGxlLWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtdGl0bGUtZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXRpdGxlLXRleHRcIj57eyBhY3RpdmVEZWZpbml0aW9uKCk/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKHJlY29yZENvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJlY29yZC1jb3VudC1jaGlwXCIgdGl0bGU9XCJDdXJyZW50IGRhdGFzZXQgc2l6ZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWNoaXAtZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXRhYnVsYXItbnVtc1wiPnt7IHJlY29yZENvdW50KCkgfX0gcm93czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIFNhdmVkIFZpZXdzIC8gUHJlc2V0IFN3aXRjaGVyIC0tPlxuICAgICAgICAgICAgQGlmIChlbmFibGVQcmVzZXRzKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1wcmVzZXQtY29udHJvbFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJwdC1wcmVzZXQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYm9va21hcmtcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5WaWV3Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXByZXNldC1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiYWN0aXZlUHJlc2V0SWQoKVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlbGVjdFByZXNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgcmVwb3J0IHZpZXcgcHJlc2V0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZGVmYXVsdFwiPkRlZmF1bHQgVmlldzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgQGZvciAocHJlc2V0IG9mIHNhdmVkUHJlc2V0cygpOyB0cmFjayBwcmVzZXQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwicHJlc2V0LmlkXCI+e3sgcHJlc2V0Lm5hbWUgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0bi1zYXZlLXZpZXdcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TYXZlUHJlc2V0TW9kYWwoKVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlNhdmUgY3VycmVudCBncmlkIHZpZXcgb3IgbWFuYWdlIHByZXNldHNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicGx1c1wiIFtzaXplXT1cIjExXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlNhdmUgVmlldzwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEV4cG9ydCBBY3Rpb25zIC0tPlxuICAgICAgICAgIEBpZiAoc2hvd0V4cG9ydCgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRvb2xiYXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWV4cG9ydC1idG4gcnB0LWV4cG9ydC1leGNlbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwb3J0RXhjZWwoKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyZWNvcmRDb3VudCgpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkV4cG9ydCByZXN1bHQgdGFibGUgdG8gRXhjZWwgc3ByZWFkc2hlZXQgKC54bHMpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZmlsZS10ZXh0XCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuPkV4Y2VsPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWV4cG9ydC1idG4gcnB0LWV4cG9ydC1jc3ZcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4cG9ydENzdigpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXJlY29yZENvdW50KClcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiRXhwb3J0IHJlc3VsdCB0YWJsZSB0byBDU1YgZmlsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImRvd25sb2FkXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuPkNTVjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1leHBvcnQtYnRuIHJwdC1leHBvcnQtcHJpbnRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblByaW50UmVwb3J0KClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcmVjb3JkQ291bnQoKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJQcmludCByZXBvcnQgd2l0aCBicmFuZGVkIGxheW91dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInByaW50ZXJcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+UHJpbnQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBDb3JlIFJ1bnRpbWUgRW5naW5lIC0tPlxuICAgICAgPHJwdC1yZXBvcnQtcnVudGltZVxuICAgICAgICAjcnVudGltZVJlZlxuICAgICAgICBbcmVwb3J0SWRdPVwiaWQoKVwiXG4gICAgICAgIFtyZXBvcnRdPVwiY3VycmVudERlZmluaXRpb24oKVwiXG4gICAgICAgIChyb3dBY3Rpb25UcmlnZ2VyZWQpPVwib25Sb3dBY3Rpb25UcmlnZ2VyZWQoJGV2ZW50KVwiXG4gICAgICAgIChncmlkU3RhdGVDaGFuZ2UpPVwib25HcmlkU3RhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoZXhwb3J0UmVxdWVzdGVkKT1cImV4cG9ydFJlcXVlc3RlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAocHJpbnRSZXF1ZXN0ZWQpPVwicHJpbnRSZXF1ZXN0ZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIC8+XG5cbiAgICAgIDwhLS0gU2F2ZSBWaWV3IFByZXNldCBNb2RhbCAtLT5cbiAgICAgIEBpZiAoaXNTYXZlUHJlc2V0TW9kYWxPcGVuKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1tb2RhbC1iYWNrZHJvcFwiIChjbGljayk9XCJjbG9zZVNhdmVQcmVzZXRNb2RhbCgpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbW9kYWwtZGlhbG9nXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIlNhdmUgVmlldyBQcmVzZXRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LW1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1tb2RhbC1oZWFkZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJib29rbWFya1wiIFtzaXplXT1cIjE2XCIgLz5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzPVwicnB0LW1vZGFsLXRpdGxlXCI+Q3VzdG9tIFZpZXcgUHJlc2V0czwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicnB0LW1vZGFsLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlU2F2ZVByZXNldE1vZGFsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2UgbW9kYWxcIj7inJU8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwicnB0LW1vZGFsLWhpbnRcIj5cbiAgICAgICAgICAgICAgU2F2ZSB5b3VyIGFjdGl2ZSBjb2x1bW4gb3JkZXJpbmcsIHdpZHRocywgc29ydGluZ3MsIGFuZCBmaWx0ZXJzIGludG8gYSByZXVzYWJsZSB2aWV3IHByZXNldC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJycHQtZmllbGQtbGFiZWxcIj5OZXcgVmlldyBOYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LW1vZGFsLWlucHV0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gSGlnaCBWYWx1ZSBUcmFuc2FjdGlvbnMgLSBRM1wiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibmV3UHJlc2V0TmFtZSgpXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJuZXdQcmVzZXROYW1lLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlQ3VycmVudFByZXNldCgpXCJcbiAgICAgICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEV4aXN0aW5nIFByZXNldHMgTWFuYWdlbWVudCBMaXN0IC0tPlxuICAgICAgICAgICAgQGlmIChzYXZlZFByZXNldHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZXhpc3RpbmctcHJlc2V0c1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWV4aXN0aW5nLWxhYmVsXCI+U2F2ZWQgVmlld3MgaW4gdGhpcyByZXBvcnQ6PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcHJlc2V0cy1saXN0XCI+XG4gICAgICAgICAgICAgICAgICBAZm9yIChwcmVzZXQgb2Ygc2F2ZWRQcmVzZXRzKCk7IHRyYWNrIHByZXNldC5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXByZXNldC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXByZXNldC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1wcmVzZXQtcm93LW5hbWVcIj57eyBwcmVzZXQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJlc2V0LmlkID09PSBhY3RpdmVQcmVzZXRJZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXByZXNldC1hY3RpdmUtdGFnXCI+QWN0aXZlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtYnRuLWRlbC1wcmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVByZXNldChwcmVzZXQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRGVsZXRlIHZpZXcgcHJlc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWxldGUgdmlldyBwcmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwidHJhc2hcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LW1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJycHQtYnRuLWNhbmNlbFwiIChjbGljayk9XCJjbG9zZVNhdmVQcmVzZXRNb2RhbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInJwdC1idG4tY29uZmlybVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbmV3UHJlc2V0TmFtZSgpLnRyaW0oKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzYXZlQ3VycmVudFByZXNldCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2F2ZSBWaWV3XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgIH1cbiAgICAucnB0LWZhY2FkZS1jb250YWluZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC5ycHQtZmFjYWRlLXRvb2xiYXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDEycHg7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgLnJwdC10b29sYmFyLWxlZnQsIC5ycHQtdG9vbGJhci1yaWdodCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTBweDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgLnJwdC1yZXBvcnQtdGl0bGUtYmFkZ2Uge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgcGFkZGluZy1yaWdodDogNHB4O1xuICAgIH1cbiAgICAucnB0LXRpdGxlLWRvdCB7XG4gICAgICB3aWR0aDogOHB4O1xuICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtcmVjb3JkLWNvdW50LWNoaXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA1cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBmb250LXNpemU6IDAuNzI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHBhZGRpbmc6IDNweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1mdWxsLCA5OTk5cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICB9XG4gICAgLnJwdC1jaGlwLWRvdCB7XG4gICAgICB3aWR0aDogNnB4O1xuICAgICAgaGVpZ2h0OiA2cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgIH1cbiAgICAucnB0LXByZXNldC1jb250cm9sIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgcGFkZGluZzogM3B4IDZweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtbGFiZWwge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgICBmb250LXNpemU6IDAuNzI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIH1cbiAgICAucnB0LXByZXNldC1zZWxlY3Qge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXNtLCA0cHgpO1xuICAgICAgcGFkZGluZzogM3B4IDhweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtc2VsZWN0OmZvY3VzIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWZvY3VzLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KSk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNhdmUtdmlldyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDRweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWxpZ2h0LCAjZWZmNmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiZmRiZmU7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC1zaXplOiAwLjcyNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LWJ0bi1zYXZlLXZpZXc6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2RiZWFmZTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzkzYzVmZDtcbiAgICB9XG4gICAgLnJwdC1leHBvcnQtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBwYWRkaW5nOiA1cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LWV4cG9ydC1idG46ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC40NTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICAgIC5ycHQtZXhwb3J0LWV4Y2VsIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmMGZkZjQ7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjYmJmN2QwO1xuICAgICAgY29sb3I6ICMxNTgwM2Q7XG4gICAgfVxuICAgIC5ycHQtZXhwb3J0LWV4Y2VsOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6ICNkY2ZjZTc7XG4gICAgICBib3JkZXItY29sb3I6ICM4NmVmYWM7XG4gICAgfVxuICAgIC5ycHQtZXhwb3J0LWNzdiB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgIH1cbiAgICAucnB0LWV4cG9ydC1jc3Y6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzk0YTNiODtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgIH1cbiAgICAucnB0LWV4cG9ydC1wcmludCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWVmMmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2M3ZDJmZTtcbiAgICAgIGNvbG9yOiAjNDMzOGNhO1xuICAgIH1cbiAgICAucnB0LWV4cG9ydC1wcmludDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZTBlN2ZmO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjYTViNGZjO1xuICAgIH1cbiAgICAvKiBNb2RhbCAqL1xuICAgIC5ycHQtbW9kYWwtYmFja2Ryb3Age1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNDUpO1xuICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7XG4gICAgICB6LWluZGV4OiAxMTAwO1xuICAgIH1cbiAgICAucnB0LW1vZGFsLWRpYWxvZyB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgd2lkdGg6IG1pbig0NjBweCwgOTJ2dyk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDhweCAxMHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgei1pbmRleDogMTEwMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGFuaW1hdGlvbjogcnB0LW1vZGFsLXBvcCAxNjBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICB9XG4gICAgQGtleWZyYW1lcyBycHQtbW9kYWwtcG9wIHtcbiAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNDYlKSBzY2FsZSgwLjk3KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxKTsgfVxuICAgIH1cbiAgICAucnB0LW1vZGFsLWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIHBhZGRpbmc6IDE0cHggMThweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICB9XG4gICAgLnJwdC1tb2RhbC1oZWFkZXItdGl0bGUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgIH1cbiAgICAucnB0LW1vZGFsLXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgLnJwdC1tb2RhbC1jbG9zZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB3aWR0aDogMjhweDtcbiAgICAgIGhlaWdodDogMjhweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1tb2RhbC1jbG9zZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZTJlOGYwO1xuICAgICAgY29sb3I6ICMwZjE3MmE7XG4gICAgfVxuICAgIC5ycHQtbW9kYWwtYm9keSB7XG4gICAgICBwYWRkaW5nOiAxOHB4O1xuICAgIH1cbiAgICAucnB0LW1vZGFsLWhpbnQge1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICAgIG1hcmdpbjogMCAwIDE2cHggMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1O1xuICAgIH1cbiAgICAucnB0LWlucHV0LWdyb3VwIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgfVxuICAgIC5ycHQtZmllbGQtbGFiZWwge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMzMzQxNTU7XG4gICAgICBtYXJnaW4tYm90dG9tOiA2cHg7XG4gICAgfVxuICAgIC5ycHQtbW9kYWwtaW5wdXQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgcGFkZGluZzogOHB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1tb2RhbC1pbnB1dDpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1mb2N1cywgcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWV4aXN0aW5nLXByZXNldHMge1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICBwYWRkaW5nLXRvcDogMTJweDtcbiAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICB9XG4gICAgLnJwdC1leGlzdGluZy1sYWJlbCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGZvbnQtc2l6ZTogMC43MjVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xuICAgIH1cbiAgICAucnB0LXByZXNldHMtbGlzdCB7XG4gICAgICBtYXgtaGVpZ2h0OiAxNDBweDtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogNnB4O1xuICAgIH1cbiAgICAucnB0LXByZXNldC1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIH1cbiAgICAucnB0LXByZXNldC1pbmZvIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgIH1cbiAgICAucnB0LXByZXNldC1yb3ctbmFtZSB7XG4gICAgICBmb250LXNpemU6IDAuNzc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMWUyOTNiO1xuICAgIH1cbiAgICAucnB0LXByZXNldC1hY3RpdmUtdGFnIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBiYWNrZ3JvdW5kOiAjZGJlYWZlO1xuICAgICAgY29sb3I6ICMxZDRlZDg7XG4gICAgICBwYWRkaW5nOiAxcHggNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogOTk5OXB4O1xuICAgIH1cbiAgICAucnB0LWJ0bi1kZWwtcHJlc2V0IHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgY29sb3I6ICM5NGEzYjg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBwYWRkaW5nOiA0cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtYnRuLWRlbC1wcmVzZXQ6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2ZlZTJlMjtcbiAgICAgIGNvbG9yOiAjZGMyNjI2O1xuICAgIH1cbiAgICAucnB0LW1vZGFsLWZvb3RlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICBnYXA6IDEwcHg7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE4cHg7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2UyZThmMDtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgfVxuICAgIC5ycHQtYnRuLWNhbmNlbCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NiZDVlMTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgcGFkZGluZzogNnB4IDE0cHg7XG4gICAgICBmb250LXNpemU6IDAuNzc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjNDc1NTY5O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGVhc2U7XG4gICAgfVxuICAgIC5ycHQtYnRuLWNhbmNlbDpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjFmNWY5O1xuICAgICAgY29sb3I6ICMwZjE3MmE7XG4gICAgfVxuICAgIC5ycHQtYnRuLWNvbmZpcm0ge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIHBhZGRpbmc6IDZweCAxNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjc3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1idG4tY29uZmlybTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgfVxuICAgIC5ycHQtYnRuLWNvbmZpcm06ZGlzYWJsZWQge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUnB0UmVwb3J0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0cyA9IG5ldyBSZXBvcnRSZXF1ZXN0U2NvcGUoKTtcbiAgcmVhZG9ubHkgcHJlc2V0RXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGlzU2F2aW5nUHJlc2V0ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZXJzaXN0ZWREZWZpbml0aW9uID0gc2lnbmFsPHsgc291cmNlOiBSZXBvcnREZWZpbml0aW9uOyBzYXZlZDogUmVwb3J0RGVmaW5pdGlvbjsgY29udGV4dDogc3RyaW5nIH0gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEV4cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RlbmNlID0gaW5qZWN0KFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBpZCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgcmVwb3J0ID0gaW5wdXQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBwYXJhbWV0ZXJzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgc2hvd0V4cG9ydCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBlbmFibGVQcmVzZXRzID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGF1dG9FeGVjdXRlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcmVhZG9ubHkgcm93Q2xpY2sgPSBvdXRwdXQ8e1xuICAgIHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgYWN0aW9uPzogR3JpZFJvd0NsaWNrQWN0aW9uO1xuICB9PigpO1xuICByZWFkb25seSBkYXRhTG9hZGVkID0gb3V0cHV0PHVua25vd25bXT4oKTtcbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2VkID0gb3V0cHV0PGFueVtdPigpO1xuICByZWFkb25seSBwcmVzZXRTYXZlZCA9IG91dHB1dDx7IG5hbWU6IHN0cmluZzsgcHJlc2V0OiBSZXBvcnRWaWV3UHJlc2V0IH0+KCk7XG4gIHJlYWRvbmx5IHByZXNldENoYW5nZSA9IG91dHB1dDxSZXBvcnRWaWV3UHJlc2V0IHwgbnVsbD4oKTtcbiAgcmVhZG9ubHkgZXhwb3J0UmVxdWVzdGVkID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgcHJpbnRSZXF1ZXN0ZWQgPSBvdXRwdXQ8YW55PigpO1xuXG4gIHJlYWRvbmx5IHJ1bnRpbWVDb21wb25lbnQgPSB2aWV3Q2hpbGQoUmVwb3J0UnVudGltZUNvbXBvbmVudCk7XG5cbiAgLy8gUHJlc2V0IHN0YXRlc1xuICByZWFkb25seSBhY3RpdmVQcmVzZXRJZCA9IHNpZ25hbDxzdHJpbmc+KCdkZWZhdWx0Jyk7XG4gIHJlYWRvbmx5IGlzU2F2ZVByZXNldE1vZGFsT3BlbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG5ld1ByZXNldE5hbWUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGxhdGVzdEdyaWRTdGF0ZSA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjdXN0b21QcmVzZXRzID0gc2lnbmFsPFJlcG9ydFZpZXdQcmVzZXRbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREZWZpbml0aW9uID0gY29tcHV0ZWQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGw+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnQoKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlRGVmaW5pdGlvbiA9IGNvbXB1dGVkPFJlcG9ydERlZmluaXRpb24gfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5yZXBvcnQoKSA/PyB0aGlzLnJ1bnRpbWVDb21wb25lbnQoKT8uY3VycmVudERlZmluaXRpb24oKSA/PyBudWxsO1xuICAgIGNvbnN0IHBlcnNpc3RlZCA9IHRoaXMucGVyc2lzdGVkRGVmaW5pdGlvbigpO1xuICAgIHJldHVybiBwZXJzaXN0ZWQ/LnNvdXJjZSA9PT0gc291cmNlICYmIHBlcnNpc3RlZC5jb250ZXh0ID09PSB0aGlzLnJlcXVlc3RzLmNvbnRleHQoKSA/IHBlcnNpc3RlZC5zYXZlZCA6IHNvdXJjZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVjb3JkQ291bnQgPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LnJlc3VsdERhdGEoKT8ubGVuZ3RoID8/IDA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNob3dUb29sYmFyID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNob3dFeHBvcnQoKSB8fCB0aGlzLmVuYWJsZVByZXNldHMoKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2F2ZWRQcmVzZXRzID0gY29tcHV0ZWQ8UmVwb3J0Vmlld1ByZXNldFtdPigoKSA9PiB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5hY3RpdmVEZWZpbml0aW9uKCk7XG4gICAgY29uc3QgaW5pdGlhbFByZXNldHMgPSAoKGRlZj8uZ3JpZD8ub3B0aW9ucyBhcyBhbnkpPy5wcmVzZXRzIGFzIFJlcG9ydFZpZXdQcmVzZXRbXSkgPz8gW107XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlcG9ydFZpZXdQcmVzZXQ+KCk7XG4gICAgZm9yIChjb25zdCBwIG9mIGluaXRpYWxQcmVzZXRzKSB7XG4gICAgICBpZiAocCAmJiBwLmlkKSBtYXAuc2V0KHAuaWQsIHApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5jdXN0b21QcmVzZXRzKCkpIHtcbiAgICAgIGlmIChwICYmIHAuaWQpIG1hcC5zZXQocC5pZCwgcCk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKG1hcC52YWx1ZXMoKSk7XG4gIH0pO1xuXG4gIG9uUm93QWN0aW9uVHJpZ2dlcmVkKGV2ZW50OiB7XG4gICAgYWN0aW9uOiBHcmlkUm93Q2xpY2tBY3Rpb247XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XG4gICAgICByb3c6IGV2ZW50LnJvdyxcbiAgICAgIHBhcmFtZXRlcnM6IGV2ZW50LnBhcmFtZXRlcnMsXG4gICAgICBhY3Rpb246IGV2ZW50LmFjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIG9uR3JpZFN0YXRlQ2hhbmdlZChzdGF0ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5sYXRlc3RHcmlkU3RhdGUuc2V0KHN0YXRlKTtcbiAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHJvd3M6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChyb3dzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChyb3dzKTtcbiAgfVxuXG4gIG9uU2VsZWN0UHJlc2V0KHByZXNldElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVByZXNldElkLnNldChwcmVzZXRJZCk7XG4gICAgaWYgKHByZXNldElkID09PSAnZGVmYXVsdCcpIHtcbiAgICAgIHRoaXMucHJlc2V0Q2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJlc2V0ID0gdGhpcy5zYXZlZFByZXNldHMoKS5maW5kKChwKSA9PiBwLmlkID09PSBwcmVzZXRJZCk7XG4gICAgaWYgKHByZXNldCkge1xuICAgICAgaWYgKHByZXNldC5ncmlkU3RhdGUpIHtcbiAgICAgICAgdGhpcy5sYXRlc3RHcmlkU3RhdGUuc2V0KHByZXNldC5ncmlkU3RhdGUpO1xuICAgICAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHByZXNldC5ncmlkU3RhdGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmVzZXRDaGFuZ2UuZW1pdChwcmVzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1TYXZlUHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZUN1cnJlbnRQcmVzZXQoKTtcbiAgfVxuXG4gIGV4cG9ydEV4Y2VsKCk6IHZvaWQge1xuICAgIHRoaXMub25FeHBvcnRFeGNlbCgpO1xuICB9XG5cbiAgZXhwb3J0Q3N2KCk6IHZvaWQge1xuICAgIHRoaXMub25FeHBvcnRDc3YoKTtcbiAgfVxuXG4gIHByaW50KCk6IHZvaWQge1xuICAgIHRoaXMub25QcmludFJlcG9ydCgpO1xuICB9XG5cbiAgb3BlblNhdmVQcmVzZXRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLm5ld1ByZXNldE5hbWUuc2V0KCcnKTtcbiAgICB0aGlzLmlzU2F2ZVByZXNldE1vZGFsT3Blbi5zZXQodHJ1ZSk7XG4gIH1cblxuICBjbG9zZVNhdmVQcmVzZXRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2F2ZVByZXNldE1vZGFsT3Blbi5zZXQoZmFsc2UpO1xuICB9XG5cbiAgc2F2ZUN1cnJlbnRQcmVzZXQoKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmV3UHJlc2V0TmFtZSgpLnRyaW0oKTtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBpZiAoIW5hbWUgfHwgIWRlZj8uZ3JpZCB8fCB0aGlzLmlzU2F2aW5nUHJlc2V0KCkpIHJldHVybjtcbiAgICBjb25zdCBwcmVzZXQ6IFJlcG9ydFZpZXdQcmVzZXQgPSB7XG4gICAgICBpZDogJ3ByZXNldF8nICsgRGF0ZS5ub3coKSArICdfJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpLCBuYW1lLFxuICAgICAgZ3JpZFN0YXRlOiB0aGlzLmxhdGVzdEdyaWRTdGF0ZSgpID8/IHt9LCBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuICAgIGNvbnN0IHByZXNldHMgPSBbLi4uKChkZWYuZ3JpZC5vcHRpb25zIGFzIGFueSk/LnByZXNldHMgPz8gW10pLCBwcmVzZXRdO1xuICAgIHRoaXMucGVyc2lzdFByZXNldHMoZGVmLCBwcmVzZXRzLCAoKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZVByZXNldElkLnNldChwcmVzZXQuaWQpO1xuICAgICAgdGhpcy5wcmVzZXRTYXZlZC5lbWl0KHsgbmFtZSwgcHJlc2V0IH0pO1xuICAgICAgdGhpcy5jbG9zZVNhdmVQcmVzZXRNb2RhbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlUHJlc2V0KHByZXNldElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBpZiAocHJlc2V0SWQgPT09ICdkZWZhdWx0JyB8fCAhZGVmPy5ncmlkIHx8IHRoaXMuaXNTYXZpbmdQcmVzZXQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHByZXNldHMgPSAoKChkZWYuZ3JpZC5vcHRpb25zIGFzIGFueSk/LnByZXNldHMgPz8gW10pIGFzIFJlcG9ydFZpZXdQcmVzZXRbXSkuZmlsdGVyKHAgPT4gcC5pZCAhPT0gcHJlc2V0SWQpO1xuICAgIHRoaXMucGVyc2lzdFByZXNldHMoZGVmLCBwcmVzZXRzLCAoKSA9PiB7XG4gICAgICB0aGlzLmN1c3RvbVByZXNldHMudXBkYXRlKHByZXYgPT4gcHJldi5maWx0ZXIocCA9PiBwLmlkICE9PSBwcmVzZXRJZCkpO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlUHJlc2V0SWQoKSA9PT0gcHJlc2V0SWQpIHRoaXMub25TZWxlY3RQcmVzZXQoJ2RlZmF1bHQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdFByZXNldHMoZGVmOiBSZXBvcnREZWZpbml0aW9uLCBwcmVzZXRzOiBSZXBvcnRWaWV3UHJlc2V0W10sIHN1Y2Nlc3M6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGVyc2lzdGVuY2UgfHwgIU51bWJlci5pc0ludGVnZXIoZGVmLnZlcnNpb24pIHx8IGRlZi52ZXJzaW9uIDwgMCkge1xuICAgICAgdGhpcy5wcmVzZXRFcnJvci5zZXQoJ1JlcG9ydCBzdG9yYWdlIGFuZCBhIHZhbGlkIHNhdmVkIHZlcnNpb24gYXJlIHJlcXVpcmVkIHRvIHNhdmUgdmlld3MuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMucmVwb3J0KCkgPz8gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LmN1cnJlbnREZWZpbml0aW9uKCk7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcbiAgICBjb25zdCBuZXh0OiBSZXBvcnREZWZpbml0aW9uID0geyAuLi5kZWYsIGdyaWQ6IHsgLi4uZGVmLmdyaWQhLCBvcHRpb25zOiB7IC4uLmRlZi5ncmlkIS5vcHRpb25zLCBwcmVzZXRzIH0gfSB9O1xuICAgIHRoaXMuaXNTYXZpbmdQcmVzZXQuc2V0KHRydWUpOyB0aGlzLnByZXNldEVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLnJlcXVlc3RzLnJ1bigncHJlc2V0JywgKCkgPT4gdGhpcy5wZXJzaXN0ZW5jZSEuc2F2ZShuZXh0LCB7IGV4cGVjdGVkVmVyc2lvbjogZGVmLnZlcnNpb24gfSksIHNhdmVkID0+IHtcbiAgICAgIGlmICgodGhpcy5yZXBvcnQoKSA/PyB0aGlzLnJ1bnRpbWVDb21wb25lbnQoKT8uY3VycmVudERlZmluaXRpb24oKSkgIT09IHNvdXJjZSkgcmV0dXJuO1xuICAgICAgdGhpcy5wZXJzaXN0ZWREZWZpbml0aW9uLnNldCh7IHNvdXJjZSwgc2F2ZWQsIGNvbnRleHQ6IHRoaXMucmVxdWVzdHMuY29udGV4dCgpIH0pO1xuICAgICAgc3VjY2VzcygpO1xuICAgIH0sIGVycm9yID0+IHRoaXMucHJlc2V0RXJyb3Iuc2V0KGVycm9yLm1lc3NhZ2UpLCAoKSA9PiB0aGlzLmlzU2F2aW5nUHJlc2V0LnNldChmYWxzZSkpO1xuICB9XG5cbiAgb25FeHBvcnRFeGNlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LnJlc3VsdERhdGEoKTtcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBjb25zdCBjb2xzID0gZGVmPy5ncmlkPy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgZmllbGQ6IGMuZmllbGQsIGhlYWRlcjogYy5sYWJlbCB9KSk7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydEV4Y2VsKGRhdGEgYXMgYW55LCB7XG4gICAgICBmaWxlTmFtZTogZGVmPy5uYW1lID8gYCR7ZGVmLm5hbWV9Lnhsc2AgOiAncmVwb3J0LnhscycsXG4gICAgICBjb2x1bW5zOiBjb2xzLFxuICAgICAgYnJhbmRlZEhlYWRlcjogeyByZXBvcnRUaXRsZTogZGVmPy5uYW1lIH0sXG4gICAgfSk7XG4gIH1cblxuICBvbkV4cG9ydENzdigpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LnJlc3VsdERhdGEoKTtcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBjb25zdCBjb2xzID0gZGVmPy5ncmlkPy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgZmllbGQ6IGMuZmllbGQsIGhlYWRlcjogYy5sYWJlbCB9KSk7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydENzdihkYXRhIGFzIGFueSwge1xuICAgICAgZmlsZU5hbWU6IGRlZj8ubmFtZSA/IGAke2RlZi5uYW1lfS5jc3ZgIDogJ3JlcG9ydC5jc3YnLFxuICAgICAgY29sdW1uczogY29scyxcbiAgICAgIGJyYW5kZWRIZWFkZXI6IHsgcmVwb3J0VGl0bGU6IGRlZj8ubmFtZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25QcmludFJlcG9ydCgpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ydW50aW1lQ29tcG9uZW50KCk/LnJlc3VsdERhdGEoKTtcbiAgICBpZiAoIWRhdGEgfHwgIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmFjdGl2ZURlZmluaXRpb24oKTtcbiAgICBjb25zdCBjb2xzID0gZGVmPy5ncmlkPy5jb2x1bW5zLm1hcCgoYykgPT4gKHsgZmllbGQ6IGMuZmllbGQsIGhlYWRlcjogYy5sYWJlbCB9KSk7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLnByaW50UmVwb3J0KGRhdGEgYXMgYW55LCB7XG4gICAgICB0aXRsZTogZGVmPy5uYW1lIHx8ICdSZXBvcnQgUHJpbnQgUHJldmlldycsXG4gICAgICBjb2x1bW5zOiBjb2xzLFxuICAgICAgYnJhbmRlZEhlYWRlcjogeyByZXBvcnRUaXRsZTogZGVmPy5uYW1lIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,10 +1,15 @@
1
+ import { DESIGNER_LOCAL_CONFIG } from '../../../core/tokens/designer-config.token';
1
2
  import { ChangeDetectionStrategy, Component, computed, inject, input, } from '@angular/core';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import { CHART_COMPONENT } from '../../../core/tokens/reporting-config.token';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
6
7
  export class ReportChartBridgeComponent {
7
- hostChartComponent = inject(CHART_COMPONENT, { optional: true });
8
+ injectedChart = inject(CHART_COMPONENT, { optional: true });
9
+ designerConfig = inject(DESIGNER_LOCAL_CONFIG, { optional: true });
10
+ get hostChartComponent() {
11
+ return this.designerConfig?.()?.chart ?? this.injectedChart ?? null;
12
+ }
8
13
  definition = input();
9
14
  customData = input(undefined, { alias: 'data' });
10
15
  customChartType = input(undefined, { alias: 'chartType' });
@@ -369,4 +374,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
369
374
  </div>
370
375
  `, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box}.rpt-chart-bridge-container{width:100%;height:100%;min-height:220px;display:flex;flex-direction:column}.rpt-chart-fallback-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-lg, 12px);padding:var(--rpt-space-md, 20px);box-shadow:0 1px 3px #0000000d;display:flex;flex-direction:column;flex:1;height:100%;min-height:220px;box-sizing:border-box;gap:16px;overflow:hidden}.rpt-chart-fallback-header{display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.rpt-chart-title{font-size:1rem;font-weight:600;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-chart-badge{font-size:.6875rem;font-weight:700;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b);letter-spacing:.05em}.rpt-chart-canvas-area{min-height:140px;height:100%;flex:1;display:flex;align-items:center;justify-content:center;overflow:visible}.rpt-chart-empty{color:var(--rpt-text-muted, #94a3b8);font-size:.875rem}.rpt-bar-chart{display:flex;align-items:flex-end;justify-content:space-around;gap:16px;width:100%;height:100%;min-height:150px;padding-top:24px;box-sizing:border-box}.rpt-bar-column{flex:1;display:flex;flex-direction:column;align-items:center;height:100%;min-width:64px;max-width:140px}.rpt-bar-track{flex:1;width:38px;max-width:44px;margin:0 auto;background:var(--rpt-bg-subtle, #f8fafc);border-radius:6px 6px 0 0;display:flex;align-items:flex-end;position:relative}.rpt-bar-fill{position:relative;width:100%;min-height:4px;border-radius:6px 6px 0 0;transition:height .4s cubic-bezier(.16,1,.3,1);cursor:pointer;display:flex;justify-content:center}.rpt-bar-val-badge{position:absolute;top:-22px;font-size:.6875rem;font-weight:600;color:var(--rpt-text-muted, #64748b);white-space:nowrap;pointer-events:none}.rpt-bar-fill:hover .rpt-bar-val-badge{color:var(--rpt-text-color, #0f172a);font-weight:700}.rpt-bar-tooltip{position:absolute;top:-34px;left:50%;transform:translate(-50%);background:#0f172a;color:#fff;font-size:.6875rem;padding:3px 8px;border-radius:4px;white-space:nowrap;opacity:0;visibility:hidden;transition:all .15s ease;pointer-events:none;z-index:10;box-shadow:0 4px 6px -1px #0000001a}.rpt-bar-fill:hover .rpt-bar-tooltip{opacity:1;visibility:visible;transform:translate(-50%) translateY(-4px)}.rpt-bar-label{font-size:.75rem;color:var(--rpt-text-muted, #64748b);margin-top:10px;white-space:normal;line-height:1.25;text-align:center;word-break:break-word;max-width:100%}.rpt-donut-chart-container{display:flex;align-items:center;justify-content:center;gap:32px;width:100%;flex-wrap:wrap}.rpt-donut-svg{width:150px;height:150px;transform:rotate(-90deg)}.rpt-donut-total-val{transform:rotate(90deg);transform-origin:80px 80px;font-size:1.25rem;font-weight:700;fill:var(--rpt-text-color, #0f172a)}.rpt-donut-total-lbl{transform:rotate(90deg);transform-origin:80px 80px;font-size:.6875rem;fill:var(--rpt-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-chart-legend{display:flex;flex-direction:column;gap:8px;min-width:140px}.rpt-legend-item{display:flex;align-items:center;gap:8px;font-size:.8125rem}.rpt-legend-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.rpt-legend-label{flex:1;color:var(--rpt-text-color, #334155)}.rpt-legend-value{font-weight:600;color:var(--rpt-text-muted, #64748b)}.rpt-line-chart-container{width:100%;display:flex;flex-direction:column;gap:8px}.rpt-line-svg{width:100%;height:140px}.rpt-line-labels{display:flex;justify-content:space-between;font-size:.75rem;color:var(--rpt-text-muted, #64748b);padding:0 8px}\n"] }]
371
376
  }] });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXJ0LWJyaWRnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvY2hhcnQtYnJpZGdlL3JlcG9ydC1jaGFydC1icmlkZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQThZOUUsTUFBTSxPQUFPLDBCQUEwQjtJQUM1QixrQkFBa0IsR0FBeUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLFVBQVUsR0FBRyxLQUFLLEVBQTZCLENBQUM7SUFDaEQsVUFBVSxHQUFHLEtBQUssQ0FBOEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUUsZUFBZSxHQUFHLEtBQUssQ0FBd0IsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEYsV0FBVyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkUsYUFBYSxHQUFHLEtBQUssQ0FBc0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFckUsYUFBYSxHQUFHO1FBQ3ZCLFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNB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bnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENIQVJUX0NPTVBPTkVOVCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0RGF0YUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gJ2JhcicgfCAnbGluZScgfCAnZG9udXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtY2hhcnQtYnJpZGdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChob3N0Q2hhcnRDb21wb25lbnQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgaG9zdENoYXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IGRhdGEoKSxcbiAgICAgICAgICAgICAgY2hhcnRUeXBlOiBjaGFydFR5cGUoKSxcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlKCksXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBCdWlsdC1pbiBmYWxsYmFjayBTVkcvQ1NTIGNoYXJ0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWhlYWRlclwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwicnB0LWNoYXJ0LXRpdGxlXCI+e3sgdGl0bGUoKSB9fTwvaDM+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jaGFydC1iYWRnZVwiPnt7IGNoYXJ0VHlwZSgpIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1jYW52YXMtYXJlYVwiPlxuICAgICAgICAgICAgQGlmIChkYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtZW1wdHlcIj5ObyBjaGFydCBkYXRhIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICAgICAgfSAgICAgICAgICAgIEBlbHNlIGlmIChjaGFydFR5cGUoKSA9PT0gJ2JhcicpIHtcbiAgICAgICAgICAgICAgPCEtLSBWZXJ0aWNhbCBCYXIgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNoYXJ0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWJhci10cmFja1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJnZXRCYXJQZXJjZW50YWdlKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0uY29sb3IgfHwgZGVmYXVsdENvbG9yc1skaW5kZXggJSBkZWZhdWx0Q29sb3JzLmxlbmd0aF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0ubGFiZWwgKyAnOiAnICsgaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXZhbC1iYWRnZVwiPnt7IGZvcm1hdFZhbHVlKGl0ZW0udmFsdWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXRvb2x0aXBcIj57eyBpdGVtLmxhYmVsIH19OiB7eyBpdGVtLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItbGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoY2hhcnRUeXBlKCkgPT09ICdkb251dCcpIHtcbiAgICAgICAgICAgICAgPCEtLSBTVkcgRG9udXQgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZG9udXQtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1kb251dC1zdmdcIiB2aWV3Qm94PVwiMCAwIDE2MCAxNjBcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayBzZWdtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBjeD1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICBjeT1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNjBcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlZ21lbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlZ21lbnQuZGFzaEFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJzZWdtZW50LmRhc2hPZmZzZXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHRleHQgeD1cIjgwXCIgeT1cIjc2XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cInJwdC1kb251dC10b3RhbC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdG90YWxWYWx1ZSgpIH19XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCB4PVwiODBcIiB5PVwiOTJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwicnB0LWRvbnV0LXRvdGFsLWxibFwiPlxuICAgICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1sZWdlbmRcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtbGVnZW5kLWRvdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLmNvbG9yIHx8IGRlZmF1bHRDb2xvcnNbJGluZGV4ICUgZGVmYXVsdENvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWxlZ2VuZC1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGVnZW5kLXZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDwhLS0gU1ZHIExpbmUgLyBBcmVhIENoYXJ0IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWxpbmUtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1saW5lLXN2Z1wiIHZpZXdCb3g9XCIwIDAgNDAwIDE2MFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicnB0TGluZUdyYWRcIiB4MT1cIjBcIiB5MT1cIjBcIiB4Mj1cIjBcIiB5Mj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiIHN0b3AtY29sb3I9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIiBzdG9wLW9wYWNpdHk9XCIwLjNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwidmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpXCIgc3RvcC1vcGFjaXR5PVwiMC4wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmFyZWFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwibGluZVBvaW50cygpLmFyZWFQYXRoXCIgZmlsbD1cInVybCgjcnB0TGluZUdyYWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmxpbmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lUG9pbnRzKCkubGluZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHB0IG9mIGxpbmVQb2ludHMoKS5wb2ludHM7IHRyYWNrIHB0LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeF09XCJwdC54XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeV09XCJwdC55XCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1saW5lLWxhYmVsc1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGluZS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDIyMHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1mYWxsYmFjay1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1zdXJmYWNlLWJnLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1ib3JkZXItY29sb3IsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1sZywgMTJweCk7XG4gICAgICBwYWRkaW5nOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDIwcHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAyMjBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZmFsbGJhY2staGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWJhZGdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtY2FudmFzLWFyZWEge1xuICAgICAgbWluLWhlaWdodDogMTQwcHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZW1wdHkge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgfVxuXG4gICAgLyogQmFyIENoYXJ0ICovXG4gICAgLnJwdC1iYXItY2hhcnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgZ2FwOiAxNnB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICAgIHBhZGRpbmctdG9wOiAyNHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG5cbiAgICAucnB0LWJhci1jb2x1bW4ge1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogNjRweDtcbiAgICAgIG1heC13aWR0aDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdHJhY2sge1xuICAgICAgZmxleDogMTtcbiAgICAgIHdpZHRoOiAzOHB4O1xuICAgICAgbWF4LXdpZHRoOiA0NHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAucnB0LWJhci1maWxsIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogNHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDZweCAwIDA7XG4gICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC40cyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdG9vbHRpcCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0zNHB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgYmFja2dyb3VuZDogIzBmMTcyYTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci10b29sdGlwIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTRweCk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItbGFiZWwge1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC8qIERvbnV0IENoYXJ0ICovXG4gICAgLnJwdC1kb251dC1jaGFydC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogMzJweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtc3ZnIHtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTUwcHg7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtdG90YWwtdmFsIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDgwcHggODBweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1kb251dC10b3RhbC1sYmwge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogODBweCA4MHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWxlZ2VuZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgbWluLXdpZHRoOiAxNDBweDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1kb3Qge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1sYWJlbCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMzM0MTU1KTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC12YWx1ZSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAvKiBMaW5lIENoYXJ0ICovXG4gICAgLnJwdC1saW5lLWNoYXJ0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLXN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLWxhYmVscyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHBhZGRpbmc6IDAgOHB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0Q2hhcnRCcmlkZ2VDb21wb25lbnQge1xuICByZWFkb25seSBob3N0Q2hhcnRDb21wb25lbnQ6IFR5cGU8dW5rbm93bj4gfCBudWxsID0gaW5qZWN0KENIQVJUX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY3VzdG9tRGF0YSA9IGlucHV0PENoYXJ0RGF0YUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnZGF0YScgfSk7XG4gIHJlYWRvbmx5IGN1c3RvbUNoYXJ0VHlwZSA9IGlucHV0PENoYXJ0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAnY2hhcnRUeXBlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tVGl0bGUgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RpdGxlJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tT3B0aW9ucyA9IGlucHV0PFJlY29yZDxzdHJpbmcsIGFueT4+KHt9LCB7IGFsaWFzOiAnb3B0aW9ucycgfSk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdENvbG9ycyA9IFtcbiAgICAnIzI1NjNlYicsXG4gICAgJyMxMGI5ODEnLFxuICAgICcjZjU5ZTBiJyxcbiAgICAnI2VmNDQ0NCcsXG4gICAgJyM4YjVjZjYnLFxuICAgICcjMDZiNmQ0JyxcbiAgICAnI2VjNDg5OSdcbiAgXTtcblxuICByZWFkb25seSB0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UaXRsZSgpID8/XG4gICAgICAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsndGl0bGUnXSBhcyBzdHJpbmcpID8/XG4gICAgICB0aGlzLmRlZmluaXRpb24oKT8ubGFiZWwgPz9cbiAgICAgICdDaGFydCdcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBjaGFydFR5cGUgPSBjb21wdXRlZDxDaGFydFR5cGU+KCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21DaGFydFR5cGUoKSA/P1xuICAgICAgKHRoaXMuZGVmaW5pdGlvbigpPy5wcm9wZXJ0aWVzPy5bJ2NoYXJ0VHlwZSddIGFzIENoYXJ0VHlwZSkgPz9cbiAgICAgICdiYXInXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZGF0YSA9IGNvbXB1dGVkPENoYXJ0RGF0YUl0ZW1bXT4oKCkgPT4ge1xuICAgIGlmICh0aGlzLmN1c3RvbURhdGEoKSAmJiB0aGlzLmN1c3RvbURhdGEoKSEubGVuZ3RoID4gMCkgcmV0dXJuIHRoaXMuY3VzdG9tRGF0YSgpITtcbiAgICBjb25zdCBjb25maWdEYXRhID0gdGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsnZGF0YSddIGFzIENoYXJ0RGF0YUl0ZW1bXTtcbiAgICByZXR1cm4gY29uZmlnRGF0YSB8fCBbXTtcbiAgfSk7XG5cblxuICByZWFkb25seSBvcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4odGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXMgfHwge30pLFxuICAgICAgLi4udGhpcy5jdXN0b21PcHRpb25zKClcbiAgICB9O1xuICB9KTtcblxuXG4gIHJlYWRvbmx5IG1heFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLml0ZW1zLm1hcCgoZCkgPT4gZC52YWx1ZSksIDEpO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFZhbHVlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgY3Vyci52YWx1ZSwgMCk7XG4gIH0pO1xuXG4gIGdldEJhclBlcmNlbnRhZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKCh2YWx1ZSAvIG1heCkgKiAxMDApO1xuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh2YWwgPj0gMV8wMDBfMDAwKSB7XG4gICAgICByZXR1cm4gKHZhbCAvIDFfMDAwXzAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cXC4wJC8sICcnKSArICdNJztcbiAgICB9XG4gICAgaWYgKHZhbCA+PSAxXzAwMCkge1xuICAgICAgcmV0dXJuICh2YWwgLyAxXzAwMCkudG9GaXhlZCgxKS5yZXBsYWNlKC9cXC4wJC8sICcnKSArICdrJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICB9XG5cbiAgcmVhZG9ubHkgZG9udXRTZWdtZW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZGF0YSgpO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbFZhbHVlKCk7XG4gICAgaWYgKHRvdGFsID09PSAwKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gMiAqIE1hdGguUEkgKiA2MDsgLy8gcmFkaXVzID0gNjAgPT4gfjM3Ni45OVxuICAgIGxldCBhY2N1bXVsYXRlZCA9IDA7XG5cbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gaXRlbS52YWx1ZSAvIHRvdGFsO1xuICAgICAgY29uc3Qgc3Ryb2tlTGVuZ3RoID0gcmF0aW8gKiBjaXJjdW1mZXJlbmNlO1xuICAgICAgY29uc3QgZGFzaE9mZnNldCA9IC0oYWNjdW11bGF0ZWQgKiBjaXJjdW1mZXJlbmNlKTtcbiAgICAgIGFjY3VtdWxhdGVkICs9IHJhdGlvO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgY29sb3I6IGl0ZW0uY29sb3IgfHwgdGhpcy5kZWZhdWx0Q29sb3JzW2lkeCAlIHRoaXMuZGVmYXVsdENvbG9ycy5sZW5ndGhdLFxuICAgICAgICBkYXNoQXJyYXk6IGAke3N0cm9rZUxlbmd0aH0gJHtjaXJjdW1mZXJlbmNlfWAsXG4gICAgICAgIGRhc2hPZmZzZXRcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGxpbmVQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4geyBsaW5lUGF0aDogJycsIGFyZWFQYXRoOiAnJywgcG9pbnRzOiBbXSB9O1xuXG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSgpO1xuICAgIGNvbnN0IHdpZHRoID0gNDAwO1xuICAgIGNvbnN0IGhlaWdodCA9IDE0MDtcbiAgICBjb25zdCBwYWRkaW5nID0gMjA7XG5cbiAgICBjb25zdCB1c2FibGVXaWR0aCA9IHdpZHRoIC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3QgdXNhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZyAqIDI7XG4gICAgY29uc3Qgc3RlcCA9IGl0ZW1zLmxlbmd0aCA+IDEgPyB1c2FibGVXaWR0aCAvIChpdGVtcy5sZW5ndGggLSAxKSA6IDA7XG5cbiAgICBjb25zdCBwdHMgPSBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHBhZGRpbmcgKyBpZHggKiBzdGVwO1xuICAgICAgY29uc3QgeSA9IGhlaWdodCAtIHBhZGRpbmcgLSAoaXRlbS52YWx1ZSAvIG1heCkgKiB1c2FibGVIZWlnaHQ7XG4gICAgICByZXR1cm4geyB4LCB5LCBsYWJlbDogaXRlbS5sYWJlbCwgdmFsdWU6IGl0ZW0udmFsdWUgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxpbmVQYXRoID0gcHRzLnJlZHVjZSgoYWNjLCBwdCwgaSkgPT4ge1xuICAgICAgcmV0dXJuIGkgPT09IDAgPyBgTSAke3B0Lnh9ICR7cHQueX1gIDogYCR7YWNjfSBMICR7cHQueH0gJHtwdC55fWA7XG4gICAgfSwgJycpO1xuXG4gICAgY29uc3QgZmlyc3RQdCA9IHB0c1swXTtcbiAgICBjb25zdCBsYXN0UHQgPSBwdHNbcHRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGFyZWFQYXRoID0gYCR7bGluZVBhdGh9IEwgJHtsYXN0UHQueH0gJHtoZWlnaHQgLSBwYWRkaW5nfSBMICR7Zmlyc3RQdC54fSAke2hlaWdodCAtIHBhZGRpbmd9IFpgO1xuXG4gICAgcmV0dXJuIHsgbGluZVBhdGgsIGFyZWFQYXRoLCBwb2ludHM6IHB0cyB9O1xuICB9KTtcbn1cbiJdfQ==
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNoYXJ0LWJyaWRnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcmltaXRpdmVzL2NvbXBvbmVudHMvY2hhcnQtYnJpZGdlL3JlcG9ydC1jaGFydC1icmlkZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7OztBQThZOUUsTUFBTSxPQUFPLDBCQUEwQjtJQUNwQixhQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELGNBQWMsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztJQUN0RSxDQUFDO0lBRVEsVUFBVSxHQUFHLEtBQUssRUFBNkIsQ0FBQztJQUNoRCxVQUFVLEdBQUcsS0FBSyxDQUE4QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RSxlQUFlLEdBQUcsS0FBSyxDQUF3QixTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNs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U0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUNOLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErSFQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERVNJR05FUl9MT0NBTF9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Rva2Vucy9kZXNpZ25lci1jb25maWcudG9rZW4nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENIQVJUX0NPTVBPTkVOVCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0RGF0YUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gJ2JhcicgfCAnbGluZScgfCAnZG9udXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtY2hhcnQtYnJpZGdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChob3N0Q2hhcnRDb21wb25lbnQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0NvbXBvbmVudE91dGxldD1cIlxuICAgICAgICAgICAgaG9zdENoYXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IGRhdGEoKSxcbiAgICAgICAgICAgICAgY2hhcnRUeXBlOiBjaGFydFR5cGUoKSxcbiAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlKCksXG4gICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBCdWlsdC1pbiBmYWxsYmFjayBTVkcvQ1NTIGNoYXJ0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWNoYXJ0LWZhbGxiYWNrLWhlYWRlclwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwicnB0LWNoYXJ0LXRpdGxlXCI+e3sgdGl0bGUoKSB9fTwvaDM+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jaGFydC1iYWRnZVwiPnt7IGNoYXJ0VHlwZSgpIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1jYW52YXMtYXJlYVwiPlxuICAgICAgICAgICAgQGlmIChkYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtY2hhcnQtZW1wdHlcIj5ObyBjaGFydCBkYXRhIGF2YWlsYWJsZTwvZGl2PlxuICAgICAgICAgICAgfSAgICAgICAgICAgIEBlbHNlIGlmIChjaGFydFR5cGUoKSA9PT0gJ2JhcicpIHtcbiAgICAgICAgICAgICAgPCEtLSBWZXJ0aWNhbCBCYXIgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNoYXJ0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtYmFyLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWJhci10cmFja1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJnZXRCYXJQZXJjZW50YWdlKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0uY29sb3IgfHwgZGVmYXVsdENvbG9yc1skaW5kZXggJSBkZWZhdWx0Q29sb3JzLmxlbmd0aF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0ubGFiZWwgKyAnOiAnICsgaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXZhbC1iYWRnZVwiPnt7IGZvcm1hdFZhbHVlKGl0ZW0udmFsdWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYmFyLXRvb2x0aXBcIj57eyBpdGVtLmxhYmVsIH19OiB7eyBpdGVtLnZhbHVlLnRvTG9jYWxlU3RyaW5nKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1iYXItbGFiZWxcIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoY2hhcnRUeXBlKCkgPT09ICdkb251dCcpIHtcbiAgICAgICAgICAgICAgPCEtLSBTVkcgRG9udXQgQ2hhcnQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZG9udXQtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1kb251dC1zdmdcIiB2aWV3Qm94PVwiMCAwIDE2MCAxNjBcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHNlZ21lbnQgb2YgZG9udXRTZWdtZW50cygpOyB0cmFjayBzZWdtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBjeD1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICBjeT1cIjgwXCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNjBcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNlZ21lbnQuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cInNlZ21lbnQuZGFzaEFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2UtZGFzaG9mZnNldF09XCJzZWdtZW50LmRhc2hPZmZzZXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHRleHQgeD1cIjgwXCIgeT1cIjc2XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBjbGFzcz1cInJwdC1kb251dC10b3RhbC12YWxcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdG90YWxWYWx1ZSgpIH19XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCB4PVwiODBcIiB5PVwiOTJcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIGNsYXNzPVwicnB0LWRvbnV0LXRvdGFsLWxibFwiPlxuICAgICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1jaGFydC1sZWdlbmRcIj5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZGF0YSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtbGVnZW5kLWRvdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLmNvbG9yIHx8IGRlZmF1bHRDb2xvcnNbJGluZGV4ICUgZGVmYXVsdENvbG9ycy5sZW5ndGhdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWxlZ2VuZC1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGVnZW5kLXZhbHVlXCI+e3sgaXRlbS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDwhLS0gU1ZHIExpbmUgLyBBcmVhIENoYXJ0IC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWxpbmUtY2hhcnQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInJwdC1saW5lLXN2Z1wiIHZpZXdCb3g9XCIwIDAgNDAwIDE2MFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicnB0TGluZUdyYWRcIiB4MT1cIjBcIiB5MT1cIjBcIiB4Mj1cIjBcIiB5Mj1cIjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9XCIwJVwiIHN0b3AtY29sb3I9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIiBzdG9wLW9wYWNpdHk9XCIwLjNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD1cIjEwMCVcIiBzdG9wLWNvbG9yPVwidmFyKC0tcnB0LXByaW1hcnksICMyNTYzZWIpXCIgc3RvcC1vcGFjaXR5PVwiMC4wXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmFyZWFQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwibGluZVBvaW50cygpLmFyZWFQYXRoXCIgZmlsbD1cInVybCgjcnB0TGluZUdyYWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAobGluZVBvaW50cygpLmxpbmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZF09XCJsaW5lUG9pbnRzKCkubGluZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJ2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYilcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKHB0IG9mIGxpbmVQb2ludHMoKS5wb2ludHM7IHRyYWNrIHB0LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeF09XCJwdC54XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jeV09XCJwdC55XCJcbiAgICAgICAgICAgICAgICAgICAgICByPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cInZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1saW5lLWxhYmVsc1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBkYXRhKCk7IHRyYWNrIGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtbGluZS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtYnJpZGdlLWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDIyMHB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC1mYWxsYmFjay1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1zdXJmYWNlLWJnLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1ib3JkZXItY29sb3IsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1sZywgMTJweCk7XG4gICAgICBwYWRkaW5nOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDIwcHgpO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAyMjBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZmFsbGJhY2staGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1jaGFydC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWJhZGdlIHtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIHBhZGRpbmc6IDJweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtY2FudmFzLWFyZWEge1xuICAgICAgbWluLWhlaWdodDogMTQwcHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIH1cblxuICAgIC5ycHQtY2hhcnQtZW1wdHkge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgfVxuXG4gICAgLyogQmFyIENoYXJ0ICovXG4gICAgLnJwdC1iYXItY2hhcnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgZ2FwOiAxNnB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxNTBweDtcbiAgICAgIHBhZGRpbmctdG9wOiAyNHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG5cbiAgICAucnB0LWJhci1jb2x1bW4ge1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogNjRweDtcbiAgICAgIG1heC13aWR0aDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdHJhY2sge1xuICAgICAgZmxleDogMTtcbiAgICAgIHdpZHRoOiAzOHB4O1xuICAgICAgbWF4LXdpZHRoOiA0NHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAucnB0LWJhci1maWxsIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogNHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDZweCAwIDA7XG4gICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC40cyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAtMjJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci12YWwtYmFkZ2Uge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItdG9vbHRpcCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0zNHB4O1xuICAgICAgbGVmdDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgYmFja2dyb3VuZDogIzBmMTcyYTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBwYWRkaW5nOiAzcHggOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItZmlsbDpob3ZlciAucnB0LWJhci10b29sdGlwIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTRweCk7XG4gICAgfVxuXG4gICAgLnJwdC1iYXItbGFiZWwge1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC8qIERvbnV0IENoYXJ0ICovXG4gICAgLnJwdC1kb251dC1jaGFydC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogMzJweDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtc3ZnIHtcbiAgICAgIHdpZHRoOiAxNTBweDtcbiAgICAgIGhlaWdodDogMTUwcHg7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgIH1cblxuICAgIC5ycHQtZG9udXQtdG90YWwtdmFsIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDgwcHggODBweDtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1kb251dC10b3RhbC1sYmwge1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogODBweCA4MHB4O1xuICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICBmaWxsOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG5cbiAgICAucnB0LWNoYXJ0LWxlZ2VuZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgbWluLXdpZHRoOiAxNDBweDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1pdGVtIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1kb3Qge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC1sYWJlbCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMzM0MTU1KTtcbiAgICB9XG5cbiAgICAucnB0LWxlZ2VuZC12YWx1ZSB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAvKiBMaW5lIENoYXJ0ICovXG4gICAgLnJwdC1saW5lLWNoYXJ0LWNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLXN2ZyB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTQwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1saW5lLWxhYmVscyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIHBhZGRpbmc6IDAgOHB4O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0Q2hhcnRCcmlkZ2VDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdGVkQ2hhcnQgPSBpbmplY3QoQ0hBUlRfQ09NUE9ORU5ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc2lnbmVyQ29uZmlnID0gaW5qZWN0KERFU0lHTkVSX0xPQ0FMX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgZ2V0IGhvc3RDaGFydENvbXBvbmVudCgpOiBUeXBlPHVua25vd24+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZGVzaWduZXJDb25maWc/LigpPy5jaGFydCA/PyB0aGlzLmluamVjdGVkQ2hhcnQgPz8gbnVsbDtcbiAgfVxuXG4gIHJlYWRvbmx5IGRlZmluaXRpb24gPSBpbnB1dDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBjdXN0b21EYXRhID0gaW5wdXQ8Q2hhcnREYXRhSXRlbVtdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICdkYXRhJyB9KTtcbiAgcmVhZG9ubHkgY3VzdG9tQ2hhcnRUeXBlID0gaW5wdXQ8Q2hhcnRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICdjaGFydFR5cGUnIH0pO1xuICByZWFkb25seSBjdXN0b21UaXRsZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAndGl0bGUnIH0pO1xuICByZWFkb25seSBjdXN0b21PcHRpb25zID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgYW55Pj4oe30sIHsgYWxpYXM6ICdvcHRpb25zJyB9KTtcblxuICByZWFkb25seSBkZWZhdWx0Q29sb3JzID0gW1xuICAgICcjMjU2M2ViJyxcbiAgICAnIzEwYjk4MScsXG4gICAgJyNmNTllMGInLFxuICAgICcjZWY0NDQ0JyxcbiAgICAnIzhiNWNmNicsXG4gICAgJyMwNmI2ZDQnLFxuICAgICcjZWM0ODk5J1xuICBdO1xuXG4gIHJlYWRvbmx5IHRpdGxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVRpdGxlKCkgPz9cbiAgICAgICh0aGlzLmRlZmluaXRpb24oKT8ucHJvcGVydGllcz8uWyd0aXRsZSddIGFzIHN0cmluZykgPz9cbiAgICAgIHRoaXMuZGVmaW5pdGlvbigpPy5sYWJlbCA/P1xuICAgICAgJ0NoYXJ0J1xuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNoYXJ0VHlwZSA9IGNvbXB1dGVkPENoYXJ0VHlwZT4oKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbUNoYXJ0VHlwZSgpID8/XG4gICAgICAodGhpcy5kZWZpbml0aW9uKCk/LnByb3BlcnRpZXM/LlsnY2hhcnRUeXBlJ10gYXMgQ2hhcnRUeXBlKSA/P1xuICAgICAgJ2JhcidcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBkYXRhID0gY29tcHV0ZWQ8Q2hhcnREYXRhSXRlbVtdPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tRGF0YSgpICYmIHRoaXMuY3VzdG9tRGF0YSgpIS5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5jdXN0b21EYXRhKCkhO1xuICAgIGNvbnN0IGNvbmZpZ0RhdGEgPSB0aGlzLmRlZmluaXRpb24oKT8ucHJvcGVydGllcz8uWydkYXRhJ10gYXMgQ2hhcnREYXRhSXRlbVtdO1xuICAgIHJldHVybiBjb25maWdEYXRhIHx8IFtdO1xuICB9KTtcblxuXG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLih0aGlzLmRlZmluaXRpb24oKT8ucHJvcGVydGllcyB8fCB7fSksXG4gICAgICAuLi50aGlzLmN1c3RvbU9wdGlvbnMoKVxuICAgIH07XG4gIH0pO1xuXG5cbiAgcmVhZG9ubHkgbWF4VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gMTtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uaXRlbXMubWFwKChkKSA9PiBkLnZhbHVlKSwgMSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSgpLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyBjdXJyLnZhbHVlLCAwKTtcbiAgfSk7XG5cbiAgZ2V0QmFyUGVyY2VudGFnZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlKCk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoKHZhbHVlIC8gbWF4KSAqIDEwMCk7XG4gIH1cblxuICBmb3JtYXRWYWx1ZSh2YWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHZhbCA+PSAxXzAwMF8wMDApIHtcbiAgICAgIHJldHVybiAodmFsIC8gMV8wMDBfMDAwKS50b0ZpeGVkKDEpLnJlcGxhY2UoL1xcLjAkLywgJycpICsgJ00nO1xuICAgIH1cbiAgICBpZiAodmFsID49IDFfMDAwKSB7XG4gICAgICByZXR1cm4gKHZhbCAvIDFfMDAwKS50b0ZpeGVkKDEpLnJlcGxhY2UoL1xcLjAkLywgJycpICsgJ2snO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gIH1cblxuICByZWFkb25seSBkb251dFNlZ21lbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5kYXRhKCk7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsVmFsdWUoKTtcbiAgICBpZiAodG90YWwgPT09IDApIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqIDYwOyAvLyByYWRpdXMgPSA2MCA9PiB+Mzc2Ljk5XG4gICAgbGV0IGFjY3VtdWxhdGVkID0gMDtcblxuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4ge1xuICAgICAgY29uc3QgcmF0aW8gPSBpdGVtLnZhbHVlIC8gdG90YWw7XG4gICAgICBjb25zdCBzdHJva2VMZW5ndGggPSByYXRpbyAqIGNpcmN1bWZlcmVuY2U7XG4gICAgICBjb25zdCBkYXNoT2Zmc2V0ID0gLShhY2N1bXVsYXRlZCAqIGNpcmN1bWZlcmVuY2UpO1xuICAgICAgYWNjdW11bGF0ZWQgKz0gcmF0aW87XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgICBjb2xvcjogaXRlbS5jb2xvciB8fCB0aGlzLmRlZmF1bHRDb2xvcnNbaWR4ICUgdGhpcy5kZWZhdWx0Q29sb3JzLmxlbmd0aF0sXG4gICAgICAgIGRhc2hBcnJheTogYCR7c3Ryb2tlTGVuZ3RofSAke2NpcmN1bWZlcmVuY2V9YCxcbiAgICAgICAgZGFzaE9mZnNldFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbGluZVBvaW50cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZGF0YSgpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiB7IGxpbmVQYXRoOiAnJywgYXJlYVBhdGg6ICcnLCBwb2ludHM6IFtdIH07XG5cbiAgICBjb25zdCBtYXggPSB0aGlzLm1heFZhbHVlKCk7XG4gICAgY29uc3Qgd2lkdGggPSA0MDA7XG4gICAgY29uc3QgaGVpZ2h0ID0gMTQwO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAyMDtcblxuICAgIGNvbnN0IHVzYWJsZVdpZHRoID0gd2lkdGggLSBwYWRkaW5nICogMjtcbiAgICBjb25zdCB1c2FibGVIZWlnaHQgPSBoZWlnaHQgLSBwYWRkaW5nICogMjtcbiAgICBjb25zdCBzdGVwID0gaXRlbXMubGVuZ3RoID4gMSA/IHVzYWJsZVdpZHRoIC8gKGl0ZW1zLmxlbmd0aCAtIDEpIDogMDtcblxuICAgIGNvbnN0IHB0cyA9IGl0ZW1zLm1hcCgoaXRlbSwgaWR4KSA9PiB7XG4gICAgICBjb25zdCB4ID0gcGFkZGluZyArIGlkeCAqIHN0ZXA7XG4gICAgICBjb25zdCB5ID0gaGVpZ2h0IC0gcGFkZGluZyAtIChpdGVtLnZhbHVlIC8gbWF4KSAqIHVzYWJsZUhlaWdodDtcbiAgICAgIHJldHVybiB7IHgsIHksIGxhYmVsOiBpdGVtLmxhYmVsLCB2YWx1ZTogaXRlbS52YWx1ZSB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgbGluZVBhdGggPSBwdHMucmVkdWNlKChhY2MsIHB0LCBpKSA9PiB7XG4gICAgICByZXR1cm4gaSA9PT0gMCA/IGBNICR7cHQueH0gJHtwdC55fWAgOiBgJHthY2N9IEwgJHtwdC54fSAke3B0Lnl9YDtcbiAgICB9LCAnJyk7XG5cbiAgICBjb25zdCBmaXJzdFB0ID0gcHRzWzBdO1xuICAgIGNvbnN0IGxhc3RQdCA9IHB0c1twdHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYXJlYVBhdGggPSBgJHtsaW5lUGF0aH0gTCAke2xhc3RQdC54fSAke2hlaWdodCAtIHBhZGRpbmd9IEwgJHtmaXJzdFB0Lnh9ICR7aGVpZ2h0IC0gcGFkZGluZ30gWmA7XG5cbiAgICByZXR1cm4geyBsaW5lUGF0aCwgYXJlYVBhdGgsIHBvaW50czogcHRzIH07XG4gIH0pO1xufVxuIl19