@dereekb/dbx-form 10.1.24 → 10.1.26
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/esm2022/lib/formly/field/value/date/fixeddaterange.field.component.mjs +35 -4
- package/fesm2022/dereekb-dbx-form.mjs +34 -3
- package/fesm2022/dereekb-dbx-form.mjs.map +1 -1
- package/lib/formly/field/value/date/fixeddaterange.field.component.d.ts +1 -1
- package/mapbox/package.json +1 -1
- package/package.json +1 -1
|
@@ -82,6 +82,13 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
82
82
|
boundary: range,
|
|
83
83
|
range
|
|
84
84
|
};
|
|
85
|
+
// for normal mode we want to protect against "start" being input, then the output being passed,
|
|
86
|
+
// and then the next click being treated as another "start" instead of an "end".
|
|
87
|
+
if (mode === 'normal' && acc.lastPickType === 'start' && isSameDateDay(startOrNextDate, end)) {
|
|
88
|
+
if (isSameDateDay(startOrNextDate, acc.lastDateRange?.start)) {
|
|
89
|
+
pickType = 'startRepeat';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
85
92
|
}
|
|
86
93
|
else {
|
|
87
94
|
let range = undefined;
|
|
@@ -92,6 +99,9 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
92
99
|
boundary = undefined;
|
|
93
100
|
pickType = acc.lastPickType === 'start' ? 'end' : 'start';
|
|
94
101
|
}
|
|
102
|
+
else if (acc.lastPickType === 'startRepeat') {
|
|
103
|
+
pickType = 'end';
|
|
104
|
+
}
|
|
95
105
|
else {
|
|
96
106
|
// if the pick is outside the boundary, then consider it a start pick type.
|
|
97
107
|
pickType = acc.lastPickType === 'start' && acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary) ? 'end' : 'start';
|
|
@@ -100,15 +110,36 @@ export class DbxFixedDateRangeFieldComponent extends FieldType {
|
|
|
100
110
|
switch (pickType) {
|
|
101
111
|
case 'end':
|
|
102
112
|
const lastStart = acc.lastDateRange?.start;
|
|
113
|
+
let boundaryToCheck;
|
|
103
114
|
const selectionIsBeforePreviousSelection = !lastStart || isBefore(startOrNextDate, lastStart);
|
|
104
|
-
|
|
105
|
-
|
|
115
|
+
let nextStart;
|
|
116
|
+
let nextEnd;
|
|
117
|
+
if (selectionIsBeforePreviousSelection) {
|
|
118
|
+
nextStart = startOrNextDate;
|
|
119
|
+
nextEnd = lastStart;
|
|
120
|
+
boundaryToCheck = potentialBoundary;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
nextStart = lastStart;
|
|
124
|
+
nextEnd = startOrNextDate;
|
|
125
|
+
boundaryToCheck = dateRange({ ...dateRangeInput, date: nextStart });
|
|
126
|
+
}
|
|
127
|
+
// Recalculate the boundary using the next start date. If it is outside the selectable range, then it becomes a "start" pick type.
|
|
128
|
+
if (isBefore(boundaryToCheck.end, nextEnd)) {
|
|
129
|
+
// TODO: Allow changing the behavior to fill the entire range instead of just resetting it entirely
|
|
130
|
+
nextStart = startOrNextDate;
|
|
131
|
+
nextEnd = startOrNextDate;
|
|
132
|
+
pickType = 'start';
|
|
133
|
+
boundary = boundaryToCheck;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
boundary = range;
|
|
137
|
+
}
|
|
106
138
|
// if we're picking the end then set the range.
|
|
107
139
|
range = {
|
|
108
140
|
start: nextStart,
|
|
109
141
|
end: nextEnd
|
|
110
142
|
};
|
|
111
|
-
boundary = range;
|
|
112
143
|
break;
|
|
113
144
|
case 'start':
|
|
114
145
|
// retain the boundary as potential boundary, and set our new range from the single date.
|
|
@@ -500,4 +531,4 @@ export class DbxFixedDateRangeFieldSelectionStrategy {
|
|
|
500
531
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxFixedDateRangeFieldSelectionStrategy, decorators: [{
|
|
501
532
|
type: Injectable
|
|
502
533
|
}], ctorParameters: function () { return [{ type: i7.DateAdapter }, { type: DbxFixedDateRangeFieldComponent }]; } });
|
|
503
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9maXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBK0gsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9MLE9BQU8sRUFBRSxvQkFBb0IsRUFBaUMscUJBQXFCLEVBQTZCLGtCQUFrQixFQUF3RCxTQUFTLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4VyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4TixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQXFCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNC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QUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVU7UUFDNUIsTUFBTSxHQUFHLEdBQWUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFjLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksR0FBZSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdELENBQUM7K0dBdkRVLHVDQUF1QzttSEFBdkMsdUNBQXVDOzs0RkFBdkMsdUNBQXVDO2tCQURuRCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBNYXliZSwgdHlwZSBEZWNpc2lvbkZ1bmN0aW9uLCB0eXBlIE1pbGxpc2Vjb25kcywgdHlwZSBUaW1lem9uZVN0cmluZywgdHlwZSBEYXRlTW9udGgsIHR5cGUgRGF5T2ZNb250aCwgdHlwZSBZZWFyTnVtYmVyLCBpc01vbnRoRGF5U2xhc2hEYXRlLCBNU19JTl9NSU5VVEUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IGd1ZXNzQ3VycmVudFRpbWV6b25lLCBEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZSwgZGF0ZVRpbWV6b25lVXRjTm9ybWFsLCBEYXRlUmFuZ2VJbnB1dCwgRGF0ZVJhbmdlLCBpc1NhbWVEYXRlRGF5UmFuZ2UsIERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZSwgRGF0ZVRpbWVNaW51dGVDb25maWcsIGRhdGVSYW5nZSwgaXNEYXRlSW5EYXRlUmFuZ2UsIGNsYW1wRGF0ZVJhbmdlVG9EYXRlUmFuZ2UsIGlzU2FtZURhdGVSYW5nZSwgaXNTYW1lRGF0ZURheSwgbGltaXREYXRlVGltZUluc3RhbmNlLCBkYXRlVGltZU1pbnV0ZVdob2xlRGF5RGVjaXNpb25GdW5jdGlvbiB9IGZyb20gJ0BkZXJlZWtiL2RhdGUnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCBzaGFyZVJlcGxheSwgbWFwLCBzdGFydFdpdGgsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBkZWJvdW5jZVRpbWUsIHRocm90dGxlVGltZSwgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBvZiwgY29tYmluZUxhdGVzdFdpdGgsIGZpbHRlciwgY29tYmluZUxhdGVzdCwgc2NhbiwgZmlyc3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L21hdGVyaWFsJztcbmltcG9ydCB7IEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRQcm9wcyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgTWF0RGF0ZVJhbmdlU2VsZWN0aW9uU3RyYXRlZ3ksIE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSwgRGF0ZVJhbmdlIGFzIERhdGVQaWNrZXJEYXRlUmFuZ2UsIE1hdENhbGVuZGFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBhc09ic2VydmFibGVGcm9tR2V0dGVyLCBmaWx0ZXJNYXliZSwgT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXIsIHNraXBGaXJzdE1heWJlLCBTdWJzY3JpcHRpb25PYmplY3QsIHN3aXRjaE1hcE1heWJlRGVmYXVsdCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIGRieERhdGVSYW5nZUlzU2FtZURhdGVSYW5nZUZpZWxkVmFsdWUsIGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeSwgZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkgfSBmcm9tICcuL2RhdGUudmFsdWUnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQcmVzZXRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9kYXRldGltZSc7XG5pbXBvcnQgeyBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRldGltZS5maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBpc0JlZm9yZSB9IGZyb20gJ2RhdGUtZm5zJztcblxuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dCA9IE9taXQ8RGF0ZVJhbmdlSW5wdXQsICdkYXRlJz47XG5cbmV4cG9ydCB0eXBlIERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbiA9IE9taXQ8RGF0ZVRpbWVNaW51dGVDb25maWcsICdkYXRlJz47XG5cbmV4cG9ydCB0eXBlIERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnIHwgJ25vcm1hbCcgfCAnYXJiaXRyYXJ5JyB8ICdhcmJpdHJhcnlfcXVpY2snO1xuZXhwb3J0IHR5cGUgRGJ4Rml4ZWREYXRlUmFuZ2VQaWNraW5nID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcyBleHRlbmRzIEZvcm1seUZpZWxkUHJvcHMge1xuICAvKipcbiAgICogRGF0ZSByYW5nZSBpbnB1dCB0byBidWlsZCB0aGUgZGF0ZSByYW5nZS5cbiAgICovXG4gIGRhdGVSYW5nZUlucHV0OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0PjtcblxuICAvKipcbiAgICogU2VsZWN0aW9uIG1vZGUgdG8gdXNlIHdoZW4gcGlja2luZyBkYXRlcyBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBzZWxlY3Rpb25Nb2RlPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPj47XG5cbiAgLyoqXG4gICAqIFZhbHVlIG1vZGUgZm9yIHRoZSBkYXRlcyBpbiB0aGUgb3V0cHV0IERhdGVSYW5nZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gREFURVxuICAgKi9cbiAgdmFsdWVNb2RlPzogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHBhc3MgdGhlIGRhdGUgdmFsdWUgYXMgYSBVVEMgZGF0ZSwgb3IgYSBkYXRlIGluIHRoZSBjdXJyZW50IHRpbWV6b25lLlxuICAgKi9cbiAgZnVsbERheUluVVRDPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHBpY2tlciBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwaWNrZXJDb25maWc/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+O1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFRoZSBpbnB1dCB0aW1lem9uZSB0byBkZWZhdWx0IHRvLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGZ1bGxEYXlJblVUQyBpcyB0cnVlLlxuICAgKi9cbiAgdGltZXpvbmU/OiBNYXliZTxPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxNYXliZTxUaW1lem9uZVN0cmluZz4+PjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgdGltZXpvbmUuIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHNob3dUaW1lem9uZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwcmVzZXRzIHRvIHNob3cgaW4gdGhlIGRyb3Bkb3duLlxuICAgKi9cbiAgcHJlc2V0cz86IE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgcmFuZ2UgaW5wdXQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBzaG93UmFuZ2VJbnB1dD86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGRieEZpeGVkRGF0ZVJhbmdlSW5wdXRWYWx1ZUZhY3RvcnkobW9kZTogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2U6IE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPik6IChpbnB1dDogTWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPikgPT4gTWF5YmU8RGF0ZVJhbmdlPiB7XG4gIGNvbnN0IGRhdGVJbnB1dFRyYW5zZm9ybWVyID0gZGJ4RGF0ZVRpbWVJbnB1dFZhbHVlUGFyc2VGYWN0b3J5KG1vZGUsIHRpbWV6b25lSW5zdGFuY2UpO1xuXG4gIHJldHVybiAoeSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1heWJlPERhdGVSYW5nZT47XG5cbiAgICBpZiAoeSkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICBzdGFydDogZGF0ZUlucHV0VHJhbnNmb3JtZXIoeS5zdGFydCkgYXMgRGF0ZSxcbiAgICAgICAgZW5kOiBkYXRlSW5wdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlOiBEYnhEYXRlVGltZVZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZTogTWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+KTogKGRhdGU6IE1heWJlPERhdGVSYW5nZT4pID0+IE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4ge1xuICBjb25zdCBkYXRlT3V0cHV0VHJhbnNmb3JtZXIgPSBkYnhEYXRlVGltZU91dHB1dFZhbHVlRmFjdG9yeShtb2RlLCB0aW1lem9uZUluc3RhbmNlKTtcblxuICByZXR1cm4gKHkpID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKHkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgc3RhcnQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LnN0YXJ0KSBhcyBEYXRlLFxuICAgICAgICBlbmQ6IGRhdGVPdXRwdXRUcmFuc2Zvcm1lcih5LmVuZCkgYXMgRGF0ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5jb25zdCBUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FOiBNaWxsaXNlY29uZHMgPSAxMDtcblxuZXhwb3J0IHR5cGUgRml4ZWREYXRlUmFuZ2VTY2FuVHlwZSA9ICdzdGFydCcgfCAnZW5kJztcblxuZXhwb3J0IGludGVyZmFjZSBGaXhlZERhdGVSYW5nZVNjYW4ge1xuICAvKipcbiAgICogUGlja2VkIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJhbmdlIG9uIHRoZSBsYXN0IHBpY2suXG4gICAqL1xuICBsYXN0UGlja1R5cGU/OiBNYXliZTxGaXhlZERhdGVSYW5nZVNjYW5UeXBlPjtcbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgZGF0ZSBwYXNzZWQsIGlmIGFwcGxpY2FibGUuXG4gICAqL1xuICBsYXN0RGF0ZVJhbmdlPzogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PjtcbiAgLyoqXG4gICAqIFRoZSBnZW5lcmF0ZWQgYm91bmRhcnkgcmFuZ2UuXG4gICAqL1xuICBib3VuZGFyeT86IERhdGVSYW5nZTtcbiAgLyoqXG4gICAqIE5ldyBEYXRlIFJhbmdlXG4gICAqL1xuICByYW5nZT86IERhdGVSYW5nZTtcbn1cblxudHlwZSBTZWxlY3RlZERhdGVFdmVudFR5cGUgPSAnY2FsZW5kYXInIHwgJ2lucHV0JztcblxuaW50ZXJmYWNlIFNlbGVjdGVkRGF0ZUV2ZW50IHtcbiAgdHlwZTogU2VsZWN0ZWREYXRlRXZlbnRUeXBlO1xuICByYW5nZT86IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj47XG59XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJ2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTUFUX0RBVEVfUkFOR0VfU0VMRUNUSU9OX1NUUkFURUdZLFxuICAgICAgdXNlQ2xhc3M6IGZvcndhcmRSZWYoKCkgPT4gRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFNlbGVjdGlvblN0cmF0ZWd5KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZzxEYnhGaXhlZERhdGVSYW5nZUZpZWxkUHJvcHM+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfc3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2lucHV0UmFuZ2VGb3JtU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9pbnB1dFJhbmdlRm9ybVZhbHVlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIHByaXZhdGUgX2RhdGVSYW5nZUlucHV0U3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9jdXJyZW50U2VsZWN0aW9uTW9kZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfbGF0ZXN0Qm91bmRhcnlTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2Rpc2FibGVFbmRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2FjdGl2ZURhdGVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfY3VycmVudERhdGVSYW5nZUlucHV0OiBNYXliZTxEYnhGaXhlZERhdGVSYW5nZURhdGVSYW5nZUlucHV0PiA9IHt9O1xuICBwcml2YXRlIF9jdXJyZW50U2VsZWN0aW9uTW9kZTogRGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlID0gJ3NpbmdsZSc7XG4gIHByaXZhdGUgX2xhdGVzdEJvdW5kYXJ5OiBNYXliZTxEYXRlUmFuZ2U+ID0gbnVsbDtcblxuICBwcml2YXRlIF9jb25maWcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VQaWNrZXJDb25maWd1cmF0aW9uPj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX3NlbGVjdGlvbk1vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlPj4+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX2RhdGVSYW5nZUlucHV0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlRGF0ZVJhbmdlSW5wdXQ+Pj4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF90aW1lem9uZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxNYXliZTxUaW1lem9uZVN0cmluZz4+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfcHJlc2V0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T2JzZXJ2YWJsZTxEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXT4+KG9mKFtdKSk7XG5cbiAgcHJpdmF0ZSBfc2VsZWN0aW9uRXZlbnQgPSBuZXcgU3ViamVjdDxTZWxlY3RlZERhdGVFdmVudD4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWREYXRlUmFuZ2UkOiBPYnNlcnZhYmxlPE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4+ID0gdGhpcy5fc2VsZWN0aW9uRXZlbnQucGlwZShtYXAoKHgpID0+IHgucmFuZ2UpKTtcblxuICBwcml2YXRlIF9mb3JtQ29udHJvbE9icyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8QWJzdHJhY3RDb250cm9sPE1heWJlPERhdGVSYW5nZT4+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wkID0gdGhpcy5fZm9ybUNvbnRyb2xPYnMucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBAVmlld0NoaWxkKE1hdENhbGVuZGFyKVxuICBjYWxlbmRhciE6IE1hdENhbGVuZGFyPERhdGU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3N0YXJ0RGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHN0YXJ0RGF0ZUlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGVuZERhdGVJbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIGdldCBjdXJyZW50RGF0ZVJhbmdlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dDtcbiAgfVxuXG4gIGdldCBjdXJyZW50U2VsZWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGU7XG4gIH1cblxuICBnZXQgbGF0ZXN0Qm91bmRhcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhdGVzdEJvdW5kYXJ5O1xuICB9XG5cbiAgcmVhZG9ubHkgY29uZmlnJDogT2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+ID0gdGhpcy5fY29uZmlnLnBpcGUoXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzd2l0Y2hNYXAoKHgpID0+IHgpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaW1pdERhdGVUaW1lSW5zdGFuY2UkID0gdGhpcy5jb25maWckLnBpcGUobWFwKGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSBzZWxlY3Rpb25Nb2RlJDogT2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+ID0gdGhpcy5fc2VsZWN0aW9uTW9kZS5waXBlKFxuICAgIHN3aXRjaE1hcE1heWJlRGVmYXVsdDxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+KCdzaW5nbGUnKSxcbiAgICBtYXAoKHgpID0+IHggPz8gJ3NpbmdsZScpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2VJbnB1dCQgPSB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4gPSB0aGlzLl90aW1lem9uZS5waXBlKHN3aXRjaE1hcE1heWJlRGVmYXVsdCgpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5waXBlKFxuICAgIG1hcCgoZGVmYXVsdFRpbWV6b25lKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFRpbWV6b25lID8/IGd1ZXNzQ3VycmVudFRpbWV6b25lKCk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHRpbWV6b25lSW5zdGFuY2UkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPj4gPSB0aGlzLnRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgodGltZXpvbmUpID0+ICh0aW1lem9uZSA/IGRhdGVUaW1lem9uZVV0Y05vcm1hbCh7IHRpbWV6b25lIH0pIDogdW5kZWZpbmVkKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB2YWx1ZUluU3lzdGVtVGltZXpvbmUkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5mb3JtQ29udHJvbCQucGlwZShcbiAgICBtYXAoKGNvbnRyb2wpID0+IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoPE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4+KGNvbnRyb2wudmFsdWUpLCBzaGFyZVJlcGxheSgxKSkpLFxuICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQpLFxuICAgIHN3aXRjaE1hcCgoW3gsIHRpbWV6b25lSW5zdGFuY2VdKSA9PiB7XG4gICAgICByZXR1cm4geC5waXBlKG1hcChkYnhGaXhlZERhdGVSYW5nZUlucHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpO1xuICAgIH0pLFxuICAgIHRocm90dGxlVGltZSgyMCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IGZhbHNlLCB0cmFpbGluZzogdHJ1ZSB9KSwgLy8gdGhyb3R0bGUgaW5jb21pbmcgdmFsdWVzIGFuZCB0aW1lem9uZSBjaGFuZ2VzXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8RGF0ZVJhbmdlPj4oaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUobW9kZTogRGJ4Rml4ZWREYXRlUmFuZ2VTZWxlY3Rpb25Nb2RlKSB7XG4gICAgY29uc3QgcmVzdWx0OiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRlUmFuZ2VJbnB1dCQsIHRoaXMubGltaXREYXRlVGltZUluc3RhbmNlJF0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKFtkYXRlUmFuZ2VJbnB1dCwgbGltaXRJbnN0YW5jZV0pID0+IHtcbiAgICAgICAgY29uc3QgaGFzRGF0ZVJhbmdlQ29uZmlndXJhdGlvbiA9IEJvb2xlYW4oZGF0ZVJhbmdlSW5wdXQpO1xuICAgICAgICBjb25zdCBtaW5NYXhDbGFtcCA9IChkYXRlUmFuZ2U6IERhdGVSYW5nZSkgPT4gbGltaXRJbnN0YW5jZS5jbGFtcERhdGVSYW5nZShkYXRlUmFuZ2UpO1xuXG4gICAgICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgIC8vIG9ubHkgdXNlIHRoZSBzdGFydCBkYXRlLlxuICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlJC5waXBlKFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICAgICAgICAgIG1hcCgoaW5wdXREYXRlUmFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGlucHV0RGF0ZVJhbmdlPy5zdGFydDtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGUgPyAobWluTWF4Q2xhbXAoZGF0ZVJhbmdlKHsgLi4uZGF0ZVJhbmdlSW5wdXQsIGRhdGUgfSBhcyBEYXRlUmFuZ2VJbnB1dCkpIGFzIERhdGVSYW5nZSkgOiBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRha2UgdGhlIGZpcnN0IGRhdGUsIHRoZW4gd2FpdCB1bmxlc3MgdGhlIGRhdGUgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UkLnBpcGUoXG4gICAgICAgICAgICBzY2FuKChhY2M6IEZpeGVkRGF0ZVJhbmdlU2NhbiwgbmV4dERhdGVSYW5nZTogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4ge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBGaXhlZERhdGVSYW5nZVNjYW47XG4gICAgICAgICAgICAgIGxldCBwaWNrVHlwZTogTWF5YmU8Rml4ZWREYXRlUmFuZ2VTY2FuVHlwZT4gPSAnc3RhcnQnO1xuXG4gICAgICAgICAgICAgIGlmIChuZXh0RGF0ZVJhbmdlICYmIG5leHREYXRlUmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQ6IHN0YXJ0T3JOZXh0RGF0ZSwgZW5kIH0gPSBuZXh0RGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvdGVudGlhbEJvdW5kYXJ5ID0gZGF0ZVJhbmdlKHsgLi4uZGF0ZVJhbmdlSW5wdXQsIGRhdGU6IHN0YXJ0T3JOZXh0RGF0ZSB9IGFzIERhdGVSYW5nZUlucHV0KTtcblxuICAgICAgICAgICAgICAgIC8vIG9ubHkgY29tZXMgdGhyb3VnaCB3aGVuIHBhc3NlZCBieSB0aGUgdGV4dCBpbnB1dHNcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRPck5leHREYXRlICYmIGVuZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBjbGFtcERhdGVSYW5nZVRvRGF0ZVJhbmdlKG5leHREYXRlUmFuZ2UsIHBvdGVudGlhbEJvdW5kYXJ5KSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3REYXRlUmFuZ2U6IG5leHREYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiByYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2VcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxldCByYW5nZTogTWF5YmU8RGF0ZVJhbmdlPiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGxldCBib3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNEYXRlUmFuZ2VDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29uZmlndXJlZCByYW5nZS9ib3VuZGFyeSwgdGhlbiBqdXN0IHNldCB0aGUgcGljayB0eXBlIGJhc2VkIG9uIHRoZSBsYXN0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICBwaWNrVHlwZSA9IGFjYy5sYXN0UGlja1R5cGUgPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBpY2sgaXMgb3V0c2lkZSB0aGUgYm91bmRhcnksIHRoZW4gY29uc2lkZXIgaXQgYSBzdGFydCBwaWNrIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgcGlja1R5cGUgPSBhY2MubGFzdFBpY2tUeXBlID09PSAnc3RhcnQnICYmIGFjYy5ib3VuZGFyeSAmJiBpc0RhdGVJbkRhdGVSYW5nZShzdGFydE9yTmV4dERhdGUsIGFjYy5ib3VuZGFyeSkgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyByZWFjdCBiYXNlZCBvbiBob3cgdGhpc1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBpY2tUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RTdGFydCA9IGFjYy5sYXN0RGF0ZVJhbmdlPy5zdGFydCBhcyBEYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Jc0JlZm9yZVByZXZpb3VzU2VsZWN0aW9uID0gIWxhc3RTdGFydCB8fCBpc0JlZm9yZShzdGFydE9yTmV4dERhdGUsIGxhc3RTdGFydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTdGFydDogRGF0ZSA9IHNlbGVjdGlvbklzQmVmb3JlUHJldmlvdXNTZWxlY3Rpb24gPyBzdGFydE9yTmV4dERhdGUgOiBsYXN0U3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RW5kOiBEYXRlID0gc2VsZWN0aW9uSXNCZWZvcmVQcmV2aW91c1NlbGVjdGlvbiA/IGxhc3RTdGFydCA6IHN0YXJ0T3JOZXh0RGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgcGlja2luZyB0aGUgZW5kIHRoZW4gc2V0IHRoZSByYW5nZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogbmV4dFN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5leHRFbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0YWluIHRoZSBib3VuZGFyeSBhcyBwb3RlbnRpYWwgYm91bmRhcnksIGFuZCBzZXQgb3VyIG5ldyByYW5nZSBmcm9tIHRoZSBzaW5nbGUgZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnRPck5leHREYXRlIGFzIERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogc3RhcnRPck5leHREYXRlIGFzIERhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY2MuYm91bmRhcnkgJiYgaXNEYXRlSW5EYXRlUmFuZ2Uoc3RhcnRPck5leHREYXRlLCBhY2MuYm91bmRhcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGluIHRoZSBkYXRlIHJhbmdlLCB1c2VzIHRoZSBwaWNrIGFzIHRoZSBsYXN0IGRhdGUuXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBhY2MuYm91bmRhcnkuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgZW5kOiBzdGFydE9yTmV4dERhdGVcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2FyYml0cmFyeV9xdWljaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBtb2RpZnkgYm91bmRhcnkgdG8gbWF0Y2ggcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTYW1lRGF0ZVJhbmdlKGFjYy5yYW5nZSwgcmFuZ2UpICYmIGlzU2FtZURhdGVEYXkocmFuZ2UuZW5kLCBzdGFydE9yTmV4dERhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBjbGlja2VkIG9uIHRoZSBlbmQgcmFuZ2UsIHRoZW4gZXhwYW5kIHRoZSBib3VuZGFyeSBhZ2FpbiB0byB0aGUgZnVsbCByYW5nZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gZGF0ZVJhbmdlKHsgLi4uZGF0ZVJhbmdlSW5wdXQsIGRhdGU6IHJhbmdlLnN0YXJ0IH0gYXMgRGF0ZVJhbmdlSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkgPSByYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkgPSByYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gcmV0YWluIHNhbWUgYm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IGFjYy5ib3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJykge1xuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3REYXRlUmFuZ2U6IG5leHREYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LFxuICAgICAgICAgICAgICAgICAgICByYW5nZVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgbGFzdFBpY2tUeXBlOiBwaWNrVHlwZSxcbiAgICAgICAgICAgICAgICAgIGxhc3REYXRlUmFuZ2U6IHJlc3VsdC5sYXN0RGF0ZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgYm91bmRhcnk6IHJlc3VsdC5ib3VuZGFyeSA/IChtaW5NYXhDbGFtcChyZXN1bHQuYm91bmRhcnkpIGFzIERhdGVSYW5nZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICByYW5nZTogcmVzdWx0LnJhbmdlID8gKG1pbk1heENsYW1wKHJlc3VsdC5yYW5nZSkgYXMgRGF0ZVJhbmdlKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pLFxuICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiAheC5sYXN0RGF0ZVJhbmdlIHx8IHgucmFuZ2UgIT0gbnVsbCksIC8vIHBhc3MgdGhyb3VnaCBudWxsL2RhdGUgY2xlYXJpbmdzIG9yIHJhbmdlc1xuICAgICAgICAgICAgbWFwKCh4KSA9PiB4LnJhbmdlID8/IG51bGwpIC8vIHJldHVybiB0aGUgcmFuZ2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVhZG9ubHkgZnVsbEJvdW5kYXJ5JDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuZGF0ZVJhbmdlU2VsZWN0aW9uRm9yTW9kZSgnc2luZ2xlJykucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gIHJlYWRvbmx5IGxhdGVzdEJvdW5kYXJ5JDogT2JzZXJ2YWJsZTxNYXliZTxEYXRlUmFuZ2U+PiA9IHRoaXMuc2VsZWN0aW9uTW9kZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKG1vZGUpID0+IHtcbiAgICAgIGlmIChtb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJykge1xuICAgICAgICAvLyBpbiBhcmJpdHJhcnlfcXVpY2sgbW9kZSwgdGhlIGxhdGVzdCB2YWx1ZSBpcyB0aGUgYm91bmRhcnksIHNpbmNlIHdlIGFsd2F5cyBzZXQgdGhlIHZhbHVlIGltbWVkaWF0ZWx5LlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVsbEJvdW5kYXJ5JDtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIC8qKlxuICAgKiBGb2N1c2VzIG9uIHRoZSBkYXRlIGFueSB0aW1lIHRoZSBzZWxlY3Rpb24gZXZlbnQgZnJvbSB0aGUgcGlja2VyIG9jY3VyZWQsIG90aGVyd2lzZSB1c2UgdGhlIHN5c3RlbSB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FsZW5kYXJGb2N1c0RhdGUkOiBPYnNlcnZhYmxlPERhdGU+ID0gdGhpcy5fc2VsZWN0aW9uRXZlbnQucGlwZShzdGFydFdpdGgobnVsbCkpLnBpcGUoXG4gICAgc3dpdGNoTWFwKChzZWxlY3Rpb25FdmVudCkgPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbkV2ZW50ICYmIHNlbGVjdGlvbkV2ZW50LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgc2VsZWN0aW9uRXZlbnQucmFuZ2U/LnN0YXJ0KSB7XG4gICAgICAgIHJldHVybiBvZihzZWxlY3Rpb25FdmVudC5yYW5nZS5zdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5mdWxsQm91bmRhcnkkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGZ1bGxCb3VuZGFyeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxCb3VuZGFyeT8uc3RhcnQgPz8gc2VsZWN0aW9uRXZlbnQ/LnJhbmdlPy5zdGFydDtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGZpbHRlck1heWJlKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBkYXRlUmFuZ2VTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5waXBlKHN3aXRjaE1hcCgobW9kZSkgPT4gdGhpcy5kYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKG1vZGUpKSk7XG5cbiAgcmVhZG9ubHkgY2FsZW5kYXJTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPERhdGVQaWNrZXJEYXRlUmFuZ2U8RGF0ZT4gfCBudWxsPiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5waXBlKFxuICAgIG1hcCgoeCkgPT4gKHggPyBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEYXRlPih4LnN0YXJ0LCB4LmVuZCkgOiBudWxsKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBlbmREaXNhYmxlZCQgPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4ID09PSAnc2luZ2xlJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlucHV0UmFuZ2VGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2w8TWF5YmU8RGF0ZT4+KG51bGwpXG4gIH0pO1xuXG4gIGdldCBmaXhlZERhdGVSYW5nZUZpZWxkKCk6IERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHM7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zZWxlY3Rpb25Nb2RlO1xuICB9XG5cbiAgZ2V0IHZhbHVlTW9kZSgpOiBEYnhEYXRlVGltZVZhbHVlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudmFsdWVNb2RlID8/IERieERhdGVUaW1lVmFsdWVNb2RlLkRBVEU7XG4gIH1cblxuICBnZXQgZGVzY3JpcHRpb24oKTogTWF5YmU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuZGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgdGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMudGltZXpvbmU7XG4gIH1cblxuICBnZXQgc2hvd1RpbWV6b25lKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNob3dUaW1lem9uZSA/PyB0cnVlO1xuICB9XG5cbiAgZ2V0IHByZXNldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMucHJlc2V0cztcbiAgfVxuXG4gIGdldCBzaG93UmFuZ2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5zaG93UmFuZ2VJbnB1dCA/PyB0cnVlO1xuICB9XG5cbiAgcmVhZG9ubHkgbWluTWF4UmFuZ2UkID0gdGhpcy5saW1pdERhdGVUaW1lSW5zdGFuY2UkLnBpcGUoXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGltZXIoTVNfSU5fTUlOVVRFKSksIC8vIHJlZnJlc2ggZXZlcnkgbWludXRlXG4gICAgbWFwKChbeF0pID0+IHguZGF0ZVJhbmdlKCkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVEYXlSYW5nZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW4kID0gdGhpcy5taW5NYXhSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LnN0YXJ0ID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXgkID0gdGhpcy5taW5NYXhSYW5nZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHg/LmVuZCA/PyBudWxsKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcGlja2VyRmlsdGVyJDogT2JzZXJ2YWJsZTxEZWNpc2lvbkZ1bmN0aW9uPERhdGUgfCBudWxsPj4gPSB0aGlzLmNvbmZpZyQucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIG1hcCgoeCkgPT4ge1xuICAgICAgaWYgKHgpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gZGF0ZVRpbWVNaW51dGVXaG9sZURheURlY2lzaW9uRnVuY3Rpb24oeCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gKHg6IERhdGUgfCBudWxsKSA9PiAoeCAhPSBudWxsID8gZmlsdGVyKHgpIDogdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRlZmF1bHRQaWNrZXJGaWx0ZXI6IERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+ID0gKCkgPT4gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRieERhdGVUaW1lRmllbGRDb25maWdTZXJ2aWNlOiBEYnhEYXRlVGltZUZpZWxkTWVudVByZXNldHNTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLm5leHQodGhpcy5mb3JtQ29udHJvbCk7XG5cbiAgICBjb25zdCBkYXRlUmFuZ2VTZWxlY3Rpb24gPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbiQucGlwZShzaGFyZVJlcGxheSgxKSk7XG5cbiAgICBjb25zdCBzZXRJbnB1dEZvcm1WYWx1ZSA9ICh2YWx1ZTogTWF5YmU8RGF0ZVJhbmdlPikgPT4ge1xuICAgICAgaWYgKCFpc1NhbWVEYXRlRGF5UmFuZ2UodmFsdWUsIHRoaXMuaW5wdXRSYW5nZUZvcm0udmFsdWUgYXMgUGFydGlhbDxEYXRlUmFuZ2U+KSkge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLnNldFZhbHVlKHtcbiAgICAgICAgICBzdGFydDogdmFsdWU/LnN0YXJ0ID8/IG51bGwsXG4gICAgICAgICAgZW5kOiB2YWx1ZT8uZW5kID8/IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX3N1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aGlzLnRpbWV6b25lSW5zdGFuY2UkLnBpcGUobWFwKCh0aW1lem9uZUluc3RhbmNlKSA9PiBkYnhGaXhlZERhdGVSYW5nZU91dHB1dFZhbHVlRmFjdG9yeSh0aGlzLnZhbHVlTW9kZSwgdGltZXpvbmVJbnN0YW5jZSkpKSksXG4gICAgICAgIHRocm90dGxlVGltZShUSU1FX09VVFBVVF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKFtjdXJyZW50VmFsdWUsIHZhbHVlRmFjdG9yeV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZGF0ZVJhbmdlU2VsZWN0aW9uLnBpcGUoXG4gICAgICAgICAgICBza2lwRmlyc3RNYXliZSgpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TWF5YmU8RGF0ZVJhbmdlPj4oaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICAgICAgICAgIG1hcCgoeCkgPT4gW3gsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSBhcyBbdHlwZW9mIHgsIHR5cGVvZiBjdXJyZW50VmFsdWUsIHR5cGVvZiB2YWx1ZUZhY3RvcnldKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbcmF3VmFsdWUsIGN1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1ZhbHVlID8gdmFsdWVGYWN0b3J5KHJhd1ZhbHVlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IGlzU2FtZVJhbmdlID0gZGJ4RGF0ZVJhbmdlSXNTYW1lRGF0ZVJhbmdlRmllbGRWYWx1ZSh2YWx1ZSwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzU2FtZVJhbmdlKSB7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhd1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdGhlIGlucHV0IHRleHQgYWdhaW5cbiAgICAgICAgICBzZXRJbnB1dEZvcm1WYWx1ZShyYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5zZWxlY3Rpb25Nb2RlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9IHgpKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmRhdGVSYW5nZUlucHV0JC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQgPSB4KSk7XG5cbiAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQuc3Vic2NyaWJlKCh4OiBNYXliZTxEYXRlUmFuZ2U+KSA9PiB7XG4gICAgICBzZXRJbnB1dEZvcm1WYWx1ZSh4KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNob3dSYW5nZUlucHV0KSB7XG4gICAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVZhbHVlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0aHJvdHRsZVRpbWUoMTAwKSwgLy8gdGhyb3R0bGUgdG8gcHJldmVudCB0aGUgdmFsdWUgZnJvbSBjaGFuZ2luZyB0b28gZmFzdFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFJhbmdlRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRTdHJpbmcgPSB0aGlzLnN0YXJ0RGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWQgPSBpc01vbnRoRGF5U2xhc2hEYXRlKHN0YXJ0U3RyaW5nKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWxpZCAmJiB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFN0cmluZyA9IHRoaXMuZW5kRGF0ZUlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkID0gaXNNb250aERheVNsYXNoRGF0ZShlbmRTdHJpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZDsgLy8gbXVzdCBiZSBhIHZhbGlkIHRleHQgaW5wdXRcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG1hcCgoeCkgPT4geCBhcyBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlUmFuZ2UpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeDogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHg/LnN0YXJ0ID8geyBzdGFydDogeC5zdGFydCB9IDogbnVsbCwgJ2lucHV0Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCByYW5nZVRvU2V0OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+ID0geDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJyAmJiB0aGlzLl9sYXRlc3RCb3VuZGFyeSAmJiB4Py5zdGFydCAmJiB4Py5lbmQpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc0RhdGVJbkRhdGVSYW5nZSh4LnN0YXJ0LCB0aGlzLl9sYXRlc3RCb3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgZW5kIGRhdGUgaXQgb3V0c2lkZSBvZiB0aGUgY3VycmVudCByYW5nZSAoaS5lLiBhIHJhbmdlIHdhcyB0eXBlZCBpbiBvbmx5IHRvIHRoZSBzdGFydCBkYXRlKSB0aGVuIHNldCB0aGUgZW5kIHRvIHRoZSBib3VuZGFyeSBlbmRcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGFyeSA9IGRhdGVSYW5nZSh7IC4uLnRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dCwgZGF0ZTogeC5zdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICByYW5nZVRvU2V0ID0geyBzdGFydDogeC5zdGFydCwgZW5kOiBib3VuZGFyeS5lbmQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGVSYW5nZShyYW5nZVRvU2V0LCAnaW5wdXQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2xhdGVzdEJvdW5kYXJ5U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMubGF0ZXN0Qm91bmRhcnkkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2xhdGVzdEJvdW5kYXJ5ID0geCkpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0Lm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLmZpeGVkRGF0ZVJhbmdlRmllbGQuZGF0ZVJhbmdlSW5wdXQpKTtcblxuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5lbmREaXNhYmxlZCQuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5pbnB1dFJhbmdlRm9ybS5nZXQoJ2VuZCcpO1xuXG4gICAgICBpZiAoZW5kKSB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIGVuZC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dFBpY2tlckNvbmZpZyA9IHRoaXMuZml4ZWREYXRlUmFuZ2VGaWVsZC5waWNrZXJDb25maWc7XG4gICAgdGhpcy5fY29uZmlnLm5leHQoaW5wdXRQaWNrZXJDb25maWcgPyBhc09ic2VydmFibGVGcm9tR2V0dGVyKGlucHV0UGlja2VyQ29uZmlnKSA6IHVuZGVmaW5lZCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB0aW1lem9uZSBpZiBwcm92aWRlZC5cbiAgICBpZiAodGhpcy50aW1lem9uZSAmJiAhdGhpcy5maXhlZERhdGVSYW5nZUZpZWxkLmZ1bGxEYXlJblVUQykge1xuICAgICAgdGhpcy5fdGltZXpvbmUubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMudGltZXpvbmUpKTtcbiAgICB9XG5cbiAgICAvLyBXYXRjaCBmb3IgZGlzYWJsZWQgY2hhbmdlcyBzbyB3ZSBjYW4gcHJvcG9nYXRlIHRoZW0gcHJvcGVybHkuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoKGRpc2FibGVkKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5pbnB1dFJhbmdlRm9ybS5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuZW5kRGlzYWJsZWQkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuaW5wdXRSYW5nZUZvcm0uZ2V0KCdlbmQnKTtcblxuICAgICAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICBlbmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5kLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wcmVzZXRzICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMucHJlc2V0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wcmVzZXRzLm5leHQodGhpcy5kYnhEYXRlVGltZUZpZWxkQ29uZmlnU2VydmljZS5jb25maWd1cmF0aW9ucyQpO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5jYWxlbmRhckZvY3VzRGF0ZSQuc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICB0aGlzLmNhbGVuZGFyLmFjdGl2ZURhdGUgPSB4O1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9zdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9pbnB1dFJhbmdlRm9ybVZhbHVlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dFN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2xhdGVzdEJvdW5kYXJ5U3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9kaXNhYmxlRW5kU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9hY3RpdmVEYXRlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jb25maWcuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGF0ZVJhbmdlSW5wdXQuY29tcGxldGUoKTtcbiAgICB0aGlzLl90aW1lem9uZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3ByZXNldHMuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zZWxlY3Rpb25FdmVudC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Zvcm1Db250cm9sT2JzLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzZWxlY3RlZENoYW5nZShkYXRlOiBNYXliZTxEYXRlPik6IHZvaWQge1xuICAgIHRoaXMuc2V0RGF0ZVJhbmdlKGRhdGUgPyB7IHN0YXJ0OiBkYXRlIH0gOiBudWxsLCAnY2FsZW5kYXInKTtcbiAgfVxuXG4gIHNldERhdGVSYW5nZShyYW5nZTogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+PiwgdHlwZTogU2VsZWN0ZWREYXRlRXZlbnRUeXBlKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uRXZlbnQubmV4dCh7IHR5cGUsIHJhbmdlIH0pO1xuICB9XG5cbiAgX2NyZWF0ZURhdGVSYW5nZShkYXRlOiBNYXliZTxEYXRlPik6IE1heWJlPERhdGVSYW5nZT4ge1xuICAgIHJldHVybiBkYXRlID8gZGF0ZVJhbmdlKHsgLi4udGhpcy5fY3VycmVudERhdGVSYW5nZUlucHV0LCBkYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhGaXhlZERhdGVSYW5nZUZpZWxkU2VsZWN0aW9uU3RyYXRlZ3k8RD4gaW1wbGVtZW50cyBNYXREYXRlUmFuZ2VTZWxlY3Rpb25TdHJhdGVneTxEPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxEPiwgcmVhZG9ubHkgZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudDogRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudCkge31cblxuICBzZWxlY3Rpb25GaW5pc2hlZChkYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICAvLyB1bnVzZWRcbiAgICByZXR1cm4gY3VycmVudFJhbmdlO1xuICB9XG5cbiAgY3JlYXRlUHJldmlldyhhY3RpdmVEYXRlOiBEIHwgbnVsbCwgY3VycmVudFJhbmdlOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+LCBldmVudDogRXZlbnQpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb25Nb2RlIH0gPSB0aGlzLmRieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQ7XG4gICAgaWYgKGFjdGl2ZURhdGUgIT0gbnVsbCAmJiBjdXJyZW50U2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgIGNvbnN0IGxhdGVzdEJvdW5kYXJ5ID0gdGhpcy5kYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50LmxhdGVzdEJvdW5kYXJ5O1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZyb21BZGFwdGVyRGF0ZShhY3RpdmVEYXRlKTtcblxuICAgICAgaWYgKGxhdGVzdEJvdW5kYXJ5ICYmIChjdXJyZW50U2VsZWN0aW9uTW9kZSA9PT0gJ25vcm1hbCcgfHwgaXNEYXRlSW5EYXRlUmFuZ2UoZGF0ZSwgbGF0ZXN0Qm91bmRhcnkpKSkge1xuICAgICAgICBjb25zdCBleGFtcGxlRGF0ZVJhbmdlID0gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlKGxhdGVzdEJvdW5kYXJ5KTtcbiAgICAgICAgcmV0dXJuIGV4YW1wbGVEYXRlUmFuZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURhdGVSYW5nZVdpdGhEYXRlKGFjdGl2ZURhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRGF0ZVJhbmdlV2l0aERhdGUoaW5wdXQ6IEQgfCBudWxsKTogRGF0ZVBpY2tlckRhdGVSYW5nZTxEPiB7XG4gICAgbGV0IGRhdGVSYW5nZTogTWF5YmU8RGF0ZVJhbmdlPjtcblxuICAgIGlmIChpbnB1dCkge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZGF0ZUZyb21BZGFwdGVyRGF0ZShpbnB1dCk7XG4gICAgICBkYXRlUmFuZ2UgPSB0aGlzLmRieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQuX2NyZWF0ZURhdGVSYW5nZShkYXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlKGRhdGVSYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEYXRlUmFuZ2UoaW5wdXQ6IE1heWJlPERhdGVSYW5nZT4pOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEPih0aGlzLmFkYXB0ZXJEYXRlRnJvbURhdGUoaW5wdXQuc3RhcnQpLCB0aGlzLmFkYXB0ZXJEYXRlRnJvbURhdGUoaW5wdXQuZW5kKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVBpY2tlckRhdGVSYW5nZTxEPihudWxsLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBkYXRlRnJvbUFkYXB0ZXJEYXRlKGlucHV0OiBEKSB7XG4gICAgY29uc3QgZGF5OiBEYXlPZk1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShpbnB1dCk7XG4gICAgY29uc3QgbW9udGhJbmRleDogRGF0ZU1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoaW5wdXQpO1xuICAgIGNvbnN0IHllYXI6IFllYXJOdW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGlucHV0KTtcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5KTtcbiAgfVxuXG4gIGFkYXB0ZXJEYXRlRnJvbURhdGUoZGF0ZTogRGF0ZSk6IEQge1xuICAgIGNvbnN0IGRheTogRGF5T2ZNb250aCA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIGNvbnN0IG1vbnRoSW5kZXg6IERhdGVNb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBjb25zdCB5ZWFyOiBZZWFyTnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRieC1maXhlZGRhdGVyYW5nZS1maWVsZFwiPlxuICA8bWF0LWNhbGVuZGFyICNjYWxlbmRhclZpZXcgW3NlbGVjdGVkXT1cImNhbGVuZGFyU2VsZWN0aW9uJCB8IGFzeW5jXCIgW2RhdGVGaWx0ZXJdPVwiKHBpY2tlckZpbHRlciQgfCBhc3luYykgfHwgZGVmYXVsdFBpY2tlckZpbHRlclwiIFttaW5EYXRlXT1cIm1pbiQgfCBhc3luY1wiIFttYXhEYXRlXT1cIm1heCQgfCBhc3luY1wiIChzZWxlY3RlZENoYW5nZSk9XCJzZWxlY3RlZENoYW5nZSgkZXZlbnQpXCI+PC9tYXQtY2FsZW5kYXI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImRieC1maXhlZGRhdGVyYW5nZS1maWVsZC1pbnB1dFwiIGFwcGVhcmFuY2U9XCJmaWxsXCI+XG4gICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0ICpuZ0lmPVwic2hvd1JhbmdlSW5wdXRcIiBbZm9ybUdyb3VwXT1cImlucHV0UmFuZ2VGb3JtXCI+XG4gICAgICA8aW5wdXQgI3N0YXJ0RGF0ZUlucHV0IG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiIHBsYWNlaG9sZGVyPVwiU3RhcnQgZGF0ZVwiIC8+XG4gICAgICA8aW5wdXQgI2VuZERhdGVJbnB1dCBbbmdDbGFzc109XCIoZW5kRGlzYWJsZWQkIHwgYXN5bmMpID8gJ2RieC1maXhlZGRhdGVyYW5nZS1maWVsZC1pbnB1dC1lbmQnIDogJydcIiBbYXR0ci50YWJpbmRleF09XCIoZW5kRGlzYWJsZWQkIHwgYXN5bmMpID8gLTEgOiAwXCIgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiBwbGFjZWhvbGRlcj1cIkVuZCBkYXRlXCIgLz5cbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5EYXRlIHJhbmdlIGlzIHJlcXVpcmVkPC9tYXQtZXJyb3I+XG48L2Rpdj5cbiJdfQ==
|
|
534
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZvcm0vc3JjL2xpYi9mb3JtbHkvZmllbGQvdmFsdWUvZGF0ZS9maXhlZGRhdGVyYW5nZS5maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZm9ybS9zcmMvbGliL2Zvcm1seS9maWVsZC92YWx1ZS9kYXRlL2ZpeGVkZGF0ZXJhbmdlLmZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBK0gsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9MLE9BQU8sRUFBRSxvQkFBb0IsRUFBaUMscUJBQXFCLEVBQTZCLGtCQUFrQixFQUF3RCxTQUFTLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4VyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4TixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQXFCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNC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QUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RCxDQUFDOytHQXZEVSx1Q0FBdUM7bUhBQXZDLHVDQUF1Qzs7NEZBQXZDLHVDQUF1QztrQkFEbkQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgTWF5YmUsIHR5cGUgRGVjaXNpb25GdW5jdGlvbiwgdHlwZSBNaWxsaXNlY29uZHMsIHR5cGUgVGltZXpvbmVTdHJpbmcsIHR5cGUgRGF0ZU1vbnRoLCB0eXBlIERheU9mTW9udGgsIHR5cGUgWWVhck51bWJlciwgaXNNb250aERheVNsYXNoRGF0ZSwgTVNfSU5fTUlOVVRFIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBndWVzc0N1cnJlbnRUaW1lem9uZSwgRGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2UsIGRhdGVUaW1lem9uZVV0Y05vcm1hbCwgRGF0ZVJhbmdlSW5wdXQsIERhdGVSYW5nZSwgaXNTYW1lRGF0ZURheVJhbmdlLCBEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWUsIERhdGVUaW1lTWludXRlQ29uZmlnLCBkYXRlUmFuZ2UsIGlzRGF0ZUluRGF0ZVJhbmdlLCBjbGFtcERhdGVSYW5nZVRvRGF0ZVJhbmdlLCBpc1NhbWVEYXRlUmFuZ2UsIGlzU2FtZURhdGVEYXksIGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSwgZGF0ZVRpbWVNaW51dGVXaG9sZURheURlY2lzaW9uRnVuY3Rpb24gfSBmcm9tICdAZGVyZWVrYi9kYXRlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgc2hhcmVSZXBsYXksIG1hcCwgc3RhcnRXaXRoLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZGVib3VuY2VUaW1lLCB0aHJvdHRsZVRpbWUsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YsIGNvbWJpbmVMYXRlc3RXaXRoLCBmaWx0ZXIsIGNvbWJpbmVMYXRlc3QsIHNjYW4sIGZpcnN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9tYXRlcmlhbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVDb25maWcsIEZvcm1seUZpZWxkUHJvcHMgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5LCBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksIERhdGVSYW5nZSBhcyBEYXRlUGlja2VyRGF0ZVJhbmdlLCBNYXRDYWxlbmRhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgYXNPYnNlcnZhYmxlRnJvbUdldHRlciwgZmlsdGVyTWF5YmUsIE9ic2VydmFibGVPclZhbHVlR2V0dGVyLCBza2lwRmlyc3RNYXliZSwgU3Vic2NyaXB0aW9uT2JqZWN0LCBzd2l0Y2hNYXBNYXliZURlZmF1bHQgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IERieERhdGVUaW1lVmFsdWVNb2RlLCBkYnhEYXRlUmFuZ2VJc1NhbWVEYXRlUmFuZ2VGaWVsZFZhbHVlLCBkYnhEYXRlVGltZUlucHV0VmFsdWVQYXJzZUZhY3RvcnksIGRieERhdGVUaW1lT3V0cHV0VmFsdWVGYWN0b3J5IH0gZnJvbSAnLi9kYXRlLnZhbHVlJztcbmltcG9ydCB7IERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vZGF0ZXRpbWUnO1xuaW1wb3J0IHsgRGJ4RGF0ZVRpbWVGaWVsZE1lbnVQcmVzZXRzU2VydmljZSB9IGZyb20gJy4vZGF0ZXRpbWUuZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgaXNCZWZvcmUgfSBmcm9tICdkYXRlLWZucyc7XG5cbmV4cG9ydCB0eXBlIERieEZpeGVkRGF0ZVJhbmdlRGF0ZVJhbmdlSW5wdXQgPSBPbWl0PERhdGVSYW5nZUlucHV0LCAnZGF0ZSc+O1xuXG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24gPSBPbWl0PERhdGVUaW1lTWludXRlQ29uZmlnLCAnZGF0ZSc+O1xuXG5leHBvcnQgdHlwZSBEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGUgPSAnc2luZ2xlJyB8ICdub3JtYWwnIHwgJ2FyYml0cmFyeScgfCAnYXJiaXRyYXJ5X3F1aWNrJztcbmV4cG9ydCB0eXBlIERieEZpeGVkRGF0ZVJhbmdlUGlja2luZyA9ICdzdGFydCcgfCAnZW5kJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhGaXhlZERhdGVSYW5nZUZpZWxkUHJvcHMgZXh0ZW5kcyBGb3JtbHlGaWVsZFByb3BzIHtcbiAgLyoqXG4gICAqIERhdGUgcmFuZ2UgaW5wdXQgdG8gYnVpbGQgdGhlIGRhdGUgcmFuZ2UuXG4gICAqL1xuICBkYXRlUmFuZ2VJbnB1dDogT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD47XG5cbiAgLyoqXG4gICAqIFNlbGVjdGlvbiBtb2RlIHRvIHVzZSB3aGVuIHBpY2tpbmcgZGF0ZXMgb24gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgc2VsZWN0aW9uTW9kZT86IE1heWJlPE9ic2VydmFibGVPclZhbHVlR2V0dGVyPERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4+O1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBtb2RlIGZvciB0aGUgZGF0ZXMgaW4gdGhlIG91dHB1dCBEYXRlUmFuZ2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIERBVEVcbiAgICovXG4gIHZhbHVlTW9kZT86IERieERhdGVUaW1lVmFsdWVNb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwYXNzIHRoZSBkYXRlIHZhbHVlIGFzIGEgVVRDIGRhdGUsIG9yIGEgZGF0ZSBpbiB0aGUgY3VycmVudCB0aW1lem9uZS5cbiAgICovXG4gIGZ1bGxEYXlJblVUQz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBwaWNrZXIgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcGlja2VyQ29uZmlnPzogT2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8RGJ4Rml4ZWREYXRlUmFuZ2VQaWNrZXJDb25maWd1cmF0aW9uPjtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBUaGUgaW5wdXQgdGltZXpvbmUgdG8gZGVmYXVsdCB0by5cbiAgICpcbiAgICogSWdub3JlZCBpZiBmdWxsRGF5SW5VVEMgaXMgdHJ1ZS5cbiAgICovXG4gIHRpbWV6b25lPzogTWF5YmU8T2JzZXJ2YWJsZU9yVmFsdWVHZXR0ZXI8TWF5YmU8VGltZXpvbmVTdHJpbmc+Pj47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGRpc3BsYXkgdGhlIHRpbWV6b25lLiBUcnVlIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBzaG93VGltZXpvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcHJlc2V0cyB0byBzaG93IGluIHRoZSBkcm9wZG93bi5cbiAgICovXG4gIHByZXNldHM/OiBPYnNlcnZhYmxlT3JWYWx1ZUdldHRlcjxEYXRlVGltZVByZXNldENvbmZpZ3VyYXRpb25bXT47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgdGhlIHJhbmdlIGlucHV0LiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgc2hvd1JhbmdlSW5wdXQ/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBkYnhGaXhlZERhdGVSYW5nZUlucHV0VmFsdWVGYWN0b3J5KG1vZGU6IERieERhdGVUaW1lVmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlOiBNYXliZTxEYXRlVGltZXpvbmVVdGNOb3JtYWxJbnN0YW5jZT4pOiAoaW5wdXQ6IE1heWJlPERhdGVSYW5nZVdpdGhEYXRlT3JTdHJpbmdWYWx1ZT4pID0+IE1heWJlPERhdGVSYW5nZT4ge1xuICBjb25zdCBkYXRlSW5wdXRUcmFuc2Zvcm1lciA9IGRieERhdGVUaW1lSW5wdXRWYWx1ZVBhcnNlRmFjdG9yeShtb2RlLCB0aW1lem9uZUluc3RhbmNlKTtcblxuICByZXR1cm4gKHkpID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKHkpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgc3RhcnQ6IGRhdGVJbnB1dFRyYW5zZm9ybWVyKHkuc3RhcnQpIGFzIERhdGUsXG4gICAgICAgIGVuZDogZGF0ZUlucHV0VHJhbnNmb3JtZXIoeS5lbmQpIGFzIERhdGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGJ4Rml4ZWREYXRlUmFuZ2VPdXRwdXRWYWx1ZUZhY3RvcnkobW9kZTogRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2U6IE1heWJlPERhdGVUaW1lem9uZVV0Y05vcm1hbEluc3RhbmNlPik6IChkYXRlOiBNYXliZTxEYXRlUmFuZ2U+KSA9PiBNYXliZTxEYXRlUmFuZ2VXaXRoRGF0ZU9yU3RyaW5nVmFsdWU+IHtcbiAgY29uc3QgZGF0ZU91dHB1dFRyYW5zZm9ybWVyID0gZGJ4RGF0ZVRpbWVPdXRwdXRWYWx1ZUZhY3RvcnkobW9kZSwgdGltZXpvbmVJbnN0YW5jZSk7XG5cbiAgcmV0dXJuICh5KSA9PiB7XG4gICAgbGV0IHJlc3VsdDogTWF5YmU8RGF0ZVJhbmdlPjtcblxuICAgIGlmICh5KSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHN0YXJ0OiBkYXRlT3V0cHV0VHJhbnNmb3JtZXIoeS5zdGFydCkgYXMgRGF0ZSxcbiAgICAgICAgZW5kOiBkYXRlT3V0cHV0VHJhbnNmb3JtZXIoeS5lbmQpIGFzIERhdGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuY29uc3QgVElNRV9PVVRQVVRfVEhST1RUTEVfVElNRTogTWlsbGlzZWNvbmRzID0gMTA7XG5cbmV4cG9ydCB0eXBlIEZpeGVkRGF0ZVJhbmdlU2NhblR5cGUgPSAnc3RhcnQnIHwgJ2VuZCcgfCAnc3RhcnRSZXBlYXQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpeGVkRGF0ZVJhbmdlU2NhbiB7XG4gIC8qKlxuICAgKiBQaWNrZWQgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgcmFuZ2Ugb24gdGhlIGxhc3QgcGljay5cbiAgICovXG4gIGxhc3RQaWNrVHlwZT86IE1heWJlPEZpeGVkRGF0ZVJhbmdlU2NhblR5cGU+O1xuICAvKipcbiAgICogVGhlIGxhdGVzdCBkYXRlIHBhc3NlZCwgaWYgYXBwbGljYWJsZS5cbiAgICovXG4gIGxhc3REYXRlUmFuZ2U/OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+O1xuICAvKipcbiAgICogVGhlIGdlbmVyYXRlZCBib3VuZGFyeSByYW5nZS5cbiAgICovXG4gIGJvdW5kYXJ5PzogRGF0ZVJhbmdlO1xuICAvKipcbiAgICogTmV3IERhdGUgUmFuZ2VcbiAgICovXG4gIHJhbmdlPzogRGF0ZVJhbmdlO1xufVxuXG50eXBlIFNlbGVjdGVkRGF0ZUV2ZW50VHlwZSA9ICdjYWxlbmRhcicgfCAnaW5wdXQnO1xuXG5pbnRlcmZhY2UgU2VsZWN0ZWREYXRlRXZlbnQge1xuICB0eXBlOiBTZWxlY3RlZERhdGVFdmVudFR5cGU7XG4gIHJhbmdlPzogTWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnZml4ZWRkYXRlcmFuZ2UuZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksXG4gICAgICB1c2VDbGFzczogZm9yd2FyZFJlZigoKSA9PiBEYnhGaXhlZERhdGVSYW5nZUZpZWxkU2VsZWN0aW9uU3RyYXRlZ3kpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPERieEZpeGVkRGF0ZVJhbmdlRmllbGRQcm9wcz4+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9zdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfaW5wdXRSYW5nZUZvcm1TdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgcHJpdmF0ZSBfZGF0ZVJhbmdlSW5wdXRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2N1cnJlbnRTZWxlY3Rpb25Nb2RlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9sYXRlc3RCb3VuZGFyeVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfZGlzYWJsZUVuZFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfYWN0aXZlRGF0ZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwcml2YXRlIF9jdXJyZW50RGF0ZVJhbmdlSW5wdXQ6IE1heWJlPERieEZpeGVkRGF0ZVJhbmdlRGF0ZVJhbmdlSW5wdXQ+ID0ge307XG4gIHByaXZhdGUgX2N1cnJlbnRTZWxlY3Rpb25Nb2RlOiBEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGUgPSAnc2luZ2xlJztcbiAgcHJpdmF0ZSBfbGF0ZXN0Qm91bmRhcnk6IE1heWJlPERhdGVSYW5nZT4gPSBudWxsO1xuXG4gIHByaXZhdGUgX2NvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVBpY2tlckNvbmZpZ3VyYXRpb24+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8T2JzZXJ2YWJsZTxEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGU+Pj4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfZGF0ZVJhbmdlSW5wdXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPE9ic2VydmFibGU8RGJ4Rml4ZWREYXRlUmFuZ2VEYXRlUmFuZ2VJbnB1dD4+Pih1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX3RpbWV6b25lID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxPYnNlcnZhYmxlPE1heWJlPFRpbWV6b25lU3RyaW5nPj4+Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9wcmVzZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPYnNlcnZhYmxlPERhdGVUaW1lUHJlc2V0Q29uZmlndXJhdGlvbltdPj4ob2YoW10pKTtcblxuICBwcml2YXRlIF9zZWxlY3Rpb25FdmVudCA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkRGF0ZUV2ZW50PigpO1xuICByZWFkb25seSBzZWxlY3RlZERhdGVSYW5nZSQ6IE9ic2VydmFibGU8TWF5YmU8UGFydGlhbDxEYXRlUmFuZ2U+Pj4gPSB0aGlzLl9zZWxlY3Rpb25FdmVudC5waXBlKG1hcCgoeCkgPT4geC5yYW5nZSkpO1xuXG4gIHByaXZhdGUgX2Zvcm1Db250cm9sT2JzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxBYnN0cmFjdENvbnRyb2w8TWF5YmU8RGF0ZVJhbmdlPj4+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSBmb3JtQ29udHJvbCQgPSB0aGlzLl9mb3JtQ29udHJvbE9icy5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIEBWaWV3Q2hpbGQoTWF0Q2FsZW5kYXIpXG4gIGNhbGVuZGFyITogTWF0Q2FsZW5kYXI8RGF0ZT47XG5cbiAgQFZpZXdDaGlsZCgnc3RhcnREYXRlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgc3RhcnREYXRlSW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdlbmREYXRlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgZW5kRGF0ZUlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG5cbiAgZ2V0IGN1cnJlbnREYXRlUmFuZ2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudERhdGVSYW5nZUlucHV0O1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRTZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZTtcbiAgfVxuXG4gIGdldCBsYXRlc3RCb3VuZGFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGF0ZXN0Qm91bmRhcnk7XG4gIH1cblxuICByZWFkb25seSBjb25maWckOiBPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlUGlja2VyQ29uZmlndXJhdGlvbj4gPSB0aGlzLl9jb25maWcucGlwZShcbiAgICBmaWx0ZXJNYXliZSgpLFxuICAgIHN3aXRjaE1hcCgoeCkgPT4geCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGxpbWl0RGF0ZVRpbWVJbnN0YW5jZSQgPSB0aGlzLmNvbmZpZyQucGlwZShtYXAobGltaXREYXRlVGltZUluc3RhbmNlKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvbk1vZGUkOiBPYnNlcnZhYmxlPERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4gPSB0aGlzLl9zZWxlY3Rpb25Nb2RlLnBpcGUoXG4gICAgc3dpdGNoTWFwTWF5YmVEZWZhdWx0PERieEZpeGVkRGF0ZVJhbmdlU2VsZWN0aW9uTW9kZT4oJ3NpbmdsZScpLFxuICAgIG1hcCgoeCkgPT4geCA/PyAnc2luZ2xlJyksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZUlucHV0JCA9IHRoaXMuX2RhdGVSYW5nZUlucHV0LnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICByZWFkb25seSB0aW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8VGltZXpvbmVTdHJpbmc+PiA9IHRoaXMuX3RpbWV6b25lLnBpcGUoc3dpdGNoTWFwTWF5YmVEZWZhdWx0KCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnBpcGUoXG4gICAgbWFwKChkZWZhdWx0VGltZXpvbmUpID0+IHtcbiAgICAgIHJldHVybiBkZWZhdWx0VGltZXpvbmUgPz8gZ3Vlc3NDdXJyZW50VGltZXpvbmUoKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdGltZXpvbmVJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVRpbWV6b25lVXRjTm9ybWFsSW5zdGFuY2U+PiA9IHRoaXMudGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh0aW1lem9uZSkgPT4gKHRpbWV6b25lID8gZGF0ZVRpbWV6b25lVXRjTm9ybWFsKHsgdGltZXpvbmUgfSkgOiB1bmRlZmluZWQpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZhbHVlSW5TeXN0ZW1UaW1lem9uZSQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLmZvcm1Db250cm9sJC5waXBlKFxuICAgIG1hcCgoY29udHJvbCkgPT4gY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGg8TWF5YmU8RGF0ZVJhbmdlV2l0aERhdGVPclN0cmluZ1ZhbHVlPj4oY29udHJvbC52YWx1ZSksIHNoYXJlUmVwbGF5KDEpKSksXG4gICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy50aW1lem9uZUluc3RhbmNlJCksXG4gICAgc3dpdGNoTWFwKChbeCwgdGltZXpvbmVJbnN0YW5jZV0pID0+IHtcbiAgICAgIHJldHVybiB4LnBpcGUobWFwKGRieEZpeGVkRGF0ZVJhbmdlSW5wdXRWYWx1ZUZhY3RvcnkodGhpcy52YWx1ZU1vZGUsIHRpbWV6b25lSW5zdGFuY2UpKSk7XG4gICAgfSksXG4gICAgdGhyb3R0bGVUaW1lKDIwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiB0cnVlIH0pLCAvLyB0aHJvdHRsZSBpbmNvbWluZyB2YWx1ZXMgYW5kIHRpbWV6b25lIGNoYW5nZXNcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlUmFuZ2U+Pihpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgZGF0ZVJhbmdlU2VsZWN0aW9uRm9yTW9kZShtb2RlOiBEYnhGaXhlZERhdGVSYW5nZVNlbGVjdGlvbk1vZGUpIHtcbiAgICBjb25zdCByZXN1bHQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRhdGVSYW5nZUlucHV0JCwgdGhpcy5saW1pdERhdGVUaW1lSW5zdGFuY2UkXSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoW2RhdGVSYW5nZUlucHV0LCBsaW1pdEluc3RhbmNlXSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNEYXRlUmFuZ2VDb25maWd1cmF0aW9uID0gQm9vbGVhbihkYXRlUmFuZ2VJbnB1dCk7XG4gICAgICAgIGNvbnN0IG1pbk1heENsYW1wID0gKGRhdGVSYW5nZTogRGF0ZVJhbmdlKSA9PiBsaW1pdEluc3RhbmNlLmNsYW1wRGF0ZVJhbmdlKGRhdGVSYW5nZSk7XG5cbiAgICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgLy8gb25seSB1c2UgdGhlIHN0YXJ0IGRhdGUuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UkLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgICAgICAgICAgbWFwKChpbnB1dERhdGVSYW5nZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gaW5wdXREYXRlUmFuZ2U/LnN0YXJ0O1xuICAgICAgICAgICAgICByZXR1cm4gZGF0ZSA/IChtaW5NYXhDbGFtcChkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZSB9IGFzIERhdGVSYW5nZUlucHV0KSkgYXMgRGF0ZVJhbmdlKSA6IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdGFrZSB0aGUgZmlyc3QgZGF0ZSwgdGhlbiB3YWl0IHVubGVzcyB0aGUgZGF0ZSBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZS5cbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZERhdGVSYW5nZSQucGlwZShcbiAgICAgICAgICAgIHNjYW4oKGFjYzogRml4ZWREYXRlUmFuZ2VTY2FuLCBuZXh0RGF0ZVJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHQ6IEZpeGVkRGF0ZVJhbmdlU2NhbjtcbiAgICAgICAgICAgICAgbGV0IHBpY2tUeXBlOiBNYXliZTxGaXhlZERhdGVSYW5nZVNjYW5UeXBlPiA9ICdzdGFydCc7XG5cbiAgICAgICAgICAgICAgaWYgKG5leHREYXRlUmFuZ2UgJiYgbmV4dERhdGVSYW5nZS5zdGFydCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydDogc3RhcnRPck5leHREYXRlLCBlbmQgfSA9IG5leHREYXRlUmFuZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcG90ZW50aWFsQm91bmRhcnkgPSBkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZTogc3RhcnRPck5leHREYXRlIH0gYXMgRGF0ZVJhbmdlSW5wdXQpO1xuXG4gICAgICAgICAgICAgICAgLy8gb25seSBjb21lcyB0aHJvdWdoIHdoZW4gcGFzc2VkIGJ5IHRoZSB0ZXh0IGlucHV0c1xuICAgICAgICAgICAgICAgIGlmIChzdGFydE9yTmV4dERhdGUgJiYgZW5kKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IGNsYW1wRGF0ZVJhbmdlVG9EYXRlUmFuZ2UobmV4dERhdGVSYW5nZSwgcG90ZW50aWFsQm91bmRhcnkpIGFzIERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRhcnk6IHJhbmdlLFxuICAgICAgICAgICAgICAgICAgICByYW5nZVxuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgLy8gZm9yIG5vcm1hbCBtb2RlIHdlIHdhbnQgdG8gcHJvdGVjdCBhZ2FpbnN0IFwic3RhcnRcIiBiZWluZyBpbnB1dCwgdGhlbiB0aGUgb3V0cHV0IGJlaW5nIHBhc3NlZCxcbiAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIHRoZSBuZXh0IGNsaWNrIGJlaW5nIHRyZWF0ZWQgYXMgYW5vdGhlciBcInN0YXJ0XCIgaW5zdGVhZCBvZiBhbiBcImVuZFwiLlxuICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdub3JtYWwnICYmIGFjYy5sYXN0UGlja1R5cGUgPT09ICdzdGFydCcgJiYgaXNTYW1lRGF0ZURheShzdGFydE9yTmV4dERhdGUsIGVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZURhdGVEYXkoc3RhcnRPck5leHREYXRlLCBhY2MubGFzdERhdGVSYW5nZT8uc3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGlja1R5cGUgPSAnc3RhcnRSZXBlYXQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxldCByYW5nZTogTWF5YmU8RGF0ZVJhbmdlPiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGxldCBib3VuZGFyeTogTWF5YmU8RGF0ZVJhbmdlPiA9IHBvdGVudGlhbEJvdW5kYXJ5O1xuXG4gICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNEYXRlUmFuZ2VDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY29uZmlndXJlZCByYW5nZS9ib3VuZGFyeSwgdGhlbiBqdXN0IHNldCB0aGUgcGljayB0eXBlIGJhc2VkIG9uIHRoZSBsYXN0IHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICBwaWNrVHlwZSA9IGFjYy5sYXN0UGlja1R5cGUgPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWNjLmxhc3RQaWNrVHlwZSA9PT0gJ3N0YXJ0UmVwZWF0Jykge1xuICAgICAgICAgICAgICAgICAgICAgIHBpY2tUeXBlID0gJ2VuZCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBpY2sgaXMgb3V0c2lkZSB0aGUgYm91bmRhcnksIHRoZW4gY29uc2lkZXIgaXQgYSBzdGFydCBwaWNrIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgcGlja1R5cGUgPSBhY2MubGFzdFBpY2tUeXBlID09PSAnc3RhcnQnICYmIGFjYy5ib3VuZGFyeSAmJiBpc0RhdGVJbkRhdGVSYW5nZShzdGFydE9yTmV4dERhdGUsIGFjYy5ib3VuZGFyeSkgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyByZWFjdCBiYXNlZCBvbiBob3cgdGhpc1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBpY2tUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RTdGFydCA9IGFjYy5sYXN0RGF0ZVJhbmdlPy5zdGFydCBhcyBEYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYm91bmRhcnlUb0NoZWNrOiBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Jc0JlZm9yZVByZXZpb3VzU2VsZWN0aW9uID0gIWxhc3RTdGFydCB8fCBpc0JlZm9yZShzdGFydE9yTmV4dERhdGUsIGxhc3RTdGFydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0U3RhcnQ6IERhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEVuZDogRGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbklzQmVmb3JlUHJldmlvdXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXJ0ID0gc3RhcnRPck5leHREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kID0gbGFzdFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeVRvQ2hlY2sgPSBwb3RlbnRpYWxCb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGFydCA9IGxhc3RTdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVuZCA9IHN0YXJ0T3JOZXh0RGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnlUb0NoZWNrID0gZGF0ZVJhbmdlKHsgLi4uZGF0ZVJhbmdlSW5wdXQsIGRhdGU6IG5leHRTdGFydCB9IGFzIERhdGVSYW5nZUlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIGJvdW5kYXJ5IHVzaW5nIHRoZSBuZXh0IHN0YXJ0IGRhdGUuIElmIGl0IGlzIG91dHNpZGUgdGhlIHNlbGVjdGFibGUgcmFuZ2UsIHRoZW4gaXQgYmVjb21lcyBhIFwic3RhcnRcIiBwaWNrIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUoYm91bmRhcnlUb0NoZWNrLmVuZCwgbmV4dEVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQWxsb3cgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIHRvIGZpbGwgdGhlIGVudGlyZSByYW5nZSBpbnN0ZWFkIG9mIGp1c3QgcmVzZXR0aW5nIGl0IGVudGlyZWx5XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXJ0ID0gc3RhcnRPck5leHREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW5kID0gc3RhcnRPck5leHREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrVHlwZSA9ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gYm91bmRhcnlUb0NoZWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnkgPSByYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgcGlja2luZyB0aGUgZW5kIHRoZW4gc2V0IHRoZSByYW5nZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogbmV4dFN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG5leHRFbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRhaW4gdGhlIGJvdW5kYXJ5IGFzIHBvdGVudGlhbCBib3VuZGFyeSwgYW5kIHNldCBvdXIgbmV3IHJhbmdlIGZyb20gdGhlIHNpbmdsZSBkYXRlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydE9yTmV4dERhdGUgYXMgRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBzdGFydE9yTmV4dERhdGUgYXMgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjYy5ib3VuZGFyeSAmJiBpc0RhdGVJbkRhdGVSYW5nZShzdGFydE9yTmV4dERhdGUsIGFjYy5ib3VuZGFyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgaW4gdGhlIGRhdGUgcmFuZ2UsIHVzZXMgdGhlIHBpY2sgYXMgdGhlIGxhc3QgZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGFjYy5ib3VuZGFyeS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHN0YXJ0T3JOZXh0RGF0ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnYXJiaXRyYXJ5X3F1aWNrJykge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZGlmeSBib3VuZGFyeSB0byBtYXRjaCByYW5nZVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NhbWVEYXRlUmFuZ2UoYWNjLnJhbmdlLCByYW5nZSkgJiYgaXNTYW1lRGF0ZURheShyYW5nZS5lbmQsIHN0YXJ0T3JOZXh0RGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGNsaWNrZWQgb24gdGhlIGVuZCByYW5nZSwgdGhlbiBleHBhbmQgdGhlIGJvdW5kYXJ5IGFnYWluIHRvIHRoZSBmdWxsIHJhbmdlLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBkYXRlUmFuZ2UoeyAuLi5kYXRlUmFuZ2VJbnB1dCwgZGF0ZTogcmFuZ2Uuc3RhcnQgfSBhcyBEYXRlUmFuZ2VJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyByZXRhaW4gc2FtZSBib3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gYWNjLmJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gcG90ZW50aWFsQm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogbmV4dERhdGVSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0RGF0ZVJhbmdlOiBuZXh0RGF0ZVJhbmdlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICBsYXN0UGlja1R5cGU6IHBpY2tUeXBlLFxuICAgICAgICAgICAgICAgICAgbGFzdERhdGVSYW5nZTogcmVzdWx0Lmxhc3REYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICBib3VuZGFyeTogcmVzdWx0LmJvdW5kYXJ5ID8gKG1pbk1heENsYW1wKHJlc3VsdC5ib3VuZGFyeSkgYXMgRGF0ZVJhbmdlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHJhbmdlOiByZXN1bHQucmFuZ2UgPyAobWluTWF4Q2xhbXAocmVzdWx0LnJhbmdlKSBhcyBEYXRlUmFuZ2UpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICF4Lmxhc3REYXRlUmFuZ2UgfHwgeC5yYW5nZSAhPSBudWxsKSwgLy8gcGFzcyB0aHJvdWdoIG51bGwvZGF0ZSBjbGVhcmluZ3Mgb3IgcmFuZ2VzXG4gICAgICAgICAgICBtYXAoKHgpID0+IHgucmFuZ2UgPz8gbnVsbCkgLy8gcmV0dXJuIHRoZSByYW5nZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkb25seSBmdWxsQm91bmRhcnkkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5kYXRlUmFuZ2VTZWxlY3Rpb25Gb3JNb2RlKCdzaW5nbGUnKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgbGF0ZXN0Qm91bmRhcnkkOiBPYnNlcnZhYmxlPE1heWJlPERhdGVSYW5nZT4+ID0gdGhpcy5zZWxlY3Rpb25Nb2RlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobW9kZSkgPT4ge1xuICAgICAgaWYgKG1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snKSB7XG4gICAgICAgIC8vIGluIGFyYml0cmFyeV9xdWljayBtb2RlLCB0aGUgbGF0ZXN0IHZhbHVlIGlzIHRoZSBib3VuZGFyeSwgc2luY2Ugd2UgYWx3YXlzIHNldCB0aGUgdmFsdWUgaW1tZWRpYXRlbHkuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlSW5TeXN0ZW1UaW1lem9uZSQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5mdWxsQm91bmRhcnkkO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgb24gdGhlIGRhdGUgYW55IHRpbWUgdGhlIHNlbGVjdGlvbiBldmVudCBmcm9tIHRoZSBwaWNrZXIgb2NjdXJlZCwgb3RoZXJ3aXNlIHVzZSB0aGUgc3lzdGVtIHZhbHVlXG4gICAqL1xuICByZWFkb25seSBjYWxlbmRhckZvY3VzRGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT4gPSB0aGlzLl9zZWxlY3Rpb25FdmVudC5waXBlKHN0YXJ0V2l0aChudWxsKSkucGlwZShcbiAgICBzd2l0Y2hNYXAoKHNlbGVjdGlvbkV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2VsZWN0aW9uRXZlbnQgJiYgc2VsZWN0aW9uRXZlbnQudHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBzZWxlY3Rpb25FdmVudC5yYW5nZT8uc3RhcnQpIHtcbiAgICAgICAgcmV0dXJuIG9mKHNlbGVjdGlvbkV2ZW50LnJhbmdlLnN0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxCb3VuZGFyeSQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoZnVsbEJvdW5kYXJ5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZnVsbEJvdW5kYXJ5Py5zdGFydCA/PyBzZWxlY3Rpb25FdmVudD8ucmFuZ2U/LnN0YXJ0O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZmlsdGVyTWF5YmUoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGRhdGVSYW5nZVNlbGVjdGlvbiQ6IE9ic2VydmFibGU8TWF5YmU8RGF0ZVJhbmdlPj4gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnBpcGUoc3dpdGNoTWFwKChtb2RlKSA9PiB0aGlzLmRhdGVSYW5nZVNlbGVjdGlvbkZvck1vZGUobW9kZSkpKTtcblxuICByZWFkb25seSBjYWxlbmRhclNlbGVjdGlvbiQ6IE9ic2VydmFibGU8RGF0ZVBpY2tlckRhdGVSYW5nZTxEYXRlPiB8IG51bGw+ID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiAoeCA/IG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPERhdGU+KHguc3RhcnQsIHguZW5kKSA6IG51bGwpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGVuZERpc2FibGVkJCA9IHRoaXMuc2VsZWN0aW9uTW9kZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHggPT09ICdzaW5nbGUnKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaW5wdXRSYW5nZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sPE1heWJlPERhdGU+PihudWxsKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbDxNYXliZTxEYXRlPj4obnVsbClcbiAgfSk7XG5cbiAgZ2V0IGZpeGVkRGF0ZVJhbmdlRmllbGQoKTogRGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZFByb3BzIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcztcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb25Nb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNlbGVjdGlvbk1vZGU7XG4gIH1cblxuICBnZXQgdmFsdWVNb2RlKCk6IERieERhdGVUaW1lVmFsdWVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy52YWx1ZU1vZGUgPz8gRGJ4RGF0ZVRpbWVWYWx1ZU1vZGUuREFURTtcbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpOiBNYXliZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCB0aW1lem9uZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy50aW1lem9uZTtcbiAgfVxuXG4gIGdldCBzaG93VGltZXpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucHJvcHMuc2hvd1RpbWV6b25lID8/IHRydWU7XG4gIH1cblxuICBnZXQgcHJlc2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wcm9wcy5wcmVzZXRzO1xuICB9XG5cbiAgZ2V0IHNob3dSYW5nZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLnByb3BzLnNob3dSYW5nZUlucHV0ID8/IHRydWU7XG4gIH1cblxuICByZWFkb25seSBtaW5NYXhSYW5nZSQgPSB0aGlzLmxpbWl0RGF0ZVRpbWVJbnN0YW5jZSQucGlwZShcbiAgICBjb21iaW5lTGF0ZXN0V2l0aCh0aW1lcihNU19JTl9NSU5VVEUpKSwgLy8gcmVmcmVzaCBldmVyeSBtaW51dGVcbiAgICBtYXAoKFt4XSkgPT4geC5kYXRlUmFuZ2UoKSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lRGF0ZURheVJhbmdlKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1pbiQgPSB0aGlzLm1pbk1heFJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uc3RhcnQgPz8gbnVsbCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1heCQgPSB0aGlzLm1pbk1heFJhbmdlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geD8uZW5kID8/IG51bGwpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBwaWNrZXJGaWx0ZXIkOiBPYnNlcnZhYmxlPERlY2lzaW9uRnVuY3Rpb248RGF0ZSB8IG51bGw+PiA9IHRoaXMuY29uZmlnJC5waXBlKFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBkYXRlVGltZU1pbnV0ZVdob2xlRGF5RGVjaXNpb25GdW5jdGlvbih4LCBmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeDogRGF0ZSB8IG51bGwpID0+ICh4ICE9IG51bGwgPyBmaWx0ZXIoeCkgOiB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFBpY2tlckZpbHRlcjogRGVjaXNpb25GdW5jdGlvbjxEYXRlIHwgbnVsbD4gPSAoKSA9PiB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGJ4RGF0ZVRpbWVGaWVsZENvbmZpZ1NlcnZpY2U6IERieERhdGVUaW1lRmllbGRNZW51UHJlc2V0c1NlcnZpY2UpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMubmV4dCh0aGlzLmZvcm1Db250cm9sKTtcblxuICAgIGNvbnN0IGRhdGVSYW5nZVNlbGVjdGlvbiA9IHRoaXMuZGF0ZVJhbmdlU2VsZWN0aW9uJC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcblxuICAgIGNvbnN0IHNldElucHV0Rm9ybVZhbHVlID0gKHZhbHVlOiBNYXliZTxEYXRlUmFuZ2U+KSA9PiB7XG4gICAgICBpZiAoIWlzU2FtZURhdGVEYXlSYW5nZSh2YWx1ZSwgdGhpcy5pbnB1dFJhbmdlRm9ybS52YWx1ZSBhcyBQYXJ0aWFsPERhdGVSYW5nZT4pKSB7XG4gICAgICAgIHRoaXMuaW5wdXRSYW5nZUZvcm0uc2V0VmFsdWUoe1xuICAgICAgICAgIHN0YXJ0OiB2YWx1ZT8uc3RhcnQgPz8gbnVsbCxcbiAgICAgICAgICBlbmQ6IHZhbHVlPy5lbmQgPz8gbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5fc3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGNvbWJpbmVMYXRlc3RXaXRoKHRoaXMudGltZXpvbmVJbnN0YW5jZSQucGlwZShtYXAoKHRpbWV6b25lSW5zdGFuY2UpID0+IGRieEZpeGVkRGF0ZVJhbmdlT3V0cHV0VmFsdWVGYWN0b3J5KHRoaXMudmFsdWVNb2RlLCB0aW1lem9uZUluc3RhbmNlKSkpKSxcbiAgICAgICAgdGhyb3R0bGVUaW1lKFRJTUVfT1VUUFVUX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiBmYWxzZSwgdHJhaWxpbmc6IHRydWUgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoW2N1cnJlbnRWYWx1ZSwgdmFsdWVGYWN0b3J5XSkgPT4ge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2VTZWxlY3Rpb24ucGlwZShcbiAgICAgICAgICAgIHNraXBGaXJzdE1heWJlKCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxEYXRlUmFuZ2U+Pihpc1NhbWVEYXRlRGF5UmFuZ2UpLFxuICAgICAgICAgICAgbWFwKCh4KSA9PiBbeCwgY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldIGFzIFt0eXBlb2YgeCwgdHlwZW9mIGN1cnJlbnRWYWx1ZSwgdHlwZW9mIHZhbHVlRmFjdG9yeV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtyYXdWYWx1ZSwgY3VycmVudFZhbHVlLCB2YWx1ZUZhY3RvcnldKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmF3VmFsdWUgPyB2YWx1ZUZhY3RvcnkocmF3VmFsdWUpIDogbnVsbDtcbiAgICAgICAgY29uc3QgaXNTYW1lUmFuZ2UgPSBkYnhEYXRlUmFuZ2VJc1NhbWVEYXRlUmFuZ2VGaWVsZFZhbHVlKHZhbHVlLCBjdXJyZW50VmFsdWUpO1xuXG4gICAgICAgIGlmICghaXNTYW1lUmFuZ2UpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaW5wdXQgdGV4dCBhZ2FpblxuICAgICAgICAgIHNldElucHV0Rm9ybVZhbHVlKHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlLm5leHQoYXNPYnNlcnZhYmxlRnJvbUdldHRlcih0aGlzLnNlbGVjdGlvbk1vZGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGUkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID0geCkpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0U3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0ZVJhbmdlSW5wdXQkLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMuX2N1cnJlbnREYXRlUmFuZ2VJbnB1dCA9IHgpKTtcblxuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudmFsdWVJblN5c3RlbVRpbWV6b25lJC5zdWJzY3JpYmUoKHg6IE1heWJlPERhdGVSYW5nZT4pID0+IHtcbiAgICAgIHNldElucHV0Rm9ybVZhbHVlKHgpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2hvd1JhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy52YWx1ZUluU3lzdGVtVGltZXpvbmUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMDApLCAvLyB0aHJvdHRsZSB0byBwcmV2ZW50IHRoZSB2YWx1ZSBmcm9tIGNoYW5naW5nIHRvbyBmYXN0XG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0UmFuZ2VGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFN0cmluZyA9IHRoaXMuc3RhcnREYXRlSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LnZhbHVlO1xuICAgICAgICAgICAgICAgIGxldCB2YWxpZCA9IGlzTW9udGhEYXlTbGFzaERhdGUoc3RhcnRTdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkICYmIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZW5kU3RyaW5nID0gdGhpcy5lbmREYXRlSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgdmFsaWQgPSBpc01vbnRoRGF5U2xhc2hEYXRlKGVuZFN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkOyAvLyBtdXN0IGJlIGEgdmFsaWQgdGV4dCBpbnB1dFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgbWFwKCh4KSA9PiB4IGFzIE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZURhdGVSYW5nZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh4OiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlUmFuZ2UoeD8uc3RhcnQgPyB7IHN0YXJ0OiB4LnN0YXJ0IH0gOiBudWxsLCAnaW5wdXQnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJhbmdlVG9TZXQ6IE1heWJlPFBhcnRpYWw8RGF0ZVJhbmdlPj4gPSB4O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudFNlbGVjdGlvbk1vZGUgPT09ICdhcmJpdHJhcnlfcXVpY2snICYmIHRoaXMuX2xhdGVzdEJvdW5kYXJ5ICYmIHg/LnN0YXJ0ICYmIHg/LmVuZCkge1xuICAgICAgICAgICAgICBpZiAoIWlzRGF0ZUluRGF0ZVJhbmdlKHguc3RhcnQsIHRoaXMuX2xhdGVzdEJvdW5kYXJ5KSkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBlbmQgZGF0ZSBpdCBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHJhbmdlIChpLmUuIGEgcmFuZ2Ugd2FzIHR5cGVkIGluIG9ubHkgdG8gdGhlIHN0YXJ0IGRhdGUpIHRoZW4gc2V0IHRoZSBlbmQgdG8gdGhlIGJvdW5kYXJ5IGVuZFxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kYXJ5ID0gZGF0ZVJhbmdlKHsgLi4udGhpcy5fY3VycmVudERhdGVSYW5nZUlucHV0LCBkYXRlOiB4LnN0YXJ0IH0gYXMgRGF0ZVJhbmdlSW5wdXQpO1xuICAgICAgICAgICAgICAgIHJhbmdlVG9TZXQgPSB7IHN0YXJ0OiB4LnN0YXJ0LCBlbmQ6IGJvdW5kYXJ5LmVuZCB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVJhbmdlKHJhbmdlVG9TZXQsICdpbnB1dCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fbGF0ZXN0Qm91bmRhcnlTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5sYXRlc3RCb3VuZGFyeSQuc3Vic2NyaWJlKCh4KSA9PiAodGhpcy5fbGF0ZXN0Qm91bmRhcnkgPSB4KSk7XG4gICAgdGhpcy5fZGF0ZVJhbmdlSW5wdXQubmV4dChhc09ic2VydmFibGVGcm9tR2V0dGVyKHRoaXMuZml4ZWREYXRlUmFuZ2VGaWVsZC5kYXRlUmFuZ2VJbnB1dCkpO1xuXG4gICAgdGhpcy5fZGlzYWJsZUVuZFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmVuZERpc2FibGVkJC5zdWJzY3JpYmUoKGRpc2FibGVkKSA9PiB7XG4gICAgICBjb25zdCBlbmQgPSB0aGlzLmlucHV0UmFuZ2VGb3JtLmdldCgnZW5kJyk7XG5cbiAgICAgIGlmIChlbmQpIHtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgZW5kLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmQuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0UGlja2VyQ29uZmlnID0gdGhpcy5maXhlZERhdGVSYW5nZUZpZWxkLnBpY2tlckNvbmZpZztcbiAgICB0aGlzLl9jb25maWcubmV4dChpbnB1dFBpY2tlckNvbmZpZyA/IGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIoaW5wdXRQaWNrZXJDb25maWcpIDogdW5kZWZpbmVkKTtcblxuICAgIC8vIFNldCBkZWZhdWx0IHRpbWV6b25lIGlmIHByb3ZpZGVkLlxuICAgIGlmICh0aGlzLnRpbWV6b25lICYmICF0aGlzLmZpeGVkRGF0ZVJhbmdlRmllbGQuZnVsbERheUluVVRDKSB7XG4gICAgICB0aGlzLl90aW1lem9uZS5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy50aW1lem9uZSkpO1xuICAgIH1cblxuICAgIC8vIFdhdGNoIGZvciBkaXNhYmxlZCBjaGFuZ2VzIHNvIHdlIGNhbiBwcm9wb2dhdGUgdGhlbSBwcm9wZXJseS5cbiAgICB0aGlzLmZvcm1Db250cm9sLnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSgoZGlzYWJsZWQpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmlucHV0UmFuZ2VGb3JtLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wdXRSYW5nZUZvcm0uZW5hYmxlKCk7XG5cbiAgICAgICAgdGhpcy5lbmREaXNhYmxlZCQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGRpc2FibGVkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5pbnB1dFJhbmdlRm9ybS5nZXQoJ2VuZCcpO1xuXG4gICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgIGVuZC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbmQuZW5hYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByZXNldHMgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fcHJlc2V0cy5uZXh0KGFzT2JzZXJ2YWJsZUZyb21HZXR0ZXIodGhpcy5wcmVzZXRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ByZXNldHMubmV4dCh0aGlzLmRieERhdGVUaW1lRmllbGRDb25maWdTZXJ2aWNlLmNvbmZpZ3VyYXRpb25zJCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlRGF0ZVN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLmNhbGVuZGFyRm9jdXNEYXRlJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuYWN0aXZlRGF0ZSA9IHg7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuX3N1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5faW5wdXRSYW5nZUZvcm1TdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2lucHV0UmFuZ2VGb3JtVmFsdWVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2RhdGVSYW5nZUlucHV0U3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9uTW9kZVN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fbGF0ZXN0Qm91bmRhcnlTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2Rpc2FibGVFbmRTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2FjdGl2ZURhdGVTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2NvbmZpZy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUuY29tcGxldGUoKTtcbiAgICB0aGlzLl9kYXRlUmFuZ2VJbnB1dC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3RpbWV6b25lLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcHJlc2V0cy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3NlbGVjdGlvbkV2ZW50LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2xPYnMuY29tcGxldGUoKTtcbiAgfVxuXG4gIHNlbGVjdGVkQ2hhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRlUmFuZ2UoZGF0ZSA/IHsgc3RhcnQ6IGRhdGUgfSA6IG51bGwsICdjYWxlbmRhcicpO1xuICB9XG5cbiAgc2V0RGF0ZVJhbmdlKHJhbmdlOiBNYXliZTxQYXJ0aWFsPERhdGVSYW5nZT4+LCB0eXBlOiBTZWxlY3RlZERhdGVFdmVudFR5cGUpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25FdmVudC5uZXh0KHsgdHlwZSwgcmFuZ2UgfSk7XG4gIH1cblxuICBfY3JlYXRlRGF0ZVJhbmdlKGRhdGU6IE1heWJlPERhdGU+KTogTWF5YmU8RGF0ZVJhbmdlPiB7XG4gICAgcmV0dXJuIGRhdGUgPyBkYXRlUmFuZ2UoeyAuLi50aGlzLl9jdXJyZW50RGF0ZVJhbmdlSW5wdXQsIGRhdGUgfSBhcyBEYXRlUmFuZ2VJbnB1dCkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieEZpeGVkRGF0ZVJhbmdlRmllbGRTZWxlY3Rpb25TdHJhdGVneTxEPiBpbXBsZW1lbnRzIE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5PEQ+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPEQ+LCByZWFkb25seSBkYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50OiBEYnhGaXhlZERhdGVSYW5nZUZpZWxkQ29tcG9uZW50KSB7fVxuXG4gIHNlbGVjdGlvbkZpbmlzaGVkKGRhdGU6IEQgfCBudWxsLCBjdXJyZW50UmFuZ2U6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4sIGV2ZW50OiBFdmVudCk6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIC8vIHVudXNlZFxuICAgIHJldHVybiBjdXJyZW50UmFuZ2U7XG4gIH1cblxuICBjcmVhdGVQcmV2aWV3KGFjdGl2ZURhdGU6IEQgfCBudWxsLCBjdXJyZW50UmFuZ2U6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4sIGV2ZW50OiBFdmVudCk6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIGNvbnN0IHsgY3VycmVudFNlbGVjdGlvbk1vZGUgfSA9IHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudDtcbiAgICBpZiAoYWN0aXZlRGF0ZSAhPSBudWxsICYmIGN1cnJlbnRTZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xuICAgICAgY29uc3QgbGF0ZXN0Qm91bmRhcnkgPSB0aGlzLmRieEZpeGVkRGF0ZVJhbmdlRmllbGRDb21wb25lbnQubGF0ZXN0Qm91bmRhcnk7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGFjdGl2ZURhdGUpO1xuXG4gICAgICBpZiAobGF0ZXN0Qm91bmRhcnkgJiYgKGN1cnJlbnRTZWxlY3Rpb25Nb2RlID09PSAnbm9ybWFsJyB8fCBpc0RhdGVJbkRhdGVSYW5nZShkYXRlLCBsYXRlc3RCb3VuZGFyeSkpKSB7XG4gICAgICAgIGNvbnN0IGV4YW1wbGVEYXRlUmFuZ2UgPSB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UobGF0ZXN0Qm91bmRhcnkpO1xuICAgICAgICByZXR1cm4gZXhhbXBsZURhdGVSYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVJhbmdlV2l0aERhdGUoYWN0aXZlRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEYXRlUmFuZ2VXaXRoRGF0ZShpbnB1dDogRCB8IG51bGwpOiBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+IHtcbiAgICBsZXQgZGF0ZVJhbmdlOiBNYXliZTxEYXRlUmFuZ2U+O1xuXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlRnJvbUFkYXB0ZXJEYXRlKGlucHV0KTtcbiAgICAgIGRhdGVSYW5nZSA9IHRoaXMuZGJ4Rml4ZWREYXRlUmFuZ2VGaWVsZENvbXBvbmVudC5fY3JlYXRlRGF0ZVJhbmdlKGRhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVEYXRlUmFuZ2UoZGF0ZVJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURhdGVSYW5nZShpbnB1dDogTWF5YmU8RGF0ZVJhbmdlPik6IERhdGVQaWNrZXJEYXRlUmFuZ2U8RD4ge1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5zdGFydCksIHRoaXMuYWRhcHRlckRhdGVGcm9tRGF0ZShpbnB1dC5lbmQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlUGlja2VyRGF0ZVJhbmdlPEQ+KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVGcm9tQWRhcHRlckRhdGUoaW5wdXQ6IEQpIHtcbiAgICBjb25zdCBkYXk6IERheU9mTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKGlucHV0KTtcbiAgICBjb25zdCBtb250aEluZGV4OiBEYXRlTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChpbnB1dCk7XG4gICAgY29uc3QgeWVhcjogWWVhck51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoaW5wdXQpO1xuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG5cbiAgYWRhcHRlckRhdGVGcm9tRGF0ZShkYXRlOiBEYXRlKTogRCB7XG4gICAgY29uc3QgZGF5OiBEYXlPZk1vbnRoID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgbW9udGhJbmRleDogRGF0ZU1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgIGNvbnN0IHllYXI6IFllYXJOdW1iZXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkXCI+XG4gIDxtYXQtY2FsZW5kYXIgI2NhbGVuZGFyVmlldyBbc2VsZWN0ZWRdPVwiY2FsZW5kYXJTZWxlY3Rpb24kIHwgYXN5bmNcIiBbZGF0ZUZpbHRlcl09XCIocGlja2VyRmlsdGVyJCB8IGFzeW5jKSB8fCBkZWZhdWx0UGlja2VyRmlsdGVyXCIgW21pbkRhdGVdPVwibWluJCB8IGFzeW5jXCIgW21heERhdGVdPVwibWF4JCB8IGFzeW5jXCIgKHNlbGVjdGVkQ2hhbmdlKT1cInNlbGVjdGVkQ2hhbmdlKCRldmVudClcIj48L21hdC1jYWxlbmRhcj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0XCIgYXBwZWFyYW5jZT1cImZpbGxcIj5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgKm5nSWY9XCJzaG93UmFuZ2VJbnB1dFwiIFtmb3JtR3JvdXBdPVwiaW5wdXRSYW5nZUZvcm1cIj5cbiAgICAgIDxpbnB1dCAjc3RhcnREYXRlSW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCIgcGxhY2Vob2xkZXI9XCJTdGFydCBkYXRlXCIgLz5cbiAgICAgIDxpbnB1dCAjZW5kRGF0ZUlucHV0IFtuZ0NsYXNzXT1cIihlbmREaXNhYmxlZCQgfCBhc3luYykgPyAnZGJ4LWZpeGVkZGF0ZXJhbmdlLWZpZWxkLWlucHV0LWVuZCcgOiAnJ1wiIFthdHRyLnRhYmluZGV4XT1cIihlbmREaXNhYmxlZCQgfCBhc3luYykgPyAtMSA6IDBcIiBtYXRFbmREYXRlIGZvcm1Db250cm9sTmFtZT1cImVuZFwiIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKVwiPkRhdGUgcmFuZ2UgaXMgcmVxdWlyZWQ8L21hdC1lcnJvcj5cbjwvZGl2PlxuIl19
|
|
@@ -4523,6 +4523,13 @@ class DbxFixedDateRangeFieldComponent extends FieldType$1 {
|
|
|
4523
4523
|
boundary: range,
|
|
4524
4524
|
range
|
|
4525
4525
|
};
|
|
4526
|
+
// for normal mode we want to protect against "start" being input, then the output being passed,
|
|
4527
|
+
// and then the next click being treated as another "start" instead of an "end".
|
|
4528
|
+
if (mode === 'normal' && acc.lastPickType === 'start' && isSameDateDay(startOrNextDate, end)) {
|
|
4529
|
+
if (isSameDateDay(startOrNextDate, acc.lastDateRange?.start)) {
|
|
4530
|
+
pickType = 'startRepeat';
|
|
4531
|
+
}
|
|
4532
|
+
}
|
|
4526
4533
|
}
|
|
4527
4534
|
else {
|
|
4528
4535
|
let range = undefined;
|
|
@@ -4533,6 +4540,9 @@ class DbxFixedDateRangeFieldComponent extends FieldType$1 {
|
|
|
4533
4540
|
boundary = undefined;
|
|
4534
4541
|
pickType = acc.lastPickType === 'start' ? 'end' : 'start';
|
|
4535
4542
|
}
|
|
4543
|
+
else if (acc.lastPickType === 'startRepeat') {
|
|
4544
|
+
pickType = 'end';
|
|
4545
|
+
}
|
|
4536
4546
|
else {
|
|
4537
4547
|
// if the pick is outside the boundary, then consider it a start pick type.
|
|
4538
4548
|
pickType = acc.lastPickType === 'start' && acc.boundary && isDateInDateRange(startOrNextDate, acc.boundary) ? 'end' : 'start';
|
|
@@ -4541,15 +4551,36 @@ class DbxFixedDateRangeFieldComponent extends FieldType$1 {
|
|
|
4541
4551
|
switch (pickType) {
|
|
4542
4552
|
case 'end':
|
|
4543
4553
|
const lastStart = acc.lastDateRange?.start;
|
|
4554
|
+
let boundaryToCheck;
|
|
4544
4555
|
const selectionIsBeforePreviousSelection = !lastStart || isBefore(startOrNextDate, lastStart);
|
|
4545
|
-
|
|
4546
|
-
|
|
4556
|
+
let nextStart;
|
|
4557
|
+
let nextEnd;
|
|
4558
|
+
if (selectionIsBeforePreviousSelection) {
|
|
4559
|
+
nextStart = startOrNextDate;
|
|
4560
|
+
nextEnd = lastStart;
|
|
4561
|
+
boundaryToCheck = potentialBoundary;
|
|
4562
|
+
}
|
|
4563
|
+
else {
|
|
4564
|
+
nextStart = lastStart;
|
|
4565
|
+
nextEnd = startOrNextDate;
|
|
4566
|
+
boundaryToCheck = dateRange({ ...dateRangeInput, date: nextStart });
|
|
4567
|
+
}
|
|
4568
|
+
// Recalculate the boundary using the next start date. If it is outside the selectable range, then it becomes a "start" pick type.
|
|
4569
|
+
if (isBefore(boundaryToCheck.end, nextEnd)) {
|
|
4570
|
+
// TODO: Allow changing the behavior to fill the entire range instead of just resetting it entirely
|
|
4571
|
+
nextStart = startOrNextDate;
|
|
4572
|
+
nextEnd = startOrNextDate;
|
|
4573
|
+
pickType = 'start';
|
|
4574
|
+
boundary = boundaryToCheck;
|
|
4575
|
+
}
|
|
4576
|
+
else {
|
|
4577
|
+
boundary = range;
|
|
4578
|
+
}
|
|
4547
4579
|
// if we're picking the end then set the range.
|
|
4548
4580
|
range = {
|
|
4549
4581
|
start: nextStart,
|
|
4550
4582
|
end: nextEnd
|
|
4551
4583
|
};
|
|
4552
|
-
boundary = range;
|
|
4553
4584
|
break;
|
|
4554
4585
|
case 'start':
|
|
4555
4586
|
// retain the boundary as potential boundary, and set our new range from the single date.
|