@tiba-spark/client-shared-lib 25.3.0-516 → 25.3.0-523
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/libraries/constants/analytics-constants.mjs +3 -1
- package/esm2022/libraries/utils/custom-validator.util.mjs +33 -33
- package/fesm2022/tiba-spark-client-shared-lib.mjs +36 -34
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/constants/analytics-constants.d.ts +3 -1
- package/libraries/constants/analytics-constants.d.ts.map +1 -1
- package/libraries/utils/custom-validator.util.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -50,10 +50,12 @@ export var AnalyticsEventsText;
|
|
|
50
50
|
AnalyticsEventsText["DuplicateRateConditions"] = "Duplicate rate conditions";
|
|
51
51
|
AnalyticsEventsText["EditConditionRate"] = "Edit condition rate";
|
|
52
52
|
AnalyticsEventsText["HttpError"] = "Http Error";
|
|
53
|
+
AnalyticsEventsText["EventCreateColor"] = "Event create color";
|
|
54
|
+
AnalyticsEventsText["EventCreateModel"] = "Event create model";
|
|
53
55
|
})(AnalyticsEventsText || (AnalyticsEventsText = {}));
|
|
54
56
|
export const ReportMethodDictionary = {
|
|
55
57
|
[FileGenerateMethod.viewPDF]: `View report PDF`,
|
|
56
58
|
[FileGenerateMethod.downloadExcel]: `Download report Excel`,
|
|
57
59
|
[FileGenerateMethod.downloadPDF]: `Download report PDF`,
|
|
58
60
|
};
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLWNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvY29uc3RhbnRzL2FuYWx5dGljcy1jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsTUFBTSxDQUFOLElBQVksbUJBb0RYO0FBcERELFdBQVksbUJBQW1CO0lBQzdCLDhEQUF1QyxDQUFBO0lBQ3ZDLDJEQUFvQyxDQUFBO0lBQ3BDLDBDQUFtQixDQUFBO0lBQ25CLG1FQUE0QyxDQUFBO0lBQzVDLGtEQUEyQixDQUFBO0lBQzNCLHFEQUE4QixDQUFBO0lBQzlCLG1EQUE0QixDQUFBO0lBQzVCLHFEQUE4QixDQUFBO0lBQzlCLHFEQUE4QixDQUFBO0lBQzlCLHFEQUE4QixDQUFBO0lBQzlCLGdFQUF5QyxDQUFBO0lBQ3pDLDhFQUF1RCxDQUFBO0lBQ3ZELDJFQUFvRCxDQUFBO0lBQ3BELGtGQUEyRCxDQUFBO0lBQzNELHVGQUFnRSxDQUFBO0lBQ2hFLGlFQUEwQyxDQUFBO0lBQzFDLGdFQUF5QyxDQUFBO0lBQ3pDLGdFQUF5QyxDQUFBO0lBQ3pDLGdFQUF5QyxDQUFBO0lBQ3pDLHdFQUFpRCxDQUFBO0lBQ2pELGdFQUF5QyxDQUFBO0lBQ3pDLDBFQUFtRCxDQUFBO0lBQ25ELGdFQUF5QyxDQUFBO0lBQ3pDLDBEQUFtQyxDQUFBO0lBQ25DLHdEQUFpQyxDQUFBO0lBQ2pDLDhFQUF1RCxDQUFBO0lBQ3ZELGtFQUEyQyxDQUFBO0lBQzNDLHFFQUE4QyxDQUFBO0lBQzlDLDZGQUFzRSxDQUFBO0lBQ3RFLHdFQUFpRCxDQUFBO0lBQ2pELG9FQUE2QyxDQUFBO0lBQzdDLHNFQUErQyxDQUFBO0lBQy9DLDBFQUFtRCxDQUFBO0lBQ25ELG1FQUE0QyxDQUFBO0lBQzVDLHNFQUErQyxDQUFBO0lBQy9DLDREQUFxQyxDQUFBO0lBQ3JDLHNFQUErQyxDQUFBO0lBQy9DLGdFQUF5QyxDQUFBO0lBQ3pDLG1EQUE0QixDQUFBO0lBQzVCLHNFQUErQyxDQUFBO0lBQy9DLDREQUFxQyxDQUFBO0lBQ3JDLHdEQUFpQyxDQUFBO0lBQ2pDLDhFQUF1RCxDQUFBO0lBQ3ZELG9FQUE2QyxDQUFBO0lBQzdDLDhEQUF1QyxDQUFBO0lBQ3ZDLG9FQUE2QyxDQUFBO0lBQzdDLDRFQUFxRCxDQUFBO0lBQ3JELGdFQUF5QyxDQUFBO0lBQ3pDLCtDQUF3QixDQUFBO0lBQ3hCLDhEQUF1QyxDQUFBO0lBQ3ZDLDhEQUF1QyxDQUFBO0FBQ3pDLENBQUMsRUFwRFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQW9EOUI7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLGlCQUFpQjtJQUMvQyxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxFQUFFLHVCQUF1QjtJQUMzRCxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLHFCQUFxQjtDQUN4RCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZUdlbmVyYXRlTWV0aG9kIH0gZnJvbSBcIi4uL3V0aWxzL2ZpbGUudXRpbFwiO1xuXG5leHBvcnQgZW51bSBBbmFseXRpY3NFdmVudHNUZXh0IHtcbiAgUmVwb3J0VHlwZSA9ICdFdmVudCBjaG9vc2UgcmVwb3J0IHR5cGUnLFxuICBTZWxlY3RSZXBvcnQgPSAnRXZlbnQgc2VsZWN0IHJlcG9ydCcsXG4gIENvdXBvbnMgPSBcIkNvdXBvbnNcIixcbiAgU2VuZENvdXBvbnNUb0VtYWlsID0gXCJTZW5kIENvdXBvbnMgdG8gRW1haWxcIixcbiAgTWFya0FzVXNlZCA9IFwiTWFyayBhcyB1c2VkXCIsXG4gIEdlbmVyYWxFcnJvciA9IFwiR2VuZXJhbCBFcnJvclwiLFxuICBQcmludENvdXBvbiA9IFwiUHJpbnQgQ291cG9uXCIsXG4gIERlbGV0ZUNvdXBvbiA9IFwiRGVsZXRlIENvdXBvblwiLFxuICBVcGRhdGVDb3Vwb24gPSBcIlVwZGF0ZSBDb3Vwb25cIixcbiAgQ3JlYXRlQ291cG9uID0gXCJDcmVhdGUgQ291cG9uXCIsXG4gIENyZWF0ZUNvdXBvbkNsaWNrID0gXCJDcmVhdGUgQ291cG9uIGNsaWNrXCIsXG4gIFNlbmRDb3Vwb25zVG9FbWFpbENsaWNrID0gXCJTZW5kIENvdXBvbnMgdG8gRW1haWwgY2xpY2tcIixcbiAgQ291cG9uc0ZpbHRlckJ5QWNjb3VudCA9IFwiQ291cG9ucyBmaWx0ZXIgYnkgYWNjb3VudFwiLFxuICBDb3Vwb25zRmlsdGVyQnlTdWJBY2NvdW50ID0gXCJDb3Vwb25zIGZpbHRlciBieSBzdWIgYWNjb3VudFwiLFxuICBjb3Vwb25CYXRjaERhdGVWYWxpZGl0eUNoYW5nZSA9IFwiQ291cG9uIGZpbHRlciBieSBkYXRlIHZhbGlkaXR5XCIsXG4gIGltcG9ydGluZ01vbnRobGllcyA9IFwiSW1wb3J0aW5nIG1vbnRobGllc1wiLFxuICBDcmVhdGVSZXN0cmljdENhciA9IFwiQ3JlYXRlIFJlc3RyaWN0IGNhclwiLFxuICBVcGRhdGVSZXN0cmljdENhciA9IFwiVXBkYXRlIFJlc3RyaWN0IGNhclwiLFxuICBEZWxldGVDaGFyZ2VUYWJsZSA9IFwiRGVsZXRlIENoYXJnZSBUYWJsZVwiLFxuICBEZWxldGVDaGFyZ2VDb25kaXRpb24gPSBcIkRlbGV0ZSBDaGFyZ2UgQ29uZGl0aW9uXCIsXG4gIFNlYXJjaENoYXJnZVRhYmxlID0gXCJTZWFyY2ggY2hhcmdlIHRhYmxlXCIsXG4gIFNlbGVjdEJ5UmVsYXRlZFRvUmF0ZSA9IFwiU2VsZWN0IGJ5IHJlbGF0ZWQgdG8gcmF0ZVwiLFxuICBWaWV3UmF0ZVN0cnVjdHVyZSA9IFwiVmlldyBSYXRlIFN0cnVjdHVyZVwiLFxuICBBZGRSYXRlQ2xpY2tlZCA9IFwiQWRkIHJhdGUgY2xpY2tlZFwiLFxuICBDYW5jZWxBZGRSYXRlID0gXCJDYW5jZWwgYWRkIHJhdGVcIixcbiAgTW92ZVRvTG90UmF0ZVN0cnVjdHVyZSA9IFwiTW92ZSB0byBsb3QgKHJhdGUgc3RydWN0dXJlKVwiLFxuICBWaWV3UmF0ZUNvbmRpdGlvbnMgPSBcIlZpZXcgcmF0ZSBjb25kaXRpb25zXCIsXG4gIFNlYXJjaFJhdGVDb25kaXRpb24gPSBcIlNlYXJjaCByYXRlIGNvbmRpdGlvbnNcIixcbiAgU2VsZWN0Q29uZGl0aW9uQnlSZWxhdGVkVG9SYXRlID0gXCJTZWxlY3QgY29uZGl0aW9uIGJ5IHJlbGF0ZWQgdG8gcmF0ZVwiLFxuICBDaGFyZ2VUYWJsZU5hdmlnYXRpb24gPSBcIkNoYXJnZSB0YWJsZSBuYXZpZ2F0aW9uXCIsXG4gIERlbGV0ZVJhdGVDb25kaXRpb24gPSBcIkRlbGV0ZSByYXRlIGNvbmRpdGlvblwiLFxuICBSZW9yZGVyUmF0ZUNvbmRpdGlvbiA9IFwiUmVvcmRlciByYXRlIGNvbmRpdGlvblwiLFxuICBDaGFyZ2VDb25kaXRpb25SZW9yZGVyID0gXCJDaGFyZ2UgY29uZGl0aW9uIHJlb3JkZXJcIixcbiAgU2VnbWVudGF0aW9uUmVvcmRlciA9IFwiU2VnbWVudGF0aW9uIHJlb3JkZXJcIixcbiAgQ2hhcmdlQ29uZGl0aW9uQWRkZWQgPSBcIkNoYXJnZSBjb25kaXRpb24gYWRkZWRcIixcbiAgRWRpdFJhdGVDbGlja2VkID0gXCJFZGl0IHJhdGUgY2xpY2tlZFwiLFxuICBEdXBsaWNhdGVSYXRlQ2xpY2tlZCA9IFwiRHVwbGljYXRlIHJhdGUgY2xpY2tlZFwiLFxuICBEZWxldGVSYXRlQ2xpY2tlZCA9IFwiRGVsZXRlIHJhdGUgY2xpY2tlZFwiLFxuICBSYXRlRGVsZXRlZCA9IFwiUmF0ZSBkZWxldGVkXCIsXG4gIFJhdGVOdW1iZXJQcm90ZWN0aW9uID0gXCJSYXRlIG51bWJlciBwcm90ZWN0aW9uXCIsXG4gIENyZWF0ZVRlc3RQbGFuZSA9IFwiQ3JlYXRlIHRlc3QgcGxhbmVcIixcbiAgUmVydW5UZXN0UmF0ZSA9IFwiUmVydW4gdGVzdCByYXRlXCIsXG4gIERlbGV0ZUNoYXJnZVNlZ21lbnRhdGlvbiA9IFwiRGVsZXRlIGNoYXJnZSBzZWdtZW50YXRpb25cIixcbiAgRWRpdENoYXJnZUNvbmRpdGlvbiA9IFwiRWRpdCBjaGFyZ2UgY29uZGl0aW9uXCIsXG4gIEFkZENvbmRpdGlvblJhdGUgPSBcIkFkZCBjb25kaXRpb24gcmF0ZVwiLFxuICBSYXRlU2V0dGluZ3NVcGRhdGVkID0gXCJSYXRlIHNldHRpbmdzIHVwZGF0ZWRcIixcbiAgRHVwbGljYXRlUmF0ZUNvbmRpdGlvbnMgPSBcIkR1cGxpY2F0ZSByYXRlIGNvbmRpdGlvbnNcIixcbiAgRWRpdENvbmRpdGlvblJhdGUgPSBcIkVkaXQgY29uZGl0aW9uIHJhdGVcIixcbiAgSHR0cEVycm9yID0gXCJIdHRwIEVycm9yXCIsXG4gIEV2ZW50Q3JlYXRlQ29sb3IgPSBcIkV2ZW50IGNyZWF0ZSBjb2xvclwiLFxuICBFdmVudENyZWF0ZU1vZGVsID0gXCJFdmVudCBjcmVhdGUgbW9kZWxcIlxufVxuXG5leHBvcnQgY29uc3QgUmVwb3J0TWV0aG9kRGljdGlvbmFyeSA9IHtcbiAgW0ZpbGVHZW5lcmF0ZU1ldGhvZC52aWV3UERGXTogYFZpZXcgcmVwb3J0IFBERmAsXG4gIFtGaWxlR2VuZXJhdGVNZXRob2QuZG93bmxvYWRFeGNlbF06IGBEb3dubG9hZCByZXBvcnQgRXhjZWxgLFxuICBbRmlsZUdlbmVyYXRlTWV0aG9kLmRvd25sb2FkUERGXTogYERvd25sb2FkIHJlcG9ydCBQREZgLFxufVxuIl19
|
|
@@ -233,23 +233,23 @@ export class TibaValidators {
|
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
235
|
static fromToNumberValidator(fromControlName, toControlName) {
|
|
236
|
-
return (
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
toControl.setErrors({});
|
|
249
|
-
toControl.updateValueAndValidity();
|
|
250
|
-
}
|
|
236
|
+
return (formGroup) => {
|
|
237
|
+
const fromControl = formGroup.get(fromControlName);
|
|
238
|
+
const toControl = formGroup.get(toControlName);
|
|
239
|
+
// Keep existing errors
|
|
240
|
+
const existingFromErrors = fromControl.errors || {};
|
|
241
|
+
const existingToErrors = toControl.errors || {};
|
|
242
|
+
// Remove only our custom errors
|
|
243
|
+
delete existingFromErrors[Localization.form_validation_invalid_number_range];
|
|
244
|
+
delete existingToErrors[Localization.form_validation_invalid_number_range];
|
|
245
|
+
if (this.isValueGreaterThanOrEqualTo(fromControl, toControl)) {
|
|
246
|
+
existingFromErrors[Localization.form_validation_invalid_number_range] = true;
|
|
247
|
+
existingToErrors[Localization.form_validation_invalid_number_range] = true;
|
|
251
248
|
}
|
|
252
|
-
|
|
249
|
+
// Apply back errors or null if none
|
|
250
|
+
fromControl.setErrors(Object.keys(existingFromErrors).length ? existingFromErrors : null);
|
|
251
|
+
toControl.setErrors(Object.keys(existingToErrors).length ? existingToErrors : null);
|
|
252
|
+
return null;
|
|
253
253
|
};
|
|
254
254
|
}
|
|
255
255
|
static { this.calculateBalance = (unitsValue, balanceValue) => { return unitsValue + balanceValue; }; }
|
|
@@ -312,23 +312,23 @@ export class TibaValidators {
|
|
|
312
312
|
};
|
|
313
313
|
}
|
|
314
314
|
static fromToTimeRange(fromTimeField, toTimeField) {
|
|
315
|
-
return (
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
toControl.setErrors({});
|
|
328
|
-
toControl.updateValueAndValidity();
|
|
329
|
-
}
|
|
315
|
+
return (formGroup) => {
|
|
316
|
+
const toControl = formGroup.get(toTimeField);
|
|
317
|
+
const fromControl = formGroup.get(fromTimeField);
|
|
318
|
+
// Keep existing errors
|
|
319
|
+
const existingFromErrors = fromControl.errors || {};
|
|
320
|
+
const existingToErrors = toControl.errors || {};
|
|
321
|
+
// Remove only our custom errors
|
|
322
|
+
delete existingFromErrors[Localization.form_validation_invalid_time_range];
|
|
323
|
+
delete existingToErrors[Localization.form_validation_invalid_time_range];
|
|
324
|
+
if (this.isValueGreaterThanOrEqualTo(fromControl, toControl) && this.isValueLengthValid(fromControl, toControl)) {
|
|
325
|
+
existingFromErrors[Localization.form_validation_invalid_time_range] = true;
|
|
326
|
+
existingToErrors[Localization.form_validation_invalid_time_range] = true;
|
|
330
327
|
}
|
|
331
|
-
|
|
328
|
+
// Apply back errors or null if none
|
|
329
|
+
fromControl.setErrors(Object.keys(existingFromErrors).length ? existingFromErrors : null);
|
|
330
|
+
toControl.setErrors(Object.keys(existingToErrors).length ? existingToErrors : null);
|
|
331
|
+
return null;
|
|
332
332
|
};
|
|
333
333
|
}
|
|
334
334
|
static fromToTime(fromTimeField, toTimeField) {
|
|
@@ -629,4 +629,4 @@ export class TibaValidators {
|
|
|
629
629
|
};
|
|
630
630
|
}
|
|
631
631
|
}
|
|
632
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQVEsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFvQixZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx5SEFBeUgsQ0FBQztBQUN2SixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxVQUFVLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcscUJBQXFCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sUUFB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LENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUUxRixNQUFNLEtBQUssR0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBRTdDLE1BQU0sV0FBVyxHQUNmLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xGLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFckYsMkNBQTJDO1FBQzNDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsbUVBQW1FO1FBQ25FLE9BQU87WUFDTCw0QkFBNEIsRUFBRTtnQkFDNUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pCLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ3hCO1NBQ0YsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGVsYXksIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5QVVRfU0VBUkNIX0RFQk9VTkNFX1RJTUUsIFZBTElEX1RJTUVfTUFYX0xFTkdUSCB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uL2VudW1zL2xvY2FsaXphdGlvbi5lbnVtJztcbmltcG9ydCB7IENsb3VkLCBFZGdlIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eSc7XG5pbXBvcnQgeyBNaWRkYXlQZXJpb2QsIFRpbWUgYXMgVGliYVRpbWUsIHRpbWVUb01vbWVudCB9IGZyb20gJy4vZGF0ZS51dGlsJztcblxuY29uc3QgTUlOX0FMTE9XRURfQkFMQU5DRSA9IDA7XG5jb25zdCBNQVhfQUxMT1dFRF9CQUxBTkNFID0gMjU1O1xuZXhwb3J0IGNvbnN0IG5vRW1vamlSZWdleCA9IC9bXmEtekEtWjAtOSBdL2dtO1xuZXhwb3J0IGNvbnN0IHBhc3N3b3JkUmVnZXggPSAvXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlxcZCkoPz0uKlshXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXF1eX2B7fH1+XSlbQS1aYS16XFxkIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl17NCx9JC9nO1xuZXhwb3J0IGNvbnN0IGFscGhhbnVtZXJpY1JlZ2V4ID0gL15bYS16QS1aMC05XSskLztcbmV4cG9ydCBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzAtOV0rJC87XG5leHBvcnQgY29uc3QgaW50ZWdlck51bWJlclJlZ2V4ID0gL15bLV0/KFxcZCspPyQvO1xuZXhwb3J0IGNvbnN0IGludGVnZXJQb3NpdGl2ZU51bWJlclJlZ2V4ID0gL15bMC05XSskLztcbmV4cG9ydCBjb25zdCBkZWNpbWFsTnVtYmVyUmVnZXggPSAvXlstXT8oXFxkKykoXFwuXFxkezEsMn0pPyQvO1xuZXhwb3J0IGNvbnN0IGRlY2ltYWxQb3NpdGl2ZU51bWJlclJlZ2V4ID0gL14oXFxkKykoXFwuXFxkezEsMn0pPyQvO1xuZXhwb3J0IGNvbnN0IHJlZ2V4RXhwID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kLztcbmV4cG9ydCBjb25zdCBwZXJjZW50YWdlUmVnZXggPSAvXigxMDB8WzEtOV0/WzAtOV0pJC87XG5leHBvcnQgY29uc3QgZGVjaW1hbFBlcmNlbnRhZ2VSZWdleCA9IC9eKDEwMCg/OlxcLjB7MSwyfSk/fFswLTldezEsMn0oPzpcXC5bMC05XXsxLDJ9KT8pJC87XG5leHBvcnQgY29uc3QgaXB2NFJlZ2V4ID0gL14oPzpbMC05XXsxLDN9XFwuKXszfVswLTldezEsM30kLztcblxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09ICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBbVBtVG8yNEhvdXJzKHRpbWU6IFRpYmFUaW1lLCBlbmFibGVGdWxsRGF5OiBib29sZWFuKTogVGliYVRpbWUge1xuICBsZXQgX3RpbWU6IFRpYmFUaW1lID0gbnVsbDtcbiAgaWYgKHRpbWUpIHtcbiAgICBfdGltZSA9IHsgLi4udGltZSB9OyAvLyBTcHJlYWQgb3BlcmF0b3IgZm9yIGltbXV0YWJpbGl0eVxuXG4gICAgaWYgKHRpbWUubWlkZGF5UGVyaW9kID09PSBNaWRkYXlQZXJpb2QuUE0gJiYgK3RpbWUuaG91cnMgIT09IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9ICtfdGltZS5ob3VycyArIDEyOyAvLyBDb252ZXJ0IFBNIGhvdXJzIChleGNlcHQgMTIgUE0pIHRvIDI0LWhvdXIgZm9ybWF0XG5cbiAgICB9IGVsc2UgaWYgKHRpbWUubWlkZGF5UGVyaW9kID09PSBNaWRkYXlQZXJpb2QuQU0gJiYgK3RpbWUuaG91cnMgPT09IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9IGVuYWJsZUZ1bGxEYXkgPyAyNCA6IDA7ICAvLyBNaWRuaWdodCBjYXNlICgxMiBBTSBpcyAwMDowMCBpbiAyNC1ob3VyIHRpbWUgYW5kIDI0OjAwIHdoZW4gZnVsbCBkYXkgb3B0aW9uIGlzIGFjdGl2ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX3RpbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0MjRIb3Vyc1RvQW1QTSh0aW1lOiBUaWJhVGltZSk6IFRpYmFUaW1lIHtcbiAgbGV0IF90aW1lOiBUaWJhVGltZSA9IG51bGw7XG4gIGlmICh0aW1lKSB7XG4gICAgX3RpbWUgPSB7IC4uLnRpbWUgfTsgLy8gU3ByZWFkIG9wZXJhdG9yIGZvciBpbW11dGFiaWxpdHlcbiAgICBjb25zdCBob3VycyA9ICt0aW1lLmhvdXJzO1xuICAgIGlmIChob3VycyA+PSAwICYmIGhvdXJzIDw9IDExKSB7XG4gICAgICBfdGltZS5taWRkYXlQZXJpb2QgPSBNaWRkYXlQZXJpb2QuQU07XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMiAmJiBob3VycyA8PSAyMykge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLlBNO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDI0KSB7XG4gICAgICBfdGltZS5taWRkYXlQZXJpb2QgPSBNaWRkYXlQZXJpb2QuQU07XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzID09PSAyNCkge1xuICAgICAgX3RpbWUuaG91cnMgPSAwO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgIF90aW1lLmhvdXJzID0gK190aW1lLmhvdXJzIC0gMTI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF90aW1lO1xufVxuXG5leHBvcnQgY2xhc3MgVGliYVZhbGlkYXRvcnMge1xuXG4gIHN0YXRpYyBpcHY0VmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCBpc1ZhbGlkID0gaXB2NFJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSk7XG4gICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyBpcHY0Rm9ybWF0OiB0cnVlIH07XG4gIH1cblxuICAvLyBObyBlbW9qaSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBub0Vtb2ppKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgdmFsLnRvU3RyaW5nKCkubWF0Y2gobm9FbW9qaVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9FbW9qaToge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBub0Vtb2ppUmVnZXhcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBwZXJjZW50YWdlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKHBlcmNlbnRhZ2VSZWdleCkpIHtcbiAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3BlcmNlbnRhZ2U6IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBkZWNpbWFsUGVyY2VudGFnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChkZWNpbWFsUGVyY2VudGFnZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfZGVjaW1hbF9wZXJjZW50YWdlOiB0cnVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBNb2JpbGUgb25seSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBtb2JpbGVOdW1iZXJzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKG1vYmlsZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9iaWxlTnVtYmVyczoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBtb2JpbGVSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGhvdGVsUm9vbk51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goYWxwaGFudW1lcmljUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbHBoYW51bWVyaWNSZWdleDoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBhbHBoYW51bWVyaWNSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VySW5jbHVkZVplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBUaWJhVmFsaWRhdG9ycy52YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcihjb250cm9sLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcldpdGhvdXRaZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gVGliYVZhbGlkYXRvcnMudmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbCwgMSk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBtaW5WYWx1ZTogbnVtYmVyKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmXG4gICAgICAhKGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5tYXRjaChpbnRlZ2VyTnVtYmVyUmVnZXgpICYmICtjb250cm9sLnZhbHVlID49IG1pblZhbHVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHtjb250cm9sLnZhbHVlfSdgXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBJbnRlZ2VyOiAtMTIzLCAxMjNcbiAgc3RhdGljIGludGVnZXJOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goaW50ZWdlck51bWJlclJlZ2V4KSkgcmV0dXJuIHtcbiAgICAgIGludGVnZXJOdW1iZXI6IHtcbiAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEludGVnZXIgUG9zaXRpdmUgLT4gMTIzXG4gIHN0YXRpYyBpbnRlZ2VyUG9zaXRpdmVOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGludGVnZXJQb3NpdGl2ZU51bWJlclJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZWdlclBvc2l0aXZlTnVtYmVyOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRGVjaW1hbDogLTEuMjMsIDEuMjNcbiAgc3RhdGljIGRlY2ltYWxOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbE51bWJlclJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaW1hbE51bWJlcjoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIERlY2ltYWwgUG9zaXRpdmU6IDEuMjNcbiAgc3RhdGljIGRlY2ltYWxQb3NpdGl2ZU51bWJlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbFBvc2l0aXZlTnVtYmVyUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpbWFsUG9zaXRpdmVOdW1iZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gTnVtYmVyIGxlbmd0aFxuICBzdGF0aWMgbnVtZXJpY0xlbmd0aChsZW5ndGg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmIHZhbC50b1N0cmluZygpLmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW52YWxpZE51bWJlckxlbmd0aDoge1xuICAgICAgICAgICAgYWN0dWFsTGVuZ3RoOiB2YWwsXG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aDogbGVuZ3RoXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIWNvbnRyb2wudmFsdWU/Lm1hdGNoKHBhc3N3b3JkUmVnZXgpKSB7XG4gICAgICByZXR1cm4geyBwYXNzd29yZFBvbGljeVJlcXVpcmVtZW50czogdHJ1ZSB9O1xuICAgIH1cbiAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggPCA4KSB7XG4gICAgICByZXR1cm4geyBtaW5sZW5ndGg6IHsgcmVxdWlyZWRMZW5ndGg6IDggfSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBHdWlkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXJlZ2V4RXhwLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7IGd1aWRJc1ZhbGlkOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkRm9ybU1hdGNoVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgncGFzc3dvcmQnKTtcbiAgICBjb25zdCBjdXJyZW50UGFzc3dvcmQgPSBjb250cm9sLmdldCgnY3VycmVudFBhc3N3b3JkJyk7XG4gICAgaWYgKG5ld1Bhc3N3b3JkICYmIGN1cnJlbnRQYXNzd29yZCAmJiBuZXdQYXNzd29yZC52YWxpZCAmJiBjdXJyZW50UGFzc3dvcmQudmFsaWQgJiYgbmV3UGFzc3dvcmQudmFsdWUgPT09IGN1cnJlbnRQYXNzd29yZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmRNYXRjaDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsOyAvLyBQYXNzd29yZHMgbWF0Y2ggb3IgZm9ybSBmaWVsZHMgaGFzIGl0cyBvd24gZXJyb3JzXG4gIH1cblxuICBzdGF0aWMgUGFzc3dvcmRGb3JtTm90TWF0Y2hWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdwYXNzd29yZCcpO1xuICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdjb25maXJtUGFzc3dvcmQnKTtcbiAgICBpZiAoKG5ld1Bhc3N3b3JkLmVycm9ycyB8fCBjb25maXJtUGFzc3dvcmQuZXJyb3JzKSB8fFxuICAgICAgbmV3UGFzc3dvcmQudmFsdWUgPT09IGNvbmZpcm1QYXNzd29yZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIFBhc3N3b3JkcyBtYXRjaCBvciBmb3JtIGZpZWxkcyBoYXMgaXRzIG93biBlcnJvcnNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmROb3RNYXRjaDogdHJ1ZSB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9OdW1iZXJWYWxpZGF0b3IoZnJvbUNvbnRyb2xOYW1lOiBzdHJpbmcsIHRvQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbUNvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b0NvbnRyb2xOYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmICF0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZScpKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIHZhbGlkYXRpb24gZXJyb3IgaWYgJ2Zyb20nIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAndG8nIHZhbHVlXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZTogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlJykpIHtcbiAgICAgICAgICAvLyByZXNldCB0aGUgZXJyb3Igb2Yg4oCYdG/igJkgY29udHJvbCB3aGVuIOKAmGZyb23igJkgY29udHJvbCBpcyB2YWxpZCBhbmQgdG8gY29udHJvbCBjb250YWlucyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2VcbiAgICAgICAgICB0b0NvbnRyb2wuc2V0RXJyb3JzKHt9KTtcbiAgICAgICAgICB0b0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZUJhbGFuY2UgPSAodW5pdHNWYWx1ZSwgYmFsYW5jZVZhbHVlKSA9PiB7IHJldHVybiB1bml0c1ZhbHVlICsgYmFsYW5jZVZhbHVlOyB9O1xuXG4gIHN0YXRpYyB1bml0c0JhbGFuY2VWYWxpZGF0b3IodW5pdHNDb250cm9sTmFtZTogc3RyaW5nLCBiYWxhbmNlQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCB1bml0c0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHVuaXRzQ29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCBiYWxhbmNlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoYmFsYW5jZUNvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgdW5pdHNWYWx1ZSA9IHBhcnNlSW50KHVuaXRzQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VWYWx1ZSA9IGJhbGFuY2VDb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCBiYWxhbmNlQ2FsY3VsYXRlZCA9IHRoaXMuY2FsY3VsYXRlQmFsYW5jZSh1bml0c1ZhbHVlLCBiYWxhbmNlVmFsdWUpO1xuICAgICAgICBpZiAoYmFsYW5jZUNhbGN1bGF0ZWQgPiBNQVhfQUxMT1dFRF9CQUxBTkNFKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21heGltdW06IHRydWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlQ2FsY3VsYXRlZCA8IE1JTl9BTExPV0VEX0JBTEFOQ0UpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX3VuaXRzX2JhbGFuY2VfbWluaW11bTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtaW5EYXRlVGltZShjb250cm9sTmFtZTogc3RyaW5nLCBtaW5EYXRlVGltZVZhbHVlOiBEYXRlKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbEdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuXG4gICAgICBpZiAoY29udHJvbEdyb3VwLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sR3JvdXAucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCBjb250cm9sVmFsdWU6IERhdGUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sRGF0ZSA9IG5ldyBEYXRlKGNvbnRyb2xWYWx1ZSkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgY29uc3QgbWluRGF0ZSA9IG5ldyBEYXRlKG1pbkRhdGVUaW1lVmFsdWUpLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgICAgICAgaWYgKGNvbnRyb2xEYXRlIDwgbWluRGF0ZSkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX2Zyb21fdGltZTogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9EYXRlKGZyb21EYXRlRmllbGQ6IHN0cmluZywgdG9EYXRlRmllbGQ6IHN0cmluZywgZnJvbVRpbWVGaWVsZDogc3RyaW5nID0gbnVsbCxcbiAgICB0b1RpbWVGaWVsZDogc3RyaW5nID0gbnVsbCwgZXJyb3JOYW1lOiBzdHJpbmcgPSAnZnJvbVRvRGF0ZScpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZnJvbURhdGU6IERhdGUgPSBmb3JtR3JvdXAuZ2V0KGZyb21EYXRlRmllbGQpPy52YWx1ZTtcbiAgICAgIGNvbnN0IHRvRGF0ZTogRGF0ZSA9IGZvcm1Hcm91cC5nZXQodG9EYXRlRmllbGQpPy52YWx1ZTtcbiAgICAgIGNvbnN0IGZyb21UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk/LnZhbHVlO1xuICAgICAgY29uc3QgdG9UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpPy52YWx1ZTtcbiAgICAgIGlmIChmcm9tVGltZSkge1xuICAgICAgICBmcm9tRGF0ZS5zZXRIb3Vycyhmcm9tVGltZS5ob3Vycyk7XG4gICAgICAgIGZyb21EYXRlLnNldE1pbnV0ZXMoZnJvbVRpbWUubWludXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAodG9UaW1lKSB7XG4gICAgICAgIHRvRGF0ZS5zZXRIb3Vycyh0b1RpbWUuaG91cnMpO1xuICAgICAgICB0b0RhdGUuc2V0TWludXRlcyh0b1RpbWUubWludXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAoKGZyb21EYXRlICE9PSBudWxsICYmIHRvRGF0ZSAhPT0gbnVsbCkgJiYgZnJvbURhdGUgPiB0b0RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvVGltZVJhbmdlKGZyb21UaW1lRmllbGQ6IHN0cmluZywgdG9UaW1lRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCB0b0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvVGltZUZpZWxkKTtcbiAgICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiYgdGhpcy5pc1ZhbHVlTGVuZ3RoVmFsaWQoZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiZcbiAgICAgICAgICAhdG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlJykpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZTogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZScpKSB7XG4gICAgICAgICAgLy8gcmVzZXQgdGhlIGVycm9yIG9mIOKAmHRv4oCZIGNvbnRyb2wgd2hlbiDigJhmcm9t4oCZIGNvbnRyb2wgaXMgdmFsaWQgYW5kIHRvIGNvbnRyb2wgY29udGFpbnMgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZVxuICAgICAgICAgIHRvQ29udHJvbC5zZXRFcnJvcnMoe30pO1xuICAgICAgICAgIHRvQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvVGltZShmcm9tVGltZUZpZWxkOiBzdHJpbmcsIHRvVGltZUZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZnJvbVRpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldChmcm9tVGltZUZpZWxkKS52YWx1ZTtcbiAgICAgIGNvbnN0IHRvVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KHRvVGltZUZpZWxkKS52YWx1ZTtcbiAgICAgIGlmICghdGhpcy5pc1RpbWVOdWxsKGZyb21UaW1lKSAmJiAhdGhpcy5pc1RpbWVOdWxsKHRvVGltZSkgJiZcbiAgICAgICAgISh0b1RpbWUuaG91cnMgPT0gMCAmJiB0b1RpbWUubWludXRlcyA9PSAwKSAmJlxuICAgICAgICAoXG4gICAgICAgICAgKGZyb21UaW1lLmhvdXJzID4gdG9UaW1lLmhvdXJzKSB8fFxuICAgICAgICAgIChmcm9tVGltZS5ob3VycyA9PSB0b1RpbWUuaG91cnMgJiYgZnJvbVRpbWUubWludXRlcyA+IHRvVGltZS5taW51dGVzKVxuICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2U6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1RpbWVOdWxsID0gKHRpbWU6IFRpYmFUaW1lKSA9PiB0aW1lID09PSBudWxsIHx8XG4gICAgKHRpbWUuaG91cnMgPT09IG51bGwgJiYgdGltZS5taW51dGVzID09PSBudWxsICYmIHRpbWUuc2Vjb25kcyA9PT0gbnVsbCk7XG5cbiAgc3RhdGljIG5vV2hpdGVzcGFjZVZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+XG4gICAgIWlzTnVsbE9yRW1wdHkoY29udHJvbC52YWx1ZSkgJiYgaXNOdWxsT3JFbXB0eShjb250cm9sPy52YWx1ZT8udHJpbSgpKSA/IHsgcmVxdWlyZWQ6IHRydWUgfSA6IG51bGw7XG5cbiAgc3RhdGljIG5vV2hpdGVzcGFjZVdpdGhpblNlbnRlbmNlVmFsaWRhdG9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT5cbiAgICAhKGNvbnRyb2w/LnZhbHVlPy5zcGxpdChcIiBcIikubGVuZ3RoID09PSAxKSA/IHsgbm9XaGl0ZXNwYWNlV2l0aGluU2VudGVuY2U6IHRydWUgfSA6IG51bGw7XG5cbiAgc3RhdGljIG5vRG90V2l0aGluU2VudGVuY2VWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PlxuICAgIGNvbnRyb2w/LnZhbHVlPy5pbmNsdWRlcyhcIi5cIikgPyB7IG5vRG90V2l0aGluU2VudGVuY2U6IHRydWUgfSA6IG51bGw7XG5cbiAgc3RhdGljIHRlcm1zUG9saWN5Q2hlY2tib3goKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IGludmFsaWRUZXJtczogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmF1bHRBY2Nlc3NQcm9maWxlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGlmICghaXNOdWxsT3JFbXB0eShjb250cm9sLnZhbHVlKSAmJiAhY29udHJvbC52YWx1ZT8uZGVmYXVsdEFjY2Vzc1Byb2ZpbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vRGVmYXVsdEFjY2Vzc1Byb2ZpbGU6IHtcbiAgICAgICAgICBjb21wYW55TmFtZTogY29udHJvbC52YWx1ZS5uYW1lLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgelJhbmdlKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsIGZyb21aRmllbGQ6IHN0cmluZywgdG9aRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21aQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVpGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGNvbnN0IHRvWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvWkZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuXG4gICAgICBpZiAoZnJvbVpDb250cm9sLnZhbHVlPy5pZCA+IHRvWkNvbnRyb2wudmFsdWU/LmlkKSB7XG4gICAgICAgIHJldHVybiB7IHpSYW5nZTogdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5pbnZhbGlkX2ZpZWxkcykgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByYW5nZURlbHRhVmFsaWRhdG9yKGZyb21GaWVsZDogc3RyaW5nLCB0b0ZpZWxkOiBzdHJpbmcsIG1heERlbHRhOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgICAgY29uc3QgdG9Db250cm9sID0gY29udHJvbC5nZXQodG9GaWVsZCk7XG4gICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGNvbnRyb2wuZ2V0KGZyb21GaWVsZCk7XG5cbiAgICAgIGlmIChmcm9tQ29udHJvbCAmJiB0b0NvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgZnJvbVZhbHVlID0gZnJvbUNvbnRyb2wudmFsdWU7XG4gICAgICAgIGNvbnN0IHRvVmFsdWUgPSB0b0NvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgLy8gT25seSB2YWxpZGF0ZSBpZiBib3RoIHZhbHVlcyBhcmUgcHJlc2VudCBhbmQgbm90IGVtcHR5XG4gICAgICAgIGlmIChmcm9tVmFsdWUgIT0gbnVsbCAmJiB0b1ZhbHVlICE9IG51bGwgJiYgZnJvbVZhbHVlICE9PSAnJyAmJiB0b1ZhbHVlICE9PSAnJykge1xuICAgICAgICAgIGNvbnN0IGRlbHRhID0gdG9WYWx1ZSAtIGZyb21WYWx1ZTtcblxuICAgICAgICAgIGlmIChkZWx0YSA+IG1heERlbHRhKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgcmFuZ2VEZWx0YUV4Y2VlZGVkOiB7XG4gICAgICAgICAgICAgICAgYWN0dWFsRGVsdGE6IGRlbHRhLFxuICAgICAgICAgICAgICAgIG1heERlbHRhOiBtYXhEZWx0YSxcbiAgICAgICAgICAgICAgICBmcm9tOiBmcm9tVmFsdWUsXG4gICAgICAgICAgICAgICAgdG86IHRvVmFsdWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRDcmVkZW50aWFscyh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLCBjYXJQbGF0ZUZpZWxkOiBzdHJpbmcgPSAnY2FyUGxhdGUnLCBtb2JpbGVGaWVsZDogc3RyaW5nID0gJ21vYmlsZScsIGJhZGdlRmllbGQ6IHN0cmluZyA9ICdiYWRnZScsXG4gICAgZW1haWxGaWVsZDogc3RyaW5nID0gJ2VtYWlsJywgc2VuZEVtYWlsRmllbGQ6IHN0cmluZyA9ICdzZW5kRW1haWwnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSB8IG51bGwgPT4ge1xuICAgICAgbGV0IGNhclBsYXRlc0ludmFsaWQgPSBmYWxzZTtcbiAgICAgIGxldCBiYWRnZXNJbnZhbGlkID0gZmFsc2U7XG4gICAgICBsZXQgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIC8vIENhcmRzXG4gICAgICBjb25zdCBiYWRnZXNGb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KGJhZGdlRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICBpZiAoYmFkZ2VzRm9ybUFycmF5KSB7XG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYXJkKSk7XG4gICAgICAgIGJhZGdlc0ludmFsaWQgPSB0aGlzLmlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChiYWRnZXNGb3JtQXJyYXkudmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNDYXJkc0ludmFsaWQgPSBiYWRnZXNJbnZhbGlkIHx8ICFiYWRnZXNGb3JtQXJyYXk7XG5cbiAgICAgIC8vQ2FyIHBsYXRlc1xuICAgICAgY29uc3QgY2FyUGxhdGVzRm9ybUFycmF5ID0gZm9ybUdyb3VwLmdldChjYXJQbGF0ZUZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgaWYgKGNhclBsYXRlc0Zvcm1BcnJheSkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FyX3BsYXRlKSk7XG4gICAgICAgIGNhclBsYXRlc0ludmFsaWQgPSB0aGlzLmlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChjYXJQbGF0ZXNGb3JtQXJyYXkudmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNDYXJQbGF0ZXNJbnZhbGlkID0gY2FyUGxhdGVzSW52YWxpZCB8fCAhY2FyUGxhdGVzRm9ybUFycmF5O1xuXG4gICAgICAvLyBNb2JpbGVcbiAgICAgIGNvbnN0IG1vYmlsZUZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChtb2JpbGVGaWVsZCk7XG4gICAgICBpZiAobW9iaWxlRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLm1vYmlsZSkpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNNb2JpbGVJbnZhbGlkID0gIW1vYmlsZUZvcm1Db250cm9sPy52YWx1ZTtcblxuICAgICAgLy8gRW1haWxcbiAgICAgIGNvbnN0IGVtYWlsRm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGVtYWlsRmllbGQpO1xuICAgICAgY29uc3Qgc2VuZEVtYWlsRm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHNlbmRFbWFpbEZpZWxkKTtcbiAgICAgIGlmIChlbWFpbEZvcm1Db250cm9sICYmIHNlbmRFbWFpbEZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uZW1haWwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzRW1haWxJbnZhbGlkID0gIShzZW5kRW1haWxGb3JtQ29udHJvbD8udmFsdWUgJiYgZW1haWxGb3JtQ29udHJvbD8udmFsdWUpO1xuXG4gICAgICBjb25zdCBpc1JlcXVpcmVkQ3JlZGVudGlhbHMgPSBpc0NhclBsYXRlc0ludmFsaWQgJiYgaXNDYXJkc0ludmFsaWQgJiYgaXNNb2JpbGVJbnZhbGlkICYmIGlzRW1haWxJbnZhbGlkO1xuXG4gICAgICBpZiAoaXNSZXF1aXJlZENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDcmVkZW50aWFsID0gaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucG9wKCk7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0ZVBhcmFtcyA9IGAke2ludGVycG9sYXRlZENyZWRlbnRpYWxzLmpvaW4oJywgJyl9ICR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5vcil9ICR7bGFzdENyZWRlbnRpYWx9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZENyZWRlbnRpYWxzOiB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnJlcXVpcmVkX2NyZWRlbnRpYWxzX21lc3NhZ2UsIHsgY3JlZGVudGlhbHM6IGludGVycG9sYXRlUGFyYW1zIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNGb3JtQ29udHJvbExpc3RJbnZhbGlkKGxpc3Q6IFVudHlwZWRGb3JtQ29udHJvbFtdKSB7XG4gICAgbGV0IGlzSW52YWxpZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBsaXN0KSB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgaXNJbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzSW52YWxpZDtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZERheXMoc3BlY2lhbERheXNGaWVsZDogc3RyaW5nLCB3ZWVrRGF5c0ZpZWxkOiBzdHJpbmcsIGVycm9yTmFtZTogc3RyaW5nID0gJ3JlcXVpcmVkRGF5cycpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc3BlY2lhbERheXM6IG51bWJlciA9IGZvcm1Hcm91cC5nZXQoc3BlY2lhbERheXNGaWVsZCkudmFsdWU7XG4gICAgICBjb25zdCB3ZWVrRGF5czogbnVtYmVyID0gZm9ybUdyb3VwLmdldCh3ZWVrRGF5c0ZpZWxkKS52YWx1ZTtcbiAgICAgIGlmIChzcGVjaWFsRGF5cyA+IDAgfHwgd2Vla0RheXMgPiAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBbZXJyb3JOYW1lXTogdHJ1ZSB9O1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgaXNSb2xlTmFtZUV4aXN0cyhyb2xlU2VydmljZVByb3h5OiBDbG91ZC5Sb2xlU2VydmljZVByb3h5LCByb2xlSWQ6IG51bWJlcik6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPiA9PiB7XG4gICAgICByZXR1cm4gb2YoY29udHJvbC52YWx1ZSkucGlwZShcbiAgICAgICAgZGVsYXkoNTAwKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKElOUFVUX1NFQVJDSF9ERUJPVU5DRV9USU1FKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHJvbGVTZXJ2aWNlUHJveHkuaXNFeGlzdHMoY29udHJvbC52YWx1ZSwgcm9sZUlkID8/IHVuZGVmaW5lZCkucGlwZShcbiAgICAgICAgICBtYXAocmVzID0+IHJlcy5kYXRhID09PSB0cnVlIHx8ICFyZXMuaXNTdWNjZXNzID8geyByb2xlTmFtZUFscmVhZHlFeGlzdHM6IHRydWUgfSA6IG51bGwpKSkpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgaXNBY2Nlc3NQcm9maWxlTnVtYmVyQXZhaWxhYmxlKGFjY2Vzc1Byb2ZpbGVTZXJ2aWNlUHJveHk6IEVkZ2UuQWNjZXNzUHJvZmlsZVNlcnZpY2VQcm94eSwgZ3VpZDogc3RyaW5nLCBjdXJyZW50VmFsdWU6IG51bWJlcik6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzPiA9PiB7XG4gICAgICByZXR1cm4gb2YoY29udHJvbC52YWx1ZSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSAhPT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAvLyBDYWxsIHNlcnZpY2UgdG8gY2hlY2sgaWYgdGhlIG51bWJlciBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgIHJldHVybiBhY2Nlc3NQcm9maWxlU2VydmljZVByb3h5LmdldEF2YWlsYWJsZU51bWJlcih2YWx1ZSwgZ3VpZCkucGlwZShcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiAhcmVzLmRhdGE/LmlzQXZhaWxhYmxlIHx8ICFyZXMuaXNTdWNjZXNzID8geyBhY2Nlc3NQcm9maWxlTnVtYmVyVGFrZW46IHRydWUgfSA6IG51bGwpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHRpYmFUaW1lVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWw6IFRpYmFUaW1lID0gY29udHJvbC52YWx1ZTtcblxuICAgIGNvbnN0IGhhc0ludmFsaWRUaW1lID1cbiAgICAgIHZhbCAmJlxuICAgICAgKCh2YWwuaG91cnMgIT0gbnVsbCAmJiB2YWwubWludXRlcyA9PSBudWxsKSB8fFxuICAgICAgICAodmFsLmhvdXJzID09IG51bGwgJiYgdmFsLm1pbnV0ZXMgIT0gbnVsbCkpO1xuXG4gICAgcmV0dXJuIGhhc0ludmFsaWRUaW1lID8geyBpbnZhbGlkVGltZTogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZVZhbGlkYXRvcihtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZShjb250cm9sLnZhbHVlLCBtaW5UaW1lLCBtYXhUaW1lKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGVudHJ5RXhpdFJlcXVpcmVkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCBlbnRyeSA9IGNvbnRyb2wuZ2V0KCdlbnRyeScpPy52YWx1ZTtcbiAgICBjb25zdCBleGl0ID0gY29udHJvbC5nZXQoJ2V4aXQnKT8udmFsdWU7XG5cbiAgICBjb25zdCBib3RoRW1wdHkgPSAhZW50cnkgJiYgIWV4aXQ7XG5cbiAgICByZXR1cm4gYm90aEVtcHR5ID8geyByZXF1aXJlZDogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVN0cmluZ0hITU1JblJhbmdlVmFsaWRhdG9yKG1pblRpbWU6IFRpYmFUaW1lLCBtYXhUaW1lOiBUaWJhVGltZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoICE9PSA0KSB7IC8vIEFzc3VtaW5nIHRpbWUgZm9ybWF0IGlzICdISE1NJ1xuICAgICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfZm9ybWF0OiB0cnVlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaG91cnM6IG51bWJlciA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUuc2xpY2UoMCwgMikpO1xuICAgICAgICAgIGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUuc2xpY2UoMikpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lOiBUaWJhVGltZSA9IHsgaG91cnMsIG1pbnV0ZXMgfTtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZShjdXJyZW50VGltZSwgbWluVGltZSwgbWF4VGltZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdGltZVJhbmdlQXJyYXlPdmVybGFwVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmIChjb250cm9sLnZhbGlkICYmIGNvbnRyb2wuZW5hYmxlZCkge1xuICAgICAgICBjb25zdCBmb3JtQXJyYXkgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFJhbmdlID0gZm9ybUFycmF5W2ldO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRGcm9tID0gdGltZVRvTW9tZW50KGN1cnJlbnRSYW5nZS5mcm9tKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VG8gPSB0aW1lVG9Nb21lbnQoY3VycmVudFJhbmdlLnRvKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50RnJvbSAmJiBjdXJyZW50VG8pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGZvcm1BcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlUmFuZ2UgPSBmb3JtQXJyYXlbal07XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVGcm9tID0gdGltZVRvTW9tZW50KGNvbXBhcmVSYW5nZS5mcm9tKTtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVRvID0gdGltZVRvTW9tZW50KGNvbXBhcmVSYW5nZS50byk7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmVGcm9tICYmIGNvbXBhcmVUbykge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBvdmVybGFwXG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VzT3ZlcmxhcCA9IGN1cnJlbnRGcm9tLmlzQmVmb3JlKGNvbXBhcmVUbykgJiYgY3VycmVudFRvLmlzQWZ0ZXIoY29tcGFyZUZyb20pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlc092ZXJsYXApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl90aW1lX3JhbmdlX292ZXJsYXA6IHRydWUgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXZlcnRBdENvbXBhcmlzb25WYWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgY29tcGFyaXNvblR5cGUgPSBmb3JtQ29udHJvbC5nZXQoJ2NvbXBhcmlzb25UeXBlJyk/LnZhbHVlO1xuICAgIGNvbnN0IG9jY3VwYW5jeVZhbHVlQ3RybCA9IGZvcm1Db250cm9sLmdldCgnb2NjdXBhbmN5VmFsdWUnKTtcbiAgICBjb25zdCByZXZlcnRBdFZhbHVlQ3RybCA9IGZvcm1Db250cm9sLmdldCgncmV2ZXJ0QXRWYWx1ZScpO1xuXG4gICAgaWYgKCFvY2N1cGFuY3lWYWx1ZUN0cmwgfHwgIXJldmVydEF0VmFsdWVDdHJsKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG9jY3VwYW5jeVZhbHVlID0gK29jY3VwYW5jeVZhbHVlQ3RybC52YWx1ZTtcbiAgICBjb25zdCByZXZlcnRBdFZhbHVlID0gK3JldmVydEF0VmFsdWVDdHJsLnZhbHVlO1xuXG4gICAgLy8gQ2xlYXIgcHJldmlvdXMgZXJyb3JzXG4gICAgcmV2ZXJ0QXRWYWx1ZUN0cmwuc2V0RXJyb3JzKG51bGwpO1xuXG4gICAgaWYgKGNvbXBhcmlzb25UeXBlID09PSBDbG91ZC5EeW5hbWljUHJpY2luZ0NvbXBhcmlzb25UeXBlLk1vcmVUaGFuKSB7XG4gICAgICBpZiAocmV2ZXJ0QXRWYWx1ZSA+PSBvY2N1cGFuY3lWYWx1ZSkge1xuICAgICAgICByZXZlcnRBdFZhbHVlQ3RybC5zZXRFcnJvcnMoeyByZXZlcnRfYXRfbXVzdF9iZV9sZXNzX3RoYW5fb2NjdXBhbmN5OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb21wYXJpc29uVHlwZSA9PT0gQ2xvdWQuRHluYW1pY1ByaWNpbmdDb21wYXJpc29uVHlwZS5MZXNzVGhhbikge1xuICAgICAgaWYgKHJldmVydEF0VmFsdWUgPD0gb2NjdXBhbmN5VmFsdWUpIHtcbiAgICAgICAgcmV2ZXJ0QXRWYWx1ZUN0cmwuc2V0RXJyb3JzKHsgcmV2ZXJ0X2F0X211c3RfYmVfbW9yZV90aGFuX29jY3VwYW5jeTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvKipcbiAqIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIG51bWJlciBpcyBhIG11bHRpcGxlIG9mIGEgc3BlY2lmaWVkIHN0ZXAuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdmFsaWRhdGluZyBpbnB1dHMgbGlrZSBjdXJyZW5jeSBhbW91bnRzIG9yIG90aGVyIHZhbHVlcyB0aGF0IHNob3VsZFxuICogZm9sbG93IGEgc3BlY2lmaWMgaW5jcmVtZW50IHBhdHRlcm4uXG4gKlxuICogQHBhcmFtIHN0ZXAgLSBUaGUgc3RlcCBzaXplIHRoYXQgdGhlIHZhbHVlIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIChlLmcuLCAwLjA1IGZvciBjdXJyZW5jeSkuXG4gKiBAcmV0dXJucyBBIFZhbGlkYXRvckZuIHRoYXQgY2hlY2tzIGlmIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBpcyBhIG11bHRpcGxlIG9mIHRoZSBzdGVwLlxuICpcbiAqIFVzYWdlOlxuICogY29uc3Qgc3RlcFZhbGlkYXRvciA9IE15Q2xhc3MuYW1vdW50U3RlcFZhbGlkYXRvcigwLjA1KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSWYgdGhlIHZhbHVlIGlzIDAuMTAgYW5kIHRoZSBzdGVwIGlzIDAuMDUsIHRoZSB2YWxpZGF0b3Igd2lsbCBwYXNzLlxuICogLy8gSWYgdGhlIHZhbHVlIGlzIDAuMTIgYW5kIHRoZSBzdGVwIGlzIDAuMDUsIHRoZSB2YWxpZGF0b3Igd2lsbCBmYWlsLlxuICovXG4gIHN0YXRpYyBhbW91bnRTdGVwVmFsaWRhdG9yKHN0ZXA6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gK2NvbnRyb2wudmFsdWU7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIG51bWJlciBhbmQgaWYgaXQgaXMgYSBtdWx0aXBsZSBvZiB0aGUgc3RlcFxuICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCArKE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXApLnRvRml4ZWQoMikgPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsOyAgLy8gdmFsaWQgdmFsdWVcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZCwgcmV0dXJuIGFuIGVycm9yIHdpdGggdGhlIHN0ZXAgdmFsdWVcbiAgICAgIHJldHVybiB7IGludmFsaWRTdGVwOiBzdGVwLnRvRml4ZWQoMikgfTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHRvQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZnJvbVRpbWVJbk51bWJlcjogbnVtYmVyID0gZnJvbUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgdG9UaW1lSW5OdW1iZXI6IG51bWJlciA9IHRvQ29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gZnJvbVRpbWVJbk51bWJlciAhPT0gbnVsbCAmJiB0b1RpbWVJbk51bWJlciAhPT0gbnVsbCAmJiArZnJvbVRpbWVJbk51bWJlciA+ICt0b1RpbWVJbk51bWJlcjtcbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBpc1ZhbHVlTGVuZ3RoVmFsaWQoZnJvbUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdG9Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBmcm9tVGltZUluTnVtYmVyOiBudW1iZXIgPSBmcm9tQ29udHJvbC52YWx1ZTtcbiAgICBjb25zdCB0b1RpbWVJbk51bWJlcjogbnVtYmVyID0gdG9Db250cm9sLnZhbHVlO1xuICAgIHJldHVybiBmcm9tVGltZUluTnVtYmVyLnRvU3RyaW5nKCkubGVuZ3RoID09PSBWQUxJRF9USU1FX01BWF9MRU5HVEggJiZcbiAgICAgIHRvVGltZUluTnVtYmVyLnRvU3RyaW5nKCkubGVuZ3RoID09PSBWQUxJRF9USU1FX01BWF9MRU5HVEg7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZShjdXJyZW50VGltZTogVGliYVRpbWUsIG1pblRpbWU6IFRpYmFUaW1lLCBtYXhUaW1lOiBUaWJhVGltZSk6IHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmc7IH07IH0gfCBudWxsIHtcbiAgICAvLyBJZiB0aW1lIGlzIHVuZGVmaW5lZCwgcmV0dXJuIG51bGwgKG5vIGVycm9yKVxuICAgIGlmICghY3VycmVudFRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogVGliYVRpbWUpOiBzdHJpbmcgPT5cbiAgICAgIGAke3RpbWUuaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3RpbWUubWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcblxuICAgIGNvbnN0IGhvdXJzOiBudW1iZXIgPSArY3VycmVudFRpbWUuaG91cnM7XG4gICAgY29uc3QgbWludXRlczogbnVtYmVyID0gK2N1cnJlbnRUaW1lLm1pbnV0ZXM7XG5cbiAgICBjb25zdCBpc1ZhbGlkVGltZSA9XG4gICAgICAoaG91cnMgPiBtaW5UaW1lLmhvdXJzIHx8IChob3VycyA9PT0gbWluVGltZS5ob3VycyAmJiBtaW51dGVzID49IG1pblRpbWUubWludXRlcykpICYmXG4gICAgICAoaG91cnMgPCBtYXhUaW1lLmhvdXJzIHx8IChob3VycyA9PT0gbWF4VGltZS5ob3VycyAmJiBtaW51dGVzIDw9IG1heFRpbWUubWludXRlcykpO1xuXG4gICAgLy8gSWYgdGltZSBpcyB2YWxpZCwgcmV0dXJuIG51bGwgKG5vIGVycm9yKVxuICAgIGlmIChpc1ZhbGlkVGltZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3Igd2l0aCBmb3JtYXR0ZWQgdGltZSByYW5nZVxuICAgIHJldHVybiB7XG4gICAgICBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lOiB7XG4gICAgICAgIGZyb206IGZvcm1hdFRpbWUobWluVGltZSksXG4gICAgICAgIHRvOiBmb3JtYXRUaW1lKG1heFRpbWUpLFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuXG59XG4iXX0=
|
|
632
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQVEsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFvQixZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx5SEFBeUgsQ0FBQztBQUN2SixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ3RDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxVQUFVLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcseUJBQXlCLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcscUJBQXFCLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sUUFB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QUNuRSxPQUFPO1lBQ0wsNEJBQTRCLEVBQUU7Z0JBQzVCLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUN6QixFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQzthQUN4QjtTQUNGLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtR3JvdXAsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBkZWJvdW5jZVRpbWUsIGRlbGF5LCBtYXAsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElOUFVUX1NFQVJDSF9ERUJPVU5DRV9USU1FLCBWQUxJRF9USU1FX01BWF9MRU5HVEggfSBmcm9tICcuLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBDbG91ZCwgRWRnZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHknO1xuaW1wb3J0IHsgTWlkZGF5UGVyaW9kLCBUaW1lIGFzIFRpYmFUaW1lLCB0aW1lVG9Nb21lbnQgfSBmcm9tICcuL2RhdGUudXRpbCc7XG5cbmNvbnN0IE1JTl9BTExPV0VEX0JBTEFOQ0UgPSAwO1xuY29uc3QgTUFYX0FMTE9XRURfQkFMQU5DRSA9IDI1NTtcbmV4cG9ydCBjb25zdCBub0Vtb2ppUmVnZXggPSAvW15hLXpBLVowLTkgXS9nbTtcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl0pW0EtWmEtelxcZCFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX5dezQsfSQvZztcbmV4cG9ydCBjb25zdCBhbHBoYW51bWVyaWNSZWdleCA9IC9eW2EtekEtWjAtOV0rJC87XG5leHBvcnQgY29uc3QgbW9iaWxlUmVnZXggPSAvXlswLTldKyQvO1xuZXhwb3J0IGNvbnN0IGludGVnZXJOdW1iZXJSZWdleCA9IC9eWy1dPyhcXGQrKT8kLztcbmV4cG9ydCBjb25zdCBpbnRlZ2VyUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eWzAtOV0rJC87XG5leHBvcnQgY29uc3QgZGVjaW1hbE51bWJlclJlZ2V4ID0gL15bLV0/KFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCBkZWNpbWFsUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eKFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCByZWdleEV4cCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC87XG5leHBvcnQgY29uc3QgcGVyY2VudGFnZVJlZ2V4ID0gL14oMTAwfFsxLTldP1swLTldKSQvO1xuZXhwb3J0IGNvbnN0IGRlY2ltYWxQZXJjZW50YWdlUmVnZXggPSAvXigxMDAoPzpcXC4wezEsMn0pP3xbMC05XXsxLDJ9KD86XFwuWzAtOV17MSwyfSk/KSQvO1xuZXhwb3J0IGNvbnN0IGlwdjRSZWdleCA9IC9eKD86WzAtOV17MSwzfVxcLil7M31bMC05XXsxLDN9JC87XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yRW1wdHkodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QW1QbVRvMjRIb3Vycyh0aW1lOiBUaWJhVGltZSwgZW5hYmxlRnVsbERheTogYm9vbGVhbik6IFRpYmFUaW1lIHtcbiAgbGV0IF90aW1lOiBUaWJhVGltZSA9IG51bGw7XG4gIGlmICh0aW1lKSB7XG4gICAgX3RpbWUgPSB7IC4uLnRpbWUgfTsgLy8gU3ByZWFkIG9wZXJhdG9yIGZvciBpbW11dGFiaWxpdHlcblxuICAgIGlmICh0aW1lLm1pZGRheVBlcmlvZCA9PT0gTWlkZGF5UGVyaW9kLlBNICYmICt0aW1lLmhvdXJzICE9PSAxMikge1xuICAgICAgX3RpbWUuaG91cnMgPSArX3RpbWUuaG91cnMgKyAxMjsgLy8gQ29udmVydCBQTSBob3VycyAoZXhjZXB0IDEyIFBNKSB0byAyNC1ob3VyIGZvcm1hdFxuXG4gICAgfSBlbHNlIGlmICh0aW1lLm1pZGRheVBlcmlvZCA9PT0gTWlkZGF5UGVyaW9kLkFNICYmICt0aW1lLmhvdXJzID09PSAxMikge1xuICAgICAgX3RpbWUuaG91cnMgPSBlbmFibGVGdWxsRGF5ID8gMjQgOiAwOyAgLy8gTWlkbmlnaHQgY2FzZSAoMTIgQU0gaXMgMDA6MDAgaW4gMjQtaG91ciB0aW1lIGFuZCAyNDowMCB3aGVuIGZ1bGwgZGF5IG9wdGlvbiBpcyBhY3RpdmUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF90aW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydDI0SG91cnNUb0FtUE0odGltZTogVGliYVRpbWUpOiBUaWJhVGltZSB7XG4gIGxldCBfdGltZTogVGliYVRpbWUgPSBudWxsO1xuICBpZiAodGltZSkge1xuICAgIF90aW1lID0geyAuLi50aW1lIH07IC8vIFNwcmVhZCBvcGVyYXRvciBmb3IgaW1tdXRhYmlsaXR5XG4gICAgY29uc3QgaG91cnMgPSArdGltZS5ob3VycztcbiAgICBpZiAoaG91cnMgPj0gMCAmJiBob3VycyA8PSAxMSkge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLkFNO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIgJiYgaG91cnMgPD0gMjMpIHtcbiAgICAgIF90aW1lLm1pZGRheVBlcmlvZCA9IE1pZGRheVBlcmlvZC5QTTtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAyNCkge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLkFNO1xuICAgIH1cblxuICAgIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICAgIF90aW1lLmhvdXJzID0gMDtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9ICtfdGltZS5ob3VycyAtIDEyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfdGltZTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpYmFWYWxpZGF0b3JzIHtcblxuICBzdGF0aWMgaXB2NFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgaXNWYWxpZCA9IGlwdjRSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgaXB2NEZvcm1hdDogdHJ1ZSB9O1xuICB9XG5cbiAgLy8gTm8gZW1vamkgdmFsaWRhdGlvblxuICBzdGF0aWMgbm9FbW9qaShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmIHZhbC50b1N0cmluZygpLm1hdGNoKG5vRW1vamlSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vRW1vamk6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgICAgcGF0dGVybjogbm9FbW9qaVJlZ2V4XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgcGVyY2VudGFnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwZXJjZW50YWdlUmVnZXgpKSB7XG4gICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9wZXJjZW50YWdlOiB0cnVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZGVjaW1hbFBlcmNlbnRhZ2UoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbFBlcmNlbnRhZ2VSZWdleCkpIHtcbiAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX2RlY2ltYWxfcGVyY2VudGFnZTogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gTW9iaWxlIG9ubHkgdmFsaWRhdGlvblxuICBzdGF0aWMgbW9iaWxlTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChtb2JpbGVSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vYmlsZU51bWJlcnM6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgICAgcGF0dGVybjogbW9iaWxlUmVnZXhcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBob3RlbFJvb25OdW1iZXJzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGFscGhhbnVtZXJpY1JlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWxwaGFudW1lcmljUmVnZXg6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgICAgcGF0dGVybjogYWxwaGFudW1lcmljUmVnZXhcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlckluY2x1ZGVaZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gVGliYVZhbGlkYXRvcnMudmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbCwgMCk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXJXaXRob3V0WmVybyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIFRpYmFWYWxpZGF0b3JzLnZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VyKGNvbnRyb2wsIDEpO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgbWluVmFsdWU6IG51bWJlcik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoXG4gICAgICAhaXNOdWxsT3JFbXB0eShjb250cm9sLnZhbHVlKSAmJlxuICAgICAgIShjb250cm9sLnZhbHVlLnRvU3RyaW5nKCkubWF0Y2goaW50ZWdlck51bWJlclJlZ2V4KSAmJiArY29udHJvbC52YWx1ZSA+PSBtaW5WYWx1ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VyOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7Y29udHJvbC52YWx1ZX0nYFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gSW50ZWdlcjogLTEyMywgMTIzXG4gIHN0YXRpYyBpbnRlZ2VyTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGludGVnZXJOdW1iZXJSZWdleCkpIHJldHVybiB7XG4gICAgICBpbnRlZ2VyTnVtYmVyOiB7XG4gICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBJbnRlZ2VyIFBvc2l0aXZlIC0+IDEyM1xuICBzdGF0aWMgaW50ZWdlclBvc2l0aXZlTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChpbnRlZ2VyUG9zaXRpdmVOdW1iZXJSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGludGVnZXJQb3NpdGl2ZU51bWJlcjoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIERlY2ltYWw6IC0xLjIzLCAxLjIzXG4gIHN0YXRpYyBkZWNpbWFsTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGRlY2ltYWxOdW1iZXJSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2ltYWxOdW1iZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBEZWNpbWFsIFBvc2l0aXZlOiAxLjIzXG4gIHN0YXRpYyBkZWNpbWFsUG9zaXRpdmVOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGRlY2ltYWxQb3NpdGl2ZU51bWJlclJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaW1hbFBvc2l0aXZlTnVtYmVyOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE51bWJlciBsZW5ndGhcbiAgc3RhdGljIG51bWVyaWNMZW5ndGgobGVuZ3RoOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiB2YWwudG9TdHJpbmcoKS5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGludmFsaWROdW1iZXJMZW5ndGg6IHtcbiAgICAgICAgICAgIGFjdHVhbExlbmd0aDogdmFsLFxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGg6IGxlbmd0aFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBQYXNzd29yZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCFjb250cm9sLnZhbHVlPy5tYXRjaChwYXNzd29yZFJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmRQb2xpY3lSZXF1aXJlbWVudHM6IHRydWUgfTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoIDwgOCkge1xuICAgICAgcmV0dXJuIHsgbWlubGVuZ3RoOiB7IHJlcXVpcmVkTGVuZ3RoOiA4IH0gfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgR3VpZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCFyZWdleEV4cC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBndWlkSXNWYWxpZDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBQYXNzd29yZEZvcm1NYXRjaFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1Bhc3N3b3JkID0gY29udHJvbC5nZXQoJ3Bhc3N3b3JkJyk7XG4gICAgY29uc3QgY3VycmVudFBhc3N3b3JkID0gY29udHJvbC5nZXQoJ2N1cnJlbnRQYXNzd29yZCcpO1xuICAgIGlmIChuZXdQYXNzd29yZCAmJiBjdXJyZW50UGFzc3dvcmQgJiYgbmV3UGFzc3dvcmQudmFsaWQgJiYgY3VycmVudFBhc3N3b3JkLnZhbGlkICYmIG5ld1Bhc3N3b3JkLnZhbHVlID09PSBjdXJyZW50UGFzc3dvcmQudmFsdWUpIHtcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkTWF0Y2g6IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDsgLy8gUGFzc3dvcmRzIG1hdGNoIG9yIGZvcm0gZmllbGRzIGhhcyBpdHMgb3duIGVycm9yc1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkRm9ybU5vdE1hdGNoVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgncGFzc3dvcmQnKTtcbiAgICBjb25zdCBjb25maXJtUGFzc3dvcmQgPSBjb250cm9sLmdldCgnY29uZmlybVBhc3N3b3JkJyk7XG4gICAgaWYgKChuZXdQYXNzd29yZC5lcnJvcnMgfHwgY29uZmlybVBhc3N3b3JkLmVycm9ycykgfHxcbiAgICAgIG5ld1Bhc3N3b3JkLnZhbHVlID09PSBjb25maXJtUGFzc3dvcmQudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBQYXNzd29yZHMgbWF0Y2ggb3IgZm9ybSBmaWVsZHMgaGFzIGl0cyBvd24gZXJyb3JzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkTm90TWF0Y2g6IHRydWUgfTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvTnVtYmVyVmFsaWRhdG9yKGZyb21Db250cm9sTmFtZTogc3RyaW5nLCB0b0NvbnRyb2xOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21Db250cm9sID0gZm9ybUdyb3VwLmdldChmcm9tQ29udHJvbE5hbWUpO1xuICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b0NvbnRyb2xOYW1lKTtcblxuICAgICAgLy8gS2VlcCBleGlzdGluZyBlcnJvcnNcbiAgICAgIGNvbnN0IGV4aXN0aW5nRnJvbUVycm9ycyA9IGZyb21Db250cm9sLmVycm9ycyB8fCB7fTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nVG9FcnJvcnMgPSB0b0NvbnRyb2wuZXJyb3JzIHx8IHt9O1xuXG4gICAgICAvLyBSZW1vdmUgb25seSBvdXIgY3VzdG9tIGVycm9yc1xuICAgICAgZGVsZXRlIGV4aXN0aW5nRnJvbUVycm9yc1tMb2NhbGl6YXRpb24uZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlXTtcbiAgICAgIGRlbGV0ZSBleGlzdGluZ1RvRXJyb3JzW0xvY2FsaXphdGlvbi5mb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2VdO1xuXG4gICAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkpIHtcbiAgICAgICAgZXhpc3RpbmdGcm9tRXJyb3JzW0xvY2FsaXphdGlvbi5mb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2VdID0gdHJ1ZTtcbiAgICAgICAgZXhpc3RpbmdUb0Vycm9yc1tMb2NhbGl6YXRpb24uZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGJhY2sgZXJyb3JzIG9yIG51bGwgaWYgbm9uZVxuICAgICAgZnJvbUNvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5rZXlzKGV4aXN0aW5nRnJvbUVycm9ycykubGVuZ3RoID8gZXhpc3RpbmdGcm9tRXJyb3JzIDogbnVsbCk7XG4gICAgICB0b0NvbnRyb2wuc2V0RXJyb3JzKE9iamVjdC5rZXlzKGV4aXN0aW5nVG9FcnJvcnMpLmxlbmd0aCA/IGV4aXN0aW5nVG9FcnJvcnMgOiBudWxsKTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZUJhbGFuY2UgPSAodW5pdHNWYWx1ZSwgYmFsYW5jZVZhbHVlKSA9PiB7IHJldHVybiB1bml0c1ZhbHVlICsgYmFsYW5jZVZhbHVlOyB9O1xuXG4gIHN0YXRpYyB1bml0c0JhbGFuY2VWYWxpZGF0b3IodW5pdHNDb250cm9sTmFtZTogc3RyaW5nLCBiYWxhbmNlQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCB1bml0c0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHVuaXRzQ29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCBiYWxhbmNlQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoYmFsYW5jZUNvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgdW5pdHNWYWx1ZSA9IHBhcnNlSW50KHVuaXRzQ29udHJvbC52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VWYWx1ZSA9IGJhbGFuY2VDb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCBiYWxhbmNlQ2FsY3VsYXRlZCA9IHRoaXMuY2FsY3VsYXRlQmFsYW5jZSh1bml0c1ZhbHVlLCBiYWxhbmNlVmFsdWUpO1xuICAgICAgICBpZiAoYmFsYW5jZUNhbGN1bGF0ZWQgPiBNQVhfQUxMT1dFRF9CQUxBTkNFKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21heGltdW06IHRydWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlQ2FsY3VsYXRlZCA8IE1JTl9BTExPV0VEX0JBTEFOQ0UpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX3VuaXRzX2JhbGFuY2VfbWluaW11bTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtaW5EYXRlVGltZShjb250cm9sTmFtZTogc3RyaW5nLCBtaW5EYXRlVGltZVZhbHVlOiBEYXRlKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbEdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuXG4gICAgICBpZiAoY29udHJvbEdyb3VwLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sR3JvdXAucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCBjb250cm9sVmFsdWU6IERhdGUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sRGF0ZSA9IG5ldyBEYXRlKGNvbnRyb2xWYWx1ZSkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgY29uc3QgbWluRGF0ZSA9IG5ldyBEYXRlKG1pbkRhdGVUaW1lVmFsdWUpLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgICAgICAgaWYgKGNvbnRyb2xEYXRlIDwgbWluRGF0ZSkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX2Zyb21fdGltZTogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9EYXRlKGZyb21EYXRlRmllbGQ6IHN0cmluZywgdG9EYXRlRmllbGQ6IHN0cmluZywgZnJvbVRpbWVGaWVsZDogc3RyaW5nID0gbnVsbCxcbiAgICB0b1RpbWVGaWVsZDogc3RyaW5nID0gbnVsbCwgZXJyb3JOYW1lOiBzdHJpbmcgPSAnZnJvbVRvRGF0ZScpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZnJvbURhdGU6IERhdGUgPSBmb3JtR3JvdXAuZ2V0KGZyb21EYXRlRmllbGQpPy52YWx1ZTtcbiAgICAgIGNvbnN0IHRvRGF0ZTogRGF0ZSA9IGZvcm1Hcm91cC5nZXQodG9EYXRlRmllbGQpPy52YWx1ZTtcbiAgICAgIGNvbnN0IGZyb21UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk/LnZhbHVlO1xuICAgICAgY29uc3QgdG9UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpPy52YWx1ZTtcbiAgICAgIGlmIChmcm9tVGltZSkge1xuICAgICAgICBmcm9tRGF0ZS5zZXRIb3Vycyhmcm9tVGltZS5ob3Vycyk7XG4gICAgICAgIGZyb21EYXRlLnNldE1pbnV0ZXMoZnJvbVRpbWUubWludXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAodG9UaW1lKSB7XG4gICAgICAgIHRvRGF0ZS5zZXRIb3Vycyh0b1RpbWUuaG91cnMpO1xuICAgICAgICB0b0RhdGUuc2V0TWludXRlcyh0b1RpbWUubWludXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAoKGZyb21EYXRlICE9PSBudWxsICYmIHRvRGF0ZSAhPT0gbnVsbCkgJiYgZnJvbURhdGUgPiB0b0RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvVGltZVJhbmdlKGZyb21UaW1lRmllbGQ6IHN0cmluZywgdG9UaW1lRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCk7XG4gICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk7XG5cbiAgICAgIC8vIEtlZXAgZXhpc3RpbmcgZXJyb3JzXG4gICAgICBjb25zdCBleGlzdGluZ0Zyb21FcnJvcnMgPSBmcm9tQ29udHJvbC5lcnJvcnMgfHwge307XG4gICAgICBjb25zdCBleGlzdGluZ1RvRXJyb3JzID0gdG9Db250cm9sLmVycm9ycyB8fCB7fTtcblxuICAgICAgLy8gUmVtb3ZlIG9ubHkgb3VyIGN1c3RvbSBlcnJvcnNcbiAgICAgIGRlbGV0ZSBleGlzdGluZ0Zyb21FcnJvcnNbTG9jYWxpemF0aW9uLmZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2VdO1xuICAgICAgZGVsZXRlIGV4aXN0aW5nVG9FcnJvcnNbTG9jYWxpemF0aW9uLmZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2VdO1xuXG4gICAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiYgdGhpcy5pc1ZhbHVlTGVuZ3RoVmFsaWQoZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkpIHtcbiAgICAgICAgZXhpc3RpbmdGcm9tRXJyb3JzW0xvY2FsaXphdGlvbi5mb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlXSA9IHRydWU7XG4gICAgICAgIGV4aXN0aW5nVG9FcnJvcnNbTG9jYWxpemF0aW9uLmZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2VdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgYmFjayBlcnJvcnMgb3IgbnVsbCBpZiBub25lXG4gICAgICBmcm9tQ29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMoZXhpc3RpbmdGcm9tRXJyb3JzKS5sZW5ndGggPyBleGlzdGluZ0Zyb21FcnJvcnMgOiBudWxsKTtcbiAgICAgIHRvQ29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMoZXhpc3RpbmdUb0Vycm9ycykubGVuZ3RoID8gZXhpc3RpbmdUb0Vycm9ycyA6IG51bGwpO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ub1RpbWUoZnJvbVRpbWVGaWVsZDogc3RyaW5nLCB0b1RpbWVGaWVsZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW47IH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCkudmFsdWU7XG4gICAgICBjb25zdCB0b1RpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCkudmFsdWU7XG4gICAgICBpZiAoIXRoaXMuaXNUaW1lTnVsbChmcm9tVGltZSkgJiYgIXRoaXMuaXNUaW1lTnVsbCh0b1RpbWUpICYmXG4gICAgICAgICEodG9UaW1lLmhvdXJzID09IDAgJiYgdG9UaW1lLm1pbnV0ZXMgPT0gMCkgJiZcbiAgICAgICAgKFxuICAgICAgICAgIChmcm9tVGltZS5ob3VycyA+IHRvVGltZS5ob3VycykgfHxcbiAgICAgICAgICAoZnJvbVRpbWUuaG91cnMgPT0gdG9UaW1lLmhvdXJzICYmIGZyb21UaW1lLm1pbnV0ZXMgPiB0b1RpbWUubWludXRlcylcbiAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNUaW1lTnVsbCA9ICh0aW1lOiBUaWJhVGltZSkgPT4gdGltZSA9PT0gbnVsbCB8fFxuICAgICh0aW1lLmhvdXJzID09PSBudWxsICYmIHRpbWUubWludXRlcyA9PT0gbnVsbCAmJiB0aW1lLnNlY29uZHMgPT09IG51bGwpO1xuXG4gIHN0YXRpYyBub1doaXRlc3BhY2VWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PlxuICAgICFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmIGlzTnVsbE9yRW1wdHkoY29udHJvbD8udmFsdWU/LnRyaW0oKSkgPyB7IHJlcXVpcmVkOiB0cnVlIH0gOiBudWxsO1xuXG4gIHN0YXRpYyBub1doaXRlc3BhY2VXaXRoaW5TZW50ZW5jZVZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+XG4gICAgIShjb250cm9sPy52YWx1ZT8uc3BsaXQoXCIgXCIpLmxlbmd0aCA9PT0gMSkgPyB7IG5vV2hpdGVzcGFjZVdpdGhpblNlbnRlbmNlOiB0cnVlIH0gOiBudWxsO1xuXG4gIHN0YXRpYyBub0RvdFdpdGhpblNlbnRlbmNlVmFsaWRhdG9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT5cbiAgICBjb250cm9sPy52YWx1ZT8uaW5jbHVkZXMoXCIuXCIpID8geyBub0RvdFdpdGhpblNlbnRlbmNlOiB0cnVlIH0gOiBudWxsO1xuXG4gIHN0YXRpYyB0ZXJtc1BvbGljeUNoZWNrYm94KCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkVGVybXM6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEZWZhdWx0QWNjZXNzUHJvZmlsZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkoY29udHJvbC52YWx1ZSkgJiYgIWNvbnRyb2wudmFsdWU/LmRlZmF1bHRBY2Nlc3NQcm9maWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub0RlZmF1bHRBY2Nlc3NQcm9maWxlOiB7XG4gICAgICAgICAgY29tcGFueU5hbWU6IGNvbnRyb2wudmFsdWUubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHpSYW5nZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLCBmcm9tWkZpZWxkOiBzdHJpbmcsIHRvWkZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBmcm9tWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21aRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICBjb25zdCB0b1pDb250cm9sID0gZm9ybUdyb3VwLmdldCh0b1pGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcblxuICAgICAgaWYgKGZyb21aQ29udHJvbC52YWx1ZT8uaWQgPiB0b1pDb250cm9sLnZhbHVlPy5pZCkge1xuICAgICAgICByZXR1cm4geyB6UmFuZ2U6IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uaW52YWxpZF9maWVsZHMpIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmFuZ2VEZWx0YVZhbGlkYXRvcihmcm9tRmllbGQ6IHN0cmluZywgdG9GaWVsZDogc3RyaW5nLCBtYXhEZWx0YTogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICAgIGNvbnN0IHRvQ29udHJvbCA9IGNvbnRyb2wuZ2V0KHRvRmllbGQpO1xuICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSBjb250cm9sLmdldChmcm9tRmllbGQpO1xuXG4gICAgICBpZiAoZnJvbUNvbnRyb2wgJiYgdG9Db250cm9sKSB7XG4gICAgICAgIGNvbnN0IGZyb21WYWx1ZSA9IGZyb21Db250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCB0b1ZhbHVlID0gdG9Db250cm9sLnZhbHVlO1xuXG4gICAgICAgIC8vIE9ubHkgdmFsaWRhdGUgaWYgYm90aCB2YWx1ZXMgYXJlIHByZXNlbnQgYW5kIG5vdCBlbXB0eVxuICAgICAgICBpZiAoZnJvbVZhbHVlICE9IG51bGwgJiYgdG9WYWx1ZSAhPSBudWxsICYmIGZyb21WYWx1ZSAhPT0gJycgJiYgdG9WYWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICBjb25zdCBkZWx0YSA9IHRvVmFsdWUgLSBmcm9tVmFsdWU7XG5cbiAgICAgICAgICBpZiAoZGVsdGEgPiBtYXhEZWx0YSkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgIHJhbmdlRGVsdGFFeGNlZWRlZDoge1xuICAgICAgICAgICAgICAgIGFjdHVhbERlbHRhOiBkZWx0YSxcbiAgICAgICAgICAgICAgICBtYXhEZWx0YTogbWF4RGVsdGEsXG4gICAgICAgICAgICAgICAgZnJvbTogZnJvbVZhbHVlLFxuICAgICAgICAgICAgICAgIHRvOiB0b1ZhbHVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkQ3JlZGVudGlhbHModHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwgY2FyUGxhdGVGaWVsZDogc3RyaW5nID0gJ2NhclBsYXRlJywgbW9iaWxlRmllbGQ6IHN0cmluZyA9ICdtb2JpbGUnLCBiYWRnZUZpZWxkOiBzdHJpbmcgPSAnYmFkZ2UnLFxuICAgIGVtYWlsRmllbGQ6IHN0cmluZyA9ICdlbWFpbCcsIHNlbmRFbWFpbEZpZWxkOiBzdHJpbmcgPSAnc2VuZEVtYWlsJyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gfCBudWxsID0+IHtcbiAgICAgIGxldCBjYXJQbGF0ZXNJbnZhbGlkID0gZmFsc2U7XG4gICAgICBsZXQgYmFkZ2VzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgbGV0IGludGVycG9sYXRlZENyZWRlbnRpYWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAvLyBDYXJkc1xuICAgICAgY29uc3QgYmFkZ2VzRm9ybUFycmF5ID0gZm9ybUdyb3VwLmdldChiYWRnZUZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgaWYgKGJhZGdlc0Zvcm1BcnJheSkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FyZCkpO1xuICAgICAgICBiYWRnZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoYmFkZ2VzRm9ybUFycmF5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2FyZHNJbnZhbGlkID0gYmFkZ2VzSW52YWxpZCB8fCAhYmFkZ2VzRm9ybUFycmF5O1xuXG4gICAgICAvL0NhciBwbGF0ZXNcbiAgICAgIGNvbnN0IGNhclBsYXRlc0Zvcm1BcnJheSA9IGZvcm1Hcm91cC5nZXQoY2FyUGxhdGVGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGlmIChjYXJQbGF0ZXNGb3JtQXJyYXkpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhcl9wbGF0ZSkpO1xuICAgICAgICBjYXJQbGF0ZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoY2FyUGxhdGVzRm9ybUFycmF5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2FyUGxhdGVzSW52YWxpZCA9IGNhclBsYXRlc0ludmFsaWQgfHwgIWNhclBsYXRlc0Zvcm1BcnJheTtcblxuICAgICAgLy8gTW9iaWxlXG4gICAgICBjb25zdCBtb2JpbGVGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQobW9iaWxlRmllbGQpO1xuICAgICAgaWYgKG1vYmlsZUZvcm1Db250cm9sKSB7XG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5tb2JpbGUpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTW9iaWxlSW52YWxpZCA9ICFtb2JpbGVGb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICAgIC8vIEVtYWlsXG4gICAgICBjb25zdCBlbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChlbWFpbEZpZWxkKTtcbiAgICAgIGNvbnN0IHNlbmRFbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChzZW5kRW1haWxGaWVsZCk7XG4gICAgICBpZiAoZW1haWxGb3JtQ29udHJvbCAmJiBzZW5kRW1haWxGb3JtQ29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmVtYWlsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0VtYWlsSW52YWxpZCA9ICEoc2VuZEVtYWlsRm9ybUNvbnRyb2w/LnZhbHVlICYmIGVtYWlsRm9ybUNvbnRyb2w/LnZhbHVlKTtcblxuICAgICAgY29uc3QgaXNSZXF1aXJlZENyZWRlbnRpYWxzID0gaXNDYXJQbGF0ZXNJbnZhbGlkICYmIGlzQ2FyZHNJbnZhbGlkICYmIGlzTW9iaWxlSW52YWxpZCAmJiBpc0VtYWlsSW52YWxpZDtcblxuICAgICAgaWYgKGlzUmVxdWlyZWRDcmVkZW50aWFscykge1xuICAgICAgICBjb25zdCBsYXN0Q3JlZGVudGlhbCA9IGludGVycG9sYXRlZENyZWRlbnRpYWxzLnBvcCgpO1xuICAgICAgICBsZXQgaW50ZXJwb2xhdGVQYXJhbXMgPSBgJHtpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5qb2luKCcsICcpfSAke3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ub3IpfSAke2xhc3RDcmVkZW50aWFsfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRDcmVkZW50aWFsczogdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5yZXF1aXJlZF9jcmVkZW50aWFsc19tZXNzYWdlLCB7IGNyZWRlbnRpYWxzOiBpbnRlcnBvbGF0ZVBhcmFtcyB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzRm9ybUNvbnRyb2xMaXN0SW52YWxpZChsaXN0OiBVbnR5cGVkRm9ybUNvbnRyb2xbXSkge1xuICAgIGxldCBpc0ludmFsaWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgbGlzdCkge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIGlzSW52YWxpZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc0ludmFsaWQ7XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWREYXlzKHNwZWNpYWxEYXlzRmllbGQ6IHN0cmluZywgd2Vla0RheXNGaWVsZDogc3RyaW5nLCBlcnJvck5hbWU6IHN0cmluZyA9ICdyZXF1aXJlZERheXMnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW47IH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHNwZWNpYWxEYXlzOiBudW1iZXIgPSBmb3JtR3JvdXAuZ2V0KHNwZWNpYWxEYXlzRmllbGQpLnZhbHVlO1xuICAgICAgY29uc3Qgd2Vla0RheXM6IG51bWJlciA9IGZvcm1Hcm91cC5nZXQod2Vla0RheXNGaWVsZCkudmFsdWU7XG4gICAgICBpZiAoc3BlY2lhbERheXMgPiAwIHx8IHdlZWtEYXlzID4gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGlzUm9sZU5hbWVFeGlzdHMocm9sZVNlcnZpY2VQcm94eTogQ2xvdWQuUm9sZVNlcnZpY2VQcm94eSwgcm9sZUlkOiBudW1iZXIpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXG4gICAgICAgIGRlbGF5KDUwMCksXG4gICAgICAgIGRlYm91bmNlVGltZShJTlBVVF9TRUFSQ0hfREVCT1VOQ0VfVElNRSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiByb2xlU2VydmljZVByb3h5LmlzRXhpc3RzKGNvbnRyb2wudmFsdWUsIHJvbGVJZCA/PyB1bmRlZmluZWQpLnBpcGUoXG4gICAgICAgICAgbWFwKHJlcyA9PiByZXMuZGF0YSA9PT0gdHJ1ZSB8fCAhcmVzLmlzU3VjY2VzcyA/IHsgcm9sZU5hbWVBbHJlYWR5RXhpc3RzOiB0cnVlIH0gOiBudWxsKSkpKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGlzQWNjZXNzUHJvZmlsZU51bWJlckF2YWlsYWJsZShhY2Nlc3NQcm9maWxlU2VydmljZVByb3h5OiBFZGdlLkFjY2Vzc1Byb2ZpbGVTZXJ2aWNlUHJveHksIGd1aWQ6IHN0cmluZywgY3VycmVudFZhbHVlOiBudW1iZXIpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgLy8gQ2FsbCBzZXJ2aWNlIHRvIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzUHJvZmlsZVNlcnZpY2VQcm94eS5nZXRBdmFpbGFibGVOdW1iZXIodmFsdWUsIGd1aWQpLnBpcGUoXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gIXJlcy5kYXRhPy5pc0F2YWlsYWJsZSB8fCAhcmVzLmlzU3VjY2VzcyA/IHsgYWNjZXNzUHJvZmlsZU51bWJlclRha2VuOiB0cnVlIH0gOiBudWxsKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB0aWJhVGltZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsOiBUaWJhVGltZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBjb25zdCBoYXNJbnZhbGlkVGltZSA9XG4gICAgICB2YWwgJiZcbiAgICAgICgodmFsLmhvdXJzICE9IG51bGwgJiYgdmFsLm1pbnV0ZXMgPT0gbnVsbCkgfHxcbiAgICAgICAgKHZhbC5ob3VycyA9PSBudWxsICYmIHZhbC5taW51dGVzICE9IG51bGwpKTtcblxuICAgIHJldHVybiBoYXNJbnZhbGlkVGltZSA/IHsgaW52YWxpZFRpbWU6IHRydWUgfSA6IG51bGw7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVUaWJhVGltZUluUmFuZ2VWYWxpZGF0b3IobWluVGltZTogVGliYVRpbWUsIG1heFRpbWU6IFRpYmFUaW1lKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY29udHJvbC52YWx1ZSwgbWluVGltZSwgbWF4VGltZSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBlbnRyeUV4aXRSZXF1aXJlZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgZW50cnkgPSBjb250cm9sLmdldCgnZW50cnknKT8udmFsdWU7XG4gICAgY29uc3QgZXhpdCA9IGNvbnRyb2wuZ2V0KCdleGl0Jyk/LnZhbHVlO1xuXG4gICAgY29uc3QgYm90aEVtcHR5ID0gIWVudHJ5ICYmICFleGl0O1xuXG4gICAgcmV0dXJuIGJvdGhFbXB0eSA/IHsgcmVxdWlyZWQ6IHRydWUgfSA6IG51bGw7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTdHJpbmdISE1NSW5SYW5nZVZhbGlkYXRvcihtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoISFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlLmxlbmd0aCAhPT0gNCkgeyAvLyBBc3N1bWluZyB0aW1lIGZvcm1hdCBpcyAnSEhNTSdcbiAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX2Zvcm1hdDogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhvdXJzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDAsIDIpKTtcbiAgICAgICAgICBjb25zdCBtaW51dGVzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDIpKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VGltZTogVGliYVRpbWUgPSB7IGhvdXJzLCBtaW51dGVzIH07XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY3VycmVudFRpbWUsIG1pblRpbWUsIG1heFRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHRpbWVSYW5nZUFycmF5T3ZlcmxhcFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoY29udHJvbC52YWxpZCAmJiBjb250cm9sLmVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1BcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSYW5nZSA9IGZvcm1BcnJheVtpXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RnJvbSA9IHRpbWVUb01vbWVudChjdXJyZW50UmFuZ2UuZnJvbSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRvID0gdGltZVRvTW9tZW50KGN1cnJlbnRSYW5nZS50byk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudEZyb20gJiYgY3VycmVudFRvKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBmb3JtQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVJhbmdlID0gZm9ybUFycmF5W2pdO1xuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlRnJvbSA9IHRpbWVUb01vbWVudChjb21wYXJlUmFuZ2UuZnJvbSk7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVUbyA9IHRpbWVUb01vbWVudChjb21wYXJlUmFuZ2UudG8pO1xuXG4gICAgICAgICAgICAgIGlmIChjb21wYXJlRnJvbSAmJiBjb21wYXJlVG8pIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmxhcFxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlc092ZXJsYXAgPSBjdXJyZW50RnJvbS5pc0JlZm9yZShjb21wYXJlVG8pICYmIGN1cnJlbnRUby5pc0FmdGVyKGNvbXBhcmVGcm9tKTtcblxuICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25fdGltZV9yYW5nZV9vdmVybGFwOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmV2ZXJ0QXRDb21wYXJpc29uVmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IChmb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGNvbXBhcmlzb25UeXBlID0gZm9ybUNvbnRyb2wuZ2V0KCdjb21wYXJpc29uVHlwZScpPy52YWx1ZTtcbiAgICBjb25zdCBvY2N1cGFuY3lWYWx1ZUN0cmwgPSBmb3JtQ29udHJvbC5nZXQoJ29jY3VwYW5jeVZhbHVlJyk7XG4gICAgY29uc3QgcmV2ZXJ0QXRWYWx1ZUN0cmwgPSBmb3JtQ29udHJvbC5nZXQoJ3JldmVydEF0VmFsdWUnKTtcblxuICAgIGlmICghb2NjdXBhbmN5VmFsdWVDdHJsIHx8ICFyZXZlcnRBdFZhbHVlQ3RybCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBvY2N1cGFuY3lWYWx1ZSA9ICtvY2N1cGFuY3lWYWx1ZUN0cmwudmFsdWU7XG4gICAgY29uc3QgcmV2ZXJ0QXRWYWx1ZSA9ICtyZXZlcnRBdFZhbHVlQ3RybC52YWx1ZTtcblxuICAgIC8vIENsZWFyIHByZXZpb3VzIGVycm9yc1xuICAgIHJldmVydEF0VmFsdWVDdHJsLnNldEVycm9ycyhudWxsKTtcblxuICAgIGlmIChjb21wYXJpc29uVHlwZSA9PT0gQ2xvdWQuRHluYW1pY1ByaWNpbmdDb21wYXJpc29uVHlwZS5Nb3JlVGhhbikge1xuICAgICAgaWYgKHJldmVydEF0VmFsdWUgPj0gb2NjdXBhbmN5VmFsdWUpIHtcbiAgICAgICAgcmV2ZXJ0QXRWYWx1ZUN0cmwuc2V0RXJyb3JzKHsgcmV2ZXJ0X2F0X211c3RfYmVfbGVzc190aGFuX29jY3VwYW5jeTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29tcGFyaXNvblR5cGUgPT09IENsb3VkLkR5bmFtaWNQcmljaW5nQ29tcGFyaXNvblR5cGUuTGVzc1RoYW4pIHtcbiAgICAgIGlmIChyZXZlcnRBdFZhbHVlIDw9IG9jY3VwYW5jeVZhbHVlKSB7XG4gICAgICAgIHJldmVydEF0VmFsdWVDdHJsLnNldEVycm9ycyh7IHJldmVydF9hdF9tdXN0X2JlX21vcmVfdGhhbl9vY2N1cGFuY3k6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgLyoqXG4gKiBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBudW1iZXIgaXMgYSBtdWx0aXBsZSBvZiBhIHNwZWNpZmllZCBzdGVwLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIHZhbGlkYXRpbmcgaW5wdXRzIGxpa2UgY3VycmVuY3kgYW1vdW50cyBvciBvdGhlciB2YWx1ZXMgdGhhdCBzaG91bGRcbiAqIGZvbGxvdyBhIHNwZWNpZmljIGluY3JlbWVudCBwYXR0ZXJuLlxuICpcbiAqIEBwYXJhbSBzdGVwIC0gVGhlIHN0ZXAgc2l6ZSB0aGF0IHRoZSB2YWx1ZSBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiAoZS5nLiwgMC4wNSBmb3IgY3VycmVuY3kpLlxuICogQHJldHVybnMgQSBWYWxpZGF0b3JGbiB0aGF0IGNoZWNrcyBpZiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wgaXMgYSBtdWx0aXBsZSBvZiB0aGUgc3RlcC5cbiAqXG4gKiBVc2FnZTpcbiAqIGNvbnN0IHN0ZXBWYWxpZGF0b3IgPSBNeUNsYXNzLmFtb3VudFN0ZXBWYWxpZGF0b3IoMC4wNSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB2YWx1ZSBpcyAwLjEwIGFuZCB0aGUgc3RlcCBpcyAwLjA1LCB0aGUgdmFsaWRhdG9yIHdpbGwgcGFzcy5cbiAqIC8vIElmIHRoZSB2YWx1ZSBpcyAwLjEyIGFuZCB0aGUgc3RlcCBpcyAwLjA1LCB0aGUgdmFsaWRhdG9yIHdpbGwgZmFpbC5cbiAqL1xuICBzdGF0aWMgYW1vdW50U3RlcFZhbGlkYXRvcihzdGVwOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICtjb250cm9sLnZhbHVlO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBudW1iZXIgYW5kIGlmIGl0IGlzIGEgbXVsdGlwbGUgb2YgdGhlIHN0ZXBcbiAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgKyhNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwKS50b0ZpeGVkKDIpID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDsgIC8vIHZhbGlkIHZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgdmFsaWQsIHJldHVybiBhbiBlcnJvciB3aXRoIHRoZSBzdGVwIHZhbHVlXG4gICAgICByZXR1cm4geyBpbnZhbGlkU3RlcDogc3RlcC50b0ZpeGVkKDIpIH07XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsdWVHcmVhdGVyVGhhbk9yRXF1YWxUbyhmcm9tQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCB0b0NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZyb21UaW1lSW5OdW1iZXI6IG51bWJlciA9IGZyb21Db250cm9sLnZhbHVlO1xuICAgIGNvbnN0IHRvVGltZUluTnVtYmVyOiBudW1iZXIgPSB0b0NvbnRyb2wudmFsdWU7XG4gICAgcmV0dXJuIGZyb21UaW1lSW5OdW1iZXIgIT09IG51bGwgJiYgdG9UaW1lSW5OdW1iZXIgIT09IG51bGwgJiYgK2Zyb21UaW1lSW5OdW1iZXIgPiArdG9UaW1lSW5OdW1iZXI7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWx1ZUxlbmd0aFZhbGlkKGZyb21Db250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHRvQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZnJvbVRpbWVJbk51bWJlcjogbnVtYmVyID0gZnJvbUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgdG9UaW1lSW5OdW1iZXI6IG51bWJlciA9IHRvQ29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gZnJvbVRpbWVJbk51bWJlci50b1N0cmluZygpLmxlbmd0aCA9PT0gVkFMSURfVElNRV9NQVhfTEVOR1RIICYmXG4gICAgICB0b1RpbWVJbk51bWJlci50b1N0cmluZygpLmxlbmd0aCA9PT0gVkFMSURfVElNRV9NQVhfTEVOR1RIO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY3VycmVudFRpbWU6IFRpYmFUaW1lLCBtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWU6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nOyB9OyB9IHwgbnVsbCB7XG4gICAgLy8gSWYgdGltZSBpcyB1bmRlZmluZWQsIHJldHVybiBudWxsIChubyBlcnJvcilcbiAgICBpZiAoIWN1cnJlbnRUaW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXRUaW1lID0gKHRpbWU6IFRpYmFUaW1lKTogc3RyaW5nID0+XG4gICAgICBgJHt0aW1lLmhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHt0aW1lLm1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG5cbiAgICBjb25zdCBob3VyczogbnVtYmVyID0gK2N1cnJlbnRUaW1lLmhvdXJzO1xuICAgIGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9ICtjdXJyZW50VGltZS5taW51dGVzO1xuXG4gICAgY29uc3QgaXNWYWxpZFRpbWUgPVxuICAgICAgKGhvdXJzID4gbWluVGltZS5ob3VycyB8fCAoaG91cnMgPT09IG1pblRpbWUuaG91cnMgJiYgbWludXRlcyA+PSBtaW5UaW1lLm1pbnV0ZXMpKSAmJlxuICAgICAgKGhvdXJzIDwgbWF4VGltZS5ob3VycyB8fCAoaG91cnMgPT09IG1heFRpbWUuaG91cnMgJiYgbWludXRlcyA8PSBtYXhUaW1lLm1pbnV0ZXMpKTtcblxuICAgIC8vIElmIHRpbWUgaXMgdmFsaWQsIHJldHVybiBudWxsIChubyBlcnJvcilcbiAgICBpZiAoaXNWYWxpZFRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB2YWxpZGF0aW9uIGVycm9yIHdpdGggZm9ybWF0dGVkIHRpbWUgcmFuZ2VcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZToge1xuICAgICAgICBmcm9tOiBmb3JtYXRUaW1lKG1pblRpbWUpLFxuICAgICAgICB0bzogZm9ybWF0VGltZShtYXhUaW1lKSxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cblxufVxuIl19
|
|
@@ -95184,23 +95184,23 @@ class TibaValidators {
|
|
|
95184
95184
|
}
|
|
95185
95185
|
}
|
|
95186
95186
|
static fromToNumberValidator(fromControlName, toControlName) {
|
|
95187
|
-
return (
|
|
95188
|
-
|
|
95189
|
-
|
|
95190
|
-
|
|
95191
|
-
|
|
95192
|
-
|
|
95193
|
-
|
|
95194
|
-
|
|
95195
|
-
|
|
95196
|
-
|
|
95197
|
-
|
|
95198
|
-
|
|
95199
|
-
|
|
95200
|
-
|
|
95201
|
-
|
|
95202
|
-
|
|
95203
|
-
return
|
|
95187
|
+
return (formGroup) => {
|
|
95188
|
+
const fromControl = formGroup.get(fromControlName);
|
|
95189
|
+
const toControl = formGroup.get(toControlName);
|
|
95190
|
+
// Keep existing errors
|
|
95191
|
+
const existingFromErrors = fromControl.errors || {};
|
|
95192
|
+
const existingToErrors = toControl.errors || {};
|
|
95193
|
+
// Remove only our custom errors
|
|
95194
|
+
delete existingFromErrors[Localization.form_validation_invalid_number_range];
|
|
95195
|
+
delete existingToErrors[Localization.form_validation_invalid_number_range];
|
|
95196
|
+
if (this.isValueGreaterThanOrEqualTo(fromControl, toControl)) {
|
|
95197
|
+
existingFromErrors[Localization.form_validation_invalid_number_range] = true;
|
|
95198
|
+
existingToErrors[Localization.form_validation_invalid_number_range] = true;
|
|
95199
|
+
}
|
|
95200
|
+
// Apply back errors or null if none
|
|
95201
|
+
fromControl.setErrors(Object.keys(existingFromErrors).length ? existingFromErrors : null);
|
|
95202
|
+
toControl.setErrors(Object.keys(existingToErrors).length ? existingToErrors : null);
|
|
95203
|
+
return null;
|
|
95204
95204
|
};
|
|
95205
95205
|
}
|
|
95206
95206
|
static { this.calculateBalance = (unitsValue, balanceValue) => { return unitsValue + balanceValue; }; }
|
|
@@ -95263,23 +95263,23 @@ class TibaValidators {
|
|
|
95263
95263
|
};
|
|
95264
95264
|
}
|
|
95265
95265
|
static fromToTimeRange(fromTimeField, toTimeField) {
|
|
95266
|
-
return (
|
|
95267
|
-
|
|
95268
|
-
|
|
95269
|
-
|
|
95270
|
-
|
|
95271
|
-
|
|
95272
|
-
|
|
95273
|
-
|
|
95274
|
-
|
|
95275
|
-
|
|
95276
|
-
|
|
95277
|
-
|
|
95278
|
-
|
|
95279
|
-
|
|
95280
|
-
|
|
95281
|
-
|
|
95282
|
-
return
|
|
95266
|
+
return (formGroup) => {
|
|
95267
|
+
const toControl = formGroup.get(toTimeField);
|
|
95268
|
+
const fromControl = formGroup.get(fromTimeField);
|
|
95269
|
+
// Keep existing errors
|
|
95270
|
+
const existingFromErrors = fromControl.errors || {};
|
|
95271
|
+
const existingToErrors = toControl.errors || {};
|
|
95272
|
+
// Remove only our custom errors
|
|
95273
|
+
delete existingFromErrors[Localization.form_validation_invalid_time_range];
|
|
95274
|
+
delete existingToErrors[Localization.form_validation_invalid_time_range];
|
|
95275
|
+
if (this.isValueGreaterThanOrEqualTo(fromControl, toControl) && this.isValueLengthValid(fromControl, toControl)) {
|
|
95276
|
+
existingFromErrors[Localization.form_validation_invalid_time_range] = true;
|
|
95277
|
+
existingToErrors[Localization.form_validation_invalid_time_range] = true;
|
|
95278
|
+
}
|
|
95279
|
+
// Apply back errors or null if none
|
|
95280
|
+
fromControl.setErrors(Object.keys(existingFromErrors).length ? existingFromErrors : null);
|
|
95281
|
+
toControl.setErrors(Object.keys(existingToErrors).length ? existingToErrors : null);
|
|
95282
|
+
return null;
|
|
95283
95283
|
};
|
|
95284
95284
|
}
|
|
95285
95285
|
static fromToTime(fromTimeField, toTimeField) {
|
|
@@ -104380,6 +104380,8 @@ var AnalyticsEventsText;
|
|
|
104380
104380
|
AnalyticsEventsText["DuplicateRateConditions"] = "Duplicate rate conditions";
|
|
104381
104381
|
AnalyticsEventsText["EditConditionRate"] = "Edit condition rate";
|
|
104382
104382
|
AnalyticsEventsText["HttpError"] = "Http Error";
|
|
104383
|
+
AnalyticsEventsText["EventCreateColor"] = "Event create color";
|
|
104384
|
+
AnalyticsEventsText["EventCreateModel"] = "Event create model";
|
|
104383
104385
|
})(AnalyticsEventsText || (AnalyticsEventsText = {}));
|
|
104384
104386
|
const ReportMethodDictionary = {
|
|
104385
104387
|
[FileGenerateMethod.viewPDF]: `View report PDF`,
|