@ditojs/admin 2.94.1 → 2.96.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dito-admin.css +1 -1
- package/dist/dito-admin.es.js +56 -21
- package/dist/dito-admin.umd.js +5 -5
- package/package.json +14 -13
- package/src/components/DitoCreateButton.vue +11 -3
- package/src/components/DitoEditButtons.vue +4 -2
- package/src/components/DitoLabel.vue +2 -0
- package/src/components/DitoSchema.vue +2 -0
- package/src/components/DitoSchemaInlined.vue +9 -5
- package/src/components/DitoTreeItem.vue +12 -3
- package/src/mixins/SourceMixin.js +19 -6
- package/src/styles/_button.scss +6 -3
- package/src/types/DitoTypeList.vue +3 -1
- package/src/utils/ui/dist/dito-ui.es.js +0 -2729
- package/src/utils/ui/dist/dito-ui.umd.js +0 -2744
- package/src/utils/ui/dist/style.css +0 -1139
|
@@ -1,2729 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
pick,
|
|
3
|
-
isDate,
|
|
4
|
-
hyphenate,
|
|
5
|
-
isString,
|
|
6
|
-
defaultFormats,
|
|
7
|
-
format
|
|
8
|
-
} from '@ditojs/utils'
|
|
9
|
-
const index = ''
|
|
10
|
-
function getAbsoluteBoundingRect(el) {
|
|
11
|
-
const doc = document
|
|
12
|
-
const win = window
|
|
13
|
-
const body = doc.body
|
|
14
|
-
let offsetX =
|
|
15
|
-
win.pageXOffset !== void 0
|
|
16
|
-
? win.pageXOffset
|
|
17
|
-
: (doc.documentElement || body.parentNode || body).scrollLeft
|
|
18
|
-
let offsetY =
|
|
19
|
-
win.pageYOffset !== void 0
|
|
20
|
-
? win.pageYOffset
|
|
21
|
-
: (doc.documentElement || body.parentNode || body).scrollTop
|
|
22
|
-
const rect = el.getBoundingClientRect()
|
|
23
|
-
if (el !== body) {
|
|
24
|
-
let parent = el.parentNode
|
|
25
|
-
while (parent !== body) {
|
|
26
|
-
offsetX += parent.scrollLeft
|
|
27
|
-
offsetY += parent.scrollTop
|
|
28
|
-
parent = parent.parentNode
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
bottom: rect.bottom + offsetY,
|
|
33
|
-
height: rect.height,
|
|
34
|
-
left: rect.left + offsetX,
|
|
35
|
-
right: rect.right + offsetX,
|
|
36
|
-
top: rect.top + offsetY,
|
|
37
|
-
width: rect.width
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
function copyDate(date, {
|
|
41
|
-
year,
|
|
42
|
-
month,
|
|
43
|
-
day,
|
|
44
|
-
hour,
|
|
45
|
-
minute,
|
|
46
|
-
second,
|
|
47
|
-
millisecond
|
|
48
|
-
} = {}) {
|
|
49
|
-
return new Date(
|
|
50
|
-
pick(year, date && date.getFullYear(), 0),
|
|
51
|
-
pick(month, date && date.getMonth(), 0),
|
|
52
|
-
pick(day, date && date.getDate(), 0),
|
|
53
|
-
pick(hour, date && date.getHours(), 0),
|
|
54
|
-
pick(minute, date && date.getMinutes(), 0),
|
|
55
|
-
pick(second, date && date.getSeconds(), 0),
|
|
56
|
-
pick(millisecond, date && date.getMilliseconds(), 0)
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
function convertDate(date) {
|
|
60
|
-
return isDate(date) ? date : date ? new Date(date) : null
|
|
61
|
-
}
|
|
62
|
-
function addEvents(target, events2) {
|
|
63
|
-
for (const type in events2) {
|
|
64
|
-
target.addEventListener(type, events2[type], false)
|
|
65
|
-
}
|
|
66
|
-
return {
|
|
67
|
-
remove() {
|
|
68
|
-
for (const type in events2) {
|
|
69
|
-
target.removeEventListener(type, events2[type], false)
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
function getKey(event) {
|
|
75
|
-
return {
|
|
76
|
-
37: 'left',
|
|
77
|
-
38: 'up',
|
|
78
|
-
39: 'right',
|
|
79
|
-
40: 'down',
|
|
80
|
-
13: 'enter'
|
|
81
|
-
}[event.keyCode]
|
|
82
|
-
}
|
|
83
|
-
function getKeyNavigation(event) {
|
|
84
|
-
const key = getKey(event)
|
|
85
|
-
return {
|
|
86
|
-
hor: { left: -1, right: 1 }[key] || 0,
|
|
87
|
-
ver: { up: -1, down: 1 }[key] || 0,
|
|
88
|
-
enter: key === 'enter'
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function scrollTo(element, to, duration) {
|
|
92
|
-
const requestAnimationFrame = (
|
|
93
|
-
window.requestAnimationFrame ||
|
|
94
|
-
function () {
|
|
95
|
-
return setTimeout(arguments[0], 10)
|
|
96
|
-
}
|
|
97
|
-
)
|
|
98
|
-
if (duration <= 0) {
|
|
99
|
-
element.scrollTop = to
|
|
100
|
-
} else {
|
|
101
|
-
const difference = to - element.scrollTop
|
|
102
|
-
const perTick = difference / duration * 10
|
|
103
|
-
requestAnimationFrame(() => {
|
|
104
|
-
element.scrollTop = element.scrollTop + perTick
|
|
105
|
-
if (element.scrollTop === to) {
|
|
106
|
-
return
|
|
107
|
-
}
|
|
108
|
-
scrollTo(element, to, duration - 10)
|
|
109
|
-
})
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
function setSelection(field, start, end) {
|
|
113
|
-
if (field.createTextRange) {
|
|
114
|
-
const range = field.createTextRange()
|
|
115
|
-
range.collapse(true)
|
|
116
|
-
range.moveStart('character', start)
|
|
117
|
-
range.moveEnd('character', end)
|
|
118
|
-
range.select()
|
|
119
|
-
field.focus()
|
|
120
|
-
} else if (field.setSelectionRange) {
|
|
121
|
-
field.focus()
|
|
122
|
-
field.setSelectionRange(start, end)
|
|
123
|
-
} else if ('selectionStart' in field) {
|
|
124
|
-
field.selectionStart = start
|
|
125
|
-
field.selectionEnd = end
|
|
126
|
-
field.focus()
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
const render$8 = function () {
|
|
130
|
-
const _vm = this
|
|
131
|
-
const _h = _vm.$createElement
|
|
132
|
-
const _c = _vm._self._c || _h
|
|
133
|
-
return _c(
|
|
134
|
-
'div',
|
|
135
|
-
{
|
|
136
|
-
staticClass: 'dito-calendar'
|
|
137
|
-
},
|
|
138
|
-
[
|
|
139
|
-
_c(
|
|
140
|
-
'div',
|
|
141
|
-
{
|
|
142
|
-
staticClass: 'dito-calendar-popup'
|
|
143
|
-
},
|
|
144
|
-
[
|
|
145
|
-
_c(
|
|
146
|
-
'div',
|
|
147
|
-
{
|
|
148
|
-
staticClass: 'dito-calendar-inner'
|
|
149
|
-
},
|
|
150
|
-
[
|
|
151
|
-
_vm.currentMode === 'day'
|
|
152
|
-
? [
|
|
153
|
-
_c(
|
|
154
|
-
'div',
|
|
155
|
-
{
|
|
156
|
-
staticClass: 'dito-calendar-header'
|
|
157
|
-
},
|
|
158
|
-
[
|
|
159
|
-
_c('a', {
|
|
160
|
-
staticClass:
|
|
161
|
-
'dito-calendar-step-prev dito-calendar-step-year',
|
|
162
|
-
on: {
|
|
163
|
-
click: function ($event) {
|
|
164
|
-
return _vm.stepYear(-1)
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}),
|
|
168
|
-
_c('a', {
|
|
169
|
-
staticClass:
|
|
170
|
-
'dito-calendar-step-prev dito-calendar-step-month',
|
|
171
|
-
on: {
|
|
172
|
-
click: function ($event) {
|
|
173
|
-
return _vm.stepMonth(-1)
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}),
|
|
177
|
-
_c('span', [
|
|
178
|
-
_c(
|
|
179
|
-
'a',
|
|
180
|
-
{
|
|
181
|
-
staticClass: 'dito-calendar-select-year',
|
|
182
|
-
on: {
|
|
183
|
-
click: function ($event) {
|
|
184
|
-
return _vm.setMode('year')
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
},
|
|
188
|
-
[
|
|
189
|
-
_vm._v(
|
|
190
|
-
_vm._s(
|
|
191
|
-
_vm.dateToString(_vm.currentValue, {
|
|
192
|
-
year: 1
|
|
193
|
-
})
|
|
194
|
-
)
|
|
195
|
-
)
|
|
196
|
-
]
|
|
197
|
-
),
|
|
198
|
-
_c(
|
|
199
|
-
'a',
|
|
200
|
-
{
|
|
201
|
-
staticClass: 'dito-calendar-select-month',
|
|
202
|
-
on: {
|
|
203
|
-
click: function ($event) {
|
|
204
|
-
return _vm.setMode('month')
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
[
|
|
209
|
-
_vm._v(
|
|
210
|
-
_vm._s(
|
|
211
|
-
_vm.dateToString(_vm.currentValue, {
|
|
212
|
-
month: 1
|
|
213
|
-
})
|
|
214
|
-
)
|
|
215
|
-
)
|
|
216
|
-
]
|
|
217
|
-
)
|
|
218
|
-
]),
|
|
219
|
-
_c('a', {
|
|
220
|
-
staticClass:
|
|
221
|
-
'dito-calendar-step-next dito-calendar-step-month',
|
|
222
|
-
on: {
|
|
223
|
-
click: function ($event) {
|
|
224
|
-
return _vm.stepMonth(1)
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}),
|
|
228
|
-
_c('a', {
|
|
229
|
-
staticClass:
|
|
230
|
-
'dito-calendar-step-next dito-calendar-step-year',
|
|
231
|
-
on: {
|
|
232
|
-
click: function ($event) {
|
|
233
|
-
return _vm.stepYear(1)
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
})
|
|
237
|
-
]
|
|
238
|
-
),
|
|
239
|
-
_c(
|
|
240
|
-
'div',
|
|
241
|
-
{
|
|
242
|
-
staticClass: 'dito-calendar-body'
|
|
243
|
-
},
|
|
244
|
-
[
|
|
245
|
-
_c(
|
|
246
|
-
'div',
|
|
247
|
-
{
|
|
248
|
-
staticClass: 'dito-calendar-weekdays'
|
|
249
|
-
},
|
|
250
|
-
_vm._l(_vm.weekdayNames, function (weekday) {
|
|
251
|
-
return _c('span', [_vm._v(_vm._s(weekday.short))])
|
|
252
|
-
}),
|
|
253
|
-
0
|
|
254
|
-
),
|
|
255
|
-
_c(
|
|
256
|
-
'div',
|
|
257
|
-
{
|
|
258
|
-
staticClass: 'dito-calendar-dates'
|
|
259
|
-
},
|
|
260
|
-
_vm._l(_vm.dateRange, function (date) {
|
|
261
|
-
return _c(
|
|
262
|
-
'span',
|
|
263
|
-
{
|
|
264
|
-
class: (
|
|
265
|
-
date.state && `dito-calendar-item-${
|
|
266
|
-
date.state
|
|
267
|
-
}`
|
|
268
|
-
),
|
|
269
|
-
on: {
|
|
270
|
-
click: function ($event) {
|
|
271
|
-
return _vm.selectDate(
|
|
272
|
-
date.date,
|
|
273
|
-
date.state,
|
|
274
|
-
true
|
|
275
|
-
)
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
|
-
[_vm._v(_vm._s(date.text))]
|
|
280
|
-
)
|
|
281
|
-
}),
|
|
282
|
-
0
|
|
283
|
-
)
|
|
284
|
-
]
|
|
285
|
-
),
|
|
286
|
-
_c(
|
|
287
|
-
'div',
|
|
288
|
-
{
|
|
289
|
-
staticClass: 'dito-calendar-footer'
|
|
290
|
-
},
|
|
291
|
-
[
|
|
292
|
-
_c('a', {
|
|
293
|
-
staticClass: 'dito-calendar-select-today',
|
|
294
|
-
attrs: {
|
|
295
|
-
role: 'button',
|
|
296
|
-
title: _vm.dateToString(new Date(), {
|
|
297
|
-
year: 1,
|
|
298
|
-
month: 1,
|
|
299
|
-
day: 1
|
|
300
|
-
})
|
|
301
|
-
},
|
|
302
|
-
on: {
|
|
303
|
-
click: function ($event) {
|
|
304
|
-
_vm.selectDate(new Date())
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
})
|
|
308
|
-
]
|
|
309
|
-
)
|
|
310
|
-
]
|
|
311
|
-
: _vm.currentMode === 'month'
|
|
312
|
-
? [
|
|
313
|
-
_c(
|
|
314
|
-
'div',
|
|
315
|
-
{
|
|
316
|
-
staticClass: 'dito-calendar-header'
|
|
317
|
-
},
|
|
318
|
-
[
|
|
319
|
-
_c('a', {
|
|
320
|
-
staticClass: 'dito-calendar-step-prev',
|
|
321
|
-
on: {
|
|
322
|
-
click: function ($event) {
|
|
323
|
-
return _vm.stepYear(-1)
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}),
|
|
327
|
-
_c('span', [
|
|
328
|
-
_c(
|
|
329
|
-
'a',
|
|
330
|
-
{
|
|
331
|
-
staticClass: 'dito-calendar-select-year',
|
|
332
|
-
on: {
|
|
333
|
-
click: function ($event) {
|
|
334
|
-
return _vm.setMode('year')
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
[
|
|
339
|
-
_vm._v(
|
|
340
|
-
_vm._s(
|
|
341
|
-
_vm.dateToString(_vm.currentValue, {
|
|
342
|
-
year: 1
|
|
343
|
-
})
|
|
344
|
-
)
|
|
345
|
-
)
|
|
346
|
-
]
|
|
347
|
-
)
|
|
348
|
-
]),
|
|
349
|
-
_c('a', {
|
|
350
|
-
staticClass: 'dito-calendar-step-next',
|
|
351
|
-
on: {
|
|
352
|
-
click: function ($event) {
|
|
353
|
-
return _vm.stepYear(1)
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
})
|
|
357
|
-
]
|
|
358
|
-
),
|
|
359
|
-
_c(
|
|
360
|
-
'div',
|
|
361
|
-
{
|
|
362
|
-
staticClass: 'dito-calendar-body'
|
|
363
|
-
},
|
|
364
|
-
[
|
|
365
|
-
_c(
|
|
366
|
-
'div',
|
|
367
|
-
{
|
|
368
|
-
staticClass: 'dito-calendar-months'
|
|
369
|
-
},
|
|
370
|
-
_vm._l(_vm.monthNames, function (month, index2) {
|
|
371
|
-
return _c(
|
|
372
|
-
'span',
|
|
373
|
-
{
|
|
374
|
-
class: _vm.getMonthClass(index2),
|
|
375
|
-
on: {
|
|
376
|
-
click: function ($event) {
|
|
377
|
-
return _vm.selectMonth(index2)
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
},
|
|
381
|
-
[_vm._v(_vm._s(month.short))]
|
|
382
|
-
)
|
|
383
|
-
}),
|
|
384
|
-
0
|
|
385
|
-
)
|
|
386
|
-
]
|
|
387
|
-
)
|
|
388
|
-
]
|
|
389
|
-
: _vm.currentMode === 'year'
|
|
390
|
-
? [
|
|
391
|
-
_c(
|
|
392
|
-
'div',
|
|
393
|
-
{
|
|
394
|
-
staticClass: 'dito-calendar-header'
|
|
395
|
-
},
|
|
396
|
-
[
|
|
397
|
-
_c('a', {
|
|
398
|
-
staticClass: 'dito-calendar-step-prev',
|
|
399
|
-
on: {
|
|
400
|
-
click: function ($event) {
|
|
401
|
-
return _vm.stepDecade(-1)
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
}),
|
|
405
|
-
_c('span', [
|
|
406
|
-
_vm._v(
|
|
407
|
-
_vm._s(_vm.decadeToString(_vm.currentValue))
|
|
408
|
-
)
|
|
409
|
-
]),
|
|
410
|
-
_c('a', {
|
|
411
|
-
staticClass: 'dito-calendar-step-next',
|
|
412
|
-
on: {
|
|
413
|
-
click: function ($event) {
|
|
414
|
-
return _vm.stepDecade(1)
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
})
|
|
418
|
-
]
|
|
419
|
-
),
|
|
420
|
-
_c(
|
|
421
|
-
'div',
|
|
422
|
-
{
|
|
423
|
-
staticClass: 'dito-calendar-body'
|
|
424
|
-
},
|
|
425
|
-
[
|
|
426
|
-
_c(
|
|
427
|
-
'div',
|
|
428
|
-
{
|
|
429
|
-
staticClass: 'dito-calendar-years'
|
|
430
|
-
},
|
|
431
|
-
_vm._l(_vm.yearRange, function (year) {
|
|
432
|
-
return _c(
|
|
433
|
-
'span',
|
|
434
|
-
{
|
|
435
|
-
class: _vm.getYearClass(year),
|
|
436
|
-
on: {
|
|
437
|
-
click: function ($event) {
|
|
438
|
-
return _vm.selectYear(year)
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
},
|
|
442
|
-
[_vm._v(_vm._s(year))]
|
|
443
|
-
)
|
|
444
|
-
}),
|
|
445
|
-
0
|
|
446
|
-
)
|
|
447
|
-
]
|
|
448
|
-
)
|
|
449
|
-
]
|
|
450
|
-
: _vm._e()
|
|
451
|
-
],
|
|
452
|
-
2
|
|
453
|
-
)
|
|
454
|
-
]
|
|
455
|
-
)
|
|
456
|
-
]
|
|
457
|
-
)
|
|
458
|
-
}
|
|
459
|
-
const staticRenderFns$8 = []
|
|
460
|
-
render$8._withStripped = true
|
|
461
|
-
const Calendar_vue_vue_type_style_index_0_lang = ''
|
|
462
|
-
function normalizeComponent(
|
|
463
|
-
scriptExports,
|
|
464
|
-
render2,
|
|
465
|
-
staticRenderFns2,
|
|
466
|
-
functionalTemplate,
|
|
467
|
-
injectStyles,
|
|
468
|
-
scopeId,
|
|
469
|
-
moduleIdentifier,
|
|
470
|
-
shadowMode
|
|
471
|
-
) {
|
|
472
|
-
const options =
|
|
473
|
-
typeof scriptExports === 'function' ? scriptExports.options : scriptExports
|
|
474
|
-
if (render2) {
|
|
475
|
-
options.render = render2
|
|
476
|
-
options.staticRenderFns = staticRenderFns2
|
|
477
|
-
options._compiled = true
|
|
478
|
-
}
|
|
479
|
-
if (functionalTemplate) {
|
|
480
|
-
options.functional = true
|
|
481
|
-
}
|
|
482
|
-
if (scopeId) {
|
|
483
|
-
options._scopeId = 'data-v-' + scopeId
|
|
484
|
-
}
|
|
485
|
-
let hook
|
|
486
|
-
if (moduleIdentifier) {
|
|
487
|
-
hook = function (context) {
|
|
488
|
-
context = (
|
|
489
|
-
context ||
|
|
490
|
-
this.$vnode && this.$vnode.ssrContext ||
|
|
491
|
-
this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext
|
|
492
|
-
)
|
|
493
|
-
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
|
|
494
|
-
context = __VUE_SSR_CONTEXT__
|
|
495
|
-
}
|
|
496
|
-
if (injectStyles) {
|
|
497
|
-
injectStyles.call(this, context)
|
|
498
|
-
}
|
|
499
|
-
if (context && context._registeredComponents) {
|
|
500
|
-
context._registeredComponents.add(moduleIdentifier)
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
options._ssrRegister = hook
|
|
504
|
-
} else if (injectStyles) {
|
|
505
|
-
hook = shadowMode
|
|
506
|
-
? function () {
|
|
507
|
-
injectStyles.call(
|
|
508
|
-
this,
|
|
509
|
-
(options.functional ? this.parent : this).$root.$options.shadowRoot
|
|
510
|
-
)
|
|
511
|
-
}
|
|
512
|
-
: injectStyles
|
|
513
|
-
}
|
|
514
|
-
if (hook) {
|
|
515
|
-
if (options.functional) {
|
|
516
|
-
options._injectStyles = hook
|
|
517
|
-
const originalRender = options.render
|
|
518
|
-
options.render = function renderWithStyleInjection(h, context) {
|
|
519
|
-
hook.call(context)
|
|
520
|
-
return originalRender(h, context)
|
|
521
|
-
}
|
|
522
|
-
} else {
|
|
523
|
-
const existing = options.beforeCreate
|
|
524
|
-
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
return {
|
|
528
|
-
exports: scriptExports,
|
|
529
|
-
options
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
const __vue2_script$9 = {
|
|
533
|
-
props: {
|
|
534
|
-
value: { type: Date, default: null },
|
|
535
|
-
locale: { type: String, default: 'en-US' },
|
|
536
|
-
disabledDate: { type: Function, default: () => false },
|
|
537
|
-
mode: { type: String, default: 'day' }
|
|
538
|
-
},
|
|
539
|
-
data() {
|
|
540
|
-
const { weekdayNames, monthNames } = getLocaleNames(this.locale)
|
|
541
|
-
return {
|
|
542
|
-
weekdayNames,
|
|
543
|
-
monthNames,
|
|
544
|
-
dateRange: [],
|
|
545
|
-
yearRange: [],
|
|
546
|
-
currentValue: (
|
|
547
|
-
this.value || copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
|
|
548
|
-
),
|
|
549
|
-
currentMode: this.mode
|
|
550
|
-
}
|
|
551
|
-
},
|
|
552
|
-
watch: {
|
|
553
|
-
currentValue: 'updateDateRange',
|
|
554
|
-
disabledDate: 'updateDateRange',
|
|
555
|
-
value(newVal, oldVal) {
|
|
556
|
-
if (+newVal !== +oldVal) {
|
|
557
|
-
this.currentValue = newVal || new Date()
|
|
558
|
-
}
|
|
559
|
-
},
|
|
560
|
-
mode(mode) {
|
|
561
|
-
this.currentMode = mode
|
|
562
|
-
}
|
|
563
|
-
},
|
|
564
|
-
mounted() {
|
|
565
|
-
this.updateDateRange()
|
|
566
|
-
},
|
|
567
|
-
methods: {
|
|
568
|
-
getMonthClass(month) {
|
|
569
|
-
return {
|
|
570
|
-
'dito-calendar-item-active': (
|
|
571
|
-
this.value &&
|
|
572
|
-
month === this.value.getMonth() &&
|
|
573
|
-
this.currentValue.getFullYear() === this.value.getFullYear()
|
|
574
|
-
),
|
|
575
|
-
'dito-calendar-item-current': month === this.currentValue.getMonth()
|
|
576
|
-
}
|
|
577
|
-
},
|
|
578
|
-
getYearClass(year) {
|
|
579
|
-
return {
|
|
580
|
-
'dito-calendar-item-active': (
|
|
581
|
-
this.value && year === this.value.getFullYear()
|
|
582
|
-
),
|
|
583
|
-
'dito-calendar-item-current': year === this.currentValue.getFullYear()
|
|
584
|
-
}
|
|
585
|
-
},
|
|
586
|
-
setDate(overrides) {
|
|
587
|
-
this.currentValue = copyDate(this.currentValue, overrides)
|
|
588
|
-
},
|
|
589
|
-
stepDecade(step) {
|
|
590
|
-
this.setDate({
|
|
591
|
-
year: this.currentValue.getFullYear() + step * 10
|
|
592
|
-
})
|
|
593
|
-
},
|
|
594
|
-
setMode(mode) {
|
|
595
|
-
this.currentMode = mode
|
|
596
|
-
},
|
|
597
|
-
stepMonth(step) {
|
|
598
|
-
const { currentValue } = this
|
|
599
|
-
const { year, month } = this.getYearMonth(
|
|
600
|
-
currentValue.getFullYear(),
|
|
601
|
-
currentValue.getMonth() + step
|
|
602
|
-
)
|
|
603
|
-
this.setDate({
|
|
604
|
-
month,
|
|
605
|
-
day: Math.min(
|
|
606
|
-
this.getDayCount(year, month),
|
|
607
|
-
this.currentValue.getDate()
|
|
608
|
-
)
|
|
609
|
-
})
|
|
610
|
-
},
|
|
611
|
-
stepYear(step) {
|
|
612
|
-
this.setDate({
|
|
613
|
-
year: this.currentValue.getFullYear() + step
|
|
614
|
-
})
|
|
615
|
-
},
|
|
616
|
-
selectDate(date, state, copy = false) {
|
|
617
|
-
if (state !== 'disabled') {
|
|
618
|
-
if (copy) {
|
|
619
|
-
this.setDate({
|
|
620
|
-
year: date.getFullYear(),
|
|
621
|
-
month: date.getMonth(),
|
|
622
|
-
day: date.getDate()
|
|
623
|
-
})
|
|
624
|
-
} else {
|
|
625
|
-
this.currentValue = date
|
|
626
|
-
}
|
|
627
|
-
this.$emit('input', this.currentValue)
|
|
628
|
-
}
|
|
629
|
-
},
|
|
630
|
-
selectMonth(month) {
|
|
631
|
-
this.setMode('day')
|
|
632
|
-
this.setDate({ month })
|
|
633
|
-
},
|
|
634
|
-
selectYear(year) {
|
|
635
|
-
this.setMode('month')
|
|
636
|
-
this.setDate({ year })
|
|
637
|
-
},
|
|
638
|
-
getYearMonth(year, month) {
|
|
639
|
-
if (month > 11) {
|
|
640
|
-
year++
|
|
641
|
-
month = 0
|
|
642
|
-
} else if (month < 0) {
|
|
643
|
-
year--
|
|
644
|
-
month = 11
|
|
645
|
-
}
|
|
646
|
-
return { year, month }
|
|
647
|
-
},
|
|
648
|
-
dateToString(date, { year, month, day }) {
|
|
649
|
-
return date.toLocaleString(this.locale, {
|
|
650
|
-
year: year && 'numeric',
|
|
651
|
-
month: month && 'long',
|
|
652
|
-
day: day && 'numeric'
|
|
653
|
-
})
|
|
654
|
-
},
|
|
655
|
-
decadeToString(date) {
|
|
656
|
-
const year = this.getFirstYearOfDecade(date.getFullYear())
|
|
657
|
-
return `${year} \u2013 ${year + 9}`
|
|
658
|
-
},
|
|
659
|
-
getDayCount(year, month) {
|
|
660
|
-
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
|
661
|
-
return month === 1 && (!(year % 400) || !(year % 4) && year % 100)
|
|
662
|
-
? 29
|
|
663
|
-
: daysInMonth[month]
|
|
664
|
-
},
|
|
665
|
-
getFirstYearOfDecade(year) {
|
|
666
|
-
const yearStr = year.toString()
|
|
667
|
-
return +`${yearStr.slice(0, -1)}0`
|
|
668
|
-
},
|
|
669
|
-
navigate({ hor, ver, enter }) {
|
|
670
|
-
const { currentMode, currentValue } = this
|
|
671
|
-
if (hor || ver) {
|
|
672
|
-
switch (currentMode) {
|
|
673
|
-
case 'day':
|
|
674
|
-
this.setDate({
|
|
675
|
-
day: currentValue.getDate() + hor + ver * 7
|
|
676
|
-
})
|
|
677
|
-
break
|
|
678
|
-
case 'month':
|
|
679
|
-
this.setDate({
|
|
680
|
-
month: currentValue.getMonth() + hor + ver * 6
|
|
681
|
-
})
|
|
682
|
-
break
|
|
683
|
-
case 'year':
|
|
684
|
-
this.setDate({
|
|
685
|
-
year: currentValue.getFullYear() + hor + ver * 5
|
|
686
|
-
})
|
|
687
|
-
break
|
|
688
|
-
}
|
|
689
|
-
return true
|
|
690
|
-
} else if (enter) {
|
|
691
|
-
switch (currentMode) {
|
|
692
|
-
case 'day':
|
|
693
|
-
this.selectDate(currentValue)
|
|
694
|
-
break
|
|
695
|
-
case 'month':
|
|
696
|
-
this.setMode('day')
|
|
697
|
-
break
|
|
698
|
-
case 'year':
|
|
699
|
-
this.setMode('month')
|
|
700
|
-
break
|
|
701
|
-
}
|
|
702
|
-
return true
|
|
703
|
-
}
|
|
704
|
-
},
|
|
705
|
-
updateDateRange() {
|
|
706
|
-
this.dateRange = []
|
|
707
|
-
this.yearRange = []
|
|
708
|
-
const { currentValue } = this
|
|
709
|
-
const year = currentValue.getFullYear()
|
|
710
|
-
const month = currentValue.getMonth()
|
|
711
|
-
const startYear = this.getFirstYearOfDecade(year)
|
|
712
|
-
for (let i = 0; i < 10; i++) {
|
|
713
|
-
this.yearRange.push(startYear + i)
|
|
714
|
-
}
|
|
715
|
-
const currMonthFirstDay = new Date(year, month, 1)
|
|
716
|
-
let firstDayWeek = currMonthFirstDay.getDay() + 1
|
|
717
|
-
if (firstDayWeek === 0) {
|
|
718
|
-
firstDayWeek = 7
|
|
719
|
-
}
|
|
720
|
-
const dayCount = this.getDayCount(year, month)
|
|
721
|
-
if (firstDayWeek > 1) {
|
|
722
|
-
const prevMonth = this.getYearMonth(year, month - 1)
|
|
723
|
-
const prevMonthDayCount = this.getDayCount(
|
|
724
|
-
prevMonth.year,
|
|
725
|
-
prevMonth.month
|
|
726
|
-
)
|
|
727
|
-
for (let i = 1; i < firstDayWeek; i++) {
|
|
728
|
-
const day = prevMonthDayCount - firstDayWeek + i + 1
|
|
729
|
-
const date = new Date(prevMonth.year, prevMonth.month, day)
|
|
730
|
-
this.dateRange.push({
|
|
731
|
-
text: day,
|
|
732
|
-
date,
|
|
733
|
-
state: this.disabledDate(date) ? 'disabled' : 'gray'
|
|
734
|
-
})
|
|
735
|
-
}
|
|
736
|
-
}
|
|
737
|
-
const today = new Date()
|
|
738
|
-
for (let i = 1; i <= dayCount; i++) {
|
|
739
|
-
const date = new Date(year, month, i)
|
|
740
|
-
const isDay = date2 => (
|
|
741
|
-
date2 &&
|
|
742
|
-
date2.getDate() === i &&
|
|
743
|
-
date2.getFullYear() === year &&
|
|
744
|
-
date2.getMonth() === month
|
|
745
|
-
)
|
|
746
|
-
const state = isDay(this.value)
|
|
747
|
-
? 'active'
|
|
748
|
-
: isDay(today)
|
|
749
|
-
? 'today'
|
|
750
|
-
: this.disabledDate(date)
|
|
751
|
-
? 'disabled'
|
|
752
|
-
: isDay(currentValue)
|
|
753
|
-
? 'current'
|
|
754
|
-
: null
|
|
755
|
-
this.dateRange.push({
|
|
756
|
-
text: i,
|
|
757
|
-
date,
|
|
758
|
-
state
|
|
759
|
-
})
|
|
760
|
-
}
|
|
761
|
-
const nextMonthNeed = 42 - this.dateRange.length
|
|
762
|
-
if (nextMonthNeed > 0) {
|
|
763
|
-
const nextMonth = this.getYearMonth(year, month + 1)
|
|
764
|
-
for (let i = 1; i <= nextMonthNeed; i++) {
|
|
765
|
-
const date = new Date(nextMonth.year, nextMonth.month, i)
|
|
766
|
-
const state = this.disabledDate(date) ? 'disabled' : 'gray'
|
|
767
|
-
this.dateRange.push({
|
|
768
|
-
text: i,
|
|
769
|
-
date,
|
|
770
|
-
state
|
|
771
|
-
})
|
|
772
|
-
}
|
|
773
|
-
}
|
|
774
|
-
}
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
const localeNames = {}
|
|
778
|
-
function getLocaleNames(locale) {
|
|
779
|
-
let names = localeNames[locale]
|
|
780
|
-
if (!names) {
|
|
781
|
-
const weekdayNames = []
|
|
782
|
-
for (let i = 0; i < 7; i++) {
|
|
783
|
-
const date = new Date(0, 0, i)
|
|
784
|
-
weekdayNames.push({
|
|
785
|
-
long: date.toLocaleString(locale, { weekday: 'long' }),
|
|
786
|
-
short: date.toLocaleString(locale, { weekday: 'short' })
|
|
787
|
-
})
|
|
788
|
-
}
|
|
789
|
-
const monthNames = []
|
|
790
|
-
for (let i = 1; i <= 12; i++) {
|
|
791
|
-
const date = new Date(0, i, 0)
|
|
792
|
-
monthNames.push({
|
|
793
|
-
long: date.toLocaleString(locale, { month: 'long' }),
|
|
794
|
-
short: date.toLocaleString(locale, { month: 'short' })
|
|
795
|
-
})
|
|
796
|
-
}
|
|
797
|
-
names = localeNames[locale] = {
|
|
798
|
-
weekdayNames,
|
|
799
|
-
monthNames
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
return names
|
|
803
|
-
}
|
|
804
|
-
const __cssModules$9 = {}
|
|
805
|
-
const __component__$9 = /* @__PURE__ */ normalizeComponent(
|
|
806
|
-
__vue2_script$9,
|
|
807
|
-
render$8,
|
|
808
|
-
staticRenderFns$8,
|
|
809
|
-
false,
|
|
810
|
-
__vue2_injectStyles$9,
|
|
811
|
-
null,
|
|
812
|
-
null,
|
|
813
|
-
null
|
|
814
|
-
)
|
|
815
|
-
function __vue2_injectStyles$9(context) {
|
|
816
|
-
for (const o in __cssModules$9) {
|
|
817
|
-
this[o] = __cssModules$9[o]
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
__component__$9.options.__file = 'src/components/Calendar.vue'
|
|
821
|
-
const Calendar = /* @__PURE__ */ (function () {
|
|
822
|
-
return __component__$9.exports
|
|
823
|
-
})()
|
|
824
|
-
const render$7 = function () {
|
|
825
|
-
const _vm = this
|
|
826
|
-
const _h = _vm.$createElement
|
|
827
|
-
const _c = _vm._self._c || _h
|
|
828
|
-
return _c(
|
|
829
|
-
'div',
|
|
830
|
-
{
|
|
831
|
-
staticClass: 'dito-trigger-container'
|
|
832
|
-
},
|
|
833
|
-
[
|
|
834
|
-
_vm.alwaysShow
|
|
835
|
-
? _c(
|
|
836
|
-
'div',
|
|
837
|
-
{
|
|
838
|
-
ref: 'trigger',
|
|
839
|
-
staticClass: 'dito-trigger',
|
|
840
|
-
class: _vm.triggerClass
|
|
841
|
-
},
|
|
842
|
-
[_vm._t('trigger')],
|
|
843
|
-
2
|
|
844
|
-
)
|
|
845
|
-
: _vm.trigger === 'click'
|
|
846
|
-
? _c(
|
|
847
|
-
'div',
|
|
848
|
-
{
|
|
849
|
-
ref: 'trigger',
|
|
850
|
-
staticClass: 'dito-trigger',
|
|
851
|
-
class: _vm.triggerClass,
|
|
852
|
-
on: {
|
|
853
|
-
click: _vm.onClick
|
|
854
|
-
}
|
|
855
|
-
},
|
|
856
|
-
[_vm._t('trigger')],
|
|
857
|
-
2
|
|
858
|
-
)
|
|
859
|
-
: _vm.trigger === 'hover'
|
|
860
|
-
? _c(
|
|
861
|
-
'div',
|
|
862
|
-
{
|
|
863
|
-
ref: 'trigger',
|
|
864
|
-
staticClass: 'dito-trigger',
|
|
865
|
-
class: _vm.triggerClass,
|
|
866
|
-
on: {
|
|
867
|
-
mouseenter: function ($event) {
|
|
868
|
-
return _vm.onHover(true)
|
|
869
|
-
},
|
|
870
|
-
mouseleave: function ($event) {
|
|
871
|
-
return _vm.onHover(false)
|
|
872
|
-
}
|
|
873
|
-
}
|
|
874
|
-
},
|
|
875
|
-
[_vm._t('trigger')],
|
|
876
|
-
2
|
|
877
|
-
)
|
|
878
|
-
: _vm.trigger === 'focus' || _vm.trigger === 'always'
|
|
879
|
-
? _c(
|
|
880
|
-
'div',
|
|
881
|
-
{
|
|
882
|
-
ref: 'trigger',
|
|
883
|
-
staticClass: 'dito-trigger',
|
|
884
|
-
class: _vm.triggerClass
|
|
885
|
-
},
|
|
886
|
-
[_vm._t('trigger')],
|
|
887
|
-
2
|
|
888
|
-
)
|
|
889
|
-
: _vm._e(),
|
|
890
|
-
_c(
|
|
891
|
-
'transition',
|
|
892
|
-
{
|
|
893
|
-
attrs: {
|
|
894
|
-
name: _vm.transition
|
|
895
|
-
}
|
|
896
|
-
},
|
|
897
|
-
[
|
|
898
|
-
_vm.trigger === 'hover'
|
|
899
|
-
? _c(
|
|
900
|
-
'div',
|
|
901
|
-
{
|
|
902
|
-
directives: [
|
|
903
|
-
{
|
|
904
|
-
name: 'show',
|
|
905
|
-
rawName: 'v-show',
|
|
906
|
-
value: _vm.showPopup,
|
|
907
|
-
expression: 'showPopup'
|
|
908
|
-
}
|
|
909
|
-
],
|
|
910
|
-
ref: 'popup',
|
|
911
|
-
staticClass: 'dito-popup',
|
|
912
|
-
class: _vm.popupClass,
|
|
913
|
-
style: _vm.popupStyle,
|
|
914
|
-
on: {
|
|
915
|
-
mouseenter: function ($event) {
|
|
916
|
-
return _vm.onHover(true)
|
|
917
|
-
},
|
|
918
|
-
mouseleave: function ($event) {
|
|
919
|
-
return _vm.onHover(false)
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
|
-
},
|
|
923
|
-
[_vm.showPopup ? _vm._t('popup') : _vm._e()],
|
|
924
|
-
2
|
|
925
|
-
)
|
|
926
|
-
: _c(
|
|
927
|
-
'div',
|
|
928
|
-
{
|
|
929
|
-
directives: [
|
|
930
|
-
{
|
|
931
|
-
name: 'show',
|
|
932
|
-
rawName: 'v-show',
|
|
933
|
-
value: _vm.showPopup,
|
|
934
|
-
expression: 'showPopup'
|
|
935
|
-
}
|
|
936
|
-
],
|
|
937
|
-
ref: 'popup',
|
|
938
|
-
staticClass: 'dito-popup',
|
|
939
|
-
class: _vm.popupClass,
|
|
940
|
-
style: _vm.popupStyle
|
|
941
|
-
},
|
|
942
|
-
[_vm.showPopup ? _vm._t('popup') : _vm._e()],
|
|
943
|
-
2
|
|
944
|
-
)
|
|
945
|
-
]
|
|
946
|
-
)
|
|
947
|
-
],
|
|
948
|
-
1
|
|
949
|
-
)
|
|
950
|
-
}
|
|
951
|
-
const staticRenderFns$7 = []
|
|
952
|
-
render$7._withStripped = true
|
|
953
|
-
const Trigger_vue_vue_type_style_index_0_lang = ''
|
|
954
|
-
const __vue2_script$8 = {
|
|
955
|
-
props: {
|
|
956
|
-
trigger: { type: String, default: 'click' },
|
|
957
|
-
transition: { type: String, default: 'slide' },
|
|
958
|
-
placement: { type: String, default: 'bottom' },
|
|
959
|
-
show: { type: Boolean, default: false },
|
|
960
|
-
disabled: { type: Boolean, default: false },
|
|
961
|
-
target: { type: [String, HTMLElement], default: null },
|
|
962
|
-
customClass: { type: String, default: null },
|
|
963
|
-
zIndex: { type: Number, default: 0 },
|
|
964
|
-
keepInView: { type: Boolean, default: true },
|
|
965
|
-
hideWhenClickOutside: { type: Boolean, default: true },
|
|
966
|
-
alwaysShow: { type: Boolean, default: false },
|
|
967
|
-
cover: { type: Boolean, default: false },
|
|
968
|
-
hideDelay: { type: Number, default: 0 }
|
|
969
|
-
},
|
|
970
|
-
data() {
|
|
971
|
-
return {
|
|
972
|
-
showPopup: this.show,
|
|
973
|
-
popupPlacement: this.placement
|
|
974
|
-
}
|
|
975
|
-
},
|
|
976
|
-
computed: {
|
|
977
|
-
triggerClass() {
|
|
978
|
-
return {
|
|
979
|
-
'dito-trigger-disabled': this.disabled
|
|
980
|
-
}
|
|
981
|
-
},
|
|
982
|
-
popupClass() {
|
|
983
|
-
const classes = {
|
|
984
|
-
[`dito-popup-${hyphenate(this.placement)}`]: true
|
|
985
|
-
}
|
|
986
|
-
if (this.customClass) {
|
|
987
|
-
classes[this.customClass] = true
|
|
988
|
-
}
|
|
989
|
-
return classes
|
|
990
|
-
},
|
|
991
|
-
popupStyle() {
|
|
992
|
-
return this.zIndex ? `z-index: ${this.zIndex}` : ''
|
|
993
|
-
}
|
|
994
|
-
},
|
|
995
|
-
watch: {
|
|
996
|
-
show(show) {
|
|
997
|
-
this.showPopup = show || this.alwaysShow
|
|
998
|
-
},
|
|
999
|
-
showPopup(newVal, oldVal) {
|
|
1000
|
-
if (!newVal !== !oldVal) {
|
|
1001
|
-
this.$emit('update:show', newVal)
|
|
1002
|
-
if (newVal) {
|
|
1003
|
-
this.$nextTick(() => this.updatePosition())
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
}
|
|
1007
|
-
},
|
|
1008
|
-
mounted() {
|
|
1009
|
-
const { trigger, popup } = this.$refs
|
|
1010
|
-
if (this.trigger === 'focus') {
|
|
1011
|
-
const target = trigger.querySelector('input, textarea')
|
|
1012
|
-
if (target) {
|
|
1013
|
-
this.focusEvents = addEvents(target, {
|
|
1014
|
-
focus: () => {
|
|
1015
|
-
this.showPopup = true
|
|
1016
|
-
},
|
|
1017
|
-
blur: () => {
|
|
1018
|
-
this.showPopup = false
|
|
1019
|
-
}
|
|
1020
|
-
})
|
|
1021
|
-
}
|
|
1022
|
-
}
|
|
1023
|
-
if (this.hideWhenClickOutside && !this.alwaysShow) {
|
|
1024
|
-
this.closeEvents = addEvents(window, {
|
|
1025
|
-
mouseup: event => {
|
|
1026
|
-
if (
|
|
1027
|
-
this.showPopup &&
|
|
1028
|
-
!popup.contains(event.target) &&
|
|
1029
|
-
!trigger.contains(event.target)
|
|
1030
|
-
) {
|
|
1031
|
-
this.showPopup = false
|
|
1032
|
-
}
|
|
1033
|
-
},
|
|
1034
|
-
blur: () => {
|
|
1035
|
-
this.showPopup = false
|
|
1036
|
-
}
|
|
1037
|
-
})
|
|
1038
|
-
}
|
|
1039
|
-
if (this.alwaysShow) {
|
|
1040
|
-
this.showPopup = true
|
|
1041
|
-
}
|
|
1042
|
-
},
|
|
1043
|
-
created() {
|
|
1044
|
-
this.showPopup = this.show
|
|
1045
|
-
},
|
|
1046
|
-
beforeDestroy() {
|
|
1047
|
-
let _a, _b
|
|
1048
|
-
;(_a = this.focusEvents) == null ? void 0 : _a.remove()
|
|
1049
|
-
;(_b = this.closeEvents) == null ? void 0 : _b.remove()
|
|
1050
|
-
this.mouseLeaveTimer = null
|
|
1051
|
-
},
|
|
1052
|
-
methods: {
|
|
1053
|
-
updatePosition() {
|
|
1054
|
-
const { trigger, popup } = this.$refs
|
|
1055
|
-
if (this.show && popup.offsetWidth === 0) {
|
|
1056
|
-
setTimeout(() => this.updatePosition(), 0)
|
|
1057
|
-
return
|
|
1058
|
-
}
|
|
1059
|
-
const target = isString(this.target)
|
|
1060
|
-
? this.$refs[this.target]
|
|
1061
|
-
: this.target
|
|
1062
|
-
if (target) {
|
|
1063
|
-
const el = target === popup ? trigger : popup.firstChild
|
|
1064
|
-
el.style.width = getComputedStyle(target).width
|
|
1065
|
-
}
|
|
1066
|
-
const bounds = (target || trigger).getBoundingClientRect()
|
|
1067
|
-
const triggerLeft = bounds.left + window.scrollX
|
|
1068
|
-
const triggerTop = bounds.top + window.scrollY
|
|
1069
|
-
const triggerWidth = bounds.width
|
|
1070
|
-
const triggerHeight = bounds.height
|
|
1071
|
-
const popupWidth = popup.offsetWidth
|
|
1072
|
-
const popupHeight = popup.offsetHeight
|
|
1073
|
-
let [part1, part2] = this.popupPlacement.split('-') || []
|
|
1074
|
-
if (this.keepInView) {
|
|
1075
|
-
const winWidth = window.innerWidth
|
|
1076
|
-
const winHeight = window.innerHeight
|
|
1077
|
-
if (part1 === 'top') {
|
|
1078
|
-
if (triggerTop < popupHeight) {
|
|
1079
|
-
part1 = 'bottom'
|
|
1080
|
-
}
|
|
1081
|
-
} else if (part1 === 'bottom') {
|
|
1082
|
-
if (winHeight - triggerTop - triggerHeight < popupHeight) {
|
|
1083
|
-
part1 = 'top'
|
|
1084
|
-
}
|
|
1085
|
-
} else if (part1 === 'left') {
|
|
1086
|
-
if (triggerLeft < popupWidth) {
|
|
1087
|
-
part1 = 'right'
|
|
1088
|
-
}
|
|
1089
|
-
} else if (part1 === 'right') {
|
|
1090
|
-
if (winWidth - triggerLeft - triggerWidth < popupWidth) {
|
|
1091
|
-
part1 = 'left'
|
|
1092
|
-
}
|
|
1093
|
-
}
|
|
1094
|
-
if (part2 === 'top') {
|
|
1095
|
-
if (winHeight - triggerTop < popupHeight) {
|
|
1096
|
-
part2 = 'bottom'
|
|
1097
|
-
}
|
|
1098
|
-
} else if (part2 === 'bottom') {
|
|
1099
|
-
if (triggerTop + triggerHeight < popupHeight) {
|
|
1100
|
-
part2 = 'top'
|
|
1101
|
-
}
|
|
1102
|
-
} else if (part2 === 'left') {
|
|
1103
|
-
if (winWidth - triggerLeft < popupWidth) {
|
|
1104
|
-
part2 = 'right'
|
|
1105
|
-
}
|
|
1106
|
-
} else if (part2 === 'right') {
|
|
1107
|
-
if (triggerLeft + triggerWidth < popupWidth) {
|
|
1108
|
-
part2 = 'left'
|
|
1109
|
-
}
|
|
1110
|
-
}
|
|
1111
|
-
}
|
|
1112
|
-
let left = 0
|
|
1113
|
-
let top = 0
|
|
1114
|
-
switch (part1) {
|
|
1115
|
-
case 'top':
|
|
1116
|
-
top -= popupHeight
|
|
1117
|
-
break
|
|
1118
|
-
case 'left':
|
|
1119
|
-
left -= popupWidth
|
|
1120
|
-
break
|
|
1121
|
-
case 'right':
|
|
1122
|
-
left += triggerWidth
|
|
1123
|
-
break
|
|
1124
|
-
case 'bottom':
|
|
1125
|
-
top += triggerHeight
|
|
1126
|
-
break
|
|
1127
|
-
}
|
|
1128
|
-
switch (part2) {
|
|
1129
|
-
case 'right':
|
|
1130
|
-
left -= popupWidth - triggerWidth
|
|
1131
|
-
break
|
|
1132
|
-
case 'bottom':
|
|
1133
|
-
top -= popupHeight - triggerHeight
|
|
1134
|
-
break
|
|
1135
|
-
}
|
|
1136
|
-
if (this.cover) {
|
|
1137
|
-
if (part1 === 'top') {
|
|
1138
|
-
top += triggerHeight
|
|
1139
|
-
} else if (part1 === 'bottom') {
|
|
1140
|
-
top -= triggerHeight
|
|
1141
|
-
}
|
|
1142
|
-
}
|
|
1143
|
-
if (target && target !== trigger) {
|
|
1144
|
-
const triggerBounds = trigger.getBoundingClientRect()
|
|
1145
|
-
left += triggerLeft - triggerBounds.left
|
|
1146
|
-
top += triggerTop - triggerBounds.top
|
|
1147
|
-
}
|
|
1148
|
-
popup.style.left = `${left}px`
|
|
1149
|
-
popup.style.top = `${top}px`
|
|
1150
|
-
this.$emit('update-position', {
|
|
1151
|
-
trigger,
|
|
1152
|
-
popup,
|
|
1153
|
-
placement: this.popupPlacement
|
|
1154
|
-
})
|
|
1155
|
-
},
|
|
1156
|
-
onClick() {
|
|
1157
|
-
if (!this.disabled) {
|
|
1158
|
-
this.showPopup = !this.showPopup
|
|
1159
|
-
}
|
|
1160
|
-
},
|
|
1161
|
-
onHover(enter) {
|
|
1162
|
-
if (!this.disabled) {
|
|
1163
|
-
clearTimeout(this.mouseLeaveTimer)
|
|
1164
|
-
if (enter) {
|
|
1165
|
-
this.showPopup = true
|
|
1166
|
-
} else {
|
|
1167
|
-
if (this.hideDelay) {
|
|
1168
|
-
this.mouseLeaveTimer = setTimeout(() => {
|
|
1169
|
-
this.showPopup = false
|
|
1170
|
-
}, this.hideDelay)
|
|
1171
|
-
} else {
|
|
1172
|
-
this.showPopup = false
|
|
1173
|
-
}
|
|
1174
|
-
}
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
|
-
}
|
|
1178
|
-
}
|
|
1179
|
-
const __cssModules$8 = {}
|
|
1180
|
-
const __component__$8 = /* @__PURE__ */ normalizeComponent(
|
|
1181
|
-
__vue2_script$8,
|
|
1182
|
-
render$7,
|
|
1183
|
-
staticRenderFns$7,
|
|
1184
|
-
false,
|
|
1185
|
-
__vue2_injectStyles$8,
|
|
1186
|
-
null,
|
|
1187
|
-
null,
|
|
1188
|
-
null
|
|
1189
|
-
)
|
|
1190
|
-
function __vue2_injectStyles$8(context) {
|
|
1191
|
-
for (const o in __cssModules$8) {
|
|
1192
|
-
this[o] = __cssModules$8[o]
|
|
1193
|
-
}
|
|
1194
|
-
}
|
|
1195
|
-
__component__$8.options.__file = 'src/components/Trigger.vue'
|
|
1196
|
-
const Trigger = /* @__PURE__ */ (function () {
|
|
1197
|
-
return __component__$8.exports
|
|
1198
|
-
})()
|
|
1199
|
-
const render$6 = function () {
|
|
1200
|
-
const _vm = this
|
|
1201
|
-
const _h = _vm.$createElement
|
|
1202
|
-
const _c = _vm._self._c || _h
|
|
1203
|
-
return _c(
|
|
1204
|
-
'div',
|
|
1205
|
-
{
|
|
1206
|
-
staticClass: 'dito-input'
|
|
1207
|
-
},
|
|
1208
|
-
[
|
|
1209
|
-
_vm.attributes.type === 'checkbox'
|
|
1210
|
-
? _c(
|
|
1211
|
-
'input',
|
|
1212
|
-
_vm._g(
|
|
1213
|
-
_vm._b(
|
|
1214
|
-
{
|
|
1215
|
-
directives: [
|
|
1216
|
-
{
|
|
1217
|
-
name: 'model',
|
|
1218
|
-
rawName: 'v-model',
|
|
1219
|
-
value: _vm.currentValue,
|
|
1220
|
-
expression: 'currentValue'
|
|
1221
|
-
}
|
|
1222
|
-
],
|
|
1223
|
-
ref: 'input',
|
|
1224
|
-
attrs: {
|
|
1225
|
-
'aria-label': _vm.title,
|
|
1226
|
-
'type': 'checkbox'
|
|
1227
|
-
},
|
|
1228
|
-
domProps: {
|
|
1229
|
-
checked: Array.isArray(_vm.currentValue)
|
|
1230
|
-
? _vm._i(_vm.currentValue, null) > -1
|
|
1231
|
-
: _vm.currentValue
|
|
1232
|
-
},
|
|
1233
|
-
on: {
|
|
1234
|
-
change: function ($event) {
|
|
1235
|
-
const $$a = _vm.currentValue
|
|
1236
|
-
const $$el = $event.target
|
|
1237
|
-
const $$c = !!$$el.checked
|
|
1238
|
-
if (Array.isArray($$a)) {
|
|
1239
|
-
const $$v = null
|
|
1240
|
-
const $$i = _vm._i($$a, $$v)
|
|
1241
|
-
if ($$el.checked) {
|
|
1242
|
-
$$i < 0 && (_vm.currentValue = $$a.concat([$$v]))
|
|
1243
|
-
} else {
|
|
1244
|
-
$$i > -1 &&
|
|
1245
|
-
(_vm.currentValue = $$a
|
|
1246
|
-
.slice(0, $$i)
|
|
1247
|
-
.concat($$a.slice($$i + 1)))
|
|
1248
|
-
}
|
|
1249
|
-
} else {
|
|
1250
|
-
_vm.currentValue = $$c
|
|
1251
|
-
}
|
|
1252
|
-
}
|
|
1253
|
-
}
|
|
1254
|
-
},
|
|
1255
|
-
'input',
|
|
1256
|
-
_vm.attributes,
|
|
1257
|
-
false
|
|
1258
|
-
),
|
|
1259
|
-
_vm.listeners
|
|
1260
|
-
)
|
|
1261
|
-
)
|
|
1262
|
-
: _vm.attributes.type === 'radio'
|
|
1263
|
-
? _c(
|
|
1264
|
-
'input',
|
|
1265
|
-
_vm._g(
|
|
1266
|
-
_vm._b(
|
|
1267
|
-
{
|
|
1268
|
-
directives: [
|
|
1269
|
-
{
|
|
1270
|
-
name: 'model',
|
|
1271
|
-
rawName: 'v-model',
|
|
1272
|
-
value: _vm.currentValue,
|
|
1273
|
-
expression: 'currentValue'
|
|
1274
|
-
}
|
|
1275
|
-
],
|
|
1276
|
-
ref: 'input',
|
|
1277
|
-
attrs: {
|
|
1278
|
-
'aria-label': _vm.title,
|
|
1279
|
-
'type': 'radio'
|
|
1280
|
-
},
|
|
1281
|
-
domProps: {
|
|
1282
|
-
checked: _vm._q(_vm.currentValue, null)
|
|
1283
|
-
},
|
|
1284
|
-
on: {
|
|
1285
|
-
change: function ($event) {
|
|
1286
|
-
_vm.currentValue = null
|
|
1287
|
-
}
|
|
1288
|
-
}
|
|
1289
|
-
},
|
|
1290
|
-
'input',
|
|
1291
|
-
_vm.attributes,
|
|
1292
|
-
false
|
|
1293
|
-
),
|
|
1294
|
-
_vm.listeners
|
|
1295
|
-
)
|
|
1296
|
-
)
|
|
1297
|
-
: _c(
|
|
1298
|
-
'input',
|
|
1299
|
-
_vm._g(
|
|
1300
|
-
_vm._b(
|
|
1301
|
-
{
|
|
1302
|
-
directives: [
|
|
1303
|
-
{
|
|
1304
|
-
name: 'model',
|
|
1305
|
-
rawName: 'v-model',
|
|
1306
|
-
value: _vm.currentValue,
|
|
1307
|
-
expression: 'currentValue'
|
|
1308
|
-
}
|
|
1309
|
-
],
|
|
1310
|
-
ref: 'input',
|
|
1311
|
-
attrs: {
|
|
1312
|
-
'aria-label': _vm.title,
|
|
1313
|
-
'type': _vm.attributes.type
|
|
1314
|
-
},
|
|
1315
|
-
domProps: {
|
|
1316
|
-
value: _vm.currentValue
|
|
1317
|
-
},
|
|
1318
|
-
on: {
|
|
1319
|
-
input: function ($event) {
|
|
1320
|
-
if ($event.target.composing) {
|
|
1321
|
-
return
|
|
1322
|
-
}
|
|
1323
|
-
_vm.currentValue = $event.target.value
|
|
1324
|
-
}
|
|
1325
|
-
}
|
|
1326
|
-
},
|
|
1327
|
-
'input',
|
|
1328
|
-
_vm.attributes,
|
|
1329
|
-
false
|
|
1330
|
-
),
|
|
1331
|
-
_vm.listeners
|
|
1332
|
-
)
|
|
1333
|
-
)
|
|
1334
|
-
]
|
|
1335
|
-
)
|
|
1336
|
-
}
|
|
1337
|
-
const staticRenderFns$6 = []
|
|
1338
|
-
render$6._withStripped = true
|
|
1339
|
-
const InputField_vue_vue_type_style_index_0_lang = ''
|
|
1340
|
-
const __vue2_script$7 = {
|
|
1341
|
-
props: {
|
|
1342
|
-
type: { type: String, default: 'text' },
|
|
1343
|
-
value: { type: [String, Number], default: null },
|
|
1344
|
-
id: { type: String, default: null },
|
|
1345
|
-
name: { type: String, default: null },
|
|
1346
|
-
title: { type: String, default: null },
|
|
1347
|
-
disabled: { type: Boolean, default: false },
|
|
1348
|
-
readonly: { type: Boolean, default: false },
|
|
1349
|
-
placeholder: { type: String, default: null },
|
|
1350
|
-
autocomplete: { type: String, default: 'off' }
|
|
1351
|
-
},
|
|
1352
|
-
data() {
|
|
1353
|
-
return {
|
|
1354
|
-
currentValue: this.value,
|
|
1355
|
-
hovering: false,
|
|
1356
|
-
focused: false
|
|
1357
|
-
}
|
|
1358
|
-
},
|
|
1359
|
-
computed: {
|
|
1360
|
-
attributes() {
|
|
1361
|
-
const {
|
|
1362
|
-
id,
|
|
1363
|
-
name,
|
|
1364
|
-
type,
|
|
1365
|
-
size,
|
|
1366
|
-
title,
|
|
1367
|
-
disabled,
|
|
1368
|
-
readonly,
|
|
1369
|
-
placeholder,
|
|
1370
|
-
autocomplete,
|
|
1371
|
-
$attrs
|
|
1372
|
-
} = this
|
|
1373
|
-
return {
|
|
1374
|
-
id,
|
|
1375
|
-
name,
|
|
1376
|
-
type,
|
|
1377
|
-
size,
|
|
1378
|
-
title,
|
|
1379
|
-
disabled,
|
|
1380
|
-
readonly,
|
|
1381
|
-
placeholder,
|
|
1382
|
-
autocomplete,
|
|
1383
|
-
...$attrs
|
|
1384
|
-
}
|
|
1385
|
-
},
|
|
1386
|
-
listeners() {
|
|
1387
|
-
const { input, ...listeners } = this.$listeners
|
|
1388
|
-
return listeners
|
|
1389
|
-
},
|
|
1390
|
-
size() {
|
|
1391
|
-
const { size, min, max } = this.$attrs
|
|
1392
|
-
const getLength = value => (value != null ? `${value}`.length : 0)
|
|
1393
|
-
return size || getLength(min) || getLength(max) || void 0
|
|
1394
|
-
}
|
|
1395
|
-
},
|
|
1396
|
-
watch: {
|
|
1397
|
-
value(newVal, oldVal) {
|
|
1398
|
-
if (newVal !== oldVal) {
|
|
1399
|
-
this.currentValue = newVal
|
|
1400
|
-
}
|
|
1401
|
-
},
|
|
1402
|
-
currentValue(newVal) {
|
|
1403
|
-
if (newVal !== this.value) {
|
|
1404
|
-
this.$emit('input', newVal)
|
|
1405
|
-
}
|
|
1406
|
-
}
|
|
1407
|
-
},
|
|
1408
|
-
methods: {
|
|
1409
|
-
focus() {
|
|
1410
|
-
this.$refs.input.focus()
|
|
1411
|
-
},
|
|
1412
|
-
blur() {
|
|
1413
|
-
this.$refs.input.blur()
|
|
1414
|
-
}
|
|
1415
|
-
}
|
|
1416
|
-
}
|
|
1417
|
-
const __cssModules$7 = {}
|
|
1418
|
-
const __component__$7 = /* @__PURE__ */ normalizeComponent(
|
|
1419
|
-
__vue2_script$7,
|
|
1420
|
-
render$6,
|
|
1421
|
-
staticRenderFns$6,
|
|
1422
|
-
false,
|
|
1423
|
-
__vue2_injectStyles$7,
|
|
1424
|
-
null,
|
|
1425
|
-
null,
|
|
1426
|
-
null
|
|
1427
|
-
)
|
|
1428
|
-
function __vue2_injectStyles$7(context) {
|
|
1429
|
-
for (const o in __cssModules$7) {
|
|
1430
|
-
this[o] = __cssModules$7[o]
|
|
1431
|
-
}
|
|
1432
|
-
}
|
|
1433
|
-
__component__$7.options.__file = 'src/components/InputField.vue'
|
|
1434
|
-
const InputField = /* @__PURE__ */ (function () {
|
|
1435
|
-
return __component__$7.exports
|
|
1436
|
-
})()
|
|
1437
|
-
const render$5 = function () {
|
|
1438
|
-
const _vm = this
|
|
1439
|
-
const _h = _vm.$createElement
|
|
1440
|
-
const _c = _vm._self._c || _h
|
|
1441
|
-
return _c(
|
|
1442
|
-
'trigger',
|
|
1443
|
-
_vm._b(
|
|
1444
|
-
{
|
|
1445
|
-
ref: 'trigger',
|
|
1446
|
-
staticClass: 'dito-date-picker',
|
|
1447
|
-
attrs: {
|
|
1448
|
-
trigger: 'click',
|
|
1449
|
-
show: _vm.showPopup
|
|
1450
|
-
},
|
|
1451
|
-
on: {
|
|
1452
|
-
'update:show': function ($event) {
|
|
1453
|
-
_vm.showPopup = $event
|
|
1454
|
-
}
|
|
1455
|
-
}
|
|
1456
|
-
},
|
|
1457
|
-
'trigger',
|
|
1458
|
-
{
|
|
1459
|
-
transition: _vm.transition,
|
|
1460
|
-
placement: _vm.placement,
|
|
1461
|
-
disabled: _vm.disabled,
|
|
1462
|
-
target: _vm.target
|
|
1463
|
-
},
|
|
1464
|
-
false
|
|
1465
|
-
),
|
|
1466
|
-
[
|
|
1467
|
-
_c(
|
|
1468
|
-
'input-field',
|
|
1469
|
-
_vm._b(
|
|
1470
|
-
{
|
|
1471
|
-
ref: 'input',
|
|
1472
|
-
staticClass: 'dito-date-picker-input',
|
|
1473
|
-
class: {
|
|
1474
|
-
'dito-focus': _vm.showPopup
|
|
1475
|
-
},
|
|
1476
|
-
attrs: {
|
|
1477
|
-
slot: 'trigger',
|
|
1478
|
-
type: 'text',
|
|
1479
|
-
value: _vm.currentText,
|
|
1480
|
-
readonly: ''
|
|
1481
|
-
},
|
|
1482
|
-
on: {
|
|
1483
|
-
focus: function ($event) {
|
|
1484
|
-
_vm.inputFocused = true
|
|
1485
|
-
},
|
|
1486
|
-
blur: function ($event) {
|
|
1487
|
-
_vm.inputFocused = false
|
|
1488
|
-
},
|
|
1489
|
-
keydown: _vm.onKeyDown
|
|
1490
|
-
},
|
|
1491
|
-
slot: 'trigger'
|
|
1492
|
-
},
|
|
1493
|
-
'input-field',
|
|
1494
|
-
{
|
|
1495
|
-
placeholder: _vm.placeholder,
|
|
1496
|
-
disabled: _vm.disabled
|
|
1497
|
-
},
|
|
1498
|
-
false
|
|
1499
|
-
)
|
|
1500
|
-
),
|
|
1501
|
-
_c(
|
|
1502
|
-
'calendar',
|
|
1503
|
-
_vm._b(
|
|
1504
|
-
{
|
|
1505
|
-
ref: 'calendar',
|
|
1506
|
-
staticClass: 'dito-date-picker-popup',
|
|
1507
|
-
attrs: {
|
|
1508
|
-
slot: 'popup',
|
|
1509
|
-
value: _vm.currentValue
|
|
1510
|
-
},
|
|
1511
|
-
on: {
|
|
1512
|
-
input: _vm.selectDate
|
|
1513
|
-
},
|
|
1514
|
-
slot: 'popup'
|
|
1515
|
-
},
|
|
1516
|
-
'calendar',
|
|
1517
|
-
{
|
|
1518
|
-
locale: _vm.locale,
|
|
1519
|
-
disabledDate: _vm.disabledDate
|
|
1520
|
-
},
|
|
1521
|
-
false
|
|
1522
|
-
)
|
|
1523
|
-
)
|
|
1524
|
-
],
|
|
1525
|
-
1
|
|
1526
|
-
)
|
|
1527
|
-
}
|
|
1528
|
-
const staticRenderFns$5 = []
|
|
1529
|
-
render$5._withStripped = true
|
|
1530
|
-
const DatePicker_vue_vue_type_style_index_0_lang = ''
|
|
1531
|
-
const __vue2_script$6 = {
|
|
1532
|
-
components: { Trigger, Calendar, InputField },
|
|
1533
|
-
props: {
|
|
1534
|
-
value: { type: Date, default: null },
|
|
1535
|
-
transition: { type: String, default: 'slide' },
|
|
1536
|
-
placement: { type: String, default: 'bottom-left' },
|
|
1537
|
-
placeholder: { type: String, default: null },
|
|
1538
|
-
locale: { type: String, default: 'en-US' },
|
|
1539
|
-
dateFormat: { type: Object, default: () => defaultFormats.date },
|
|
1540
|
-
show: { type: Boolean, default: false },
|
|
1541
|
-
disabled: { type: Boolean, default: false },
|
|
1542
|
-
target: { type: [String, HTMLElement], default: 'trigger' },
|
|
1543
|
-
disabledDate: { type: Function, default: () => false }
|
|
1544
|
-
},
|
|
1545
|
-
data() {
|
|
1546
|
-
return {
|
|
1547
|
-
currentValue: this.value,
|
|
1548
|
-
showPopup: this.show,
|
|
1549
|
-
inputFocused: false,
|
|
1550
|
-
changed: false
|
|
1551
|
-
}
|
|
1552
|
-
},
|
|
1553
|
-
computed: {
|
|
1554
|
-
focused() {
|
|
1555
|
-
return this.inputFocused || this.showPopup
|
|
1556
|
-
},
|
|
1557
|
-
currentText() {
|
|
1558
|
-
return (
|
|
1559
|
-
format(this.currentValue, {
|
|
1560
|
-
locale: this.locale,
|
|
1561
|
-
date: this.dateFormat,
|
|
1562
|
-
time: false
|
|
1563
|
-
}) || ''
|
|
1564
|
-
)
|
|
1565
|
-
}
|
|
1566
|
-
},
|
|
1567
|
-
watch: {
|
|
1568
|
-
value(newVal, oldVal) {
|
|
1569
|
-
if (+newVal !== +oldVal) {
|
|
1570
|
-
this.currentValue = newVal
|
|
1571
|
-
}
|
|
1572
|
-
},
|
|
1573
|
-
currentValue(date) {
|
|
1574
|
-
if (+date !== +this.value) {
|
|
1575
|
-
this.changed = true
|
|
1576
|
-
this.$emit('input', date)
|
|
1577
|
-
}
|
|
1578
|
-
},
|
|
1579
|
-
show(show) {
|
|
1580
|
-
this.showPopup = show
|
|
1581
|
-
},
|
|
1582
|
-
showPopup(newVal, oldVal) {
|
|
1583
|
-
if (!newVal !== !oldVal) {
|
|
1584
|
-
this.$emit('update:show', newVal)
|
|
1585
|
-
}
|
|
1586
|
-
},
|
|
1587
|
-
focused(newVal, oldVal) {
|
|
1588
|
-
if (!newVal !== !oldVal) {
|
|
1589
|
-
this.$emit(newVal ? 'focus' : 'blur')
|
|
1590
|
-
}
|
|
1591
|
-
}
|
|
1592
|
-
},
|
|
1593
|
-
mounted() {
|
|
1594
|
-
this.$on('blur', () => {
|
|
1595
|
-
if (this.changed) {
|
|
1596
|
-
this.changed = false
|
|
1597
|
-
this.$emit('change', this.currentValue)
|
|
1598
|
-
}
|
|
1599
|
-
})
|
|
1600
|
-
},
|
|
1601
|
-
methods: {
|
|
1602
|
-
selectDate(date) {
|
|
1603
|
-
this.currentValue = date
|
|
1604
|
-
this.showPopup = false
|
|
1605
|
-
},
|
|
1606
|
-
onKeyDown(event) {
|
|
1607
|
-
let _a
|
|
1608
|
-
if (
|
|
1609
|
-
(_a = this.$refs.calendar) == null
|
|
1610
|
-
? void 0
|
|
1611
|
-
: _a.navigate(getKeyNavigation(event))
|
|
1612
|
-
) {
|
|
1613
|
-
event.preventDefault()
|
|
1614
|
-
}
|
|
1615
|
-
},
|
|
1616
|
-
focus() {
|
|
1617
|
-
this.$refs.input.focus()
|
|
1618
|
-
},
|
|
1619
|
-
blur() {
|
|
1620
|
-
this.$refs.input.blur()
|
|
1621
|
-
}
|
|
1622
|
-
}
|
|
1623
|
-
}
|
|
1624
|
-
const __cssModules$6 = {}
|
|
1625
|
-
const __component__$6 = /* @__PURE__ */ normalizeComponent(
|
|
1626
|
-
__vue2_script$6,
|
|
1627
|
-
render$5,
|
|
1628
|
-
staticRenderFns$5,
|
|
1629
|
-
false,
|
|
1630
|
-
__vue2_injectStyles$6,
|
|
1631
|
-
null,
|
|
1632
|
-
null,
|
|
1633
|
-
null
|
|
1634
|
-
)
|
|
1635
|
-
function __vue2_injectStyles$6(context) {
|
|
1636
|
-
for (const o in __cssModules$6) {
|
|
1637
|
-
this[o] = __cssModules$6[o]
|
|
1638
|
-
}
|
|
1639
|
-
}
|
|
1640
|
-
__component__$6.options.__file = 'src/components/DatePicker.vue'
|
|
1641
|
-
const DatePicker = /* @__PURE__ */ (function () {
|
|
1642
|
-
return __component__$6.exports
|
|
1643
|
-
})()
|
|
1644
|
-
const render$4 = function () {
|
|
1645
|
-
const _vm = this
|
|
1646
|
-
const _h = _vm.$createElement
|
|
1647
|
-
const _c = _vm._self._c || _h
|
|
1648
|
-
return _c(
|
|
1649
|
-
'trigger',
|
|
1650
|
-
_vm._b(
|
|
1651
|
-
{
|
|
1652
|
-
ref: 'trigger',
|
|
1653
|
-
staticClass: 'dito-time-picker',
|
|
1654
|
-
attrs: {
|
|
1655
|
-
trigger: 'click',
|
|
1656
|
-
show: _vm.showPopup
|
|
1657
|
-
},
|
|
1658
|
-
on: {
|
|
1659
|
-
'update:show': function ($event) {
|
|
1660
|
-
_vm.showPopup = $event
|
|
1661
|
-
}
|
|
1662
|
-
}
|
|
1663
|
-
},
|
|
1664
|
-
'trigger',
|
|
1665
|
-
{
|
|
1666
|
-
transition: _vm.transition,
|
|
1667
|
-
placement: _vm.placement,
|
|
1668
|
-
disabled: _vm.disabled,
|
|
1669
|
-
target: _vm.target
|
|
1670
|
-
},
|
|
1671
|
-
false
|
|
1672
|
-
),
|
|
1673
|
-
[
|
|
1674
|
-
_c(
|
|
1675
|
-
'input-field',
|
|
1676
|
-
_vm._b(
|
|
1677
|
-
{
|
|
1678
|
-
ref: 'input',
|
|
1679
|
-
staticClass: 'dito-time-picker-input',
|
|
1680
|
-
class: {
|
|
1681
|
-
'dito-focus': _vm.showPopup
|
|
1682
|
-
},
|
|
1683
|
-
attrs: {
|
|
1684
|
-
slot: 'trigger',
|
|
1685
|
-
type: 'text',
|
|
1686
|
-
value: _vm.currentText,
|
|
1687
|
-
readonly: ''
|
|
1688
|
-
},
|
|
1689
|
-
on: {
|
|
1690
|
-
focus: function ($event) {
|
|
1691
|
-
_vm.inputFocused = true
|
|
1692
|
-
},
|
|
1693
|
-
blur: function ($event) {
|
|
1694
|
-
_vm.inputFocused = false
|
|
1695
|
-
},
|
|
1696
|
-
keydown: _vm.onKeyDown
|
|
1697
|
-
},
|
|
1698
|
-
slot: 'trigger'
|
|
1699
|
-
},
|
|
1700
|
-
'input-field',
|
|
1701
|
-
{
|
|
1702
|
-
placeholder: _vm.placeholder,
|
|
1703
|
-
disabled: _vm.disabled
|
|
1704
|
-
},
|
|
1705
|
-
false
|
|
1706
|
-
)
|
|
1707
|
-
),
|
|
1708
|
-
_c(
|
|
1709
|
-
'div',
|
|
1710
|
-
{
|
|
1711
|
-
staticClass: 'dito-time-picker-popup',
|
|
1712
|
-
attrs: {
|
|
1713
|
-
slot: 'popup'
|
|
1714
|
-
},
|
|
1715
|
-
slot: 'popup'
|
|
1716
|
-
},
|
|
1717
|
-
[
|
|
1718
|
-
_c(
|
|
1719
|
-
'div',
|
|
1720
|
-
{
|
|
1721
|
-
staticClass: 'dito-time-picker-panel'
|
|
1722
|
-
},
|
|
1723
|
-
[
|
|
1724
|
-
_c(
|
|
1725
|
-
'ul',
|
|
1726
|
-
{
|
|
1727
|
-
ref: 'hour',
|
|
1728
|
-
staticClass: 'dito-time-picker-hour',
|
|
1729
|
-
on: {
|
|
1730
|
-
mouseover: function ($event) {
|
|
1731
|
-
_vm.selection = 0
|
|
1732
|
-
}
|
|
1733
|
-
}
|
|
1734
|
-
},
|
|
1735
|
-
_vm._l(24, function (index2) {
|
|
1736
|
-
return !_vm.disabledHour(index2 - 1)
|
|
1737
|
-
? _c(
|
|
1738
|
-
'li',
|
|
1739
|
-
{
|
|
1740
|
-
class: {
|
|
1741
|
-
selected: _vm.hour === index2 - 1
|
|
1742
|
-
},
|
|
1743
|
-
on: {
|
|
1744
|
-
click: function ($event) {
|
|
1745
|
-
_vm.hour = index2 - 1
|
|
1746
|
-
}
|
|
1747
|
-
}
|
|
1748
|
-
},
|
|
1749
|
-
[_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
|
|
1750
|
-
)
|
|
1751
|
-
: _vm._e()
|
|
1752
|
-
}),
|
|
1753
|
-
0
|
|
1754
|
-
)
|
|
1755
|
-
]
|
|
1756
|
-
),
|
|
1757
|
-
_c(
|
|
1758
|
-
'div',
|
|
1759
|
-
{
|
|
1760
|
-
staticClass: 'dito-time-picker-panel'
|
|
1761
|
-
},
|
|
1762
|
-
[
|
|
1763
|
-
_c(
|
|
1764
|
-
'ul',
|
|
1765
|
-
{
|
|
1766
|
-
ref: 'minute',
|
|
1767
|
-
staticClass: 'dito-time-picker-minute',
|
|
1768
|
-
on: {
|
|
1769
|
-
mouseover: function ($event) {
|
|
1770
|
-
_vm.selection = 1
|
|
1771
|
-
}
|
|
1772
|
-
}
|
|
1773
|
-
},
|
|
1774
|
-
_vm._l(60, function (index2) {
|
|
1775
|
-
return !_vm.disabledMinute(index2 - 1)
|
|
1776
|
-
? _c(
|
|
1777
|
-
'li',
|
|
1778
|
-
{
|
|
1779
|
-
class: {
|
|
1780
|
-
selected: _vm.minute === index2 - 1
|
|
1781
|
-
},
|
|
1782
|
-
on: {
|
|
1783
|
-
click: function ($event) {
|
|
1784
|
-
_vm.minute = index2 - 1
|
|
1785
|
-
}
|
|
1786
|
-
}
|
|
1787
|
-
},
|
|
1788
|
-
[_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
|
|
1789
|
-
)
|
|
1790
|
-
: _vm._e()
|
|
1791
|
-
}),
|
|
1792
|
-
0
|
|
1793
|
-
)
|
|
1794
|
-
]
|
|
1795
|
-
),
|
|
1796
|
-
_c(
|
|
1797
|
-
'div',
|
|
1798
|
-
{
|
|
1799
|
-
staticClass: 'dito-time-picker-panel'
|
|
1800
|
-
},
|
|
1801
|
-
[
|
|
1802
|
-
_c(
|
|
1803
|
-
'ul',
|
|
1804
|
-
{
|
|
1805
|
-
ref: 'second',
|
|
1806
|
-
staticClass: 'dito-time-picker-second',
|
|
1807
|
-
on: {
|
|
1808
|
-
mouseover: function ($event) {
|
|
1809
|
-
_vm.selection = 2
|
|
1810
|
-
}
|
|
1811
|
-
}
|
|
1812
|
-
},
|
|
1813
|
-
_vm._l(60, function (index2) {
|
|
1814
|
-
return !_vm.disabledSecond(index2 - 1)
|
|
1815
|
-
? _c(
|
|
1816
|
-
'li',
|
|
1817
|
-
{
|
|
1818
|
-
class: {
|
|
1819
|
-
selected: _vm.second === index2 - 1
|
|
1820
|
-
},
|
|
1821
|
-
on: {
|
|
1822
|
-
click: function ($event) {
|
|
1823
|
-
_vm.second = index2 - 1
|
|
1824
|
-
}
|
|
1825
|
-
}
|
|
1826
|
-
},
|
|
1827
|
-
[_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
|
|
1828
|
-
)
|
|
1829
|
-
: _vm._e()
|
|
1830
|
-
}),
|
|
1831
|
-
0
|
|
1832
|
-
)
|
|
1833
|
-
]
|
|
1834
|
-
)
|
|
1835
|
-
]
|
|
1836
|
-
)
|
|
1837
|
-
],
|
|
1838
|
-
1
|
|
1839
|
-
)
|
|
1840
|
-
}
|
|
1841
|
-
const staticRenderFns$4 = []
|
|
1842
|
-
render$4._withStripped = true
|
|
1843
|
-
const TimePicker_vue_vue_type_style_index_0_lang = ''
|
|
1844
|
-
const __vue2_script$5 = {
|
|
1845
|
-
components: { Trigger, InputField },
|
|
1846
|
-
props: {
|
|
1847
|
-
value: { type: Date, default: null },
|
|
1848
|
-
transition: { type: String, default: 'slide' },
|
|
1849
|
-
placement: { type: String, default: 'bottom-left' },
|
|
1850
|
-
placeholder: { type: String, default: null },
|
|
1851
|
-
show: { type: Boolean, default: false },
|
|
1852
|
-
disabled: { type: Boolean, default: false },
|
|
1853
|
-
target: { type: [String, HTMLElement], default: 'trigger' },
|
|
1854
|
-
disabledHour: { type: Function, default: () => false },
|
|
1855
|
-
disabledMinute: { type: Function, default: () => false },
|
|
1856
|
-
disabledSecond: { type: Function, default: () => false }
|
|
1857
|
-
},
|
|
1858
|
-
data() {
|
|
1859
|
-
return {
|
|
1860
|
-
currentValue: this.value,
|
|
1861
|
-
showPopup: this.show,
|
|
1862
|
-
inputFocused: false,
|
|
1863
|
-
selection: 0,
|
|
1864
|
-
changed: false
|
|
1865
|
-
}
|
|
1866
|
-
},
|
|
1867
|
-
computed: {
|
|
1868
|
-
focused() {
|
|
1869
|
-
return this.inputFocused || this.showPopup
|
|
1870
|
-
},
|
|
1871
|
-
currentText() {
|
|
1872
|
-
return this.currentValue
|
|
1873
|
-
? `${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${
|
|
1874
|
-
this.leftPad(this.second)
|
|
1875
|
-
}`
|
|
1876
|
-
: ''
|
|
1877
|
-
},
|
|
1878
|
-
currentDate() {
|
|
1879
|
-
return (
|
|
1880
|
-
this.currentValue ||
|
|
1881
|
-
copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
|
|
1882
|
-
)
|
|
1883
|
-
},
|
|
1884
|
-
hour: {
|
|
1885
|
-
get() {
|
|
1886
|
-
return this.currentDate.getHours()
|
|
1887
|
-
},
|
|
1888
|
-
set(hour) {
|
|
1889
|
-
this.setTime({ hour })
|
|
1890
|
-
}
|
|
1891
|
-
},
|
|
1892
|
-
minute: {
|
|
1893
|
-
get() {
|
|
1894
|
-
return this.currentDate.getMinutes()
|
|
1895
|
-
},
|
|
1896
|
-
set(minute) {
|
|
1897
|
-
this.setTime({ minute })
|
|
1898
|
-
}
|
|
1899
|
-
},
|
|
1900
|
-
second: {
|
|
1901
|
-
get() {
|
|
1902
|
-
return this.currentDate.getSeconds()
|
|
1903
|
-
},
|
|
1904
|
-
set(second) {
|
|
1905
|
-
this.setTime({ second })
|
|
1906
|
-
}
|
|
1907
|
-
}
|
|
1908
|
-
},
|
|
1909
|
-
watch: {
|
|
1910
|
-
value(newVal, oldVal) {
|
|
1911
|
-
if (+newVal !== +oldVal) {
|
|
1912
|
-
this.currentValue = newVal
|
|
1913
|
-
}
|
|
1914
|
-
},
|
|
1915
|
-
currentValue(date) {
|
|
1916
|
-
if (+date !== +this.value) {
|
|
1917
|
-
this.changed = true
|
|
1918
|
-
this.$emit('input', date)
|
|
1919
|
-
this.scrollAll()
|
|
1920
|
-
}
|
|
1921
|
-
},
|
|
1922
|
-
currentText: 'updateSelection',
|
|
1923
|
-
selection: 'updateSelection',
|
|
1924
|
-
show(show) {
|
|
1925
|
-
this.showPopup = show
|
|
1926
|
-
},
|
|
1927
|
-
showPopup(newVal, oldVal) {
|
|
1928
|
-
if (newVal) {
|
|
1929
|
-
this.updateSelection()
|
|
1930
|
-
this.scrollAll(0)
|
|
1931
|
-
}
|
|
1932
|
-
if (!newVal !== !oldVal) {
|
|
1933
|
-
this.$emit('update:show', newVal)
|
|
1934
|
-
}
|
|
1935
|
-
},
|
|
1936
|
-
focused(newVal, oldVal) {
|
|
1937
|
-
if (!newVal !== !oldVal) {
|
|
1938
|
-
this.$emit(newVal ? 'focus' : 'blur')
|
|
1939
|
-
}
|
|
1940
|
-
}
|
|
1941
|
-
},
|
|
1942
|
-
mounted() {
|
|
1943
|
-
this.$on('blur', () => {
|
|
1944
|
-
if (this.changed) {
|
|
1945
|
-
this.changed = false
|
|
1946
|
-
this.$emit('change', this.currentValue)
|
|
1947
|
-
}
|
|
1948
|
-
})
|
|
1949
|
-
},
|
|
1950
|
-
methods: {
|
|
1951
|
-
leftPad(value) {
|
|
1952
|
-
return ('0' + value).slice(-2)
|
|
1953
|
-
},
|
|
1954
|
-
setTime(param) {
|
|
1955
|
-
this.currentValue = copyDate(this.currentDate, param)
|
|
1956
|
-
},
|
|
1957
|
-
updateSelection(force = false) {
|
|
1958
|
-
if (this.showPopup || force) {
|
|
1959
|
-
const start = 3 * this.selection
|
|
1960
|
-
this.$nextTick(() => setSelection(this.$refs.input, start, start + 2))
|
|
1961
|
-
}
|
|
1962
|
-
},
|
|
1963
|
-
scrollAll(duration = 100) {
|
|
1964
|
-
const scroll = (ref, value) => {
|
|
1965
|
-
const target = this.$refs[ref]
|
|
1966
|
-
if (target) {
|
|
1967
|
-
const lineHeight = target.scrollHeight / (target.children.length + 6)
|
|
1968
|
-
scrollTo(target, Math.round(value * lineHeight), duration)
|
|
1969
|
-
}
|
|
1970
|
-
}
|
|
1971
|
-
this.$nextTick(() => {
|
|
1972
|
-
scroll('hour', this.hour)
|
|
1973
|
-
scroll('minute', this.minute)
|
|
1974
|
-
scroll('second', this.second)
|
|
1975
|
-
})
|
|
1976
|
-
},
|
|
1977
|
-
onKeyDown(event) {
|
|
1978
|
-
const selected = ['hour', 'minute', 'second'][this.selection]
|
|
1979
|
-
if (selected) {
|
|
1980
|
-
const { hor, ver, enter } = getKeyNavigation(event)
|
|
1981
|
-
if (hor) {
|
|
1982
|
-
const value = this.selection + hor
|
|
1983
|
-
this.selection = value < 0 ? 2 : value > 2 ? 0 : value
|
|
1984
|
-
} else if (ver) {
|
|
1985
|
-
const value = this[selected] + ver
|
|
1986
|
-
const { length } = this.$refs[selected].children
|
|
1987
|
-
this[selected] =
|
|
1988
|
-
value < 0
|
|
1989
|
-
? value + length
|
|
1990
|
-
: value >= length
|
|
1991
|
-
? value - length
|
|
1992
|
-
: value
|
|
1993
|
-
}
|
|
1994
|
-
if (enter) {
|
|
1995
|
-
this.showPopup = false
|
|
1996
|
-
}
|
|
1997
|
-
if (hor || ver || enter) {
|
|
1998
|
-
this.updateSelection(true)
|
|
1999
|
-
event.preventDefault()
|
|
2000
|
-
}
|
|
2001
|
-
}
|
|
2002
|
-
},
|
|
2003
|
-
focus() {
|
|
2004
|
-
this.$refs.input.focus()
|
|
2005
|
-
},
|
|
2006
|
-
blur() {
|
|
2007
|
-
this.$refs.input.blur()
|
|
2008
|
-
}
|
|
2009
|
-
}
|
|
2010
|
-
}
|
|
2011
|
-
const __cssModules$5 = {}
|
|
2012
|
-
const __component__$5 = /* @__PURE__ */ normalizeComponent(
|
|
2013
|
-
__vue2_script$5,
|
|
2014
|
-
render$4,
|
|
2015
|
-
staticRenderFns$4,
|
|
2016
|
-
false,
|
|
2017
|
-
__vue2_injectStyles$5,
|
|
2018
|
-
null,
|
|
2019
|
-
null,
|
|
2020
|
-
null
|
|
2021
|
-
)
|
|
2022
|
-
function __vue2_injectStyles$5(context) {
|
|
2023
|
-
for (const o in __cssModules$5) {
|
|
2024
|
-
this[o] = __cssModules$5[o]
|
|
2025
|
-
}
|
|
2026
|
-
}
|
|
2027
|
-
__component__$5.options.__file = 'src/components/TimePicker.vue'
|
|
2028
|
-
const TimePicker = /* @__PURE__ */ (function () {
|
|
2029
|
-
return __component__$5.exports
|
|
2030
|
-
})()
|
|
2031
|
-
const render$3 = function () {
|
|
2032
|
-
const _vm = this
|
|
2033
|
-
const _h = _vm.$createElement
|
|
2034
|
-
const _c = _vm._self._c || _h
|
|
2035
|
-
return _c(
|
|
2036
|
-
'div',
|
|
2037
|
-
{
|
|
2038
|
-
ref: 'picker',
|
|
2039
|
-
staticClass: 'dito-date-time-picker'
|
|
2040
|
-
},
|
|
2041
|
-
[
|
|
2042
|
-
_c(
|
|
2043
|
-
'div',
|
|
2044
|
-
{
|
|
2045
|
-
staticClass: 'dito-pickers',
|
|
2046
|
-
class: {
|
|
2047
|
-
'dito-focus': _vm.focused
|
|
2048
|
-
}
|
|
2049
|
-
},
|
|
2050
|
-
[
|
|
2051
|
-
_c(
|
|
2052
|
-
'date-picker',
|
|
2053
|
-
_vm._b(
|
|
2054
|
-
{
|
|
2055
|
-
ref: 'date',
|
|
2056
|
-
attrs: {
|
|
2057
|
-
placement: 'bottom-left',
|
|
2058
|
-
target: _vm.$refs.picker,
|
|
2059
|
-
show: _vm.showDate
|
|
2060
|
-
},
|
|
2061
|
-
on: {
|
|
2062
|
-
'update:show': function ($event) {
|
|
2063
|
-
_vm.showDate = $event
|
|
2064
|
-
},
|
|
2065
|
-
'focus': function ($event) {
|
|
2066
|
-
_vm.dateFocused = true
|
|
2067
|
-
},
|
|
2068
|
-
'blur': function ($event) {
|
|
2069
|
-
_vm.dateFocused = false
|
|
2070
|
-
}
|
|
2071
|
-
},
|
|
2072
|
-
model: {
|
|
2073
|
-
value: _vm.currentValue,
|
|
2074
|
-
callback: function ($$v) {
|
|
2075
|
-
_vm.currentValue = $$v
|
|
2076
|
-
},
|
|
2077
|
-
expression: 'currentValue'
|
|
2078
|
-
}
|
|
2079
|
-
},
|
|
2080
|
-
'date-picker',
|
|
2081
|
-
{
|
|
2082
|
-
transition: _vm.transition,
|
|
2083
|
-
placeholder: _vm.placeholder,
|
|
2084
|
-
locale: _vm.locale,
|
|
2085
|
-
dateFormat: _vm.dateFormat,
|
|
2086
|
-
disabled: _vm.disabled
|
|
2087
|
-
},
|
|
2088
|
-
false
|
|
2089
|
-
)
|
|
2090
|
-
),
|
|
2091
|
-
_c(
|
|
2092
|
-
'time-picker',
|
|
2093
|
-
_vm._b(
|
|
2094
|
-
{
|
|
2095
|
-
ref: 'time',
|
|
2096
|
-
attrs: {
|
|
2097
|
-
placeholder: '',
|
|
2098
|
-
placement: 'bottom-right',
|
|
2099
|
-
target: _vm.$refs.picker,
|
|
2100
|
-
show: _vm.showTime
|
|
2101
|
-
},
|
|
2102
|
-
on: {
|
|
2103
|
-
'update:show': function ($event) {
|
|
2104
|
-
_vm.showTime = $event
|
|
2105
|
-
},
|
|
2106
|
-
'focus': function ($event) {
|
|
2107
|
-
_vm.timeFocused = true
|
|
2108
|
-
},
|
|
2109
|
-
'blur': function ($event) {
|
|
2110
|
-
_vm.timeFocused = false
|
|
2111
|
-
}
|
|
2112
|
-
},
|
|
2113
|
-
model: {
|
|
2114
|
-
value: _vm.currentValue,
|
|
2115
|
-
callback: function ($$v) {
|
|
2116
|
-
_vm.currentValue = $$v
|
|
2117
|
-
},
|
|
2118
|
-
expression: 'currentValue'
|
|
2119
|
-
}
|
|
2120
|
-
},
|
|
2121
|
-
'time-picker',
|
|
2122
|
-
{
|
|
2123
|
-
transition: _vm.transition,
|
|
2124
|
-
disabled: _vm.disabled
|
|
2125
|
-
},
|
|
2126
|
-
false
|
|
2127
|
-
)
|
|
2128
|
-
)
|
|
2129
|
-
],
|
|
2130
|
-
1
|
|
2131
|
-
)
|
|
2132
|
-
]
|
|
2133
|
-
)
|
|
2134
|
-
}
|
|
2135
|
-
const staticRenderFns$3 = []
|
|
2136
|
-
render$3._withStripped = true
|
|
2137
|
-
const DateTimePicker_vue_vue_type_style_index_0_lang = ''
|
|
2138
|
-
const __vue2_script$4 = {
|
|
2139
|
-
components: { DatePicker, TimePicker },
|
|
2140
|
-
props: {
|
|
2141
|
-
value: { type: Date, default: null },
|
|
2142
|
-
transition: { type: String, default: 'slide' },
|
|
2143
|
-
placeholder: { type: String, default: null },
|
|
2144
|
-
dateFormat: { type: Object, default: () => defaultFormats.date },
|
|
2145
|
-
locale: { type: String, default: 'en-US' },
|
|
2146
|
-
disabled: { type: Boolean, default: false }
|
|
2147
|
-
},
|
|
2148
|
-
data() {
|
|
2149
|
-
return {
|
|
2150
|
-
currentValue: this.value,
|
|
2151
|
-
showDate: false,
|
|
2152
|
-
showTime: false,
|
|
2153
|
-
dateFocused: false,
|
|
2154
|
-
timeFocused: false,
|
|
2155
|
-
changed: false
|
|
2156
|
-
}
|
|
2157
|
-
},
|
|
2158
|
-
computed: {
|
|
2159
|
-
focused() {
|
|
2160
|
-
return this.dateFocused || this.timeFocused
|
|
2161
|
-
}
|
|
2162
|
-
},
|
|
2163
|
-
watch: {
|
|
2164
|
-
value(newVal, oldVal) {
|
|
2165
|
-
if (+newVal !== +oldVal) {
|
|
2166
|
-
this.currentValue = newVal
|
|
2167
|
-
}
|
|
2168
|
-
},
|
|
2169
|
-
currentValue(date) {
|
|
2170
|
-
if (+date !== +this.value) {
|
|
2171
|
-
this.changed = true
|
|
2172
|
-
this.$emit('input', date)
|
|
2173
|
-
}
|
|
2174
|
-
},
|
|
2175
|
-
focused(newVal, oldVal) {
|
|
2176
|
-
if (!newVal !== !oldVal) {
|
|
2177
|
-
this.$emit(newVal ? 'focus' : 'blur')
|
|
2178
|
-
}
|
|
2179
|
-
}
|
|
2180
|
-
},
|
|
2181
|
-
mounted() {
|
|
2182
|
-
this.$on('blur', () => {
|
|
2183
|
-
if (this.changed) {
|
|
2184
|
-
this.changed = false
|
|
2185
|
-
this.$emit('change', this.currentValue)
|
|
2186
|
-
}
|
|
2187
|
-
})
|
|
2188
|
-
},
|
|
2189
|
-
methods: {
|
|
2190
|
-
focus() {
|
|
2191
|
-
this.$refs.date.focus()
|
|
2192
|
-
},
|
|
2193
|
-
blur() {
|
|
2194
|
-
this.$refs.date.blur()
|
|
2195
|
-
this.$refs.time.blur()
|
|
2196
|
-
}
|
|
2197
|
-
}
|
|
2198
|
-
}
|
|
2199
|
-
const __cssModules$4 = {}
|
|
2200
|
-
const __component__$4 = /* @__PURE__ */ normalizeComponent(
|
|
2201
|
-
__vue2_script$4,
|
|
2202
|
-
render$3,
|
|
2203
|
-
staticRenderFns$3,
|
|
2204
|
-
false,
|
|
2205
|
-
__vue2_injectStyles$4,
|
|
2206
|
-
null,
|
|
2207
|
-
null,
|
|
2208
|
-
null
|
|
2209
|
-
)
|
|
2210
|
-
function __vue2_injectStyles$4(context) {
|
|
2211
|
-
for (const o in __cssModules$4) {
|
|
2212
|
-
this[o] = __cssModules$4[o]
|
|
2213
|
-
}
|
|
2214
|
-
}
|
|
2215
|
-
__component__$4.options.__file = 'src/components/DateTimePicker.vue'
|
|
2216
|
-
const DateTimePicker = /* @__PURE__ */ (function () {
|
|
2217
|
-
return __component__$4.exports
|
|
2218
|
-
})()
|
|
2219
|
-
const render$2 = function () {
|
|
2220
|
-
const _vm = this
|
|
2221
|
-
const _h = _vm.$createElement
|
|
2222
|
-
const _c = _vm._self._c || _h
|
|
2223
|
-
return _c('i', {
|
|
2224
|
-
staticClass: 'dito-icon',
|
|
2225
|
-
class: `dito-icon-${_vm.name}`
|
|
2226
|
-
})
|
|
2227
|
-
}
|
|
2228
|
-
const staticRenderFns$2 = []
|
|
2229
|
-
render$2._withStripped = true
|
|
2230
|
-
const Icon_vue_vue_type_style_index_0_lang = ''
|
|
2231
|
-
const __vue2_script$3 = {
|
|
2232
|
-
props: {
|
|
2233
|
-
name: {
|
|
2234
|
-
type: String,
|
|
2235
|
-
required: true
|
|
2236
|
-
}
|
|
2237
|
-
}
|
|
2238
|
-
}
|
|
2239
|
-
const __cssModules$3 = {}
|
|
2240
|
-
const __component__$3 = /* @__PURE__ */ normalizeComponent(
|
|
2241
|
-
__vue2_script$3,
|
|
2242
|
-
render$2,
|
|
2243
|
-
staticRenderFns$2,
|
|
2244
|
-
false,
|
|
2245
|
-
__vue2_injectStyles$3,
|
|
2246
|
-
null,
|
|
2247
|
-
null,
|
|
2248
|
-
null
|
|
2249
|
-
)
|
|
2250
|
-
function __vue2_injectStyles$3(context) {
|
|
2251
|
-
for (const o in __cssModules$3) {
|
|
2252
|
-
this[o] = __cssModules$3[o]
|
|
2253
|
-
}
|
|
2254
|
-
}
|
|
2255
|
-
__component__$3.options.__file = 'src/components/Icon.vue'
|
|
2256
|
-
const Icon = /* @__PURE__ */ (function () {
|
|
2257
|
-
return __component__$3.exports
|
|
2258
|
-
})()
|
|
2259
|
-
const render$1 = function () {
|
|
2260
|
-
const _vm = this
|
|
2261
|
-
const _h = _vm.$createElement
|
|
2262
|
-
const _c = _vm._self._c || _h
|
|
2263
|
-
return _vm.numPages > 1
|
|
2264
|
-
? _c(
|
|
2265
|
-
'div',
|
|
2266
|
-
{
|
|
2267
|
-
staticClass: 'dito-pagination'
|
|
2268
|
-
},
|
|
2269
|
-
[
|
|
2270
|
-
_vm.showTotal
|
|
2271
|
-
? _c(
|
|
2272
|
-
'div',
|
|
2273
|
-
{
|
|
2274
|
-
staticClass: 'dito-pagination-total'
|
|
2275
|
-
},
|
|
2276
|
-
[
|
|
2277
|
-
_vm.total > 0
|
|
2278
|
-
? [
|
|
2279
|
-
_vm._v(
|
|
2280
|
-
_vm._s(_vm.first) + ' \u2013 ' + _vm._s(_vm.last)
|
|
2281
|
-
)
|
|
2282
|
-
]
|
|
2283
|
-
: [_vm._v('0')],
|
|
2284
|
-
_vm._v(' / ' + _vm._s(_vm.total))
|
|
2285
|
-
],
|
|
2286
|
-
2
|
|
2287
|
-
)
|
|
2288
|
-
: _vm._e(),
|
|
2289
|
-
_c(
|
|
2290
|
-
'div',
|
|
2291
|
-
{
|
|
2292
|
-
staticClass: 'dito-buttons dito-buttons-round'
|
|
2293
|
-
},
|
|
2294
|
-
_vm._l(_vm.pageRange, function (page) {
|
|
2295
|
-
return _c(
|
|
2296
|
-
'button',
|
|
2297
|
-
{
|
|
2298
|
-
staticClass: 'dito-button',
|
|
2299
|
-
class: _vm.getPageClass(page),
|
|
2300
|
-
attrs: {
|
|
2301
|
-
disabled: page.disabled
|
|
2302
|
-
},
|
|
2303
|
-
on: {
|
|
2304
|
-
click: function ($event) {
|
|
2305
|
-
return _vm.onClickPage(page)
|
|
2306
|
-
}
|
|
2307
|
-
}
|
|
2308
|
-
},
|
|
2309
|
-
[page.text ? _c('span', [_vm._v(_vm._s(page.text))]) : _vm._e()]
|
|
2310
|
-
)
|
|
2311
|
-
}),
|
|
2312
|
-
0
|
|
2313
|
-
)
|
|
2314
|
-
]
|
|
2315
|
-
)
|
|
2316
|
-
: _vm._e()
|
|
2317
|
-
}
|
|
2318
|
-
const staticRenderFns$1 = []
|
|
2319
|
-
render$1._withStripped = true
|
|
2320
|
-
const Pagination_vue_vue_type_style_index_0_lang = ''
|
|
2321
|
-
const __vue2_script$2 = {
|
|
2322
|
-
props: {
|
|
2323
|
-
total: { type: Number, default: 0 },
|
|
2324
|
-
page: { type: Number, default: 1 },
|
|
2325
|
-
pageSize: { type: Number, default: 10 },
|
|
2326
|
-
showTotal: { type: Boolean, default: true }
|
|
2327
|
-
},
|
|
2328
|
-
data() {
|
|
2329
|
-
return {
|
|
2330
|
-
pageRange: [],
|
|
2331
|
-
showPrev: true,
|
|
2332
|
-
showNext: true,
|
|
2333
|
-
numPages: 0,
|
|
2334
|
-
currentPageSize: this.pageSize,
|
|
2335
|
-
currentPage: this.page
|
|
2336
|
-
}
|
|
2337
|
-
},
|
|
2338
|
-
computed: {
|
|
2339
|
-
first() {
|
|
2340
|
-
return (this.currentPage - 1) * this.currentPageSize + 1
|
|
2341
|
-
},
|
|
2342
|
-
last() {
|
|
2343
|
-
return Math.min(this.first + this.currentPageSize - 1, this.total)
|
|
2344
|
-
}
|
|
2345
|
-
},
|
|
2346
|
-
watch: {
|
|
2347
|
-
total: 'updatePageRange',
|
|
2348
|
-
showPrev: 'updatePageRange',
|
|
2349
|
-
showNext: 'updatePageRange',
|
|
2350
|
-
page(page) {
|
|
2351
|
-
this.currentPage = page
|
|
2352
|
-
},
|
|
2353
|
-
pageSize(pageSize) {
|
|
2354
|
-
this.currentPageSize = pageSize
|
|
2355
|
-
},
|
|
2356
|
-
currentPageSize(currentPageSize) {
|
|
2357
|
-
this.numPages = Math.ceil(this.total / currentPageSize)
|
|
2358
|
-
if (this.currentPage > this.numPages) {
|
|
2359
|
-
this.currentPage = this.numPages
|
|
2360
|
-
}
|
|
2361
|
-
this.updatePageRange()
|
|
2362
|
-
this.$emit('size-change', this.page, currentPageSize)
|
|
2363
|
-
},
|
|
2364
|
-
currentPage(newVal, oldVal) {
|
|
2365
|
-
if (newVal !== oldVal) {
|
|
2366
|
-
this.updatePageRange()
|
|
2367
|
-
this.$emit('update:page', newVal)
|
|
2368
|
-
}
|
|
2369
|
-
}
|
|
2370
|
-
},
|
|
2371
|
-
created() {
|
|
2372
|
-
this.currentPage = this.page
|
|
2373
|
-
this.currentPageSize = this.pageSize
|
|
2374
|
-
},
|
|
2375
|
-
mounted() {
|
|
2376
|
-
this.updatePageRange()
|
|
2377
|
-
},
|
|
2378
|
-
methods: {
|
|
2379
|
-
onClickPage(page) {
|
|
2380
|
-
if (page.index && !page.disabled && page.index !== this.currentPage) {
|
|
2381
|
-
this.currentPage = page.index
|
|
2382
|
-
}
|
|
2383
|
-
},
|
|
2384
|
-
getPageClass(page) {
|
|
2385
|
-
const classes = {
|
|
2386
|
-
'dito-selected': page.active
|
|
2387
|
-
}
|
|
2388
|
-
if (page.type) {
|
|
2389
|
-
classes[`dito-button-${page.type}`] = true
|
|
2390
|
-
}
|
|
2391
|
-
return classes
|
|
2392
|
-
},
|
|
2393
|
-
updatePageRange() {
|
|
2394
|
-
const { showPrev, showNext, total, currentPageSize, currentPage } = this
|
|
2395
|
-
const showLength = showPrev + showNext + 1
|
|
2396
|
-
const numPages = (this.numPages = Math.ceil(total / currentPageSize))
|
|
2397
|
-
let start = 1
|
|
2398
|
-
let end = 1
|
|
2399
|
-
if (numPages <= showLength) {
|
|
2400
|
-
end = numPages
|
|
2401
|
-
} else if (currentPage <= showPrev + 1) {
|
|
2402
|
-
end = showLength
|
|
2403
|
-
} else if (currentPage >= numPages - showNext) {
|
|
2404
|
-
end = numPages
|
|
2405
|
-
start = numPages - showLength + 1
|
|
2406
|
-
} else {
|
|
2407
|
-
start = currentPage - showPrev
|
|
2408
|
-
end = currentPage + showNext
|
|
2409
|
-
}
|
|
2410
|
-
const pageRange = []
|
|
2411
|
-
pageRange.push({
|
|
2412
|
-
index: currentPage - 1,
|
|
2413
|
-
type: 'prev',
|
|
2414
|
-
disabled: currentPage <= 1
|
|
2415
|
-
})
|
|
2416
|
-
if (start >= 2) {
|
|
2417
|
-
pageRange.push({ index: 1, text: 1 })
|
|
2418
|
-
}
|
|
2419
|
-
if (start > 2) {
|
|
2420
|
-
pageRange.push({
|
|
2421
|
-
index: Math.max(1, currentPage - 10),
|
|
2422
|
-
type: 'ellipsis-prev'
|
|
2423
|
-
})
|
|
2424
|
-
}
|
|
2425
|
-
for (let i = start; i <= end; i++) {
|
|
2426
|
-
pageRange.push({
|
|
2427
|
-
index: i,
|
|
2428
|
-
text: i,
|
|
2429
|
-
active: i === currentPage
|
|
2430
|
-
})
|
|
2431
|
-
}
|
|
2432
|
-
if (end < numPages - 1) {
|
|
2433
|
-
pageRange.push({
|
|
2434
|
-
index: Math.min(numPages, currentPage + 10),
|
|
2435
|
-
type: 'ellipsis-next'
|
|
2436
|
-
})
|
|
2437
|
-
}
|
|
2438
|
-
if (end <= numPages - 1) {
|
|
2439
|
-
pageRange.push({ index: numPages, text: numPages })
|
|
2440
|
-
}
|
|
2441
|
-
pageRange.push({
|
|
2442
|
-
index: currentPage + 1,
|
|
2443
|
-
type: 'next',
|
|
2444
|
-
disabled: currentPage >= numPages
|
|
2445
|
-
})
|
|
2446
|
-
this.pageRange = pageRange
|
|
2447
|
-
}
|
|
2448
|
-
}
|
|
2449
|
-
}
|
|
2450
|
-
const __cssModules$2 = {}
|
|
2451
|
-
const __component__$2 = /* @__PURE__ */ normalizeComponent(
|
|
2452
|
-
__vue2_script$2,
|
|
2453
|
-
render$1,
|
|
2454
|
-
staticRenderFns$1,
|
|
2455
|
-
false,
|
|
2456
|
-
__vue2_injectStyles$2,
|
|
2457
|
-
null,
|
|
2458
|
-
null,
|
|
2459
|
-
null
|
|
2460
|
-
)
|
|
2461
|
-
function __vue2_injectStyles$2(context) {
|
|
2462
|
-
for (const o in __cssModules$2) {
|
|
2463
|
-
this[o] = __cssModules$2[o]
|
|
2464
|
-
}
|
|
2465
|
-
}
|
|
2466
|
-
__component__$2.options.__file = 'src/components/Pagination.vue'
|
|
2467
|
-
const Pagination = /* @__PURE__ */ (function () {
|
|
2468
|
-
return __component__$2.exports
|
|
2469
|
-
})()
|
|
2470
|
-
const render = function () {
|
|
2471
|
-
const _vm = this
|
|
2472
|
-
const _h = _vm.$createElement
|
|
2473
|
-
const _c = _vm._self._c || _h
|
|
2474
|
-
return _c(
|
|
2475
|
-
'div',
|
|
2476
|
-
{
|
|
2477
|
-
staticClass: 'dito-switch',
|
|
2478
|
-
class: _vm.classes,
|
|
2479
|
-
style: _vm.styles
|
|
2480
|
-
},
|
|
2481
|
-
[
|
|
2482
|
-
_c(
|
|
2483
|
-
'div',
|
|
2484
|
-
{
|
|
2485
|
-
staticClass: 'dito-switch-pane'
|
|
2486
|
-
},
|
|
2487
|
-
[
|
|
2488
|
-
_c(
|
|
2489
|
-
'input',
|
|
2490
|
-
_vm._b(
|
|
2491
|
-
{
|
|
2492
|
-
directives: [
|
|
2493
|
-
{
|
|
2494
|
-
name: 'model',
|
|
2495
|
-
rawName: 'v-model',
|
|
2496
|
-
value: _vm.checked,
|
|
2497
|
-
expression: 'checked'
|
|
2498
|
-
}
|
|
2499
|
-
],
|
|
2500
|
-
ref: 'input',
|
|
2501
|
-
attrs: {
|
|
2502
|
-
type: 'checkbox'
|
|
2503
|
-
},
|
|
2504
|
-
domProps: {
|
|
2505
|
-
checked: Array.isArray(_vm.checked)
|
|
2506
|
-
? _vm._i(_vm.checked, null) > -1
|
|
2507
|
-
: _vm.checked
|
|
2508
|
-
},
|
|
2509
|
-
on: {
|
|
2510
|
-
change: function ($event) {
|
|
2511
|
-
const $$a = _vm.checked
|
|
2512
|
-
const $$el = $event.target
|
|
2513
|
-
const $$c = !!$$el.checked
|
|
2514
|
-
if (Array.isArray($$a)) {
|
|
2515
|
-
const $$v = null
|
|
2516
|
-
const $$i = _vm._i($$a, $$v)
|
|
2517
|
-
if ($$el.checked) {
|
|
2518
|
-
$$i < 0 && (_vm.checked = $$a.concat([$$v]))
|
|
2519
|
-
} else {
|
|
2520
|
-
$$i > -1 &&
|
|
2521
|
-
(_vm.checked = $$a
|
|
2522
|
-
.slice(0, $$i)
|
|
2523
|
-
.concat($$a.slice($$i + 1)))
|
|
2524
|
-
}
|
|
2525
|
-
} else {
|
|
2526
|
-
_vm.checked = $$c
|
|
2527
|
-
}
|
|
2528
|
-
}
|
|
2529
|
-
}
|
|
2530
|
-
},
|
|
2531
|
-
'input',
|
|
2532
|
-
_vm.attributes,
|
|
2533
|
-
false
|
|
2534
|
-
)
|
|
2535
|
-
),
|
|
2536
|
-
_c('div', {
|
|
2537
|
-
staticClass: 'dito-switch-button'
|
|
2538
|
-
}),
|
|
2539
|
-
_vm.labels
|
|
2540
|
-
? _c(
|
|
2541
|
-
'span',
|
|
2542
|
-
{
|
|
2543
|
-
staticClass: 'dito-switch-label'
|
|
2544
|
-
},
|
|
2545
|
-
[
|
|
2546
|
-
_vm.checked
|
|
2547
|
-
? _vm._t('checked', function () {
|
|
2548
|
-
return [_vm._v(_vm._s(_vm.labels.checked || 'on'))]
|
|
2549
|
-
})
|
|
2550
|
-
: _vm._t('unchecked', function () {
|
|
2551
|
-
return [_vm._v(_vm._s(_vm.labels.unchecked || 'off'))]
|
|
2552
|
-
})
|
|
2553
|
-
],
|
|
2554
|
-
2
|
|
2555
|
-
)
|
|
2556
|
-
: _vm._e()
|
|
2557
|
-
]
|
|
2558
|
-
)
|
|
2559
|
-
]
|
|
2560
|
-
)
|
|
2561
|
-
}
|
|
2562
|
-
const staticRenderFns = []
|
|
2563
|
-
render._withStripped = true
|
|
2564
|
-
const SwitchButton_vue_vue_type_style_index_0_lang = ''
|
|
2565
|
-
const __vue2_script$1 = {
|
|
2566
|
-
props: {
|
|
2567
|
-
value: { type: Boolean, default: false },
|
|
2568
|
-
id: { type: String, default: null },
|
|
2569
|
-
name: { type: String, default: null },
|
|
2570
|
-
disabled: { type: Boolean, default: false },
|
|
2571
|
-
labels: { type: [Object, Boolean], default: false }
|
|
2572
|
-
},
|
|
2573
|
-
data() {
|
|
2574
|
-
return {
|
|
2575
|
-
checked: this.value
|
|
2576
|
-
}
|
|
2577
|
-
},
|
|
2578
|
-
computed: {
|
|
2579
|
-
classes() {
|
|
2580
|
-
const { checked, disabled } = this
|
|
2581
|
-
return {
|
|
2582
|
-
'dito-checked': checked,
|
|
2583
|
-
'dito-disabled': disabled
|
|
2584
|
-
}
|
|
2585
|
-
},
|
|
2586
|
-
styles() {
|
|
2587
|
-
const { labels: { checked, unchecked } = {} } = this
|
|
2588
|
-
const length = Math.max(
|
|
2589
|
-
0,
|
|
2590
|
-
checked == null ? void 0 : checked.length,
|
|
2591
|
-
unchecked == null ? void 0 : unchecked.length
|
|
2592
|
-
)
|
|
2593
|
-
return {
|
|
2594
|
-
'--switch-width': length ? `${length * 1.5}rem` : null
|
|
2595
|
-
}
|
|
2596
|
-
},
|
|
2597
|
-
attributes() {
|
|
2598
|
-
const { id, name, disabled, $attrs } = this
|
|
2599
|
-
return { id, name, disabled, ...$attrs }
|
|
2600
|
-
}
|
|
2601
|
-
},
|
|
2602
|
-
watch: {
|
|
2603
|
-
value(value) {
|
|
2604
|
-
this.checked = value
|
|
2605
|
-
},
|
|
2606
|
-
checked(checked) {
|
|
2607
|
-
if (checked !== this.value) {
|
|
2608
|
-
this.$emit('input', checked)
|
|
2609
|
-
this.$emit('change', checked)
|
|
2610
|
-
}
|
|
2611
|
-
}
|
|
2612
|
-
},
|
|
2613
|
-
methods: {
|
|
2614
|
-
focus() {
|
|
2615
|
-
this.$refs.input.focus()
|
|
2616
|
-
}
|
|
2617
|
-
}
|
|
2618
|
-
}
|
|
2619
|
-
const __cssModules$1 = {}
|
|
2620
|
-
const __component__$1 = /* @__PURE__ */ normalizeComponent(
|
|
2621
|
-
__vue2_script$1,
|
|
2622
|
-
render,
|
|
2623
|
-
staticRenderFns,
|
|
2624
|
-
false,
|
|
2625
|
-
__vue2_injectStyles$1,
|
|
2626
|
-
null,
|
|
2627
|
-
null,
|
|
2628
|
-
null
|
|
2629
|
-
)
|
|
2630
|
-
function __vue2_injectStyles$1(context) {
|
|
2631
|
-
for (const o in __cssModules$1) {
|
|
2632
|
-
this[o] = __cssModules$1[o]
|
|
2633
|
-
}
|
|
2634
|
-
}
|
|
2635
|
-
__component__$1.options.__file = 'src/components/SwitchButton.vue'
|
|
2636
|
-
const SwitchButton = /* @__PURE__ */ (function () {
|
|
2637
|
-
return __component__$1.exports
|
|
2638
|
-
})()
|
|
2639
|
-
const TransitionHeight_vue_vue_type_style_index_0_lang = ''
|
|
2640
|
-
const __vue2_script = {
|
|
2641
|
-
functional: true,
|
|
2642
|
-
props: {
|
|
2643
|
-
enabled: { type: Boolean, default: true }
|
|
2644
|
-
},
|
|
2645
|
-
render: (createElement, context) =>
|
|
2646
|
-
createElement(
|
|
2647
|
-
'transition',
|
|
2648
|
-
context.props.enabled
|
|
2649
|
-
? {
|
|
2650
|
-
props: { name: 'height' },
|
|
2651
|
-
on: events
|
|
2652
|
-
}
|
|
2653
|
-
: {},
|
|
2654
|
-
context.children
|
|
2655
|
-
)
|
|
2656
|
-
}
|
|
2657
|
-
const setStyle = (element, style) => Object.assign(element.style, style)
|
|
2658
|
-
const forceRepaint = element => getComputedStyle(element).height
|
|
2659
|
-
const events = {
|
|
2660
|
-
afterEnter(element) {
|
|
2661
|
-
setTimeout(() => setStyle(element, { height: 'auto' }))
|
|
2662
|
-
},
|
|
2663
|
-
enter(element) {
|
|
2664
|
-
const { width } = getComputedStyle(element)
|
|
2665
|
-
setStyle(element, {
|
|
2666
|
-
width,
|
|
2667
|
-
position: 'absolute',
|
|
2668
|
-
visibility: 'hidden',
|
|
2669
|
-
height: 'auto'
|
|
2670
|
-
})
|
|
2671
|
-
const { height } = getComputedStyle(element)
|
|
2672
|
-
setStyle(element, {
|
|
2673
|
-
width: null,
|
|
2674
|
-
position: null,
|
|
2675
|
-
visibility: null,
|
|
2676
|
-
height: 0
|
|
2677
|
-
})
|
|
2678
|
-
forceRepaint(element)
|
|
2679
|
-
setTimeout(() => setStyle(element, { height }))
|
|
2680
|
-
},
|
|
2681
|
-
leave(element) {
|
|
2682
|
-
const { height } = getComputedStyle(element)
|
|
2683
|
-
setStyle(element, { height })
|
|
2684
|
-
forceRepaint(element)
|
|
2685
|
-
setTimeout(() => setStyle(element, { height: 0 }))
|
|
2686
|
-
}
|
|
2687
|
-
}
|
|
2688
|
-
let __vue2_render, __vue2_staticRenderFns
|
|
2689
|
-
const __cssModules = {}
|
|
2690
|
-
const __component__ = /* @__PURE__ */ normalizeComponent(
|
|
2691
|
-
__vue2_script,
|
|
2692
|
-
__vue2_render,
|
|
2693
|
-
__vue2_staticRenderFns,
|
|
2694
|
-
false,
|
|
2695
|
-
__vue2_injectStyles,
|
|
2696
|
-
null,
|
|
2697
|
-
null,
|
|
2698
|
-
null
|
|
2699
|
-
)
|
|
2700
|
-
function __vue2_injectStyles(context) {
|
|
2701
|
-
for (const o in __cssModules) {
|
|
2702
|
-
this[o] = __cssModules[o]
|
|
2703
|
-
}
|
|
2704
|
-
}
|
|
2705
|
-
__component__.options.__file = 'src/transitions/TransitionHeight.vue'
|
|
2706
|
-
const TransitionHeight = /* @__PURE__ */ (function () {
|
|
2707
|
-
return __component__.exports
|
|
2708
|
-
})()
|
|
2709
|
-
export {
|
|
2710
|
-
Calendar,
|
|
2711
|
-
DatePicker,
|
|
2712
|
-
DateTimePicker,
|
|
2713
|
-
Icon,
|
|
2714
|
-
InputField,
|
|
2715
|
-
Pagination,
|
|
2716
|
-
SwitchButton,
|
|
2717
|
-
TimePicker,
|
|
2718
|
-
TransitionHeight,
|
|
2719
|
-
Trigger,
|
|
2720
|
-
addEvents,
|
|
2721
|
-
convertDate,
|
|
2722
|
-
copyDate,
|
|
2723
|
-
getAbsoluteBoundingRect,
|
|
2724
|
-
getKey,
|
|
2725
|
-
getKeyNavigation,
|
|
2726
|
-
scrollTo,
|
|
2727
|
-
setSelection
|
|
2728
|
-
}
|
|
2729
|
-
// # sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by11aS5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzL2JvdW5kcy5qcyIsIi4uL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0NhbGVuZGFyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0lucHV0RmllbGQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvSWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvU3dpdGNoQnV0dG9uLnZ1ZSIsIi4uL3NyYy90cmFuc2l0aW9ucy9UcmFuc2l0aW9uSGVpZ2h0LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0QWJzb2x1dGVCb3VuZGluZ1JlY3QoZWwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnRcbiAgY29uc3Qgd2luID0gd2luZG93XG4gIGNvbnN0IGJvZHkgPSBkb2MuYm9keVxuICAvLyBwYWdlWE9mZnNldCBhbmQgcGFnZVlPZmZzZXQgd29yayBldmVyeXdoZXJlIGV4Y2VwdCBJRSA8OS5cbiAgbGV0IG9mZnNldFggPSB3aW4ucGFnZVhPZmZzZXQgIT09IHVuZGVmaW5lZCA/IHdpbi5wYWdlWE9mZnNldFxuICAgIDogKGRvYy5kb2N1bWVudEVsZW1lbnQgfHwgYm9keS5wYXJlbnROb2RlIHx8IGJvZHkpLnNjcm9sbExlZnRcbiAgbGV0IG9mZnNldFkgPSB3aW4ucGFnZVlPZmZzZXQgIT09IHVuZGVmaW5lZCA/IHdpbi5wYWdlWU9mZnNldFxuICAgIDogKGRvYy5kb2N1bWVudEVsZW1lbnQgfHwgYm9keS5wYXJlbnROb2RlIHx8IGJvZHkpLnNjcm9sbFRvcFxuICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgaWYgKGVsICE9PSBib2R5KSB7XG4gICAgbGV0IHBhcmVudCA9IGVsLnBhcmVudE5vZGVcbiAgICAvLyBUaGUgZWxlbWVudCdzIHJlY3Qgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGUgc2Nyb2xsIHBvc2l0aW9ucyBvZlxuICAgIC8vICphbGwqIG9mIGl0cyBzY3JvbGxhYmxlIHBhcmVudHMsIG5vdCBqdXN0IHRoZSB3aW5kb3csIHNvIHdlIGhhdmVcbiAgICAvLyB0byB3YWxrIHVwIHRoZSB0cmVlIGFuZCBjb2xsZWN0IGV2ZXJ5IHNjcm9sbCBvZmZzZXQuIEdvb2QgdGltZXMuXG4gICAgd2hpbGUgKHBhcmVudCAhPT0gYm9keSkge1xuICAgICAgb2Zmc2V0WCArPSBwYXJlbnQuc2Nyb2xsTGVmdFxuICAgICAgb2Zmc2V0WSArPSBwYXJlbnQuc2Nyb2xsVG9wXG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGJvdHRvbTogcmVjdC5ib3R0b20gKyBvZmZzZXRZLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgbGVmdDogcmVjdC5sZWZ0ICsgb2Zmc2V0WCxcbiAgICByaWdodDogcmVjdC5yaWdodCArIG9mZnNldFgsXG4gICAgdG9wOiByZWN0LnRvcCArIG9mZnNldFksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGhcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNEYXRlLCBwaWNrIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlEYXRlKGRhdGUsXG4gIHsgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kIH0gPSB7fVxuKSB7XG4gIHJldHVybiBuZXcgRGF0ZShcbiAgICBwaWNrKHllYXIsIGRhdGUgJiYgZGF0ZS5nZXRGdWxsWWVhcigpLCAwKSxcbiAgICBwaWNrKG1vbnRoLCBkYXRlICYmIGRhdGUuZ2V0TW9udGgoKSwgMCksXG4gICAgcGljayhkYXksIGRhdGUgJiYgZGF0ZS5nZXREYXRlKCksIDApLFxuICAgIHBpY2soaG91ciwgZGF0ZSAmJiBkYXRlLmdldEhvdXJzKCksIDApLFxuICAgIHBpY2sobWludXRlLCBkYXRlICYmIGRhdGUuZ2V0TWludXRlcygpLCAwKSxcbiAgICBwaWNrKHNlY29uZCwgZGF0ZSAmJiBkYXRlLmdldFNlY29uZHMoKSwgMCksXG4gICAgcGljayhtaWxsaXNlY29uZCwgZGF0ZSAmJiBkYXRlLmdldE1pbGxpc2Vjb25kcygpLCAwKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBpc0RhdGUoZGF0ZSkgPyBkYXRlIDogZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZEV2ZW50cyh0YXJnZXQsIGV2ZW50cykge1xuICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIGZvciAoY29uc3QgdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRzW3R5cGVdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50LmtleUNvZGVdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IGtleSA9IGdldEtleShldmVudClcbiAgcmV0dXJuIHtcbiAgICBob3I6IHsgbGVmdDogLTEsIHJpZ2h0OiAxIH1ba2V5XSB8fCAwLFxuICAgIHZlcjogeyB1cDogLTEsIGRvd246IDEgfVtrZXldIHx8IDAsXG4gICAgZW50ZXI6IGtleSA9PT0gJ2VudGVyJ1xuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYXJndW1lbnRzWzBdLCAxMClcbiAgfVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCJcbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgICAuZGl0by1jYWxlbmRhci1pbm5lclxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtbW9udGgoXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAtbW9udGgoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cIndlZWtkYXkgaW4gd2Vla2RheU5hbWVzXCJcbiAgICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShkYXRlLmRhdGUsIGRhdGUuc3RhdGUsIHRydWUpXCJcbiAgICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QtdG9kYXkoXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCksIHsgeWVhcjogMSwgbW9udGg6IDEsIGRheTogMSB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAnbW9udGgnXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0TW9udGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ3llYXInXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbiB7eyBkZWNhZGVUb1N0cmluZyhjdXJyZW50VmFsdWUpIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0WWVhcih5ZWFyKVwiXG4gICAgICAgICAgICAgICkge3sgeWVhciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNhbGVuZGFyXG4gICAgbWluLXdpZHRoOiAyNDBweFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcblxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICB6LWluZGV4OiAxMDAwXG5cbiAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KVxuICAgICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgICBsaW5lLWhlaWdodDogY2FsYygjeyRpbnB1dC1oZWlnaHR9IC0gMnB4KVxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS10b2RheVxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmVcbiAgICAgICYsXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgY29sb3I6IHdoaXRlXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogd2hpdGVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gICAgLmRpdG8tY2FsZW5kYXItaXRlbS1ncmF5XG4gICAgICBjb2xvcjogIzk5OVxuXG4gIC5kaXRvLWNhbGVuZGFyLW1vbnRocyxcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICBzcGFuXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNClcbiAgICAgIG1hcmdpbjogMC41ZW0gMFxuXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNSlcblxuICAuZGl0by1jYWxlbmRhciBhLFxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3BhblxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBjdXJzb3I6IHBvaW50ZXJcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhblxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGFcbiAgICAgIHBhZGRpbmc6IDAgMC4yZW1cblxuICAuZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuOmhvdmVyLFxuICAuZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXIteWVhcnMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXI6bm90KDpob3ZlcikgLmRpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuXG4gIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzIHNwYW5cbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlcixcbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgQGV4dGVuZCAlaW5wdXQtaGVpZ2h0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgdGV4dC1hbGlnbjogY2VudGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZVxuXG4gIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICA+IHNwYW5cbiAgICAgIG1hcmdpbjogYXV0b1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgIGFcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG5cbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICB3aWR0aDogNSVcbiAgICBtaW4td2lkdGg6IDJlbVxuICAgIG1heC13aWR0aDogM2VtXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIGZvbnQtc2l6ZTogMS4yNWVtXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldlxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC5J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwqsnXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dFxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAn4oC6J1xuICAgICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyXG4gICAgICBjb250ZW50OiAnwrsnXG5cbiAgLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5XG4gICAgJjo6YWZ0ZXJcbiAgICAgIGNvbnRlbnQ6ICdOb3cnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY29weURhdGUgfSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTpcbiAgICAgICAgdGhpcy52YWx1ZSB8fFxuICAgICAgICAvLyBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdXNlIGN1cnJlbnQgZGF0ZSBidXQgY2xlYXIgdGltZSBmaWVsZHM6XG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAgfSksXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5tb2RlXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgY3VycmVudFZhbHVlOiAndXBkYXRlRGF0ZVJhbmdlJyxcbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsIHx8IG5ldyBEYXRlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMudmFsdWUgJiYgbW9udGggPT09IHRoaXMudmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICBtb250aCA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRZZWFyQ2xhc3MoeWVhcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOlxuICAgICAgICAgIHRoaXMudmFsdWUgJiYgeWVhciA9PT0gdGhpcy52YWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOlxuICAgICAgICAgIHllYXIgPT09IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0RGF0ZShvdmVycmlkZXMpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5Q291bnQoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlLCBzdGF0ZSwgY29weSA9IGZhbHNlKSB7XG4gICAgICBpZiAoc3RhdGUgIT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICAgIGRheTogZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gZGF0ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdE1vbnRoKG1vbnRoKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3RZZWFyKHllYXIpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnbW9udGgnKVxuICAgICAgdGhpcy5zZXREYXRlKHsgeWVhciB9KVxuICAgIH0sXG5cbiAgICBnZXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgIGlmIChtb250aCA+IDExKSB7XG4gICAgICAgIHllYXIrK1xuICAgICAgICBtb250aCA9IDBcbiAgICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7XG4gICAgICAgIHllYXItLVxuICAgICAgICBtb250aCA9IDExXG4gICAgICB9XG4gICAgICByZXR1cm4geyB5ZWFyLCBtb250aCB9XG4gICAgfSxcblxuICAgIGRhdGVUb1N0cmluZyhkYXRlLCB7IHllYXIsIG1vbnRoLCBkYXkgfSkge1xuICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHtcbiAgICAgICAgeWVhcjogeWVhciAmJiAnbnVtZXJpYycsXG4gICAgICAgIG1vbnRoOiBtb250aCAmJiAnbG9uZycsXG4gICAgICAgIGRheTogZGF5ICYmICdudW1lcmljJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZGVjYWRlVG9TdHJpbmcoZGF0ZSkge1xuICAgICAgY29uc3QgeWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoZGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIGAke3llYXJ9IOKAkyAke3llYXIgKyA5fWBcbiAgICB9LFxuXG4gICAgZ2V0RGF5Q291bnQoeWVhciwgbW9udGgpIHtcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdXG4gICAgICAvLyBIYW5kbGUgbGVhcCB5ZWFyOlxuICAgICAgcmV0dXJuIG1vbnRoID09PSAxICYmICghKHllYXIgJSA0MDApIHx8ICEoeWVhciAlIDQpICYmICh5ZWFyICUgMTAwKSlcbiAgICAgICAgPyAyOVxuICAgICAgICA6IGRheXNJbk1vbnRoW21vbnRoXVxuICAgIH0sXG5cbiAgICBnZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKSB7XG4gICAgICBjb25zdCB5ZWFyU3RyID0geWVhci50b1N0cmluZygpXG4gICAgICByZXR1cm4gK2Ake3llYXJTdHIuc2xpY2UoMCwgLTEpfTBgXG4gICAgfSxcblxuICAgIG5hdmlnYXRlKHsgaG9yLCB2ZXIsIGVudGVyIH0pIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudE1vZGUsIGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgaWYgKGhvciB8fCB2ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBob3IgKyB2ZXIgKiA3XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIGhvciArIHZlciAqIDZcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIGhvciArIHZlciAqIDVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50TW9kZSkge1xuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZURhdGVSYW5nZSgpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0gW11cbiAgICAgIHRoaXMueWVhclJhbmdlID0gW11cblxuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgY29uc3QgbW9udGggPSBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKVxuICAgICAgY29uc3Qgc3RhcnRZZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZSh5ZWFyKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHRoaXMueWVhclJhbmdlLnB1c2goc3RhcnRZZWFyICsgaSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJNb250aEZpcnN0RGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpXG4gICAgICBsZXQgZmlyc3REYXlXZWVrID0gY3Vyck1vbnRoRmlyc3REYXkuZ2V0RGF5KCkgKyAxXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID09PSAwKSB7XG4gICAgICAgIGZpcnN0RGF5V2VlayA9IDdcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRheUNvdW50ID0gdGhpcy5nZXREYXlDb3VudCh5ZWFyLCBtb250aClcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPiAxKSB7XG4gICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoIC0gMSlcbiAgICAgICAgY29uc3QgcHJldk1vbnRoRGF5Q291bnQgPSB0aGlzLmdldERheUNvdW50KFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhEYXlDb3VudCAtIGZpcnN0RGF5V2VlayArIGkgKyAxXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHByZXZNb250aC55ZWFyLCBwcmV2TW9udGgubW9udGgsIGRheSlcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGRheUNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKVxuICAgICAgICBjb25zdCBpc0RheSA9IGRhdGUgPT4gZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzRGF5KHRoaXMudmFsdWUpID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KHRvZGF5KSA/ICd0b2RheSdcbiAgICAgICAgICA6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJ1xuICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKSA/ICdjdXJyZW50J1xuICAgICAgICAgIDogbnVsbFxuICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE1vbnRoTmVlZCA9IDQyIC0gdGhpcy5kYXRlUmFuZ2UubGVuZ3RoXG4gICAgICBpZiAobmV4dE1vbnRoTmVlZCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5nZXRZZWFyTW9udGgoeWVhciwgbW9udGggKyAxKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0TW9udGhOZWVkOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV4dE1vbnRoLnllYXIsIG5leHRNb250aC5tb250aCwgaSlcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgbG9jYWxlTmFtZXMgPSB7fVxuXG4vLyBDYWxsaW5nIGB0b0xvY2FsZVN0cmluZygpYCB0aGlzIG11Y2ggYXBwZWFycyB0byBiZSBleHBlbnNpdmUsIHNvIGNhY2hlIGl0OlxuZnVuY3Rpb24gZ2V0TG9jYWxlTmFtZXMobG9jYWxlKSB7XG4gIGxldCBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV1cbiAgaWYgKCFuYW1lcykge1xuICAgIGNvbnN0IHdlZWtkYXlOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCAwLCBpKVxuICAgICAgd2Vla2RheU5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBtb250aE5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgaSwgMClcbiAgICAgIG1vbnRoTmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnbG9uZycgfSksXG4gICAgICAgIHNob3J0OiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdID0ge1xuICAgICAgd2Vla2RheU5hbWVzLFxuICAgICAgbW9udGhOYW1lc1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXNcbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIC5kaXRvLXRyaWdnZXIoXG4gICAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICAgIHJlZj1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgdHJhbnNpdGlvbig6bmFtZT1cInRyYW5zaXRpb25cIilcbiAgICAgIC5kaXRvLXBvcHVwKFxuICAgICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgKVxuICAgICAgICBzbG90KFxuICAgICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2FzcydcblxuICAuZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gIC5kaXRvLXRyaWdnZXItZGlzYWJsZWRcbiAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgKlxuICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnRcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjpmb2N1c1xuICAgICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgLmRpdG8tcG9wdXBcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB0b3A6IDBcbiAgICBsZWZ0OiAwXG4gICAgei1pbmRleDogMTAwMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRyaWdnZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5mb2N1c0V2ZW50cyA9IGFkZEV2ZW50cyh0YXJnZXQsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0Q2hpbGRcbiAgICAgICAgZWwuc3R5bGUud2lkdGggPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkud2lkdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoIC0gdHJpZ2dlcldpZHRoXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHQgLSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuXG4gICAgICB0aGlzLiRlbWl0KCd1cGRhdGUtcG9zaXRpb24nLCB7XG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHBvcHVwLFxuICAgICAgICBwbGFjZW1lbnQ6IHRoaXMucG9wdXBQbGFjZW1lbnRcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSAhdGhpcy5zaG93UG9wdXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Ib3ZlcihlbnRlcikge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vdXNlTGVhdmVUaW1lcilcbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaGlkZURlbGF5KSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICB9LCB0aGlzLmhpZGVEZWxheSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWlucHV0XG4gIGlucHV0KFxuICAgIHJlZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDphcmlhLWxhYmVsPVwidGl0bGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1pbnB1dFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIEBleHRlbmQgJWlucHV0XG4gICAgaW5wdXRcbiAgICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgICAgYWxsOiBpbmhlcml0XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBib3JkZXI6IDBcbiAgICAgIG1hcmdpbjogMFxuICAgICAgcGFkZGluZzogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgdmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdGl0bGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGF1dG9jb21wbGV0ZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdvZmYnIH1cbiAgICAvKlxuICAgIGNsZWFyYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gICAgc3VmZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwcmVmaXhJY29uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gICAgKi9cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkLFxuICAgICAgICBuYW1lLFxuICAgICAgICB0eXBlLFxuICAgICAgICBzaXplLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBwbGFjZWhvbGRlcixcbiAgICAgICAgYXV0b2NvbXBsZXRlLFxuICAgICAgICAkYXR0cnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgLi4uJGF0dHJzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIC8vIFJlbW92ZSAnaW5wdXQnIGxpc3RlbmVyIGJlY2F1c2Ugd2UncmUgaGFuZGxpbmcgaXQgc2VwYXJhdGVseSBiZWxvdyxcbiAgICAgIC8vIGJ1dCBwYXNzIG9uIGFsbCBvdGhlcnMgdG8gdGhlIHdyYXBwZWQgbmF0aXZlIGVsZW1lbnQ6XG4gICAgICBjb25zdCB7IGlucHV0LCAuLi5saXN0ZW5lcnMgfSA9IHRoaXMuJGxpc3RlbmVyc1xuICAgICAgcmV0dXJuIGxpc3RlbmVyc1xuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+IHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDBcbiAgICAgIHJldHVybiBzaXplIHx8IGdldExlbmd0aChtaW4pIHx8IGdldExlbmd0aChtYXgpIHx8IHVuZGVmaW5lZFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKG5ld1ZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICBjYWxlbmRhci5kaXRvLWRhdGUtcGlja2VyLXBvcHVwKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgIEBpbnB1dD1cInNlbGVjdERhdGVcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRWYWx1ZVwiXG4gICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWRhdGUtcGlja2VyKFxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4gIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIC8vIGljb24odHlwZT1cImNhbGVuZGFyXCIgOmNvbG9yPVwiaWNvbkNvbG9yXCIpXG4gICAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJ7IGxvY2FsZSwgZGlzYWJsZWREYXRlIH1cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1kYXRlLXBpY2tlclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICB3aWR0aDogMTAwJVxuICAuZGl0by1kYXRlLXBpY2tlci1wb3B1cFxuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBkYXRlRm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gZGVmYXVsdEZvcm1hdHMuZGF0ZSB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aW1lOiBmYWxzZVxuICAgICAgfSkgfHwgJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5jYWxlbmRhcj8ubmF2aWdhdGUoZ2V0S2V5TmF2aWdhdGlvbihldmVudCkpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICBpbnB1dC1maWVsZC5kaXRvLXRpbWUtcGlja2VyLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICByZWFkb25seVxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICApXG4gIC8vIGljb24odHlwZT1cInRpbWVcIlxuICAvLyAgIDpjb2xvcj1cImRpc2FibGVkID8gJyNiZmJmYmYnIDogKHRleHQgPyAnIzY2NicgOiAnI2JmYmZiZicpXCJcbiAgLy8gKVxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihcbiAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAwXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLW1pbnV0ZShcbiAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkTWludXRlKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4gICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICByZWY9XCJzZWNvbmRcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2Vjb25kID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgICAvLyAgIDpjb2xvcj1cImRpc2FibGVkID8gJyNiZmJmYmYnIDogKHRleHQgPyAnIzY2NicgOiAnI2JmYmZiZicpXCJcbiAgICAvLyApXG4gICAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgIClcbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItaG91cihcbiAgICAgICAgICByZWY9XCJob3VyXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZEhvdXIoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgICAgcmVmPVwibWludXRlXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMVwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwibWludXRlID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQoXG4gICAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICAgIClcbiAgICAgICAgICBsaShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZFNlY29uZChpbmRleCAtIDEpXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIHdpZHRoOiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBtYXgtd2lkdGg6IDE2MHB4XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG5cbiAgJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0OiAyNHB4XG4gIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC5kaXRvLWljb24tdGltZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiA3cHhcbiAgICAgICAgaGVpZ2h0OiAxMDAlXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXBcbiAgICBsaXN0LXN0eWxlOiBub25lXG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgIG92ZXJmbG93OiBoaWRkZW5cblxuICAuZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgIGZsb2F0OiBsZWZ0XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXdpZHRoOiAwIDFweCAwXG4gICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpXG4gICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICY6bGFzdC1jaGlsZFxuICAgICAgYm9yZGVyLXJpZ2h0OiAwXG4gICAgdWxcbiAgICAgIG92ZXJmbG93LXg6IGhpZGRlblxuICAgICAgb3ZlcmZsb3cteTogYXV0b1xuICAgICAgbGlzdC1zdHlsZTogbm9uZVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1hcmdpbjogMFxuICAgICAgLy8gSGlkZSBzY3JvbGxiYXI6XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveFxuICAgICAgcGFkZGluZzogMCAxN3B4IDAgMFxuICAgICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAmID4gbGlcbiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlblxuICAgICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgICAmLnNlbGVjdGVkLFxuICAgICAgICAmLnNlbGVjdGVkOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmLmRpc2FibGVkXG4gICAgICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgICAgICAmLmRpc2FibGVkOmhvdmVyXG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHJpZ2dlciBmcm9tICcuL1RyaWdnZXIudnVlJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCB7XG4gIGNvcHlEYXRlLCBzY3JvbGxUbywgc2V0U2VsZWN0aW9uLCBnZXRLZXlOYXZpZ2F0aW9uXG59IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGlvbjogMCxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZVxuICAgICAgICA/IGAke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLmhvdXIpfToke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLm1pbnV0ZSl9OiR7XG4gICAgICAgICAgdGhpcy5sZWZ0UGFkKHRoaXMuc2Vjb25kKX1gXG4gICAgICAgIDogJydcbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGNvcHlEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgwKVxuICAgICAgfVxuICAgICAgaWYgKCFuZXdWYWwgIT09ICFvbGRWYWwpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUocGFyYW0pIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29weURhdGUodGhpcy5jdXJyZW50RGF0ZSwgcGFyYW0pXG4gICAgfSxcblxuICAgIHVwZGF0ZVNlbGVjdGlvbihmb3JjZSA9IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5zaG93UG9wdXAgfHwgZm9yY2UpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAzICogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuJHJlZnMuaW5wdXQsIHN0YXJ0LCBzdGFydCArIDIpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY3JvbGxBbGwoZHVyYXRpb24gPSAxMDApIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgLy8gRmlyc3QgYW5kIGFsc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW5cbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdGFyZ2V0LnNjcm9sbEhlaWdodCAvICh0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoICsgNilcbiAgICAgICAgICBzY3JvbGxUbyh0YXJnZXQsIE1hdGgucm91bmQodmFsdWUgKiBsaW5lSGVpZ2h0KSwgZHVyYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsKCdob3VyJywgdGhpcy5ob3VyKVxuICAgICAgICBzY3JvbGwoJ21pbnV0ZScsIHRoaXMubWludXRlKVxuICAgICAgICBzY3JvbGwoJ3NlY29uZCcsIHRoaXMuc2Vjb25kKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IFsnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJ11bdGhpcy5zZWxlY3Rpb25dXG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgY29uc3QgeyBob3IsIHZlciwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICAgIGlmIChob3IpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0aW9uICsgaG9yXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPVxuICAgICAgICAgICAgdmFsdWUgPCAwID8gMlxuICAgICAgICAgICAgOiB2YWx1ZSA+IDIgPyAwXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH0gZWxzZSBpZiAodmVyKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW3NlbGVjdGVkXSArIHZlclxuICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0aGlzLiRyZWZzW3NlbGVjdGVkXS5jaGlsZHJlblxuICAgICAgICAgIHRoaXNbc2VsZWN0ZWRdID1cbiAgICAgICAgICAgIHZhbHVlIDwgMCA/IHZhbHVlICsgbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlID49IGxlbmd0aCA/IHZhbHVlIC0gbGVuZ3RoXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudGVyKSB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChob3IgfHwgdmVyIHx8IGVudGVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odHJ1ZSlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihcbiAgcmVmPVwicGlja2VyXCJcbilcbiAgLmRpdG8tcGlja2VycyhcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgKVxuICAgIGRhdGUtcGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgdGltZS1waWNrZXIoXG4gICAgICByZWY9XCJ0aW1lXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgOnNob3cuc3luYz1cInNob3dUaW1lXCJcbiAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBkaXNhYmxlZCB9XCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1kYXRlLXRpbWUtcGlja2VyKFxuICAgIHJlZj1cInBpY2tlclwiXG4gIClcbiAgICAuZGl0by1waWNrZXJzKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gICAgKVxuICAgICAgZGF0ZS1waWNrZXIoXG4gICAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgICAgOnNob3cuc3luYz1cInNob3dEYXRlXCJcbiAgICAgICAgQGZvY3VzPVwiZGF0ZUZvY3VzZWQgPSB0cnVlXCJcbiAgICAgICAgQGJsdXI9XCJkYXRlRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICAgIClcbiAgICAgIHRpbWUtcGlja2VyKFxuICAgICAgICByZWY9XCJ0aW1lXCJcbiAgICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICAgIDpzaG93LnN5bmM9XCJzaG93VGltZVwiXG4gICAgICAgIEBmb2N1cz1cInRpbWVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICAgIEBibHVyPVwidGltZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlclxuICAgIC5kaXRvLXBpY2tlcnNcbiAgICAgIEBleHRlbmQgJWlucHV0XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgIC5kaXRvLWRhdGUtcGlja2VyXG4gICAgICB3aWR0aDogNjAlXG4gICAgICBtaW4td2lkdGg6IDYuOWVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwXG4gICAgLmRpdG8tdGltZS1waWNrZXJcbiAgICAgIHdpZHRoOiA0MCVcbiAgICAgIG1pbi13aWR0aDogNS40ZW1cbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIHBhZGRpbmctbGVmdDogMFxuICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKCtuZXdWYWwgIT09ICtvbGRWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGRhdGUpIHtcbiAgICAgIGlmICgrZGF0ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQobmV3VmFsID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignYmx1cicsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIlxuaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaS5kaXRvLWljb24oOmNsYXNzPVwiYGRpdG8taWNvbi0ke25hbWV9YFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4gIC8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Fzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuICAvLyBjb2RlIHRocm91Z2ggYF9pbXBvcnRzYC5cbiAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuICBAZWFjaCAkbmFtZSBpbiAkaWNvbnNcbiAgICAuZGl0by1pY29uLSN7JG5hbWV9XG4gICAgICBAZXh0ZW5kICVpY29uLSN7JG5hbWV9XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFnaW5hdGlvbihcbiAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4pXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwidG90YWwgPiAwXCIpIHt7IGZpcnN0IH19IOKAkyB7eyBsYXN0IH19XG4gICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgfCAgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhZ2luYXRpb24oXG4gICAgdi1pZj1cIm51bVBhZ2VzID4gMVwiXG4gIClcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgICAgdi1pZj1cInNob3dUb3RhbFwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgICAgdGVtcGxhdGUodi1lbHNlKSAwXG4gICAgICB8ICAvIHt7IHRvdGFsIH19XG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1mb3I9XCJwYWdlIGluIHBhZ2VSYW5nZVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgICAgOmRpc2FibGVkPVwicGFnZS5kaXNhYmxlZFwiXG4gICAgICApXG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1pZj1cInBhZ2UudGV4dFwiXG4gICAgICAgICkge3sgcGFnZS50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFnaW5hdGlvblxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsXG4gICAgICArZWxsaXBzaXNcbiAgICAgIG1hcmdpbjogMCAwLjVlbVxuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHRcbiAgICAuZGl0by1idXR0b25cbiAgICAgIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwc1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgcGFkZGluZzogMCAwLjVlbVxuICAgICAgJi1wcmV2LFxuICAgICAgJi1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tYXJyb3dcbiAgICAgICYtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuICAgICAgJi1lbGxpcHNpcy1wcmV2LFxuICAgICAgJi1lbGxpcHNpcy1uZXh0XG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXNcbiAgICAgICAgJjpob3Zlcjo6YmVmb3JlXG4gICAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9uc1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgICAgJjpmb2N1c1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgICY6YWN0aXZlXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuICAgICAgJi1lbGxpcHNpcy1wcmV2OjpiZWZvcmVcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIHBhZ2U6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxIH0sXG4gICAgcGFnZVNpemU6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAxMCB9LFxuICAgIHNob3dUb3RhbDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlUmFuZ2U6IFtdLFxuICAgICAgc2hvd1ByZXY6IHRydWUsXG4gICAgICBzaG93TmV4dDogdHJ1ZSxcbiAgICAgIG51bVBhZ2VzOiAwLFxuICAgICAgY3VycmVudFBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY3VycmVudFBhZ2U6IHRoaXMucGFnZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZpcnN0KCkge1xuICAgICAgcmV0dXJuICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDFcbiAgICB9LFxuXG4gICAgbGFzdCgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZpcnN0ICsgdGhpcy5jdXJyZW50UGFnZVNpemUgLSAxLCB0aGlzLnRvdGFsKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHRvdGFsOiAndXBkYXRlUGFnZVJhbmdlJyxcbiAgICBzaG93UHJldjogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd05leHQ6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuXG4gICAgcGFnZShwYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZVxuICAgIH0sXG5cbiAgICBwYWdlU2l6ZShwYWdlU2l6ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBwYWdlU2l6ZVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZVNpemUoY3VycmVudFBhZ2VTaXplKSB7XG4gICAgICB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyBjdXJyZW50UGFnZVNpemUpXG4gICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMubnVtUGFnZXNcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgIHRoaXMuJGVtaXQoJ3NpemUtY2hhbmdlJywgdGhpcy5wYWdlLCBjdXJyZW50UGFnZVNpemUpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsICE9PSBvbGRWYWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIG5ld1ZhbClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlXG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplXG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2tQYWdlKHBhZ2UpIHtcbiAgICAgIGlmIChwYWdlLmluZGV4ICYmICFwYWdlLmRpc2FibGVkICYmIHBhZ2UuaW5kZXggIT09IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2UuaW5kZXhcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGFnZUNsYXNzKHBhZ2UpIHtcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSB7XG4gICAgICAgICdkaXRvLXNlbGVjdGVkJzogcGFnZS5hY3RpdmVcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlLnR5cGUpIHtcbiAgICAgICAgY2xhc3Nlc1tgZGl0by1idXR0b24tJHtwYWdlLnR5cGV9YF0gPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3Nlc1xuICAgIH0sXG5cbiAgICB1cGRhdGVQYWdlUmFuZ2UoKSB7XG4gICAgICBjb25zdCB7IHNob3dQcmV2LCBzaG93TmV4dCwgdG90YWwsIGN1cnJlbnRQYWdlU2l6ZSwgY3VycmVudFBhZ2UgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHNob3dMZW5ndGggPSBzaG93UHJldiArIHNob3dOZXh0ICsgMVxuICAgICAgY29uc3QgbnVtUGFnZXMgPSB0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuXG4gICAgICBsZXQgc3RhcnQgPSAxXG4gICAgICBsZXQgZW5kID0gMVxuICAgICAgaWYgKG51bVBhZ2VzIDw9IHNob3dMZW5ndGgpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPD0gc2hvd1ByZXYgKyAxKSB7XG4gICAgICAgIGVuZCA9IHNob3dMZW5ndGhcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBhZ2UgPj0gbnVtUGFnZXMgLSBzaG93TmV4dCkge1xuICAgICAgICBlbmQgPSBudW1QYWdlc1xuICAgICAgICBzdGFydCA9IG51bVBhZ2VzIC0gc2hvd0xlbmd0aCArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0ID0gY3VycmVudFBhZ2UgLSBzaG93UHJldlxuICAgICAgICBlbmQgPSBjdXJyZW50UGFnZSArIHNob3dOZXh0XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2VSYW5nZSA9IFtdXG4gICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgIGluZGV4OiBjdXJyZW50UGFnZSAtIDEsXG4gICAgICAgIHR5cGU6ICdwcmV2JyxcbiAgICAgICAgZGlzYWJsZWQ6IGN1cnJlbnRQYWdlIDw9IDFcbiAgICAgIH0pXG4gICAgICBpZiAoc3RhcnQgPj0gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiAxLCB0ZXh0OiAxIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgPiAyKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogTWF0aC5tYXgoMSwgY3VycmVudFBhZ2UgLSAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLXByZXYnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgYWN0aXZlOiBpID09PSBjdXJyZW50UGFnZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGVuZCA8IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWluKG51bVBhZ2VzLCBjdXJyZW50UGFnZSArIDEwKSxcbiAgICAgICAgICB0eXBlOiAnZWxsaXBzaXMtbmV4dCdcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPD0gbnVtUGFnZXMgLSAxKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHsgaW5kZXg6IG51bVBhZ2VzLCB0ZXh0OiBudW1QYWdlcyB9KVxuICAgICAgfVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgKyAxLFxuICAgICAgICB0eXBlOiAnbmV4dCcsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA+PSBudW1QYWdlc1xuICAgICAgfSlcblxuICAgICAgdGhpcy5wYWdlUmFuZ2UgPSBwYWdlUmFuZ2VcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zd2l0Y2goXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKVxuICAuZGl0by1zd2l0Y2gtcGFuZVxuICAgIGlucHV0KFxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXN3aXRjaChcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIGlucHV0KFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9XCJpbnB1dFwiXG4gICAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICBzcGFuLmRpdG8tc3dpdGNoLWxhYmVsKFxuICAgICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgICApIHt7IGxhYmVscy5jaGVja2VkIHx8ICdvbicgfX1cbiAgICAgICAgc2xvdChcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICBuYW1lPVwidW5jaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLy8gVXNlIHdob2xlIG11bHRpcGxlcyBvZiBgcmVtYCBmb3Igc2l6ZXMgYW5kIGBweGAgbWFyZ2lucy9wYWRkaW5nIGFsb25nXG4gICAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLiBgcmVtYCBpcyBuZWVkZWQgYmVjYXVzZSB3ZVxuICAgIC8vIGNoYW5nZSBgZm9udC1zaXplYCBpbnNpZGUgYC5kaXRvLXN3aXRjaC1idXR0b25gXG4gICAgLS1zd2l0Y2gtd2lkdGg6IDRyZW1cbiAgICAtLXN3aXRjaC1oZWlnaHQ6IDJyZW1cbiAgICAtLXN3aXRjaC1tYXJnaW46IDJweFxuICAgIC0tc3dpdGNoLXBhZGRpbmc6IDNweFxuICAgIC0tc3dpdGNoLXNwZWVkOiAzMDBtc1xuICAgIC0tbGFiZWwtbWFyZ2luOiAwLjVlbVxuXG4gICAgLS13aWR0aDogY2FsYyh2YXIoLS1zd2l0Y2gtd2lkdGgpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKVxuICAgIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKVxuICAgIC0tb2Zmc2V0OiBjYWxjKHZhcigtLXdpZHRoKSAtIHZhcigtLWhlaWdodCkpXG5cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICBoZWlnaHQ6IHZhcigtLXN3aXRjaC1oZWlnaHQpXG4gICAgLy8gVG8gbWFrZSBpbmxpbmUgbGFiZWxzIGFwcGVhciBvbiBjb25zaXN0ZW50IGJhc2VsaW5lOlxuICAgIHZlcnRpY2FsLWFsaWduOiAtMjUlXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgd2lkdGg6IHZhcigtLXdpZHRoKVxuICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpXG4gICAgLmRpdG8tc3dpdGNoLXBhbmUsXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICB0b3A6IDUwJVxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpXG4gICAgaW5wdXRcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgYXBwZWFyYW5jZTogbm9uZVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuM3MsIGJhY2tncm91bmQtY29sb3IgLjNzXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAvLyBTZXQgZm9udC1zaXplIHRvIGhlaWdodCwgc28gd2UgY2FuIHVzZSB3aWR0aC9oZWlnaHQgPSAxZW0gZm9yIGNpcmNsZTpcbiAgICAgIGZvbnQtc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSlcbiAgICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICBsZWZ0OiB2YXIoLS1zd2l0Y2gtcGFkZGluZylcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG4gICAgICBib3JkZXItcmFkaXVzOiAwLjVlbVxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKVxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pXG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgJi5kaXRvLWNoZWNrZWRcbiAgICAgIGlucHV0XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpXG4gICAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgICAgbGVmdDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgICByaWdodDogdW5zZXRcbiAgICAmLmRpdG8tZGlzYWJsZWRcbiAgICAgIEBleHRlbmQgJWJ1dHRvbi1kaXNhYmxlZFxuICAgICY6Zm9jdXMtd2l0aGluOm5vdCg6aG92ZXIpXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxzOiB7IHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZDogdGhpcy52YWx1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCB7IGNoZWNrZWQsIGRpc2FibGVkIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jaGVja2VkJzogY2hlY2tlZCxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsczogeyBjaGVja2VkLCB1bmNoZWNrZWQgfSA9IHt9IH0gPSB0aGlzXG4gICAgICAvLyBDYWxjdWxhdGUgYC0tc3dpdGNoLXdpZHRoYCBpbiBgcmVtYCwgYmFzZWQgb24gbGFiZWwgbGVuZ3RoLlxuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoMCwgY2hlY2tlZD8ubGVuZ3RoLCB1bmNoZWNrZWQ/Lmxlbmd0aClcbiAgICAgIHJldHVybiB7XG4gICAgICAgICctLXN3aXRjaC13aWR0aCc6IGxlbmd0aCA/IGAke2xlbmd0aCAqIDEuNX1yZW1gIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBpZCwgbmFtZSwgZGlzYWJsZWQsICRhdHRycyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgaWQsIG5hbWUsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKHZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZVxuICAgIH0sXG5cbiAgICBjaGVja2VkKGNoZWNrZWQpIHtcbiAgICAgIGlmIChjaGVja2VkICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAkZHVyYXRpb246IDAuMTVzXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlLFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIHRyYW5zaXRpb246IGhlaWdodCAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgLmhlaWdodC1lbnRlci1hY3RpdmVcbiAgICBhbmltYXRpb246IHNsaWRlLWVudGVyICRkdXJhdGlvbiAkZWFzZU91dFF1YXJ0XG4gIC5oZWlnaHQtbGVhdmUtYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1sZWF2ZSAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWVudGVyLFxuICAuaGVpZ2h0LWxlYXZlLXRvXG4gICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuXG4gIHByb3BzOiB7XG4gICAgZW5hYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICByZW5kZXI6IChjcmVhdGVFbGVtZW50LCBjb250ZXh0KSA9PiBjcmVhdGVFbGVtZW50KFxuICAgICd0cmFuc2l0aW9uJyxcbiAgICBjb250ZXh0LnByb3BzLmVuYWJsZWRcbiAgICAgID8ge1xuICAgICAgICBwcm9wczogeyBuYW1lOiAnaGVpZ2h0JyB9LFxuICAgICAgICBvbjogZXZlbnRzXG4gICAgICB9XG4gICAgICA6IHt9LFxuICAgIGNvbnRleHQuY2hpbGRyZW5cbiAgKVxufVxuXG5jb25zdCBzZXRTdHlsZSA9IChlbGVtZW50LCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSlcblxuLy8gRm9yY2UgcmVwYWludCB0byBtYWtlIHN1cmUgdGhlIGFuaW1hdGlvbiBpcyB0cmlnZ2VyZWQgY29ycmVjdGx5LlxuY29uc3QgZm9yY2VSZXBhaW50ID0gZWxlbWVudCA9PiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodFxuXG5jb25zdCBldmVudHMgPSB7XG4gIGFmdGVyRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEEgdGltZXBvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6ICdhdXRvJyB9KSlcbiAgfSxcblxuICBlbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIGxlYXZlKGVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pXG4gICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG4iXSwibmFtZXMiOlsicmVuZGVyIiwic3RhdGljUmVuZGVyRm5zIiwiX192dWUyX3NjcmlwdCJdLCJtYXBwaW5ncyI6Ijs7QUFBTyxpQ0FBaUMsSUFBSTtBQUMxQyxRQUFNLE1BQU07QUFDWixRQUFNLE1BQU07QUFDWixRQUFNLE9BQU8sSUFBSTtBQUVqQixNQUFJLFVBQVUsSUFBSSxnQkFBZ0IsU0FBWSxJQUFJLGNBQzdDLEtBQUksbUJBQW1CLEtBQUssY0FBYyxNQUFNO0FBQ3JELE1BQUksVUFBVSxJQUFJLGdCQUFnQixTQUFZLElB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QSxJQUNBLGNBQUEsRUFBQSxNQUFBLFVBQUEsU0FBQSxNQUFBLE1BQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxNQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFVBQUEsRUFBQSxjQUFBLGVBQUEsZUFBQSxLQUFBLE1BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQUEsQ0FBQTtBQUFBLE1BQ0EsV0FBQSxDQUFBO0FBQUEsTUFDQSxjQUNBLEtBQUEsU0FFQSxTQUFBLElBQUEsS0FBQSxHQUFBLEVBQUEsTUFBQSxHQUFBLFFBQUEsR0FBQSxRQUFBLEdBQUE7QUFBQSxNQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxjQUFBO0FBQUEsSUFDQSxjQUFBO0FBQUEsSUFFQSxNQUFBLFFBQUEsUUFBQTtBQUNBLFVBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGFBQUEsZUFBQSxVQUFBLElBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxLQUFBLE1BQUE7QUFDQSxXQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsZ0JBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxTQUFBO0FBQUEsSUFDQSxjQUFBLE9BQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSw2QkFDQSxLQUFBLFNBQUEsVUFBQSxLQUFBLE1BQUEsU0FBQSxLQUNBLEtBQUEsYUFBQSxZQUFBLE1BQUEsS0FBQSxNQUFBLFlBQUE7QUFBQSxRQUNBLDhCQUNBLFVBQUEsS0FBQSxhQUFBLFNBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsNkJBQ0EsS0FBQSxTQUFBLFNBQUEsS0FBQSxNQUFBLFlBQUE7QUFBQSxRQUNBLDhCQUNBLFNBQUEsS0FBQSxhQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxXQUFBO0FBQ0EsV0FBQSxlQUFBLFNBQUEsS0FBQSxjQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBLE1BQUE7QUFDQSxXQUFBLFFBQUE7QUFBQSxRQUNBLE1BQUEsS0FBQSxhQUFBLFlBQUEsSUFBQSxPQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxNQUFBO0FBQ0EsV0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxNQUFBO0FBQ0EsWUFBQSxFQUFBLGlCQUFBO0FBQ0EsWUFBQSxFQUFBLE1BQUEsVUFBQSxLQUFBLGFBQ0EsYUFBQSxZQUFBLEdBQ0EsYUFBQSxTQUFBLElBQUEsSUFDQTtBQUNBLFdBQUEsUUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLEtBQUEsS0FBQSxJQUNBLEtBQUEsWUFBQSxNQUFBLEtBQUEsR0FDQSxLQUFBLGFBQUEsUUFBQSxDQUNBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQSxNQUFBO0FBQ0EsV0FBQSxRQUFBO0FBQUEsUUFDQSxNQUFBLEtBQUEsYUFBQSxZQUFBLElBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBLE1BQUEsT0FBQSxPQUFBLE9BQUE7QUFDQSxVQUFBLFVBQUEsWUFBQTtBQUNBLFlBQUEsTUFBQTtBQUNBLGVBQUEsUUFBQTtBQUFBLFlBQ0EsTUFBQSxLQUFBLFlBQUE7QUFBQSxZQUNBLE9BQUEsS0FBQSxTQUFBO0FBQUEsWUFDQSxLQUFBLEtBQUEsUUFBQTtBQUFBLFVBQ0EsQ0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUNBLGVBQUEsZUFBQTtBQUFBLFFBQ0E7QUFDQSxhQUFBLE1BQUEsU0FBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQSxPQUFBO0FBQ0EsV0FBQSxRQUFBLEtBQUE7QUFDQSxXQUFBLFFBQUEsRUFBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQSxNQUFBO0FBQ0EsV0FBQSxRQUFBLE9BQUE7QUFDQSxXQUFBLFFBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBLE9BQUE7QUFDQSxVQUFBLFFBQUEsSUFBQTtBQUNBO0FBQ0EsZ0JBQUE7QUFBQSxNQUNBLFdBQUEsUUFBQSxHQUFBO0FBQ0E7QUFDQSxnQkFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBLEVBQUEsTUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBLEVBQUEsTUFBQSxPQUFBLE9BQUE7QUFDQSxhQUFBLEtBQUEsZUFBQSxLQUFBLFFBQUE7QUFBQSxRQUNBLE1BQUEsUUFBQTtBQUFBLFFBQ0EsT0FBQSxTQUFBO0FBQUEsUUFDQSxLQUFBLE9BQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBLE1BQUE7QUFDQSxZQUFBLE9BQUEsS0FBQSxxQkFBQSxLQUFBLFlBQUEsQ0FBQTtBQUNBLGFBQUEsR0FBQSxlQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBLE1BQUEsT0FBQTtBQUNBLFlBQUEsY0FBQSxDQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxFQUFBO0FBRUEsYUFBQSxVQUFBLEtBQUEsRUFBQSxRQUFBLFFBQUEsQ0FBQSxRQUFBLE1BQUEsT0FBQSxPQUNBLEtBQ0EsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHFCQUFBLE1BQUE7QUFDQSxZQUFBLFVBQUEsS0FBQSxTQUFBO0FBQ0EsYUFBQSxDQUFBLEdBQUEsUUFBQSxNQUFBLEdBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUEsRUFBQSxLQUFBLEtBQUEsU0FBQTtBQUNBLFlBQUEsRUFBQSxhQUFBLGlCQUFBO0FBQ0EsVUFBQSxPQUFBLEtBQUE7QUFDQSxnQkFBQTtBQUFBLGVBQ0E7QUFDQSxpQkFBQSxRQUFBO0FBQUEsY0FDQSxLQUFBLGFBQUEsUUFBQSxJQUFBLE1BQUEsTUFBQTtBQUFBLFlBQ0EsQ0FBQTtBQUNBO0FBQUEsZUFDQTtBQUNBLGlCQUFBLFFBQUE7QUFBQSxjQUNBLE9BQUEsYUFBQSxTQUFBLElBQUEsTUFBQSxNQUFBO0FBQUEsWUFDQSxDQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsUUFBQTtBQUFBLGNBQ0EsTUFBQSxhQUFBLFlBQUEsSUFBQSxNQUFBLE1BQUE7QUFBQSxZQUNBLENBQUE7QUFDQTtBQUFBO0FBRUEsZUFBQTtBQUFBLE1BQ0EsV0FBQSxPQUFBO0FBQ0EsZ0JBQUE7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsV0FBQSxZQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsUUFBQSxLQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsaUJBQUEsUUFBQSxPQUFBO0FBQ0E7QUFBQTtBQUVBLGVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUE7QUFDQSxXQUFBLFlBQUEsQ0FBQTtBQUNBLFdBQUEsWUFBQSxDQUFBO0FBRUEsWUFBQSxFQUFBLGlCQUFBO0FBQ0EsWUFBQSxPQUFBLGFBQUEsWUFBQTtBQUNBLFlBQUEsUUFBQSxhQUFBLFNBQUE7QUFDQSxZQUFBLFlBQUEsS0FBQSxxQkFBQSxJQUFBO0FBQ0EsZUFBQSxJQUFBLEdBQUEsSUFBQSxJQUFBLEtBQUE7QUFDQSxhQUFBLFVBQUEsS0FBQSxZQUFBLENBQUE7QUFBQSxNQUNBO0FBQ0EsWUFBQSxvQkFBQSxJQUFBLEtBQUEsTUFBQSxPQUFBLENBQUE7QUFDQSxVQUFBLGVBQUEsa0JBQUEsT0FBQSxJQUFBO0FBQ0EsVUFBQSxpQkFBQSxHQUFBO0FBQ0EsdUJBQUE7QUFBQSxNQUNBO0FBQ0EsWUFBQSxXQUFBLEtBQUEsWUFBQSxNQUFBLEtBQUE7QUFDQSxVQUFBLGVBQUEsR0FBQTtBQUNBLGNBQUEsWUFBQSxLQUFBLGFBQUEsTUFBQSxRQUFBLENBQUE7QUFDQSxjQUFBLG9CQUFBLEtBQUEsWUFDQSxVQUFBLE1BQ0EsVUFBQSxLQUNBO0FBQ0EsaUJBQUEsSUFBQSxHQUFBLElBQUEsY0FBQSxLQUFBO0FBQ0EsZ0JBQUEsTUFBQSxvQkFBQSxlQUFBLElBQUE7QUFDQSxnQkFBQSxPQUFBLElBQUEsS0FBQSxVQUFBLE1BQUEsVUFBQSxPQUFBLEdBQUE7QUFDQSxlQUFBLFVBQUEsS0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLE9BQUEsS0FBQSxhQUFBLElBQUEsSUFBQSxhQUFBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFFQSxZQUFBLFFBQUEsSUFBQSxLQUFBO0FBQ0EsZUFBQSxJQUFBLEdBQUEsS0FBQSxVQUFBLEtBQUE7QUFDQSxjQUFBLE9BQUEsSUFBQSxLQUFBLE1BQUEsT0FBQSxDQUFBO0FBQ0EsY0FBQSxRQUFBLFdBQUEsU0FDQSxNQUFBLFFBQUEsTUFBQSxLQUNBLE1BQUEsWUFBQSxNQUFBLFFBQ0EsTUFBQSxTQUFBLE1BQUE7QUFDQSxjQUFBLFFBQUEsTUFBQSxLQUFBLEtBQUEsSUFBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLFVBQ0EsS0FBQSxhQUFBLElBQUEsSUFBQSxhQUNBLE1BQUEsWUFBQSxJQUFBLFlBQ0E7QUFDQSxhQUFBLFVBQUEsS0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUVBLFlBQUEsZ0JBQUEsS0FBQSxLQUFBLFVBQUE7QUFDQSxVQUFBLGdCQUFBLEdBQUE7QUFDQSxjQUFBLFlBQUEsS0FBQSxhQUFBLE1BQUEsUUFBQSxDQUFBO0FBQ0EsaUJBQUEsSUFBQSxHQUFBLEtBQUEsZUFBQSxLQUFBO0FBQ0EsZ0JBQUEsT0FBQSxJQUFBLEtBQUEsVUFBQSxNQUFBLFVBQUEsT0FBQSxDQUFBO0FBQ0EsZ0JBQUEsUUFBQSxLQUFBLGFBQUEsSUFBQSxJQUFBLGFBQUE7QUFDQSxlQUFBLFVBQUEsS0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBO0FB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SUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0Esc0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsTUFBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLE1BQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxFQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxlQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EseUJBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsWUFBQSxVQUFBO0FBQUEsUUFDQSxDQUFBLGNBQUEsVUFBQSxLQUFBLFNBQUEsTUFBQTtBQUFBLE1BQ0E7QUFDQSxVQUFBLEtBQUEsYUFBQTtBQUNBLGdCQUFBLEtBQUEsZUFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsS0FBQSxTQUFBLFlBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLEtBQUEsTUFBQTtBQUNBLFdBQUEsWUFBQSxRQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBLFFBQUEsUUFBQTtBQUNBLFVBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGFBQUEsTUFBQSxlQUFBLE1BQUE7QUFDQSxZQUFBLFFBQUE7QUFDQSxlQUFBLFVBQUEsTUFBQSxLQUFBLGVBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxVQUFBLEVBQUEsU0FBQSxVQUFBLEtBQUE7QUFDQSxRQUFBLEtBQUEsWUFBQSxTQUFBO0FBQ0EsWUFBQSxTQUFBLFFBQUEsY0FBQSxpQkFBQTtBQUNBLFVBQUEsUUFBQTtBQUNBLGFBQUEsY0FBQSxVQUFBLFFBQUE7QUFBQSxVQUNBLE9BQUEsTUFBQTtBQUNBLGlCQUFBLFlBQUE7QUFBQSxVQUNBO0FBQUEsVUFDQSxNQUFBLE1BQUE7QUFDQSxpQkFBQSxZQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBRUEsUUFBQSxLQUFBLHdCQUFBLENBQUEsS0FBQSxZQUFBO0FBSUEsV0FBQSxjQUFBLFVBQUEsUUFBQTtBQUFBLFFBQ0EsU0FBQSxXQUFBO0FBQ0EsY0FDQSxLQUFBLGFBQ0EsQ0FBQSxNQUFBLFNBQUEsTUFBQSxNQUFBLEtBQ0EsQ0FBQSxRQUFBLFNBQUEsTUFBQSxNQUFBLEdBQ0E7QUFDQSxpQkFBQSxZQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUVBLE1BQUEsTUFBQTtBQUNBLGVBQUEsWUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBRUEsUUFBQSxLQUFBLFlBQUE7QUFDQSxXQUFBLFlBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsWUFBQSxLQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZ0JBQUE7O0FBQ0EsZUFBQSxnQkFBQSxtQkFBQTtBQUNBLGVBQUEsZ0JBQUEsbUJBQUE7QUFDQSxTQUFBLGtCQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsaUJBQUE7QUFDQSxZQUFBLEVBQUEsU0FBQSxVQUFBLEtBQUE7QUFDQSxVQUFBLEtBQUEsUUFBQSxNQUFBLGdCQUFBLEdBQUE7QUFDQSxtQkFBQSxNQUFBLEtBQUEsZUFBQSxHQUFBLENBQUE7QUFDQTtBQUFBLE1BQ0E7QUFFQSxZQUFBLFNBQUEsU0FBQSxLQUFBLE1BQUEsSUFDQSxLQUFBLE1BQUEsS0FBQSxVQUNBLEtBQUE7QUFDQSxVQUFBLFFBQUE7QUFFQSxjQUFBLEtBQUEsV0FBQSxRQUFBLFVBQUEsTUFBQTtBQUNBLFdBQUEsTUFBQSxRQUFBLGlCQUFBLE1BQUEsRUFBQTtBQUFBLE1BQ0E7QUFFQSxZQUFBLFNBQUEsV0FBQSxTQUFBLHNCQUFBO0FBQ0EsWUFBQSxjQUFBLE9BQUEsT0FBQSxPQUFBO0FBQ0EsWUFBQSxhQUFBLE9BQUEsTUFBQSxPQUFBO0FBQ0EsWUFBQSxlQUFBLE9BQUE7QUFDQSxZQUFBLGdCQUFBLE9BQUE7QUFDQSxZQUFBLGFBQUEsTUFBQTtBQUNBLFlBQUEsY0FBQSxNQUFBO0FBRUEsVUFBQSxDQUFBLE9BQUEsU0FBQSxLQUFBLGVBQUEsTUFBQSxHQUFBLEtBQUEsQ0FBQTtBQUNBLFVBQUEsS0FBQSxZQUFBO0FBQ0EsY0FBQSxXQUFBLE9BQUE7QUFDQSxjQUFBLFlBQUEsT0FBQTtBQUNBLFlBQUEsVUFBQSxPQUFBO0FBQ0EsY0FBQSxhQUFBLGFBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBLFdBQUEsVUFBQSxVQUFBO0FBQ0EsY0FBQSxZQUFBLGFBQUEsZ0JBQUEsYUFBQTtBQUNBLG9CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsV0FBQSxVQUFBLFFBQUE7QUFDQSxjQUFBLGNBQUEsWUFBQTtBQUNBLG9CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsV0FBQSxVQUFBLFNBQUE7QUFDQSxjQUFBLFdBQUEsY0FBQSxlQUFBLFlBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBRUEsWUFBQSxVQUFBLE9BQUE7QUFDQSxjQUFBLFlBQUEsYUFBQSxhQUFBO0FBQ0Esb0JBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxXQUFBLFVBQUEsVUFBQTtBQUNBLGNBQUEsYUFBQSxnQkFBQSxhQUFBO0FBQ0Esb0JBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxXQUFBLFVBQUEsUUFBQTtBQUNBLGNBQUEsV0FBQSxjQUFBLFlBQUE7QUFDQSxvQkFBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBLFdBQUEsVUFBQSxTQUFBO0FBQ0EsY0FBQSxjQUFBLGVBQUEsWUFBQTtBQUNBLG9CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBRUEsVUFBQSxPQUFBO0FBQ0EsVUFBQSxNQUFBO0FBQ0EsY0FBQTtBQUFBLGFBQ0E7QUFDQSxpQkFBQTtBQUNBO0FBQUEsYUFDQTtBQUNBLGtCQUFBO0FBQ0E7QUFBQSxhQUNBO0FBQ0Esa0JBQUE7QUFDQTtBQUFBLGFBQ0E7QUFDQSxpQkFBQTtBQUNBO0FBQUE7QUFFQSxjQUFBO0FBQUEsYUFDQTtBQUNBLGtCQUFBLGFBQUE7QUFDQTtBQUFBLGFBQ0E7QUFDQSxpQkFBQSxjQUFBO0FBQ0E7QUFBQTtBQUVBLFVBQUEsS0FBQSxPQUFBO0FBQ0EsWUFBQSxVQUFBLE9BQUE7QUFDQSxpQkFBQTtBQUFBLFFBQ0EsV0FBQSxVQUFBLFVBQUE7QUFDQSxpQkFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQ0EsVUFBQSxVQUFBLFdBQUEsU0FBQTtBQUNBLGNBQUEsZ0JBQUEsUUFBQSxzQkFBQTtBQUNBLGdCQUFBLGNBQUEsY0FBQTtBQUNBLGVBQUEsYUFBQSxjQUFBO0FBQUEsTUFDQTtBQUNBLFlBQUEsTUFBQSxPQUFBLEdBQUE7QUFDQSxZQUFBLE1BQUEsTUFBQSxHQUFBO0FBRUEsV0FBQSxNQUFBLG1CQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLFdBQUEsS0FBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxVQUFBLENBQUEsS0FBQSxVQUFBO0FBQ0EsYUFBQSxZQUFBLENBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBLE9BQUE7QUFDQSxVQUFBLENBQUEsS0FBQSxVQUFBO0FBQ0EscUJBQUEsS0FBQSxlQUFBO0FBQ0EsWUFBQSxPQUFBO0FBQ0EsZUFBQSxZQUFBO0FBQUEsUUFDQSxPQUFBO0FBQ0EsY0FBQSxLQUFBLFdBQUE7QUFDQSxpQkFBQSxrQkFBQSxXQUFBLE1BQUE7QUFDQSxtQkFBQSxZQUFBO0FBQUEsWUFDQSxHQUFBLEtBQUEsU0FBQTtBQUFBLFVB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LENBQUEsUUFBQTtBQUNBLGFBQUEsZUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBLE1BQUE7QUFDQSxVQUFBLENBQUEsU0FBQSxDQUFBLEtBQUEsT0FBQTtBQUNBLGFBQUEsVUFBQTtBQUNBLGFBQUEsTUFBQSxTQUFBLElBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsS0FBQSxNQUFBO0FBQ0EsV0FBQSxZQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUEsUUFBQSxRQUFBO0FBQ0EsVUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsYUFBQSxNQUFBLFNBQUEsVUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLFVBQUEsS0FBQSxTQUFBO0FBQ0EsYUFBQSxVQUFBO0FBQ0EsYUFBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFdBQUEsTUFBQTtBQUNBLFdBQUEsZUFBQTtBQUNBLFdBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsT0FBQTs7QUFDQSxVQUFBLFdBQUEsTUFBQSxhQUFBLG1CQUFBLFNBQUEsaUJBQUEsS0FBQSxJQUFBO0FBQ0EsY0FBQSxlQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxXQUFBLE1BQUEsTUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLFdBQUEsTUFBQSxNQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNwSkEsSUFBSUYsV0FBUyxXQUFZO0FBQ3ZCLE1B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LElBQ0EsWUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxjQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLE1BQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxNQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsV0FBQSxHQUFBLFNBQUEsVUFBQTtBQUFBLElBQ0EsY0FBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsTUFBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFVBQUEsU0FBQSxNQUFBLE1BQUE7QUFBQSxJQUNBLGdCQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxNQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsV0FBQSxLQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsZUFDQSxHQUNBLEtBQUEsUUFBQSxLQUFBLElBQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQ0EsS0FBQSxnQkFJQSxTQUFBLElBQUEsS0FBQSxHQUFBLEVBQUEsTUFBQSxHQUFBLFFBQUEsR0FBQSxRQUFBLEdBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBO0FBQUEsTUFDQSxNQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUEsTUFBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBLFFBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxRQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsWUFBQSxXQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQSxRQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsUUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLGVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBO0FBQ0EsVUFBQSxDQUFBLFNBQUEsQ0FBQSxLQUFBLE9BQUE7QUFDQSxhQUFBLFVBQUE7QUFDQSxhQUFBLE1BQUEsU0FBQSxJQUFBO0FBQ0EsYUFBQSxVQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFBQSxJQUVBLFdBQUE7QUFBQSxJQUVBLEtBQUEsTUFBQTtBQUNBLFdBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsUUFBQSxRQUFBO0FBQ0EsVUFBQSxRQUFBO0FBQ0EsYUFBQSxnQkFBQTtBQUNBLGFBQUEsVUFBQSxDQUFBO0FBQUEsTUFDQTtBQUNBLFVBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGFBQUEsTUFBQSxlQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLE1BQUEsU0FBQSxVQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLElBQUEsUUFBQSxNQUFBO0FBQ0EsVUFBQSxLQUFBLFNBQUE7QUFDQSxhQUFBLFVBQUE7QUFDQSxhQUFBLE1BQUEsVUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsUUFBQSxPQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsTUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxPQUFBO0FBQ0EsV0FBQSxlQUFBLFNBQUEsS0FBQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQSxRQUFBLE9BQUE7QUFDQSxVQUFBLEtBQUEsYUFBQSxPQUFBO0FBQ0EsY0FBQSxRQUFBLElBQUEsS0FBQTtBQUNBLGFBQUEsVUFBQSxNQUFBLGFBQUEsS0FBQSxNQUFBLE9BQUEsT0FBQSxRQUFBLENBQUEsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBLFdBQUEsS0FBQTtBQUNBLFlBQUEsU0FBQSxDQUFBLEtBQUEsVUFBQTtBQUNBLGNBQUEsU0FBQSxLQUFBLE1BQUE7QUFDQSxZQUFBLFFBQUE7QUFFQSxnQkFBQSxhQUFBLE9BQUEsZUFBQSxRQUFBLFNBQUEsU0FBQTtBQUNBLG1CQUFBLFFBQUEsS0FBQSxNQUFBLFFBQUEsVUFBQSxHQUFBLFFBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUNBLFdBQUEsVUFBQSxNQUFBO0FBQ0EsZUFBQSxRQUFBLEtBQUEsSUFBQTtBQUNBLGVBQUEsVUFBQSxLQUFBLE1BQUE7QUFDQSxlQUFBLFVBQUEsS0FBQSxNQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxPQUFBO0FBQ0EsWUFBQSxXQUFBLENBQUEsUUFBQSxVQUFBLFFBQUEsRUFBQSxLQUFBO0FBQ0EsVUFBQSxVQUFBO0FBQ0EsY0FBQSxFQUFBLEtBQUEsS0FBQSxVQUFBLGlCQUFBLEtBQUE7QUFDQSxZQUFBLEtBQUE7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QUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsV0FBQSxDQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxpQkFBQSxLQUFBO0FBQUEsTUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsUUFBQTtBQUNBLGFBQUEsTUFBQSxjQUFBLEtBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBLEtBQUEsSUFBQSxLQUFBLFFBQUEsS0FBQSxrQkFBQSxHQUFBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxPQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFFQSxLQUFBLE1BQUE7QUFDQSxXQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBLFVBQUE7QUFDQSxXQUFBLGtCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEsaUJBQUE7QUFDQSxXQUFBLFdBQUEsS0FBQSxLQUFBLEtBQUEsUUFBQSxlQUFBO0FBQ0EsVUFBQSxLQUFBLGNBQUEsS0FBQSxVQUFBO0FBQ0EsYUFBQSxjQUFBLEtBQUE7QUFBQSxNQUNBO0FBQ0EsV0FBQSxnQkFBQTtBQUNBLFdBQUEsTUFBQSxlQUFBLEtBQUEsTUFBQSxlQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLFdBQUEsUUFBQTtBQUNBLGFBQUEsZ0JBQUE7QUFDQSxhQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxjQUFBLEtBQUE7QUFDQSxTQUFBLGtCQUFBLEtBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxnQkFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFlBQUEsTUFBQTtBQUNBLFVBQUEsS0FBQSxTQUFBLENBQUEsS0FBQSxZQUFBLEtBQUEsVUFBQSxLQUFBLGFBQUE7QUFDQSxhQUFBLGNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBLE1BQUE7QUFDQSxZQUFBLFVBQUE7QUFBQSxRQUNBLGlCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQ0EsVUFBQSxLQUFBLE1BQUE7QUFDQSxnQkFBQSxlQUFBLEtBQUEsVUFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUE7QUFDQSxZQUFBLEVBQUEsVUFBQSxVQUFBLE9BQUEsaUJBQUEsZ0JBQUE7QUFDQSxZQUFBLGFBQUEsV0FBQSxXQUFBO0FBQ0EsWUFBQSxXQUFBLEtBQUEsV0FBQSxLQUFBLEtBQUEsUUFBQSxlQUFBO0FBRUEsVUFBQSxRQUFBO0FBQ0EsVUFBQSxNQUFBO0FBQ0EsVUFBQSxZQUFBLFlBQUE7QUFDQSxjQUFBO0FBQUEsTUFDQSxXQUFBLGVBQUEsV0FBQSxHQUFBO0FBQ0EsY0FBQTtBQUFBLE1BQ0EsV0FBQSxlQUFBLFdBQUEsVUFBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQSxXQUFBLGFBQUE7QUFBQSxNQUNBLE9BQUE7QUFDQSxnQkFBQSxjQUFBO0FBQ0EsY0FBQSxjQUFBO0FBQUEsTUFDQTtBQUVBLFlBQUEsWUFBQSxDQUFBO0FBQ0EsZ0JBQUEsS0FBQTtBQUFBLFFBQ0EsT0FBQSxjQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxVQUFBLGVBQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBLFNBQUEsR0FBQTtBQUNBLGtCQUFBLEtBQUEsRUFBQSxPQUFBLEdBQUEsTUFBQSxHQUFBO0FBQUEsTUFDQTtBQUNBLFVBQUEsUUFBQSxHQUFBO0FBQ0Esa0JBQUEsS0FBQTtBQUFBLFVBQ0EsT0FBQSxLQUFBLElBQUEsR0FBQSxjQUFBLEVBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQ0EsZUFBQSxJ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
|