@sbb-esta/lyne-elements-experimental 2.8.0 → 2.9.0
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.
- package/custom-elements.json +35 -35
- package/development/journey-summary/{journey-summary.d.ts → journey-summary.component.d.ts} +1 -1
- package/development/journey-summary/journey-summary.component.d.ts.map +1 -0
- package/development/journey-summary/journey-summary.component.js +297 -0
- package/development/journey-summary.d.ts +1 -1
- package/development/journey-summary.d.ts.map +1 -1
- package/development/journey-summary.js +1 -1
- package/{pearl-chain/pearl-chain.d.ts → development/pearl-chain/pearl-chain.component.d.ts} +1 -1
- package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -0
- package/development/pearl-chain/{pearl-chain.js → pearl-chain.component.js} +1 -1
- package/{pearl-chain-time/pearl-chain-time.d.ts → development/pearl-chain-time/pearl-chain-time.component.d.ts} +1 -1
- package/development/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -0
- package/development/pearl-chain-time/{pearl-chain-time.js → pearl-chain-time.component.js} +1 -1
- package/development/pearl-chain-time.d.ts +1 -1
- package/development/pearl-chain-time.d.ts.map +1 -1
- package/development/pearl-chain-time.js +1 -1
- package/development/pearl-chain-vertical/{pearl-chain-vertical.d.ts → pearl-chain-vertical.component.d.ts} +1 -1
- package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -0
- package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +45 -0
- package/development/pearl-chain-vertical-item/{pearl-chain-vertical-item.d.ts → pearl-chain-vertical-item.component.d.ts} +1 -1
- package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -0
- package/development/pearl-chain-vertical-item/{pearl-chain-vertical-item.js → pearl-chain-vertical-item.component.js} +1 -1
- package/development/pearl-chain-vertical-item.d.ts +1 -1
- package/development/pearl-chain-vertical-item.d.ts.map +1 -1
- package/development/pearl-chain-vertical-item.js +1 -1
- package/development/pearl-chain-vertical.d.ts +1 -1
- package/development/pearl-chain-vertical.d.ts.map +1 -1
- package/development/pearl-chain-vertical.js +1 -1
- package/development/pearl-chain.d.ts +1 -1
- package/development/pearl-chain.d.ts.map +1 -1
- package/development/pearl-chain.js +1 -1
- package/development/timetable-duration/{timetable-duration.d.ts → timetable-duration.component.d.ts} +1 -1
- package/development/timetable-duration/timetable-duration.component.d.ts.map +1 -0
- package/development/timetable-duration/timetable-duration.component.js +119 -0
- package/development/timetable-duration.d.ts +1 -1
- package/development/timetable-duration.d.ts.map +1 -1
- package/development/timetable-duration.js +1 -1
- package/development/timetable-row/{timetable-row.d.ts → timetable-row.component.d.ts} +1 -1
- package/development/timetable-row/timetable-row.component.d.ts.map +1 -0
- package/development/timetable-row/timetable-row.component.js +820 -0
- package/development/timetable-row.d.ts +1 -1
- package/development/timetable-row.d.ts.map +1 -1
- package/development/timetable-row.js +1 -1
- package/index.d.ts +7 -7
- package/index.js +7 -7
- package/journey-summary/{journey-summary.d.ts → journey-summary.component.d.ts} +1 -1
- package/journey-summary/journey-summary.component.d.ts.map +1 -0
- package/journey-summary.d.ts +1 -1
- package/journey-summary.d.ts.map +1 -1
- package/journey-summary.js +1 -1
- package/package.json +2 -2
- package/{development/pearl-chain/pearl-chain.d.ts → pearl-chain/pearl-chain.component.d.ts} +1 -1
- package/pearl-chain/pearl-chain.component.d.ts.map +1 -0
- package/{development/pearl-chain-time/pearl-chain-time.d.ts → pearl-chain-time/pearl-chain-time.component.d.ts} +1 -1
- package/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -0
- package/pearl-chain-time.d.ts +1 -1
- package/pearl-chain-time.d.ts.map +1 -1
- package/pearl-chain-time.js +1 -1
- package/pearl-chain-vertical/{pearl-chain-vertical.d.ts → pearl-chain-vertical.component.d.ts} +1 -1
- package/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -0
- package/pearl-chain-vertical-item/{pearl-chain-vertical-item.d.ts → pearl-chain-vertical-item.component.d.ts} +1 -1
- package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -0
- package/pearl-chain-vertical-item.d.ts +1 -1
- package/pearl-chain-vertical-item.d.ts.map +1 -1
- package/pearl-chain-vertical-item.js +1 -1
- package/pearl-chain-vertical.d.ts +1 -1
- package/pearl-chain-vertical.d.ts.map +1 -1
- package/pearl-chain-vertical.js +1 -1
- package/pearl-chain.d.ts +1 -1
- package/pearl-chain.d.ts.map +1 -1
- package/pearl-chain.js +1 -1
- package/timetable-duration/{timetable-duration.d.ts → timetable-duration.component.d.ts} +1 -1
- package/timetable-duration/timetable-duration.component.d.ts.map +1 -0
- package/timetable-duration.d.ts +1 -1
- package/timetable-duration.d.ts.map +1 -1
- package/timetable-duration.js +1 -1
- package/timetable-row/{timetable-row.d.ts → timetable-row.component.d.ts} +1 -1
- package/timetable-row/timetable-row.component.d.ts.map +1 -0
- package/timetable-row.d.ts +1 -1
- package/timetable-row.d.ts.map +1 -1
- package/timetable-row.js +1 -1
- package/development/journey-summary/journey-summary.d.ts.map +0 -1
- package/development/journey-summary/journey-summary.js +0 -297
- package/development/pearl-chain/pearl-chain.d.ts.map +0 -1
- package/development/pearl-chain-time/pearl-chain-time.d.ts.map +0 -1
- package/development/pearl-chain-vertical/pearl-chain-vertical.d.ts.map +0 -1
- package/development/pearl-chain-vertical/pearl-chain-vertical.js +0 -45
- package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts.map +0 -1
- package/development/timetable-duration/timetable-duration.d.ts.map +0 -1
- package/development/timetable-duration/timetable-duration.js +0 -119
- package/development/timetable-row/timetable-row.d.ts.map +0 -1
- package/development/timetable-row/timetable-row.js +0 -820
- package/journey-summary/journey-summary.d.ts.map +0 -1
- package/pearl-chain/pearl-chain.d.ts.map +0 -1
- package/pearl-chain-time/pearl-chain-time.d.ts.map +0 -1
- package/pearl-chain-vertical/pearl-chain-vertical.d.ts.map +0 -1
- package/pearl-chain-vertical-item/pearl-chain-vertical-item.d.ts.map +0 -1
- package/timetable-duration/timetable-duration.d.ts.map +0 -1
- package/timetable-row/timetable-row.d.ts.map +0 -1
- /package/journey-summary/{journey-summary.js → journey-summary.component.js} +0 -0
- /package/pearl-chain/{pearl-chain.js → pearl-chain.component.js} +0 -0
- /package/pearl-chain-time/{pearl-chain-time.js → pearl-chain-time.component.js} +0 -0
- /package/pearl-chain-vertical/{pearl-chain-vertical.js → pearl-chain-vertical.component.js} +0 -0
- /package/pearl-chain-vertical-item/{pearl-chain-vertical-item.js → pearl-chain-vertical-item.component.js} +0 -0
- /package/timetable-duration/{timetable-duration.js → timetable-duration.component.js} +0 -0
- /package/timetable-row/{timetable-row.js → timetable-row.component.js} +0 -0
|
@@ -0,0 +1,820 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
import { __runInitializers, __esDecorate } from "tslib";
|
|
9
|
+
import { SbbLanguageController } from "@sbb-esta/lyne-elements/core/controllers.js";
|
|
10
|
+
import { defaultDateAdapter } from "@sbb-esta/lyne-elements/core/datetime.js";
|
|
11
|
+
import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
|
|
12
|
+
import { setOrRemoveAttribute } from "@sbb-esta/lyne-elements/core/dom.js";
|
|
13
|
+
import { i18nFromPlatform, i18nDeparture, i18nMeansOfTransport, i18nDirection, i18nRealTimeInfo, i18nSupersaver, i18nTransferProcedures, i18nTransferProcedure, i18nArrival, i18nClass, i18nOccupancy, i18nTravelhints, i18nTripDuration, i18nNew, i18nTripQuayChange } from "@sbb-esta/lyne-elements/core/i18n.js";
|
|
14
|
+
import { css, LitElement, nothing, html } from "lit";
|
|
15
|
+
import { customElement, property } from "lit/decorators.js";
|
|
16
|
+
import { removeTimezoneFromISOTimeString, durationToTime } from "../core/datetime.js";
|
|
17
|
+
import { isRideLeg, getDepartureArrivalTimeAttribute } from "../core/timetable.js";
|
|
18
|
+
import "@sbb-esta/lyne-elements/card.js";
|
|
19
|
+
import "@sbb-esta/lyne-elements/icon.js";
|
|
20
|
+
import "@sbb-esta/lyne-elements/timetable-occupancy.js";
|
|
21
|
+
import "../pearl-chain-time.js";
|
|
22
|
+
import { f as format } from "../format-D0-yhzi4.js";
|
|
23
|
+
const style = css`*,
|
|
24
|
+
::before,
|
|
25
|
+
::after {
|
|
26
|
+
box-sizing: border-box;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
:host {
|
|
30
|
+
--sbb-timetable-row-gap: var(--sbb-spacing-fixed-2x);
|
|
31
|
+
--sbb-timetable-row-height: 1.5625rem;
|
|
32
|
+
--sbb-timetable-row-height-header: 1.25rem;
|
|
33
|
+
--sbb-timetable-row-height-footer: 1rem;
|
|
34
|
+
--sbb-timetable-row-skeleton-pulse-duration: 1800ms;
|
|
35
|
+
display: block;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
:host([disable-animation]) {
|
|
39
|
+
--sbb-timetable-row-skeleton-pulse-duration: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.sbb-timetable__row-transport-icon {
|
|
43
|
+
--sbb-icon-svg-width: 1.25rem;
|
|
44
|
+
--sbb-icon-svg-height: 1.25rem;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.sbb-travel-hints__item {
|
|
48
|
+
--sbb-icon-svg-height: 0.875rem;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.sbb-screen-reader-only {
|
|
52
|
+
border: 0;
|
|
53
|
+
clip: rect(0 0 0 0);
|
|
54
|
+
height: 1px;
|
|
55
|
+
margin: -1px;
|
|
56
|
+
overflow: hidden;
|
|
57
|
+
padding: 0;
|
|
58
|
+
position: absolute;
|
|
59
|
+
white-space: nowrap;
|
|
60
|
+
width: 1px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.sbb-timetable__row--quay {
|
|
64
|
+
margin-inline-end: var(--sbb-spacing-fixed-1x);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.sbb-timetable__row--quay-type {
|
|
68
|
+
float: left;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
ul {
|
|
72
|
+
list-style: none;
|
|
73
|
+
margin: 0;
|
|
74
|
+
padding: 0;
|
|
75
|
+
font-size: inherit;
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
li {
|
|
80
|
+
display: inline-flex;
|
|
81
|
+
align-self: center;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.sbb-timetable__row-transport {
|
|
85
|
+
display: inline-flex;
|
|
86
|
+
align-self: center;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.sbb-timetable__row-transportnumber,
|
|
90
|
+
.sbb-timetable__row-time {
|
|
91
|
+
--sbb-text-font-size: var(--sbb-font-size-text-s);
|
|
92
|
+
font-family: var(--sbb-typo-font-family);
|
|
93
|
+
font-weight: normal;
|
|
94
|
+
line-height: var(--sbb-typo-line-height-body-text);
|
|
95
|
+
letter-spacing: var(--sbb-typo-letter-spacing-body-text);
|
|
96
|
+
font-size: var(--sbb-text-font-size);
|
|
97
|
+
font-weight: bold;
|
|
98
|
+
line-height: unset;
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
align-self: center;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.sbb-timetable__row {
|
|
104
|
+
--sbb-text-font-size: var(--sbb-font-size-text-s);
|
|
105
|
+
font-family: var(--sbb-typo-font-family);
|
|
106
|
+
font-weight: normal;
|
|
107
|
+
line-height: var(--sbb-typo-line-height-body-text);
|
|
108
|
+
letter-spacing: var(--sbb-typo-letter-spacing-body-text);
|
|
109
|
+
font-size: var(--sbb-text-font-size);
|
|
110
|
+
display: flex;
|
|
111
|
+
flex-direction: column;
|
|
112
|
+
gap: var(--sbb-timetable-row-gap);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.sbb-timetable__row-header,
|
|
116
|
+
.sbb-timetable__row-footer {
|
|
117
|
+
animation: none;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.sbb-timetable__row-header {
|
|
121
|
+
display: flex;
|
|
122
|
+
gap: var(--sbb-spacing-fixed-2x);
|
|
123
|
+
align-items: center;
|
|
124
|
+
line-height: var(--sbb-timetable-row-height-header);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.sbb-timetable__row-details,
|
|
128
|
+
.sbb-timetable__row-hints {
|
|
129
|
+
display: inline-flex;
|
|
130
|
+
gap: var(--sbb-spacing-fixed-1x);
|
|
131
|
+
align-items: center;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.sbb-timetable__row-header p {
|
|
135
|
+
overflow: hidden;
|
|
136
|
+
white-space: nowrap;
|
|
137
|
+
text-overflow: ellipsis;
|
|
138
|
+
margin: 0;
|
|
139
|
+
align-self: center;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.sbb-timetable__row-footer {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-wrap: wrap;
|
|
145
|
+
justify-content: space-between;
|
|
146
|
+
align-items: center;
|
|
147
|
+
gap: var(--sbb-spacing-fixed-2x);
|
|
148
|
+
line-height: var(--sbb-timetable-row-height-footer);
|
|
149
|
+
}
|
|
150
|
+
.sbb-timetable__row-footer > span {
|
|
151
|
+
align-self: center;
|
|
152
|
+
}
|
|
153
|
+
.sbb-timetable__row-footer :only-child {
|
|
154
|
+
margin-inline-start: auto;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.sbb-timetable__row-quay--changed {
|
|
158
|
+
color: var(--sbb-color-red);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.sbb-timetable__row-transport-wrapper,
|
|
162
|
+
.sbb-timetable__row-warning {
|
|
163
|
+
display: inline-flex;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.sbb-loading {
|
|
167
|
+
pointer-events: none;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.sbb-loading__wrapper {
|
|
171
|
+
display: flex;
|
|
172
|
+
flex-direction: column;
|
|
173
|
+
gap: var(--sbb-spacing-fixed-2x);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.sbb-loading__row {
|
|
177
|
+
width: 100%;
|
|
178
|
+
border-radius: var(--sbb-border-radius-1x);
|
|
179
|
+
height: var(--sbb-timetable-row-height);
|
|
180
|
+
}
|
|
181
|
+
@media (min-width: calc(52.5rem)) {
|
|
182
|
+
.sbb-loading__row {
|
|
183
|
+
height: 1.75rem;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
@media (forced-colors: active) {
|
|
187
|
+
.sbb-loading__row {
|
|
188
|
+
border: var(--sbb-border-width-1x) solid ButtonBorder !important;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.sbb-loading__row,
|
|
193
|
+
.sbb-loading__badge {
|
|
194
|
+
background: var(--sbb-color-cloud);
|
|
195
|
+
animation: skeleton-pulse var(--sbb-timetable-row-skeleton-pulse-duration) ease-out infinite;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.sbb-loading__row:first-of-type {
|
|
199
|
+
height: var(--sbb-timetable-row-height-header);
|
|
200
|
+
width: 50%;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.sbb-loading__row:last-of-type {
|
|
204
|
+
height: var(--sbb-timetable-row-height-footer);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.sbb-loading__badge {
|
|
208
|
+
margin-inline: auto calc(var(--sbb-spacing-fixed-3x) * -1);
|
|
209
|
+
padding-inline-end: var(--sbb-spacing-fixed-6x);
|
|
210
|
+
border-end-start-radius: var(--sbb-border-radius-4x);
|
|
211
|
+
transform: skew(16deg, 0deg);
|
|
212
|
+
width: 7.1875rem;
|
|
213
|
+
height: 1.25rem;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
@keyframes skeleton-pulse {
|
|
217
|
+
0% {
|
|
218
|
+
background: var(--sbb-color-cloud);
|
|
219
|
+
}
|
|
220
|
+
17% {
|
|
221
|
+
background: var(--sbb-color-cloud);
|
|
222
|
+
}
|
|
223
|
+
50% {
|
|
224
|
+
background: var(--sbb-color-milk);
|
|
225
|
+
}
|
|
226
|
+
67% {
|
|
227
|
+
background: var(--sbb-color-milk);
|
|
228
|
+
}
|
|
229
|
+
100% {
|
|
230
|
+
background: var(--sbb-color-cloud);
|
|
231
|
+
}
|
|
232
|
+
}`;
|
|
233
|
+
const renderIconProduct = (icon, name) => {
|
|
234
|
+
return html`<span class="sbb-timetable__row-transport">
|
|
235
|
+
<sbb-icon name=${icon}></sbb-icon>
|
|
236
|
+
<span class="sbb-screen-reader-only">${name}</span>
|
|
237
|
+
</span>`;
|
|
238
|
+
};
|
|
239
|
+
const renderStringProduct = (vehicleName, line) => {
|
|
240
|
+
const space = ["M", "B", "T"].includes(vehicleName) ? " " : "";
|
|
241
|
+
return html`<span class="sbb-timetable__row-transportnumber">
|
|
242
|
+
${line !== null ? vehicleName + space + line : vehicleName}
|
|
243
|
+
</span>`;
|
|
244
|
+
};
|
|
245
|
+
const getReachableText = (legs) => {
|
|
246
|
+
var _a, _b, _c;
|
|
247
|
+
return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
|
|
248
|
+
var _a2, _b2;
|
|
249
|
+
return (_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.reachableText;
|
|
250
|
+
})) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.reachableText;
|
|
251
|
+
};
|
|
252
|
+
const getDelayText = (legs) => {
|
|
253
|
+
var _a, _b, _c;
|
|
254
|
+
return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
|
|
255
|
+
var _a2, _b2;
|
|
256
|
+
return (_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.delayText;
|
|
257
|
+
})) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.delayText;
|
|
258
|
+
};
|
|
259
|
+
const getRedirectedText = (legs) => {
|
|
260
|
+
var _a, _b, _c;
|
|
261
|
+
return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
|
|
262
|
+
var _a2, _b2;
|
|
263
|
+
return !!((_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.redirectedText);
|
|
264
|
+
})) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.redirectedText;
|
|
265
|
+
};
|
|
266
|
+
const getUnplannedStop = (legs) => {
|
|
267
|
+
var _a, _b, _c;
|
|
268
|
+
return (_c = (_b = (_a = legs == null ? void 0 : legs.find((leg) => {
|
|
269
|
+
var _a2, _b2;
|
|
270
|
+
return !!((_b2 = (_a2 = leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b2.unplannedStopPointsText);
|
|
271
|
+
})) == null ? void 0 : _a.serviceJourney) == null ? void 0 : _b.serviceAlteration) == null ? void 0 : _c.unplannedStopPointsText;
|
|
272
|
+
};
|
|
273
|
+
const sortSituation = (situations) => {
|
|
274
|
+
var _a;
|
|
275
|
+
const priorities = {
|
|
276
|
+
DISTURBANCE: 0,
|
|
277
|
+
INFORMATION: 1,
|
|
278
|
+
DELAY: 2,
|
|
279
|
+
TRAIN_REPLACEMENT_BY_BUS: 3,
|
|
280
|
+
CONSTRUCTION_SITE: 4,
|
|
281
|
+
END_MESSAGE: 5
|
|
282
|
+
};
|
|
283
|
+
return (_a = [...situations]) == null ? void 0 : _a.sort((a, b) => priorities[a.cause] - priorities[b.cause]);
|
|
284
|
+
};
|
|
285
|
+
const getHimIcon = (situation) => {
|
|
286
|
+
var _a;
|
|
287
|
+
switch (situation == null ? void 0 : situation.cause) {
|
|
288
|
+
case "DISTURBANCE":
|
|
289
|
+
return {
|
|
290
|
+
name: "disruption",
|
|
291
|
+
text: ((_a = situation == null ? void 0 : situation.broadcastMessages) == null ? void 0 : _a.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
|
|
292
|
+
};
|
|
293
|
+
case "INFORMATION":
|
|
294
|
+
return {
|
|
295
|
+
name: "info",
|
|
296
|
+
text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
|
|
297
|
+
};
|
|
298
|
+
case "DELAY":
|
|
299
|
+
return {
|
|
300
|
+
name: "delay",
|
|
301
|
+
text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
|
|
302
|
+
};
|
|
303
|
+
case "TRAIN_REPLACEMENT_BY_BUS":
|
|
304
|
+
return {
|
|
305
|
+
name: "replacementbus",
|
|
306
|
+
text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
|
|
307
|
+
};
|
|
308
|
+
case "CONSTRUCTION_SITE":
|
|
309
|
+
return {
|
|
310
|
+
name: "construction",
|
|
311
|
+
text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
|
|
312
|
+
};
|
|
313
|
+
default:
|
|
314
|
+
return {
|
|
315
|
+
name: "info",
|
|
316
|
+
text: (situation == null ? void 0 : situation.broadcastMessages.length) ? situation == null ? void 0 : situation.broadcastMessages[0].title : ""
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
const getCus = (trip, currentLanguage) => {
|
|
321
|
+
const { summary, legs } = trip || {};
|
|
322
|
+
const rideLegs = legs == null ? void 0 : legs.filter((leg) => isRideLeg(leg));
|
|
323
|
+
const { tripStatus } = summary || {};
|
|
324
|
+
if ((tripStatus == null ? void 0 : tripStatus.cancelled) || (tripStatus == null ? void 0 : tripStatus.partiallyCancelled))
|
|
325
|
+
return { name: "cancellation", text: tripStatus == null ? void 0 : tripStatus.cancelledText };
|
|
326
|
+
if (getReachableText(rideLegs))
|
|
327
|
+
return { name: "missed-connection", text: getReachableText(rideLegs) };
|
|
328
|
+
if (tripStatus == null ? void 0 : tripStatus.alternative)
|
|
329
|
+
return { name: "alternative", text: tripStatus.alternativeText };
|
|
330
|
+
if (getRedirectedText(rideLegs))
|
|
331
|
+
return { name: "reroute", text: getRedirectedText(rideLegs) };
|
|
332
|
+
if (getUnplannedStop(rideLegs))
|
|
333
|
+
return { name: "add-stop", text: getUnplannedStop(rideLegs) };
|
|
334
|
+
if ((tripStatus == null ? void 0 : tripStatus.delayed) || (tripStatus == null ? void 0 : tripStatus.delayedUnknown))
|
|
335
|
+
return { name: "delay", text: getDelayText(rideLegs) };
|
|
336
|
+
if (tripStatus == null ? void 0 : tripStatus.quayChanged) {
|
|
337
|
+
const departure = rideLegs[0].departure;
|
|
338
|
+
return {
|
|
339
|
+
name: "platform-change",
|
|
340
|
+
text: departure.quayChanged ? departure.quayChangedText : i18nTripQuayChange[currentLanguage]
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
return {};
|
|
344
|
+
};
|
|
345
|
+
const findAndReplaceNotice = (notices) => {
|
|
346
|
+
const reservationNotice = ["RR", "RK", "RC", "RL", "RM", "RS", "RU", "XP", "XR", "XT"];
|
|
347
|
+
return notices.reduce((foundNotice, notice) => {
|
|
348
|
+
if (foundNotice)
|
|
349
|
+
return foundNotice;
|
|
350
|
+
if (reservationNotice.includes(notice.name)) {
|
|
351
|
+
return { ...notice, name: "RR" };
|
|
352
|
+
}
|
|
353
|
+
}, void 0);
|
|
354
|
+
};
|
|
355
|
+
const filterNotices = (notices) => {
|
|
356
|
+
const allowedNames = ["Z", "SB", "SZ", "VR", "TG"];
|
|
357
|
+
const filterNotice = notices.filter((notice, index) => {
|
|
358
|
+
return notices.findIndex((n) => n.name === notice.name) === index;
|
|
359
|
+
});
|
|
360
|
+
return filterNotice.filter((notice) => allowedNames.includes(notice.name)).sort((a, b) => allowedNames.indexOf(a.name) - allowedNames.indexOf(b.name));
|
|
361
|
+
};
|
|
362
|
+
const handleNotices = (notices) => {
|
|
363
|
+
const reservationNotice = findAndReplaceNotice(notices);
|
|
364
|
+
const filteredNotices = filterNotices(notices);
|
|
365
|
+
if (reservationNotice === void 0)
|
|
366
|
+
return filteredNotices;
|
|
367
|
+
if (!filteredNotices.length)
|
|
368
|
+
return [reservationNotice];
|
|
369
|
+
if (filteredNotices[0].name === "Z" && filteredNotices[1]) {
|
|
370
|
+
return [filteredNotices[0], reservationNotice, filteredNotices[1]].concat(filteredNotices.slice(2));
|
|
371
|
+
}
|
|
372
|
+
return [reservationNotice, ...filteredNotices];
|
|
373
|
+
};
|
|
374
|
+
let SbbTimetableRowElement = (() => {
|
|
375
|
+
var _trip_accessor_storage, _price_accessor_storage, _disableAnimation_accessor_storage, _boarding_accessor_storage, _loadingTrip_accessor_storage, _a11yFootpath_accessor_storage, _loadingPrice_accessor_storage, _cardActionLabel_accessor_storage, _accessibilityExpanded_accessor_storage, _active_accessor_storage, _a;
|
|
376
|
+
let _classDecorators = [customElement("sbb-timetable-row")];
|
|
377
|
+
let _classDescriptor;
|
|
378
|
+
let _classExtraInitializers = [];
|
|
379
|
+
let _classThis;
|
|
380
|
+
let _classSuper = LitElement;
|
|
381
|
+
let _instanceExtraInitializers = [];
|
|
382
|
+
let _trip_decorators;
|
|
383
|
+
let _trip_initializers = [];
|
|
384
|
+
let _trip_extraInitializers = [];
|
|
385
|
+
let _price_decorators;
|
|
386
|
+
let _price_initializers = [];
|
|
387
|
+
let _price_extraInitializers = [];
|
|
388
|
+
let _disableAnimation_decorators;
|
|
389
|
+
let _disableAnimation_initializers = [];
|
|
390
|
+
let _disableAnimation_extraInitializers = [];
|
|
391
|
+
let _boarding_decorators;
|
|
392
|
+
let _boarding_initializers = [];
|
|
393
|
+
let _boarding_extraInitializers = [];
|
|
394
|
+
let _loadingTrip_decorators;
|
|
395
|
+
let _loadingTrip_initializers = [];
|
|
396
|
+
let _loadingTrip_extraInitializers = [];
|
|
397
|
+
let _a11yFootpath_decorators;
|
|
398
|
+
let _a11yFootpath_initializers = [];
|
|
399
|
+
let _a11yFootpath_extraInitializers = [];
|
|
400
|
+
let _loadingPrice_decorators;
|
|
401
|
+
let _loadingPrice_initializers = [];
|
|
402
|
+
let _loadingPrice_extraInitializers = [];
|
|
403
|
+
let _cardActionLabel_decorators;
|
|
404
|
+
let _cardActionLabel_initializers = [];
|
|
405
|
+
let _cardActionLabel_extraInitializers = [];
|
|
406
|
+
let _accessibilityExpanded_decorators;
|
|
407
|
+
let _accessibilityExpanded_initializers = [];
|
|
408
|
+
let _accessibilityExpanded_extraInitializers = [];
|
|
409
|
+
let _active_decorators;
|
|
410
|
+
let _active_initializers = [];
|
|
411
|
+
let _active_extraInitializers = [];
|
|
412
|
+
let _set_now_decorators;
|
|
413
|
+
_a = class extends _classSuper {
|
|
414
|
+
constructor() {
|
|
415
|
+
super(...arguments);
|
|
416
|
+
__privateAdd(this, _trip_accessor_storage);
|
|
417
|
+
__privateAdd(this, _price_accessor_storage);
|
|
418
|
+
__privateAdd(this, _disableAnimation_accessor_storage);
|
|
419
|
+
__privateAdd(this, _boarding_accessor_storage);
|
|
420
|
+
__privateAdd(this, _loadingTrip_accessor_storage);
|
|
421
|
+
__privateAdd(this, _a11yFootpath_accessor_storage);
|
|
422
|
+
__privateAdd(this, _loadingPrice_accessor_storage);
|
|
423
|
+
__privateAdd(this, _cardActionLabel_accessor_storage);
|
|
424
|
+
__privateAdd(this, _accessibilityExpanded_accessor_storage);
|
|
425
|
+
__privateAdd(this, _active_accessor_storage);
|
|
426
|
+
__privateSet(this, _trip_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _trip_initializers, null)));
|
|
427
|
+
__privateSet(this, _price_accessor_storage, (__runInitializers(this, _trip_extraInitializers), __runInitializers(this, _price_initializers, null)));
|
|
428
|
+
__privateSet(this, _disableAnimation_accessor_storage, (__runInitializers(this, _price_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false)));
|
|
429
|
+
__privateSet(this, _boarding_accessor_storage, (__runInitializers(this, _disableAnimation_extraInitializers), __runInitializers(this, _boarding_initializers, null)));
|
|
430
|
+
__privateSet(this, _loadingTrip_accessor_storage, (__runInitializers(this, _boarding_extraInitializers), __runInitializers(this, _loadingTrip_initializers, false)));
|
|
431
|
+
__privateSet(this, _a11yFootpath_accessor_storage, (__runInitializers(this, _loadingTrip_extraInitializers), __runInitializers(this, _a11yFootpath_initializers, false)));
|
|
432
|
+
__privateSet(this, _loadingPrice_accessor_storage, (__runInitializers(this, _a11yFootpath_extraInitializers), __runInitializers(this, _loadingPrice_initializers, false)));
|
|
433
|
+
__privateSet(this, _cardActionLabel_accessor_storage, (__runInitializers(this, _loadingPrice_extraInitializers), __runInitializers(this, _cardActionLabel_initializers, "")));
|
|
434
|
+
__privateSet(this, _accessibilityExpanded_accessor_storage, (__runInitializers(this, _cardActionLabel_extraInitializers), __runInitializers(this, _accessibilityExpanded_initializers, false)));
|
|
435
|
+
__privateSet(this, _active_accessor_storage, (__runInitializers(this, _accessibilityExpanded_extraInitializers), __runInitializers(this, _active_initializers, false)));
|
|
436
|
+
this._now = (__runInitializers(this, _active_extraInitializers), null);
|
|
437
|
+
this._language = new SbbLanguageController(this);
|
|
438
|
+
}
|
|
439
|
+
/** The trip Prop. */
|
|
440
|
+
get trip() {
|
|
441
|
+
return __privateGet(this, _trip_accessor_storage);
|
|
442
|
+
}
|
|
443
|
+
set trip(value) {
|
|
444
|
+
__privateSet(this, _trip_accessor_storage, value);
|
|
445
|
+
}
|
|
446
|
+
/** The price Prop, which consists of the data for the badge. */
|
|
447
|
+
get price() {
|
|
448
|
+
return __privateGet(this, _price_accessor_storage);
|
|
449
|
+
}
|
|
450
|
+
set price(value) {
|
|
451
|
+
__privateSet(this, _price_accessor_storage, value);
|
|
452
|
+
}
|
|
453
|
+
/** This will be forwarded to the sbb-pearl-chain component - if true the position won't be animated. */
|
|
454
|
+
get disableAnimation() {
|
|
455
|
+
return __privateGet(this, _disableAnimation_accessor_storage);
|
|
456
|
+
}
|
|
457
|
+
set disableAnimation(value) {
|
|
458
|
+
__privateSet(this, _disableAnimation_accessor_storage, value);
|
|
459
|
+
}
|
|
460
|
+
/** This will be forwarded to the notices section */
|
|
461
|
+
get boarding() {
|
|
462
|
+
return __privateGet(this, _boarding_accessor_storage);
|
|
463
|
+
}
|
|
464
|
+
set boarding(value) {
|
|
465
|
+
__privateSet(this, _boarding_accessor_storage, value);
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* The loading state -
|
|
469
|
+
* when this is true it will be render skeleton with an idling animation
|
|
470
|
+
*/
|
|
471
|
+
get loadingTrip() {
|
|
472
|
+
return __privateGet(this, _loadingTrip_accessor_storage);
|
|
473
|
+
}
|
|
474
|
+
set loadingTrip(value) {
|
|
475
|
+
__privateSet(this, _loadingTrip_accessor_storage, value);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* The Footpath attribute for rendering different icons
|
|
479
|
+
* true: render a11y-icon
|
|
480
|
+
* false: render walk-icon
|
|
481
|
+
* default: render walk-icon
|
|
482
|
+
*/
|
|
483
|
+
get a11yFootpath() {
|
|
484
|
+
return __privateGet(this, _a11yFootpath_accessor_storage);
|
|
485
|
+
}
|
|
486
|
+
set a11yFootpath(value) {
|
|
487
|
+
__privateSet(this, _a11yFootpath_accessor_storage, value);
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* The loading state -
|
|
491
|
+
* when this is true it will be render skeleton with an idling animation
|
|
492
|
+
*/
|
|
493
|
+
get loadingPrice() {
|
|
494
|
+
return __privateGet(this, _loadingPrice_accessor_storage);
|
|
495
|
+
}
|
|
496
|
+
set loadingPrice(value) {
|
|
497
|
+
__privateSet(this, _loadingPrice_accessor_storage, value);
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Hidden label for the card action. It overrides the automatically generated accessibility text for the component. Use this prop to provide custom accessibility information for the component.
|
|
501
|
+
*/
|
|
502
|
+
get cardActionLabel() {
|
|
503
|
+
return __privateGet(this, _cardActionLabel_accessor_storage);
|
|
504
|
+
}
|
|
505
|
+
set cardActionLabel(value) {
|
|
506
|
+
__privateSet(this, _cardActionLabel_accessor_storage, value);
|
|
507
|
+
}
|
|
508
|
+
/** This will be forwarded to the sbb-card component as aria-expanded. */
|
|
509
|
+
get accessibilityExpanded() {
|
|
510
|
+
return __privateGet(this, _accessibilityExpanded_accessor_storage);
|
|
511
|
+
}
|
|
512
|
+
set accessibilityExpanded(value) {
|
|
513
|
+
__privateSet(this, _accessibilityExpanded_accessor_storage, value);
|
|
514
|
+
}
|
|
515
|
+
/** When this prop is true the sbb-card will be in the active state. */
|
|
516
|
+
get active() {
|
|
517
|
+
return __privateGet(this, _active_accessor_storage);
|
|
518
|
+
}
|
|
519
|
+
set active(value) {
|
|
520
|
+
__privateSet(this, _active_accessor_storage, value);
|
|
521
|
+
}
|
|
522
|
+
/** A configured date which acts as the current date instead of the real current date. Recommended for testing purposes. */
|
|
523
|
+
set now(value) {
|
|
524
|
+
this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
|
|
525
|
+
}
|
|
526
|
+
get now() {
|
|
527
|
+
return this._now ?? /* @__PURE__ */ new Date();
|
|
528
|
+
}
|
|
529
|
+
willUpdate(changedProperties) {
|
|
530
|
+
super.willUpdate(changedProperties);
|
|
531
|
+
if (changedProperties.has("loadingTrip")) {
|
|
532
|
+
setOrRemoveAttribute(this, "role", !this.loadingTrip ? "rowgroup" : null);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
/** The skeleton render function for the loading state */
|
|
536
|
+
_renderSkeleton() {
|
|
537
|
+
return html`
|
|
538
|
+
<sbb-card size="l" class="sbb-loading">
|
|
539
|
+
${this.loadingPrice ? html`<sbb-card-badge class="sbb-loading__badge"></sbb-card-badge>` : nothing}
|
|
540
|
+
<div class="sbb-loading__wrapper">
|
|
541
|
+
<div class="sbb-loading__row"></div>
|
|
542
|
+
<div class="sbb-loading__row"></div>
|
|
543
|
+
<div class="sbb-loading__row"></div>
|
|
544
|
+
</div>
|
|
545
|
+
</sbb-card>
|
|
546
|
+
`;
|
|
547
|
+
}
|
|
548
|
+
_getRideLegs() {
|
|
549
|
+
var _a2, _b;
|
|
550
|
+
return ((_b = (_a2 = this.trip) == null ? void 0 : _a2.legs) == null ? void 0 : _b.filter((leg) => isRideLeg(leg))) ?? [];
|
|
551
|
+
}
|
|
552
|
+
_getQuayTypeStrings() {
|
|
553
|
+
var _a2, _b;
|
|
554
|
+
if (!((_a2 = this.trip.summary) == null ? void 0 : _a2.product))
|
|
555
|
+
return null;
|
|
556
|
+
const rideLegs = this._getRideLegs();
|
|
557
|
+
const isShort = ((_b = this.trip.summary.product) == null ? void 0 : _b.vehicleMode) === "TRAIN";
|
|
558
|
+
const short = isShort ? rideLegs[0].serviceJourney.quayTypeShortName || "" : rideLegs[0].serviceJourney.quayTypeName || "";
|
|
559
|
+
return {
|
|
560
|
+
long: i18nFromPlatform[this._language.current] + " " + short,
|
|
561
|
+
short
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
/** map Quay */
|
|
565
|
+
_renderQuayType() {
|
|
566
|
+
var _a2;
|
|
567
|
+
if (!((_a2 = this.trip.summary) == null ? void 0 : _a2.product))
|
|
568
|
+
return void 0;
|
|
569
|
+
const quayTypeStrings = this._getQuayTypeStrings();
|
|
570
|
+
return html`
|
|
571
|
+
<span class="sbb-timetable__row--quay">
|
|
572
|
+
<span class="sbb-screen-reader-only">${quayTypeStrings == null ? void 0 : quayTypeStrings.long} </span>
|
|
573
|
+
<span class="sbb-timetable__row--quay-type" aria-hidden="true"
|
|
574
|
+
>${quayTypeStrings == null ? void 0 : quayTypeStrings.short}</span
|
|
575
|
+
>
|
|
576
|
+
</span>
|
|
577
|
+
`;
|
|
578
|
+
}
|
|
579
|
+
_handleHimCus(trip) {
|
|
580
|
+
var _a2;
|
|
581
|
+
const { situations } = trip || {};
|
|
582
|
+
const sortedSituations = situations && sortSituation(situations);
|
|
583
|
+
const cus = getCus(trip, this._language.current);
|
|
584
|
+
return {
|
|
585
|
+
cus: ((_a2 = Object.keys(cus)) == null ? void 0 : _a2.length) ? cus : null,
|
|
586
|
+
him: (situations == null ? void 0 : situations.length) ? getHimIcon(sortedSituations[0]) : null
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
_getAccessibilityText(trip) {
|
|
590
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
591
|
+
const { summary, legs, notices } = trip || {};
|
|
592
|
+
const { departureWalk, arrivalWalk, departure, arrival, product, direction, occupancy, duration } = summary || {};
|
|
593
|
+
const { departureTimeAttribute, arrivalTimeAttribute } = getDepartureArrivalTimeAttribute(legs, departureWalk || 0, arrivalWalk || 0, this._language.current, this.a11yFootpath);
|
|
594
|
+
const rideLegs = this._getRideLegs();
|
|
595
|
+
const departureTime = (departure == null ? void 0 : departure.time) ? removeTimezoneFromISOTimeString(departure.time) : void 0;
|
|
596
|
+
const arrivalTime = (arrival == null ? void 0 : arrival.time) ? removeTimezoneFromISOTimeString(arrival.time) : void 0;
|
|
597
|
+
const departureWalkText = departureTimeAttribute ? `${departureTimeAttribute.text} ${departureTimeAttribute.duration}, ` : "";
|
|
598
|
+
const arrivalWalkText = arrivalTimeAttribute ? `${arrivalTimeAttribute.text} ${arrivalTimeAttribute.duration}, ` : "";
|
|
599
|
+
const departureTimeText = departureTime ? `${i18nDeparture[this._language.current]}: ${format(departureTime, "HH:mm")}, ` : "";
|
|
600
|
+
const getDepartureQuayText = () => {
|
|
601
|
+
var _a3;
|
|
602
|
+
if (!(departure == null ? void 0 : departure.quayFormatted)) {
|
|
603
|
+
return "";
|
|
604
|
+
}
|
|
605
|
+
const changedQuayPrefix = (departure == null ? void 0 : departure.quayChanged) ? `${i18nNew[this._language.current]} ` : "";
|
|
606
|
+
return `${changedQuayPrefix}${(_a3 = this._getQuayTypeStrings()) == null ? void 0 : _a3.long} ${departure == null ? void 0 : departure.quayFormatted}, `;
|
|
607
|
+
};
|
|
608
|
+
const meansOfTransportText = product && product.vehicleMode ? i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && `${i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}, ` : "";
|
|
609
|
+
const vehicleSubModeText = (product == null ? void 0 : product.vehicleSubModeShortName) ? `${product.vehicleSubModeShortName} ${product.line || ""}, ` : "";
|
|
610
|
+
const directionText = `${i18nDirection[this._language.current]} ${direction}, `;
|
|
611
|
+
const himCus = this._handleHimCus(trip);
|
|
612
|
+
const cusText = ((_a2 = himCus == null ? void 0 : himCus.cus) == null ? void 0 : _a2.text) ? `${i18nRealTimeInfo[this._language.current]}: ${(_b = himCus == null ? void 0 : himCus.cus) == null ? void 0 : _b.text}, ` : "";
|
|
613
|
+
const himText = ((_c = himCus == null ? void 0 : himCus.him) == null ? void 0 : _c.text) ? `${i18nRealTimeInfo[this._language.current]}: ${(_d = himCus == null ? void 0 : himCus.him) == null ? void 0 : _d.text}, ` : "";
|
|
614
|
+
const boardingText = this.boarding ? `${this.boarding.text}, ` : "";
|
|
615
|
+
const priceText = `${((_e = this.price) == null ? void 0 : _e.isDiscount) ? i18nSupersaver[this._language.current] : ""} ${((_f = this.price) == null ? void 0 : _f.text) && ((_g = this.price) == null ? void 0 : _g.price) ? (((_h = this.price) == null ? void 0 : _h.text) || "") + " " + (((_i = this.price) == null ? void 0 : _i.price) || "") + ", " : ""}`;
|
|
616
|
+
const transferProcedures = rideLegs.length > 2 ? `${rideLegs.length - 1} ${i18nTransferProcedures[this._language.current]}, ` : rideLegs.length > 1 ? `${rideLegs.length - 1} ${i18nTransferProcedure[this._language.current]}, ` : "";
|
|
617
|
+
const arrivalTimeText = arrivalTime ? `${i18nArrival[this._language.current]}: ${format(arrivalTime, "HH:mm")}, ` : "";
|
|
618
|
+
let occupancyText = "";
|
|
619
|
+
if (occupancy) {
|
|
620
|
+
if (occupancy.firstClass && occupancy.firstClass !== "UNKNOWN") {
|
|
621
|
+
occupancyText += `${i18nClass.first[this._language.current]} ${(_j = i18nOccupancy[occupancy.firstClass.toLowerCase()]) == null ? void 0 : _j[this._language.current]}.`;
|
|
622
|
+
}
|
|
623
|
+
if (occupancy.secondClass && occupancy.secondClass !== "UNKNOWN") {
|
|
624
|
+
occupancyText += ` ${i18nClass.second[this._language.current]} ${(_k = i18nOccupancy[occupancy.secondClass.toLowerCase()]) == null ? void 0 : _k[this._language.current]}.`;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
const attributes = notices && handleNotices(notices).length && ((_l = handleNotices(notices)) == null ? void 0 : _l.map((notice, index) => {
|
|
628
|
+
var _a3;
|
|
629
|
+
return index < 4 && ((_a3 = notice.text) == null ? void 0 : _a3.template);
|
|
630
|
+
}).join(", ")) + ", ";
|
|
631
|
+
const attributesText = attributes ? `${i18nTravelhints[this._language.current]}: ${attributes}` : "";
|
|
632
|
+
const durationText = !!duration && duration > 0 ? `${i18nTripDuration[this._language.current]} ${durationToTime(duration, this._language.current).long}, ` : "";
|
|
633
|
+
return [
|
|
634
|
+
departureWalkText,
|
|
635
|
+
departureTimeText,
|
|
636
|
+
getDepartureQuayText(),
|
|
637
|
+
meansOfTransportText,
|
|
638
|
+
vehicleSubModeText,
|
|
639
|
+
directionText,
|
|
640
|
+
cusText,
|
|
641
|
+
boardingText,
|
|
642
|
+
priceText,
|
|
643
|
+
cusText ? "" : himText,
|
|
644
|
+
arrivalTimeText,
|
|
645
|
+
arrivalWalkText,
|
|
646
|
+
durationText,
|
|
647
|
+
transferProcedures,
|
|
648
|
+
occupancyText,
|
|
649
|
+
attributesText
|
|
650
|
+
].map((e) => e.trim()).filter((e) => e && e.length > 0).join(" ");
|
|
651
|
+
}
|
|
652
|
+
render() {
|
|
653
|
+
var _a2, _b, _c, _d;
|
|
654
|
+
if (this.loadingTrip) {
|
|
655
|
+
return this._renderSkeleton();
|
|
656
|
+
}
|
|
657
|
+
const { legs, id, notices, summary } = this.trip || {};
|
|
658
|
+
const { product, direction, departureWalk, departure, arrival, arrivalWalk, occupancy, duration } = summary || {};
|
|
659
|
+
const himCus = this._handleHimCus(this.trip);
|
|
660
|
+
const hasHimCus = !!himCus.cus || !!himCus.him;
|
|
661
|
+
const noticeAttributes = notices && handleNotices(notices);
|
|
662
|
+
const durationObj = duration ? durationToTime(duration, this._language.current) : null;
|
|
663
|
+
return html`
|
|
664
|
+
<sbb-card size="l" id=${id}>
|
|
665
|
+
<sbb-card-button
|
|
666
|
+
?active=${this.active}
|
|
667
|
+
aria-expanded=${this.accessibilityExpanded ? "true" : nothing}
|
|
668
|
+
>
|
|
669
|
+
${this.cardActionLabel ? this.cardActionLabel : this._getAccessibilityText(this.trip)}
|
|
670
|
+
</sbb-card-button>
|
|
671
|
+
${this.loadingPrice ? html`<sbb-card-badge class="sbb-loading__badge"></sbb-card-badge>` : nothing}
|
|
672
|
+
${this.price && !this.loadingPrice ? html`<sbb-card-badge color=${this.price.isDiscount ? "charcoal" : "white"}>
|
|
673
|
+
${this.price.isDiscount ? html`<span aria-hidden="true">
|
|
674
|
+
%<span class="sbb-screen-reader-only"
|
|
675
|
+
>${i18nSupersaver[this._language.current]}</span
|
|
676
|
+
>
|
|
677
|
+
</span>` : nothing}
|
|
678
|
+
${this.price.text ? html`<span>${this.price.text}</span>` : nothing}
|
|
679
|
+
${this.price.price ? html`<span>${this.price.price}</span>` : nothing}
|
|
680
|
+
</sbb-card-badge>` : nothing}
|
|
681
|
+
<div class="sbb-timetable__row" role="row">
|
|
682
|
+
<div class="sbb-timetable__row-header" role="gridcell">
|
|
683
|
+
<div class="sbb-timetable__row-details">
|
|
684
|
+
${(product == null ? void 0 : product.corporateIdentityPictogram) && html`<span class="sbb-timetable__row-transport-wrapper">
|
|
685
|
+
<sbb-icon
|
|
686
|
+
class="sbb-timetable__row-transport-icon"
|
|
687
|
+
name="picto:${product.corporateIdentityPictogram}"
|
|
688
|
+
></sbb-icon>
|
|
689
|
+
<span class="sbb-screen-reader-only">
|
|
690
|
+
${product && product.vehicleMode && i18nMeansOfTransport[product.vehicleMode.toLowerCase()] && i18nMeansOfTransport[product.vehicleMode.toLowerCase()][this._language.current]}
|
|
691
|
+
|
|
692
|
+
</span>
|
|
693
|
+
</span>`}
|
|
694
|
+
${product && (product.corporateIdentityIcon ? renderIconProduct(product.corporateIdentityIcon, product.name) : product.vehicleSubModeShortName && renderStringProduct(product.vehicleSubModeShortName, product == null ? void 0 : product.line))}
|
|
695
|
+
</div>
|
|
696
|
+
${direction ? html`<p>${`${i18nDirection[this._language.current]} ${direction}`}</p>` : nothing}
|
|
697
|
+
</div>
|
|
698
|
+
<sbb-pearl-chain-time
|
|
699
|
+
role="gridcell"
|
|
700
|
+
.legs=${legs}
|
|
701
|
+
.departureTime=${departure == null ? void 0 : departure.time}
|
|
702
|
+
.arrivalTime=${arrival == null ? void 0 : arrival.time}
|
|
703
|
+
.departureWalk=${departureWalk}
|
|
704
|
+
.arrivalWalk=${arrivalWalk}
|
|
705
|
+
?disable-animation=${this.disableAnimation}
|
|
706
|
+
?a11y-footpath=${this.a11yFootpath}
|
|
707
|
+
.now=${this.now}
|
|
708
|
+
></sbb-pearl-chain-time>
|
|
709
|
+
<div class="sbb-timetable__row-footer" role="gridcell">
|
|
710
|
+
${product && (departure == null ? void 0 : departure.quayFormatted) ? html`<span
|
|
711
|
+
class=${(departure == null ? void 0 : departure.quayChanged) ? `sbb-timetable__row-quay--changed` : nothing}
|
|
712
|
+
>
|
|
713
|
+
<span class="sbb-screen-reader-only">
|
|
714
|
+
${`${i18nDeparture[this._language.current]} ${(departure == null ? void 0 : departure.quayChanged) ? i18nNew[this._language.current] : ""}`}
|
|
715
|
+
|
|
716
|
+
</span>
|
|
717
|
+
${this._renderQuayType()} ${departure == null ? void 0 : departure.quayFormatted}
|
|
718
|
+
</span>` : nothing}
|
|
719
|
+
${(occupancy == null ? void 0 : occupancy.firstClass) && (occupancy == null ? void 0 : occupancy.firstClass) !== "UNKNOWN" || (occupancy == null ? void 0 : occupancy.secondClass) && occupancy.secondClass !== "UNKNOWN" ? html`<sbb-timetable-occupancy
|
|
720
|
+
.firstClassOccupancy=${(_a2 = occupancy == null ? void 0 : occupancy.firstClass) == null ? void 0 : _a2.toLowerCase()}
|
|
721
|
+
.secondClassOccupancy=${(_b = occupancy == null ? void 0 : occupancy.secondClass) == null ? void 0 : _b.toLowerCase()}
|
|
722
|
+
></sbb-timetable-occupancy>` : nothing}
|
|
723
|
+
${noticeAttributes && noticeAttributes.length || this.boarding ? html`<ul class="sbb-timetable__row-hints" role="list">
|
|
724
|
+
${noticeAttributes == null ? void 0 : noticeAttributes.map((notice, index) => {
|
|
725
|
+
var _a3, _b2;
|
|
726
|
+
return index < 4 ? html`<li>
|
|
727
|
+
<sbb-icon
|
|
728
|
+
class="sbb-travel-hints__item"
|
|
729
|
+
name=${"sa-" + ((_a3 = notice.name) == null ? void 0 : _a3.toLowerCase())}
|
|
730
|
+
></sbb-icon>
|
|
731
|
+
<span class="sbb-screen-reader-only">${(_b2 = notice.text) == null ? void 0 : _b2.template}</span>
|
|
732
|
+
</li>` : nothing;
|
|
733
|
+
})}
|
|
734
|
+
${this.boarding ? html`<li>
|
|
735
|
+
<sbb-icon
|
|
736
|
+
class="sbb-travel-hints__item"
|
|
737
|
+
name=${(_c = this.boarding) == null ? void 0 : _c.name}
|
|
738
|
+
aria-label=${(_d = this.boarding) == null ? void 0 : _d.text}
|
|
739
|
+
aria-hidden="false"
|
|
740
|
+
></sbb-icon>
|
|
741
|
+
</li>` : nothing}
|
|
742
|
+
</ul>` : nothing}
|
|
743
|
+
${duration && duration > 0 ? html`<time>
|
|
744
|
+
<span class="sbb-screen-reader-only">
|
|
745
|
+
${`${i18nTripDuration[this._language.current]} ${durationObj.long}`}
|
|
746
|
+
</span>
|
|
747
|
+
<span aria-hidden="true">${durationObj.short}</span>
|
|
748
|
+
</time>` : nothing}
|
|
749
|
+
${hasHimCus && (himCus.cus || himCus.him) ? html`<span class="sbb-timetable__row-warning">
|
|
750
|
+
<sbb-icon name=${(himCus.cus || himCus.him).name}></sbb-icon>
|
|
751
|
+
<span class="sbb-screen-reader-only">${(himCus.cus || himCus.him).text}</span>
|
|
752
|
+
</span>` : nothing}
|
|
753
|
+
</div>
|
|
754
|
+
</div>
|
|
755
|
+
</sbb-card>
|
|
756
|
+
`;
|
|
757
|
+
}
|
|
758
|
+
}, _trip_accessor_storage = new WeakMap(), _price_accessor_storage = new WeakMap(), _disableAnimation_accessor_storage = new WeakMap(), _boarding_accessor_storage = new WeakMap(), _loadingTrip_accessor_storage = new WeakMap(), _a11yFootpath_accessor_storage = new WeakMap(), _loadingPrice_accessor_storage = new WeakMap(), _cardActionLabel_accessor_storage = new WeakMap(), _accessibilityExpanded_accessor_storage = new WeakMap(), _active_accessor_storage = new WeakMap(), _classThis = _a, (() => {
|
|
759
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
760
|
+
_trip_decorators = [property({ type: Object })];
|
|
761
|
+
_price_decorators = [property({ type: Object })];
|
|
762
|
+
_disableAnimation_decorators = [forceType(), property({ attribute: "disable-animation", reflect: true, type: Boolean })];
|
|
763
|
+
_boarding_decorators = [property({ type: Object })];
|
|
764
|
+
_loadingTrip_decorators = [forceType(), property({ attribute: "loading-trip", type: Boolean })];
|
|
765
|
+
_a11yFootpath_decorators = [forceType(), property({ attribute: "a11y-footpath", type: Boolean })];
|
|
766
|
+
_loadingPrice_decorators = [forceType(), property({ attribute: "loading-price", type: Boolean })];
|
|
767
|
+
_cardActionLabel_decorators = [forceType(), property({ attribute: "card-action-label" })];
|
|
768
|
+
_accessibilityExpanded_decorators = [forceType(), property({ attribute: "accessibility-expanded", type: Boolean })];
|
|
769
|
+
_active_decorators = [forceType(), property({ type: Boolean })];
|
|
770
|
+
_set_now_decorators = [property()];
|
|
771
|
+
__esDecorate(_a, null, _trip_decorators, { kind: "accessor", name: "trip", static: false, private: false, access: { has: (obj) => "trip" in obj, get: (obj) => obj.trip, set: (obj, value) => {
|
|
772
|
+
obj.trip = value;
|
|
773
|
+
} }, metadata: _metadata }, _trip_initializers, _trip_extraInitializers);
|
|
774
|
+
__esDecorate(_a, null, _price_decorators, { kind: "accessor", name: "price", static: false, private: false, access: { has: (obj) => "price" in obj, get: (obj) => obj.price, set: (obj, value) => {
|
|
775
|
+
obj.price = value;
|
|
776
|
+
} }, metadata: _metadata }, _price_initializers, _price_extraInitializers);
|
|
777
|
+
__esDecorate(_a, null, _disableAnimation_decorators, { kind: "accessor", name: "disableAnimation", static: false, private: false, access: { has: (obj) => "disableAnimation" in obj, get: (obj) => obj.disableAnimation, set: (obj, value) => {
|
|
778
|
+
obj.disableAnimation = value;
|
|
779
|
+
} }, metadata: _metadata }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
|
|
780
|
+
__esDecorate(_a, null, _boarding_decorators, { kind: "accessor", name: "boarding", static: false, private: false, access: { has: (obj) => "boarding" in obj, get: (obj) => obj.boarding, set: (obj, value) => {
|
|
781
|
+
obj.boarding = value;
|
|
782
|
+
} }, metadata: _metadata }, _boarding_initializers, _boarding_extraInitializers);
|
|
783
|
+
__esDecorate(_a, null, _loadingTrip_decorators, { kind: "accessor", name: "loadingTrip", static: false, private: false, access: { has: (obj) => "loadingTrip" in obj, get: (obj) => obj.loadingTrip, set: (obj, value) => {
|
|
784
|
+
obj.loadingTrip = value;
|
|
785
|
+
} }, metadata: _metadata }, _loadingTrip_initializers, _loadingTrip_extraInitializers);
|
|
786
|
+
__esDecorate(_a, null, _a11yFootpath_decorators, { kind: "accessor", name: "a11yFootpath", static: false, private: false, access: { has: (obj) => "a11yFootpath" in obj, get: (obj) => obj.a11yFootpath, set: (obj, value) => {
|
|
787
|
+
obj.a11yFootpath = value;
|
|
788
|
+
} }, metadata: _metadata }, _a11yFootpath_initializers, _a11yFootpath_extraInitializers);
|
|
789
|
+
__esDecorate(_a, null, _loadingPrice_decorators, { kind: "accessor", name: "loadingPrice", static: false, private: false, access: { has: (obj) => "loadingPrice" in obj, get: (obj) => obj.loadingPrice, set: (obj, value) => {
|
|
790
|
+
obj.loadingPrice = value;
|
|
791
|
+
} }, metadata: _metadata }, _loadingPrice_initializers, _loadingPrice_extraInitializers);
|
|
792
|
+
__esDecorate(_a, null, _cardActionLabel_decorators, { kind: "accessor", name: "cardActionLabel", static: false, private: false, access: { has: (obj) => "cardActionLabel" in obj, get: (obj) => obj.cardActionLabel, set: (obj, value) => {
|
|
793
|
+
obj.cardActionLabel = value;
|
|
794
|
+
} }, metadata: _metadata }, _cardActionLabel_initializers, _cardActionLabel_extraInitializers);
|
|
795
|
+
__esDecorate(_a, null, _accessibilityExpanded_decorators, { kind: "accessor", name: "accessibilityExpanded", static: false, private: false, access: { has: (obj) => "accessibilityExpanded" in obj, get: (obj) => obj.accessibilityExpanded, set: (obj, value) => {
|
|
796
|
+
obj.accessibilityExpanded = value;
|
|
797
|
+
} }, metadata: _metadata }, _accessibilityExpanded_initializers, _accessibilityExpanded_extraInitializers);
|
|
798
|
+
__esDecorate(_a, null, _active_decorators, { kind: "accessor", name: "active", static: false, private: false, access: { has: (obj) => "active" in obj, get: (obj) => obj.active, set: (obj, value) => {
|
|
799
|
+
obj.active = value;
|
|
800
|
+
} }, metadata: _metadata }, _active_initializers, _active_extraInitializers);
|
|
801
|
+
__esDecorate(_a, null, _set_now_decorators, { kind: "setter", name: "now", static: false, private: false, access: { has: (obj) => "now" in obj, set: (obj, value) => {
|
|
802
|
+
obj.now = value;
|
|
803
|
+
} }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
804
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
805
|
+
_classThis = _classDescriptor.value;
|
|
806
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
807
|
+
})(), _a.styles = style, __runInitializers(_classThis, _classExtraInitializers), _a;
|
|
808
|
+
return _classThis;
|
|
809
|
+
})();
|
|
810
|
+
export {
|
|
811
|
+
SbbTimetableRowElement,
|
|
812
|
+
filterNotices,
|
|
813
|
+
getCus,
|
|
814
|
+
getHimIcon,
|
|
815
|
+
handleNotices,
|
|
816
|
+
renderIconProduct,
|
|
817
|
+
renderStringProduct,
|
|
818
|
+
sortSituation
|
|
819
|
+
};
|
|
820
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXRhYmxlLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvdGltZXRhYmxlLXJvdy90aW1ldGFibGUtcm93LmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB7IGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHNldE9yUmVtb3ZlQXR0cmlidXRlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kb20uanMnO1xuaW1wb3J0IHtcbiAgaTE4bkFycml2YWwsXG4gIGkxOG5DbGFzcyxcbiAgaTE4bkRlcGFydHVyZSxcbiAgaTE4bkRpcmVjdGlvbixcbiAgaTE4bkZyb21QbGF0Zm9ybSxcbiAgaTE4bk1lYW5zT2ZUcmFuc3BvcnQsXG4gIGkxOG5OZXcsXG4gIGkxOG5PY2N1cGFuY3ksXG4gIGkxOG5SZWFsVGltZUluZm8sXG4gIGkxOG5TdXBlcnNhdmVyLFxuICBpMThuVHJhbnNmZXJQcm9jZWR1cmUsXG4gIGkxOG5UcmFuc2ZlclByb2NlZHVyZXMsXG4gIGkxOG5UcmF2ZWxoaW50cyxcbiAgaTE4blRyaXBEdXJhdGlvbixcbiAgaTE4blRyaXBRdWF5Q2hhbmdlLFxufSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSwgU2JiT2NjdXBhbmN5IH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9pbnRlcmZhY2VzLmpzJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBkdXJhdGlvblRvVGltZSwgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyB9IGZyb20gJy4uL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHR5cGUgeyBJVHJpcEl0ZW0sIE5vdGljZSwgUHRSaWRlTGVnLCBQdFNpdHVhdGlvbiB9IGZyb20gJy4uL2NvcmUvdGltZXRhYmxlLmpzJztcbmltcG9ydCB7IGdldERlcGFydHVyZUFycml2YWxUaW1lQXR0cmlidXRlLCBpc1JpZGVMZWcgfSBmcm9tICcuLi9jb3JlL3RpbWV0YWJsZS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3RpbWV0YWJsZS1yb3cuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jYXJkLmpzJztcbmltcG9ydCAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvaWNvbi5qcyc7XG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3RpbWV0YWJsZS1vY2N1cGFuY3kuanMnO1xuaW1wb3J0ICcuLi9wZWFybC1jaGFpbi10aW1lLmpzJztcblxuLyoqIEhpbUN1cyBpbnRlcmZhY2UgZm9yIG1hcHBlZCBpY29uIG5hbWUgYW5kIHRleHQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGltQ3VzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqIEJvYXJkaW5nIGljb24gaW50ZXJmYWNlIGZvciBtYXBwZWQgaWNvbiBuYW1lIGFuZCB0ZXh0ICovXG5leHBvcnQgaW50ZXJmYWNlIEJvYXJkaW5nIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2Uge1xuICBwcmljZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgaXNEaXNjb3VudD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJJY29uUHJvZHVjdCA9IChpY29uOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVzdWx0ID0+IHtcbiAgcmV0dXJuIGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0XCI+XG4gICAgPHNiYi1pY29uIG5hbWU9JHtpY29ufT48L3NiYi1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bmFtZX08L3NwYW4+XG4gIDwvc3Bhbj5gO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbmRlclN0cmluZ1Byb2R1Y3QgPSAodmVoaWNsZU5hbWU6IHN0cmluZywgbGluZT86IHN0cmluZyB8IG51bGwpOiBUZW1wbGF0ZVJlc3VsdCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWydNJywgJ0InLCAnVCddLmluY2x1ZGVzKHZlaGljbGVOYW1lKSA/ICcgJyA6ICcnO1xuICByZXR1cm4gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnRudW1iZXJcIj5cbiAgICAke2xpbmUgIT09IG51bGwgPyB2ZWhpY2xlTmFtZSArIHNwYWNlICsgbGluZSA6IHZlaGljbGVOYW1lfVxuICA8L3NwYW4+YDtcbn07XG5cbmNvbnN0IGdldFJlYWNoYWJsZVRleHQgPSAobGVnczogUHRSaWRlTGVnW10pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGxlZ3M/LmZpbmQoKGxlZykgPT4gbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dCk/LnNlcnZpY2VKb3VybmV5XG4gICAgPy5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVhY2hhYmxlVGV4dDtcbn07XG5cbmNvbnN0IGdldERlbGF5VGV4dCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiBsZWcuc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5kZWxheVRleHQpPy5zZXJ2aWNlSm91cm5leVxuICAgID8uc2VydmljZUFsdGVyYXRpb24/LmRlbGF5VGV4dDtcbn07XG5cbmNvbnN0IGdldFJlZGlyZWN0ZWRUZXh0ID0gKGxlZ3M6IFB0UmlkZUxlZ1tdKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBsZWdzPy5maW5kKChsZWcpID0+ICEhbGVnLnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8ucmVkaXJlY3RlZFRleHQpXG4gICAgPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnJlZGlyZWN0ZWRUZXh0O1xufTtcblxuY29uc3QgZ2V0VW5wbGFubmVkU3RvcCA9IChsZWdzOiBQdFJpZGVMZWdbXSk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gbGVncz8uZmluZCgobGVnKSA9PiAhIWxlZy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LnVucGxhbm5lZFN0b3BQb2ludHNUZXh0KVxuICAgID8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy51bnBsYW5uZWRTdG9wUG9pbnRzVGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0U2l0dWF0aW9uID0gKHNpdHVhdGlvbnM6IFB0U2l0dWF0aW9uW10pOiBQdFNpdHVhdGlvbltdID0+IHtcbiAgY29uc3QgcHJpb3JpdGllcyA9IHtcbiAgICBESVNUVVJCQU5DRTogMCxcbiAgICBJTkZPUk1BVElPTjogMSxcbiAgICBERUxBWTogMixcbiAgICBUUkFJTl9SRVBMQUNFTUVOVF9CWV9CVVM6IDMsXG4gICAgQ09OU1RSVUNUSU9OX1NJVEU6IDQsXG4gICAgRU5EX01FU1NBR0U6IDUsXG4gIH07XG5cbiAgcmV0dXJuIFsuLi5zaXR1YXRpb25zXT8uc29ydChcbiAgICAoYTogUHRTaXR1YXRpb24sIGI6IFB0U2l0dWF0aW9uKSA9PiBwcmlvcml0aWVzW2EuY2F1c2UhXSAtIHByaW9yaXRpZXNbYi5jYXVzZSFdLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpbUljb24gPSAoc2l0dWF0aW9uOiBQdFNpdHVhdGlvbik6IEhpbUN1cyA9PiB7XG4gIHN3aXRjaCAoc2l0dWF0aW9uPy5jYXVzZSkge1xuICAgIGNhc2UgJ0RJU1RVUkJBTkNFJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdkaXNydXB0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcz8ubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdJTkZPUk1BVElPTic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdERUxBWSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnZGVsYXknLFxuICAgICAgICB0ZXh0OiBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzLmxlbmd0aCA/IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXNbMF0udGl0bGUgOiAnJyxcbiAgICAgIH07XG4gICAgY2FzZSAnVFJBSU5fUkVQTEFDRU1FTlRfQllfQlVTJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdyZXBsYWNlbWVudGJ1cycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgICBjYXNlICdDT05TVFJVQ1RJT05fU0lURSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnY29uc3RydWN0aW9uJyxcbiAgICAgICAgdGV4dDogc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlcy5sZW5ndGggPyBzaXR1YXRpb24/LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnRpdGxlIDogJycsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnaW5mbycsXG4gICAgICAgIHRleHQ6IHNpdHVhdGlvbj8uYnJvYWRjYXN0TWVzc2FnZXMubGVuZ3RoID8gc2l0dWF0aW9uPy5icm9hZGNhc3RNZXNzYWdlc1swXS50aXRsZSA6ICcnLFxuICAgICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cyA9ICh0cmlwOiBJVHJpcEl0ZW0sIGN1cnJlbnRMYW5ndWFnZTogc3RyaW5nKTogSGltQ3VzID0+IHtcbiAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzIH0gPSB0cmlwIHx8IHt9O1xuICBjb25zdCByaWRlTGVncyA9IGxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgYXMgUHRSaWRlTGVnW107XG4gIGNvbnN0IHsgdHJpcFN0YXR1cyB9ID0gc3VtbWFyeSB8fCB7fTtcblxuICBpZiAodHJpcFN0YXR1cz8uY2FuY2VsbGVkIHx8IHRyaXBTdGF0dXM/LnBhcnRpYWxseUNhbmNlbGxlZClcbiAgICByZXR1cm4geyBuYW1lOiAnY2FuY2VsbGF0aW9uJywgdGV4dDogdHJpcFN0YXR1cz8uY2FuY2VsbGVkVGV4dCB9O1xuICBpZiAoZ2V0UmVhY2hhYmxlVGV4dChyaWRlTGVncykpXG4gICAgcmV0dXJuIHsgbmFtZTogJ21pc3NlZC1jb25uZWN0aW9uJywgdGV4dDogZ2V0UmVhY2hhYmxlVGV4dChyaWRlTGVncykgfTtcbiAgaWYgKHRyaXBTdGF0dXM/LmFsdGVybmF0aXZlKSByZXR1cm4geyBuYW1lOiAnYWx0ZXJuYXRpdmUnLCB0ZXh0OiB0cmlwU3RhdHVzLmFsdGVybmF0aXZlVGV4dCB9O1xuICBpZiAoZ2V0UmVkaXJlY3RlZFRleHQocmlkZUxlZ3MpKSByZXR1cm4geyBuYW1lOiAncmVyb3V0ZScsIHRleHQ6IGdldFJlZGlyZWN0ZWRUZXh0KHJpZGVMZWdzKSB9O1xuICBpZiAoZ2V0VW5wbGFubmVkU3RvcChyaWRlTGVncykpIHJldHVybiB7IG5hbWU6ICdhZGQtc3RvcCcsIHRleHQ6IGdldFVucGxhbm5lZFN0b3AocmlkZUxlZ3MpIH07XG4gIGlmICh0cmlwU3RhdHVzPy5kZWxheWVkIHx8IHRyaXBTdGF0dXM/LmRlbGF5ZWRVbmtub3duKVxuICAgIHJldHVybiB7IG5hbWU6ICdkZWxheScsIHRleHQ6IGdldERlbGF5VGV4dChyaWRlTGVncykgfTtcbiAgaWYgKHRyaXBTdGF0dXM/LnF1YXlDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGVwYXJ0dXJlID0gcmlkZUxlZ3NbMF0uZGVwYXJ0dXJlO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAncGxhdGZvcm0tY2hhbmdlJyxcbiAgICAgIHRleHQ6IGRlcGFydHVyZS5xdWF5Q2hhbmdlZCA/IGRlcGFydHVyZS5xdWF5Q2hhbmdlZFRleHQgOiBpMThuVHJpcFF1YXlDaGFuZ2VbY3VycmVudExhbmd1YWdlXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHt9IGFzIEhpbUN1cztcbn07XG5cbmNvbnN0IGZpbmRBbmRSZXBsYWNlTm90aWNlID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgcmVzZXJ2YXRpb25Ob3RpY2UgPSBbJ1JSJywgJ1JLJywgJ1JDJywgJ1JMJywgJ1JNJywgJ1JTJywgJ1JVJywgJ1hQJywgJ1hSJywgJ1hUJ107XG5cbiAgcmV0dXJuIG5vdGljZXMucmVkdWNlKChmb3VuZE5vdGljZTogTm90aWNlIHwgdW5kZWZpbmVkLCBub3RpY2U6IE5vdGljZSk6IE5vdGljZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKGZvdW5kTm90aWNlKSByZXR1cm4gZm91bmROb3RpY2U7XG4gICAgaWYgKHJlc2VydmF0aW9uTm90aWNlLmluY2x1ZGVzKG5vdGljZS5uYW1lKSkge1xuICAgICAgcmV0dXJuIHsgLi4ubm90aWNlLCBuYW1lOiAnUlInIH0gYXMgTm90aWNlO1xuICAgIH1cbiAgfSwgdW5kZWZpbmVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJOb3RpY2VzID0gKG5vdGljZXM6IE5vdGljZVtdKTogTm90aWNlW10gPT4ge1xuICBjb25zdCBhbGxvd2VkTmFtZXMgPSBbJ1onLCAnU0InLCAnU1onLCAnVlInLCAnVEcnXTtcblxuICBjb25zdCBmaWx0ZXJOb3RpY2UgPSBub3RpY2VzLmZpbHRlcigobm90aWNlLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBub3RpY2VzLmZpbmRJbmRleCgobikgPT4gbi5uYW1lID09PSBub3RpY2UubmFtZSkgPT09IGluZGV4O1xuICB9KTtcblxuICByZXR1cm4gZmlsdGVyTm90aWNlXG4gICAgLmZpbHRlcigobm90aWNlKSA9PiBhbGxvd2VkTmFtZXMuaW5jbHVkZXMobm90aWNlLm5hbWUpKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhbGxvd2VkTmFtZXMuaW5kZXhPZihhLm5hbWUpIC0gYWxsb3dlZE5hbWVzLmluZGV4T2YoYi5uYW1lKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlTm90aWNlcyA9IChub3RpY2VzOiBOb3RpY2VbXSk6IE5vdGljZVtdID0+IHtcbiAgY29uc3QgcmVzZXJ2YXRpb25Ob3RpY2UgPSBmaW5kQW5kUmVwbGFjZU5vdGljZShub3RpY2VzKTtcbiAgY29uc3QgZmlsdGVyZWROb3RpY2VzID0gZmlsdGVyTm90aWNlcyhub3RpY2VzKTtcblxuICBpZiAocmVzZXJ2YXRpb25Ob3RpY2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpbHRlcmVkTm90aWNlcztcbiAgaWYgKCFmaWx0ZXJlZE5vdGljZXMubGVuZ3RoKSByZXR1cm4gW3Jlc2VydmF0aW9uTm90aWNlXTtcblxuICBpZiAoZmlsdGVyZWROb3RpY2VzWzBdLm5hbWUgPT09ICdaJyAmJiBmaWx0ZXJlZE5vdGljZXNbMV0pIHtcbiAgICByZXR1cm4gW2ZpbHRlcmVkTm90aWNlc1swXSwgcmVzZXJ2YXRpb25Ob3RpY2UsIGZpbHRlcmVkTm90aWNlc1sxXV0uY29uY2F0KFxuICAgICAgZmlsdGVyZWROb3RpY2VzLnNsaWNlKDIpLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gW3Jlc2VydmF0aW9uTm90aWNlLCAuLi5maWx0ZXJlZE5vdGljZXNdO1xufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJpcCwgYWN0aW5nIGFzIGEgY29udGFpbmVyIGZvciBhbGwgdGhlIGBzYmItdGltZXRhYmxlLSpgIGNvbXBvbmVudHMuXG4gKiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXRpbWV0YWJsZS1yb3cnKVxuY2xhc3MgU2JiVGltZXRhYmxlUm93RWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKiogVGhlIHRyaXAgUHJvcC4gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogT2JqZWN0IH0pIHB1YmxpYyBhY2Nlc3NvciB0cmlwOiBJVHJpcEl0ZW0gPSBudWxsITtcblxuICAvKiogVGhlIHByaWNlIFByb3AsIHdoaWNoIGNvbnNpc3RzIG9mIHRoZSBkYXRhIGZvciB0aGUgYmFkZ2UuICovXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IE9iamVjdCB9KSBwdWJsaWMgYWNjZXNzb3IgcHJpY2U6IFByaWNlID0gbnVsbCE7XG5cbiAgLyoqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIHNiYi1wZWFybC1jaGFpbiBjb21wb25lbnQgLSBpZiB0cnVlIHRoZSBwb3NpdGlvbiB3b24ndCBiZSBhbmltYXRlZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Rpc2FibGUtYW5pbWF0aW9uJywgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZUFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGlzIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSBub3RpY2VzIHNlY3Rpb24gKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogT2JqZWN0IH0pIHB1YmxpYyBhY2Nlc3NvciBib2FyZGluZzogQm9hcmRpbmcgPSBudWxsITtcblxuICAvKipcbiAgICogVGhlIGxvYWRpbmcgc3RhdGUgLVxuICAgKiB3aGVuIHRoaXMgaXMgdHJ1ZSBpdCB3aWxsIGJlIHJlbmRlciBza2VsZXRvbiB3aXRoIGFuIGlkbGluZyBhbmltYXRpb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdsb2FkaW5nLXRyaXAnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsb2FkaW5nVHJpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgRm9vdHBhdGggYXR0cmlidXRlIGZvciByZW5kZXJpbmcgZGlmZmVyZW50IGljb25zXG4gICAqIHRydWU6IHJlbmRlciBhMTF5LWljb25cbiAgICogZmFsc2U6IHJlbmRlciB3YWxrLWljb25cbiAgICogZGVmYXVsdDogcmVuZGVyIHdhbGstaWNvblxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ExMXktZm9vdHBhdGgnLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhMTF5Rm9vdHBhdGg6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGxvYWRpbmcgc3RhdGUgLVxuICAgKiB3aGVuIHRoaXMgaXMgdHJ1ZSBpdCB3aWxsIGJlIHJlbmRlciBza2VsZXRvbiB3aXRoIGFuIGlkbGluZyBhbmltYXRpb25cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdsb2FkaW5nLXByaWNlJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbG9hZGluZ1ByaWNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBsYWJlbCBmb3IgdGhlIGNhcmQgYWN0aW9uLiBJdCBvdmVycmlkZXMgdGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFjY2Vzc2liaWxpdHkgdGV4dCBmb3IgdGhlIGNvbXBvbmVudC4gVXNlIHRoaXMgcHJvcCB0byBwcm92aWRlIGN1c3RvbSBhY2Nlc3NpYmlsaXR5IGluZm9ybWF0aW9uIGZvciB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2NhcmQtYWN0aW9uLWxhYmVsJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgY2FyZEFjdGlvbkxhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKiogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgc2JiLWNhcmQgY29tcG9uZW50IGFzIGFyaWEtZXhwYW5kZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWV4cGFuZGVkJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWNjZXNzaWJpbGl0eUV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gdGhpcyBwcm9wIGlzIHRydWUgdGhlIHNiYi1jYXJkIHdpbGwgYmUgaW4gdGhlIGFjdGl2ZSBzdGF0ZS4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuIFJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG5vdyh2YWx1ZTogU2JiRGF0ZUxpa2UgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ub3cgPSBkZWZhdWx0RGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKGRlZmF1bHREYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gbmV3IERhdGUoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsb2FkaW5nVHJpcCcpKSB7XG4gICAgICBzZXRPclJlbW92ZUF0dHJpYnV0ZSh0aGlzLCAncm9sZScsICF0aGlzLmxvYWRpbmdUcmlwID8gJ3Jvd2dyb3VwJyA6IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgc2tlbGV0b24gcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgbG9hZGluZyBzdGF0ZSAqL1xuICBwcml2YXRlIF9yZW5kZXJTa2VsZXRvbigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLWNhcmQgc2l6ZT1cImxcIiBjbGFzcz1cInNiYi1sb2FkaW5nXCI+XG4gICAgICAgICR7dGhpcy5sb2FkaW5nUHJpY2VcbiAgICAgICAgICA/IGh0bWxgPHNiYi1jYXJkLWJhZGdlIGNsYXNzPVwic2JiLWxvYWRpbmdfX2JhZGdlXCI+PC9zYmItY2FyZC1iYWRnZT5gXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3dyYXBwZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWxvYWRpbmdfX3Jvd1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItbG9hZGluZ19fcm93XCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1sb2FkaW5nX19yb3dcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NiYi1jYXJkPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSaWRlTGVncygpOiBQdFJpZGVMZWdbXSB7XG4gICAgcmV0dXJuIHRoaXMudHJpcD8ubGVncz8uZmlsdGVyKChsZWcpID0+IGlzUmlkZUxlZyhsZWcpKSA/PyBbXTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFF1YXlUeXBlU3RyaW5ncygpOiB7IGxvbmc6IHN0cmluZzsgc2hvcnQ6IHN0cmluZyB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnRyaXAuc3VtbWFyeT8ucHJvZHVjdCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmlkZUxlZ3MgPSB0aGlzLl9nZXRSaWRlTGVncygpO1xuICAgIGNvbnN0IGlzU2hvcnQgPSB0aGlzLnRyaXAuc3VtbWFyeS5wcm9kdWN0Py52ZWhpY2xlTW9kZSA9PT0gJ1RSQUlOJztcbiAgICBjb25zdCBzaG9ydCA9IGlzU2hvcnRcbiAgICAgID8gcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVTaG9ydE5hbWUgfHwgJydcbiAgICAgIDogcmlkZUxlZ3NbMF0uc2VydmljZUpvdXJuZXkucXVheVR5cGVOYW1lIHx8ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbmc6IGkxOG5Gcm9tUGxhdGZvcm1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gKyAnICcgKyBzaG9ydCxcbiAgICAgIHNob3J0LFxuICAgIH07XG4gIH1cblxuICAvKiogbWFwIFF1YXkgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyUXVheVR5cGUoKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy50cmlwLnN1bW1hcnk/LnByb2R1Y3QpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcXVheVR5cGVTdHJpbmdzID0gdGhpcy5fZ2V0UXVheVR5cGVTdHJpbmdzKCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy0tcXVheVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke3F1YXlUeXBlU3RyaW5ncz8ubG9uZ30mbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LS1xdWF5LXR5cGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID4ke3F1YXlUeXBlU3RyaW5ncz8uc2hvcnR9PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSGltQ3VzKHRyaXA6IElUcmlwSXRlbSk6IHsgY3VzOiBIaW1DdXMgfCBudWxsOyBoaW06IEhpbUN1cyB8IG51bGwgfSB7XG4gICAgY29uc3QgeyBzaXR1YXRpb25zIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHNvcnRlZFNpdHVhdGlvbnMgPSBzaXR1YXRpb25zICYmIHNvcnRTaXR1YXRpb24oc2l0dWF0aW9ucyk7XG4gICAgY29uc3QgY3VzID0gZ2V0Q3VzKHRyaXAsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1czogT2JqZWN0LmtleXMoY3VzKT8ubGVuZ3RoID8gY3VzIDogbnVsbCxcbiAgICAgIGhpbTogc2l0dWF0aW9ucz8ubGVuZ3RoID8gZ2V0SGltSWNvbihzb3J0ZWRTaXR1YXRpb25zWzBdKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRyaXA6IElUcmlwSXRlbSk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBzdW1tYXJ5LCBsZWdzLCBub3RpY2VzIH0gPSB0cmlwIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIGRlcGFydHVyZVdhbGssXG4gICAgICBhcnJpdmFsV2FsayxcbiAgICAgIGRlcGFydHVyZSxcbiAgICAgIGFycml2YWwsXG4gICAgICBwcm9kdWN0LFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgb2NjdXBhbmN5LFxuICAgICAgZHVyYXRpb24sXG4gICAgfSA9IHN1bW1hcnkgfHwge307XG5cbiAgICBjb25zdCB7IGRlcGFydHVyZVRpbWVBdHRyaWJ1dGUsIGFycml2YWxUaW1lQXR0cmlidXRlIH0gPSBnZXREZXBhcnR1cmVBcnJpdmFsVGltZUF0dHJpYnV0ZShcbiAgICAgIGxlZ3MsXG4gICAgICBkZXBhcnR1cmVXYWxrIHx8IDAsXG4gICAgICBhcnJpdmFsV2FsayB8fCAwLFxuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgIHRoaXMuYTExeUZvb3RwYXRoLFxuICAgICk7XG5cbiAgICBjb25zdCByaWRlTGVncyA9IHRoaXMuX2dldFJpZGVMZWdzKCk7XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gZGVwYXJ0dXJlPy50aW1lXG4gICAgICA/IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcoZGVwYXJ0dXJlLnRpbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lOiBEYXRlIHwgdW5kZWZpbmVkID0gYXJyaXZhbD8udGltZVxuICAgICAgPyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGFycml2YWwudGltZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlV2Fsa1RleHQgPSBkZXBhcnR1cmVUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2RlcGFydHVyZVRpbWVBdHRyaWJ1dGUudGV4dH0gJHtkZXBhcnR1cmVUaW1lQXR0cmlidXRlLmR1cmF0aW9ufSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGFycml2YWxXYWxrVGV4dCA9IGFycml2YWxUaW1lQXR0cmlidXRlXG4gICAgICA/IGAke2Fycml2YWxUaW1lQXR0cmlidXRlLnRleHR9ICR7YXJyaXZhbFRpbWVBdHRyaWJ1dGUuZHVyYXRpb259LCBgXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZVRleHQgPSBkZXBhcnR1cmVUaW1lXG4gICAgICA/IGAke2kxOG5EZXBhcnR1cmVbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChkZXBhcnR1cmVUaW1lLCAnSEg6bW0nKX0sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBnZXREZXBhcnR1cmVRdWF5VGV4dCA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgaWYgKCFkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgcHJlZml4IFwibmV3XCIgaWYgcXVheSB3YXMgY2hhbmdlZFxuICAgICAgY29uc3QgY2hhbmdlZFF1YXlQcmVmaXggPSBkZXBhcnR1cmU/LnF1YXlDaGFuZ2VkID8gYCR7aTE4bk5ld1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gYCA6ICcnO1xuICAgICAgcmV0dXJuIGAke2NoYW5nZWRRdWF5UHJlZml4fSR7XG4gICAgICAgIHRoaXMuX2dldFF1YXlUeXBlU3RyaW5ncygpPy5sb25nXG4gICAgICB9ICR7ZGVwYXJ0dXJlPy5xdWF5Rm9ybWF0dGVkfSwgYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVhbnNPZlRyYW5zcG9ydFRleHQgPVxuICAgICAgcHJvZHVjdCAmJiBwcm9kdWN0LnZlaGljbGVNb2RlXG4gICAgICAgID8gaTE4bk1lYW5zT2ZUcmFuc3BvcnRbcHJvZHVjdC52ZWhpY2xlTW9kZS50b0xvd2VyQ2FzZSgpXSAmJlxuICAgICAgICAgIGAke2kxOG5NZWFuc09mVHJhbnNwb3J0W3Byb2R1Y3QudmVoaWNsZU1vZGUudG9Mb3dlckNhc2UoKV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZWhpY2xlU3ViTW9kZVRleHQgPSBwcm9kdWN0Py52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZVxuICAgICAgPyBgJHtwcm9kdWN0LnZlaGljbGVTdWJNb2RlU2hvcnROYW1lfSAke3Byb2R1Y3QubGluZSB8fCAnJ30sIGBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkaXJlY3Rpb25UZXh0ID0gYCR7aTE4bkRpcmVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtkaXJlY3Rpb259LCBgO1xuXG4gICAgY29uc3QgaGltQ3VzID0gdGhpcy5faGFuZGxlSGltQ3VzKHRyaXApO1xuICAgIGNvbnN0IGN1c1RleHQgPSBoaW1DdXM/LmN1cz8udGV4dFxuICAgICAgPyBgJHtpMThuUmVhbFRpbWVJbmZvW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHtoaW1DdXM/LmN1cz8udGV4dH0sIGBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaGltVGV4dCA9IGhpbUN1cz8uaGltPy50ZXh0XG4gICAgICA/IGAke2kxOG5SZWFsVGltZUluZm9bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2hpbUN1cz8uaGltPy50ZXh0fSwgYFxuICAgICAgOiAnJztcblxuICAgIGNvbnN0IGJvYXJkaW5nVGV4dCA9IHRoaXMuYm9hcmRpbmcgPyBgJHt0aGlzLmJvYXJkaW5nLnRleHR9LCBgIDogJyc7XG5cbiAgICBjb25zdCBwcmljZVRleHQgPSBgJHt0aGlzLnByaWNlPy5pc0Rpc2NvdW50ID8gaTE4blN1cGVyc2F2ZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0gOiAnJ30gJHtcbiAgICAgIHRoaXMucHJpY2U/LnRleHQgJiYgdGhpcy5wcmljZT8ucHJpY2VcbiAgICAgICAgPyAodGhpcy5wcmljZT8udGV4dCB8fCAnJykgKyAnICcgKyAodGhpcy5wcmljZT8ucHJpY2UgfHwgJycpICsgJywgJ1xuICAgICAgICA6ICcnXG4gICAgfWA7XG5cbiAgICBjb25zdCB0cmFuc2ZlclByb2NlZHVyZXMgPVxuICAgICAgcmlkZUxlZ3MubGVuZ3RoID4gMlxuICAgICAgICA/IGAke3JpZGVMZWdzLmxlbmd0aCAtIDF9ICR7aTE4blRyYW5zZmVyUHJvY2VkdXJlc1t0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgOiByaWRlTGVncy5sZW5ndGggPiAxXG4gICAgICAgICAgPyBgJHtyaWRlTGVncy5sZW5ndGggLSAxfSAke2kxOG5UcmFuc2ZlclByb2NlZHVyZVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sIGBcbiAgICAgICAgICA6ICcnO1xuXG4gICAgY29uc3QgYXJyaXZhbFRpbWVUZXh0ID0gYXJyaXZhbFRpbWVcbiAgICAgID8gYCR7aTE4bkFycml2YWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19OiAke2Zvcm1hdChhcnJpdmFsVGltZSwgJ0hIOm1tJyl9LCBgXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IG9jY3VwYW5jeVRleHQ6IHN0cmluZyA9ICcnO1xuICAgIGlmIChvY2N1cGFuY3kpIHtcbiAgICAgIGlmIChvY2N1cGFuY3kuZmlyc3RDbGFzcyAmJiBvY2N1cGFuY3kuZmlyc3RDbGFzcyAhPT0gJ1VOS05PV04nKSB7XG4gICAgICAgIG9jY3VwYW5jeVRleHQgKz0gYCR7aTE4bkNsYXNzLmZpcnN0W3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LmZpcnN0Q2xhc3MudG9Mb3dlckNhc2UoKSBhcyBTYmJPY2N1cGFuY3ldIGFzIFJlY29yZDxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICAgID5cbiAgICAgICAgICApPy5bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF1cbiAgICAgICAgfS5gO1xuICAgICAgfVxuICAgICAgaWYgKG9jY3VwYW5jeS5zZWNvbmRDbGFzcyAmJiBvY2N1cGFuY3kuc2Vjb25kQ2xhc3MgIT09ICdVTktOT1dOJykge1xuICAgICAgICBvY2N1cGFuY3lUZXh0ICs9IGAgJHtpMThuQ2xhc3Muc2Vjb25kW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgIChcbiAgICAgICAgICAgIGkxOG5PY2N1cGFuY3lbb2NjdXBhbmN5LnNlY29uZENsYXNzLnRvTG93ZXJDYXNlKCkgYXMgU2JiT2NjdXBhbmN5XSBhcyBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgc3RyaW5nXG4gICAgICAgICAgICA+XG4gICAgICAgICAgKT8uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdXG4gICAgICAgIH0uYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID1cbiAgICAgIG5vdGljZXMgJiZcbiAgICAgIGhhbmRsZU5vdGljZXMobm90aWNlcykubGVuZ3RoICYmXG4gICAgICBoYW5kbGVOb3RpY2VzKG5vdGljZXMpXG4gICAgICAgID8ubWFwKChub3RpY2UsIGluZGV4KSA9PiBpbmRleCA8IDQgJiYgbm90aWNlLnRleHQ/LnRlbXBsYXRlKVxuICAgICAgICAuam9pbignLCAnKSArICcsICc7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzVGV4dCA9IGF0dHJpYnV0ZXNcbiAgICAgID8gYCR7aTE4blRyYXZlbGhpbnRzW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfTogJHthdHRyaWJ1dGVzfWBcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCBkdXJhdGlvblRleHQgPVxuICAgICAgISFkdXJhdGlvbiAmJiBkdXJhdGlvbiA+IDBcbiAgICAgICAgPyBgJHtpMThuVHJpcER1cmF0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgICAgZHVyYXRpb25Ub1RpbWUoZHVyYXRpb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpLmxvbmdcbiAgICAgICAgICB9LCBgXG4gICAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgZGVwYXJ0dXJlV2Fsa1RleHQsXG4gICAgICBkZXBhcnR1cmVUaW1lVGV4dCxcbiAgICAgIGdldERlcGFydHVyZVF1YXlUZXh0KCksXG4gICAgICBtZWFuc09mVHJhbnNwb3J0VGV4dCxcbiAgICAgIHZlaGljbGVTdWJNb2RlVGV4dCxcbiAgICAgIGRpcmVjdGlvblRleHQsXG4gICAgICBjdXNUZXh0LFxuICAgICAgYm9hcmRpbmdUZXh0LFxuICAgICAgcHJpY2VUZXh0LFxuICAgICAgY3VzVGV4dCA/ICcnIDogaGltVGV4dCxcbiAgICAgIGFycml2YWxUaW1lVGV4dCxcbiAgICAgIGFycml2YWxXYWxrVGV4dCxcbiAgICAgIGR1cmF0aW9uVGV4dCxcbiAgICAgIHRyYW5zZmVyUHJvY2VkdXJlcyxcbiAgICAgIG9jY3VwYW5jeVRleHQsXG4gICAgICBhdHRyaWJ1dGVzVGV4dCxcbiAgICBdXG4gICAgICAubWFwKChlKSA9PiBlLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoKGUpID0+IGUgJiYgZS5sZW5ndGggPiAwKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGlmICh0aGlzLmxvYWRpbmdUcmlwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyU2tlbGV0b24oKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGxlZ3MsIGlkLCBub3RpY2VzLCBzdW1tYXJ5IH0gPSB0aGlzLnRyaXAgfHwge307XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0LFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgZGVwYXJ0dXJlV2FsayxcbiAgICAgIGRlcGFydHVyZSxcbiAgICAgIGFycml2YWwsXG4gICAgICBhcnJpdmFsV2FsayxcbiAgICAgIG9jY3VwYW5jeSxcbiAgICAgIGR1cmF0aW9uLFxuICAgIH0gPSBzdW1tYXJ5IHx8IHt9O1xuXG4gICAgY29uc3QgaGltQ3VzID0gdGhpcy5faGFuZGxlSGltQ3VzKHRoaXMudHJpcCk7XG4gICAgY29uc3QgaGFzSGltQ3VzID0gISFoaW1DdXMuY3VzIHx8ICEhaGltQ3VzLmhpbTtcblxuICAgIGNvbnN0IG5vdGljZUF0dHJpYnV0ZXMgPSBub3RpY2VzICYmIGhhbmRsZU5vdGljZXMobm90aWNlcyk7XG5cbiAgICBjb25zdCBkdXJhdGlvbk9iaiA9IGR1cmF0aW9uID8gZHVyYXRpb25Ub1RpbWUoZHVyYXRpb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpIDogbnVsbDtcblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1jYXJkIHNpemU9XCJsXCIgaWQ9JHtpZH0+XG4gICAgICAgIDxzYmItY2FyZC1idXR0b25cbiAgICAgICAgICA/YWN0aXZlPSR7dGhpcy5hY3RpdmV9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD0ke3RoaXMuYWNjZXNzaWJpbGl0eUV4cGFuZGVkID8gJ3RydWUnIDogbm90aGluZ31cbiAgICAgICAgPlxuICAgICAgICAgICR7dGhpcy5jYXJkQWN0aW9uTGFiZWwgPyB0aGlzLmNhcmRBY3Rpb25MYWJlbCA6IHRoaXMuX2dldEFjY2Vzc2liaWxpdHlUZXh0KHRoaXMudHJpcCl9XG4gICAgICAgIDwvc2JiLWNhcmQtYnV0dG9uPlxuICAgICAgICAke3RoaXMubG9hZGluZ1ByaWNlXG4gICAgICAgICAgPyBodG1sYDxzYmItY2FyZC1iYWRnZSBjbGFzcz1cInNiYi1sb2FkaW5nX19iYWRnZVwiPjwvc2JiLWNhcmQtYmFkZ2U+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgJHt0aGlzLnByaWNlICYmICF0aGlzLmxvYWRpbmdQcmljZVxuICAgICAgICAgID8gaHRtbGA8c2JiLWNhcmQtYmFkZ2UgY29sb3I9JHt0aGlzLnByaWNlLmlzRGlzY291bnQgPyAnY2hhcmNvYWwnIDogJ3doaXRlJ30+XG4gICAgICAgICAgICAgICR7dGhpcy5wcmljZS5pc0Rpc2NvdW50XG4gICAgICAgICAgICAgICAgPyBodG1sYDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAlPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICA+JHtpMThuU3VwZXJzYXZlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPmBcbiAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICR7dGhpcy5wcmljZS50ZXh0ID8gaHRtbGA8c3Bhbj4ke3RoaXMucHJpY2UudGV4dH08L3NwYW4+YCA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICR7dGhpcy5wcmljZS5wcmljZSA/IGh0bWxgPHNwYW4+JHt0aGlzLnByaWNlLnByaWNlfTwvc3Bhbj5gIDogbm90aGluZ31cbiAgICAgICAgICAgIDwvc2JiLWNhcmQtYmFkZ2U+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvd1wiIHJvbGU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LWhlYWRlclwiIHJvbGU9XCJncmlkY2VsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICR7cHJvZHVjdD8uY29ycG9yYXRlSWRlbnRpdHlQaWN0b2dyYW0gJiZcbiAgICAgICAgICAgICAgaHRtbGA8c3BhbiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy10cmFuc3BvcnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxzYmItaWNvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItdGltZXRhYmxlX19yb3ctdHJhbnNwb3J0LWljb25cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInBpY3RvOiR7cHJvZHVjdC5jb3Jwb3JhdGVJZGVudGl0eVBpY3RvZ3JhbX1cIlxuICAgICAgICAgICAgICAgID48L3NiYi1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICAgICAgICAgJHtwcm9kdWN0ICYmXG4gICAgICAgICAgICAgICAgICBwcm9kdWN0LnZlaGljbGVNb2RlICYmXG4gICAgICAgICAgICAgICAgICBpMThuTWVhbnNPZlRyYW5zcG9ydFtwcm9kdWN0LnZlaGljbGVNb2RlLnRvTG93ZXJDYXNlKCldICYmXG4gICAgICAgICAgICAgICAgICBpMThuTWVhbnNPZlRyYW5zcG9ydFtwcm9kdWN0LnZlaGljbGVNb2RlLnRvTG93ZXJDYXNlKCldW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+YH1cbiAgICAgICAgICAgICAgJHtwcm9kdWN0ICYmXG4gICAgICAgICAgICAgIChwcm9kdWN0LmNvcnBvcmF0ZUlkZW50aXR5SWNvblxuICAgICAgICAgICAgICAgID8gcmVuZGVySWNvblByb2R1Y3QocHJvZHVjdC5jb3Jwb3JhdGVJZGVudGl0eUljb24sIHByb2R1Y3QubmFtZSlcbiAgICAgICAgICAgICAgICA6IHByb2R1Y3QudmVoaWNsZVN1Yk1vZGVTaG9ydE5hbWUgJiZcbiAgICAgICAgICAgICAgICAgIHJlbmRlclN0cmluZ1Byb2R1Y3QocHJvZHVjdC52ZWhpY2xlU3ViTW9kZVNob3J0TmFtZSwgcHJvZHVjdD8ubGluZSkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAke2RpcmVjdGlvblxuICAgICAgICAgICAgICA/IGh0bWxgPHA+JHtgJHtpMThuRGlyZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke2RpcmVjdGlvbn1gfTwvcD5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2JiLXBlYXJsLWNoYWluLXRpbWVcbiAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAubGVncz0ke2xlZ3N9XG4gICAgICAgICAgICAuZGVwYXJ0dXJlVGltZT0ke2RlcGFydHVyZT8udGltZX1cbiAgICAgICAgICAgIC5hcnJpdmFsVGltZT0ke2Fycml2YWw/LnRpbWV9XG4gICAgICAgICAgICAuZGVwYXJ0dXJlV2Fsaz0ke2RlcGFydHVyZVdhbGt9XG4gICAgICAgICAgICAuYXJyaXZhbFdhbGs9JHthcnJpdmFsV2Fsa31cbiAgICAgICAgICAgID9kaXNhYmxlLWFuaW1hdGlvbj0ke3RoaXMuZGlzYWJsZUFuaW1hdGlvbn1cbiAgICAgICAgICAgID9hMTF5LWZvb3RwYXRoPSR7dGhpcy5hMTF5Rm9vdHBhdGh9XG4gICAgICAgICAgICAubm93PSR7dGhpcy5ub3d9XG4gICAgICAgICAgPjwvc2JiLXBlYXJsLWNoYWluLXRpbWU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10aW1ldGFibGVfX3Jvdy1mb290ZXJcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgICR7cHJvZHVjdCAmJiBkZXBhcnR1cmU/LnF1YXlGb3JtYXR0ZWRcbiAgICAgICAgICAgICAgPyBodG1sYDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz0ke2RlcGFydHVyZT8ucXVheUNoYW5nZWQgPyBgc2JiLXRpbWV0YWJsZV9fcm93LXF1YXktLWNoYW5nZWRgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtgJHtpMThuRGVwYXJ0dXJlW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke1xuICAgICAgICAgICAgICAgICAgICAgIGRlcGFydHVyZT8ucXVheUNoYW5nZWQgPyBpMThuTmV3W3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdIDogJydcbiAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgJHt0aGlzLl9yZW5kZXJRdWF5VHlwZSgpfSAke2RlcGFydHVyZT8ucXVheUZvcm1hdHRlZH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAkeyhvY2N1cGFuY3k/LmZpcnN0Q2xhc3MgJiYgb2NjdXBhbmN5Py5maXJzdENsYXNzICE9PSAnVU5LTk9XTicpIHx8XG4gICAgICAgICAgICAob2NjdXBhbmN5Py5zZWNvbmRDbGFzcyAmJiBvY2N1cGFuY3kuc2Vjb25kQ2xhc3MgIT09ICdVTktOT1dOJylcbiAgICAgICAgICAgICAgPyBodG1sYDxzYmItdGltZXRhYmxlLW9jY3VwYW5jeVxuICAgICAgICAgICAgICAgICAgLmZpcnN0Q2xhc3NPY2N1cGFuY3k9JHtvY2N1cGFuY3k/LmZpcnN0Q2xhc3M/LnRvTG93ZXJDYXNlKCl9XG4gICAgICAgICAgICAgICAgICAuc2Vjb25kQ2xhc3NPY2N1cGFuY3k9JHtvY2N1cGFuY3k/LnNlY29uZENsYXNzPy50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICAgID48L3NiYi10aW1ldGFibGUtb2NjdXBhbmN5PmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHsobm90aWNlQXR0cmlidXRlcyAmJiBub3RpY2VBdHRyaWJ1dGVzLmxlbmd0aCkgfHwgdGhpcy5ib2FyZGluZ1xuICAgICAgICAgICAgICA/IGh0bWxgPHVsIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LWhpbnRzXCIgcm9sZT1cImxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICR7bm90aWNlQXR0cmlidXRlcz8ubWFwKChub3RpY2UsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgICAgICBpbmRleCA8IDRcbiAgICAgICAgICAgICAgICAgICAgICA/IGh0bWxgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2JiLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmF2ZWwtaGludHNfX2l0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9JHsnc2EtJyArIG5vdGljZS5uYW1lPy50b0xvd2VyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHtub3RpY2UudGV4dD8udGVtcGxhdGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5gXG4gICAgICAgICAgICAgICAgICAgICAgOiBub3RoaW5nLFxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5ib2FyZGluZ1xuICAgICAgICAgICAgICAgICAgICA/IGh0bWxgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYXZlbC1oaW50c19faXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9JHt0aGlzLmJvYXJkaW5nPy5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5ib2FyZGluZz8udGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPmBcbiAgICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAgIDwvdWw+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAke2R1cmF0aW9uICYmIGR1cmF0aW9uID4gMFxuICAgICAgICAgICAgICA/IGh0bWxgPHRpbWU+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgJHtgJHtpMThuVHJpcER1cmF0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke2R1cmF0aW9uT2JqIS5sb25nfWB9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke2R1cmF0aW9uT2JqIS5zaG9ydH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90aW1lPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHtoYXNIaW1DdXMgJiYgKGhpbUN1cy5jdXMgfHwgaGltQ3VzLmhpbSlcbiAgICAgICAgICAgICAgPyBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXRpbWV0YWJsZV9fcm93LXdhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgIDxzYmItaWNvbiBuYW1lPSR7KGhpbUN1cy5jdXMgfHwgaGltQ3VzLmhpbSkhLm5hbWV9Pjwvc2JiLWljb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4keyhoaW1DdXMuY3VzIHx8IGhpbUN1cy5oaW0pIS50ZXh0fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zYmItY2FyZD5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItdGltZXRhYmxlLXJvdyc6IFNiYlRpbWV0YWJsZVJvd0VsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYiIsIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0RhLE1BQUEsb0JBQW9CLENBQUMsTUFBYyxTQUFnQztBQUN2RSxTQUFBO0FBQUEscUJBQ1ksSUFBSTtBQUFBLDJDQUNrQixJQUFJO0FBQUE7QUFFL0M7QUFFYSxNQUFBLHNCQUFzQixDQUFDLGFBQXFCLFNBQXdDO0FB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
|