@sbb-esta/lyne-elements-dev 4.7.0-dev.1773755649 → 4.7.0-dev.1773817331

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,2 +1,2 @@
1
- import { t as e } from "../../breadcrumb-group.component-BA8KK3Om.js";
1
+ import { t as e } from "../../breadcrumb-group.component-CfUyO1sI.js";
2
2
  export { e as SbbBreadcrumbGroupElement };
@@ -1,4 +1,4 @@
1
- import { t as e } from "../breadcrumb-group.component-BA8KK3Om.js";
1
+ import { t as e } from "../breadcrumb-group.component-CfUyO1sI.js";
2
2
  e.define(), console.warn("The entrypoint '@sbb-esta/elements/breadcrumb/breadcrumb-group.js' has been deprecated.\nUse either '@sbb-esta/elements/breadcrumb.js' or '@sbb-esta/elements/breadcrumb.pure.js' instead.");
3
3
  //#endregion
4
4
  export { e as SbbBreadcrumbGroupElement };
@@ -10,7 +10,7 @@ import "./icon.js";
10
10
  import { ResizeController as d } from "@lit-labs/observers/resize-controller.js";
11
11
  import { getNextElementIndex as f, isArrowKeyPressed as p, sbbInputModalityDetector as m } from "./core/a11y.js";
12
12
  //#region src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.scss?lit&inline
13
- var h = n`:host{display:block}:host(:is(:state(loaded),[state--loaded])){--sbb-breadcrumb-group-visibility:visible}:host(:is(:is(:state(state-collapsed),[state--state-collapsed]),:is(:state(state-manually-expanded),[state--state-manually-expanded]))){--sbb-breadcrumb-group-wrap:wrap}.sbb-breadcrumb-group{font-size:inherit;flex-wrap:var(--sbb-breadcrumb-group-wrap);column-gap:var(--sbb-spacing-fixed-1x);visibility:var(--sbb-breadcrumb-group-visibility);margin:0;padding:0;list-style:none;display:flex}.sbb-breadcrumb-group__item{column-gap:var(--sbb-spacing-fixed-1x);flex:none;display:flex}.sbb-breadcrumb-group__divider-icon{color:var(--sbb-breadcrumb-group-ellipsis-color)}#sbb-breadcrumb-ellipsis{appearance:none;box-sizing:border-box;-webkit-tap-highlight-color:transparent;color:var(--sbb-breadcrumb-group-ellipsis-color);--sbb-text-font-size:var(--sbb-text-font-size-xxs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size);letter-spacing:.01em;line-height:0;font-size:var(--sbb-text-font-size-xxs);width:var(--sbb-size-icon-ui-small);height:var(--sbb-size-icon-ui-small);border:none;border:var(--sbb-breadcrumb-group-ellipsis-border-width) solid var(--sbb-breadcrumb-group-ellipsis-border-color);padding:0;cursor:var(--sbb-cursor-pointer);background:0 0;background-color:var(--sbb-breadcrumb-group-ellipsis-background-color);border-radius:50%;outline:none;margin:0;padding-block-end:.5em;overflow:hidden}@media (forced-colors:active){#sbb-breadcrumb-ellipsis{--sbb-breadcrumb-group-ellipsis-border-width:var(--sbb-border-width-2x);--sbb-breadcrumb-group-ellipsis-border-color:CanvasText}}@media (any-hover:hover){#sbb-breadcrumb-ellipsis:hover{--sbb-breadcrumb-group-ellipsis-color:var(--sbb-color-2);--sbb-breadcrumb-group-ellipsis-background-color:var(--sbb-background-color-3)}}@media (any-hover:hover) and (forced-colors:active){#sbb-breadcrumb-ellipsis:hover{--sbb-breadcrumb-group-ellipsis-border-color:Highlight}}#sbb-breadcrumb-ellipsis:focus-visible{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style,solid) var(--sbb-focus-outline-width)}`, g = 3, _ = (() => {
13
+ var h = n`:host{min-width:0;display:block}:host(:is(:state(loaded),[state--loaded])){--sbb-breadcrumb-group-visibility:visible}:host(:is(:is(:state(state-collapsed),[state--state-collapsed]),:is(:state(state-manually-expanded),[state--state-manually-expanded]))){--sbb-breadcrumb-group-wrap:wrap}.sbb-breadcrumb-group{font-size:inherit;flex-wrap:var(--sbb-breadcrumb-group-wrap);column-gap:var(--sbb-spacing-fixed-1x);visibility:var(--sbb-breadcrumb-group-visibility);margin:0;padding:0;list-style:none;display:flex}.sbb-breadcrumb-group__item{column-gap:var(--sbb-spacing-fixed-1x);flex:none;display:flex}.sbb-breadcrumb-group__divider-icon{color:var(--sbb-breadcrumb-group-ellipsis-color)}#sbb-breadcrumb-ellipsis{appearance:none;box-sizing:border-box;-webkit-tap-highlight-color:transparent;color:var(--sbb-breadcrumb-group-ellipsis-color);--sbb-text-font-size:var(--sbb-text-font-size-xxs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size);letter-spacing:.01em;line-height:0;font-size:var(--sbb-text-font-size-xxs);width:var(--sbb-size-icon-ui-small);height:var(--sbb-size-icon-ui-small);border:none;border:var(--sbb-breadcrumb-group-ellipsis-border-width) solid var(--sbb-breadcrumb-group-ellipsis-border-color);padding:0;cursor:var(--sbb-cursor-pointer);background:0 0;background-color:var(--sbb-breadcrumb-group-ellipsis-background-color);border-radius:50%;outline:none;margin:0;padding-block-end:.5em;overflow:hidden}@media (forced-colors:active){#sbb-breadcrumb-ellipsis{--sbb-breadcrumb-group-ellipsis-border-width:var(--sbb-border-width-2x);--sbb-breadcrumb-group-ellipsis-border-color:CanvasText}}@media (any-hover:hover){#sbb-breadcrumb-ellipsis:hover{--sbb-breadcrumb-group-ellipsis-color:var(--sbb-color-2);--sbb-breadcrumb-group-ellipsis-background-color:var(--sbb-background-color-3)}}@media (any-hover:hover) and (forced-colors:active){#sbb-breadcrumb-ellipsis:hover{--sbb-breadcrumb-group-ellipsis-border-color:Highlight}}#sbb-breadcrumb-ellipsis:focus-visible{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style,solid) var(--sbb-focus-outline-width)}`, g = 3, _ = (() => {
14
14
  let n = s(o), _ = [], v;
15
15
  return class extends n {
16
16
  static {
package/breadcrumb.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./breadcrumb-group.component-BA8KK3Om.js";
1
+ import { t as e } from "./breadcrumb-group.component-CfUyO1sI.js";
2
2
  import { t } from "./breadcrumb.component-DjkZzGJD.js";
3
3
  import "./breadcrumb.pure.js";
4
4
  t.define(), e.define();
@@ -1,3 +1,3 @@
1
- import { t as e } from "./breadcrumb-group.component-BA8KK3Om.js";
1
+ import { t as e } from "./breadcrumb-group.component-CfUyO1sI.js";
2
2
  import { t } from "./breadcrumb.component-DjkZzGJD.js";
3
3
  export { t as SbbBreadcrumbElement, e as SbbBreadcrumbGroupElement };
@@ -1,2 +1,2 @@
1
- import { t as SbbBreadcrumbGroupElement } from "../../breadcrumb-group.component-DjsoMTPI.js";
1
+ import { t as SbbBreadcrumbGroupElement } from "../../breadcrumb-group.component-zU06d9ni.js";
2
2
  export { SbbBreadcrumbGroupElement };
@@ -1,4 +1,4 @@
1
- import { t as SbbBreadcrumbGroupElement } from "../breadcrumb-group.component-DjsoMTPI.js";
1
+ import { t as SbbBreadcrumbGroupElement } from "../breadcrumb-group.component-zU06d9ni.js";
2
2
  //#region src/elements/breadcrumb/breadcrumb-group.ts
3
3
  /** @entrypoint */
4
4
  SbbBreadcrumbGroupElement.define();
@@ -0,0 +1,279 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { css, html, nothing } from "lit";
3
+ import { state } from "lit/decorators.js";
4
+ import { SbbElement } from "./core/base-elements.js";
5
+ import { SbbNamedSlotListMixin } from "./core/mixins.js";
6
+ import { boxSizingStyles } from "./core/styles.js";
7
+ import { SbbLanguageController } from "./core/controllers.js";
8
+ import { i18nBreadcrumbEllipsisButtonLabel } from "./core/i18n.js";
9
+ import "./icon.js";
10
+ import { ResizeController } from "@lit-labs/observers/resize-controller.js";
11
+ import { getNextElementIndex, isArrowKeyPressed, sbbInputModalityDetector } from "./core/a11y.js";
12
+ //#region src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.scss?lit&inline
13
+ var breadcrumb_group_default = css`:host {
14
+ display: block;
15
+ min-width: 0;
16
+ }
17
+
18
+ :host(:is(:state(loaded),[state--loaded])) {
19
+ --sbb-breadcrumb-group-visibility: visible;
20
+ }
21
+
22
+ :host(:is(:is(:state(state-collapsed),[state--state-collapsed]), :is(:state(state-manually-expanded),[state--state-manually-expanded]))) {
23
+ --sbb-breadcrumb-group-wrap: wrap;
24
+ }
25
+
26
+ .sbb-breadcrumb-group {
27
+ list-style: none;
28
+ margin: 0;
29
+ padding: 0;
30
+ font-size: inherit;
31
+ display: flex;
32
+ flex-wrap: var(--sbb-breadcrumb-group-wrap);
33
+ column-gap: var(--sbb-spacing-fixed-1x);
34
+ visibility: var(--sbb-breadcrumb-group-visibility);
35
+ }
36
+
37
+ .sbb-breadcrumb-group__item {
38
+ flex: 0 0 auto;
39
+ display: flex;
40
+ column-gap: var(--sbb-spacing-fixed-1x);
41
+ }
42
+
43
+ .sbb-breadcrumb-group__divider-icon {
44
+ color: var(--sbb-breadcrumb-group-ellipsis-color);
45
+ }
46
+
47
+ #sbb-breadcrumb-ellipsis {
48
+ appearance: none;
49
+ box-sizing: border-box;
50
+ margin: 0;
51
+ outline: none;
52
+ border: none;
53
+ border-radius: 0;
54
+ padding: 0;
55
+ background: none;
56
+ -webkit-tap-highlight-color: transparent;
57
+ color: inherit;
58
+ --sbb-text-font-size: var(--sbb-text-font-size-xxs);
59
+ font-family: var(--sbb-typo-font-family);
60
+ font-weight: normal;
61
+ line-height: var(--sbb-typo-line-height-text);
62
+ letter-spacing: var(--sbb-typo-letter-spacing-text);
63
+ font-size: var(--sbb-text-font-size);
64
+ line-height: 0;
65
+ letter-spacing: 0.01em;
66
+ font-size: var(--sbb-text-font-size-xxs);
67
+ width: var(--sbb-size-icon-ui-small);
68
+ height: var(--sbb-size-icon-ui-small);
69
+ border: var(--sbb-breadcrumb-group-ellipsis-border-width) solid var(--sbb-breadcrumb-group-ellipsis-border-color);
70
+ border-radius: 50%;
71
+ padding-block-end: 0.5em;
72
+ cursor: var(--sbb-cursor-pointer);
73
+ color: var(--sbb-breadcrumb-group-ellipsis-color);
74
+ background-color: var(--sbb-breadcrumb-group-ellipsis-background-color);
75
+ overflow: hidden;
76
+ }
77
+ @media (forced-colors: active) {
78
+ #sbb-breadcrumb-ellipsis {
79
+ --sbb-breadcrumb-group-ellipsis-border-width: var(--sbb-border-width-2x);
80
+ --sbb-breadcrumb-group-ellipsis-border-color: CanvasText;
81
+ }
82
+ }
83
+ @media (any-hover: hover) {
84
+ #sbb-breadcrumb-ellipsis:hover {
85
+ --sbb-breadcrumb-group-ellipsis-color: var(--sbb-color-2);
86
+ --sbb-breadcrumb-group-ellipsis-background-color: var(--sbb-background-color-3);
87
+ }
88
+ }
89
+ @media (any-hover: hover) and (forced-colors: active) {
90
+ #sbb-breadcrumb-ellipsis:hover {
91
+ --sbb-breadcrumb-group-ellipsis-border-color: Highlight;
92
+ }
93
+ }
94
+ #sbb-breadcrumb-ellipsis:focus-visible {
95
+ outline-offset: var(--sbb-focus-outline-offset);
96
+ outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
97
+ }`;
98
+ //#endregion
99
+ //#region src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.component.ts
100
+ var MIN_BREADCRUMBS_TO_COLLAPSE = 3;
101
+ /**
102
+ * It can be used as a container for one or more `sbb-breadcrumb` component.
103
+ *
104
+ * @slot - Use the unnamed slot to add `sbb-breadcrumb` elements.
105
+ */
106
+ var SbbBreadcrumbGroupElement = (() => {
107
+ let _classSuper = SbbNamedSlotListMixin(SbbElement);
108
+ let _instanceExtraInitializers = [];
109
+ let _set__state_decorators;
110
+ return class SbbBreadcrumbGroupElement extends _classSuper {
111
+ static {
112
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
113
+ _set__state_decorators = [state()];
114
+ __esDecorate(this, null, _set__state_decorators, {
115
+ kind: "setter",
116
+ name: "_state",
117
+ static: false,
118
+ private: false,
119
+ access: {
120
+ has: (obj) => "_state" in obj,
121
+ set: (obj, value) => {
122
+ obj._state = value;
123
+ }
124
+ },
125
+ metadata: _metadata
126
+ }, null, _instanceExtraInitializers);
127
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
128
+ enumerable: true,
129
+ configurable: true,
130
+ writable: true,
131
+ value: _metadata
132
+ });
133
+ }
134
+ static {
135
+ this.elementName = "sbb-breadcrumb-group";
136
+ }
137
+ static {
138
+ this.role = "navigation";
139
+ }
140
+ static {
141
+ this.styles = [boxSizingStyles, breadcrumb_group_default];
142
+ }
143
+ /** The state of the breadcrumb group. */
144
+ set _state(state) {
145
+ if (this._stateInternal) this.internals.states.delete(`state-${this._stateInternal}`);
146
+ this._stateInternal = state;
147
+ if (this._stateInternal) this.internals.states.add(`state-${this._stateInternal}`);
148
+ }
149
+ get _state() {
150
+ return this._stateInternal;
151
+ }
152
+ constructor() {
153
+ super();
154
+ this.listChildLocalNames = (__runInitializers(this, _instanceExtraInitializers), ["sbb-breadcrumb"]);
155
+ this._stateInternal = null;
156
+ this._resizeObserver = new ResizeController(this, {
157
+ target: null,
158
+ skipInitial: true,
159
+ callback: () => this._evaluateCollapsedState()
160
+ });
161
+ this._language = new SbbLanguageController(this);
162
+ this._markForFocus = false;
163
+ this.addEventListener?.("keydown", (e) => this._handleKeyDown(e));
164
+ }
165
+ _handleKeyDown(evt) {
166
+ if (!this.listChildren.length || evt.target !== this && evt.target.parentElement !== this) return;
167
+ if (isArrowKeyPressed(evt)) {
168
+ if (this._state === "collapsed") return this._focusNextCollapsed(evt);
169
+ this._focusNext(evt);
170
+ }
171
+ }
172
+ firstUpdated(changedProperties) {
173
+ super.firstUpdated(changedProperties);
174
+ this._resizeObserver.observe(this);
175
+ this.internals.states.add("loaded");
176
+ }
177
+ willUpdate(changedProperties) {
178
+ super.willUpdate(changedProperties);
179
+ if (changedProperties.has("listChildren")) this._syncBreadcrumbs();
180
+ }
181
+ updated(changedProperties) {
182
+ super.updated(changedProperties);
183
+ if (changedProperties.has("listChildren")) Promise.resolve().then(() => this._evaluateCollapsedState());
184
+ if (this._markForFocus && sbbInputModalityDetector.mostRecentModality === "keyboard") {
185
+ this.listChildren[1]?.focus();
186
+ this._markForFocus = false;
187
+ }
188
+ }
189
+ /** Apply the aria-current attribute to the last sbb-breadcrumb element. */
190
+ _syncBreadcrumbs() {
191
+ this.listChildren.slice(0, -1).filter((c) => c.hasAttribute("accessibility-current")).forEach((c) => c.removeAttribute("accessibility-current"));
192
+ this.listChildren[this.listChildren.length - 1]?.setAttribute("accessibility-current", "page");
193
+ if (this.listChildren.length < MIN_BREADCRUMBS_TO_COLLAPSE) this._state = null;
194
+ }
195
+ /**
196
+ * Sets the focus on the correct element when the ellipsis breadcrumb is displayed and the user is navigating with keyboard's arrows.
197
+ */
198
+ _focusNextCollapsed(evt) {
199
+ const arrayCollapsed = [
200
+ this.listChildren[0],
201
+ this.shadowRoot.querySelector("#sbb-breadcrumb-ellipsis"),
202
+ this.listChildren[this.listChildren.length - 1]
203
+ ];
204
+ this._focusNext(evt, arrayCollapsed);
205
+ }
206
+ _focusNext(evt, breadcrumbs = this.listChildren) {
207
+ breadcrumbs[getNextElementIndex(evt, breadcrumbs.findIndex((e) => e === document.activeElement || e === this.shadowRoot.activeElement), breadcrumbs.length)]?.focus();
208
+ evt.preventDefault();
209
+ }
210
+ /**
211
+ * Note: due to @State annotation on _state, this method triggers a new render; as a consequence, the focus is moved
212
+ * to the `body`, so if the ellipsis element has focus, it's asynchronously forced to the first element.
213
+ */
214
+ _expandBreadcrumbs() {
215
+ this._state = "manually-expanded";
216
+ this._markForFocus = true;
217
+ }
218
+ /** Evaluate if the expanded breadcrumb element fits in page width, otherwise it needs ellipsis */
219
+ _evaluateCollapsedState() {
220
+ if (!this._state && this.scrollWidth > this.offsetWidth && this.listChildren.length >= MIN_BREADCRUMBS_TO_COLLAPSE) {
221
+ this._state = "collapsed";
222
+ this._resizeObserver.hostDisconnected();
223
+ this.removeController(this._resizeObserver);
224
+ }
225
+ }
226
+ _renderCollapsed() {
227
+ return html`
228
+ <li class="sbb-breadcrumb-group__item">
229
+ <slot name="li-0"></slot>
230
+ </li>
231
+ <li class="sbb-breadcrumb-group__item" id="sbb-breadcrumb-group-ellipsis">
232
+ <sbb-icon
233
+ name="chevron-small-right-small"
234
+ class="sbb-breadcrumb-group__divider-icon"
235
+ ></sbb-icon>
236
+ <button
237
+ type="button"
238
+ id="sbb-breadcrumb-ellipsis"
239
+ aria-label=${i18nBreadcrumbEllipsisButtonLabel[this._language.current]}
240
+ aria-expanded="false"
241
+ @click=${() => this._expandBreadcrumbs()}
242
+ >
243
+ ...
244
+ </button>
245
+ </li>
246
+ <li class="sbb-breadcrumb-group__item">
247
+ <sbb-icon
248
+ name="chevron-small-right-small"
249
+ class="sbb-breadcrumb-group__divider-icon"
250
+ ></sbb-icon>
251
+ <slot name=${`li-${this.listChildren.length - 1}`}></slot>
252
+ </li>
253
+ `;
254
+ }
255
+ _renderExpanded() {
256
+ return this.listSlotEntries().map((slot, index, array) => html`
257
+ <li class="sbb-breadcrumb-group__item">
258
+ <slot name=${slot.name}></slot>
259
+ ${index !== array.length - 1 ? html`<sbb-icon
260
+ name="chevron-small-right-small"
261
+ class="sbb-breadcrumb-group__divider-icon"
262
+ ></sbb-icon>` : nothing}
263
+ </li>
264
+ `);
265
+ }
266
+ render() {
267
+ return html`
268
+ <ol class="sbb-breadcrumb-group">
269
+ ${this._state === "collapsed" ? this._renderCollapsed() : this._renderExpanded()}
270
+ </ol>
271
+ ${this.renderHiddenSlot()}
272
+ `;
273
+ }
274
+ };
275
+ })();
276
+ //#endregion
277
+ export { SbbBreadcrumbGroupElement as t };
278
+
279
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1ncm91cC5jb21wb25lbnQtelUwNmQ5bmkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1ncm91cC9icmVhZGNydW1iLWdyb3VwLnNjc3M/bGl0JmlubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWItZ3JvdXAvYnJlYWRjcnVtYi1ncm91cC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAvLyBBbGxvd3Mgc2l6ZSBjYWxjdWxhdGlvbiBldmVuIGlmIGluIGdyaWQgb3IgZmxleCBjb250ZXh0LlxuICBtaW4td2lkdGg6IDA7XG59XG5cbjpob3N0KDpzdGF0ZShsb2FkZWQpKSB7XG4gIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuOmhvc3QoOmlzKDpzdGF0ZShzdGF0ZS1jb2xsYXBzZWQpLCA6c3RhdGUoc3RhdGUtbWFudWFsbHktZXhwYW5kZWQpKSkge1xuICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLXdyYXA6IHdyYXA7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cCB7XG4gIEBpbmNsdWRlIHNiYi5saXN0LXJlc2V0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtd3JhcCk7XG4gIGNvbHVtbi1nYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KTtcbiAgdmlzaWJpbGl0eTogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtdmlzaWJpbGl0eSk7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbSB7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBjb2x1bW4tZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCk7XG59XG5cbi5zYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uIHtcbiAgY29sb3I6IHZhcigtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWNvbG9yKTtcbn1cblxuI3NiYi1icmVhZGNydW1iLWVsbGlwc2lzIHtcbiAgQGluY2x1ZGUgc2JiLmJ1dHRvbi1yZXNldDtcbiAgQGluY2x1ZGUgc2JiLnRleHQteHhzLS1yZWd1bGFyO1xuXG4gIC8vIGxpbmUgaGVpZ2h0IGFuZCBsZXR0ZXItc3BhY2luZyBuZWVkZWQgdG8gbWF0Y2ggc3F1YXJlcyBkcmF3biBpbiBGaWdtYS5cbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxZW07XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2JiLXRleHQtZm9udC1zaXplLXh4cyk7XG4gIHdpZHRoOiB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKTtcbiAgYm9yZGVyOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItd2lkdGgpIHNvbGlkXG4gICAgdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtYm9yZGVyLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuXG4gIC8vIEluIG9yZGVyIHRvIHZlcnRpY2FsbHkgY2VudGVyIC4uLiwgd2UgdXNlIHBhZGRpbmcgd2l0aCBoYWxmIHRoZSBmb250IHNpemUuXG4gIHBhZGRpbmctYmxvY2stZW5kOiAwLjVlbTtcbiAgY3Vyc29yOiB2YXIoLS1zYmItY3Vyc29yLXBvaW50ZXIpO1xuICBjb2xvcjogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItd2lkdGg6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMngpO1xuICAgIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtYm9yZGVyLWNvbG9yOiBDYW52YXNUZXh0O1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmhvdmVyLW1xKCRob3ZlcjogdHJ1ZSkge1xuICAgICY6aG92ZXIge1xuICAgICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLTIpO1xuICAgICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1iYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0zKTtcblxuICAgICAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgICAgICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWJvcmRlci1jb2xvcjogSGlnaGxpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG4gIH1cbn1cbiIsImltcG9ydCB7IFJlc2l6ZUNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL3Jlc2l6ZS1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIGh0bWwsIG5vdGhpbmcsIHR5cGUgUHJvcGVydHlWYWx1ZXMsIHR5cGUgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7XG4gIGdldE5leHRFbGVtZW50SW5kZXgsXG4gIGlzQXJyb3dLZXlQcmVzc2VkLFxuICBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IsXG59IGZyb20gJy4uLy4uL2NvcmUvYTExeS50cyc7XG5pbXBvcnQgeyBTYmJFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL2NvcmUvY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgaTE4bkJyZWFkY3J1bWJFbGxpcHNpc0J1dHRvbkxhYmVsIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuLnRzJztcbmltcG9ydCB7IFNiYk5hbWVkU2xvdExpc3RNaXhpbiwgdHlwZSBXaXRoTGlzdENoaWxkcmVuIH0gZnJvbSAnLi4vLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vLi4vY29yZS9zdHlsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJCcmVhZGNydW1iRWxlbWVudCB9IGZyb20gJy4uL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9icmVhZGNydW1iLWdyb3VwLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vLi4vaWNvbi50cyc7XG5cbmNvbnN0IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRSA9IDM7XG5cbi8qKlxuICogSXQgY2FuIGJlIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIG9uZSBvciBtb3JlIGBzYmItYnJlYWRjcnVtYmAgY29tcG9uZW50LlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGBzYmItYnJlYWRjcnVtYmAgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJCcmVhZGNydW1iR3JvdXBFbGVtZW50IGV4dGVuZHMgU2JiTmFtZWRTbG90TGlzdE1peGluPFxuICBTYmJCcmVhZGNydW1iRWxlbWVudCxcbiAgdHlwZW9mIFNiYkVsZW1lbnRcbj4oU2JiRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLWJyZWFkY3J1bWItZ3JvdXAnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnbmF2aWdhdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHN0eWxlXTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXMgPSBbJ3NiYi1icmVhZGNydW1iJ107XG5cbiAgLyoqIFRoZSBzdGF0ZSBvZiB0aGUgYnJlYWRjcnVtYiBncm91cC4gKi9cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBzZXQgX3N0YXRlKHN0YXRlOiAnY29sbGFwc2VkJyB8ICdtYW51YWxseS1leHBhbmRlZCcgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlSW50ZXJuYWwpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoYHN0YXRlLSR7dGhpcy5fc3RhdGVJbnRlcm5hbH1gKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhdGVJbnRlcm5hbCA9IHN0YXRlO1xuICAgIGlmICh0aGlzLl9zdGF0ZUludGVybmFsKSB7XG4gICAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKGBzdGF0ZS0ke3RoaXMuX3N0YXRlSW50ZXJuYWx9YCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IF9zdGF0ZSgpOiAnY29sbGFwc2VkJyB8ICdtYW51YWxseS1leHBhbmRlZCcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVJbnRlcm5hbDtcbiAgfVxuICBwcml2YXRlIF9zdGF0ZUludGVybmFsOiAnY29sbGFwc2VkJyB8ICdtYW51YWxseS1leHBhbmRlZCcgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVDb250cm9sbGVyKHRoaXMsIHtcbiAgICB0YXJnZXQ6IG51bGwsXG4gICAgc2tpcEluaXRpYWw6IHRydWUsXG4gICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuX2V2YWx1YXRlQ29sbGFwc2VkU3RhdGUoKSxcbiAgfSk7XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfbWFya0ZvckZvY3VzID0gZmFsc2U7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5RG93bihlKSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVLZXlEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggfHxcbiAgICAgIC8vIGRvbid0IHRyYXAgbmVzdGVkIGhhbmRsaW5nXG4gICAgICAoKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpICE9PSB0aGlzICYmIChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50ICE9PSB0aGlzKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0Fycm93S2V5UHJlc3NlZChldnQpKSB7XG4gICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb2N1c05leHRDb2xsYXBzZWQoZXZ0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZvY3VzTmV4dChldnQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcyk7XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnbG9hZGVkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8V2l0aExpc3RDaGlsZHJlbjx0aGlzPj4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2xpc3RDaGlsZHJlbicpKSB7XG4gICAgICB0aGlzLl9zeW5jQnJlYWRjcnVtYnMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8V2l0aExpc3RDaGlsZHJlbjx0aGlzPj4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaXN0Q2hpbGRyZW4nKSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLl9ldmFsdWF0ZUNvbGxhcHNlZFN0YXRlKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWFya0ZvckZvY3VzICYmIHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgIHRoaXMubGlzdENoaWxkcmVuWzFdPy5mb2N1cygpO1xuXG4gICAgICAvLyBSZXNldCBtYXJrIGZvciBmb2N1c1xuICAgICAgdGhpcy5fbWFya0ZvckZvY3VzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFwcGx5IHRoZSBhcmlhLWN1cnJlbnQgYXR0cmlidXRlIHRvIHRoZSBsYXN0IHNiYi1icmVhZGNydW1iIGVsZW1lbnQuICovXG4gIHByaXZhdGUgX3N5bmNCcmVhZGNydW1icygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RDaGlsZHJlblxuICAgICAgLnNsaWNlKDAsIC0xKVxuICAgICAgLmZpbHRlcigoYykgPT4gYy5oYXNBdHRyaWJ1dGUoJ2FjY2Vzc2liaWxpdHktY3VycmVudCcpKVxuICAgICAgLmZvckVhY2goKGMpID0+IGMucmVtb3ZlQXR0cmlidXRlKCdhY2Nlc3NpYmlsaXR5LWN1cnJlbnQnKSk7XG4gICAgdGhpcy5saXN0Q2hpbGRyZW5bdGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoIC0gMV0/LnNldEF0dHJpYnV0ZSgnYWNjZXNzaWJpbGl0eS1jdXJyZW50JywgJ3BhZ2UnKTtcblxuICAgIC8vIElmIGl0IGlzIG5vdCBleHBhbmRhYmxlLCByZXNldCBzdGF0ZVxuICAgIGlmICh0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggPCBNSU5fQlJFQURDUlVNQlNfVE9fQ09MTEFQU0UpIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZm9jdXMgb24gdGhlIGNvcnJlY3QgZWxlbWVudCB3aGVuIHRoZSBlbGxpcHNpcyBicmVhZGNydW1iIGlzIGRpc3BsYXllZCBhbmQgdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB3aXRoIGtleWJvYXJkJ3MgYXJyb3dzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNOZXh0Q29sbGFwc2VkKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGFycmF5Q29sbGFwc2VkOiBTYmJCcmVhZGNydW1iRWxlbWVudFtdID0gW1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW5bMF0sXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJyNzYmItYnJlYWRjcnVtYi1lbGxpcHNpcycpIGFzIFNiYkJyZWFkY3J1bWJFbGVtZW50LFxuICAgICAgdGhpcy5saXN0Q2hpbGRyZW5bdGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoIC0gMV0sXG4gICAgXTtcbiAgICB0aGlzLl9mb2N1c05leHQoZXZ0LCBhcnJheUNvbGxhcHNlZCk7XG4gIH1cblxuICBwcml2YXRlIF9mb2N1c05leHQoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGJyZWFkY3J1bWJzOiBTYmJCcmVhZGNydW1iRWxlbWVudFtdID0gdGhpcy5saXN0Q2hpbGRyZW4sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQ6IG51bWJlciA9IGJyZWFkY3J1bWJzLmZpbmRJbmRleChcbiAgICAgIChlKSA9PiBlID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IHx8IGUgPT09IHRoaXMuc2hhZG93Um9vdCEuYWN0aXZlRWxlbWVudCxcbiAgICApO1xuICAgIGNvbnN0IG5leHRJbmRleDogbnVtYmVyID0gZ2V0TmV4dEVsZW1lbnRJbmRleChldnQsIGN1cnJlbnQsIGJyZWFkY3J1bWJzLmxlbmd0aCk7XG4gICAgYnJlYWRjcnVtYnNbbmV4dEluZGV4XT8uZm9jdXMoKTtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RlOiBkdWUgdG8gQFN0YXRlIGFubm90YXRpb24gb24gX3N0YXRlLCB0aGlzIG1ldGhvZCB0cmlnZ2VycyBhIG5ldyByZW5kZXI7IGFzIGEgY29uc2VxdWVuY2UsIHRoZSBmb2N1cyBpcyBtb3ZlZFxuICAgKiB0byB0aGUgYGJvZHlgLCBzbyBpZiB0aGUgZWxsaXBzaXMgZWxlbWVudCBoYXMgZm9jdXMsIGl0J3MgYXN5bmNocm9ub3VzbHkgZm9yY2VkIHRvIHRoZSBmaXJzdCBlbGVtZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBfZXhwYW5kQnJlYWRjcnVtYnMoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAnbWFudWFsbHktZXhwYW5kZWQnO1xuICAgIHRoaXMuX21hcmtGb3JGb2N1cyA9IHRydWU7XG4gIH1cblxuICAvKiogRXZhbHVhdGUgaWYgdGhlIGV4cGFuZGVkIGJyZWFkY3J1bWIgZWxlbWVudCBmaXRzIGluIHBhZ2Ugd2lkdGgsIG90aGVyd2lzZSBpdCBuZWVkcyBlbGxpcHNpcyAqL1xuICBwcml2YXRlIF9ldmFsdWF0ZUNvbGxhcHNlZFN0YXRlKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9zdGF0ZSAmJlxuICAgICAgdGhpcy5zY3JvbGxXaWR0aCA+IHRoaXMub2Zmc2V0V2lkdGggJiZcbiAgICAgIHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCA+PSBNSU5fQlJFQURDUlVNQlNfVE9fQ09MTEFQU0VcbiAgICApIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gJ2NvbGxhcHNlZCc7XG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5ob3N0RGlzY29ubmVjdGVkKCk7XG4gICAgICB0aGlzLnJlbW92ZUNvbnRyb2xsZXIodGhpcy5fcmVzaXplT2JzZXJ2ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckNvbGxhcHNlZCgpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8bGkgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbVwiPlxuICAgICAgICA8c2xvdCBuYW1lPVwibGktMFwiPjwvc2xvdD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbVwiIGlkPVwic2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXNcIj5cbiAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgbmFtZT1cImNoZXZyb24tc21hbGwtcmlnaHQtc21hbGxcIlxuICAgICAgICAgIGNsYXNzPVwic2JiLWJyZWFkY3J1bWItZ3JvdXBfX2RpdmlkZXItaWNvblwiXG4gICAgICAgID48L3NiYi1pY29uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWQ9XCJzYmItYnJlYWRjcnVtYi1lbGxpcHNpc1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD0ke2kxOG5CcmVhZGNydW1iRWxsaXBzaXNCdXR0b25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX1cbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX2V4cGFuZEJyZWFkY3J1bWJzKCl9XG4gICAgICAgID5cbiAgICAgICAgICAuLi5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwic2JiLWJyZWFkY3J1bWItZ3JvdXBfX2l0ZW1cIj5cbiAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgbmFtZT1cImNoZXZyb24tc21hbGwtcmlnaHQtc21hbGxcIlxuICAgICAgICAgIGNsYXNzPVwic2JiLWJyZWFkY3J1bWItZ3JvdXBfX2RpdmlkZXItaWNvblwiXG4gICAgICAgID48L3NiYi1pY29uPlxuICAgICAgICA8c2xvdCBuYW1lPSR7YGxpLSR7dGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoIC0gMX1gfT48L3Nsb3Q+XG4gICAgICA8L2xpPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJFeHBhbmRlZCgpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5saXN0U2xvdEVudHJpZXMoKS5tYXAoXG4gICAgICAoc2xvdCwgaW5kZXgsIGFycmF5KSA9PiBodG1sYFxuICAgICAgICA8bGkgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbVwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9JHtzbG90Lm5hbWV9Pjwvc2xvdD5cbiAgICAgICAgICAke2luZGV4ICE9PSBhcnJheS5sZW5ndGggLSAxXG4gICAgICAgICAgICA/IGh0bWxgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgbmFtZT1cImNoZXZyb24tc21hbGwtcmlnaHQtc21hbGxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWJyZWFkY3J1bWItZ3JvdXBfX2RpdmlkZXItaWNvblwiXG4gICAgICAgICAgICAgID48L3NiYi1pY29uPmBcbiAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPC9saT5cbiAgICAgIGAsXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPG9sIGNsYXNzPVwic2JiLWJyZWFkY3J1bWItZ3JvdXBcIj5cbiAgICAgICAgJHt0aGlzLl9zdGF0ZSA9PT0gJ2NvbGxhcHNlZCcgPyB0aGlzLl9yZW5kZXJDb2xsYXBzZWQoKSA6IHRoaXMuX3JlbmRlckV4cGFuZGVkKCl9XG4gICAgICA8L29sPlxuICAgICAgJHt0aGlzLnJlbmRlckhpZGRlblNsb3QoKX1cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItYnJlYWRjcnVtYi1ncm91cCc6IFNiYkJyZWFkY3J1bWJHcm91cEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDb0JBLElBQU0sOEJBQThCOzs7Ozs7SUFPdkIsbUNBQXlCO21CQUFTLHNCQUc3QyxXQUFXOzs7Y0FIQSxrQ0FBa0MsWUFHbEM7Ozs2QkFPVixPQUFPLENBQUE7QUFDUixnQkFBQSxNQUFBLE1BQUEsd0JBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEsUUFBQTtLQUFBLE1BQUEsUUFBQSxZQUFBO0tBQUEsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFZLFNBQU07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
@@ -1,4 +1,4 @@
1
- import { t as SbbBreadcrumbGroupElement } from "./breadcrumb-group.component-DjsoMTPI.js";
1
+ import { t as SbbBreadcrumbGroupElement } from "./breadcrumb-group.component-zU06d9ni.js";
2
2
  import { t as SbbBreadcrumbElement } from "./breadcrumb.component-DvOf-PiO.js";
3
3
  import "./breadcrumb.pure.js";
4
4
  //#region src/elements/breadcrumb.ts
@@ -1,3 +1,3 @@
1
- import { t as SbbBreadcrumbGroupElement } from "./breadcrumb-group.component-DjsoMTPI.js";
1
+ import { t as SbbBreadcrumbGroupElement } from "./breadcrumb-group.component-zU06d9ni.js";
2
2
  import { t as SbbBreadcrumbElement } from "./breadcrumb.component-DvOf-PiO.js";
3
3
  export { SbbBreadcrumbElement, SbbBreadcrumbGroupElement };
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@sbb-esta/lyne-elements-dev",
3
- "version": "4.7.0-dev.1773755649",
3
+ "version": "4.7.0-dev.1773817331",
4
4
  "description": "Lyne Design System",
5
5
  "keywords": [
6
6
  "design system",
7
7
  "web components",
8
8
  "lit",
9
9
  "storybook",
10
- "https://github.com/sbb-design-systems/lyne-components/commit/937ad5f5766d215196d1dd0988719f23051f100b"
10
+ "https://github.com/sbb-design-systems/lyne-components/commit/47decd8f58ebb0f714ba4f2d99c7d7a727cdbb05"
11
11
  ],
12
12
  "type": "module",
13
13
  "exports": {
@@ -1,278 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { css, html, nothing } from "lit";
3
- import { state } from "lit/decorators.js";
4
- import { SbbElement } from "./core/base-elements.js";
5
- import { SbbNamedSlotListMixin } from "./core/mixins.js";
6
- import { boxSizingStyles } from "./core/styles.js";
7
- import { SbbLanguageController } from "./core/controllers.js";
8
- import { i18nBreadcrumbEllipsisButtonLabel } from "./core/i18n.js";
9
- import "./icon.js";
10
- import { ResizeController } from "@lit-labs/observers/resize-controller.js";
11
- import { getNextElementIndex, isArrowKeyPressed, sbbInputModalityDetector } from "./core/a11y.js";
12
- //#region src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.scss?lit&inline
13
- var breadcrumb_group_default = css`:host {
14
- display: block;
15
- }
16
-
17
- :host(:is(:state(loaded),[state--loaded])) {
18
- --sbb-breadcrumb-group-visibility: visible;
19
- }
20
-
21
- :host(:is(:is(:state(state-collapsed),[state--state-collapsed]), :is(:state(state-manually-expanded),[state--state-manually-expanded]))) {
22
- --sbb-breadcrumb-group-wrap: wrap;
23
- }
24
-
25
- .sbb-breadcrumb-group {
26
- list-style: none;
27
- margin: 0;
28
- padding: 0;
29
- font-size: inherit;
30
- display: flex;
31
- flex-wrap: var(--sbb-breadcrumb-group-wrap);
32
- column-gap: var(--sbb-spacing-fixed-1x);
33
- visibility: var(--sbb-breadcrumb-group-visibility);
34
- }
35
-
36
- .sbb-breadcrumb-group__item {
37
- flex: 0 0 auto;
38
- display: flex;
39
- column-gap: var(--sbb-spacing-fixed-1x);
40
- }
41
-
42
- .sbb-breadcrumb-group__divider-icon {
43
- color: var(--sbb-breadcrumb-group-ellipsis-color);
44
- }
45
-
46
- #sbb-breadcrumb-ellipsis {
47
- appearance: none;
48
- box-sizing: border-box;
49
- margin: 0;
50
- outline: none;
51
- border: none;
52
- border-radius: 0;
53
- padding: 0;
54
- background: none;
55
- -webkit-tap-highlight-color: transparent;
56
- color: inherit;
57
- --sbb-text-font-size: var(--sbb-text-font-size-xxs);
58
- font-family: var(--sbb-typo-font-family);
59
- font-weight: normal;
60
- line-height: var(--sbb-typo-line-height-text);
61
- letter-spacing: var(--sbb-typo-letter-spacing-text);
62
- font-size: var(--sbb-text-font-size);
63
- line-height: 0;
64
- letter-spacing: 0.01em;
65
- font-size: var(--sbb-text-font-size-xxs);
66
- width: var(--sbb-size-icon-ui-small);
67
- height: var(--sbb-size-icon-ui-small);
68
- border: var(--sbb-breadcrumb-group-ellipsis-border-width) solid var(--sbb-breadcrumb-group-ellipsis-border-color);
69
- border-radius: 50%;
70
- padding-block-end: 0.5em;
71
- cursor: var(--sbb-cursor-pointer);
72
- color: var(--sbb-breadcrumb-group-ellipsis-color);
73
- background-color: var(--sbb-breadcrumb-group-ellipsis-background-color);
74
- overflow: hidden;
75
- }
76
- @media (forced-colors: active) {
77
- #sbb-breadcrumb-ellipsis {
78
- --sbb-breadcrumb-group-ellipsis-border-width: var(--sbb-border-width-2x);
79
- --sbb-breadcrumb-group-ellipsis-border-color: CanvasText;
80
- }
81
- }
82
- @media (any-hover: hover) {
83
- #sbb-breadcrumb-ellipsis:hover {
84
- --sbb-breadcrumb-group-ellipsis-color: var(--sbb-color-2);
85
- --sbb-breadcrumb-group-ellipsis-background-color: var(--sbb-background-color-3);
86
- }
87
- }
88
- @media (any-hover: hover) and (forced-colors: active) {
89
- #sbb-breadcrumb-ellipsis:hover {
90
- --sbb-breadcrumb-group-ellipsis-border-color: Highlight;
91
- }
92
- }
93
- #sbb-breadcrumb-ellipsis:focus-visible {
94
- outline-offset: var(--sbb-focus-outline-offset);
95
- outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
96
- }`;
97
- //#endregion
98
- //#region src/elements/breadcrumb/breadcrumb-group/breadcrumb-group.component.ts
99
- var MIN_BREADCRUMBS_TO_COLLAPSE = 3;
100
- /**
101
- * It can be used as a container for one or more `sbb-breadcrumb` component.
102
- *
103
- * @slot - Use the unnamed slot to add `sbb-breadcrumb` elements.
104
- */
105
- var SbbBreadcrumbGroupElement = (() => {
106
- let _classSuper = SbbNamedSlotListMixin(SbbElement);
107
- let _instanceExtraInitializers = [];
108
- let _set__state_decorators;
109
- return class SbbBreadcrumbGroupElement extends _classSuper {
110
- static {
111
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
112
- _set__state_decorators = [state()];
113
- __esDecorate(this, null, _set__state_decorators, {
114
- kind: "setter",
115
- name: "_state",
116
- static: false,
117
- private: false,
118
- access: {
119
- has: (obj) => "_state" in obj,
120
- set: (obj, value) => {
121
- obj._state = value;
122
- }
123
- },
124
- metadata: _metadata
125
- }, null, _instanceExtraInitializers);
126
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
127
- enumerable: true,
128
- configurable: true,
129
- writable: true,
130
- value: _metadata
131
- });
132
- }
133
- static {
134
- this.elementName = "sbb-breadcrumb-group";
135
- }
136
- static {
137
- this.role = "navigation";
138
- }
139
- static {
140
- this.styles = [boxSizingStyles, breadcrumb_group_default];
141
- }
142
- /** The state of the breadcrumb group. */
143
- set _state(state) {
144
- if (this._stateInternal) this.internals.states.delete(`state-${this._stateInternal}`);
145
- this._stateInternal = state;
146
- if (this._stateInternal) this.internals.states.add(`state-${this._stateInternal}`);
147
- }
148
- get _state() {
149
- return this._stateInternal;
150
- }
151
- constructor() {
152
- super();
153
- this.listChildLocalNames = (__runInitializers(this, _instanceExtraInitializers), ["sbb-breadcrumb"]);
154
- this._stateInternal = null;
155
- this._resizeObserver = new ResizeController(this, {
156
- target: null,
157
- skipInitial: true,
158
- callback: () => this._evaluateCollapsedState()
159
- });
160
- this._language = new SbbLanguageController(this);
161
- this._markForFocus = false;
162
- this.addEventListener?.("keydown", (e) => this._handleKeyDown(e));
163
- }
164
- _handleKeyDown(evt) {
165
- if (!this.listChildren.length || evt.target !== this && evt.target.parentElement !== this) return;
166
- if (isArrowKeyPressed(evt)) {
167
- if (this._state === "collapsed") return this._focusNextCollapsed(evt);
168
- this._focusNext(evt);
169
- }
170
- }
171
- firstUpdated(changedProperties) {
172
- super.firstUpdated(changedProperties);
173
- this._resizeObserver.observe(this);
174
- this.internals.states.add("loaded");
175
- }
176
- willUpdate(changedProperties) {
177
- super.willUpdate(changedProperties);
178
- if (changedProperties.has("listChildren")) this._syncBreadcrumbs();
179
- }
180
- updated(changedProperties) {
181
- super.updated(changedProperties);
182
- if (changedProperties.has("listChildren")) Promise.resolve().then(() => this._evaluateCollapsedState());
183
- if (this._markForFocus && sbbInputModalityDetector.mostRecentModality === "keyboard") {
184
- this.listChildren[1]?.focus();
185
- this._markForFocus = false;
186
- }
187
- }
188
- /** Apply the aria-current attribute to the last sbb-breadcrumb element. */
189
- _syncBreadcrumbs() {
190
- this.listChildren.slice(0, -1).filter((c) => c.hasAttribute("accessibility-current")).forEach((c) => c.removeAttribute("accessibility-current"));
191
- this.listChildren[this.listChildren.length - 1]?.setAttribute("accessibility-current", "page");
192
- if (this.listChildren.length < MIN_BREADCRUMBS_TO_COLLAPSE) this._state = null;
193
- }
194
- /**
195
- * Sets the focus on the correct element when the ellipsis breadcrumb is displayed and the user is navigating with keyboard's arrows.
196
- */
197
- _focusNextCollapsed(evt) {
198
- const arrayCollapsed = [
199
- this.listChildren[0],
200
- this.shadowRoot.querySelector("#sbb-breadcrumb-ellipsis"),
201
- this.listChildren[this.listChildren.length - 1]
202
- ];
203
- this._focusNext(evt, arrayCollapsed);
204
- }
205
- _focusNext(evt, breadcrumbs = this.listChildren) {
206
- breadcrumbs[getNextElementIndex(evt, breadcrumbs.findIndex((e) => e === document.activeElement || e === this.shadowRoot.activeElement), breadcrumbs.length)]?.focus();
207
- evt.preventDefault();
208
- }
209
- /**
210
- * Note: due to @State annotation on _state, this method triggers a new render; as a consequence, the focus is moved
211
- * to the `body`, so if the ellipsis element has focus, it's asynchronously forced to the first element.
212
- */
213
- _expandBreadcrumbs() {
214
- this._state = "manually-expanded";
215
- this._markForFocus = true;
216
- }
217
- /** Evaluate if the expanded breadcrumb element fits in page width, otherwise it needs ellipsis */
218
- _evaluateCollapsedState() {
219
- if (!this._state && this.scrollWidth > this.offsetWidth && this.listChildren.length >= MIN_BREADCRUMBS_TO_COLLAPSE) {
220
- this._state = "collapsed";
221
- this._resizeObserver.hostDisconnected();
222
- this.removeController(this._resizeObserver);
223
- }
224
- }
225
- _renderCollapsed() {
226
- return html`
227
- <li class="sbb-breadcrumb-group__item">
228
- <slot name="li-0"></slot>
229
- </li>
230
- <li class="sbb-breadcrumb-group__item" id="sbb-breadcrumb-group-ellipsis">
231
- <sbb-icon
232
- name="chevron-small-right-small"
233
- class="sbb-breadcrumb-group__divider-icon"
234
- ></sbb-icon>
235
- <button
236
- type="button"
237
- id="sbb-breadcrumb-ellipsis"
238
- aria-label=${i18nBreadcrumbEllipsisButtonLabel[this._language.current]}
239
- aria-expanded="false"
240
- @click=${() => this._expandBreadcrumbs()}
241
- >
242
- ...
243
- </button>
244
- </li>
245
- <li class="sbb-breadcrumb-group__item">
246
- <sbb-icon
247
- name="chevron-small-right-small"
248
- class="sbb-breadcrumb-group__divider-icon"
249
- ></sbb-icon>
250
- <slot name=${`li-${this.listChildren.length - 1}`}></slot>
251
- </li>
252
- `;
253
- }
254
- _renderExpanded() {
255
- return this.listSlotEntries().map((slot, index, array) => html`
256
- <li class="sbb-breadcrumb-group__item">
257
- <slot name=${slot.name}></slot>
258
- ${index !== array.length - 1 ? html`<sbb-icon
259
- name="chevron-small-right-small"
260
- class="sbb-breadcrumb-group__divider-icon"
261
- ></sbb-icon>` : nothing}
262
- </li>
263
- `);
264
- }
265
- render() {
266
- return html`
267
- <ol class="sbb-breadcrumb-group">
268
- ${this._state === "collapsed" ? this._renderCollapsed() : this._renderExpanded()}
269
- </ol>
270
- ${this.renderHiddenSlot()}
271
- `;
272
- }
273
- };
274
- })();
275
- //#endregion
276
- export { SbbBreadcrumbGroupElement as t };
277
-
278
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi1ncm91cC5jb21wb25lbnQtRGpzb01UUEkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi1ncm91cC9icmVhZGNydW1iLWdyb3VwLnNjc3M/bGl0JmlubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWItZ3JvdXAvYnJlYWRjcnVtYi1ncm91cC5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuOmhvc3QoOnN0YXRlKGxvYWRlZCkpIHtcbiAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC12aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG46aG9zdCg6aXMoOnN0YXRlKHN0YXRlLWNvbGxhcHNlZCksIDpzdGF0ZShzdGF0ZS1tYW51YWxseS1leHBhbmRlZCkpKSB7XG4gIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtd3JhcDogd3JhcDtcbn1cblxuLnNiYi1icmVhZGNydW1iLWdyb3VwIHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC13cmFwKTtcbiAgY29sdW1uLWdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICB2aXNpYmlsaXR5OiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC12aXNpYmlsaXR5KTtcbn1cblxuLnNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtIHtcbiAgZmxleDogMCAwIGF1dG87XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbHVtbi1nYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KTtcbn1cblxuLnNiYi1icmVhZGNydW1iLWdyb3VwX19kaXZpZGVyLWljb24ge1xuICBjb2xvcjogdmFyKC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtY29sb3IpO1xufVxuXG4jc2JiLWJyZWFkY3J1bWItZWxsaXBzaXMge1xuICBAaW5jbHVkZSBzYmIuYnV0dG9uLXJlc2V0O1xuICBAaW5jbHVkZSBzYmIudGV4dC14eHMtLXJlZ3VsYXI7XG5cbiAgLy8gbGluZSBoZWlnaHQgYW5kIGxldHRlci1zcGFjaW5nIG5lZWRlZCB0byBtYXRjaCBzcXVhcmVzIGRyYXduIGluIEZpZ21hLlxuICBsaW5lLWhlaWdodDogMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTtcbiAgZm9udC1zaXplOiB2YXIoLS1zYmItdGV4dC1mb250LXNpemUteHhzKTtcbiAgd2lkdGg6IHZhcigtLXNiYi1zaXplLWljb24tdWktc21hbGwpO1xuICBoZWlnaHQ6IHZhcigtLXNiYi1zaXplLWljb24tdWktc21hbGwpO1xuICBib3JkZXI6IHZhcigtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWJvcmRlci13aWR0aCkgc29saWRcbiAgICB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG5cbiAgLy8gSW4gb3JkZXIgdG8gdmVydGljYWxseSBjZW50ZXIgLi4uLCB3ZSB1c2UgcGFkZGluZyB3aXRoIGhhbGYgdGhlIGZvbnQgc2l6ZS5cbiAgcGFkZGluZy1ibG9jay1lbmQ6IDAuNWVtO1xuICBjdXJzb3I6IHZhcigtLXNiYi1jdXJzb3ItcG9pbnRlcik7XG4gIGNvbG9yOiB2YXIoLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWJhY2tncm91bmQtY29sb3IpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWJvcmRlci13aWR0aDogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0yeCk7XG4gICAgLS1zYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpcy1ib3JkZXItY29sb3I6IENhbnZhc1RleHQ7XG4gIH1cblxuICBAaW5jbHVkZSBzYmIuaG92ZXItbXEoJGhvdmVyOiB0cnVlKSB7XG4gICAgJjpob3ZlciB7XG4gICAgICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItMik7XG4gICAgICAtLXNiYi1icmVhZGNydW1iLWdyb3VwLWVsbGlwc2lzLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1iYWNrZ3JvdW5kLWNvbG9yLTMpO1xuXG4gICAgICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgICAgIC0tc2JiLWJyZWFkY3J1bWItZ3JvdXAtZWxsaXBzaXMtYm9yZGVyLWNvbG9yOiBIaWdobGlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICBAaW5jbHVkZSBzYmIuZm9jdXMtb3V0bGluZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUmVzaXplQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvcmVzaXplLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHsgdHlwZSBDU1NSZXN1bHRHcm91cCwgaHRtbCwgbm90aGluZywgdHlwZSBQcm9wZXJ0eVZhbHVlcywgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHtcbiAgZ2V0TmV4dEVsZW1lbnRJbmRleCxcbiAgaXNBcnJvd0tleVByZXNzZWQsXG4gIHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvcixcbn0gZnJvbSAnLi4vLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYkVsZW1lbnQgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UtZWxlbWVudHMudHMnO1xuaW1wb3J0IHsgU2JiTGFuZ3VhZ2VDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy50cyc7XG5pbXBvcnQgeyBpMThuQnJlYWRjcnVtYkVsbGlwc2lzQnV0dG9uTGFiZWwgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4udHMnO1xuaW1wb3J0IHsgU2JiTmFtZWRTbG90TGlzdE1peGluLCB0eXBlIFdpdGhMaXN0Q2hpbGRyZW4gfSBmcm9tICcuLi8uLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi8uLi9jb3JlL3N0eWxlcy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkJyZWFkY3J1bWJFbGVtZW50IH0gZnJvbSAnLi4vYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2JyZWFkY3J1bWItZ3JvdXAuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi8uLi9pY29uLnRzJztcblxuY29uc3QgTUlOX0JSRUFEQ1JVTUJTX1RPX0NPTExBUFNFID0gMztcblxuLyoqXG4gKiBJdCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRhaW5lciBmb3Igb25lIG9yIG1vcmUgYHNiYi1icmVhZGNydW1iYCBjb21wb25lbnQuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgYHNiYi1icmVhZGNydW1iYCBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkJyZWFkY3J1bWJHcm91cEVsZW1lbnQgZXh0ZW5kcyBTYmJOYW1lZFNsb3RMaXN0TWl4aW48XG4gIFNiYkJyZWFkY3J1bWJFbGVtZW50LFxuICB0eXBlb2YgU2JiRWxlbWVudFxuPihTYmJFbGVtZW50KSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItYnJlYWRjcnVtYi1ncm91cCc7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICduYXZpZ2F0aW9uJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgc3R5bGVdO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lcyA9IFsnc2JiLWJyZWFkY3J1bWInXTtcblxuICAvKiogVGhlIHN0YXRlIG9mIHRoZSBicmVhZGNydW1iIGdyb3VwLiAqL1xuICBAc3RhdGUoKVxuICBwcml2YXRlIHNldCBfc3RhdGUoc3RhdGU6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5fc3RhdGVJbnRlcm5hbCkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgc3RhdGUtJHt0aGlzLl9zdGF0ZUludGVybmFsfWApO1xuICAgIH1cbiAgICB0aGlzLl9zdGF0ZUludGVybmFsID0gc3RhdGU7XG4gICAgaWYgKHRoaXMuX3N0YXRlSW50ZXJuYWwpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoYHN0YXRlLSR7dGhpcy5fc3RhdGVJbnRlcm5hbH1gKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXQgX3N0YXRlKCk6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZUludGVybmFsO1xuICB9XG4gIHByaXZhdGUgX3N0YXRlSW50ZXJuYWw6ICdjb2xsYXBzZWQnIHwgJ21hbnVhbGx5LWV4cGFuZGVkJyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fZXZhbHVhdGVDb2xsYXBzZWRTdGF0ZSgpLFxuICB9KTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9tYXJrRm9yRm9jdXMgPSBmYWxzZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVLZXlEb3duKGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleURvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCB8fFxuICAgICAgLy8gZG9uJ3QgdHJhcCBuZXN0ZWQgaGFuZGxpbmdcbiAgICAgICgoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkgIT09IHRoaXMgJiYgKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQgIT09IHRoaXMpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyb3dLZXlQcmVzc2VkKGV2dCkpIHtcbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzTmV4dENvbGxhcHNlZChldnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZm9jdXNOZXh0KGV2dCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdsb2FkZWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbGlzdENoaWxkcmVuJykpIHtcbiAgICAgIHRoaXMuX3N5bmNCcmVhZGNydW1icygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczxXaXRoTGlzdENoaWxkcmVuPHRoaXM+Pik6IHZvaWQge1xuICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2xpc3RDaGlsZHJlbicpKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuX2V2YWx1YXRlQ29sbGFwc2VkU3RhdGUoKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXJrRm9yRm9jdXMgJiYgc2JiSW5wdXRNb2RhbGl0eURldGVjdG9yLm1vc3RSZWNlbnRNb2RhbGl0eSA9PT0gJ2tleWJvYXJkJykge1xuICAgICAgdGhpcy5saXN0Q2hpbGRyZW5bMV0/LmZvY3VzKCk7XG5cbiAgICAgIC8vIFJlc2V0IG1hcmsgZm9yIGZvY3VzXG4gICAgICB0aGlzLl9tYXJrRm9yRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQXBwbHkgdGhlIGFyaWEtY3VycmVudCBhdHRyaWJ1dGUgdG8gdGhlIGxhc3Qgc2JiLWJyZWFkY3J1bWIgZWxlbWVudC4gKi9cbiAgcHJpdmF0ZSBfc3luY0JyZWFkY3J1bWJzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdENoaWxkcmVuXG4gICAgICAuc2xpY2UoMCwgLTEpXG4gICAgICAuZmlsdGVyKChjKSA9PiBjLmhhc0F0dHJpYnV0ZSgnYWNjZXNzaWJpbGl0eS1jdXJyZW50JykpXG4gICAgICAuZm9yRWFjaCgoYykgPT4gYy5yZW1vdmVBdHRyaWJ1dGUoJ2FjY2Vzc2liaWxpdHktY3VycmVudCcpKTtcbiAgICB0aGlzLmxpc3RDaGlsZHJlblt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxXT8uc2V0QXR0cmlidXRlKCdhY2Nlc3NpYmlsaXR5LWN1cnJlbnQnLCAncGFnZScpO1xuXG4gICAgLy8gSWYgaXQgaXMgbm90IGV4cGFuZGFibGUsIHJlc2V0IHN0YXRlXG4gICAgaWYgKHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aCA8IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRSkge1xuICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgY29ycmVjdCBlbGVtZW50IHdoZW4gdGhlIGVsbGlwc2lzIGJyZWFkY3J1bWIgaXMgZGlzcGxheWVkIGFuZCB0aGUgdXNlciBpcyBuYXZpZ2F0aW5nIHdpdGgga2V5Ym9hcmQncyBhcnJvd3MuXG4gICAqL1xuICBwcml2YXRlIF9mb2N1c05leHRDb2xsYXBzZWQoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYXJyYXlDb2xsYXBzZWQ6IFNiYkJyZWFkY3J1bWJFbGVtZW50W10gPSBbXG4gICAgICB0aGlzLmxpc3RDaGlsZHJlblswXSxcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignI3NiYi1icmVhZGNydW1iLWVsbGlwc2lzJykgYXMgU2JiQnJlYWRjcnVtYkVsZW1lbnQsXG4gICAgICB0aGlzLmxpc3RDaGlsZHJlblt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxXSxcbiAgICBdO1xuICAgIHRoaXMuX2ZvY3VzTmV4dChldnQsIGFycmF5Q29sbGFwc2VkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzTmV4dChcbiAgICBldnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgYnJlYWRjcnVtYnM6IFNiYkJyZWFkY3J1bWJFbGVtZW50W10gPSB0aGlzLmxpc3RDaGlsZHJlbixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gYnJlYWRjcnVtYnMuZmluZEluZGV4KFxuICAgICAgKGUpID0+IGUgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZSA9PT0gdGhpcy5zaGFkb3dSb290IS5hY3RpdmVFbGVtZW50LFxuICAgICk7XG4gICAgY29uc3QgbmV4dEluZGV4OiBudW1iZXIgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2dCwgY3VycmVudCwgYnJlYWRjcnVtYnMubGVuZ3RoKTtcbiAgICBicmVhZGNydW1ic1tuZXh0SW5kZXhdPy5mb2N1cygpO1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGU6IGR1ZSB0byBAU3RhdGUgYW5ub3RhdGlvbiBvbiBfc3RhdGUsIHRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgbmV3IHJlbmRlcjsgYXMgYSBjb25zZXF1ZW5jZSwgdGhlIGZvY3VzIGlzIG1vdmVkXG4gICAqIHRvIHRoZSBgYm9keWAsIHNvIGlmIHRoZSBlbGxpcHNpcyBlbGVtZW50IGhhcyBmb2N1cywgaXQncyBhc3luY2hyb25vdXNseSBmb3JjZWQgdG8gdGhlIGZpcnN0IGVsZW1lbnQuXG4gICAqL1xuICBwcml2YXRlIF9leHBhbmRCcmVhZGNydW1icygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9ICdtYW51YWxseS1leHBhbmRlZCc7XG4gICAgdGhpcy5fbWFya0ZvckZvY3VzID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBFdmFsdWF0ZSBpZiB0aGUgZXhwYW5kZWQgYnJlYWRjcnVtYiBlbGVtZW50IGZpdHMgaW4gcGFnZSB3aWR0aCwgb3RoZXJ3aXNlIGl0IG5lZWRzIGVsbGlwc2lzICovXG4gIHByaXZhdGUgX2V2YWx1YXRlQ29sbGFwc2VkU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX3N0YXRlICYmXG4gICAgICB0aGlzLnNjcm9sbFdpZHRoID4gdGhpcy5vZmZzZXRXaWR0aCAmJlxuICAgICAgdGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoID49IE1JTl9CUkVBRENSVU1CU19UT19DT0xMQVBTRVxuICAgICkge1xuICAgICAgdGhpcy5fc3RhdGUgPSAnY29sbGFwc2VkJztcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmhvc3REaXNjb25uZWN0ZWQoKTtcbiAgICAgIHRoaXMucmVtb3ZlQ29udHJvbGxlcih0aGlzLl9yZXNpemVPYnNlcnZlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ29sbGFwc2VkKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCI+XG4gICAgICAgIDxzbG90IG5hbWU9XCJsaS0wXCI+PC9zbG90PlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCIgaWQ9XCJzYmItYnJlYWRjcnVtYi1ncm91cC1lbGxpcHNpc1wiPlxuICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpZD1cInNiYi1icmVhZGNydW1iLWVsbGlwc2lzXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPSR7aTE4bkJyZWFkY3J1bWJFbGxpcHNpc0J1dHRvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fZXhwYW5kQnJlYWRjcnVtYnMoKX1cbiAgICAgICAgPlxuICAgICAgICAgIC4uLlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9faXRlbVwiPlxuICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgPjwvc2JiLWljb24+XG4gICAgICAgIDxzbG90IG5hbWU9JHtgbGktJHt0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggLSAxfWB9Pjwvc2xvdD5cbiAgICAgIDwvbGk+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckV4cGFuZGVkKCk6IFRlbXBsYXRlUmVzdWx0W10ge1xuICAgIHJldHVybiB0aGlzLmxpc3RTbG90RW50cmllcygpLm1hcChcbiAgICAgIChzbG90LCBpbmRleCwgYXJyYXkpID0+IGh0bWxgXG4gICAgICAgIDxsaSBjbGFzcz1cInNiYi1icmVhZGNydW1iLWdyb3VwX19pdGVtXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT0ke3Nsb3QubmFtZX0+PC9zbG90PlxuICAgICAgICAgICR7aW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gaHRtbGA8c2JiLWljb25cbiAgICAgICAgICAgICAgICBuYW1lPVwiY2hldnJvbi1zbWFsbC1yaWdodC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cF9fZGl2aWRlci1pY29uXCJcbiAgICAgICAgICAgICAgPjwvc2JiLWljb24+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8L2xpPlxuICAgICAgYCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8b2wgY2xhc3M9XCJzYmItYnJlYWRjcnVtYi1ncm91cFwiPlxuICAgICAgICAke3RoaXMuX3N0YXRlID09PSAnY29sbGFwc2VkJyA/IHRoaXMuX3JlbmRlckNvbGxhcHNlZCgpIDogdGhpcy5fcmVuZGVyRXhwYW5kZWQoKX1cbiAgICAgIDwvb2w+XG4gICAgICAke3RoaXMucmVuZGVySGlkZGVuU2xvdCgpfVxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1icmVhZGNydW1iLWdyb3VwJzogU2JiQnJlYWRjcnVtYkdyb3VwRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ29CQSxJQUFNLDhCQUE4Qjs7Ozs7O0lBT3ZCLG1DQUF5QjttQkFBUyxzQkFHN0MsV0FBVzs7O2NBSEEsa0NBQWtDLFlBR2xDOzs7NkJBT1YsT0FBTyxDQUFBO0FBQ1IsZ0JBQUEsTUFBQSxNQUFBLHdCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsWUFBQTtLQUFBLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBWSxTQUFNOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsTUFBQSwyQkFBQTs7Ozs7Ozs7O0FBUGMsUUFBQSxjQUFzQjs7O0FBQ3RCLFFBQUEsT0FBTzs7O0FB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