@gnwebsoft/ui 4.0.0 → 4.0.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.
Files changed (56) hide show
  1. package/dist/chunk-BXF3QEBN.js +2181 -0
  2. package/dist/chunk-DS524L7W.cjs +467 -0
  3. package/dist/chunk-FYU2OIMD.js +15 -0
  4. package/dist/chunk-GHW77WIM.cjs +72 -0
  5. package/dist/chunk-GLN5JSFF.cjs +2181 -0
  6. package/dist/chunk-GVWCGJ3F.js +140 -0
  7. package/dist/chunk-LUW7V5GI.cjs +15 -0
  8. package/dist/chunk-M526GQZS.js +2490 -0
  9. package/dist/chunk-MULSVYFT.js +72 -0
  10. package/dist/chunk-MVPLBJRK.cjs +1 -1
  11. package/dist/chunk-PUQIPRL2.js +467 -0
  12. package/dist/chunk-QLQ6OH25.cjs +2490 -0
  13. package/dist/chunk-Y3QTSDLJ.cjs +140 -0
  14. package/dist/core/index.cjs +121 -0
  15. package/dist/core/index.js +121 -0
  16. package/dist/hooks/index.cjs +3 -3
  17. package/dist/hooks/index.js +1 -1
  18. package/dist/index.cjs +85 -7
  19. package/dist/index.js +147 -69
  20. package/dist/types/index.cjs +3 -3
  21. package/dist/types/index.js +1 -1
  22. package/dist/utils/index.cjs +4 -24
  23. package/dist/utils/index.js +6 -26
  24. package/dist/wrappers/index.cjs +7 -4
  25. package/dist/wrappers/index.js +21 -18
  26. package/package.json +22 -17
  27. package/dist/AsyncSelectPayload-B9-6l33R.d.cts +0 -10
  28. package/dist/AsyncSelectPayload-B9-6l33R.d.ts +0 -10
  29. package/dist/chunk-3OPVOWQK.js +0 -140
  30. package/dist/chunk-AEOF2TUF.cjs +0 -2273
  31. package/dist/chunk-ALHC7RLK.js +0 -575
  32. package/dist/chunk-BRRLB22L.js +0 -72
  33. package/dist/chunk-CHZU4PZB.js +0 -2273
  34. package/dist/chunk-EBRUE2WR.cjs +0 -493
  35. package/dist/chunk-HEHPKM4B.cjs +0 -140
  36. package/dist/chunk-K2EJ4YKO.cjs +0 -72
  37. package/dist/chunk-U6SDYCWF.js +0 -493
  38. package/dist/chunk-XY4U6A77.cjs +0 -575
  39. package/dist/components/index.cjs +0 -25
  40. package/dist/components/index.d.cts +0 -752
  41. package/dist/components/index.d.ts +0 -752
  42. package/dist/components/index.js +0 -25
  43. package/dist/enhanced-CDTkKUlj.d.ts +0 -134
  44. package/dist/enhanced-ZQoS03Cd.d.cts +0 -134
  45. package/dist/events-BcHVCLBz.d.cts +0 -77
  46. package/dist/events-BcHVCLBz.d.ts +0 -77
  47. package/dist/hooks/index.d.cts +0 -96
  48. package/dist/hooks/index.d.ts +0 -96
  49. package/dist/index.d.cts +0 -16
  50. package/dist/index.d.ts +0 -16
  51. package/dist/types/index.d.cts +0 -820
  52. package/dist/types/index.d.ts +0 -820
  53. package/dist/utils/index.d.cts +0 -683
  54. package/dist/utils/index.d.ts +0 -683
  55. package/dist/wrappers/index.d.cts +0 -1753
  56. package/dist/wrappers/index.d.ts +0 -1753
@@ -1,493 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/components/ClearButton/ClearButton.tsx
2
- var _material = require('@mui/material');
3
- var _jsxruntime = require('react/jsx-runtime');
4
- var ClearButton = ({
5
- isSubmitting,
6
- handleClear,
7
- sx,
8
- storeKey
9
- }) => {
10
- const onClick = () => {
11
- handleClear();
12
- if (storeKey != null) {
13
- localStorage.removeItem(storeKey);
14
- }
15
- };
16
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17
- _material.Button,
18
- {
19
- variant: "outlined",
20
- onClick,
21
- disabled: isSubmitting,
22
- sx,
23
- children: "Clear"
24
- }
25
- );
26
- };
27
- var ClearButton_default = ClearButton;
28
-
29
- // src/components/FilterButton/FilterButton.tsx
30
- var _FilterAlt = require('@mui/icons-material/FilterAlt'); var _FilterAlt2 = _interopRequireDefault(_FilterAlt);
31
- var _lab = require('@mui/lab');
32
-
33
-
34
- var FilterButton = ({
35
- isSubmitting,
36
- show,
37
- title,
38
- icon,
39
- sx,
40
- iconSx
41
- }) => {
42
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
43
- _lab.LoadingButton,
44
- {
45
- type: "submit",
46
- variant: "contained",
47
- loading: isSubmitting,
48
- disabled: !show,
49
- disableRipple: true,
50
- color: "primary",
51
- sx: {
52
- display: "flex",
53
- alignItems: "center",
54
- ...sx
55
- },
56
- startIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Badge, { color: "error", variant: "standard", children: icon ? icon : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _FilterAlt2.default, { width: "20", height: "20", sx: iconSx }) }),
57
- children: _optionalChain([title, 'optionalAccess', _ => _.trim, 'call', _2 => _2()]) === "" || !title ? "Filter" : title
58
- }
59
- );
60
- };
61
- var FilterButton_default = FilterButton;
62
-
63
- // src/components/FilterWrapper/FilterWrapper.tsx
64
- var _ManageSearch = require('@mui/icons-material/ManageSearch'); var _ManageSearch2 = _interopRequireDefault(_ManageSearch);
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
- var FilterWrapper = ({
77
- children,
78
- title,
79
- filterCount,
80
- cardSx,
81
- textSx,
82
- icon,
83
- iconSx,
84
- showCount
85
- }) => {
86
- const theme = _material.useTheme.call(void 0, );
87
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
88
- _material.Card,
89
- {
90
- sx: {
91
- position: "relative",
92
- borderRadius: "0px",
93
- mb: 2,
94
- ...cardSx
95
- },
96
- children: [
97
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
98
- _material.CardHeader,
99
- {
100
- sx: {
101
- display: "flex",
102
- flexWrap: "wrap",
103
- p: "1rem",
104
- ".MuiCardHeader-action": {
105
- margin: 0,
106
- alignSelf: "center"
107
- },
108
- alignItems: "center"
109
- },
110
- title: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
111
- icon ? icon : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
112
- _ManageSearch2.default,
113
- {
114
- sx: {
115
- height: "2.5rem",
116
- color: theme.palette.primary.main,
117
- ...iconSx
118
- }
119
- }
120
- ),
121
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
122
- _material.Typography,
123
- {
124
- variant: "h5",
125
- sx: {
126
- fontWeight: "bold",
127
- color: theme.palette.primary.main,
128
- ...textSx
129
- },
130
- children: [
131
- title ? title : "Filter",
132
- " ",
133
- showCount ? `(${filterCount ? filterCount : 0})` : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {})
134
- ]
135
- }
136
- )
137
- ] })
138
- }
139
- ),
140
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Divider, {}),
141
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CardContent, { sx: { py: 2 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { container: true, spacing: 2, children }) })
142
- ]
143
- }
144
- );
145
- };
146
- var FilterWrapper_default = FilterWrapper;
147
-
148
- // src/components/FormWrapper/FormWrapper.tsx
149
-
150
-
151
-
152
-
153
-
154
-
155
-
156
-
157
-
158
-
159
- var FormWrapper = ({
160
- children,
161
- title,
162
- editMode,
163
- cardSx,
164
- textSx,
165
- icon,
166
- actionButton
167
- }) => {
168
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
169
- _material.Card,
170
- {
171
- sx: {
172
- position: "relative",
173
- borderRadius: "0px",
174
- ...cardSx
175
- },
176
- children: [
177
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
178
- _material.CardHeader,
179
- {
180
- sx: {
181
- display: "flex",
182
- flexWrap: "wrap",
183
- p: "1rem",
184
- ".MuiCardHeader-action": {
185
- margin: 0,
186
- alignSelf: "center"
187
- }
188
- },
189
- title: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
190
- _material.Box,
191
- {
192
- sx: {
193
- display: "flex",
194
- alignItems: "center",
195
- justifyContent: "space-between"
196
- },
197
- children: [
198
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
199
- _nullishCoalesce(icon, () => ( icon)),
200
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { color: "primary", sx: textSx, children: title })
201
- ] }),
202
- actionButton
203
- ]
204
- }
205
- )
206
- }
207
- ),
208
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Divider, { sx: { mt: 0 } }),
209
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { container: true, spacing: 2, children }) })
210
- ]
211
- }
212
- );
213
- };
214
- var FormWrapper_default = FormWrapper;
215
-
216
- // src/components/LabelText/LabelText.tsx
217
-
218
-
219
- var LabelText = ({
220
- label,
221
- value,
222
- gridSize,
223
- containerSize,
224
- labelSx,
225
- valueSx
226
- }) => {
227
- const defaultGridSize = {
228
- labelSize: { xs: 6, sm: 6, md: 6 },
229
- valueSize: { xs: 12, sm: 6, md: 6 }
230
- };
231
- const defaultContainerSize = { xs: 12, sm: 6, md: 6 };
232
- const size = gridSize || defaultGridSize;
233
- const container = containerSize || defaultContainerSize;
234
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
235
- _material.Grid,
236
- {
237
- size: container,
238
- sx: {
239
- display: "flex",
240
- flexDirection: { xs: "column", sm: "row", md: "row" },
241
- "&:hover": { bgcolor: "#efefef", overflow: "hidden" }
242
- },
243
- children: [
244
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
245
- _material.Grid,
246
- {
247
- size: size.labelSize,
248
- sx: {
249
- padding: "5px",
250
- fontSize: "14px",
251
- textAlign: { xs: "left", sm: "right", md: "right" },
252
- ...labelSx
253
- },
254
- children: [
255
- label,
256
- " :"
257
- ]
258
- }
259
- ),
260
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
261
- _material.Grid,
262
- {
263
- size: size.valueSize,
264
- sx: { padding: "5px", display: "flex", flexWrap: "wrap" },
265
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: value, arrow: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
266
- _material.Typography,
267
- {
268
- sx: {
269
- fontSize: "14px",
270
- wordBreak: "break-word",
271
- overflow: "hidden",
272
- display: "-webkit-box",
273
- textOverflow: "ellipsis",
274
- WebkitLineClamp: 2,
275
- WebkitBoxOrient: "vertical",
276
- ...valueSx,
277
- color: "#078dee"
278
- },
279
- children: value ? value : "-"
280
- }
281
- ) })
282
- }
283
- )
284
- ]
285
- }
286
- );
287
- };
288
- var LabelText_default = LabelText;
289
-
290
- // src/components/ListWrapper/ListWrapper.tsx
291
-
292
-
293
-
294
-
295
-
296
-
297
-
298
-
299
-
300
-
301
-
302
-
303
- var ListWrapper = ({
304
- children,
305
- title,
306
- count,
307
- show = true,
308
- actionButton,
309
- cardSx,
310
- textSx,
311
- icon,
312
- iconSx,
313
- showCount = true
314
- }) => {
315
- const theme = _material.useTheme.call(void 0, );
316
- if (!show) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {});
317
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
318
- _material.Card,
319
- {
320
- sx: {
321
- position: "relative",
322
- borderRadius: "0px",
323
- ...cardSx
324
- },
325
- children: [
326
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
327
- _material.CardHeader,
328
- {
329
- sx: {
330
- display: "flex",
331
- flexWrap: "wrap",
332
- p: "1rem",
333
- ".MuiCardHeader-action": {
334
- margin: 0,
335
- alignSelf: "center"
336
- },
337
- alignItems: "center"
338
- },
339
- title: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
340
- _material.Box,
341
- {
342
- sx: {
343
- display: "flex",
344
- alignItems: "center",
345
- justifyContent: "space-between"
346
- },
347
- children: [
348
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
349
- icon ? icon : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
350
- _ManageSearch2.default,
351
- {
352
- sx: {
353
- height: "2.5rem",
354
- color: theme.palette.primary.main,
355
- ...iconSx
356
- }
357
- }
358
- ),
359
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
360
- _material.Typography,
361
- {
362
- variant: "h5",
363
- sx: {
364
- fontWeight: "bold",
365
- color: theme.palette.primary.main,
366
- ...textSx
367
- },
368
- children: [
369
- title ? title : "List",
370
- showCount ? `(${count ? count : 0})` : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {})
371
- ]
372
- }
373
- )
374
- ] }),
375
- actionButton
376
- ]
377
- }
378
- )
379
- }
380
- ),
381
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Divider, {}),
382
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CardContent, { sx: { pt: 0 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { container: true, spacing: 2, children }) })
383
- ]
384
- }
385
- );
386
- };
387
- var ListWrapper_default = ListWrapper;
388
-
389
- // src/components/SimpleToolbar/SimpleToolbar.tsx
390
-
391
-
392
-
393
-
394
-
395
-
396
-
397
- var _xdatagrid = require('@mui/x-data-grid');
398
-
399
- var SimpleToolbar = () => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _xdatagrid.GridToolbarContainer, { children: [
400
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
401
- _material.Box,
402
- {
403
- sx: {
404
- "& .MuiInputBase-root": {
405
- borderRadius: "8px",
406
- padding: "6px 10px"
407
- },
408
- "& input": {
409
- fontSize: "14px",
410
- color: "#333"
411
- },
412
- borderRadius: "8px"
413
- },
414
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _xdatagrid.GridToolbarQuickFilter, {})
415
- }
416
- ),
417
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { sx: { flexGrow: 1 } }),
418
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _xdatagrid.GridToolbarColumnsButton, {}),
419
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _xdatagrid.GridToolbarFilterButton, {}),
420
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _xdatagrid.GridToolbarExport, {})
421
- ] });
422
- var SimpleToolbar_default = SimpleToolbar;
423
-
424
- // src/components/SimpleButton/SimpleButton.tsx
425
-
426
- var _react = require('react');
427
-
428
- var SimpleButton = _react.memo.call(void 0, _react.forwardRef.call(void 0,
429
- ({
430
- show = true,
431
- loading = false,
432
- loadingText,
433
- children,
434
- ...rest
435
- }, ref) => {
436
- if (!show) return null;
437
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
438
- _material.Button,
439
- {
440
- ref,
441
- disabled: loading || rest.disabled,
442
- startIcon: loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CircularProgress, { size: 16 }) : rest.startIcon,
443
- ...rest,
444
- children: loading && loadingText ? loadingText : children
445
- }
446
- ) });
447
- }
448
- ));
449
- SimpleButton.displayName = "SimpleButton";
450
- var SimpleButton_default = SimpleButton;
451
-
452
- // src/components/AuthorizedView/AuthorizedView.tsx
453
-
454
- var AuthorizedView = ({ children, show }) => {
455
- if (!show) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {});
456
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
457
- };
458
- var AuthorizedView_default = AuthorizedView;
459
-
460
- // src/components/CancelButton/CancelButton.tsx
461
-
462
-
463
- var CancelButton = ({
464
- isSubmitting,
465
- handleCancel,
466
- sx
467
- }) => {
468
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
469
- _material.Button,
470
- {
471
- variant: "outlined",
472
- onClick: handleCancel,
473
- disabled: isSubmitting,
474
- sx,
475
- children: "Cancel"
476
- }
477
- );
478
- };
479
- var CancelButton_default = CancelButton;
480
-
481
-
482
-
483
-
484
-
485
-
486
-
487
-
488
-
489
-
490
-
491
-
492
- exports.ClearButton_default = ClearButton_default; exports.FilterButton_default = FilterButton_default; exports.FilterWrapper_default = FilterWrapper_default; exports.FormWrapper_default = FormWrapper_default; exports.LabelText_default = LabelText_default; exports.ListWrapper_default = ListWrapper_default; exports.SimpleToolbar_default = SimpleToolbar_default; exports.SimpleButton_default = SimpleButton_default; exports.AuthorizedView_default = AuthorizedView_default; exports.CancelButton_default = CancelButton_default;
493
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9idWlsZHMvbGlicy9HTldlYlNvZnQuVUkvcGFja2FnZXMvdWkvZGlzdC9jaHVuay1FQlJVRTJXUi5janMiLCIuLi9zcmMvY29tcG9uZW50cy9DbGVhckJ1dHRvbi9DbGVhckJ1dHRvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9GaWx0ZXJCdXR0b24vRmlsdGVyQnV0dG9uLnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL0ZpbHRlcldyYXBwZXIvRmlsdGVyV3JhcHBlci50c3giLCIuLi9zcmMvY29tcG9uZW50cy9Gb3JtV3JhcHBlci9Gb3JtV3JhcHBlci50c3giLCIuLi9zcmMvY29tcG9uZW50cy9MYWJlbFRleHQvTGFiZWxUZXh0LnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL0xpc3RXcmFwcGVyL0xpc3RXcmFwcGVyLnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL1NpbXBsZVRvb2xiYXIvU2ltcGxlVG9vbGJhci50c3giLCIuLi9zcmMvY29tcG9uZW50cy9TaW1wbGVCdXR0b24vU2ltcGxlQnV0dG9uLnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL0F1dGhvcml6ZWRWaWV3L0F1dGhvcml6ZWRWaWV3LnRzeCIsIi4uL3NyYy9jb21wb25lbnRzL0NhbmNlbEJ1dHRvbi9DYW5jZWxCdXR0b24udHN4Il0sIm5hbWVzIjpbImpzeCIsInVzZVRoZW1lIiwianN4cyIsIkNhcmQiLCJDYXJkSGVhZGVyIiwiQm94IiwiVHlwb2dyYXBoeSIsIkRpdmlkZXIiLCJDYXJkQ29udGVudCIsIkdyaWQiLCJGcmFnbWVudCIsIk1hbmFnZVNlYXJjaEljb24iLCJCdXR0b24iXSwibWFwcGluZ3MiOiJBQUFBO0FDQ0EseUNBQXVCO0FBNEVuQiwrQ0FBQTtBQWRKLElBQU0sWUFBQSxFQUFjLENBQUM7QUFBQSxFQUNuQixZQUFBO0FBQUEsRUFDQSxXQUFBO0FBQUEsRUFDQSxFQUFBO0FBQUEsRUFDQTtBQUNGLENBQUEsRUFBQSxHQUF3QjtBQUN0QixFQUFBLE1BQU0sUUFBQSxFQUFVLENB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WUFBQSxFQUFjLFlBQUEsRUFBYztBQUFBLE1BQUE7QUFBQSxJQUMxQyxFQUFBLENBQ0YsQ0FBQTtBQUFBLEVBRUo7QUFDRixDQUFDLENBQUE7QUFFRCxZQUFBLENBQWEsWUFBQSxFQUFjLGNBQUE7QUFFM0IsSUFBTyxxQkFBQSxFQUFRLFlBQUE7QVJ5VmY7QUFDQTtBU3hab0I7QUFEcEIsSUFBTSxlQUFBLEVBQWlCLENBQUMsRUFBRSxRQUFBLEVBQVUsS0FBSyxDQUFBLEVBQUEsR0FBMkI7QUFDbEUsRUFBQSxHQUFBLENBQUksQ0FBQyxJQUFBLEVBQU0sdUJBQU9BLDZCQUFBQSxvQkFBQVUsRUFBQSxDQUFBLENBQUUsQ0FBQTtBQUVwQixFQUFBLHVCQUFPViw2QkFBQUEsb0JBQUFVLEVBQUEsRUFBRyxTQUFBLENBQVMsQ0FBQTtBQUNyQixDQUFBO0FBRUEsSUFBTyx1QkFBQSxFQUFRLGNBQUE7QVQwWmY7QUFDQTtBVTFjQTtBQThESTtBQU5KLElBQU0sYUFBQSxFQUFlLENBQUM7QUFBQSxFQUNwQixZQUFBO0FBQUEsRUFDQSxZQUFBO0FBQUEsRUFDQTtBQUNGLENBQUEsRUFBQSxHQUF5QjtBQUN2QixFQUFBLHVCQUNFViw2QkFBQUE7QUFBQSxJQUFDWSxnQkFBQUE7QUFBQSxJQUFBO0FBQUEsTUFDQyxPQUFBLEVBQVEsVUFBQTtBQUFBLE1BQ1IsT0FBQSxFQUFTLFlBQUE7QUFBQSxNQUNULFFBQUEsRUFBVSxZQUFBO0FBQUEsTUFDVixFQUFBO0FBQUEsTUFDRCxRQUFBLEVBQUE7QUFBQSxJQUFBO0FBQUEsRUFFRCxDQUFBO0FBRUosQ0FBQTtBQUVBLElBQU8scUJBQUEsRUFBUSxZQUFBO0FWcVpmO0FBQ0E7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNGLDZnQkFBQyIsImZpbGUiOiIvYnVpbGRzL2xpYnMvR05XZWJTb2Z0LlVJL3BhY2thZ2VzL3VpL2Rpc3QvY2h1bmstRUJSVUUyV1IuY2pzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgdHlwZSB7IFN4UHJvcHMgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIENsZWFyQnV0dG9uIGNvbXBvbmVudC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmludGVyZmFjZSBDbGVhckJ1dHRvblByb3BzIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhIGZvcm0gb3Igb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBiZWluZyBzdWJtaXR0ZWQuXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCB0byBwcmV2ZW50IG11bHRpcGxlIGNsZWFyIGFjdGlvbnMuXG4gICAqL1xuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCB3aGVuIHRoZSBjbGVhciBidXR0b24gaXMgY2xpY2tlZC5cbiAgICogU2hvdWxkIGhhbmRsZSB0aGUgY2xlYXJpbmcgbG9naWMgKGUuZy4sIGZvcm0gcmVzZXQsIGRhdGEgY2xlYXJpbmcpLlxuICAgKi9cbiAgaGFuZGxlQ2xlYXI6ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNVUkgc3ggcHJvcCBmb3IgY3VzdG9tIHN0eWxpbmcuXG4gICAqIEBleGFtcGxlIHsgbXQ6IDIsIGNvbG9yOiAnd2FybmluZy5tYWluJyB9XG4gICAqL1xuICBzeD86IFN4UHJvcHM7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBsb2NhbFN0b3JhZ2Uga2V5IHRvIHJlbW92ZSB3aGVuIGNsZWFyaW5nLlxuICAgKiBJZiBwcm92aWRlZCwgdGhlIGNvcnJlc3BvbmRpbmcgbG9jYWxTdG9yYWdlIGl0ZW0gd2lsbCBiZSByZW1vdmVkIG9uIGNsaWNrLlxuICAgKiBAZXhhbXBsZSBcInVzZXItcHJlZmVyZW5jZXNcIiBvciBcImZvcm0tZGF0YVwiXG4gICAqL1xuICBzdG9yZUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgY2xlYXIgYnV0dG9uIGNvbXBvbmVudCB3aXRoIGxvY2FsU3RvcmFnZSBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgY2xlYXIgYnV0dG9uIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlc1xuICogYm90aCBjYWxsYmFjayBleGVjdXRpb24gYW5kIG9wdGlvbmFsIGxvY2FsU3RvcmFnZSBjbGVhbnVwLiBJdCBhdXRvbWF0aWNhbGx5XG4gKiBkaXNhYmxlcyBkdXJpbmcgZm9ybSBzdWJtaXNzaW9ucyBhbmQgY2FuIGNsZWFyIHN0b3JlZCBkYXRhIHdoZW4gbmVlZGVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPENsZWFyQnV0dG9uXG4gKiAgIGlzU3VibWl0dGluZz17aXNMb2FkaW5nfVxuICogICBoYW5kbGVDbGVhcj17KCkgPT4gZm9ybS5yZXNldCgpfVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGxvY2FsU3RvcmFnZSBjbGVhbnVwOlxuICogYGBgdHN4XG4gKiA8Q2xlYXJCdXR0b25cbiAqICAgaXNTdWJtaXR0aW5nPXtmb3JtLmZvcm1TdGF0ZS5pc1N1Ym1pdHRpbmd9XG4gKiAgIGhhbmRsZUNsZWFyPXsoKSA9PiBzZXRGaWx0ZXJzKHt9KX1cbiAqICAgc3RvcmVLZXk9XCJ1c2VyLWZpbHRlcnNcIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wcyBmb3IgY2xlYXIgYnV0dG9uIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIE1VSSBCdXR0b24gY29tcG9uZW50IGNvbmZpZ3VyZWQgYXMgYSBjbGVhciBidXR0b25cbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IENsZWFyQnV0dG9uID0gKHtcbiAgaXNTdWJtaXR0aW5nLFxuICBoYW5kbGVDbGVhcixcbiAgc3gsXG4gIHN0b3JlS2V5LFxufTogQ2xlYXJCdXR0b25Qcm9wcykgPT4ge1xuICBjb25zdCBvbkNsaWNrID0gKCkgPT4ge1xuICAgIGhhbmRsZUNsZWFyKCk7XG4gICAgaWYgKHN0b3JlS2V5ICE9IG51bGwpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHN0b3JlS2V5KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICBzeD17c3h9XG4gICAgPlxuICAgICAgQ2xlYXJcbiAgICA8L0J1dHRvbj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENsZWFyQnV0dG9uO1xuIiwiaW1wb3J0IEZpbHRlckFsdEljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvRmlsdGVyQWx0XCI7XG5pbXBvcnQgeyBMb2FkaW5nQnV0dG9uIH0gZnJvbSBcIkBtdWkvbGFiXCI7XG5pbXBvcnQgdHlwZSB7IFN4UHJvcHMgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgQmFkZ2UsIHVzZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIEZpbHRlckJ1dHRvbiBjb21wb25lbnQuXG4gKlxuICogQHB1YmxpY1xuICovXG5pbnRlcmZhY2UgRmlsdGVyQnV0dG9uUHJvcHMge1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGEgZmlsdGVyIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuICAgKiBXaGVuIHRydWUsIHNob3dzIGxvYWRpbmcgc3Bpbm5lciBhbmQgZGlzYWJsZXMgdGhlIGJ1dHRvbi5cbiAgICovXG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGJ1dHRvbiB2aXNpYmlsaXR5IGFuZCBlbmFibGVkIHN0YXRlLlxuICAgKiBXaGVuIGZhbHNlLCB0aGUgYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIHNob3c/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIHRleHQgdG8gZGlzcGxheSBvbiB0aGUgYnV0dG9uLlxuICAgKiBAZGVmYXVsdFZhbHVlIFwiRmlsdGVyXCJcbiAgICogQGV4YW1wbGUgXCJBcHBseSBGaWx0ZXJzXCIgb3IgXCJTZWFyY2hcIlxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDdXN0b20gaWNvbiB0byBkaXNwbGF5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgZmlsdGVyIGljb24uXG4gICAqIEBleGFtcGxlIDxTZWFyY2hJY29uIC8+XG4gICAqL1xuICBpY29uPzogUmVhY3QuUmVhY3ROb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgTVVJIHN4IHByb3AgZm9yIGN1c3RvbSBidXR0b24gc3R5bGluZy5cbiAgICogQGV4YW1wbGUgeyBtdDogMiwgbWluV2lkdGg6IDEyMCB9XG4gICAqL1xuICBzeD86IFN4UHJvcHM7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNVUkgc3ggcHJvcCBmb3IgY3VzdG9tIGljb24gc3R5bGluZy5cbiAgICogQGV4YW1wbGUgeyBjb2xvcjogJ3ByaW1hcnkubWFpbicsIGZvbnRTaXplOiAxOCB9XG4gICAqL1xuICBpY29uU3g/OiBTeFByb3BzO1xufVxuXG4vKipcbiAqIEZpbHRlciBidXR0b24gY29tcG9uZW50IHdpdGggbG9hZGluZyBzdGF0ZXMgYW5kIGN1c3RvbWl6YWJsZSBhcHBlYXJhbmNlLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgc3RhbmRhcmRpemVkIGZpbHRlci9zdWJtaXQgYnV0dG9uIHdpdGggaW50ZWdyYXRlZCBsb2FkaW5nXG4gKiBzdGF0ZXMsIGljb24gc3VwcG9ydCwgYW5kIGJhZGdlIHN0eWxpbmcuIEl0J3MgZGVzaWduZWQgZm9yIHVzZSBpbiBmaWx0ZXIgZm9ybXNcbiAqIGFuZCBzZWFyY2ggaW50ZXJmYWNlcyB3aGVyZSB1c2VycyBuZWVkIHRvIGFwcGx5IGZpbHRlcmluZyBjcml0ZXJpYS5cbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2U6XG4gKiBgYGB0c3hcbiAqIDxGaWx0ZXJCdXR0b25cbiAqICAgaXNTdWJtaXR0aW5nPXtpc0xvYWRpbmd9XG4gKiAgIHNob3c9e2hhc0ZpbHRlcnN9XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSB0aXRsZSBhbmQgaWNvbjpcbiAqIGBgYHRzeFxuICogPEZpbHRlckJ1dHRvblxuICogICBpc1N1Ym1pdHRpbmc9e2Zvcm0uZm9ybVN0YXRlLmlzU3VibWl0dGluZ31cbiAqICAgdGl0bGU9XCJBcHBseSBTZWFyY2hcIlxuICogICBpY29uPXs8U2VhcmNoSWNvbiAvPn1cbiAqICAgc2hvdz17dHJ1ZX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogV2l0aCBjdXN0b20gc3R5bGluZzpcbiAqIGBgYHRzeFxuICogPEZpbHRlckJ1dHRvblxuICogICBpc1N1Ym1pdHRpbmc9e2lzUHJvY2Vzc2luZ31cbiAqICAgdGl0bGU9XCJGaWx0ZXIgUmVzdWx0c1wiXG4gKiAgIHN4PXt7IG1pbldpZHRoOiAxNTAsIG10OiAyIH19XG4gKiAgIGljb25TeD17eyBmb250U2l6ZTogMjAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBDb21wb25lbnQgcHJvcHMgZm9yIGZpbHRlciBidXR0b24gY29uZmlndXJhdGlvblxuICogQHJldHVybnMgTVVJIExvYWRpbmdCdXR0b24gY29tcG9uZW50IGNvbmZpZ3VyZWQgYXMgYSBmaWx0ZXIgYnV0dG9uXG4gKlxuICogQHB1YmxpY1xuICovXG5jb25zdCBGaWx0ZXJCdXR0b24gPSAoe1xuICBpc1N1Ym1pdHRpbmcsXG4gIHNob3csXG4gIHRpdGxlLFxuICBpY29uLFxuICBzeCxcbiAgaWNvblN4LFxufTogRmlsdGVyQnV0dG9uUHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8TG9hZGluZ0J1dHRvblxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgIGxvYWRpbmc9e2lzU3VibWl0dGluZ31cbiAgICAgIGRpc2FibGVkPXshc2hvd31cbiAgICAgIGRpc2FibGVSaXBwbGVcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBzeD17e1xuICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgLi4uc3gsXG4gICAgICB9fVxuICAgICAgc3RhcnRJY29uPXtcbiAgICAgICAgPEJhZGdlIGNvbG9yPVwiZXJyb3JcIiB2YXJpYW50PVwic3RhbmRhcmRcIj5cbiAgICAgICAgICB7aWNvbiA/IGljb24gOiA8RmlsdGVyQWx0SWNvbiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBzeD17aWNvblN4fSAvPn1cbiAgICAgICAgPC9CYWRnZT5cbiAgICAgIH1cbiAgICA+XG4gICAgICB7dGl0bGU/LnRyaW0oKSA9PT0gXCJcIiB8fCAhdGl0bGUgPyBcIkZpbHRlclwiIDogdGl0bGV9XG4gICAgPC9Mb2FkaW5nQnV0dG9uPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyQnV0dG9uO1xuIiwiaW1wb3J0IE1hbmFnZVNlYXJjaEljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvTWFuYWdlU2VhcmNoXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFN4UHJvcHNcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7XG4gIEJveCxcbiAgQ2FyZCxcbiAgQ2FyZENvbnRlbnQsXG4gIENhcmRIZWFkZXIsXG4gIERpdmlkZXIsXG4gIEdyaWQsXG4gIFR5cG9ncmFwaHksXG4gIHVzZVRoZW1lLFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wc1dpdGhDaGlsZHJlbiwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBGaWx0ZXJXcmFwcGVyIGNvbXBvbmVudC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnR5cGUgRmlsdGVyV3JhcHBlclByb3BzID0gUHJvcHNXaXRoQ2hpbGRyZW48e1xuICAvKipcbiAgICogVGl0bGUgdGV4dCBkaXNwbGF5ZWQgaW4gdGhlIGNhcmQgaGVhZGVyLlxuICAgKiBAZGVmYXVsdFZhbHVlIFwiRmlsdGVyXCJcbiAgICogQGV4YW1wbGUgXCJTZWFyY2ggQ3JpdGVyaWFcIiBvciBcIkFkdmFuY2VkIEZpbHRlcnNcIlxuICAgKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgYWN0aXZlIGZpbHRlcnMgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGVyLlxuICAgKiBPbmx5IHNob3duIHdoZW4gc2hvd0NvdW50IGlzIHRydWUuXG4gICAqIEBleGFtcGxlIDMgZm9yIFwiRmlsdGVyICgzKVwiXG4gICAqL1xuICBmaWx0ZXJDb3VudD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIE1VSSBzeCBwcm9wIGZvciBjdXN0b20gY2FyZCBzdHlsaW5nLlxuICAgKiBAZXhhbXBsZSB7IG10OiAyLCBib3hTaGFkb3c6IDIgfVxuICAgKi9cbiAgY2FyZFN4PzogU3hQcm9wcztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIE1VSSBzeCBwcm9wIGZvciBjdXN0b20gdGl0bGUgdGV4dCBzdHlsaW5nLlxuICAgKiBAZXhhbXBsZSB7IGZvbnRTaXplOiAxOCwgZm9udFdlaWdodDogJ2JvbGQnIH1cbiAgICovXG4gIHRleHRTeD86IFN4UHJvcHM7XG4gIC8qKlxuICAgKiBDdXN0b20gaWNvbiB0byBkaXNwbGF5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc2VhcmNoIGljb24uXG4gICAqIEBleGFtcGxlIDxGaWx0ZXJMaXN0SWNvbiAvPlxuICAgKi9cbiAgaWNvbj86IFJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIE1VSSBzeCBwcm9wIGZvciBjdXN0b20gaWNvbiBzdHlsaW5nLlxuICAgKiBAZXhhbXBsZSB7IGNvbG9yOiAnc2Vjb25kYXJ5Lm1haW4nLCBmb250U2l6ZTogMjQgfVxuICAgKi9cbiAgaWNvblN4PzogU3hQcm9wcztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZmlsdGVyIGNvdW50IGluIHRoZSBoZWFkZXIuXG4gICAqIEBkZWZhdWx0VmFsdWUgZmFsc2VcbiAgICovXG4gIHNob3dDb3VudD86IGJvb2xlYW47XG59PjtcblxuLyoqXG4gKiBDYXJkLWJhc2VkIHdyYXBwZXIgY29tcG9uZW50IGZvciBvcmdhbml6aW5nIGZpbHRlciBjb250cm9scyBhbmQgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGNvbnNpc3RlbnQgbGF5b3V0IGZvciBmaWx0ZXIgaW50ZXJmYWNlcyB3aXRoIGEgaGVhZGVyLFxuICogb3B0aW9uYWwgZmlsdGVyIGNvdW50IGRpc3BsYXksIGFuZCBhIGdyaWQtYmFzZWQgY29udGVudCBhcmVhLiBJdCdzIGRlc2lnbmVkIHRvXG4gKiBjb250YWluIGZvcm0gY29udHJvbHMgYW5kIGZpbHRlciBlbGVtZW50cyBpbiBhIHZpc3VhbGx5IG9yZ2FuaXplZCBtYW5uZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIHVzYWdlOlxuICogYGBgdHN4XG4gKiA8RmlsdGVyV3JhcHBlcj5cbiAqICAgPEdyaWQgaXRlbSB4cz17MTJ9IG1kPXs2fT5cbiAqICAgICA8VGV4dEZpZWxkIGxhYmVsPVwiU2VhcmNoXCIgLz5cbiAqICAgPC9HcmlkPlxuICogICA8R3JpZCBpdGVtIHhzPXsxMn0gbWQ9ezZ9PlxuICogICAgIDxTZWxlY3QgbGFiZWw9XCJDYXRlZ29yeVwiIC8+XG4gKiAgIDwvR3JpZD5cbiAqIDwvRmlsdGVyV3JhcHBlcj5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSB0aXRsZSBhbmQgY291bnQ6XG4gKiBgYGB0c3hcbiAqIDxGaWx0ZXJXcmFwcGVyXG4gKiAgIHRpdGxlPVwiQWR2YW5jZWQgU2VhcmNoXCJcbiAqICAgZmlsdGVyQ291bnQ9e2FjdGl2ZUZpbHRlcnMubGVuZ3RofVxuICogICBzaG93Q291bnQ9e3RydWV9XG4gKiA+XG4gKiAgIHtmaWx0ZXJDb250cm9sc31cbiAqIDwvRmlsdGVyV3JhcHBlcj5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBzdHlsaW5nOlxuICogYGBgdHN4XG4gKiA8RmlsdGVyV3JhcHBlclxuICogICB0aXRsZT1cIlByb2R1Y3QgRmlsdGVyc1wiXG4gKiAgIGljb249ezxGaWx0ZXJMaXN0SWNvbiAvPn1cbiAqICAgY2FyZFN4PXt7IG10OiAzLCBib3JkZXJSYWRpdXM6IDIgfX1cbiAqICAgdGV4dFN4PXt7IGNvbG9yOiAnc2Vjb25kYXJ5Lm1haW4nIH19XG4gKiA+XG4gKiAgIHtjaGlsZHJlbn1cbiAqIDwvRmlsdGVyV3JhcHBlcj5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIENvbXBvbmVudCBwcm9wcyBpbmNsdWRpbmcgY2hpbGRyZW4gYW5kIHN0eWxpbmcgb3B0aW9uc1xuICogQHJldHVybnMgTVVJIENhcmQgY29tcG9uZW50IHdpdGggc3RydWN0dXJlZCBmaWx0ZXIgbGF5b3V0XG4gKlxuICogQHB1YmxpY1xuICovXG5jb25zdCBGaWx0ZXJXcmFwcGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICBmaWx0ZXJDb3VudCxcbiAgY2FyZFN4LFxuICB0ZXh0U3gsXG4gIGljb24sXG4gIGljb25TeCxcbiAgc2hvd0NvdW50LFxufTogRmlsdGVyV3JhcHBlclByb3BzKSA9PiB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBzeD17e1xuICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgICAgICBib3JkZXJSYWRpdXM6IFwiMHB4XCIsXG4gICAgICAgIG1iOiAyLFxuICAgICAgICAuLi5jYXJkU3gsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxDYXJkSGVhZGVyXG4gICAgICAgIHN4PXt7XG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgZmxleFdyYXA6IFwid3JhcFwiLFxuICAgICAgICAgIHA6IFwiMXJlbVwiLFxuICAgICAgICAgIFwiLk11aUNhcmRIZWFkZXItYWN0aW9uXCI6IHtcbiAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICAgIGFsaWduU2VsZjogXCJjZW50ZXJcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIH19XG4gICAgICAgIHRpdGxlPXtcbiAgICAgICAgICA8Qm94IHN4PXt7IGRpc3BsYXk6IFwiZmxleFwiLCBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLCBnYXA6IDAuNSB9fT5cbiAgICAgICAgICAgIHtpY29uID8gKFxuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8TWFuYWdlU2VhcmNoSWNvblxuICAgICAgICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMi41cmVtXCIsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sXG4gICAgICAgICAgICAgICAgICAuLi5pY29uU3gsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICB2YXJpYW50PVwiaDVcIlxuICAgICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbixcbiAgICAgICAgICAgICAgICAuLi50ZXh0U3gsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aXRsZSA/IHRpdGxlIDogXCJGaWx0ZXJcIn17XCIgXCJ9XG4gICAgICAgICAgICAgIHtzaG93Q291bnQgPyBgKCR7ZmlsdGVyQ291bnQgPyBmaWx0ZXJDb3VudCA6IDB9KWAgOiA8PjwvPn1cbiAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgfVxuICAgICAgPjwvQ2FyZEhlYWRlcj5cbiAgICAgIDxEaXZpZGVyIC8+XG4gICAgICA8Q2FyZENvbnRlbnQgc3g9e3sgcHk6IDIgfX0+XG4gICAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsyfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvR3JpZD5cbiAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgPC9DYXJkPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyV3JhcHBlcjtcbiIsImltcG9ydCB0eXBlIHtcbiAgU3hQcm9wc1xufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHtcbiAgQm94LFxuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgRGl2aWRlcixcbiAgR3JpZCxcbiAgVHlwb2dyYXBoeSxcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB0eXBlIHsgUHJvcHNXaXRoQ2hpbGRyZW4sIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgRm9ybVdyYXBwZXIgY29tcG9uZW50LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudHlwZSBGb3JtV3JhcHBlciA9IFByb3BzV2l0aENoaWxkcmVuPHtcbiAgLyoqXG4gICAqIFRpdGxlIHRleHQgZGlzcGxheWVkIGluIHRoZSBmb3JtIGhlYWRlci5cbiAgICogQGV4YW1wbGUgXCJDcmVhdGUgVXNlclwiIG9yIFwiRWRpdCBQcm9maWxlXCJcbiAgICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGZvcm0gaXMgaW4gZWRpdCBtb2RlIChjdXJyZW50bHkgdW51c2VkIGluIGltcGxlbWVudGF0aW9uKS5cbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBwcm9wIGlzIGRlZmluZWQgYnV0IG5vdCB1c2VkIGluIHRoZSBjb21wb25lbnQgbG9naWNcbiAgICovXG4gIGVkaXRNb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBpY29uIHRvIGRpc3BsYXkgaW4gdGhlIGhlYWRlciBuZXh0IHRvIHRoZSB0aXRsZS5cbiAgICogQGV4YW1wbGUgPFBlcnNvbkljb24gLz4gb3IgPEVkaXRJY29uIC8+XG4gICAqL1xuICBpY29uPzogUmVhY3ROb2RlO1xuICAvKipcbiAgICogT3B0aW9uYWwgTVVJIHN4IHByb3AgZm9yIGN1c3RvbSBjYXJkIHN0eWxpbmcuXG4gICAqIEBleGFtcGxlIHsgbXQ6IDIsIG1heFdpZHRoOiA2MDAgfVxuICAgKi9cbiAgY2FyZFN4PzogU3hQcm9wcztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIE1VSSBzeCBwcm9wIGZvciBjdXN0b20gdGl0bGUgdGV4dCBzdHlsaW5nLlxuICAgKiBAZXhhbXBsZSB7IGZvbnRTaXplOiAyMCwgZm9udFdlaWdodDogJ2JvbGQnIH1cbiAgICovXG4gIHRleHRTeD86IFN4UHJvcHM7XG4gIC8qKlxuICAgKiBBY3Rpb24gYnV0dG9uIG9yIGVsZW1lbnQgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGVyIChlLmcuLCBzYXZlLCBjbG9zZSkuXG4gICAqIEBleGFtcGxlIDxCdXR0b24+U2F2ZTwvQnV0dG9uPiBvciA8SWNvbkJ1dHRvbj48Q2xvc2VJY29uIC8+PC9JY29uQnV0dG9uPlxuICAgKi9cbiAgYWN0aW9uQnV0dG9uPzogUmVhY3ROb2RlO1xufT47XG5cbi8qKlxuICogQ2FyZC1iYXNlZCB3cmFwcGVyIGNvbXBvbmVudCBmb3Igb3JnYW5pemluZyBmb3JtIGVsZW1lbnRzIHdpdGggaGVhZGVyIGFuZCBhY3Rpb25zLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgc3RydWN0dXJlZCBsYXlvdXQgZm9yIGZvcm1zIHdpdGggYSB0aXRsZSBoZWFkZXIsXG4gKiBvcHRpb25hbCBpY29uLCBhY3Rpb24gYnV0dG9ucywgYW5kIGEgZ3JpZC1iYXNlZCBjb250ZW50IGFyZWEuIEl0IGNyZWF0ZXNcbiAqIGEgY29uc2lzdGVudCB2aXN1YWwgc3RydWN0dXJlIGZvciBmb3JtIGludGVyZmFjZXMgdGhyb3VnaG91dCB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIEJhc2ljIGZvcm0gd3JhcHBlcjpcbiAqIGBgYHRzeFxuICogPEZvcm1XcmFwcGVyIHRpdGxlPVwiVXNlciBJbmZvcm1hdGlvblwiPlxuICogICA8R3JpZCBpdGVtIHhzPXsxMn0gbWQ9ezZ9PlxuICogICAgIDxUZXh0RmllbGQgbGFiZWw9XCJGaXJzdCBOYW1lXCIgLz5cbiAqICAgPC9HcmlkPlxuICogICA8R3JpZCBpdGVtIHhzPXsxMn0gbWQ9ezZ9PlxuICogICAgIDxUZXh0RmllbGQgbGFiZWw9XCJMYXN0IE5hbWVcIiAvPlxuICogICA8L0dyaWQ+XG4gKiA8L0Zvcm1XcmFwcGVyPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggaWNvbiBhbmQgYWN0aW9uIGJ1dHRvbjpcbiAqIGBgYHRzeFxuICogPEZvcm1XcmFwcGVyXG4gKiAgIHRpdGxlPVwiRWRpdCBQcm9maWxlXCJcbiAqICAgaWNvbj17PFBlcnNvbkljb24gLz59XG4gKiAgIGFjdGlvbkJ1dHRvbj17XG4gKiAgICAgPEJ1dHRvbiB2YXJpYW50PVwiY29udGFpbmVkXCIgdHlwZT1cInN1Ym1pdFwiPlxuICogICAgICAgU2F2ZSBDaGFuZ2VzXG4gKiAgICAgPC9CdXR0b24+XG4gKiAgIH1cbiAqID5cbiAqICAge2Zvcm1GaWVsZHN9XG4gKiA8L0Zvcm1XcmFwcGVyPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIGluY2x1ZGluZyBjaGlsZHJlbiBhbmQgbGF5b3V0IG9wdGlvbnNcbiAqIEByZXR1cm5zIE1VSSBDYXJkIGNvbXBvbmVudCB3aXRoIHN0cnVjdHVyZWQgZm9ybSBsYXlvdXRcbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IEZvcm1XcmFwcGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICBlZGl0TW9kZSxcbiAgY2FyZFN4LFxuICB0ZXh0U3gsXG4gIGljb24sXG4gIGFjdGlvbkJ1dHRvbixcbn06IEZvcm1XcmFwcGVyKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENhcmRcbiAgICAgIHN4PXt7XG4gICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgIGJvcmRlclJhZGl1czogXCIwcHhcIixcbiAgICAgICAgLi4uY2FyZFN4LFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Q2FyZEhlYWRlclxuICAgICAgICBzeD17e1xuICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgIGZsZXhXcmFwOiBcIndyYXBcIixcbiAgICAgICAgICBwOiBcIjFyZW1cIixcbiAgICAgICAgICBcIi5NdWlDYXJkSGVhZGVyLWFjdGlvblwiOiB7XG4gICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICBhbGlnblNlbGY6IFwiY2VudGVyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfX1cbiAgICAgICAgdGl0bGU9e1xuICAgICAgICAgIDxCb3hcbiAgICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxCb3ggc3g9e3sgZGlzcGxheTogXCJmbGV4XCIsIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsIGdhcDogMC41IH19PlxuICAgICAgICAgICAgICB7aWNvbiA/PyBpY29ufVxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjb2xvcj1cInByaW1hcnlcIiBzeD17dGV4dFN4fT5cbiAgICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge2FjdGlvbkJ1dHRvbn1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgfVxuICAgICAgPjwvQ2FyZEhlYWRlcj5cbiAgICAgIDxEaXZpZGVyIHN4PXt7IG10OiAwIH19IC8+XG4gICAgICA8Q2FyZENvbnRlbnQ+XG4gICAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsyfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvR3JpZD5cbiAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgPC9DYXJkPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRm9ybVdyYXBwZXI7XG4iLCJpbXBvcnQgdHlwZSB7IFN4UHJvcHMgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgR3JpZCwgVG9vbHRpcCwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBMYWJlbFRleHQgY29tcG9uZW50LlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuaW50ZXJmYWNlIExhYmVsVGV4dFByb3BzIHtcbiAgLyoqXG4gICAqIExhYmVsIHRleHQgdG8gZGlzcGxheSBvbiB0aGUgbGVmdCBzaWRlLlxuICAgKiBAZXhhbXBsZSBcIk5hbWVcIiBvciBcIkVtYWlsIEFkZHJlc3NcIlxuICAgKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIFZhbHVlIGNvbnRlbnQgdG8gZGlzcGxheSBvbiB0aGUgcmlnaHQgc2lkZS5cbiAgICogQ2FuIGJlIHRleHQsIG51bWJlcnMsIG9yIFJlYWN0IGVsZW1lbnRzLlxuICAgKiBAZXhhbXBsZSBcIkpvaG4gRG9lXCIgb3IgPExpbms+VmlldyBEZXRhaWxzPC9MaW5rPlxuICAgKi9cbiAgdmFsdWU6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIEN1c3RvbSBncmlkIHNpemluZyBmb3IgbGFiZWwgYW5kIHZhbHVlIHNlY3Rpb25zLlxuICAgKiBAZGVmYXVsdFZhbHVlIHsgbGFiZWxTaXplOiB7IHhzOiA2LCBzbTogNiwgbWQ6IDYgfSwgdmFsdWVTaXplOiB7IHhzOiAxMiwgc206IDYsIG1kOiA2IH0gfVxuICAgKi9cbiAgZ3JpZFNpemU/OiB7XG4gICAgLyoqIEdyaWQgc2l6ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgbGFiZWwgc2VjdGlvbiAqL1xuICAgIGxhYmVsU2l6ZTogeyB4czogbnVtYmVyOyBzbTogbnVtYmVyOyBtZDogbnVtYmVyIH07XG4gICAgLyoqIEdyaWQgc2l6ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdmFsdWUgc2VjdGlvbiAqL1xuICAgIHZhbHVlU2l6ZTogeyB4czogbnVtYmVyOyBzbTogbnVtYmVyOyBtZDogbnVtYmVyIH07XG4gIH07XG4gIC8qKlxuICAgKiBHcmlkIHNpemUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVudGlyZSBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0VmFsdWUgeyB4czogMTIsIHNtOiA2LCBtZDogNiB9XG4gICAqL1xuICBjb250YWluZXJTaXplPzogeyB4czogbnVtYmVyOyBzbTogbnVtYmVyOyBtZDogbnVtYmVyIH07XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNVUkgc3ggcHJvcCBmb3IgY3VzdG9tIGxhYmVsIHN0eWxpbmcuXG4gICAqIEBleGFtcGxlIHsgZm9udFdlaWdodDogJ2JvbGQnLCBjb2xvcjogJ3ByaW1hcnkubWFpbicgfVxuICAgKi9cbiAgbGFiZWxTeD86IFN4UHJvcHM7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNVUkgc3ggcHJvcCBmb3IgY3VzdG9tIHZhbHVlIHN0eWxpbmcuXG4gICAqIEBleGFtcGxlIHsgY29sb3I6ICd0ZXh0LnNlY29uZGFyeScsIGZvbnRTdHlsZTogJ2l0YWxpYycgfVxuICAgKi9cbiAgdmFsdWVTeD86IFN4UHJvcHM7XG59XG5cbi8qKlxuICogUmVzcG9uc2l2ZSBsYWJlbC12YWx1ZSBkaXNwbGF5IGNvbXBvbmVudCB3aXRoIGhvdmVyIGVmZmVjdHMgYW5kIHRleHQgdHJ1bmNhdGlvbi5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBjcmVhdGVzIGEgY29uc2lzdGVudCBsYWJlbC12YWx1ZSBwYWlyIGxheW91dCB0aGF0IGFkYXB0cyB0byBkaWZmZXJlbnRcbiAqIHNjcmVlbiBzaXplcy4gSXQgaW5jbHVkZXMgaG92ZXIgZWZmZWN0cywgdGV4dCB0cnVuY2F0aW9uIHdpdGggdG9vbHRpcHMsIGFuZFxuICogY3VzdG9taXphYmxlIGdyaWQgc2l6aW5nIGZvciBmbGV4aWJsZSBsYXlvdXRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPExhYmVsVGV4dFxuICogICBsYWJlbD1cIkZ1bGwgTmFtZVwiXG4gKiAgIHZhbHVlPVwiSm9obiBEb2VcIlxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIFJlYWN0IGVsZW1lbnQgdmFsdWU6XG4gKiBgYGB0c3hcbiAqIDxMYWJlbFRleHRcbiAqICAgbGFiZWw9XCJQcm9maWxlXCJcbiAqICAgdmFsdWU9ezxMaW5rIGhyZWY9XCIvcHJvZmlsZVwiPlZpZXcgUHJvZmlsZTwvTGluaz59XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBncmlkIHNpemluZzpcbiAqIGBgYHRzeFxuICogPExhYmVsVGV4dFxuICogICBsYWJlbD1cIkRlc2NyaXB0aW9uXCJcbiAqICAgdmFsdWU9e2xvbmdEZXNjcmlwdGlvbn1cbiAqICAgZ3JpZFNpemU9e3tcbiAqICAgICBsYWJlbFNpemU6IHsgeHM6IDEyLCBzbTogMywgbWQ6IDIgfSxcbiAqICAgICB2YWx1ZVNpemU6IHsgeHM6IDEyLCBzbTogOSwgbWQ6IDEwIH1cbiAqICAgfX1cbiAqICAgY29udGFpbmVyU2l6ZT17eyB4czogMTIsIHNtOiAxMiwgbWQ6IDEyIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIGZvciBsYWJlbC12YWx1ZSBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBHcmlkLWJhc2VkIGxheW91dCB3aXRoIGxhYmVsIGFuZCB2YWx1ZSBzZWN0aW9uc1xuICpcbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgTGFiZWxUZXh0ID0gKHtcbiAgbGFiZWwsXG4gIHZhbHVlLFxuICBncmlkU2l6ZSxcbiAgY29udGFpbmVyU2l6ZSxcbiAgbGFiZWxTeCxcbiAgdmFsdWVTeCxcbn06IExhYmVsVGV4dFByb3BzKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRHcmlkU2l6ZSA9IHtcbiAgICBsYWJlbFNpemU6IHsgeHM6IDYsIHNtOiA2LCBtZDogNiB9LFxuICAgIHZhbHVlU2l6ZTogeyB4czogMTIsIHNtOiA2LCBtZDogNiB9LFxuICB9O1xuICBjb25zdCBkZWZhdWx0Q29udGFpbmVyU2l6ZSA9IHsgeHM6IDEyLCBzbTogNiwgbWQ6IDYgfTtcbiAgY29uc3Qgc2l6ZSA9IGdyaWRTaXplIHx8IGRlZmF1bHRHcmlkU2l6ZTtcbiAgY29uc3QgY29udGFpbmVyID0gY29udGFpbmVyU2l6ZSB8fCBkZWZhdWx0Q29udGFpbmVyU2l6ZTtcblxuICByZXR1cm4gKFxuICAgIDxHcmlkXG4gICAgICBzaXplPXtjb250YWluZXJ9XG4gICAgICBzeD17e1xuICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgZmxleERpcmVjdGlvbjogeyB4czogXCJjb2x1bW5cIiwgc206IFwicm93XCIsIG1kOiBcInJvd1wiIH0sXG4gICAgICAgIFwiJjpob3ZlclwiOiB7IGJnY29sb3I6IFwiI2VmZWZlZlwiLCBvdmVyZmxvdzogXCJoaWRkZW5cIiB9LFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8R3JpZFxuICAgICAgICBzaXplPXtzaXplLmxhYmVsU2l6ZX1cbiAgICAgICAgc3g9e3tcbiAgICAgICAgICBwYWRkaW5nOiBcIjVweFwiLFxuICAgICAgICAgIGZvbnRTaXplOiBcIjE0cHhcIixcbiAgICAgICAgICB0ZXh0QWxpZ246IHsgeHM6IFwibGVmdFwiLCBzbTogXCJyaWdodFwiLCBtZDogXCJyaWdodFwiIH0sXG4gICAgICAgICAgLi4ubGFiZWxTeCxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2xhYmVsfSA6XG4gICAgICA8L0dyaWQ+XG4gICAgICA8R3JpZFxuICAgICAgICBzaXplPXtzaXplLnZhbHVlU2l6ZX1cbiAgICAgICAgc3g9e3sgcGFkZGluZzogXCI1cHhcIiwgZGlzcGxheTogXCJmbGV4XCIsIGZsZXhXcmFwOiBcIndyYXBcIiB9fVxuICAgICAgPlxuICAgICAgICA8VG9vbHRpcCB0aXRsZT17dmFsdWV9IGFycm93PlxuICAgICAgICAgIDxUeXBvZ3JhcGh5XG4gICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICBmb250U2l6ZTogXCIxNHB4XCIsXG4gICAgICAgICAgICAgIHdvcmRCcmVhazogXCJicmVhay13b3JkXCIsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBcIi13ZWJraXQtYm94XCIsXG4gICAgICAgICAgICAgIHRleHRPdmVyZmxvdzogXCJlbGxpcHNpc1wiLFxuICAgICAgICAgICAgICBXZWJraXRMaW5lQ2xhbXA6IDIsXG4gICAgICAgICAgICAgIFdlYmtpdEJveE9yaWVudDogXCJ2ZXJ0aWNhbFwiLFxuICAgICAgICAgICAgICAuLi52YWx1ZVN4LFxuICAgICAgICAgICAgICBjb2xvcjogXCIjMDc4ZGVlXCIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt2YWx1ZSA/IHZhbHVlIDogXCItXCJ9XG4gICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICA8L0dyaWQ+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTGFiZWxUZXh0O1xuIiwiaW1wb3J0IE1hbmFnZVNlYXJjaEljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvTWFuYWdlU2VhcmNoXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFN4UHJvcHNcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7XG4gIEJveCxcbiAgQ2FyZCxcbiAgQ2FyZENvbnRlbnQsXG4gIENhcmRIZWFkZXIsXG4gIERpdmlkZXIsXG4gIEdyaWQsXG4gIFR5cG9ncmFwaHksXG4gIHVzZVRoZW1lLFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wc1dpdGhDaGlsZHJlbiwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBMaXN0V3JhcHBlciBjb21wb25lbnQuXG4gKlxuICogQHB1YmxpY1xuICovXG50eXBlIExpc3RXcmFwcGVyUHJvcHMgPSBQcm9wc1dpdGhDaGlsZHJlbjx7XG4gIC8qKlxuICAgKiBUaXRsZSB0ZXh0IGRpc3BsYXllZCBpbiB0aGUgY2FyZCBoZWFkZXIuXG4gICAqIEBkZWZhdWx0VmFsdWUgXCJMaXN0XCJcbiAgICogQGV4YW1wbGUgXCJVc2VyIExpc3RcIiBvciBcIlByb2R1Y3QgQ2F0YWxvZ1wiXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE51bWJlciBvZiBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSBoZWFkZXIgY291bnQuXG4gICAqIE9ubHkgc2hvd24gd2hlbiBzaG93Q291bnQgaXMgdHJ1ZS5cbiAgICogQGV4YW1wbGUgMjUgZm9yIFwiTGlzdCAoMjUpXCJcbiAgICovXG4gIGNvdW50PzogbnVtYmVyO1xuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0aGUgZW50aXJlIGNvbXBvbmVudCBpcyByZW5kZXJlZC5cbiAgICogV2hlbiBmYWxzZSwgcmV0dXJucyBhbiBlbXB0eSBmcmFnbWVudC5cbiAgICogQGRlZmF1bHRWYWx1ZSB0cnVlXG4gICAqL1xuICBzaG93PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFjdGlvbiBidXR0b24gb3IgZWxlbWVudCB0byBkaXNwbGF5IGluIHRoZSBoZWFkZXIgKGUuZy4sIGFkZCwgZXhwb3J0KS5cbiAgICogQGV4YW1wbGUgPEJ1dHRvbj5BZGQgTmV3PC9CdXR0b24+IG9yIDxJY29uQnV0dG9uPjxNb3JlVmVydEljb24gLz48L0ljb25CdXR0b24+XG4gICAqL1xuICBhY3Rpb25CdXR0b24/OiBSZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNVUkgc3ggcHJvcCBmb3IgY3VzdG9tIGNhcmQgc3R5bGluZy5cbiAgICogQGV4YW1wbGUgeyBtdDogMiwgYm94U2hhZG93OiAzIH1cbiAgICovXG4gIGNhcmRTeD86IFN4UHJvcHM7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBNVUkgc3ggcHJvcCBmb3IgY3VzdG9tIHRpdGxlIHRleHQgc3R5bGluZy5cbiAgICogQGV4YW1wbGUgeyBmb250U2l6ZTogMTgsIGNvbG9yOiAnc2Vjb25kYXJ5Lm1haW4nIH1cbiAgICovXG4gIHRleHRTeD86IFN4UHJvcHM7XG4gIC8qKlxuICAgKiBDdXN0b20gaWNvbiB0byBkaXNwbGF5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc2VhcmNoIGljb24uXG4gICAqIEBleGFtcGxlIDxMaXN0SWNvbiAvPiBvciA8VGFibGVSb3dzSWNvbiAvPlxuICAgKi9cbiAgaWNvbj86IFJlYWN0Tm9kZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgY291bnQgaW4gdGhlIGhlYWRlci5cbiAgICogQGRlZmF1bHRWYWx1ZSB0cnVlXG4gICAqL1xuICBzaG93Q291bnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogT3B0aW9uYWwgTVVJIHN4IHByb3AgZm9yIGN1c3RvbSBpY29uIHN0eWxpbmcuXG4gICAqIEBleGFtcGxlIHsgY29sb3I6ICdwcmltYXJ5Lm1haW4nLCBmb250U2l6ZTogMjggfVxuICAgKi9cbiAgaWNvblN4PzogU3hQcm9wcztcbn0+O1xuXG4vKipcbiAqIENhcmQtYmFzZWQgd3JhcHBlciBjb21wb25lbnQgZm9yIG9yZ2FuaXppbmcgbGlzdCBjb250ZW50IHdpdGggaGVhZGVyIGFuZCBhY3Rpb25zLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgc3RydWN0dXJlZCBsYXlvdXQgZm9yIGRpc3BsYXlpbmcgbGlzdHMgb2YgZGF0YSB3aXRoXG4gKiBhIHRpdGxlIGhlYWRlciwgb3B0aW9uYWwgaXRlbSBjb3VudCwgYWN0aW9uIGJ1dHRvbnMsIGFuZCBhIGdyaWQtYmFzZWQgY29udGVudCBhcmVhLlxuICogSXQgaW5jbHVkZXMgY29uZGl0aW9uYWwgcmVuZGVyaW5nIGFuZCBjb25zaXN0ZW50IHN0eWxpbmcgYWNyb3NzIGxpc3QgaW50ZXJmYWNlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgbGlzdCB3cmFwcGVyOlxuICogYGBgdHN4XG4gKiA8TGlzdFdyYXBwZXIgdGl0bGU9XCJVc2Vyc1wiIGNvdW50PXt1c2Vycy5sZW5ndGh9PlxuICogICA8R3JpZCBpdGVtIHhzPXsxMn0+XG4gKiAgICAgPERhdGFHcmlkIHJvd3M9e3VzZXJzfSBjb2x1bW5zPXtjb2x1bW5zfSAvPlxuICogICA8L0dyaWQ+XG4gKiA8L0xpc3RXcmFwcGVyPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIFdpdGggYWN0aW9uIGJ1dHRvbiBhbmQgY3VzdG9tIGljb246XG4gKiBgYGB0c3hcbiAqIDxMaXN0V3JhcHBlclxuICogICB0aXRsZT1cIlByb2R1Y3RzXCJcbiAqICAgY291bnQ9e3Byb2R1Y3RzLmxlbmd0aH1cbiAqICAgaWNvbj17PEludmVudG9yeUljb24gLz59XG4gKiAgIGFjdGlvbkJ1dHRvbj17XG4gKiAgICAgPEJ1dHRvbiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17YWRkUHJvZHVjdH0+XG4gKiAgICAgICBBZGQgUHJvZHVjdFxuICogICAgIDwvQnV0dG9uPlxuICogICB9XG4gKiA+XG4gKiAgIHtwcm9kdWN0TGlzdH1cbiAqIDwvTGlzdFdyYXBwZXI+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogQ29uZGl0aW9uYWwgcmVuZGVyaW5nOlxuICogYGBgdHN4XG4gKiA8TGlzdFdyYXBwZXJcbiAqICAgdGl0bGU9XCJTZWFyY2ggUmVzdWx0c1wiXG4gKiAgIGNvdW50PXtzZWFyY2hSZXN1bHRzLmxlbmd0aH1cbiAqICAgc2hvdz17aGFzU2VhcmNoZWR9XG4gKiAgIHNob3dDb3VudD17c2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwfVxuICogPlxuICogICB7c2VhcmNoUmVzdWx0SXRlbXN9XG4gKiA8L0xpc3RXcmFwcGVyPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIGluY2x1ZGluZyBjaGlsZHJlbiBhbmQgbGF5b3V0IG9wdGlvbnNcbiAqIEByZXR1cm5zIE1VSSBDYXJkIGNvbXBvbmVudCB3aXRoIHN0cnVjdHVyZWQgbGlzdCBsYXlvdXQsIG9yIGVtcHR5IGZyYWdtZW50IGlmIHNob3cgaXMgZmFsc2VcbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IExpc3RXcmFwcGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICBjb3VudCxcbiAgc2hvdyA9IHRydWUsXG4gIGFjdGlvbkJ1dHRvbixcbiAgY2FyZFN4LFxuICB0ZXh0U3gsXG4gIGljb24sXG4gIGljb25TeCxcbiAgc2hvd0NvdW50ID0gdHJ1ZSxcbn06IExpc3RXcmFwcGVyUHJvcHMpID0+IHtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuXG4gIGlmICghc2hvdykgcmV0dXJuIDw+PC8+O1xuXG4gIHJldHVybiAoXG4gICAgPENhcmRcbiAgICAgIHN4PXt7XG4gICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgIGJvcmRlclJhZGl1czogXCIwcHhcIixcbiAgICAgICAgLi4uY2FyZFN4LFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8Q2FyZEhlYWRlclxuICAgICAgICBzeD17e1xuICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgIGZsZXhXcmFwOiBcIndyYXBcIixcbiAgICAgICAgICBwOiBcIjFyZW1cIixcbiAgICAgICAgICBcIi5NdWlDYXJkSGVhZGVyLWFjdGlvblwiOiB7XG4gICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICBhbGlnblNlbGY6IFwiY2VudGVyXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICB9fVxuICAgICAgICB0aXRsZT17XG4gICAgICAgICAgPEJveFxuICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJveCBzeD17eyBkaXNwbGF5OiBcImZsZXhcIiwgYWxpZ25JdGVtczogXCJjZW50ZXJcIiwgZ2FwOiAwLjUgfX0+XG4gICAgICAgICAgICAgIHtpY29uID8gKFxuICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8TWFuYWdlU2VhcmNoSWNvblxuICAgICAgICAgICAgICAgICAgc3g9e3tcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIuNXJlbVwiLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sXG4gICAgICAgICAgICAgICAgICAgIC4uLmljb25TeCxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiaDVcIlxuICAgICAgICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbixcbiAgICAgICAgICAgICAgICAgIC4uLnRleHRTeCxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RpdGxlID8gdGl0bGUgOiBcIkxpc3RcIn1cbiAgICAgICAgICAgICAgICB7c2hvd0NvdW50ID8gYCgke2NvdW50ID8gY291bnQgOiAwfSlgIDogPD48Lz59XG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAge2FjdGlvbkJ1dHRvbn1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgfVxuICAgICAgPjwvQ2FyZEhlYWRlcj5cbiAgICAgIDxEaXZpZGVyIC8+XG4gICAgICA8Q2FyZENvbnRlbnQgc3g9e3sgcHQ6IDAgfX0+XG4gICAgICAgIDxHcmlkIGNvbnRhaW5lciBzcGFjaW5nPXsyfT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvR3JpZD5cbiAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgPC9DYXJkPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTGlzdFdyYXBwZXI7XG4iLCJpbXBvcnQgeyBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHtcbiAgR3JpZFRvb2xiYXJDb250YWluZXIsXG4gIEdyaWRUb29sYmFyQ29sdW1uc0J1dHRvbixcbiAgR3JpZFRvb2xiYXJFeHBvcnQsXG4gIEdyaWRUb29sYmFyRmlsdGVyQnV0dG9uLFxuICBHcmlkVG9vbGJhclF1aWNrRmlsdGVyLFxufSBmcm9tIFwiQG11aS94LWRhdGEtZ3JpZFwiO1xuXG4vKipcbiAqIFByZS1jb25maWd1cmVkIHRvb2xiYXIgY29tcG9uZW50IGZvciBNVUkgRGF0YUdyaWQgd2l0aCBlc3NlbnRpYWwgdG9vbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSByZWFkeS10by11c2UgdG9vbGJhciBmb3IgTVVJIERhdGFHcmlkIGNvbXBvbmVudHNcbiAqIHRoYXQgaW5jbHVkZXMgcXVpY2sgZmlsdGVyaW5nLCBjb2x1bW4gbWFuYWdlbWVudCwgYWR2YW5jZWQgZmlsdGVyaW5nLCBhbmRcbiAqIGRhdGEgZXhwb3J0IGNhcGFiaWxpdGllcy4gVGhlIHF1aWNrIGZpbHRlciBpbnB1dCBpcyBzdHlsZWQgd2l0aCBjdXN0b21cbiAqIGJvcmRlciByYWRpdXMgYW5kIHBhZGRpbmcgZm9yIGEgcG9saXNoZWQgYXBwZWFyYW5jZS5cbiAqXG4gKiBGZWF0dXJlcyBpbmNsdWRlZDpcbiAqIC0gUXVpY2sgZmlsdGVyIHNlYXJjaCBpbnB1dCAobGVmdC1hbGlnbmVkKVxuICogLSBDb2x1bW4gdmlzaWJpbGl0eSB0b2dnbGUgYnV0dG9uXG4gKiAtIEFkdmFuY2VkIGZpbHRlciBidXR0b25cbiAqIC0gRGF0YSBleHBvcnQgYnV0dG9uIChDU1YsIEV4Y2VsLCBldGMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZSB3aXRoIERhdGFHcmlkOlxuICogYGBgdHN4XG4gKiA8RGF0YUdyaWRcbiAqICAgcm93cz17ZGF0YX1cbiAqICAgY29sdW1ucz17Y29sdW1uc31cbiAqICAgc2xvdHM9e3tcbiAqICAgICB0b29sYmFyOiBTaW1wbGVUb29sYmFyXG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIEluIGEgY3VzdG9tIGdyaWQgc2V0dXA6XG4gKiBgYGB0c3hcbiAqIDxCb3g+XG4gKiAgIDxTaW1wbGVUb29sYmFyIC8+XG4gKiAgIDxEYXRhR3JpZFxuICogICAgIHJvd3M9e2ZpbHRlcmVkRGF0YX1cbiAqICAgICBjb2x1bW5zPXt2aXNpYmxlQ29sdW1uc31cbiAqICAgICBoaWRlRm9vdGVyXG4gKiAgIC8+XG4gKiA8L0JveD5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEdyaWRUb29sYmFyQ29udGFpbmVyIHdpdGggcHJlLWNvbmZpZ3VyZWQgdG9vbGJhciBlbGVtZW50c1xuICpcbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgU2ltcGxlVG9vbGJhciA9ICgpID0+IChcbiAgPEdyaWRUb29sYmFyQ29udGFpbmVyPlxuICAgIDxCb3hcbiAgICAgIHN4PXt7XG4gICAgICAgIFwiJiAuTXVpSW5wdXRCYXNlLXJvb3RcIjoge1xuICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgICAgICBwYWRkaW5nOiBcIjZweCAxMHB4XCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiJiBpbnB1dFwiOiB7XG4gICAgICAgICAgZm9udFNpemU6IFwiMTRweFwiLFxuICAgICAgICAgIGNvbG9yOiBcIiMzMzNcIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8R3JpZFRvb2xiYXJRdWlja0ZpbHRlciAvPlxuICAgIDwvQm94PlxuICAgIDxCb3ggc3g9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICA8R3JpZFRvb2xiYXJDb2x1bW5zQnV0dG9uIC8+XG4gICAgPEdyaWRUb29sYmFyRmlsdGVyQnV0dG9uIC8+XG4gICAgPEdyaWRUb29sYmFyRXhwb3J0IC8+XG4gIDwvR3JpZFRvb2xiYXJDb250YWluZXI+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBTaW1wbGVUb29sYmFyO1xuIiwiaW1wb3J0IHR5cGUgeyBCdXR0b25Qcm9wcyB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBCdXR0b24sIENpcmN1bGFyUHJvZ3Jlc3MgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYsIG1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFNpbXBsZUJ1dHRvbiBjb21wb25lbnQuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZUJ1dHRvblByb3BzIGV4dGVuZHMgQnV0dG9uUHJvcHMge1xuICAvKipcbiAgICogQ29udHJvbHMgYnV0dG9uIHZpc2liaWxpdHkuIFdoZW4gZmFsc2UsIHRoZSBjb21wb25lbnQgcmV0dXJucyBudWxsLlxuICAgKiBAZGVmYXVsdFZhbHVlIHRydWVcbiAgICovXG4gIHNob3c/OiBib29sZWFuO1xuICAvKipcbiAgICogTG9hZGluZyBzdGF0ZSB3aXRoIHNwaW5uZXIuIFdoZW4gdHJ1ZSwgc2hvd3MgYSBsb2FkaW5nIHNwaW5uZXIgYW5kIGRpc2FibGVzIHRoZSBidXR0b24uXG4gICAqIEBkZWZhdWx0VmFsdWUgZmFsc2VcbiAgICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogVGVzdCBpZGVudGlmaWVyIGZvciB0ZXN0aW5nIGZyYW1ld29ya3MuXG4gICAqIEBleGFtcGxlIFwic3VibWl0LWJ1dHRvblwiXG4gICAqL1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nO1xuICAvKipcbiAgICogQ3VzdG9tIHRleHQgdG8gZGlzcGxheSB3aGVuIGxvYWRpbmcgaXMgdHJ1ZS4gSWYgbm90IHByb3ZpZGVkLCBvcmlnaW5hbCBjaGlsZHJlbiBhcmUgc2hvd24uXG4gICAqIEBleGFtcGxlIFwiU2F2aW5nLi4uXCJcbiAgICovXG4gIGxvYWRpbmdUZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuaGFuY2VkIE1VSSBCdXR0b24gY29tcG9uZW50IHdpdGggbG9hZGluZyBzdGF0ZXMgYW5kIGNvbmRpdGlvbmFsIHJlbmRlcmluZy5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBleHRlbmRzIHRoZSBzdGFuZGFyZCBNVUkgQnV0dG9uIHdpdGggYWRkaXRpb25hbCBmZWF0dXJlczpcbiAqIC0gTG9hZGluZyBzdGF0ZSB3aXRoIHNwaW5uZXJcbiAqIC0gQ29uZGl0aW9uYWwgcmVuZGVyaW5nIGJhc2VkIG9uIHNob3cgcHJvcFxuICogLSBBdXRvbWF0aWMgZGlzYWJsaW5nIGR1cmluZyBsb2FkaW5nXG4gKiAtIEN1c3RvbSBsb2FkaW5nIHRleHQgc3VwcG9ydFxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPFNpbXBsZUJ1dHRvbiB2YXJpYW50PVwiY29udGFpbmVkXCIgY29sb3I9XCJwcmltYXJ5XCI+XG4gKiAgIENsaWNrIE1lXG4gKiA8L1NpbXBsZUJ1dHRvbj5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGxvYWRpbmcgc3RhdGU6XG4gKiBgYGB0c3hcbiAqIDxTaW1wbGVCdXR0b25cbiAqICAgbG9hZGluZz17aXNTdWJtaXR0aW5nfVxuICogICBsb2FkaW5nVGV4dD1cIlNhdmluZy4uLlwiXG4gKiAgIHZhcmlhbnQ9XCJjb250YWluZWRcIlxuICogPlxuICogICBTYXZlIENoYW5nZXNcbiAqIDwvU2ltcGxlQnV0dG9uPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIENvbmRpdGlvbmFsIHJlbmRlcmluZzpcbiAqIGBgYHRzeFxuICogPFNpbXBsZUJ1dHRvblxuICogICBzaG93PXtoYXNQZXJtaXNzaW9ufVxuICogICB2YXJpYW50PVwib3V0bGluZWRcIlxuICogPlxuICogICBBZG1pbiBBY3Rpb25cbiAqIDwvU2ltcGxlQnV0dG9uPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIGV4dGVuZGluZyBNVUkgQnV0dG9uUHJvcHNcbiAqIEBwYXJhbSByZWYgLSBGb3J3YXJkZWQgcmVmIHRvIHRoZSB1bmRlcmx5aW5nIGJ1dHRvbiBlbGVtZW50XG4gKiBAcmV0dXJucyBKU1ggZWxlbWVudCBvciBudWxsIGlmIHNob3cgaXMgZmFsc2VcbiAqXG4gKiBAcHVibGljXG4gKi9cbmNvbnN0IFNpbXBsZUJ1dHRvbiA9IG1lbW8oZm9yd2FyZFJlZjxIVE1MQnV0dG9uRWxlbWVudCwgU2ltcGxlQnV0dG9uUHJvcHM+KFxuICAoe1xuICAgIHNob3cgPSB0cnVlLFxuICAgIGxvYWRpbmcgPSBmYWxzZSxcbiAgICBsb2FkaW5nVGV4dCxcbiAgICBjaGlsZHJlbixcbiAgICAuLi5yZXN0XG4gIH0sIHJlZikgPT4ge1xuICAgIGlmICghc2hvdykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgIGRpc2FibGVkPXtsb2FkaW5nIHx8IHJlc3QuZGlzYWJsZWR9XG4gICAgICAgICAgc3RhcnRJY29uPXtsb2FkaW5nID8gPENpcmN1bGFyUHJvZ3Jlc3Mgc2l6ZT17MTZ9IC8+IDogcmVzdC5zdGFydEljb259XG4gICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgID5cbiAgICAgICAgICB7bG9hZGluZyAmJiBsb2FkaW5nVGV4dCA/IGxvYWRpbmdUZXh0IDogY2hpbGRyZW59XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuKSk7XG5cblNpbXBsZUJ1dHRvbi5kaXNwbGF5TmFtZSA9IFwiU2ltcGxlQnV0dG9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IFNpbXBsZUJ1dHRvbjtcbiIsImltcG9ydCB0eXBlIHsgUHJvcHNXaXRoQ2hpbGRyZW4gfSBmcm9tIFwicmVhY3RcIjtcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIEF1dGhvcml6ZWRWaWV3IGNvbXBvbmVudC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbnR5cGUgQXV0aG9yaXplZFZpZXdQcm9wcyA9IFByb3BzV2l0aENoaWxkcmVuICYge1xuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0aGUgY2hpbGRyZW4gc2hvdWxkIGJlIHJlbmRlcmVkLiBXaGVuIGZhbHNlLCBub3RoaW5nIGlzIHJlbmRlcmVkLlxuICAgKiBAZXhhbXBsZSB0cnVlIC0gU2hvdyBjb250ZW50LCBmYWxzZSAtIEhpZGUgY29udGVudFxuICAgKi9cbiAgc2hvdzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ29uZGl0aW9uYWwgcmVuZGVyaW5nIGNvbXBvbmVudCB0aGF0IHNob3dzIG9yIGhpZGVzIGNvbnRlbnQgYmFzZWQgb24gYXV0aG9yaXphdGlvbiBzdGF0ZS5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIHNpbXBsZSB3YXkgdG8gY29uZGl0aW9uYWxseSByZW5kZXIgY2hpbGQgY29tcG9uZW50c1xuICogYmFzZWQgb24gYSBib29sZWFuIGZsYWcsIHR5cGljYWxseSB1c2VkIGZvciBhdXRob3JpemF0aW9uIG9yIHBlcm1pc3Npb24tYmFzZWQgcmVuZGVyaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiBCYXNpYyB1c2FnZTpcbiAqIGBgYHRzeFxuICogPEF1dGhvcml6ZWRWaWV3IHNob3c9e2hhc1Blcm1pc3Npb259PlxuICogICA8QWRtaW5QYW5lbCAvPlxuICogPC9BdXRob3JpemVkVmlldz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIHVzZXIgcm9sZXM6XG4gKiBgYGB0c3hcbiAqIDxBdXRob3JpemVkVmlldyBzaG93PXt1c2VyLnJvbGUgPT09ICdhZG1pbid9PlxuICogICA8RGVsZXRlQnV0dG9uIC8+XG4gKiA8L0F1dGhvcml6ZWRWaWV3PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIGluY2x1ZGluZyBjaGlsZHJlbiBhbmQgc2hvdyBmbGFnXG4gKiBAcmV0dXJucyBKU1ggY2hpbGRyZW4gaWYgc2hvdyBpcyB0cnVlLCBlbXB0eSBmcmFnbWVudCBpZiBmYWxzZVxuICpcbiAqIEBwdWJsaWNcbiAqL1xuY29uc3QgQXV0aG9yaXplZFZpZXcgPSAoeyBjaGlsZHJlbiwgc2hvdyB9OiBBdXRob3JpemVkVmlld1Byb3BzKSA9PiB7XG4gIGlmICghc2hvdykgcmV0dXJuIDw+PC8+O1xuXG4gIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdXRob3JpemVkVmlldztcbiIsImltcG9ydCB0eXBlIHsgU3hQcm9wcyB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgQ2FuY2VsQnV0dG9uIGNvbXBvbmVudC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmludGVyZmFjZSBDYW5jZWxCdXR0b25Qcm9wcyB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgYSBmb3JtIG9yIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgYmVpbmcgc3VibWl0dGVkLlxuICAgKiBXaGVuIHRydWUsIHRoZSBidXR0b24gaXMgZGlzYWJsZWQgdG8gcHJldmVudCBtdWx0aXBsZSBjYW5jZWwgYWN0aW9ucy5cbiAgICovXG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIHdoZW4gdGhlIGNhbmNlbCBidXR0b24gaXMgY2xpY2tlZC5cbiAgICogU2hvdWxkIGhhbmRsZSB0aGUgY2FuY2VsbGF0aW9uIGxvZ2ljIChlLmcuLCBmb3JtIHJlc2V0LCBuYXZpZ2F0aW9uLCBldGMuKS5cbiAgICovXG4gIGhhbmRsZUNhbmNlbDogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIE1VSSBzeCBwcm9wIGZvciBjdXN0b20gc3R5bGluZy5cbiAgICogQGV4YW1wbGUgeyBtdDogMiwgYmdjb2xvcjogJ2Vycm9yLm1haW4nIH1cbiAgICovXG4gIHN4PzogU3hQcm9wcztcbn1cblxuLyoqXG4gKiBTdGFuZGFyZGl6ZWQgY2FuY2VsIGJ1dHRvbiBjb21wb25lbnQgd2l0aCBzdWJtaXNzaW9uIHN0YXRlIGhhbmRsaW5nLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgY29uc2lzdGVudCBjYW5jZWwgYnV0dG9uIGltcGxlbWVudGF0aW9uIHRoYXQgYXV0b21hdGljYWxseVxuICogaGFuZGxlcyBkaXNhYmxlZCBzdGF0ZXMgZHVyaW5nIGZvcm0gc3VibWlzc2lvbnMuIEl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBpbiBmb3Jtc1xuICogYW5kIGRpYWxvZ3Mgd2hlcmUgdXNlcnMgbmVlZCB0byBjYW5jZWwgb3BlcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogQmFzaWMgdXNhZ2UgaW4gYSBmb3JtOlxuICogYGBgdHN4XG4gKiA8Q2FuY2VsQnV0dG9uXG4gKiAgIGlzU3VibWl0dGluZz17aXNMb2FkaW5nfVxuICogICBoYW5kbGVDYW5jZWw9eygpID0+IG5hdmlnYXRlKCcvcHJldmlvdXMtcGFnZScpfVxuICogLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBXaXRoIGN1c3RvbSBzdHlsaW5nOlxuICogYGBgdHN4XG4gKiA8Q2FuY2VsQnV0dG9uXG4gKiAgIGlzU3VibWl0dGluZz17Zm9ybS5mb3JtU3RhdGUuaXNTdWJtaXR0aW5nfVxuICogICBoYW5kbGVDYW5jZWw9e2Zvcm0ucmVzZXR9XG4gKiAgIHN4PXt7IG10OiAyLCBjb2xvcjogJ2Vycm9yLm1haW4nIH19XG4gKiAvPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHByb3BzIC0gQ29tcG9uZW50IHByb3BzIGZvciBjYW5jZWwgYnV0dG9uIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIE1VSSBCdXR0b24gY29tcG9uZW50IGNvbmZpZ3VyZWQgYXMgYSBjYW5jZWwgYnV0dG9uXG4gKlxuICogQHB1YmxpY1xuICovXG5jb25zdCBDYW5jZWxCdXR0b24gPSAoe1xuICBpc1N1Ym1pdHRpbmcsXG4gIGhhbmRsZUNhbmNlbCxcbiAgc3gsXG59OiBDYW5jZWxCdXR0b25Qcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICBvbkNsaWNrPXtoYW5kbGVDYW5jZWx9XG4gICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgc3g9e3N4fVxuICAgID5cbiAgICAgIENhbmNlbFxuICAgIDwvQnV0dG9uPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsQnV0dG9uO1xuIl19