@sbb-esta/lyne-elements-dev 5.0.0-next.1-dev.1777358786 → 5.0.0-next.1-dev.1777393579

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 (70) hide show
  1. package/core/i18n/i18n.js +103 -98
  2. package/core/styles/core.scss +15 -38
  3. package/core.css +57 -31
  4. package/core.js +22 -22
  5. package/custom-elements.json +6013 -2585
  6. package/development/core/i18n/i18n.d.ts +1 -0
  7. package/development/core/i18n/i18n.d.ts.map +1 -1
  8. package/development/core/i18n/i18n.js +8 -2
  9. package/development/core.js +2 -2
  10. package/development/train/train/train.component.d.ts +2 -5
  11. package/development/train/train/train.component.d.ts.map +1 -1
  12. package/development/train/train/train.component.js +1 -1
  13. package/development/train/train-blocked-passage/train-blocked-passage.component.d.ts +4 -3
  14. package/development/train/train-blocked-passage/train-blocked-passage.component.d.ts.map +1 -1
  15. package/development/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  16. package/development/train/train-formation/train-formation.component.d.ts +6 -2
  17. package/development/train/train-formation/train-formation.component.d.ts.map +1 -1
  18. package/development/train/train-formation/train-formation.component.js +1 -1
  19. package/development/train/train-formation-orientation-mixin.d.ts +12 -0
  20. package/development/train/train-formation-orientation-mixin.d.ts.map +1 -0
  21. package/development/train/train-formation-orientation-mixin.js +62 -0
  22. package/development/train/train-wagon/train-wagon.component.d.ts +5 -32
  23. package/development/train/train-wagon/train-wagon.component.d.ts.map +1 -1
  24. package/development/train/train-wagon/train-wagon.component.js +19 -1
  25. package/development/train/train-wagon-button/train-wagon-button.component.d.ts +18 -0
  26. package/development/train/train-wagon-button/train-wagon-button.component.d.ts.map +1 -0
  27. package/development/train/train-wagon-button/train-wagon-button.component.js +18 -0
  28. package/development/train/train-wagon-common.d.ts +15 -0
  29. package/development/train/train-wagon-common.d.ts.map +1 -0
  30. package/development/train/train-wagon-common.js +2 -0
  31. package/development/train/train-wagon-link/train-wagon-link.component.d.ts +18 -0
  32. package/development/train/train-wagon-link/train-wagon-link.component.d.ts.map +1 -0
  33. package/development/train/train-wagon-link/train-wagon-link.component.js +18 -0
  34. package/development/train-blocked-passage.component-BgBnEOfh.js +22 -0
  35. package/development/train-formation.component-CDKR5KCm.js +194 -0
  36. package/development/train-wagon-common-S3OJdguG.js +441 -0
  37. package/development/train.component-CP9QaQk8.js +239 -0
  38. package/development/train.d.ts.map +1 -1
  39. package/development/train.js +13 -7
  40. package/development/train.pure.d.ts +4 -0
  41. package/development/train.pure.d.ts.map +1 -1
  42. package/development/train.pure.js +9 -5
  43. package/index.d.ts +3 -1
  44. package/index.js +3 -1
  45. package/off-brand-theme.css +57 -31
  46. package/package.json +2 -2
  47. package/safety-theme.css +57 -31
  48. package/standard-theme.css +57 -31
  49. package/train/train/train.component.js +1 -1
  50. package/train/train-blocked-passage/train-blocked-passage.component.js +1 -1
  51. package/train/train-formation/train-formation.component.js +1 -1
  52. package/train/train-formation-orientation-mixin.js +45 -0
  53. package/train/train-wagon/train-wagon.component.js +13 -2
  54. package/train/train-wagon-button/train-wagon-button.component.js +10 -0
  55. package/train/train-wagon-common.js +2 -0
  56. package/train/train-wagon-link/train-wagon-link.component.js +10 -0
  57. package/train-blocked-passage.component-voZ8fxiB.js +14 -0
  58. package/train-formation.component-6XQVXPue.js +147 -0
  59. package/train-wagon-common-DTN_G78z.js +354 -0
  60. package/train.component-3vmLxVCZ.js +181 -0
  61. package/train.js +10 -6
  62. package/train.pure.js +9 -5
  63. package/development/train-blocked-passage.component-Bh2dR1gn.js +0 -30
  64. package/development/train-formation.component-Dm0t9N_h.js +0 -149
  65. package/development/train-wagon.component-B6V4dPKn.js +0 -334
  66. package/development/train.component-BvbNBkZF.js +0 -229
  67. package/train-blocked-passage.component-DIh8dbU9.js +0 -22
  68. package/train-formation.component-DS4EDwPY.js +0 -117
  69. package/train-wagon.component-LwKwwuta.js +0 -257
  70. package/train.component-DuFi_iBX.js +0 -174
@@ -0,0 +1,441 @@
1
+ import { SbbTrainFormationOrientationMixin } from "./train/train-formation-orientation-mixin.js";
2
+ import { __esDecorate, __runInitializers } from "tslib";
3
+ import { isServer, nothing, unsafeCSS } from "lit";
4
+ import { property, state } from "lit/decorators.js";
5
+ import { SbbLanguageController, SbbNamedSlotListMixin, SbbPropertyWatcherController, boxSizingStyles, forceType, handleDistinctChange, i18nAdditionalWagonInformationHeading, i18nAnd, i18nBlockedPassage, i18nClass, i18nClosedCompartmentLabel, i18nCouchetteWagonLabel, i18nLocomotiveLabel, i18nRestaurantWagonLabel, i18nSector, i18nSleepingWagonLabel, i18nWagonLabel, i18nWagonLabelNumber, omitEmptyConverter } from "./core.js";
6
+ import { html as html$1 } from "lit/static-html.js";
7
+ import { SbbDividerElement } from "./divider.pure.js";
8
+ import { SbbIconElement } from "./icon.pure.js";
9
+ import { SbbTimetableOccupancyIconElement } from "./timetable-occupancy-icon.pure.js";
10
+ import { when } from "lit/directives/when.js";
11
+ //#region src/elements/train/train-wagon-common.scss?inline
12
+ var train_wagon_common_default = ":host {\n --sbb-train-wagon-transition-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-2x)\n );\n display: block;\n font-size: var(--sbb-train-wagon-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n outline: none !important;\n}\n\n:host([wagon-type=closed]) {\n --sbb-train-wagon-crossed-shape-display: block;\n}\n@media (forced-colors: active) {\n :host([wagon-type=closed]) {\n --sbb-train-wagon-shape-color: GrayText;\n }\n}\n\n:host(:is(:state(view-side),[state--view-side])[wagon-type=wagon-end-left]) {\n --sbb-train-wagon-padding-inline: var(--sbb-spacing-fixed-4x) var(--sbb-spacing-fixed-3x);\n}\n\n:host(:is(:state(view-side),[state--view-side])[wagon-type=wagon-end-right]) {\n --sbb-train-wagon-padding-inline: var(--sbb-spacing-fixed-3x) var(--sbb-spacing-fixed-4x);\n}\n\n:host(:is(:state(view-side),[state--view-side])[wagon-type=locomotive]) {\n --sbb-train-wagon-padding-inline: var(--sbb-spacing-fixed-4x);\n}\n\n:host(:is(:state(view-top),[state--view-top])) {\n --sbb-train-wagon-border-radius: var(--sbb-border-radius-4x);\n}\n\n:host([label]) {\n --_sbb-train-wagon-attributes-max-width: var(--sbb-train-wagon-attributes-max-width);\n}\n\n:host(:not([label])) {\n --_sbb-train-wagon-attributes-justify-content: center;\n}\n\n:host(.sbb-active) {\n --sbb-train-wagon-border-width: var(--sbb-border-width-3x);\n}\n\n:host(:is(:state(action),[state--action])) {\n cursor: var(--sbb-cursor-pointer);\n}\n\n@media (forced-colors: active) {\n :host(:is(:state(link),[state--link])) {\n --sbb-train-wagon-shape-color: LinkText;\n }\n}\n\n.sbb-train-wagon-link {\n outline: none;\n color: inherit;\n text-decoration: none;\n}\n\n.sbb-train-wagon {\n display: flex;\n flex-direction: var(--_sbb-train-formation-flex-direction-inverted);\n align-items: center;\n width: var(--_sbb-train-formation-wagon-width);\n gap: var(--sbb-train-wagon-vertical-gap);\n position: relative;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon {\n width: auto;\n height: var(--_sbb-train-formation-wagon-height);\n}\n.sbb-train-wagon::before {\n content: \"\";\n position: absolute;\n width: var(--_sbb-train-formation-wagon-width);\n height: var(--_sbb-train-formation-wagon-height);\n border-radius: var(--sbb-train-wagon-border-radius);\n}\n:host(:is(:state(button),[state--button]):focus-visible) .sbb-train-wagon::before, .sbb-train-wagon-link:focus-visible .sbb-train-wagon::before {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n}\n\n.sbb-train-wagon__compartment {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n display: flex;\n flex-direction: var(--_sbb-train-formation-flex-direction);\n justify-content: center;\n padding-inline: var(--sbb-train-wagon-padding-inline);\n mask-image: var(--_sbb-train-wagon-clip-shape-compartment);\n transition: background-color var(--sbb-train-wagon-transition-duration) var(--sbb-animation-easing);\n}\n@media (any-hover: hover) {\n :host(:is(:state(action),[state--action]):hover) .sbb-train-wagon__compartment {\n background-color: var(--sbb-train-wagon-background-color-hover);\n }\n}\n:host(:is(:state(action),[state--action]):is(:active, :is(:state(active),[state--active]))) .sbb-train-wagon__compartment {\n background-color: var(--sbb-train-wagon-background-color-active);\n}\n.sbb-train-wagon__compartment:has(.sbb-train-wagon__occupancy):has(.sbb-train-wagon__class) {\n justify-content: space-between;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__compartment {\n padding-inline: 0;\n padding-block: var(--sbb-train-wagon-padding-inline);\n}\n\n.sbb-train-wagon__compartment,\n.sbb-train-wagon__main-icon {\n width: var(--_sbb-train-formation-wagon-width);\n height: var(--_sbb-train-formation-wagon-height);\n}\n\n.sbb-train-wagon__shape {\n position: absolute;\n inset: 0;\n width: var(--sbb-train-formation-wagon-dimension-long);\n height: var(--sbb-train-formation-wagon-dimension-short);\n transform-origin: 0 0;\n will-change: transform;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__shape {\n rotate: -90deg;\n transform: scale(-1, 1);\n}\n\n.sbb-train-wagon__shape {\n mask-image: var(--_sbb-train-wagon-clip-shape);\n pointer-events: none;\n fill: none;\n stroke: var(--sbb-train-wagon-shape-color);\n stroke-width: calc(var(--sbb-train-wagon-border-width) * 2);\n}\n\n.sbb-train-wagon__main-icon {\n --sbb-icon-svg-height: var(--sbb-train-wagon-main-icon-height);\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.sbb-train-wagon__shape-closed {\n display: var(--sbb-train-wagon-crossed-shape-display, none);\n stroke-width: var(--sbb-border-width-1x);\n}\n\n.sbb-train-wagon__occupancy,\n.sbb-train-wagon__class {\n height: var(--_sbb-train-formation-wagon-height);\n flex-direction: var(--_sbb-train-formation-flex-direction);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__occupancy,\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__class {\n height: auto;\n width: var(--_sbb-train-formation-wagon-width);\n}\n\n.sbb-train-wagon__occupancy {\n --sbb-icon-svg-height: var(--sbb-train-wagon-occupancy-height);\n grid-area: occupancy;\n}\n\n.sbb-train-wagon__class {\n gap: 0.0625rem;\n order: 1;\n}\n\n.sbb-train-wagon__class-entry {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--sbb-train-wagon-class-dimension);\n height: var(--sbb-train-wagon-class-dimension);\n border: var(--sbb-train-wagon-class-border);\n background-color: var(--sbb-train-wagon-class-background-color);\n border-radius: var(--sbb-train-wagon-class-border-radius);\n font-weight: var(--sbb-train-wagon-class-font-weight);\n color: var(--sbb-train-wagon-class-color);\n position: relative;\n line-height: 1;\n}\n.sbb-train-wagon__class-entry.first::before {\n content: \"\";\n position: absolute;\n background-color: var(--sbb-train-wagon-class-first-color);\n border-end-end-radius: var(--sbb-train-wagon-class-first-border-radius);\n}\n:host(:not(:is(:state(orientation-vertical),[state--orientation-vertical]))) .sbb-train-wagon__class-entry.first::before {\n height: var(--sbb-train-wagon-class-first-thickness);\n width: var(--sbb-train-wagon-class-dimension);\n inset: calc(-0.5 * (var(--_sbb-train-formation-wagon-height) - var(--sbb-train-wagon-class-dimension)) + var(--sbb-train-wagon-border-width) - var(--sbb-train-wagon-class-border-width)) 0 auto calc(-1 * var(--sbb-train-wagon-class-border-width));\n border-end-start-radius: var(--sbb-train-wagon-class-first-border-radius);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__class-entry.first::before {\n width: var(--sbb-train-wagon-class-first-thickness);\n height: var(--sbb-train-wagon-class-dimension);\n inset: calc(-1 * var(--sbb-train-wagon-class-border-width)) auto 0 calc(-0.5 * (var(--_sbb-train-formation-wagon-width) - var(--sbb-train-wagon-class-dimension)) + var(--sbb-train-wagon-border-width) - var(--sbb-train-wagon-class-border-width));\n border-start-end-radius: var(--sbb-train-wagon-class-first-border-radius);\n}\n\n.sbb-train-wagon__information-wrapper {\n display: flex;\n align-items: start;\n flex-direction: var(--_sbb-train-formation-flex-direction);\n gap: var(--sbb-train-wagon-information-gap);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__information-wrapper {\n min-width: var(--sbb-train-wagon-information-min-width);\n}\n.sbb-train-wagon__information-wrapper[hidden] {\n display: none;\n}\n\n:is(.sbb-train-wagon__label, .sbb-train-wagon__label-divider) {\n margin-block-start: calc(0.5 * (1em * var(--sbb-typo-line-height-text) - var(--sbb-train-wagon-font-size)));\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) :is(.sbb-train-wagon__label, .sbb-train-wagon__label-divider) {\n margin-block-start: 0;\n}\n\n.sbb-train-wagon__label {\n line-height: 1;\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__label {\n max-width: var(--sbb-train-wagon-information-min-width);\n width: 100%;\n text-align: center;\n}\n\n.sbb-train-wagon__label-divider {\n height: var(--sbb-train-wagon-font-size);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__label-divider {\n height: auto;\n width: var(--sbb-train-wagon-font-size);\n margin-inline-start: calc(0.5 * (var(--sbb-train-wagon-information-min-width) - var(--sbb-train-wagon-font-size)));\n}\n\n.sbb-train-wagon__attribute-icon-list {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n --sbb-icon-svg-height: var(--sbb-train-wagon-attribute-icon-height);\n display: flex;\n justify-content: var(--_sbb-train-wagon-attributes-justify-content, start);\n flex-wrap: wrap;\n gap: var(--sbb-train-wagon-attribute-icon-gap);\n color: var(--sbb-train-wagon-attribute-icon-color);\n padding-block-start: calc(0.5 * (1em * var(--sbb-typo-line-height-text) - var(--sbb-train-wagon-attribute-icon-height)));\n max-width: var(--_sbb-train-wagon-attributes-max-width);\n}\n:host(:is(:state(orientation-vertical),[state--orientation-vertical])) .sbb-train-wagon__attribute-icon-list {\n max-width: calc(var(--_sbb-train-wagon-attributes-icon-columns) * var(--sbb-train-wagon-attributes-mean-width));\n max-height: calc(var(--_sbb-train-wagon-attributes-icon-rows, 3) * var(--sbb-train-wagon-attribute-icon-height) + (var(--_sbb-train-wagon-attributes-icon-rows, 3) - 1) * var(--sbb-train-wagon-attribute-icon-gap));\n padding-block-start: 0;\n justify-content: center;\n width: 100%;\n}\n\n.sbb-train-wagon__attribute-icon-list > :is(li, span) {\n display: inline-flex;\n}\n\n.sbb-screen-reader-only {\n border: 0;\n clip-path: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}";
13
+ //#endregion
14
+ //#region src/elements/train/train-wagon-common.ts
15
+ var wagonTypeToIconMap = {
16
+ couchette: "sa-cc",
17
+ sleeping: "sa-wl",
18
+ restaurant: "sa-wr"
19
+ };
20
+ var shapePaths = {
21
+ wagon: {
22
+ side: "M12 0H72A12 12 0 0184 12V24A12 12 0 0172 36H12A12 12 0 010 24V12A12 12 0 0112 0Z",
23
+ top: "M8 0A8 8 0 000 8V28a8 8 0 008 8H76a8 8 0 008-8V8A8 8 0 0076 0H8Z"
24
+ },
25
+ locomotive: {
26
+ side: "M7.7 8.6C10.5 3.6 16 0 22 0H62c6 0 11.5 3.6 14.3 8.6l5.1 9C85.9 25.6 80 36 71 36H13C4 36-1.9 25.6 2.6 17.6l5.1-9Z",
27
+ top: "M66 0H18C8 0 0 8 0 18S8 36 18 36H66c10 0 18-8 18-18S76 0 66 0Z"
28
+ },
29
+ "wagon-end-left": {
30
+ side: "M7.7 8.6A16 16 0 0122 0H72c6 0 12 6 12 12V24c0 6-6 12-12 12H13C3.8 36-2 26.1 2.6 18.1Z",
31
+ top: "M76 0H18C8.25 0 .5 8.25.5 18S8 36 18 36H76c4 0 8-4 8-8V8c0-4-4-8-8-8Z"
32
+ },
33
+ "wagon-end-right": {
34
+ side: "M76.3 8.6A16 16 0 0062 0H12C6 0 0 6 0 13v11c0 6 6 12 12 12h58.4c8.6 0 15-9.9 10.4-17.9z",
35
+ top: "M66 0H8C4 0 0 4 0 8V28c0 4 4 8 8 8H66c9.75 0 17.5-8.25 17.5-18S76 0 66 0Z"
36
+ }
37
+ };
38
+ var SbbTrainWagonMixin = (superClass) => {
39
+ return (() => {
40
+ let _classSuper = SbbTrainFormationOrientationMixin(SbbNamedSlotListMixin(superClass));
41
+ let _wagonType_decorators;
42
+ let _wagonType_initializers = [];
43
+ let _wagonType_extraInitializers = [];
44
+ let _occupancy_decorators;
45
+ let _occupancy_initializers = [];
46
+ let _occupancy_extraInitializers = [];
47
+ let _sector_decorators;
48
+ let _sector_initializers = [];
49
+ let _sector_extraInitializers = [];
50
+ let _blockedPassage_decorators;
51
+ let _blockedPassage_initializers = [];
52
+ let _blockedPassage_extraInitializers = [];
53
+ let _wagonClass_decorators;
54
+ let _wagonClass_initializers = [];
55
+ let _wagonClass_extraInitializers = [];
56
+ let _label_decorators;
57
+ let _label_initializers = [];
58
+ let _label_extraInitializers = [];
59
+ let _additionalAccessibilityText_decorators;
60
+ let _additionalAccessibilityText_initializers = [];
61
+ let _additionalAccessibilityText_extraInitializers = [];
62
+ let __view_decorators;
63
+ let __view_initializers = [];
64
+ let __view_extraInitializers = [];
65
+ return class SbbTrainWagonMixinElement extends _classSuper {
66
+ static {
67
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
68
+ _wagonType_decorators = [property({
69
+ attribute: "wagon-type",
70
+ reflect: true
71
+ })];
72
+ _occupancy_decorators = [property()];
73
+ _sector_decorators = [
74
+ forceType(),
75
+ handleDistinctChange((e) => e._sectorChanged()),
76
+ property({
77
+ reflect: true,
78
+ converter: omitEmptyConverter
79
+ })
80
+ ];
81
+ _blockedPassage_decorators = [property({ attribute: "blocked-passage" })];
82
+ _wagonClass_decorators = [property({ attribute: "wagon-class" })];
83
+ _label_decorators = [forceType(), property({
84
+ reflect: true,
85
+ converter: omitEmptyConverter
86
+ })];
87
+ _additionalAccessibilityText_decorators = [forceType(), property({ attribute: "additional-accessibility-text" })];
88
+ __view_decorators = [state()];
89
+ __esDecorate(this, null, _wagonType_decorators, {
90
+ kind: "accessor",
91
+ name: "wagonType",
92
+ static: false,
93
+ private: false,
94
+ access: {
95
+ has: (obj) => "wagonType" in obj,
96
+ get: (obj) => obj.wagonType,
97
+ set: (obj, value) => {
98
+ obj.wagonType = value;
99
+ }
100
+ },
101
+ metadata: _metadata
102
+ }, _wagonType_initializers, _wagonType_extraInitializers);
103
+ __esDecorate(this, null, _occupancy_decorators, {
104
+ kind: "accessor",
105
+ name: "occupancy",
106
+ static: false,
107
+ private: false,
108
+ access: {
109
+ has: (obj) => "occupancy" in obj,
110
+ get: (obj) => obj.occupancy,
111
+ set: (obj, value) => {
112
+ obj.occupancy = value;
113
+ }
114
+ },
115
+ metadata: _metadata
116
+ }, _occupancy_initializers, _occupancy_extraInitializers);
117
+ __esDecorate(this, null, _sector_decorators, {
118
+ kind: "accessor",
119
+ name: "sector",
120
+ static: false,
121
+ private: false,
122
+ access: {
123
+ has: (obj) => "sector" in obj,
124
+ get: (obj) => obj.sector,
125
+ set: (obj, value) => {
126
+ obj.sector = value;
127
+ }
128
+ },
129
+ metadata: _metadata
130
+ }, _sector_initializers, _sector_extraInitializers);
131
+ __esDecorate(this, null, _blockedPassage_decorators, {
132
+ kind: "accessor",
133
+ name: "blockedPassage",
134
+ static: false,
135
+ private: false,
136
+ access: {
137
+ has: (obj) => "blockedPassage" in obj,
138
+ get: (obj) => obj.blockedPassage,
139
+ set: (obj, value) => {
140
+ obj.blockedPassage = value;
141
+ }
142
+ },
143
+ metadata: _metadata
144
+ }, _blockedPassage_initializers, _blockedPassage_extraInitializers);
145
+ __esDecorate(this, null, _wagonClass_decorators, {
146
+ kind: "accessor",
147
+ name: "wagonClass",
148
+ static: false,
149
+ private: false,
150
+ access: {
151
+ has: (obj) => "wagonClass" in obj,
152
+ get: (obj) => obj.wagonClass,
153
+ set: (obj, value) => {
154
+ obj.wagonClass = value;
155
+ }
156
+ },
157
+ metadata: _metadata
158
+ }, _wagonClass_initializers, _wagonClass_extraInitializers);
159
+ __esDecorate(this, null, _label_decorators, {
160
+ kind: "accessor",
161
+ name: "label",
162
+ static: false,
163
+ private: false,
164
+ access: {
165
+ has: (obj) => "label" in obj,
166
+ get: (obj) => obj.label,
167
+ set: (obj, value) => {
168
+ obj.label = value;
169
+ }
170
+ },
171
+ metadata: _metadata
172
+ }, _label_initializers, _label_extraInitializers);
173
+ __esDecorate(this, null, _additionalAccessibilityText_decorators, {
174
+ kind: "accessor",
175
+ name: "additionalAccessibilityText",
176
+ static: false,
177
+ private: false,
178
+ access: {
179
+ has: (obj) => "additionalAccessibilityText" in obj,
180
+ get: (obj) => obj.additionalAccessibilityText,
181
+ set: (obj, value) => {
182
+ obj.additionalAccessibilityText = value;
183
+ }
184
+ },
185
+ metadata: _metadata
186
+ }, _additionalAccessibilityText_initializers, _additionalAccessibilityText_extraInitializers);
187
+ __esDecorate(this, null, __view_decorators, {
188
+ kind: "accessor",
189
+ name: "_view",
190
+ static: false,
191
+ private: false,
192
+ access: {
193
+ has: (obj) => "_view" in obj,
194
+ get: (obj) => obj._view,
195
+ set: (obj, value) => {
196
+ obj._view = value;
197
+ }
198
+ },
199
+ metadata: _metadata
200
+ }, __view_initializers, __view_extraInitializers);
201
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
202
+ enumerable: true,
203
+ configurable: true,
204
+ writable: true,
205
+ value: _metadata
206
+ });
207
+ }
208
+ static {
209
+ this.elementDependencies = [
210
+ SbbIconElement,
211
+ SbbTimetableOccupancyIconElement,
212
+ SbbDividerElement
213
+ ];
214
+ }
215
+ static {
216
+ this.styles = [boxSizingStyles, unsafeCSS(train_wagon_common_default)];
217
+ }
218
+ #wagonType_accessor_storage;
219
+ /**
220
+ * Wagon type.
221
+ * For `wagon-end-left` and `wagon-end-right`, please set the corresponding value of the `blockedPassage` property.
222
+ */
223
+ get wagonType() {
224
+ return this.#wagonType_accessor_storage;
225
+ }
226
+ set wagonType(value) {
227
+ this.#wagonType_accessor_storage = value;
228
+ }
229
+ #occupancy_accessor_storage;
230
+ /** Occupancy of a wagon. */
231
+ get occupancy() {
232
+ return this.#occupancy_accessor_storage;
233
+ }
234
+ set occupancy(value) {
235
+ this.#occupancy_accessor_storage = value;
236
+ }
237
+ #sector_accessor_storage;
238
+ /** Sector in which the wagon stops. */
239
+ get sector() {
240
+ return this.#sector_accessor_storage;
241
+ }
242
+ set sector(value) {
243
+ this.#sector_accessor_storage = value;
244
+ }
245
+ #blockedPassage_accessor_storage;
246
+ /** Accessibility text for blocked passages of the wagon. */
247
+ get blockedPassage() {
248
+ return this.#blockedPassage_accessor_storage;
249
+ }
250
+ set blockedPassage(value) {
251
+ this.#blockedPassage_accessor_storage = value;
252
+ }
253
+ #wagonClass_accessor_storage;
254
+ /** Class label */
255
+ get wagonClass() {
256
+ return this.#wagonClass_accessor_storage;
257
+ }
258
+ set wagonClass(value) {
259
+ this.#wagonClass_accessor_storage = value;
260
+ }
261
+ #label_accessor_storage;
262
+ /** Wagon number */
263
+ get label() {
264
+ return this.#label_accessor_storage;
265
+ }
266
+ set label(value) {
267
+ this.#label_accessor_storage = value;
268
+ }
269
+ #additionalAccessibilityText_accessor_storage;
270
+ /** Additional accessibility text which will be appended to the end. */
271
+ get additionalAccessibilityText() {
272
+ return this.#additionalAccessibilityText_accessor_storage;
273
+ }
274
+ set additionalAccessibilityText(value) {
275
+ this.#additionalAccessibilityText_accessor_storage = value;
276
+ }
277
+ #_view_accessor_storage;
278
+ get _view() {
279
+ return this.#_view_accessor_storage;
280
+ }
281
+ set _view(value) {
282
+ this.#_view_accessor_storage = value;
283
+ }
284
+ constructor(...args) {
285
+ super(...args);
286
+ this.#wagonType_accessor_storage = __runInitializers(this, _wagonType_initializers, "wagon");
287
+ this.listChildLocalNames = (__runInitializers(this, _wagonType_extraInitializers), ["sbb-icon"]);
288
+ this.#occupancy_accessor_storage = __runInitializers(this, _occupancy_initializers, null);
289
+ this.#sector_accessor_storage = (__runInitializers(this, _occupancy_extraInitializers), __runInitializers(this, _sector_initializers, ""));
290
+ this.#blockedPassage_accessor_storage = (__runInitializers(this, _sector_extraInitializers), __runInitializers(this, _blockedPassage_initializers, "none"));
291
+ this.#wagonClass_accessor_storage = (__runInitializers(this, _blockedPassage_extraInitializers), __runInitializers(this, _wagonClass_initializers, null));
292
+ this.#label_accessor_storage = (__runInitializers(this, _wagonClass_extraInitializers), __runInitializers(this, _label_initializers, ""));
293
+ this.#additionalAccessibilityText_accessor_storage = (__runInitializers(this, _label_extraInitializers), __runInitializers(this, _additionalAccessibilityText_initializers, ""));
294
+ this.#_view_accessor_storage = (__runInitializers(this, _additionalAccessibilityText_extraInitializers), __runInitializers(this, __view_initializers, null));
295
+ this._language = (__runInitializers(this, __view_extraInitializers), new SbbLanguageController(this));
296
+ this._clipStyleSheet = null;
297
+ this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-train-formation"), { view: (t) => {
298
+ if (this._view) this.internals.states.delete(`view-${this._view}`);
299
+ this._view = t.view;
300
+ if (this._view) this.internals.states.add(`view-${this._view}`);
301
+ } }));
302
+ }
303
+ createRenderRoot() {
304
+ const renderRoot = super.createRenderRoot();
305
+ if (!isServer) {
306
+ this._clipStyleSheet = new CSSStyleSheet();
307
+ renderRoot.adoptedStyleSheets.push(this._clipStyleSheet);
308
+ }
309
+ return renderRoot;
310
+ }
311
+ _sectorChanged() {
312
+ /** @internal */
313
+ this.dispatchEvent(new Event("sectorchange", {
314
+ bubbles: true,
315
+ composed: true
316
+ }));
317
+ }
318
+ _wagonTypeLabel() {
319
+ switch (this.wagonType) {
320
+ case "closed": return i18nClosedCompartmentLabel[this._language.current];
321
+ case "locomotive": return i18nLocomotiveLabel[this._language.current];
322
+ case "couchette": return i18nCouchetteWagonLabel[this._language.current];
323
+ case "sleeping": return i18nSleepingWagonLabel[this._language.current];
324
+ case "restaurant": return i18nRestaurantWagonLabel[this._language.current];
325
+ default: return i18nWagonLabel[this._language.current];
326
+ }
327
+ }
328
+ _wagonShape() {
329
+ const view = this._view ?? "side";
330
+ if ([
331
+ "wagon",
332
+ "couchette",
333
+ "sleeping",
334
+ "restaurant",
335
+ "closed"
336
+ ].includes(this.wagonType)) return shapePaths["wagon"][view];
337
+ return shapePaths[this.wagonType][view] ?? shapePaths["wagon"][view];
338
+ }
339
+ _classLabel() {
340
+ switch (this.wagonClass) {
341
+ case "1": return i18nClass["first"][this._language.current];
342
+ case "2": return i18nClass["second"][this._language.current];
343
+ case "1-2": return `${i18nClass["first"][this._language.current]} ${i18nAnd[this._language.current]} ${i18nClass["second"][this._language.current]}`;
344
+ case "2-1": return `${i18nClass["second"][this._language.current]} ${i18nAnd[this._language.current]} ${i18nClass["first"][this._language.current]}`;
345
+ default: return "";
346
+ }
347
+ }
348
+ renderTemplate() {
349
+ const blockedPassage = this.wagonType === "wagon-end-left" && this.blockedPassage === "none" ? "previous" : this.wagonType === "wagon-end-right" && this.blockedPassage === "none" ? "next" : this.blockedPassage ?? "none";
350
+ const hasBlockedPassageEntry = blockedPassage !== "none";
351
+ const listEntriesCount = +!!this.sector + +!!this.label + +(!!this.wagonClass && this.wagonType !== "closed") + +(!!this.occupancy && this.wagonType !== "closed") + +hasBlockedPassageEntry;
352
+ const sectorString = `${i18nSector[this._language.current]}, ${this.sector}`;
353
+ const labelString = `${i18nWagonLabelNumber[this._language.current]}, ${this.label}`;
354
+ const wagonClassContent = html$1`<span class="sbb-screen-reader-only">
355
+ ${this._classLabel()}
356
+ </span>
357
+ ${this.wagonClass?.split("-").map((wagonClass) => html$1`<span
358
+ aria-hidden="true"
359
+ class="sbb-train-wagon__class-entry ${wagonClass === "1" ? "first" : ""}"
360
+ >
361
+ ${wagonClass}
362
+ </span>`)} `;
363
+ const path = this._wagonShape();
364
+ const availableIconRows = this.label ? 3 : 4;
365
+ this._clipStyleSheet?.replaceSync(`:host {
366
+ --_sbb-train-wagon-clip-shape: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 84 36' fill='black'%3E%3Cpath d='${path}' /%3E%3C/svg%3E");
367
+ --_sbb-train-wagon-clip-shape-compartment: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${this.orientation === "vertical" ? 36 : 84} ${this.orientation === "vertical" ? 84 : 36}' fill='black'%3E%3Cpath d='${path}'${this.orientation === "vertical" ? ` transform='rotate(-90, 0, 0) scale(-1, 1)'` : ""} /%3E%3C/svg%3E");
368
+ --_sbb-train-wagon-attributes-icon-columns: ${Math.ceil(this.listChildren.length / availableIconRows)};
369
+ --_sbb-train-wagon-attributes-icon-rows: ${availableIconRows};
370
+ }`);
371
+ return html$1`
372
+ <div class="sbb-train-wagon">
373
+ ${when(listEntriesCount > 1, () => html$1`<ul aria-label=${this._wagonTypeLabel()} class="sbb-train-wagon__compartment">
374
+ ${this.sector ? html$1`<li class="sbb-screen-reader-only">${sectorString}</li>` : nothing}
375
+ ${this.label ? html$1`<li class="sbb-screen-reader-only">${labelString}</li>` : nothing}
376
+ ${this.wagonClass && this.wagonType !== "closed" ? html$1`<li class="sbb-train-wagon__class">${wagonClassContent}</li>` : nothing}
377
+ ${this.occupancy && this.wagonType !== "closed" ? html$1`<sbb-timetable-occupancy-icon
378
+ class="sbb-train-wagon__occupancy"
379
+ role="listitem"
380
+ occupancy=${this.occupancy}
381
+ ></sbb-timetable-occupancy-icon>` : nothing}
382
+ ${hasBlockedPassageEntry ? html$1`<li class="sbb-screen-reader-only">
383
+ ${i18nBlockedPassage[blockedPassage][this._language.current]}
384
+ </li>` : nothing}
385
+ </ul>`, () => html$1`<div class="sbb-train-wagon__compartment">
386
+ <span class="sbb-screen-reader-only">
387
+ ${`${this._wagonTypeLabel()}${this.sector ? `, ${sectorString}` : ""}`}
388
+ </span>
389
+ ${this.label ? html$1`<span class="sbb-screen-reader-only">${labelString}</span>` : nothing}
390
+ ${this.wagonClass && this.wagonType !== "closed" ? html$1`<span class="sbb-train-wagon__class">${wagonClassContent}</span>` : nothing}
391
+ ${this.occupancy && this.wagonType !== "closed" ? html$1`<sbb-timetable-occupancy-icon
392
+ class="sbb-train-wagon__occupancy"
393
+ occupancy=${this.occupancy}
394
+ ></sbb-timetable-occupancy-icon>` : nothing}
395
+ ${hasBlockedPassageEntry ? html$1`<span class="sbb-screen-reader-only">
396
+ ${i18nBlockedPassage[blockedPassage][this._language.current]}
397
+ </span>` : nothing}
398
+ </div> `)}
399
+ ${wagonTypeToIconMap[this.wagonType] ? html$1`<sbb-icon
400
+ name=${wagonTypeToIconMap[this.wagonType]}
401
+ class="sbb-train-wagon__main-icon"
402
+ ></sbb-icon>` : nothing}
403
+ <svg class="sbb-train-wagon__shape" viewBox="0 0 84 36" aria-hidden="true">
404
+ <path d=${path}></path>
405
+ <path
406
+ class="sbb-train-wagon__shape-closed"
407
+ d=${this._view === "top" ? "M81 3L3 34" : "M81 4L4 32"}
408
+ ></path>
409
+ <path
410
+ class="sbb-train-wagon__shape-closed"
411
+ d=${this._view === "top" ? "M81 34L3 3" : "M81 32L4 4"}
412
+ ></path>
413
+ </svg>
414
+ ${this.additionalAccessibilityText ? html$1`<span class="sbb-screen-reader-only"
415
+ >, ${this.additionalAccessibilityText}</span
416
+ >` : nothing}
417
+ <span
418
+ class="sbb-train-wagon__information-wrapper"
419
+ ?hidden=${!this.listChildren.length && !this.label}
420
+ >
421
+ ${this.label ? html$1`<span aria-hidden="true" class="sbb-train-wagon__label">${this.label}</span>` : nothing}
422
+ ${this.label && this.listChildren.length ? html$1`<sbb-divider
423
+ orientation=${this.orientation === "vertical" ? "horizontal" : "vertical"}
424
+ aria-hidden="true"
425
+ class="sbb-train-wagon__label-divider"
426
+ ></sbb-divider>` : nothing}
427
+ ${this.renderList({
428
+ class: "sbb-train-wagon__attribute-icon-list",
429
+ ariaLabel: i18nAdditionalWagonInformationHeading[this._language.current]
430
+ })}
431
+ </span>
432
+ </div>
433
+ `;
434
+ }
435
+ };
436
+ })();
437
+ };
438
+ //#endregion
439
+ export { SbbTrainWagonMixin as t };
440
+
441
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaW4td2Fnb24tY29tbW9uLVMzT0pkZ3VHLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90cmFpbi90cmFpbi13YWdvbi1jb21tb24uc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvdHJhaW4vdHJhaW4td2Fnb24tY29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1zYmItdHJhaW4td2Fnb24tdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKFxuICAgIC0tc2JiLWRpc2FibGUtYW5pbWF0aW9uLWR1cmF0aW9uLFxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMngpXG4gICk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWZvbnQtc2l6ZSk7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcblxuICAvLyBVc2UgIWltcG9ydGFudCBoZXJlIHRvIG5vdCBpbnRlcmZlcmUgd2l0aCBGaXJlZm94IGZvY3VzIHJpbmcgZGVmaW5pdGlvblxuICAvLyB3aGljaCBhcHBlYXJzIGluIG5vcm1hbGl6ZSBDU1Mgb2Ygc2V2ZXJhbCBmcmFtZXdvcmtzLlxuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG59XG5cbjpob3N0KFt3YWdvbi10eXBlPSdjbG9zZWQnXSkge1xuICAtLXNiYi10cmFpbi13YWdvbi1jcm9zc2VkLXNoYXBlLWRpc3BsYXk6IGJsb2NrO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi10cmFpbi13YWdvbi1zaGFwZS1jb2xvcjogR3JheVRleHQ7XG4gIH1cbn1cblxuOmhvc3QoOnN0YXRlKHZpZXctc2lkZSlbd2Fnb24tdHlwZT0nd2Fnb24tZW5kLWxlZnQnXSkge1xuICAtLXNiYi10cmFpbi13YWdvbi1wYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNHgpIHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbn1cblxuOmhvc3QoOnN0YXRlKHZpZXctc2lkZSlbd2Fnb24tdHlwZT0nd2Fnb24tZW5kLXJpZ2h0J10pIHtcbiAgLS1zYmItdHJhaW4td2Fnb24tcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KSB2YXIoLS1zYmItc3BhY2luZy1maXhlZC00eCk7XG59XG5cbjpob3N0KDpzdGF0ZSh2aWV3LXNpZGUpW3dhZ29uLXR5cGU9J2xvY29tb3RpdmUnXSkge1xuICAtLXNiYi10cmFpbi13YWdvbi1wYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNHgpO1xufVxuXG46aG9zdCg6c3RhdGUodmlldy10b3ApKSB7XG4gIC0tc2JiLXRyYWluLXdhZ29uLWJvcmRlci1yYWRpdXM6IHZhcigtLXNiYi1ib3JkZXItcmFkaXVzLTR4KTtcbn1cblxuOmhvc3QoW2xhYmVsXSkge1xuICAtLV9zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1tYXgtd2lkdGg6IHZhcigtLXNiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLW1heC13aWR0aCk7XG59XG5cbjpob3N0KDpub3QoW2xhYmVsXSkpIHtcbiAgLS1fc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZXMtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbjpob3N0KC5zYmItYWN0aXZlKSB7XG4gIC0tc2JiLXRyYWluLXdhZ29uLWJvcmRlci13aWR0aDogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0zeCk7XG59XG5cbjpob3N0KDpzdGF0ZShhY3Rpb24pKSB7XG4gIGN1cnNvcjogdmFyKC0tc2JiLWN1cnNvci1wb2ludGVyKTtcbn1cblxuOmhvc3QoOnN0YXRlKGxpbmspKSB7XG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi10cmFpbi13YWdvbi1zaGFwZS1jb2xvcjogTGlua1RleHQ7XG4gIH1cbn1cblxuLnNiYi10cmFpbi13YWdvbi1saW5rIHtcbiAgb3V0bGluZTogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnNiYi10cmFpbi13YWdvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi1mbGV4LWRpcmVjdGlvbi1pbnZlcnRlZCk7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHdpZHRoOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi13aWR0aCk7XG4gIGdhcDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLXZlcnRpY2FsLWdhcCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLWhlaWdodCk7XG4gIH1cblxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tYm9yZGVyLXJhZGl1cyk7XG5cbiAgICA6aG9zdCg6c3RhdGUoYnV0dG9uKTpmb2N1cy12aXNpYmxlKSAmLFxuICAgIC5zYmItdHJhaW4td2Fnb24tbGluazpmb2N1cy12aXNpYmxlICYge1xuICAgICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG4gICAgfVxuICB9XG59XG5cbi5zYmItdHJhaW4td2Fnb25fX2NvbXBhcnRtZW50IHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLWZsZXgtZGlyZWN0aW9uKTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tcGFkZGluZy1pbmxpbmUpO1xuICBtYXNrLWltYWdlOiB2YXIoLS1fc2JiLXRyYWluLXdhZ29uLWNsaXAtc2hhcGUtY29tcGFydG1lbnQpO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIHZhcigtLXNiYi10cmFpbi13YWdvbi10cmFuc2l0aW9uLWR1cmF0aW9uKVxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKTtcblxuICA6aG9zdCg6c3RhdGUoYWN0aW9uKTpob3ZlcikgJiB7XG4gICAgQGluY2x1ZGUgc2JiLmhvdmVyLW1xKCRob3ZlcjogdHJ1ZSkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWJhY2tncm91bmQtY29sb3ItaG92ZXIpO1xuICAgIH1cbiAgfVxuXG4gIDpob3N0KDpzdGF0ZShhY3Rpb24pOmlzKDphY3RpdmUsIDpzdGF0ZShhY3RpdmUpKSkgJiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWJhY2tncm91bmQtY29sb3ItYWN0aXZlKTtcbiAgfVxuXG4gICY6aGFzKC5zYmItdHJhaW4td2Fnb25fX29jY3VwYW5jeSk6aGFzKC5zYmItdHJhaW4td2Fnb25fX2NsYXNzKSB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgOmhvc3QoOnN0YXRlKG9yaWVudGF0aW9uLXZlcnRpY2FsKSkgJiB7XG4gICAgcGFkZGluZy1pbmxpbmU6IDA7XG4gICAgcGFkZGluZy1ibG9jazogdmFyKC0tc2JiLXRyYWluLXdhZ29uLXBhZGRpbmctaW5saW5lKTtcbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19jb21wYXJ0bWVudCxcbi5zYmItdHJhaW4td2Fnb25fX21haW4taWNvbiB7XG4gIHdpZHRoOiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi13aWR0aCk7XG4gIGhlaWdodDogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0KTtcbn1cblxuLnNiYi10cmFpbi13YWdvbl9fc2hhcGUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICB3aWR0aDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1kaW1lbnNpb24tbG9uZyk7XG4gIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1kaW1lbnNpb24tc2hvcnQpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG5cbiAgLy8gTmVlZCBpbiBvcmRlciB0byBjb3JyZWN0bHkgcmVuZGVyIGluIFNhZmFyaVxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuXG4gIDpob3N0KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpICYge1xuICAgIHJvdGF0ZTogLTkwZGVnO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xuICB9XG59XG5cbi5zYmItdHJhaW4td2Fnb25fX3NoYXBlIHtcbiAgLy8gV2UgaGF2ZSB0byBjbGlwIHRoZSBzaGFwZSwgYmVjYXVzZSB0aGUgcGF0aCBjYW4gYmUgbGFyZ2VyIHRoYW4gdGhlIHdhZ29uIHNoYXBlIGFuZCB3b3VsZCBvdmVyZmxvdyBvdGhlcndpc2UuXG4gIG1hc2staW1hZ2U6IHZhcigtLV9zYmItdHJhaW4td2Fnb24tY2xpcC1zaGFwZSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBmaWxsOiBub25lO1xuICBzdHJva2U6IHZhcigtLXNiYi10cmFpbi13YWdvbi1zaGFwZS1jb2xvcik7XG5cbiAgLy8gV2UgaGF2ZSB0byBtdWx0aXBseSBieSBmYWN0b3IgMiBiZWNhdXNlIHRoZSBib3JkZXIgZ3Jvd3MgZnJvbSB0aGUgYm91bmRpbmcgYm94IGxpbmVzXG4gIHN0cm9rZS13aWR0aDogY2FsYyh2YXIoLS1zYmItdHJhaW4td2Fnb24tYm9yZGVyLXdpZHRoKSAqIDIpO1xufVxuXG4uc2JiLXRyYWluLXdhZ29uX19tYWluLWljb24ge1xuICAtLXNiYi1pY29uLXN2Zy1oZWlnaHQ6IHZhcigtLXNiYi10cmFpbi13YWdvbi1tYWluLWljb24taGVpZ2h0KTtcblxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNiYi10cmFpbi13YWdvbl9fc2hhcGUtY2xvc2VkIHtcbiAgZGlzcGxheTogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNyb3NzZWQtc2hhcGUtZGlzcGxheSwgbm9uZSk7XG4gIHN0cm9rZS13aWR0aDogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCk7XG59XG5cbi5zYmItdHJhaW4td2Fnb25fX29jY3VwYW5jeSxcbi5zYmItdHJhaW4td2Fnb25fX2NsYXNzIHtcbiAgaGVpZ2h0OiB2YXIoLS1fc2JiLXRyYWluLWZvcm1hdGlvbi13YWdvbi1oZWlnaHQpO1xuICBmbGV4LWRpcmVjdGlvbjogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24tZmxleC1kaXJlY3Rpb24pO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgd2lkdGg6IHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLXdpZHRoKTtcbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19vY2N1cGFuY3kge1xuICAtLXNiYi1pY29uLXN2Zy1oZWlnaHQ6IHZhcigtLXNiYi10cmFpbi13YWdvbi1vY2N1cGFuY3ktaGVpZ2h0KTtcblxuICBncmlkLWFyZWE6IG9jY3VwYW5jeTtcbn1cblxuLnNiYi10cmFpbi13YWdvbl9fY2xhc3Mge1xuICBnYXA6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxKX07XG4gIG9yZGVyOiAxO1xufVxuXG4uc2JiLXRyYWluLXdhZ29uX19jbGFzcy1lbnRyeSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWRpbWVuc2lvbik7XG4gIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWRpbWVuc2lvbik7XG4gIGJvcmRlcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci1yYWRpdXMpO1xuICBmb250LXdlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZvbnQtd2VpZ2h0KTtcbiAgY29sb3I6IHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1jb2xvcik7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAvLyBOZWVkZWQgdG8gZml4IFNhZmFyaSB2ZXJ0aWNhbCBjZW50ZXJpbmdcbiAgbGluZS1oZWlnaHQ6IDE7XG5cbiAgJi5maXJzdCB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LWNvbG9yKTtcbiAgICAgIGJvcmRlci1lbmQtZW5kLXJhZGl1czogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LWJvcmRlci1yYWRpdXMpO1xuXG4gICAgICA6aG9zdCg6bm90KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpKSAmIHtcbiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zYmItdHJhaW4td2Fnb24tY2xhc3MtZmlyc3QtdGhpY2tuZXNzKTtcbiAgICAgICAgd2lkdGg6IHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1kaW1lbnNpb24pO1xuICAgICAgICBpbnNldDogY2FsYyhcbiAgICAgICAgICAgIC0wLjUgKlxuICAgICAgICAgICAgICAodmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24td2Fnb24taGVpZ2h0KSAtIHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1kaW1lbnNpb24pKSArXG4gICAgICAgICAgICAgIHZhcigtLXNiYi10cmFpbi13YWdvbi1ib3JkZXItd2lkdGgpIC0gdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci13aWR0aClcbiAgICAgICAgICApXG4gICAgICAgICAgMCBhdXRvIGNhbGMoLTEgKiB2YXIoLS1zYmItdHJhaW4td2Fnb24tY2xhc3MtYm9yZGVyLXdpZHRoKSk7XG4gICAgICAgIGJvcmRlci1lbmQtc3RhcnQtcmFkaXVzOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tY2xhc3MtZmlyc3QtYm9yZGVyLXJhZGl1cyk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpICYge1xuICAgICAgICB3aWR0aDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LXRoaWNrbmVzcyk7XG4gICAgICAgIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWRpbWVuc2lvbik7XG4gICAgICAgIGluc2V0OiBjYWxjKC0xICogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci13aWR0aCkpIGF1dG8gMFxuICAgICAgICAgIGNhbGMoXG4gICAgICAgICAgICAtMC41ICpcbiAgICAgICAgICAgICAgKHZhcigtLV9zYmItdHJhaW4tZm9ybWF0aW9uLXdhZ29uLXdpZHRoKSAtIHZhcigtLXNiYi10cmFpbi13YWdvbi1jbGFzcy1kaW1lbnNpb24pKSArXG4gICAgICAgICAgICAgIHZhcigtLXNiYi10cmFpbi13YWdvbi1ib3JkZXItd2lkdGgpIC0gdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWJvcmRlci13aWR0aClcbiAgICAgICAgICApO1xuICAgICAgICBib3JkZXItc3RhcnQtZW5kLXJhZGl1czogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWNsYXNzLWZpcnN0LWJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19pbmZvcm1hdGlvbi13cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICBmbGV4LWRpcmVjdGlvbjogdmFyKC0tX3NiYi10cmFpbi1mb3JtYXRpb24tZmxleC1kaXJlY3Rpb24pO1xuICBnYXA6IHZhcigtLXNiYi10cmFpbi13YWdvbi1pbmZvcm1hdGlvbi1nYXApO1xuXG4gIDpob3N0KDpzdGF0ZShvcmllbnRhdGlvbi12ZXJ0aWNhbCkpICYge1xuICAgIG1pbi13aWR0aDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWluZm9ybWF0aW9uLW1pbi13aWR0aCk7XG4gIH1cblxuICAmW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuOmlzKC5zYmItdHJhaW4td2Fnb25fX2xhYmVsLCAuc2JiLXRyYWluLXdhZ29uX19sYWJlbC1kaXZpZGVyKSB7XG4gIG1hcmdpbi1ibG9jay1zdGFydDogY2FsYyhcbiAgICAwLjUgKiAoMWVtICogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCkgLSB2YXIoLS1zYmItdHJhaW4td2Fnb24tZm9udC1zaXplKSlcbiAgKTtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDA7XG4gIH1cbn1cblxuLnNiYi10cmFpbi13YWdvbl9fbGFiZWwge1xuICBsaW5lLWhlaWdodDogMTtcblxuICAvLyBJbiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiwgdGhlIGxhYmVsIGlzIGhvcml6b250YWxseSBjZW50ZXJlZCBpbiBhIGZpeGVkIHdpZHRoIGJveCBvZiAzMnB4IGJ5IGRlc2lnbi5cbiAgLy8gQXMgdGhlIGJveCBjYW4gZ3JvdyB0byB0aGUgc2lkZSBpZiB0aGVyZSBhcmUgbWFueSBhdHRyaWJ1dGUgaWNvbnMsIHdlIGhhdmUgdG8gcmUtYXBwbHkgdGhpcyB3aWR0aCBhcyBtYXgtd2lkdGggaGVyZS5cbiAgOmhvc3QoOnN0YXRlKG9yaWVudGF0aW9uLXZlcnRpY2FsKSkgJiB7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1zYmItdHJhaW4td2Fnb24taW5mb3JtYXRpb24tbWluLXdpZHRoKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cbn1cblxuLnNiYi10cmFpbi13YWdvbl9fbGFiZWwtZGl2aWRlciB7XG4gIGhlaWdodDogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWZvbnQtc2l6ZSk7XG5cbiAgOmhvc3QoOnN0YXRlKG9yaWVudGF0aW9uLXZlcnRpY2FsKSkgJiB7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHdpZHRoOiB2YXIoLS1zYmItdHJhaW4td2Fnb24tZm9udC1zaXplKTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiBjYWxjKFxuICAgICAgMC41ICogKHZhcigtLXNiYi10cmFpbi13YWdvbi1pbmZvcm1hdGlvbi1taW4td2lkdGgpIC0gdmFyKC0tc2JiLXRyYWluLXdhZ29uLWZvbnQtc2l6ZSkpXG4gICAgKTtcbiAgfVxufVxuXG4uc2JiLXRyYWluLXdhZ29uX19hdHRyaWJ1dGUtaWNvbi1saXN0IHtcbiAgQGluY2x1ZGUgc2JiLmxpc3QtcmVzZXQ7XG5cbiAgLS1zYmItaWNvbi1zdmctaGVpZ2h0OiB2YXIoLS1zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlLWljb24taGVpZ2h0KTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHZhcigtLV9zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1qdXN0aWZ5LWNvbnRlbnQsIHN0YXJ0KTtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IHZhcigtLXNiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGUtaWNvbi1nYXApO1xuICBjb2xvcjogdmFyKC0tc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZS1pY29uLWNvbG9yKTtcbiAgcGFkZGluZy1ibG9jay1zdGFydDogY2FsYyhcbiAgICAwLjUgKiAoMWVtICogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCkgLSB2YXIoLS1zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlLWljb24taGVpZ2h0KSlcbiAgKTtcbiAgbWF4LXdpZHRoOiB2YXIoLS1fc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZXMtbWF4LXdpZHRoKTtcblxuICA6aG9zdCg6c3RhdGUob3JpZW50YXRpb24tdmVydGljYWwpKSAmIHtcbiAgICAvLyBXZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBpY29ucyBzdGF5IGFzIGxvbmcgYXMgcG9zc2libGUgdG8gdGhlIHNpZGUgb2YgdGhlIHNoYXBlIGFuZCBvbmx5IHRoZW4gdXNlIGEgc2Vjb25kIGNvbHVtbi5cbiAgICAvLyBIb3dldmVyLCB0aGUgb3JkZXIgb2YgdGhlIGljb25zIHNob3VsZCBiZSByb3cgd2lzZS4gVG8gbWl0aWdhdGUgdGhpcyBwcm9ibGVtLCB3ZSBwcm9ncmFtbWF0aWNhbGx5IGdldCB0aGUgYW1vdW50IG9mXG4gICAgLy8gc2xvdHRlZCBpY29ucyBhbmQgY2FuIHRoZXJlZm9yZSBjYWxjdWxhdGUsIGhvdyBtYW55IGNvbHVtbnMgYXBwcm94aW1hdGVseSBhcmUgbmVlZGVkLlxuICAgIC8vIFRvIG1vdmUgdGhlIGljb25zIGFnYWluc3QgdGhlIHNoYXBlLCB3ZSBjb250cm9sIHRoZSBtYXgtd2lkdGguXG4gICAgLy8gVGhlIG1heC1oZWlnaHQgaXMgZ2l2ZW4gYnkgdGhlIGZhY3QsIHRoYXQgMyByb3dzIGZpdCBpbnRvIHRoZSBkZXNpZ24uIEZvciB0aGUgY2FsY3VsYXRpb24sXG4gICAgLy8gYWxzbyB0d28gdGltZXMgdGhlIGdhcCBoYXMgdG8gYmUgaW5jbHVkZWQuXG4gICAgbWF4LXdpZHRoOiBjYWxjKFxuICAgICAgdmFyKC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tY29sdW1ucykgKiB2YXIoLS1zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1tZWFuLXdpZHRoKVxuICAgICk7XG4gICAgbWF4LWhlaWdodDogY2FsYyhcbiAgICAgIHZhcigtLV9zYmItdHJhaW4td2Fnb24tYXR0cmlidXRlcy1pY29uLXJvd3MsIDMpICpcbiAgICAgICAgdmFyKC0tc2JiLXRyYWluLXdhZ29uLWF0dHJpYnV0ZS1pY29uLWhlaWdodCkgK1xuICAgICAgICAodmFyKC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tcm93cywgMykgLSAxKSAqXG4gICAgICAgIHZhcigtLXNiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGUtaWNvbi1nYXApXG4gICAgKTtcbiAgICBwYWRkaW5nLWJsb2NrLXN0YXJ0OiAwO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi8vIFVzaW5nIC4uLiBsaSBzZWxlY3RvciwgYmVjYXVzZSB0aGUgbGkgZ2VuZXJhdGlvblxuLy8gaXMgaGFuZGxlZCBpbiB0aGUgY29tcG9uZW50IGJhc2UgY2xhc3MuXG4uc2JiLXRyYWluLXdhZ29uX19hdHRyaWJ1dGUtaWNvbi1saXN0ID4gOmlzKGxpLCBzcGFuKSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuXG4uc2JiLXNjcmVlbi1yZWFkZXItb25seSB7XG4gIEBpbmNsdWRlIHNiYi5zY3JlZW4tcmVhZGVyLW9ubHk7XG59XG4iLCJpbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBpc1NlcnZlciwgbm90aGluZywgdHlwZSBUZW1wbGF0ZVJlc3VsdCwgdW5zYWZlQ1NTIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IHdoZW4gfSBmcm9tICdsaXQvZGlyZWN0aXZlcy93aGVuLmpzJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdsaXQvc3RhdGljLWh0bWwuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi9jb3JlL21peGlucy9jb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQge1xuICBib3hTaXppbmdTdHlsZXMsXG4gIGZvcmNlVHlwZSxcbiAgaGFuZGxlRGlzdGluY3RDaGFuZ2UsXG4gIGkxOG5BZGRpdGlvbmFsV2Fnb25JbmZvcm1hdGlvbkhlYWRpbmcsXG4gIGkxOG5BbmQsXG4gIGkxOG5CbG9ja2VkUGFzc2FnZSxcbiAgaTE4bkNsYXNzLFxuICBpMThuQ2xvc2VkQ29tcGFydG1lbnRMYWJlbCxcbiAgaTE4bkNvdWNoZXR0ZVdhZ29uTGFiZWwsXG4gIGkxOG5Mb2NvbW90aXZlTGFiZWwsXG4gIGkxOG5SZXN0YXVyYW50V2Fnb25MYWJlbCxcbiAgaTE4blNlY3RvcixcbiAgaTE4blNsZWVwaW5nV2Fnb25MYWJlbCxcbiAgaTE4bldhZ29uTGFiZWwsXG4gIGkxOG5XYWdvbkxhYmVsTnVtYmVyLFxuICBvbWl0RW1wdHlDb252ZXJ0ZXIsXG4gIHR5cGUgU2JiRWxlbWVudCxcbiAgdHlwZSBTYmJFbGVtZW50VHlwZSxcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxuICBTYmJOYW1lZFNsb3RMaXN0TWl4aW4sXG4gIHR5cGUgU2JiT2NjdXBhbmN5LFxuICBTYmJQcm9wZXJ0eVdhdGNoZXJDb250cm9sbGVyLFxufSBmcm9tICcuLi9jb3JlLnRzJztcbmltcG9ydCB7IFNiYkRpdmlkZXJFbGVtZW50IH0gZnJvbSAnLi4vZGl2aWRlci5wdXJlLnRzJztcbmltcG9ydCB7IFNiYkljb25FbGVtZW50IH0gZnJvbSAnLi4vaWNvbi5wdXJlLnRzJztcbmltcG9ydCB7IFNiYlRpbWV0YWJsZU9jY3VwYW5jeUljb25FbGVtZW50IH0gZnJvbSAnLi4vdGltZXRhYmxlLW9jY3VwYW5jeS1pY29uLnB1cmUudHMnO1xuXG5pbXBvcnQgdHlwZSB7IFNiYlRyYWluRm9ybWF0aW9uRWxlbWVudCB9IGZyb20gJy4vdHJhaW4tZm9ybWF0aW9uL3RyYWluLWZvcm1hdGlvbi5jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgU2JiVHJhaW5Gb3JtYXRpb25PcmllbnRhdGlvbk1peGluIH0gZnJvbSAnLi90cmFpbi1mb3JtYXRpb24tb3JpZW50YXRpb24tbWl4aW4udHMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vdHJhaW4td2Fnb24tY29tbW9uLnNjc3M/aW5saW5lJztcblxuY29uc3Qgd2Fnb25UeXBlVG9JY29uTWFwOiBQYXJ0aWFsPFJlY29yZDxTYmJUcmFpbldhZ29uTWl4aW5UeXBlWyd3YWdvblR5cGUnXSwgc3RyaW5nPj4gPSB7XG4gIGNvdWNoZXR0ZTogJ3NhLWNjJyxcbiAgc2xlZXBpbmc6ICdzYS13bCcsXG4gIHJlc3RhdXJhbnQ6ICdzYS13cicsXG59O1xuXG5jb25zdCBzaGFwZVBhdGhzOiBSZWNvcmQ8XG4gIEV4Y2x1ZGU8U2JiVHJhaW5XYWdvbk1peGluVHlwZVsnd2Fnb25UeXBlJ10sICdjb3VjaGV0dGUnIHwgJ3NsZWVwaW5nJyB8ICdyZXN0YXVyYW50JyB8ICdjbG9zZWQnPixcbiAgeyBzaWRlOiBzdHJpbmc7IHRvcDogc3RyaW5nIH1cbj4gPSB7XG4gIHdhZ29uOiB7XG4gICAgc2lkZTogJ00xMiAwSDcyQTEyIDEyIDAgMDE4NCAxMlYyNEExMiAxMiAwIDAxNzIgMzZIMTJBMTIgMTIgMCAwMTAgMjRWMTJBMTIgMTIgMCAwMTEyIDBaJyxcbiAgICB0b3A6ICdNOCAwQTggOCAwIDAwMCA4VjI4YTggOCAwIDAwOCA4SDc2YTggOCAwIDAwOC04VjhBOCA4IDAgMDA3NiAwSDhaJyxcbiAgfSxcbiAgbG9jb21vdGl2ZToge1xuICAgIHNpZGU6ICdNNy43IDguNkMxMC41IDMuNiAxNiAwIDIyIDBINjJjNiAwIDExLjUgMy42IDE0LjMgOC42bDUuMSA5Qzg1LjkgMjUuNiA4MCAzNiA3MSAzNkgxM0M0IDM2LTEuOSAyNS42IDIuNiAxNy42bDUuMS05WicsXG4gICAgdG9wOiAnTTY2IDBIMThDOCAwIDAgOCAwIDE4UzggMzYgMTggMzZINjZjMTAgMCAxOC04IDE4LTE4Uzc2IDAgNjYgMFonLFxuICB9LFxuICAnd2Fnb24tZW5kLWxlZnQnOiB7XG4gICAgc2lkZTogJ003LjcgOC42QTE2IDE2IDAgMDEyMiAwSDcyYzYgMCAxMiA2IDEyIDEyVjI0YzAgNi02IDEyLTEyIDEySDEzQzMuOCAzNi0yIDI2LjEgMi42IDE4LjFaJyxcbiAgICB0b3A6ICdNNzYgMEgxOEM4LjI1IDAgLjUgOC4yNS41IDE4UzggMzYgMTggMzZINzZjNCAwIDgtNCA4LThWOGMwLTQtNC04LTgtOFonLFxuICB9LFxuICAnd2Fnb24tZW5kLXJpZ2h0Jzoge1xuICAgIHNpZGU6ICdNNzYuMyA4LjZBMTYgMTYgMCAwMDYyIDBIMTJDNiAwIDAgNiAwIDEzdjExYzAgNiA2IDEyIDEyIDEyaDU4LjRjOC42IDAgMTUtOS45IDEwLjQtMTcuOXonLFxuICAgIHRvcDogJ002NiAwSDhDNCAwIDAgNCAwIDhWMjhjMCA0IDQgOCA4IDhINjZjOS43NSAwIDE3LjUtOC4yNSAxNy41LTE4Uzc2IDAgNjYgMFonLFxuICB9LFxufTtcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgU2JiVHJhaW5XYWdvbk1peGluVHlwZSBleHRlbmRzIFNiYkVsZW1lbnQge1xuICBwdWJsaWMgYWNjZXNzb3Igd2Fnb25UeXBlOlxuICAgIHwgJ3dhZ29uJ1xuICAgIHwgJ3dhZ29uLWVuZC1sZWZ0J1xuICAgIHwgJ3dhZ29uLWVuZC1yaWdodCdcbiAgICB8ICdjb3VjaGV0dGUnXG4gICAgfCAnc2xlZXBpbmcnXG4gICAgfCAncmVzdGF1cmFudCdcbiAgICB8ICdsb2NvbW90aXZlJ1xuICAgIHwgJ2Nsb3NlZCc7XG4gIHB1YmxpYyBhY2Nlc3NvciBvY2N1cGFuY3k6IFNiYk9jY3VwYW5jeSB8IG51bGw7XG4gIHB1YmxpYyBhY2Nlc3NvciBzZWN0b3I6IHN0cmluZztcbiAgcHVibGljIGFjY2Vzc29yIGJsb2NrZWRQYXNzYWdlOiAncHJldmlvdXMnIHwgJ25leHQnIHwgJ2JvdGgnIHwgJ25vbmUnO1xuICBwdWJsaWMgYWNjZXNzb3Igd2Fnb25DbGFzczogJzEnIHwgJzInIHwgJzEtMicgfCAnMi0xJyB8IG51bGw7XG4gIHB1YmxpYyBhY2Nlc3NvciBsYWJlbDogc3RyaW5nO1xuICBwdWJsaWMgYWNjZXNzb3IgYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlUZXh0OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG5leHBvcnQgY29uc3QgU2JiVHJhaW5XYWdvbk1peGluID0gPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cnVjdG9yPFNiYkVsZW1lbnQ+PihcbiAgc3VwZXJDbGFzczogVCxcbik6IEFic3RyYWN0Q29uc3RydWN0b3I8U2JiVHJhaW5XYWdvbk1peGluVHlwZT4gJiBUID0+IHtcbiAgYWJzdHJhY3QgY2xhc3MgU2JiVHJhaW5XYWdvbk1peGluRWxlbWVudFxuICAgIGV4dGVuZHMgU2JiVHJhaW5Gb3JtYXRpb25PcmllbnRhdGlvbk1peGluKFNiYk5hbWVkU2xvdExpc3RNaXhpbjxTYmJJY29uRWxlbWVudCwgVD4oc3VwZXJDbGFzcykpXG4gICAgaW1wbGVtZW50cyBQYXJ0aWFsPFNiYlRyYWluV2Fnb25NaXhpblR5cGU+XG4gIHtcbiAgICBwdWJsaWMgc3RhdGljIGVsZW1lbnREZXBlbmRlbmNpZXM6IFNiYkVsZW1lbnRUeXBlW10gPSBbXG4gICAgICBTYmJJY29uRWxlbWVudCxcbiAgICAgIFNiYlRpbWV0YWJsZU9jY3VwYW5jeUljb25FbGVtZW50LFxuICAgICAgU2JiRGl2aWRlckVsZW1lbnQsXG4gICAgXTtcbiAgICBwdWJsaWMgc3RhdGljIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCB1bnNhZmVDU1Moc3R5bGUpXTtcblxuICAgIC8qKlxuICAgICAqIFdhZ29uIHR5cGUuXG4gICAgICogRm9yIGB3YWdvbi1lbmQtbGVmdGAgYW5kIGB3YWdvbi1lbmQtcmlnaHRgLCBwbGVhc2Ugc2V0IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mIHRoZSBgYmxvY2tlZFBhc3NhZ2VgIHByb3BlcnR5LlxuICAgICAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3dhZ29uLXR5cGUnLCByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciB3YWdvblR5cGU6XG4gICAgICB8ICd3YWdvbidcbiAgICAgIHwgJ3dhZ29uLWVuZC1sZWZ0J1xuICAgICAgfCAnd2Fnb24tZW5kLXJpZ2h0J1xuICAgICAgfCAnY291Y2hldHRlJ1xuICAgICAgfCAnc2xlZXBpbmcnXG4gICAgICB8ICdyZXN0YXVyYW50J1xuICAgICAgfCAnbG9jb21vdGl2ZSdcbiAgICAgIHwgJ2Nsb3NlZCcgPSAnd2Fnb24nO1xuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IGxpc3RDaGlsZExvY2FsTmFtZXMgPSBbJ3NiYi1pY29uJ107XG5cbiAgICAvKiogT2NjdXBhbmN5IG9mIGEgd2Fnb24uICovXG4gICAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIG9jY3VwYW5jeTogU2JiT2NjdXBhbmN5IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogU2VjdG9yIGluIHdoaWNoIHRoZSB3YWdvbiBzdG9wcy4gKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAaGFuZGxlRGlzdGluY3RDaGFuZ2UoKGU6IFNiYlRyYWluV2Fnb25NaXhpbkVsZW1lbnQpID0+IGUuX3NlY3RvckNoYW5nZWQoKSlcbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBzZWN0b3I6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEFjY2Vzc2liaWxpdHkgdGV4dCBmb3IgYmxvY2tlZCBwYXNzYWdlcyBvZiB0aGUgd2Fnb24uICovXG4gICAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYmxvY2tlZC1wYXNzYWdlJyB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBibG9ja2VkUGFzc2FnZTogJ3ByZXZpb3VzJyB8ICduZXh0JyB8ICdib3RoJyB8ICdub25lJyA9ICdub25lJztcblxuICAgIC8qKiBDbGFzcyBsYWJlbCAqL1xuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3dhZ29uLWNsYXNzJyB9KSBwdWJsaWMgYWNjZXNzb3Igd2Fnb25DbGFzczpcbiAgICAgIHwgJzEnXG4gICAgICB8ICcyJ1xuICAgICAgfCAnMS0yJ1xuICAgICAgfCAnMi0xJ1xuICAgICAgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBXYWdvbiBudW1iZXIgKi9cbiAgICBAZm9yY2VUeXBlKClcbiAgICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBsYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogQWRkaXRpb25hbCBhY2Nlc3NpYmlsaXR5IHRleHQgd2hpY2ggd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kLiAqL1xuICAgIEBmb3JjZVR5cGUoKVxuICAgIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FkZGl0aW9uYWwtYWNjZXNzaWJpbGl0eS10ZXh0JyB9KVxuICAgIHB1YmxpYyBhY2Nlc3NvciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eVRleHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfdmlldzogU2JiVHJhaW5Gb3JtYXRpb25FbGVtZW50Wyd2aWV3J10gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgICBwcml2YXRlIF9jbGlwU3R5bGVTaGVldDogQ1NTU3R5bGVTaGVldCB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIHRoaXMuYWRkQ29udHJvbGxlcihcbiAgICAgICAgbmV3IFNiYlByb3BlcnR5V2F0Y2hlckNvbnRyb2xsZXIodGhpcywgKCkgPT4gdGhpcy5jbG9zZXN0KCdzYmItdHJhaW4tZm9ybWF0aW9uJyksIHtcbiAgICAgICAgICB2aWV3OiAodCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZXcpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShgdmlldy0ke3RoaXMuX3ZpZXd9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl92aWV3ID0gdC52aWV3O1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZpZXcpIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZChgdmlldy0ke3RoaXMuX3ZpZXd9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjcmVhdGVSZW5kZXJSb290KCk6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgICBjb25zdCByZW5kZXJSb290ID0gc3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO1xuXG4gICAgICBpZiAoIWlzU2VydmVyKSB7XG4gICAgICAgIHRoaXMuX2NsaXBTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcbiAgICAgICAgKHJlbmRlclJvb3QgYXMgU2hhZG93Um9vdCkuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2godGhpcy5fY2xpcFN0eWxlU2hlZXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVuZGVyUm9vdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWN0b3JDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc2VjdG9yY2hhbmdlJywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd2Fnb25UeXBlTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgIHN3aXRjaCAodGhpcy53YWdvblR5cGUpIHtcbiAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICByZXR1cm4gaTE4bkNsb3NlZENvbXBhcnRtZW50TGFiZWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICAgIGNhc2UgJ2xvY29tb3RpdmUnOlxuICAgICAgICAgIHJldHVybiBpMThuTG9jb21vdGl2ZUxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBjYXNlICdjb3VjaGV0dGUnOlxuICAgICAgICAgIHJldHVybiBpMThuQ291Y2hldHRlV2Fnb25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XTtcbiAgICAgICAgY2FzZSAnc2xlZXBpbmcnOlxuICAgICAgICAgIHJldHVybiBpMThuU2xlZXBpbmdXYWdvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBjYXNlICdyZXN0YXVyYW50JzpcbiAgICAgICAgICByZXR1cm4gaTE4blJlc3RhdXJhbnRXYWdvbkxhYmVsW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBpMThuV2Fnb25MYWJlbFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF93YWdvblNoYXBlKCk6IHN0cmluZyB7XG4gICAgICBjb25zdCB2aWV3ID0gdGhpcy5fdmlldyA/PyAnc2lkZSc7XG4gICAgICBpZiAoWyd3YWdvbicsICdjb3VjaGV0dGUnLCAnc2xlZXBpbmcnLCAncmVzdGF1cmFudCcsICdjbG9zZWQnXS5pbmNsdWRlcyh0aGlzLndhZ29uVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHNoYXBlUGF0aHNbJ3dhZ29uJ11bdmlld107XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzaGFwZVBhdGhzW3RoaXMud2Fnb25UeXBlIGFzIGtleW9mIHR5cGVvZiBzaGFwZVBhdGhzXVt2aWV3XSA/PyBzaGFwZVBhdGhzWyd3YWdvbiddW3ZpZXddXG4gICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsYXNzTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgIHN3aXRjaCAodGhpcy53YWdvbkNsYXNzKSB7XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgIHJldHVybiBpMThuQ2xhc3NbJ2ZpcnN0J11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF07XG4gICAgICAgIGNhc2UgJzInOlxuICAgICAgICAgIHJldHVybiBpMThuQ2xhc3NbJ3NlY29uZCddW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdO1xuICAgICAgICBjYXNlICcxLTInOlxuICAgICAgICAgIHJldHVybiBgJHtpMThuQ2xhc3NbJ2ZpcnN0J11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7aTE4bkFuZFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtpMThuQ2xhc3NbJ3NlY29uZCddW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfWA7XG4gICAgICAgIGNhc2UgJzItMSc6XG4gICAgICAgICAgcmV0dXJuIGAke2kxOG5DbGFzc1snc2Vjb25kJ11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7aTE4bkFuZFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHtpMThuQ2xhc3NbJ2ZpcnN0J11bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlclRlbXBsYXRlKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAgIGNvbnN0IGJsb2NrZWRQYXNzYWdlID1cbiAgICAgICAgdGhpcy53YWdvblR5cGUgPT09ICd3YWdvbi1lbmQtbGVmdCcgJiYgdGhpcy5ibG9ja2VkUGFzc2FnZSA9PT0gJ25vbmUnXG4gICAgICAgICAgPyAncHJldmlvdXMnXG4gICAgICAgICAgOiB0aGlzLndhZ29uVHlwZSA9PT0gJ3dhZ29uLWVuZC1yaWdodCcgJiYgdGhpcy5ibG9ja2VkUGFzc2FnZSA9PT0gJ25vbmUnXG4gICAgICAgICAgICA/ICduZXh0J1xuICAgICAgICAgICAgOiAodGhpcy5ibG9ja2VkUGFzc2FnZSA/PyAnbm9uZScpO1xuXG4gICAgICBjb25zdCBoYXNCbG9ja2VkUGFzc2FnZUVudHJ5ID0gYmxvY2tlZFBhc3NhZ2UgIT09ICdub25lJztcblxuICAgICAgLy8gRnJvbSBhY2Nlc3NpYmlsaXR5IHBlcnNwZWN0aXZlIHdlIGNhbm5vdCBjcmVhdGUgYSBsaXN0IHdpdGggb25seSBvbmUgZW50cnkuXG4gICAgICAvLyBXZSBuZWVkIHRvIGtub3cgd2hhdCB3aWxsIGJlIHByZXNlbnRlZCBhbmQgc3dpdGNoIHNlbWFudGljcyBiYXNlZCBvbiBjb3VudC5cbiAgICAgIGNvbnN0IGxpc3RFbnRyaWVzQ291bnQgPVxuICAgICAgICArISF0aGlzLnNlY3RvciArXG4gICAgICAgICshIXRoaXMubGFiZWwgK1xuICAgICAgICArKCEhdGhpcy53YWdvbkNsYXNzICYmIHRoaXMud2Fnb25UeXBlICE9PSAnY2xvc2VkJykgK1xuICAgICAgICArKCEhdGhpcy5vY2N1cGFuY3kgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnKSArXG4gICAgICAgICtoYXNCbG9ja2VkUGFzc2FnZUVudHJ5O1xuXG4gICAgICBjb25zdCBzZWN0b3JTdHJpbmcgPSBgJHtpMThuU2VjdG9yW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSwgJHt0aGlzLnNlY3Rvcn1gO1xuICAgICAgY29uc3QgbGFiZWxTdHJpbmcgPSBgJHtpMThuV2Fnb25MYWJlbE51bWJlclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0sICR7dGhpcy5sYWJlbH1gO1xuXG4gICAgICBjb25zdCB3YWdvbkNsYXNzQ29udGVudCA9IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgJHt0aGlzLl9jbGFzc0xhYmVsKCl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgJHt0aGlzLndhZ29uQ2xhc3NcbiAgICAgICAgICA/LnNwbGl0KCctJylcbiAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgKHdhZ29uQ2xhc3MpID0+XG4gICAgICAgICAgICAgIGh0bWxgPHNwYW5cbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19jbGFzcy1lbnRyeSAke3dhZ29uQ2xhc3MgPT09ICcxJyA/ICdmaXJzdCcgOiAnJ31cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJHt3YWdvbkNsYXNzfVxuICAgICAgICAgICAgICA8L3NwYW4+YCxcbiAgICAgICAgICApfSBgO1xuXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5fd2Fnb25TaGFwZSgpO1xuXG4gICAgICBjb25zdCBhdmFpbGFibGVJY29uUm93cyA9IHRoaXMubGFiZWwgPyAzIDogNDtcbiAgICAgIHRoaXMuX2NsaXBTdHlsZVNoZWV0Py5yZXBsYWNlU3luYyhgOmhvc3Qge1xuICAgICAgICAgICAgLS1fc2JiLXRyYWluLXdhZ29uLWNsaXAtc2hhcGU6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgODQgMzYnIGZpbGw9J2JsYWNrJyUzRSUzQ3BhdGggZD0nJHtwYXRofScgLyUzRSUzQy9zdmclM0VcIik7XG4gICAgICAgICAgICAtLV9zYmItdHJhaW4td2Fnb24tY2xpcC1zaGFwZS1jb21wYXJ0bWVudDogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAke3RoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyAzNiA6IDg0fSAke3RoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyA4NCA6IDM2fScgZmlsbD0nYmxhY2snJTNFJTNDcGF0aCBkPScke3BhdGh9JyR7dGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IGAgdHJhbnNmb3JtPSdyb3RhdGUoLTkwLCAwLCAwKSBzY2FsZSgtMSwgMSknYCA6ICcnfSAvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgICAgICAgICAgIC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tY29sdW1uczogJHtNYXRoLmNlaWwodGhpcy5saXN0Q2hpbGRyZW4ubGVuZ3RoIC8gYXZhaWxhYmxlSWNvblJvd3MpfTtcbiAgICAgICAgICAgIC0tX3NiYi10cmFpbi13YWdvbi1hdHRyaWJ1dGVzLWljb24tcm93czogJHthdmFpbGFibGVJY29uUm93c307XG4gICAgICAgICAgfWApO1xuXG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi10cmFpbi13YWdvblwiPlxuICAgICAgICAgICR7d2hlbihcbiAgICAgICAgICAgIGxpc3RFbnRyaWVzQ291bnQgPiAxLFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgaHRtbGA8dWwgYXJpYS1sYWJlbD0ke3RoaXMuX3dhZ29uVHlwZUxhYmVsKCl9IGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19jb21wYXJ0bWVudFwiPlxuICAgICAgICAgICAgICAgICR7dGhpcy5zZWN0b3JcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8bGkgY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+JHtzZWN0b3JTdHJpbmd9PC9saT5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLmxhYmVsXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPGxpIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiPiR7bGFiZWxTdHJpbmd9PC9saT5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLndhZ29uQ2xhc3MgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPGxpIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19jbGFzc1wiPiR7d2Fnb25DbGFzc0NvbnRlbnR9PC9saT5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLm9jY3VwYW5jeSAmJiB0aGlzLndhZ29uVHlwZSAhPT0gJ2Nsb3NlZCdcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8c2JiLXRpbWV0YWJsZS1vY2N1cGFuY3ktaWNvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19vY2N1cGFuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJsaXN0aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgb2NjdXBhbmN5PSR7dGhpcy5vY2N1cGFuY3l9XG4gICAgICAgICAgICAgICAgICAgID48L3NiYi10aW1ldGFibGUtb2NjdXBhbmN5LWljb24+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAgICR7aGFzQmxvY2tlZFBhc3NhZ2VFbnRyeVxuICAgICAgICAgICAgICAgICAgPyBodG1sYDxsaSBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2kxOG5CbG9ja2VkUGFzc2FnZVtibG9ja2VkUGFzc2FnZV1bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICA8L3VsPmAsXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICBodG1sYDxkaXYgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX2NvbXBhcnRtZW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAke2Ake3RoaXMuX3dhZ29uVHlwZUxhYmVsKCl9JHt0aGlzLnNlY3RvciA/IGAsICR7c2VjdG9yU3RyaW5nfWAgOiAnJ31gfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAke3RoaXMubGFiZWxcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBjbGFzcz1cInNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcIj4ke2xhYmVsU3RyaW5nfTwvc3Bhbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLndhZ29uQ2xhc3MgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX2NsYXNzXCI+JHt3YWdvbkNsYXNzQ29udGVudH08L3NwYW4+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICAgICR7dGhpcy5vY2N1cGFuY3kgJiYgdGhpcy53YWdvblR5cGUgIT09ICdjbG9zZWQnXG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPHNiYi10aW1ldGFibGUtb2NjdXBhbmN5LWljb25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmFpbi13YWdvbl9fb2NjdXBhbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgICBvY2N1cGFuY3k9JHt0aGlzLm9jY3VwYW5jeX1cbiAgICAgICAgICAgICAgICAgICAgPjwvc2JiLXRpbWV0YWJsZS1vY2N1cGFuY3ktaWNvbj5gXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHtoYXNCbG9ja2VkUGFzc2FnZUVudHJ5XG4gICAgICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItc2NyZWVuLXJlYWRlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHtpMThuQmxvY2tlZFBhc3NhZ2VbYmxvY2tlZFBhc3NhZ2VdW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+YFxuICAgICAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgICA8L2Rpdj4gYCxcbiAgICAgICAgICApfVxuICAgICAgICAgICR7d2Fnb25UeXBlVG9JY29uTWFwW3RoaXMud2Fnb25UeXBlXVxuICAgICAgICAgICAgPyBodG1sYDxzYmItaWNvblxuICAgICAgICAgICAgICAgIG5hbWU9JHt3YWdvblR5cGVUb0ljb25NYXBbdGhpcy53YWdvblR5cGVdIX1cbiAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi10cmFpbi13YWdvbl9fbWFpbi1pY29uXCJcbiAgICAgICAgICAgICAgPjwvc2JiLWljb24+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX3NoYXBlXCIgdmlld0JveD1cIjAgMCA4NCAzNlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHBhdGggZD0ke3BhdGh9PjwvcGF0aD5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19zaGFwZS1jbG9zZWRcIlxuICAgICAgICAgICAgICBkPSR7dGhpcy5fdmlldyA9PT0gJ3RvcCcgPyAnTTgxIDNMMyAzNCcgOiAnTTgxIDRMNCAzMid9XG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX3NoYXBlLWNsb3NlZFwiXG4gICAgICAgICAgICAgIGQ9JHt0aGlzLl92aWV3ID09PSAndG9wJyA/ICdNODEgMzRMMyAzJyA6ICdNODEgMzJMNCA0J31cbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgJHt0aGlzLmFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5VGV4dFxuICAgICAgICAgICAgPyBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seVwiXG4gICAgICAgICAgICAgICAgPiwgJHt0aGlzLmFkZGl0aW9uYWxBY2Nlc3NpYmlsaXR5VGV4dH08L3NwYW5cbiAgICAgICAgICAgICAgPmBcbiAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJzYmItdHJhaW4td2Fnb25fX2luZm9ybWF0aW9uLXdyYXBwZXJcIlxuICAgICAgICAgICAgP2hpZGRlbj0keyF0aGlzLmxpc3RDaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMubGFiZWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHt0aGlzLmxhYmVsXG4gICAgICAgICAgICAgID8gaHRtbGA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInNiYi10cmFpbi13YWdvbl9fbGFiZWxcIj4ke3RoaXMubGFiZWx9PC9zcGFuPmBcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgICAgJHt0aGlzLmxhYmVsICYmIHRoaXMubGlzdENoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICA/IGh0bWxgPHNiYi1kaXZpZGVyXG4gICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbj0ke3RoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnfVxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLXRyYWluLXdhZ29uX19sYWJlbC1kaXZpZGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zYmItZGl2aWRlcj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7dGhpcy5yZW5kZXJMaXN0KHtcbiAgICAgICAgICAgICAgY2xhc3M6ICdzYmItdHJhaW4td2Fnb25fX2F0dHJpYnV0ZS1pY29uLWxpc3QnLFxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IGkxOG5BZGRpdGlvbmFsV2Fnb25JbmZvcm1hdGlvbkhlYWRpbmdbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2JiVHJhaW5XYWdvbk1peGluRWxlbWVudCBhcyB1bmtub3duIGFzIEFic3RyYWN0Q29uc3RydWN0b3I8U2JiVHJhaW5XYWdvbk1peGluVHlwZT4gJiBUO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUNzQ0EsSUFBTSxxQkFBbUY7Q0FDdkYsV0FBVztDQUNYLFVBQVU7Q0FD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