@appius-fr/apx 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1637 @@
1
+ /******/ var __webpack_modules__ = ({
2
+
3
+ /***/ "./node_modules/css-loader/dist/cjs.js!./modules/dialog/css/dialog.css":
4
+ /*!*****************************************************************************!*\
5
+ !*** ./node_modules/css-loader/dist/cjs.js!./modules/dialog/css/dialog.css ***!
6
+ \*****************************************************************************/
7
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
8
+
9
+ __webpack_require__.r(__webpack_exports__);
10
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
11
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
12
+ /* harmony export */ });
13
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
14
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
15
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
16
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
17
+ // Imports
18
+
19
+
20
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
21
+ // Module
22
+ ___CSS_LOADER_EXPORT___.push([module.id, `/* Dialog styling */
23
+ .APX-dialog {
24
+ display: none;
25
+ position: fixed;
26
+ z-index: 1002;
27
+ left: 0;
28
+ top: 0;
29
+ width: 100%;
30
+ height: 100%;
31
+ overflow: auto;
32
+ background-color: rgba(0, 0, 0, 0.4);
33
+ /* Dimmed background for focus on dialog */
34
+ }
35
+
36
+ .APX-dialog-content {
37
+ background-color: #fefefe;
38
+ padding: 40px;
39
+ border: none;
40
+ width: auto;
41
+ min-width: 300px;
42
+ max-width: 80%;
43
+ margin: auto;
44
+ border-radius: 8px;
45
+ box-shadow: 0px 6px 20px rgba(0, 0, 0, 0.1);
46
+ font-family: 'Helvetica Neue', Arial, sans-serif;
47
+ }
48
+
49
+ h2.APX-dialog-title{
50
+ margin-top:0;
51
+ }
52
+
53
+ .APX-close-dialog {
54
+ color: #aaa;
55
+ float: right;
56
+ font-size: 24px;
57
+ margin-top: -10px;
58
+ /* Adjust positioning */
59
+ margin-right: -10px;
60
+ }
61
+
62
+ .APX-close-dialog:hover,
63
+ .APX-close-dialog:focus {
64
+ color: #333;
65
+ /* Darker color on hover/focus */
66
+ cursor: pointer;
67
+ }
68
+
69
+ /* Input fields styling */
70
+ .APX-dialog-content input[type="text"],
71
+ .APX-dialog-content input[type="number"],
72
+ .APX-dialog-content input[type="date"],
73
+ .APX-dialog-content input[type="datetime-local"] {
74
+ width: 100%;
75
+ padding: 10px;
76
+ margin-bottom: 20px;
77
+ border: 1px solid #ccc;
78
+ border-radius: 4px;
79
+ font-family: 'Helvetica Neue', Arial, sans-serif;
80
+ font-size: 16px;
81
+ box-sizing: border-box;
82
+ transition: border-color 0.3s;
83
+ }
84
+
85
+ .APX-dialog-content input[type="text"]:focus,
86
+ .APX-dialog-content input[type="number"]:focus,
87
+ .APX-dialog-content input[type="date"]:focus,
88
+ .APX-dialog-content input[type="datetime-local"]:focus {
89
+ border-color: #2C3E50;
90
+ /* Deep Blue Color */
91
+ outline: none;
92
+ }
93
+
94
+ /* Button in the dialog */
95
+ .APX-dialog-button-container button {
96
+ background-color: #2C3E50;
97
+ color: #ECF0F1;
98
+ border: none;
99
+ padding: 10px 20px;
100
+ border-radius: 5px;
101
+ font-size: 16px;
102
+ cursor: pointer;
103
+ transition: background-color 0.3s;
104
+ }
105
+
106
+ .APX-dialog-button-container button:hover {
107
+ background-color: #34495E;
108
+ }
109
+
110
+ .APX-dialog-button-container {
111
+ display: flex;
112
+ gap: 10px;
113
+ margin-top:1em;
114
+ /* spacing between buttons */
115
+ }
116
+
117
+ /* Loading indicator */
118
+ .APX-dialog-loading-indicator {
119
+ display: flex;
120
+ justify-content: center;
121
+ align-items: center;
122
+ height: 100px;
123
+ width: 100%;
124
+ }
125
+
126
+ .APX-dialog-loading-indicator::before {
127
+ content: '';
128
+ width: 40px;
129
+ height: 40px;
130
+ border: 4px solid #f3f3f3;
131
+ border-top: 4px solid #2C3E50;
132
+ border-radius: 50%;
133
+ animation: APX-dialog-spin 1s linear infinite;
134
+ }
135
+
136
+ @keyframes APX-dialog-spin {
137
+ 0% { transform: rotate(0deg); }
138
+ 100% { transform: rotate(360deg); }
139
+ }`, "",{"version":3,"sources":["webpack://./modules/dialog/css/dialog.css"],"names":[],"mappings":"AAAA,mBAAmB;AACnB;IACI,aAAa;IACb,eAAe;IACf,aAAa;IACb,OAAO;IACP,MAAM;IACN,WAAW;IACX,YAAY;IACZ,cAAc;IACd,oCAAoC;IACpC,0CAA0C;AAC9C;;AAEA;IACI,yBAAyB;IACzB,aAAa;IACb,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,kBAAkB;IAClB,2CAA2C;IAC3C,gDAAgD;AACpD;;AAEA;IACI,YAAY;AAChB;;AAEA;IACI,WAAW;IACX,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,uBAAuB;IACvB,mBAAmB;AACvB;;AAEA;;IAEI,WAAW;IACX,gCAAgC;IAChC,eAAe;AACnB;;AAEA,yBAAyB;AACzB;;;;IAII,WAAW;IACX,aAAa;IACb,mBAAmB;IACnB,sBAAsB;IACtB,kBAAkB;IAClB,gDAAgD;IAChD,eAAe;IACf,sBAAsB;IACtB,6BAA6B;AACjC;;AAEA;;;;IAII,qBAAqB;IACrB,oBAAoB;IACpB,aAAa;AACjB;;AAEA,yBAAyB;AACzB;IACI,yBAAyB;IACzB,cAAc;IACd,YAAY;IACZ,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,iCAAiC;AACrC;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,aAAa;IACb,SAAS;IACT,cAAc;IACd,4BAA4B;AAChC;;AAEA,sBAAsB;AACtB;IACI,aAAa;IACb,uBAAuB;IACvB,mBAAmB;IACnB,aAAa;IACb,WAAW;AACf;;AAEA;IACI,WAAW;IACX,WAAW;IACX,YAAY;IACZ,yBAAyB;IACzB,6BAA6B;IAC7B,kBAAkB;IAClB,6CAA6C;AACjD;;AAEA;IACI,KAAK,uBAAuB,EAAE;IAC9B,OAAO,yBAAyB,EAAE;AACtC","sourcesContent":["/* Dialog styling */\r\n.APX-dialog {\r\n display: none;\r\n position: fixed;\r\n z-index: 1002;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n background-color: rgba(0, 0, 0, 0.4);\r\n /* Dimmed background for focus on dialog */\r\n}\r\n\r\n.APX-dialog-content {\r\n background-color: #fefefe;\r\n padding: 40px;\r\n border: none;\r\n width: auto;\r\n min-width: 300px;\r\n max-width: 80%;\r\n margin: auto;\r\n border-radius: 8px;\r\n box-shadow: 0px 6px 20px rgba(0, 0, 0, 0.1);\r\n font-family: 'Helvetica Neue', Arial, sans-serif;\r\n}\r\n\r\nh2.APX-dialog-title{\r\n margin-top:0;\r\n}\r\n\r\n.APX-close-dialog {\r\n color: #aaa;\r\n float: right;\r\n font-size: 24px;\r\n margin-top: -10px;\r\n /* Adjust positioning */\r\n margin-right: -10px;\r\n}\r\n\r\n.APX-close-dialog:hover,\r\n.APX-close-dialog:focus {\r\n color: #333;\r\n /* Darker color on hover/focus */\r\n cursor: pointer;\r\n}\r\n\r\n/* Input fields styling */\r\n.APX-dialog-content input[type=\"text\"],\r\n.APX-dialog-content input[type=\"number\"],\r\n.APX-dialog-content input[type=\"date\"],\r\n.APX-dialog-content input[type=\"datetime-local\"] {\r\n width: 100%;\r\n padding: 10px;\r\n margin-bottom: 20px;\r\n border: 1px solid #ccc;\r\n border-radius: 4px;\r\n font-family: 'Helvetica Neue', Arial, sans-serif;\r\n font-size: 16px;\r\n box-sizing: border-box;\r\n transition: border-color 0.3s;\r\n}\r\n\r\n.APX-dialog-content input[type=\"text\"]:focus,\r\n.APX-dialog-content input[type=\"number\"]:focus,\r\n.APX-dialog-content input[type=\"date\"]:focus,\r\n.APX-dialog-content input[type=\"datetime-local\"]:focus {\r\n border-color: #2C3E50;\r\n /* Deep Blue Color */\r\n outline: none;\r\n}\r\n\r\n/* Button in the dialog */\r\n.APX-dialog-button-container button {\r\n background-color: #2C3E50;\r\n color: #ECF0F1;\r\n border: none;\r\n padding: 10px 20px;\r\n border-radius: 5px;\r\n font-size: 16px;\r\n cursor: pointer;\r\n transition: background-color 0.3s;\r\n}\r\n\r\n.APX-dialog-button-container button:hover {\r\n background-color: #34495E;\r\n}\r\n\r\n.APX-dialog-button-container {\r\n display: flex;\r\n gap: 10px;\r\n margin-top:1em;\r\n /* spacing between buttons */\r\n}\r\n\r\n/* Loading indicator */\r\n.APX-dialog-loading-indicator {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100px;\r\n width: 100%;\r\n}\r\n\r\n.APX-dialog-loading-indicator::before {\r\n content: '';\r\n width: 40px;\r\n height: 40px;\r\n border: 4px solid #f3f3f3;\r\n border-top: 4px solid #2C3E50;\r\n border-radius: 50%;\r\n animation: APX-dialog-spin 1s linear infinite;\r\n}\r\n\r\n@keyframes APX-dialog-spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n}"],"sourceRoot":""}]);
140
+ // Exports
141
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
142
+
143
+
144
+ /***/ }),
145
+
146
+ /***/ "./node_modules/css-loader/dist/cjs.js!./modules/tristate/css/tristate.css":
147
+ /*!*********************************************************************************!*\
148
+ !*** ./node_modules/css-loader/dist/cjs.js!./modules/tristate/css/tristate.css ***!
149
+ \*********************************************************************************/
150
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
151
+
152
+ __webpack_require__.r(__webpack_exports__);
153
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
154
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
155
+ /* harmony export */ });
156
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
157
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
158
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
159
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
160
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js");
161
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);
162
+ // Imports
163
+
164
+
165
+
166
+ var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20%20fill%3D%22%23cccccc%22%20d%3D%22M25.107%2032.030h-18.214c-3.456%200-6.268-2.81-6.268-6.264v-19.529c0-3.456%202.812-6.268%206.268-6.268h18.214c3.456%200%206.268%202.812%206.268%206.268v19.529c0%203.452-2.812%206.264-6.268%206.264zM6.893%201.85c-2.419%200-4.386%201.967-4.386%204.386v19.529c0%202.417%201.967%204.382%204.386%204.382h18.214c2.419%200%204.386-1.965%204.386-4.382v-19.529c0-2.419-1.967-4.386-4.386-4.386h-18.214z%22%3E%3C/path%3E%3C/svg%3E */ "data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20%20fill%3D%22%23cccccc%22%20d%3D%22M25.107%2032.030h-18.214c-3.456%200-6.268-2.81-6.268-6.264v-19.529c0-3.456%202.812-6.268%206.268-6.268h18.214c3.456%200%206.268%202.812%206.268%206.268v19.529c0%203.452-2.812%206.264-6.268%206.264zM6.893%201.85c-2.419%200-4.386%201.967-4.386%204.386v19.529c0%202.417%201.967%204.382%204.386%204.382h18.214c2.419%200%204.386-1.965%204.386-4.382v-19.529c0-2.419-1.967-4.386-4.386-4.386h-18.214z%22%3E%3C/path%3E%3C/svg%3E"), __webpack_require__.b);
167
+ var ___CSS_LOADER_URL_IMPORT_1___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20fill%3D%22%230654ba%22%20d%3D%22M0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705zM5.313%2017.587l7.039%206.839%2013.831-13.439-2.636-2.561-10.929%2010.62-4.442-4.317-2.862%202.858z%22%3E%3C/path%3E%3C/svg%3E */ "data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20fill%3D%22%230654ba%22%20d%3D%22M0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705zM5.313%2017.587l7.039%206.839%2013.831-13.439-2.636-2.561-10.929%2010.62-4.442-4.317-2.862%202.858z%22%3E%3C/path%3E%3C/svg%3E"), __webpack_require__.b);
168
+ var ___CSS_LOADER_URL_IMPORT_2___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2032%2032%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705z%22%20fill%3D%22%23f00%22%2F%3E%3Cpath%20d%3D%22m8%208%2016%2016%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3Cpath%20d%3D%22M24%208L8%2024%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3C%2Fsvg%3E */ "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2032%2032%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705z%22%20fill%3D%22%23f00%22%2F%3E%3Cpath%20d%3D%22m8%208%2016%2016%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3Cpath%20d%3D%22M24%208L8%2024%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3C%2Fsvg%3E"), __webpack_require__.b);
169
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
170
+ var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);
171
+ var ___CSS_LOADER_URL_REPLACEMENT_1___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_1___);
172
+ var ___CSS_LOADER_URL_REPLACEMENT_2___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_2___);
173
+ // Module
174
+ ___CSS_LOADER_EXPORT___.push([module.id, `.apx-tristate {
175
+ display: inline-block;
176
+ vertical-align: middle;
177
+ text-align: center;
178
+ cursor: pointer;
179
+ position: relative;
180
+ min-width:13px;
181
+ min-height:13px;
182
+ background-size: contain;
183
+ background-color: white;
184
+ border-radius:3px;
185
+ }
186
+ .apx-tristate.unchecked {
187
+ background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___});
188
+ }
189
+ .apx-tristate.checked {
190
+ background-image: url(${___CSS_LOADER_URL_REPLACEMENT_1___});
191
+ background-repeat: no-repeat;
192
+ background-position: center;
193
+ }
194
+ .apx-tristate.crossed {
195
+ background-image: url(${___CSS_LOADER_URL_REPLACEMENT_2___});
196
+ background-repeat: no-repeat;
197
+ background-position: center;
198
+ }`, "",{"version":3,"sources":["webpack://./modules/tristate/css/tristate.css"],"names":[],"mappings":"AAAA;IACI,qBAAqB;IACrB,sBAAsB;IACtB,kBAAkB;IAClB,eAAe;IACf,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,wBAAwB;IACxB,uBAAuB;IACvB,iBAAiB;AACrB;AACA;IACI,yDAAylB;AAC7lB;AACA;IACI,yDAA6e;IAC7e,4BAA4B;IAC5B,2BAA2B;AAC/B;AACA;IACI,yDAAsnB;IACtnB,4BAA4B;IAC5B,2BAA2B;AAC/B","sourcesContent":[".apx-tristate {\r\n display: inline-block;\r\n vertical-align: middle;\r\n text-align: center;\r\n cursor: pointer;\r\n position: relative;\r\n min-width:13px;\r\n min-height:13px;\r\n background-size: contain;\r\n background-color: white;\r\n border-radius:3px;\r\n}\r\n.apx-tristate.unchecked {\r\n background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20%20fill%3D%22%23cccccc%22%20d%3D%22M25.107%2032.030h-18.214c-3.456%200-6.268-2.81-6.268-6.264v-19.529c0-3.456%202.812-6.268%206.268-6.268h18.214c3.456%200%206.268%202.812%206.268%206.268v19.529c0%203.452-2.812%206.264-6.268%206.264zM6.893%201.85c-2.419%200-4.386%201.967-4.386%204.386v19.529c0%202.417%201.967%204.382%204.386%204.382h18.214c2.419%200%204.386-1.965%204.386-4.382v-19.529c0-2.419-1.967-4.386-4.386-4.386h-18.214z%22%3E%3C/path%3E%3C/svg%3E');\r\n}\r\n.apx-tristate.checked {\r\n background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20fill%3D%22%230654ba%22%20d%3D%22M0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705zM5.313%2017.587l7.039%206.839%2013.831-13.439-2.636-2.561-10.929%2010.62-4.442-4.317-2.862%202.858z%22%3E%3C/path%3E%3C/svg%3E');\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n}\r\n.apx-tristate.crossed {\r\n background-image: url('data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2032%2032%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705z%22%20fill%3D%22%23f00%22%2F%3E%3Cpath%20d%3D%22m8%208%2016%2016%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3Cpath%20d%3D%22M24%208L8%2024%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3C%2Fsvg%3E');\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n}"],"sourceRoot":""}]);
199
+ // Exports
200
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
201
+
202
+
203
+ /***/ }),
204
+
205
+ /***/ "./node_modules/css-loader/dist/runtime/api.js":
206
+ /*!*****************************************************!*\
207
+ !*** ./node_modules/css-loader/dist/runtime/api.js ***!
208
+ \*****************************************************/
209
+ /***/ ((module) => {
210
+
211
+
212
+
213
+ /*
214
+ MIT License http://www.opensource.org/licenses/mit-license.php
215
+ Author Tobias Koppers @sokra
216
+ */
217
+ module.exports = function (cssWithMappingToString) {
218
+ var list = [];
219
+
220
+ // return the list of modules as css string
221
+ list.toString = function toString() {
222
+ return this.map(function (item) {
223
+ var content = "";
224
+ var needLayer = typeof item[5] !== "undefined";
225
+ if (item[4]) {
226
+ content += "@supports (".concat(item[4], ") {");
227
+ }
228
+ if (item[2]) {
229
+ content += "@media ".concat(item[2], " {");
230
+ }
231
+ if (needLayer) {
232
+ content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
233
+ }
234
+ content += cssWithMappingToString(item);
235
+ if (needLayer) {
236
+ content += "}";
237
+ }
238
+ if (item[2]) {
239
+ content += "}";
240
+ }
241
+ if (item[4]) {
242
+ content += "}";
243
+ }
244
+ return content;
245
+ }).join("");
246
+ };
247
+
248
+ // import a list of modules into the list
249
+ list.i = function i(modules, media, dedupe, supports, layer) {
250
+ if (typeof modules === "string") {
251
+ modules = [[null, modules, undefined]];
252
+ }
253
+ var alreadyImportedModules = {};
254
+ if (dedupe) {
255
+ for (var k = 0; k < this.length; k++) {
256
+ var id = this[k][0];
257
+ if (id != null) {
258
+ alreadyImportedModules[id] = true;
259
+ }
260
+ }
261
+ }
262
+ for (var _k = 0; _k < modules.length; _k++) {
263
+ var item = [].concat(modules[_k]);
264
+ if (dedupe && alreadyImportedModules[item[0]]) {
265
+ continue;
266
+ }
267
+ if (typeof layer !== "undefined") {
268
+ if (typeof item[5] === "undefined") {
269
+ item[5] = layer;
270
+ } else {
271
+ item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
272
+ item[5] = layer;
273
+ }
274
+ }
275
+ if (media) {
276
+ if (!item[2]) {
277
+ item[2] = media;
278
+ } else {
279
+ item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
280
+ item[2] = media;
281
+ }
282
+ }
283
+ if (supports) {
284
+ if (!item[4]) {
285
+ item[4] = "".concat(supports);
286
+ } else {
287
+ item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
288
+ item[4] = supports;
289
+ }
290
+ }
291
+ list.push(item);
292
+ }
293
+ };
294
+ return list;
295
+ };
296
+
297
+ /***/ }),
298
+
299
+ /***/ "./node_modules/css-loader/dist/runtime/getUrl.js":
300
+ /*!********************************************************!*\
301
+ !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***!
302
+ \********************************************************/
303
+ /***/ ((module) => {
304
+
305
+
306
+
307
+ module.exports = function (url, options) {
308
+ if (!options) {
309
+ options = {};
310
+ }
311
+ if (!url) {
312
+ return url;
313
+ }
314
+ url = String(url.__esModule ? url.default : url);
315
+
316
+ // If url is already wrapped in quotes, remove them
317
+ if (/^['"].*['"]$/.test(url)) {
318
+ url = url.slice(1, -1);
319
+ }
320
+ if (options.hash) {
321
+ url += options.hash;
322
+ }
323
+
324
+ // Should url be wrapped?
325
+ // See https://drafts.csswg.org/css-values-3/#urls
326
+ if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) {
327
+ return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\"");
328
+ }
329
+ return url;
330
+ };
331
+
332
+ /***/ }),
333
+
334
+ /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
335
+ /*!************************************************************!*\
336
+ !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
337
+ \************************************************************/
338
+ /***/ ((module) => {
339
+
340
+
341
+
342
+ module.exports = function (item) {
343
+ var content = item[1];
344
+ var cssMapping = item[3];
345
+ if (!cssMapping) {
346
+ return content;
347
+ }
348
+ if (typeof btoa === "function") {
349
+ var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
350
+ var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
351
+ var sourceMapping = "/*# ".concat(data, " */");
352
+ return [content].concat([sourceMapping]).join("\n");
353
+ }
354
+ return [content].join("\n");
355
+ };
356
+
357
+ /***/ }),
358
+
359
+ /***/ "./modules/dialog/html/dialog.html?raw":
360
+ /*!*********************************************!*\
361
+ !*** ./modules/dialog/html/dialog.html?raw ***!
362
+ \*********************************************/
363
+ /***/ ((module) => {
364
+
365
+ // Module
366
+ var code = "<div class=\"APX-dialog\">\r\n <div class=\"APX-dialog-content\">\r\n <span class=\"APX-close-dialog\">&times;</span>\r\n <h2 class=\"APX-dialog-title\"></h2>\r\n <div class=\"APX-dialog-dynamic-content\"></div>\r\n <div class=\"APX-dialog-button-container\"></div>\r\n </div>\r\n</div>";
367
+ // Exports
368
+ module.exports = code;
369
+
370
+ /***/ }),
371
+
372
+ /***/ "./modules/dialog/css/dialog.css":
373
+ /*!***************************************!*\
374
+ !*** ./modules/dialog/css/dialog.css ***!
375
+ \***************************************/
376
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
377
+
378
+ __webpack_require__.r(__webpack_exports__);
379
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
380
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
381
+ /* harmony export */ });
382
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
383
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
384
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
385
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
386
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
387
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
388
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
389
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
390
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
391
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
392
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
393
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
394
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_dialog_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js!./dialog.css */ "./node_modules/css-loader/dist/cjs.js!./modules/dialog/css/dialog.css");
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+ var options = {};
407
+
408
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
409
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
410
+
411
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
412
+
413
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
414
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
415
+
416
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_dialog_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
417
+
418
+
419
+
420
+
421
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_dialog_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_dialog_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_dialog_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
422
+
423
+
424
+ /***/ }),
425
+
426
+ /***/ "./modules/tristate/css/tristate.css":
427
+ /*!*******************************************!*\
428
+ !*** ./modules/tristate/css/tristate.css ***!
429
+ \*******************************************/
430
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
431
+
432
+ __webpack_require__.r(__webpack_exports__);
433
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
434
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
435
+ /* harmony export */ });
436
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
437
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
438
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
439
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
440
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
441
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
442
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
443
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
444
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
445
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
446
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
447
+ /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
448
+ /* harmony import */ var _node_modules_css_loader_dist_cjs_js_tristate_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js!./tristate.css */ "./node_modules/css-loader/dist/cjs.js!./modules/tristate/css/tristate.css");
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+ var options = {};
461
+
462
+ options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
463
+ options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
464
+
465
+ options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
466
+
467
+ options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
468
+ options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
469
+
470
+ var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_tristate_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
471
+
472
+
473
+
474
+
475
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_tristate_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_tristate_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_tristate_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
476
+
477
+
478
+ /***/ }),
479
+
480
+ /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
481
+ /*!****************************************************************************!*\
482
+ !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
483
+ \****************************************************************************/
484
+ /***/ ((module) => {
485
+
486
+
487
+
488
+ var stylesInDOM = [];
489
+ function getIndexByIdentifier(identifier) {
490
+ var result = -1;
491
+ for (var i = 0; i < stylesInDOM.length; i++) {
492
+ if (stylesInDOM[i].identifier === identifier) {
493
+ result = i;
494
+ break;
495
+ }
496
+ }
497
+ return result;
498
+ }
499
+ function modulesToDom(list, options) {
500
+ var idCountMap = {};
501
+ var identifiers = [];
502
+ for (var i = 0; i < list.length; i++) {
503
+ var item = list[i];
504
+ var id = options.base ? item[0] + options.base : item[0];
505
+ var count = idCountMap[id] || 0;
506
+ var identifier = "".concat(id, " ").concat(count);
507
+ idCountMap[id] = count + 1;
508
+ var indexByIdentifier = getIndexByIdentifier(identifier);
509
+ var obj = {
510
+ css: item[1],
511
+ media: item[2],
512
+ sourceMap: item[3],
513
+ supports: item[4],
514
+ layer: item[5]
515
+ };
516
+ if (indexByIdentifier !== -1) {
517
+ stylesInDOM[indexByIdentifier].references++;
518
+ stylesInDOM[indexByIdentifier].updater(obj);
519
+ } else {
520
+ var updater = addElementStyle(obj, options);
521
+ options.byIndex = i;
522
+ stylesInDOM.splice(i, 0, {
523
+ identifier: identifier,
524
+ updater: updater,
525
+ references: 1
526
+ });
527
+ }
528
+ identifiers.push(identifier);
529
+ }
530
+ return identifiers;
531
+ }
532
+ function addElementStyle(obj, options) {
533
+ var api = options.domAPI(options);
534
+ api.update(obj);
535
+ var updater = function updater(newObj) {
536
+ if (newObj) {
537
+ if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
538
+ return;
539
+ }
540
+ api.update(obj = newObj);
541
+ } else {
542
+ api.remove();
543
+ }
544
+ };
545
+ return updater;
546
+ }
547
+ module.exports = function (list, options) {
548
+ options = options || {};
549
+ list = list || [];
550
+ var lastIdentifiers = modulesToDom(list, options);
551
+ return function update(newList) {
552
+ newList = newList || [];
553
+ for (var i = 0; i < lastIdentifiers.length; i++) {
554
+ var identifier = lastIdentifiers[i];
555
+ var index = getIndexByIdentifier(identifier);
556
+ stylesInDOM[index].references--;
557
+ }
558
+ var newLastIdentifiers = modulesToDom(newList, options);
559
+ for (var _i = 0; _i < lastIdentifiers.length; _i++) {
560
+ var _identifier = lastIdentifiers[_i];
561
+ var _index = getIndexByIdentifier(_identifier);
562
+ if (stylesInDOM[_index].references === 0) {
563
+ stylesInDOM[_index].updater();
564
+ stylesInDOM.splice(_index, 1);
565
+ }
566
+ }
567
+ lastIdentifiers = newLastIdentifiers;
568
+ };
569
+ };
570
+
571
+ /***/ }),
572
+
573
+ /***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
574
+ /*!********************************************************************!*\
575
+ !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
576
+ \********************************************************************/
577
+ /***/ ((module) => {
578
+
579
+
580
+
581
+ var memo = {};
582
+
583
+ /* istanbul ignore next */
584
+ function getTarget(target) {
585
+ if (typeof memo[target] === "undefined") {
586
+ var styleTarget = document.querySelector(target);
587
+
588
+ // Special case to return head of iframe instead of iframe itself
589
+ if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
590
+ try {
591
+ // This will throw an exception if access to iframe is blocked
592
+ // due to cross-origin restrictions
593
+ styleTarget = styleTarget.contentDocument.head;
594
+ } catch (e) {
595
+ // istanbul ignore next
596
+ styleTarget = null;
597
+ }
598
+ }
599
+ memo[target] = styleTarget;
600
+ }
601
+ return memo[target];
602
+ }
603
+
604
+ /* istanbul ignore next */
605
+ function insertBySelector(insert, style) {
606
+ var target = getTarget(insert);
607
+ if (!target) {
608
+ throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
609
+ }
610
+ target.appendChild(style);
611
+ }
612
+ module.exports = insertBySelector;
613
+
614
+ /***/ }),
615
+
616
+ /***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
617
+ /*!**********************************************************************!*\
618
+ !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
619
+ \**********************************************************************/
620
+ /***/ ((module) => {
621
+
622
+
623
+
624
+ /* istanbul ignore next */
625
+ function insertStyleElement(options) {
626
+ var element = document.createElement("style");
627
+ options.setAttributes(element, options.attributes);
628
+ options.insert(element, options.options);
629
+ return element;
630
+ }
631
+ module.exports = insertStyleElement;
632
+
633
+ /***/ }),
634
+
635
+ /***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
636
+ /*!**********************************************************************************!*\
637
+ !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
638
+ \**********************************************************************************/
639
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
640
+
641
+
642
+
643
+ /* istanbul ignore next */
644
+ function setAttributesWithoutAttributes(styleElement) {
645
+ var nonce = true ? __webpack_require__.nc : 0;
646
+ if (nonce) {
647
+ styleElement.setAttribute("nonce", nonce);
648
+ }
649
+ }
650
+ module.exports = setAttributesWithoutAttributes;
651
+
652
+ /***/ }),
653
+
654
+ /***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
655
+ /*!***************************************************************!*\
656
+ !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
657
+ \***************************************************************/
658
+ /***/ ((module) => {
659
+
660
+
661
+
662
+ /* istanbul ignore next */
663
+ function apply(styleElement, options, obj) {
664
+ var css = "";
665
+ if (obj.supports) {
666
+ css += "@supports (".concat(obj.supports, ") {");
667
+ }
668
+ if (obj.media) {
669
+ css += "@media ".concat(obj.media, " {");
670
+ }
671
+ var needLayer = typeof obj.layer !== "undefined";
672
+ if (needLayer) {
673
+ css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
674
+ }
675
+ css += obj.css;
676
+ if (needLayer) {
677
+ css += "}";
678
+ }
679
+ if (obj.media) {
680
+ css += "}";
681
+ }
682
+ if (obj.supports) {
683
+ css += "}";
684
+ }
685
+ var sourceMap = obj.sourceMap;
686
+ if (sourceMap && typeof btoa !== "undefined") {
687
+ css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
688
+ }
689
+
690
+ // For old IE
691
+ /* istanbul ignore if */
692
+ options.styleTagTransform(css, styleElement, options.options);
693
+ }
694
+ function removeStyleElement(styleElement) {
695
+ // istanbul ignore if
696
+ if (styleElement.parentNode === null) {
697
+ return false;
698
+ }
699
+ styleElement.parentNode.removeChild(styleElement);
700
+ }
701
+
702
+ /* istanbul ignore next */
703
+ function domAPI(options) {
704
+ if (typeof document === "undefined") {
705
+ return {
706
+ update: function update() {},
707
+ remove: function remove() {}
708
+ };
709
+ }
710
+ var styleElement = options.insertStyleElement(options);
711
+ return {
712
+ update: function update(obj) {
713
+ apply(styleElement, options, obj);
714
+ },
715
+ remove: function remove() {
716
+ removeStyleElement(styleElement);
717
+ }
718
+ };
719
+ }
720
+ module.exports = domAPI;
721
+
722
+ /***/ }),
723
+
724
+ /***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
725
+ /*!*********************************************************************!*\
726
+ !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
727
+ \*********************************************************************/
728
+ /***/ ((module) => {
729
+
730
+
731
+
732
+ /* istanbul ignore next */
733
+ function styleTagTransform(css, styleElement) {
734
+ if (styleElement.styleSheet) {
735
+ styleElement.styleSheet.cssText = css;
736
+ } else {
737
+ while (styleElement.firstChild) {
738
+ styleElement.removeChild(styleElement.firstChild);
739
+ }
740
+ styleElement.appendChild(document.createTextNode(css));
741
+ }
742
+ }
743
+ module.exports = styleTagTransform;
744
+
745
+ /***/ }),
746
+
747
+ /***/ "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2032%2032%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705z%22%20fill%3D%22%23f00%22%2F%3E%3Cpath%20d%3D%22m8%208%2016%2016%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3Cpath%20d%3D%22M24%208L8%2024%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3C%2Fsvg%3E":
748
+ /*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
749
+ !*** data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2032%2032%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705z%22%20fill%3D%22%23f00%22%2F%3E%3Cpath%20d%3D%22m8%208%2016%2016%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3Cpath%20d%3D%22M24%208L8%2024%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3C%2Fsvg%3E ***!
750
+ \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
751
+ /***/ ((module) => {
752
+
753
+ module.exports = "data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20viewBox%3D%220%200%2032%2032%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22m0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705z%22%20fill%3D%22%23f00%22%2F%3E%3Cpath%20d%3D%22m8%208%2016%2016%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3Cpath%20d%3D%22M24%208L8%2024%22%20stroke%3D%22%23fff%22%20stroke-width%3D%222%22%2F%3E%3C%2Fsvg%3E";
754
+
755
+ /***/ }),
756
+
757
+ /***/ "data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20%20fill%3D%22%23cccccc%22%20d%3D%22M25.107%2032.030h-18.214c-3.456%200-6.268-2.81-6.268-6.264v-19.529c0-3.456%202.812-6.268%206.268-6.268h18.214c3.456%200%206.268%202.812%206.268%206.268v19.529c0%203.452-2.812%206.264-6.268%206.264zM6.893%201.85c-2.419%200-4.386%201.967-4.386%204.386v19.529c0%202.417%201.967%204.382%204.386%204.382h18.214c2.419%200%204.386-1.965%204.386-4.382v-19.529c0-2.419-1.967-4.386-4.386-4.386h-18.214z%22%3E%3C/path%3E%3C/svg%3E":
758
+ /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
759
+ !*** data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20%20fill%3D%22%23cccccc%22%20d%3D%22M25.107%2032.030h-18.214c-3.456%200-6.268-2.81-6.268-6.264v-19.529c0-3.456%202.812-6.268%206.268-6.268h18.214c3.456%200%206.268%202.812%206.268%206.268v19.529c0%203.452-2.812%206.264-6.268%206.264zM6.893%201.85c-2.419%200-4.386%201.967-4.386%204.386v19.529c0%202.417%201.967%204.382%204.386%204.382h18.214c2.419%200%204.386-1.965%204.386-4.382v-19.529c0-2.419-1.967-4.386-4.386-4.386h-18.214z%22%3E%3C/path%3E%3C/svg%3E ***!
760
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
761
+ /***/ ((module) => {
762
+
763
+ module.exports = "data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20%20fill%3D%22%23cccccc%22%20d%3D%22M25.107%2032.030h-18.214c-3.456%200-6.268-2.81-6.268-6.264v-19.529c0-3.456%202.812-6.268%206.268-6.268h18.214c3.456%200%206.268%202.812%206.268%206.268v19.529c0%203.452-2.812%206.264-6.268%206.264zM6.893%201.85c-2.419%200-4.386%201.967-4.386%204.386v19.529c0%202.417%201.967%204.382%204.386%204.382h18.214c2.419%200%204.386-1.965%204.386-4.382v-19.529c0-2.419-1.967-4.386-4.386-4.386h-18.214z%22%3E%3C/path%3E%3C/svg%3E";
764
+
765
+ /***/ }),
766
+
767
+ /***/ "data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20fill%3D%22%230654ba%22%20d%3D%22M0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705zM5.313%2017.587l7.039%206.839%2013.831-13.439-2.636-2.561-10.929%2010.62-4.442-4.317-2.862%202.858z%22%3E%3C/path%3E%3C/svg%3E":
768
+ /*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
769
+ !*** data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20fill%3D%22%230654ba%22%20d%3D%22M0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705zM5.313%2017.587l7.039%206.839%2013.831-13.439-2.636-2.561-10.929%2010.62-4.442-4.317-2.862%202.858z%22%3E%3C/path%3E%3C/svg%3E ***!
770
+ \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
771
+ /***/ ((module) => {
772
+
773
+ module.exports = "data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A//www.w3.org/2000/svg%27%20width%3D%2732%27%20height%3D%2732%27%3E%3Cpath%20fill%3D%22%230654ba%22%20d%3D%22M0.543%205.647c0-3.119%202.531-5.647%205.65-5.647h19.309c3.12%200%205.65%202.511%205.65%205.647v20.705c0%203.119-2.531%205.647-5.65%205.647h-19.309c-3.12%200-5.65-2.511-5.65-5.647v-20.705zM5.313%2017.587l7.039%206.839%2013.831-13.439-2.636-2.561-10.929%2010.62-4.442-4.317-2.862%202.858z%22%3E%3C/path%3E%3C/svg%3E";
774
+
775
+ /***/ }),
776
+
777
+ /***/ "./modules/common.mjs":
778
+ /*!****************************!*\
779
+ !*** ./modules/common.mjs ***!
780
+ \****************************/
781
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
782
+
783
+ __webpack_require__.r(__webpack_exports__);
784
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
785
+ /* harmony export */ loadCss: () => (/* binding */ loadCss)
786
+ /* harmony export */ });
787
+ // Function to load the CSS from a given URL
788
+ function loadCss(url) {
789
+ return fetch(url)
790
+ .then(response => response.text())
791
+ .then(css => {
792
+ const styleSheet = document.createElement("style");
793
+ styleSheet.type = "text/css";
794
+ styleSheet.textContent = css; // Use textContent instead of innerText
795
+ document.head.appendChild(styleSheet);
796
+ })
797
+ .catch(error => {
798
+ console.error("Failed to load CSS:", error);
799
+ });
800
+ }
801
+
802
+
803
+
804
+ /***/ }),
805
+
806
+ /***/ "./modules/dialog/dialog.mjs":
807
+ /*!***********************************!*\
808
+ !*** ./modules/dialog/dialog.mjs ***!
809
+ \***********************************/
810
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
811
+
812
+ __webpack_require__.r(__webpack_exports__);
813
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
814
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
815
+ /* harmony export */ });
816
+ /* harmony import */ var _css_dialog_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css/dialog.css */ "./modules/dialog/css/dialog.css");
817
+ /* harmony import */ var _html_dialog_html_raw__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./html/dialog.html?raw */ "./modules/dialog/html/dialog.html?raw");
818
+ // Importing the CSS and HTML templates
819
+
820
+
821
+
822
+ const createDialog = (options) => {
823
+ const dialogDefaults = {
824
+ title: '',
825
+ content: '',
826
+ contentURI: '',
827
+ buttons: [],
828
+ size: 'medium',
829
+ showLoadingIndicator: false
830
+ };
831
+
832
+ const { title, content, contentURI, buttons, size, showLoadingIndicator } = { ...dialogDefaults, ...options };
833
+
834
+ const wrapper = document.createElement('div');
835
+ wrapper.innerHTML = _html_dialog_html_raw__WEBPACK_IMPORTED_MODULE_1__.trim();
836
+ const dialogElement = wrapper.firstChild;
837
+
838
+ // Lifecycle event management
839
+ const lifecycleResolvers = {};
840
+ const lifecycleEvents = {};
841
+
842
+ // Define lifecycle promises as properties
843
+ ['opening', 'opened', 'closing', 'closed', 'contentLoading', 'contentLoaded'].forEach((event) => {
844
+ lifecycleEvents[event] = new Promise((resolve) => {
845
+ lifecycleResolvers[event] = resolve;
846
+ });
847
+ });
848
+
849
+ const triggerEvent = (event) => {
850
+ if (lifecycleResolvers[event]) {
851
+ lifecycleResolvers[event]();
852
+ } else {
853
+ console.warn(`No resolver found for lifecycle event: ${event}`);
854
+ }
855
+ };
856
+
857
+ const dialog = {
858
+ element: dialogElement,
859
+ buttons: {},
860
+ isClosed: false,
861
+ lifecycle: lifecycleEvents, // Lifecycle promises directly exposed here
862
+ open: async () => {
863
+ try {
864
+ triggerEvent('opening');
865
+ await dialog.lifecycle.opening;
866
+
867
+ // If loading indicator is enabled and we're fetching content, show dialog first
868
+ if (showLoadingIndicator && contentURI) {
869
+ // Append dialog to the DOM and display it first
870
+ document.body.appendChild(dialogElement);
871
+ dialogElement.style.display = "flex";
872
+
873
+ // Show loading indicator
874
+ dialogElement.querySelector(".APX-dialog-dynamic-content").innerHTML = '<div class="APX-dialog-loading-indicator"></div>';
875
+
876
+ // Load content after dialog is visible
877
+ await fetchAndInsertContent();
878
+ } else {
879
+ // Default behavior: load content first, then show dialog
880
+ await fetchAndInsertContent();
881
+
882
+ // Append dialog to the DOM and display it
883
+ document.body.appendChild(dialogElement);
884
+ dialogElement.style.display = "flex";
885
+ }
886
+
887
+ triggerEvent('opened');
888
+ await dialog.lifecycle.opened;
889
+ } catch (error) {
890
+ console.error('Error opening dialog:', error);
891
+ }
892
+ return dialog; // Return for daisy-chaining
893
+ },
894
+ close: async () => {
895
+ try {
896
+ triggerEvent('closing');
897
+ await dialog.lifecycle.closing;
898
+
899
+ // Cleanup and remove dialog
900
+ closeDialogAndCleanup();
901
+
902
+ triggerEvent('closed');
903
+ await dialog.lifecycle.closed;
904
+ } catch (error) {
905
+ console.error('Error during dialog closing:', error);
906
+ }
907
+ return dialog; // Return for daisy-chaining
908
+ }
909
+ };
910
+
911
+ const closeDialogAndCleanup = () => {
912
+ if (dialog.isClosed) return;
913
+
914
+ dialog.isClosed = true;
915
+ dialogElement.style.display = "none";
916
+ if (document.body.contains(dialogElement)) {
917
+ document.body.removeChild(dialogElement);
918
+ }
919
+ };
920
+
921
+ const setDialogSize = () => {
922
+ const dialogContent = dialogElement.querySelector(".APX-dialog-content");
923
+ const sizes = {
924
+ small: { width: '300px', height: '200px' },
925
+ medium: { width: '500px', height: '400px' },
926
+ large: { width: '800px', height: '600px' }
927
+ };
928
+
929
+ if (size === 'auto') return;
930
+
931
+ const selectedSize = sizes[size] || (typeof size === 'object' && size);
932
+ if (selectedSize) {
933
+ dialogContent.style.minWidth = selectedSize.width || '500px';
934
+ dialogContent.style.minHeight = selectedSize.height || '400px';
935
+ }
936
+ };
937
+
938
+ const addButtons = () => {
939
+ const buttonContainer = dialogElement.querySelector(".APX-dialog-button-container");
940
+
941
+ buttons.forEach(({ key, label, order = 0, align = 'flex-end', closeOnClick = true }) => {
942
+ const button = document.createElement('button');
943
+ button.textContent = label;
944
+ button.style.order = order;
945
+
946
+ if (closeOnClick) {
947
+ // Handle as a one-time Promise
948
+ let firstClickResolved = false;
949
+
950
+ const firstClickPromise = new Promise((resolve) => {
951
+ button.onclick = () => {
952
+ if (!firstClickResolved) {
953
+ firstClickResolved = true;
954
+ resolve(dialog); // Resolve the Promise
955
+ dialog.close(); // Close the dialog
956
+ }
957
+ };
958
+ });
959
+
960
+ // Assign the promise for chaining with `.then`
961
+ dialog.buttons[key] = firstClickPromise;
962
+ } else {
963
+ // Handle as a repeated event handler
964
+ let handlers = []; // Store handlers for `.then()`
965
+
966
+ const clickPromise = {
967
+ then: (callback) => {
968
+ if (typeof callback === 'function') {
969
+ handlers.push(callback); // Add to handlers
970
+ }
971
+ return clickPromise; // Allow chaining
972
+ },
973
+ };
974
+
975
+ button.onclick = () => {
976
+ handlers.forEach((handler) => handler(dialog)); // Call all registered handlers
977
+ };
978
+
979
+ dialog.buttons[key] = clickPromise; // Assign the "fake" promise
980
+ }
981
+
982
+ buttonContainer.appendChild(button);
983
+ buttonContainer.style.justifyContent = align;
984
+ });
985
+ };
986
+
987
+ const fetchAndInsertContent = async () => {
988
+ const originalCursor = document.body.style.cursor;
989
+ document.body.style.cursor = 'wait';
990
+ const dynamicContent = dialogElement.querySelector(".APX-dialog-dynamic-content");
991
+
992
+ try {
993
+ triggerEvent('contentLoading');
994
+ await dialog.lifecycle.contentLoading;
995
+
996
+ const contentHtml = contentURI
997
+ ? await fetchContent(contentURI)
998
+ : content;
999
+
1000
+ dynamicContent.innerHTML = contentHtml;
1001
+
1002
+ triggerEvent('contentLoaded');
1003
+ await dialog.lifecycle.contentLoaded;
1004
+ } catch (error) {
1005
+ console.error('Error loading content:', error);
1006
+ } finally {
1007
+ document.body.style.cursor = originalCursor;
1008
+ }
1009
+ };
1010
+
1011
+ const fetchContent = async (uri) => {
1012
+ const response = await fetch(uri);
1013
+ if (!response.ok) throw new Error(`Failed to fetch content: ${response.statusText}`);
1014
+ return response.text();
1015
+ };
1016
+
1017
+ // Initialize dialog
1018
+ setDialogSize();
1019
+ addButtons();
1020
+
1021
+ // Set title and close button handler
1022
+ dialogElement.querySelector(".APX-dialog-title").textContent = title;
1023
+ dialogElement.querySelector('.APX-close-dialog').onclick = dialog.close;
1024
+
1025
+ return dialog;
1026
+ };
1027
+
1028
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createDialog);
1029
+
1030
+
1031
+ /***/ }),
1032
+
1033
+ /***/ "./modules/listen/listen.mjs":
1034
+ /*!***********************************!*\
1035
+ !*** ./modules/listen/listen.mjs ***!
1036
+ \***********************************/
1037
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
1038
+
1039
+ __webpack_require__.r(__webpack_exports__);
1040
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1041
+ /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
1042
+ /* harmony export */ });
1043
+ let counter = 0;
1044
+ const doCallbacks = {};
1045
+ const timeouts = {};
1046
+
1047
+ /**
1048
+ * This function adds an event listener to the elements and returns an object with a do method to add callback functions.
1049
+ * @param {Object} apx - The apx object to augment with the listen function.
1050
+ * @returns {Object} - The augmented apx object.
1051
+ */
1052
+ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(apx) {
1053
+ let elements = apx.elements;
1054
+
1055
+ /**
1056
+ * Adds an event listener to the elements and returns an object with a do method to add callback functions.
1057
+ * @param {string} eventType - The type of event to listen for (e.g. 'click', 'keydown', etc.).
1058
+ * @param {string} [selector] - The CSS selector to use for event delegation (optional).
1059
+ * @returns {Object} - An object with a do method to add callback functions.
1060
+ * @example
1061
+ * apx.listen('click', '.my-button').do((event) => {
1062
+ * console.log('Button clicked!', event.target);
1063
+ * });
1064
+ */
1065
+ apx.listen = function (eventTypes, secondArgument, thirdArgument) {
1066
+ let selector;
1067
+ let options = {};
1068
+ // Determine if the second argument is a selector or options
1069
+ if (typeof secondArgument === 'string') {
1070
+ selector = secondArgument;
1071
+ options = thirdArgument || {};
1072
+ } else {
1073
+ options = secondArgument || {};
1074
+ }
1075
+
1076
+ const uniqueId = generateUniqueId();
1077
+ const timeoutDuration = options.timeout || 0;
1078
+
1079
+ if (!Array.isArray(eventTypes)) {
1080
+ eventTypes = [eventTypes]; // Ensure eventTypes is an array
1081
+ }
1082
+
1083
+ eventTypes.forEach((eventType) => {
1084
+ elements.forEach((element) => {
1085
+ element.addEventListener(eventType, (event) => {
1086
+ executeCallbacks(event, uniqueId, timeoutDuration, selector, element);
1087
+ });
1088
+ });
1089
+ });
1090
+
1091
+ return {
1092
+ /**
1093
+ * Adds a callback function to the doCallbacks object for the current event listener.
1094
+ * @param {Function} doCallback - The callback function to execute when the event is triggered.
1095
+ * @returns {Object} - Returns the current object to allow for chained calls.
1096
+ * @example
1097
+ * apx.listen('click', '.my-button').do((event) => {
1098
+ * console.log('Button clicked!', event.target);
1099
+ * }).do((event) => {
1100
+ * console.log('Another callback function!');
1101
+ * });
1102
+ */
1103
+ do: function (doCallback) {
1104
+ if (!doCallbacks[uniqueId]) {
1105
+ doCallbacks[uniqueId] = [];
1106
+ }
1107
+ doCallbacks[uniqueId].push(doCallback);
1108
+ return this; // Return the object to allow for chained calls
1109
+ },
1110
+ };
1111
+ };
1112
+
1113
+ /**
1114
+ * Manually triggers the registered callbacks for a given event type on all elements or creates a new event if a string is provided.
1115
+ * @param {string|Event} event - The event to trigger. This can be an event type string (like 'click') or an actual Event object.
1116
+ */
1117
+ apx.trigger = function (event) {
1118
+ let eventType;
1119
+ if (typeof event === 'string') {
1120
+ eventType = event;
1121
+ event = new Event(event, { bubbles: true, cancelable: true });
1122
+ } else if (event instanceof Event) {
1123
+ eventType = event.type;
1124
+ } else {
1125
+ console.error('Invalid event type provided to apx.trigger. It must be either a string or Event object.');
1126
+ return;
1127
+ }
1128
+
1129
+ apx.elements.forEach((element) => {
1130
+ element.dispatchEvent(event); // This will allow the event to bubble up naturally.
1131
+ });
1132
+
1133
+ // Handle event delegation manually by executing callbacks if the target matches the selector
1134
+ Object.keys(doCallbacks).forEach((uniqueId) => {
1135
+ const callbackDetails = doCallbacks[uniqueId];
1136
+ if (callbackDetails && callbackDetails.eventType === eventType) {
1137
+ // Check if the event target matches the selector used during listener registration
1138
+ const { selector } = callbackDetails;
1139
+ if (!selector || event.target.matches(selector)) {
1140
+ executeCallbacks(event, uniqueId, 0, selector, event.target); // Immediate execution, no timeout
1141
+ }
1142
+ }
1143
+ });
1144
+ };
1145
+
1146
+ return apx;
1147
+ };
1148
+
1149
+
1150
+ function executeCallbacks(event, uniqueId, timeoutDuration, selector = '', element) {
1151
+ const matchedElement = selector ? closest(event.target, selector) : element;
1152
+ if (!matchedElement) {
1153
+ return;
1154
+ }
1155
+
1156
+ // Clear any previous timeout for this uniqueId to prevent unintended behavior
1157
+ clearTimeout(timeouts[uniqueId]);
1158
+
1159
+ // Function to handle the execution of callbacks
1160
+ function handleCallbackExecution() {
1161
+ if (doCallbacks[uniqueId]) {
1162
+ doCallbacks[uniqueId].reduce((prevPromise, doCallback) => {
1163
+ return prevPromise.then(() => {
1164
+ return new Promise((resolve, reject) => {
1165
+ try {
1166
+ const result = doCallback.bind(matchedElement)(event);
1167
+ if (result instanceof Promise) {
1168
+ result.then(resolve).catch(reject);
1169
+ } else {
1170
+ resolve(result);
1171
+ }
1172
+ } catch (error) {
1173
+ reject(error);
1174
+ }
1175
+ });
1176
+ });
1177
+ }, Promise.resolve()).catch(error => {
1178
+ console.error('Error in callback chain:', error);
1179
+ });
1180
+ }
1181
+ }
1182
+
1183
+ // Check if timeoutDuration is zero to decide whether to delay the callback execution or not
1184
+ if (timeoutDuration === 0) {
1185
+ handleCallbackExecution();
1186
+ } else {
1187
+ timeouts[uniqueId] = setTimeout(handleCallbackExecution, timeoutDuration);
1188
+ }
1189
+ }
1190
+
1191
+
1192
+ function generateUniqueId() {
1193
+ const randomPart = Math.random().toString(36).substr(2, 9); // More randomness
1194
+ const uniqueId = `${Date.now()}_${randomPart}_${counter}`;
1195
+ counter = (counter + 1) % 1000; // Reset counter to avoid overflow
1196
+
1197
+ return uniqueId;
1198
+ }
1199
+
1200
+ function closest(element, selector) {
1201
+ while (element && element.nodeType === 1) {
1202
+ if (element.matches(selector)) {
1203
+ return element;
1204
+ }
1205
+ element = element.parentNode;
1206
+ }
1207
+ return null;
1208
+ }
1209
+
1210
+
1211
+ /***/ }),
1212
+
1213
+ /***/ "./modules/tristate/tristate.mjs":
1214
+ /*!***************************************!*\
1215
+ !*** ./modules/tristate/tristate.mjs ***!
1216
+ \***************************************/
1217
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
1218
+
1219
+ __webpack_require__.r(__webpack_exports__);
1220
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1221
+ /* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
1222
+ /* harmony export */ });
1223
+ /* harmony import */ var _css_tristate_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css/tristate.css */ "./modules/tristate/css/tristate.css");
1224
+
1225
+
1226
+ /**
1227
+ * Creates a tri-state checkbox for each checkbox element in the apx.elements array.
1228
+ * @param {Array<HTMLElement>} apx - An array of HTMLElements which is returned by APX()
1229
+ * @example
1230
+ * // Call the tristate function on an array of checkbox elements
1231
+ * apx.tristate();
1232
+ */
1233
+ /* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(apx) {
1234
+ apx.tristate = function (options = {}){
1235
+ apx.elements.forEach((element) => {
1236
+ if (element.type === 'checkbox') {
1237
+ const [originalCheckbox, tristateDom, hiddenInput] = createTriStateCheckbox(element,options);
1238
+ //If there is a "options.callbacks.after" callback in options call it
1239
+ if(options.callbacks && options.callbacks.after && typeof options.callbacks.after === 'function') {
1240
+ options.callbacks.after(originalCheckbox, tristateDom, hiddenInput);
1241
+ }
1242
+ }
1243
+ });
1244
+ }
1245
+ }
1246
+
1247
+ function toggleTriStateCheckboxState(customCheckbox, actualCheckbox, hiddenInput) {
1248
+ if (customCheckbox.classList.contains('checked')) {
1249
+ customCheckbox.classList.remove('checked');
1250
+ customCheckbox.classList.add('crossed');
1251
+ actualCheckbox.checked = false;
1252
+ hiddenInput.value = 'false';
1253
+ } else if (customCheckbox.classList.contains('crossed')) {
1254
+ customCheckbox.classList.remove('crossed');
1255
+ customCheckbox.classList.add('unchecked');
1256
+ hiddenInput.removeAttribute('name'); // Ensure the hidden input doesn't post any value
1257
+ hiddenInput.removeAttribute('value'); // Ensure the hidden input doesn't post any value
1258
+ } else {
1259
+ customCheckbox.classList.remove('unchecked');
1260
+ customCheckbox.classList.add('checked');
1261
+ actualCheckbox.checked = true;
1262
+ hiddenInput.value = 'true';
1263
+ hiddenInput.setAttribute('name', actualCheckbox.dataset.name); // Restore the name for posting
1264
+ }
1265
+ }
1266
+
1267
+ function createTriStateCheckbox(checkboxElement, options) {
1268
+
1269
+ //get the checkbox margins including browser default
1270
+ const checkboxStyle = window.getComputedStyle(checkboxElement);
1271
+ // Hide the original checkbox
1272
+ checkboxElement.style.display = 'none';
1273
+
1274
+ // Create the custom checkbox div and set its initial state
1275
+ const tristateDom = document.createElement('div');
1276
+ tristateDom.classList.add('apx-tristate');
1277
+ if (options.size) {
1278
+ if (options.size.width) {
1279
+ tristateDom.style.width = options.size.width + 'px';
1280
+ }
1281
+ if (options.size.height) {
1282
+ tristateDom.style.height = options.size.height + 'px';
1283
+ }
1284
+ }
1285
+ if(options.classes) tristateDom.classList.add(...computeClasses(options.classes));
1286
+
1287
+ tristateDom.style.margin = checkboxStyle.margin;
1288
+
1289
+ if (checkboxElement.checked) {
1290
+ tristateDom.classList.add('checked');
1291
+ } else {
1292
+ tristateDom.classList.add('unchecked');
1293
+ }
1294
+
1295
+ // Create the hidden input field
1296
+ const hiddenInput = document.createElement('input');
1297
+ hiddenInput.type = 'hidden';
1298
+ hiddenInput.name = checkboxElement.name; // Copy the name from the original checkbox
1299
+ checkboxElement.dataset.name = checkboxElement.name; // Store the name in a data attribute for later use
1300
+ checkboxElement.removeAttribute('name'); // Remove the name from the original checkbox to avoid double posting
1301
+
1302
+ if (options.defaultState) setDefaultState(options, tristateDom, hiddenInput);
1303
+ else{
1304
+ // Set the initial value for the hidden input based on the checkbox's state
1305
+ if (checkboxElement.checked) {
1306
+ hiddenInput.value = 'true';
1307
+ } else {
1308
+ hiddenInput.name = ''; // Ensure the hidden input doesn't post any value
1309
+ hiddenInput.value = '';
1310
+ }
1311
+ }
1312
+
1313
+ //handle accessibility, set the tabindex to the same as the checkbox
1314
+ tristateDom.tabIndex = checkboxElement.tabIndex;
1315
+
1316
+ // Insert the hidden input inside the custom checkbox div
1317
+ tristateDom.appendChild(hiddenInput);
1318
+
1319
+ // Insert it next to the actual checkbox
1320
+ checkboxElement.parentNode.insertBefore(tristateDom, checkboxElement.nextSibling);
1321
+
1322
+ // Add event listener
1323
+ tristateDom.addEventListener('click', function (e) {
1324
+ toggleTriStateCheckboxState(tristateDom, checkboxElement, hiddenInput);
1325
+ bubbleEventsToOriginalCheckbox(options, checkboxElement, tristateDom, hiddenInput, e);
1326
+ });
1327
+ tristateDom.addEventListener('keyup', onkeyup.bind(null, checkboxElement));
1328
+
1329
+ return [checkboxElement, tristateDom, hiddenInput];
1330
+ }
1331
+
1332
+ function setDefaultState(options, tristateDom, hiddenInput) {
1333
+ //for all values possible for defaultState, set the initial state of the checkbox
1334
+ if (options.defaultState === 'checked') {
1335
+ tristateDom.classList.remove('unchecked');
1336
+ tristateDom.classList.add('checked');
1337
+ hiddenInput.value = 'true';
1338
+ }
1339
+ else if (options.defaultState === 'unchecked') {
1340
+ tristateDom.classList.remove('checked');
1341
+ tristateDom.classList.add('unchecked');
1342
+ hiddenInput.removeAttribute('name'); // Ensure the hidden input doesn't post any value
1343
+ hiddenInput.removeAttribute('value'); // Ensure the hidden input doesn't post any value
1344
+ }
1345
+ else if (options.defaultState === 'crossed') {
1346
+ tristateDom.classList.remove('checked');
1347
+ tristateDom.classList.add('crossed');
1348
+ hiddenInput.value = 'false';
1349
+ }
1350
+ }
1351
+
1352
+ function computeClasses(classes) {
1353
+ let computedClasses = [];
1354
+ if(typeof classes === 'string') {
1355
+ //replace multiple white spaces with a single space
1356
+ classes = classes.replace(/\s\s+/g, ' ');
1357
+ if(classes.indexOf(' ') > -1)
1358
+ computedClasses = classes.split(' ');
1359
+ else if(classes.indexOf(',') > -1)
1360
+ computedClasses = classes.split(',');
1361
+ else
1362
+ computedClasses = [classes];
1363
+ }
1364
+ else if(Array.isArray(classes)) {
1365
+ computedClasses = classes;
1366
+ }
1367
+ return computedClasses;
1368
+ }
1369
+
1370
+ function bubbleEventsToOriginalCheckbox(options, checkboxElement, tristateDom, hiddenInput, event) {
1371
+ //if options.callbacks.change is set, call it
1372
+ if(options.callbacks && options.callbacks.change && typeof options.callbacks.change === 'function') {
1373
+ options.callbacks.change(checkboxElement, tristateDom, hiddenInput);
1374
+ }
1375
+
1376
+ if(!options.bubbleEvents) return;
1377
+
1378
+ if(event.type === 'click') {
1379
+ checkboxElement.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true }));
1380
+ }
1381
+ else if(event.type === 'keyup') {
1382
+ checkboxElement.dispatchEvent(new KeyboardEvent('keyup', { key: ' ', bubbles: true, cancelable: true }));
1383
+ }
1384
+ else if(event.type === 'change') {
1385
+ checkboxElement.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
1386
+ }
1387
+ }
1388
+
1389
+ function onkeyup(checkboxElement, event) {
1390
+ if (event.keyCode === 32) {
1391
+ bubbleEventsToOriginalCheckbox(checkboxElement, event);
1392
+ event.preventDefault();
1393
+ event.target.click();
1394
+ }
1395
+ }
1396
+
1397
+ /***/ })
1398
+
1399
+ /******/ });
1400
+ /************************************************************************/
1401
+ /******/ // The module cache
1402
+ /******/ var __webpack_module_cache__ = {};
1403
+ /******/
1404
+ /******/ // The require function
1405
+ /******/ function __webpack_require__(moduleId) {
1406
+ /******/ // Check if module is in cache
1407
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
1408
+ /******/ if (cachedModule !== undefined) {
1409
+ /******/ return cachedModule.exports;
1410
+ /******/ }
1411
+ /******/ // Create a new module (and put it into the cache)
1412
+ /******/ var module = __webpack_module_cache__[moduleId] = {
1413
+ /******/ id: moduleId,
1414
+ /******/ // no module.loaded needed
1415
+ /******/ exports: {}
1416
+ /******/ };
1417
+ /******/
1418
+ /******/ // Execute the module function
1419
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1420
+ /******/
1421
+ /******/ // Return the exports of the module
1422
+ /******/ return module.exports;
1423
+ /******/ }
1424
+ /******/
1425
+ /******/ // expose the modules object (__webpack_modules__)
1426
+ /******/ __webpack_require__.m = __webpack_modules__;
1427
+ /******/
1428
+ /************************************************************************/
1429
+ /******/ /* webpack/runtime/compat get default export */
1430
+ /******/ (() => {
1431
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
1432
+ /******/ __webpack_require__.n = (module) => {
1433
+ /******/ var getter = module && module.__esModule ?
1434
+ /******/ () => (module['default']) :
1435
+ /******/ () => (module);
1436
+ /******/ __webpack_require__.d(getter, { a: getter });
1437
+ /******/ return getter;
1438
+ /******/ };
1439
+ /******/ })();
1440
+ /******/
1441
+ /******/ /* webpack/runtime/define property getters */
1442
+ /******/ (() => {
1443
+ /******/ // define getter functions for harmony exports
1444
+ /******/ __webpack_require__.d = (exports, definition) => {
1445
+ /******/ for(var key in definition) {
1446
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
1447
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
1448
+ /******/ }
1449
+ /******/ }
1450
+ /******/ };
1451
+ /******/ })();
1452
+ /******/
1453
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
1454
+ /******/ (() => {
1455
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
1456
+ /******/ })();
1457
+ /******/
1458
+ /******/ /* webpack/runtime/make namespace object */
1459
+ /******/ (() => {
1460
+ /******/ // define __esModule on exports
1461
+ /******/ __webpack_require__.r = (exports) => {
1462
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
1463
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1464
+ /******/ }
1465
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
1466
+ /******/ };
1467
+ /******/ })();
1468
+ /******/
1469
+ /******/ /* webpack/runtime/jsonp chunk loading */
1470
+ /******/ (() => {
1471
+ /******/ __webpack_require__.b = document.baseURI || self.location.href;
1472
+ /******/
1473
+ /******/ // object to store loaded and loading chunks
1474
+ /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
1475
+ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
1476
+ /******/ var installedChunks = {
1477
+ /******/ "main": 0
1478
+ /******/ };
1479
+ /******/
1480
+ /******/ // no chunk on demand loading
1481
+ /******/
1482
+ /******/ // no prefetching
1483
+ /******/
1484
+ /******/ // no preloaded
1485
+ /******/
1486
+ /******/ // no HMR
1487
+ /******/
1488
+ /******/ // no HMR manifest
1489
+ /******/
1490
+ /******/ // no on chunks loaded
1491
+ /******/
1492
+ /******/ // no jsonp function
1493
+ /******/ })();
1494
+ /******/
1495
+ /******/ /* webpack/runtime/nonce */
1496
+ /******/ (() => {
1497
+ /******/ __webpack_require__.nc = undefined;
1498
+ /******/ })();
1499
+ /******/
1500
+ /************************************************************************/
1501
+ var __webpack_exports__ = {};
1502
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
1503
+ (() => {
1504
+ /*!*****************!*\
1505
+ !*** ./APX.mjs ***!
1506
+ \*****************/
1507
+ __webpack_require__.r(__webpack_exports__);
1508
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1509
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1510
+ /* harmony export */ });
1511
+ /* harmony import */ var _modules_listen_listen_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/listen/listen.mjs */ "./modules/listen/listen.mjs");
1512
+ /* harmony import */ var _modules_tristate_tristate_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/tristate/tristate.mjs */ "./modules/tristate/tristate.mjs");
1513
+ /* harmony import */ var _modules_dialog_dialog_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/dialog/dialog.mjs */ "./modules/dialog/dialog.mjs");
1514
+ /* harmony import */ var _modules_common_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/common.mjs */ "./modules/common.mjs");
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+ /**
1521
+ * Creates an APX object that wraps one or more HTML elements.
1522
+ * @param {string|HTMLElement|NodeList|HTMLCollection|Array<HTMLElement>|jQuery|Function} input - The input to create the APX object from.
1523
+ * @returns {Object} The APX object.
1524
+ * @throws {Error} If the input type is invalid.
1525
+ * @example
1526
+ * // XPath
1527
+ * const apx1 = APX('//div[@class="example"]');
1528
+ *
1529
+ * // CSS selector
1530
+ * const apx2 = APX('.example');
1531
+ *
1532
+ * // Single element
1533
+ * const element = document.querySelector('.example');
1534
+ * const apx3 = APX(element);
1535
+ *
1536
+ * // NodeList or HTMLCollection
1537
+ * const nodeList = document.querySelectorAll('.example');
1538
+ * const apx4 = APX(nodeList);
1539
+ *
1540
+ * // Array of elements
1541
+ * const elements = [document.querySelector('.example1'), document.querySelector('.example2')];
1542
+ * const apx5 = APX(elements);
1543
+ *
1544
+ * // jQuery object
1545
+ * const $example = $('.example');
1546
+ * const apx6 = APX($example);
1547
+ *
1548
+ * // Function returning an APX object
1549
+ * const apx7 = APX(() => APX('.example'));
1550
+ */
1551
+ const APX = function (input, context = document) {
1552
+ let elements;
1553
+
1554
+ // Validate context
1555
+ if (typeof context === 'string') {
1556
+ context = document.querySelector(context);
1557
+ }
1558
+ else if (APX.isAPXObject(context)) {
1559
+ context = context.first();
1560
+ } else if (!(context instanceof HTMLElement || context instanceof Document)) {
1561
+ throw new Error('Invalid context for APX');
1562
+ }
1563
+
1564
+ if (typeof input === 'string' && input.startsWith('//')) {
1565
+ // XPath with context
1566
+ elements = document.evaluate(input, context, null, XPathResult.ANY_TYPE, null);
1567
+ let nodes = [];
1568
+ let node = elements.iterateNext();
1569
+ while (node) {
1570
+ nodes.push(node);
1571
+ node = elements.iterateNext();
1572
+ }
1573
+ elements = nodes;
1574
+ } else if (typeof input === 'string') {
1575
+ // CSS selector with context
1576
+ elements = context.querySelectorAll(input);
1577
+ } else if (input instanceof HTMLElement) {
1578
+ // Single element within context
1579
+ elements = context.contains(input) ? [input] : [];
1580
+ } else if (input instanceof NodeList || input instanceof HTMLCollection) {
1581
+ // NodeList or HTMLCollection within context
1582
+ elements = Array.from(input).filter(el => context.contains(el));
1583
+ } else if (Array.isArray(input) && input.every(el => el instanceof HTMLElement)) {
1584
+ // Array of elements within context
1585
+ elements = input.filter(el => context.contains(el));
1586
+ } else if (typeof jQuery != 'undefined' && input instanceof jQuery) {
1587
+ // jQuery object within context
1588
+ elements = Array.from(input.get()).filter(el => context.contains(el));
1589
+ } else if (typeof input === 'function') {
1590
+ // Function returning an APX object with context
1591
+ elements = APX(input(), context);
1592
+ } else {
1593
+ throw new Error('Invalid input type for APX');
1594
+ }
1595
+
1596
+ var apx = {
1597
+ elements: elements,
1598
+ _isAPXObject: true
1599
+ };
1600
+ apx.length = elements.length;
1601
+ apx.each = function (callback) {
1602
+ if (this.elements instanceof Array) this.elements.forEach(callback);
1603
+ if (this.elements instanceof NodeList) Array.from(this.elements).forEach(callback);
1604
+ return this;
1605
+ };
1606
+ apx.get = function (index) {
1607
+ return this.elements[index];
1608
+ };
1609
+ apx.all = function () {
1610
+ if (this.elements instanceof Array) return this.elements;
1611
+ if (this.elements instanceof NodeList) return Array.from(this.elements);
1612
+ return this;
1613
+ };
1614
+ apx.first = function () {
1615
+ return this.get(0);
1616
+ };
1617
+ (0,_modules_listen_listen_mjs__WEBPACK_IMPORTED_MODULE_0__["default"])(apx);
1618
+ (0,_modules_tristate_tristate_mjs__WEBPACK_IMPORTED_MODULE_1__["default"])(apx);
1619
+ return apx;
1620
+ };
1621
+
1622
+ APX.loadCss = _modules_common_mjs__WEBPACK_IMPORTED_MODULE_3__.loadCss;
1623
+ APX.dialog = _modules_dialog_dialog_mjs__WEBPACK_IMPORTED_MODULE_2__["default"];
1624
+ APX.isAPXObject = function (obj) {
1625
+ return obj && obj._isAPXObject === true;
1626
+ }
1627
+ APX.is_numeric = (n) => {
1628
+ return !isNaN(n - parseFloat(n));
1629
+ }
1630
+
1631
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (APX);
1632
+ })();
1633
+
1634
+ var __webpack_exports__default = __webpack_exports__["default"];
1635
+ export { __webpack_exports__default as default };
1636
+
1637
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBYLmRldi5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ2dIO0FBQ2pCO0FBQy9GLDhCQUE4QixtRkFBMkIsQ0FBQyw0RkFBcUM7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxXQUFXO0FBQ1gsQ0FBQyxPQUFPLHVHQUF1RyxNQUFNLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sTUFBTSxVQUFVLFlBQVksV0FBVyxPQUFPLFlBQVksU0FBUyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLFFBQVEsWUFBWSxhQUFhLFdBQVcsT0FBTyxZQUFZLE1BQU0sWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLE9BQU8sWUFBWSxNQUFNLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssc0JBQXNCLHVCQUF1QiwrREFBK0Qsc0JBQXNCLHdCQUF3QixzQkFBc0IsZ0JBQWdCLGVBQWUsb0JBQW9CLHFCQUFxQix1QkFBdUIsNkNBQTZDLHdEQUF3RCw2QkFBNkIsa0NBQWtDLHNCQUFzQixxQkFBcUIsb0JBQW9CLHlCQUF5Qix1QkFBdUIscUJBQXFCLDJCQUEyQixvREFBb0QseURBQXlELEtBQUssNEJBQTRCLHFCQUFxQixLQUFLLDJCQUEyQixvQkFBb0IscUJBQXFCLHdCQUF3QiwwQkFBMEIsNERBQTRELEtBQUssNkRBQTZELG9CQUFvQixpRUFBaUUsS0FBSyxtT0FBbU8sb0JBQW9CLHNCQUFzQiw0QkFBNEIsK0JBQStCLDJCQUEyQix5REFBeUQsd0JBQXdCLCtCQUErQixzQ0FBc0MsS0FBSyw2TkFBNk4sOEJBQThCLG1EQUFtRCxLQUFLLDJFQUEyRSxrQ0FBa0MsdUJBQXVCLHFCQUFxQiwyQkFBMkIsMkJBQTJCLHdCQUF3Qix3QkFBd0IsMENBQTBDLEtBQUssbURBQW1ELGtDQUFrQyxLQUFLLHNDQUFzQyxzQkFBc0Isa0JBQWtCLHVCQUF1QiwwQ0FBMEMsa0VBQWtFLHNCQUFzQixnQ0FBZ0MsNEJBQTRCLHNCQUFzQixvQkFBb0IsS0FBSywrQ0FBK0Msb0JBQW9CLG9CQUFvQixxQkFBcUIsa0NBQWtDLHNDQUFzQywyQkFBMkIsc0RBQXNELEtBQUssb0NBQW9DLGFBQWEsMEJBQTBCLGVBQWUsNEJBQTRCLEtBQUssbUJBQW1CO0FBQ2hoSTtBQUNBLGlFQUFlLHVCQUF1QixFQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1SHZDO0FBQ2dIO0FBQ2pCO0FBQ087QUFDdEcsNENBQTRDLHlzQ0FBbWxCO0FBQy9uQiw0Q0FBNEMsaS9CQUF1ZTtBQUNuaEIsNENBQTRDLG13Q0FBZ25CO0FBQzVwQiw4QkFBOEIsbUZBQTJCLENBQUMsNEZBQXFDO0FBQy9GLHlDQUF5QyxzRkFBK0I7QUFDeEUseUNBQXlDLHNGQUErQjtBQUN4RSx5Q0FBeUMsc0ZBQStCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsbUNBQW1DO0FBQy9EO0FBQ0E7QUFDQSw0QkFBNEIsbUNBQW1DO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1DQUFtQztBQUMvRDtBQUNBO0FBQ0EsQ0FBQyxPQUFPLG9HQUFvRyxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLE1BQU0sS0FBSyxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxNQUFNLEtBQUssYUFBYSxjQUFjLGFBQWEseUNBQXlDLDhCQUE4QiwrQkFBK0IsMkJBQTJCLHdCQUF3QiwyQkFBMkIsdUJBQXVCLHdCQUF3QixpQ0FBaUMsZ0NBQWdDLDBCQUEwQixLQUFLLDZCQUE2QixrbUJBQWttQixLQUFLLDJCQUEyQixzZkFBc2YscUNBQXFDLG9DQUFvQyxLQUFLLDJCQUEyQiwrbkJBQStuQixxQ0FBcUMsb0NBQW9DLEtBQUssbUJBQW1CO0FBQ2xvRjtBQUNBLGlFQUFlLHVCQUF1QixFQUFDOzs7Ozs7Ozs7OztBQ3RDMUI7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQSxxRkFBcUY7QUFDckY7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGlCQUFpQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIscUJBQXFCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLHNGQUFzRixxQkFBcUI7QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLGlEQUFpRCxxQkFBcUI7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLHNEQUFzRCxxQkFBcUI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQ3BGYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FDekJhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsY0FBYztBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FDZkE7QUFDQSxvSUFBb0k7QUFDcEk7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0ZBLE1BQXFHO0FBQ3JHLE1BQTJGO0FBQzNGLE1BQWtHO0FBQ2xHLE1BQXFIO0FBQ3JILE1BQThHO0FBQzlHLE1BQThHO0FBQzlHLE1BQTBHO0FBQzFHO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCLHFHQUFtQjtBQUMvQyx3QkFBd0Isa0hBQWE7O0FBRXJDLHVCQUF1Qix1R0FBYTtBQUNwQztBQUNBLGlCQUFpQiwrRkFBTTtBQUN2Qiw2QkFBNkIsc0dBQWtCOztBQUUvQyxhQUFhLDBHQUFHLENBQUMsdUZBQU87Ozs7QUFJb0Q7QUFDNUUsT0FBTyxpRUFBZSx1RkFBTyxJQUFJLHVGQUFPLFVBQVUsdUZBQU8sbUJBQW1CLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekI3RSxNQUFxRztBQUNyRyxNQUEyRjtBQUMzRixNQUFrRztBQUNsRyxNQUFxSDtBQUNySCxNQUE4RztBQUM5RyxNQUE4RztBQUM5RyxNQUE0RztBQUM1RztBQUNBOztBQUVBOztBQUVBLDRCQUE0QixxR0FBbUI7QUFDL0Msd0JBQXdCLGtIQUFhOztBQUVyQyx1QkFBdUIsdUdBQWE7QUFDcEM7QUFDQSxpQkFBaUIsK0ZBQU07QUFDdkIsNkJBQTZCLHNHQUFrQjs7QUFFL0MsYUFBYSwwR0FBRyxDQUFDLHlGQUFPOzs7O0FBSXNEO0FBQzlFLE9BQU8saUVBQWUseUZBQU8sSUFBSSx5RkFBTyxVQUFVLHlGQUFPLG1CQUFtQixFQUFDOzs7Ozs7Ozs7OztBQzFCaEU7O0FBRWI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHdCQUF3QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw0QkFBNEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw2QkFBNkI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUNuRmE7O0FBRWI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FDakNhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUNUYTs7QUFFYjtBQUNBO0FBQ0EsY0FBYyxLQUF3QyxHQUFHLHNCQUFpQixHQUFHLENBQUk7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQ1RhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FDNURhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkQTtBQUMwQjtBQUMwQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxrRUFBa0UsSUFBSTtBQUNsRjtBQUNBO0FBQ0Esd0JBQXdCLHVEQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsbUVBQW1FLE1BQU07QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQ0FBaUM7QUFDdEQsc0JBQXNCLGlDQUFpQztBQUN2RCxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixnRUFBZ0U7QUFDM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLDRDQUE0QztBQUM1QztBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLDZDQUE2QztBQUM3QyxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFLG9CQUFvQjtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWUsWUFBWSxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNsTjVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQSw2QkFBZSxvQ0FBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsVUFBVTtBQUNqQyx5QkFBeUIsUUFBUTtBQUNqQztBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsaUNBQWlDO0FBQ3hFLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsV0FBVztBQUNuQztBQUNBLG1GQUFtRjtBQUNuRjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEUsd0JBQXdCLFdBQVcsR0FBRyxXQUFXLEdBQUcsUUFBUTtBQUM1RCxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNySzRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQWUsb0NBQVU7QUFDekIseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0MsOENBQThDO0FBQzlDLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLHlEQUF5RDtBQUN6RCw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3Qyw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxpQ0FBaUM7QUFDakc7QUFDQTtBQUNBLG1FQUFtRSwyQ0FBMkM7QUFDOUc7QUFDQTtBQUNBLDREQUE0RCxpQ0FBaUM7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztTQzNLQTtTQUNBOztTQUVBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBOztTQUVBO1NBQ0E7O1NBRUE7U0FDQTtTQUNBOztTQUVBO1NBQ0E7Ozs7O1VDekJBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQSxpQ0FBaUMsV0FBVztVQUM1QztVQUNBOzs7OztVQ1BBO1VBQ0E7VUFDQTtVQUNBO1VBQ0EseUNBQXlDLHdDQUF3QztVQUNqRjtVQUNBO1VBQ0E7Ozs7O1VDUEE7Ozs7O1VDQUE7VUFDQTtVQUNBO1VBQ0EsdURBQXVELGlCQUFpQjtVQUN4RTtVQUNBLGdEQUFnRCxhQUFhO1VBQzdEOzs7OztVQ05BOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTs7VUFFQTs7VUFFQTs7VUFFQTs7VUFFQTs7VUFFQTs7VUFFQTs7Ozs7VUNyQkE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0E0RDtBQUNNO0FBQ2pCO0FBQ0Y7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsV0FBVywrRUFBK0U7QUFDMUYsYUFBYSxRQUFRO0FBQ3JCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksc0VBQWlCO0FBQ3JCLElBQUksMEVBQW1CO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsd0RBQU87QUFDckIsYUFBYSxrRUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLEdBQUcsRSIsInNvdXJjZXMiOlsid2VicGFjazovL0BhcHBpdXMtZnIvYXB4Ly4vbW9kdWxlcy9kaWFsb2cvY3NzL2RpYWxvZy5jc3MiLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvLi9tb2R1bGVzL3RyaXN0YXRlL2Nzcy90cmlzdGF0ZS5jc3MiLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL0BhcHBpdXMtZnIvYXB4Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL0BhcHBpdXMtZnIvYXB4Ly4vbW9kdWxlcy9kaWFsb2cvaHRtbC9kaWFsb2cuaHRtbCIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC8uL21vZHVsZXMvZGlhbG9nL2Nzcy9kaWFsb2cuY3NzP2E1NjciLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvLi9tb2R1bGVzL3RyaXN0YXRlL2Nzcy90cmlzdGF0ZS5jc3M/YTA5NCIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcyIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL0BhcHBpdXMtZnIvYXB4Ly4vbW9kdWxlcy9jb21tb24ubWpzIiwid2VicGFjazovL0BhcHBpdXMtZnIvYXB4Ly4vbW9kdWxlcy9kaWFsb2cvZGlhbG9nLm1qcyIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC8uL21vZHVsZXMvbGlzdGVuL2xpc3Rlbi5tanMiLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvLi9tb2R1bGVzL3RyaXN0YXRlL3RyaXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGFwcGl1cy1mci9hcHgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhcHBpdXMtZnIvYXB4L3dlYnBhY2svcnVudGltZS9qc29ucCBjaHVuayBsb2FkaW5nIiwid2VicGFjazovL0BhcHBpdXMtZnIvYXB4L3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AYXBwaXVzLWZyL2FweC8uL0FQWC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qIERpYWxvZyBzdHlsaW5nICovXHJcbi5BUFgtZGlhbG9nIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB6LWluZGV4OiAxMDAyO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHRvcDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNCk7XHJcbiAgICAvKiBEaW1tZWQgYmFja2dyb3VuZCBmb3IgZm9jdXMgb24gZGlhbG9nICovXHJcbn1cclxuXHJcbi5BUFgtZGlhbG9nLWNvbnRlbnQge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTtcclxuICAgIHBhZGRpbmc6IDQwcHg7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICB3aWR0aDogYXV0bztcclxuICAgIG1pbi13aWR0aDogMzAwcHg7XHJcbiAgICBtYXgtd2lkdGg6IDgwJTtcclxuICAgIG1hcmdpbjogYXV0bztcclxuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcclxuICAgIGJveC1zaGFkb3c6IDBweCA2cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XHJcbiAgICBmb250LWZhbWlseTogJ0hlbHZldGljYSBOZXVlJywgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbn1cclxuXHJcbmgyLkFQWC1kaWFsb2ctdGl0bGV7XHJcbiAgICBtYXJnaW4tdG9wOjA7XHJcbn1cclxuXHJcbi5BUFgtY2xvc2UtZGlhbG9nIHtcclxuICAgIGNvbG9yOiAjYWFhO1xyXG4gICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgZm9udC1zaXplOiAyNHB4O1xyXG4gICAgbWFyZ2luLXRvcDogLTEwcHg7XHJcbiAgICAvKiBBZGp1c3QgcG9zaXRpb25pbmcgKi9cclxuICAgIG1hcmdpbi1yaWdodDogLTEwcHg7XHJcbn1cclxuXHJcbi5BUFgtY2xvc2UtZGlhbG9nOmhvdmVyLFxyXG4uQVBYLWNsb3NlLWRpYWxvZzpmb2N1cyB7XHJcbiAgICBjb2xvcjogIzMzMztcclxuICAgIC8qIERhcmtlciBjb2xvciBvbiBob3Zlci9mb2N1cyAqL1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG59XHJcblxyXG4vKiBJbnB1dCBmaWVsZHMgc3R5bGluZyAqL1xyXG4uQVBYLWRpYWxvZy1jb250ZW50IGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxyXG4uQVBYLWRpYWxvZy1jb250ZW50IGlucHV0W3R5cGU9XCJudW1iZXJcIl0sXHJcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cImRhdGVcIl0sXHJcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgcGFkZGluZzogMTBweDtcclxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEFyaWFsLCBzYW5zLXNlcmlmO1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzO1xyXG59XHJcblxyXG4uQVBYLWRpYWxvZy1jb250ZW50IGlucHV0W3R5cGU9XCJ0ZXh0XCJdOmZvY3VzLFxyXG4uQVBYLWRpYWxvZy1jb250ZW50IGlucHV0W3R5cGU9XCJudW1iZXJcIl06Zm9jdXMsXHJcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cImRhdGVcIl06Zm9jdXMsXHJcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdOmZvY3VzIHtcclxuICAgIGJvcmRlci1jb2xvcjogIzJDM0U1MDtcclxuICAgIC8qIERlZXAgQmx1ZSBDb2xvciAqL1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxufVxyXG5cclxuLyogQnV0dG9uIGluIHRoZSBkaWFsb2cgKi9cclxuLkFQWC1kaWFsb2ctYnV0dG9uLWNvbnRhaW5lciBidXR0b24ge1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzJDM0U1MDtcclxuICAgIGNvbG9yOiAjRUNGMEYxO1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xyXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzO1xyXG59XHJcblxyXG4uQVBYLWRpYWxvZy1idXR0b24tY29udGFpbmVyIGJ1dHRvbjpob3ZlciB7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQ0OTVFO1xyXG59XHJcblxyXG4uQVBYLWRpYWxvZy1idXR0b24tY29udGFpbmVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBnYXA6IDEwcHg7XHJcbiAgICBtYXJnaW4tdG9wOjFlbTtcclxuICAgIC8qIHNwYWNpbmcgYmV0d2VlbiBidXR0b25zICovXHJcbn1cclxuXHJcbi8qIExvYWRpbmcgaW5kaWNhdG9yICovXHJcbi5BUFgtZGlhbG9nLWxvYWRpbmctaW5kaWNhdG9yIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBoZWlnaHQ6IDEwMHB4O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi5BUFgtZGlhbG9nLWxvYWRpbmctaW5kaWNhdG9yOjpiZWZvcmUge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICB3aWR0aDogNDBweDtcclxuICAgIGhlaWdodDogNDBweDtcclxuICAgIGJvcmRlcjogNHB4IHNvbGlkICNmM2YzZjM7XHJcbiAgICBib3JkZXItdG9wOiA0cHggc29saWQgIzJDM0U1MDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgIGFuaW1hdGlvbjogQVBYLWRpYWxvZy1zcGluIDFzIGxpbmVhciBpbmZpbml0ZTtcclxufVxyXG5cclxuQGtleWZyYW1lcyBBUFgtZGlhbG9nLXNwaW4ge1xyXG4gICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxyXG4gICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cclxufWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbW9kdWxlcy9kaWFsb2cvY3NzL2RpYWxvZy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUEsbUJBQW1CO0FBQ25CO0lBQ0ksYUFBYTtJQUNiLGVBQWU7SUFDZixhQUFhO0lBQ2IsT0FBTztJQUNQLE1BQU07SUFDTixXQUFXO0lBQ1gsWUFBWTtJQUNaLGNBQWM7SUFDZCxvQ0FBb0M7SUFDcEMsMENBQTBDO0FBQzlDOztBQUVBO0lBQ0kseUJBQXlCO0lBQ3pCLGFBQWE7SUFDYixZQUFZO0lBQ1osV0FBVztJQUNYLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQiwyQ0FBMkM7SUFDM0MsZ0RBQWdEO0FBQ3BEOztBQUVBO0lBQ0ksWUFBWTtBQUNoQjs7QUFFQTtJQUNJLFdBQVc7SUFDWCxZQUFZO0lBQ1osZUFBZTtJQUNmLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsbUJBQW1CO0FBQ3ZCOztBQUVBOztJQUVJLFdBQVc7SUFDWCxnQ0FBZ0M7SUFDaEMsZUFBZTtBQUNuQjs7QUFFQSx5QkFBeUI7QUFDekI7Ozs7SUFJSSxXQUFXO0lBQ1gsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLGdEQUFnRDtJQUNoRCxlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLDZCQUE2QjtBQUNqQzs7QUFFQTs7OztJQUlJLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsYUFBYTtBQUNqQjs7QUFFQSx5QkFBeUI7QUFDekI7SUFDSSx5QkFBeUI7SUFDekIsY0FBYztJQUNkLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixlQUFlO0lBQ2YsaUNBQWlDO0FBQ3JDOztBQUVBO0lBQ0kseUJBQXlCO0FBQzdCOztBQUVBO0lBQ0ksYUFBYTtJQUNiLFNBQVM7SUFDVCxjQUFjO0lBQ2QsNEJBQTRCO0FBQ2hDOztBQUVBLHNCQUFzQjtBQUN0QjtJQUNJLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixXQUFXO0FBQ2Y7O0FBRUE7SUFDSSxXQUFXO0lBQ1gsV0FBVztJQUNYLFlBQVk7SUFDWix5QkFBeUI7SUFDekIsNkJBQTZCO0lBQzdCLGtCQUFrQjtJQUNsQiw2Q0FBNkM7QUFDakQ7O0FBRUE7SUFDSSxLQUFLLHVCQUF1QixFQUFFO0lBQzlCLE9BQU8seUJBQXlCLEVBQUU7QUFDdENcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyogRGlhbG9nIHN0eWxpbmcgKi9cXHJcXG4uQVBYLWRpYWxvZyB7XFxyXFxuICAgIGRpc3BsYXk6IG5vbmU7XFxyXFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gICAgei1pbmRleDogMTAwMjtcXHJcXG4gICAgbGVmdDogMDtcXHJcXG4gICAgdG9wOiAwO1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG4gICAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgICBvdmVyZmxvdzogYXV0bztcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjQpO1xcclxcbiAgICAvKiBEaW1tZWQgYmFja2dyb3VuZCBmb3IgZm9jdXMgb24gZGlhbG9nICovXFxyXFxufVxcclxcblxcclxcbi5BUFgtZGlhbG9nLWNvbnRlbnQge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xcclxcbiAgICBwYWRkaW5nOiA0MHB4O1xcclxcbiAgICBib3JkZXI6IG5vbmU7XFxyXFxuICAgIHdpZHRoOiBhdXRvO1xcclxcbiAgICBtaW4td2lkdGg6IDMwMHB4O1xcclxcbiAgICBtYXgtd2lkdGg6IDgwJTtcXHJcXG4gICAgbWFyZ2luOiBhdXRvO1xcclxcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XFxyXFxuICAgIGJveC1zaGFkb3c6IDBweCA2cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxyXFxuICAgIGZvbnQtZmFtaWx5OiAnSGVsdmV0aWNhIE5ldWUnLCBBcmlhbCwgc2Fucy1zZXJpZjtcXHJcXG59XFxyXFxuXFxyXFxuaDIuQVBYLWRpYWxvZy10aXRsZXtcXHJcXG4gICAgbWFyZ2luLXRvcDowO1xcclxcbn1cXHJcXG5cXHJcXG4uQVBYLWNsb3NlLWRpYWxvZyB7XFxyXFxuICAgIGNvbG9yOiAjYWFhO1xcclxcbiAgICBmbG9hdDogcmlnaHQ7XFxyXFxuICAgIGZvbnQtc2l6ZTogMjRweDtcXHJcXG4gICAgbWFyZ2luLXRvcDogLTEwcHg7XFxyXFxuICAgIC8qIEFkanVzdCBwb3NpdGlvbmluZyAqL1xcclxcbiAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4O1xcclxcbn1cXHJcXG5cXHJcXG4uQVBYLWNsb3NlLWRpYWxvZzpob3ZlcixcXHJcXG4uQVBYLWNsb3NlLWRpYWxvZzpmb2N1cyB7XFxyXFxuICAgIGNvbG9yOiAjMzMzO1xcclxcbiAgICAvKiBEYXJrZXIgY29sb3Igb24gaG92ZXIvZm9jdXMgKi9cXHJcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcclxcbn1cXHJcXG5cXHJcXG4vKiBJbnB1dCBmaWVsZHMgc3R5bGluZyAqL1xcclxcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cXFwidGV4dFxcXCJdLFxcclxcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cXFwibnVtYmVyXFxcIl0sXFxyXFxuLkFQWC1kaWFsb2ctY29udGVudCBpbnB1dFt0eXBlPVxcXCJkYXRlXFxcIl0sXFxyXFxuLkFQWC1kaWFsb2ctY29udGVudCBpbnB1dFt0eXBlPVxcXCJkYXRldGltZS1sb2NhbFxcXCJdIHtcXHJcXG4gICAgd2lkdGg6IDEwMCU7XFxyXFxuICAgIHBhZGRpbmc6IDEwcHg7XFxyXFxuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XFxyXFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXHJcXG4gICAgZm9udC1mYW1pbHk6ICdIZWx2ZXRpY2EgTmV1ZScsIEFyaWFsLCBzYW5zLXNlcmlmO1xcclxcbiAgICBmb250LXNpemU6IDE2cHg7XFxyXFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjNzO1xcclxcbn1cXHJcXG5cXHJcXG4uQVBYLWRpYWxvZy1jb250ZW50IGlucHV0W3R5cGU9XFxcInRleHRcXFwiXTpmb2N1cyxcXHJcXG4uQVBYLWRpYWxvZy1jb250ZW50IGlucHV0W3R5cGU9XFxcIm51bWJlclxcXCJdOmZvY3VzLFxcclxcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cXFwiZGF0ZVxcXCJdOmZvY3VzLFxcclxcbi5BUFgtZGlhbG9nLWNvbnRlbnQgaW5wdXRbdHlwZT1cXFwiZGF0ZXRpbWUtbG9jYWxcXFwiXTpmb2N1cyB7XFxyXFxuICAgIGJvcmRlci1jb2xvcjogIzJDM0U1MDtcXHJcXG4gICAgLyogRGVlcCBCbHVlIENvbG9yICovXFxyXFxuICAgIG91dGxpbmU6IG5vbmU7XFxyXFxufVxcclxcblxcclxcbi8qIEJ1dHRvbiBpbiB0aGUgZGlhbG9nICovXFxyXFxuLkFQWC1kaWFsb2ctYnV0dG9uLWNvbnRhaW5lciBidXR0b24ge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMkMzRTUwO1xcclxcbiAgICBjb2xvcjogI0VDRjBGMTtcXHJcXG4gICAgYm9yZGVyOiBub25lO1xcclxcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcXHJcXG4gICAgZm9udC1zaXplOiAxNnB4O1xcclxcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxyXFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcXHJcXG59XFxyXFxuXFxyXFxuLkFQWC1kaWFsb2ctYnV0dG9uLWNvbnRhaW5lciBidXR0b246aG92ZXIge1xcclxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzQ0OTVFO1xcclxcbn1cXHJcXG5cXHJcXG4uQVBYLWRpYWxvZy1idXR0b24tY29udGFpbmVyIHtcXHJcXG4gICAgZGlzcGxheTogZmxleDtcXHJcXG4gICAgZ2FwOiAxMHB4O1xcclxcbiAgICBtYXJnaW4tdG9wOjFlbTtcXHJcXG4gICAgLyogc3BhY2luZyBiZXR3ZWVuIGJ1dHRvbnMgKi9cXHJcXG59XFxyXFxuXFxyXFxuLyogTG9hZGluZyBpbmRpY2F0b3IgKi9cXHJcXG4uQVBYLWRpYWxvZy1sb2FkaW5nLWluZGljYXRvciB7XFxyXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxyXFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcclxcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcclxcbiAgICBoZWlnaHQ6IDEwMHB4O1xcclxcbiAgICB3aWR0aDogMTAwJTtcXHJcXG59XFxyXFxuXFxyXFxuLkFQWC1kaWFsb2ctbG9hZGluZy1pbmRpY2F0b3I6OmJlZm9yZSB7XFxyXFxuICAgIGNvbnRlbnQ6ICcnO1xcclxcbiAgICB3aWR0aDogNDBweDtcXHJcXG4gICAgaGVpZ2h0OiA0MHB4O1xcclxcbiAgICBib3JkZXI6IDRweCBzb2xpZCAjZjNmM2YzO1xcclxcbiAgICBib3JkZXItdG9wOiA0cHggc29saWQgIzJDM0U1MDtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xcclxcbiAgICBhbmltYXRpb246IEFQWC1kaWFsb2ctc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7XFxyXFxufVxcclxcblxcclxcbkBrZXlmcmFtZXMgQVBYLWRpYWxvZy1zcGluIHtcXHJcXG4gICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfVxcclxcbiAgICAxMDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxcclxcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fID0gbmV3IFVSTChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucyUzRCUyN2h0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjclMjB3aWR0aCUzRCUyNzMyJTI3JTIwaGVpZ2h0JTNEJTI3MzIlMjclM0UlM0NwYXRoJTIwJTIwZmlsbCUzRCUyMiUyM2NjY2NjYyUyMiUyMGQlM0QlMjJNMjUuMTA3JTIwMzIuMDMwaC0xOC4yMTRjLTMuNDU2JTIwMC02LjI2OC0yLjgxLTYuMjY4LTYuMjY0di0xOS41MjljMC0zLjQ1NiUyMDIuODEyLTYuMjY4JTIwNi4yNjgtNi4yNjhoMTguMjE0YzMuNDU2JTIwMCUyMDYuMjY4JTIwMi44MTIlMjA2LjI2OCUyMDYuMjY4djE5LjUyOWMwJTIwMy40NTItMi44MTIlMjA2LjI2NC02LjI2OCUyMDYuMjY0ek02Ljg5MyUyMDEuODVjLTIuNDE5JTIwMC00LjM4NiUyMDEuOTY3LTQuMzg2JTIwNC4zODZ2MTkuNTI5YzAlMjAyLjQxNyUyMDEuOTY3JTIwNC4zODIlMjA0LjM4NiUyMDQuMzgyaDE4LjIxNGMyLjQxOSUyMDAlMjA0LjM4Ni0xLjk2NSUyMDQuMzg2LTQuMzgydi0xOS41MjljMC0yLjQxOS0xLjk2Ny00LjM4Ni00LjM4Ni00LjM4NmgtMTguMjE0eiUyMiUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRVwiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fID0gbmV3IFVSTChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucyUzRCUyN2h0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjclMjB3aWR0aCUzRCUyNzMyJTI3JTIwaGVpZ2h0JTNEJTI3MzIlMjclM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzA2NTRiYSUyMiUyMGQlM0QlMjJNMC41NDMlMjA1LjY0N2MwLTMuMTE5JTIwMi41MzEtNS42NDclMjA1LjY1LTUuNjQ3aDE5LjMwOWMzLjEyJTIwMCUyMDUuNjUlMjAyLjUxMSUyMDUuNjUlMjA1LjY0N3YyMC43MDVjMCUyMDMuMTE5LTIuNTMxJTIwNS42NDctNS42NSUyMDUuNjQ3aC0xOS4zMDljLTMuMTIlMjAwLTUuNjUtMi41MTEtNS42NS01LjY0N3YtMjAuNzA1ek01LjMxMyUyMDE3LjU4N2w3LjAzOSUyMDYuODM5JTIwMTMuODMxLTEzLjQzOS0yLjYzNi0yLjU2MS0xMC45MjklMjAxMC42Mi00LjQ0Mi00LjMxNy0yLjg2MiUyMDIuODU4eiUyMiUzRSUzQy9wYXRoJTNFJTNDL3N2ZyUzRVwiLCBpbXBvcnQubWV0YS51cmwpO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fID0gbmV3IFVSTChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJVVEYtOCUyMiUzRiUzRSUzQ3N2ZyUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDMyJTIwMzIlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIybTAuNTQzJTIwNS42NDdjMC0zLjExOSUyMDIuNTMxLTUuNjQ3JTIwNS42NS01LjY0N2gxOS4zMDljMy4xMiUyMDAlMjA1LjY1JTIwMi41MTElMjA1LjY1JTIwNS42NDd2MjAuNzA1YzAlMjAzLjExOS0yLjUzMSUyMDUuNjQ3LTUuNjUlMjA1LjY0N2gtMTkuMzA5Yy0zLjEyJTIwMC01LjY1LTIuNTExLTUuNjUtNS42NDd2LTIwLjcwNXolMjIlMjBmaWxsJTNEJTIyJTIzZjAwJTIyJTJGJTNFJTNDcGF0aCUyMGQlM0QlMjJtOCUyMDglMjAxNiUyMDE2JTIyJTIwc3Ryb2tlJTNEJTIyJTIzZmZmJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMiUyMiUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTI0JTIwOEw4JTIwMjQlMjIlMjBzdHJva2UlM0QlMjIlMjNmZmYlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIyJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXCIsIGltcG9ydC5tZXRhLnVybCk7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC5hcHgtdHJpc3RhdGUge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIG1pbi13aWR0aDoxM3B4O1xyXG4gICAgbWluLWhlaWdodDoxM3B4O1xyXG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICBib3JkZXItcmFkaXVzOjNweDtcclxufVxyXG4uYXB4LXRyaXN0YXRlLnVuY2hlY2tlZCB7XHJcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJHtfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19ffSk7XHJcbn1cclxuLmFweC10cmlzdGF0ZS5jaGVja2VkIHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgke19fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX199KTtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XHJcbn1cclxuLmFweC10cmlzdGF0ZS5jcm9zc2VkIHtcclxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgke19fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX199KTtcclxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XHJcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XHJcbn1gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL21vZHVsZXMvdHJpc3RhdGUvY3NzL3RyaXN0YXRlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsY0FBYztJQUNkLGVBQWU7SUFDZix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtBQUNyQjtBQUNBO0lBQ0kseURBQXlsQjtBQUM3bEI7QUFDQTtJQUNJLHlEQUE2ZTtJQUM3ZSw0QkFBNEI7SUFDNUIsMkJBQTJCO0FBQy9CO0FBQ0E7SUFDSSx5REFBc25CO0lBQ3RuQiw0QkFBNEI7SUFDNUIsMkJBQTJCO0FBQy9CXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5hcHgtdHJpc3RhdGUge1xcclxcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxyXFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcclxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuICAgIG1pbi13aWR0aDoxM3B4O1xcclxcbiAgICBtaW4taGVpZ2h0OjEzcHg7XFxyXFxuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6M3B4O1xcclxcbn1cXHJcXG4uYXB4LXRyaXN0YXRlLnVuY2hlY2tlZCB7XFxyXFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zJTNEJTI3aHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyNyUyMHdpZHRoJTNEJTI3MzIlMjclMjBoZWlnaHQlM0QlMjczMiUyNyUzRSUzQ3BhdGglMjAlMjBmaWxsJTNEJTIyJTIzY2NjY2NjJTIyJTIwZCUzRCUyMk0yNS4xMDclMjAzMi4wMzBoLTE4LjIxNGMtMy40NTYlMjAwLTYuMjY4LTIuODEtNi4yNjgtNi4yNjR2LTE5LjUyOWMwLTMuNDU2JTIwMi44MTItNi4yNjglMjA2LjI2OC02LjI2OGgxOC4yMTRjMy40NTYlMjAwJTIwNi4yNjglMjAyLjgxMiUyMDYuMjY4JTIwNi4yNjh2MTkuNTI5YzAlMjAzLjQ1Mi0yLjgxMiUyMDYuMjY0LTYuMjY4JTIwNi4yNjR6TTYuODkzJTIwMS44NWMtMi40MTklMjAwLTQuMzg2JTIwMS45NjctNC4zODYlMjA0LjM4NnYxOS41MjljMCUyMDIuNDE3JTIwMS45NjclMjA0LjM4MiUyMDQuMzg2JTIwNC4zODJoMTguMjE0YzIuNDE5JTIwMCUyMDQuMzg2LTEuOTY1JTIwNC4zODYtNC4zODJ2LTE5LjUyOWMwLTIuNDE5LTEuOTY3LTQuMzg2LTQuMzg2LTQuMzg2aC0xOC4yMTR6JTIyJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFJyk7XFxyXFxufVxcclxcbi5hcHgtdHJpc3RhdGUuY2hlY2tlZCB7XFxyXFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zJTNEJTI3aHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyNyUyMHdpZHRoJTNEJTI3MzIlMjclMjBoZWlnaHQlM0QlMjczMiUyNyUzRSUzQ3BhdGglMjBmaWxsJTNEJTIyJTIzMDY1NGJhJTIyJTIwZCUzRCUyMk0wLjU0MyUyMDUuNjQ3YzAtMy4xMTklMjAyLjUzMS01LjY0NyUyMDUuNjUtNS42NDdoMTkuMzA5YzMuMTIlMjAwJTIwNS42NSUyMDIuNTExJTIwNS42NSUyMDUuNjQ3djIwLjcwNWMwJTIwMy4xMTktMi41MzElMjA1LjY0Ny01LjY1JTIwNS42NDdoLTE5LjMwOWMtMy4xMiUyMDAtNS42NS0yLjUxMS01LjY1LTUuNjQ3di0yMC43MDV6TTUuMzEzJTIwMTcuNTg3bDcuMDM5JTIwNi44MzklMjAxMy44MzEtMTMuNDM5LTIuNjM2LTIuNTYxLTEwLjkyOSUyMDEwLjYyLTQuNDQyLTQuMzE3LTIuODYyJTIwMi44NTh6JTIyJTNFJTNDL3BhdGglM0UlM0Mvc3ZnJTNFJyk7XFxyXFxuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxyXFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXHJcXG59XFxyXFxuLmFweC10cmlzdGF0ZS5jcm9zc2VkIHtcXHJcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsJTNDJTNGeG1sJTIwdmVyc2lvbiUzRCUyMjEuMCUyMiUyMGVuY29kaW5nJTNEJTIyVVRGLTglMjIlM0YlM0UlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAzMiUyMDMyJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMm0wLjU0MyUyMDUuNjQ3YzAtMy4xMTklMjAyLjUzMS01LjY0NyUyMDUuNjUtNS42NDdoMTkuMzA5YzMuMTIlMjAwJTIwNS42NSUyMDIuNTExJTIwNS42NSUyMDUuNjQ3djIwLjcwNWMwJTIwMy4xMTktMi41MzElMjA1LjY0Ny01LjY1JTIwNS42NDdoLTE5LjMwOWMtMy4xMiUyMDAtNS42NS0yLjUxMS01LjY1LTUuNjQ3di0yMC43MDV6JTIyJTIwZmlsbCUzRCUyMiUyM2YwMCUyMiUyRiUzRSUzQ3BhdGglMjBkJTNEJTIybTglMjA4JTIwMTYlMjAxNiUyMiUyMHN0cm9rZSUzRCUyMiUyM2ZmZiUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIlMjIlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk0yNCUyMDhMOCUyMDI0JTIyJTIwc3Ryb2tlJTNEJTIyJTIzZmZmJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMiUyMiUyRiUzRSUzQyUyRnN2ZyUzRScpO1xcclxcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcclxcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxyXFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICB1cmwgPSBTdHJpbmcodXJsLl9fZXNNb2R1bGUgPyB1cmwuZGVmYXVsdCA6IHVybCk7XG5cbiAgLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG4gIGlmICgvXlsnXCJdLipbJ1wiXSQvLnRlc3QodXJsKSkge1xuICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH1cblxuICAvLyBTaG91bGQgdXJsIGJlIHdyYXBwZWQ/XG4gIC8vIFNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG4gIGlmICgvW1wiJygpIFxcdFxcbl18KCUyMCkvLnRlc3QodXJsKSB8fCBvcHRpb25zLm5lZWRRdW90ZXMpIHtcbiAgICByZXR1cm4gXCJcXFwiXCIuY29uY2F0KHVybC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIiksIFwiXFxcIlwiKTtcbiAgfVxuICByZXR1cm4gdXJsO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIi8vIE1vZHVsZVxudmFyIGNvZGUgPSBcIjxkaXYgY2xhc3M9XFxcIkFQWC1kaWFsb2dcXFwiPlxcclxcbiAgICA8ZGl2IGNsYXNzPVxcXCJBUFgtZGlhbG9nLWNvbnRlbnRcXFwiPlxcclxcbiAgICAgICAgPHNwYW4gY2xhc3M9XFxcIkFQWC1jbG9zZS1kaWFsb2dcXFwiPiZ0aW1lczs8L3NwYW4+XFxyXFxuICAgICAgICA8aDIgY2xhc3M9XFxcIkFQWC1kaWFsb2ctdGl0bGVcXFwiPjwvaDI+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJBUFgtZGlhbG9nLWR5bmFtaWMtY29udGVudFxcXCI+PC9kaXY+XFxyXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJBUFgtZGlhbG9nLWJ1dHRvbi1jb250YWluZXJcXFwiPjwvZGl2PlxcclxcbiAgICA8L2Rpdj5cXHJcXG48L2Rpdj5cIjtcbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gY29kZTsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZGlhbG9nLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZGlhbG9nLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi90cmlzdGF0ZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3RyaXN0YXRlLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG4gIGNzcyArPSBvYmouY3NzO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9XG5cbiAgLy8gRm9yIG9sZCBJRVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge30sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfVxuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8gRnVuY3Rpb24gdG8gbG9hZCB0aGUgQ1NTIGZyb20gYSBnaXZlbiBVUkxcclxuZnVuY3Rpb24gbG9hZENzcyh1cmwpIHtcclxuICAgIHJldHVybiBmZXRjaCh1cmwpXHJcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UudGV4dCgpKVxyXG4gICAgICAgIC50aGVuKGNzcyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlU2hlZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XHJcbiAgICAgICAgICAgIHN0eWxlU2hlZXQudHlwZSA9IFwidGV4dC9jc3NcIjtcclxuICAgICAgICAgICAgc3R5bGVTaGVldC50ZXh0Q29udGVudCA9IGNzczsgIC8vIFVzZSB0ZXh0Q29udGVudCBpbnN0ZWFkIG9mIGlubmVyVGV4dFxyXG4gICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlU2hlZXQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBsb2FkIENTUzpcIiwgZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gICAgbG9hZENzc1xyXG59IiwiLy8gSW1wb3J0aW5nIHRoZSBDU1MgYW5kIEhUTUwgdGVtcGxhdGVzXHJcbmltcG9ydCAnLi9jc3MvZGlhbG9nLmNzcyc7XHJcbmltcG9ydCBkaWFsb2dUZW1wbGF0ZSBmcm9tICcuL2h0bWwvZGlhbG9nLmh0bWw/cmF3JztcclxuXHJcbmNvbnN0IGNyZWF0ZURpYWxvZyA9IChvcHRpb25zKSA9PiB7XHJcbiAgICBjb25zdCBkaWFsb2dEZWZhdWx0cyA9IHtcclxuICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgY29udGVudDogJycsXHJcbiAgICAgICAgY29udGVudFVSSTogJycsXHJcbiAgICAgICAgYnV0dG9uczogW10sXHJcbiAgICAgICAgc2l6ZTogJ21lZGl1bScsXHJcbiAgICAgICAgc2hvd0xvYWRpbmdJbmRpY2F0b3I6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHsgdGl0bGUsIGNvbnRlbnQsIGNvbnRlbnRVUkksIGJ1dHRvbnMsIHNpemUsIHNob3dMb2FkaW5nSW5kaWNhdG9yIH0gPSB7IC4uLmRpYWxvZ0RlZmF1bHRzLCAuLi5vcHRpb25zIH07XHJcblxyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgd3JhcHBlci5pbm5lckhUTUwgPSBkaWFsb2dUZW1wbGF0ZS50cmltKCk7XHJcbiAgICBjb25zdCBkaWFsb2dFbGVtZW50ID0gd3JhcHBlci5maXJzdENoaWxkO1xyXG5cclxuICAgIC8vIExpZmVjeWNsZSBldmVudCBtYW5hZ2VtZW50XHJcbiAgICBjb25zdCBsaWZlY3ljbGVSZXNvbHZlcnMgPSB7fTtcclxuICAgIGNvbnN0IGxpZmVjeWNsZUV2ZW50cyA9IHt9O1xyXG5cclxuICAgIC8vIERlZmluZSBsaWZlY3ljbGUgcHJvbWlzZXMgYXMgcHJvcGVydGllc1xyXG4gICAgWydvcGVuaW5nJywgJ29wZW5lZCcsICdjbG9zaW5nJywgJ2Nsb3NlZCcsICdjb250ZW50TG9hZGluZycsICdjb250ZW50TG9hZGVkJ10uZm9yRWFjaCgoZXZlbnQpID0+IHtcclxuICAgICAgICBsaWZlY3ljbGVFdmVudHNbZXZlbnRdID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgbGlmZWN5Y2xlUmVzb2x2ZXJzW2V2ZW50XSA9IHJlc29sdmU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAobGlmZWN5Y2xlUmVzb2x2ZXJzW2V2ZW50XSkge1xyXG4gICAgICAgICAgICBsaWZlY3ljbGVSZXNvbHZlcnNbZXZlbnRdKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBObyByZXNvbHZlciBmb3VuZCBmb3IgbGlmZWN5Y2xlIGV2ZW50OiAke2V2ZW50fWApO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZGlhbG9nID0ge1xyXG4gICAgICAgIGVsZW1lbnQ6IGRpYWxvZ0VsZW1lbnQsXHJcbiAgICAgICAgYnV0dG9uczoge30sXHJcbiAgICAgICAgaXNDbG9zZWQ6IGZhbHNlLFxyXG4gICAgICAgIGxpZmVjeWNsZTogbGlmZWN5Y2xlRXZlbnRzLCAvLyBMaWZlY3ljbGUgcHJvbWlzZXMgZGlyZWN0bHkgZXhwb3NlZCBoZXJlXHJcbiAgICAgICAgb3BlbjogYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCdvcGVuaW5nJyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBkaWFsb2cubGlmZWN5Y2xlLm9wZW5pbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbG9hZGluZyBpbmRpY2F0b3IgaXMgZW5hYmxlZCBhbmQgd2UncmUgZmV0Y2hpbmcgY29udGVudCwgc2hvdyBkaWFsb2cgZmlyc3RcclxuICAgICAgICAgICAgICAgIGlmIChzaG93TG9hZGluZ0luZGljYXRvciAmJiBjb250ZW50VVJJKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGRpYWxvZyB0byB0aGUgRE9NIGFuZCBkaXNwbGF5IGl0IGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaWFsb2dFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBkaWFsb2dFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyBTaG93IGxvYWRpbmcgaW5kaWNhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLkFQWC1kaWFsb2ctZHluYW1pYy1jb250ZW50XCIpLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiQVBYLWRpYWxvZy1sb2FkaW5nLWluZGljYXRvclwiPjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBjb250ZW50IGFmdGVyIGRpYWxvZyBpcyB2aXNpYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZmV0Y2hBbmRJbnNlcnRDb250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IGxvYWQgY29udGVudCBmaXJzdCwgdGhlbiBzaG93IGRpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGZldGNoQW5kSW5zZXJ0Q29udGVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBkaWFsb2cgdG8gdGhlIERPTSBhbmQgZGlzcGxheSBpdFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGlhbG9nRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCdvcGVuZWQnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGRpYWxvZy5saWZlY3ljbGUub3BlbmVkO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb3BlbmluZyBkaWFsb2c6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkaWFsb2c7IC8vIFJldHVybiBmb3IgZGFpc3ktY2hhaW5pbmdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoJ2Nsb3NpbmcnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGRpYWxvZy5saWZlY3ljbGUuY2xvc2luZztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDbGVhbnVwIGFuZCByZW1vdmUgZGlhbG9nXHJcbiAgICAgICAgICAgICAgICBjbG9zZURpYWxvZ0FuZENsZWFudXAoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoJ2Nsb3NlZCcpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZGlhbG9nLmxpZmVjeWNsZS5jbG9zZWQ7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgZGlhbG9nIGNsb3Npbmc6JywgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkaWFsb2c7IC8vIFJldHVybiBmb3IgZGFpc3ktY2hhaW5pbmdcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNsb3NlRGlhbG9nQW5kQ2xlYW51cCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoZGlhbG9nLmlzQ2xvc2VkKSByZXR1cm47XHJcblxyXG4gICAgICAgIGRpYWxvZy5pc0Nsb3NlZCA9IHRydWU7XHJcbiAgICAgICAgZGlhbG9nRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoZGlhbG9nRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaWFsb2dFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNldERpYWxvZ1NpemUgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nQ29udGVudCA9IGRpYWxvZ0VsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5BUFgtZGlhbG9nLWNvbnRlbnRcIik7XHJcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSB7XHJcbiAgICAgICAgICAgIHNtYWxsOiB7IHdpZHRoOiAnMzAwcHgnLCBoZWlnaHQ6ICcyMDBweCcgfSxcclxuICAgICAgICAgICAgbWVkaXVtOiB7IHdpZHRoOiAnNTAwcHgnLCBoZWlnaHQ6ICc0MDBweCcgfSxcclxuICAgICAgICAgICAgbGFyZ2U6IHsgd2lkdGg6ICc4MDBweCcsIGhlaWdodDogJzYwMHB4JyB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHNpemUgPT09ICdhdXRvJykgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxlY3RlZFNpemUgPSBzaXplc1tzaXplXSB8fCAodHlwZW9mIHNpemUgPT09ICdvYmplY3QnICYmIHNpemUpO1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFNpemUpIHtcclxuICAgICAgICAgICAgZGlhbG9nQ29udGVudC5zdHlsZS5taW5XaWR0aCA9IHNlbGVjdGVkU2l6ZS53aWR0aCB8fCAnNTAwcHgnO1xyXG4gICAgICAgICAgICBkaWFsb2dDb250ZW50LnN0eWxlLm1pbkhlaWdodCA9IHNlbGVjdGVkU2l6ZS5oZWlnaHQgfHwgJzQwMHB4JztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGFkZEJ1dHRvbnMgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGFpbmVyID0gZGlhbG9nRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLkFQWC1kaWFsb2ctYnV0dG9uLWNvbnRhaW5lclwiKTtcclxuXHJcbiAgICAgICAgYnV0dG9ucy5mb3JFYWNoKCh7IGtleSwgbGFiZWwsIG9yZGVyID0gMCwgYWxpZ24gPSAnZmxleC1lbmQnLCBjbG9zZU9uQ2xpY2sgPSB0cnVlIH0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGxhYmVsO1xyXG4gICAgICAgICAgICBidXR0b24uc3R5bGUub3JkZXIgPSBvcmRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG9zZU9uQ2xpY2spIHtcclxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhcyBhIG9uZS10aW1lIFByb21pc2VcclxuICAgICAgICAgICAgICAgIGxldCBmaXJzdENsaWNrUmVzb2x2ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENsaWNrUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RDbGlja1Jlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENsaWNrUmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkaWFsb2cpOyAvLyBSZXNvbHZlIHRoZSBQcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cuY2xvc2UoKTsgLy8gQ2xvc2UgdGhlIGRpYWxvZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB0aGUgcHJvbWlzZSBmb3IgY2hhaW5pbmcgd2l0aCBgLnRoZW5gXHJcbiAgICAgICAgICAgICAgICBkaWFsb2cuYnV0dG9uc1trZXldID0gZmlyc3RDbGlja1Byb21pc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgYXMgYSByZXBlYXRlZCBldmVudCBoYW5kbGVyXHJcbiAgICAgICAgICAgICAgICBsZXQgaGFuZGxlcnMgPSBbXTsgLy8gU3RvcmUgaGFuZGxlcnMgZm9yIGAudGhlbigpYFxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsaWNrUHJvbWlzZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGVuOiAoY2FsbGJhY2spID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMucHVzaChjYWxsYmFjayk7IC8vIEFkZCB0byBoYW5kbGVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGlja1Byb21pc2U7IC8vIEFsbG93IGNoYWluaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlcihkaWFsb2cpKTsgLy8gQ2FsbCBhbGwgcmVnaXN0ZXJlZCBoYW5kbGVyc1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBkaWFsb2cuYnV0dG9uc1trZXldID0gY2xpY2tQcm9taXNlOyAvLyBBc3NpZ24gdGhlIFwiZmFrZVwiIHByb21pc2VcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYnV0dG9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIGJ1dHRvbkNvbnRhaW5lci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9IGFsaWduO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBmZXRjaEFuZEluc2VydENvbnRlbnQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDdXJzb3IgPSBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcjtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICd3YWl0JztcclxuICAgICAgICBjb25zdCBkeW5hbWljQ29udGVudCA9IGRpYWxvZ0VsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5BUFgtZGlhbG9nLWR5bmFtaWMtY29udGVudFwiKTtcclxuICAgICAgICBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoJ2NvbnRlbnRMb2FkaW5nJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGRpYWxvZy5saWZlY3ljbGUuY29udGVudExvYWRpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50SHRtbCA9IGNvbnRlbnRVUklcclxuICAgICAgICAgICAgICAgID8gYXdhaXQgZmV0Y2hDb250ZW50KGNvbnRlbnRVUkkpXHJcbiAgICAgICAgICAgICAgICA6IGNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgICBkeW5hbWljQ29udGVudC5pbm5lckhUTUwgPSBjb250ZW50SHRtbDtcclxuXHJcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudCgnY29udGVudExvYWRlZCcpO1xyXG4gICAgICAgICAgICBhd2FpdCBkaWFsb2cubGlmZWN5Y2xlLmNvbnRlbnRMb2FkZWQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjb250ZW50OicsIGVycm9yKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9IG9yaWdpbmFsQ3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZmV0Y2hDb250ZW50ID0gYXN5bmMgKHVyaSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJpKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBjb250ZW50OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBkaWFsb2dcclxuICAgIHNldERpYWxvZ1NpemUoKTtcclxuICAgIGFkZEJ1dHRvbnMoKTtcclxuXHJcbiAgICAvLyBTZXQgdGl0bGUgYW5kIGNsb3NlIGJ1dHRvbiBoYW5kbGVyXHJcbiAgICBkaWFsb2dFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuQVBYLWRpYWxvZy10aXRsZVwiKS50ZXh0Q29udGVudCA9IHRpdGxlO1xyXG4gICAgZGlhbG9nRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuQVBYLWNsb3NlLWRpYWxvZycpLm9uY2xpY2sgPSBkaWFsb2cuY2xvc2U7XHJcblxyXG4gICAgcmV0dXJuIGRpYWxvZztcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZURpYWxvZztcclxuIiwibGV0IGNvdW50ZXIgPSAwO1xyXG5jb25zdCBkb0NhbGxiYWNrcyA9IHt9O1xyXG5jb25zdCB0aW1lb3V0cyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBldmVudCBsaXN0ZW5lciB0byB0aGUgZWxlbWVudHMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBkbyBtZXRob2QgdG8gYWRkIGNhbGxiYWNrIGZ1bmN0aW9ucy5cclxuICogQHBhcmFtIHtPYmplY3R9IGFweCAtIFRoZSBhcHggb2JqZWN0IHRvIGF1Z21lbnQgd2l0aCB0aGUgbGlzdGVuIGZ1bmN0aW9uLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSAtIFRoZSBhdWdtZW50ZWQgYXB4IG9iamVjdC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChhcHgpIHtcclxuICAgIGxldCBlbGVtZW50cyA9IGFweC5lbGVtZW50cztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGVsZW1lbnRzIGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgZG8gbWV0aG9kIHRvIGFkZCBjYWxsYmFjayBmdW5jdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIC0gVGhlIHR5cGUgb2YgZXZlbnQgdG8gbGlzdGVuIGZvciAoZS5nLiAnY2xpY2snLCAna2V5ZG93bicsIGV0Yy4pLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl0gLSBUaGUgQ1NTIHNlbGVjdG9yIHRvIHVzZSBmb3IgZXZlbnQgZGVsZWdhdGlvbiAob3B0aW9uYWwpLlxyXG4gICAgICogQHJldHVybnMge09iamVjdH0gLSBBbiBvYmplY3Qgd2l0aCBhIGRvIG1ldGhvZCB0byBhZGQgY2FsbGJhY2sgZnVuY3Rpb25zLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGFweC5saXN0ZW4oJ2NsaWNrJywgJy5teS1idXR0b24nKS5kbygoZXZlbnQpID0+IHtcclxuICAgICAqICAgY29uc29sZS5sb2coJ0J1dHRvbiBjbGlja2VkIScsIGV2ZW50LnRhcmdldCk7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgYXB4Lmxpc3RlbiA9IGZ1bmN0aW9uIChldmVudFR5cGVzLCBzZWNvbmRBcmd1bWVudCwgdGhpcmRBcmd1bWVudCkge1xyXG4gICAgICAgIGxldCBzZWxlY3RvcjtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgc2VsZWN0b3Igb3Igb3B0aW9uc1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc2Vjb25kQXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdG9yID0gc2Vjb25kQXJndW1lbnQ7XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlyZEFyZ3VtZW50IHx8IHt9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSBzZWNvbmRBcmd1bWVudCB8fCB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUlkID0gZ2VuZXJhdGVVbmlxdWVJZCgpO1xyXG4gICAgICAgIGNvbnN0IHRpbWVvdXREdXJhdGlvbiA9IG9wdGlvbnMudGltZW91dCB8fCAwO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShldmVudFR5cGVzKSkge1xyXG4gICAgICAgICAgICBldmVudFR5cGVzID0gW2V2ZW50VHlwZXNdOyAvLyBFbnN1cmUgZXZlbnRUeXBlcyBpcyBhbiBhcnJheVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjdXRlQ2FsbGJhY2tzKGV2ZW50LCB1bmlxdWVJZCwgdGltZW91dER1cmF0aW9uLCBzZWxlY3RvciwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBBZGRzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIGRvQ2FsbGJhY2tzIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbGlzdGVuZXIuXHJcbiAgICAgICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGRvQ2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQuXHJcbiAgICAgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IC0gUmV0dXJucyB0aGUgY3VycmVudCBvYmplY3QgdG8gYWxsb3cgZm9yIGNoYWluZWQgY2FsbHMuXHJcbiAgICAgICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICAgICAqIGFweC5saXN0ZW4oJ2NsaWNrJywgJy5teS1idXR0b24nKS5kbygoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICogICBjb25zb2xlLmxvZygnQnV0dG9uIGNsaWNrZWQhJywgZXZlbnQudGFyZ2V0KTtcclxuICAgICAgICAgICAgICogfSkuZG8oKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAqICAgY29uc29sZS5sb2coJ0Fub3RoZXIgY2FsbGJhY2sgZnVuY3Rpb24hJyk7XHJcbiAgICAgICAgICAgICAqIH0pO1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgZG86IGZ1bmN0aW9uIChkb0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRvQ2FsbGJhY2tzW3VuaXF1ZUlkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvQ2FsbGJhY2tzW3VuaXF1ZUlkXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZG9DYWxsYmFja3NbdW5pcXVlSWRdLnB1c2goZG9DYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsgLy8gUmV0dXJuIHRoZSBvYmplY3QgdG8gYWxsb3cgZm9yIGNoYWluZWQgY2FsbHNcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hbnVhbGx5IHRyaWdnZXJzIHRoZSByZWdpc3RlcmVkIGNhbGxiYWNrcyBmb3IgYSBnaXZlbiBldmVudCB0eXBlIG9uIGFsbCBlbGVtZW50cyBvciBjcmVhdGVzIGEgbmV3IGV2ZW50IGlmIGEgc3RyaW5nIGlzIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RXZlbnR9IGV2ZW50IC0gVGhlIGV2ZW50IHRvIHRyaWdnZXIuIFRoaXMgY2FuIGJlIGFuIGV2ZW50IHR5cGUgc3RyaW5nIChsaWtlICdjbGljaycpIG9yIGFuIGFjdHVhbCBFdmVudCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGFweC50cmlnZ2VyID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgbGV0IGV2ZW50VHlwZTtcclxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBldmVudFR5cGUgPSBldmVudDtcclxuICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoZXZlbnQsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgRXZlbnQpIHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlID0gZXZlbnQudHlwZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGV2ZW50IHR5cGUgcHJvdmlkZWQgdG8gYXB4LnRyaWdnZXIuIEl0IG11c3QgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIEV2ZW50IG9iamVjdC4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXB4LmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsgIC8vIFRoaXMgd2lsbCBhbGxvdyB0aGUgZXZlbnQgdG8gYnViYmxlIHVwIG5hdHVyYWxseS5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gSGFuZGxlIGV2ZW50IGRlbGVnYXRpb24gbWFudWFsbHkgYnkgZXhlY3V0aW5nIGNhbGxiYWNrcyBpZiB0aGUgdGFyZ2V0IG1hdGNoZXMgdGhlIHNlbGVjdG9yXHJcbiAgICAgICAgT2JqZWN0LmtleXMoZG9DYWxsYmFja3MpLmZvckVhY2goKHVuaXF1ZUlkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrRGV0YWlscyA9IGRvQ2FsbGJhY2tzW3VuaXF1ZUlkXTtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrRGV0YWlscyAmJiBjYWxsYmFja0RldGFpbHMuZXZlbnRUeXBlID09PSBldmVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBldmVudCB0YXJnZXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IgdXNlZCBkdXJpbmcgbGlzdGVuZXIgcmVnaXN0cmF0aW9uXHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNlbGVjdG9yIH0gPSBjYWxsYmFja0RldGFpbHM7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yIHx8IGV2ZW50LnRhcmdldC5tYXRjaGVzKHNlbGVjdG9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVDYWxsYmFja3MoZXZlbnQsIHVuaXF1ZUlkLCAwLCBzZWxlY3RvciwgZXZlbnQudGFyZ2V0KTsgIC8vIEltbWVkaWF0ZSBleGVjdXRpb24sIG5vIHRpbWVvdXRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGFweDtcclxufTtcclxuXHJcblxyXG5mdW5jdGlvbiBleGVjdXRlQ2FsbGJhY2tzKGV2ZW50LCB1bmlxdWVJZCwgdGltZW91dER1cmF0aW9uLCBzZWxlY3RvciA9ICcnLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBtYXRjaGVkRWxlbWVudCA9IHNlbGVjdG9yID8gY2xvc2VzdChldmVudC50YXJnZXQsIHNlbGVjdG9yKSA6IGVsZW1lbnQ7XHJcbiAgICBpZiAoIW1hdGNoZWRFbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENsZWFyIGFueSBwcmV2aW91cyB0aW1lb3V0IGZvciB0aGlzIHVuaXF1ZUlkIHRvIHByZXZlbnQgdW5pbnRlbmRlZCBiZWhhdmlvclxyXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRzW3VuaXF1ZUlkXSk7XHJcblxyXG4gICAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBleGVjdXRpb24gb2YgY2FsbGJhY2tzXHJcbiAgICBmdW5jdGlvbiBoYW5kbGVDYWxsYmFja0V4ZWN1dGlvbigpIHtcclxuICAgICAgICBpZiAoZG9DYWxsYmFja3NbdW5pcXVlSWRdKSB7XHJcbiAgICAgICAgICAgIGRvQ2FsbGJhY2tzW3VuaXF1ZUlkXS5yZWR1Y2UoKHByZXZQcm9taXNlLCBkb0NhbGxiYWNrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldlByb21pc2UudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvQ2FsbGJhY2suYmluZChtYXRjaGVkRWxlbWVudCkoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGNhbGxiYWNrIGNoYWluOicsIGVycm9yKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRpbWVvdXREdXJhdGlvbiBpcyB6ZXJvIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGRlbGF5IHRoZSBjYWxsYmFjayBleGVjdXRpb24gb3Igbm90XHJcbiAgICBpZiAodGltZW91dER1cmF0aW9uID09PSAwKSB7XHJcbiAgICAgICAgaGFuZGxlQ2FsbGJhY2tFeGVjdXRpb24oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGltZW91dHNbdW5pcXVlSWRdID0gc2V0VGltZW91dChoYW5kbGVDYWxsYmFja0V4ZWN1dGlvbiwgdGltZW91dER1cmF0aW9uKTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGdlbmVyYXRlVW5pcXVlSWQoKSB7XHJcbiAgICBjb25zdCByYW5kb21QYXJ0ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpOyAvLyBNb3JlIHJhbmRvbW5lc3NcclxuICAgIGNvbnN0IHVuaXF1ZUlkID0gYCR7RGF0ZS5ub3coKX1fJHtyYW5kb21QYXJ0fV8ke2NvdW50ZXJ9YDtcclxuICAgIGNvdW50ZXIgPSAoY291bnRlciArIDEpICUgMTAwMDsgLy8gUmVzZXQgY291bnRlciB0byBhdm9pZCBvdmVyZmxvd1xyXG5cclxuICAgIHJldHVybiB1bmlxdWVJZDtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xvc2VzdChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSA9PT0gMSkge1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuIiwiaW1wb3J0ICcuL2Nzcy90cmlzdGF0ZS5jc3MnO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSB0cmktc3RhdGUgY2hlY2tib3ggZm9yIGVhY2ggY2hlY2tib3ggZWxlbWVudCBpbiB0aGUgYXB4LmVsZW1lbnRzIGFycmF5LlxyXG4gKiBAcGFyYW0ge0FycmF5PEhUTUxFbGVtZW50Pn0gYXB4IC0gQW4gYXJyYXkgb2YgSFRNTEVsZW1lbnRzIHdoaWNoIGlzIHJldHVybmVkIGJ5IEFQWCgpXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENhbGwgdGhlIHRyaXN0YXRlIGZ1bmN0aW9uIG9uIGFuIGFycmF5IG9mIGNoZWNrYm94IGVsZW1lbnRzXHJcbiAqIGFweC50cmlzdGF0ZSgpO1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGFweCkge1xyXG4gICAgYXB4LnRyaXN0YXRlID0gZnVuY3Rpb24gKG9wdGlvbnMgPSB7fSl7XHJcbiAgICAgICAgYXB4LmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW29yaWdpbmFsQ2hlY2tib3gsIHRyaXN0YXRlRG9tLCBoaWRkZW5JbnB1dF0gPSBjcmVhdGVUcmlTdGF0ZUNoZWNrYm94KGVsZW1lbnQsb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGEgXCJvcHRpb25zLmNhbGxiYWNrcy5hZnRlclwiIGNhbGxiYWNrIGluIG9wdGlvbnMgY2FsbCBpdFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5jYWxsYmFja3MgJiYgb3B0aW9ucy5jYWxsYmFja3MuYWZ0ZXIgJiYgdHlwZW9mIG9wdGlvbnMuY2FsbGJhY2tzLmFmdGVyID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFja3MuYWZ0ZXIob3JpZ2luYWxDaGVja2JveCwgdHJpc3RhdGVEb20sIGhpZGRlbklucHV0KTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b2dnbGVUcmlTdGF0ZUNoZWNrYm94U3RhdGUoY3VzdG9tQ2hlY2tib3gsIGFjdHVhbENoZWNrYm94LCBoaWRkZW5JbnB1dCkge1xyXG4gICAgaWYgKGN1c3RvbUNoZWNrYm94LmNsYXNzTGlzdC5jb250YWlucygnY2hlY2tlZCcpKSB7XHJcbiAgICAgICAgY3VzdG9tQ2hlY2tib3guY2xhc3NMaXN0LnJlbW92ZSgnY2hlY2tlZCcpO1xyXG4gICAgICAgIGN1c3RvbUNoZWNrYm94LmNsYXNzTGlzdC5hZGQoJ2Nyb3NzZWQnKTtcclxuICAgICAgICBhY3R1YWxDaGVja2JveC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSAnZmFsc2UnO1xyXG4gICAgfSBlbHNlIGlmIChjdXN0b21DaGVja2JveC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nyb3NzZWQnKSkge1xyXG4gICAgICAgIGN1c3RvbUNoZWNrYm94LmNsYXNzTGlzdC5yZW1vdmUoJ2Nyb3NzZWQnKTtcclxuICAgICAgICBjdXN0b21DaGVja2JveC5jbGFzc0xpc3QuYWRkKCd1bmNoZWNrZWQnKTtcclxuICAgICAgICBoaWRkZW5JbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ25hbWUnKTsgLy8gRW5zdXJlIHRoZSBoaWRkZW4gaW5wdXQgZG9lc24ndCBwb3N0IGFueSB2YWx1ZVxyXG4gICAgICAgIGhpZGRlbklucHV0LnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTsgLy8gRW5zdXJlIHRoZSBoaWRkZW4gaW5wdXQgZG9lc24ndCBwb3N0IGFueSB2YWx1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjdXN0b21DaGVja2JveC5jbGFzc0xpc3QucmVtb3ZlKCd1bmNoZWNrZWQnKTtcclxuICAgICAgICBjdXN0b21DaGVja2JveC5jbGFzc0xpc3QuYWRkKCdjaGVja2VkJyk7XHJcbiAgICAgICAgYWN0dWFsQ2hlY2tib3guY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSAndHJ1ZSc7XHJcbiAgICAgICAgaGlkZGVuSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgYWN0dWFsQ2hlY2tib3guZGF0YXNldC5uYW1lKTsgLy8gUmVzdG9yZSB0aGUgbmFtZSBmb3IgcG9zdGluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVUcmlTdGF0ZUNoZWNrYm94KGNoZWNrYm94RWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgXHJcbiAgICAvL2dldCB0aGUgY2hlY2tib3ggbWFyZ2lucyBpbmNsdWRpbmcgYnJvd3NlciBkZWZhdWx0XHJcbiAgICBjb25zdCBjaGVja2JveFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hlY2tib3hFbGVtZW50KTtcclxuICAgIC8vIEhpZGUgdGhlIG9yaWdpbmFsIGNoZWNrYm94XHJcbiAgICBjaGVja2JveEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIGN1c3RvbSBjaGVja2JveCBkaXYgYW5kIHNldCBpdHMgaW5pdGlhbCBzdGF0ZVxyXG4gICAgY29uc3QgdHJpc3RhdGVEb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRyaXN0YXRlRG9tLmNsYXNzTGlzdC5hZGQoJ2FweC10cmlzdGF0ZScpO1xyXG4gICAgaWYgKG9wdGlvbnMuc2l6ZSkge1xyXG4gICAgICAgIGlmIChvcHRpb25zLnNpemUud2lkdGgpIHtcclxuICAgICAgICAgICAgdHJpc3RhdGVEb20uc3R5bGUud2lkdGggPSBvcHRpb25zLnNpemUud2lkdGggKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0aW9ucy5zaXplLmhlaWdodCkge1xyXG4gICAgICAgICAgICB0cmlzdGF0ZURvbS5zdHlsZS5oZWlnaHQgPSBvcHRpb25zLnNpemUuaGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihvcHRpb25zLmNsYXNzZXMpIHRyaXN0YXRlRG9tLmNsYXNzTGlzdC5hZGQoLi4uY29tcHV0ZUNsYXNzZXMob3B0aW9ucy5jbGFzc2VzKSk7XHJcblxyXG4gICAgdHJpc3RhdGVEb20uc3R5bGUubWFyZ2luID0gY2hlY2tib3hTdHlsZS5tYXJnaW47XHJcblxyXG4gICAgaWYgKGNoZWNrYm94RWxlbWVudC5jaGVja2VkKSB7XHJcbiAgICAgICAgdHJpc3RhdGVEb20uY2xhc3NMaXN0LmFkZCgnY2hlY2tlZCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0cmlzdGF0ZURvbS5jbGFzc0xpc3QuYWRkKCd1bmNoZWNrZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIGhpZGRlbiBpbnB1dCBmaWVsZFxyXG4gICAgY29uc3QgaGlkZGVuSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgaGlkZGVuSW5wdXQudHlwZSA9ICdoaWRkZW4nO1xyXG4gICAgaGlkZGVuSW5wdXQubmFtZSA9IGNoZWNrYm94RWxlbWVudC5uYW1lOyAvLyBDb3B5IHRoZSBuYW1lIGZyb20gdGhlIG9yaWdpbmFsIGNoZWNrYm94XHJcbiAgICBjaGVja2JveEVsZW1lbnQuZGF0YXNldC5uYW1lID0gY2hlY2tib3hFbGVtZW50Lm5hbWU7IC8vIFN0b3JlIHRoZSBuYW1lIGluIGEgZGF0YSBhdHRyaWJ1dGUgZm9yIGxhdGVyIHVzZVxyXG4gICAgY2hlY2tib3hFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnbmFtZScpOyAvLyBSZW1vdmUgdGhlIG5hbWUgZnJvbSB0aGUgb3JpZ2luYWwgY2hlY2tib3ggdG8gYXZvaWQgZG91YmxlIHBvc3RpbmdcclxuXHJcbiAgICBpZiAob3B0aW9ucy5kZWZhdWx0U3RhdGUpIHNldERlZmF1bHRTdGF0ZShvcHRpb25zLCB0cmlzdGF0ZURvbSwgaGlkZGVuSW5wdXQpO1xyXG4gICAgZWxzZXtcclxuICAgICAgICAvLyBTZXQgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBoaWRkZW4gaW5wdXQgYmFzZWQgb24gdGhlIGNoZWNrYm94J3Mgc3RhdGVcclxuICAgICAgICBpZiAoY2hlY2tib3hFbGVtZW50LmNoZWNrZWQpIHtcclxuICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSAndHJ1ZSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaGlkZGVuSW5wdXQubmFtZSA9ICcnOyAvLyBFbnN1cmUgdGhlIGhpZGRlbiBpbnB1dCBkb2Vzbid0IHBvc3QgYW55IHZhbHVlXHJcbiAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vaGFuZGxlIGFjY2Vzc2liaWxpdHksIHNldCB0aGUgdGFiaW5kZXggdG8gdGhlIHNhbWUgYXMgdGhlIGNoZWNrYm94XHJcbiAgICB0cmlzdGF0ZURvbS50YWJJbmRleCA9IGNoZWNrYm94RWxlbWVudC50YWJJbmRleDtcclxuXHJcbiAgICAvLyBJbnNlcnQgdGhlIGhpZGRlbiBpbnB1dCBpbnNpZGUgdGhlIGN1c3RvbSBjaGVja2JveCBkaXZcclxuICAgIHRyaXN0YXRlRG9tLmFwcGVuZENoaWxkKGhpZGRlbklucHV0KTtcclxuXHJcbiAgICAvLyBJbnNlcnQgaXQgbmV4dCB0byB0aGUgYWN0dWFsIGNoZWNrYm94XHJcbiAgICBjaGVja2JveEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodHJpc3RhdGVEb20sIGNoZWNrYm94RWxlbWVudC5uZXh0U2libGluZyk7XHJcblxyXG4gICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyXHJcbiAgICB0cmlzdGF0ZURvbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgdG9nZ2xlVHJpU3RhdGVDaGVja2JveFN0YXRlKHRyaXN0YXRlRG9tLCBjaGVja2JveEVsZW1lbnQsIGhpZGRlbklucHV0KTtcclxuICAgICAgICBidWJibGVFdmVudHNUb09yaWdpbmFsQ2hlY2tib3gob3B0aW9ucywgY2hlY2tib3hFbGVtZW50LCB0cmlzdGF0ZURvbSwgaGlkZGVuSW5wdXQsIGUpO1xyXG4gICAgfSk7XHJcbiAgICB0cmlzdGF0ZURvbS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9ua2V5dXAuYmluZChudWxsLCBjaGVja2JveEVsZW1lbnQpKTtcclxuXHJcbiAgICByZXR1cm4gW2NoZWNrYm94RWxlbWVudCwgdHJpc3RhdGVEb20sIGhpZGRlbklucHV0XTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0RGVmYXVsdFN0YXRlKG9wdGlvbnMsIHRyaXN0YXRlRG9tLCBoaWRkZW5JbnB1dCkge1xyXG4gICAgLy9mb3IgYWxsIHZhbHVlcyBwb3NzaWJsZSBmb3IgZGVmYXVsdFN0YXRlLCBzZXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGNoZWNrYm94XHJcbiAgICBpZiAob3B0aW9ucy5kZWZhdWx0U3RhdGUgPT09ICdjaGVja2VkJykge1xyXG4gICAgICAgIHRyaXN0YXRlRG9tLmNsYXNzTGlzdC5yZW1vdmUoJ3VuY2hlY2tlZCcpO1xyXG4gICAgICAgIHRyaXN0YXRlRG9tLmNsYXNzTGlzdC5hZGQoJ2NoZWNrZWQnKTtcclxuICAgICAgICBoaWRkZW5JbnB1dC52YWx1ZSA9ICd0cnVlJztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wdGlvbnMuZGVmYXVsdFN0YXRlID09PSAndW5jaGVja2VkJykge1xyXG4gICAgICAgIHRyaXN0YXRlRG9tLmNsYXNzTGlzdC5yZW1vdmUoJ2NoZWNrZWQnKTtcclxuICAgICAgICB0cmlzdGF0ZURvbS5jbGFzc0xpc3QuYWRkKCd1bmNoZWNrZWQnKTtcclxuICAgICAgICBoaWRkZW5JbnB1dC5yZW1vdmVBdHRyaWJ1dGUoJ25hbWUnKTsgLy8gRW5zdXJlIHRoZSBoaWRkZW4gaW5wdXQgZG9lc24ndCBwb3N0IGFueSB2YWx1ZVxyXG4gICAgICAgIGhpZGRlbklucHV0LnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTsgLy8gRW5zdXJlIHRoZSBoaWRkZW4gaW5wdXQgZG9lc24ndCBwb3N0IGFueSB2YWx1ZVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAob3B0aW9ucy5kZWZhdWx0U3RhdGUgPT09ICdjcm9zc2VkJykge1xyXG4gICAgICAgIHRyaXN0YXRlRG9tLmNsYXNzTGlzdC5yZW1vdmUoJ2NoZWNrZWQnKTtcclxuICAgICAgICB0cmlzdGF0ZURvbS5jbGFzc0xpc3QuYWRkKCdjcm9zc2VkJyk7XHJcbiAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSAnZmFsc2UnO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wdXRlQ2xhc3NlcyhjbGFzc2VzKSB7XHJcbiAgICBsZXQgY29tcHV0ZWRDbGFzc2VzID0gW107XHJcbiAgICBpZih0eXBlb2YgY2xhc3NlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvL3JlcGxhY2UgbXVsdGlwbGUgd2hpdGUgc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5yZXBsYWNlKC9cXHNcXHMrL2csICcgJyk7XHJcbiAgICAgICAgaWYoY2xhc3Nlcy5pbmRleE9mKCcgJykgPiAtMSlcclxuICAgICAgICAgICAgY29tcHV0ZWRDbGFzc2VzID0gY2xhc3Nlcy5zcGxpdCgnICcpO1xyXG4gICAgICAgIGVsc2UgaWYoY2xhc3Nlcy5pbmRleE9mKCcsJykgPiAtMSlcclxuICAgICAgICAgICAgY29tcHV0ZWRDbGFzc2VzID0gY2xhc3Nlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY29tcHV0ZWRDbGFzc2VzID0gW2NsYXNzZXNdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihBcnJheS5pc0FycmF5KGNsYXNzZXMpKSB7XHJcbiAgICAgICAgY29tcHV0ZWRDbGFzc2VzID0gY2xhc3NlcztcclxuICAgIH1cclxuICAgIHJldHVybiBjb21wdXRlZENsYXNzZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJ1YmJsZUV2ZW50c1RvT3JpZ2luYWxDaGVja2JveChvcHRpb25zLCBjaGVja2JveEVsZW1lbnQsIHRyaXN0YXRlRG9tLCBoaWRkZW5JbnB1dCwgZXZlbnQpIHtcclxuICAgIC8vaWYgb3B0aW9ucy5jYWxsYmFja3MuY2hhbmdlIGlzIHNldCwgY2FsbCBpdFxyXG4gICAgaWYob3B0aW9ucy5jYWxsYmFja3MgJiYgb3B0aW9ucy5jYWxsYmFja3MuY2hhbmdlICYmIHR5cGVvZiBvcHRpb25zLmNhbGxiYWNrcy5jaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBvcHRpb25zLmNhbGxiYWNrcy5jaGFuZ2UoY2hlY2tib3hFbGVtZW50LCB0cmlzdGF0ZURvbSwgaGlkZGVuSW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFvcHRpb25zLmJ1YmJsZUV2ZW50cykgcmV0dXJuO1xyXG5cclxuICAgIGlmKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcclxuICAgICAgICBjaGVja2JveEVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihldmVudC50eXBlID09PSAna2V5dXAnKSB7XHJcbiAgICAgICAgY2hlY2tib3hFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgeyBrZXk6ICcgJywgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGV2ZW50LnR5cGUgPT09ICdjaGFuZ2UnKSB7XHJcbiAgICAgICAgY2hlY2tib3hFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvbmtleXVwKGNoZWNrYm94RWxlbWVudCwgZXZlbnQpIHtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAzMikge1xyXG4gICAgICAgIGJ1YmJsZUV2ZW50c1RvT3JpZ2luYWxDaGVja2JveChjaGVja2JveEVsZW1lbnQsIGV2ZW50KTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC5jbGljaygpO1xyXG4gICAgfVxyXG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHRcIm1haW5cIjogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIl9fd2VicGFja19yZXF1aXJlX18ubmMgPSB1bmRlZmluZWQ7IiwiaW1wb3J0IGF1Z21lbnRXaXRoTGlzdGVuIGZyb20gJy4vbW9kdWxlcy9saXN0ZW4vbGlzdGVuLm1qcyc7XHJcbmltcG9ydCBhdWdtZW50V2l0aFRyaXN0YXRlIGZyb20gJy4vbW9kdWxlcy90cmlzdGF0ZS90cmlzdGF0ZS5tanMnO1xyXG5pbXBvcnQgZGlhbG9nIGZyb20gJy4vbW9kdWxlcy9kaWFsb2cvZGlhbG9nLm1qcyc7XHJcbmltcG9ydCB7IGxvYWRDc3MgfSBmcm9tICcuL21vZHVsZXMvY29tbW9uLm1qcyc7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBBUFggb2JqZWN0IHRoYXQgd3JhcHMgb25lIG9yIG1vcmUgSFRNTCBlbGVtZW50cy5cclxuICogQHBhcmFtIHtzdHJpbmd8SFRNTEVsZW1lbnR8Tm9kZUxpc3R8SFRNTENvbGxlY3Rpb258QXJyYXk8SFRNTEVsZW1lbnQ+fGpRdWVyeXxGdW5jdGlvbn0gaW5wdXQgLSBUaGUgaW5wdXQgdG8gY3JlYXRlIHRoZSBBUFggb2JqZWN0IGZyb20uXHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBBUFggb2JqZWN0LlxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGlucHV0IHR5cGUgaXMgaW52YWxpZC5cclxuICogQGV4YW1wbGVcclxuICogLy8gWFBhdGhcclxuICogY29uc3QgYXB4MSA9IEFQWCgnLy9kaXZbQGNsYXNzPVwiZXhhbXBsZVwiXScpO1xyXG4gKlxyXG4gKiAvLyBDU1Mgc2VsZWN0b3JcclxuICogY29uc3QgYXB4MiA9IEFQWCgnLmV4YW1wbGUnKTtcclxuICpcclxuICogLy8gU2luZ2xlIGVsZW1lbnRcclxuICogY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5leGFtcGxlJyk7XHJcbiAqIGNvbnN0IGFweDMgPSBBUFgoZWxlbWVudCk7XHJcbiAqXHJcbiAqIC8vIE5vZGVMaXN0IG9yIEhUTUxDb2xsZWN0aW9uXHJcbiAqIGNvbnN0IG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmV4YW1wbGUnKTtcclxuICogY29uc3QgYXB4NCA9IEFQWChub2RlTGlzdCk7XHJcbiAqXHJcbiAqIC8vIEFycmF5IG9mIGVsZW1lbnRzXHJcbiAqIGNvbnN0IGVsZW1lbnRzID0gW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5leGFtcGxlMScpLCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZXhhbXBsZTInKV07XHJcbiAqIGNvbnN0IGFweDUgPSBBUFgoZWxlbWVudHMpO1xyXG4gKlxyXG4gKiAvLyBqUXVlcnkgb2JqZWN0XHJcbiAqIGNvbnN0ICRleGFtcGxlID0gJCgnLmV4YW1wbGUnKTtcclxuICogY29uc3QgYXB4NiA9IEFQWCgkZXhhbXBsZSk7XHJcbiAqXHJcbiAqIC8vIEZ1bmN0aW9uIHJldHVybmluZyBhbiBBUFggb2JqZWN0XHJcbiAqIGNvbnN0IGFweDcgPSBBUFgoKCkgPT4gQVBYKCcuZXhhbXBsZScpKTtcclxuICovXHJcbmNvbnN0IEFQWCA9IGZ1bmN0aW9uIChpbnB1dCwgY29udGV4dCA9IGRvY3VtZW50KSB7XHJcbiAgICBsZXQgZWxlbWVudHM7XHJcblxyXG4gICAgLy8gVmFsaWRhdGUgY29udGV4dFxyXG4gICAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbnRleHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoQVBYLmlzQVBYT2JqZWN0KGNvbnRleHQpKSB7XHJcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQuZmlyc3QoKTtcclxuICAgIH0gZWxzZSBpZiAoIShjb250ZXh0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgY29udGV4dCBpbnN0YW5jZW9mIERvY3VtZW50KSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb250ZXh0IGZvciBBUFgnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5zdGFydHNXaXRoKCcvLycpKSB7XHJcbiAgICAgICAgLy8gWFBhdGggd2l0aCBjb250ZXh0XHJcbiAgICAgICAgZWxlbWVudHMgPSBkb2N1bWVudC5ldmFsdWF0ZShpbnB1dCwgY29udGV4dCwgbnVsbCwgWFBhdGhSZXN1bHQuQU5ZX1RZUEUsIG51bGwpO1xyXG4gICAgICAgIGxldCBub2RlcyA9IFtdO1xyXG4gICAgICAgIGxldCBub2RlID0gZWxlbWVudHMuaXRlcmF0ZU5leHQoKTtcclxuICAgICAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICBub2RlID0gZWxlbWVudHMuaXRlcmF0ZU5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudHMgPSBub2RlcztcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIC8vIENTUyBzZWxlY3RvciB3aXRoIGNvbnRleHRcclxuICAgICAgICBlbGVtZW50cyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChpbnB1dCk7XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICAvLyBTaW5nbGUgZWxlbWVudCB3aXRoaW4gY29udGV4dFxyXG4gICAgICAgIGVsZW1lbnRzID0gY29udGV4dC5jb250YWlucyhpbnB1dCkgPyBbaW5wdXRdIDogW107XHJcbiAgICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgTm9kZUxpc3QgfHwgaW5wdXQgaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbikge1xyXG4gICAgICAgIC8vIE5vZGVMaXN0IG9yIEhUTUxDb2xsZWN0aW9uIHdpdGhpbiBjb250ZXh0XHJcbiAgICAgICAgZWxlbWVudHMgPSBBcnJheS5mcm9tKGlucHV0KS5maWx0ZXIoZWwgPT4gY29udGV4dC5jb250YWlucyhlbCkpO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSAmJiBpbnB1dC5ldmVyeShlbCA9PiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xyXG4gICAgICAgIC8vIEFycmF5IG9mIGVsZW1lbnRzIHdpdGhpbiBjb250ZXh0XHJcbiAgICAgICAgZWxlbWVudHMgPSBpbnB1dC5maWx0ZXIoZWwgPT4gY29udGV4dC5jb250YWlucyhlbCkpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgalF1ZXJ5ICE9ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgalF1ZXJ5KSB7XHJcbiAgICAgICAgLy8galF1ZXJ5IG9iamVjdCB3aXRoaW4gY29udGV4dFxyXG4gICAgICAgIGVsZW1lbnRzID0gQXJyYXkuZnJvbShpbnB1dC5nZXQoKSkuZmlsdGVyKGVsID0+IGNvbnRleHQuY29udGFpbnMoZWwpKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgLy8gRnVuY3Rpb24gcmV0dXJuaW5nIGFuIEFQWCBvYmplY3Qgd2l0aCBjb250ZXh0XHJcbiAgICAgICAgZWxlbWVudHMgPSBBUFgoaW5wdXQoKSwgY29udGV4dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0eXBlIGZvciBBUFgnKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgYXB4ID0ge1xyXG4gICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cyxcclxuICAgICAgICBfaXNBUFhPYmplY3Q6IHRydWVcclxuICAgIH07XHJcbiAgICBhcHgubGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xyXG4gICAgYXB4LmVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAodGhpcy5lbGVtZW50cyBpbnN0YW5jZW9mIEFycmF5KSB0aGlzLmVsZW1lbnRzLmZvckVhY2goY2FsbGJhY2spO1xyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIEFycmF5LmZyb20odGhpcy5lbGVtZW50cykuZm9yRWFjaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG4gICAgYXB4LmdldCA9IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzW2luZGV4XTtcclxuICAgIH07XHJcbiAgICBhcHguYWxsID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRzIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiB0aGlzLmVsZW1lbnRzO1xyXG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfTtcclxuICAgIGFweC5maXJzdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXQoMCk7XHJcbiAgICB9O1xyXG4gICAgYXVnbWVudFdpdGhMaXN0ZW4oYXB4KTtcclxuICAgIGF1Z21lbnRXaXRoVHJpc3RhdGUoYXB4KTtcclxuICAgIHJldHVybiBhcHg7XHJcbn07XHJcblxyXG5BUFgubG9hZENzcyA9IGxvYWRDc3M7XHJcbkFQWC5kaWFsb2cgPSBkaWFsb2c7XHJcbkFQWC5pc0FQWE9iamVjdCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgIHJldHVybiBvYmogJiYgb2JqLl9pc0FQWE9iamVjdCA9PT0gdHJ1ZTtcclxufVxyXG5BUFguaXNfbnVtZXJpYyA9IChuKSA9PiB7XHJcbiAgICByZXR1cm4gIWlzTmFOKG4gLSBwYXJzZUZsb2F0KG4pKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQVBYOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==