myrta-ui 13.0.23 → 13.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/form/input-date-time/helpers/formatting-moscow-timezone.mjs +23 -15
- package/esm2020/lib/components/form/input-date-time/input-date-time.component.mjs +52 -44
- package/fesm2015/myrta-ui.mjs +103 -123
- package/fesm2015/myrta-ui.mjs.map +1 -1
- package/fesm2020/myrta-ui.mjs +103 -123
- package/fesm2020/myrta-ui.mjs.map +1 -1
- package/lib/components/form/input-date-time/helpers/formatting-moscow-timezone.d.ts +11 -3
- package/package.json +1 -1
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
import { Timezone } from '../enum/timezone';
|
|
2
1
|
import dayjs from 'dayjs';
|
|
3
2
|
import timezone from 'dayjs/plugin/timezone';
|
|
4
3
|
import utc from 'dayjs/plugin/utc';
|
|
5
4
|
dayjs.extend(utc);
|
|
6
5
|
dayjs.extend(timezone);
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Превращает ISO строку (UTC) в объект Date,
|
|
8
|
+
* часы и минуты которого соответствуют Московскому времени,
|
|
9
|
+
* чтобы календарь отобразил их "как есть".
|
|
10
|
+
*/
|
|
11
|
+
export const formattingFromMoscowTimezone = (date, tz = 'Europe/Moscow') => {
|
|
12
|
+
if (!date)
|
|
13
|
+
return new Date();
|
|
14
|
+
// Если пришло 'default', используем Москву
|
|
15
|
+
const targetTz = tz === 'default' ? 'Europe/Moscow' : tz;
|
|
16
|
+
// 1. Получаем момент времени в целевой таймзоне
|
|
17
|
+
const targetDate = dayjs(date).tz(targetTz);
|
|
18
|
+
// 2. Создаем "поддельную" локальную дату для календаря
|
|
19
|
+
return new Date(targetDate.year(), targetDate.month(), targetDate.date(), targetDate.hour(), targetDate.minute());
|
|
9
20
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
else {
|
|
19
|
-
return utcTime.add(Math.abs(offsetDifferenceMinutes), 'minute').toISOString();
|
|
20
|
-
}
|
|
21
|
+
/**
|
|
22
|
+
* Берет компоненты даты и интерпретирует их строго как Московское время,
|
|
23
|
+
* возвращая "честный" ISO UTC для сервера.
|
|
24
|
+
*/
|
|
25
|
+
export const formattingToMoscowTimezone = (dateModel, timeModel) => {
|
|
26
|
+
const dateStr = `${dateModel.year}-${dateModel.month}-${dateModel.day} ${timeModel.hour}:${timeModel.minute}`;
|
|
27
|
+
// Интерпретируем строку как МСК и переводим в UTC ISO
|
|
28
|
+
return dayjs.tz(dateStr, 'YYYY-MM-DD HH:mm', 'Europe/Moscow').toISOString();
|
|
21
29
|
};
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGluZy1tb3Njb3ctdGltZXpvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC1kYXRlLXRpbWUvaGVscGVycy9mb3JtYXR0aW5nLW1vc2Nvdy10aW1lem9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFFbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXZCOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFhLGVBQWUsRUFBUSxFQUFFO0lBQzVGLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0lBRTdCLDJDQUEyQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUV6RCxnREFBZ0Q7SUFDaEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU1Qyx1REFBdUQ7SUFDdkQsT0FBTyxJQUFJLElBQUksQ0FDYixVQUFVLENBQUMsSUFBSSxFQUFFLEVBQ2pCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFDbEIsVUFBVSxDQUFDLElBQUksRUFBRSxFQUNqQixVQUFVLENBQUMsSUFBSSxFQUFFLEVBQ2pCLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FDcEIsQ0FBQztBQUNKLENBQUMsQ0FBQTtBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQ3hDLFNBQWMsRUFDZCxTQUFjLEVBQ04sRUFBRTtJQUNWLE1BQU0sT0FBTyxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDOUcsc0RBQXNEO0lBQ3RELE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUUsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcblxyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQstGA0LDRidCw0LXRgiBJU08g0YHRgtGA0L7QutGDIChVVEMpINCyINC+0LHRitC10LrRgiBEYXRlLCBcclxuICog0YfQsNGB0Ysg0Lgg0LzQuNC90YPRgtGLINC60L7RgtC+0YDQvtCz0L4g0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YIg0JzQvtGB0LrQvtCy0YHQutC+0LzRgyDQstGA0LXQvNC10L3QuCxcclxuICog0YfRgtC+0LHRiyDQutCw0LvQtdC90LTQsNGA0Ywg0L7RgtC+0LHRgNCw0LfQuNC7INC40YUgXCLQutCw0Log0LXRgdGC0YxcIi5cclxuICovXHJcbmV4cG9ydCBjb25zdCBmb3JtYXR0aW5nRnJvbU1vc2Nvd1RpbWV6b25lID0gKGRhdGU6IGFueSwgdHo6IHN0cmluZyA9ICdFdXJvcGUvTW9zY293Jyk6IERhdGUgPT4ge1xyXG4gIGlmICghZGF0ZSkgcmV0dXJuIG5ldyBEYXRlKCk7XHJcbiAgXHJcbiAgLy8g0JXRgdC70Lgg0L/RgNC40YjQu9C+ICdkZWZhdWx0Jywg0LjRgdC/0L7Qu9GM0LfRg9C10Lwg0JzQvtGB0LrQstGDXHJcbiAgY29uc3QgdGFyZ2V0VHogPSB0eiA9PT0gJ2RlZmF1bHQnID8gJ0V1cm9wZS9Nb3Njb3cnIDogdHo7XHJcbiAgXHJcbiAgLy8gMS4g0J/QvtC70YPRh9Cw0LXQvCDQvNC+0LzQtdC90YIg0LLRgNC10LzQtdC90Lgg0LIg0YbQtdC70LXQstC+0Lkg0YLQsNC50LzQt9C+0L3QtVxyXG4gIGNvbnN0IHRhcmdldERhdGUgPSBkYXlqcyhkYXRlKS50eih0YXJnZXRUeik7XHJcbiAgXHJcbiAgLy8gMi4g0KHQvtC30LTQsNC10LwgXCLQv9C+0LTQtNC10LvRjNC90YPRjlwiINC70L7QutCw0LvRjNC90YPRjiDQtNCw0YLRgyDQtNC70Y8g0LrQsNC70LXQvdC00LDRgNGPXHJcbiAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgdGFyZ2V0RGF0ZS55ZWFyKCksXHJcbiAgICB0YXJnZXREYXRlLm1vbnRoKCksXHJcbiAgICB0YXJnZXREYXRlLmRhdGUoKSxcclxuICAgIHRhcmdldERhdGUuaG91cigpLFxyXG4gICAgdGFyZ2V0RGF0ZS5taW51dGUoKVxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQkdC10YDQtdGCINC60L7QvNC/0L7QvdC10L3RgtGLINC00LDRgtGLINC4INC40L3RgtC10YDQv9GA0LXRgtC40YDRg9C10YIg0LjRhSDRgdGC0YDQvtCz0L4g0LrQsNC6INCc0L7RgdC60L7QstGB0LrQvtC1INCy0YDQtdC80Y8sXHJcbiAqINCy0L7Qt9Cy0YDQsNGJ0LDRjyBcItGH0LXRgdGC0L3Ri9C5XCIgSVNPIFVUQyDQtNC70Y8g0YHQtdGA0LLQtdGA0LAuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZm9ybWF0dGluZ1RvTW9zY293VGltZXpvbmUgPSAoXHJcbiAgZGF0ZU1vZGVsOiBhbnksIFxyXG4gIHRpbWVNb2RlbDogYW55XHJcbik6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgZGF0ZVN0ciA9IGAke2RhdGVNb2RlbC55ZWFyfS0ke2RhdGVNb2RlbC5tb250aH0tJHtkYXRlTW9kZWwuZGF5fSAke3RpbWVNb2RlbC5ob3VyfToke3RpbWVNb2RlbC5taW51dGV9YDtcclxuICAvLyDQmNC90YLQtdGA0L/RgNC10YLQuNGA0YPQtdC8INGB0YLRgNC+0LrRgyDQutCw0Log0JzQodCaINC4INC/0LXRgNC10LLQvtC00LjQvCDQsiBVVEMgSVNPXHJcbiAgcmV0dXJuIGRheWpzLnR6KGRhdGVTdHIsICdZWVlZLU1NLUREIEhIOm1tJywgJ0V1cm9wZS9Nb3Njb3cnKS50b0lTT1N0cmluZygpO1xyXG59Il19
|
|
@@ -4,9 +4,7 @@ import AirDatepicker from 'air-datepicker';
|
|
|
4
4
|
import { InputDateTimeSizesEnum } from './input-date-time.enum';
|
|
5
5
|
import { validateDateModel, validateTimeModel } from './helpers/validate-value-models';
|
|
6
6
|
import { dateModelConstant, timeModelConstant } from './constants/value-models';
|
|
7
|
-
import { dateModelValueParse, timeModelValueParse } from './helpers/value-parser';
|
|
8
7
|
import { markPosition } from './helpers/cursor-position';
|
|
9
|
-
import { cleanDate } from './helpers/clean-date';
|
|
10
8
|
import { formattingFromMoscowTimezone, formattingToMoscowTimezone } from './helpers/formatting-moscow-timezone';
|
|
11
9
|
import { formattingFromModels } from './helpers/formatting-from-models';
|
|
12
10
|
import dayjs from 'dayjs';
|
|
@@ -117,19 +115,26 @@ export class InputDateTimeComponent {
|
|
|
117
115
|
done();
|
|
118
116
|
};
|
|
119
117
|
},
|
|
120
|
-
onSelect: ({ date, formattedDate
|
|
121
|
-
if (date instanceof Date
|
|
122
|
-
|
|
123
|
-
this.
|
|
118
|
+
onSelect: ({ date, formattedDate }) => {
|
|
119
|
+
if (date instanceof Date) {
|
|
120
|
+
// Библиотека выдает "локальную" дату. Нам нужны только её компоненты.
|
|
121
|
+
this.dateModel = {
|
|
122
|
+
view: dayjs(date).format('DD.MM.YYYY'),
|
|
123
|
+
day: dayjs(date).format('DD'),
|
|
124
|
+
month: dayjs(date).format('MM'),
|
|
125
|
+
year: dayjs(date).format('YYYY'),
|
|
126
|
+
invalid: false
|
|
127
|
+
};
|
|
128
|
+
this.timeModel = {
|
|
129
|
+
view: dayjs(date).format('HH:mm'),
|
|
130
|
+
hour: dayjs(date).format('HH'),
|
|
131
|
+
minute: dayjs(date).format('mm'),
|
|
132
|
+
invalid: false
|
|
133
|
+
};
|
|
124
134
|
this._checkExtraTime();
|
|
125
|
-
|
|
126
|
-
this.updateValueModel(this.dateModel, this.timeModel);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
else if (typeof formattedDate === 'object') {
|
|
130
|
-
this.updateValuesArray(date);
|
|
135
|
+
this.updateValueModel(this.dateModel, this.timeModel);
|
|
131
136
|
}
|
|
132
|
-
}
|
|
137
|
+
}
|
|
133
138
|
});
|
|
134
139
|
}
|
|
135
140
|
ngOnChanges(changes) {
|
|
@@ -219,20 +224,22 @@ export class InputDateTimeComponent {
|
|
|
219
224
|
this.innerInvalid = false;
|
|
220
225
|
this.innerInvalidMessage = '';
|
|
221
226
|
}
|
|
222
|
-
updateValueModel(dateModel, timeModel
|
|
227
|
+
updateValueModel(dateModel, timeModel) {
|
|
223
228
|
if (dateModel.view === '') {
|
|
224
229
|
this.clickToIconClear();
|
|
225
230
|
}
|
|
226
231
|
else {
|
|
227
|
-
|
|
228
|
-
const formattingDate = formattingToMoscowTimezone(
|
|
232
|
+
// Генерируем ISO, считая, что введенные цифры — это МСК
|
|
233
|
+
const formattingDate = formattingToMoscowTimezone(dateModel, timeModel);
|
|
229
234
|
const isValid = this.checkingInvalid(formattingDate, this.maxDate, this.minDate);
|
|
230
|
-
if (
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
235
|
+
if (isValid) {
|
|
236
|
+
// Обновляем точку выбора в календаре
|
|
237
|
+
if (this.dt) {
|
|
238
|
+
this.dt.selectDate(formattingFromMoscowTimezone(formattingDate), {
|
|
239
|
+
updateTime: this.timepicker,
|
|
240
|
+
silent: true
|
|
241
|
+
});
|
|
242
|
+
}
|
|
236
243
|
this.updateValue(formattingDate);
|
|
237
244
|
}
|
|
238
245
|
}
|
|
@@ -305,32 +312,33 @@ export class InputDateTimeComponent {
|
|
|
305
312
|
}
|
|
306
313
|
}
|
|
307
314
|
writeValue(outsideValue) {
|
|
308
|
-
if (outsideValue) {
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
315
|
+
if (outsideValue && typeof outsideValue === 'string') {
|
|
316
|
+
this.value = outsideValue;
|
|
317
|
+
// Получаем "московский" взгляд на пришедшую дату
|
|
318
|
+
const moscowDate = dayjs(outsideValue).tz(this.timezone === 'default' ? 'Europe/Moscow' : this.timezone);
|
|
319
|
+
this.dateModel = {
|
|
320
|
+
view: moscowDate.format('DD.MM.YYYY'),
|
|
321
|
+
day: moscowDate.format('DD'),
|
|
322
|
+
month: moscowDate.format('MM'),
|
|
323
|
+
year: moscowDate.format('YYYY'),
|
|
324
|
+
invalid: false
|
|
325
|
+
};
|
|
326
|
+
this.timeModel = {
|
|
327
|
+
view: moscowDate.format('HH:mm'),
|
|
328
|
+
hour: moscowDate.format('HH'),
|
|
329
|
+
minute: moscowDate.format('mm'),
|
|
330
|
+
invalid: false
|
|
331
|
+
};
|
|
332
|
+
// Синхронизируем AirDatepicker (передаем "поддельную" локальную дату)
|
|
333
|
+
if (this.dt) {
|
|
334
|
+
const fakeLocalDate = formattingFromMoscowTimezone(outsideValue);
|
|
335
|
+
this.dt.selectDate(fakeLocalDate, { silent: true });
|
|
336
|
+
this.dt.setViewDate(fakeLocalDate);
|
|
326
337
|
}
|
|
327
338
|
}
|
|
328
339
|
else {
|
|
329
340
|
if (this.dt) {
|
|
330
341
|
this.dt.clear({ silent: true });
|
|
331
|
-
this.value = '';
|
|
332
|
-
this.dateModel = dateModelConstant;
|
|
333
|
-
this.timeModel = timeModelConstant;
|
|
334
342
|
}
|
|
335
343
|
}
|
|
336
344
|
}
|
|
@@ -431,4 +439,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
431
439
|
}], blurred: [{
|
|
432
440
|
type: Output
|
|
433
441
|
}] } });
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LWRhdGUtdGltZS9pbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vaW5wdXQtZGF0ZS10aW1lL2lucHV0LWRhdGUtdGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1UsdUJBQXVCLEVBQ3RDLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLGFBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWEsc0JBQXNCLEVBQTJCLE1BQU0sd0JBQXdCLENBQUM7QUFDcEcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0s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O2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUVVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFFVSxTQUFTO3NCQUF4QixLQUFLO2dCQUVVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBRUwsT0FBTztzQkFBdkIsTUFBTTtnQkFDVSxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgQWlyRGF0ZXBpY2tlciBmcm9tICdhaXItZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IEV4dHJhVGltZSwgSW5wdXREYXRlVGltZVNpemVzRW51bSwgSW5wdXREYXRlVGltZVNpemVzVHlwZXMgfSBmcm9tICcuL2lucHV0LWRhdGUtdGltZS5lbnVtJztcclxuaW1wb3J0IHsgRGF0ZU1vZGVsLCBUaW1lTW9kZWwsIHZhbGlkYXRlRGF0ZU1vZGVsLCB2YWxpZGF0ZVRpbWVNb2RlbCB9IGZyb20gJy4vaGVscGVycy92YWxpZGF0ZS12YWx1ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBkYXRlTW9kZWxDb25zdGFudCwgdGltZU1vZGVsQ29uc3RhbnQgfSBmcm9tICcuL2NvbnN0YW50cy92YWx1ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBkYXRlTW9kZWxWYWx1ZVBhcnNlLCB0aW1lTW9kZWxWYWx1ZVBhcnNlIH0gZnJvbSAnLi9oZWxwZXJzL3ZhbHVlLXBhcnNlcic7XHJcbmltcG9ydCB7IG1hcmtQb3NpdGlvbiB9IGZyb20gJy4vaGVscGVycy9jdXJzb3ItcG9zaXRpb24nO1xyXG5pbXBvcnQgeyBjbGVhbkRhdGUgfSBmcm9tICcuL2hlbHBlcnMvY2xlYW4tZGF0ZSc7XHJcbmltcG9ydCB7IGZvcm1hdHRpbmdGcm9tTW9zY293VGltZXpvbmUsIGZvcm1hdHRpbmdUb01vc2Nvd1RpbWV6b25lIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm1hdHRpbmctbW9zY293LXRpbWV6b25lJztcclxuaW1wb3J0IHsgVGltZXpvbmVUeXBlIH0gZnJvbSAnLi9lbnVtL3RpbWV6b25lJztcclxuaW1wb3J0IHsgZm9ybWF0dGluZ0Zyb21Nb2RlbHMgfSBmcm9tICcuL2hlbHBlcnMvZm9ybWF0dGluZy1mcm9tLW1vZGVscyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIsIFBsYWNlbWVudCB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElucHV0RGF0ZVRpbWVWYWx1ZVR5cGVzLCBJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQgfSBmcm9tICcuL21vZGVscy9pbnB1dC1kYXRlLXRpbWUubW9kZWwnO1xyXG5cclxuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcblxyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWlucHV0LWRhdGUtdGltZScsXHJcbiAgdGVtcGxhdGVVcmw6ICdpbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydpbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50cy5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0RGF0ZVRpbWVDb21wb25lbnQpLCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dERhdGVUaW1lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHVibGljIGR0OiBhbnk7XHJcbiAgcHVibGljIHZhbHVlOiBhbnkgPSAnJztcclxuICBwdWJsaWMgZGF0ZU1vZGVsOiBEYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICBwdWJsaWMgdGltZU1vZGVsOiBUaW1lTW9kZWwgPSB0aW1lTW9kZWxDb25zdGFudDtcclxuXHJcbiAgcHVibGljIGlubmVySW52YWxpZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbm5lckludmFsaWRNZXNzYWdlID0gJyc7XHJcblxyXG4gIC8vIFNBVkUgU1RBVEVcclxuICBwdWJsaWMgdXVpZDogc3RyaW5nID0gdXVpZHY0KCk7XHJcbiAgQElucHV0KCkgcHVibGljIGZpZWxkczogRmllbGRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc2l6ZTogSW5wdXREYXRlVGltZVNpemVzVHlwZXMgPSAnbGFyZ2UnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DbGFzc2VzID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGRhdGVMYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aW1lTGFiZWwgPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgZGF0ZVBsYWNlaG9sZGVyID0gJ9C00LQu0LzQvC7Qs9Cz0LPQsyc7XHJcbiAgQElucHV0KCkgcHVibGljIHRpbWVQbGFjZWhvbGRlciA9ICcwMDowMCc7XHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHRpbWVwaWNrZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgcmFuZ2UgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgdGltZXpvbmU6IFRpbWV6b25lVHlwZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGlzTWFudWFsSW5wdXQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBhZGRNaW5UaW1lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGFkZE1heFRpbWUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYWRkTWluVGltZU9iaiE6IEV4dHJhVGltZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYWRkTWF4VGltZU9iaiE6IEV4dHJhVGltZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVWYWxpZGF0ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlSW5jbHVkZXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGNvbnRhaW5lciA9ICdkaXYucGFnZS13cmFwcGVyJztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaW52YWxpZE1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGNoZWNrSW52YWxpZDogdHJ1ZSB8IGZhbHNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1heERhdGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBjYWxlbmRhclBvc2l0aW9uOiBQbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0J1xyXG5cclxuICBAVmlld0NoaWxkKCdkYXRlSW5wdXQnKSBkYXRlSW5wdXQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVUeXBlcz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPElucHV0RGF0ZVRpbWVWYWx1ZVdpdGhJZD4gPSBuZXcgRXZlbnRFbWl0dGVyPElucHV0RGF0ZVRpbWVWYWx1ZVdpdGhJZD4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIGJsdXJyZWQ6IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+KCk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZHQgPSBuZXcgQWlyRGF0ZXBpY2tlcih0aGlzLmRhdGVJbnB1dC5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXIsXHJcbiAgICAgIGxvY2FsZToge1xyXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5NTS55eXl5JyxcclxuICAgICAgICB0aW1lRm9ybWF0OiAnSEg6bW0nLFxyXG4gICAgICB9LFxyXG4gICAgICBhdXRvQ2xvc2U6IHRydWUsXHJcbiAgICAgIHJhbmdlOiB0aGlzLnJhbmdlLFxyXG4gICAgICBtdWx0aXBsZURhdGVzU2VwYXJhdG9yOiAnIC0gJyxcclxuICAgICAgdGltZXBpY2tlcjogdGhpcy50aW1lcGlja2VyLFxyXG4gICAgICBtaW5EYXRlOiB0aGlzLm1pbkRhdGUgPyBmb3JtYXR0aW5nRnJvbU1vc2Nvd1RpbWV6b25lKHRoaXMubWluRGF0ZSwgdGhpcy50aW1lem9uZSkgOiAnJyxcclxuICAgICAgbWF4RGF0ZTogdGhpcy5tYXhEYXRlID8gZm9ybWF0dGluZ0Zyb21Nb3Njb3dUaW1lem9uZSh0aGlzLm1heERhdGUsIHRoaXMudGltZXpvbmUpIDogJycsXHJcbiAgICAgIGlubGluZTogdGhpcy5pbmxpbmUsXHJcbiAgICAgIHBvc2l0aW9uOiAoeyRkYXRlcGlja2VyLCAkdGFyZ2V0LCAkcG9pbnRlciwgZG9uZX0pID0+IHtcclxuICAgICAgICBsZXQgcG9wcGVyID0gY3JlYXRlUG9wcGVyKCR0YXJnZXQsICRkYXRlcGlja2VyLCB7XHJcbiAgICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuY2FsZW5kYXJQb3NpdGlvbixcclxuICAgICAgICAgIG1vZGlmaWVyczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxyXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcclxuICAgICAgICAgICAgICAgICAgdG9wOiA2NFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdvZmZzZXQnLFxyXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG9mZnNldDogWzAsIDEwXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdhcnJvdycsXHJcbiAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogJHBvaW50ZXJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBsZXRlSGlkZSgpIHtcclxuICAgICAgICAgIHBvcHBlci5kZXN0cm95KCk7XHJcbiAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuICAgICAgb25TZWxlY3Q6ICh7ZGF0ZSwgZm9ybWF0dGVkRGF0ZSwgZGF0ZXBpY2tlcn0pID0+IHtcclxuICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgdHlwZW9mIGZvcm1hdHRlZERhdGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGVNb2RlbCA9IHZhbGlkYXRlRGF0ZU1vZGVsKGZvcm1hdHRlZERhdGUpO1xyXG4gICAgICAgICAgdGhpcy50aW1lTW9kZWwgPSB2YWxpZGF0ZVRpbWVNb2RlbChmb3JtYXR0ZWREYXRlKTtcclxuXHJcbiAgICAgICAgICB0aGlzLl9jaGVja0V4dHJhVGltZSgpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWRNb2RlbHMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0dGVkRGF0ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVzQXJyYXkoZGF0ZSBhcyBEYXRlW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgaWYgKGNoYW5nZXNbJ21heERhdGUnXSkge1xyXG4gICAgICAgIHRoaXMuZHQudXBkYXRlKHttYXhEYXRlOiB0aGlzLm1heERhdGV9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVZhbGlkYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnZhbGlkID0gdGhpcy5pbm5lckludmFsaWQ7XHJcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQodGhpcy52YWx1ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICAgIGlmIChpbnZhbGlkICYmIGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoYW5nZXNbJ21pbkRhdGUnXSkge1xyXG4gICAgICAgIHRoaXMuZHQudXBkYXRlKHttaW5EYXRlOiB0aGlzLm1pbkRhdGV9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVZhbGlkYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnZhbGlkID0gdGhpcy5pbm5lckludmFsaWQ7XHJcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQodGhpcy52YWx1ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICAgIGlmIChpbnZhbGlkICYmIGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXREYXRlVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmRhdGVNb2RlbC52aWV3fSR7dGhpcy50aW1lTW9kZWwudmlldyA/ICcgJyArIHRoaXMudGltZU1vZGVsLnZpZXcgOiAnJ31gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7SW5wdXREYXRlVGltZVNpemVzRW51bVt0aGlzLnNpemVdfSAke3RoaXMuY3VzdG9tQ2xhc3Nlc30gJHt0aGlzLmNoZWNrVmFsaWRDbGFzc2VzfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBpc1ZhbGlkTW9kZWxzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmRhdGVNb2RlbC5pbnZhbGlkICYmICh0aGlzLnRpbWVwaWNrZXIgPyAhdGhpcy50aW1lTW9kZWwuaW52YWxpZCA6IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc1ZpZXdDbGVhbkljb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmRhdGVJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hlY2tWYWxpZENsYXNzZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrSW52YWxpZCA9PT0gZmFsc2UgPyAnbXJ4LWlucHV0LWNoZWNrZWQtc3VjY2VzcycgOiB0aGlzLmNoZWNrSW52YWxpZCA9PT0gdHJ1ZSA/ICdtcngtaW5wdXQtY2hlY2tlZC1lcnJvcicgOiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrRXh0cmFUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuYWRkTWF4VGltZSAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSAnMjMnO1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5taW51dGUgPSAnNTknO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkTWluVGltZSAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSAnMDAnO1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5taW51dGUgPSAnMDAnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkTWF4VGltZU9iaiAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSB0aGlzLmFkZE1heFRpbWVPYmouaG91cjtcclxuICAgICAgdGhpcy50aW1lTW9kZWwubWludXRlID0gdGhpcy5hZGRNYXhUaW1lT2JqLm1pbnV0ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZE1pblRpbWVPYmogJiYgIXRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5ob3VyID0gdGhpcy5hZGRNaW5UaW1lT2JqLmhvdXI7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLm1pbnV0ZSA9IHRoaXMuYWRkTWluVGltZU9iai5taW51dGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xpY2tUb0ljb25DYWxlbmRhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja1RvSWNvbkNsZWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kdC5zZXRWaWV3RGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIHRoaXMuZHQgJiYgdGhpcy5kdC5jbGVhcigpO1xyXG4gICAgdGhpcy5kYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICAgIHRoaXMudGltZU1vZGVsID0gdGltZU1vZGVsQ29uc3RhbnQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLnJhbmdlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUoJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlubmVySW52YWxpZE1lc3NhZ2UgPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVNb2RlbChkYXRlTW9kZWw6IERhdGVNb2RlbCwgdGltZU1vZGVsOiBUaW1lTW9kZWwsIGJvbDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZGF0ZU1vZGVsLnZpZXcgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tUb0ljb25DbGVhcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IGZvcm1hdHRpbmdGcm9tTW9kZWxzKGRhdGVNb2RlbCwgdGltZU1vZGVsLCB0aGlzLnRpbWVwaWNrZXIgfHwgdGhpcy5hZGRNYXhUaW1lIHx8IHRoaXMuYWRkTWluVGltZSk7XHJcblxyXG4gICAgICBjb25zdCBmb3JtYXR0aW5nRGF0ZSA9IGZvcm1hdHRpbmdUb01vc2Nvd1RpbWV6b25lKGRhdGUudG9JU09TdHJpbmcoKSwgdGhpcy50aW1lem9uZSk7XHJcblxyXG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQoZm9ybWF0dGluZ0RhdGUsIHRoaXMubWF4RGF0ZSwgdGhpcy5taW5EYXRlKTtcclxuXHJcbiAgICAgIGlmIChkYXRlLmlzVmFsaWQoKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5kdC5zZWxlY3REYXRlKGZvcm1hdHRpbmdGcm9tTW9kZWxzKGRhdGVNb2RlbCwgdGltZU1vZGVsLCB0aGlzLnRpbWVwaWNrZXIpLnRvSVNPU3RyaW5nKCksIHtcclxuICAgICAgICAgIHVwZGF0ZVRpbWU6IHRoaXMudGltZXBpY2tlcixcclxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZHQuc2V0Vmlld0RhdGUoZm9ybWF0dGluZ0Zyb21Nb2RlbHMoZGF0ZU1vZGVsLCB0aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShmb3JtYXR0aW5nRGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzQXJyYXkgPSAodmFsdWVzOiBhbnlbXSkgPT4ge1xyXG4gICAgY29uc3QgZGF0ZXMgPSB2YWx1ZXMubWFwKGRhdGUgPT4ge1xyXG4gICAgICByZXR1cm4gZm9ybWF0dGluZ1RvTW9zY293VGltZXpvbmUoZGF0ZS50b0lTT1N0cmluZygpLCB0aGlzLnRpbWV6b25lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmFsdWUoZGF0ZXMpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaW52YWxpZE1lc3NhZ2VPbihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gdHJ1ZTtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludmFsaWRNZXNzYWdlT2ZmKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbm5lckludmFsaWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZURhdGVWYWx1ZShkYXRlSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgdGhpcy5kYXRlTW9kZWwgPSB2YWxpZGF0ZURhdGVNb2RlbChkYXRlSW5wdXQudmFsdWUpO1xyXG4gICAgdGhpcy50aW1lTW9kZWwgPSB2YWxpZGF0ZVRpbWVNb2RlbChkYXRlSW5wdXQudmFsdWUpO1xyXG5cclxuICAgIGRhdGVJbnB1dC52YWx1ZSA9IHRoaXMuZ2V0RGF0ZVZhbHVlO1xyXG4gICAgZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBkYXRlSW5wdXQuc2VsZWN0aW9uRW5kID0gZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG5cclxuICAgIHRoaXMuX2NoZWNrRXh0cmFUaW1lKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZE1vZGVscyB8fCB0aGlzLmRhdGVNb2RlbC52aWV3ID09PSAnJykge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlTW9kZWwodGhpcy5kYXRlTW9kZWwsIHRoaXMudGltZU1vZGVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja1RvSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmIChpbnB1dC5zZWxlY3Rpb25TdGFydCA9PT0gaW5wdXQuc2VsZWN0aW9uRW5kICYmIChpbnB1dC5zZWxlY3Rpb25TdGFydCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCA+IDApKSB7XHJcbiAgICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IG1hcmtQb3NpdGlvbihpbnB1dC5zZWxlY3Rpb25TdGFydCwgaW5wdXQuc2VsZWN0aW9uRW5kKTtcclxuICAgICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcclxuICAgICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gZW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja2luZ0ludmFsaWQodmFsdWU6IHN0cmluZywgbWF4RGF0ZTogc3RyaW5nLCBtaW5EYXRlOiBzdHJpbmcpIHtcclxuICAgIGxldCB2YWxpZE1heERhdGUgPSAnJztcclxuICAgIGxldCB2YWxpZE1pbkRhdGUgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHZhbGlkTWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcclxuICAgICAgdmFsaWRNaW5EYXRlID0gdGhpcy5taW5EYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgIHZhbGlkTWF4RGF0ZSA9IGRheWpzKHRoaXMubWF4RGF0ZSkudHoodGhpcy50aW1lem9uZSkuaG91cigyMykubWludXRlKDU5KS5zZWNvbmQoNTkpLm1pbGxpc2Vjb25kKDApLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgICB2YWxpZE1pbkRhdGUgPSBkYXlqcyh0aGlzLm1pbkRhdGUpLnR6KHRoaXMudGltZXpvbmUpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwIC0gMSkubWlsbGlzZWNvbmQoMCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpc2FibGVWYWxpZGF0ZSkge1xyXG4gICAgICB0aGlzLmludmFsaWRNZXNzYWdlT2ZmKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWxpZE1heERhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWF4RGF0ZSkpID09PSAwKSAmJiAhdGhpcy5kaXNhYmxlSW5jbHVkZXMpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQuCDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNCy0L3QsCDQtNCw0YLQtSDQuCDQstGA0LXQvNC10L3QuCDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1heERhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWF4RGF0ZSkpID4gMCkpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQvtC60L7QvdGH0LDQvdC40Y8g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQvdGM0YjQtSDQtNCw0YLRiyDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1pbkRhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWluRGF0ZSkpID09PSAwKSAmJiAhdGhpcy5kaXNhYmxlSW5jbHVkZXMpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQuCDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNCy0L3QsCDQtNCw0YLQtSDQuCDQstGA0LXQvNC10L3QuCDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1pbkRhdGUgJiYgZGF5anModmFsdWUpLmRpZmYoZGF5anModmFsaWRNaW5EYXRlKSkgPCAwKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPbign0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0L3RjNGI0LUg0LTQsNGC0Ysg0L3QsNGH0LDQu9CwJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPZmYoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd3JpdGVWYWx1ZShvdXRzaWRlVmFsdWU6IElucHV0RGF0ZVRpbWVWYWx1ZVR5cGVzKSB7XHJcbiAgICBpZiAob3V0c2lkZVZhbHVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3V0c2lkZVZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBjbGVhbkRhdGUob3V0c2lkZVZhbHVlKTtcclxuICAgICAgICB0aGlzLmRhdGVNb2RlbCA9IGRhdGVNb2RlbFZhbHVlUGFyc2Uob3V0c2lkZVZhbHVlLCB0aGlzLnRpbWV6b25lKTtcclxuICAgICAgICB0aGlzLnRpbWVNb2RlbCA9IHRpbWVNb2RlbFZhbHVlUGFyc2Uob3V0c2lkZVZhbHVlLCB0aGlzLnRpbWV6b25lKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja2luZ0ludmFsaWQob3V0c2lkZVZhbHVlLCB0aGlzLm1heERhdGUsIHRoaXMubWluRGF0ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgdXBkYXRlVGltZTogdGhpcy50aW1lcGlja2VyLFxyXG4gICAgICAgICAgc2lsZW50OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kdC5zZXRWaWV3RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG91dHNpZGVWYWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gb3V0c2lkZVZhbHVlLm1hcChkYXRlID0+IGNsZWFuRGF0ZShkYXRlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZSh0aGlzLnZhbHVlLCB7XHJcbiAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgICB0aGlzLmR0LmNsZWFyKHtzaWxlbnQ6IHRydWV9KTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgdGhpcy5kYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICAgICAgICB0aGlzLnRpbWVNb2RlbCA9IHRpbWVNb2RlbENvbnN0YW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4ge30pOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZShpbnNpZGVWYWx1ZTogSW5wdXREYXRlVGltZVZhbHVlVHlwZXMpIHtcclxuICAgIHRoaXMudmFsdWUgPSBpbnNpZGVWYWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlZC5lbWl0KGluc2lkZVZhbHVlKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh7dmFsdWU6IGluc2lkZVZhbHVlLCBpZDogdGhpcy51dWlkfSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGluc2lkZVZhbHVlKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CbHVyKGV2ZW50OiBFdmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KHt2YWx1ZTogdGhpcy52YWx1ZSwgaWQ6IHRoaXMudXVpZH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cIm1yeC1pbnB1dC1kYXRlXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LWVycm9yXT1cImludmFsaWQgfHwgaW5uZXJJbnZhbGlkXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICBbY2xhc3NdPVwiZ2V0Q2xhc3Nlc1wiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICA8bXJ4LWxhYmVsICpuZ0lmPVwidGltZUxhYmVsIHx8IGRhdGVMYWJlbFwiPnt7IGRhdGVMYWJlbCB9fTwvbXJ4LWxhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC1kYXRlX193cmFwcGVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNkYXRlSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwibm9wZVwiXHJcbiAgICAgICAgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZV9faW5wdXQgbXJ4LWlucHV0LWRhdGVfX2RhdGVcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtuZ01vZGVsXT1cImdldERhdGVWYWx1ZVwiXHJcbiAgICAgICAgW21hc2tdPVwiJzAwLjAwLjAwMDAgMDA6bTAnXCJcclxuICAgICAgICBbbGVhZFplcm9EYXRlVGltZV09XCJ0cnVlXCJcclxuICAgICAgICBbdmFsaWRhdGlvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbcmVhZE9ubHldPVwiIWlzTWFudWFsSW5wdXRcIlxyXG4gICAgICAgIChpbnB1dCk9XCJ1cGRhdGVEYXRlVmFsdWUoZGF0ZUlucHV0KVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JbnB1dChkYXRlSW5wdXQpXCJcclxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWRpc2FibGVkXCIgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZV9faWNvbnNcIj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNWaWV3Q2xlYW5JY29uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JY29uQ2xlYXIoKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWZvbnQtMTZdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWZvbnQtMjRdPVwic2l6ZSA9PT0gJ21lZGl1bScgfHwgc2l6ZSA9PT0gJ2xhcmdlJ1wiXHJcbiAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cIm1yeC1pY29uIGljb24tY2FsZW5kYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JY29uQ2FsZW5kYXIoKVwiXHJcbiAgICAgICAgICBbY2xhc3MuaWNvbi1mb250LTE2XT1cInNpemUgPT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgW2NsYXNzLmljb24tZm9udC0yNF09XCJzaXplID09PSAnbWVkaXVtJyB8fCBzaXplID09PSAnbGFyZ2UnXCJcclxuICAgICAgICA+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bXJ4LWVycm9yLW1lc3NhZ2VcclxuICAgICpuZ0lmPVwiaW52YWxpZDsgZWxzZSBpbm5lckludmFsaWRUZW1wbGF0ZVwiXHJcbiAgICBbaW52YWxpZE1lc3NhZ2VdPVwiaW52YWxpZE1lc3NhZ2VcIlxyXG4gID48L21yeC1lcnJvci1tZXNzYWdlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2lubmVySW52YWxpZFRlbXBsYXRlPlxyXG4gICAgPG1yeC1lcnJvci1tZXNzYWdlXHJcbiAgICAgICpuZ0lmPVwiaW5uZXJJbnZhbGlkXCJcclxuICAgICAgW2ludmFsaWRNZXNzYWdlXT1cImlubmVySW52YWxpZE1lc3NhZ2VcIlxyXG4gICAgPjwvbXJ4LWVycm9yLW1lc3NhZ2U+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG1yeC1zYXZlLXN0YXRlIFtpZF09XCJ1dWlkXCIgW2ZpZWxkc109XCJmaWVsZHNcIj48L21yeC1zYXZlLXN0YXRlPlxyXG48L2Rpdj5cclxuIl19
|
|
442
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LWRhdGUtdGltZS9pbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vaW5wdXQtZGF0ZS10aW1lL2lucHV0LWRhdGUtdGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1UsdUJBQXVCLEVBQ3RDLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLGFBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWEsc0JBQXNCLEVBQTJCLE1BQU0sd0JBQXdCLENBQUM7QUFDcEcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVoSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMs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Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFFVSxTQUFTO3NCQUF4QixLQUFLO2dCQUVVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBRUwsT0FBTztzQkFBdkIsTUFBTTtnQkFDVSxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgQWlyRGF0ZXBpY2tlciBmcm9tICdhaXItZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IEV4dHJhVGltZSwgSW5wdXREYXRlVGltZVNpemVzRW51bSwgSW5wdXREYXRlVGltZVNpemVzVHlwZXMgfSBmcm9tICcuL2lucHV0LWRhdGUtdGltZS5lbnVtJztcclxuaW1wb3J0IHsgRGF0ZU1vZGVsLCBUaW1lTW9kZWwsIHZhbGlkYXRlRGF0ZU1vZGVsLCB2YWxpZGF0ZVRpbWVNb2RlbCB9IGZyb20gJy4vaGVscGVycy92YWxpZGF0ZS12YWx1ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBkYXRlTW9kZWxDb25zdGFudCwgdGltZU1vZGVsQ29uc3RhbnQgfSBmcm9tICcuL2NvbnN0YW50cy92YWx1ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBkYXRlTW9kZWxWYWx1ZVBhcnNlLCB0aW1lTW9kZWxWYWx1ZVBhcnNlIH0gZnJvbSAnLi9oZWxwZXJzL3ZhbHVlLXBhcnNlcic7XHJcbmltcG9ydCB7IG1hcmtQb3NpdGlvbiB9IGZyb20gJy4vaGVscGVycy9jdXJzb3ItcG9zaXRpb24nO1xyXG5pbXBvcnQgeyBjbGVhbkRhdGUgfSBmcm9tICcuL2hlbHBlcnMvY2xlYW4tZGF0ZSc7XHJcbmltcG9ydCB7IGZvcm1hdHRpbmdGcm9tTW9zY293VGltZXpvbmUsIGZvcm1hdHRpbmdUb01vc2Nvd1RpbWV6b25lIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm1hdHRpbmctbW9zY293LXRpbWV6b25lJztcclxuaW1wb3J0IHsgVGltZXpvbmVUeXBlIH0gZnJvbSAnLi9lbnVtL3RpbWV6b25lJztcclxuaW1wb3J0IHsgZm9ybWF0dGluZ0Zyb21Nb2RlbHMgfSBmcm9tICcuL2hlbHBlcnMvZm9ybWF0dGluZy1mcm9tLW1vZGVscyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIsIFBsYWNlbWVudCB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElucHV0RGF0ZVRpbWVWYWx1ZVR5cGVzLCBJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQgfSBmcm9tICcuL21vZGVscy9pbnB1dC1kYXRlLXRpbWUubW9kZWwnO1xyXG5cclxuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcblxyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWlucHV0LWRhdGUtdGltZScsXHJcbiAgdGVtcGxhdGVVcmw6ICdpbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydpbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50cy5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0RGF0ZVRpbWVDb21wb25lbnQpLCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dERhdGVUaW1lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHVibGljIGR0OiBhbnk7XHJcbiAgcHVibGljIHZhbHVlOiBhbnkgPSAnJztcclxuICBwdWJsaWMgZGF0ZU1vZGVsOiBEYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICBwdWJsaWMgdGltZU1vZGVsOiBUaW1lTW9kZWwgPSB0aW1lTW9kZWxDb25zdGFudDtcclxuXHJcbiAgcHVibGljIGlubmVySW52YWxpZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbm5lckludmFsaWRNZXNzYWdlID0gJyc7XHJcblxyXG4gIC8vIFNBVkUgU1RBVEVcclxuICBwdWJsaWMgdXVpZDogc3RyaW5nID0gdXVpZHY0KCk7XHJcbiAgQElucHV0KCkgcHVibGljIGZpZWxkczogRmllbGRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc2l6ZTogSW5wdXREYXRlVGltZVNpemVzVHlwZXMgPSAnbGFyZ2UnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DbGFzc2VzID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGRhdGVMYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aW1lTGFiZWwgPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgZGF0ZVBsYWNlaG9sZGVyID0gJ9C00LQu0LzQvC7Qs9Cz0LPQsyc7XHJcbiAgQElucHV0KCkgcHVibGljIHRpbWVQbGFjZWhvbGRlciA9ICcwMDowMCc7XHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHRpbWVwaWNrZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgcmFuZ2UgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgdGltZXpvbmU6IFRpbWV6b25lVHlwZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGlzTWFudWFsSW5wdXQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBhZGRNaW5UaW1lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGFkZE1heFRpbWUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYWRkTWluVGltZU9iaiE6IEV4dHJhVGltZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYWRkTWF4VGltZU9iaiE6IEV4dHJhVGltZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVWYWxpZGF0ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlSW5jbHVkZXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGNvbnRhaW5lciA9ICdkaXYucGFnZS13cmFwcGVyJztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaW52YWxpZE1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGNoZWNrSW52YWxpZDogdHJ1ZSB8IGZhbHNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1heERhdGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBjYWxlbmRhclBvc2l0aW9uOiBQbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0J1xyXG5cclxuICBAVmlld0NoaWxkKCdkYXRlSW5wdXQnKSBkYXRlSW5wdXQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVUeXBlcz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPElucHV0RGF0ZVRpbWVWYWx1ZVdpdGhJZD4gPSBuZXcgRXZlbnRFbWl0dGVyPElucHV0RGF0ZVRpbWVWYWx1ZVdpdGhJZD4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIGJsdXJyZWQ6IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+KCk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZHQgPSBuZXcgQWlyRGF0ZXBpY2tlcih0aGlzLmRhdGVJbnB1dC5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXIsXHJcbiAgICAgIGxvY2FsZToge1xyXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5NTS55eXl5JyxcclxuICAgICAgICB0aW1lRm9ybWF0OiAnSEg6bW0nLFxyXG4gICAgICB9LFxyXG4gICAgICBhdXRvQ2xvc2U6IHRydWUsXHJcbiAgICAgIHJhbmdlOiB0aGlzLnJhbmdlLFxyXG4gICAgICBtdWx0aXBsZURhdGVzU2VwYXJhdG9yOiAnIC0gJyxcclxuICAgICAgdGltZXBpY2tlcjogdGhpcy50aW1lcGlja2VyLFxyXG4gICAgICBtaW5EYXRlOiB0aGlzLm1pbkRhdGUgPyBmb3JtYXR0aW5nRnJvbU1vc2Nvd1RpbWV6b25lKHRoaXMubWluRGF0ZSwgdGhpcy50aW1lem9uZSkgOiAnJyxcclxuICAgICAgbWF4RGF0ZTogdGhpcy5tYXhEYXRlID8gZm9ybWF0dGluZ0Zyb21Nb3Njb3dUaW1lem9uZSh0aGlzLm1heERhdGUsIHRoaXMudGltZXpvbmUpIDogJycsXHJcbiAgICAgIGlubGluZTogdGhpcy5pbmxpbmUsXHJcbiAgICAgIHBvc2l0aW9uOiAoeyRkYXRlcGlja2VyLCAkdGFyZ2V0LCAkcG9pbnRlciwgZG9uZX0pID0+IHtcclxuICAgICAgICBsZXQgcG9wcGVyID0gY3JlYXRlUG9wcGVyKCR0YXJnZXQsICRkYXRlcGlja2VyLCB7XHJcbiAgICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuY2FsZW5kYXJQb3NpdGlvbixcclxuICAgICAgICAgIG1vZGlmaWVyczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxyXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcclxuICAgICAgICAgICAgICAgICAgdG9wOiA2NFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdvZmZzZXQnLFxyXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG9mZnNldDogWzAsIDEwXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdhcnJvdycsXHJcbiAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogJHBvaW50ZXJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBsZXRlSGlkZSgpIHtcclxuICAgICAgICAgIHBvcHBlci5kZXN0cm95KCk7XHJcbiAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuICAgICAgb25TZWxlY3Q6ICh7ZGF0ZSwgZm9ybWF0dGVkRGF0ZX0pID0+IHtcclxuICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgIC8vINCR0LjQsdC70LjQvtGC0LXQutCwINCy0YvQtNCw0LXRgiBcItC70L7QutCw0LvRjNC90YPRjlwiINC00LDRgtGDLiDQndCw0Lwg0L3Rg9C20L3RiyDRgtC+0LvRjNC60L4g0LXRkSDQutC+0LzQv9C+0L3QtdC90YLRiy5cclxuICAgICAgICAgIHRoaXMuZGF0ZU1vZGVsID0ge1xyXG4gICAgICAgICAgICB2aWV3OiBkYXlqcyhkYXRlKS5mb3JtYXQoJ0RELk1NLllZWVknKSxcclxuICAgICAgICAgICAgZGF5OiBkYXlqcyhkYXRlKS5mb3JtYXQoJ0REJyksXHJcbiAgICAgICAgICAgIG1vbnRoOiBkYXlqcyhkYXRlKS5mb3JtYXQoJ01NJyksXHJcbiAgICAgICAgICAgIHllYXI6IGRheWpzKGRhdGUpLmZvcm1hdCgnWVlZWScpLFxyXG4gICAgICAgICAgICBpbnZhbGlkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMudGltZU1vZGVsID0ge1xyXG4gICAgICAgICAgICB2aWV3OiBkYXlqcyhkYXRlKS5mb3JtYXQoJ0hIOm1tJyksXHJcbiAgICAgICAgICAgIGhvdXI6IGRheWpzKGRhdGUpLmZvcm1hdCgnSEgnKSxcclxuICAgICAgICAgICAgbWludXRlOiBkYXlqcyhkYXRlKS5mb3JtYXQoJ21tJyksXHJcbiAgICAgICAgICAgIGludmFsaWQ6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHRoaXMuX2NoZWNrRXh0cmFUaW1lKCk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlTW9kZWwodGhpcy5kYXRlTW9kZWwsIHRoaXMudGltZU1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgaWYgKGNoYW5nZXNbJ21heERhdGUnXSkge1xyXG4gICAgICAgIHRoaXMuZHQudXBkYXRlKHttYXhEYXRlOiB0aGlzLm1heERhdGV9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVZhbGlkYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnZhbGlkID0gdGhpcy5pbm5lckludmFsaWQ7XHJcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQodGhpcy52YWx1ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICAgIGlmIChpbnZhbGlkICYmIGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoYW5nZXNbJ21pbkRhdGUnXSkge1xyXG4gICAgICAgIHRoaXMuZHQudXBkYXRlKHttaW5EYXRlOiB0aGlzLm1pbkRhdGV9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVZhbGlkYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnZhbGlkID0gdGhpcy5pbm5lckludmFsaWQ7XHJcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQodGhpcy52YWx1ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICAgIGlmIChpbnZhbGlkICYmIGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXREYXRlVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmRhdGVNb2RlbC52aWV3fSR7dGhpcy50aW1lTW9kZWwudmlldyA/ICcgJyArIHRoaXMudGltZU1vZGVsLnZpZXcgOiAnJ31gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7SW5wdXREYXRlVGltZVNpemVzRW51bVt0aGlzLnNpemVdfSAke3RoaXMuY3VzdG9tQ2xhc3Nlc30gJHt0aGlzLmNoZWNrVmFsaWRDbGFzc2VzfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBpc1ZhbGlkTW9kZWxzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmRhdGVNb2RlbC5pbnZhbGlkICYmICh0aGlzLnRpbWVwaWNrZXIgPyAhdGhpcy50aW1lTW9kZWwuaW52YWxpZCA6IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc1ZpZXdDbGVhbkljb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmRhdGVJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hlY2tWYWxpZENsYXNzZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrSW52YWxpZCA9PT0gZmFsc2UgPyAnbXJ4LWlucHV0LWNoZWNrZWQtc3VjY2VzcycgOiB0aGlzLmNoZWNrSW52YWxpZCA9PT0gdHJ1ZSA/ICdtcngtaW5wdXQtY2hlY2tlZC1lcnJvcicgOiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrRXh0cmFUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuYWRkTWF4VGltZSAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSAnMjMnO1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5taW51dGUgPSAnNTknO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkTWluVGltZSAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSAnMDAnO1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5taW51dGUgPSAnMDAnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkTWF4VGltZU9iaiAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSB0aGlzLmFkZE1heFRpbWVPYmouaG91cjtcclxuICAgICAgdGhpcy50aW1lTW9kZWwubWludXRlID0gdGhpcy5hZGRNYXhUaW1lT2JqLm1pbnV0ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZE1pblRpbWVPYmogJiYgIXRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5ob3VyID0gdGhpcy5hZGRNaW5UaW1lT2JqLmhvdXI7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLm1pbnV0ZSA9IHRoaXMuYWRkTWluVGltZU9iai5taW51dGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xpY2tUb0ljb25DYWxlbmRhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja1RvSWNvbkNsZWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kdC5zZXRWaWV3RGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIHRoaXMuZHQgJiYgdGhpcy5kdC5jbGVhcigpO1xyXG4gICAgdGhpcy5kYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICAgIHRoaXMudGltZU1vZGVsID0gdGltZU1vZGVsQ29uc3RhbnQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLnJhbmdlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUoJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlubmVySW52YWxpZE1lc3NhZ2UgPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVNb2RlbChkYXRlTW9kZWw6IERhdGVNb2RlbCwgdGltZU1vZGVsOiBUaW1lTW9kZWwpIHtcclxuICAgIGlmIChkYXRlTW9kZWwudmlldyA9PT0gJycpIHtcclxuICAgICAgdGhpcy5jbGlja1RvSWNvbkNsZWFyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDQk9C10L3QtdGA0LjRgNGD0LXQvCBJU08sINGB0YfQuNGC0LDRjywg0YfRgtC+INCy0LLQtdC00LXQvdC90YvQtSDRhtC40YTRgNGLIOKAlCDRjdGC0L4g0JzQodCaXHJcbiAgICAgIGNvbnN0IGZvcm1hdHRpbmdEYXRlID0gZm9ybWF0dGluZ1RvTW9zY293VGltZXpvbmUoZGF0ZU1vZGVsLCB0aW1lTW9kZWwpO1xyXG4gICAgICBcclxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2hlY2tpbmdJbnZhbGlkKGZvcm1hdHRpbmdEYXRlLCB0aGlzLm1heERhdGUsIHRoaXMubWluRGF0ZSk7XHJcblxyXG4gICAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICAgIC8vINCe0LHQvdC+0LLQu9GP0LXQvCDRgtC+0YfQutGDINCy0YvQsdC+0YDQsCDQsiDQutCw0LvQtdC90LTQsNGA0LVcclxuICAgICAgICBpZiAodGhpcy5kdCkge1xyXG4gICAgICAgICAgdGhpcy5kdC5zZWxlY3REYXRlKGZvcm1hdHRpbmdGcm9tTW9zY293VGltZXpvbmUoZm9ybWF0dGluZ0RhdGUpLCB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVRpbWU6IHRoaXMudGltZXBpY2tlcixcclxuICAgICAgICAgICAgc2lsZW50OiB0cnVlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShmb3JtYXR0aW5nRGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzQXJyYXkgPSAodmFsdWVzOiBhbnlbXSkgPT4ge1xyXG4gICAgY29uc3QgZGF0ZXMgPSB2YWx1ZXMubWFwKGRhdGUgPT4ge1xyXG4gICAgICByZXR1cm4gZm9ybWF0dGluZ1RvTW9zY293VGltZXpvbmUoZGF0ZS50b0lTT1N0cmluZygpLCB0aGlzLnRpbWV6b25lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmFsdWUoZGF0ZXMpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaW52YWxpZE1lc3NhZ2VPbihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gdHJ1ZTtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludmFsaWRNZXNzYWdlT2ZmKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbm5lckludmFsaWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZURhdGVWYWx1ZShkYXRlSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgdGhpcy5kYXRlTW9kZWwgPSB2YWxpZGF0ZURhdGVNb2RlbChkYXRlSW5wdXQudmFsdWUpO1xyXG4gICAgdGhpcy50aW1lTW9kZWwgPSB2YWxpZGF0ZVRpbWVNb2RlbChkYXRlSW5wdXQudmFsdWUpO1xyXG5cclxuICAgIGRhdGVJbnB1dC52YWx1ZSA9IHRoaXMuZ2V0RGF0ZVZhbHVlO1xyXG4gICAgZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBkYXRlSW5wdXQuc2VsZWN0aW9uRW5kID0gZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG5cclxuICAgIHRoaXMuX2NoZWNrRXh0cmFUaW1lKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZE1vZGVscyB8fCB0aGlzLmRhdGVNb2RlbC52aWV3ID09PSAnJykge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlTW9kZWwodGhpcy5kYXRlTW9kZWwsIHRoaXMudGltZU1vZGVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja1RvSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmIChpbnB1dC5zZWxlY3Rpb25TdGFydCA9PT0gaW5wdXQuc2VsZWN0aW9uRW5kICYmIChpbnB1dC5zZWxlY3Rpb25TdGFydCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCA+IDApKSB7XHJcbiAgICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IG1hcmtQb3NpdGlvbihpbnB1dC5zZWxlY3Rpb25TdGFydCwgaW5wdXQuc2VsZWN0aW9uRW5kKTtcclxuICAgICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcclxuICAgICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gZW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja2luZ0ludmFsaWQodmFsdWU6IHN0cmluZywgbWF4RGF0ZTogc3RyaW5nLCBtaW5EYXRlOiBzdHJpbmcpIHtcclxuICAgIGxldCB2YWxpZE1heERhdGUgPSAnJztcclxuICAgIGxldCB2YWxpZE1pbkRhdGUgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHZhbGlkTWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcclxuICAgICAgdmFsaWRNaW5EYXRlID0gdGhpcy5taW5EYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgIHZhbGlkTWF4RGF0ZSA9IGRheWpzKHRoaXMubWF4RGF0ZSkudHoodGhpcy50aW1lem9uZSkuaG91cigyMykubWludXRlKDU5KS5zZWNvbmQoNTkpLm1pbGxpc2Vjb25kKDApLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgICB2YWxpZE1pbkRhdGUgPSBkYXlqcyh0aGlzLm1pbkRhdGUpLnR6KHRoaXMudGltZXpvbmUpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwIC0gMSkubWlsbGlzZWNvbmQoMCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpc2FibGVWYWxpZGF0ZSkge1xyXG4gICAgICB0aGlzLmludmFsaWRNZXNzYWdlT2ZmKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWxpZE1heERhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWF4RGF0ZSkpID09PSAwKSAmJiAhdGhpcy5kaXNhYmxlSW5jbHVkZXMpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQuCDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNCy0L3QsCDQtNCw0YLQtSDQuCDQstGA0LXQvNC10L3QuCDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1heERhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWF4RGF0ZSkpID4gMCkpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQvtC60L7QvdGH0LDQvdC40Y8g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQvdGM0YjQtSDQtNCw0YLRiyDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1pbkRhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWluRGF0ZSkpID09PSAwKSAmJiAhdGhpcy5kaXNhYmxlSW5jbHVkZXMpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQuCDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNCy0L3QsCDQtNCw0YLQtSDQuCDQstGA0LXQvNC10L3QuCDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1pbkRhdGUgJiYgZGF5anModmFsdWUpLmRpZmYoZGF5anModmFsaWRNaW5EYXRlKSkgPCAwKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPbign0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0L3RjNGI0LUg0LTQsNGC0Ysg0L3QsNGH0LDQu9CwJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPZmYoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd3JpdGVWYWx1ZShvdXRzaWRlVmFsdWU6IElucHV0RGF0ZVRpbWVWYWx1ZVR5cGVzKSB7XHJcbiAgICBpZiAob3V0c2lkZVZhbHVlICYmIHR5cGVvZiBvdXRzaWRlVmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBvdXRzaWRlVmFsdWU7XHJcblxyXG4gICAgICAvLyDQn9C+0LvRg9GH0LDQtdC8IFwi0LzQvtGB0LrQvtCy0YHQutC40LlcIiDQstC30LPQu9GP0LQg0L3QsCDQv9GA0LjRiNC10LTRiNGD0Y4g0LTQsNGC0YNcclxuICAgICAgY29uc3QgbW9zY293RGF0ZSA9IGRheWpzKG91dHNpZGVWYWx1ZSkudHoodGhpcy50aW1lem9uZSA9PT0gJ2RlZmF1bHQnID8gJ0V1cm9wZS9Nb3Njb3cnIDogdGhpcy50aW1lem9uZSk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmRhdGVNb2RlbCA9IHtcclxuICAgICAgICB2aWV3OiBtb3Njb3dEYXRlLmZvcm1hdCgnREQuTU0uWVlZWScpLFxyXG4gICAgICAgIGRheTogbW9zY293RGF0ZS5mb3JtYXQoJ0REJyksXHJcbiAgICAgICAgbW9udGg6IG1vc2Nvd0RhdGUuZm9ybWF0KCdNTScpLFxyXG4gICAgICAgIHllYXI6IG1vc2Nvd0RhdGUuZm9ybWF0KCdZWVlZJyksXHJcbiAgICAgICAgaW52YWxpZDogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMudGltZU1vZGVsID0ge1xyXG4gICAgICAgIHZpZXc6IG1vc2Nvd0RhdGUuZm9ybWF0KCdISDptbScpLFxyXG4gICAgICAgIGhvdXI6IG1vc2Nvd0RhdGUuZm9ybWF0KCdISCcpLFxyXG4gICAgICAgIG1pbnV0ZTogbW9zY293RGF0ZS5mb3JtYXQoJ21tJyksXHJcbiAgICAgICAgaW52YWxpZDogZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vINCh0LjQvdGF0YDQvtC90LjQt9C40YDRg9C10LwgQWlyRGF0ZXBpY2tlciAo0L/QtdGA0LXQtNCw0LXQvCBcItC/0L7QtNC00LXQu9GM0L3Rg9GOXCIg0LvQvtC60LDQu9GM0L3Rg9GOINC00LDRgtGDKVxyXG4gICAgICBpZiAodGhpcy5kdCkge1xyXG4gICAgICAgIGNvbnN0IGZha2VMb2NhbERhdGUgPSBmb3JtYXR0aW5nRnJvbU1vc2Nvd1RpbWV6b25lKG91dHNpZGVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5kdC5zZWxlY3REYXRlKGZha2VMb2NhbERhdGUsIHsgc2lsZW50OiB0cnVlIH0pO1xyXG4gICAgICAgIHRoaXMuZHQuc2V0Vmlld0RhdGUoZmFrZUxvY2FsRGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmR0KSB7XHJcbiAgICAgICAgdGhpcy5kdC5jbGVhcih7IHNpbGVudDogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgfTtcclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHt9KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlVmFsdWUoaW5zaWRlVmFsdWU6IElucHV0RGF0ZVRpbWVWYWx1ZVR5cGVzKSB7XHJcbiAgICB0aGlzLnZhbHVlID0gaW5zaWRlVmFsdWU7XHJcbiAgICB0aGlzLmNoYW5nZWQuZW1pdChpbnNpZGVWYWx1ZSk7XHJcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQoe3ZhbHVlOiBpbnNpZGVWYWx1ZSwgaWQ6IHRoaXMudXVpZH0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZShpbnNpZGVWYWx1ZSk7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQmx1cihldmVudDogRXZlbnQpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmJsdXJyZWQuZW1pdCh7dmFsdWU6IHRoaXMudmFsdWUsIGlkOiB0aGlzLnV1aWR9KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZVwiXHJcbiAgW2NsYXNzLm1yeC1pbnB1dC1lcnJvcl09XCJpbnZhbGlkIHx8IGlubmVySW52YWxpZFwiXHJcbiAgW2NsYXNzLm1yeC1pbnB1dC1yZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgW2NsYXNzXT1cImdldENsYXNzZXNcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgPG1yeC1sYWJlbCAqbmdJZj1cInRpbWVMYWJlbCB8fCBkYXRlTGFiZWxcIj57eyBkYXRlTGFiZWwgfX08L21yeC1sYWJlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZV9fd3JhcHBlclwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICAjZGF0ZUlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm5vcGVcIlxyXG4gICAgICAgIGNsYXNzPVwibXJ4LWlucHV0LWRhdGVfX2lucHV0IG1yeC1pbnB1dC1kYXRlX19kYXRlXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICBbbmdNb2RlbF09XCJnZXREYXRlVmFsdWVcIlxyXG4gICAgICAgIFttYXNrXT1cIicwMC4wMC4wMDAwIDAwOm0wJ1wiXHJcbiAgICAgICAgW2xlYWRaZXJvRGF0ZVRpbWVdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3ZhbGlkYXRpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgW3JlYWRPbmx5XT1cIiFpc01hbnVhbElucHV0XCJcclxuICAgICAgICAoaW5wdXQpPVwidXBkYXRlRGF0ZVZhbHVlKGRhdGVJbnB1dClcIlxyXG4gICAgICAgIChjbGljayk9XCJjbGlja1RvSW5wdXQoZGF0ZUlucHV0KVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxyXG4gICAgICAvPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwibXJ4LWlucHV0LWRhdGVfX2ljb25zXCI+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yeC1pY29uIGljb24tY2xvc2VcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImlzVmlld0NsZWFuSWNvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGlja1RvSWNvbkNsZWFyKClcIlxyXG4gICAgICAgICAgICBbY2xhc3MuaWNvbi1mb250LTE2XT1cInNpemUgPT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgICBbY2xhc3MuaWNvbi1mb250LTI0XT1cInNpemUgPT09ICdtZWRpdW0nIHx8IHNpemUgPT09ICdsYXJnZSdcIlxyXG4gICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJtcngtaWNvbiBpY29uLWNhbGVuZGFyXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbGlja1RvSWNvbkNhbGVuZGFyKClcIlxyXG4gICAgICAgICAgW2NsYXNzLmljb24tZm9udC0xNl09XCJzaXplID09PSAnc21hbGwnXCJcclxuICAgICAgICAgIFtjbGFzcy5pY29uLWZvbnQtMjRdPVwic2l6ZSA9PT0gJ21lZGl1bScgfHwgc2l6ZSA9PT0gJ2xhcmdlJ1wiXHJcbiAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1yeC1lcnJvci1tZXNzYWdlXHJcbiAgICAqbmdJZj1cImludmFsaWQ7IGVsc2UgaW5uZXJJbnZhbGlkVGVtcGxhdGVcIlxyXG4gICAgW2ludmFsaWRNZXNzYWdlXT1cImludmFsaWRNZXNzYWdlXCJcclxuICA+PC9tcngtZXJyb3ItbWVzc2FnZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNpbm5lckludmFsaWRUZW1wbGF0ZT5cclxuICAgIDxtcngtZXJyb3ItbWVzc2FnZVxyXG4gICAgICAqbmdJZj1cImlubmVySW52YWxpZFwiXHJcbiAgICAgIFtpbnZhbGlkTWVzc2FnZV09XCJpbm5lckludmFsaWRNZXNzYWdlXCJcclxuICAgID48L21yeC1lcnJvci1tZXNzYWdlPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxtcngtc2F2ZS1zdGF0ZSBbaWRdPVwidXVpZFwiIFtmaWVsZHNdPVwiZmllbGRzXCI+PC9tcngtc2F2ZS1zdGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
|