@sbb-esta/lyne-elements-dev 4.7.0-dev.1773743316 → 4.7.0-dev.1773744201

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.
@@ -0,0 +1,525 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { css, html, nothing } from "lit";
3
+ import { property } from "lit/decorators.js";
4
+ import { SbbElement } from "./core/base-elements.js";
5
+ import { isLean, isZeroAnimationDuration } from "./core/dom.js";
6
+ import { SbbReadonlyMixin } from "./core/mixins.js";
7
+ import { boxSizingStyles } from "./core/styles.js";
8
+ import { SbbLanguageController } from "./core/controllers.js";
9
+ import { i18nCloseNotification } from "./core/i18n.js";
10
+ import { SbbIconNameMixin } from "./icon.js";
11
+ import "./divider.js";
12
+ import { ResizeController } from "@lit-labs/observers/resize-controller.js";
13
+ import "./button/secondary-button.js";
14
+ //#region src/elements/notification/notification.scss?lit&inline
15
+ var notification_default = css`:host {
16
+ --sbb-notification-border: var(--sbb-notification-border-width) solid
17
+ var(--sbb-notification-type-color);
18
+ --sbb-notification-background-color: color-mix(in srgb, var(--sbb-notification-type-color) 5%, white);
19
+ --sbb-notification-background-color: light-dark(
20
+ color-mix(in srgb, var(--sbb-notification-type-color) 5%, white),
21
+ color-mix(in srgb, var(--sbb-notification-type-color) 35%, white)
22
+ );
23
+ --sbb-notification-icon-color: var(--sbb-notification-type-color);
24
+ --sbb-notification-border-radius-start: calc(var(--sbb-notification-base-border-radius) / 2);
25
+ --sbb-notification-animation-duration: var(
26
+ --sbb-disable-animation-duration,
27
+ var(--sbb-animation-duration-4x)
28
+ );
29
+ --_sbb-notification-icon-authoritative-font-size: 1em;
30
+ --_sbb-notification-icon-authoritative-line-height: var(--sbb-typo-line-height-text);
31
+ --_sbb-notification-inset-inline-start: calc(
32
+ var(--sbb-notification-base-border-radius) - var(--sbb-notification-border-width)
33
+ );
34
+ --sbb-focus-outline-color: var(--sbb-focus-outline-color-default);
35
+ display: block;
36
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
37
+ font-size: var(--sbb-notification-font-size);
38
+ }
39
+
40
+ :host(:is(:state(state-opening),[state--state-opening]):not([animation=open], [animation=all])) {
41
+ --sbb-disable-animation-duration: 0s;
42
+ }
43
+
44
+ :host(:is(:state(state-closing),[state--state-closing]):not([animation=close], [animation=all])) {
45
+ --sbb-disable-animation-duration: 0s;
46
+ }
47
+
48
+ :host(:is(:state(resize-disable-animation),[state--resize-disable-animation])) {
49
+ --sbb-disable-animation-duration: 0s;
50
+ }
51
+
52
+ :host(:is(:state(slotted-title),[state--slotted-title])) {
53
+ --_sbb-notification-icon-authoritative-font-size: var(--sbb-heading-font-size-5);
54
+ --_sbb-notification-icon-authoritative-line-height: var(--sbb-typo-line-height-heading);
55
+ }
56
+
57
+ :host(:is(:state(slotted-title),[state--slotted-title])[size=s]) {
58
+ --_sbb-notification-icon-authoritative-font-size: var(--sbb-heading-font-size-6);
59
+ --_sbb-notification-icon-authoritative-line-height: var(--sbb-typo-line-height-text);
60
+ }
61
+
62
+ :host([size=m]) {
63
+ --sbb-notification-font-size: var(--sbb-text-font-size-s);
64
+ --sbb-notification-padding-block: var(--sbb-spacing-responsive-xxs);
65
+ --sbb-notification-padding-inline: var(--sbb-spacing-responsive-xs);
66
+ --sbb-notification-content-padding-inline: var(--sbb-spacing-responsive-xxxs)
67
+ var(--sbb-spacing-responsive-xs);
68
+ }
69
+
70
+ :host([size=s]) {
71
+ --sbb-notification-font-size: var(--sbb-text-font-size-xs);
72
+ --sbb-notification-padding-block: var(--sbb-spacing-responsive-xxxs);
73
+ --sbb-notification-padding-inline: var(--sbb-spacing-responsive-xxs)
74
+ var(--sbb-spacing-responsive-xxxs);
75
+ --sbb-notification-content-padding-inline: var(--sbb-spacing-responsive-xxxs)
76
+ var(--sbb-spacing-responsive-xxs);
77
+ }
78
+ @media (min-width: calc(37.5rem)) {
79
+ :host([size=s]) {
80
+ --sbb-notification-padding-inline: var(--sbb-spacing-responsive-xxs);
81
+ }
82
+ }
83
+
84
+ :host(:is(:not([type]), [type=info])) {
85
+ --sbb-notification-type-color: var(--sbb-color-smoke);
86
+ --sbb-notification-icon-color: var(--sbb-notification-color);
87
+ --sbb-notification-divider-opacity-light: 20%;
88
+ --sbb-notification-divider-opacity-dark: 20%;
89
+ }
90
+
91
+ :host([type=note]) {
92
+ --sbb-notification-type-color: var(--sbb-color-sky);
93
+ --sbb-notification-divider-opacity-light: 20%;
94
+ --sbb-notification-divider-opacity-dark: 20%;
95
+ }
96
+
97
+ :host([type=success]) {
98
+ --sbb-notification-type-color: var(--sbb-color-success);
99
+ --sbb-notification-divider-opacity-light: 15%;
100
+ --sbb-notification-divider-opacity-dark: 30%;
101
+ }
102
+
103
+ :host([type=warn]) {
104
+ --sbb-notification-type-color: var(--sbb-color-warning);
105
+ --sbb-notification-icon-color: var(--sbb-notification-color);
106
+ --sbb-notification-divider-opacity-light: 25%;
107
+ --sbb-notification-divider-opacity-dark: 40%;
108
+ }
109
+
110
+ :host([type=error]) {
111
+ --sbb-notification-type-color: var(--sbb-color-error);
112
+ --sbb-notification-divider-opacity-light: 10%;
113
+ --sbb-notification-divider-opacity-dark: 25%;
114
+ }
115
+
116
+ .sbb-notification__wrapper {
117
+ position: relative;
118
+ inset-inline-start: var(--_sbb-notification-inset-inline-start);
119
+ width: calc(100% - var(--_sbb-notification-inset-inline-start));
120
+ border: var(--sbb-notification-border);
121
+ border-radius: var(--sbb-notification-border-radius-start) var(--sbb-notification-base-border-radius) var(--sbb-notification-base-border-radius) var(--sbb-notification-border-radius-start);
122
+ opacity: 0;
123
+ max-height: 0;
124
+ margin: 0;
125
+ }
126
+ .sbb-notification__wrapper::before {
127
+ content: "";
128
+ position: absolute;
129
+ inset: calc(var(--sbb-notification-border-width) * -1) var(--sbb-notification-base-border-radius) calc(var(--sbb-notification-border-width) * -1) calc(var(--sbb-notification-base-border-radius) * -1);
130
+ background-color: var(--sbb-notification-type-color);
131
+ border: var(--sbb-notification-border);
132
+ border-radius: var(--sbb-notification-base-border-radius);
133
+ }
134
+ :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) .sbb-notification__wrapper {
135
+ opacity: 1;
136
+ max-height: calc(var(--sbb-notification-height) + var(--sbb-notification-border-width) * 2);
137
+ margin: var(--sbb-notification-margin, 0);
138
+ }
139
+ :host(:is(:state(state-opening),[state--state-opening])) .sbb-notification__wrapper {
140
+ animation-name: open;
141
+ animation-fill-mode: forwards;
142
+ animation-duration: var(--sbb-notification-animation-duration);
143
+ animation-timing-function: var(--sbb-notification-timing-function);
144
+ }
145
+ :host(:is(:state(state-closing),[state--state-closing])) .sbb-notification__wrapper {
146
+ animation-name: close, close-height;
147
+ animation-fill-mode: forwards;
148
+ animation-duration: var(--sbb-notification-animation-duration);
149
+ animation-timing-function: var(--sbb-notification-timing-function);
150
+ animation-delay: 0s, var(--sbb-disable-animation-duration, var(--sbb-animation-duration-2x));
151
+ }
152
+
153
+ .sbb-notification {
154
+ position: relative;
155
+ display: grid;
156
+ grid-template-columns: 1fr auto;
157
+ align-items: center;
158
+ padding-block: var(--sbb-notification-padding-block);
159
+ padding-inline: var(--sbb-notification-padding-inline);
160
+ color: var(--sbb-notification-color);
161
+ border-radius: var(--sbb-notification-border-radius-start) calc(var(--sbb-notification-base-border-radius) - var(--sbb-notification-border-width)) calc(var(--sbb-notification-base-border-radius) - var(--sbb-notification-border-width)) var(--sbb-notification-border-radius-start);
162
+ overflow: hidden;
163
+ background-color: var(--sbb-notification-background-color);
164
+ }
165
+ @media (min-width: calc(37.5rem)) {
166
+ .sbb-notification {
167
+ grid-template-columns: auto 1fr auto auto;
168
+ }
169
+ }
170
+
171
+ .sbb-notification__icon,
172
+ ::slotted(sbb-icon) {
173
+ color: var(--sbb-notification-icon-color);
174
+ align-self: var(--sbb-notification-icon-align-self);
175
+ --sbb-icon-svg-width: var(--sbb-notification-icon-size);
176
+ }
177
+ @media (min-width: calc(37.5rem)) {
178
+ .sbb-notification__icon,
179
+ ::slotted(sbb-icon) {
180
+ margin-block-start: max(0rem, (var(--_sbb-notification-icon-authoritative-font-size) * var(--_sbb-notification-icon-authoritative-line-height) - var(--sbb-size-icon-ui-small)) / 2);
181
+ }
182
+ }
183
+
184
+ .sbb-notification__content {
185
+ color-scheme: only light;
186
+ order: 3;
187
+ grid-area: 2/1/3/3;
188
+ margin-block-start: var(--sbb-notification-content-margin-block-start);
189
+ }
190
+ @media (min-width: calc(37.5rem)) {
191
+ .sbb-notification__content {
192
+ order: initial;
193
+ grid-area: initial;
194
+ margin-block-start: 0;
195
+ padding-inline: var(--sbb-notification-content-padding-inline);
196
+ }
197
+ }
198
+
199
+ .sbb-notification__text {
200
+ display: inline;
201
+ margin: 0;
202
+ padding: 0;
203
+ }
204
+
205
+ .sbb-notification__divider {
206
+ --sbb-divider-color: color-mix(
207
+ in srgb,
208
+ var(--sbb-notification-type-color) var(--sbb-notification-divider-opacity-light),
209
+ var(--sbb-notification-background-color)
210
+ );
211
+ --sbb-divider-color: light-dark(
212
+ color-mix(
213
+ in srgb,
214
+ var(--sbb-notification-type-color) var(--sbb-notification-divider-opacity-light),
215
+ var(--sbb-notification-background-color)
216
+ ),
217
+ color-mix(
218
+ in srgb,
219
+ var(--sbb-notification-type-color) var(--sbb-notification-divider-opacity-dark),
220
+ var(--sbb-notification-background-color)
221
+ )
222
+ );
223
+ display: none;
224
+ position: relative;
225
+ inset-inline-start: var(--sbb-border-width-1x);
226
+ }
227
+ @media (min-width: calc(37.5rem)) {
228
+ .sbb-notification__divider {
229
+ display: block;
230
+ margin-inline-end: var(--sbb-notification-close-wrapper-gap);
231
+ height: calc(100% - var(--sbb-spacing-fixed-1x) * 2);
232
+ }
233
+ }
234
+
235
+ @keyframes open {
236
+ from {
237
+ opacity: 0;
238
+ max-height: 0;
239
+ margin: 0;
240
+ }
241
+ to {
242
+ opacity: 1;
243
+ max-height: calc(var(--sbb-notification-height) + var(--sbb-notification-border-width) * 2);
244
+ margin: var(--sbb-notification-margin, 0);
245
+ }
246
+ }
247
+ @keyframes close {
248
+ from {
249
+ opacity: 1;
250
+ margin: var(--sbb-notification-margin, 0);
251
+ }
252
+ to {
253
+ opacity: 0;
254
+ margin: 0;
255
+ }
256
+ }
257
+ @keyframes close-height {
258
+ from {
259
+ max-height: calc(var(--sbb-notification-height) + var(--sbb-notification-border-width) * 2);
260
+ }
261
+ to {
262
+ max-height: 0;
263
+ }
264
+ }
265
+ ::slotted(sbb-title) {
266
+ margin: 0;
267
+ }`;
268
+ //#endregion
269
+ //#region src/elements/notification/notification.component.ts
270
+ var notificationTypes = new Map([
271
+ ["info", "circle-information-small"],
272
+ ["note", "circle-information-small"],
273
+ ["success", "circle-tick-small"],
274
+ ["warn", "circle-exclamation-point-small"],
275
+ ["error", "circle-cross-small"]
276
+ ]);
277
+ var DEBOUNCE_TIME = 150;
278
+ /**
279
+ * It displays messages which require a user's attention without interrupting its tasks.
280
+ *
281
+ * @slot - Use the unnamed slot to add content to the `sbb-notification`. Content should consist of an optional `sbb-title` element and text content.
282
+ * @slot title - Slot for the title. For the standard `sbb-title` element, the slot is automatically assigned when slotted in the unnamed slot.
283
+ * @slot icon - Use this slot to display a custom icon by providing an `sbb-icon` component.
284
+ * @cssprop [--sbb-notification-margin=0] - Can be used to modify the margin in order to get a smoother animation.
285
+ * See style section for more information.
286
+ */
287
+ var SbbNotificationElement = (() => {
288
+ let _classSuper = SbbIconNameMixin(SbbReadonlyMixin(SbbElement));
289
+ let _type_decorators;
290
+ let _type_initializers = [];
291
+ let _type_extraInitializers = [];
292
+ let _size_decorators;
293
+ let _size_initializers = [];
294
+ let _size_extraInitializers = [];
295
+ let _animation_decorators;
296
+ let _animation_initializers = [];
297
+ let _animation_extraInitializers = [];
298
+ return class SbbNotificationElement extends _classSuper {
299
+ static {
300
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
301
+ _type_decorators = [property({ reflect: true })];
302
+ _size_decorators = [property({ reflect: true })];
303
+ _animation_decorators = [property({ reflect: true })];
304
+ __esDecorate(this, null, _type_decorators, {
305
+ kind: "accessor",
306
+ name: "type",
307
+ static: false,
308
+ private: false,
309
+ access: {
310
+ has: (obj) => "type" in obj,
311
+ get: (obj) => obj.type,
312
+ set: (obj, value) => {
313
+ obj.type = value;
314
+ }
315
+ },
316
+ metadata: _metadata
317
+ }, _type_initializers, _type_extraInitializers);
318
+ __esDecorate(this, null, _size_decorators, {
319
+ kind: "accessor",
320
+ name: "size",
321
+ static: false,
322
+ private: false,
323
+ access: {
324
+ has: (obj) => "size" in obj,
325
+ get: (obj) => obj.size,
326
+ set: (obj, value) => {
327
+ obj.size = value;
328
+ }
329
+ },
330
+ metadata: _metadata
331
+ }, _size_initializers, _size_extraInitializers);
332
+ __esDecorate(this, null, _animation_decorators, {
333
+ kind: "accessor",
334
+ name: "animation",
335
+ static: false,
336
+ private: false,
337
+ access: {
338
+ has: (obj) => "animation" in obj,
339
+ get: (obj) => obj.animation,
340
+ set: (obj, value) => {
341
+ obj.animation = value;
342
+ }
343
+ },
344
+ metadata: _metadata
345
+ }, _animation_initializers, _animation_extraInitializers);
346
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
347
+ enumerable: true,
348
+ configurable: true,
349
+ writable: true,
350
+ value: _metadata
351
+ });
352
+ }
353
+ static {
354
+ this.elementName = "sbb-notification";
355
+ }
356
+ static {
357
+ this.styles = [boxSizingStyles, notification_default];
358
+ }
359
+ static {
360
+ this.events = {
361
+ beforeopen: "beforeopen",
362
+ open: "open",
363
+ beforeclose: "beforeclose",
364
+ close: "close"
365
+ };
366
+ }
367
+ #type_accessor_storage;
368
+ /** The type of the notification. */
369
+ get type() {
370
+ return this.#type_accessor_storage;
371
+ }
372
+ set type(value) {
373
+ this.#type_accessor_storage = value;
374
+ }
375
+ #size_accessor_storage;
376
+ /**
377
+ * Size variant, either s or m.
378
+ * @default 'm' / 's' (lean)
379
+ */
380
+ get size() {
381
+ return this.#size_accessor_storage;
382
+ }
383
+ set size(value) {
384
+ this.#size_accessor_storage = value;
385
+ }
386
+ #animation_accessor_storage;
387
+ /** The enabled animations. */
388
+ get animation() {
389
+ return this.#animation_accessor_storage;
390
+ }
391
+ set animation(value) {
392
+ this.#animation_accessor_storage = value;
393
+ }
394
+ /** The state of the component. */
395
+ set _state(state) {
396
+ if (this._stateInternal) this.internals.states.delete(`state-${this._stateInternal}`);
397
+ this._stateInternal = state;
398
+ if (this._stateInternal) this.internals.states.add(`state-${this._stateInternal}`);
399
+ }
400
+ get _state() {
401
+ return this._stateInternal;
402
+ }
403
+ constructor() {
404
+ super();
405
+ this.#type_accessor_storage = __runInitializers(this, _type_initializers, "info");
406
+ this.#size_accessor_storage = (__runInitializers(this, _type_extraInitializers), __runInitializers(this, _size_initializers, isLean() ? "s" : "m"));
407
+ this.#animation_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _animation_initializers, "all"));
408
+ this._stateInternal = __runInitializers(this, _animation_extraInitializers);
409
+ this._resizeObserverTimeout = null;
410
+ this._language = new SbbLanguageController(this);
411
+ this._notificationResizeObserver = new ResizeController(this, {
412
+ target: null,
413
+ skipInitial: true,
414
+ callback: () => this._onNotificationResize()
415
+ });
416
+ this._state = "closed";
417
+ }
418
+ willUpdate(changedProperties) {
419
+ super.willUpdate(changedProperties);
420
+ if (changedProperties.has("size")) this._configureTitle();
421
+ }
422
+ _open() {
423
+ if (this._state === "closed") {
424
+ this._state = "opening";
425
+ /** Emits when the opening animation starts. */
426
+ this.dispatchEvent(new Event("beforeopen"));
427
+ if (this._isZeroAnimationDuration()) this._handleOpening();
428
+ }
429
+ }
430
+ close() {
431
+ if (this._state === "opened" && this._dispatchBeforeCloseEvent()) {
432
+ this._state = "closing";
433
+ if (this._isZeroAnimationDuration()) this._handleClosing();
434
+ }
435
+ }
436
+ _dispatchBeforeCloseEvent() {
437
+ /** Emits when the closing animation starts. Can be canceled to prevent the component from closing. */
438
+ return this.dispatchEvent(new Event("beforeclose", { cancelable: true }));
439
+ }
440
+ firstUpdated(changedProperties) {
441
+ super.firstUpdated(changedProperties);
442
+ this._notificationElement = this.shadowRoot?.querySelector(".sbb-notification__wrapper");
443
+ this.updateComplete.then(() => {
444
+ this._setNotificationHeight();
445
+ this._open();
446
+ });
447
+ }
448
+ _isZeroAnimationDuration() {
449
+ return isZeroAnimationDuration(this, "--sbb-notification-animation-duration");
450
+ }
451
+ _setNotificationHeight() {
452
+ if (!this._notificationElement?.scrollHeight) return;
453
+ const notificationHeight = `${this._notificationElement.scrollHeight}px`;
454
+ this.style.setProperty("--sbb-notification-height", notificationHeight);
455
+ }
456
+ _onNotificationResize() {
457
+ if (this._state !== "opened") return;
458
+ if (this._resizeObserverTimeout) clearTimeout(this._resizeObserverTimeout);
459
+ this.internals.states.add("resize-disable-animation");
460
+ this._resizeObserverTimeout = setTimeout(() => this.internals.states.delete("resize-disable-animation"), DEBOUNCE_TIME);
461
+ setTimeout(() => this._setNotificationHeight());
462
+ }
463
+ _onNotificationAnimationEnd(event) {
464
+ if (this._state === "opening" && event.animationName === "open") this._handleOpening();
465
+ if (this._state === "closing" && event.animationName === "close-height") this._handleClosing();
466
+ }
467
+ _handleOpening() {
468
+ this._state = "opened";
469
+ this._notificationResizeObserver.observe(this._notificationElement);
470
+ /** Emits when the opening animation ends. */
471
+ this.dispatchEvent(new Event("open"));
472
+ }
473
+ _handleClosing() {
474
+ this._state = "closed";
475
+ /** Emits when the closing animation ends. */
476
+ this.dispatchEvent(new Event("close"));
477
+ this._notificationResizeObserver.unobserve(this._notificationElement);
478
+ setTimeout(() => this.remove());
479
+ }
480
+ _handleSlotchange() {
481
+ const title = Array.from(this.children).find((el) => el.localName === "sbb-title");
482
+ if (title) title.slot = "title";
483
+ }
484
+ _configureTitle() {
485
+ const title = this.querySelector?.("sbb-title");
486
+ if (title) {
487
+ customElements.upgrade(title);
488
+ title.visualLevel = this.size === "m" ? "5" : "6";
489
+ }
490
+ }
491
+ renderIconName() {
492
+ return super.renderIconName() || notificationTypes.get(this.type);
493
+ }
494
+ render() {
495
+ return html`
496
+ <div class="sbb-notification__wrapper" @animationend=${this._onNotificationAnimationEnd}>
497
+ <div class="sbb-notification">
498
+ ${this.renderIconSlot("sbb-notification__icon")}
499
+ <span class="sbb-notification__content">
500
+ <slot name="title" @slotchange=${this._configureTitle}></slot>
501
+ <p class="sbb-notification__text">
502
+ <slot @slotchange=${this._handleSlotchange}></slot>
503
+ </p>
504
+ </span>
505
+
506
+ ${!this.readOnly ? html`
507
+ <sbb-divider class="sbb-notification__divider" orientation="vertical"></sbb-divider>
508
+ <sbb-secondary-button
509
+ size=${this.size}
510
+ icon-name="cross-small"
511
+ @click=${() => this.close()}
512
+ aria-label=${i18nCloseNotification[this._language.current]}
513
+ class="sbb-notification__close"
514
+ ></sbb-secondary-button>
515
+ ` : nothing}
516
+ </div>
517
+ </div>
518
+ `;
519
+ }
520
+ };
521
+ })();
522
+ //#endregion
523
+ export { SbbNotificationElement as t };
524
+
525
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmNvbXBvbmVudC1CVDNaUWhVSS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5zY3NzP2xpdCZpbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuLy8gT3Blbi9DbG9zZSBhbmltYXRpb24gdmFyc1xuJG9wZW4tYW5pbS1tYXJnaW4tZnJvbTogMDtcbiRvcGVuLWFuaW0tbWFyZ2luLXRvOiB2YXIoLS1zYmItbm90aWZpY2F0aW9uLW1hcmdpbiwgMCk7XG4kb3Blbi1hbmltLW9wYWNpdHktZnJvbTogMDtcbiRvcGVuLWFuaW0tb3BhY2l0eS10bzogMTtcbiRvcGVuLWFuaW0taGVpZ2h0LWZyb206IDA7XG4kb3Blbi1hbmltLWhlaWdodC10bzogY2FsYyhcbiAgdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1oZWlnaHQpICsgKHZhcigtLXNiYi1ub3RpZmljYXRpb24tYm9yZGVyLXdpZHRoKSAqIDIpXG4pO1xuXG46aG9zdCB7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1ib3JkZXI6IHZhcigtLXNiYi1ub3RpZmljYXRpb24tYm9yZGVyLXdpZHRoKSBzb2xpZFxuICAgIHZhcigtLXNiYi1ub3RpZmljYXRpb24tdHlwZS1jb2xvcik7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1iYWNrZ3JvdW5kLWNvbG9yOiBsaWdodC1kYXJrKFxuICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zYmItbm90aWZpY2F0aW9uLXR5cGUtY29sb3IpIDUlLCB3aGl0ZSksXG4gICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXNiYi1ub3RpZmljYXRpb24tdHlwZS1jb2xvcikgMzUlLCB3aGl0ZSlcbiAgKTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLWljb24tY29sb3I6IHZhcigtLXNiYi1ub3RpZmljYXRpb24tdHlwZS1jb2xvcik7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1ib3JkZXItcmFkaXVzLXN0YXJ0OiBjYWxjKHZhcigtLXNiYi1ub3RpZmljYXRpb24tYmFzZS1ib3JkZXItcmFkaXVzKSAvIDIpO1xuICAtLXNiYi1ub3RpZmljYXRpb24tYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoXG4gICAgLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sXG4gICAgdmFyKC0tc2JiLWFuaW1hdGlvbi1kdXJhdGlvbi00eClcbiAgKTtcbiAgLS1fc2JiLW5vdGlmaWNhdGlvbi1pY29uLWF1dGhvcml0YXRpdmUtZm9udC1zaXplOiAxZW07XG4gIC0tX3NiYi1ub3RpZmljYXRpb24taWNvbi1hdXRob3JpdGF0aXZlLWxpbmUtaGVpZ2h0OiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC10ZXh0KTtcbiAgLS1fc2JiLW5vdGlmaWNhdGlvbi1pbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoXG4gICAgdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1iYXNlLWJvcmRlci1yYWRpdXMpIC0gdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1ib3JkZXItd2lkdGgpXG4gICk7XG5cbiAgLy8gQXMgdGhlIG5vdGlmaWNhdGlvbiBoYXMgYWx3YXlzIGEgbGlnaHQgYmFja2dyb3VuZCwgd2UgaGF2ZSB0byBmaXggdGhlIGZvY3VzIG91dGxpbmUgY29sb3JcbiAgLy8gdG8gZGVmYXVsdCBjb2xvciBmb3IgY2FzZXMgd2hlcmUgdGhlIG5vdGlmaWNhdGlvbiBpcyB1c2VkIGluIGEgbmVnYXRpdmUgY29udGV4dC5cbiAgLS1zYmItZm9jdXMtb3V0bGluZS1jb2xvcjogdmFyKC0tc2JiLWZvY3VzLW91dGxpbmUtY29sb3ItZGVmYXVsdCk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcbiAgZm9udC1zaXplOiB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWZvbnQtc2l6ZSk7XG59XG5cbi8vIEJ5IGRlZmF1bHQsIHRoZSBvcGVuIGFuaW1hdGlvbiBpcyBkaXNhYmxlZFxuOmhvc3QoOnN0YXRlKHN0YXRlLW9wZW5pbmcpOm5vdChbYW5pbWF0aW9uPSdvcGVuJ10sIFthbmltYXRpb249J2FsbCddKSkge1xuICBAaW5jbHVkZSBzYmIuZGlzYWJsZS1hbmltYXRpb247XG59XG5cbjpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zaW5nKTpub3QoW2FuaW1hdGlvbj0nY2xvc2UnXSwgW2FuaW1hdGlvbj0nYWxsJ10pKSB7XG4gIEBpbmNsdWRlIHNiYi5kaXNhYmxlLWFuaW1hdGlvbjtcbn1cblxuOmhvc3QoOnN0YXRlKHJlc2l6ZS1kaXNhYmxlLWFuaW1hdGlvbikpIHtcbiAgQGluY2x1ZGUgc2JiLmRpc2FibGUtYW5pbWF0aW9uO1xufVxuXG46aG9zdCg6c3RhdGUoc2xvdHRlZC10aXRsZSkpIHtcbiAgLS1fc2JiLW5vdGlmaWNhdGlvbi1pY29uLWF1dGhvcml0YXRpdmUtZm9udC1zaXplOiB2YXIoLS1zYmItaGVhZGluZy1mb250LXNpemUtNSk7XG4gIC0tX3NiYi1ub3RpZmljYXRpb24taWNvbi1hdXRob3JpdGF0aXZlLWxpbmUtaGVpZ2h0OiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC1oZWFkaW5nKTtcbn1cblxuOmhvc3QoOnN0YXRlKHNsb3R0ZWQtdGl0bGUpW3NpemU9J3MnXSkge1xuICAtLV9zYmItbm90aWZpY2F0aW9uLWljb24tYXV0aG9yaXRhdGl2ZS1mb250LXNpemU6IHZhcigtLXNiYi1oZWFkaW5nLWZvbnQtc2l6ZS02KTtcbiAgLS1fc2JiLW5vdGlmaWNhdGlvbi1pY29uLWF1dGhvcml0YXRpdmUtbGluZS1oZWlnaHQ6IHZhcigtLXNiYi10eXBvLWxpbmUtaGVpZ2h0LXRleHQpO1xufVxuXG46aG9zdChbc2l6ZT0nbSddKSB7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1mb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS1zKTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLXBhZGRpbmctYmxvY2s6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUteHhzKTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLXBhZGRpbmctaW5saW5lOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXhzKTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLWNvbnRlbnQtcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUteHh4cylcbiAgICB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXhzKTtcbn1cblxuOmhvc3QoW3NpemU9J3MnXSkge1xuICAtLXNiYi1ub3RpZmljYXRpb24tZm9udC1zaXplOiB2YXIoLS1zYmItdGV4dC1mb250LXNpemUteHMpO1xuICAtLXNiYi1ub3RpZmljYXRpb24tcGFkZGluZy1ibG9jazogdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS14eHhzKTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLXBhZGRpbmctaW5saW5lOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXh4cylcbiAgICB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXh4eHMpO1xuICAtLXNiYi1ub3RpZmljYXRpb24tY29udGVudC1wYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS14eHhzKVxuICAgIHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUteHhzKTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IHNtYWxsKSB7XG4gICAgLS1zYmItbm90aWZpY2F0aW9uLXBhZGRpbmctaW5saW5lOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXh4cyk7XG4gIH1cbn1cblxuLy8gVHlwZXNcbjpob3N0KDppcyg6bm90KFt0eXBlXSksIFt0eXBlPSdpbmZvJ10pKSB7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi10eXBlLWNvbG9yOiB2YXIoLS1zYmItY29sb3Itc21va2UpO1xuICAtLXNiYi1ub3RpZmljYXRpb24taWNvbi1jb2xvcjogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1jb2xvcik7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1kaXZpZGVyLW9wYWNpdHktbGlnaHQ6IDIwJTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLWRpdmlkZXItb3BhY2l0eS1kYXJrOiAyMCU7XG59XG5cbjpob3N0KFt0eXBlPSdub3RlJ10pIHtcbiAgLS1zYmItbm90aWZpY2F0aW9uLXR5cGUtY29sb3I6IHZhcigtLXNiYi1jb2xvci1za3kpO1xuICAtLXNiYi1ub3RpZmljYXRpb24tZGl2aWRlci1vcGFjaXR5LWxpZ2h0OiAyMCU7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1kaXZpZGVyLW9wYWNpdHktZGFyazogMjAlO1xufVxuXG46aG9zdChbdHlwZT0nc3VjY2VzcyddKSB7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi10eXBlLWNvbG9yOiB2YXIoLS1zYmItY29sb3Itc3VjY2Vzcyk7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1kaXZpZGVyLW9wYWNpdHktbGlnaHQ6IDE1JTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLWRpdmlkZXItb3BhY2l0eS1kYXJrOiAzMCU7XG59XG5cbjpob3N0KFt0eXBlPSd3YXJuJ10pIHtcbiAgLS1zYmItbm90aWZpY2F0aW9uLXR5cGUtY29sb3I6IHZhcigtLXNiYi1jb2xvci13YXJuaW5nKTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLWljb24tY29sb3I6IHZhcigtLXNiYi1ub3RpZmljYXRpb24tY29sb3IpO1xuICAtLXNiYi1ub3RpZmljYXRpb24tZGl2aWRlci1vcGFjaXR5LWxpZ2h0OiAyNSU7XG4gIC0tc2JiLW5vdGlmaWNhdGlvbi1kaXZpZGVyLW9wYWNpdHktZGFyazogNDAlO1xufVxuXG46aG9zdChbdHlwZT0nZXJyb3InXSkge1xuICAtLXNiYi1ub3RpZmljYXRpb24tdHlwZS1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLWVycm9yKTtcbiAgLS1zYmItbm90aWZpY2F0aW9uLWRpdmlkZXItb3BhY2l0eS1saWdodDogMTAlO1xuICAtLXNiYi1ub3RpZmljYXRpb24tZGl2aWRlci1vcGFjaXR5LWRhcms6IDI1JTtcbn1cblxuLnNiYi1ub3RpZmljYXRpb25fX3dyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGluc2V0LWlubGluZS1zdGFydDogdmFyKC0tX3NiYi1ub3RpZmljYXRpb24taW5zZXQtaW5saW5lLXN0YXJ0KTtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIHZhcigtLV9zYmItbm90aWZpY2F0aW9uLWluc2V0LWlubGluZS1zdGFydCkpO1xuICBib3JkZXI6IHZhcigtLXNiYi1ub3RpZmljYXRpb24tYm9yZGVyKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1ib3JkZXItcmFkaXVzLXN0YXJ0KVxuICAgIHZhcigtLXNiYi1ub3RpZmljYXRpb24tYmFzZS1ib3JkZXItcmFkaXVzKSB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJhc2UtYm9yZGVyLXJhZGl1cylcbiAgICB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJvcmRlci1yYWRpdXMtc3RhcnQpO1xuICBvcGFjaXR5OiAjeyRvcGVuLWFuaW0tb3BhY2l0eS1mcm9tfTtcbiAgbWF4LWhlaWdodDogI3skb3Blbi1hbmltLWhlaWdodC1mcm9tfTtcbiAgbWFyZ2luOiAjeyRvcGVuLWFuaW0tbWFyZ2luLWZyb219O1xuXG4gICY6OmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiBjYWxjKHZhcigtLXNiYi1ub3RpZmljYXRpb24tYm9yZGVyLXdpZHRoKSAqIC0xKVxuICAgICAgdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1iYXNlLWJvcmRlci1yYWRpdXMpIGNhbGModmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1ib3JkZXItd2lkdGgpICogLTEpXG4gICAgICBjYWxjKHZhcigtLXNiYi1ub3RpZmljYXRpb24tYmFzZS1ib3JkZXItcmFkaXVzKSAqIC0xKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItbm90aWZpY2F0aW9uLXR5cGUtY29sb3IpO1xuICAgIGJvcmRlcjogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1ub3RpZmljYXRpb24tYmFzZS1ib3JkZXItcmFkaXVzKTtcbiAgfVxuXG4gIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSkgJiB7XG4gICAgb3BhY2l0eTogI3skb3Blbi1hbmltLW9wYWNpdHktdG99O1xuICAgIG1heC1oZWlnaHQ6ICN7JG9wZW4tYW5pbS1oZWlnaHQtdG99O1xuICAgIG1hcmdpbjogI3skb3Blbi1hbmltLW1hcmdpbi10b307XG4gIH1cblxuICA6aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmluZykpICYge1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgbmFtZTogb3BlbjtcbiAgICAgIGZpbGwtbW9kZTogZm9yd2FyZHM7XG4gICAgICBkdXJhdGlvbjogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1hbmltYXRpb24tZHVyYXRpb24pO1xuICAgICAgdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItbm90aWZpY2F0aW9uLXRpbWluZy1mdW5jdGlvbik7XG4gICAgfVxuICB9XG5cbiAgOmhvc3QoOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSAmIHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIG5hbWU6IGNsb3NlLCBjbG9zZS1oZWlnaHQ7XG4gICAgICBmaWxsLW1vZGU6IGZvcndhcmRzO1xuICAgICAgZHVyYXRpb246IHZhcigtLXNiYi1ub3RpZmljYXRpb24tYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgICAgIHRpbWluZy1mdW5jdGlvbjogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi10aW1pbmctZnVuY3Rpb24pO1xuICAgICAgZGVsYXk6IDBzLCB2YXIoLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMngpKTtcbiAgICB9XG4gIH1cbn1cblxuLnNiYi1ub3RpZmljYXRpb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmctYmxvY2s6IHZhcigtLXNiYi1ub3RpZmljYXRpb24tcGFkZGluZy1ibG9jayk7XG4gIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zYmItbm90aWZpY2F0aW9uLXBhZGRpbmctaW5saW5lKTtcbiAgY29sb3I6IHZhcigtLXNiYi1ub3RpZmljYXRpb24tY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJvcmRlci1yYWRpdXMtc3RhcnQpXG4gICAgY2FsYyh2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJhc2UtYm9yZGVyLXJhZGl1cykgLSB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJvcmRlci13aWR0aCkpXG4gICAgY2FsYyh2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJhc2UtYm9yZGVyLXJhZGl1cykgLSB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJvcmRlci13aWR0aCkpXG4gICAgdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1ib3JkZXItcmFkaXVzLXN0YXJ0KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1iYWNrZ3JvdW5kLWNvbG9yKTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IHNtYWxsKSB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvIGF1dG87XG4gIH1cbn1cblxuLnNiYi1ub3RpZmljYXRpb25fX2ljb24sXG46OnNsb3R0ZWQoc2JiLWljb24pIHtcbiAgY29sb3I6IHZhcigtLXNiYi1ub3RpZmljYXRpb24taWNvbi1jb2xvcik7XG4gIGFsaWduLXNlbGY6IHZhcigtLXNiYi1ub3RpZmljYXRpb24taWNvbi1hbGlnbi1zZWxmKTtcblxuICAvLyBUaGlzIGlzIGFuIHVuZG9jdW1lbnRlZCBmZWF0dXJlIGZvciBzYmIuY2gsIHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gaGlkZSB0aGUgaWNvbi5cbiAgLS1zYmItaWNvbi1zdmctd2lkdGg6IHZhcigtLXNiYi1ub3RpZmljYXRpb24taWNvbi1zaXplKTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IHNtYWxsKSB7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiBtYXgoXG4gICAgICAwcmVtLFxuICAgICAgY2FsYyhcbiAgICAgICAgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHZhcigtLV9zYmItbm90aWZpY2F0aW9uLWljb24tYXV0aG9yaXRhdGl2ZS1mb250LXNpemUpICpcbiAgICAgICAgICAgICAgICAgIHZhcigtLV9zYmItbm90aWZpY2F0aW9uLWljb24tYXV0aG9yaXRhdGl2ZS1saW5lLWhlaWdodClcbiAgICAgICAgICAgICAgKSAtIHZhcigtLXNiYi1zaXplLWljb24tdWktc21hbGwpXG4gICAgICAgICAgKSAvXG4gICAgICAgICAgMlxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cblxuLnNiYi1ub3RpZmljYXRpb25fX2NvbnRlbnQge1xuICAvLyBUaGUgY29udGVudCBvZiB0aGUgbm90aWZpY2F0aW9uIGlzIGFsd2F5cyBkaXNwbGF5ZWQgaW4gcG9zaXRpdmUgbW9kZSxcbiAgLy8gdGhlcmVmb3JlLCB0byBoYXZlIHNsb3R0ZWQgY29udGVudCBjb3JyZWN0bHkgZGlzcGxheSwgd2UgbmVlZCBvbmx5IGFsbG93IGxpZ2h0IG1vZGUuXG4gIGNvbG9yLXNjaGVtZTogb25seSBsaWdodDtcbiAgb3JkZXI6IDM7XG4gIGdyaWQtYXJlYTogMiAvIDEgLyAzIC8gMztcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWNvbnRlbnQtbWFyZ2luLWJsb2NrLXN0YXJ0KTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IHNtYWxsKSB7XG4gICAgb3JkZXI6IGluaXRpYWw7XG4gICAgZ3JpZC1hcmVhOiBpbml0aWFsO1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogMDtcbiAgICBwYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1jb250ZW50LXBhZGRpbmctaW5saW5lKTtcbiAgfVxufVxuXG4uc2JiLW5vdGlmaWNhdGlvbl9fdGV4dCB7XG4gIC8vIFJlc2V0IHBhcmFncmFwaCBzdHlsZXNcbiAgZGlzcGxheTogaW5saW5lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5zYmItbm90aWZpY2F0aW9uX19kaXZpZGVyIHtcbiAgLS1zYmItZGl2aWRlci1jb2xvcjogbGlnaHQtZGFyayhcbiAgICBjb2xvci1taXgoXG4gICAgICBpbiBzcmdiLFxuICAgICAgdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi10eXBlLWNvbG9yKSB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWRpdmlkZXItb3BhY2l0eS1saWdodCksXG4gICAgICB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWJhY2tncm91bmQtY29sb3IpXG4gICAgKSxcbiAgICBjb2xvci1taXgoXG4gICAgICBpbiBzcmdiLFxuICAgICAgdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi10eXBlLWNvbG9yKSB2YXIoLS1zYmItbm90aWZpY2F0aW9uLWRpdmlkZXItb3BhY2l0eS1kYXJrKSxcbiAgICAgIHZhcigtLXNiYi1ub3RpZmljYXRpb24tYmFja2dyb3VuZC1jb2xvcilcbiAgICApXG4gICk7XG5cbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBpbnNldC1pbmxpbmUtc3RhcnQ6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMXgpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogc21hbGwpIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4taW5saW5lLWVuZDogdmFyKC0tc2JiLW5vdGlmaWNhdGlvbi1jbG9zZS13cmFwcGVyLWdhcCk7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAodmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpICogMikpO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgb3BlbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6ICN7JG9wZW4tYW5pbS1vcGFjaXR5LWZyb219O1xuICAgIG1heC1oZWlnaHQ6ICN7JG9wZW4tYW5pbS1oZWlnaHQtZnJvbX07XG4gICAgbWFyZ2luOiAjeyRvcGVuLWFuaW0tbWFyZ2luLWZyb219O1xuICB9XG5cbiAgdG8ge1xuICAgIG9wYWNpdHk6ICN7JG9wZW4tYW5pbS1vcGFjaXR5LXRvfTtcbiAgICBtYXgtaGVpZ2h0OiAjeyRvcGVuLWFuaW0taGVpZ2h0LXRvfTtcbiAgICBtYXJnaW46ICN7JG9wZW4tYW5pbS1tYXJnaW4tdG99O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgY2xvc2Uge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAjeyRvcGVuLWFuaW0tb3BhY2l0eS10b307XG4gICAgbWFyZ2luOiAjeyRvcGVuLWFuaW0tbWFyZ2luLXRvfTtcbiAgfVxuXG4gIHRvIHtcbiAgICBvcGFjaXR5OiAjeyRvcGVuLWFuaW0tb3BhY2l0eS1mcm9tfTtcbiAgICBtYXJnaW46ICN7JG9wZW4tYW5pbS1tYXJnaW4tZnJvbX07XG4gIH1cbn1cblxuQGtleWZyYW1lcyBjbG9zZS1oZWlnaHQge1xuICBmcm9tIHtcbiAgICBtYXgtaGVpZ2h0OiAjeyRvcGVuLWFuaW0taGVpZ2h0LXRvfTtcbiAgfVxuXG4gIHRvIHtcbiAgICBtYXgtaGVpZ2h0OiAjeyRvcGVuLWFuaW0taGVpZ2h0LWZyb219O1xuICB9XG59XG5cbjo6c2xvdHRlZChzYmItdGl0bGUpIHtcbiAgLy8gT3ZlcndyaXRlIHNiYi10aXRsZSBkZWZhdWx0IG1hcmdpblxuICBtYXJnaW46IDA7XG59XG4iLCJpbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBodG1sLCBub3RoaW5nLCB0eXBlIFByb3BlcnR5VmFsdWVzLCB0eXBlIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaXNMZWFuLCBpc1plcm9BbmltYXRpb25EdXJhdGlvbiB9IGZyb20gJy4uL2NvcmUvZG9tLnRzJztcbmltcG9ydCB7IGkxOG5DbG9zZU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uL2NvcmUvaTE4bi50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wZW5lZENsb3NlZFN0YXRlIH0gZnJvbSAnLi4vY29yZS9pbnRlcmZhY2VzLnRzJztcbmltcG9ydCB7IFNiYlJlYWRvbmx5TWl4aW4gfSBmcm9tICcuLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi9jb3JlL3N0eWxlcy50cyc7XG5pbXBvcnQgeyBTYmJJY29uTmFtZU1peGluIH0gZnJvbSAnLi4vaWNvbi50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlRpdGxlRWxlbWVudCB9IGZyb20gJy4uL3RpdGxlLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vbm90aWZpY2F0aW9uLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24udHMnO1xuaW1wb3J0ICcuLi9kaXZpZGVyLnRzJztcblxuY29uc3Qgbm90aWZpY2F0aW9uVHlwZXMgPSBuZXcgTWFwKFtcbiAgWydpbmZvJywgJ2NpcmNsZS1pbmZvcm1hdGlvbi1zbWFsbCddLFxuICBbJ25vdGUnLCAnY2lyY2xlLWluZm9ybWF0aW9uLXNtYWxsJ10sXG4gIFsnc3VjY2VzcycsICdjaXJjbGUtdGljay1zbWFsbCddLFxuICBbJ3dhcm4nLCAnY2lyY2xlLWV4Y2xhbWF0aW9uLXBvaW50LXNtYWxsJ10sXG4gIFsnZXJyb3InLCAnY2lyY2xlLWNyb3NzLXNtYWxsJ10sXG5dKTtcblxuY29uc3QgREVCT1VOQ0VfVElNRSA9IDE1MDtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBtZXNzYWdlcyB3aGljaCByZXF1aXJlIGEgdXNlcidzIGF0dGVudGlvbiB3aXRob3V0IGludGVycnVwdGluZyBpdHMgdGFza3MuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgY29udGVudCB0byB0aGUgYHNiYi1ub3RpZmljYXRpb25gLiBDb250ZW50IHNob3VsZCBjb25zaXN0IG9mIGFuIG9wdGlvbmFsIGBzYmItdGl0bGVgIGVsZW1lbnQgYW5kIHRleHQgY29udGVudC5cbiAqIEBzbG90IHRpdGxlIC0gU2xvdCBmb3IgdGhlIHRpdGxlLiBGb3IgdGhlIHN0YW5kYXJkIGBzYmItdGl0bGVgIGVsZW1lbnQsIHRoZSBzbG90IGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgd2hlbiBzbG90dGVkIGluIHRoZSB1bm5hbWVkIHNsb3QuXG4gKiBAc2xvdCBpY29uIC0gVXNlIHRoaXMgc2xvdCB0byBkaXNwbGF5IGEgY3VzdG9tIGljb24gYnkgcHJvdmlkaW5nIGFuIGBzYmItaWNvbmAgY29tcG9uZW50LlxuICogQGNzc3Byb3AgWy0tc2JiLW5vdGlmaWNhdGlvbi1tYXJnaW49MF0gLSBDYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIG1hcmdpbiBpbiBvcmRlciB0byBnZXQgYSBzbW9vdGhlciBhbmltYXRpb24uXG4gKiBTZWUgc3R5bGUgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYk5vdGlmaWNhdGlvbkVsZW1lbnQgZXh0ZW5kcyBTYmJJY29uTmFtZU1peGluKFNiYlJlYWRvbmx5TWl4aW4oU2JiRWxlbWVudCkpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1ub3RpZmljYXRpb24nO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGJlZm9yZW9wZW46ICdiZWZvcmVvcGVuJyxcbiAgICBvcGVuOiAnb3BlbicsXG4gICAgYmVmb3JlY2xvc2U6ICdiZWZvcmVjbG9zZScsXG4gICAgY2xvc2U6ICdjbG9zZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFRoZSB0eXBlIG9mIHRoZSBub3RpZmljYXRpb24uICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHR5cGU6XG4gICAgfCAnaW5mbydcbiAgICB8ICdub3RlJ1xuICAgIHwgJ3N1Y2Nlc3MnXG4gICAgfCAnd2FybidcbiAgICB8ICdlcnJvcicgPSAnaW5mbyc7XG5cbiAgLyoqXG4gICAqIFNpemUgdmFyaWFudCwgZWl0aGVyIHMgb3IgbS5cbiAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ3MnIHwgJ20nID0gaXNMZWFuKCkgPyAncycgOiAnbSc7XG5cbiAgLyoqIFRoZSBlbmFibGVkIGFuaW1hdGlvbnMuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIGFuaW1hdGlvbjogJ29wZW4nIHwgJ2Nsb3NlJyB8ICdhbGwnIHwgJ25vbmUnID0gJ2FsbCc7XG5cbiAgLyoqIFRoZSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIHNldCBfc3RhdGUoc3RhdGU6IFNiYk9wZW5lZENsb3NlZFN0YXRlKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlSW50ZXJuYWwpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoYHN0YXRlLSR7dGhpcy5fc3RhdGVJbnRlcm5hbH1gKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGVJbnRlcm5hbCA9IHN0YXRlO1xuICAgIGlmICh0aGlzLl9zdGF0ZUludGVybmFsKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBzdGF0ZS0ke3RoaXMuX3N0YXRlSW50ZXJuYWx9YCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IF9zdGF0ZSgpOiBTYmJPcGVuZWRDbG9zZWRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlSW50ZXJuYWw7XG4gIH1cbiAgcHJpdmF0ZSBfc3RhdGVJbnRlcm5hbCE6IFNiYk9wZW5lZENsb3NlZFN0YXRlO1xuXG4gIHByaXZhdGUgX25vdGlmaWNhdGlvbkVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXJUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX25vdGlmaWNhdGlvblJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fb25Ob3RpZmljYXRpb25SZXNpemUoKSxcbiAgfSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fc3RhdGUgPSAnY2xvc2VkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2l6ZScpKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVUaXRsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgICAvKiogRW1pdHMgd2hlbiB0aGUgb3BlbmluZyBhbmltYXRpb24gc3RhcnRzLiAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnYmVmb3Jlb3BlbicpKTtcblxuICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAnb3BlbmVkJyAmJiB0aGlzLl9kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnY2xvc2luZyc7XG5cbiAgICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYGNsb3NlZGAgc3RhdGUuXG4gICAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hCZWZvcmVDbG9zZUV2ZW50KCk6IGJvb2xlYW4ge1xuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBjbG9zaW5nIGFuaW1hdGlvbiBzdGFydHMuIENhbiBiZSBjYW5jZWxlZCB0byBwcmV2ZW50IHRoZSBjb21wb25lbnQgZnJvbSBjbG9zaW5nLiAqL1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdiZWZvcmVjbG9zZScsIHsgY2FuY2VsYWJsZTogdHJ1ZSB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICB0aGlzLl9ub3RpZmljYXRpb25FbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5zYmItbm90aWZpY2F0aW9uX193cmFwcGVyJyxcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvbXBvbmVudCdzIGB1cGRhdGVDb21wbGV0ZWAgaW4gb3JkZXIgdG8gc2V0IHRoZSBjb3JyZWN0XG4gICAgLy8gaGVpZ2h0IHRvIHRoZSBub3RpZmljYXRpb24gZWxlbWVudC5cbiAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fc2V0Tm90aWZpY2F0aW9uSGVpZ2h0KCk7XG4gICAgICB0aGlzLl9vcGVuKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLW5vdGlmaWNhdGlvbi1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE5vdGlmaWNhdGlvbkhlaWdodCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX25vdGlmaWNhdGlvbkVsZW1lbnQ/LnNjcm9sbEhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3RpZmljYXRpb25IZWlnaHQgPSBgJHt0aGlzLl9ub3RpZmljYXRpb25FbGVtZW50LnNjcm9sbEhlaWdodH1weGA7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItbm90aWZpY2F0aW9uLWhlaWdodCcsIG5vdGlmaWNhdGlvbkhlaWdodCk7XG4gIH1cblxuICBwcml2YXRlIF9vbk5vdGlmaWNhdGlvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2l6ZU9ic2VydmVyVGltZW91dCk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uIHdoZW4gcmVzaXppbmcgdGhlIG5vdGlmaWNhdGlvbiB0byBhdm9pZCBzdHJhbmdlIGhlaWdodCB0cmFuc2l0aW9uIGVmZmVjdHMuXG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgncmVzaXplLWRpc2FibGUtYW5pbWF0aW9uJyk7XG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJUaW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ3Jlc2l6ZS1kaXNhYmxlLWFuaW1hdGlvbicpLFxuICAgICAgREVCT1VOQ0VfVElNRSxcbiAgICApO1xuXG4gICAgLy8gVG8gYXZvaWQgUmVzaXplT2JzZXJ2ZXIgbG9vcHMsIHdlIHNldCB0aGUgaGVpZ2h0IGEgdGljayBsYXRlci5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3NldE5vdGlmaWNhdGlvbkhlaWdodCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uTm90aWZpY2F0aW9uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ29wZW5pbmcnICYmIGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NpbmcnICYmIGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZS1oZWlnaHQnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuX25vdGlmaWNhdGlvblJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5fbm90aWZpY2F0aW9uRWxlbWVudCk7XG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIG9wZW5pbmcgYW5pbWF0aW9uIGVuZHMuICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnb3BlbicpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAnY2xvc2VkJztcbiAgICAvKiogRW1pdHMgd2hlbiB0aGUgY2xvc2luZyBhbmltYXRpb24gZW5kcy4gKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjbG9zZScpKTtcbiAgICB0aGlzLl9ub3RpZmljYXRpb25SZXNpemVPYnNlcnZlci51bm9ic2VydmUodGhpcy5fbm90aWZpY2F0aW9uRWxlbWVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlbW92ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNsb3RjaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgdGl0bGUgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbmQoKGVsKSA9PiBlbC5sb2NhbE5hbWUgPT09ICdzYmItdGl0bGUnKTtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIHRpdGxlLnNsb3QgPSAndGl0bGUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZVRpdGxlKCk6IHZvaWQge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5xdWVyeVNlbGVjdG9yPy48U2JiVGl0bGVFbGVtZW50Pignc2JiLXRpdGxlJyk7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKHRpdGxlKTtcbiAgICAgIHRpdGxlLnZpc3VhbExldmVsID0gdGhpcy5zaXplID09PSAnbScgPyAnNScgOiAnNic7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlckljb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cGVyLnJlbmRlckljb25OYW1lKCkgfHwgbm90aWZpY2F0aW9uVHlwZXMuZ2V0KHRoaXMudHlwZSkhO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLW5vdGlmaWNhdGlvbl9fd3JhcHBlclwiIEBhbmltYXRpb25lbmQ9JHt0aGlzLl9vbk5vdGlmaWNhdGlvbkFuaW1hdGlvbkVuZH0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbm90aWZpY2F0aW9uXCI+XG4gICAgICAgICAgJHt0aGlzLnJlbmRlckljb25TbG90KCdzYmItbm90aWZpY2F0aW9uX19pY29uJyl9XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItbm90aWZpY2F0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIiBAc2xvdGNoYW5nZT0ke3RoaXMuX2NvbmZpZ3VyZVRpdGxlfT48L3Nsb3Q+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInNiYi1ub3RpZmljYXRpb25fX3RleHRcIj5cbiAgICAgICAgICAgICAgPHNsb3QgQHNsb3RjaGFuZ2U9JHt0aGlzLl9oYW5kbGVTbG90Y2hhbmdlfT48L3Nsb3Q+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgJHshdGhpcy5yZWFkT25seVxuICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgIDxzYmItZGl2aWRlciBjbGFzcz1cInNiYi1ub3RpZmljYXRpb25fX2RpdmlkZXJcIiBvcmllbnRhdGlvbj1cInZlcnRpY2FsXCI+PC9zYmItZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8c2JiLXNlY29uZGFyeS1idXR0b25cbiAgICAgICAgICAgICAgICAgIHNpemU9JHt0aGlzLnNpemV9XG4gICAgICAgICAgICAgICAgICBpY29uLW5hbWU9XCJjcm9zcy1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsb3NlKCl9XG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSR7aTE4bkNsb3NlTm90aWZpY2F0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItbm90aWZpY2F0aW9uX19jbG9zZVwiXG4gICAgICAgICAgICAgICAgPjwvc2JiLXNlY29uZGFyeS1idXR0b24+XG4gICAgICAgICAgICAgIGBcbiAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItbm90aWZpY2F0aW9uJzogU2JiTm90aWZpY2F0aW9uRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ21CQSxJQUFNLG9CQUFvQixJQUFJLElBQUk7Q0FDaEMsQ0FBQyxRQUFRLDJCQUEyQjtDQUNwQyxDQUFDLFFBQVEsMkJBQTJCO0NBQ3BDLENBQUMsV0FBVyxvQkFBb0I7Q0FDaEMsQ0FBQyxRQUFRLGlDQUFpQztDQUMxQyxDQUFDLFNBQVMscUJBQUE7Q0FDWCxDQUFDO0FBRUYsSUFBTSxnQkFBZ0I7Ozs7Ozs7Ozs7SUFXVCxnQ0FBc0I7bUJBQVMsaUJBQWlCLGlCQUFpQixXQUFXLENBQUM7Ozs7Ozs7Ozs7Y0FBN0UsK0JBQStCLFlBQThDOzs7dUJBV3ZGLFNBQVMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFBO3VCQVczQixTQUFTLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQTs0QkFHM0IsU0FBUyxFQUFFLFNBQVMsTUFBTSxDQUFDLENB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
@@ -1,4 +1,4 @@
1
- import { t as SbbNotificationElement } from "./notification.component-B5EBKKf8.js";
1
+ import { t as SbbNotificationElement } from "./notification.component-BT3ZQhUI.js";
2
2
  import "./notification.pure.js";
3
3
  //#region src/elements/notification.ts
4
4
  /** @entrypoint */
@@ -1,2 +1,2 @@
1
- import { t as SbbNotificationElement } from "./notification.component-B5EBKKf8.js";
1
+ import { t as SbbNotificationElement } from "./notification.component-BT3ZQhUI.js";
2
2
  export { SbbNotificationElement };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../notification.component-DZS8z1oa.js";
1
+ import { t as e } from "../notification.component-DA7sZ3m4.js";
2
2
  export { e as SbbNotificationElement };