@ditojs/admin 2.92.0 → 2.94.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/dito-admin.es.js +1668 -1518
  2. package/dist/dito-admin.umd.js +6 -6
  3. package/package.json +14 -15
  4. package/src/components/DitoAccount.vue +7 -1
  5. package/src/components/DitoCreateButton.vue +6 -2
  6. package/src/components/DitoDialog.vue +1 -1
  7. package/src/components/DitoErrors.vue +1 -0
  8. package/src/components/DitoForm.vue +1 -0
  9. package/src/components/DitoFormInner.vue +5 -0
  10. package/src/components/DitoHeader.vue +1 -1
  11. package/src/components/DitoLabel.vue +6 -1
  12. package/src/components/DitoMenu.vue +1 -0
  13. package/src/components/DitoNavigation.vue +1 -1
  14. package/src/components/DitoNotifications.vue +1 -1
  15. package/src/components/DitoPane.vue +3 -0
  16. package/src/components/DitoPanel.vue +2 -0
  17. package/src/components/DitoSchema.vue +1 -0
  18. package/src/components/DitoScopes.vue +1 -0
  19. package/src/components/DitoSpinner.vue +2 -0
  20. package/src/components/DitoTableHead.vue +10 -0
  21. package/src/components/DitoTabs.vue +18 -2
  22. package/src/components/DitoTrail.vue +2 -1
  23. package/src/components/DitoTreeItem.vue +10 -0
  24. package/src/mixins/DitoMixin.js +4 -2
  25. package/src/mixins/PulldownMixin.js +9 -0
  26. package/src/mixins/SortableMixin.js +3 -1
  27. package/src/types/DitoTypeCheckboxes.vue +2 -0
  28. package/src/types/DitoTypeList.vue +2 -0
  29. package/src/types/DitoTypeMultiselect.vue +2 -0
  30. package/src/types/DitoTypeRadio.vue +2 -0
  31. package/src/types/DitoTypeUpload.vue +4 -4
  32. package/src/utils/ui/dist/dito-ui.es.js +2729 -0
  33. package/src/utils/ui/dist/dito-ui.umd.js +2744 -0
  34. package/src/utils/ui/dist/style.css +1139 -0
  35. package/types/index.d.ts +74 -11
  36. package/types/tests/admin.test-d.ts +0 -27
  37. package/types/tests/component-buttons.test-d.ts +0 -44
  38. package/types/tests/component-list.test-d.ts +0 -159
  39. package/types/tests/component-misc.test-d.ts +0 -137
  40. package/types/tests/component-object.test-d.ts +0 -69
  41. package/types/tests/component-section.test-d.ts +0 -174
  42. package/types/tests/component-select.test-d.ts +0 -107
  43. package/types/tests/components.test-d.ts +0 -81
  44. package/types/tests/context.test-d.ts +0 -31
  45. package/types/tests/fixtures.ts +0 -24
  46. package/types/tests/form.test-d.ts +0 -109
  47. package/types/tests/instance.test-d.ts +0 -20
  48. package/types/tests/schema-features.test-d.ts +0 -402
  49. package/types/tests/variance.test-d.ts +0 -125
  50. package/types/tests/view.test-d.ts +0 -146
@@ -0,0 +1,2729 @@
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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LENBQUEsUUFBQTtBQUNBLGFBQUEsZUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBLE1BQUE7QUFDQSxVQUFBLENBQUEsU0FBQSxDQUFBLEtBQUEsT0FBQTtBQUNBLGFBQUEsVUFBQTtBQUNBLGFBQUEsTUFBQSxTQUFBLElBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsS0FBQSxNQUFBO0FBQ0EsV0FBQSxZQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUEsUUFBQSxRQUFBO0FBQ0EsVUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsYUFBQSxNQUFBLFNBQUEsVUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLFVBQUEsS0FBQSxTQUFBO0FBQ0EsYUFBQSxVQUFBO0FBQ0EsYUFBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFdBQUEsTUFBQTtBQUNBLFdBQUEsZUFBQTtBQUNBLFdBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsT0FBQTs7QUFDQSxVQUFBLFdBQUEsTUFBQSxhQUFBLG1CQUFBLFNBQUEsaUJBQUEsS0FBQSxJQUFBO0FBQ0EsY0FBQSxlQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFDQSxXQUFBLE1BQUEsTUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLFdBQUEsTUFBQSxNQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNwSkEsSUFBSUYsV0FBUyxXQUFZO0FBQ3ZCLE1BQUksTUFBSTtBQUNSLE1BQUksS0FBRyxJQUFJO0FBQ1gsTUFBSSxLQUFHLElBQUksTUFBTSxNQUFJO0FBRXJCLFNBQU8sR0FBRyxXQUFXLElBQUksR0FBRztBQUFBLElBQzFCLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxNQUNMLFdBQVc7QUFBQSxNQUNYLFFBQVEsSUFBSTtBQUFBLElBQ2I7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLGVBQWUsU0FBVSxRQUFRO0FBQy9CLFlBQUksWUFBWTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRSxXQUFXO0FBQUEsSUFDWixZQUFZLElBQUk7QUFBQSxJQUNoQixXQUFXLElBQUk7QUFBQSxJQUNmLFVBQVUsSUFBSTtBQUFBLElBQ2QsUUFBUSxJQUFJO0FBQUEsRUFDaEIsR0FBSyxLQUFLLEdBQUcsQ0FBQyxHQUFHLGVBQWUsSUFBSSxHQUFHO0FBQUEsSUFDbkMsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsY0FBYyxJQUFJO0FBQUEsSUFDbkI7QUFBQSxJQUNELE9BQU87QUFBQSxNQUNMLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFNBQVMsSUFBSTtBQUFBLE1BQ2IsWUFBWTtBQUFBLElBQ2I7QUFBQSxJQUNELElBQUk7QUFBQSxNQUNGLFNBQVMsU0FBVSxRQUFRO0FBQ3pCLFlBQUksZUFBZTtBQUFBLE1BQ3BCO0FBQUEsTUFDRCxRQUFRLFNBQVUsUUFBUTtBQUN4QixZQUFJLGVBQWU7QUFBQSxNQUNwQjtBQUFBLE1BQ0QsV0FBVyxJQUFJO0FBQUEsSUFDaEI7QUFBQSxJQUNELE1BQU07QUFBQSxFQUNQLEdBQUUsZUFBZTtBQUFBLElBQ2hCLGFBQWEsSUFBSTtBQUFBLElBQ2pCLFVBQVUsSUFBSTtBQUFBLEVBQ2YsR0FBRSxLQUFLLENBQUMsR0FBRyxHQUFHLE9BQU87QUFBQSxJQUNwQixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxRQUFRO0FBQUEsSUFDVDtBQUFBLElBQ0QsTUFBTTtBQUFBLEVBQ1YsR0FBSyxDQUFDLEdBQUcsT0FBTztBQUFBLElBQ1osYUFBYTtBQUFBLEVBQ2pCLEdBQUssQ0FBQyxHQUFHLE1BQU07QUFBQSxJQUNYLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLElBQUk7QUFBQSxNQUNGLGFBQWEsU0FBVSxRQUFRO0FBQzdCLFlBQUksWUFBWTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUFBLEVBQ0YsR0FBRSxJQUFJLEdBQUcsSUFBSSxTQUFVLFFBQU87QUFDN0IsV0FBTyxDQUFDLElBQUksYUFBYSxTQUFRLENBQUMsSUFBSSxHQUFHLE1BQU07QUFBQSxNQUM3QyxPQUFPO0FBQUEsUUFDTCxVQUFVLElBQUksU0FBUyxTQUFRO0FBQUEsTUFDaEM7QUFBQSxNQUNELElBQUk7QUFBQSxRQUNGLFNBQVMsU0FBVSxRQUFRO0FBQ3pCLGNBQUksT0FBTyxTQUFRO0FBQUEsUUFDcEI7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFFLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLFFBQVEsU0FBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUU7QUFBQSxFQUN0RCxDQUFBLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE9BQU87QUFBQSxJQUNsQixhQUFhO0FBQUEsRUFDakIsR0FBSyxDQUFDLEdBQUcsTUFBTTtBQUFBLElBQ1gsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0YsYUFBYSxTQUFVLFFBQVE7QUFDN0IsWUFBSSxZQUFZO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsRUFDRixHQUFFLElBQUksR0FBRyxJQUFJLFNBQVUsUUFBTztBQUM3QixXQUFPLENBQUMsSUFBSSxlQUFlLFNBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTTtBQUFBLE1BQy9DLE9BQU87QUFBQSxRQUNMLFVBQVUsSUFBSSxXQUFXLFNBQVE7QUFBQSxNQUNsQztBQUFBLE1BQ0QsSUFBSTtBQUFBLFFBQ0YsU0FBUyxTQUFVLFFBQVE7QUFDekIsY0FBSSxTQUFTLFNBQVE7QUFBQSxRQUN0QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksUUFBUSxTQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRTtBQUFBLEVBQ3RELENBQUEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsT0FBTztBQUFBLElBQ2xCLGFBQWE7QUFBQSxFQUNqQixHQUFLLENBQUMsR0FBRyxNQUFNO0FBQUEsSUFDWCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixJQUFJO0FBQUEsTUFDRixhQUFhLFNBQVUsUUFBUTtBQUM3QixZQUFJLFlBQVk7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFBQSxFQUNGLEdBQUUsSUFBSSxHQUFHLElBQUksU0FBVSxRQUFPO0FBQzdCLFdBQU8sQ0FBQyxJQUFJLGVBQWUsU0FBUSxDQUFDLElBQUksR0FBRyxNQUFNO0FBQUEsTUFDL0MsT0FBTztBQUFBLFFBQ0wsVUFBVSxJQUFJLFdBQVcsU0FBUTtBQUFBLE1BQ2xDO0FBQUEsTUFDRCxJQUFJO0FBQUEsUUFDRixTQUFTLFNBQVUsUUFBUTtBQUN6QixjQUFJLFNBQVMsU0FBUTtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFBLElBQ0YsR0FBRSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxRQUFRLFNBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFFO0FBQUEsRUFDekQsQ0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNoQjtBQUVBLElBQUlDLG9CQUFrQixDQUFBO0FBQ3RCRCxTQUFPLGdCQUFnQjs7QUM0QnZCLE1BQUFFLGtCQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsU0FBQSxXQUFBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxNQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLFFBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxjQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLE1BQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxNQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsV0FBQSxHQUFBLFNBQUEsVUFBQTtBQUFBLElBQ0EsY0FBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsTUFBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFVBQUEsU0FBQSxNQUFBLE1BQUE7QUFBQSxJQUNBLGdCQUFBLEVBQUEsTUFBQSxVQUFBLFNBQUEsTUFBQSxNQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGNBQUEsS0FBQTtBQUFBLE1BQ0EsV0FBQSxLQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFVBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEtBQUEsZUFDQSxHQUNBLEtBQUEsUUFBQSxLQUFBLElBQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxNQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQ0EsS0FBQSxnQkFJQSxTQUFBLElBQUEsS0FBQSxHQUFBLEVBQUEsTUFBQSxHQUFBLFFBQUEsR0FBQSxRQUFBLEdBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBO0FBQUEsTUFDQSxNQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLElBQUEsTUFBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUNBLGVBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxJQUFBLFFBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxRQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsWUFBQSxXQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQSxRQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsUUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsTUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLGVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxNQUFBO0FBQ0EsVUFBQSxDQUFBLFNBQUEsQ0FBQSxLQUFBLE9BQUE7QUFDQSxhQUFBLFVBQUE7QUFDQSxhQUFBLE1BQUEsU0FBQSxJQUFBO0FBQ0EsYUFBQSxVQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFBQSxJQUVBLFdBQUE7QUFBQSxJQUVBLEtBQUEsTUFBQTtBQUNBLFdBQUEsWUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsUUFBQSxRQUFBO0FBQ0EsVUFBQSxRQUFBO0FBQ0EsYUFBQSxnQkFBQTtBQUNBLGFBQUEsVUFBQSxDQUFBO0FBQUEsTUFDQTtBQUNBLFVBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGFBQUEsTUFBQSxlQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxhQUFBLE1BQUEsU0FBQSxVQUFBLE1BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLElBQUEsUUFBQSxNQUFBO0FBQ0EsVUFBQSxLQUFBLFNBQUE7QUFDQSxhQUFBLFVBQUE7QUFDQSxhQUFBLE1BQUEsVUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsUUFBQSxPQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsTUFBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxPQUFBO0FBQ0EsV0FBQSxlQUFBLFNBQUEsS0FBQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQSxRQUFBLE9BQUE7QUFDQSxVQUFBLEtBQUEsYUFBQSxPQUFBO0FBQ0EsY0FBQSxRQUFBLElBQUEsS0FBQTtBQUNBLGFBQUEsVUFBQSxNQUFBLGFBQUEsS0FBQSxNQUFBLE9BQUEsT0FBQSxRQUFBLENBQUEsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBLFdBQUEsS0FBQTtBQUNBLFlBQUEsU0FBQSxDQUFBLEtBQUEsVUFBQTtBQUNBLGNBQUEsU0FBQSxLQUFBLE1BQUE7QUFDQSxZQUFBLFFBQUE7QUFFQSxnQkFBQSxhQUFBLE9BQUEsZUFBQSxRQUFBLFNBQUEsU0FBQTtBQUNBLG1CQUFBLFFBQUEsS0FBQSxNQUFBLFFBQUEsVUFBQSxHQUFBLFFBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUNBLFdBQUEsVUFBQSxNQUFBO0FBQ0EsZUFBQSxRQUFBLEtBQUEsSUFBQTtBQUNBLGVBQUEsVUFBQSxLQUFBLE1BQUE7QUFDQSxlQUFBLFVBQUEsS0FBQSxNQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxPQUFBO0FBQ0EsWUFBQSxXQUFBLENBQUEsUUFBQSxVQUFBLFFBQUEsRUFBQSxLQUFBO0FBQ0EsVUFBQSxVQUFBO0FBQ0EsY0FBQSxFQUFBLEtBQUEsS0FBQSxVQUFBLGlCQUFBLEtBQUE7QUFDQSxZQUFBLEtBQUE7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QUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsV0FBQSxDQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQUEsTUFDQSxpQkFBQSxLQUFBO0FBQUEsTUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsUUFBQTtBQUNBLGFBQUEsTUFBQSxjQUFBLEtBQUEsS0FBQSxrQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBLEtBQUEsSUFBQSxLQUFBLFFBQUEsS0FBQSxrQkFBQSxHQUFBLEtBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxPQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFFQSxLQUFBLE1BQUE7QUFDQSxXQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBLFVBQUE7QUFDQSxXQUFBLGtCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEsaUJBQUE7QUFDQSxXQUFBLFdBQUEsS0FBQSxLQUFBLEtBQUEsUUFBQSxlQUFBO0FBQ0EsVUFBQSxLQUFBLGNBQUEsS0FBQSxVQUFBO0FBQ0EsYUFBQSxjQUFBLEtBQUE7QUFBQSxNQUNBO0FBQ0EsV0FBQSxnQkFBQTtBQUNBLFdBQUEsTUFBQSxlQUFBLEtBQUEsTUFBQSxlQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQSxRQUFBLFFBQUE7QUFDQSxVQUFBLFdBQUEsUUFBQTtBQUNBLGFBQUEsZ0JBQUE7QUFDQSxhQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxjQUFBLEtBQUE7QUFDQSxTQUFBLGtCQUFBLEtBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsU0FBQSxnQkFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFlBQUEsTUFBQTtBQUNBLFVBQUEsS0FBQSxTQUFBLENBQUEsS0FBQSxZQUFBLEtBQUEsVUFBQSxLQUFBLGFBQUE7QUFDQSxhQUFBLGNBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBLE1BQUE7QUFDQSxZQUFBLFVBQUE7QUFBQSxRQUNBLGlCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQ0EsVUFBQSxLQUFBLE1BQUE7QUFDQSxnQkFBQSxlQUFBLEtBQUEsVUFBQTtBQUFBLE1BQ0E7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsa0JBQUE7QUFDQSxZQUFBLEVBQUEsVUFBQSxVQUFBLE9BQUEsaUJBQUEsZ0JBQUE7QUFDQSxZQUFBLGFBQUEsV0FBQSxXQUFBO0FBQ0EsWUFBQSxXQUFBLEtBQUEsV0FBQSxLQUFBLEtBQUEsUUFBQSxlQUFBO0FBRUEsVUFBQSxRQUFBO0FBQ0EsVUFBQSxNQUFBO0FBQ0EsVUFBQSxZQUFBLFlBQUE7QUFDQSxjQUFBO0FBQUEsTUFDQSxXQUFBLGVBQUEsV0FBQSxHQUFBO0FBQ0EsY0FBQTtBQUFBLE1BQ0EsV0FBQSxlQUFBLFdBQUEsVUFBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQSxXQUFBLGFBQUE7QUFBQSxNQUNBLE9BQUE7QUFDQSxnQkFBQSxjQUFBO0FBQ0EsY0FBQSxjQUFBO0FBQUEsTUFDQTtBQUVBLFlBQUEsWUFBQSxDQUFBO0FBQ0EsZ0JBQUEsS0FBQTtBQUFBLFFBQ0EsT0FBQSxjQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxVQUFBLGVBQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBLFNBQUEsR0FBQTtBQUNBLGtCQUFBLEtBQUEsRUFBQSxPQUFBLEdBQUEsTUFBQSxHQUFBO0FBQUEsTUFDQTtBQUNBLFVBQUEsUUFBQSxHQUFBO0FBQ0Esa0JBQUEsS0FBQTtBQUFBLFVBQ0EsT0FBQSxLQUFBLElBQUEsR0FBQSxjQUFBLEVBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQ0EsZUFBQSxJ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