@sbb-esta/lyne-elements-experimental-dev 0.0.0 → 4.5.1-dev.1771859300

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