@ditojs/admin 2.94.1 → 2.96.0

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