valtech-components 2.0.359 → 2.0.361

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.
@@ -1,5 +1,7 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
2
+ import { Component, HostListener, inject, Input } from '@angular/core';
3
+ import { IonButton, IonButtons, IonContent, IonHeader, IonIcon, IonModal, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
4
+ import { LangService } from '../../../services/lang-provider/lang-provider.service';
3
5
  import * as i0 from "@angular/core";
4
6
  import * as i1 from "@angular/common";
5
7
  /**
@@ -8,7 +10,16 @@ import * as i1 from "@angular/common";
8
10
  * Displays an image with various display options (bordered, shaded, dark, etc).
9
11
  * Now includes a container wrapper for better flexbox support and alignment options.
10
12
  *
11
- * @example
13
+ * NEW: Optional preview mode with full-screen zoom capabilities:
14
+ * - Click to open full-screen preview (when previewMode is enabled)
15
+ * - Pinch-to-zoom on mobile devices
16
+ * - Mouse wheel zoom on desktop
17
+ * - Pan/drag to navigate zoomed images
18
+ * - Zoom controls with buttons
19
+ * - Keyboard shortcuts (Esc to close, +/- to zoom, 0 to reset)
20
+ * - Touch-friendly interface with gesture support
21
+ *
22
+ * @example Basic usage:
12
23
  * <val-image [props]="{
13
24
  * src: 'url',
14
25
  * alt: 'desc',
@@ -19,11 +30,41 @@ import * as i1 from "@angular/common";
19
30
  * caption: 'Image description'
20
31
  * }"></val-image>
21
32
  *
22
- * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, alignment, caption, etc.)
33
+ * @example With preview mode:
34
+ * <val-image [props]="{
35
+ * src: 'url',
36
+ * alt: 'desc',
37
+ * previewMode: true,
38
+ * bordered: true,
39
+ * alignment: 'center'
40
+ * }"></val-image>
41
+ *
42
+ * @input props: ImageMetadata - Configuration for the image (src, alt, size, mode, alignment, caption, previewMode, etc.)
23
43
  */
24
44
  export class ImageComponent {
25
45
  constructor() {
26
46
  this.available = true;
47
+ // Preview mode properties
48
+ this.isPreviewOpen = false;
49
+ this.zoomLevel = 1;
50
+ this.minZoom = 0.5;
51
+ this.maxZoom = 5;
52
+ this.panX = 0;
53
+ this.panY = 0;
54
+ // Touch and mouse interaction properties
55
+ this.isDragging = false;
56
+ this.lastPanX = 0;
57
+ this.lastPanY = 0;
58
+ this.startX = 0;
59
+ this.startY = 0;
60
+ // Touch gesture properties
61
+ this.initialDistance = 0;
62
+ this.initialZoom = 1;
63
+ this.touches = [];
64
+ // Lang service
65
+ this.langService = inject(LangService);
66
+ // Math for template
67
+ this.Math = Math;
27
68
  }
28
69
  ngOnInit() {
29
70
  // Set default values
@@ -42,8 +83,142 @@ export class ImageComponent {
42
83
  this.available = true;
43
84
  }, 100);
44
85
  }
86
+ // Preview mode methods
87
+ openPreview() {
88
+ if (!this.props.previewMode)
89
+ return;
90
+ this.isPreviewOpen = true;
91
+ this.resetZoom();
92
+ }
93
+ closePreview() {
94
+ this.isPreviewOpen = false;
95
+ }
96
+ // Zoom methods
97
+ zoomIn() {
98
+ if (this.zoomLevel < this.maxZoom) {
99
+ this.zoomLevel = Math.min(this.zoomLevel * 1.2, this.maxZoom);
100
+ }
101
+ }
102
+ zoomOut() {
103
+ if (this.zoomLevel > this.minZoom) {
104
+ this.zoomLevel = Math.max(this.zoomLevel / 1.2, this.minZoom);
105
+ // Reset pan if zoomed out to 1x or less
106
+ if (this.zoomLevel <= 1) {
107
+ this.panX = 0;
108
+ this.panY = 0;
109
+ }
110
+ }
111
+ }
112
+ resetZoom() {
113
+ this.zoomLevel = 1;
114
+ this.panX = 0;
115
+ this.panY = 0;
116
+ }
117
+ // Mouse events
118
+ onMouseDown(event) {
119
+ if (this.zoomLevel <= 1)
120
+ return;
121
+ this.isDragging = true;
122
+ this.startX = event.clientX - this.panX;
123
+ this.startY = event.clientY - this.panY;
124
+ event.preventDefault();
125
+ }
126
+ onMouseMove(event) {
127
+ if (!this.isDragging || this.zoomLevel <= 1)
128
+ return;
129
+ this.panX = event.clientX - this.startX;
130
+ this.panY = event.clientY - this.startY;
131
+ event.preventDefault();
132
+ }
133
+ onMouseUp(event) {
134
+ this.isDragging = false;
135
+ }
136
+ // Touch events for mobile
137
+ onTouchStart(event) {
138
+ event.preventDefault();
139
+ this.touches = Array.from(event.touches);
140
+ if (this.touches.length === 1) {
141
+ // Single touch - start dragging
142
+ if (this.zoomLevel > 1) {
143
+ this.isDragging = true;
144
+ this.startX = this.touches[0].clientX - this.panX;
145
+ this.startY = this.touches[0].clientY - this.panY;
146
+ }
147
+ }
148
+ else if (this.touches.length === 2) {
149
+ // Two touches - start pinch zoom
150
+ this.isDragging = false;
151
+ this.initialDistance = this.getDistance(this.touches[0], this.touches[1]);
152
+ this.initialZoom = this.zoomLevel;
153
+ }
154
+ }
155
+ onTouchMove(event) {
156
+ event.preventDefault();
157
+ this.touches = Array.from(event.touches);
158
+ if (this.touches.length === 1 && this.isDragging && this.zoomLevel > 1) {
159
+ // Single touch - drag
160
+ this.panX = this.touches[0].clientX - this.startX;
161
+ this.panY = this.touches[0].clientY - this.startY;
162
+ }
163
+ else if (this.touches.length === 2) {
164
+ // Two touches - pinch zoom
165
+ const currentDistance = this.getDistance(this.touches[0], this.touches[1]);
166
+ const scale = currentDistance / this.initialDistance;
167
+ this.zoomLevel = Math.min(Math.max(this.initialZoom * scale, this.minZoom), this.maxZoom);
168
+ // Reset pan if zoomed out to 1x or less
169
+ if (this.zoomLevel <= 1) {
170
+ this.panX = 0;
171
+ this.panY = 0;
172
+ }
173
+ }
174
+ }
175
+ onTouchEnd(event) {
176
+ this.isDragging = false;
177
+ this.touches = Array.from(event.touches);
178
+ }
179
+ // Mouse wheel zoom
180
+ onWheel(event) {
181
+ event.preventDefault();
182
+ const delta = event.deltaY > 0 ? -1 : 1;
183
+ const zoomFactor = 1 + delta * 0.1;
184
+ this.zoomLevel = Math.min(Math.max(this.zoomLevel * zoomFactor, this.minZoom), this.maxZoom);
185
+ // Reset pan if zoomed out to 1x or less
186
+ if (this.zoomLevel <= 1) {
187
+ this.panX = 0;
188
+ this.panY = 0;
189
+ }
190
+ }
191
+ // Helper methods
192
+ getDistance(touch1, touch2) {
193
+ const dx = touch1.clientX - touch2.clientX;
194
+ const dy = touch1.clientY - touch2.clientY;
195
+ return Math.sqrt(dx * dx + dy * dy);
196
+ }
197
+ // Keyboard shortcuts
198
+ onKeyDown(event) {
199
+ if (!this.isPreviewOpen)
200
+ return;
201
+ switch (event.key) {
202
+ case 'Escape':
203
+ this.closePreview();
204
+ break;
205
+ case '+':
206
+ case '=':
207
+ event.preventDefault();
208
+ this.zoomIn();
209
+ break;
210
+ case '-':
211
+ event.preventDefault();
212
+ this.zoomOut();
213
+ break;
214
+ case '0':
215
+ event.preventDefault();
216
+ this.resetZoom();
217
+ break;
218
+ }
219
+ }
45
220
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ImageComponent, isStandalone: true, selector: "val-image", inputs: { props: "props" }, ngImport: i0, template: `
221
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ImageComponent, isStandalone: true, selector: "val-image", inputs: { props: "props" }, host: { listeners: { "document:keydown": "onKeyDown($event)" } }, ngImport: i0, template: `
47
222
  <figure
48
223
  class="val-image-container"
49
224
  [class]="props.containerClass"
@@ -60,7 +235,11 @@ export class ImageComponent {
60
235
  @if (props.src.includes('--')) {
61
236
  <img
62
237
  class="val-image"
63
- [ngClass]="[props.mode, !props.width ? props.size : '']"
238
+ [ngClass]="[
239
+ props.mode,
240
+ !props.width ? props.size : '',
241
+ props.previewMode ? 'val-image--preview-enabled' : '',
242
+ ]"
64
243
  [ngStyle]="{
65
244
  content: 'var(' + props.src + ')',
66
245
  }"
@@ -73,11 +252,16 @@ export class ImageComponent {
73
252
  [style.width.rem]="props.width"
74
253
  [style.max-width.rem]="props.width"
75
254
  [style.height.px]="props.height"
255
+ (click)="props.previewMode ? openPreview() : null"
76
256
  />
77
257
  } @else {
78
258
  <img
79
259
  class="val-image"
80
- [ngClass]="[props.mode, !props.width ? props.size : '']"
260
+ [ngClass]="[
261
+ props.mode,
262
+ !props.width ? props.size : '',
263
+ props.previewMode ? 'val-image--preview-enabled' : '',
264
+ ]"
81
265
  [class.bordered]="props.bordered"
82
266
  [class.shaded]="props.shaded"
83
267
  [class.dark]="props.dark"
@@ -88,6 +272,7 @@ export class ImageComponent {
88
272
  [style.width.rem]="props.width"
89
273
  [style.max-width.rem]="props.width"
90
274
  [style.height.px]="props.height"
275
+ (click)="props.previewMode ? openPreview() : null"
91
276
  />
92
277
  }
93
278
  </div>
@@ -105,11 +290,78 @@ export class ImageComponent {
105
290
  </figcaption>
106
291
  }
107
292
  </figure>
108
- `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.val-image-container{margin:0;padding:0;max-width:100%}.val-image-container--left{margin-right:auto;text-align:left}.val-image-container--center{margin-left:auto;margin-right:auto;text-align:center}.val-image-container--right{margin-left:auto;text-align:right}.val-image-wrapper{display:inline-block;position:relative}.val-image{width:100%;height:auto;display:block;opacity:1;max-width:100%}.val-image.center{margin:0 auto}.val-image.rounded{border-radius:.5rem}.val-image.circular{border-radius:50%;aspect-ratio:1;object-fit:cover}.val-image.box{border-radius:0}.val-image.bordered{border:.0625rem solid var(--ion-color-medium)}.val-image.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.val-image.dark{filter:invert(1)}}.val-image.limited{max-width:100%}@media (max-width: 768px){.val-image .val-image-wrapper.small{width:40%}.val-image .val-image-wrapper.medium{width:60%}.val-image .val-image-wrapper.large{width:80%}.val-image .val-image-wrapper.xlarge{width:100%}}.val-image.small{width:30%}.val-image.medium{width:50%}.val-image.large{width:70%}.val-image.xlarge{width:100%}.val-image-caption{margin-top:.5rem;color:var(--ion-color-medium-shade, #666);font-style:italic;line-height:1.4}.val-image-caption--small{font-size:.75rem}.val-image-caption--medium{font-size:.875rem}.val-image-caption--large{font-size:1rem}.val-image.visible{animation:appearance ease-in 1s forwards}@keyframes appearance{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.val-image-container{flex-shrink:0;align-self:flex-start}.flexbox-container .val-image-container--left{align-self:flex-start}.flexbox-container .val-image-container--center{align-self:center}.flexbox-container .val-image-container--right{align-self:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
293
+
294
+ <!-- Modal de previsualización con ion-modal -->
295
+ <ion-modal [isOpen]="isPreviewOpen" (didDismiss)="closePreview()">
296
+ <ng-template>
297
+ <ion-header>
298
+ <ion-toolbar>
299
+ <ion-title>{{ props.alt || 'Previsualización de imagen' }}</ion-title>
300
+ <ion-buttons slot="end">
301
+ <ion-button (click)="closePreview()" fill="clear">
302
+ <ion-icon name="close"></ion-icon>
303
+ </ion-button>
304
+ </ion-buttons>
305
+ </ion-toolbar>
306
+ </ion-header>
307
+
308
+ <ion-content>
309
+ <!-- Controles de zoom -->
310
+ <div class="val-image-preview-controls">
311
+ <ion-button
312
+ (click)="zoomOut(); $event.stopPropagation()"
313
+ [disabled]="zoomLevel <= minZoom"
314
+ fill="clear"
315
+ size="large"
316
+ >
317
+ <ion-icon name="remove"></ion-icon>
318
+ </ion-button>
319
+
320
+ <span class="val-image-preview-zoom-level">{{ Math.round(zoomLevel * 100) }}%</span>
321
+
322
+ <ion-button
323
+ (click)="zoomIn(); $event.stopPropagation()"
324
+ [disabled]="zoomLevel >= maxZoom"
325
+ fill="clear"
326
+ size="large"
327
+ >
328
+ <ion-icon name="add"></ion-icon>
329
+ </ion-button>
330
+ </div>
331
+
332
+ <!-- Imagen ampliada -->
333
+ <div
334
+ class="val-image-preview-viewport"
335
+ (touchstart)="onTouchStart($event)"
336
+ (touchmove)="onTouchMove($event)"
337
+ (touchend)="onTouchEnd($event)"
338
+ (wheel)="onWheel($event)"
339
+ (mousedown)="onMouseDown($event)"
340
+ (mousemove)="onMouseMove($event)"
341
+ (mouseup)="onMouseUp($event)"
342
+ (mouseleave)="onMouseUp($event)"
343
+ >
344
+ <img
345
+ #previewImage
346
+ class="val-image-preview-img"
347
+ [src]="props.src.includes('--') ? null : props.src"
348
+ [ngStyle]="{
349
+ content: props.src.includes('--') ? 'var(' + props.src + ')' : null,
350
+ transform: 'scale(' + zoomLevel + ') translate(' + panX + 'px, ' + panY + 'px)',
351
+ cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',
352
+ }"
353
+ [alt]="props.alt"
354
+ draggable="false"
355
+ />
356
+ </div>
357
+ </ion-content>
358
+ </ng-template>
359
+ </ion-modal>
360
+ `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.val-image-container{margin:0;padding:0;max-width:100%}.val-image-container--left{margin-right:auto;text-align:left}.val-image-container--center{margin-left:auto;margin-right:auto;text-align:center}.val-image-container--right{margin-left:auto;text-align:right}.val-image-wrapper{display:inline-block;position:relative}.val-image{width:100%;height:auto;display:block;opacity:1;max-width:100%}.val-image.center{margin:0 auto}.val-image.rounded{border-radius:.5rem}.val-image.circular{border-radius:50%;aspect-ratio:1;object-fit:cover}.val-image.box{border-radius:0}.val-image.bordered{border:.0625rem solid var(--ion-color-medium)}.val-image.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.val-image.dark{filter:invert(1)}}.val-image.limited{max-width:100%}@media (max-width: 768px){.val-image .val-image-wrapper.small{width:40%}.val-image .val-image-wrapper.medium{width:60%}.val-image .val-image-wrapper.large{width:80%}.val-image .val-image-wrapper.xlarge{width:100%}}.val-image.small{width:30%}.val-image.medium{width:50%}.val-image.large{width:70%}.val-image.xlarge{width:100%}.val-image-caption{margin-top:.5rem;color:var(--ion-color-medium-shade, #666);font-style:italic;line-height:1.4}.val-image-caption--small{font-size:.75rem}.val-image-caption--medium{font-size:.875rem}.val-image-caption--large{font-size:1rem}.val-image.visible{animation:appearance ease-in 1s forwards}@keyframes appearance{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.val-image-container{flex-shrink:0;align-self:flex-start}.flexbox-container .val-image-container--left{align-self:flex-start}.flexbox-container .val-image-container--center{align-self:center}.flexbox-container .val-image-container--right{align-self:flex-end}.val-image--preview-enabled{cursor:pointer;transition:opacity .2s ease,transform .2s ease}.val-image--preview-enabled:hover{opacity:.9;transform:scale(1.02)}ion-modal ion-content{position:relative;--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0}.val-image-preview-controls{position:absolute;bottom:20px;left:50%;transform:translate(-50%);z-index:1000;display:flex;align-items:center;gap:15px;background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.9);padding:10px 20px;border-radius:25px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 4px 20px #00000026}.val-image-preview-zoom-level{font-size:14px;font-weight:600;min-width:50px;text-align:center;color:var(--ion-text-color)}.val-image-preview-viewport{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;touch-action:none}.val-image-preview-img{max-width:90vw;max-height:90vh;object-fit:contain;transition:transform .1s ease-out;transform-origin:center center;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}@media (max-width: 768px){.val-image-preview-controls{bottom:10px;padding:8px 16px;gap:10px}.val-image-preview-zoom-level{font-size:12px;min-width:40px}.val-image-preview-img{max-width:95vw;max-height:85vh}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }] }); }
109
361
  }
110
362
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImageComponent, decorators: [{
111
363
  type: Component,
112
- args: [{ selector: 'val-image', standalone: true, imports: [CommonModule], template: `
364
+ args: [{ selector: 'val-image', standalone: true, imports: [CommonModule, IonModal, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonIcon, IonButtons], template: `
113
365
  <figure
114
366
  class="val-image-container"
115
367
  [class]="props.containerClass"
@@ -126,7 +378,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
126
378
  @if (props.src.includes('--')) {
127
379
  <img
128
380
  class="val-image"
129
- [ngClass]="[props.mode, !props.width ? props.size : '']"
381
+ [ngClass]="[
382
+ props.mode,
383
+ !props.width ? props.size : '',
384
+ props.previewMode ? 'val-image--preview-enabled' : '',
385
+ ]"
130
386
  [ngStyle]="{
131
387
  content: 'var(' + props.src + ')',
132
388
  }"
@@ -139,11 +395,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
139
395
  [style.width.rem]="props.width"
140
396
  [style.max-width.rem]="props.width"
141
397
  [style.height.px]="props.height"
398
+ (click)="props.previewMode ? openPreview() : null"
142
399
  />
143
400
  } @else {
144
401
  <img
145
402
  class="val-image"
146
- [ngClass]="[props.mode, !props.width ? props.size : '']"
403
+ [ngClass]="[
404
+ props.mode,
405
+ !props.width ? props.size : '',
406
+ props.previewMode ? 'val-image--preview-enabled' : '',
407
+ ]"
147
408
  [class.bordered]="props.bordered"
148
409
  [class.shaded]="props.shaded"
149
410
  [class.dark]="props.dark"
@@ -154,6 +415,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
154
415
  [style.width.rem]="props.width"
155
416
  [style.max-width.rem]="props.width"
156
417
  [style.height.px]="props.height"
418
+ (click)="props.previewMode ? openPreview() : null"
157
419
  />
158
420
  }
159
421
  </div>
@@ -171,8 +433,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
171
433
  </figcaption>
172
434
  }
173
435
  </figure>
174
- `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.val-image-container{margin:0;padding:0;max-width:100%}.val-image-container--left{margin-right:auto;text-align:left}.val-image-container--center{margin-left:auto;margin-right:auto;text-align:center}.val-image-container--right{margin-left:auto;text-align:right}.val-image-wrapper{display:inline-block;position:relative}.val-image{width:100%;height:auto;display:block;opacity:1;max-width:100%}.val-image.center{margin:0 auto}.val-image.rounded{border-radius:.5rem}.val-image.circular{border-radius:50%;aspect-ratio:1;object-fit:cover}.val-image.box{border-radius:0}.val-image.bordered{border:.0625rem solid var(--ion-color-medium)}.val-image.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.val-image.dark{filter:invert(1)}}.val-image.limited{max-width:100%}@media (max-width: 768px){.val-image .val-image-wrapper.small{width:40%}.val-image .val-image-wrapper.medium{width:60%}.val-image .val-image-wrapper.large{width:80%}.val-image .val-image-wrapper.xlarge{width:100%}}.val-image.small{width:30%}.val-image.medium{width:50%}.val-image.large{width:70%}.val-image.xlarge{width:100%}.val-image-caption{margin-top:.5rem;color:var(--ion-color-medium-shade, #666);font-style:italic;line-height:1.4}.val-image-caption--small{font-size:.75rem}.val-image-caption--medium{font-size:.875rem}.val-image-caption--large{font-size:1rem}.val-image.visible{animation:appearance ease-in 1s forwards}@keyframes appearance{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.val-image-container{flex-shrink:0;align-self:flex-start}.flexbox-container .val-image-container--left{align-self:flex-start}.flexbox-container .val-image-container--center{align-self:center}.flexbox-container .val-image-container--right{align-self:flex-end}\n"] }]
436
+
437
+ <!-- Modal de previsualización con ion-modal -->
438
+ <ion-modal [isOpen]="isPreviewOpen" (didDismiss)="closePreview()">
439
+ <ng-template>
440
+ <ion-header>
441
+ <ion-toolbar>
442
+ <ion-title>{{ props.alt || 'Previsualización de imagen' }}</ion-title>
443
+ <ion-buttons slot="end">
444
+ <ion-button (click)="closePreview()" fill="clear">
445
+ <ion-icon name="close"></ion-icon>
446
+ </ion-button>
447
+ </ion-buttons>
448
+ </ion-toolbar>
449
+ </ion-header>
450
+
451
+ <ion-content>
452
+ <!-- Controles de zoom -->
453
+ <div class="val-image-preview-controls">
454
+ <ion-button
455
+ (click)="zoomOut(); $event.stopPropagation()"
456
+ [disabled]="zoomLevel <= minZoom"
457
+ fill="clear"
458
+ size="large"
459
+ >
460
+ <ion-icon name="remove"></ion-icon>
461
+ </ion-button>
462
+
463
+ <span class="val-image-preview-zoom-level">{{ Math.round(zoomLevel * 100) }}%</span>
464
+
465
+ <ion-button
466
+ (click)="zoomIn(); $event.stopPropagation()"
467
+ [disabled]="zoomLevel >= maxZoom"
468
+ fill="clear"
469
+ size="large"
470
+ >
471
+ <ion-icon name="add"></ion-icon>
472
+ </ion-button>
473
+ </div>
474
+
475
+ <!-- Imagen ampliada -->
476
+ <div
477
+ class="val-image-preview-viewport"
478
+ (touchstart)="onTouchStart($event)"
479
+ (touchmove)="onTouchMove($event)"
480
+ (touchend)="onTouchEnd($event)"
481
+ (wheel)="onWheel($event)"
482
+ (mousedown)="onMouseDown($event)"
483
+ (mousemove)="onMouseMove($event)"
484
+ (mouseup)="onMouseUp($event)"
485
+ (mouseleave)="onMouseUp($event)"
486
+ >
487
+ <img
488
+ #previewImage
489
+ class="val-image-preview-img"
490
+ [src]="props.src.includes('--') ? null : props.src"
491
+ [ngStyle]="{
492
+ content: props.src.includes('--') ? 'var(' + props.src + ')' : null,
493
+ transform: 'scale(' + zoomLevel + ') translate(' + panX + 'px, ' + panY + 'px)',
494
+ cursor: isDragging ? 'grabbing' : zoomLevel > 1 ? 'grab' : 'default',
495
+ }"
496
+ [alt]="props.alt"
497
+ draggable="false"
498
+ />
499
+ </div>
500
+ </ion-content>
501
+ </ng-template>
502
+ </ion-modal>
503
+ `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.val-image-container{margin:0;padding:0;max-width:100%}.val-image-container--left{margin-right:auto;text-align:left}.val-image-container--center{margin-left:auto;margin-right:auto;text-align:center}.val-image-container--right{margin-left:auto;text-align:right}.val-image-wrapper{display:inline-block;position:relative}.val-image{width:100%;height:auto;display:block;opacity:1;max-width:100%}.val-image.center{margin:0 auto}.val-image.rounded{border-radius:.5rem}.val-image.circular{border-radius:50%;aspect-ratio:1;object-fit:cover}.val-image.box{border-radius:0}.val-image.bordered{border:.0625rem solid var(--ion-color-medium)}.val-image.shaded{box-shadow:.1875rem .625rem .5rem #1219541a}@media (prefers-color-scheme: dark){.val-image.dark{filter:invert(1)}}.val-image.limited{max-width:100%}@media (max-width: 768px){.val-image .val-image-wrapper.small{width:40%}.val-image .val-image-wrapper.medium{width:60%}.val-image .val-image-wrapper.large{width:80%}.val-image .val-image-wrapper.xlarge{width:100%}}.val-image.small{width:30%}.val-image.medium{width:50%}.val-image.large{width:70%}.val-image.xlarge{width:100%}.val-image-caption{margin-top:.5rem;color:var(--ion-color-medium-shade, #666);font-style:italic;line-height:1.4}.val-image-caption--small{font-size:.75rem}.val-image-caption--medium{font-size:.875rem}.val-image-caption--large{font-size:1rem}.val-image.visible{animation:appearance ease-in 1s forwards}@keyframes appearance{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.val-image-container{flex-shrink:0;align-self:flex-start}.flexbox-container .val-image-container--left{align-self:flex-start}.flexbox-container .val-image-container--center{align-self:center}.flexbox-container .val-image-container--right{align-self:flex-end}.val-image--preview-enabled{cursor:pointer;transition:opacity .2s ease,transform .2s ease}.val-image--preview-enabled:hover{opacity:.9;transform:scale(1.02)}ion-modal ion-content{position:relative;--padding-start: 0;--padding-end: 0;--padding-top: 0;--padding-bottom: 0}.val-image-preview-controls{position:absolute;bottom:20px;left:50%;transform:translate(-50%);z-index:1000;display:flex;align-items:center;gap:15px;background:rgba(var(--ion-background-color-rgb, 255, 255, 255),.9);padding:10px 20px;border-radius:25px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 4px 20px #00000026}.val-image-preview-zoom-level{font-size:14px;font-weight:600;min-width:50px;text-align:center;color:var(--ion-text-color)}.val-image-preview-viewport{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;touch-action:none}.val-image-preview-img{max-width:90vw;max-height:90vh;object-fit:contain;transition:transform .1s ease-out;transform-origin:center center;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}@media (max-width: 768px){.val-image-preview-controls{bottom:10px;padding:8px 16px;gap:10px}.val-image-preview-zoom-level{font-size:12px;min-width:40px}.val-image-preview-img{max-width:95vw;max-height:85vh}}\n"] }]
175
504
  }], ctorParameters: () => [], propDecorators: { props: [{
176
505
  type: Input
506
+ }], onKeyDown: [{
507
+ type: HostListener,
508
+ args: ['document:keydown', ['$event']]
177
509
  }] } });
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9hdG9tcy9pbWFnZS9pbWFnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUF3RXpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQU16QjtRQUZBLGNBQVMsR0FBWSxJQUFJLENBQUM7SUFFWCxDQUFDO0lBRWhCLFFBQVE7UUFDTixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzsrR0F6QlUsY0FBYzttR0FBZCxjQUFjLGlHQXBGZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RFQsdXpJQS9EUyxZQUFZOzs0RkFxRlgsY0FBYztrQkF4RjFCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThEVDt3REF3QkQsS0FBSztzQkFESixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtaW1hZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZmlndXJlXG4gICAgICBjbGFzcz1cInZhbC1pbWFnZS1jb250YWluZXJcIlxuICAgICAgW2NsYXNzXT1cInByb3BzLmNvbnRhaW5lckNsYXNzXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3ZhbC1pbWFnZS1jb250YWluZXItLWxlZnQnOiBwcm9wcy5hbGlnbm1lbnQgPT09ICdsZWZ0JyxcbiAgICAgICAgJ3ZhbC1pbWFnZS1jb250YWluZXItLWNlbnRlcic6IHByb3BzLmFsaWdubWVudCA9PT0gJ2NlbnRlcicgfHwgIXByb3BzLmFsaWdubWVudCxcbiAgICAgICAgJ3ZhbC1pbWFnZS1jb250YWluZXItLXJpZ2h0JzogcHJvcHMuYWxpZ25tZW50ID09PSAncmlnaHQnLFxuICAgICAgfVwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIGRpc3BsYXk6IHByb3BzLmZsZXggPyAnZmxleCcgOiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2YWwtaW1hZ2Utd3JhcHBlclwiPlxuICAgICAgICBAaWYgKHByb3BzLnNyYy5pbmNsdWRlcygnLS0nKSkge1xuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwidmFsLWltYWdlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltwcm9wcy5tb2RlLCAhcHJvcHMud2lkdGggPyBwcm9wcy5zaXplIDogJyddXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogJ3ZhcignICsgcHJvcHMuc3JjICsgJyknLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbY2xhc3MuYm9yZGVyZWRdPVwicHJvcHMuYm9yZGVyZWRcIlxuICAgICAgICAgICAgW2NsYXNzLnNoYWRlZF09XCJwcm9wcy5zaGFkZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmRhcmtdPVwicHJvcHMuZGFya1wiXG4gICAgICAgICAgICBbY2xhc3MubGltaXRlZF09XCJwcm9wcy5saW1pdGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5jZW50ZXJdPVwicHJvcHMuYWxpZ25tZW50ID09PSAnY2VudGVyJ1wiXG4gICAgICAgICAgICBbYWx0XT1cInByb3BzLmFsdFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucmVtXT1cInByb3BzLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucmVtXT1cInByb3BzLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicHJvcHMuaGVpZ2h0XCJcbiAgICAgICAgICAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBjbGFzcz1cInZhbC1pbWFnZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJbcHJvcHMubW9kZSwgIXByb3BzLndpZHRoID8gcHJvcHMuc2l6ZSA6ICcnXVwiXG4gICAgICAgICAgICBbY2xhc3MuYm9yZGVyZWRdPVwicHJvcHMuYm9yZGVyZWRcIlxuICAgICAgICAgICAgW2NsYXNzLnNoYWRlZF09XCJwcm9wcy5zaGFkZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmRhcmtdPVwicHJvcHMuZGFya1wiXG4gICAgICAgICAgICBbY2xhc3MubGltaXRlZF09XCJwcm9wcy5saW1pdGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5jZW50ZXJdPVwicHJvcHMuYWxpZ25tZW50ID09PSAnY2VudGVyJ1wiXG4gICAgICAgICAgICBbc3JjXT1cInByb3BzLnNyY1wiXG4gICAgICAgICAgICBbYWx0XT1cInByb3BzLmFsdFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucmVtXT1cInByb3BzLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucmVtXT1cInByb3BzLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicHJvcHMuaGVpZ2h0XCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChwcm9wcy5jYXB0aW9uKSB7XG4gICAgICAgIDxmaWdjYXB0aW9uXG4gICAgICAgICAgY2xhc3M9XCJ2YWwtaW1hZ2UtY2FwdGlvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3ZhbC1pbWFnZS1jYXB0aW9uLS1zbWFsbCc6IHByb3BzLmNhcHRpb25TaXplID09PSAnc21hbGwnLFxuICAgICAgICAgICAgJ3ZhbC1pbWFnZS1jYXB0aW9uLS1tZWRpdW0nOiBwcm9wcy5jYXB0aW9uU2l6ZSA9PT0gJ21lZGl1bScgfHwgIXByb3BzLmNhcHRpb25TaXplLFxuICAgICAgICAgICAgJ3ZhbC1pbWFnZS1jYXB0aW9uLS1sYXJnZSc6IHByb3BzLmNhcHRpb25TaXplID09PSAnbGFyZ2UnLFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgcHJvcHMuY2FwdGlvbiB9fVxuICAgICAgICA8L2ZpZ2NhcHRpb24+XG4gICAgICB9XG4gICAgPC9maWd1cmU+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtaW1hZ2VcbiAqXG4gKiBEaXNwbGF5cyBhbiBpbWFnZSB3aXRoIHZhcmlvdXMgZGlzcGxheSBvcHRpb25zIChib3JkZXJlZCwgc2hhZGVkLCBkYXJrLCBldGMpLlxuICogTm93IGluY2x1ZGVzIGEgY29udGFpbmVyIHdyYXBwZXIgZm9yIGJldHRlciBmbGV4Ym94IHN1cHBvcnQgYW5kIGFsaWdubWVudCBvcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLWltYWdlIFtwcm9wc109XCJ7XG4gKiAgIHNyYzogJ3VybCcsXG4gKiAgIGFsdDogJ2Rlc2MnLFxuICogICB3aWR0aDogMTAwLFxuICogICBoZWlnaHQ6IDEwMCxcbiAqICAgYm9yZGVyZWQ6IHRydWUsXG4gKiAgIGFsaWdubWVudDogJ2NlbnRlcicsXG4gKiAgIGNhcHRpb246ICdJbWFnZSBkZXNjcmlwdGlvbidcbiAqIH1cIj48L3ZhbC1pbWFnZT5cbiAqXG4gKiBAaW5wdXQgcHJvcHM6IEltYWdlTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgaW1hZ2UgKHNyYywgYWx0LCBzaXplLCBtb2RlLCBhbGlnbm1lbnQsIGNhcHRpb24sIGV0Yy4pXG4gKi9cbmV4cG9ydCBjbGFzcyBJbWFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHByb3BzITogSW1hZ2VNZXRhZGF0YTtcblxuICBhdmFpbGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXNcbiAgICBpZiAoIXRoaXMucHJvcHMuYWxpZ25tZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFsaWdubWVudCA9ICdjZW50ZXInO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucHJvcHMuY2FwdGlvblNpemUpIHtcbiAgICAgIHRoaXMucHJvcHMuY2FwdGlvblNpemUgPSAnbWVkaXVtJztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLm1vZGUpIHtcbiAgICAgIHRoaXMucHJvcHMubW9kZSA9ICdib3gnO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRvVmlzaWJsZSgpIHtcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmF2YWlsYWJsZSA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgfVxufVxuIl19
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9hdG9tcy9pbWFnZS9pbWFnZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxPQUFPLEVBQ1AsUUFBUSxFQUNSLFFBQVEsRUFDUixVQUFVLEdBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdURBQXVELENBQUM7OztBQXFKcEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBZ0N6QjtRQTVCQSxjQUFTLEdBQVksSUFBSSxDQUFDO1FBRTFCLDBCQUEwQjtRQUMxQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLFlBQU8sR0FBVyxHQUFHLENBQUM7UUFDdEIsWUFBTyxHQUFXLENBQUMsQ0FBQztRQUNwQixTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFFakIseUNBQXlDO1FBQ3pDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUVuQiwyQkFBMkI7UUFDM0Isb0JB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMklULGluTEE1SVMsWUFBWSxrTkFBRSxRQUFRLHNEQUFFLFNBQVMsb0dBQUUsVUFBVSxtRkFBRSxRQUFRLGlGQUFFLFVBQVUsa0pBQUUsU0FBUyxvUEFBRSxPQUFPLDJKQUFFLFVBQVU7OzRGQW9MbEcsY0FBYztrQkF2TDFCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLFlBQ3BHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMklUO3dEQTBDRCxLQUFLO3NCQURKLEtBQUs7Z0JBcUxOLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uTW9kYWwsXG4gIElvblRpdGxlLFxuICBJb25Ub29sYmFyLFxufSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IExhbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtaW1hZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25Nb2RhbCwgSW9uSGVhZGVyLCBJb25Ub29sYmFyLCBJb25UaXRsZSwgSW9uQ29udGVudCwgSW9uQnV0dG9uLCBJb25JY29uLCBJb25CdXR0b25zXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZmlndXJlXG4gICAgICBjbGFzcz1cInZhbC1pbWFnZS1jb250YWluZXJcIlxuICAgICAgW2NsYXNzXT1cInByb3BzLmNvbnRhaW5lckNsYXNzXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3ZhbC1pbWFnZS1jb250YWluZXItLWxlZnQnOiBwcm9wcy5hbGlnbm1lbnQgPT09ICdsZWZ0JyxcbiAgICAgICAgJ3ZhbC1pbWFnZS1jb250YWluZXItLWNlbnRlcic6IHByb3BzLmFsaWdubWVudCA9PT0gJ2NlbnRlcicgfHwgIXByb3BzLmFsaWdubWVudCxcbiAgICAgICAgJ3ZhbC1pbWFnZS1jb250YWluZXItLXJpZ2h0JzogcHJvcHMuYWxpZ25tZW50ID09PSAncmlnaHQnLFxuICAgICAgfVwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIGRpc3BsYXk6IHByb3BzLmZsZXggPyAnZmxleCcgOiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2YWwtaW1hZ2Utd3JhcHBlclwiPlxuICAgICAgICBAaWYgKHByb3BzLnNyYy5pbmNsdWRlcygnLS0nKSkge1xuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwidmFsLWltYWdlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgcHJvcHMubW9kZSxcbiAgICAgICAgICAgICAgIXByb3BzLndpZHRoID8gcHJvcHMuc2l6ZSA6ICcnLFxuICAgICAgICAgICAgICBwcm9wcy5wcmV2aWV3TW9kZSA/ICd2YWwtaW1hZ2UtLXByZXZpZXctZW5hYmxlZCcgOiAnJyxcbiAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiAndmFyKCcgKyBwcm9wcy5zcmMgKyAnKScsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIFtjbGFzcy5ib3JkZXJlZF09XCJwcm9wcy5ib3JkZXJlZFwiXG4gICAgICAgICAgICBbY2xhc3Muc2hhZGVkXT1cInByb3BzLnNoYWRlZFwiXG4gICAgICAgICAgICBbY2xhc3MuZGFya109XCJwcm9wcy5kYXJrXCJcbiAgICAgICAgICAgIFtjbGFzcy5saW1pdGVkXT1cInByb3BzLmxpbWl0ZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmNlbnRlcl09XCJwcm9wcy5hbGlnbm1lbnQgPT09ICdjZW50ZXInXCJcbiAgICAgICAgICAgIFthbHRdPVwicHJvcHMuYWx0XCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5yZW1dPVwicHJvcHMud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5yZW1dPVwicHJvcHMud2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJwcm9wcy5oZWlnaHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInByb3BzLnByZXZpZXdNb2RlID8gb3BlblByZXZpZXcoKSA6IG51bGxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwidmFsLWltYWdlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgcHJvcHMubW9kZSxcbiAgICAgICAgICAgICAgIXByb3BzLndpZHRoID8gcHJvcHMuc2l6ZSA6ICcnLFxuICAgICAgICAgICAgICBwcm9wcy5wcmV2aWV3TW9kZSA/ICd2YWwtaW1hZ2UtLXByZXZpZXctZW5hYmxlZCcgOiAnJyxcbiAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgW2NsYXNzLmJvcmRlcmVkXT1cInByb3BzLmJvcmRlcmVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5zaGFkZWRdPVwicHJvcHMuc2hhZGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5kYXJrXT1cInByb3BzLmRhcmtcIlxuICAgICAgICAgICAgW2NsYXNzLmxpbWl0ZWRdPVwicHJvcHMubGltaXRlZFwiXG4gICAgICAgICAgICBbY2xhc3MuY2VudGVyXT1cInByb3BzLmFsaWdubWVudCA9PT0gJ2NlbnRlcidcIlxuICAgICAgICAgICAgW3NyY109XCJwcm9wcy5zcmNcIlxuICAgICAgICAgICAgW2FsdF09XCJwcm9wcy5hbHRcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnJlbV09XCJwcm9wcy53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnJlbV09XCJwcm9wcy53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInByb3BzLmhlaWdodFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicHJvcHMucHJldmlld01vZGUgPyBvcGVuUHJldmlldygpIDogbnVsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAocHJvcHMuY2FwdGlvbikge1xuICAgICAgICA8ZmlnY2FwdGlvblxuICAgICAgICAgIGNsYXNzPVwidmFsLWltYWdlLWNhcHRpb25cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICd2YWwtaW1hZ2UtY2FwdGlvbi0tc21hbGwnOiBwcm9wcy5jYXB0aW9uU2l6ZSA9PT0gJ3NtYWxsJyxcbiAgICAgICAgICAgICd2YWwtaW1hZ2UtY2FwdGlvbi0tbWVkaXVtJzogcHJvcHMuY2FwdGlvblNpemUgPT09ICdtZWRpdW0nIHx8ICFwcm9wcy5jYXB0aW9uU2l6ZSxcbiAgICAgICAgICAgICd2YWwtaW1hZ2UtY2FwdGlvbi0tbGFyZ2UnOiBwcm9wcy5jYXB0aW9uU2l6ZSA9PT0gJ2xhcmdlJyxcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHByb3BzLmNhcHRpb24gfX1cbiAgICAgICAgPC9maWdjYXB0aW9uPlxuICAgICAgfVxuICAgIDwvZmlndXJlPlxuXG4gICAgPCEtLSBNb2RhbCBkZSBwcmV2aXN1YWxpemFjacOzbiBjb24gaW9uLW1vZGFsIC0tPlxuICAgIDxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1ByZXZpZXdPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VQcmV2aWV3KClcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgPGlvbi1oZWFkZXI+XG4gICAgICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICAgICAgPGlvbi10aXRsZT57eyBwcm9wcy5hbHQgfHwgJ1ByZXZpc3VhbGl6YWNpw7NuIGRlIGltYWdlbicgfX08L2lvbi10aXRsZT5cbiAgICAgICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjbG9zZVByZXZpZXcoKVwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgICAgIDwvaW9uLWhlYWRlcj5cblxuICAgICAgICA8aW9uLWNvbnRlbnQ+XG4gICAgICAgICAgPCEtLSBDb250cm9sZXMgZGUgem9vbSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsLWltYWdlLXByZXZpZXctY29udHJvbHNcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJ6b29tT3V0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ6b29tTGV2ZWwgPD0gbWluWm9vbVwiXG4gICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicmVtb3ZlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWwtaW1hZ2UtcHJldmlldy16b29tLWxldmVsXCI+e3sgTWF0aC5yb3VuZCh6b29tTGV2ZWwgKiAxMDApIH19JTwvc3Bhbj5cblxuICAgICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInpvb21JbigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiem9vbUxldmVsID49IG1heFpvb21cIlxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFkZFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEltYWdlbiBhbXBsaWFkYSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInZhbC1pbWFnZS1wcmV2aWV3LXZpZXdwb3J0XCJcbiAgICAgICAgICAgICh0b3VjaHN0YXJ0KT1cIm9uVG91Y2hTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAodG91Y2hlbmQpPVwib25Ub3VjaEVuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICh3aGVlbCk9XCJvbldoZWVsKCRldmVudClcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAjcHJldmlld0ltYWdlXG4gICAgICAgICAgICAgIGNsYXNzPVwidmFsLWltYWdlLXByZXZpZXctaW1nXCJcbiAgICAgICAgICAgICAgW3NyY109XCJwcm9wcy5zcmMuaW5jbHVkZXMoJy0tJykgPyBudWxsIDogcHJvcHMuc3JjXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHByb3BzLnNyYy5pbmNsdWRlcygnLS0nKSA/ICd2YXIoJyArIHByb3BzLnNyYyArICcpJyA6IG51bGwsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoJyArIHpvb21MZXZlbCArICcpIHRyYW5zbGF0ZSgnICsgcGFuWCArICdweCwgJyArIHBhblkgKyAncHgpJyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IGlzRHJhZ2dpbmcgPyAnZ3JhYmJpbmcnIDogem9vbUxldmVsID4gMSA/ICdncmFiJyA6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFthbHRdPVwicHJvcHMuYWx0XCJcbiAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pb24tY29udGVudD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24tbW9kYWw+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtaW1hZ2VcbiAqXG4gKiBEaXNwbGF5cyBhbiBpbWFnZSB3aXRoIHZhcmlvdXMgZGlzcGxheSBvcHRpb25zIChib3JkZXJlZCwgc2hhZGVkLCBkYXJrLCBldGMpLlxuICogTm93IGluY2x1ZGVzIGEgY29udGFpbmVyIHdyYXBwZXIgZm9yIGJldHRlciBmbGV4Ym94IHN1cHBvcnQgYW5kIGFsaWdubWVudCBvcHRpb25zLlxuICpcbiAqIE5FVzogT3B0aW9uYWwgcHJldmlldyBtb2RlIHdpdGggZnVsbC1zY3JlZW4gem9vbSBjYXBhYmlsaXRpZXM6XG4gKiAtIENsaWNrIHRvIG9wZW4gZnVsbC1zY3JlZW4gcHJldmlldyAod2hlbiBwcmV2aWV3TW9kZSBpcyBlbmFibGVkKVxuICogLSBQaW5jaC10by16b29tIG9uIG1vYmlsZSBkZXZpY2VzXG4gKiAtIE1vdXNlIHdoZWVsIHpvb20gb24gZGVza3RvcFxuICogLSBQYW4vZHJhZyB0byBuYXZpZ2F0ZSB6b29tZWQgaW1hZ2VzXG4gKiAtIFpvb20gY29udHJvbHMgd2l0aCBidXR0b25zXG4gKiAtIEtleWJvYXJkIHNob3J0Y3V0cyAoRXNjIHRvIGNsb3NlLCArLy0gdG8gem9vbSwgMCB0byByZXNldClcbiAqIC0gVG91Y2gtZnJpZW5kbHkgaW50ZXJmYWNlIHdpdGggZ2VzdHVyZSBzdXBwb3J0XG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2U6XG4gKiA8dmFsLWltYWdlIFtwcm9wc109XCJ7XG4gKiAgIHNyYzogJ3VybCcsXG4gKiAgIGFsdDogJ2Rlc2MnLFxuICogICB3aWR0aDogMTAwLFxuICogICBoZWlnaHQ6IDEwMCxcbiAqICAgYm9yZGVyZWQ6IHRydWUsXG4gKiAgIGFsaWdubWVudDogJ2NlbnRlcicsXG4gKiAgIGNhcHRpb246ICdJbWFnZSBkZXNjcmlwdGlvbidcbiAqIH1cIj48L3ZhbC1pbWFnZT5cbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHByZXZpZXcgbW9kZTpcbiAqIDx2YWwtaW1hZ2UgW3Byb3BzXT1cIntcbiAqICAgc3JjOiAndXJsJyxcbiAqICAgYWx0OiAnZGVzYycsXG4gKiAgIHByZXZpZXdNb2RlOiB0cnVlLFxuICogICBib3JkZXJlZDogdHJ1ZSxcbiAqICAgYWxpZ25tZW50OiAnY2VudGVyJ1xuICogfVwiPjwvdmFsLWltYWdlPlxuICpcbiAqIEBpbnB1dCBwcm9wczogSW1hZ2VNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbWFnZSAoc3JjLCBhbHQsIHNpemUsIG1vZGUsIGFsaWdubWVudCwgY2FwdGlvbiwgcHJldmlld01vZGUsIGV0Yy4pXG4gKi9cbmV4cG9ydCBjbGFzcyBJbWFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHByb3BzITogSW1hZ2VNZXRhZGF0YTtcblxuICBhdmFpbGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFByZXZpZXcgbW9kZSBwcm9wZXJ0aWVzXG4gIGlzUHJldmlld09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgem9vbUxldmVsOiBudW1iZXIgPSAxO1xuICBtaW5ab29tOiBudW1iZXIgPSAwLjU7XG4gIG1heFpvb206IG51bWJlciA9IDU7XG4gIHBhblg6IG51bWJlciA9IDA7XG4gIHBhblk6IG51bWJlciA9IDA7XG5cbiAgLy8gVG91Y2ggYW5kIG1vdXNlIGludGVyYWN0aW9uIHByb3BlcnRpZXNcbiAgaXNEcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBsYXN0UGFuWDogbnVtYmVyID0gMDtcbiAgbGFzdFBhblk6IG51bWJlciA9IDA7XG4gIHN0YXJ0WDogbnVtYmVyID0gMDtcbiAgc3RhcnRZOiBudW1iZXIgPSAwO1xuXG4gIC8vIFRvdWNoIGdlc3R1cmUgcHJvcGVydGllc1xuICBpbml0aWFsRGlzdGFuY2U6IG51bWJlciA9IDA7XG4gIGluaXRpYWxab29tOiBudW1iZXIgPSAxO1xuICB0b3VjaGVzOiBUb3VjaFtdID0gW107XG5cbiAgLy8gTGFuZyBzZXJ2aWNlXG4gIGxhbmdTZXJ2aWNlID0gaW5qZWN0KExhbmdTZXJ2aWNlKTtcblxuICAvLyBNYXRoIGZvciB0ZW1wbGF0ZVxuICBNYXRoID0gTWF0aDtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gU2V0IGRlZmF1bHQgdmFsdWVzXG4gICAgaWYgKCF0aGlzLnByb3BzLmFsaWdubWVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hbGlnbm1lbnQgPSAnY2VudGVyJztcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLmNhcHRpb25TaXplKSB7XG4gICAgICB0aGlzLnByb3BzLmNhcHRpb25TaXplID0gJ21lZGl1bSc7XG4gICAgfVxuICAgIGlmICghdGhpcy5wcm9wcy5tb2RlKSB7XG4gICAgICB0aGlzLnByb3BzLm1vZGUgPSAnYm94JztcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUb1Zpc2libGUoKSB7XG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5hdmFpbGFibGUgPSB0cnVlO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICAvLyBQcmV2aWV3IG1vZGUgbWV0aG9kc1xuICBvcGVuUHJldmlldygpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucHJldmlld01vZGUpIHJldHVybjtcbiAgICB0aGlzLmlzUHJldmlld09wZW4gPSB0cnVlO1xuICAgIHRoaXMucmVzZXRab29tKCk7XG4gIH1cblxuICBjbG9zZVByZXZpZXcoKSB7XG4gICAgdGhpcy5pc1ByZXZpZXdPcGVuID0gZmFsc2U7XG4gIH1cblxuICAvLyBab29tIG1ldGhvZHNcbiAgem9vbUluKCkge1xuICAgIGlmICh0aGlzLnpvb21MZXZlbCA8IHRoaXMubWF4Wm9vbSkge1xuICAgICAgdGhpcy56b29tTGV2ZWwgPSBNYXRoLm1pbih0aGlzLnpvb21MZXZlbCAqIDEuMiwgdGhpcy5tYXhab29tKTtcbiAgICB9XG4gIH1cblxuICB6b29tT3V0KCkge1xuICAgIGlmICh0aGlzLnpvb21MZXZlbCA+IHRoaXMubWluWm9vbSkge1xuICAgICAgdGhpcy56b29tTGV2ZWwgPSBNYXRoLm1heCh0aGlzLnpvb21MZXZlbCAvIDEuMiwgdGhpcy5taW5ab29tKTtcbiAgICAgIC8vIFJlc2V0IHBhbiBpZiB6b29tZWQgb3V0IHRvIDF4IG9yIGxlc3NcbiAgICAgIGlmICh0aGlzLnpvb21MZXZlbCA8PSAxKSB7XG4gICAgICAgIHRoaXMucGFuWCA9IDA7XG4gICAgICAgIHRoaXMucGFuWSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRab29tKCkge1xuICAgIHRoaXMuem9vbUxldmVsID0gMTtcbiAgICB0aGlzLnBhblggPSAwO1xuICAgIHRoaXMucGFuWSA9IDA7XG4gIH1cblxuICAvLyBNb3VzZSBldmVudHNcbiAgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy56b29tTGV2ZWwgPD0gMSkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnBhblg7XG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5wYW5ZO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nIHx8IHRoaXMuem9vbUxldmVsIDw9IDEpIHJldHVybjtcblxuICAgIHRoaXMucGFuWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcbiAgICB0aGlzLnBhblkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5zdGFydFk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uTW91c2VVcChldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gVG91Y2ggZXZlbnRzIGZvciBtb2JpbGVcbiAgb25Ub3VjaFN0YXJ0KGV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnRvdWNoZXMgPSBBcnJheS5mcm9tKGV2ZW50LnRvdWNoZXMpO1xuXG4gICAgaWYgKHRoaXMudG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIFNpbmdsZSB0b3VjaCAtIHN0YXJ0IGRyYWdnaW5nXG4gICAgICBpZiAodGhpcy56b29tTGV2ZWwgPiAxKSB7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RhcnRYID0gdGhpcy50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLnBhblg7XG4gICAgICAgIHRoaXMuc3RhcnRZID0gdGhpcy50b3VjaGVzWzBdLmNsaWVudFkgLSB0aGlzLnBhblk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnRvdWNoZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBUd28gdG91Y2hlcyAtIHN0YXJ0IHBpbmNoIHpvb21cbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pbml0aWFsRGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKHRoaXMudG91Y2hlc1swXSwgdGhpcy50b3VjaGVzWzFdKTtcbiAgICAgIHRoaXMuaW5pdGlhbFpvb20gPSB0aGlzLnpvb21MZXZlbDtcbiAgICB9XG4gIH1cblxuICBvblRvdWNoTW92ZShldmVudDogVG91Y2hFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy50b3VjaGVzID0gQXJyYXkuZnJvbShldmVudC50b3VjaGVzKTtcblxuICAgIGlmICh0aGlzLnRvdWNoZXMubGVuZ3RoID09PSAxICYmIHRoaXMuaXNEcmFnZ2luZyAmJiB0aGlzLnpvb21MZXZlbCA+IDEpIHtcbiAgICAgIC8vIFNpbmdsZSB0b3VjaCAtIGRyYWdcbiAgICAgIHRoaXMucGFuWCA9IHRoaXMudG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgICB0aGlzLnBhblkgPSB0aGlzLnRvdWNoZXNbMF0uY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xuICAgIH0gZWxzZSBpZiAodGhpcy50b3VjaGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gVHdvIHRvdWNoZXMgLSBwaW5jaCB6b29tXG4gICAgICBjb25zdCBjdXJyZW50RGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKHRoaXMudG91Y2hlc1swXSwgdGhpcy50b3VjaGVzWzFdKTtcbiAgICAgIGNvbnN0IHNjYWxlID0gY3VycmVudERpc3RhbmNlIC8gdGhpcy5pbml0aWFsRGlzdGFuY2U7XG4gICAgICB0aGlzLnpvb21MZXZlbCA9IE1hdGgubWluKE1hdGgubWF4KHRoaXMuaW5pdGlhbFpvb20gKiBzY2FsZSwgdGhpcy5taW5ab29tKSwgdGhpcy5tYXhab29tKTtcblxuICAgICAgLy8gUmVzZXQgcGFuIGlmIHpvb21lZCBvdXQgdG8gMXggb3IgbGVzc1xuICAgICAgaWYgKHRoaXMuem9vbUxldmVsIDw9IDEpIHtcbiAgICAgICAgdGhpcy5wYW5YID0gMDtcbiAgICAgICAgdGhpcy5wYW5ZID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblRvdWNoRW5kKGV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy50b3VjaGVzID0gQXJyYXkuZnJvbShldmVudC50b3VjaGVzKTtcbiAgfVxuXG4gIC8vIE1vdXNlIHdoZWVsIHpvb21cbiAgb25XaGVlbChldmVudDogV2hlZWxFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBkZWx0YSA9IGV2ZW50LmRlbHRhWSA+IDAgPyAtMSA6IDE7XG4gICAgY29uc3Qgem9vbUZhY3RvciA9IDEgKyBkZWx0YSAqIDAuMTtcblxuICAgIHRoaXMuem9vbUxldmVsID0gTWF0aC5taW4oTWF0aC5tYXgodGhpcy56b29tTGV2ZWwgKiB6b29tRmFjdG9yLCB0aGlzLm1pblpvb20pLCB0aGlzLm1heFpvb20pO1xuXG4gICAgLy8gUmVzZXQgcGFuIGlmIHpvb21lZCBvdXQgdG8gMXggb3IgbGVzc1xuICAgIGlmICh0aGlzLnpvb21MZXZlbCA8PSAxKSB7XG4gICAgICB0aGlzLnBhblggPSAwO1xuICAgICAgdGhpcy5wYW5ZID0gMDtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kc1xuICBwcml2YXRlIGdldERpc3RhbmNlKHRvdWNoMTogVG91Y2gsIHRvdWNoMjogVG91Y2gpOiBudW1iZXIge1xuICAgIGNvbnN0IGR4ID0gdG91Y2gxLmNsaWVudFggLSB0b3VjaDIuY2xpZW50WDtcbiAgICBjb25zdCBkeSA9IHRvdWNoMS5jbGllbnRZIC0gdG91Y2gyLmNsaWVudFk7XG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gIH1cblxuICAvLyBLZXlib2FyZCBzaG9ydGN1dHNcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICghdGhpcy5pc1ByZXZpZXdPcGVuKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcrJzpcbiAgICAgIGNhc2UgJz0nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnpvb21JbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnpvb21PdXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yZXNldFpvb20oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL2ltYWdlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3BzIGZvciB2YWwtaW1hZ2UgY29tcG9uZW50LlxuICpcbiAqIEBwcm9wZXJ0eSBzcmMgLSBUaGUgaW1hZ2Ugc291cmNlIFVSTC5cbiAqIEBwcm9wZXJ0eSBhbHQgLSBUaGUgYWx0IHRleHQgZm9yIHRoZSBpbWFnZS5cbiAqIEBwcm9wZXJ0eSBtb2RlIC0gVGhlIGRpc3BsYXkgbW9kZSAoJ3JvdW5kZWQnIHwgJ2NpcmN1bGFyJyB8ICdib3gnKS5cbiAqIEBwcm9wZXJ0eSBzaGFkZWQgLSBXaGV0aGVyIHRoZSBpbWFnZSBoYXMgYSBzaGFkZWQgZWZmZWN0LlxuICogQHByb3BlcnR5IGJvcmRlcmVkIC0gV2hldGhlciB0aGUgaW1hZ2UgaGFzIGEgYm9yZGVyLlxuICogQHByb3BlcnR5IGxpbWl0ZWQgLSBXaGV0aGVyIHRoZSBpbWFnZSBpcyBsaW1pdGVkIGluIHNpemUgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSBkYXJrIC0gV2hldGhlciB0aGUgaW1hZ2UgdXNlcyBhIGRhcmsgc3R5bGUgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSBzaXplIC0gVGhlIGltYWdlIHNpemUgKCdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAneGxhcmdlJykuXG4gKiBAcHJvcGVydHkgd2lkdGggLSBUaGUgaW1hZ2Ugd2lkdGggaW4gcHggKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSBoZWlnaHQgLSBUaGUgaW1hZ2UgaGVpZ2h0IGluIHB4IChvcHRpb25hbCkuXG4gKiBAcHJvcGVydHkgYWxpZ25tZW50IC0gVGhlIGFsaWdubWVudCBvZiB0aGUgaW1hZ2UgY29udGFpbmVyICgnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpLlxuICogQHByb3BlcnR5IGNhcHRpb24gLSBPcHRpb25hbCBjYXB0aW9uIHRleHQgYmVsb3cgdGhlIGltYWdlLlxuICogQHByb3BlcnR5IGNhcHRpb25TaXplIC0gU2l6ZSBvZiB0aGUgY2FwdGlvbiB0ZXh0ICgnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnKS5cbiAqIEBwcm9wZXJ0eSBjb250YWluZXJDbGFzcyAtIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlTWV0YWRhdGEgPSB7XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgbW9kZTogJ3JvdW5kZWQnIHwgJ2NpcmN1bGFyJyB8ICdib3gnO1xuICBzaGFkZWQ6IGJvb2xlYW47XG4gIGJvcmRlcmVkOiBib29sZWFuO1xuICBsaW1pdGVkPzogYm9vbGVhbjtcbiAgZGFyaz86IGJvb2xlYW47XG4gIHNpemU6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAneGxhcmdlJztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcbiAgYWxpZ25tZW50PzogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBjYXB0aW9uPzogc3RyaW5nO1xuICBjYXB0aW9uU2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIGNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuICBmbGV4PzogYm9vbGVhbjsgLy8gT3B0aW9uYWwgcHJvcGVydHkgdG8gY29udHJvbCBmbGV4IGRpc3BsYXlcbn07XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2F0b21zL2ltYWdlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByb3BzIGZvciB2YWwtaW1hZ2UgY29tcG9uZW50LlxuICpcbiAqIEBwcm9wZXJ0eSBzcmMgLSBUaGUgaW1hZ2Ugc291cmNlIFVSTC5cbiAqIEBwcm9wZXJ0eSBhbHQgLSBUaGUgYWx0IHRleHQgZm9yIHRoZSBpbWFnZS5cbiAqIEBwcm9wZXJ0eSBtb2RlIC0gVGhlIGRpc3BsYXkgbW9kZSAoJ3JvdW5kZWQnIHwgJ2NpcmN1bGFyJyB8ICdib3gnKS5cbiAqIEBwcm9wZXJ0eSBzaGFkZWQgLSBXaGV0aGVyIHRoZSBpbWFnZSBoYXMgYSBzaGFkZWQgZWZmZWN0LlxuICogQHByb3BlcnR5IGJvcmRlcmVkIC0gV2hldGhlciB0aGUgaW1hZ2UgaGFzIGEgYm9yZGVyLlxuICogQHByb3BlcnR5IGxpbWl0ZWQgLSBXaGV0aGVyIHRoZSBpbWFnZSBpcyBsaW1pdGVkIGluIHNpemUgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSBkYXJrIC0gV2hldGhlciB0aGUgaW1hZ2UgdXNlcyBhIGRhcmsgc3R5bGUgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSBzaXplIC0gVGhlIGltYWdlIHNpemUgKCdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAneGxhcmdlJykuXG4gKiBAcHJvcGVydHkgd2lkdGggLSBUaGUgaW1hZ2Ugd2lkdGggaW4gcHggKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSBoZWlnaHQgLSBUaGUgaW1hZ2UgaGVpZ2h0IGluIHB4IChvcHRpb25hbCkuXG4gKiBAcHJvcGVydHkgYWxpZ25tZW50IC0gVGhlIGFsaWdubWVudCBvZiB0aGUgaW1hZ2UgY29udGFpbmVyICgnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpLlxuICogQHByb3BlcnR5IGNhcHRpb24gLSBPcHRpb25hbCBjYXB0aW9uIHRleHQgYmVsb3cgdGhlIGltYWdlLlxuICogQHByb3BlcnR5IGNhcHRpb25TaXplIC0gU2l6ZSBvZiB0aGUgY2FwdGlvbiB0ZXh0ICgnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnKS5cbiAqIEBwcm9wZXJ0eSBjb250YWluZXJDbGFzcyAtIEFkZGl0aW9uYWwgQ1NTIGNsYXNzZXMgZm9yIHRoZSBjb250YWluZXIuXG4gKiBAcHJvcGVydHkgcHJldmlld01vZGUgLSBFbmFibGUgZnVsbC1zY3JlZW4gcHJldmlldyB3aXRoIHpvb20gY2FwYWJpbGl0aWVzIChvcHRpb25hbCkuXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlTWV0YWRhdGEgPSB7XG4gIHNyYzogc3RyaW5nO1xuICBhbHQ6IHN0cmluZztcbiAgbW9kZTogJ3JvdW5kZWQnIHwgJ2NpcmN1bGFyJyB8ICdib3gnO1xuICBzaGFkZWQ6IGJvb2xlYW47XG4gIGJvcmRlcmVkOiBib29sZWFuO1xuICBsaW1pdGVkPzogYm9vbGVhbjtcbiAgZGFyaz86IGJvb2xlYW47XG4gIHNpemU6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZScgfCAneGxhcmdlJztcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcbiAgYWxpZ25tZW50PzogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBjYXB0aW9uPzogc3RyaW5nO1xuICBjYXB0aW9uU2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIGNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuICBmbGV4PzogYm9vbGVhbjsgLy8gT3B0aW9uYWwgcHJvcGVydHkgdG8gY29udHJvbCBmbGV4IGRpc3BsYXlcbiAgcHJldmlld01vZGU/OiBib29sZWFuOyAvLyBFbmFibGUgZnVsbC1zY3JlZW4gaW1hZ2UgcHJldmlldyB3aXRoIHpvb21cbn07XG4iXX0=