@dereekb/dbx-form 10.1.11 → 10.1.12

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,4 +1,5 @@
1
- import { parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes } from '@dereekb/date';
1
+ import { parseISO8601DayStringToDate, toJsDate, formatToISO8601DayStringForSystem, formatToISO8601DateString, isSameDateHoursAndMinutes, parseJsDateString } from '@dereekb/date';
2
+ import { dateFromMinuteOfDay, dateToMinuteOfDay } from '@dereekb/util';
2
3
  export var DbxDateTimeValueMode;
3
4
  (function (DbxDateTimeValueMode) {
4
5
  /**
@@ -13,15 +14,55 @@ export var DbxDateTimeValueMode;
13
14
  * Value is returned/parsed as an ISO8601DayString, relative to the current timezone.
14
15
  */
15
16
  DbxDateTimeValueMode[DbxDateTimeValueMode["DAY_STRING"] = 2] = "DAY_STRING";
17
+ /**
18
+ * Value is returned/parsed as a Unix timestamp, relative to the current timezone.
19
+ */
20
+ DbxDateTimeValueMode[DbxDateTimeValueMode["UNIX_TIMESTAMP"] = 3] = "UNIX_TIMESTAMP";
21
+ /**
22
+ * Value is returned/parsed as a minute of the day, relative to the current timezone.
23
+ */
24
+ DbxDateTimeValueMode[DbxDateTimeValueMode["MINUTE_OF_DAY"] = 4] = "MINUTE_OF_DAY";
16
25
  })(DbxDateTimeValueMode || (DbxDateTimeValueMode = {}));
17
26
  export function dbxDateTimeInputValueParseFactory(mode, timezoneInstance) {
18
27
  let factory;
19
28
  let useTimezoneInstance = true;
20
29
  switch (mode) {
21
30
  case DbxDateTimeValueMode.DAY_STRING:
22
- factory = (x) => (typeof x === 'string' ? parseISO8601DayStringToDate(x) : x);
31
+ factory = (x) => {
32
+ let result;
33
+ switch (typeof x) {
34
+ case 'string':
35
+ result = parseISO8601DayStringToDate(x);
36
+ break;
37
+ case 'number':
38
+ result = new Date(x);
39
+ break;
40
+ default:
41
+ result = x;
42
+ break;
43
+ }
44
+ return result;
45
+ };
23
46
  useTimezoneInstance = false; // day strings do not use timezones
24
47
  break;
48
+ case DbxDateTimeValueMode.MINUTE_OF_DAY:
49
+ factory = (x) => {
50
+ let result;
51
+ switch (typeof x) {
52
+ case 'number':
53
+ result = dateFromMinuteOfDay(x);
54
+ break;
55
+ case 'string':
56
+ result = parseJsDateString(x);
57
+ break;
58
+ default:
59
+ result = x;
60
+ break;
61
+ }
62
+ return result;
63
+ };
64
+ break;
65
+ case DbxDateTimeValueMode.UNIX_TIMESTAMP:
25
66
  case DbxDateTimeValueMode.DATE_STRING:
26
67
  case DbxDateTimeValueMode.DATE:
27
68
  default:
@@ -49,6 +90,12 @@ export function dbxDateTimeOutputValueFactory(mode, timezoneInstance) {
49
90
  case DbxDateTimeValueMode.DATE_STRING:
50
91
  factory = (x) => (x != null ? formatToISO8601DateString(x) : x);
51
92
  break;
93
+ case DbxDateTimeValueMode.UNIX_TIMESTAMP:
94
+ factory = (x) => (x != null ? x.getTime() : x);
95
+ break;
96
+ case DbxDateTimeValueMode.MINUTE_OF_DAY:
97
+ factory = (x) => (x != null ? dateToMinuteOfDay(x) : x);
98
+ break;
52
99
  case DbxDateTimeValueMode.DATE:
53
100
  default:
54
101
  factory = (x) => x;
@@ -65,9 +112,10 @@ export function dbxDateTimeOutputValueFactory(mode, timezoneInstance) {
65
112
  return factory;
66
113
  }
67
114
  export function dbxDateTimeIsSameDateTimeFieldValue(a, b) {
68
- return a && b ? (typeof a === 'string' ? a === b : isSameDateHoursAndMinutes(a, b)) : a == b;
115
+ const typeofA = typeof a;
116
+ return a && b ? (typeofA === 'string' || typeofA === 'number' ? a === b : isSameDateHoursAndMinutes(a, b)) : a == b;
69
117
  }
70
118
  export function dbxDateRangeIsSameDateRangeFieldValue(a, b) {
71
119
  return a && b ? dbxDateTimeIsSameDateTimeFieldValue(a.start, b.start) && dbxDateTimeIsSameDateTimeFieldValue(a.end, b.end) : a == b;
72
120
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS52YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL3NyYy9saWIvZm9ybWx5L2ZpZWxkL3ZhbHVlL2RhdGUvZGF0ZS52YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxpQ0FBaUMsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBa0MsTUFBTSxlQUFlLENBQUM7QUFHOU4sTUFBTSxDQUFOLElBQVksb0JBYVg7QUFiRCxXQUFZLG9CQUFvQjtJQUM5Qjs7T0FFRztJQUNILCtEQUFRLENBQUE7SUFDUjs7T0FFRztJQUNILDZFQUFlLENBQUE7SUFDZjs7T0FFRztJQUNILDJFQUFjLENBQUE7QUFDaEIsQ0FBQyxFQWJXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFhL0I7QUFFRCxNQUFNLFVBQVUsaUNBQWlDLENBQUMsSUFBMEIsRUFBRSxnQkFBc0Q7SUFDbEksSUFBSSxPQUFvRCxDQUFDO0lBQ3pELElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBRS9CLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyxvQkFBb0IsQ0FBQyxVQUFVO1lBQ2xDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxtQ0FBbUM7WUFDaEUsTUFBTTtRQUNSLEtBQUssb0JBQW9CLENBQUMsV0FBVyxDQUFDO1FBQ3RDLEtBQUssb0JBQW9CLENBQUMsSUFBSSxDQUFDO1FBQy9CO1lBQ0UsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJ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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZSwgcGFyc2VJU084NjAxRGF5U3RyaW5nVG9EYXRlLCB0b0pzRGF0ZSwgZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nRm9yU3lzdGVtLCBmb3JtYXRUb0lTTzg2MDFEYXRlU3RyaW5nLCBpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzLCBEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWUgfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IElTTzg2MDFEYXlTdHJpbmcsIE1heWJlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbmV4cG9ydCBlbnVtIERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgLyoqXG4gICAqIFZhbHVlIGlzIHJldHVybmVkL3BhcnNlZCBhcyBhIERhdGUuXG4gICAqL1xuICBEQVRFID0gMCxcbiAgLyoqXG4gICAqIFZhbHVlIGlzIHJldHVybmVkL3BhcnNlZCBhcyBhbiBJU084NjAxRGF0ZVN0cmluZ1xuICAgKi9cbiAgREFURV9TVFJJTkcgPSAxLFxuICAvKipcbiAgICogVmFsdWUgaXMgcmV0dXJuZWQvcGFyc2VkIGFzIGFuIElTTzg2MDFEYXlTdHJpbmcsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgREFZX1NUUklORyA9IDJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGRhdGU6IE1heWJlPERhdGUgfCBzdHJpbmc+KSA9PiBNYXliZTxEYXRlPiB7XG4gIGxldCBmYWN0b3J5OiAoZGF0ZTogTWF5YmU8RGF0ZSB8IHN0cmluZz4pID0+IE1heWJlPERhdGU+O1xuICBsZXQgdXNlVGltZXpvbmVJbnN0YW5jZSA9IHRydWU7XG5cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBEYnhEYXRlVGltZVZhbHVlTW9kZS5EQVlfU1RSSU5HOlxuICAgICAgZmFjdG9yeSA9ICh4KSA9PiAodHlwZW9mIHggPT09ICdzdHJpbmcnID8gcGFyc2VJU084NjAxRGF5U3RyaW5nVG9EYXRlKHgpIDogeCk7XG4gICAgICB1c2VUaW1lem9uZUluc3RhbmNlID0gZmFsc2U7IC8vIGRheSBzdHJpbmdzIGRvIG5vdCB1c2UgdGltZXpvbmVzXG4gICAgICBicmVhaztcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEVfU1RSSU5HOlxuICAgIGNhc2UgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTpcbiAgICBkZWZhdWx0OlxuICAgICAgZmFjdG9yeSA9ICh4KSA9PiAoeCAhPSBudWxsID8gdG9Kc0RhdGUoeCkgOiB4KTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKHRpbWV6b25lSW5zdGFuY2UgJiYgdXNlVGltZXpvbmVJbnN0YW5jZSkge1xuICAgIGNvbnN0IG9yaWdpbmFsRmFjdG9yeSA9IGZhY3Rvcnk7XG5cbiAgICBmYWN0b3J5ID0gKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBkYXRlID0gb3JpZ2luYWxGYWN0b3J5KGlucHV0KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGUgPyB0aW1lem9uZUluc3RhbmNlLnN5c3RlbURhdGVUb1RhcmdldERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZhY3Rvcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGRhdGU6IE1heWJlPERhdGU+KSA9PiBNYXliZTxEYXRlIHwgc3RyaW5nPiB7XG4gIGxldCBmYWN0b3J5OiAoZGF0ZTogTWF5YmU8RGF0ZT4pID0+IE1heWJlPERhdGUgfCBzdHJpbmc+O1xuICBsZXQgdXNlVGltZXpvbmVJbnN0YW5jZSA9IHRydWU7XG5cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSBEYnhEYXRlVGltZVZhbHVlTW9kZS5EQVlfU1RSSU5HOlxuICAgICAgZmFjdG9yeSA9ICh4KSA9PiAoeCAhPSBudWxsID8gZm9ybWF0VG9JU084NjAxRGF5U3RyaW5nRm9yU3lzdGVtKHgpIDogeCk7XG4gICAgICB1c2VUaW1lem9uZUluc3RhbmNlID0gZmFsc2U7IC8vIGRheSBzdHJpbmdzIGRvIG5vdCB1c2UgdGltZXpvbmVzXG4gICAgICBicmVhaztcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEVfU1RSSU5HOlxuICAgICAgZmFjdG9yeSA9ICh4KSA9PiAoeCAhPSBudWxsID8gZm9ybWF0VG9JU084NjAxRGF0ZVN0cmluZyh4KSA6IHgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEYnhEYXRlVGltZVZhbHVlTW9kZS5EQVRFOlxuICAgIGRlZmF1bHQ6XG4gICAgICBmYWN0b3J5ID0gKHgpID0+IHg7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmICh0aW1lem9uZUluc3RhbmNlICYmIHVzZVRpbWV6b25lSW5zdGFuY2UpIHtcbiAgICBjb25zdCBvcmlnaW5hbEZhY3RvcnkgPSBmYWN0b3J5O1xuXG4gICAgZmFjdG9yeSA9IChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZSA9IGlucHV0ID8gdGltZXpvbmVJbnN0YW5jZS50YXJnZXREYXRlVG9TeXN0ZW1EYXRlKGlucHV0KSA6IGlucHV0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gb3JpZ2luYWxGYWN0b3J5KGRhdGUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZhY3Rvcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZShhOiBNYXliZTxEYXRlIHwgSVNPODYwMURheVN0cmluZz4sIGI6IE1heWJlPERhdGUgfCBJU084NjAxRGF5U3RyaW5nPikge1xuICByZXR1cm4gYSAmJiBiID8gKHR5cGVvZiBhID09PSAnc3RyaW5nJyA/IGEgPT09IGIgOiBpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKGEsIGIgYXMgRGF0ZSkpIDogYSA9PSBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGJ4RGF0ZVJhbmdlSXNTYW1lRGF0ZVJhbmdlRmllbGRWYWx1ZShhOiBNYXliZTxEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWU+LCBiOiBNYXliZTxEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWU+KSB7XG4gIHJldHVybiBhICYmIGIgPyBkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZShhLnN0YXJ0LCBiLnN0YXJ0KSAmJiBkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZShhLmVuZCwgYi5lbmQpIDogYSA9PSBiO1xufVxuIl19
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS52YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1mb3JtL3NyYy9saWIvZm9ybWx5L2ZpZWxkL3ZhbHVlL2RhdGUvZGF0ZS52YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxpQ0FBaUMsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBa0MsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDalAsT0FBTyxFQUEyQixtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRyxNQUFNLENBQU4sSUFBWSxvQkFxQlg7QUFyQkQsV0FBWSxvQkFBb0I7SUFDOUI7O09BRUc7SUFDSCwrREFBUSxDQUFBO0lBQ1I7O09BRUc7SUFDSCw2RUFBZSxDQUFBO0lBQ2Y7O09BRUc7SUFDSCwyRUFBYyxDQUFBO0lBQ2Q7O09BRUc7SUFDSCxtRkFBa0IsQ0FBQTtJQUNsQjs7T0FFRztJQUNILGlGQUFpQixDQUFBO0FBQ25CLENBQUMsRUFyQlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQXFCL0I7QUFFRCxNQUFNLFVBQVUsaUNBQWlDLENBQUMsSUFBMEIsRUFBRSxnQkFBc0Q7SUFDbEksSUFBSSxPQUE2RCxDQUFDO0lBQ2xFLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBRS9CLFFBQVEsSUFBSSxFQUFFO1FBQ1osS0FBSyxvQkFBb0IsQ0FBQyxVQUFVO1lBQ2xDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNkLElBQUksTUFBbUIsQ0FBQztnQkFFeEIsUUFBUSxPQUFPLENBQUMsRUFBRTtvQkFDaEIsS0FBSyxRQUFRO3dCQUNYLE1BQU0sR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEMsTUFBTTtvQkFDUixLQUFLLFFBQVE7d0JBQ1gsTUFBTSxH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Q0FBQyxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0SSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsIHBhcnNlSVNPODYwMURheVN0cmluZ1RvRGF0ZSwgdG9Kc0RhdGUsIGZvcm1hdFRvSVNPODYwMURheVN0cmluZ0ZvclN5c3RlbSwgZm9ybWF0VG9JU084NjAxRGF0ZVN0cmluZywgaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcywgRGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlLCBwYXJzZUpzRGF0ZVN0cmluZyB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgSVNPODYwMURheVN0cmluZywgTWF5YmUsIGRhdGVGcm9tTWludXRlT2ZEYXksIGRhdGVUb01pbnV0ZU9mRGF5IH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbmV4cG9ydCBlbnVtIERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgLyoqXG4gICAqIFZhbHVlIGlzIHJldHVybmVkL3BhcnNlZCBhcyBhIERhdGUuXG4gICAqL1xuICBEQVRFID0gMCxcbiAgLyoqXG4gICAqIFZhbHVlIGlzIHJldHVybmVkL3BhcnNlZCBhcyBhbiBJU084NjAxRGF0ZVN0cmluZ1xuICAgKi9cbiAgREFURV9TVFJJTkcgPSAxLFxuICAvKipcbiAgICogVmFsdWUgaXMgcmV0dXJuZWQvcGFyc2VkIGFzIGFuIElTTzg2MDFEYXlTdHJpbmcsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgREFZX1NUUklORyA9IDIsXG4gIC8qKlxuICAgKiBWYWx1ZSBpcyByZXR1cm5lZC9wYXJzZWQgYXMgYSBVbml4IHRpbWVzdGFtcCwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICBVTklYX1RJTUVTVEFNUCA9IDMsXG4gIC8qKlxuICAgKiBWYWx1ZSBpcyByZXR1cm5lZC9wYXJzZWQgYXMgYSBtaW51dGUgb2YgdGhlIGRheSwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICBNSU5VVEVfT0ZfREFZID0gNFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KG1vZGU6IERieERhdGVUaW1lVmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlOiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4pOiAoZGF0ZTogTWF5YmU8RGF0ZSB8IHN0cmluZyB8IG51bWJlcj4pID0+IE1heWJlPERhdGU+IHtcbiAgbGV0IGZhY3Rvcnk6IChkYXRlOiBNYXliZTxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyPikgPT4gTWF5YmU8RGF0ZT47XG4gIGxldCB1c2VUaW1lem9uZUluc3RhbmNlID0gdHJ1ZTtcblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLkRBWV9TVFJJTkc6XG4gICAgICBmYWN0b3J5ID0gKHgpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZT47XG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgeCkge1xuICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICByZXN1bHQgPSBwYXJzZUlTTzg2MDFEYXlTdHJpbmdUb0RhdGUoeCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IERhdGUoeCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzdWx0ID0geDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgICB1c2VUaW1lem9uZUluc3RhbmNlID0gZmFsc2U7IC8vIGRheSBzdHJpbmdzIGRvIG5vdCB1c2UgdGltZXpvbmVzXG4gICAgICBicmVhaztcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLk1JTlVURV9PRl9EQVk6XG4gICAgICBmYWN0b3J5ID0gKHgpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZT47XG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgeCkge1xuICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICByZXN1bHQgPSBkYXRlRnJvbU1pbnV0ZU9mRGF5KHgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlSnNEYXRlU3RyaW5nKHgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlc3VsdCA9IHg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEYnhEYXRlVGltZVZhbHVlTW9kZS5VTklYX1RJTUVTVEFNUDpcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEVfU1RSSU5HOlxuICAgIGNhc2UgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTpcbiAgICBkZWZhdWx0OlxuICAgICAgZmFjdG9yeSA9ICh4KSA9PiAoeCAhPSBudWxsID8gdG9Kc0RhdGUoeCBhcyBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyKSA6IHgpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBpZiAodGltZXpvbmVJbnN0YW5jZSAmJiB1c2VUaW1lem9uZUluc3RhbmNlKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxGYWN0b3J5ID0gZmFjdG9yeTtcblxuICAgIGZhY3RvcnkgPSAoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGUgPSBvcmlnaW5hbEZhY3RvcnkoaW5wdXQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGF0ZSA/IHRpbWV6b25lSW5zdGFuY2Uuc3lzdGVtRGF0ZVRvVGFyZ2V0RGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZmFjdG9yeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5KG1vZGU6IERieERhdGVUaW1lVmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlOiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4pOiAoZGF0ZTogTWF5YmU8RGF0ZT4pID0+IE1heWJlPERhdGUgfCBzdHJpbmcgfCBudW1iZXI+IHtcbiAgbGV0IGZhY3Rvcnk6IChkYXRlOiBNYXliZTxEYXRlPikgPT4gTWF5YmU8RGF0ZSB8IHN0cmluZyB8IG51bWJlcj47XG4gIGxldCB1c2VUaW1lem9uZUluc3RhbmNlID0gdHJ1ZTtcblxuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLkRBWV9TVFJJTkc6XG4gICAgICBmYWN0b3J5ID0gKHgpID0+ICh4ICE9IG51bGwgPyBmb3JtYXRUb0lTTzg2MDFEYXlTdHJpbmdGb3JTeXN0ZW0oeCkgOiB4KTtcbiAgICAgIHVzZVRpbWV6b25lSW5zdGFuY2UgPSBmYWxzZTsgLy8gZGF5IHN0cmluZ3MgZG8gbm90IHVzZSB0aW1lem9uZXNcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURV9TVFJJTkc6XG4gICAgICBmYWN0b3J5ID0gKHgpID0+ICh4ICE9IG51bGwgPyBmb3JtYXRUb0lTTzg2MDFEYXRlU3RyaW5nKHgpIDogeCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLlVOSVhfVElNRVNUQU1QOlxuICAgICAgZmFjdG9yeSA9ICh4KSA9PiAoeCAhPSBudWxsID8geC5nZXRUaW1lKCkgOiB4KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuTUlOVVRFX09GX0RBWTpcbiAgICAgIGZhY3RvcnkgPSAoeCkgPT4gKHggIT0gbnVsbCA/IGRhdGVUb01pbnV0ZU9mRGF5KHgpIDogeCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEU6XG4gICAgZGVmYXVsdDpcbiAgICAgIGZhY3RvcnkgPSAoeCkgPT4geDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKHRpbWV6b25lSW5zdGFuY2UgJiYgdXNlVGltZXpvbmVJbnN0YW5jZSkge1xuICAgIGNvbnN0IG9yaWdpbmFsRmFjdG9yeSA9IGZhY3Rvcnk7XG5cbiAgICBmYWN0b3J5ID0gKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBkYXRlID0gaW5wdXQgPyB0aW1lem9uZUluc3RhbmNlLnRhcmdldERhdGVUb1N5c3RlbURhdGUoaW5wdXQpIDogaW5wdXQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBvcmlnaW5hbEZhY3RvcnkoZGF0ZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZmFjdG9yeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRieERhdGVUaW1lSXNTYW1lRGF0ZVRpbWVGaWVsZFZhbHVlKGE6IE1heWJlPERhdGUgfCBJU084NjAxRGF5U3RyaW5nIHwgbnVtYmVyPiwgYjogTWF5YmU8RGF0ZSB8IElTTzg2MDFEYXlTdHJpbmcgfCBudW1iZXI+KSB7XG4gIGNvbnN0IHR5cGVvZkEgPSB0eXBlb2YgYTtcbiAgcmV0dXJuIGEgJiYgYiA/ICh0eXBlb2ZBID09PSAnc3RyaW5nJyB8fCB0eXBlb2ZBID09PSAnbnVtYmVyJyA/IGEgPT09IGIgOiBpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKGEgYXMgRGF0ZSwgYiBhcyBEYXRlKSkgOiBhID09IGI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhEYXRlUmFuZ2VJc1NhbWVEYXRlUmFuZ2VGaWVsZFZhbHVlKGE6IE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4sIGI6IE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4pIHtcbiAgcmV0dXJuIGEgJiYgYiA/IGRieERhdGVUaW1lSXNTYW1lRGF0ZVRpbWVGaWVsZFZhbHVlKGEuc3RhcnQsIGIuc3RhcnQpICYmIGRieERhdGVUaW1lSXNTYW1lRGF0ZVRpbWVGaWVsZFZhbHVlKGEuZW5kLCBiLmVuZCkgOiBhID09IGI7XG59XG4iXX0=
@@ -78,7 +78,13 @@ export class DbxDateTimeFieldComponent extends FieldType {
78
78
  return this.field.props;
79
79
  }
80
80
  get timeOnly() {
81
- return this.dateTimeField.timeOnly;
81
+ const timeValuesOnly = this.valueMode === DbxDateTimeValueMode.MINUTE_OF_DAY;
82
+ if (timeValuesOnly) {
83
+ return true;
84
+ }
85
+ else {
86
+ return this.dateTimeField.timeOnly;
87
+ }
82
88
  }
83
89
  get showDateInput() {
84
90
  return !this.timeOnly;
@@ -499,4 +505,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
499
505
  type: Component,
500
506
  args: [{ template: "<div class=\"dbx-datetime-field\" fxLayout=\"row wrap\" fxLayout.xs=\"column wrap\" fxLayoutAlign=\"space-evenly stretch\">\n <!-- Date -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"dateOnly ? '100' : '50'\" *ngIf=\"showDateInput\">\n <ng-container *ngTemplateOutlet=\"dateInputTemplate\"></ng-container>\n <!-- Additional spacing -->\n <dbx-button-spacer *ngIf=\"!dateOnly\"></dbx-button-spacer>\n </div>\n <!-- Time -->\n <div class=\"dbx-datetime-row\" fxFlex.lt-sm=\"100\" [fxFlex]=\"showDateInput ? '50' : '100'\">\n <ng-container *ngIf=\"showTimeInput$ | async\">\n <ng-container *ngTemplateOutlet=\"timeMenuAndInputTemplate\"></ng-container>\n </ng-container>\n <div *ngIf=\"showAddTime$ | async\" class=\"add-time-button-wrapper\">\n <button mat-button class=\"mat-datepicker-button-highlight dbx-button-spacer add-time-button\" ngClass.lt-sm=\"add-time-button-full\" (click)=\"addTime()\">\n <mat-icon>timer</mat-icon>\n Add Time\n </button>\n </div>\n </div>\n <div *ngIf=\"!hideDateHint\" class=\"dbx-datetime-row dbx-datetime-hint-row\" fxFlex=\"100\">\n <div class=\"dbx-hint\" [ngSwitch]=\"fullDay$ | async\">\n <small *ngSwitchCase=\"true\">\n <b class=\"dbx-ok\">{{ allDayLabel }}</b>\n {{ displayValue$ | async | date: 'fullDate' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | dateDistance }})\n </small>\n <small *ngSwitchCase=\"false\">\n <ng-container *ngIf=\"displayValue$ | async\">\n <b class=\"dbx-ok\">{{ atTimeLabel }}</b>\n {{ displayValue$ | async | date: 'medium' }} {{ timezoneAbbreviation$ | async }} ({{ displayValue$ | async | timeDistance }})\n </ng-container>\n </small>\n </div>\n </div>\n</div>\n\n<!-- Date Input Template -->\n<ng-template #dateInputTemplate>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ dateLabel }}</mat-label>\n <input #dateInput matInput [min]=\"dateInputMin$ | async\" [max]=\"dateInputMax$ | async\" [matDatepicker]=\"picker\" [matDatepickerFilter]=\"(pickerFilter$ | async) || defaultPickerFilter\" (dateChange)=\"datePicked($event)\" [value]=\"dateValue$ | async\" (keydown)=\"keydownOnDateInput($event)\" />\n <mat-datepicker #picker></mat-datepicker>\n <button matPrefix class=\"dbx-datetime-row-button\" *ngIf=\"!hideDatePicker\" mat-icon-button (click)=\"picker.open()\" [disabled]=\"disabled\">\n <mat-icon>calendar_today</mat-icon>\n </button>\n <span matTextSuffix *ngIf=\"!(showTimeInput$ | async)\">\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Time Menu/Input Template -->\n<ng-template #timeMenuAndInputTemplate>\n <mat-menu #timemenu=\"matMenu\">\n <ng-container *ngIf=\"timeMode === 'optional'\">\n <button mat-menu-item (click)=\"removeTime()\">\n <span>Remove Time</span>\n </button>\n <mat-divider></mat-divider>\n </ng-container>\n <ng-container *ngFor=\"let preset of presets$ | async\">\n <button mat-menu-item (click)=\"selectPreset(preset)\">{{ preset.label | getValue }}</button>\n </ng-container>\n </mat-menu>\n <mat-form-field class=\"dbx-datetime-row-field\">\n <mat-label>{{ timeLabel }}</mat-label>\n <input #timeInput matInput [formControl]=\"timeInputCtrl\" (focus)=\"focusTime()\" (focusout)=\"focusOutTime()\" (keydown)=\"keydownOnTimeInput($event)\" />\n <button matPrefix class=\"dbx-datetime-row-button\" mat-icon-button [matMenuTriggerFor]=\"timemenu\" aria-label=\"opens the time menu\" [disabled]=\"disabled\">\n <mat-icon>timer</mat-icon>\n </button>\n <span matTextSuffix>\n <ng-container *ngTemplateOutlet=\"timezoneSuffixTemplate\"></ng-container>\n </span>\n </mat-form-field>\n</ng-template>\n\n<!-- Timezone Suffix -->\n<ng-template #timezoneSuffixTemplate>\n <span *ngIf=\"showTimezone\" class=\"dbx-datetime-timezone dbx-faint\">{{ timezoneAbbreviation$ | async }}</span>\n</ng-template>\n" }]
501
507
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DbxDateTimeFieldMenuPresetsService }]; } });
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9kYXRldGltZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0YsT0FBTyxFQUFFLGlCQUFpQixFQUF5Ryx1QkFBdUIsRUFBb0IsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbFQsT0FBTyxFQUFFLG1CQUFtQixFQUF3QixzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFpQyxXQUFXLEVBQUUsVUFBVSxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlaLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqTyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQW1CLFdBQVcsRUFBRSxVQUFVLEVB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S0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1NBQ2Q7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDdkIsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUNiO2FBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDWjtRQUVELElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsYUFBYTtJQUNmLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqRCxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FwbkJVLHlCQUF5QjttR0FBekIseUJBQXlCLDJFQ3ZNdEMseS9IQStFQTs7NEZEd0hhLHlCQUF5QjtrQkFIckMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgTWF5YmUsIHR5cGUgUmVhZGFibGVUaW1lU3RyaW5nLCB0eXBlIEFycmF5T3JWYWx1ZSwgdHlwZSBJU084NjAxRGF0ZVN0cmluZywgYXNBcnJheSwgZmlsdGVyTWF5YmVWYWx1ZXMsIHR5cGUgRGVjaXNpb25GdW5jdGlvbiwgdHlwZSBNaWxsaXNlY29uZHMsIHR5cGUgVGltZXpvbmVTdHJpbmcsIHR5cGUgTG9naWNhbERhdGUsIHR5cGUgRGF0ZU9yRGF5U3RyaW5nLCBpc0lTTzg2MDFEYXlTdHJpbmdTdGFydCwgdHlwZSBNYXBGdW5jdGlvbiwgbWFwSWRlbnRpdHlGdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgZGF0ZUZyb21Mb2dpY2FsRGF0ZSwgRGF0ZVRpbWVNaW51dGVDb25maWcsIERhdGVUaW1lTWludXRlSW5zdGFuY2UsIGd1ZXNzQ3VycmVudFRpbWV6b25lLCByZWFkYWJsZVRpbWVTdHJpbmdUb0RhdGUsIHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcsIHV0Y0RheUZvckRhdGUsIHNhZmVUb0pzRGF0ZSwgZmluZE1pbkRhdGUsIGZpbmRNYXhEYXRlLCBpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzLCBnZXRUaW1lem9uZUFiYnJldmlhdGlvbiwgaXNTYW1lRGF0ZURheSwgZGF0ZVRpbWV6b25lVXRjTm9ybWFsLCBEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZSwgdG9Kc0RheURhdGUsIGlzU2FtZURhdGUsIGRhdGVUaW1lTWludXRlV2hvbGVEYXlEZWNpc2lvbkZ1bmN0aW9uIH0gZnJvbSAnQGRlcmVla2IvZGF0ZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNoYXJlUmVwbGF5LCBtYXAsIHN0YXJ0V2l0aCwgdGFwLCBmaXJzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGRlYm91bmNlVGltZSwgdGhyb3R0bGVUaW1lLCBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIFN1YmplY3QsIG1lcmdlLCBpbnRlcnZhbCwgb2YsIGNvbWJpbmVMYXRlc3RXaXRoLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBhZGRNaW51dGVzLCBzdGFydE9mRGF5LCBhZGREYXlzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgYXNPYnNlcnZhYmxlRnJvbUdldHRlciwgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlR2V0dGVyLCBza2lwRmlyc3RNYXliZSwgU3Vic2NyaXB0aW9uT2JqZWN0LCBzd2l0Y2hNYXBNYXliZURlZmF1bHQsIHN3aXRjaE1hcE1heWJlT2JzIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYXRlVGltZVByZXNldCwgRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uLCBkYXRlVGltZVByZXNldCB9IGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSB9IGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZVZhbHVlTW9kZSwgZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5LCBkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZSwgZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkgfSBmcm9tICcuL2RhdGUudmFsdWUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xQYXRoLCBzdHJlYW1WYWx1ZUZyb21Db250cm9sIH0gZnJvbSAnLi4vLi4vLi4vLi4vZm9ybS9mb3JtLmFuZ3VsYXIudXRpbCc7XG5cbmV4cG9ydCBlbnVtIERieERhdGVUaW1lRmllbGRUaW1lTW9kZSB7XG4gIC8qKlxuICAgKiBUaW1lIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgUkVRVUlSRUQgPSAncmVxdWlyZWQnLFxuICAvKipcbiAgICogVGltZSBpcyBvcHRpb25hbC5cbiAgICovXG4gIE9QVElPTkFMID0gJ29wdGlvbmFsJyxcbiAgLyoqXG4gICAqIFRpbWUgaXMgcGVybWVuYW50bHkgb2ZmLlxuICAgKi9cbiAgTk9ORSA9ICdub25lJ1xufVxuXG5leHBvcnQgdHlwZSBEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24gPSBPbWl0PERhdGVUaW1lTWludXRlQ29uZmlnLCAnZGF0ZSc+O1xuXG5leHBvcnQgdHlwZSBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGUgPSAnYmVmb3JlJyB8ICdhZnRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZCB7XG4gIC8qKlxuICAgKiBGaWVsZCBrZXkvcGF0aCB0byBzeW5jIHdpdGgvYWdhaW5zdC5cbiAgICovXG4gIHJlYWRvbmx5IHN5bmNXaXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdG8gc3luYyBhZ2FpbnN0IHRoZSBvdGhlciBmaWVsZC5cbiAgICovXG4gIHJlYWRvbmx5IHN5bmNUeXBlOiBEYnhEYXRlVGltZUZpZWxkU3luY1R5cGU7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHRpbWUgZGF0ZSBmaWVsZCB0aGF0IGhhcyBhIHJlZmVyZW5jZSBhbmQgb3B0aW9uYWwgbWFwIGZ1bmN0aW9uIHRvIG1hcCB0aGUgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnPEkgPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IHBhdGg6IEZvcm1Db250cm9sUGF0aDtcbiAgcmVhZG9ubHkgbWFwVmFsdWU/OiBNYXBGdW5jdGlvbjxJLCBNYXliZTxEYXRlT3JEYXlTdHJpbmc+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnKGlucHV0OiB1bmtub3duKTogaW5wdXQgaXMgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnIHtcbiAgcmV0dXJuIGlucHV0ICE9IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgKGlucHV0IGFzIERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZykucGF0aCA9PT0gJ3N0cmluZyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFByb3BzIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIC8qKlxuICAgKiBDdXN0b20gZGF0ZSBsYWJlbC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gRGF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0ZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdGltZSBsYWJlbC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gVGltZVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIHRoZSBkYXRlIGhpbnQgZm9yIFwiQWxsIERheVwiLiBEZWZhdWx0cyB0byBcIkFsbCBEYXlcIi5cbiAgICovXG4gIHJlYWRvbmx5IGFsbERheUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMYWJlbCB0byB1c2UgZm9yIHRoZSBkYXRlIGhpbnQgZm9yIFwiQXRcIi4gRGVmYXVsdHMgdG8gXCJBdFwiLlxuICAgKi9cbiAgcmVhZG9ubHkgYXRUaW1lTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG1vZGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIERBVEVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlTW9kZT86IERieERhdGVUaW1lVmFsdWVNb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZGF0ZSBpcyBoaWRkZW4sIGFuZCBhdXRvbWF0aWNhbGx5IHVzZXMgdG9kYXkvaW5wdXQgZGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHRpbWUgY2FuIGJlIGFkZGVkL3JlbW92ZWQgb3B0aW9uYWxseS5cbiAgICpcbiAgICogVGhpcyBpcyBpZ25vcmVkIGlmIHRpbWVPbmx5IGlzIHNwZWNpZmllZC5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVNb2RlPzogRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlO1xuXG4gIC8qKlxuICAgKiBPdGhlciBmb3JtIGNvbnRyb2wgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB3aGV0aGVyIG9yIG5vdCBpdCBpcyBhIGZ1bGwgZGF5LlxuICAgKlxuICAgKiBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiB0aW1lIGlzIG9wdGlvbmFsLlxuICAgKlxuICAgKiBXaGVuIHRpbWUgaXMgb2ZmLCB0aGUgZmllbGQgaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBmdWxsRGF5RmllbGROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwYXNzIHRoZSBkYXRlIHZhbHVlIGFzIGEgVVRDIGRhdGUsIG9yIGEgZGF0ZSBpbiB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bGxEYXlJblVUQz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IG90IGhpZGUgdGhlIGRhdGUgaGludCBpbmZvIGNvbnRlbnQuXG4gICAqXG4gICAqIEZhbHNlIGJ5IGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGhpZGVEYXRlSGludD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGhpZGUgdGhlIGRhdGUvY2FsZW5kYXIgcGlja2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGlkZURhdGVQaWNrZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcGlja2VyIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHBpY2tlckNvbmZpZz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj47XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIHN5bmNpbmcgd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHMgd2l0aCBhIERhdGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBnZXRTeW5jRmllbGRzT2JzPzogKCkgPT4gT2JzZXJ2YWJsZTxBcnJheU9yVmFsdWU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZD4+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBpbnB1dCB0aW1lem9uZSB0byBkZWZhdWx0IHRvLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGZ1bGxEYXlJblVUQyBpcyB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZXpvbmU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxUaW1lem9uZVN0cmluZz4+PjtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBUaGUgZGF0ZSB0byBhcHBseSB0aGUgdGltZSB0by5cbiAgICpcbiAgICogVGhlIHRpbWV6b25lIGFiYnJ2aWF0aW9uIHdpbGwgYWxzbyB1c2UgdGhpcyBkYXRlIHdoZW4gdXNpbmcgdGhlIHRpbWUtb25seSBtb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZURhdGU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcgfCBGb3JtQ29udHJvbFBhdGggfCBEYXRlT3JEYXlTdHJpbmc+Pj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgdGhlIHRpbWV6b25lLiBUcnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBzaG93VGltZXpvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcHJlc2V0cyB0byBzaG93IGluIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHJlYWRvbmx5IHByZXNldHM/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXT47XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1zIHRvIHByZXZlbnQgb3V0cHV0IGZyb20gZ29pbmcgb3V0IHdoZW4gdGhlIGlucHV0IHZhbHVlIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBpbnB1dE91dHB1dERlYm91bmNlVGltZT86IE1pbGxpc2Vjb25kcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkIGV4dGVuZHMgUGljazxEYnhEYXRlVGltZUZpZWxkU3luY0ZpZWxkLCAnc3luY1R5cGUnPiB7XG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDxNYXliZTxEYXRlIHwgSVNPODYwMURhdGVTdHJpbmc+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN5bmNDb25maWdWYWx1ZU9icyhwYXJzZUNvbmZpZ3NPYnM6IE9ic2VydmFibGU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZFtdPiwgdHlwZTogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNUeXBlKTogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4ge1xuICByZXR1cm4gcGFyc2VDb25maWdzT2JzLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSB4LmZpbmQoKHkpID0+IHkuc3luY1R5cGUgPT09IHR5cGUpO1xuICAgICAgbGV0IHJlc3VsdDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD47XG5cbiAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgY29uc3QgeyBjb250cm9sIH0gPSBjb25maWc7XG4gICAgICAgIHJlc3VsdCA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGNvbnRyb2wudmFsdWUpLFxuICAgICAgICAgIG1hcCgoeCkgPT4gc2FmZVRvSnNEYXRlKHgpID8/IG51bGwpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBvZihudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG59XG5cbmNvbnN0IFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUU6IE1pbGxpc2Vjb25kcyA9IDEwO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdkYXRldGltZS5maWVsZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RGF0ZVRpbWVGaWVsZENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc8RGJ4RGF0ZVRpbWVGaWVsZFByb3BzPj4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfdmFsdWVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfY29uZmlnID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieERhdGVUaW1lUGlja2VyQ29uZmlndXJhdGlvbj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9zeW5jQ29uZmlnT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPEFycmF5T3JWYWx1ZTxEYnhEYXRlVGltZUZpZWxkU3luY0ZpZWxkPj4+Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX2RlZmF1bHRUaW1lem9uZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfdGltZURhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8TWF5YmU8RGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnIHwgRm9ybUNvbnRyb2xQYXRoIHwgRGF0ZU9yRGF5U3RyaW5nPj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9wcmVzZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPj4ob2YoW10pKTtcblxuICBwcml2YXRlIF9mdWxsRGF5SW5wdXRDdHJsPzogRm9ybUNvbnRyb2w7XG4gIHByaXZhdGUgX2Z1bGxEYXlDb250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8Ym9vbGVhbj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmdWxsRGF5Q29udHJvbCQgPSB0aGlzLl9mdWxsRGF5Q29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHByaXZhdGUgX29mZnNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2xPYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPEFic3RyYWN0Q29udHJvbDxNYXliZTxEYXRlPj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHByaXZhdGUgX3VwZGF0ZVRpbWUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lJDogT2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+ID0gdGhpcy5fZGVmYXVsdFRpbWV6b25lLnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnBpcGUoXG4gICAgbWFwKChkZWZhdWx0VGltZXpvbmUpID0+IHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltZXpvbmUgPz8gZ3Vlc3NDdXJyZW50VGltZXpvbmUoKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+PiA9IHRoaXMudGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh0aW1lem9uZSkgPT4gKHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWVEYXRlJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSB0aGlzLl90aW1lRGF0ZS5waXBlKFxuICAgIHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj47XG5cbiAgICAgIGlmICh4KSB7XG4gICAgICAgIC8vIGlmIHRoZSBzdHJpbmcgaXMgbm90IGEgZGF0ZSBzdHJpbmcsIHRoZW4gdHJlYXQgaXQgYXMgYSBwYXRoXG4gICAgICAgIGlmICgodHlwZW9mIHggPT09ICdzdHJpbmcnICYmICFpc0lTTzg2MDFEYXlTdHJpbmdTdGFydCh4KSkgfHwgaXNEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcoeCkpIHtcbiAgICAgICAgICBjb25zdCB7IHBhdGgsIG1hcFZhbHVlIH06IERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyA9IHR5cGVvZiB4ID09PSAnc3RyaW5nJyA/IHsgcGF0aDogeCB9IDogeDtcbiAgICAgICAgICBvYnMgPVxuICAgICAgICAgICAgc3RyZWFtVmFsdWVGcm9tQ29udHJvbDxEYXRlT3JEYXlTdHJpbmc+KHRoaXMuZm9ybSwgcGF0aCk/LnBpcGUoXG4gICAgICAgICAgICAgIG1hcChtYXBWYWx1ZSA/PyBtYXBJZGVudGl0eUZ1bmN0aW9uKCkpLFxuICAgICAgICAgICAgICBtYXAoKHgpID0+ICh4ID8gdG9Kc0RheURhdGUoeCkgOiB1bmRlZmluZWQpKVxuICAgICAgICAgICAgKSA/PyBvZih1bmRlZmluZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9icyA9IG9mKHRvSnNEYXlEYXRlKHgpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JzID0gb2YodW5kZWZpbmVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZhbHVlSW5TeXN0ZW1UaW1lem9uZSQgPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIG1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGg8TWF5YmU8RGF0ZT4+KGNvbnRyb2wudmFsdWUpLCBzaGFyZVJlcGxheSgxKSkpLFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQpLFxuICAgIHN3aXRjaE1hcCgoW3gsIHRpbWV6b25lSW5zdGFuY2VdKSA9PiB7XG4gICAgICByZXR1cm4geC5waXBlKG1hcChkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKSk7XG4gICAgfSksXG4gICAgdGhyb3R0bGVUaW1lKDIwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWUgfSksIC8vIHRocm90dGxlIGluY29taW5nIHZhbHVlcyBhbmQgdGltZXpvbmUgY2hhbmdlc1xuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVIb3Vyc0FuZE1pbnV0ZXMpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmVmcmVzaEludGVyYWwkID0gaW50ZXJ2YWwoMTAgKiAxMDAwKTtcblxuICAvKipcbiAgICogVXNlZCB0byB0cmlnZ2VyL2Rpc3BsYXkgdmlzdWFsIHVwZGF0ZXMgKHNwZWNpZmljYWxseSBvbiB0aW1lRGlzdGFuY2UsIGV0Yy4pLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheVZhbHVlJCA9IHRoaXMucmVmcmVzaEludGVyYWwkLnBpcGUoXG4gICAgLy8gZXZlcnkgMTAgc2Vjb25kcywgcmVmcmVzaCB3L2ludGVydmFsXG4gICAgc3RhcnRXaXRoKDApLFxuICAgIG1hcCgoKSA9PiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKSksXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lU3RyaW5nJDogT2JzZXJ2YWJsZTxSZWFkYWJsZVRpbWVTdHJpbmcgfCAnJz4gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4ID8gdG9Mb2NhbFJlYWRhYmxlVGltZVN0cmluZyh4KSA6ICcnKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2wobmV3IERhdGUoKSwge1xuICAgIHZhbGlkYXRvcnM6IFtdXG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRpbWVJbnB1dEN0cmwgPSBuZXcgRm9ybUNvbnRyb2woJycsIHtcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKG5vdykkfF4oWzAtOV18KDBbMC05XSl8KDFbMC05XSl8KDJbMC0zXSkpKDopPyhbMC01XVswLTldKT8oXFxzKT8oW2FwQVBdW01tXSk/KFxcXFxzKSokLyldXG4gIH0pO1xuXG4gIGdldCBkYXRlTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kYXRlTGFiZWwgPz8gJ0RhdGUnO1xuICB9XG5cbiAgZ2V0IHRpbWVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnRpbWVMYWJlbCA/PyAnVGltZSc7XG4gIH1cblxuICBnZXQgYWxsRGF5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hbGxEYXlMYWJlbCA/PyAnQWxsIERheSc7XG4gIH1cblxuICBnZXQgYXRUaW1lTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5hdFRpbWVMYWJlbCA/PyAnQXQnO1xuICB9XG5cbiAgZ2V0IGRhdGVPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVNb2RlID09PSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgfVxuXG4gIGdldCBkYXRlVGltZUZpZWxkKCk6IERieERhdGVUaW1lRmllbGRQcm9wcyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM7XG4gIH1cblxuICBnZXQgdGltZU9ubHkoKTogTWF5YmU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVUaW1lRmllbGQudGltZU9ubHk7XG4gIH1cblxuICBnZXQgc2hvd0RhdGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudGltZU9ubHk7XG4gIH1cblxuICBnZXQgdmFsdWVNb2RlKCk6IERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy52YWx1ZU1vZGUgPz8gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTtcbiAgfVxuXG4gIGdldCB0aW1lTW9kZSgpOiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUge1xuICAgIGNvbnN0IGRhdGVWYWx1ZXNPbmx5ID0gdGhpcy52YWx1ZU1vZGUgPT09IERieERhdGVUaW1lVmFsdWVNb2RlLkRBWV9TVFJJTkc7XG5cbiAgICBpZiAoZGF0ZVZhbHVlc09ubHkpIHtcbiAgICAgIHJldHVybiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGltZU9ubHkgPyBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuUkVRVUlSRUQgOiB0aGlzLmRhdGVUaW1lRmllbGQudGltZU1vZGUgPz8gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBoaWRlRGF0ZUhpbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuaGlkZURhdGVIaW50ID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGhpZGVEYXRlUGlja2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmhpZGVEYXRlUGlja2VyID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHRpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnRpbWV6b25lO1xuICB9XG5cbiAgZ2V0IHRpbWVEYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnRpbWVEYXRlO1xuICB9XG5cbiAgZ2V0IHNob3dUaW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93VGltZXpvbmUgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBwcmVzZXRzKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnByZXNldHM7XG4gIH1cblxuICByZWFkb25seSBmdWxsRGF5JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZnVsbERheUNvbnRyb2wkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzaG93VGltZUlucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZnVsbERheSQucGlwZShtYXAoKHgpID0+ICF4ICYmIHRoaXMudGltZU1vZGUgIT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FKSk7XG5cbiAgcmVhZG9ubHkgc2hvd0FkZFRpbWUkID0gdGhpcy5zaG93VGltZUlucHV0JC5waXBlKFxuICAgIG1hcCgoeCkgPT4gIXggJiYgdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk9QVElPTkFMKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGUkID0gdGhpcy5kYXRlSW5wdXRDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmRhdGVJbnB1dEN0cmwudmFsdWUpLCBmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVBYmJyZXZpYXRpb24kID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlJCwgdGhpcy50aW1lem9uZSQsIHRoaXMudGltZURhdGUkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lem9uZSwgdGltZURhdGVdKSA9PiBnZXRUaW1lem9uZUFiYnJldmlhdGlvbih0aW1lem9uZSwgdGltZURhdGUgPz8gZGF0ZSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlVmFsdWUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IG1lcmdlKHRoaXMuZGF0ZSQsIHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5waXBlKHNraXBGaXJzdE1heWJlKCkpKS5waXBlKFxuICAgIG1hcCgoeDogTWF5YmU8RGF0ZT4pID0+ICh4ID8gc3RhcnRPZkRheSh4KSA6IG51bGwpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlPj4oaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lSW5wdXQkOiBPYnNlcnZhYmxlPFJlYWRhYmxlVGltZVN0cmluZz4gPSB0aGlzLl91cGRhdGVUaW1lLnBpcGUoXG4gICAgZGVib3VuY2VUaW1lKDUpLFxuICAgIG1hcCgoKSA9PiB0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgfHwgJycpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBzeW5jQ29uZmlnT2JzJCA9IHRoaXMuX3N5bmNDb25maWdPYnMucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHBhcnNlZFN5bmNDb25maWdzJDogT2JzZXJ2YWJsZTxEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW10+ID0gdGhpcy5zeW5jQ29uZmlnT2JzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZDogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZFtdO1xuXG4gICAgICBpZiAoeCkge1xuICAgICAgICBwYXJzZWQgPSBmaWx0ZXJNYXliZVZhbHVlcyhcbiAgICAgICAgICBhc0FycmF5KHgpLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoeS5zeW5jV2l0aCk7XG5cbiAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICAgICAgICAuLi55XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQgPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN5bmNDb25maWdCZWZvcmVWYWx1ZSQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gc3luY0NvbmZpZ1ZhbHVlT2JzKHRoaXMucGFyc2VkU3luY0NvbmZpZ3MkLCAnYmVmb3JlJyk7XG4gIHJlYWRvbmx5IHN5bmNDb25maWdBZnRlclZhbHVlJDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSBzeW5jQ29uZmlnVmFsdWVPYnModGhpcy5wYXJzZWRTeW5jQ29uZmlncyQsICdhZnRlcicpO1xuXG4gIHJlYWRvbmx5IHJhd0RhdGVUaW1lJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGVWYWx1ZSQsIHRoaXMudGltZUlucHV0JC5waXBlKHN0YXJ0V2l0aChudWxsKSksIHRoaXMuZnVsbERheSQsIHRoaXMudGltZURhdGUkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lU3RyaW5nLCBmdWxsRGF5LCB0aW1lRGF0ZV0pID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGU+O1xuXG4gICAgICBpZiAoIWRhdGUgfHwgdGhpcy50aW1lT25seSkge1xuICAgICAgICBkYXRlID0gdGltZURhdGUgPz8gbmV3IERhdGUoKTsgLy8gdXNlIHRoZSB0aW1lIGRhdGUsIG9yIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgZGF5XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgIGlmIChmdWxsRGF5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5SW5VVEMpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHV0Y0RheUZvckRhdGUoZGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHN0YXJ0T2ZEYXkoZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgcmVhZGFibGVUaW1lU3RyaW5nVG9EYXRlKHRpbWVTdHJpbmcsIHtcbiAgICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgICAgdXNlU3lzdGVtVGltZXpvbmU6IHRydWVcbiAgICAgICAgICAgIH0pID8/IGRhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudGltZU9ubHkpIHtcbiAgICAgICAgICByZXN1bHQgPSBkYXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlVGltZVBpY2tlckNvbmZpZyQ6IE9ic2VydmFibGU8TWF5YmU8RGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9jb25maWcucGlwZShzd2l0Y2hNYXBNYXliZU9icygpKSwgdGhpcy5zeW5jQ29uZmlnQmVmb3JlVmFsdWUkLCB0aGlzLnN5bmNDb25maWdBZnRlclZhbHVlJF0pLnBpcGUoXG4gICAgbWFwKChbeCwgZGF0ZUlucHV0TWluLCBkYXRlSW5wdXRNYXhdKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBNYXliZTxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+ID0geDtcblxuICAgICAgaWYgKGRhdGVJbnB1dE1pbiAhPSBudWxsIHx8IGRhdGVJbnB1dE1heCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWluOiBsaW1pdE1pbiwgbWF4OiBsaW1pdE1heCB9ID0geD8ubGltaXRzID8/IHt9O1xuICAgICAgICBjb25zdCBtaW4gPSBmaW5kTWluRGF0ZShbZGF0ZUlucHV0TWluLCBkYXRlRnJvbUxvZ2ljYWxEYXRlKGxpbWl0TWluKV0pO1xuICAgICAgICBjb25zdCBtYXggPSBmaW5kTWF4RGF0ZShbZGF0ZUlucHV0TWF4LCBkYXRlRnJvbUxvZ2ljYWxEYXRlKGxpbWl0TWF4KV0pO1xuXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAuLi54LFxuICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgLi4ueD8ubGltaXRzLFxuICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgbWF4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlSW5wdXRNaW4kOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJDb25maWckLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeD8ubGltaXRzPy5taW4gPz8gbnVsbCkgYXMgRGF0ZSB8IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPERhdGUgfCBudWxsPihpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVJbnB1dE1heCQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4Py5saW1pdHM/Lm1heCA/PyBudWxsKSBhcyBEYXRlIHwgbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8RGF0ZSB8IG51bGw+KGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyRmlsdGVyJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPj4gPSB0aGlzLmRhdGVUaW1lUGlja2VyQ29uZmlnJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBkYXRlVGltZU1pbnV0ZVdob2xlRGF5RGVjaXNpb25GdW5jdGlvbih4LCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeDogRGF0ZSB8IG51bGwpID0+ICh4ICE9IG51bGwgPyBmaWx0ZXIoeCkgOiB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFBpY2tlckZpbHRlcjogRGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4gPSAoKSA9PiB0cnVlO1xuXG4gIHJlYWRvbmx5IHRpbWVPdXRwdXQkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3RGF0ZVRpbWUkLCB0aGlzLl9vZmZzZXQsIHRoaXMuZGF0ZVRpbWVQaWNrZXJDb25maWckXSkucGlwZShcbiAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoY3VycmVudCwgbmV4dCkgPT4gY3VycmVudFswXSA9PT0gbmV4dFswXSAmJiBuZXh0WzFdID09PSAwKSxcbiAgICB0YXAoKFssIHN0ZXBzT2Zmc2V0XSkgPT4gKHN0ZXBzT2Zmc2V0ID8gdGhpcy5fb2Zmc2V0Lm5leHQoMCkgOiAwKSksXG4gICAgbWFwKChbZGF0ZSwgc3RlcHNPZmZzZXQsIGNvbmZpZ10pID0+IHtcbiAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcm91bmREb3duVG9NaW51dGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGF0ZSA9IGluc3RhbmNlLmNsYW1wKGRhdGUpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gc3RlcHNPZmZzZXQgKiA1O1xuXG4gICAgICAgIGlmIChtaW51dGVzICE9IDApIHtcbiAgICAgICAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBtaW51dGVzKTtcbiAgICAgICAgICBkYXRlID0gaW5zdGFuY2UuY2xhbXAoZGF0ZSk7IC8vIGNsYW1wIHRoZSBkYXRlIGFnYWluXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwcmVzZXRzJDogT2JzZXJ2YWJsZTxEYXRlVGltZVByZXNldFtdPiA9IHRoaXMuX3ByZXNldHMucGlwZShcbiAgICBzd2l0Y2hNYXBNYXliZU9icygpLFxuICAgIG1hcCgoeDogRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10pID0+IHgubWFwKGRhdGVUaW1lUHJlc2V0KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWFkb25seSBkYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZTogRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5uZXh0KHRoaXMuZm9ybUNvbnRyb2wpO1xuXG4gICAgY29uc3QgaW5wdXRQaWNrZXJDb25maWcgPSB0aGlzLmRhdGVUaW1lRmllbGQucGlja2VyQ29uZmlnO1xuICAgIHRoaXMuX2NvbmZpZy5uZXh0KGlucHV0UGlja2VyQ29uZmlnID8gYXNPYnNlcnZhYmxlRnJvbUdldHRlcihpbnB1dFBpY2tlckNvbmZpZykgOiBvZih7fSkpO1xuICAgIHRoaXMuX3N5bmNDb25maWdPYnMubmV4dCh0aGlzLmRhdGVUaW1lRmllbGQuZ2V0U3luY0ZpZWxkc09icz8uKCkpO1xuXG4gICAgdGhpcy5fc3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQucGlwZShtYXAoKHRpbWV6b25lSW5zdGFuY2UpID0+IGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2N1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVPdXRwdXQkLnBpcGUoXG4gICAgICAgICAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSAqIDIsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgICAgICBza2lwRmlyc3RNYXliZSgpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgICAgICAgICBtYXAoKHgpID0+IHZhbHVlRmFjdG9yeSh4KSksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICFkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZSh4LCBjdXJyZW50VmFsdWUpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKlxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudGltZVN0cmluZyQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLnNldFRpbWUoeCk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4gKHggPyBpc1NhbWVEYXRlKHgsIHN0YXJ0T2ZEYXkoeCkpIDogZmFsc2UpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKChpc0lucHV0VmFsdWVBdE1pZG5pZ2h0KSA9PiB7XG4gICAgICAgICAgaGFzU2V0TWlkbmlnaHRGcm9tSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy50aW1lU3RyaW5nJC5waXBlKFxuICAgICAgICAgICAgLy8gc2tpcCgxKSxcbiAgICAgICAgICAgIG1hcCgodGltZVN0cmluZykgPT4gW3RpbWVTdHJpbmcsIGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHRdIGFzIFtzdHJpbmcsIGJvb2xlYW5dKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbeCwgaXNJbnB1dFZhbHVlQXRNaWRuaWdodF0pID0+IHtcbiAgICAgICAgLy8gU2tpcCBldmVudHMgd2hlcmUgdGhlIHRpbWVJbnB1dCB2YWx1ZSBpcyBjbGVhcmVkLCB1bmxlc3MgdGhlIGlucHV0IHZhbHVlIGlzIGF0IG1pZG5pZ2h0IGFuZCB3ZSd2ZSBhbHJlYWR5IHByb2Nlc3NlZCBpdCBiZWluZyBhdCBtaWRuaWdodFxuICAgICAgICBpZiAoIXRoaXMudGltZUlucHV0Q3RybC52YWx1ZSAmJiB4ID09PSAnMTI6MDBBTScgJiYgKCFpc0lucHV0VmFsdWVBdE1pZG5pZ2h0IHx8IChpc0lucHV0VmFsdWVBdE1pZG5pZ2h0ICYmIGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0KSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGhhcyBzZXQgZmxhZ1xuICAgICAgICBpZiAoeCA9PT0gJzEyOjAwQU0nICYmIGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQpIHtcbiAgICAgICAgICBoYXNTZXRNaWRuaWdodEZyb21JbnB1dCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRpbWUoeCk7XG4gICAgICB9KTtcblxuICAgIC8vIFNldCBkZWZhdWx0IHRpbWV6b25lIGlmIHByb3ZpZGVkLlxuICAgIGlmICh0aGlzLnRpbWV6b25lICYmICF0aGlzLmRhdGVUaW1lRmllbGQuZnVsbERheUluVVRDKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0VGltZXpvbmUubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMudGltZXpvbmUpKTtcbiAgICB9XG5cbiAgICB0aGlzLl90aW1lRGF0ZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy50aW1lRGF0ZSkpO1xuXG4gICAgLy8gV2F0Y2ggZm9yIGRpc2FibGVkIGNoYW5nZXMgc28gd2UgY2FuIHByb3BvZ2F0ZSB0aGVtIHByb3Blcmx5LlxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0Q3RybC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy50aW1lSW5wdXRDdHJsLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXRDdHJsLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMudGltZUlucHV0Q3RybC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNGdWxsRGF5RmllbGQgPSB0aGlzLmRhdGVUaW1lRmllbGQuZnVsbERheUZpZWxkTmFtZTtcbiAgICBsZXQgZnVsbERheUZpZWxkQ3RybDogTWF5YmU8QWJzdHJhY3RDb250cm9sPjtcblxuICAgIGlmIChpc0Z1bGxEYXlGaWVsZCkge1xuICAgICAgZnVsbERheUZpZWxkQ3RybCA9IHRoaXMuZm9ybS5nZXQoaXNGdWxsRGF5RmllbGQpO1xuICAgIH1cblxuICAgIGlmICghZnVsbERheUZpZWxkQ3RybCkge1xuICAgICAgY29uc3QgaXNGdWxsRGF5ID0gdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU7XG4gICAgICB0aGlzLl9mdWxsRGF5SW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sKGlzRnVsbERheSk7XG5cbiAgICAgIC8vIFNldCB0aGUgY29udHJvbCBpbiB0aGUgZm9ybSB0b28gaWYgdGhlIG5hbWUgaXMgZGVmaW5lZC5cbiAgICAgIGlmIChpc0Z1bGxEYXlGaWVsZCkge1xuICAgICAgICAodGhpcy5mb3JtIGFzIEZvcm1Hcm91cCkuYWRkQ29udHJvbChpc0Z1bGxEYXlGaWVsZCwgdGhpcy5fZnVsbERheUlucHV0Q3RybCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bGxEYXlGaWVsZEN0cmwgPSB0aGlzLl9mdWxsRGF5SW5wdXRDdHJsO1xuICAgIH1cblxuICAgIHRoaXMuX2Z1bGxEYXlDb250cm9sT2JzLm5leHQoZnVsbERheUZpZWxkQ3RybCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMudGltZU1vZGUpIHtcbiAgICAgIGNhc2UgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk9QVElPTkFMOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU6XG4gICAgICAgIHRoaXMucmVtb3ZlVGltZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEOlxuICAgICAgICB0aGlzLmFkZFRpbWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJlc2V0cyAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnByZXNldHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcHJlc2V0cy5uZXh0KHRoaXMuZGJ4RGF0ZVRpbWVGaWVsZENvbmZpZ1NlcnZpY2UuY29uZmlndXJhdGlvbnMkKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX3N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fdmFsdWVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NvbmZpZy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2RlZmF1bHRUaW1lem9uZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3RpbWVEYXRlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcHJlc2V0cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Z1bGxEYXlDb250cm9sT2JzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fb2Zmc2V0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgICB0aGlzLl91cGRhdGVUaW1lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc3luY0NvbmZpZ09icy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2VsZWN0UHJlc2V0KHByZXNldDogRGF0ZVRpbWVQcmVzZXQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByZXNldC52YWx1ZSgpO1xuXG4gICAgaWYgKHZhbHVlLmxvZ2ljYWxEYXRlKSB7XG4gICAgICB0aGlzLnNldExvZ2ljYWxUaW1lKHZhbHVlLmxvZ2ljYWxEYXRlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRpbWVTdHJpbmcpIHtcbiAgICAgIHRoaXMuc2V0VGltZSh2YWx1ZS50aW1lU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBkYXRlUGlja2VkKGV2ZW50OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxEYXRlPik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBldmVudC52YWx1ZTtcblxuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGVJbnB1dFZhbHVlKGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHNldExvZ2ljYWxUaW1lKHRpbWU6IExvZ2ljYWxEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IGRhdGVGcm9tTG9naWNhbERhdGUodGltZSk7XG5cbiAgICBpZiAoZGF0ZSkge1xuICAgICAgdGhpcy5zZXRUaW1lRnJvbURhdGUoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF0ZUlucHV0VmFsdWUoZGF0ZTogRGF0ZSkge1xuICAgIHRoaXMuZGF0ZUlucHV0Q3RybC5zZXRWYWx1ZShkYXRlKTtcbiAgICB0aGlzLl91cGRhdGVUaW1lLm5leHQoKTtcbiAgfVxuXG4gIHNldFRpbWVGcm9tRGF0ZSh0aW1lRGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVTdHJpbmcgPSB0b0xvY2FsUmVhZGFibGVUaW1lU3RyaW5nKHRpbWVEYXRlKTtcbiAgICB0aGlzLnNldFRpbWUodGltZVN0cmluZyk7XG4gIH1cblxuICBzZXRUaW1lKHRpbWU6IFJlYWRhYmxlVGltZVN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgIT09IHRpbWUpIHtcbiAgICAgIHRoaXMudGltZUlucHV0Q3RybC5zZXRWYWx1ZSh0aW1lKTtcbiAgICAgIHRoaXMuX29mZnNldC5uZXh0KDApO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAga2V5ZG93bk9uRGF0ZUlucHV0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRpcmVjdGlvbiA9IDA7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgIGRpcmVjdGlvbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gLTE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSAxO1xuXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDM2NTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgIG9mZnNldCA9IDMwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDc7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5kYXRlJCwgdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyRdKVxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0ZSwgY29uZmlnXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBzdGFydE9mRGF5KGFkZERheXMoZGF0ZSwgb2Zmc2V0ICogZGlyZWN0aW9uKSk7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgICBkYXRlOiBuZXdEYXRlLFxuICAgICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBuZXh0RGF0ZSA9IGluc3RhbmNlLmlzSW5TY2hlZHVsZShuZXdEYXRlKSA/IG5ld0RhdGUgOiBpbnN0YW5jZS5maW5kTmV4dEF2YWlsYWJsZURheUluU2NoZWR1bGUobmV3RGF0ZSwgZGlyZWN0aW9uID09PSAxID8gJ2Z1dHVyZScgOiAncGFzdCcpO1xuXG4gICAgICAgICAgaWYgKG5leHREYXRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZUlucHV0VmFsdWUoaW5zdGFuY2UuY2xhbXBUb0xpbWl0KG5leHREYXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBrZXlkb3duT25UaW1lSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldCA9IDE7XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBvZmZzZXQgPSAzMDA7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDYwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDU7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgdGhpcy5fb2Zmc2V0Lm5leHQodGhpcy5fb2Zmc2V0LnZhbHVlICsgb2Zmc2V0ICogZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzVGltZSgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICBmb2N1c091dFRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gIH1cblxuICBhZGRUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheShmYWxzZSk7XG4gIH1cblxuICByZW1vdmVUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheSh0cnVlKTtcbiAgfVxuXG4gIHNldEZ1bGxEYXkoZnVsbERheTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZnVsbERheUNvbnRyb2wkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB4LnNldFZhbHVlKGZ1bGxEYXkpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLWZpZWxkXCIgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0LnhzPVwiY29sdW1uIHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtZXZlbmx5IHN0cmV0Y2hcIj5cbiAgPCEtLSBEYXRlIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvd1wiIGZ4RmxleC5sdC1zbT1cIjEwMFwiIFtmeEZsZXhdPVwiZGF0ZU9ubHkgPyAnMTAwJyA6ICc1MCdcIiAqbmdJZj1cInNob3dEYXRlSW5wdXRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUlucHV0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIEFkZGl0aW9uYWwgc3BhY2luZyAtLT5cbiAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXIgKm5nSWY9XCIhZGF0ZU9ubHlcIj48L2RieC1idXR0b24tc3BhY2VyPlxuICA8L2Rpdj5cbiAgPCEtLSBUaW1lIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvd1wiIGZ4RmxleC5sdC1zbT1cIjEwMFwiIFtmeEZsZXhdPVwic2hvd0RhdGVJbnB1dCA/ICc1MCcgOiAnMTAwJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGltZUlucHV0JCB8IGFzeW5jXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGltZU1lbnVBbmRJbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dBZGRUaW1lJCB8IGFzeW5jXCIgY2xhc3M9XCJhZGQtdGltZS1idXR0b24td3JhcHBlclwiPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwibWF0LWRhdGVwaWNrZXItYnV0dG9uLWhpZ2hsaWdodCBkYngtYnV0dG9uLXNwYWNlciBhZGQtdGltZS1idXR0b25cIiBuZ0NsYXNzLmx0LXNtPVwiYWRkLXRpbWUtYnV0dG9uLWZ1bGxcIiAoY2xpY2spPVwiYWRkVGltZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj50aW1lcjwvbWF0LWljb24+XG4gICAgICAgIEFkZCBUaW1lXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhaGlkZURhdGVIaW50XCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93IGRieC1kYXRldGltZS1oaW50LXJvd1wiIGZ4RmxleD1cIjEwMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYngtaGludFwiIFtuZ1N3aXRjaF09XCJmdWxsRGF5JCB8IGFzeW5jXCI+XG4gICAgICA8c21hbGwgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgPGIgY2xhc3M9XCJkYngtb2tcIj57eyBhbGxEYXlMYWJlbCB9fTwvYj5cbiAgICAgICAge3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZTogJ2Z1bGxEYXRlJyB9fSB7eyB0aW1lem9uZUFiYnJldmlhdGlvbiQgfCBhc3luYyB9fSAoe3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZURpc3RhbmNlIH19KVxuICAgICAgPC9zbWFsbD5cbiAgICAgIDxzbWFsbCAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiPlxuICAgICAgICAgIDxiIGNsYXNzPVwiZGJ4LW9rXCI+e3sgYXRUaW1lTGFiZWwgfX08L2I+XG4gICAgICAgICAge3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZTogJ21lZGl1bScgfX0ge3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX0gKHt7IGRpc3BsYXlWYWx1ZSQgfCBhc3luYyB8IHRpbWVEaXN0YW5jZSB9fSlcbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIERhdGUgSW5wdXQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVJbnB1dFRlbXBsYXRlPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93LWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyBkYXRlTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgI2RhdGVJbnB1dCBtYXRJbnB1dCBbbWluXT1cImRhdGVJbnB1dE1pbiQgfCBhc3luY1wiIFttYXhdPVwiZGF0ZUlucHV0TWF4JCB8IGFzeW5jXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiKHBpY2tlckZpbHRlciQgfCBhc3luYykgfHwgZGVmYXVsdFBpY2tlckZpbHRlclwiIChkYXRlQ2hhbmdlKT1cImRhdGVQaWNrZWQoJGV2ZW50KVwiIFt2YWx1ZV09XCJkYXRlVmFsdWUkIHwgYXN5bmNcIiAoa2V5ZG93bik9XCJrZXlkb3duT25EYXRlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8YnV0dG9uIG1hdFByZWZpeCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctYnV0dG9uXCIgKm5nSWY9XCIhaGlkZURhdGVQaWNrZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgIDxtYXQtaWNvbj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gbWF0VGV4dFN1ZmZpeCAqbmdJZj1cIiEoc2hvd1RpbWVJbnB1dCQgfCBhc3luYylcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lem9uZVN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaW1lIE1lbnUvSW5wdXQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3RpbWVNZW51QW5kSW5wdXRUZW1wbGF0ZT5cbiAgPG1hdC1tZW51ICN0aW1lbWVudT1cIm1hdE1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGltZU1vZGUgPT09ICdvcHRpb25hbCdcIj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlVGltZSgpXCI+XG4gICAgICAgIDxzcGFuPlJlbW92ZSBUaW1lPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcmVzZXQgb2YgcHJlc2V0cyQgfCBhc3luY1wiPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzZWxlY3RQcmVzZXQocHJlc2V0KVwiPnt7IHByZXNldC5sYWJlbCB8IGdldFZhbHVlIH19PC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LW1lbnU+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctZmllbGRcIj5cbiAgICA8bWF0LWxhYmVsPnt7IHRpbWVMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCAjdGltZUlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJ0aW1lSW5wdXRDdHJsXCIgKGZvY3VzKT1cImZvY3VzVGltZSgpXCIgKGZvY3Vzb3V0KT1cImZvY3VzT3V0VGltZSgpXCIgKGtleWRvd24pPVwia2V5ZG93bk9uVGltZUlucHV0KCRldmVudClcIiAvPlxuICAgIDxidXR0b24gbWF0UHJlZml4IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvdy1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRpbWVtZW51XCIgYXJpYS1sYWJlbD1cIm9wZW5zIHRoZSB0aW1lIG1lbnVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgIDxtYXQtaWNvbj50aW1lcjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lem9uZVN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaW1lem9uZSBTdWZmaXggLS0+XG48bmctdGVtcGxhdGUgI3RpbWV6b25lU3VmZml4VGVtcGxhdGU+XG4gIDxzcGFuICpuZ0lmPVwic2hvd1RpbWV6b25lXCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtdGltZXpvbmUgZGJ4LWZhaW50XCI+e3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9kYXRldGltZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2RhdGV0aW1lLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0YsT0FBTyxFQUFFLGlCQUFpQixFQUF5Ryx1QkFBdUIsRUFBb0IsbUJBQW1CLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQ3JXLE9BQU8sRUFBRSxtQkFBbUIsRUFBd0Isc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBaUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5WixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDak8sT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFtQixXQUFXLEVBQUUsVUFBVSxF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LHkvSEErRUE7OzRGRHdIYSx5QkFBeUI7a0JBSHJDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIE1heWJlLCB0eXBlIFJlYWRhYmxlVGltZVN0cmluZywgdHlwZSBBcnJheU9yVmFsdWUsIHR5cGUgSVNPODYwMURhdGVTdHJpbmcsIGFzQXJyYXksIGZpbHRlck1heWJlVmFsdWVzLCB0eXBlIERlY2lzaW9uRnVuY3Rpb24sIHR5cGUgTWlsbGlzZWNvbmRzLCB0eXBlIFRpbWV6b25lU3RyaW5nLCB0eXBlIExvZ2ljYWxEYXRlLCB0eXBlIERhdGVPckRheVN0cmluZywgaXNJU084NjAxRGF5U3RyaW5nU3RhcnQsIHR5cGUgTWFwRnVuY3Rpb24sIG1hcElkZW50aXR5RnVuY3Rpb24sIE1pbnV0ZU9mRGF5LCBVbml4RGF0ZVRpbWVOdW1iZXIsIElTTzg2MDFEYXlTdHJpbmcgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IGRhdGVGcm9tTG9naWNhbERhdGUsIERhdGVUaW1lTWludXRlQ29uZmlnLCBEYXRlVGltZU1pbnV0ZUluc3RhbmNlLCBndWVzc0N1cnJlbnRUaW1lem9uZSwgcmVhZGFibGVUaW1lU3RyaW5nVG9EYXRlLCB0b0xvY2FsUmVhZGFibGVUaW1lU3RyaW5nLCB1dGNEYXlGb3JEYXRlLCBzYWZlVG9Kc0RhdGUsIGZpbmRNaW5EYXRlLCBmaW5kTWF4RGF0ZSwgaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcywgZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24sIGlzU2FtZURhdGVEYXksIGRhdGVUaW1lem9uZVV0Y05vcm1hbCwgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsIHRvSnNEYXlEYXRlLCBpc1NhbWVEYXRlLCBkYXRlVGltZU1pbnV0ZVdob2xlRGF5RGVjaXNpb25GdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBzaGFyZVJlcGxheSwgbWFwLCBzdGFydFdpdGgsIHRhcCwgZmlyc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBkZWJvdW5jZVRpbWUsIHRocm90dGxlVGltZSwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0LCBtZXJnZSwgaW50ZXJ2YWwsIG9mLCBjb21iaW5lTGF0ZXN0V2l0aCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnQG5neC1mb3JtbHkvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlQ29uZmlnLCBGb3JtbHlGaWVsZFByb3BzIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgYWRkTWludXRlcywgc3RhcnRPZkRheSwgYWRkRGF5cyB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIsIGZpbHRlck1heWJlLCBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlciwgc2tpcEZpcnN0TWF5YmUsIFN1YnNjcmlwdGlvbk9iamVjdCwgc3dpdGNoTWFwTWF5YmVEZWZhdWx0LCBzd2l0Y2hNYXBNYXliZU9icyB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQcmVzZXQsIERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbiwgZGF0ZVRpbWVQcmVzZXQgfSBmcm9tICcuL2RhdGV0aW1lJztcbmltcG9ydCB7IERieERhdGVUaW1lRmllbGRNZW51UHJlc2V0c1NlcnZpY2UgfSBmcm9tICcuL2RhdGV0aW1lLmZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeSwgZGJ4RGF0ZVRpbWVJc1NhbWVEYXRlVGltZUZpZWxkVmFsdWUsIGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5IH0gZnJvbSAnLi9kYXRlLnZhbHVlJztcbmltcG9ydCB7IEZvcm1Db250cm9sUGF0aCwgc3RyZWFtVmFsdWVGcm9tQ29udHJvbCB9IGZyb20gJy4uLy4uLy4uLy4uL2Zvcm0vZm9ybS5hbmd1bGFyLnV0aWwnO1xuXG5leHBvcnQgZW51bSBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUge1xuICAvKipcbiAgICogVGltZSBpcyByZXF1aXJlZC5cbiAgICovXG4gIFJFUVVJUkVEID0gJ3JlcXVpcmVkJyxcbiAgLyoqXG4gICAqIFRpbWUgaXMgb3B0aW9uYWwuXG4gICAqL1xuICBPUFRJT05BTCA9ICdvcHRpb25hbCcsXG4gIC8qKlxuICAgKiBUaW1lIGlzIHBlcm1lbmFudGx5IG9mZi5cbiAgICovXG4gIE5PTkUgPSAnbm9uZSdcbn1cblxuZXhwb3J0IHR5cGUgRGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uID0gT21pdDxEYXRlVGltZU1pbnV0ZUNvbmZpZywgJ2RhdGUnPjtcblxuZXhwb3J0IHR5cGUgRGJ4RGF0ZVRpbWVGaWVsZFN5bmNUeXBlID0gJ2JlZm9yZScgfCAnYWZ0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRTeW5jRmllbGQge1xuICAvKipcbiAgICogRmllbGQga2V5L3BhdGggdG8gc3luYyB3aXRoL2FnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBzeW5jV2l0aDogc3RyaW5nO1xuICAvKipcbiAgICogSG93IHRvIHN5bmMgYWdhaW5zdCB0aGUgb3RoZXIgZmllbGQuXG4gICAqL1xuICByZWFkb25seSBzeW5jVHlwZTogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNUeXBlO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB0aW1lIGRhdGUgZmllbGQgdGhhdCBoYXMgYSByZWZlcmVuY2UgYW5kIG9wdGlvbmFsIG1hcCBmdW5jdGlvbiB0byBtYXAgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZzxJID0gdW5rbm93bj4ge1xuICByZWFkb25seSBwYXRoOiBGb3JtQ29udHJvbFBhdGg7XG4gIHJlYWRvbmx5IG1hcFZhbHVlPzogTWFwRnVuY3Rpb248SSwgTWF5YmU8RGF0ZU9yRGF5U3RyaW5nPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyhpbnB1dDogdW5rbm93bik6IGlucHV0IGlzIERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyB7XG4gIHJldHVybiBpbnB1dCAhPSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIChpbnB1dCBhcyBEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcpLnBhdGggPT09ICdzdHJpbmcnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieERhdGVUaW1lRmllbGRQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICAvKipcbiAgICogQ3VzdG9tIGRhdGUgbGFiZWwuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIERhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGVMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIHRpbWUgbGFiZWwuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIFRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWwgdG8gdXNlIGZvciB0aGUgZGF0ZSBoaW50IGZvciBcIkFsbCBEYXlcIi4gRGVmYXVsdHMgdG8gXCJBbGwgRGF5XCIuXG4gICAqL1xuICByZWFkb25seSBhbGxEYXlMYWJlbD86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWwgdG8gdXNlIGZvciB0aGUgZGF0ZSBoaW50IGZvciBcIkF0XCIuIERlZmF1bHRzIHRvIFwiQXRcIi5cbiAgICovXG4gIHJlYWRvbmx5IGF0VGltZUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBtb2RlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBEQVRFXG4gICAqL1xuICByZWFkb25seSB2YWx1ZU1vZGU/OiBEYnhEYXRlVGltZVZhbHVlTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIGRhdGUgaXMgaGlkZGVuLCBhbmQgYXV0b21hdGljYWxseSB1c2VzIHRvZGF5L2lucHV0IGRhdGUuXG4gICAqL1xuICByZWFkb25seSB0aW1lT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZSB0aW1lIGNhbiBiZSBhZGRlZC9yZW1vdmVkIG9wdGlvbmFsbHkuXG4gICAqXG4gICAqIFRoaXMgaXMgaWdub3JlZCBpZiB0aW1lT25seSBpcyBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSB0aW1lTW9kZT86IERieERhdGVUaW1lRmllbGRUaW1lTW9kZTtcblxuICAvKipcbiAgICogT3RoZXIgZm9ybSBjb250cm9sIGZvciBlbmFibGluZy9kaXNhYmxpbmcgd2hldGhlciBvciBub3QgaXQgaXMgYSBmdWxsIGRheS5cbiAgICpcbiAgICogVGhpcyBmaWVsZCBpcyBvbmx5IHVzZWQgaWYgdGltZSBpcyBvcHRpb25hbC5cbiAgICpcbiAgICogV2hlbiB0aW1lIGlzIG9mZiwgdGhlIGZpZWxkIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVsbERheUZpZWxkTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcGFzcyB0aGUgZGF0ZSB2YWx1ZSBhcyBhIFVUQyBkYXRlLCBvciBhIGRhdGUgaW4gdGhlIGN1cnJlbnQgdGltZXpvbmUuXG4gICAqL1xuICByZWFkb25seSBmdWxsRGF5SW5VVEM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCBvdCBoaWRlIHRoZSBkYXRlIGhpbnQgaW5mbyBjb250ZW50LlxuICAgKlxuICAgKiBGYWxzZSBieSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBoaWRlRGF0ZUhpbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBoaWRlIHRoZSBkYXRlL2NhbGVuZGFyIHBpY2tlci5cbiAgICovXG4gIHJlYWRvbmx5IGhpZGVEYXRlUGlja2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHBpY2tlciBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBwaWNrZXJDb25maWc/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+O1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBzeW5jaW5nIHdpdGggb25lIG9yIG1vcmUgZmllbGRzIHdpdGggYSBEYXRlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0U3luY0ZpZWxkc09icz86ICgpID0+IE9ic2VydmFibGU8QXJyYXlPclZhbHVlPERieERhdGVUaW1lRmllbGRTeW5jRmllbGQ+PjtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBUaGUgaW5wdXQgdGltZXpvbmUgdG8gZGVmYXVsdCB0by5cbiAgICpcbiAgICogSWdub3JlZCBpZiBmdWxsRGF5SW5VVEMgaXMgdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWV6b25lPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj47XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVGhlIGRhdGUgdG8gYXBwbHkgdGhlIHRpbWUgdG8uXG4gICAqXG4gICAqIFRoZSB0aW1lem9uZSBhYmJydmlhdGlvbiB3aWxsIGFsc28gdXNlIHRoaXMgZGF0ZSB3aGVuIHVzaW5nIHRoZSB0aW1lLW9ubHkgbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVEYXRlPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8TWF5YmU8RGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnIHwgRm9ybUNvbnRyb2xQYXRoIHwgRGF0ZU9yRGF5U3RyaW5nPj4+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkaXNwbGF5IHRoZSB0aW1lem9uZS4gVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHByZXNldHMgdG8gc2hvdyBpbiB0aGUgZHJvcGRvd24uXG4gICAqL1xuICByZWFkb25seSBwcmVzZXRzPzogT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpbiBtcyB0byBwcmV2ZW50IG91dHB1dCBmcm9tIGdvaW5nIG91dCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRPdXRwdXREZWJvdW5jZVRpbWU/OiBNaWxsaXNlY29uZHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZCBleHRlbmRzIFBpY2s8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZCwgJ3N5bmNUeXBlJz4ge1xuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w8TWF5YmU8RGF0ZSB8IElTTzg2MDFEYXRlU3RyaW5nPj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzeW5jQ29uZmlnVmFsdWVPYnMocGFyc2VDb25maWdzT2JzOiBPYnNlcnZhYmxlPERieERhdGVUaW1lRmllbGRTeW5jUGFyc2VkRmllbGRbXT4sIHR5cGU6IERieERhdGVUaW1lRmllbGRTeW5jVHlwZSk6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+IHtcbiAgcmV0dXJuIHBhcnNlQ29uZmlnc09icy5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0geC5maW5kKCh5KSA9PiB5LnN5bmNUeXBlID09PSB0eXBlKTtcbiAgICAgIGxldCByZXN1bHQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+O1xuXG4gICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHsgY29udHJvbCB9ID0gY29uZmlnO1xuICAgICAgICByZXN1bHQgPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSxcbiAgICAgICAgICBtYXAoKHgpID0+IHNhZmVUb0pzRGF0ZSh4KSA/PyBudWxsKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gb2YobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xufVxuXG5jb25zdCBUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FOiBNaWxsaXNlY29uZHMgPSAxMDtcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnZGF0ZXRpbWUuZmllbGQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERieERhdGVUaW1lRmllbGRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPERieERhdGVUaW1lRmllbGRQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9zdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX3ZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2NvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfc3luY0NvbmZpZ09icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxBcnJheU9yVmFsdWU8RGJ4RGF0ZVRpbWVGaWVsZFN5bmNGaWVsZD4+Pj4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9kZWZhdWx0VGltZXpvbmUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3RpbWVEYXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPE1heWJlPERieERhdGVUaW1lRmllbGRUaW1lRGF0ZUNvbmZpZyB8IEZvcm1Db250cm9sUGF0aCB8IERhdGVPckRheVN0cmluZz4+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfcHJlc2V0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTxEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXT4+KG9mKFtdKSk7XG5cbiAgcHJpdmF0ZSBfZnVsbERheUlucHV0Q3RybD86IEZvcm1Db250cm9sO1xuICBwcml2YXRlIF9mdWxsRGF5Q29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPGJvb2xlYW4+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZnVsbERheUNvbnRyb2wkID0gdGhpcy5fZnVsbERheUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBwcml2YXRlIF9vZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgX2Zvcm1Db250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8TWF5YmU8RGF0ZT4+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wkID0gdGhpcy5fZm9ybUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBwcml2YXRlIF91cGRhdGVUaW1lID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSB0aW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+PiA9IHRoaXMuX2RlZmF1bHRUaW1lem9uZS5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5waXBlKFxuICAgIG1hcCgoZGVmYXVsdFRpbWV6b25lKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFRpbWV6b25lID8/IGd1ZXNzQ3VycmVudFRpbWV6b25lKCk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lSW5zdGFuY2UkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPj4gPSB0aGlzLnRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgodGltZXpvbmUpID0+ICh0aW1lem9uZSA/IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh7IHRpbWV6b25lIH0pIDogdW5kZWZpbmVkKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lRGF0ZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+ID0gdGhpcy5fdGltZURhdGUucGlwZShcbiAgICBzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSxcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8TWF5YmU8RGF0ZT4+O1xuXG4gICAgICBpZiAoeCkge1xuICAgICAgICAvLyBpZiB0aGUgc3RyaW5nIGlzIG5vdCBhIGRhdGUgc3RyaW5nLCB0aGVuIHRyZWF0IGl0IGFzIGEgcGF0aFxuICAgICAgICBpZiAoKHR5cGVvZiB4ID09PSAnc3RyaW5nJyAmJiAhaXNJU084NjAxRGF5U3RyaW5nU3RhcnQoeCkpIHx8IGlzRGJ4RGF0ZVRpbWVGaWVsZFRpbWVEYXRlQ29uZmlnKHgpKSB7XG4gICAgICAgICAgY29uc3QgeyBwYXRoLCBtYXBWYWx1ZSB9OiBEYnhEYXRlVGltZUZpZWxkVGltZURhdGVDb25maWcgPSB0eXBlb2YgeCA9PT0gJ3N0cmluZycgPyB7IHBhdGg6IHggfSA6IHg7XG4gICAgICAgICAgb2JzID1cbiAgICAgICAgICAgIHN0cmVhbVZhbHVlRnJvbUNvbnRyb2w8RGF0ZU9yRGF5U3RyaW5nPih0aGlzLmZvcm0sIHBhdGgpPy5waXBlKFxuICAgICAgICAgICAgICBtYXAobWFwVmFsdWUgPz8gbWFwSWRlbnRpdHlGdW5jdGlvbigpKSxcbiAgICAgICAgICAgICAgbWFwKCh4KSA9PiAoeCA/IHRvSnNEYXlEYXRlKHgpIDogdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICkgPz8gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYnMgPSBvZih0b0pzRGF5RGF0ZSh4KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IG9mKHVuZGVmaW5lZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYnM7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB2YWx1ZUluU3lzdGVtVGltZXpvbmUkID0gdGhpcy5mb3JtQ29udHJvbCQucGlwZShcbiAgICBtYXAoKGNvbnRyb2wpID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoPE1heWJlPERhdGUgfCBJU084NjAxRGF5U3RyaW5nIHwgTWludXRlT2ZEYXkgfCBVbml4RGF0ZVRpbWVOdW1iZXI+Pihjb250cm9sLnZhbHVlKSwgc2hhcmVSZXBsYXkoMSkpKSxcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkKSxcbiAgICBzd2l0Y2hNYXAoKFt4LCB0aW1lem9uZUluc3RhbmNlXSkgPT4ge1xuICAgICAgcmV0dXJuIHgucGlwZShtYXAoZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpO1xuICAgIH0pLFxuICAgIHRocm90dGxlVGltZSgyMCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pLCAvLyB0aHJvdHRsZSBpbmNvbWluZyB2YWx1ZXMgYW5kIHRpbWV6b25lIGNoYW5nZXNcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlSG91cnNBbmRNaW51dGVzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJlZnJlc2hJbnRlcmFsJCA9IGludGVydmFsKDEwICogMTAwMCk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdHJpZ2dlci9kaXNwbGF5IHZpc3VhbCB1cGRhdGVzIChzcGVjaWZpY2FsbHkgb24gdGltZURpc3RhbmNlLCBldGMuKS5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlWYWx1ZSQgPSB0aGlzLnJlZnJlc2hJbnRlcmFsJC5waXBlKFxuICAgIC8vIGV2ZXJ5IDEwIHNlY29uZHMsIHJlZnJlc2ggdy9pbnRlcnZhbFxuICAgIHN0YXJ0V2l0aCgwKSxcbiAgICBtYXAoKCkgPT4gbmV3IERhdGUoKS5nZXRNaW51dGVzKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgdGFwKCgpID0+IHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCkpLFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZVN0cmluZyQ6IE9ic2VydmFibGU8UmVhZGFibGVUaW1lU3RyaW5nIHwgJyc+ID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeCA/IHRvTG9jYWxSZWFkYWJsZVRpbWVTdHJpbmcoeCkgOiAnJykpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlSW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sKG5ldyBEYXRlKCksIHtcbiAgICB2YWxpZGF0b3JzOiBbXVxuICB9KTtcblxuICByZWFkb25seSB0aW1lSW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sKCcnLCB7XG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucGF0dGVybigvXihub3cpJHxeKFswLTldfCgwWzAtOV0pfCgxWzAtOV0pfCgyWzAtM10pKSg6KT8oWzAtNV1bMC05XSk/KFxccyk/KFthcEFQXVtNbV0pPyhcXFxccykqJC8pXVxuICB9KTtcblxuICBnZXQgZGF0ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZGF0ZUxhYmVsID8/ICdEYXRlJztcbiAgfVxuXG4gIGdldCB0aW1lTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lTGFiZWwgPz8gJ1RpbWUnO1xuICB9XG5cbiAgZ2V0IGFsbERheUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYWxsRGF5TGFiZWwgPz8gJ0FsbCBEYXknO1xuICB9XG5cbiAgZ2V0IGF0VGltZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYXRUaW1lTGFiZWwgPz8gJ0F0JztcbiAgfVxuXG4gIGdldCBkYXRlT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU7XG4gIH1cblxuICBnZXQgZGF0ZVRpbWVGaWVsZCgpOiBEYnhEYXRlVGltZUZpZWxkUHJvcHMge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzO1xuICB9XG5cbiAgZ2V0IHRpbWVPbmx5KCk6IE1heWJlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0aW1lVmFsdWVzT25seSA9IHRoaXMudmFsdWVNb2RlID09PSBEYnhEYXRlVGltZVZhbHVlTW9kZS5NSU5VVEVfT0ZfREFZO1xuXG4gICAgaWYgKHRpbWVWYWx1ZXNPbmx5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZVRpbWVGaWVsZC50aW1lT25seTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0RhdGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudGltZU9ubHk7XG4gIH1cblxuICBnZXQgdmFsdWVNb2RlKCk6IERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy52YWx1ZU1vZGUgPz8gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTtcbiAgfVxuXG4gIGdldCB0aW1lTW9kZSgpOiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUge1xuICAgIGNvbnN0IGRhdGVWYWx1ZXNPbmx5ID0gdGhpcy52YWx1ZU1vZGUgPT09IERieERhdGVUaW1lVmFsdWVNb2RlLkRBWV9TVFJJTkc7XG5cbiAgICBpZiAoZGF0ZVZhbHVlc09ubHkpIHtcbiAgICAgIHJldHVybiBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudGltZU9ubHkgPyBEYnhEYXRlVGltZUZpZWxkVGltZU1vZGUuUkVRVUlSRUQgOiB0aGlzLmRhdGVUaW1lRmllbGQudGltZU1vZGUgPz8gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBoaWRlRGF0ZUhpbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuaGlkZURhdGVIaW50ID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGhpZGVEYXRlUGlja2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLmhpZGVEYXRlUGlja2VyID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHRpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnRpbWV6b25lO1xuICB9XG5cbiAgZ2V0IHRpbWVEYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnRpbWVEYXRlO1xuICB9XG5cbiAgZ2V0IHNob3dUaW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93VGltZXpvbmUgPz8gdHJ1ZTtcbiAgfVxuXG4gIGdldCBwcmVzZXRzKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnByZXNldHM7XG4gIH1cblxuICByZWFkb25seSBmdWxsRGF5JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZnVsbERheUNvbnRyb2wkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb250cm9sKSA9PiBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBzaG93VGltZUlucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuZnVsbERheSQucGlwZShtYXAoKHgpID0+ICF4ICYmIHRoaXMudGltZU1vZGUgIT09IERieERhdGVUaW1lRmllbGRUaW1lTW9kZS5OT05FKSk7XG5cbiAgcmVhZG9ubHkgc2hvd0FkZFRpbWUkID0gdGhpcy5zaG93VGltZUlucHV0JC5waXBlKFxuICAgIG1hcCgoeCkgPT4gIXggJiYgdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk9QVElPTkFMKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGUkID0gdGhpcy5kYXRlSW5wdXRDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmRhdGVJbnB1dEN0cmwudmFsdWUpLCBmaWx0ZXJNYXliZSgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVBYmJyZXZpYXRpb24kID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlJCwgdGhpcy50aW1lem9uZSQsIHRoaXMudGltZURhdGUkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lem9uZSwgdGltZURhdGVdKSA9PiBnZXRUaW1lem9uZUFiYnJldmlhdGlvbih0aW1lem9uZSwgdGltZURhdGUgPz8gZGF0ZSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlVmFsdWUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IG1lcmdlKHRoaXMuZGF0ZSQsIHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5waXBlKHNraXBGaXJzdE1heWJlKCkpKS5waXBlKFxuICAgIG1hcCgoeDogTWF5YmU8RGF0ZT4pID0+ICh4ID8gc3RhcnRPZkRheSh4KSA6IG51bGwpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlPj4oaXNTYW1lRGF0ZURheSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB0aW1lSW5wdXQkOiBPYnNlcnZhYmxlPFJlYWRhYmxlVGltZVN0cmluZz4gPSB0aGlzLl91cGRhdGVUaW1lLnBpcGUoXG4gICAgZGVib3VuY2VUaW1lKDUpLFxuICAgIG1hcCgoKSA9PiB0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgfHwgJycpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcblxuICByZWFkb25seSBzeW5jQ29uZmlnT2JzJCA9IHRoaXMuX3N5bmNDb25maWdPYnMucGlwZShzd2l0Y2hNYXBNYXliZURlZmF1bHQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHBhcnNlZFN5bmNDb25maWdzJDogT2JzZXJ2YWJsZTxEYnhEYXRlVGltZUZpZWxkU3luY1BhcnNlZEZpZWxkW10+ID0gdGhpcy5zeW5jQ29uZmlnT2JzJC5waXBlKFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgbGV0IHBhcnNlZDogRGJ4RGF0ZVRpbWVGaWVsZFN5bmNQYXJzZWRGaWVsZFtdO1xuXG4gICAgICBpZiAoeCkge1xuICAgICAgICBwYXJzZWQgPSBmaWx0ZXJNYXliZVZhbHVlcyhcbiAgICAgICAgICBhc0FycmF5KHgpLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoeS5zeW5jV2l0aCk7XG5cbiAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICAgICAgICAuLi55XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWQgPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN5bmNDb25maWdCZWZvcmVWYWx1ZSQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gc3luY0NvbmZpZ1ZhbHVlT2JzKHRoaXMucGFyc2VkU3luY0NvbmZpZ3MkLCAnYmVmb3JlJyk7XG4gIHJlYWRvbmx5IHN5bmNDb25maWdBZnRlclZhbHVlJDogT2JzZXJ2YWJsZTxEYXRlIHwgbnVsbD4gPSBzeW5jQ29uZmlnVmFsdWVPYnModGhpcy5wYXJzZWRTeW5jQ29uZmlncyQsICdhZnRlcicpO1xuXG4gIHJlYWRvbmx5IHJhd0RhdGVUaW1lJDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGVWYWx1ZSQsIHRoaXMudGltZUlucHV0JC5waXBlKHN0YXJ0V2l0aChudWxsKSksIHRoaXMuZnVsbERheSQsIHRoaXMudGltZURhdGUkXSkucGlwZShcbiAgICBtYXAoKFtkYXRlLCB0aW1lU3RyaW5nLCBmdWxsRGF5LCB0aW1lRGF0ZV0pID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGU+O1xuXG4gICAgICBpZiAoIWRhdGUgfHwgdGhpcy50aW1lT25seSkge1xuICAgICAgICBkYXRlID0gdGltZURhdGUgPz8gbmV3IERhdGUoKTsgLy8gdXNlIHRoZSB0aW1lIGRhdGUsIG9yIGRlZmF1bHQgdG8gdGhlIGN1cnJlbnQgZGF5XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgIGlmIChmdWxsRGF5KSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVGaWVsZC5mdWxsRGF5SW5VVEMpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHV0Y0RheUZvckRhdGUoZGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHN0YXJ0T2ZEYXkoZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRpbWVTdHJpbmcpIHtcbiAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgcmVhZGFibGVUaW1lU3RyaW5nVG9EYXRlKHRpbWVTdHJpbmcsIHtcbiAgICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgICAgdXNlU3lzdGVtVGltZXpvbmU6IHRydWVcbiAgICAgICAgICAgIH0pID8/IGRhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudGltZU9ubHkpIHtcbiAgICAgICAgICByZXN1bHQgPSBkYXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlVGltZVBpY2tlckNvbmZpZyQ6IE9ic2VydmFibGU8TWF5YmU8RGJ4RGF0ZVRpbWVQaWNrZXJDb25maWd1cmF0aW9uPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9jb25maWcucGlwZShzd2l0Y2hNYXBNYXliZU9icygpKSwgdGhpcy5zeW5jQ29uZmlnQmVmb3JlVmFsdWUkLCB0aGlzLnN5bmNDb25maWdBZnRlclZhbHVlJF0pLnBpcGUoXG4gICAgbWFwKChbeCwgZGF0ZUlucHV0TWluLCBkYXRlSW5wdXRNYXhdKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBNYXliZTxEYnhEYXRlVGltZVBpY2tlckNvbmZpZ3VyYXRpb24+ID0geDtcblxuICAgICAgaWYgKGRhdGVJbnB1dE1pbiAhPSBudWxsIHx8IGRhdGVJbnB1dE1heCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWluOiBsaW1pdE1pbiwgbWF4OiBsaW1pdE1heCB9ID0geD8ubGltaXRzID8/IHt9O1xuICAgICAgICBjb25zdCBtaW4gPSBmaW5kTWluRGF0ZShbZGF0ZUlucHV0TWluLCBkYXRlRnJvbUxvZ2ljYWxEYXRlKGxpbWl0TWluKV0pO1xuICAgICAgICBjb25zdCBtYXggPSBmaW5kTWF4RGF0ZShbZGF0ZUlucHV0TWF4LCBkYXRlRnJvbUxvZ2ljYWxEYXRlKGxpbWl0TWF4KV0pO1xuXG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAuLi54LFxuICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgLi4ueD8ubGltaXRzLFxuICAgICAgICAgICAgbWluLFxuICAgICAgICAgICAgbWF4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlSW5wdXRNaW4kOiBPYnNlcnZhYmxlPERhdGUgfCBudWxsPiA9IHRoaXMuZGF0ZVRpbWVQaWNrZXJDb25maWckLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeD8ubGltaXRzPy5taW4gPz8gbnVsbCkgYXMgRGF0ZSB8IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPERhdGUgfCBudWxsPihpc1NhbWVEYXRlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVJbnB1dE1heCQ6IE9ic2VydmFibGU8RGF0ZSB8IG51bGw+ID0gdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyQucGlwZShcbiAgICBtYXAoKHgpID0+ICh4Py5saW1pdHM/Lm1heCA/PyBudWxsKSBhcyBEYXRlIHwgbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8RGF0ZSB8IG51bGw+KGlzU2FtZURhdGUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyRmlsdGVyJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPj4gPSB0aGlzLmRhdGVUaW1lUGlja2VyQ29uZmlnJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBkYXRlVGltZU1pbnV0ZVdob2xlRGF5RGVjaXNpb25GdW5jdGlvbih4LCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeDogRGF0ZSB8IG51bGwpID0+ICh4ICE9IG51bGwgPyBmaWx0ZXIoeCkgOiB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFBpY2tlckZpbHRlcjogRGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4gPSAoKSA9PiB0cnVlO1xuXG4gIHJlYWRvbmx5IHRpbWVPdXRwdXQkOiBPYnNlcnZhYmxlPE1heWJlPERhdGU+PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmF3RGF0ZVRpbWUkLCB0aGlzLl9vZmZzZXQsIHRoaXMuZGF0ZVRpbWVQaWNrZXJDb25maWckXSkucGlwZShcbiAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoY3VycmVudCwgbmV4dCkgPT4gY3VycmVudFswXSA9PT0gbmV4dFswXSAmJiBuZXh0WzFdID09PSAwKSxcbiAgICB0YXAoKFssIHN0ZXBzT2Zmc2V0XSkgPT4gKHN0ZXBzT2Zmc2V0ID8gdGhpcy5fb2Zmc2V0Lm5leHQoMCkgOiAwKSksXG4gICAgbWFwKChbZGF0ZSwgc3RlcHNPZmZzZXQsIGNvbmZpZ10pID0+IHtcbiAgICAgIGlmIChkYXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcm91bmREb3duVG9NaW51dGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGF0ZSA9IGluc3RhbmNlLmNsYW1wKGRhdGUpO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gc3RlcHNPZmZzZXQgKiA1O1xuXG4gICAgICAgIGlmIChtaW51dGVzICE9IDApIHtcbiAgICAgICAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBtaW51dGVzKTtcbiAgICAgICAgICBkYXRlID0gaW5zdGFuY2UuY2xhbXAoZGF0ZSk7IC8vIGNsYW1wIHRoZSBkYXRlIGFnYWluXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwcmVzZXRzJDogT2JzZXJ2YWJsZTxEYXRlVGltZVByZXNldFtdPiA9IHRoaXMuX3ByZXNldHMucGlwZShcbiAgICBzd2l0Y2hNYXBNYXliZU9icygpLFxuICAgIG1hcCgoeDogRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uW10pID0+IHgubWFwKGRhdGVUaW1lUHJlc2V0KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWFkb25seSBkYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZTogRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtQ29udHJvbE9icy5uZXh0KHRoaXMuZm9ybUNvbnRyb2wpO1xuXG4gICAgY29uc3QgaW5wdXRQaWNrZXJDb25maWcgPSB0aGlzLmRhdGVUaW1lRmllbGQucGlja2VyQ29uZmlnO1xuICAgIHRoaXMuX2NvbmZpZy5uZXh0KGlucHV0UGlja2VyQ29uZmlnID8gYXNPYnNlcnZhYmxlRnJvbUdldHRlcihpbnB1dFBpY2tlckNvbmZpZykgOiBvZih7fSkpO1xuICAgIHRoaXMuX3N5bmNDb25maWdPYnMubmV4dCh0aGlzLmRhdGVUaW1lRmllbGQuZ2V0U3luY0ZpZWxkc09icz8uKCkpO1xuXG4gICAgdGhpcy5fc3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQucGlwZShtYXAoKHRpbWV6b25lSW5zdGFuY2UpID0+IGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2N1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRpbWVPdXRwdXQkLnBpcGUoXG4gICAgICAgICAgICB0aHJvdHRsZVRpbWUoVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRSAqIDIsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgICAgICBza2lwRmlyc3RNYXliZSgpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZUhvdXJzQW5kTWludXRlcyksXG4gICAgICAgICAgICBtYXAoKHgpID0+IHZhbHVlRmFjdG9yeSh4KSksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICFkYnhEYXRlVGltZUlzU2FtZURhdGVUaW1lRmllbGRWYWx1ZSh4LCBjdXJyZW50VmFsdWUpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0ID0gZmFsc2U7XG5cbiAgICAvKlxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudGltZVN0cmluZyQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLnNldFRpbWUoeCk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgIHRoaXMuX3ZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4gKHggPyBpc1NhbWVEYXRlKHgsIHN0YXJ0T2ZEYXkoeCkpIDogZmFsc2UpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKChpc0lucHV0VmFsdWVBdE1pZG5pZ2h0KSA9PiB7XG4gICAgICAgICAgaGFzU2V0TWlkbmlnaHRGcm9tSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy50aW1lU3RyaW5nJC5waXBlKFxuICAgICAgICAgICAgLy8gc2tpcCgxKSxcbiAgICAgICAgICAgIG1hcCgodGltZVN0cmluZykgPT4gW3RpbWVTdHJpbmcsIGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHRdIGFzIFtzdHJpbmcsIGJvb2xlYW5dKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbeCwgaXNJbnB1dFZhbHVlQXRNaWRuaWdodF0pID0+IHtcbiAgICAgICAgLy8gU2tpcCBldmVudHMgd2hlcmUgdGhlIHRpbWVJbnB1dCB2YWx1ZSBpcyBjbGVhcmVkLCB1bmxlc3MgdGhlIGlucHV0IHZhbHVlIGlzIGF0IG1pZG5pZ2h0IGFuZCB3ZSd2ZSBhbHJlYWR5IHByb2Nlc3NlZCBpdCBiZWluZyBhdCBtaWRuaWdodFxuICAgICAgICBpZiAoIXRoaXMudGltZUlucHV0Q3RybC52YWx1ZSAmJiB4ID09PSAnMTI6MDBBTScgJiYgKCFpc0lucHV0VmFsdWVBdE1pZG5pZ2h0IHx8IChpc0lucHV0VmFsdWVBdE1pZG5pZ2h0ICYmIGhhc1NldE1pZG5pZ2h0RnJvbUlucHV0KSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGhhcyBzZXQgZmxhZ1xuICAgICAgICBpZiAoeCA9PT0gJzEyOjAwQU0nICYmIGlzSW5wdXRWYWx1ZUF0TWlkbmlnaHQpIHtcbiAgICAgICAgICBoYXNTZXRNaWRuaWdodEZyb21JbnB1dCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFRpbWUoeCk7XG4gICAgICB9KTtcblxuICAgIC8vIFNldCBkZWZhdWx0IHRpbWV6b25lIGlmIHByb3ZpZGVkLlxuICAgIGlmICh0aGlzLnRpbWV6b25lICYmICF0aGlzLmRhdGVUaW1lRmllbGQuZnVsbERheUluVVRDKSB7XG4gICAgICB0aGlzLl9kZWZhdWx0VGltZXpvbmUubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMudGltZXpvbmUpKTtcbiAgICB9XG5cbiAgICB0aGlzLl90aW1lRGF0ZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy50aW1lRGF0ZSkpO1xuXG4gICAgLy8gV2F0Y2ggZm9yIGRpc2FibGVkIGNoYW5nZXMgc28gd2UgY2FuIHByb3BvZ2F0ZSB0aGVtIHByb3Blcmx5LlxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0Q3RybC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy50aW1lSW5wdXRDdHJsLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXRDdHJsLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMudGltZUlucHV0Q3RybC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNGdWxsRGF5RmllbGQgPSB0aGlzLmRhdGVUaW1lRmllbGQuZnVsbERheUZpZWxkTmFtZTtcbiAgICBsZXQgZnVsbERheUZpZWxkQ3RybDogTWF5YmU8QWJzdHJhY3RDb250cm9sPjtcblxuICAgIGlmIChpc0Z1bGxEYXlGaWVsZCkge1xuICAgICAgZnVsbERheUZpZWxkQ3RybCA9IHRoaXMuZm9ybS5nZXQoaXNGdWxsRGF5RmllbGQpO1xuICAgIH1cblxuICAgIGlmICghZnVsbERheUZpZWxkQ3RybCkge1xuICAgICAgY29uc3QgaXNGdWxsRGF5ID0gdGhpcy50aW1lTW9kZSA9PT0gRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU7XG4gICAgICB0aGlzLl9mdWxsRGF5SW5wdXRDdHJsID0gbmV3IEZvcm1Db250cm9sKGlzRnVsbERheSk7XG5cbiAgICAgIC8vIFNldCB0aGUgY29udHJvbCBpbiB0aGUgZm9ybSB0b28gaWYgdGhlIG5hbWUgaXMgZGVmaW5lZC5cbiAgICAgIGlmIChpc0Z1bGxEYXlGaWVsZCkge1xuICAgICAgICAodGhpcy5mb3JtIGFzIEZvcm1Hcm91cCkuYWRkQ29udHJvbChpc0Z1bGxEYXlGaWVsZCwgdGhpcy5fZnVsbERheUlucHV0Q3RybCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bGxEYXlGaWVsZEN0cmwgPSB0aGlzLl9mdWxsRGF5SW5wdXRDdHJsO1xuICAgIH1cblxuICAgIHRoaXMuX2Z1bGxEYXlDb250cm9sT2JzLm5leHQoZnVsbERheUZpZWxkQ3RybCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMudGltZU1vZGUpIHtcbiAgICAgIGNhc2UgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk9QVElPTkFMOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLk5PTkU6XG4gICAgICAgIHRoaXMucmVtb3ZlVGltZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGJ4RGF0ZVRpbWVGaWVsZFRpbWVNb2RlLlJFUVVJUkVEOlxuICAgICAgICB0aGlzLmFkZFRpbWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJlc2V0cyAhPSBudWxsKSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnByZXNldHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcHJlc2V0cy5uZXh0KHRoaXMuZGJ4RGF0ZVRpbWVGaWVsZENvbmZpZ1NlcnZpY2UuY29uZmlndXJhdGlvbnMkKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX3N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fdmFsdWVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NvbmZpZy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2RlZmF1bHRUaW1lem9uZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3RpbWVEYXRlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcHJlc2V0cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Z1bGxEYXlDb250cm9sT2JzLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fb2Zmc2V0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgICB0aGlzLl91cGRhdGVUaW1lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc3luY0NvbmZpZ09icy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgc2VsZWN0UHJlc2V0KHByZXNldDogRGF0ZVRpbWVQcmVzZXQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByZXNldC52YWx1ZSgpO1xuXG4gICAgaWYgKHZhbHVlLmxvZ2ljYWxEYXRlKSB7XG4gICAgICB0aGlzLnNldExvZ2ljYWxUaW1lKHZhbHVlLmxvZ2ljYWxEYXRlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRpbWVTdHJpbmcpIHtcbiAgICAgIHRoaXMuc2V0VGltZSh2YWx1ZS50aW1lU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBkYXRlUGlja2VkKGV2ZW50OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxEYXRlPik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBldmVudC52YWx1ZTtcblxuICAgIGlmIChkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGVJbnB1dFZhbHVlKGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHNldExvZ2ljYWxUaW1lKHRpbWU6IExvZ2ljYWxEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IGRhdGVGcm9tTG9naWNhbERhdGUodGltZSk7XG5cbiAgICBpZiAoZGF0ZSkge1xuICAgICAgdGhpcy5zZXRUaW1lRnJvbURhdGUoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGF0ZUlucHV0VmFsdWUoZGF0ZTogRGF0ZSkge1xuICAgIHRoaXMuZGF0ZUlucHV0Q3RybC5zZXRWYWx1ZShkYXRlKTtcbiAgICB0aGlzLl91cGRhdGVUaW1lLm5leHQoKTtcbiAgfVxuXG4gIHNldFRpbWVGcm9tRGF0ZSh0aW1lRGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVTdHJpbmcgPSB0b0xvY2FsUmVhZGFibGVUaW1lU3RyaW5nKHRpbWVEYXRlKTtcbiAgICB0aGlzLnNldFRpbWUodGltZVN0cmluZyk7XG4gIH1cblxuICBzZXRUaW1lKHRpbWU6IFJlYWRhYmxlVGltZVN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVJbnB1dEN0cmwudmFsdWUgIT09IHRpbWUpIHtcbiAgICAgIHRoaXMudGltZUlucHV0Q3RybC5zZXRWYWx1ZSh0aW1lKTtcbiAgICAgIHRoaXMuX29mZnNldC5uZXh0KDApO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAga2V5ZG93bk9uRGF0ZUlucHV0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGRpcmVjdGlvbiA9IDA7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgIGRpcmVjdGlvbiA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgZGlyZWN0aW9uID0gLTE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSAxO1xuXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDM2NTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgIG9mZnNldCA9IDMwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDc7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5kYXRlJCwgdGhpcy5kYXRlVGltZVBpY2tlckNvbmZpZyRdKVxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0ZSwgY29uZmlnXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBzdGFydE9mRGF5KGFkZERheXMoZGF0ZSwgb2Zmc2V0ICogZGlyZWN0aW9uKSk7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRGF0ZVRpbWVNaW51dGVJbnN0YW5jZSh7XG4gICAgICAgICAgICBkYXRlOiBuZXdEYXRlLFxuICAgICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBuZXh0RGF0ZSA9IGluc3RhbmNlLmlzSW5TY2hlZHVsZShuZXdEYXRlKSA/IG5ld0RhdGUgOiBpbnN0YW5jZS5maW5kTmV4dEF2YWlsYWJsZURheUluU2NoZWR1bGUobmV3RGF0ZSwgZGlyZWN0aW9uID09PSAxID8gJ2Z1dHVyZScgOiAncGFzdCcpO1xuXG4gICAgICAgICAgaWYgKG5leHREYXRlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZUlucHV0VmFsdWUoaW5zdGFuY2UuY2xhbXBUb0xpbWl0KG5leHREYXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBrZXlkb3duT25UaW1lSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgZGlyZWN0aW9uID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICBkaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbGV0IG9mZnNldCA9IDE7XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBvZmZzZXQgPSAzMDA7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDYwO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIG9mZnNldCA9IDU7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiAhPT0gMCkge1xuICAgICAgdGhpcy5fb2Zmc2V0Lm5leHQodGhpcy5fb2Zmc2V0LnZhbHVlICsgb2Zmc2V0ICogZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWUubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzVGltZSgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICBmb2N1c091dFRpbWUoKTogdm9pZCB7XG4gICAgdGhpcy5fdXBkYXRlVGltZS5uZXh0KCk7XG4gIH1cblxuICBhZGRUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheShmYWxzZSk7XG4gIH1cblxuICByZW1vdmVUaW1lKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RnVsbERheSh0cnVlKTtcbiAgfVxuXG4gIHNldEZ1bGxEYXkoZnVsbERheTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZnVsbERheUNvbnRyb2wkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB4LnNldFZhbHVlKGZ1bGxEYXkpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLWZpZWxkXCIgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0LnhzPVwiY29sdW1uIHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtZXZlbmx5IHN0cmV0Y2hcIj5cbiAgPCEtLSBEYXRlIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvd1wiIGZ4RmxleC5sdC1zbT1cIjEwMFwiIFtmeEZsZXhdPVwiZGF0ZU9ubHkgPyAnMTAwJyA6ICc1MCdcIiAqbmdJZj1cInNob3dEYXRlSW5wdXRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZUlucHV0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIEFkZGl0aW9uYWwgc3BhY2luZyAtLT5cbiAgICA8ZGJ4LWJ1dHRvbi1zcGFjZXIgKm5nSWY9XCIhZGF0ZU9ubHlcIj48L2RieC1idXR0b24tc3BhY2VyPlxuICA8L2Rpdj5cbiAgPCEtLSBUaW1lIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvd1wiIGZ4RmxleC5sdC1zbT1cIjEwMFwiIFtmeEZsZXhdPVwic2hvd0RhdGVJbnB1dCA/ICc1MCcgOiAnMTAwJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VGltZUlucHV0JCB8IGFzeW5jXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGltZU1lbnVBbmRJbnB1dFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAqbmdJZj1cInNob3dBZGRUaW1lJCB8IGFzeW5jXCIgY2xhc3M9XCJhZGQtdGltZS1idXR0b24td3JhcHBlclwiPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwibWF0LWRhdGVwaWNrZXItYnV0dG9uLWhpZ2hsaWdodCBkYngtYnV0dG9uLXNwYWNlciBhZGQtdGltZS1idXR0b25cIiBuZ0NsYXNzLmx0LXNtPVwiYWRkLXRpbWUtYnV0dG9uLWZ1bGxcIiAoY2xpY2spPVwiYWRkVGltZSgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj50aW1lcjwvbWF0LWljb24+XG4gICAgICAgIEFkZCBUaW1lXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhaGlkZURhdGVIaW50XCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93IGRieC1kYXRldGltZS1oaW50LXJvd1wiIGZ4RmxleD1cIjEwMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYngtaGludFwiIFtuZ1N3aXRjaF09XCJmdWxsRGF5JCB8IGFzeW5jXCI+XG4gICAgICA8c21hbGwgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgPGIgY2xhc3M9XCJkYngtb2tcIj57eyBhbGxEYXlMYWJlbCB9fTwvYj5cbiAgICAgICAge3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZTogJ2Z1bGxEYXRlJyB9fSB7eyB0aW1lem9uZUFiYnJldmlhdGlvbiQgfCBhc3luYyB9fSAoe3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZURpc3RhbmNlIH19KVxuICAgICAgPC9zbWFsbD5cbiAgICAgIDxzbWFsbCAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiPlxuICAgICAgICAgIDxiIGNsYXNzPVwiZGJ4LW9rXCI+e3sgYXRUaW1lTGFiZWwgfX08L2I+XG4gICAgICAgICAge3sgZGlzcGxheVZhbHVlJCB8IGFzeW5jIHwgZGF0ZTogJ21lZGl1bScgfX0ge3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX0gKHt7IGRpc3BsYXlWYWx1ZSQgfCBhc3luYyB8IHRpbWVEaXN0YW5jZSB9fSlcbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIERhdGUgSW5wdXQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVJbnB1dFRlbXBsYXRlPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYngtZGF0ZXRpbWUtcm93LWZpZWxkXCI+XG4gICAgPG1hdC1sYWJlbD57eyBkYXRlTGFiZWwgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgI2RhdGVJbnB1dCBtYXRJbnB1dCBbbWluXT1cImRhdGVJbnB1dE1pbiQgfCBhc3luY1wiIFttYXhdPVwiZGF0ZUlucHV0TWF4JCB8IGFzeW5jXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiKHBpY2tlckZpbHRlciQgfCBhc3luYykgfHwgZGVmYXVsdFBpY2tlckZpbHRlclwiIChkYXRlQ2hhbmdlKT1cImRhdGVQaWNrZWQoJGV2ZW50KVwiIFt2YWx1ZV09XCJkYXRlVmFsdWUkIHwgYXN5bmNcIiAoa2V5ZG93bik9XCJrZXlkb3duT25EYXRlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICA8YnV0dG9uIG1hdFByZWZpeCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctYnV0dG9uXCIgKm5nSWY9XCIhaGlkZURhdGVQaWNrZXJcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgIDxtYXQtaWNvbj5jYWxlbmRhcl90b2RheTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gbWF0VGV4dFN1ZmZpeCAqbmdJZj1cIiEoc2hvd1RpbWVJbnB1dCQgfCBhc3luYylcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lem9uZVN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaW1lIE1lbnUvSW5wdXQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3RpbWVNZW51QW5kSW5wdXRUZW1wbGF0ZT5cbiAgPG1hdC1tZW51ICN0aW1lbWVudT1cIm1hdE1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGltZU1vZGUgPT09ICdvcHRpb25hbCdcIj5cbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlVGltZSgpXCI+XG4gICAgICAgIDxzcGFuPlJlbW92ZSBUaW1lPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcmVzZXQgb2YgcHJlc2V0cyQgfCBhc3luY1wiPlxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzZWxlY3RQcmVzZXQocHJlc2V0KVwiPnt7IHByZXNldC5sYWJlbCB8IGdldFZhbHVlIH19PC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LW1lbnU+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1kYXRldGltZS1yb3ctZmllbGRcIj5cbiAgICA8bWF0LWxhYmVsPnt7IHRpbWVMYWJlbCB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCAjdGltZUlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJ0aW1lSW5wdXRDdHJsXCIgKGZvY3VzKT1cImZvY3VzVGltZSgpXCIgKGZvY3Vzb3V0KT1cImZvY3VzT3V0VGltZSgpXCIgKGtleWRvd24pPVwia2V5ZG93bk9uVGltZUlucHV0KCRldmVudClcIiAvPlxuICAgIDxidXR0b24gbWF0UHJlZml4IGNsYXNzPVwiZGJ4LWRhdGV0aW1lLXJvdy1idXR0b25cIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRpbWVtZW51XCIgYXJpYS1sYWJlbD1cIm9wZW5zIHRoZSB0aW1lIG1lbnVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgIDxtYXQtaWNvbj50aW1lcjwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPHNwYW4gbWF0VGV4dFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aW1lem9uZVN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zcGFuPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUaW1lem9uZSBTdWZmaXggLS0+XG48bmctdGVtcGxhdGUgI3RpbWV6b25lU3VmZml4VGVtcGxhdGU+XG4gIDxzcGFuICpuZ0lmPVwic2hvd1RpbWV6b25lXCIgY2xhc3M9XCJkYngtZGF0ZXRpbWUtdGltZXpvbmUgZGJ4LWZhaW50XCI+e3sgdGltZXpvbmVBYmJyZXZpYXRpb24kIHwgYXN5bmMgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -26,7 +26,7 @@ import * as i8 from '@angular/material/button';
26
26
  import { MatButtonModule } from '@angular/material/button';
27
27
  import * as i3$2 from '@ngbracket/ngx-layout/flex';
28
28
  import { FlexLayoutModule } from '@ngbracket/ngx-layout';
29
- import { objectIsEmpty, mergeObjectsFunction, filterFromPOJOFunction, mergeObjects, filterFromPOJO, asArray, objectHasNoKeys, addPlusPrefixToNumber, convertMaybeToArray, isSelectedDecisionFunctionFactory, readKeysFrom, hasDifferentValues, makeValuesGroupMap, separateValues, filterUniqueValues, searchStringFilterFunction, caseInsensitiveFilterByIndexOfDecisionFactory, sortByStringFunction, mergeArraysIntoArray, lastValue, arrayToMap, setContainsAllValues, addToSetCopy, setsAreEquivalent, filterMaybeValues, mergeArrays, firstValue, cachedGetter, makeGetter, asDecisionFunction, getValueFromGetter, asGetter, isISO8601DayStringStart, mapIdentityFunction, MS_IN_MINUTE, isMonthDaySlashDate, HAS_WEBSITE_DOMAIN_NAME_REGEX, KeyValueTypleValueFilter, valuesFromPOJO, allObjectsAreEqual, isNumberDivisibleBy, nearestDivisibleValues, isE164PhoneNumber as isE164PhoneNumber$1, isValidPhoneExtensionNumber, e164PhoneNumberExtensionPair, mapMaybeFunction, transformNumberFunction, concatArrays, DOLLAR_AMOUNT_PRECISION, e164PhoneNumberFromE164PhoneNumberExtensionPair, transformStringFunction, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX, LAT_LNG_PATTERN, BooleanStringKeyArrayUtilityInstance, capitalizeFirstLetter } from '@dereekb/util';
29
+ import { objectIsEmpty, mergeObjectsFunction, filterFromPOJOFunction, mergeObjects, filterFromPOJO, asArray, objectHasNoKeys, addPlusPrefixToNumber, convertMaybeToArray, isSelectedDecisionFunctionFactory, readKeysFrom, hasDifferentValues, makeValuesGroupMap, separateValues, filterUniqueValues, searchStringFilterFunction, caseInsensitiveFilterByIndexOfDecisionFactory, sortByStringFunction, mergeArraysIntoArray, lastValue, arrayToMap, setContainsAllValues, addToSetCopy, setsAreEquivalent, filterMaybeValues, mergeArrays, firstValue, cachedGetter, makeGetter, asDecisionFunction, getValueFromGetter, asGetter, dateFromMinuteOfDay, dateToMinuteOfDay, isISO8601DayStringStart, mapIdentityFunction, MS_IN_MINUTE, isMonthDaySlashDate, HAS_WEBSITE_DOMAIN_NAME_REGEX, KeyValueTypleValueFilter, valuesFromPOJO, allObjectsAreEqual, isNumberDivisibleBy, nearestDivisibleValues, isE164PhoneNumber as isE164PhoneNumber$1, isValidPhoneExtensionNumber, e164PhoneNumberExtensionPair, mapMaybeFunction, transformNumberFunction, concatArrays, DOLLAR_AMOUNT_PRECISION, e164PhoneNumberFromE164PhoneNumberExtensionPair, transformStringFunction, US_STATE_CODE_STRING_REGEX, ZIP_CODE_STRING_REGEX, LAT_LNG_PATTERN, BooleanStringKeyArrayUtilityInstance, capitalizeFirstLetter } from '@dereekb/util';
30
30
  import * as i2$2 from '@angular/material/slide-toggle';
31
31
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
32
32
  import * as i2$3 from '@ngbracket/ngx-layout/extended';
@@ -44,7 +44,7 @@ import * as i6 from '@angular/material/chips';
44
44
  import { MatChipsModule } from '@angular/material/chips';
45
45
  import { MatListModule } from '@angular/material/list';
46
46
  import { ENTER, COMMA } from '@angular/cdk/keycodes';
47
- import { skipUntilTimeElapsedAfterLastEmission, toJsDate, parseISO8601DayStringToDate, formatToISO8601DateString, formatToISO8601DayStringForSystem, isSameDateHoursAndMinutes, safeToJsDate, guessCurrentTimezone, dateTimezoneUtcNormal, toJsDayDate, isSameDateDay, toLocalReadableTimeString, getTimezoneAbbreviation, utcDayForDate, readableTimeStringToDate, findMinDate, dateFromLogicalDate, findMaxDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction, DateTimeMinuteInstance, isSameDateDayRange, dateRange, clampDateRangeToDateRange, isDateInDateRange, isSameDateRange, limitDateTimeInstance, allTimezoneInfos, timezoneInfoForSystem, searchTimezoneInfos } from '@dereekb/date';
47
+ import { skipUntilTimeElapsedAfterLastEmission, toJsDate, parseJsDateString, parseISO8601DayStringToDate, formatToISO8601DateString, formatToISO8601DayStringForSystem, isSameDateHoursAndMinutes, safeToJsDate, guessCurrentTimezone, dateTimezoneUtcNormal, toJsDayDate, isSameDateDay, toLocalReadableTimeString, getTimezoneAbbreviation, utcDayForDate, readableTimeStringToDate, findMinDate, dateFromLogicalDate, findMaxDate, isSameDate, dateTimeMinuteWholeDayDecisionFunction, DateTimeMinuteInstance, isSameDateDayRange, dateRange, clampDateRangeToDateRange, isDateInDateRange, isSameDateRange, limitDateTimeInstance, allTimezoneInfos, timezoneInfoForSystem, searchTimezoneInfos } from '@dereekb/date';
48
48
  import { FieldType as FieldType$2, FormlyMatFormFieldModule } from '@ngx-formly/material/form-field';
49
49
  import * as i3$3 from '@angular/material/select';
50
50
  import { MatSelectModule } from '@angular/material/select';
@@ -3688,15 +3688,55 @@ var DbxDateTimeValueMode;
3688
3688
  * Value is returned/parsed as an ISO8601DayString, relative to the current timezone.
3689
3689
  */
3690
3690
  DbxDateTimeValueMode[DbxDateTimeValueMode["DAY_STRING"] = 2] = "DAY_STRING";
3691
+ /**
3692
+ * Value is returned/parsed as a Unix timestamp, relative to the current timezone.
3693
+ */
3694
+ DbxDateTimeValueMode[DbxDateTimeValueMode["UNIX_TIMESTAMP"] = 3] = "UNIX_TIMESTAMP";
3695
+ /**
3696
+ * Value is returned/parsed as a minute of the day, relative to the current timezone.
3697
+ */
3698
+ DbxDateTimeValueMode[DbxDateTimeValueMode["MINUTE_OF_DAY"] = 4] = "MINUTE_OF_DAY";
3691
3699
  })(DbxDateTimeValueMode || (DbxDateTimeValueMode = {}));
3692
3700
  function dbxDateTimeInputValueParseFactory(mode, timezoneInstance) {
3693
3701
  let factory;
3694
3702
  let useTimezoneInstance = true;
3695
3703
  switch (mode) {
3696
3704
  case DbxDateTimeValueMode.DAY_STRING:
3697
- factory = (x) => (typeof x === 'string' ? parseISO8601DayStringToDate(x) : x);
3705
+ factory = (x) => {
3706
+ let result;
3707
+ switch (typeof x) {
3708
+ case 'string':
3709
+ result = parseISO8601DayStringToDate(x);
3710
+ break;
3711
+ case 'number':
3712
+ result = new Date(x);
3713
+ break;
3714
+ default:
3715
+ result = x;
3716
+ break;
3717
+ }
3718
+ return result;
3719
+ };
3698
3720
  useTimezoneInstance = false; // day strings do not use timezones
3699
3721
  break;
3722
+ case DbxDateTimeValueMode.MINUTE_OF_DAY:
3723
+ factory = (x) => {
3724
+ let result;
3725
+ switch (typeof x) {
3726
+ case 'number':
3727
+ result = dateFromMinuteOfDay(x);
3728
+ break;
3729
+ case 'string':
3730
+ result = parseJsDateString(x);
3731
+ break;
3732
+ default:
3733
+ result = x;
3734
+ break;
3735
+ }
3736
+ return result;
3737
+ };
3738
+ break;
3739
+ case DbxDateTimeValueMode.UNIX_TIMESTAMP:
3700
3740
  case DbxDateTimeValueMode.DATE_STRING:
3701
3741
  case DbxDateTimeValueMode.DATE:
3702
3742
  default:
@@ -3724,6 +3764,12 @@ function dbxDateTimeOutputValueFactory(mode, timezoneInstance) {
3724
3764
  case DbxDateTimeValueMode.DATE_STRING:
3725
3765
  factory = (x) => (x != null ? formatToISO8601DateString(x) : x);
3726
3766
  break;
3767
+ case DbxDateTimeValueMode.UNIX_TIMESTAMP:
3768
+ factory = (x) => (x != null ? x.getTime() : x);
3769
+ break;
3770
+ case DbxDateTimeValueMode.MINUTE_OF_DAY:
3771
+ factory = (x) => (x != null ? dateToMinuteOfDay(x) : x);
3772
+ break;
3727
3773
  case DbxDateTimeValueMode.DATE:
3728
3774
  default:
3729
3775
  factory = (x) => x;
@@ -3740,7 +3786,8 @@ function dbxDateTimeOutputValueFactory(mode, timezoneInstance) {
3740
3786
  return factory;
3741
3787
  }
3742
3788
  function dbxDateTimeIsSameDateTimeFieldValue(a, b) {
3743
- return a && b ? (typeof a === 'string' ? a === b : isSameDateHoursAndMinutes(a, b)) : a == b;
3789
+ const typeofA = typeof a;
3790
+ return a && b ? (typeofA === 'string' || typeofA === 'number' ? a === b : isSameDateHoursAndMinutes(a, b)) : a == b;
3744
3791
  }
3745
3792
  function dbxDateRangeIsSameDateRangeFieldValue(a, b) {
3746
3793
  return a && b ? dbxDateTimeIsSameDateTimeFieldValue(a.start, b.start) && dbxDateTimeIsSameDateTimeFieldValue(a.end, b.end) : a == b;
@@ -3799,7 +3846,13 @@ class DbxDateTimeFieldComponent extends FieldType$1 {
3799
3846
  return this.field.props;
3800
3847
  }
3801
3848
  get timeOnly() {
3802
- return this.dateTimeField.timeOnly;
3849
+ const timeValuesOnly = this.valueMode === DbxDateTimeValueMode.MINUTE_OF_DAY;
3850
+ if (timeValuesOnly) {
3851
+ return true;
3852
+ }
3853
+ else {
3854
+ return this.dateTimeField.timeOnly;
3855
+ }
3803
3856
  }
3804
3857
  get showDateInput() {
3805
3858
  return !this.timeOnly;