@tiba-spark/client-shared-lib 10.3.0-732 → 10.3.0-745
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/components/field-validations/field-validations.component.mjs +33 -21
- package/esm2022/libraries/enums/localization.enum.mjs +5 -2
- package/esm2022/libraries/utils/custom-validator.util.mjs +40 -27
- package/fesm2022/tiba-spark-client-shared-lib.mjs +76 -48
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/components/field-validations/field-validations.component.d.ts.map +1 -1
- package/libraries/enums/localization.enum.d.ts +4 -1
- package/libraries/enums/localization.enum.d.ts.map +1 -1
- package/libraries/utils/custom-validator.util.d.ts +10 -6
- package/libraries/utils/custom-validator.util.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -8,11 +8,13 @@ export const noEmojiRegex = /[^a-zA-Z0-9 ]/gm;
|
|
|
8
8
|
export const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~])[A-Za-z\d!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]{4,}$/g;
|
|
9
9
|
export const alphanumericRegex = /^[a-zA-Z0-9]+$/;
|
|
10
10
|
export const mobileRegex = /^[0-9]+$/;
|
|
11
|
-
export const
|
|
12
|
-
export const
|
|
13
|
-
export const
|
|
11
|
+
export const integerNumberRegex = /^[-]?(\d+)?$/;
|
|
12
|
+
export const integerPositiveNumberRegex = /^[0-9]+$/;
|
|
13
|
+
export const decimalNumberRegex = /^[-]?(\d+)(\.\d{1,2})?$/;
|
|
14
|
+
export const decimalPositiveNumberRegex = /^(\d+)(\.\d{1,2})?$/;
|
|
14
15
|
export const regexExp = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/;
|
|
15
|
-
export const percentageRegex = /^(100
|
|
16
|
+
export const percentageRegex = /^(100|[1-9]?[0-9])$/;
|
|
17
|
+
export const decimalPercentageRegex = /^(100(?:\.0{1,2})?|[0-9]{1,2}(?:\.[0-9]{1,2})?)$/;
|
|
16
18
|
export function isNullOrEmpty(val) {
|
|
17
19
|
return (val === undefined || val === null || val === '');
|
|
18
20
|
}
|
|
@@ -69,12 +71,14 @@ export class TibaValidators {
|
|
|
69
71
|
static percentage(control) {
|
|
70
72
|
const val = control.value;
|
|
71
73
|
if (!isNullOrEmpty(val) && !val.toString().match(percentageRegex)) {
|
|
72
|
-
return {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
return { form_validation_invalid_percentage: true };
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
static decimalPercentage(control) {
|
|
79
|
+
const val = control.value;
|
|
80
|
+
if (!isNullOrEmpty(val) && !val.toString().match(decimalPercentageRegex)) {
|
|
81
|
+
return { form_validation_invalid_decimal_percentage: true };
|
|
78
82
|
}
|
|
79
83
|
return null;
|
|
80
84
|
}
|
|
@@ -111,7 +115,7 @@ export class TibaValidators {
|
|
|
111
115
|
}
|
|
112
116
|
static validatePositiveInteger(control, minValue) {
|
|
113
117
|
if (!isNullOrEmpty(control.value) &&
|
|
114
|
-
!(control.value.toString().match(
|
|
118
|
+
!(control.value.toString().match(integerNumberRegex) && +control.value >= minValue)) {
|
|
115
119
|
return {
|
|
116
120
|
validatePositiveInteger: {
|
|
117
121
|
value: ` '${control.value}'`
|
|
@@ -120,42 +124,51 @@ export class TibaValidators {
|
|
|
120
124
|
}
|
|
121
125
|
return null;
|
|
122
126
|
}
|
|
123
|
-
//
|
|
124
|
-
static
|
|
127
|
+
// Integer: -123, 123
|
|
128
|
+
static integerNumber(control) {
|
|
125
129
|
const val = control.value;
|
|
126
|
-
if (!isNullOrEmpty(val) && !val.toString().match(
|
|
130
|
+
if (!isNullOrEmpty(val) && !val.toString().match(integerNumberRegex))
|
|
127
131
|
return {
|
|
128
|
-
|
|
132
|
+
integerNumber: {
|
|
129
133
|
value: ` '${val}'`,
|
|
130
|
-
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
// Integer Positive -> 123
|
|
139
|
+
static integerPositiveNumber(control) {
|
|
140
|
+
const val = control.value;
|
|
141
|
+
if (!isNullOrEmpty(val) && !val.toString().match(integerPositiveNumberRegex)) {
|
|
142
|
+
return {
|
|
143
|
+
integerPositiveNumber: {
|
|
144
|
+
value: ` '${val}'`
|
|
131
145
|
}
|
|
132
146
|
};
|
|
133
147
|
}
|
|
134
148
|
return null;
|
|
135
149
|
}
|
|
136
|
-
// Decimal
|
|
137
|
-
static
|
|
150
|
+
// Decimal: -1.23, 1.23
|
|
151
|
+
static decimalNumber(control) {
|
|
138
152
|
const val = control.value;
|
|
139
|
-
if (!isNullOrEmpty(val) && !val.toString().match(
|
|
153
|
+
if (!isNullOrEmpty(val) && !val.toString().match(decimalNumberRegex)) {
|
|
140
154
|
return {
|
|
141
|
-
|
|
155
|
+
decimalNumber: {
|
|
142
156
|
value: ` '${val}'`,
|
|
143
|
-
pattern: decimalRegex
|
|
144
157
|
}
|
|
145
158
|
};
|
|
146
159
|
}
|
|
147
160
|
return null;
|
|
148
161
|
}
|
|
149
|
-
// Positive
|
|
150
|
-
static
|
|
162
|
+
// Decimal Positive: 1.23
|
|
163
|
+
static decimalPositiveNumber(control) {
|
|
151
164
|
const val = control.value;
|
|
152
|
-
if (!isNullOrEmpty(val) && !val.toString().match(
|
|
165
|
+
if (!isNullOrEmpty(val) && !val.toString().match(decimalPositiveNumberRegex)) {
|
|
153
166
|
return {
|
|
154
|
-
|
|
167
|
+
decimalPositiveNumber: {
|
|
155
168
|
value: ` '${val}'`,
|
|
156
|
-
pattern: integerNumbersRegex
|
|
157
169
|
}
|
|
158
170
|
};
|
|
171
|
+
}
|
|
159
172
|
return null;
|
|
160
173
|
}
|
|
161
174
|
// Number length
|
|
@@ -531,4 +544,4 @@ export class TibaValidators {
|
|
|
531
544
|
};
|
|
532
545
|
}
|
|
533
546
|
}
|
|
534
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsT0FBTyxFQUFFLFlBQVksRUFBb0IsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcseUhBQXlILENBQUM7QUFDdkosTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDO0FBQ3BELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyx1RkFBdUYsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsaUNBQWlDLENBQUM7QUFFakUsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFR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QUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDekIsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDeEI7U0FDRixDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZGVib3VuY2VUaW1lLCBkZWxheSwgbWFwLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTlBVVF9TRUFSQ0hfREVCT1VOQ0VfVElNRSwgVkFMSURfVElNRV9NQVhfTEVOR1RIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IExvY2FsaXphdGlvbiB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IENsb3VkLCBFZGdlIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eSc7XG5pbXBvcnQgeyBNaWRkYXlQZXJpb2QsIFRpbWUgYXMgVGliYVRpbWUsIHRpbWVUb01vbWVudCB9IGZyb20gJy4vZGF0ZS51dGlsJztcblxuY29uc3QgTUlOX0FMTE9XRURfQkFMQU5DRSA9IDA7XG5jb25zdCBNQVhfQUxMT1dFRF9CQUxBTkNFID0gMjU1O1xuZXhwb3J0IGNvbnN0IG5vRW1vamlSZWdleCA9IC9bXmEtekEtWjAtOSBdL2dtO1xuZXhwb3J0IGNvbnN0IHBhc3N3b3JkUmVnZXggPSAvXig/PS4qW2Etel0pKD89LipbQS1aXSkoPz0uKlxcZCkoPz0uKlshXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXF1eX2B7fH1+XSlbQS1aYS16XFxkIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl17NCx9JC9nO1xuZXhwb3J0IGNvbnN0IGFscGhhbnVtZXJpY1JlZ2V4ID0gL15bYS16QS1aMC05XSskLztcbmV4cG9ydCBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzAtOV0rJC87XG5leHBvcnQgY29uc3QgaW50ZWdlck51bWJlcnNSZWdleCA9IC9eWy1dPyhcXGQrKT8kLztcbmV4cG9ydCBjb25zdCBkZWNpbWFsUG9zaXRpdmVSZWdleCA9IC9eKFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCBkZWNpbWFsUmVnZXggPSAvXi0/KFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCByZWdleEV4cCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC87XG5leHBvcnQgY29uc3QgcGVyY2VudGFnZVJlZ2V4ID0gL14oMTAwKFxcLjArKT98WzEtOV0/XFxkKFxcLlxcZCspPykkLztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yRW1wdHkodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuICh2YWwgPT09IHVuZGVmaW5lZCB8fCB2YWwgPT09IG51bGwgfHwgdmFsID09PSAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QW1QbVRvMjRIb3Vycyh0aW1lOiBUaWJhVGltZSk6IFRpYmFUaW1lIHtcbiAgbGV0IF90aW1lOiBUaWJhVGltZSA9IG51bGw7XG4gIGlmICh0aW1lKSB7XG4gICAgX3RpbWUgPSB7IC4uLnRpbWUgfTsgLy8gU3ByZWFkIG9wZXJhdG9yIGZvciBpbW11dGFiaWxpdHlcblxuICAgIGlmICh0aW1lLm1pZGRheVBlcmlvZCA9PT0gTWlkZGF5UGVyaW9kLlBNICYmICt0aW1lLmhvdXJzICE9PSAxMikge1xuICAgICAgX3RpbWUuaG91cnMgPSArX3RpbWUuaG91cnMgKyAxMjsgLy8gQ29udmVydCBQTSBob3VycyAoZXhjZXB0IDEyIFBNKSB0byAyNC1ob3VyIGZvcm1hdFxuICAgIH0gZWxzZSBpZiAodGltZS5taWRkYXlQZXJpb2QgPT09IE1pZGRheVBlcmlvZC5BTSAmJiArdGltZS5ob3VycyA9PT0gMTIpIHtcbiAgICAgIF90aW1lLmhvdXJzID0gMDsgLy8gTWlkbmlnaHQgY2FzZSAoMTIgQU0gaXMgMDA6MDAgaW4gMjQtaG91ciB0aW1lKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfdGltZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnQyNEhvdXJzVG9BbVBNKHRpbWU6IFRpYmFUaW1lKTogVGliYVRpbWUge1xuICBsZXQgX3RpbWU6IFRpYmFUaW1lID0gbnVsbDtcbiAgaWYgKHRpbWUpIHtcbiAgICBfdGltZSA9IHsgLi4udGltZSB9OyAvLyBTcHJlYWQgb3BlcmF0b3IgZm9yIGltbXV0YWJpbGl0eVxuICAgIGNvbnN0IGhvdXJzID0gK3RpbWUuaG91cnM7XG4gICAgaWYgKGhvdXJzID49IDAgJiYgaG91cnMgPD0gMTEpIHtcbiAgICAgIF90aW1lLm1pZGRheVBlcmlvZCA9IE1pZGRheVBlcmlvZC5BTTtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyICYmIGhvdXJzIDw9IDIzKSB7XG4gICAgICBfdGltZS5taWRkYXlQZXJpb2QgPSBNaWRkYXlQZXJpb2QuUE07XG4gICAgfSBlbHNlIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICAgIF90aW1lLm1pZGRheVBlcmlvZCA9IE1pZGRheVBlcmlvZC5BTTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMgPT09IDI0KSB7XG4gICAgICBfdGltZS5ob3VycyA9IDA7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgX3RpbWUuaG91cnMgPSArX3RpbWUuaG91cnMgLSAxMjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX3RpbWU7XG59XG5cbmV4cG9ydCBjbGFzcyBUaWJhVmFsaWRhdG9ycyB7XG5cbiAgLy8gTm8gZW1vamkgdmFsaWRhdGlvblxuICBzdGF0aWMgbm9FbW9qaShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmIHZhbC50b1N0cmluZygpLm1hdGNoKG5vRW1vamlSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vRW1vamk6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgICAgcGF0dGVybjogbm9FbW9qaVJlZ2V4XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgcGVyY2VudGFnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChwZXJjZW50YWdlUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwZXJjZW50YWdlUmVnZXg6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgICAgcGF0dGVybjogcGVyY2VudGFnZVJlZ2V4XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBNb2JpbGUgb25seSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBtb2JpbGVOdW1iZXJzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKG1vYmlsZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9iaWxlTnVtYmVyczoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBtb2JpbGVSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGhvdGVsUm9vbk51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goYWxwaGFudW1lcmljUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbHBoYW51bWVyaWNSZWdleDoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBhbHBoYW51bWVyaWNSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VySW5jbHVkZVplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBUaWJhVmFsaWRhdG9ycy52YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcihjb250cm9sLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcldpdGhvdXRaZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gVGliYVZhbGlkYXRvcnMudmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbCwgMSk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBtaW5WYWx1ZTogbnVtYmVyKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmXG4gICAgICAhKGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5tYXRjaChpbnRlZ2VyTnVtYmVyc1JlZ2V4KSAmJiArY29udHJvbC52YWx1ZSA+PSBtaW5WYWx1ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VyOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7Y29udHJvbC52YWx1ZX0nYFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRGVjaW1hbCBQb3NpdGl2ZSBOdW1iZXJzIG9ubHkgdmFsaWRhdGlvblxuICBzdGF0aWMgZGVjaW1hbFBvc2l0aXZlTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbFBvc2l0aXZlUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpbWFsUG9zaXRpdmVOdW1iZXJzOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgICAgIHBhdHRlcm46IGRlY2ltYWxSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIERlY2ltYWwgTnVtYmVycyBvbmx5IHZhbGlkYXRpb25cbiAgc3RhdGljIGRlY2ltYWxOdW1iZXJzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGRlY2ltYWxSZWdleCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlY2ltYWxQb3NpdGl2ZU51bWJlcnM6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgICAgcGF0dGVybjogZGVjaW1hbFJlZ2V4XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBQb3NpdGl2ZSAvIE5lZ2V0aXZlIE51bWJlcnMgb25seSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBpbnRlZ2VyTnVtYmVycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChpbnRlZ2VyTnVtYmVyc1JlZ2V4KSkgcmV0dXJuIHtcbiAgICAgIGludGVnZXJOdW1iZXJzOiB7XG4gICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgcGF0dGVybjogaW50ZWdlck51bWJlcnNSZWdleFxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIE51bWJlciBsZW5ndGhcbiAgc3RhdGljIG51bWVyaWNMZW5ndGgobGVuZ3RoOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiB2YWwudG9TdHJpbmcoKS5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGludmFsaWROdW1iZXJMZW5ndGg6IHtcbiAgICAgICAgICAgIGFjdHVhbExlbmd0aDogdmFsLFxuICAgICAgICAgICAgcmVxdWlyZWRMZW5ndGg6IGxlbmd0aFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBQYXNzd29yZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCFjb250cm9sLnZhbHVlPy5tYXRjaChwYXNzd29yZFJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmRQb2xpY3lSZXF1aXJlbWVudHM6IHRydWUgfTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoIDwgOCkge1xuICAgICAgcmV0dXJuIHsgbWlubGVuZ3RoOiB7IHJlcXVpcmVkTGVuZ3RoOiA4IH0gfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgR3VpZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKCFyZWdleEV4cC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBndWlkSXNWYWxpZDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBQYXNzd29yZEZvcm1NYXRjaFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1Bhc3N3b3JkID0gY29udHJvbC5nZXQoJ3Bhc3N3b3JkJyk7XG4gICAgY29uc3QgY3VycmVudFBhc3N3b3JkID0gY29udHJvbC5nZXQoJ2N1cnJlbnRQYXNzd29yZCcpO1xuICAgIGlmIChuZXdQYXNzd29yZCAmJiBjdXJyZW50UGFzc3dvcmQgJiYgbmV3UGFzc3dvcmQudmFsaWQgJiYgY3VycmVudFBhc3N3b3JkLnZhbGlkICYmIG5ld1Bhc3N3b3JkLnZhbHVlID09PSBjdXJyZW50UGFzc3dvcmQudmFsdWUpIHtcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkTWF0Y2g6IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDsgLy8gUGFzc3dvcmRzIG1hdGNoIG9yIGZvcm0gZmllbGRzIGhhcyBpdHMgb3duIGVycm9yc1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkRm9ybU5vdE1hdGNoVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgncGFzc3dvcmQnKTtcbiAgICBjb25zdCBjb25maXJtUGFzc3dvcmQgPSBjb250cm9sLmdldCgnY29uZmlybVBhc3N3b3JkJyk7XG4gICAgaWYgKChuZXdQYXNzd29yZC5lcnJvcnMgfHwgY29uZmlybVBhc3N3b3JkLmVycm9ycykgfHxcbiAgICAgIG5ld1Bhc3N3b3JkLnZhbHVlID09PSBjb25maXJtUGFzc3dvcmQudmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsOyAvLyBQYXNzd29yZHMgbWF0Y2ggb3IgZm9ybSBmaWVsZHMgaGFzIGl0cyBvd24gZXJyb3JzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHBhc3N3b3JkTm90TWF0Y2g6IHRydWUgfTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvTnVtYmVyVmFsaWRhdG9yKGZyb21Db250cm9sTmFtZTogc3RyaW5nLCB0b0NvbnRyb2xOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgICAgaWYgKGNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21Db250cm9sTmFtZSk7XG4gICAgICAgIGNvbnN0IHRvQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQodG9Db250cm9sTmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVHcmVhdGVyVGhhbk9yRXF1YWxUbyhmcm9tQ29udHJvbCwgdG9Db250cm9sKSAmJiAhdG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2UnKSkge1xuICAgICAgICAgIC8vIFJldHVybiB2YWxpZGF0aW9uIGVycm9yIGlmICdmcm9tJyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJ3RvJyB2YWx1ZVxuICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2U6IHRydWUgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZScpKSB7XG4gICAgICAgICAgLy8gcmVzZXQgdGhlIGVycm9yIG9mIOKAmHRv4oCZIGNvbnRyb2wgd2hlbiDigJhmcm9t4oCZIGNvbnRyb2wgaXMgdmFsaWQgYW5kIHRvIGNvbnRyb2wgY29udGFpbnMgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlXG4gICAgICAgICAgdG9Db250cm9sLnNldEVycm9ycyh7fSk7XG4gICAgICAgICAgdG9Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjYWxjdWxhdGVCYWxhbmNlID0gKHVuaXRzVmFsdWUsIGJhbGFuY2VWYWx1ZSkgPT4geyByZXR1cm4gdW5pdHNWYWx1ZSArIGJhbGFuY2VWYWx1ZSB9XG5cbiAgc3RhdGljIHVuaXRzQmFsYW5jZVZhbGlkYXRvcih1bml0c0NvbnRyb2xOYW1lOiBzdHJpbmcsIGJhbGFuY2VDb250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICAgIGlmIChjb250cm9sLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGNvbnN0IHVuaXRzQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQodW5pdHNDb250cm9sTmFtZSk7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VDb250cm9sID0gZm9ybUdyb3VwLmdldChiYWxhbmNlQ29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCB1bml0c1ZhbHVlID0gcGFyc2VJbnQodW5pdHNDb250cm9sLnZhbHVlKTtcbiAgICAgICAgY29uc3QgYmFsYW5jZVZhbHVlID0gYmFsYW5jZUNvbnRyb2wudmFsdWU7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VDYWxjdWxhdGVkID0gdGhpcy5jYWxjdWxhdGVCYWxhbmNlKHVuaXRzVmFsdWUsIGJhbGFuY2VWYWx1ZSlcbiAgICAgICAgaWYgKGJhbGFuY2VDYWxjdWxhdGVkID4gTUFYX0FMTE9XRURfQkFMQU5DRSkge1xuICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25fdW5pdHNfYmFsYW5jZV9tYXhpbXVtOiB0cnVlIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYmFsYW5jZUNhbGN1bGF0ZWQgPCBNSU5fQUxMT1dFRF9CQUxBTkNFKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21pbmltdW06IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgbWluRGF0ZVRpbWUoY29udHJvbE5hbWU6IHN0cmluZywgbWluRGF0ZVRpbWVWYWx1ZTogRGF0ZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2xHcm91cDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcblxuICAgICAgaWYgKGNvbnRyb2xHcm91cC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbEdyb3VwLnBhcmVudCBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgY29udHJvbFZhbHVlOiBEYXRlID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoY29udHJvbFZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbERhdGUgPSBuZXcgRGF0ZShjb250cm9sVmFsdWUpLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBuZXcgRGF0ZShtaW5EYXRlVGltZVZhbHVlKS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblxuICAgICAgICAgIGlmIChjb250cm9sRGF0ZSA8IG1pbkRhdGUpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9mcm9tX3RpbWU6IHRydWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvRGF0ZShmcm9tRGF0ZUZpZWxkOiBzdHJpbmcsIHRvRGF0ZUZpZWxkOiBzdHJpbmcsIGZyb21UaW1lRmllbGQ6IHN0cmluZyA9IG51bGwsXG4gICAgdG9UaW1lRmllbGQ6IHN0cmluZyA9IG51bGwsIGVycm9yTmFtZTogc3RyaW5nID0gJ2Zyb21Ub0RhdGUnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZnJvbURhdGU6IERhdGUgPSBmb3JtR3JvdXAuZ2V0KGZyb21EYXRlRmllbGQpPy52YWx1ZTtcbiAgICAgIGNvbnN0IHRvRGF0ZTogRGF0ZSA9IGZvcm1Hcm91cC5nZXQodG9EYXRlRmllbGQpPy52YWx1ZTtcbiAgICAgIGNvbnN0IGZyb21UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk/LnZhbHVlO1xuICAgICAgY29uc3QgdG9UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpPy52YWx1ZTtcbiAgICAgIGlmIChmcm9tVGltZSkge1xuICAgICAgICBmcm9tRGF0ZS5zZXRIb3Vycyhmcm9tVGltZS5ob3Vycyk7XG4gICAgICAgIGZyb21EYXRlLnNldE1pbnV0ZXMoZnJvbVRpbWUubWludXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAodG9UaW1lKSB7XG4gICAgICAgIHRvRGF0ZS5zZXRIb3Vycyh0b1RpbWUuaG91cnMpO1xuICAgICAgICB0b0RhdGUuc2V0TWludXRlcyh0b1RpbWUubWludXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAoKGZyb21EYXRlICE9PSBudWxsICYmIHRvRGF0ZSAhPT0gbnVsbCkgJiYgZnJvbURhdGUgPiB0b0RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvVGltZVJhbmdlKGZyb21UaW1lRmllbGQ6IHN0cmluZywgdG9UaW1lRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCB0b0NvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvVGltZUZpZWxkKTtcbiAgICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiYgdGhpcy5pc1ZhbHVlTGVuZ3RoVmFsaWQoZnJvbUNvbnRyb2wsIHRvQ29udHJvbCkgJiZcbiAgICAgICAgICAhdG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlJykpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZTogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZScpKSB7XG4gICAgICAgICAgLy8gcmVzZXQgdGhlIGVycm9yIG9mIOKAmHRv4oCZIGNvbnRyb2wgd2hlbiDigJhmcm9t4oCZIGNvbnRyb2wgaXMgdmFsaWQgYW5kIHRvIGNvbnRyb2wgY29udGFpbnMgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZVxuICAgICAgICAgIHRvQ29udHJvbC5zZXRFcnJvcnMoe30pO1xuICAgICAgICAgIHRvQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvVGltZShmcm9tVGltZUZpZWxkOiBzdHJpbmcsIHRvVGltZUZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBmcm9tVGltZTogVGliYVRpbWUgPSBmb3JtR3JvdXAuZ2V0KGZyb21UaW1lRmllbGQpLnZhbHVlO1xuICAgICAgY29uc3QgdG9UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpLnZhbHVlO1xuICAgICAgaWYgKCF0aGlzLmlzVGltZU51bGwoZnJvbVRpbWUpICYmICF0aGlzLmlzVGltZU51bGwodG9UaW1lKSAmJlxuICAgICAgICAhKHRvVGltZS5ob3VycyA9PSAwICYmIHRvVGltZS5taW51dGVzID09IDApICYmXG4gICAgICAgIChcbiAgICAgICAgICAoZnJvbVRpbWUuaG91cnMgPiB0b1RpbWUuaG91cnMpIHx8XG4gICAgICAgICAgKGZyb21UaW1lLmhvdXJzID09IHRvVGltZS5ob3VycyAmJiBmcm9tVGltZS5taW51dGVzID4gdG9UaW1lLm1pbnV0ZXMpXG4gICAgICAgICkpIHtcbiAgICAgICAgcmV0dXJuIHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9yYW5nZTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVGltZU51bGwgPSAodGltZTogVGliYVRpbWUpID0+IHRpbWUgPT09IG51bGwgfHxcbiAgICAodGltZS5ob3VycyA9PT0gbnVsbCAmJiB0aW1lLm1pbnV0ZXMgPT09IG51bGwgJiYgdGltZS5zZWNvbmRzID09PSBudWxsKTtcblxuICBzdGF0aWMgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT5cbiAgICAhaXNOdWxsT3JFbXB0eShjb250cm9sLnZhbHVlKSAmJiBpc051bGxPckVtcHR5KGNvbnRyb2w/LnZhbHVlPy50cmltKCkpID8geyByZXF1aXJlZDogdHJ1ZSB9IDogbnVsbDtcblxuICBzdGF0aWMgbm9XaGl0ZXNwYWNlV2l0aGluU2VudGVuY2VWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PlxuICAgICEoY29udHJvbD8udmFsdWU/LnNwbGl0KFwiIFwiKS5sZW5ndGggPT09IDEpID8geyBub1doaXRlc3BhY2VXaXRoaW5TZW50ZW5jZTogdHJ1ZSB9IDogbnVsbDtcblxuICBzdGF0aWMgdGVybXNQb2xpY3lDaGVja2JveCgpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHsgaW52YWxpZFRlcm1zOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRGVmYXVsdEFjY2Vzc1Byb2ZpbGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmICFjb250cm9sLnZhbHVlPy5kZWZhdWx0QWNjZXNzUHJvZmlsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9EZWZhdWx0QWNjZXNzUHJvZmlsZToge1xuICAgICAgICAgIGNvbXBhbnlOYW1lOiBjb250cm9sLnZhbHVlLm5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyB6UmFuZ2UodHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSwgZnJvbVpGaWVsZDogc3RyaW5nLCB0b1pGaWVsZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBmcm9tWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZyb21aRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICBjb25zdCB0b1pDb250cm9sID0gZm9ybUdyb3VwLmdldCh0b1pGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcblxuICAgICAgaWYgKGZyb21aQ29udHJvbC52YWx1ZT8uaWQgPiB0b1pDb250cm9sLnZhbHVlPy5pZCkge1xuICAgICAgICByZXR1cm4geyB6UmFuZ2U6IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uaW52YWxpZF9maWVsZHMpIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRDcmVkZW50aWFscyh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLCBjYXJQbGF0ZUZpZWxkOiBzdHJpbmcgPSAnY2FyUGxhdGUnLCBtb2JpbGVGaWVsZDogc3RyaW5nID0gJ21vYmlsZScsIGJhZGdlRmllbGQ6IHN0cmluZyA9ICdiYWRnZScsXG4gICAgZW1haWxGaWVsZDogc3RyaW5nID0gJ2VtYWlsJywgc2VuZEVtYWlsRmllbGQ6IHN0cmluZyA9ICdzZW5kRW1haWwnKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZm9ybUdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbCA9PiB7XG4gICAgICBsZXQgY2FyUGxhdGVzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgbGV0IGJhZGdlc0ludmFsaWQgPSBmYWxzZTtcbiAgICAgIGxldCBpbnRlcnBvbGF0ZWRDcmVkZW50aWFsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgLy8gQ2FyZHNcbiAgICAgIGNvbnN0IGJhZGdlc0Zvcm1BcnJheSA9IGZvcm1Hcm91cC5nZXQoYmFkZ2VGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGlmIChiYWRnZXNGb3JtQXJyYXkpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhcmQpKTtcbiAgICAgICAgYmFkZ2VzSW52YWxpZCA9IHRoaXMuaXNGb3JtQ29udHJvbExpc3RJbnZhbGlkKGJhZGdlc0Zvcm1BcnJheS52YWx1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0NhcmRzSW52YWxpZCA9IGJhZGdlc0ludmFsaWQgfHwgIWJhZGdlc0Zvcm1BcnJheTtcblxuICAgICAgLy9DYXIgcGxhdGVzXG4gICAgICBjb25zdCBjYXJQbGF0ZXNGb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KGNhclBsYXRlRmllbGQpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICBpZiAoY2FyUGxhdGVzRm9ybUFycmF5KSB7XG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5jYXJfcGxhdGUpKTtcbiAgICAgICAgY2FyUGxhdGVzSW52YWxpZCA9IHRoaXMuaXNGb3JtQ29udHJvbExpc3RJbnZhbGlkKGNhclBsYXRlc0Zvcm1BcnJheS52YWx1ZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0NhclBsYXRlc0ludmFsaWQgPSBjYXJQbGF0ZXNJbnZhbGlkIHx8ICFjYXJQbGF0ZXNGb3JtQXJyYXk7XG5cbiAgICAgIC8vIE1vYmlsZVxuICAgICAgY29uc3QgbW9iaWxlRm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KG1vYmlsZUZpZWxkKTtcbiAgICAgIGlmIChtb2JpbGVGb3JtQ29udHJvbCkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ubW9iaWxlKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc01vYmlsZUludmFsaWQgPSAhbW9iaWxlRm9ybUNvbnRyb2w/LnZhbHVlO1xuXG4gICAgICAvLyBFbWFpbFxuICAgICAgY29uc3QgZW1haWxGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZW1haWxGaWVsZCk7XG4gICAgICBjb25zdCBzZW5kRW1haWxGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoc2VuZEVtYWlsRmllbGQpO1xuICAgICAgaWYgKGVtYWlsRm9ybUNvbnRyb2wgJiYgc2VuZEVtYWlsRm9ybUNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5lbWFpbCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNFbWFpbEludmFsaWQgPSAhKHNlbmRFbWFpbEZvcm1Db250cm9sPy52YWx1ZSAmJiBlbWFpbEZvcm1Db250cm9sPy52YWx1ZSlcblxuICAgICAgY29uc3QgaXNSZXF1aXJlZENyZWRlbnRpYWxzID0gaXNDYXJQbGF0ZXNJbnZhbGlkICYmIGlzQ2FyZHNJbnZhbGlkICYmIGlzTW9iaWxlSW52YWxpZCAmJiBpc0VtYWlsSW52YWxpZDtcblxuICAgICAgaWYgKGlzUmVxdWlyZWRDcmVkZW50aWFscykge1xuICAgICAgICBjb25zdCBsYXN0Q3JlZGVudGlhbCA9IGludGVycG9sYXRlZENyZWRlbnRpYWxzLnBvcCgpO1xuICAgICAgICBsZXQgaW50ZXJwb2xhdGVQYXJhbXMgPSBgJHtpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5qb2luKCcsICcpfSAke3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24ub3IpfSAke2xhc3RDcmVkZW50aWFsfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRDcmVkZW50aWFsczogdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5yZXF1aXJlZF9jcmVkZW50aWFsc19tZXNzYWdlLCB7IGNyZWRlbnRpYWxzOiBpbnRlcnBvbGF0ZVBhcmFtcyB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNGb3JtQ29udHJvbExpc3RJbnZhbGlkKGxpc3Q6IFVudHlwZWRGb3JtQ29udHJvbFtdKSB7XG4gICAgbGV0IGlzSW52YWxpZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBsaXN0KSB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgaXNJbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzSW52YWxpZDtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZERheXMoc3BlY2lhbERheXNGaWVsZDogc3RyaW5nLCB3ZWVrRGF5c0ZpZWxkOiBzdHJpbmcsIGVycm9yTmFtZTogc3RyaW5nID0gJ3JlcXVpcmVkRGF5cycpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzcGVjaWFsRGF5czogbnVtYmVyID0gZm9ybUdyb3VwLmdldChzcGVjaWFsRGF5c0ZpZWxkKS52YWx1ZTtcbiAgICAgIGNvbnN0IHdlZWtEYXlzOiBudW1iZXIgPSBmb3JtR3JvdXAuZ2V0KHdlZWtEYXlzRmllbGQpLnZhbHVlO1xuICAgICAgaWYgKHNwZWNpYWxEYXlzID4gMCB8fCB3ZWVrRGF5cyA+IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IFtlcnJvck5hbWVdOiB0cnVlIH07XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBpc1JvbGVOYW1lRXhpc3RzKHJvbGVTZXJ2aWNlUHJveHk6IENsb3VkLlJvbGVTZXJ2aWNlUHJveHksIHJvbGVJZDogbnVtYmVyKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnM+ID0+IHtcbiAgICAgIHJldHVybiBvZihjb250cm9sLnZhbHVlKS5waXBlKFxuICAgICAgICBkZWxheSg1MDApLFxuICAgICAgICBkZWJvdW5jZVRpbWUoSU5QVVRfU0VBUkNIX0RFQk9VTkNFX1RJTUUpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gcm9sZVNlcnZpY2VQcm94eS5pc0V4aXN0cyhjb250cm9sLnZhbHVlLCByb2xlSWQgPz8gdW5kZWZpbmVkKS5waXBlKFxuICAgICAgICAgIG1hcChyZXMgPT4gcmVzLmRhdGEgPT09IHRydWUgfHwgIXJlcy5pc1N1Y2Nlc3MgPyB7IHJvbGVOYW1lQWxyZWFkeUV4aXN0czogdHJ1ZSB9IDogbnVsbCkpKSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBpc0FjY2Vzc1Byb2ZpbGVOdW1iZXJBdmFpbGFibGUoYWNjZXNzUHJvZmlsZVNlcnZpY2VQcm94eTogRWRnZS5BY2Nlc3NQcm9maWxlU2VydmljZVByb3h5LCBndWlkOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogbnVtYmVyKTogQXN5bmNWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnM+ID0+IHtcbiAgICAgIHJldHVybiBvZihjb250cm9sLnZhbHVlKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSA+PSAwICYmIHZhbHVlICE9PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIC8vIENhbGwgc2VydmljZSB0byBjaGVjayBpZiB0aGUgbnVtYmVyIGlzIGF2YWlsYWJsZVxuICAgICAgICAgICAgcmV0dXJuIGFjY2Vzc1Byb2ZpbGVTZXJ2aWNlUHJveHkuZ2V0QXZhaWxhYmxlTnVtYmVyKHZhbHVlLCBndWlkKS5waXBlKFxuICAgICAgICAgICAgICBtYXAocmVzID0+ICFyZXMuZGF0YT8uaXNBdmFpbGFibGUgfHwgIXJlcy5pc1N1Y2Nlc3MgPyB7IGFjY2Vzc1Byb2ZpbGVOdW1iZXJUYWtlbjogdHJ1ZSB9IDogbnVsbCkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB0aWJhVGltZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsOiBUaWJhVGltZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAodmFsICYmICh2YWwuaG91cnMgPT09IG51bGwgfHwgdmFsLm1pbnV0ZXMgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnZhbGlkVGltZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZVZhbGlkYXRvcihtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZShjb250cm9sLnZhbHVlLCBtaW5UaW1lLCBtYXhUaW1lKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlU3RyaW5nSEhNTUluUmFuZ2VWYWxpZGF0b3IobWluVGltZTogVGliYVRpbWUsIG1heFRpbWU6IFRpYmFUaW1lKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCEhY29udHJvbC52YWx1ZSkge1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggIT09IDQpIHsgLy8gQXNzdW1pbmcgdGltZSBmb3JtYXQgaXMgJ0hITU0nXG4gICAgICAgICAgcmV0dXJuIHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZV9mb3JtYXQ6IHRydWUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBob3VyczogbnVtYmVyID0gcGFyc2VJbnQoY29udHJvbC52YWx1ZS5zbGljZSgwLCAyKSk7XG4gICAgICAgICAgY29uc3QgbWludXRlczogbnVtYmVyID0gcGFyc2VJbnQoY29udHJvbC52YWx1ZS5zbGljZSgyKSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRpbWU6IFRpYmFUaW1lID0geyBob3VycywgbWludXRlcyB9O1xuICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVGliYVRpbWVJblJhbmdlKGN1cnJlbnRUaW1lLCBtaW5UaW1lLCBtYXhUaW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB0aW1lUmFuZ2VBcnJheU92ZXJsYXBWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKGNvbnRyb2wudmFsaWQgJiYgY29udHJvbC5lbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UmFuZ2UgPSBmb3JtQXJyYXlbaV07XG4gICAgICAgICAgY29uc3QgY3VycmVudEZyb20gPSB0aW1lVG9Nb21lbnQoY3VycmVudFJhbmdlLmZyb20pO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUbyA9IHRpbWVUb01vbWVudChjdXJyZW50UmFuZ2UudG8pO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRGcm9tICYmIGN1cnJlbnRUbykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgZm9ybUFycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVSYW5nZSA9IGZvcm1BcnJheVtqXTtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZUZyb20gPSB0aW1lVG9Nb21lbnQoY29tcGFyZVJhbmdlLmZyb20pO1xuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlVG8gPSB0aW1lVG9Nb21lbnQoY29tcGFyZVJhbmdlLnRvKTtcblxuICAgICAgICAgICAgICBpZiAoY29tcGFyZUZyb20gJiYgY29tcGFyZVRvKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG92ZXJsYXBcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZXNPdmVybGFwID0gY3VycmVudEZyb20uaXNCZWZvcmUoY29tcGFyZVRvKSAmJiBjdXJyZW50VG8uaXNBZnRlcihjb21wYXJlRnJvbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VzT3ZlcmxhcCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZm9ybV92YWxpZGF0aW9uX3RpbWVfcmFuZ2Vfb3ZlcmxhcDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHRvQ29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZnJvbVRpbWVJbk51bWJlcjogbnVtYmVyID0gZnJvbUNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgdG9UaW1lSW5OdW1iZXI6IG51bWJlciA9IHRvQ29udHJvbC52YWx1ZTtcbiAgICByZXR1cm4gZnJvbVRpbWVJbk51bWJlciAhPT0gbnVsbCAmJiB0b1RpbWVJbk51bWJlciAhPT0gbnVsbCAmJiArZnJvbVRpbWVJbk51bWJlciA+ICt0b1RpbWVJbk51bWJlcjtcbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBpc1ZhbHVlTGVuZ3RoVmFsaWQoZnJvbUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdG9Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBmcm9tVGltZUluTnVtYmVyOiBudW1iZXIgPSBmcm9tQ29udHJvbC52YWx1ZTtcbiAgICBjb25zdCB0b1RpbWVJbk51bWJlcjogbnVtYmVyID0gdG9Db250cm9sLnZhbHVlO1xuICAgIHJldHVybiBmcm9tVGltZUluTnVtYmVyLnRvU3RyaW5nKCkubGVuZ3RoID09PSBWQUxJRF9USU1FX01BWF9MRU5HVEggJiZcbiAgICAgIHRvVGltZUluTnVtYmVyLnRvU3RyaW5nKCkubGVuZ3RoID09PSBWQUxJRF9USU1FX01BWF9MRU5HVEg7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZVRpYmFUaW1lSW5SYW5nZShjdXJyZW50VGltZTogVGliYVRpbWUsIG1pblRpbWU6IFRpYmFUaW1lLCBtYXhUaW1lOiBUaWJhVGltZSk6IHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSB9IHwgbnVsbCB7XG4gICAgLy8gSWYgdGltZSBpcyB1bmRlZmluZWQsIHJldHVybiBudWxsIChubyBlcnJvcilcbiAgICBpZiAoIWN1cnJlbnRUaW1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXRUaW1lID0gKHRpbWU6IFRpYmFUaW1lKTogc3RyaW5nID0+XG4gICAgICBgJHt0aW1lLmhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHt0aW1lLm1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG5cbiAgICBjb25zdCBob3VyczogbnVtYmVyID0gK2N1cnJlbnRUaW1lLmhvdXJzO1xuICAgIGNvbnN0IG1pbnV0ZXM6IG51bWJlciA9ICtjdXJyZW50VGltZS5taW51dGVzO1xuXG4gICAgY29uc3QgaXNWYWxpZFRpbWUgPVxuICAgICAgKGhvdXJzID4gbWluVGltZS5ob3VycyB8fCAoaG91cnMgPT09IG1pblRpbWUuaG91cnMgJiYgbWludXRlcyA+PSBtaW5UaW1lLm1pbnV0ZXMpKSAmJlxuICAgICAgKGhvdXJzIDwgbWF4VGltZS5ob3VycyB8fCAoaG91cnMgPT09IG1heFRpbWUuaG91cnMgJiYgbWludXRlcyA8PSBtYXhUaW1lLm1pbnV0ZXMpKTtcblxuICAgIC8vIElmIHRpbWUgaXMgdmFsaWQsIHJldHVybiBudWxsIChubyBlcnJvcilcbiAgICBpZiAoaXNWYWxpZFRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB2YWxpZGF0aW9uIGVycm9yIHdpdGggZm9ybWF0dGVkIHRpbWUgcmFuZ2VcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfdGltZToge1xuICAgICAgICBmcm9tOiBmb3JtYXRUaW1lKG1pblRpbWUpLFxuICAgICAgICB0bzogZm9ybWF0VGltZShtYXhUaW1lKSxcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXZhbGlkYXRvci51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy91dGlscy9jdXN0b20tdmFsaWRhdG9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFeEMsT0FBTyxFQUFFLFlBQVksRUFBb0IsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcseUhBQXlILENBQUM7QUFDdkosTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUN0QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsVUFBVSxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQzVELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHFCQUFxQixDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyx1RkFBdUYsQ0FBQztBQUNoSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdB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Q0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBRTFGLE1BQU0sS0FBSyxHQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFFN0MsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEYsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVyRiwyQ0FBMkM7UUFDM0MsSUFBSSxXQUFXLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsbUVBQW1FO1FBQ25FLE9BQU87WUFDTCw0QkFBNEIsRUFBRTtnQkFDNUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pCLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2FBQ3hCO1NBQ0YsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGRlYm91bmNlVGltZSwgZGVsYXksIG1hcCwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU5QVVRfU0VBUkNIX0RFQk9VTkNFX1RJTUUsIFZBTElEX1RJTUVfTUFYX0xFTkdUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBDbG91ZCwgRWRnZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHknO1xuaW1wb3J0IHsgTWlkZGF5UGVyaW9kLCBUaW1lIGFzIFRpYmFUaW1lLCB0aW1lVG9Nb21lbnQgfSBmcm9tICcuL2RhdGUudXRpbCc7XG5cbmNvbnN0IE1JTl9BTExPV0VEX0JBTEFOQ0UgPSAwO1xuY29uc3QgTUFYX0FMTE9XRURfQkFMQU5DRSA9IDI1NTtcbmV4cG9ydCBjb25zdCBub0Vtb2ppUmVnZXggPSAvW15hLXpBLVowLTkgXS9nbTtcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fl0pW0EtWmEtelxcZCFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX5dezQsfSQvZztcbmV4cG9ydCBjb25zdCBhbHBoYW51bWVyaWNSZWdleCA9IC9eW2EtekEtWjAtOV0rJC87XG5leHBvcnQgY29uc3QgbW9iaWxlUmVnZXggPSAvXlswLTldKyQvO1xuZXhwb3J0IGNvbnN0IGludGVnZXJOdW1iZXJSZWdleCA9IC9eWy1dPyhcXGQrKT8kLztcbmV4cG9ydCBjb25zdCBpbnRlZ2VyUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eWzAtOV0rJC87XG5leHBvcnQgY29uc3QgZGVjaW1hbE51bWJlclJlZ2V4ID0gL15bLV0/KFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCBkZWNpbWFsUG9zaXRpdmVOdW1iZXJSZWdleCA9IC9eKFxcZCspKFxcLlxcZHsxLDJ9KT8kLztcbmV4cG9ydCBjb25zdCByZWdleEV4cCA9IC9eWzAtOWEtZkEtRl17OH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17NH1cXGItWzAtOWEtZkEtRl17MTJ9JC87XG5leHBvcnQgY29uc3QgcGVyY2VudGFnZVJlZ2V4ID0gL14oMTAwfFsxLTldP1swLTldKSQvO1xuZXhwb3J0IGNvbnN0IGRlY2ltYWxQZXJjZW50YWdlUmVnZXggPSAvXigxMDAoPzpcXC4wezEsMn0pP3xbMC05XXsxLDJ9KD86XFwuWzAtOV17MSwyfSk/KSQvO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eSh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09ICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBbVBtVG8yNEhvdXJzKHRpbWU6IFRpYmFUaW1lKTogVGliYVRpbWUge1xuICBsZXQgX3RpbWU6IFRpYmFUaW1lID0gbnVsbDtcbiAgaWYgKHRpbWUpIHtcbiAgICBfdGltZSA9IHsgLi4udGltZSB9OyAvLyBTcHJlYWQgb3BlcmF0b3IgZm9yIGltbXV0YWJpbGl0eVxuXG4gICAgaWYgKHRpbWUubWlkZGF5UGVyaW9kID09PSBNaWRkYXlQZXJpb2QuUE0gJiYgK3RpbWUuaG91cnMgIT09IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9ICtfdGltZS5ob3VycyArIDEyOyAvLyBDb252ZXJ0IFBNIGhvdXJzIChleGNlcHQgMTIgUE0pIHRvIDI0LWhvdXIgZm9ybWF0XG4gICAgfSBlbHNlIGlmICh0aW1lLm1pZGRheVBlcmlvZCA9PT0gTWlkZGF5UGVyaW9kLkFNICYmICt0aW1lLmhvdXJzID09PSAxMikge1xuICAgICAgX3RpbWUuaG91cnMgPSAwOyAvLyBNaWRuaWdodCBjYXNlICgxMiBBTSBpcyAwMDowMCBpbiAyNC1ob3VyIHRpbWUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF90aW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydDI0SG91cnNUb0FtUE0odGltZTogVGliYVRpbWUpOiBUaWJhVGltZSB7XG4gIGxldCBfdGltZTogVGliYVRpbWUgPSBudWxsO1xuICBpZiAodGltZSkge1xuICAgIF90aW1lID0geyAuLi50aW1lIH07IC8vIFNwcmVhZCBvcGVyYXRvciBmb3IgaW1tdXRhYmlsaXR5XG4gICAgY29uc3QgaG91cnMgPSArdGltZS5ob3VycztcbiAgICBpZiAoaG91cnMgPj0gMCAmJiBob3VycyA8PSAxMSkge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLkFNO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPj0gMTIgJiYgaG91cnMgPD0gMjMpIHtcbiAgICAgIF90aW1lLm1pZGRheVBlcmlvZCA9IE1pZGRheVBlcmlvZC5QTTtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAyNCkge1xuICAgICAgX3RpbWUubWlkZGF5UGVyaW9kID0gTWlkZGF5UGVyaW9kLkFNO1xuICAgIH1cblxuICAgIGlmIChob3VycyA9PT0gMjQpIHtcbiAgICAgIF90aW1lLmhvdXJzID0gMDtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID49IDEyKSB7XG4gICAgICBfdGltZS5ob3VycyA9ICtfdGltZS5ob3VycyAtIDEyO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfdGltZTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpYmFWYWxpZGF0b3JzIHtcblxuICAvLyBObyBlbW9qaSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBub0Vtb2ppKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgdmFsLnRvU3RyaW5nKCkubWF0Y2gobm9FbW9qaVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9FbW9qaToge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBub0Vtb2ppUmVnZXhcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBwZXJjZW50YWdlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKHBlcmNlbnRhZ2VSZWdleCkpIHtcbiAgICAgIHJldHVybiB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3BlcmNlbnRhZ2U6IHRydWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBkZWNpbWFsUGVyY2VudGFnZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmICF2YWwudG9TdHJpbmcoKS5tYXRjaChkZWNpbWFsUGVyY2VudGFnZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHsgZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfZGVjaW1hbF9wZXJjZW50YWdlOiB0cnVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBNb2JpbGUgb25seSB2YWxpZGF0aW9uXG4gIHN0YXRpYyBtb2JpbGVOdW1iZXJzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKG1vYmlsZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9iaWxlTnVtYmVyczoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBtb2JpbGVSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGhvdGVsUm9vbk51bWJlcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goYWxwaGFudW1lcmljUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbHBoYW51bWVyaWNSZWdleDoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgICBwYXR0ZXJuOiBhbHBoYW51bWVyaWNSZWdleFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlUG9zaXRpdmVJbnRlZ2VySW5jbHVkZVplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBUaWJhVmFsaWRhdG9ycy52YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcihjb250cm9sLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVBvc2l0aXZlSW50ZWdlcldpdGhvdXRaZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gVGliYVZhbGlkYXRvcnMudmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbCwgMSk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBtaW5WYWx1ZTogbnVtYmVyKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChcbiAgICAgICFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmXG4gICAgICAhKGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5tYXRjaChpbnRlZ2VyTnVtYmVyUmVnZXgpICYmICtjb250cm9sLnZhbHVlID49IG1pblZhbHVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdGVQb3NpdGl2ZUludGVnZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHtjb250cm9sLnZhbHVlfSdgXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBJbnRlZ2VyOiAtMTIzLCAxMjNcbiAgc3RhdGljIGludGVnZXJOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goaW50ZWdlck51bWJlclJlZ2V4KSkgcmV0dXJuIHtcbiAgICAgIGludGVnZXJOdW1iZXI6IHtcbiAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgLFxuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEludGVnZXIgUG9zaXRpdmUgLT4gMTIzXG4gIHN0YXRpYyBpbnRlZ2VyUG9zaXRpdmVOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCFpc051bGxPckVtcHR5KHZhbCkgJiYgIXZhbC50b1N0cmluZygpLm1hdGNoKGludGVnZXJQb3NpdGl2ZU51bWJlclJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZWdlclBvc2l0aXZlTnVtYmVyOiB7XG4gICAgICAgICAgdmFsdWU6IGAgJyR7dmFsfSdgXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRGVjaW1hbDogLTEuMjMsIDEuMjNcbiAgc3RhdGljIGRlY2ltYWxOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbE51bWJlclJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaW1hbE51bWJlcjoge1xuICAgICAgICAgIHZhbHVlOiBgICcke3ZhbH0nYCxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIERlY2ltYWwgUG9zaXRpdmU6IDEuMjNcbiAgc3RhdGljIGRlY2ltYWxQb3NpdGl2ZU51bWJlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkodmFsKSAmJiAhdmFsLnRvU3RyaW5nKCkubWF0Y2goZGVjaW1hbFBvc2l0aXZlTnVtYmVyUmVnZXgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpbWFsUG9zaXRpdmVOdW1iZXI6IHtcbiAgICAgICAgICB2YWx1ZTogYCAnJHt2YWx9J2AsXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gTnVtYmVyIGxlbmd0aFxuICBzdGF0aWMgbnVtZXJpY0xlbmd0aChsZW5ndGg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgIGlmICghaXNOdWxsT3JFbXB0eSh2YWwpICYmIHZhbC50b1N0cmluZygpLmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW52YWxpZE51bWJlckxlbmd0aDoge1xuICAgICAgICAgICAgYWN0dWFsTGVuZ3RoOiB2YWwsXG4gICAgICAgICAgICByZXF1aXJlZExlbmd0aDogbGVuZ3RoXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIWNvbnRyb2wudmFsdWU/Lm1hdGNoKHBhc3N3b3JkUmVnZXgpKSB7XG4gICAgICByZXR1cm4geyBwYXNzd29yZFBvbGljeVJlcXVpcmVtZW50czogdHJ1ZSB9O1xuICAgIH1cbiAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggPCA4KSB7XG4gICAgICByZXR1cm4geyBtaW5sZW5ndGg6IHsgcmVxdWlyZWRMZW5ndGg6IDggfSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBHdWlkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoIXJlZ2V4RXhwLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7IGd1aWRJc1ZhbGlkOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIFBhc3N3b3JkRm9ybU1hdGNoVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBjb250cm9sLmdldCgncGFzc3dvcmQnKTtcbiAgICBjb25zdCBjdXJyZW50UGFzc3dvcmQgPSBjb250cm9sLmdldCgnY3VycmVudFBhc3N3b3JkJyk7XG4gICAgaWYgKG5ld1Bhc3N3b3JkICYmIGN1cnJlbnRQYXNzd29yZCAmJiBuZXdQYXNzd29yZC52YWxpZCAmJiBjdXJyZW50UGFzc3dvcmQudmFsaWQgJiYgbmV3UGFzc3dvcmQudmFsdWUgPT09IGN1cnJlbnRQYXNzd29yZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmRNYXRjaDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsOyAvLyBQYXNzd29yZHMgbWF0Y2ggb3IgZm9ybSBmaWVsZHMgaGFzIGl0cyBvd24gZXJyb3JzXG4gIH1cblxuICBzdGF0aWMgUGFzc3dvcmRGb3JtTm90TWF0Y2hWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgaWYgKCFjb250cm9sKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdwYXNzd29yZCcpO1xuICAgIGNvbnN0IGNvbmZpcm1QYXNzd29yZCA9IGNvbnRyb2wuZ2V0KCdjb25maXJtUGFzc3dvcmQnKTtcbiAgICBpZiAoKG5ld1Bhc3N3b3JkLmVycm9ycyB8fCBjb25maXJtUGFzc3dvcmQuZXJyb3JzKSB8fFxuICAgICAgbmV3UGFzc3dvcmQudmFsdWUgPT09IGNvbmZpcm1QYXNzd29yZC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIFBhc3N3b3JkcyBtYXRjaCBvciBmb3JtIGZpZWxkcyBoYXMgaXRzIG93biBlcnJvcnNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgcGFzc3dvcmROb3RNYXRjaDogdHJ1ZSB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9OdW1iZXJWYWxpZGF0b3IoZnJvbUNvbnRyb2xOYW1lOiBzdHJpbmcsIHRvQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IG51bGw7IC8vIFJldHVybiBudWxsIGlmIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgICBpZiAoY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwO1xuICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbUNvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgdG9Db250cm9sID0gZm9ybUdyb3VwLmdldCh0b0NvbnRyb2xOYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJUaGFuT3JFcXVhbFRvKGZyb21Db250cm9sLCB0b0NvbnRyb2wpICYmICF0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZScpKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIHZhbGlkYXRpb24gZXJyb3IgaWYgJ2Zyb20nIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAndG8nIHZhbHVlXG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX251bWJlcl9yYW5nZTogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKHRvQ29udHJvbC5oYXNFcnJvcignZm9ybV92YWxpZGF0aW9uX2ludmFsaWRfbnVtYmVyX3JhbmdlJykpIHtcbiAgICAgICAgICAvLyByZXNldCB0aGUgZXJyb3Igb2Yg4oCYdG/igJkgY29udHJvbCB3aGVuIOKAmGZyb23igJkgY29udHJvbCBpcyB2YWxpZCBhbmQgdG8gY29udHJvbCBjb250YWlucyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF9udW1iZXJfcmFuZ2VcbiAgICAgICAgICB0b0NvbnRyb2wuc2V0RXJyb3JzKHt9KTtcbiAgICAgICAgICB0b0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZUJhbGFuY2UgPSAodW5pdHNWYWx1ZSwgYmFsYW5jZVZhbHVlKSA9PiB7IHJldHVybiB1bml0c1ZhbHVlICsgYmFsYW5jZVZhbHVlIH1cblxuICBzdGF0aWMgdW5pdHNCYWxhbmNlVmFsaWRhdG9yKHVuaXRzQ29udHJvbE5hbWU6IHN0cmluZywgYmFsYW5jZUNvbnRyb2xOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuICAgICAgaWYgKGNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgdW5pdHNDb250cm9sID0gZm9ybUdyb3VwLmdldCh1bml0c0NvbnRyb2xOYW1lKTtcbiAgICAgICAgY29uc3QgYmFsYW5jZUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGJhbGFuY2VDb250cm9sTmFtZSk7XG4gICAgICAgIGNvbnN0IHVuaXRzVmFsdWUgPSBwYXJzZUludCh1bml0c0NvbnRyb2wudmFsdWUpO1xuICAgICAgICBjb25zdCBiYWxhbmNlVmFsdWUgPSBiYWxhbmNlQ29udHJvbC52YWx1ZTtcbiAgICAgICAgY29uc3QgYmFsYW5jZUNhbGN1bGF0ZWQgPSB0aGlzLmNhbGN1bGF0ZUJhbGFuY2UodW5pdHNWYWx1ZSwgYmFsYW5jZVZhbHVlKVxuICAgICAgICBpZiAoYmFsYW5jZUNhbGN1bGF0ZWQgPiBNQVhfQUxMT1dFRF9CQUxBTkNFKSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl91bml0c19iYWxhbmNlX21heGltdW06IHRydWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChiYWxhbmNlQ2FsY3VsYXRlZCA8IE1JTl9BTExPV0VEX0JBTEFOQ0UpIHtcbiAgICAgICAgICByZXNwb25zZSA9IHsgZm9ybV92YWxpZGF0aW9uX3VuaXRzX2JhbGFuY2VfbWluaW11bTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBtaW5EYXRlVGltZShjb250cm9sTmFtZTogc3RyaW5nLCBtaW5EYXRlVGltZVZhbHVlOiBEYXRlKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbEdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlc1xuXG4gICAgICBpZiAoY29udHJvbEdyb3VwLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sR3JvdXAucGFyZW50IGFzIEZvcm1Hcm91cDtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpO1xuICAgICAgICBjb25zdCBjb250cm9sVmFsdWU6IERhdGUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sRGF0ZSA9IG5ldyBEYXRlKGNvbnRyb2xWYWx1ZSkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgY29uc3QgbWluRGF0ZSA9IG5ldyBEYXRlKG1pbkRhdGVUaW1lVmFsdWUpLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgICAgICAgaWYgKGNvbnRyb2xEYXRlIDwgbWluRGF0ZSkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSB7IGZvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX2Zyb21fdGltZTogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9EYXRlKGZyb21EYXRlRmllbGQ6IHN0cmluZywgdG9EYXRlRmllbGQ6IHN0cmluZywgZnJvbVRpbWVGaWVsZDogc3RyaW5nID0gbnVsbCxcbiAgICB0b1RpbWVGaWVsZDogc3RyaW5nID0gbnVsbCwgZXJyb3JOYW1lOiBzdHJpbmcgPSAnZnJvbVRvRGF0ZScpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBmcm9tRGF0ZTogRGF0ZSA9IGZvcm1Hcm91cC5nZXQoZnJvbURhdGVGaWVsZCk/LnZhbHVlO1xuICAgICAgY29uc3QgdG9EYXRlOiBEYXRlID0gZm9ybUdyb3VwLmdldCh0b0RhdGVGaWVsZCk/LnZhbHVlO1xuICAgICAgY29uc3QgZnJvbVRpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldChmcm9tVGltZUZpZWxkKT8udmFsdWU7XG4gICAgICBjb25zdCB0b1RpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCk/LnZhbHVlO1xuICAgICAgaWYgKGZyb21UaW1lKSB7XG4gICAgICAgIGZyb21EYXRlLnNldEhvdXJzKGZyb21UaW1lLmhvdXJzKTtcbiAgICAgICAgZnJvbURhdGUuc2V0TWludXRlcyhmcm9tVGltZS5taW51dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0b1RpbWUpIHtcbiAgICAgICAgdG9EYXRlLnNldEhvdXJzKHRvVGltZS5ob3Vycyk7XG4gICAgICAgIHRvRGF0ZS5zZXRNaW51dGVzKHRvVGltZS5taW51dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICgoZnJvbURhdGUgIT09IG51bGwgJiYgdG9EYXRlICE9PSBudWxsKSAmJiBmcm9tRGF0ZSA+IHRvRGF0ZSkge1xuICAgICAgICByZXR1cm4geyBbZXJyb3JOYW1lXTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9UaW1lUmFuZ2UoZnJvbVRpbWVGaWVsZDogc3RyaW5nLCB0b1RpbWVGaWVsZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgdmFsaWRhdGlvbiBwYXNzZXNcbiAgICAgIGlmIChjb250cm9sLnBhcmVudCkge1xuICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sLnBhcmVudCBhcyBGb3JtR3JvdXA7XG4gICAgICAgIGNvbnN0IHRvQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQodG9UaW1lRmllbGQpO1xuICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCk7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsdWVHcmVhdGVyVGhhbk9yRXF1YWxUbyhmcm9tQ29udHJvbCwgdG9Db250cm9sKSAmJiB0aGlzLmlzVmFsdWVMZW5ndGhWYWxpZChmcm9tQ29udHJvbCwgdG9Db250cm9sKSAmJlxuICAgICAgICAgICF0b0NvbnRyb2wuaGFzRXJyb3IoJ2Zvcm1fdmFsaWRhdGlvbl9pbnZhbGlkX3RpbWVfcmFuZ2UnKSkge1xuICAgICAgICAgIHJlc3BvbnNlID0geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlOiB0cnVlIH07XG4gICAgICAgIH0gZWxzZSBpZiAodG9Db250cm9sLmhhc0Vycm9yKCdmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlJykpIHtcbiAgICAgICAgICAvLyByZXNldCB0aGUgZXJyb3Igb2Yg4oCYdG/igJkgY29udHJvbCB3aGVuIOKAmGZyb23igJkgY29udHJvbCBpcyB2YWxpZCBhbmQgdG8gY29udHJvbCBjb250YWlucyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlXG4gICAgICAgICAgdG9Db250cm9sLnNldEVycm9ycyh7fSk7XG4gICAgICAgICAgdG9Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9UaW1lKGZyb21UaW1lRmllbGQ6IHN0cmluZywgdG9UaW1lRmllbGQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21UaW1lOiBUaWJhVGltZSA9IGZvcm1Hcm91cC5nZXQoZnJvbVRpbWVGaWVsZCkudmFsdWU7XG4gICAgICBjb25zdCB0b1RpbWU6IFRpYmFUaW1lID0gZm9ybUdyb3VwLmdldCh0b1RpbWVGaWVsZCkudmFsdWU7XG4gICAgICBpZiAoIXRoaXMuaXNUaW1lTnVsbChmcm9tVGltZSkgJiYgIXRoaXMuaXNUaW1lTnVsbCh0b1RpbWUpICYmXG4gICAgICAgICEodG9UaW1lLmhvdXJzID09IDAgJiYgdG9UaW1lLm1pbnV0ZXMgPT0gMCkgJiZcbiAgICAgICAgKFxuICAgICAgICAgIChmcm9tVGltZS5ob3VycyA+IHRvVGltZS5ob3VycykgfHxcbiAgICAgICAgICAoZnJvbVRpbWUuaG91cnMgPT0gdG9UaW1lLmhvdXJzICYmIGZyb21UaW1lLm1pbnV0ZXMgPiB0b1RpbWUubWludXRlcylcbiAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX3JhbmdlOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNUaW1lTnVsbCA9ICh0aW1lOiBUaWJhVGltZSkgPT4gdGltZSA9PT0gbnVsbCB8fFxuICAgICh0aW1lLmhvdXJzID09PSBudWxsICYmIHRpbWUubWludXRlcyA9PT0gbnVsbCAmJiB0aW1lLnNlY29uZHMgPT09IG51bGwpO1xuXG4gIHN0YXRpYyBub1doaXRlc3BhY2VWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PlxuICAgICFpc051bGxPckVtcHR5KGNvbnRyb2wudmFsdWUpICYmIGlzTnVsbE9yRW1wdHkoY29udHJvbD8udmFsdWU/LnRyaW0oKSkgPyB7IHJlcXVpcmVkOiB0cnVlIH0gOiBudWxsO1xuXG4gIHN0YXRpYyBub1doaXRlc3BhY2VXaXRoaW5TZW50ZW5jZVZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+XG4gICAgIShjb250cm9sPy52YWx1ZT8uc3BsaXQoXCIgXCIpLmxlbmd0aCA9PT0gMSkgPyB7IG5vV2hpdGVzcGFjZVdpdGhpblNlbnRlbmNlOiB0cnVlIH0gOiBudWxsO1xuXG4gIHN0YXRpYyB0ZXJtc1BvbGljeUNoZWNrYm94KCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkVGVybXM6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEZWZhdWx0QWNjZXNzUHJvZmlsZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICBpZiAoIWlzTnVsbE9yRW1wdHkoY29udHJvbC52YWx1ZSkgJiYgIWNvbnRyb2wudmFsdWU/LmRlZmF1bHRBY2Nlc3NQcm9maWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub0RlZmF1bHRBY2Nlc3NQcm9maWxlOiB7XG4gICAgICAgICAgY29tcGFueU5hbWU6IGNvbnRyb2wudmFsdWUubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHpSYW5nZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLCBmcm9tWkZpZWxkOiBzdHJpbmcsIHRvWkZpZWxkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGZyb21aQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZnJvbVpGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGNvbnN0IHRvWkNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRvWkZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuXG4gICAgICBpZiAoZnJvbVpDb250cm9sLnZhbHVlPy5pZCA+IHRvWkNvbnRyb2wudmFsdWU/LmlkKSB7XG4gICAgICAgIHJldHVybiB7IHpSYW5nZTogdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5pbnZhbGlkX2ZpZWxkcykgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZENyZWRlbnRpYWxzKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsIGNhclBsYXRlRmllbGQ6IHN0cmluZyA9ICdjYXJQbGF0ZScsIG1vYmlsZUZpZWxkOiBzdHJpbmcgPSAnbW9iaWxlJywgYmFkZ2VGaWVsZDogc3RyaW5nID0gJ2JhZGdlJyxcbiAgICBlbWFpbEZpZWxkOiBzdHJpbmcgPSAnZW1haWwnLCBzZW5kRW1haWxGaWVsZDogc3RyaW5nID0gJ3NlbmRFbWFpbCcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChmb3JtR3JvdXA6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCBudWxsID0+IHtcbiAgICAgIGxldCBjYXJQbGF0ZXNJbnZhbGlkID0gZmFsc2U7XG4gICAgICBsZXQgYmFkZ2VzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgbGV0IGludGVycG9sYXRlZENyZWRlbnRpYWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAvLyBDYXJkc1xuICAgICAgY29uc3QgYmFkZ2VzRm9ybUFycmF5ID0gZm9ybUdyb3VwLmdldChiYWRnZUZpZWxkKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgaWYgKGJhZGdlc0Zvcm1BcnJheSkge1xuICAgICAgICBpbnRlcnBvbGF0ZWRDcmVkZW50aWFscy5wdXNoKHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uY2FyZCkpO1xuICAgICAgICBiYWRnZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoYmFkZ2VzRm9ybUFycmF5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2FyZHNJbnZhbGlkID0gYmFkZ2VzSW52YWxpZCB8fCAhYmFkZ2VzRm9ybUFycmF5O1xuXG4gICAgICAvL0NhciBwbGF0ZXNcbiAgICAgIGNvbnN0IGNhclBsYXRlc0Zvcm1BcnJheSA9IGZvcm1Hcm91cC5nZXQoY2FyUGxhdGVGaWVsZCkgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGlmIChjYXJQbGF0ZXNGb3JtQXJyYXkpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmNhcl9wbGF0ZSkpO1xuICAgICAgICBjYXJQbGF0ZXNJbnZhbGlkID0gdGhpcy5pc0Zvcm1Db250cm9sTGlzdEludmFsaWQoY2FyUGxhdGVzRm9ybUFycmF5LnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2FyUGxhdGVzSW52YWxpZCA9IGNhclBsYXRlc0ludmFsaWQgfHwgIWNhclBsYXRlc0Zvcm1BcnJheTtcblxuICAgICAgLy8gTW9iaWxlXG4gICAgICBjb25zdCBtb2JpbGVGb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQobW9iaWxlRmllbGQpO1xuICAgICAgaWYgKG1vYmlsZUZvcm1Db250cm9sKSB7XG4gICAgICAgIGludGVycG9sYXRlZENyZWRlbnRpYWxzLnB1c2godHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5tb2JpbGUpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTW9iaWxlSW52YWxpZCA9ICFtb2JpbGVGb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICAgIC8vIEVtYWlsXG4gICAgICBjb25zdCBlbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChlbWFpbEZpZWxkKTtcbiAgICAgIGNvbnN0IHNlbmRFbWFpbEZvcm1Db250cm9sID0gZm9ybUdyb3VwLmdldChzZW5kRW1haWxGaWVsZCk7XG4gICAgICBpZiAoZW1haWxGb3JtQ29udHJvbCAmJiBzZW5kRW1haWxGb3JtQ29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucHVzaCh0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLmVtYWlsKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBpc0VtYWlsSW52YWxpZCA9ICEoc2VuZEVtYWlsRm9ybUNvbnRyb2w/LnZhbHVlICYmIGVtYWlsRm9ybUNvbnRyb2w/LnZhbHVlKVxuXG4gICAgICBjb25zdCBpc1JlcXVpcmVkQ3JlZGVudGlhbHMgPSBpc0NhclBsYXRlc0ludmFsaWQgJiYgaXNDYXJkc0ludmFsaWQgJiYgaXNNb2JpbGVJbnZhbGlkICYmIGlzRW1haWxJbnZhbGlkO1xuXG4gICAgICBpZiAoaXNSZXF1aXJlZENyZWRlbnRpYWxzKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDcmVkZW50aWFsID0gaW50ZXJwb2xhdGVkQ3JlZGVudGlhbHMucG9wKCk7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0ZVBhcmFtcyA9IGAke2ludGVycG9sYXRlZENyZWRlbnRpYWxzLmpvaW4oJywgJyl9ICR7dHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5vcil9ICR7bGFzdENyZWRlbnRpYWx9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZENyZWRlbnRpYWxzOiB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoTG9jYWxpemF0aW9uLnJlcXVpcmVkX2NyZWRlbnRpYWxzX21lc3NhZ2UsIHsgY3JlZGVudGlhbHM6IGludGVycG9sYXRlUGFyYW1zIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc0Zvcm1Db250cm9sTGlzdEludmFsaWQobGlzdDogVW50eXBlZEZvcm1Db250cm9sW10pIHtcbiAgICBsZXQgaXNJbnZhbGlkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBjb250cm9sIG9mIGxpc3QpIHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICBpc0ludmFsaWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXNJbnZhbGlkO1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkRGF5cyhzcGVjaWFsRGF5c0ZpZWxkOiBzdHJpbmcsIHdlZWtEYXlzRmllbGQ6IHN0cmluZywgZXJyb3JOYW1lOiBzdHJpbmcgPSAncmVxdWlyZWREYXlzJyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGZvcm1Hcm91cDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHNwZWNpYWxEYXlzOiBudW1iZXIgPSBmb3JtR3JvdXAuZ2V0KHNwZWNpYWxEYXlzRmllbGQpLnZhbHVlO1xuICAgICAgY29uc3Qgd2Vla0RheXM6IG51bWJlciA9IGZvcm1Hcm91cC5nZXQod2Vla0RheXNGaWVsZCkudmFsdWU7XG4gICAgICBpZiAoc3BlY2lhbERheXMgPiAwIHx8IHdlZWtEYXlzID4gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgW2Vycm9yTmFtZV06IHRydWUgfTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGlzUm9sZU5hbWVFeGlzdHMocm9sZVNlcnZpY2VQcm94eTogQ2xvdWQuUm9sZVNlcnZpY2VQcm94eSwgcm9sZUlkOiBudW1iZXIpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXG4gICAgICAgIGRlbGF5KDUwMCksXG4gICAgICAgIGRlYm91bmNlVGltZShJTlBVVF9TRUFSQ0hfREVCT1VOQ0VfVElNRSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiByb2xlU2VydmljZVByb3h5LmlzRXhpc3RzKGNvbnRyb2wudmFsdWUsIHJvbGVJZCA/PyB1bmRlZmluZWQpLnBpcGUoXG4gICAgICAgICAgbWFwKHJlcyA9PiByZXMuZGF0YSA9PT0gdHJ1ZSB8fCAhcmVzLmlzU3VjY2VzcyA/IHsgcm9sZU5hbWVBbHJlYWR5RXhpc3RzOiB0cnVlIH0gOiBudWxsKSkpKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGlzQWNjZXNzUHJvZmlsZU51bWJlckF2YWlsYWJsZShhY2Nlc3NQcm9maWxlU2VydmljZVByb3h5OiBFZGdlLkFjY2Vzc1Byb2ZpbGVTZXJ2aWNlUHJveHksIGd1aWQ6IHN0cmluZywgY3VycmVudFZhbHVlOiBudW1iZXIpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycz4gPT4ge1xuICAgICAgcmV0dXJuIG9mKGNvbnRyb2wudmFsdWUpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgLy8gQ2FsbCBzZXJ2aWNlIHRvIGNoZWNrIGlmIHRoZSBudW1iZXIgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgICByZXR1cm4gYWNjZXNzUHJvZmlsZVNlcnZpY2VQcm94eS5nZXRBdmFpbGFibGVOdW1iZXIodmFsdWUsIGd1aWQpLnBpcGUoXG4gICAgICAgICAgICAgIG1hcChyZXMgPT4gIXJlcy5kYXRhPy5pc0F2YWlsYWJsZSB8fCAhcmVzLmlzU3VjY2VzcyA/IHsgYWNjZXNzUHJvZmlsZU51bWJlclRha2VuOiB0cnVlIH0gOiBudWxsKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHRpYmFUaW1lVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWw6IFRpYmFUaW1lID0gY29udHJvbC52YWx1ZTtcblxuICAgIGlmICh2YWwgJiYgKHZhbC5ob3VycyA9PT0gbnVsbCB8fCB2YWwubWludXRlcyA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGludmFsaWRUaW1lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlVGliYVRpbWVJblJhbmdlVmFsaWRhdG9yKG1pblRpbWU6IFRpYmFUaW1lLCBtYXhUaW1lOiBUaWJhVGltZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVGliYVRpbWVJblJhbmdlKGNvbnRyb2wudmFsdWUsIG1pblRpbWUsIG1heFRpbWUpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVTdHJpbmdISE1NSW5SYW5nZVZhbGlkYXRvcihtaW5UaW1lOiBUaWJhVGltZSwgbWF4VGltZTogVGliYVRpbWUpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoISFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlLmxlbmd0aCAhPT0gNCkgeyAvLyBBc3N1bWluZyB0aW1lIGZvcm1hdCBpcyAnSEhNTSdcbiAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lX2Zvcm1hdDogdHJ1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhvdXJzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDAsIDIpKTtcbiAgICAgICAgICBjb25zdCBtaW51dGVzOiBudW1iZXIgPSBwYXJzZUludChjb250cm9sLnZhbHVlLnNsaWNlKDIpKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VGltZTogVGliYVRpbWUgPSB7IGhvdXJzLCBtaW51dGVzIH07XG4gICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUaWJhVGltZUluUmFuZ2UoY3VycmVudFRpbWUsIG1pblRpbWUsIG1heFRpbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHRpbWVSYW5nZUFycmF5T3ZlcmxhcFZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoY29udHJvbC52YWxpZCAmJiBjb250cm9sLmVuYWJsZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1BcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSYW5nZSA9IGZvcm1BcnJheVtpXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RnJvbSA9IHRpbWVUb01vbWVudChjdXJyZW50UmFuZ2UuZnJvbSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRvID0gdGltZVRvTW9tZW50KGN1cnJlbnRSYW5nZS50byk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudEZyb20gJiYgY3VycmVudFRvKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBmb3JtQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVJhbmdlID0gZm9ybUFycmF5W2pdO1xuICAgICAgICAgICAgICBjb25zdCBjb21wYXJlRnJvbSA9IHRpbWVUb01vbWVudChjb21wYXJlUmFuZ2UuZnJvbSk7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVUbyA9IHRpbWVUb01vbWVudChjb21wYXJlUmFuZ2UudG8pO1xuXG4gICAgICAgICAgICAgIGlmIChjb21wYXJlRnJvbSAmJiBjb21wYXJlVG8pIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmxhcFxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlc092ZXJsYXAgPSBjdXJyZW50RnJvbS5pc0JlZm9yZShjb21wYXJlVG8pICYmIGN1cnJlbnRUby5pc0FmdGVyKGNvbXBhcmVGcm9tKTtcblxuICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4geyBmb3JtX3ZhbGlkYXRpb25fdGltZV9yYW5nZV9vdmVybGFwOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1ZhbHVlR3JlYXRlclRoYW5PckVxdWFsVG8oZnJvbUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdG9Db250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICBjb25zdCBmcm9tVGltZUluTnVtYmVyOiBudW1iZXIgPSBmcm9tQ29udHJvbC52YWx1ZTtcbiAgICBjb25zdCB0b1RpbWVJbk51bWJlcjogbnVtYmVyID0gdG9Db250cm9sLnZhbHVlO1xuICAgIHJldHVybiBmcm9tVGltZUluTnVtYmVyICE9PSBudWxsICYmIHRvVGltZUluTnVtYmVyICE9PSBudWxsICYmICtmcm9tVGltZUluTnVtYmVyID4gK3RvVGltZUluTnVtYmVyO1xuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsdWVMZW5ndGhWYWxpZChmcm9tQ29udHJvbDogQWJzdHJhY3RDb250cm9sLCB0b0NvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZyb21UaW1lSW5OdW1iZXI6IG51bWJlciA9IGZyb21Db250cm9sLnZhbHVlO1xuICAgIGNvbnN0IHRvVGltZUluTnVtYmVyOiBudW1iZXIgPSB0b0NvbnRyb2wudmFsdWU7XG4gICAgcmV0dXJuIGZyb21UaW1lSW5OdW1iZXIudG9TdHJpbmcoKS5sZW5ndGggPT09IFZBTElEX1RJTUVfTUFYX0xFTkdUSCAmJlxuICAgICAgdG9UaW1lSW5OdW1iZXIudG9TdHJpbmcoKS5sZW5ndGggPT09IFZBTElEX1RJTUVfTUFYX0xFTkdUSDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlVGliYVRpbWVJblJhbmdlKGN1cnJlbnRUaW1lOiBUaWJhVGltZSwgbWluVGltZTogVGliYVRpbWUsIG1heFRpbWU6IFRpYmFUaW1lKTogeyBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9IH0gfCBudWxsIHtcbiAgICAvLyBJZiB0aW1lIGlzIHVuZGVmaW5lZCwgcmV0dXJuIG51bGwgKG5vIGVycm9yKVxuICAgIGlmICghY3VycmVudFRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogVGliYVRpbWUpOiBzdHJpbmcgPT5cbiAgICAgIGAke3RpbWUuaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3RpbWUubWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcblxuICAgIGNvbnN0IGhvdXJzOiBudW1iZXIgPSArY3VycmVudFRpbWUuaG91cnM7XG4gICAgY29uc3QgbWludXRlczogbnVtYmVyID0gK2N1cnJlbnRUaW1lLm1pbnV0ZXM7XG5cbiAgICBjb25zdCBpc1ZhbGlkVGltZSA9XG4gICAgICAoaG91cnMgPiBtaW5UaW1lLmhvdXJzIHx8IChob3VycyA9PT0gbWluVGltZS5ob3VycyAmJiBtaW51dGVzID49IG1pblRpbWUubWludXRlcykpICYmXG4gICAgICAoaG91cnMgPCBtYXhUaW1lLmhvdXJzIHx8IChob3VycyA9PT0gbWF4VGltZS5ob3VycyAmJiBtaW51dGVzIDw9IG1heFRpbWUubWludXRlcykpO1xuXG4gICAgLy8gSWYgdGltZSBpcyB2YWxpZCwgcmV0dXJuIG51bGwgKG5vIGVycm9yKVxuICAgIGlmIChpc1ZhbGlkVGltZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3Igd2l0aCBmb3JtYXR0ZWQgdGltZSByYW5nZVxuICAgIHJldHVybiB7XG4gICAgICBmb3JtX3ZhbGlkYXRpb25faW52YWxpZF90aW1lOiB7XG4gICAgICAgIGZyb206IGZvcm1hdFRpbWUobWluVGltZSksXG4gICAgICAgIHRvOiBmb3JtYXRUaW1lKG1heFRpbWUpLFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|