mis-crystal-design-system 17.0.1 → 17.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/async-search-dropdown/async-dropdown.component.d.ts +1 -4
- package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +1 -1
- package/dynamic-form/dynamic-form.component.d.ts +0 -1
- package/esm2022/async-search-dropdown/async-dropdown.component.mjs +9 -27
- package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +27 -17
- package/esm2022/daterangepicker_v2/models/drp-config.model.mjs +1 -1
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +52 -46
- package/esm2022/dynamic-form/dynamic-form.component.mjs +11 -6
- package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +55 -41
- package/esm2022/timepicker/timepicker.component.mjs +54 -48
- package/esm2022/timerangepicker/timerangepicker.component.mjs +46 -42
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs +8 -26
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +26 -16
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +51 -44
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs +10 -4
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +54 -40
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timepicker.mjs +53 -47
- package/fesm2022/mis-crystal-design-system-timepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs +45 -41
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
- package/package.json +13 -13
- package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +1 -1
- package/table/filter/filter.component.d.ts +1 -1
- package/timepicker/timepicker.component.d.ts +2 -2
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild, ViewChildren } from "@angular/core";
|
|
2
|
-
import moment from "moment-timezone";
|
|
3
2
|
import { TimepickerDirective } from "./timepicker.directive";
|
|
4
3
|
import { ToolTipDirective } from "mis-crystal-design-system/tooltip";
|
|
4
|
+
import dayjs from 'dayjs';
|
|
5
|
+
import timezone from 'dayjs/plugin/timezone';
|
|
6
|
+
import utc from 'dayjs/plugin/utc';
|
|
7
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
5
8
|
import * as i0 from "@angular/core";
|
|
6
9
|
import * as i1 from "@angular/common";
|
|
7
10
|
import * as i2 from "@angular/forms";
|
|
@@ -51,6 +54,9 @@ function TimePickerComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
51
54
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
52
55
|
i0.ɵɵproperty("ngIf", ctx_r3.openStatus);
|
|
53
56
|
} }
|
|
57
|
+
dayjs.extend(utc);
|
|
58
|
+
dayjs.extend(timezone);
|
|
59
|
+
dayjs.extend(customParseFormat);
|
|
54
60
|
export class TimePickerComponent {
|
|
55
61
|
// gets all the li elements from the dropdown and scrolls to the highlighted element
|
|
56
62
|
set timeIntervalRefs(intervals) {
|
|
@@ -74,7 +80,7 @@ export class TimePickerComponent {
|
|
|
74
80
|
this.height = "max-content";
|
|
75
81
|
this.inputWidth = "100px";
|
|
76
82
|
this.interval = 15;
|
|
77
|
-
this.dateAsEpoch =
|
|
83
|
+
this.dateAsEpoch = dayjs().valueOf();
|
|
78
84
|
this.rangeValidity = true;
|
|
79
85
|
this.showTooltip = true;
|
|
80
86
|
this.dispayToolTip = this.showTooltip;
|
|
@@ -84,31 +90,31 @@ export class TimePickerComponent {
|
|
|
84
90
|
}
|
|
85
91
|
ngOnInit() {
|
|
86
92
|
if (!this.givenTime && !this.minTime) {
|
|
87
|
-
this.chosenTime =
|
|
88
|
-
let
|
|
93
|
+
this.chosenTime = dayjs(this.firstInterval).format(this.timeFormat);
|
|
94
|
+
let chosenTimedayjs = this.getdayjs(this.chosenTime);
|
|
89
95
|
this.emitTime({
|
|
90
96
|
valid: !this.isInvalid,
|
|
91
97
|
time: this.chosenTime,
|
|
92
|
-
epoch:
|
|
98
|
+
epoch: chosenTimedayjs.valueOf()
|
|
93
99
|
});
|
|
94
100
|
}
|
|
95
101
|
}
|
|
96
102
|
ngOnChanges() {
|
|
97
103
|
this.timeFormat = this.clockFormat === 12 ? "hh:mm a" : "HH:mm";
|
|
98
|
-
|
|
104
|
+
dayjs.tz.setDefault(this.timezone);
|
|
99
105
|
if (this.timeFormat) {
|
|
100
|
-
let
|
|
106
|
+
let chosenTimedayjs = this.getdayjs(this.chosenTime);
|
|
101
107
|
// if the first interval is >= the chosen time
|
|
102
108
|
// then only update the value of chosen time
|
|
103
109
|
// else it remains the same
|
|
104
|
-
if (this.firstInterval >=
|
|
105
|
-
this.chosenTime =
|
|
106
|
-
|
|
110
|
+
if (this.firstInterval >= chosenTimedayjs.valueOf() && this.rangeValidity && !this.userInputFlag) {
|
|
111
|
+
this.chosenTime = dayjs(this.firstInterval).format(this.timeFormat);
|
|
112
|
+
chosenTimedayjs = this.getdayjs(this.chosenTime);
|
|
107
113
|
}
|
|
108
114
|
if ((this.givenTimeFlag && this.givenTime) || this.minTime) {
|
|
109
|
-
this.chosenTime =
|
|
115
|
+
this.chosenTime = dayjs(this.minTime || this.givenTime).format(this.timeFormat);
|
|
110
116
|
}
|
|
111
|
-
|
|
117
|
+
chosenTimedayjs = this.getdayjs(this.chosenTime);
|
|
112
118
|
if (!this.userInputFlag)
|
|
113
119
|
this.populateDropdown();
|
|
114
120
|
this.userInputFlag = false;
|
|
@@ -117,7 +123,7 @@ export class TimePickerComponent {
|
|
|
117
123
|
this.emitTime({
|
|
118
124
|
valid: !this.isInvalid,
|
|
119
125
|
time: this.chosenTime,
|
|
120
|
-
epoch:
|
|
126
|
+
epoch: chosenTimedayjs.valueOf()
|
|
121
127
|
});
|
|
122
128
|
this.calculateClosestInterval(this.chosenTime);
|
|
123
129
|
}
|
|
@@ -126,9 +132,9 @@ export class TimePickerComponent {
|
|
|
126
132
|
emitTime(data) {
|
|
127
133
|
this.timeEmitter.emit(data);
|
|
128
134
|
}
|
|
129
|
-
// function to get
|
|
130
|
-
|
|
131
|
-
return
|
|
135
|
+
// function to get dayjs object when time is given in string
|
|
136
|
+
getdayjs(time = '00:00') {
|
|
137
|
+
return dayjs(`${dayjs(this.dateAsEpoch).format("DD-MM-YYYY")} ${time}`, `DD-MM-YYYY ${this.timeFormat}`);
|
|
132
138
|
}
|
|
133
139
|
closeDropdown() {
|
|
134
140
|
this.dispayToolTip = false;
|
|
@@ -146,7 +152,7 @@ export class TimePickerComponent {
|
|
|
146
152
|
const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;
|
|
147
153
|
const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;
|
|
148
154
|
const RE = this.clockFormat === 12 ? RE12 : RE24;
|
|
149
|
-
const
|
|
155
|
+
const timedayjs = this.getdayjs(time);
|
|
150
156
|
let flag = false;
|
|
151
157
|
// if the first interval is set to the start of the day
|
|
152
158
|
// or a time is already provided to the component to show
|
|
@@ -154,11 +160,11 @@ export class TimePickerComponent {
|
|
|
154
160
|
if (this.minTime ||
|
|
155
161
|
this.givenTime ||
|
|
156
162
|
(this.firstInterval &&
|
|
157
|
-
|
|
163
|
+
dayjs(this.firstInterval).format(this.timeFormat).valueOf() === dayjs().startOf("day").format(this.timeFormat).valueOf())) {
|
|
158
164
|
flag = time.match(RE) ? true : false;
|
|
159
165
|
}
|
|
160
166
|
else {
|
|
161
|
-
flag = time.match(RE) &&
|
|
167
|
+
flag = time.match(RE) && timedayjs.diff(dayjs(), "m") >= 0 ? true : false;
|
|
162
168
|
}
|
|
163
169
|
return flag;
|
|
164
170
|
}
|
|
@@ -169,11 +175,11 @@ export class TimePickerComponent {
|
|
|
169
175
|
this.chosenTime = time;
|
|
170
176
|
this.calculateClosestInterval(this.chosenTime);
|
|
171
177
|
}
|
|
172
|
-
const
|
|
178
|
+
const timedayjs = this.getdayjs(time);
|
|
173
179
|
this.emitTime({
|
|
174
180
|
valid: !this.isInvalid,
|
|
175
181
|
time: time,
|
|
176
|
-
epoch:
|
|
182
|
+
epoch: timedayjs.valueOf()
|
|
177
183
|
});
|
|
178
184
|
this.openStatus = false;
|
|
179
185
|
if (this.timepickerDirective)
|
|
@@ -189,35 +195,35 @@ export class TimePickerComponent {
|
|
|
189
195
|
this.timepickerDirective.destroyOverlay();
|
|
190
196
|
this.calculateClosestInterval(time);
|
|
191
197
|
}
|
|
192
|
-
const
|
|
198
|
+
const timedayjs = this.getdayjs(time);
|
|
193
199
|
this.emitTime({
|
|
194
200
|
valid: !this.isInvalid,
|
|
195
201
|
time: time,
|
|
196
|
-
epoch:
|
|
202
|
+
epoch: timedayjs.valueOf()
|
|
197
203
|
});
|
|
198
204
|
}
|
|
199
205
|
calculateClosestInterval(time) {
|
|
200
206
|
let roundedEpoch;
|
|
201
|
-
// Converting time and date to a
|
|
202
|
-
const chosenDate =
|
|
203
|
-
const parsedTimeWithDate =
|
|
204
|
-
// Converting
|
|
207
|
+
// Converting time and date to a dayjs object
|
|
208
|
+
const chosenDate = dayjs(this.dateAsEpoch).format("DD-MM-YYYY"); // 05-01-2024
|
|
209
|
+
const parsedTimeWithDate = dayjs(`${chosenDate} ${time}`, `DD-MM-YYYY ${this.timeFormat}`);
|
|
210
|
+
// Converting dayjs object to epoch
|
|
205
211
|
const chosenTimeEpoch = parsedTimeWithDate.valueOf();
|
|
206
|
-
const offset = this.interval - (
|
|
212
|
+
const offset = this.interval - (dayjs(chosenTimeEpoch).minute() % this.interval);
|
|
207
213
|
if (this.minTime && !this.givenTime) {
|
|
208
214
|
this.isHighlighted = 0;
|
|
209
215
|
return;
|
|
210
216
|
}
|
|
211
|
-
roundedEpoch = offset >= this.interval / 2 ? (
|
|
217
|
+
roundedEpoch = offset >= this.interval / 2 ? (dayjs(chosenTimeEpoch).subtract(this.interval - offset, "m")).valueOf() : (dayjs(chosenTimeEpoch).add(offset, "m")).valueOf();
|
|
212
218
|
// finding the index of element that needs to be highlighted
|
|
213
|
-
if (chosenTimeEpoch >
|
|
219
|
+
if (chosenTimeEpoch > dayjs(this.dateAsEpoch).endOf("day").subtract(this.interval, "m").valueOf()) {
|
|
214
220
|
this.isHighlighted = this.timeIntervals.length - 1;
|
|
215
221
|
}
|
|
216
222
|
else {
|
|
217
|
-
const
|
|
223
|
+
const roundedEpochdayjs = dayjs(roundedEpoch);
|
|
218
224
|
this.isHighlighted = this.timeIntervals.findIndex(interval => {
|
|
219
|
-
const intervalObj =
|
|
220
|
-
return intervalObj.isSame(
|
|
225
|
+
const intervalObj = dayjs(`${chosenDate} ${interval}`, `DD-MM-YYYY ${this.timeFormat}`);
|
|
226
|
+
return intervalObj.isSame(roundedEpochdayjs);
|
|
221
227
|
});
|
|
222
228
|
}
|
|
223
229
|
}
|
|
@@ -228,38 +234,38 @@ export class TimePickerComponent {
|
|
|
228
234
|
if (!this.firstInterval) {
|
|
229
235
|
// firstInterval is initialised according to the current time
|
|
230
236
|
// if the date is same as the current date
|
|
231
|
-
if (
|
|
232
|
-
const offset = this.interval - (
|
|
233
|
-
this.firstInterval =
|
|
237
|
+
if (dayjs(this.dateAsEpoch).format("DD-MM-YYYY") === dayjs().format("DD-MM-YYYY") && !this.minTime) {
|
|
238
|
+
const offset = this.interval - (dayjs().minute() % this.interval);
|
|
239
|
+
this.firstInterval = dayjs().add(offset, "m").valueOf();
|
|
234
240
|
}
|
|
235
241
|
// if minimum time to show is provided
|
|
236
242
|
else if (this.minTime) {
|
|
237
|
-
const offset = this.interval - (
|
|
238
|
-
this.firstInterval =
|
|
243
|
+
const offset = this.interval - (dayjs(this.minTime).minute() % this.interval);
|
|
244
|
+
this.firstInterval = dayjs(this.minTime).add(offset, "m").valueOf();
|
|
239
245
|
}
|
|
240
246
|
// else the firstInterval is initialised as start of day
|
|
241
247
|
else {
|
|
242
|
-
this.firstInterval =
|
|
248
|
+
this.firstInterval = dayjs().startOf("day").valueOf();
|
|
243
249
|
}
|
|
244
250
|
}
|
|
245
251
|
if (this.givenTime && this.givenTimeFlag) {
|
|
246
|
-
this.firstInterval =
|
|
252
|
+
this.firstInterval = dayjs(this.givenTime).startOf('d').valueOf();
|
|
247
253
|
this.givenTimeFlag = false;
|
|
248
254
|
}
|
|
249
|
-
const dateAsString =
|
|
250
|
-
const intervalAsString =
|
|
251
|
-
|
|
252
|
-
const end =
|
|
255
|
+
const dateAsString = dayjs(this.dateAsEpoch).format('DD-MM-YYYY');
|
|
256
|
+
const intervalAsString = dayjs(this.firstInterval).format(this.timeFormat);
|
|
257
|
+
let start = dayjs(`${dateAsString} ${intervalAsString}`, `DD-MM-YYYY ${this.timeFormat}`);
|
|
258
|
+
const end = dayjs(this.dateAsEpoch).endOf('d');
|
|
253
259
|
while (start.valueOf() < end.valueOf()) {
|
|
254
260
|
this.timeIntervals.push(start.format(this.timeFormat));
|
|
255
|
-
start.add(this.interval, "m");
|
|
261
|
+
start = start.add(this.interval, "m");
|
|
256
262
|
}
|
|
257
263
|
// if the start time is equal to the interval just before midnight
|
|
258
264
|
// and the start date = end date
|
|
259
265
|
// push 11:59pm only
|
|
260
266
|
if (this.timeIntervals.length === 0) {
|
|
261
|
-
this.chosenTime =
|
|
262
|
-
this.timeIntervals.push(
|
|
267
|
+
this.chosenTime = dayjs().endOf("d").format(this.timeFormat);
|
|
268
|
+
this.timeIntervals.push(dayjs().endOf("d").format(this.timeFormat));
|
|
263
269
|
}
|
|
264
270
|
}
|
|
265
271
|
ngOnDestroy() {
|
|
@@ -344,4 +350,4 @@ export class TimePickerComponent {
|
|
|
344
350
|
args: ["timeInterval"]
|
|
345
351
|
}] }); })();
|
|
346
352
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TimePickerComponent, { className: "TimePickerComponent" }); })();
|
|
347
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGltZXBpY2tlci90aW1lcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFFckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ21CM0QsMEJBQWdGOzs7O0lBRmxGLGlDQUFxSjtJQUFuSSw2TkFBUyxnQ0FBc0IsS0FBQztJQUNoRCxZQUNBO0lBQUEsOEZBQTBFO0lBQzVFLGlCQUFLOzs7OztJQUhpRyxtRkFBOEM7SUFDbEosZUFDQTtJQURBLDRDQUNBO0lBQTJDLGNBQTZCO0lBQTdCLHdEQUE2Qjs7O0lBSDVFLEFBREYsOEJBQXVHLGtCQUN2RjtJQUNaLHNGQUFxSjtJQUt6SixBQURFLGlCQUFLLEVBQ0Q7OztJQVA4QywrRkFBa0Q7SUFFMUIsZUFBa0I7SUFBbEIsOENBQWtCOzs7SUFGOUYsa0ZBQXVHOzs7SUFBakcsd0NBQWdCOztBRFAxQixNQUFNLE9BQU8sbUJBQW1CO0lBZ0M5QixvRkFBb0Y7SUFDcEYsSUFBa0MsZ0JBQWdCLENBQUMsU0FBUztRQUMxRCxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFT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QkFBZixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNJLFdBQVc7a0JBQXBCLE1BQU07WUFDK0IsS0FBSztrQkFBMUMsU0FBUzttQkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ0osbUJBQW1CO2tCQUFsRCxTQUFTO21CQUFDLG1CQUFtQjtZQUNELGdCQUFnQjtrQkFBNUMsU0FBUzttQkFBQyxnQkFBZ0I7WUFHTyxnQkFBZ0I7a0JBQWpELFlBQVk7bUJBQUMsY0FBYzs7a0ZBakNqQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5pbXBvcnQgeyBJVGltZSB9IGZyb20gXCIuL3RpbWUubmFtZXNwYWNlXCI7XG5pbXBvcnQgeyBUaW1lcGlja2VyRGlyZWN0aXZlIH0gZnJvbSBcIi4vdGltZXBpY2tlci5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFRvb2xUaXBEaXJlY3RpdmUgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS90b29sdGlwXCI7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10aW1lcGlja2VyXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGltZXBpY2tlci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdGltZXBpY2tlci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGN1cnJUaW1lITogc3RyaW5nO1xuICBjaG9zZW5UaW1lOiBzdHJpbmc7XG4gIG9wZW5TdGF0dXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNIaWdobGlnaHRlZDogbnVtYmVyID0gMDtcbiAgaXNJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gIHRpbWVJbnRlcnZhbHM6IHN0cmluZ1tdID0gW107XG4gIHNob3VsZFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VySW5wdXRGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIGdpdmVuVGltZUZsYWc6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbG9ja0Zvcm1hdDogbnVtYmVyID0gMTI7XG4gIHRpbWVGb3JtYXQhOiBzdHJpbmc7XG4gIFxuICBASW5wdXQoKSB0aW1lem9uZTogc3RyaW5nID0gXCJBc2lhL0tvbGthdGFcIjtcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSBcIm1heC1jb250ZW50XCI7XG4gIEBJbnB1dCgpIGlucHV0V2lkdGg6IHN0cmluZyA9IFwiMTAwcHhcIjtcbiAgQElucHV0KCkgZHJvcGRvd25XaWR0aD86IHN0cmluZztcbiAgQElucHV0KCkgaW50ZXJ2YWw6IG51bWJlciA9IDE1O1xuICBASW5wdXQoKSBkYXRlQXNFcG9jaDogbnVtYmVyID0gbW9tZW50KCkudmFsdWVPZigpO1xuICBASW5wdXQoKSBmaXJzdEludGVydmFsITogbnVtYmVyO1xuICBASW5wdXQoKSByYW5nZVZhbGlkaXR5OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1Rvb2x0aXA6IGJvb2xlYW4gPSB0cnVlO1xuICBkaXNwYXlUb29sVGlwOiBib29sZWFuID0gdGhpcy5zaG93VG9vbHRpcDtcbiAgQElucHV0KCkgZ2l2ZW5UaW1lOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1pblRpbWU/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHRyaWdnZXJDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSB0aW1lRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SVRpbWU+KCk7XG4gIEBWaWV3Q2hpbGQoXCJpbnB1dFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChUaW1lcGlja2VyRGlyZWN0aXZlKSB0aW1lcGlja2VyRGlyZWN0aXZlOiBUaW1lcGlja2VyRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKFRvb2xUaXBEaXJlY3RpdmUpIHRvb2x0aXBEaXJlY3RpdmU6IFRvb2xUaXBEaXJlY3RpdmU7XG5cbiAgLy8gZ2V0cyBhbGwgdGhlIGxpIGVsZW1lbnRzIGZyb20gdGhlIGRyb3Bkb3duIGFuZCBzY3JvbGxzIHRvIHRoZSBoaWdobGlnaHRlZCBlbGVtZW50XG4gIEBWaWV3Q2hpbGRyZW4oXCJ0aW1lSW50ZXJ2YWxcIikgc2V0IHRpbWVJbnRlcnZhbFJlZnMoaW50ZXJ2YWxzKSB7XG4gICAgaW50ZXJ2YWxzLmZvckVhY2goaW50ZXJ2YWwgPT4ge1xuICAgICAgaWYgKGludGVydmFsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0WzBdID09PSBcImhpZ2hsaWdodFwiKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodGVkID0gaW50ZXJ2YWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBoaWdobGlnaHRlZC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiBcImNlbnRlclwiIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCl7fVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZighdGhpcy5naXZlblRpbWUgJiYgIXRoaXMubWluVGltZSkge1xuICAgICAgdGhpcy5jaG9zZW5UaW1lID0gbW9tZW50KHRoaXMuZmlyc3RJbnRlcnZhbCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgICBsZXQgY2hvc2VuVGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRoaXMuY2hvc2VuVGltZSk7XG4gICAgICB0aGlzLmVtaXRUaW1lKHtcbiAgICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgICAgdGltZTogdGhpcy5jaG9zZW5UaW1lLFxuICAgICAgICBlcG9jaDogY2hvc2VuVGltZU1vbWVudC52YWx1ZU9mKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMudGltZUZvcm1hdCA9IHRoaXMuY2xvY2tGb3JtYXQgPT09IDEyID8gXCJoaDptbSBhXCIgOiBcIkhIOm1tXCI7XG4gICAgbW9tZW50LnR6LnNldERlZmF1bHQodGhpcy50aW1lem9uZSk7XG5cbiAgICBpZiAodGhpcy50aW1lRm9ybWF0KSB7XG4gICAgICBsZXQgY2hvc2VuVGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRoaXMuY2hvc2VuVGltZSk7XG4gICAgXG4gICAgICAvLyBpZiB0aGUgZmlyc3QgaW50ZXJ2YWwgaXMgPj0gdGhlIGNob3NlbiB0aW1lXG4gICAgICAvLyB0aGVuIG9ubHkgdXBkYXRlIHRoZSB2YWx1ZSBvZiBjaG9zZW4gdGltZVxuICAgICAgLy8gZWxzZSBpdCByZW1haW5zIHRoZSBzYW1lXG4gICAgICBpZiAodGhpcy5maXJzdEludGVydmFsID49IGNob3NlblRpbWVNb21lbnQudmFsdWVPZigpICYmIHRoaXMucmFuZ2VWYWxpZGl0eSAmJiAhdGhpcy51c2VySW5wdXRGbGFnKSB7XG4gICAgICAgIHRoaXMuY2hvc2VuVGltZSA9IG1vbWVudCh0aGlzLmZpcnN0SW50ZXJ2YWwpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgICBjaG9zZW5UaW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGhpcy5jaG9zZW5UaW1lKVxuICAgICAgfVxuXG4gICAgICBpZigodGhpcy5naXZlblRpbWVGbGFnICYmIHRoaXMuZ2l2ZW5UaW1lKSB8fCB0aGlzLm1pblRpbWUgKSB7XG4gICAgICAgIHRoaXMuY2hvc2VuVGltZSA9IG1vbWVudCh0aGlzLm1pblRpbWUgfHwgdGhpcy5naXZlblRpbWUpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgfVxuICAgICAgY2hvc2VuVGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRoaXMuY2hvc2VuVGltZSlcblxuICAgICAgaWYgKCF0aGlzLnVzZXJJbnB1dEZsYWcpIHRoaXMucG9wdWxhdGVEcm9wZG93bigpO1xuICAgICAgdGhpcy51c2VySW5wdXRGbGFnID0gZmFsc2U7XG4gICAgICBcbiAgICAgIGlmKHRoaXMuY2hvc2VuVGltZSkge1xuICAgICAgICB0aGlzLmlzSW52YWxpZCA9ICF0aGlzLmNoZWNrVGltZVZhbGlkaXR5KHRoaXMuY2hvc2VuVGltZS50cmltKCkpO1xuICAgICAgICB0aGlzLmVtaXRUaW1lKHtcbiAgICAgICAgICB2YWxpZDogIXRoaXMuaXNJbnZhbGlkLFxuICAgICAgICAgIHRpbWU6IHRoaXMuY2hvc2VuVGltZSxcbiAgICAgICAgICBlcG9jaDogY2hvc2VuVGltZU1vbWVudC52YWx1ZU9mKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRoaXMuY2hvc2VuVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW1pdFRpbWUoZGF0YTogSVRpbWUpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVFbWl0dGVyLmVtaXQoZGF0YSk7XG4gIH1cblxuICAvLyBmdW5jdGlvbiB0byBnZXQgbW9tZW50IG9iamVjdCB3aGVuIHRpbWUgaXMgZ2l2ZW4gaW4gc3RyaW5nXG4gIGdldE1vbWVudCh0aW1lOiBzdHJpbmcpe1xuICAgIHJldHVybiBtb21lbnQoYCR7bW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIil9ICR7dGltZX1gLCBgJ0RELU1NLVlZWVknICR7dGhpcy50aW1lRm9ybWF0fWApXG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCkge1xuICAgIHRoaXMuZGlzcGF5VG9vbFRpcCA9IGZhbHNlO1xuICAgIHRoaXMudXNlcklucHV0RmxhZyA9IGZhbHNlO1xuICAgIHRoaXMub3BlblN0YXR1cyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUpIHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZS5kZXN0cm95T3ZlcmxheSgpO1xuICB9XG5cbiAgLy8gdG9nZ2xlIHRpbWVwaWNrZXIgZHJvcGRvd25cbiAgb3BlbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF5VG9vbFRpcCA9IHRydWU7XG4gICAgdGhpcy5vcGVuU3RhdHVzID0gdHJ1ZTtcbiAgfVxuXG4gIGNoZWNrVGltZVZhbGlkaXR5KHRpbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFJFMTIgPSAvXigoWzBdWzEtOV18MVswLTJdKTooWzAtNV1bMC05XSkoICk/KGFtfHBtfEFNfFBNKSkkL2k7XG4gICAgY29uc3QgUkUyNCA9IC9eKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kLztcbiAgICBjb25zdCBSRSA9IHRoaXMuY2xvY2tGb3JtYXQgPT09IDEyID8gUkUxMiA6IFJFMjQ7XG5cbiAgICBjb25zdCB0aW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGltZSk7XG4gICAgbGV0IGZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBpbnRlcnZhbCBpcyBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBkYXlcbiAgICAvLyBvciBhIHRpbWUgaXMgYWxyZWFkeSBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IHRvIHNob3dcbiAgICAvLyB0aGVuIHdlIGRvbid0IGNoZWNrIGl0cyB2YWxpZGl0eSBhZ2FpbnN0IHRoZSBjdXJyZW50IHRpbWVcbiAgICBpZiAoXG4gICAgICB0aGlzLm1pblRpbWUgfHwgXG4gICAgICB0aGlzLmdpdmVuVGltZSB8fFxuICAgICAgKHRoaXMuZmlyc3RJbnRlcnZhbCAmJlxuICAgICAgbW9tZW50KHRoaXMuZmlyc3RJbnRlcnZhbCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkudmFsdWVPZigpID09PSBtb21lbnQoKS5zdGFydE9mKFwiZFwiKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KS52YWx1ZU9mKCkpXG4gICAgKSB7XG4gICAgICBmbGFnID0gdGltZS5tYXRjaChSRSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYWcgPSB0aW1lLm1hdGNoKFJFKSAmJiB0aW1lTW9tZW50LmRpZmYobW9tZW50KCksIFwibVwiKSA+PSAwID8gdHJ1ZTogZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYWc7XG4gIH1cblxuICAvLyB1cGRhdGUgY2hvc2VuIHRpbWUgYXMgc29vbiBhcyB0aGUgdXNlciBjbGlja3Mgb24gYW4gaW50ZXJ2YWxcbiAgb25UaW1lU2VsZWN0KHRpbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNJbnZhbGlkID0gIXRoaXMuY2hlY2tUaW1lVmFsaWRpdHkodGltZS50cmltKCkpO1xuICAgIGlmICghdGhpcy5pc0ludmFsaWQpIHtcbiAgICAgIHRoaXMuY2hvc2VuVGltZSA9IHRpbWU7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aGlzLmNob3NlblRpbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aW1lKTtcbiAgICB0aGlzLmVtaXRUaW1lKHtcbiAgICAgIHZhbGlkOiAhdGhpcy5pc0ludmFsaWQsXG4gICAgICB0aW1lOiB0aW1lLFxuICAgICAgZXBvY2g6IHRpbWVNb21lbnQudmFsdWVPZigpIFxuICAgIH0pO1xuICAgIHRoaXMub3BlblN0YXR1cyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUpIHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZS5kZXN0cm95T3ZlcmxheSgpO1xuICB9XG5cbiAgLy8gY2hlY2tzIHZhbGlkaXR5IG9mIHRpbWUgb24gaW5wdXQgY2hhbmdlIGFuZCBjYWxjdWxhdGVzIHRoZSBjbG9zZXN0IGludGVydmFsXG4gIG9uVGltZUNoYW5nZSh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW52YWxpZCA9ICF0aGlzLmNoZWNrVGltZVZhbGlkaXR5KHRpbWUudHJpbSgpKTtcblxuICAgIGlmICghdGhpcy5pc0ludmFsaWQpIHtcbiAgICAgIHRoaXMudXNlcklucHV0RmxhZyA9IHRydWU7XG4gICAgICB0aGlzLm9wZW5TdGF0dXMgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUpIHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZS5kZXN0cm95T3ZlcmxheSgpO1xuICAgICAgdGhpcy5jYWxjdWxhdGVDbG9zZXN0SW50ZXJ2YWwodGltZSk7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aW1lKTtcbiAgICB0aGlzLmVtaXRUaW1lKHtcbiAgICAgIHZhbGlkOiAhdGhpcy5pc0ludmFsaWQsXG4gICAgICB0aW1lOiB0aW1lLFxuICAgICAgZXBvY2g6IHRpbWVNb21lbnQudmFsdWVPZigpIFxuICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRpbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCByb3VuZGVkRXBvY2g6IG51bWJlcjtcbiAgICAvLyBDb252ZXJ0aW5nIHRpbWUgYW5kIGRhdGUgdG8gYSBtb21lbnQgb2JqZWN0IFxuICAgIGNvbnN0IGNob3NlbkRhdGUgPSBtb21lbnQodGhpcy5kYXRlQXNFcG9jaCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKTsgLy8gMDUtMDEtMjAyNFxuICAgIGNvbnN0IHBhcnNlZFRpbWVXaXRoRGF0ZSA9IG1vbWVudChgJHtjaG9zZW5EYXRlfSAke3RpbWV9YCwgYERELU1NLVlZWVkgJHt0aGlzLnRpbWVGb3JtYXR9YCk7XG4gICAgLy8gQ29udmVydGluZyBtb21lbnQgb2JqZWN0IHRvIGVwb2NoXG4gICAgY29uc3QgY2hvc2VuVGltZUVwb2NoID0gcGFyc2VkVGltZVdpdGhEYXRlLnZhbHVlT2YoKTtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmludGVydmFsIC0gKG1vbWVudChjaG9zZW5UaW1lRXBvY2gpLm1pbnV0ZXMoKSAlIHRoaXMuaW50ZXJ2YWwpO1xuXG4gICAgaWYgKHRoaXMubWluVGltZSAmJiAhdGhpcy5naXZlblRpbWUpIHtcbiAgICAgIHRoaXMuaXNIaWdobGlnaHRlZCA9IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJvdW5kZWRFcG9jaCA9IG9mZnNldCA+PSB0aGlzLmludGVydmFsIC8gMiA/IChtb21lbnQoY2hvc2VuVGltZUVwb2NoKS5zdWJ0cmFjdCh0aGlzLmludGVydmFsIC0gb2Zmc2V0LCBcIm1cIikpLnZhbHVlT2YoKSA6IChtb21lbnQoY2hvc2VuVGltZUVwb2NoKS5hZGQoIG9mZnNldCwgXCJtXCIpKS52YWx1ZU9mKCk7XG5cbiAgICAvLyBmaW5kaW5nIHRoZSBpbmRleCBvZiBlbGVtZW50IHRoYXQgbmVlZHMgdG8gYmUgaGlnaGxpZ2h0ZWRcbiAgICBpZiAoIGNob3NlblRpbWVFcG9jaCA+IG1vbWVudCh0aGlzLmRhdGVBc0Vwb2NoKS5lbmRPZihcImRcIikuc3VidHJhY3QodGhpcy5pbnRlcnZhbCwgXCJtXCIpLnZhbHVlT2YoKSkge1xuICAgICAgdGhpcy5pc0hpZ2hsaWdodGVkID0gdGhpcy50aW1lSW50ZXJ2YWxzLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvdW5kZWRFcG9jaE1vbWVudCA9IG1vbWVudChyb3VuZGVkRXBvY2gpO1xuICAgICAgdGhpcy5pc0hpZ2hsaWdodGVkID0gdGhpcy50aW1lSW50ZXJ2YWxzLmZpbmRJbmRleChpbnRlcnZhbCA9PiB7XG4gICAgICAgIGNvbnN0IGludGVydmFsT2JqID0gbW9tZW50KGAke2Nob3NlbkRhdGV9ICR7aW50ZXJ2YWx9YCwgYERELU1NLVlZWVkgJHt0aGlzLnRpbWVGb3JtYXR9YCk7XG4gICAgICAgIHJldHVybiBpbnRlcnZhbE9iai5pc1NhbWUocm91bmRlZEVwb2NoTW9tZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gcG9wdWxhdGVzIHRoZSBkcm9wZG93biBhY2NvcmRpbmcgdG8gdGhlIGZpcnN0IGludGVydmFsIHJlY2VpdmVkXG4gIHBvcHVsYXRlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy50aW1lSW50ZXJ2YWxzID0gW107XG5cbiAgICAvLyBpZiBwaWNrZXIgaXMgdXNlZCBhcyBhbiBpbmRpdmlkdWFsIGNvbXBvbmVudFxuICAgIGlmICghdGhpcy5maXJzdEludGVydmFsKSB7XG4gICAgICAvLyBmaXJzdEludGVydmFsIGlzIGluaXRpYWxpc2VkIGFjY29yZGluZyB0byB0aGUgY3VycmVudCB0aW1lXG4gICAgICAvLyBpZiB0aGUgZGF0ZSBpcyBzYW1lIGFzIHRoZSBjdXJyZW50IGRhdGVcbiAgICAgIGlmIChtb21lbnQodGhpcy5kYXRlQXNFcG9jaCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSA9PT0gbW9tZW50KCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSAmJiAhdGhpcy5taW5UaW1lKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaW50ZXJ2YWwgLSAobW9tZW50KCkubWludXRlcygpICUgdGhpcy5pbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuZmlyc3RJbnRlcnZhbCA9IG1vbWVudCgpLmFkZChvZmZzZXQsIFwibVwiKS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgICAvLyBpZiBtaW5pbXVtIHRpbWUgdG8gc2hvdyBpcyBwcm92aWRlZFxuICAgICAgZWxzZSBpZih0aGlzLm1pblRpbWUpe1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmludGVydmFsIC0gKG1vbWVudCh0aGlzLm1pblRpbWUpLm1pbnV0ZXMoKSAlIHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBtb21lbnQodGhpcy5taW5UaW1lKS5hZGQob2Zmc2V0LCBcIm1cIikudmFsdWVPZigpO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSB0aGUgZmlyc3RJbnRlcnZhbCBpcyBpbml0aWFsaXNlZCBhcyBzdGFydCBvZiBkYXlcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBtb21lbnQoKS5zdGFydE9mKFwiZFwiKS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYodGhpcy5naXZlblRpbWUgJiYgdGhpcy5naXZlblRpbWVGbGFnKXtcbiAgICAgIHRoaXMuZmlyc3RJbnRlcnZhbCA9IG1vbWVudCh0aGlzLmdpdmVuVGltZSkuc3RhcnRPZignZCcpLnZhbHVlT2YoKTtcbiAgICAgIHRoaXMuZ2l2ZW5UaW1lRmxhZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVBc1N0cmluZyA9IG1vbWVudCh0aGlzLmRhdGVBc0Vwb2NoKS5mb3JtYXQoJ0RELU1NLVlZWVknKTtcbiAgICBjb25zdCBpbnRlcnZhbEFzU3RyaW5nID0gbW9tZW50KHRoaXMuZmlyc3RJbnRlcnZhbCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgY29uc3Qgc3RhcnQgPSBtb21lbnQoYCR7ZGF0ZUFzU3RyaW5nfSAke2ludGVydmFsQXNTdHJpbmd9YCwgYERELU1NLVlZWVkgJHt0aGlzLnRpbWVGb3JtYXR9YCk7XG4gICAgY29uc3QgZW5kID0gbW9tZW50KGAke2RhdGVBc1N0cmluZ31gLCAnREQtTU0tWVlZWScpLmVuZE9mKCdkJyk7XG5cbiAgICBcbiAgICB3aGlsZSAoc3RhcnQudmFsdWVPZigpIDwgZW5kLnZhbHVlT2YoKSkge1xuICAgICAgdGhpcy50aW1lSW50ZXJ2YWxzLnB1c2goc3RhcnQuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkpO1xuICAgICAgc3RhcnQuYWRkKHRoaXMuaW50ZXJ2YWwsIFwibVwiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgc3RhcnQgdGltZSBpcyBlcXVhbCB0byB0aGUgaW50ZXJ2YWwganVzdCBiZWZvcmUgbWlkbmlnaHRcbiAgICAvLyBhbmQgdGhlIHN0YXJ0IGRhdGUgPSBlbmQgZGF0ZVxuICAgIC8vIHB1c2ggMTE6NTlwbSBvbmx5XG4gICAgaWYgKHRoaXMudGltZUludGVydmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hvc2VuVGltZSA9IG1vbWVudCgpLmVuZE9mKFwiZFwiKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIHRoaXMudGltZUludGVydmFscy5wdXNoKG1vbWVudCgpLmVuZE9mKFwiZFwiKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMudG9vbHRpcERpcmVjdGl2ZSkgdGhpcy50b29sdGlwRGlyZWN0aXZlLmhpZGVUb29sVGlwKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0aW1lcGlja2VyLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgfVwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZSc6IGRpc2FibGV9XCI+XG4gIDxpbnB1dFxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBbKG5nTW9kZWwpXT1cImNob3NlblRpbWVcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVGltZUNoYW5nZShjaG9zZW5UaW1lKVwiXG4gICAgW25nQ2xhc3NdPVwieyBpbnZhbGlkOiBpc0ludmFsaWQgfHwgIXJhbmdlVmFsaWRpdHkgfVwiXG4gICAgW25nU3R5bGVdPVwieyB3aWR0aDogaW5wdXRXaWR0aCB9XCJcbiAgICAoY2xpY2spPVwib3BlbkRyb3Bkb3duKClcIlxuICAgIG1pc1Rvb2xUaXBcbiAgICBbc2hvd1Rvb2xUaXBdPVwic2hvd1Rvb2x0aXAgJiYgKGlzSW52YWxpZCB8fCAhcmFuZ2VWYWxpZGl0eSkgJiYgZGlzcGF5VG9vbFRpcFwiXG4gICAgW3RleHRdPVwiJ0ludmFsaWQgVGltZSdcIlxuICAgIFtwb3NpdGlvbl09XCIndG9wJ1wiXG4gICAgW3Nob3dPbkhvdmVyXT1cImZhbHNlXCJcbiAgICAjaW5wdXRcbiAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgY2xhc3M9XCJoN1wiXG4gIC8+XG5cbiAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkNvbnRhaW5lciBsaWJEcm9wZG93blNjcm9sbCBsaWJUaW1lcGlja2VyIFtvcmlnaW5FbF09XCJpbnB1dFwiIFtvcGVuU3RhdHVzXT1cIm9wZW5TdGF0dXNcIiAoc3RhdHVzRW1pdHRlcik9XCJjbG9zZURyb3Bkb3duKClcIj5cbiAgICA8ZGl2ICpuZ0lmPVwib3BlblN0YXR1c1wiIGNsYXNzPVwidGltZXBpY2tlci1kcm9wZG93blwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGRyb3Bkb3duV2lkdGggfHwgaW5wdXRXaWR0aCB9XCI+XG4gICAgICA8dWwgI2Ryb3Bkb3duPlxuICAgICAgICA8bGkgI3RpbWVJbnRlcnZhbCAoY2xpY2spPVwib25UaW1lU2VsZWN0KGludGVydmFsKVwiICpuZ0Zvcj1cImxldCBpbnRlcnZhbCBvZiB0aW1lSW50ZXJ2YWxzOyBpbmRleCBhcyBpXCIgW25nQ2xhc3NdPVwieyBoaWdobGlnaHQ6IGkgPT09IGlzSGlnaGxpZ2h0ZWQgfVwiPlxuICAgICAgICAgIHt7IGludGVydmFsIH19XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljLXVpLWNoZWNrLTI0IHNlbGVjdGVkLWljb25cIiAqbmdJZj1cImludGVydmFsID09PSBjaG9zZW5UaW1lXCI+PC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGltZXBpY2tlci90aW1lcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFckUsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8saUJBQWlCLE1BQU0sZ0NBQWdDLENBQUE7Ozs7Ozs7Ozs7Ozs7OztJQ2VwRCwwQkFBZ0Y7Ozs7SUFGbEYsaUNBQXFKO0lBQW5JLDZOQUFTLGdDQUFzQixLQUFDO0lBQ2hELFlBQ0E7SUFBQSw4RkFBMEU7SUFDNUUsaUJBQUs7Ozs7O0lBSGlHLG1GQUE4QztJQUNsSixlQUNBO0lBREEsNENBQ0E7SUFBMkMsY0FBNkI7SUFBN0Isd0RBQTZCOzs7SUFINUUsQUFERiw4QkFBdUcsa0JBQ3ZGO0lBQ1osc0ZBQXFKO0lBS3pKLEFBREUsaUJBQUssRUFDRDs7O0lBUDhDLCtGQUFrRDtJQUUxQixlQUFrQjtJQUFsQiw4Q0FBa0I7OztJQUY5RixrRkFBdUc7OztJQUFqRyx3Q0FBZ0I7O0FEVDFCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFD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QUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csV0FBVztrQkFBbkIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBQ0csV0FBVztrQkFBbkIsS0FBSztZQUVHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxPQUFPO2tCQUFmLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0ksV0FBVztrQkFBcEIsTUFBTTtZQUMrQixLQUFLO2tCQUExQyxTQUFTO21CQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDSixtQkFBbUI7a0JBQWxELFNBQVM7bUJBQUMsbUJBQW1CO1lBQ0QsZ0JBQWdCO2tCQUE1QyxTQUFTO21CQUFDLGdCQUFnQjtZQUdPLGdCQUFnQjtrQkFBakQsWUFBWTttQkFBQyxjQUFjOztrRkFqQ2pCLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJVGltZSB9IGZyb20gXCIuL3RpbWUubmFtZXNwYWNlXCI7XG5pbXBvcnQgeyBUaW1lcGlja2VyRGlyZWN0aXZlIH0gZnJvbSBcIi4vdGltZXBpY2tlci5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFRvb2xUaXBEaXJlY3RpdmUgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS90b29sdGlwXCI7XG5cbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuXG5kYXlqcy5leHRlbmQodXRjKTtcbmRheWpzLmV4dGVuZCh0aW1lem9uZSk7XG5kYXlqcy5leHRlbmQoY3VzdG9tUGFyc2VGb3JtYXQpO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdGltZXBpY2tlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3RpbWVwaWNrZXIuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBjdXJyVGltZSE6IHN0cmluZztcbiAgY2hvc2VuVGltZTogc3RyaW5nO1xuICBvcGVuU3RhdHVzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSGlnaGxpZ2h0ZWQ6IG51bWJlciA9IDA7XG4gIGlzSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0aW1lSW50ZXJ2YWxzOiBzdHJpbmdbXSA9IFtdO1xuICBzaG91bGRTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdXNlcklucHV0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBnaXZlblRpbWVGbGFnOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xvY2tGb3JtYXQ6IG51bWJlciA9IDEyO1xuICB0aW1lRm9ybWF0ITogc3RyaW5nO1xuICBcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZyA9IFwiQXNpYS9Lb2xrYXRhXCI7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJtYXgtY29udGVudFwiO1xuICBASW5wdXQoKSBpbnB1dFdpZHRoOiBzdHJpbmcgPSBcIjEwMHB4XCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duV2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGludGVydmFsOiBudW1iZXIgPSAxNTtcbiAgQElucHV0KCkgZGF0ZUFzRXBvY2g6IG51bWJlciA9IGRheWpzKCkudmFsdWVPZigpO1xuICBASW5wdXQoKSBmaXJzdEludGVydmFsITogbnVtYmVyO1xuICBASW5wdXQoKSByYW5nZVZhbGlkaXR5OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1Rvb2x0aXA6IGJvb2xlYW4gPSB0cnVlO1xuICBkaXNwYXlUb29sVGlwOiBib29sZWFuID0gdGhpcy5zaG93VG9vbHRpcDtcbiAgQElucHV0KCkgZ2l2ZW5UaW1lOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1pblRpbWU/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHRyaWdnZXJDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSB0aW1lRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SVRpbWU+KCk7XG4gIEBWaWV3Q2hpbGQoXCJpbnB1dFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChUaW1lcGlja2VyRGlyZWN0aXZlKSB0aW1lcGlja2VyRGlyZWN0aXZlOiBUaW1lcGlja2VyRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKFRvb2xUaXBEaXJlY3RpdmUpIHRvb2x0aXBEaXJlY3RpdmU6IFRvb2xUaXBEaXJlY3RpdmU7XG5cbiAgLy8gZ2V0cyBhbGwgdGhlIGxpIGVsZW1lbnRzIGZyb20gdGhlIGRyb3Bkb3duIGFuZCBzY3JvbGxzIHRvIHRoZSBoaWdobGlnaHRlZCBlbGVtZW50XG4gIEBWaWV3Q2hpbGRyZW4oXCJ0aW1lSW50ZXJ2YWxcIikgc2V0IHRpbWVJbnRlcnZhbFJlZnMoaW50ZXJ2YWxzKSB7XG4gICAgaW50ZXJ2YWxzLmZvckVhY2goaW50ZXJ2YWwgPT4ge1xuICAgICAgaWYgKGludGVydmFsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0WzBdID09PSBcImhpZ2hsaWdodFwiKSB7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodGVkID0gaW50ZXJ2YWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBoaWdobGlnaHRlZC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiBcImNlbnRlclwiIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCl7fVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZighdGhpcy5naXZlblRpbWUgJiYgIXRoaXMubWluVGltZSkge1xuICAgICAgdGhpcy5jaG9zZW5UaW1lID0gZGF5anModGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIGxldCBjaG9zZW5UaW1lZGF5anMgPSB0aGlzLmdldGRheWpzKHRoaXMuY2hvc2VuVGltZSk7XG4gICAgICB0aGlzLmVtaXRUaW1lKHtcbiAgICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgICAgdGltZTogdGhpcy5jaG9zZW5UaW1lLFxuICAgICAgICBlcG9jaDogY2hvc2VuVGltZWRheWpzLnZhbHVlT2YoKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lRm9ybWF0ID0gdGhpcy5jbG9ja0Zvcm1hdCA9PT0gMTIgPyBcImhoOm1tIGFcIiA6IFwiSEg6bW1cIjtcbiAgICBkYXlqcy50ei5zZXREZWZhdWx0KHRoaXMudGltZXpvbmUpO1xuXG4gICAgaWYgKHRoaXMudGltZUZvcm1hdCkge1xuICAgICAgbGV0IGNob3NlblRpbWVkYXlqcyA9IHRoaXMuZ2V0ZGF5anModGhpcy5jaG9zZW5UaW1lKTtcbiAgICBcbiAgICAgIC8vIGlmIHRoZSBmaXJzdCBpbnRlcnZhbCBpcyA+PSB0aGUgY2hvc2VuIHRpbWVcbiAgICAgIC8vIHRoZW4gb25seSB1cGRhdGUgdGhlIHZhbHVlIG9mIGNob3NlbiB0aW1lXG4gICAgICAvLyBlbHNlIGl0IHJlbWFpbnMgdGhlIHNhbWVcbiAgICAgIGlmICh0aGlzLmZpcnN0SW50ZXJ2YWwgPj0gY2hvc2VuVGltZWRheWpzLnZhbHVlT2YoKSAmJiB0aGlzLnJhbmdlVmFsaWRpdHkgJiYgIXRoaXMudXNlcklucHV0RmxhZykge1xuICAgICAgICB0aGlzLmNob3NlblRpbWUgPSBkYXlqcyh0aGlzLmZpcnN0SW50ZXJ2YWwpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgICBjaG9zZW5UaW1lZGF5anMgPSB0aGlzLmdldGRheWpzKHRoaXMuY2hvc2VuVGltZSlcbiAgICAgIH1cblxuICAgICAgaWYoKHRoaXMuZ2l2ZW5UaW1lRmxhZyAmJiB0aGlzLmdpdmVuVGltZSkgfHwgdGhpcy5taW5UaW1lICkge1xuICAgICAgICB0aGlzLmNob3NlblRpbWUgPSBkYXlqcyh0aGlzLm1pblRpbWUgfHwgdGhpcy5naXZlblRpbWUpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgfVxuICAgICAgY2hvc2VuVGltZWRheWpzID0gdGhpcy5nZXRkYXlqcyh0aGlzLmNob3NlblRpbWUpXG5cbiAgICAgIGlmICghdGhpcy51c2VySW5wdXRGbGFnKSB0aGlzLnBvcHVsYXRlRHJvcGRvd24oKTtcbiAgICAgIHRoaXMudXNlcklucHV0RmxhZyA9IGZhbHNlO1xuICAgICAgXG4gICAgICBpZih0aGlzLmNob3NlblRpbWUpIHtcbiAgICAgICAgdGhpcy5pc0ludmFsaWQgPSAhdGhpcy5jaGVja1RpbWVWYWxpZGl0eSh0aGlzLmNob3NlblRpbWUudHJpbSgpKTtcbiAgICAgICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgICAgICB0aW1lOiB0aGlzLmNob3NlblRpbWUsXG4gICAgICAgICAgZXBvY2g6IGNob3NlblRpbWVkYXlqcy52YWx1ZU9mKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRoaXMuY2hvc2VuVGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW1pdFRpbWUoZGF0YTogSVRpbWUpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVFbWl0dGVyLmVtaXQoZGF0YSk7XG4gIH1cblxuICAvLyBmdW5jdGlvbiB0byBnZXQgZGF5anMgb2JqZWN0IHdoZW4gdGltZSBpcyBnaXZlbiBpbiBzdHJpbmdcbiAgZ2V0ZGF5anModGltZTogc3RyaW5nID0gJzAwOjAwJyl7XG4gICAgcmV0dXJuIGRheWpzKCBgJHtkYXlqcyh0aGlzLmRhdGVBc0Vwb2NoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpfSAke3RpbWV9YCwgYERELU1NLVlZWVkgJHt0aGlzLnRpbWVGb3JtYXR9YClcbiAgfVxuXG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5kaXNwYXlUb29sVGlwID0gZmFsc2U7XG4gICAgdGhpcy51c2VySW5wdXRGbGFnID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuU3RhdHVzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZSkgdGhpcy50aW1lcGlja2VyRGlyZWN0aXZlLmRlc3Ryb3lPdmVybGF5KCk7XG4gIH1cblxuICAvLyB0b2dnbGUgdGltZXBpY2tlciBkcm9wZG93blxuICBvcGVuRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXlUb29sVGlwID0gdHJ1ZTtcbiAgICB0aGlzLm9wZW5TdGF0dXMgPSB0cnVlO1xuICB9XG5cbiAgY2hlY2tUaW1lVmFsaWRpdHkodGltZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgUkUxMiA9IC9eKChbMF1bMS05XXwxWzAtMl0pOihbMC01XVswLTldKSggKT8oYW18cG18QU18UE0pKSQvaTtcbiAgICBjb25zdCBSRTI0ID0gL14oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSQvO1xuICAgIGNvbnN0IFJFID0gdGhpcy5jbG9ja0Zvcm1hdCA9PT0gMTIgPyBSRTEyIDogUkUyNDtcblxuICAgIGNvbnN0IHRpbWVkYXlqcyA9IHRoaXMuZ2V0ZGF5anModGltZSk7XG4gICAgbGV0IGZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIGlmIHRoZSBmaXJzdCBpbnRlcnZhbCBpcyBzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBkYXlcbiAgICAvLyBvciBhIHRpbWUgaXMgYWxyZWFkeSBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IHRvIHNob3dcbiAgICAvLyB0aGVuIHdlIGRvbid0IGNoZWNrIGl0cyB2YWxpZGl0eSBhZ2FpbnN0IHRoZSBjdXJyZW50IHRpbWVcbiAgICBpZiAoXG4gICAgICB0aGlzLm1pblRpbWUgfHwgXG4gICAgICB0aGlzLmdpdmVuVGltZSB8fFxuICAgICAgKHRoaXMuZmlyc3RJbnRlcnZhbCAmJlxuICAgICAgZGF5anModGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KS52YWx1ZU9mKCkgPT09IGRheWpzKCkuc3RhcnRPZihcImRheVwiKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KS52YWx1ZU9mKCkpXG4gICAgKSB7XG4gICAgICBmbGFnID0gdGltZS5tYXRjaChSRSkgPyB0cnVlIDogZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYWcgPSB0aW1lLm1hdGNoKFJFKSAmJiB0aW1lZGF5anMuZGlmZihkYXlqcygpLCBcIm1cIikgPj0gMCA/IHRydWU6IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmbGFnO1xuICB9XG5cbiAgLy8gdXBkYXRlIGNob3NlbiB0aW1lIGFzIHNvb24gYXMgdGhlIHVzZXIgY2xpY2tzIG9uIGFuIGludGVydmFsXG4gIG9uVGltZVNlbGVjdCh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW52YWxpZCA9ICF0aGlzLmNoZWNrVGltZVZhbGlkaXR5KHRpbWUudHJpbSgpKTtcbiAgICBpZiAoIXRoaXMuaXNJbnZhbGlkKSB7XG4gICAgICB0aGlzLmNob3NlblRpbWUgPSB0aW1lO1xuICAgICAgdGhpcy5jYWxjdWxhdGVDbG9zZXN0SW50ZXJ2YWwodGhpcy5jaG9zZW5UaW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lZGF5anMgPSB0aGlzLmdldGRheWpzKHRpbWUpO1xuICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgIHRpbWU6IHRpbWUsXG4gICAgICBlcG9jaDogdGltZWRheWpzLnZhbHVlT2YoKSBcbiAgICB9KTtcbiAgICB0aGlzLm9wZW5TdGF0dXMgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aW1lcGlja2VyRGlyZWN0aXZlKSB0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUuZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIC8vIGNoZWNrcyB2YWxpZGl0eSBvZiB0aW1lIG9uIGlucHV0IGNoYW5nZSBhbmQgY2FsY3VsYXRlcyB0aGUgY2xvc2VzdCBpbnRlcnZhbFxuICBvblRpbWVDaGFuZ2UodGltZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pc0ludmFsaWQgPSAhdGhpcy5jaGVja1RpbWVWYWxpZGl0eSh0aW1lLnRyaW0oKSk7XG5cbiAgICBpZiAoIXRoaXMuaXNJbnZhbGlkKSB7XG4gICAgICB0aGlzLnVzZXJJbnB1dEZsYWcgPSB0cnVlO1xuICAgICAgdGhpcy5vcGVuU3RhdHVzID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy50aW1lcGlja2VyRGlyZWN0aXZlKSB0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUuZGVzdHJveU92ZXJsYXkoKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRpbWUpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lZGF5anMgPSB0aGlzLmdldGRheWpzKHRpbWUpO1xuICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgIHRpbWU6IHRpbWUsXG4gICAgICBlcG9jaDogdGltZWRheWpzLnZhbHVlT2YoKSBcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgcm91bmRlZEVwb2NoOiBudW1iZXI7XG4gICAgLy8gQ29udmVydGluZyB0aW1lIGFuZCBkYXRlIHRvIGEgZGF5anMgb2JqZWN0IFxuICAgIGNvbnN0IGNob3NlbkRhdGUgPSBkYXlqcyh0aGlzLmRhdGVBc0Vwb2NoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpOyAvLyAwNS0wMS0yMDI0XG4gICAgY29uc3QgcGFyc2VkVGltZVdpdGhEYXRlID0gZGF5anMoYCR7Y2hvc2VuRGF0ZX0gJHt0aW1lfWAsIGBERC1NTS1ZWVlZICR7dGhpcy50aW1lRm9ybWF0fWApO1xuICAgIC8vIENvbnZlcnRpbmcgZGF5anMgb2JqZWN0IHRvIGVwb2NoXG4gICAgY29uc3QgY2hvc2VuVGltZUVwb2NoID0gcGFyc2VkVGltZVdpdGhEYXRlLnZhbHVlT2YoKTtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmludGVydmFsIC0gKGRheWpzKGNob3NlblRpbWVFcG9jaCkubWludXRlKCkgJSB0aGlzLmludGVydmFsKTtcblxuICAgIGlmICh0aGlzLm1pblRpbWUgJiYgIXRoaXMuZ2l2ZW5UaW1lKSB7XG4gICAgICB0aGlzLmlzSGlnaGxpZ2h0ZWQgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByb3VuZGVkRXBvY2ggPSBvZmZzZXQgPj0gdGhpcy5pbnRlcnZhbCAvIDIgPyAoZGF5anMoY2hvc2VuVGltZUVwb2NoKS5zdWJ0cmFjdCh0aGlzLmludGVydmFsIC0gb2Zmc2V0LCBcIm1cIikpLnZhbHVlT2YoKSA6IChkYXlqcyhjaG9zZW5UaW1lRXBvY2gpLmFkZCggb2Zmc2V0LCBcIm1cIikpLnZhbHVlT2YoKTtcblxuICAgIC8vIGZpbmRpbmcgdGhlIGluZGV4IG9mIGVsZW1lbnQgdGhhdCBuZWVkcyB0byBiZSBoaWdobGlnaHRlZFxuICAgIGlmICggY2hvc2VuVGltZUVwb2NoID4gZGF5anModGhpcy5kYXRlQXNFcG9jaCkuZW5kT2YoXCJkYXlcIikuc3VidHJhY3QodGhpcy5pbnRlcnZhbCwgXCJtXCIpLnZhbHVlT2YoKSkge1xuICAgICAgdGhpcy5pc0hpZ2hsaWdodGVkID0gdGhpcy50aW1lSW50ZXJ2YWxzLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvdW5kZWRFcG9jaGRheWpzID0gZGF5anMocm91bmRlZEVwb2NoKTtcbiAgICAgIHRoaXMuaXNIaWdobGlnaHRlZCA9IHRoaXMudGltZUludGVydmFscy5maW5kSW5kZXgoaW50ZXJ2YWwgPT4ge1xuICAgICAgICBjb25zdCBpbnRlcnZhbE9iaiA9IGRheWpzKGAke2Nob3NlbkRhdGV9ICR7aW50ZXJ2YWx9YCwgYERELU1NLVlZWVkgJHt0aGlzLnRpbWVGb3JtYXR9YCk7XG4gICAgICAgIHJldHVybiBpbnRlcnZhbE9iai5pc1NhbWUocm91bmRlZEVwb2NoZGF5anMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICAvLyBwb3B1bGF0ZXMgdGhlIGRyb3Bkb3duIGFjY29yZGluZyB0byB0aGUgZmlyc3QgaW50ZXJ2YWwgcmVjZWl2ZWRcbiAgcG9wdWxhdGVEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVJbnRlcnZhbHMgPSBbXTtcblxuICAgIC8vIGlmIHBpY2tlciBpcyB1c2VkIGFzIGFuIGluZGl2aWR1YWwgY29tcG9uZW50XG4gICAgaWYgKCF0aGlzLmZpcnN0SW50ZXJ2YWwpIHtcbiAgICAgIC8vIGZpcnN0SW50ZXJ2YWwgaXMgaW5pdGlhbGlzZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgIC8vIGlmIHRoZSBkYXRlIGlzIHNhbWUgYXMgdGhlIGN1cnJlbnQgZGF0ZVxuICAgICAgaWYgKGRheWpzKHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIikgPT09IGRheWpzKCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKSAmJiAhdGhpcy5taW5UaW1lKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaW50ZXJ2YWwgLSAoZGF5anMoKS5taW51dGUoKSAlIHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBkYXlqcygpLmFkZChvZmZzZXQsIFwibVwiKS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgICAvLyBpZiBtaW5pbXVtIHRpbWUgdG8gc2hvdyBpcyBwcm92aWRlZFxuICAgICAgZWxzZSBpZih0aGlzLm1pblRpbWUpe1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmludGVydmFsIC0gKGRheWpzKHRoaXMubWluVGltZSkubWludXRlKCkgJSB0aGlzLmludGVydmFsKTtcbiAgICAgICAgdGhpcy5maXJzdEludGVydmFsID0gZGF5anModGhpcy5taW5UaW1lKS5hZGQob2Zmc2V0LCBcIm1cIikudmFsdWVPZigpO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSB0aGUgZmlyc3RJbnRlcnZhbCBpcyBpbml0aWFsaXNlZCBhcyBzdGFydCBvZiBkYXlcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBkYXlqcygpLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHRoaXMuZ2l2ZW5UaW1lICYmIHRoaXMuZ2l2ZW5UaW1lRmxhZyl7XG4gICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBkYXlqcyh0aGlzLmdpdmVuVGltZSkuc3RhcnRPZignZCcpLnZhbHVlT2YoKTtcbiAgICAgIHRoaXMuZ2l2ZW5UaW1lRmxhZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVBc1N0cmluZyA9IGRheWpzKHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xuICAgIGNvbnN0IGludGVydmFsQXNTdHJpbmcgPSBkYXlqcyh0aGlzLmZpcnN0SW50ZXJ2YWwpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgIGxldCBzdGFydCA9IGRheWpzKGAke2RhdGVBc1N0cmluZ30gJHtpbnRlcnZhbEFzU3RyaW5nfWAsIGBERC1NTS1ZWVlZICR7dGhpcy50aW1lRm9ybWF0fWApO1xuICAgIGNvbnN0IGVuZCA9IGRheWpzKHRoaXMuZGF0ZUFzRXBvY2gpLmVuZE9mKCdkJyk7XG4gICAgd2hpbGUgKHN0YXJ0LnZhbHVlT2YoKSA8IGVuZC52YWx1ZU9mKCkpIHtcbiAgICAgIHRoaXMudGltZUludGVydmFscy5wdXNoKHN0YXJ0LmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpKTtcbiAgICAgIHN0YXJ0ID0gc3RhcnQuYWRkKHRoaXMuaW50ZXJ2YWwsIFwibVwiKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgc3RhcnQgdGltZSBpcyBlcXVhbCB0byB0aGUgaW50ZXJ2YWwganVzdCBiZWZvcmUgbWlkbmlnaHRcbiAgICAvLyBhbmQgdGhlIHN0YXJ0IGRhdGUgPSBlbmQgZGF0ZVxuICAgIC8vIHB1c2ggMTE6NTlwbSBvbmx5XG4gICAgaWYgKHRoaXMudGltZUludGVydmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hvc2VuVGltZSA9IGRheWpzKCkuZW5kT2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgdGhpcy50aW1lSW50ZXJ2YWxzLnB1c2goZGF5anMoKS5lbmRPZihcImRcIikuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRvb2x0aXBEaXJlY3RpdmUpIHRoaXMudG9vbHRpcERpcmVjdGl2ZS5oaWRlVG9vbFRpcCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGltZXBpY2tlci1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGhlaWdodDogaGVpZ2h0IH1cIiBbbmdDbGFzc109XCJ7J2Rpc2FibGUnOiBkaXNhYmxlfVwiPlxuICA8aW5wdXRcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgWyhuZ01vZGVsKV09XCJjaG9zZW5UaW1lXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJvblRpbWVDaGFuZ2UoY2hvc2VuVGltZSlcIlxuICAgIFtuZ0NsYXNzXT1cInsgaW52YWxpZDogaXNJbnZhbGlkIHx8ICFyYW5nZVZhbGlkaXR5IH1cIlxuICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGlucHV0V2lkdGggfVwiXG4gICAgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigpXCJcbiAgICBtaXNUb29sVGlwXG4gICAgW3Nob3dUb29sVGlwXT1cInNob3dUb29sdGlwICYmIChpc0ludmFsaWQgfHwgIXJhbmdlVmFsaWRpdHkpICYmIGRpc3BheVRvb2xUaXBcIlxuICAgIFt0ZXh0XT1cIidJbnZhbGlkIFRpbWUnXCJcbiAgICBbcG9zaXRpb25dPVwiJ3RvcCdcIlxuICAgIFtzaG93T25Ib3Zlcl09XCJmYWxzZVwiXG4gICAgI2lucHV0XG4gICAgY2RrT3ZlcmxheU9yaWdpblxuICAgIGNsYXNzPVwiaDdcIlxuICAvPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25Db250YWluZXIgbGliRHJvcGRvd25TY3JvbGwgbGliVGltZXBpY2tlciBbb3JpZ2luRWxdPVwiaW5wdXRcIiBbb3BlblN0YXR1c109XCJvcGVuU3RhdHVzXCIgKHN0YXR1c0VtaXR0ZXIpPVwiY2xvc2VEcm9wZG93bigpXCI+XG4gICAgPGRpdiAqbmdJZj1cIm9wZW5TdGF0dXNcIiBjbGFzcz1cInRpbWVwaWNrZXItZHJvcGRvd25cIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiBkcm9wZG93bldpZHRoIHx8IGlucHV0V2lkdGggfVwiPlxuICAgICAgPHVsICNkcm9wZG93bj5cbiAgICAgICAgPGxpICN0aW1lSW50ZXJ2YWwgKGNsaWNrKT1cIm9uVGltZVNlbGVjdChpbnRlcnZhbClcIiAqbmdGb3I9XCJsZXQgaW50ZXJ2YWwgb2YgdGltZUludGVydmFsczsgaW5kZXggYXMgaVwiIFtuZ0NsYXNzXT1cInsgaGlnaGxpZ2h0OiBpID09PSBpc0hpZ2hsaWdodGVkIH1cIj5cbiAgICAgICAgICB7eyBpbnRlcnZhbCB9fVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpYy11aS1jaGVjay0yNCBzZWxlY3RlZC1pY29uXCIgKm5nSWY9XCJpbnRlcnZhbCA9PT0gY2hvc2VuVGltZVwiPjwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIl19
|