@churchillliving/se-ui-toolkit 6.54.153 → 6.54.154
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.
|
@@ -753,7 +753,16 @@ function formatFormFieldCValue(field) {
|
|
|
753
753
|
else if (field.control === EFormControl.CALENDAR &&
|
|
754
754
|
(field.value || field.value === '')) {
|
|
755
755
|
if (field.timeOnly) {
|
|
756
|
-
|
|
756
|
+
const dateTimeRegex = /^\d{4}-\d{2}-\d{2} (\d{2}):(\d{2}):(\d{2})$/; // Regex for datetime format
|
|
757
|
+
const match = field.value.match(dateTimeRegex);
|
|
758
|
+
if (match) {
|
|
759
|
+
// Extract time only from the matched datetime string
|
|
760
|
+
const timeOnly = `${match[1]}:${match[2]}:${match[3]}`;
|
|
761
|
+
field.value = timeOnly;
|
|
762
|
+
}
|
|
763
|
+
else {
|
|
764
|
+
field.value = field.value;
|
|
765
|
+
}
|
|
757
766
|
}
|
|
758
767
|
else {
|
|
759
768
|
field.value =
|
|
@@ -1050,4 +1059,4 @@ export function calendarMinMaxValue(item, value, index) {
|
|
|
1050
1059
|
return validation;
|
|
1051
1060
|
}
|
|
1052
1061
|
/* #endregion */
|
|
1053
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUVGLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUN0QyxJQUFJLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ25DLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFFdEMsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEVBQU8sRUFBRSxJQUFTLEVBQUUsYUFBbUI7SUFDNUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQWdCO0lBQ2pELFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsT0FBTyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0s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Q0QsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5LCBJRmlsdGVyRGljdGlvbmFyeSB9IGZyb20gJy4uL21vZGVscy9jb21tb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRUZvcm1hdFR5cGUsXG4gIEVGb3JtQ29udHJvbCxcbiAgRUh5cGVybGluayxcbiAgRU1hdGNoTW9kZSxcbiAgRU9wZXJhdG9yLFxuICBJRHluYW1pY0NhcmQsXG4gIElEeW5hbWljRm9ybSxcbiAgSUZvcm1hdCxcbiAgSUZvcm1GaWVsZCxcbiAgSUZvcm1TZWN0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBhZGRHbG9iYWxGaWx0ZXIsIEVHcmlkQ29sdW1uVHlwZSwgSUdsb2JhbEZpbHRlciwgSUdyaWRDb2x1bW4sIElHcmlkRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiAjcmVnaW9uIHB1YmxpYyBtZXRob2RzICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZSA6IGFueVxuICogRnVuY3Rpb24gcmVjZWl2ZXMgdGhlIHZhbHVlIGFuZCBleHBlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXRlZC5cbiAqIERvIG5vdCB1c2UgZmF0IGFycm93IGZ1bmN0aW9uIGFzIHRoZXkgZG8gbm90IHByZXNlcnZlIHRoZSBjb250ZXh0LlxuICogdGhpcy52YWx1ZSByZWZlcnMgdG8gdGhlIHZhbHVlIG9mIElGb3JtRmllbGQgT2JqZWN0XG4gKiBNb2RpZnkgdGhpcy52YWx1ZSBkaXJlY3RseSB0byByZWNlaXZlIGVmZmVjdFxuICovXG5cbiB2YXIgZm9ybXN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjb2x1bW5zU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNhcmRTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgcm91dGVDaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKGlkOiBhbnksIGRhdGE6IGFueSwgbG9hZENvbXBvbmVudD86IGFueSkge1xuICBmb3Jtc3RhdGUubmV4dCh7IGlkLCBkYXRhLCBsb2FkQ29tcG9uZW50IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc1N0YXRlKHBhZ2VTZXR0aW5nOiBhbnkpIHtcbiAgY29sdW1uc1N0YXRlLm5leHQocGFnZVNldHRpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Db2x1bW5zU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjb2x1bW5zU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmb3Jtc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJldHVybiByb3V0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJvdXRlQ2hhbmdlLm5leHQoKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjYXJkU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gfVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNDYXJkU3RhdGUoZGF0YTogYW55KSB7XG4gIGNhcmRTdGF0ZS5uZXh0KHsgZGF0YSB9KTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBjbG9zZUlGcmFtZSgpe1xuICBsZXQgY2xvc2UgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1oZWFkZXItaWNvbicpYXMgSFRNTEVsZW1lbnRcbiAgaWYoY2xvc2UpIHtcbiAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgbGV0IGZpZWxkPXNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkKT0+IGZpZWxkLmxhYmVsICYmIGZpZWxkLmxhYmVsPT09bGFiZWwpXG4gICBpZihmaWVsZCAmJiBmaWVsZC5oeXBlcmxpbmspIGZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBkYXRhO1xufSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdXRvQ29tcGxldGVEYXRhKFxuICB2YWx1ZXM6IGFueVtdLFxuICB1bmlxdWVJZDogYW55LFxuICBsYWJlbEtleTogc3RyaW5nLFxuICBWYWx1ZUtleTogc3RyaW5nLFxuKXtcbiAgaWYodmFsdWVzPy5sZW5ndGggPiAwKXtcbiAgICB2YWx1ZXMgPSB2YWx1ZXM/Lm1hcCgocm93VmFsdWUpID0+ICh7W2xhYmVsS2V5XTogcm93VmFsdWUsIFtWYWx1ZUtleV06IHVuaXF1ZUlkfSkpO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb29rdXBEYXRhKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKSB7XG4gIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uOiBJRm9ybVNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhICYmXG4gICAgICAgICAgZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wgJiYgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNpZGViYXJMaW5rUGFyYW1WYWx1ZXMobGluazogc3RyaW5nLCBwYXJhbXM6IGFueVtdKTogc3RyaW5nIHtcbiAgbGV0IG5ld0xpbms6IHN0cmluZyA9IGxpbms7XG4gIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICBwYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gcGFyYW0ubmFtZSA/ICd7eycgKyBwYXJhbS5uYW1lICsgJ319JyA6ICcnO1xuICAgICAgaWYgKG5ld0xpbmsubG9jYWxlQ29tcGFyZSh1cmwpKSB7XG4gICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cCh1cmwsICdpZycpLCB0b1RyaW0ocGFyYW0udmFsdWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE5ld0ZpZWxkSW5Gb3JtKGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0sIHNlY3Rpb25OYW1lOnN0cmluZywgZm9ybUZpZWxkOklGb3JtRmllbGQpe1xuICBjb25zdCBzZWN0aW9uID0gZHluYW1pY0Zvcm0/LmZvcm1TZWN0aW9ucz8uZmluZCgoc2VjdGlvbik9PiBzZWN0aW9uLm5hbWUgPT09IHNlY3Rpb25OYW1lKTtcbiAgaWYoc2VjdGlvbil7XG4gICAgc2VjdGlvbi5maWVsZHMucHVzaChmb3JtRmllbGQpO1xuICB9XG4gIHJldHVybiBkeW5hbWljRm9ybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZvcm1GaWVsZHMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdXG4pIHtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChzZWN0aW9uLmZpZWxkcyA9IHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBsZXQgbWF0Y2hlZEZpZWxkID0gZm9ybUZpZWxkcy5maW5kKFxuICAgICAgICAoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hlZEZpZWxkKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IG1hdGNoZWRGaWVsZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbEZpbHRlcnMoXG4gIGdsb2JhbEZpbHRlcnM6IGFkZEdsb2JhbEZpbHRlcltdLFxuICBmaWVsZDogc3RyaW5nLFxuKSB7XG4gIGxldCBmb3JtRmllbGRPYmo6IGFueTtcbiAgZ2xvYmFsRmlsdGVycy5tYXAoKGZpbHRlcik9PntcbiAgICBpZiAoZmlsdGVyLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgZm9ybUZpZWxkT2JqID0gZmlsdGVyO1xuICAgICAgfVxuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZE9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZHMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUNvbnRyb2w6IEVGb3JtQ29udHJvbFxuKTogSUZvcm1GaWVsZFtdIHtcbiAgbGV0IGZvcm1GaWVsZHM6IElGb3JtRmllbGRbXSA9IFtdO1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaWYgKHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQudmFsdWU/LnRleHQgJiYgdHlwZW9mKGZvcm1GaWVsZC52YWx1ZS50ZXh0KSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHtcbiAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnZhbHVlLnRleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGQoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZ1xuKTogSUZvcm1GaWVsZCB7XG4gIGxldCBmb3JtRmllbGRPYmo6IGFueTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBmb3JtRmllbGRPYmogPSBmb3JtRmllbGQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG4vLyB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgZmllbGQuIElmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlIGlzIHRydWUgYW5kIGRpc3BsYXlGaWVsZFxuLy8gZXhpc3QgaW4gdGhlIGZpZWxkIHRoZW4gYWx3YXlzIHJldHVybiBhIGRpc3BsYXlGaWVsZCB2YWx1ZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTpib29sZWFuID0gZmFsc2Vcbikge1xuICBsZXQgdmFsdWU7XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmb3JtU2VjdGlvbnMgYXMgYW55KSB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0IDogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWRcbiAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0XG4gICAgICAgICAgICA6IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnZhbHVlXG4gICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlQXNTdHJpbmcoZHluYW1pY0Zvcm06SUR5bmFtaWNGb3JtLGZpZWxkOnN0cmluZyk6c3RyaW5ne1xuICBsZXQgdmFsdWU6YW55ID0gZ2V0Rm9ybUZpZWxkVmFsdWUoZHluYW1pY0Zvcm0sZmllbGQsIHRydWUpO1xuICBpZiAodmFsdWUpe1xuICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgIH1cbiAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb25GaWVsZFZhbHVlKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICBmaWVsZDogc3RyaW5nXG4pIHtcbiAgbGV0IGZvcm06IElEeW5hbWljRm9ybSA9IHsgZm9ybVNlY3Rpb25zIH07XG4gIHJldHVybiBnZXRGb3JtRmllbGRWYWx1ZShmb3JtLCBmaWVsZCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlRm9ybVZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuXG4gICAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSBmaWVsZC50YWJsZXM/Lm1hcCgodGFibGUpID0+IHRhYmxlLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgaWYgKHRhYmxlICYmIHRhYmxlLmluY2x1ZGVzKHRhYmxlTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVt0YWJsZU5hbWVdKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkICYmIGZpZWxkLmZpZWxkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VbdGFibGVOYW1lXVtmaWVsZC5maWVsZF0gPSBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXNwb25zZVtmaWVsZC5maWVsZF0gPSBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiB2YWx1ZSxcbiAgfTtcbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuZEZpbHRlcihmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gIHJldHVybiBzZXRGaWx0ZXIoZmllbGQsIHZhbHVlLCBFTWF0Y2hNb2RlLkVRVUFMUywgRU9wZXJhdG9yLkFORClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBhbnkge1xuICBsZXQgdmFsdWU6IGFueTtcbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhW2ldLCBwcm9wTmFtZSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGdldFByb3BlcnR5VmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnRGF0YUZpZWxkVmFsdWVBc1N0cmluZyhcbiAgZGF0YTogYW55LFxuICBwcm9wTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBsZXQgdmFsdWUgPSBnZXRPcmlnRGF0YUZpZWxkVmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlY3Rpb25Qcm9wVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHByb3BzOiBJRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBpZiAoc2VjdGlvbi5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBwcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgcmV0dXJuIHNldFByb3BWYWx1ZShzZWN0aW9uLCBwcm9wKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHMgKi9cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSB8IElEeW5hbWljQ2FyZCwgYWxsRGF0YTogYW55W10gPSBbXSkge1xuICBpZiAoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBkeW5hbWljRm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRLZXk6IGFueSA9IGtleXMuZmluZChcbiAgICAgICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgICAgICAvLyBzZXQgbGFiZWwgaHlwZXJsaW5rXG4gICAgICAgICAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rICYmXG4gICAgICAgICAgICAgICgoZm9ybUZpZWxkLmh5cGVybGluay5saW5rSWQgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMpIHx8XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXBhcmFtcyAmJlxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluay5pbmNsdWRlcygnfX0nKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgICAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhcmFtS2V5ID0gcGFyYW1LZXkucmVwbGFjZSgne3snLCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5maWx0ZXIoKHgpID0+IHgubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYocGFyYW1zKXtcbiAgICAgICAgICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayxcbiAgICAgICAgICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsXG4gICAgICAgICAgICAgICAgYWxsRGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC50aW1lT25seSA/IHJlY29yZFttYXRjaGVkS2V5XSA6IHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShyZWNvcmRbbWF0Y2hlZEtleV0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5jYXJkICYmIGZvcm1GaWVsZC5jYXJkLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1GaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICBcbiAgICAgICAgICAgICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGEsIGZvcm1GaWVsZC5jYXJkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgICAgbWF0Y2hlZEtleVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChyZWNvcmRbbWF0Y2hlZEtleV0gJiYgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHtbZm9ybUZpZWxkLmRpc3BsYXlGaWVsZF0gOiByZWNvcmRbbWF0Y2hlZEtleV19KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gYXJyYXlWYWx1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihyZWNvcmRbbWF0Y2hlZEtleV0pe1xuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hEaXNwbGF5RmllbGQgPSBnZXRNYXRjaEtleShcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoRGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0b1RyaW0ocmVjb3JkW21hdGNoRGlzcGxheUZpZWxkXSksXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWVGaWVsZCA9IGdldE1hdGNoS2V5KHJlY29yZCwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZvcm1GaWVsZC52YWx1ZT8udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdG9UcmltKHJlY29yZFttYXRjaFZhbHVlRmllbGRdKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXREYXRhRnJvbVJlY29yZCA9IGZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhLFxuICAgICAgICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhID0gc2V0RGF0YUZyb21SZWNvcmQ/LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYoc2V0RGF0YUZyb21SZWNvcmQ/Lm1hdGNoRGF0YSl7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5pZCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMgJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgc2V0RGF0YSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbDtcbiAgICAgICAgICAgICAgICBzZXREYXRhLmRhdGEuZGF0YSA9IGZpbmRLZXlzQW5kVmFsdWUoc2V0RGF0YS5kYXRhLmRhdGEsIHJlY29yZCk/LmRhdGE7XG4gICAgICAgICAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShzZXREYXRhLmlkLCBzZXREYXRhLmRhdGEuZGF0YSwgZmFsc2UpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LIFxuICAgICAgICAgICAgICAgICYmICBmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuRElBTE9HIFxuICAgICAgICAgICAgICAgICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zID0gZmluZEtleXNBbmRWYWx1ZShmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcywgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1hdEZvcm1GaWVsZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XSAmJlxuICAgICAgICAgICAgICAgICAgICAocmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5EUk9QRE9XTikge1xuICAgICAgICAgICAgICAgICAgbGV0IGRyb3BWYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICAgICAgICAgIGlmIChkcm9wVmFsdWUgJiYgZHJvcFZhbHVlPy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZHJvcFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlPXRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pIHx8IGZvcm1GaWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy9zZXQgaHlwZXJsaW5rIHBhcmFtIHZhbHVlIGFzIGZpZWxkIHZhbHVlXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rUGFyYW1WYWx1ZShyZWNvcmQ6YW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGxldCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGluazogc3RyaW5nID0nJztcbiAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IHBhcmFtOiBhbnk7XG4gIGxldCBmaWVsZEluZm86IGFueTtcbiAgICBkeW5hbWljRm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/Lmxpbmspe1xuICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8ub3JpZ25hbExpbmspe1xuICAgICAgICAgICBsaW5rID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5vcmlnbmFsTGluaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zKXtcbiAgICAgICAgICAgcGFyYW0gPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXM7XG4gICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRJbmZvID0gZm9ybUZpZWxkO1xuICAgICAgICAgIGlmKHJlY29yZCAmJiBrZXlzICYmIGxpbmsgJiYgcGFyYW1LZXlzICYmIHBhcmFtICYmIGZpZWxkSW5mbyl7XG4gICAgICAgICAgICBmaWVsZEluZm8ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKGtleXMsIHJlY29yZCwgbGluaywgcGFyYW1LZXlzLCBwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iakNvbnZlcnRUb0xvd2VyKG9iajogYW55KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3Jba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIFxuICAgICAgICAvLyBpbiBjYXNlIG9mIHByb3Agbm90IGZvdW5kIGluIHJlY29yZCB0aGVuIHRyeSB0byBmaW5kIHByb3AgaW4gYWxsIGRhdGEgYXJyYXksIHRvIGdldCBpdHMgdmFsdWUgXG4gICAgICAgIGlmICghcHJvcFZhbHVlICYmIGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhKT0+e1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IGRhdGEucmVjb3Jkcy5maW5kKCh4KT0+IHhbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSk9PntcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpO1xuICAgICAgICAgICAgICBsZXQgbWF0Y2hLZXkgPSBrZXlzLmZpbmQoKHgpPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5KXtcbiAgICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gYWxsUmVjb3JkW21hdGNoS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXQgcGFyYW0gdmFsdWUgZnJvbSBhcGkgcmVzcG9uc2UsIGlmIHBhcmFtIGtleSBleGlzdHMgaW4gaXRcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgIHBhcmFtVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UoXG4gICAgICAgICAgICAgIG5ldyBSZWdFeHAocGFyYW0sICdpZycpLFxuICAgICAgICAgICAgICB0b1RyaW0ocGFyYW1WYWx1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbSgnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJlcGxhY2UgdGhlIHt7cGFyYW19fSB3aXRoIGVtcHR5XG4gIGlmKG5ld0xpbmsgJiYgbmV3TGluay5pbmNsdWRlcyhcInt7XCIpICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ9fVwiKSl7XG4gICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UoL3srLio/fSsvZywgXCJcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbi8vIGl0cyBjaGVja2luZyBpZiB0aGVyZSBpcyBubyB2YWx1ZSBpbiBoeXBlcmxpbmsgcGFyYW0gdGhlbiBpdCBzZXQga2V5IGFzIGEgcGFyYW1WYWx1ZVxuZnVuY3Rpb24gc2V0UGFyYW1LZXlWYWx1ZShyZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55W10gPSBbXSwgcGFyYW1rZXk6IGFueSl7XG4gIGxldCBwYXJhbVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlmKGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKXtcbiAgICBhbGxEYXRhLmZvckVhY2goKGRhdGE6IGFueSk9PntcbiAgICAgIGlmKGRhdGEucmVjb3JkcyAmJiBkYXRhLnJlY29yZHMubGVuZ3RoID4gMCl7XG4gICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT57XG4gICAgICAgICAgIGlmKHBhcmFtVmFsdWUgPT09IGZhbHNlKXtcbiAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpLnNvbWUoKHJlY29yZCk9PiByZWNvcmQudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfWVsc2V7XG4gICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKHJlY29yZCkuc29tZSgoeCk9PiB4ID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICByZXR1cm4gcGFyYW1WYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHByb3BWYWx1ZTogYW55O1xuICBkYXRhLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgaWYgKGtleSAmJiBwcm9wTmFtZSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBwcm9wVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHJvcFZhbHVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQ6IGFueSkge1xuICBpZiAoXG4gICAgZmllbGQuZm9ybWF0Py50eXBlID09PSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOIHx8XG4gICAgZmllbGQuZm9ybWF0Py5mb3JtYXR0ZXI/Lm5hbWUgPT09ICd0b0Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiAoZmllbGQudmFsdWUgPT09IDEgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICd0cnVlJyB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knKSA/ICdZJyA6ICdOJztcbiAgfSBlbHNlIGlmIChcbiAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAoZmllbGQudmFsdWUgfHwgZmllbGQudmFsdWUgPT09ICcnKVxuICApIHtcbiAgICBpZihmaWVsZC50aW1lT25seSl7XG4gICAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlO1xuICAgIH1lbHNle1xuICAgICAgZmllbGQudmFsdWUgPVxuICAgICAgZmllbGQuc2hvd1RpbWUgPT09IHRydWVcbiAgICAgICAgPyB0b1Nob3J0RGF0ZVRpbWUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICAgICAgOiB0b1Nob3J0RGF0ZShmaWVsZC52YWx1ZSwgZmllbGQuZm9ybWF0KVxuICAgIH1cbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH0gZWxzZSBpZiAoXG4gICAgKGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgfHwgZmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgIGZpZWxkLnZhbHVlICYmXG4gICAgdHlwZW9mIGZpZWxkLnZhbHVlID09PSAnb2JqZWN0J1xuICApIHtcbiAgICByZXR1cm4gZmllbGQudmFsdWUudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIGZpZWxkLmxhYmVsICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgZmllbGQubGFiZWwubGFiZWxDb250cm9sLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5MT09LVVBfSU5QVVQgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGZpZWxkLnZhbHVlID0gZmllbGQudmFsdWUgPT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpZWxkLnZhbHVlO1xuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXV0b1NldExvb2t1cERhdGEoXG4gIGZpZWxkRGF0YTogYW55LFxuICByZXNwb25zZTogYW55XG4gICkge1xuICBsZXQgb2JqID0ge307XG4gIGxldCByZWNvcmQgPSBzZXREYXRhRmllbGRzKFtyZXNwb25zZV0pO1xuICBpZiAocmVjb3JkICYmIHJlY29yZC5sZW5ndGggPiAwKSB7XG4gICAgcmVjb3JkLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgcmVjb3JkID0geDtcbiAgICB9KTtcbiAgfVxuICBpZiAoZmllbGREYXRhICYmIHJlY29yZCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkRGF0YSkuZm9yRWFjaCgoW2RhdGFLZXksIGRhdGFWYWx1ZV06IGFueSkgPT4ge1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IGRhdGFLZXk/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgbGV0IHZhbHVlID0gcm93S2V5cz8uZmluZChcbiAgICAgICAgKHgpID0+IGRhdGFWYWx1ZSAmJiBkYXRhVmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhVmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LnJlcGxhY2UoXCJ7XCIsIFwiXCIpPy5yZXBsYWNlKFwifVwiLCBcIlwiKVxuICAgICAgKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA/IHJlY29yZFt2YWx1ZSsnX29iaiddPy5vcHRpb25WYWx1ZSA6IHJlY29yZFt2YWx1ZV0gfTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IHJlY29yZFtrZXkudG9Mb3dlckNhc2UoKV0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IHsgLi4ub2JqLCBbZGF0YUtleV06IGRhdGFWYWx1ZSB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEdyaWRMb29rdXBEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZywgZGF0YTogYW55KXtcbiAgbGV0IG9iaiA9IGNvbHVtbi5maW5kKCh4KT0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICBpZihvYmogJiYgb2JqLmxvb2t1cENvbnRyb2w/LmRhdGEpe1xuICAgIG9iai5sb29rdXBDb250cm9sLmRhdGEuZGF0YSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueVtdKSB7XG4gIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoeCkucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHsgLi4ucHJldiwgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0gfSksXG4gICAgICAgIHt9XG4gICAgICApO1xuXG4gICAgICBkYXRhLnB1c2gocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ1Jlc3BvbnNlKFxuICBmb3JtRmllbGQ6IGFueSxcbiAgZm9ybURhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuKSB7XG4gIGxldCB2YWx1ZTogYW55O1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyBpZiBzZWxlY3RlZFZhbHVlIGRvZXMgbm90IGV4aXN0IHRoZW4gY29uc2lkZXIgdmFsdWVGaWVsZCBhcyBzZWxlY3RlZFZhbHVlXG4gICAgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS52YWx1ZVByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wID0gZm9ybURhdGEuZGF0YS5sYWJlbFByb3A7XG4gICAgfVxuICAgIGVsc2UgaWYgKFxuICAgICAgZm9ybURhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEgJiZcbiAgICAgIGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wICYmXG4gICAgICAhZm9ybURhdGEuZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wID0gZm9ybURhdGEuZGF0YS52YWx1ZVByb3A7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hWYWx1ZUtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGZvcm1EYXRhPy5kYXRhPy52YWx1ZVByb3BcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoRmllbGRLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8ubGFiZWxQcm9wXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhPy5kYXRhICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS52YWx1ZVByb3AgJiZcbiAgICAgIGZvcm1EYXRhPy5kYXRhLmxhYmVsUHJvcFxuICAgICkge1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IHJlc3BvbnNlW21hdGNoVmFsdWVLZXldO1xuICAgICAgbGV0IG1hdGNoVGV4dCA9IHJlc3BvbnNlW21hdGNoRmllbGRLZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZVByb3AgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBtYXRjaFRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlUHJvcCA9IHZhbHVlUHJvcC50cmltKCk7XG4gICAgICAgIG1hdGNoVGV4dCA9IG1hdGNoVGV4dC50cmltKCk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHsgdGV4dDogbWF0Y2hUZXh0LCB2YWx1ZTogdmFsdWVQcm9wIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShyZXNwb25zZSwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJlc3BvbnNlW0ZpZWxkS2V5XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpPy50cmltKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRVcmwoKTpzdHJpbmd7XG4gIGxldCBjdXJyZW50Um91dGU6IHN0cmluZyA9ICcnO1xuICBsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIGlmKHVybCl7XG4gICAgbGV0IGFyciA9IHVybC5zcGxpdCgnLycpO1xuICAgIGN1cnJlbnRSb3V0ZSA9IGFyclthcnIubGVuZ3RoLTFdXG4gIH0gICAgXG4gIHJldHVybiBjdXJyZW50Um91dGU7XG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0R3JpZEZpbHRlcnMoKXtcbiAgbGV0IGZpbHRlcnM6IGFueSA9IFtdO1xuICBsZXQgZ3JpZEZpbHRlcnMgPSBjdXJyZW50VXJsKCk7XG4gICAgaWYoZ3JpZEZpbHRlcnMgJiYgZ3JpZEZpbHRlcnMubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBsb2NhbEZpbHRlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJytncmlkRmlsdGVycykgYXMgYW55KTtcbiAgICAgIGZpbHRlcnMgPSBsb2NhbEZpbHRlcj8uZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG59XG5cbi8vdXBkYXRlIHRoZSBoaWRkZW4gb3IgZGlzYWJsZWQgYW5kIHZhbHVlIGJhc2VkIG9mZiBvdGhlciBnbG9iYWwgZmlsdGVycy5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHbG9iYWxGaWx0ZXJQcm9wVmFsdWVzKFxuICBnbG9iYWxGaWx0ZXI6IElHbG9iYWxGaWx0ZXJbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgcHJvcHM6IElGaWx0ZXJEaWN0aW9uYXJ5W10sXG4pIHtcbiAgcmV0dXJuIGdsb2JhbEZpbHRlci5tYXAoKGZpbHRlcjogYW55KSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGZpbHRlci5maWVsZCAmJiBmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAoZmlsdGVyLmRpc3BsYXlUZXh0ICYmXG4gICAgICAgIGZpbHRlci5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIHByb3BzPy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkocHJvcC5wcm9wTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gKGZpbHRlcltwcm9wLnByb3BOYW1lXSA9IHByb3AucHJvcFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BWYWx1ZSAmJiBwcm9wLnByb3BWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYXJkRmllbGRzRGF0YShmb3JtOiBhbnkpIHtcbiAgaWYgKGZvcm0gJiYgZm9ybS5keW5hbWljZm9ybSkge1xuICAgIGNvbnN0IHsgZHluYW1pY2Zvcm0sIC4uLm5ld0RhdGEgfSA9IGZvcm07XG4gICAgZHluYW1pY2Zvcm0/LmZvcm1TZWN0aW9ucz8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcz8uZm9yRWFjaCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV3RGF0YSkge1xuICAgICAgICAgIHNldEVkaXRGb3JtRmllbGRzKHsgcmVjb3JkczogW25ld0RhdGFdIH0sIGR5bmFtaWNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gZGlzYWJsZSBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGRpc2FibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IHRydWUgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBkaXNhYmxlT2JqO1xuICB9XG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG4vLyBlbmFibGVkIEdyaWQgRWRpdGFibGVSb3cgQ29sdW1uXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlZEVkaXRSb3dDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSwgZmllbGQ6IHN0cmluZyk6IElHcmlkQ29sdW1uW10ge1xuICBpZiAoZmllbGQgJiYgY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4KSA9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgbGV0IGVuYWJsZU9iaiA9IHsgLi4ub2JqLCBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KChpOiBhbnkpID0+IGkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSBjb2x1bW5zW2luZGV4XSA9IGVuYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuIC8vIGNoZWNrIHRoZSBNaW51dGVzIEludGVydmFsXG4gZXhwb3J0IGZ1bmN0aW9uIHNldE1pbnV0ZXNJbnRlcnZhbCh2YWx1ZTogYW55KXtcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbWluID0gdmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCk7XG4gICAgaWYgKG1pbikge1xuICAgICB2YWx1ZSA9IHZhbHVlLnNldE1pbnV0ZXMoMCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuIC8vIHVwZGF0ZSB0aGUgcmVzcG9uc2UgcmVjb3Jkc1xuIGV4cG9ydCBmdW5jdGlvbiBzZXRVcGRhdGVkUmVjb3JkKHJlY29yZHM6IGFueVtdLCByb3dEYXRhOiBhbnksIGRhdGFLZXk6IHN0cmluZyk6IGFueVtde1xuICBjb25zdCBpbmRleCA9IHJlY29yZHM/LmZpbmRJbmRleCgocmVjb3JkKT0+IHJlY29yZFtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSA9PSByb3dEYXRhW2RhdGFLZXk/LnRvTG93ZXJDYXNlKCldKTtcbiAgaWYoaW5kZXggPiAtMSl7XG4gICAgcmVjb3Jkc1tpbmRleF0gPSByb3dEYXRhO1xuICB9ZWxzZXtcbiAgICByZWNvcmRzLnB1c2gocm93RGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZHM7XG59XG5cbi8vY29udmVydCB0aGUgdGltZSBpbnRvIGRhdGVcbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lSW5EYXRlKHRpbWU6IGFueSkge1xuICBjb25zdCBjb252ZXJ0VGltZTEydG8yNCA9ICh0aW1lMTJoOiBhbnkpID0+IHtcbiAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaD8udG9TdHJpbmcoKT8uc3BsaXQoJyAnKTtcbiAgICBsZXQgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWU/LnNwbGl0KCc6Jyk7XG4gICAgaWYgKGhvdXJzID09PSAnMTInKSB7XG4gICAgICBob3VycyA9ICcwMCc7XG4gICAgfVxuICAgIGlmIChtb2RpZmllciA9PT0gJ1BNJykge1xuICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgfVxuICAgIHJldHVybiBgJHtob3Vyc306JHttaW51dGVzfWA7XG4gIH07XG4gIGNvbnN0IGRhdGUgPSBjb252ZXJ0VGltZTEydG8yNCh0aW1lKTtcbiAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgnSnVseSAxLCAxOTk5LCAnICsgZGF0ZSArICc6MDAnKTtcbiAgY29uc3QgZnV0dXJlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGZ1dHVyZURhdGUuc2V0VGltZSh0ZW1wRGF0ZS5nZXRUaW1lKCkpO1xuICByZXR1cm4gZnV0dXJlRGF0ZTtcbn1cblxuLy8gcmV0dXJuIHRoZSBkYXRhIG9mIHRoZSBmaWVsZCBcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERhdGEoeyBmb3JtU2VjdGlvbnMgfTogYW55LCBmaWVsZDogc3RyaW5nKXtcbiAgbGV0IGRhdGE6IGFueSA9IFtdXG4gIGlmKGZvcm1TZWN0aW9ucz8ubGVuZ3RoID4gMCAmJiBmaWVsZCl7XG4gICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKHNlY3Rpb246IGFueSk9PntcbiAgICAgIGlmKHNlY3Rpb24uZmllbGRzLnNvbWUoKGZvcm1GaWVsZDphbnkpPT4gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09IGZpZWxkLnRvTG93ZXJDYXNlKCkpKXtcbiAgICAgICAgZGF0YT1zZWN0aW9uLmZpZWxkcy5maW5kKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKT8uZGF0YVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbGxGb3JtRmllbGRzVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb246IElGb3JtU2VjdGlvbikgPT4ge1xuICAgIGlmIChzZWN0aW9uKSB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9wcy5tYXAoKHByb3A6IElGaWx0ZXJEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKGZvcm1GaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIChmb3JtRmllbGRbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIHJldHVybnMgdGhlIHJlc3BvbnNlIGhlYWRlciBmaWxlTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3BvbnNlSGVhZGVyRmlsZU5hbWUocmVzcG9uc2Upe1xuICBjb25zdCBoZWFkZXIgPSByZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJyk7XG4gIHJldHVybiBoZWFkZXI/LnNwbGl0KCdmaWxlbmFtZT0nKT8uWzFdPy5zcGxpdChcIjtcIilbMF0/LnJlcGxhY2VBbGwoL1xcXCIvZywgJycpO1xufVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZURpYWxvZyhpZDphbnkpe1xuICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJylcbiAgICBkaWFsb2dbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdicgKyBpZClcbiAgICBjb25zdCBkaWFsb2doZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZy1oZWFkZXInKVxuICAgIGRpYWxvZ2hlYWRlclswXT8uc2V0QXR0cmlidXRlKCdpZCcsJ215ZGl2aGVhZGVyJyArIGlkKVxuICAgIGNvbnN0IGVsbW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2JyArIGlkKTtcblxuICAgICAgbGV0IHBvczEgPSAwLFxuICAgICAgICBwb3MyID0gMCxcbiAgICAgICAgcG9zMyA9IDAsXG4gICAgICAgIHBvczQgPSAwO1xuICBcbiAgICAgIGNvbnN0IGRyYWdNb3VzZURvd24gPSAoZSkgPT4ge1xuICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGNsb3NlRHJhZ0VsZW1lbnQ7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGVsZW1lbnREcmFnID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MxID0gcG9zMyAtIGUuY2xpZW50WDtcbiAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7XG4gICAgICAgIHBvczMgPSBlLmNsaWVudFg7XG4gICAgICAgIHBvczQgPSBlLmNsaWVudFk7XG4gICAgICAgIGVsbW50LnN0eWxlLnRvcCA9IGVsbW50Py5vZmZzZXRUb3AgLSBwb3MyICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IGVsbW50Py5vZmZzZXRMZWZ0IC0gcG9zMSArICdweCc7XG4gICAgICB9O1xuICBcbiAgICAgIGNvbnN0IGNsb3NlRHJhZ0VsZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XG4gICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDtcbiAgICAgIH07XG4gIFxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkpIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215ZGl2aGVhZGVyJyArIGlkKS5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9IGVsc2UgaWYoZWxtbnQpIHtcbiAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfVxuICAgIH0gIFxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyTWluTWF4VmFsdWUoaXRlbTogYW55LHZhbHVlOiBhbnksIGluZGV4KXtcbiAgbGV0IHZhbGlkYXRpb246IHN0cmluZyA9ICdlcXVhbCc7XG4gIHZhciB2YWxpZERhdGUgPSBuZXcgRGF0ZShpdGVtLnZhbGlkYXRpb25zW2luZGV4XS5leHByZXNzaW9uKTtcbiAgdmFyIGN1cnJlbnREYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICBpZiAodmFsaWREYXRlLmdldFRpbWUoKSA8IGN1cnJlbnREYXRlLmdldFRpbWUoKSl7XG4gICAgdmFsaWRhdGlvbiA9ICdncmVhdGVyJztcbiAgfVxuICBlbHNlIGlmICh2YWxpZERhdGUuZ2V0VGltZSgpID4gY3VycmVudERhdGUuZ2V0VGltZSgpKXtcbiAgICB2YWxpZGF0aW9uID0gJ21pbmltdW0nO1xuICB9XG4gIHJldHVybiB2YWxpZGF0aW9uO1xufVxuLyogI2VuZHJlZ2lvbiAqL1xuIl19
|
|
1062
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzdDLE9BQU8sRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsU0FBUyxHQU1WLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQiw0QkFBNEI7QUFFNUI7Ozs7Ozs7R0FPRztBQUVGLElBQUksU0FBUyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFDbkMsSUFBSSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztBQUN0QyxJQUFJLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO0FBQ25DLElBQUksV0FBVyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7QUFFdEMsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEVBQU8sRUFBRSxJQUFTLEVBQUUsYUFBbUI7SUFDNUUsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFdBQWdCO0lBQ2pELFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsT0FBTyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0I7SUFDdEMsT0FBTyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0s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VyxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdELElBQUksV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBQztRQUM5QyxVQUFVLEdBQUcsU0FBUyxDQUFDO0tBQ3hCO1NBQ0ksSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFDO1FBQ25ELFVBQVUsR0FBRyxTQUFTLENBQUM7S0FDeEI7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBQ0QsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IElEaWN0aW9uYXJ5LCBJRmlsdGVyRGljdGlvbmFyeSB9IGZyb20gJy4uL21vZGVscy9jb21tb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRUZvcm1hdFR5cGUsXG4gIEVGb3JtQ29udHJvbCxcbiAgRUh5cGVybGluayxcbiAgRU1hdGNoTW9kZSxcbiAgRU9wZXJhdG9yLFxuICBJRHluYW1pY0NhcmQsXG4gIElEeW5hbWljRm9ybSxcbiAgSUZvcm1hdCxcbiAgSUZvcm1GaWVsZCxcbiAgSUZvcm1TZWN0aW9uLFxufSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBhZGRHbG9iYWxGaWx0ZXIsIEVHcmlkQ29sdW1uVHlwZSwgSUdsb2JhbEZpbHRlciwgSUdyaWRDb2x1bW4sIElHcmlkRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiAjcmVnaW9uIHB1YmxpYyBtZXRob2RzICovXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB2YWx1ZSA6IGFueVxuICogRnVuY3Rpb24gcmVjZWl2ZXMgdGhlIHZhbHVlIGFuZCBleHBlY3RzIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXRlZC5cbiAqIERvIG5vdCB1c2UgZmF0IGFycm93IGZ1bmN0aW9uIGFzIHRoZXkgZG8gbm90IHByZXNlcnZlIHRoZSBjb250ZXh0LlxuICogdGhpcy52YWx1ZSByZWZlcnMgdG8gdGhlIHZhbHVlIG9mIElGb3JtRmllbGQgT2JqZWN0XG4gKiBNb2RpZnkgdGhpcy52YWx1ZSBkaXJlY3RseSB0byByZWNlaXZlIGVmZmVjdFxuICovXG5cbiB2YXIgZm9ybXN0YXRlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuIHZhciBjb2x1bW5zU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gdmFyIGNhcmRTdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiB2YXIgcm91dGVDaGFuZ2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKGlkOiBhbnksIGRhdGE6IGFueSwgbG9hZENvbXBvbmVudD86IGFueSkge1xuICBmb3Jtc3RhdGUubmV4dCh7IGlkLCBkYXRhLCBsb2FkQ29tcG9uZW50IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlQ29sdW1uc1N0YXRlKHBhZ2VTZXR0aW5nOiBhbnkpIHtcbiAgY29sdW1uc1N0YXRlLm5leHQocGFnZVNldHRpbmcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Db2x1bW5zU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjb2x1bW5zU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNGb3JtU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBmb3Jtc3RhdGUuYXNPYnNlcnZhYmxlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJldHVybiByb3V0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdXRlQ2hhbmdlRXZlbnQoKSB7XG4gIHJvdXRlQ2hhbmdlLm5leHQoKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBvbkR5bmFtaWNDYXJkU3RhdGVDaGFuZ2UoKSB7XG4gIHJldHVybiBjYXJkU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gfVxuXG4gZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZUR5bmFtaWNDYXJkU3RhdGUoZGF0YTogYW55KSB7XG4gIGNhcmRTdGF0ZS5uZXh0KHsgZGF0YSB9KTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBjbG9zZUlGcmFtZSgpe1xuICBsZXQgY2xvc2UgPSB3aW5kb3cucGFyZW50LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRpYWxvZy1oZWFkZXItaWNvbicpYXMgSFRNTEVsZW1lbnRcbiAgaWYoY2xvc2UpIHtcbiAgICBjbG9zZS5jbGljaygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RlY2ltYWwodmFsdWU6IGFueSk6IGFueSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvU3RyaW5nKCkpLnRvRml4ZWQoMik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbGVhbih2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3knID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TaG9ydERhdGUodmFsdWU6IGFueSwgZm9ybWF0PzogSUZvcm1hdCkge1xuICBpZiAodmFsdWUgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgaWYgKFxuICAgICAgZm9ybWF0ICYmXG4gICAgICAoZm9ybWF0LnR5cGUgPT09IEVGb3JtYXRUeXBlLkxPTkdEQVRFIHx8XG4gICAgICAgIGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5NRURJVU1EQVRFKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0RGF0ZSh2YWx1ZSwgJ01NL2RkL3l5eXknLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU2hvcnREYXRlVGltZSh2YWx1ZTogYW55LCBmb3JtYXQ/OiBJRm9ybWF0KSB7XG4gIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWU/LnRvU3RyaW5nKCkgIT0gXCJJbnZhbGlkIERhdGVcIikge1xuICAgIGlmIChcbiAgICAgIGZvcm1hdCAmJlxuICAgICAgKGZvcm1hdC50eXBlID09PSBFRm9ybWF0VHlwZS5MT05HREFURSB8fFxuICAgICAgICBmb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuTUVESVVNREFURSlcbiAgICApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZvcm1hdERhdGUodmFsdWUsICdNTS9kZC95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERpYWxvZ0RhdGEoY29sdW1uczpJR3JpZENvbHVtbltdLCBmaWVsZE5hbWU6c3RyaW5nLCB2YWx1ZTphbnkpe1xuICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pPT57XG4gICAgICBpZihjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSAmJiBjb2x1bW4uY29tcG9uZW50KXtcbiAgICAgICAgbGV0IGtleXM9T2JqZWN0LmtleXModmFsdWUpO1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICBjb2x1bW4uZGF0YS5kYXRhPXsuLi5jb2x1bW4uZGF0YT8uZGF0YSwgW2tleV06dmFsdWVba2V5XX07XG4gICAgICAgIH0pXG4gICAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RyaW0odGV4dDogYW55KSB7XG4gIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoS2V5KG9iajogYW55LCBwcm9wTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFvYmogfHwgIXByb3BOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IG1hdGNoZWRLZXkgPSAnJztcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIG9iai5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IGtleXM6IGFueVtdID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGlmICghbWF0Y2hlZEtleSB8fCBtYXRjaGVkS2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBtYXRjaGVkS2V5ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHByb3BOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBrZXlzOiBhbnlbXSA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgbWF0Y2hlZEtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkS2V5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Rm9ybUZpZWxkVmFsdWUoZm9ybUZpZWxkOiBJRm9ybUZpZWxkLCB2YWx1ZTogYW55KTogYW55IHtcbiAgbGV0IGZvcm1hdHRlZFZhbHVlOiBhbnkgPSB2YWx1ZTtcbiAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICBzd2l0Y2ggKGZvcm1GaWVsZC5mb3JtYXQudHlwZSkge1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5ERUNJTUFMOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOOlxuICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybWF0VHlwZS5TSE9SVERBVEU6XG4gICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdG9TaG9ydERhdGUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1hdFR5cGUuQ1VTVE9NOlxuICAgICAgICBpZiAoZm9ybUZpZWxkLmZvcm1hdC5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1GaWVsZC5mb3JtYXQuZm9ybWF0dGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGb3JtRmllbGQgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZvcm1GaWVsZE9iajogSUZvcm1GaWVsZFxuKSB7XG4gIHJldHVybiBmb3JtU2VjdGlvbnM/Lm1hcCgoc2VjdGlvbikgPT4ge1xuICAgIHJldHVybiAoc2VjdGlvbi5maWVsZHMgPSBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogSUZvcm1GaWVsZCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZvcm1GaWVsZE9iai5maWVsZD8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbCA9PT0gZm9ybUZpZWxkT2JqLmxhYmVsKVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IGZvcm1GaWVsZE9iajtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGlua0NvbXBvbmVudERhdGEgKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKXtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgbGV0IGZpZWxkPXNlY3Rpb24uZmllbGRzLmZpbmQoKGZpZWxkKT0+IGZpZWxkLmxhYmVsICYmIGZpZWxkLmxhYmVsPT09bGFiZWwpXG4gICBpZihmaWVsZCAmJiBmaWVsZC5oeXBlcmxpbmspIGZpZWxkLmh5cGVybGluay5wYXJhbXMgPSBkYXRhO1xufSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdXRvQ29tcGxldGVEYXRhKFxuICB2YWx1ZXM6IGFueVtdLFxuICB1bmlxdWVJZDogYW55LFxuICBsYWJlbEtleTogc3RyaW5nLFxuICBWYWx1ZUtleTogc3RyaW5nLFxuKXtcbiAgaWYodmFsdWVzPy5sZW5ndGggPiAwKXtcbiAgICB2YWx1ZXMgPSB2YWx1ZXM/Lm1hcCgocm93VmFsdWUpID0+ICh7W2xhYmVsS2V5XTogcm93VmFsdWUsIFtWYWx1ZUtleV06IHVuaXF1ZUlkfSkpO1xuICB9XG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRMb29rdXBEYXRhKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGRhdGE6IGFueVxuKSB7XG4gIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uOiBJRm9ybVNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5tYXAoKGZvcm1GaWVsZDogYW55KSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbCAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhICYmXG4gICAgICAgICAgZGF0YVxuICAgICAgICApIHtcbiAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wgJiYgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNpZGViYXJMaW5rUGFyYW1WYWx1ZXMobGluazogc3RyaW5nLCBwYXJhbXM6IGFueVtdKTogc3RyaW5nIHtcbiAgbGV0IG5ld0xpbms6IHN0cmluZyA9IGxpbms7XG4gIGlmIChwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICBwYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gcGFyYW0ubmFtZSA/ICd7eycgKyBwYXJhbS5uYW1lICsgJ319JyA6ICcnO1xuICAgICAgaWYgKG5ld0xpbmsubG9jYWxlQ29tcGFyZSh1cmwpKSB7XG4gICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cCh1cmwsICdpZycpLCB0b1RyaW0ocGFyYW0udmFsdWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3TGluaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE5ld0ZpZWxkSW5Gb3JtKGR5bmFtaWNGb3JtOiBJRHluYW1pY0Zvcm0sIHNlY3Rpb25OYW1lOnN0cmluZywgZm9ybUZpZWxkOklGb3JtRmllbGQpe1xuICBjb25zdCBzZWN0aW9uID0gZHluYW1pY0Zvcm0/LmZvcm1TZWN0aW9ucz8uZmluZCgoc2VjdGlvbik9PiBzZWN0aW9uLm5hbWUgPT09IHNlY3Rpb25OYW1lKTtcbiAgaWYoc2VjdGlvbil7XG4gICAgc2VjdGlvbi5maWVsZHMucHVzaChmb3JtRmllbGQpO1xuICB9XG4gIHJldHVybiBkeW5hbWljRm9ybTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZvcm1GaWVsZHMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUZpZWxkczogSUZvcm1GaWVsZFtdXG4pIHtcbiAgcmV0dXJuIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChzZWN0aW9uLmZpZWxkcyA9IHNlY3Rpb24uZmllbGRzLm1hcCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBsZXQgbWF0Y2hlZEZpZWxkID0gZm9ybUZpZWxkcy5maW5kKFxuICAgICAgICAoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hlZEZpZWxkKSB7XG4gICAgICAgIGZvcm1GaWVsZCA9IG1hdGNoZWRGaWVsZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtRmllbGQ7XG4gICAgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbEZpbHRlcnMoXG4gIGdsb2JhbEZpbHRlcnM6IGFkZEdsb2JhbEZpbHRlcltdLFxuICBmaWVsZDogc3RyaW5nLFxuKSB7XG4gIGxldCBmb3JtRmllbGRPYmo6IGFueTtcbiAgZ2xvYmFsRmlsdGVycy5tYXAoKGZpbHRlcik9PntcbiAgICBpZiAoZmlsdGVyLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgZm9ybUZpZWxkT2JqID0gZmlsdGVyO1xuICAgICAgfVxuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZE9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZHMoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZm9ybUNvbnRyb2w6IEVGb3JtQ29udHJvbFxuKTogSUZvcm1GaWVsZFtdIHtcbiAgbGV0IGZvcm1GaWVsZHM6IElGb3JtRmllbGRbXSA9IFtdO1xuICBmb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb24pID0+IHtcbiAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaWYgKHR5cGVvZihmb3JtRmllbGQudmFsdWUpID09PSAnb2JqZWN0JyAmJiBmb3JtRmllbGQudmFsdWU/LnRleHQgJiYgdHlwZW9mKGZvcm1GaWVsZC52YWx1ZS50ZXh0KSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHtcbiAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZm9ybUZpZWxkLnZhbHVlLnRleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZvcm1GaWVsZC52YWx1ZSAmJiB0eXBlb2YoZm9ybUZpZWxkLnZhbHVlKSA9PT0gJ3N0cmluZycpXG4gICAgICAgIHtcbiAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSBmb3JtRmllbGQudmFsdWUudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1GaWVsZHMucHVzaChmb3JtRmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1GaWVsZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGQoXG4gIHsgZm9ybVNlY3Rpb25zIH06IElEeW5hbWljRm9ybSxcbiAgZmllbGQ6IHN0cmluZ1xuKTogSUZvcm1GaWVsZCB7XG4gIGxldCBmb3JtRmllbGRPYmo6IGFueTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XG4gICAgICBpZiAoZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBmb3JtRmllbGRPYmogPSBmb3JtRmllbGQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gZm9ybUZpZWxkT2JqO1xufVxuXG4vLyB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgZmllbGQuIElmIHJldHVybkRpc3BsYXlGaWVsZFZhbHVlIGlzIHRydWUgYW5kIGRpc3BsYXlGaWVsZFxuLy8gZXhpc3QgaW4gdGhlIGZpZWxkIHRoZW4gYWx3YXlzIHJldHVybiBhIGRpc3BsYXlGaWVsZCB2YWx1ZS5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRmllbGRWYWx1ZShcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBmaWVsZDogc3RyaW5nLFxuICByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTpib29sZWFuID0gZmFsc2Vcbikge1xuICBsZXQgdmFsdWU7XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmb3JtU2VjdGlvbnMgYXMgYW55KSB7XG4gICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHlwZW9mIGZvcm1GaWVsZC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5DQUxFTkRBUiAmJiByZXR1cm5EaXNwbGF5RmllbGRWYWx1ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSAmJlxuICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBpc1ZhbGlkID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0IDogZm9ybUZpZWxkLnZhbHVlPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGlzVmFsaWRcbiAgICAgICAgICAgID8gZm9ybUZpZWxkLnZhbHVlPy50ZXh0XG4gICAgICAgICAgICA6IHR5cGVvZiBmb3JtRmllbGQudmFsdWUgPT09ICdvYmplY3QnICYmIGZvcm1GaWVsZC5jb250cm9sICE9PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgZm9ybUZpZWxkLmNvbnRyb2wgIT09IEVGb3JtQ29udHJvbC5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgPyBmb3JtRmllbGQudmFsdWU/LnZhbHVlXG4gICAgICAgICAgICA6IGZvcm1GaWVsZC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1GaWVsZFZhbHVlQXNTdHJpbmcoZHluYW1pY0Zvcm06SUR5bmFtaWNGb3JtLGZpZWxkOnN0cmluZyk6c3RyaW5ne1xuICBsZXQgdmFsdWU6YW55ID0gZ2V0Rm9ybUZpZWxkVmFsdWUoZHluYW1pY0Zvcm0sZmllbGQsIHRydWUpO1xuICBpZiAodmFsdWUpe1xuICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgIH1cbiAgIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3Rpb25GaWVsZFZhbHVlKFxuICBmb3JtU2VjdGlvbnM6IElGb3JtU2VjdGlvbltdLFxuICBmaWVsZDogc3RyaW5nXG4pIHtcbiAgbGV0IGZvcm06IElEeW5hbWljRm9ybSA9IHsgZm9ybVNlY3Rpb25zIH07XG4gIHJldHVybiBnZXRGb3JtRmllbGRWYWx1ZShmb3JtLCBmaWVsZCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlRm9ybVZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuICBpZiAodGFibGVzICYmIHRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgdGFibGVzLmZvckVhY2goKHRhYmxlTmFtZSkgPT4ge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuXG4gICAgICAgIHNlY3Rpb25GaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSBmaWVsZC50YWJsZXM/Lm1hcCgodGFibGUpID0+IHRhYmxlLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgaWYgKHRhYmxlICYmIHRhYmxlLmluY2x1ZGVzKHRhYmxlTmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgaWYgKCFyZXNwb25zZVt0YWJsZU5hbWVdKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlW3RhYmxlTmFtZV0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkICYmIGZpZWxkLmZpZWxkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VbdGFibGVOYW1lXVtmaWVsZC5maWVsZF0gPSBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaCgoZm9ybVNlY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb25GaWVsZHMgPSBmb3JtU2VjdGlvbi5maWVsZHM/LmZpbHRlcih4ID0+IHguY29udHJvbCAhPT0gRUZvcm1Db250cm9sLkNBUkQpO1xuICAgICAgICBzZWN0aW9uRmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC5maWVsZCAmJiBmaWVsZC5maWVsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXNwb25zZVtmaWVsZC5maWVsZF0gPSBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRTYXZlQ2FyZFZhbHVlcyhcbiAgZm9ybVNlY3Rpb25zOiBJRm9ybVNlY3Rpb25bXSxcbiAgdGFibGVzPzogc3RyaW5nW11cbikge1xuICBsZXQgdmFsdWVzOiBJRm9ybUZpZWxkW10gPSBbXTtcbiAgZm9ybVNlY3Rpb25zPy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgIGlmIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCAmJiBmaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgZmllbGQuY2FyZC5kYXRhLmZvckVhY2goKGNhcmREYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgc2V0U2F2ZUZvcm1WYWx1ZXMoY2FyZERhdGEuZHluYW1pY0Zvcm0uZm9ybVNlY3Rpb25zLCB0YWJsZXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gdmFsdWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHMoZGF0YTogYW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgZGF0YS5mb3JFYWNoKChkYXRhUm93KSA9PiB7XG4gICAgICBzZXRFZGl0Rm9ybUZpZWxkc0luZm8oZGF0YVJvdywgZHluYW1pY0Zvcm0sIGRhdGEpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNldEVkaXRGb3JtRmllbGRzSW5mbyhkYXRhLCBkeW5hbWljRm9ybSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcihcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IGFueSxcbiAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlID0gRU1hdGNoTW9kZS5FUVVBTFMsXG4gIG9wZXJhdG9yOiBFT3BlcmF0b3IgPSBFT3BlcmF0b3IuQU5ELFxuKSB7XG4gIGNvbnN0IGZpbHRlcjogYW55ID0ge1xuICAgIGZpZWxkOiBmaWVsZCxcbiAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgdmFsdWU6IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgKHZhbHVlPy52YWx1ZSB8fCB2YWx1ZT8udGV4dCkgPyB2YWx1ZT8udmFsdWUgOiB2YWx1ZSxcbiAgfTtcbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuZEZpbHRlcihmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gIHJldHVybiBzZXRGaWx0ZXIoZmllbGQsIHZhbHVlLCBFTWF0Y2hNb2RlLkVRVUFMUywgRU9wZXJhdG9yLkFORClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yaWdEYXRhRmllbGRWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpOiBhbnkge1xuICBsZXQgdmFsdWU6IGFueTtcbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0UHJvcGVydHlWYWx1ZShkYXRhW2ldLCBwcm9wTmFtZSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGdldFByb3BlcnR5VmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPcmlnRGF0YUZpZWxkVmFsdWVBc1N0cmluZyhcbiAgZGF0YTogYW55LFxuICBwcm9wTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBsZXQgdmFsdWUgPSBnZXRPcmlnRGF0YUZpZWxkVmFsdWUoZGF0YSwgcHJvcE5hbWUpO1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNlY3Rpb25Qcm9wVmFsdWVzKFxuICB7IGZvcm1TZWN0aW9ucyB9OiBJRHluYW1pY0Zvcm0sXG4gIHNlY3Rpb25OYW1lOiBzdHJpbmcsXG4gIHByb3BzOiBJRGljdGlvbmFyeVtdXG4pIHtcbiAgZm9ybVNlY3Rpb25zPy5tYXAoKHNlY3Rpb24pID0+IHtcbiAgICBpZiAoc2VjdGlvbi5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBzZWN0aW9uTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBwcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgcmV0dXJuIHNldFByb3BWYWx1ZShzZWN0aW9uLCBwcm9wKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qICNlbmRyZWdpb24gKi9cblxuLyogI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHMgKi9cblxuZnVuY3Rpb24gc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGE6IGFueSwgZHluYW1pY0Zvcm06IElEeW5hbWljRm9ybSB8IElEeW5hbWljQ2FyZCwgYWxsRGF0YTogYW55W10gPSBbXSkge1xuICBpZiAoZGF0YS5yZWNvcmRzICYmIGRhdGEucmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgZGF0YS5yZWNvcmRzLmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICBkeW5hbWljRm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKGZvcm1TZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChmb3JtU2VjdGlvbi5maWVsZHMpIHtcbiAgICAgICAgICBmb3JtU2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRLZXk6IGFueSA9IGtleXMuZmluZChcbiAgICAgICAgICAgICAgKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gZm9ybUZpZWxkLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgICAgICAvLyBzZXQgbGFiZWwgaHlwZXJsaW5rXG4gICAgICAgICAgICAgIHNldExhYmVsSHlwZXJsaW5rKGZvcm1GaWVsZCwgcmVjb3JkLCBrZXlzLCBhbGxEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkhZUEVSTElOSyAmJlxuICAgICAgICAgICAgICBmb3JtRmllbGQuaHlwZXJsaW5rICYmXG4gICAgICAgICAgICAgICgoZm9ybUZpZWxkLmh5cGVybGluay5saW5rSWQgJiYgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMpIHx8XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcztcbiAgICAgICAgICAgICAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXBhcmFtcyAmJlxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayAmJlxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluay5pbmNsdWRlcygnfX0nKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwYXJhbUtleXMgPSBmb3JtRmllbGQuaHlwZXJsaW5rLmxpbmsuc3BsaXQoJ319Jyk7XG4gICAgICAgICAgICAgICAgcGFyYW1LZXlzID0gcGFyYW1LZXlzLm1hcCgocGFyYW1LZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHBhcmFtS2V5ID0gcGFyYW1LZXkucmVwbGFjZSgne3snLCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtS2V5O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBhcmFtS2V5cyA9IHBhcmFtS2V5cy5maWx0ZXIoKHgpID0+IHgubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYocGFyYW1zKXtcbiAgICAgICAgICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsubGluayxcbiAgICAgICAgICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmh5cGVybGluay5wYXJhbXMsXG4gICAgICAgICAgICAgICAgYWxsRGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiYgbWF0Y2hlZEtleSkge1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1GaWVsZC50aW1lT25seSA/IHJlY29yZFttYXRjaGVkS2V5XSA6IHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShyZWNvcmRbbWF0Y2hlZEtleV0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FSRCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5jYXJkICYmIGZvcm1GaWVsZC5jYXJkLmZvcm1TZWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1GaWVsZC5jYXJkLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuY2FyZC5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICBcbiAgICAgICAgICAgICAgICAgICAgc2V0RWRpdEZvcm1GaWVsZHNJbmZvKGRhdGEsIGZvcm1GaWVsZC5jYXJkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgICAgICAgICAgbWF0Y2hlZEtleVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXlWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChyZWNvcmRbbWF0Y2hlZEtleV0gJiYgZm9ybUZpZWxkLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZS5wdXNoKHtbZm9ybUZpZWxkLmRpc3BsYXlGaWVsZF0gOiByZWNvcmRbbWF0Y2hlZEtleV19KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gYXJyYXlWYWx1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLkxPT0tVUF9JTlBVVCB8fCBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLklOUFVUKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5sb29rdXBDb250cm9sLmRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5sb29rdXBDb250cm9sICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IGF1dG9TZXRMb29rdXBEYXRhKFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubG9va3VwQ29udHJvbC5kYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmxvb2t1cENvbnRyb2wuZGF0YS5kYXRhID0gb2JqO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihyZWNvcmRbbWF0Y2hlZEtleV0pe1xuICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gdG9UcmltKHJlY29yZFttYXRjaGVkS2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5kaXNwbGF5RmllbGQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hEaXNwbGF5RmllbGQgPSBnZXRNYXRjaEtleShcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkLFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuZGlzcGxheUZpZWxkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoRGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0b1RyaW0ocmVjb3JkW21hdGNoRGlzcGxheUZpZWxkXSksXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZvcm1GaWVsZC52YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWVGaWVsZCA9IGdldE1hdGNoS2V5KHJlY29yZCwgZm9ybUZpZWxkLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZvcm1GaWVsZC52YWx1ZT8udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdG9UcmltKHJlY29yZFttYXRjaFZhbHVlRmllbGRdKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5DT01QT05FTlQgJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbD8uZGF0YVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXREYXRhRnJvbVJlY29yZCA9IGZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhLFxuICAgICAgICAgICAgICAgICAgcmVjb3JkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5kYXRhID0gc2V0RGF0YUZyb21SZWNvcmQ/LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYoc2V0RGF0YUZyb21SZWNvcmQ/Lm1hdGNoRGF0YSl7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2VEeW5hbWljRm9ybVN0YXRlKFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Q29udHJvbC5pZCxcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLmNvbXBvbmVudENvbnRyb2w/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY29udHJvbCA9PT0gRUZvcm1Db250cm9sLk5VTUVSSUMgJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQubGFiZWw/LmxhYmVsQ29udHJvbD8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgc2V0RGF0YSA9IGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wubG9va3VwQ29udHJvbDtcbiAgICAgICAgICAgICAgICBzZXREYXRhLmRhdGEuZGF0YSA9IGZpbmRLZXlzQW5kVmFsdWUoc2V0RGF0YS5kYXRhLmRhdGEsIHJlY29yZCk/LmRhdGE7XG4gICAgICAgICAgICAgICAgY2hhbmdlRHluYW1pY0Zvcm1TdGF0ZShzZXREYXRhLmlkLCBzZXREYXRhLmRhdGEuZGF0YSwgZmFsc2UpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuSFlQRVJMSU5LIFxuICAgICAgICAgICAgICAgICYmICBmb3JtRmllbGQuaHlwZXJsaW5rPy50YXJnZXQgPT09IEVIeXBlcmxpbmsuRElBTE9HIFxuICAgICAgICAgICAgICAgICYmIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5oeXBlcmxpbmsucGFyYW1zID0gZmluZEtleXNBbmRWYWx1ZShmb3JtRmllbGQuaHlwZXJsaW5rLnBhcmFtcywgcmVjb3JkKT8uZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9IGZvcm1hdEZvcm1GaWVsZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0hFQ0tCT1gpIHtcbiAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XSAmJlxuICAgICAgICAgICAgICAgICAgICAocmVjb3JkW21hdGNoZWRLZXldLnRvU3RyaW5nKCkgPT09ICcxJyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFttYXRjaGVkS2V5XS50b1N0cmluZygpID09PSAndHJ1ZScpXG4gICAgICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoZm9ybUZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5EUk9QRE9XTikge1xuICAgICAgICAgICAgICAgICAgbGV0IGRyb3BWYWx1ZSA9IHJlY29yZFttYXRjaGVkS2V5XTtcbiAgICAgICAgICAgICAgICAgIGlmIChkcm9wVmFsdWUgJiYgZHJvcFZhbHVlPy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlID0gZHJvcFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKGZvcm1GaWVsZC5jb250cm9sPT09RUZvcm1Db250cm9sLlNFTEVDVEJVVFRPTil7XG4gICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLnZhbHVlPXRvVHJpbShyZWNvcmRbbWF0Y2hlZEtleV0pIHx8IGZvcm1GaWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBmb3JtRmllbGQudmFsdWUgPSB0b1RyaW0ocmVjb3JkW21hdGNoZWRLZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy9zZXQgaHlwZXJsaW5rIHBhcmFtIHZhbHVlIGFzIGZpZWxkIHZhbHVlXG5leHBvcnQgZnVuY3Rpb24gc2V0SHlwZXJsaW5rUGFyYW1WYWx1ZShyZWNvcmQ6YW55LCBkeW5hbWljRm9ybTogSUR5bmFtaWNGb3JtKSB7XG4gIGxldCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbGluazogc3RyaW5nID0nJztcbiAgbGV0IHBhcmFtS2V5czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IHBhcmFtOiBhbnk7XG4gIGxldCBmaWVsZEluZm86IGFueTtcbiAgICBkeW5hbWljRm9ybS5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaCgoZm9ybUZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYoZm9ybUZpZWxkLmxhYmVsICYmIGZvcm1GaWVsZC5sYWJlbC5sYWJlbENvbnRyb2wgJiYgZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbms/Lmxpbmspe1xuICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgICAgIGlmKGZvcm1GaWVsZD8ubGFiZWw/LmxhYmVsQ29udHJvbD8ub3JpZ25hbExpbmspe1xuICAgICAgICAgICBsaW5rID0gZm9ybUZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5vcmlnbmFsTGluaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihmb3JtRmllbGQ/LmxhYmVsPy5sYWJlbENvbnRyb2w/Lmh5cGVybGluaz8ucGFyYW1zKXtcbiAgICAgICAgICAgcGFyYW0gPSBmb3JtRmllbGQubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXM7XG4gICAgICAgICAgIHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRJbmZvID0gZm9ybUZpZWxkO1xuICAgICAgICAgIGlmKHJlY29yZCAmJiBrZXlzICYmIGxpbmsgJiYgcGFyYW1LZXlzICYmIHBhcmFtICYmIGZpZWxkSW5mbyl7XG4gICAgICAgICAgICBmaWVsZEluZm8ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKGtleXMsIHJlY29yZCwgbGluaywgcGFyYW1LZXlzLCBwYXJhbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iakNvbnZlcnRUb0xvd2VyKG9iajogYW55KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwga2V5KSA9PiB7XG4gICAgYWNjdW11bGF0b3Jba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqW2tleV07XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGlja1NlY3Rpb25IaWdobGlnaHQodmFsdWU6IGFueSkge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudSAucC1wYW5lbG1lbnUtcGFuZWwnKTtcbiAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0aXRsZSA9IFwiJysgdmFsdWU/Lm5hbWUgKydcIl0nKTtcbiAgICAgICBjb25zdCBhbGxNZW51SXRlbXMgPSBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yQWxsKCcubGVmdC1zaWRlQmFyIC5wLXBhbmVsbWVudS1wYW5lbCcpO1xuICAgICAgIGFsbE1lbnVJdGVtcz8uZm9yRWFjaCgobWVuYXVJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbWVuYXVJdGVtPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsJyk7XG4gICAgICAgfSlcbiAgICAgICAgdGl0bGU/LnBhcmVudEVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncC1wYW5lbG1lbnUtcGFuZWwgYWN0aXZlJyk7XG4gICAgICAgIHRpdGxlPy5wYXJlbnRFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcblxuICAgICAgICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLWVsZW1lbnQgcC1jb21wb25lbnQgcC1wYW5lbG1lbnUtaGVhZGVyIHAtaGlnaGxpZ2h0Jyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQWN0aXZlSWNvbkNsYXNzKCkge1xuICBjb25zdCBhY3RpdmVJY29uID0gZG9jdW1lbnQuYm9keT8ucXVlcnlTZWxlY3RvckFsbCgnLmFjdGl2ZS1pY29uJyk7XG4gIGlmIChhY3RpdmVJY29uICYmIGFjdGl2ZUljb24ubGVuZ3RoID4gMCkge1xuICAgIGFjdGl2ZUljb24/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgaWNvbj8uc2V0QXR0cmlidXRlKCdjbGFzcycsJ3AtZWxlbWVudCBwLWNvbXBvbmVudCBwLXBhbmVsbWVudS1oZWFkZXIgcC1oaWdobGlnaHQnKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlnaGxpZ2h0TGVmdFNpZGViYXIoKXtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsICgpID0+e1xuICBjb25zdCBzY3JvbGxUb3BQb3NpdGlvbjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb3JtLWNvbnRhaW5lclwiKT8uc2Nyb2xsVG9wO1xuICBjb25zdCBhbGxJY29uRWxlbWVudHM6IGFueSA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcIi5sZWZ0LXNpZGVCYXIgLnAtcGFuZWxtZW51IC5wLXBhbmVsbWVudS1wYW5lbFwiKTtcblxuICBhbGxJY29uRWxlbWVudHM/LmZvckVhY2goKGljb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgIGljb24/LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnc2VjdGlvbicgKyBpbmRleCk7XG4gIH0pO1xuICAgICByZW1vdmVBY3RpdmVJY29uQ2xhc3MoKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9ybS1jb250YWluZXIgLmNhcmQnKT8uZm9yRWFjaCgoY2FyZDogYW55LCBpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IFwic2VjdGlvblwiICsgaW5kZXg7XG4gICAgICAgIGlmIChzY3JvbGxUb3BQb3NpdGlvbiA+PSBjYXJkLm9mZnNldFRvcCAmJiBzY3JvbGxUb3BQb3NpdGlvbiA8PSBjYXJkLm9mZnNldFRvcCArIGNhcmQub2Zmc2V0SGVpZ2h0KXtcbiAgICAgICAgICByZXR1cm4gIGRvY3VtZW50LmJvZHk/LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJJbmRleD0nKyBjdXJyZW50SWQgKyAnXScpPy5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3AtcGFuZWxtZW51LXBhbmVsIGFjdGl2ZScpO1xuICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgcmV0dXJuICBkb2N1bWVudC5ib2R5Py5xdWVyeVNlbGVjdG9yKCdbdGFiSW5kZXg9JysgY3VycmVudElkICsgJ10nKT8uc2V0QXR0cmlidXRlKCdjbGFzcycsICdwLXBhbmVsbWVudS1wYW5lbCcpOyAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xuICAgIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRLZXlzQW5kVmFsdWUoZGF0YTogYW55LCByZWNvcmQ6IGFueSkge1xuICBsZXQgdmFsdWVLZXk6IHN0cmluZyA9ICcnO1xuICBsZXQgc2V0RGF0YUZyb21SZWNvcmQgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoZGF0YUtleSkgPT4ge1xuICAgIGxldCB2YWx1ZUNvbnRhaW5zS2V5OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYoZGF0YVtkYXRhS2V5XSAmJiBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5pbmNsdWRlcygneycpKXtcbiAgICAgIHZhbHVlQ29udGFpbnNLZXkgPSB0cnVlO1xuICAgICAgdmFsdWVLZXkgPSBkYXRhW2RhdGFLZXldPy50b1N0cmluZygpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICB9XG4gICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHJlY29yZCkuZmluZCgoa2V5KSA9PiB2YWx1ZUNvbnRhaW5zS2V5ID8gKHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSA6IChkYXRhS2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgaWYgKChrZXkgJiYga2V5Lmxlbmd0aCA+IDAgJiYgcmVjb3JkW2tleV0pfHwgcmVjb3JkW2tleV0gPT09IGZhbHNlKSB7XG4gICAgICBzZXREYXRhRnJvbVJlY29yZCA9IHRydWVcbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIFtkYXRhS2V5XTogcmVjb3JkW2tleV0gfTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge21hdGNoRGF0YTogc2V0RGF0YUZyb21SZWNvcmQsIGRhdGE6IGRhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcFZhbHVlKG9iajogYW55LCBwcm9wOiBJRGljdGlvbmFyeSkge1xuICBjb25zdCBtYXRjaGVkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShvYmosIHByb3AubmFtZSk7XG4gIGlmIChtYXRjaGVkS2V5KSB7XG4gICAgcmV0dXJuIChvYmpbbWF0Y2hlZEtleV0gPSBwcm9wLnZhbHVlKTtcbiAgfVxuICBlbHNle1xuICAgcmV0dXJuKCBvYmpbcHJvcC5uYW1lXT1wcm9wLnZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgc3RvcmFnZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdDdXJyZW50VXNlckluZm8nKTtcbiAgaWYgKHN0b3JhZ2UpIHtcbiAgICBsZXQgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKHN0b3JhZ2UpO1xuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5yb2xlcyAmJiBjdXJyZW50VXNlci5yb2xlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudFVzZXIucm9sZXMuc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmNvZGUudG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpID09PSByb2xlPy50cmltKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldExhYmVsSHlwZXJsaW5rKGl0ZW06IGFueSwgcmVjb3JkOiBhbnksIGtleXM6IHN0cmluZ1tdLCBhbGxEYXRhOiBhbnlbXSA9IFtdKSB7XG4gIGlmIChcbiAgICBpdGVtLmxhYmVsICYmXG4gICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsgJiZcbiAgICBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsucGFyYW1zXG4gICkge1xuICAgIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5wYXJhbXMpO1xuICAgIGNvbnN0IGxpbmsgPSBpdGVtLmxhYmVsLmxhYmVsQ29udHJvbC5oeXBlcmxpbmsubGluaztcbiAgICBpZiAoaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLmxpbmspIHtcbiAgICAgIGl0ZW0ubGFiZWwubGFiZWxDb250cm9sLmh5cGVybGluay5saW5rID0gc2V0SHlwZXJsaW5rKFxuICAgICAgICBrZXlzLFxuICAgICAgICByZWNvcmQsXG4gICAgICAgIGxpbmssXG4gICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgaXRlbS5sYWJlbC5sYWJlbENvbnRyb2wuaHlwZXJsaW5rLnBhcmFtcyxcbiAgICAgICAgYWxsRGF0YVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEh5cGVybGluayhcbiAga2V5czogc3RyaW5nW10sXG4gIHJlY29yZDogYW55LFxuICBsaW5rOiBzdHJpbmcsXG4gIHBhcmFtS2V5czogc3RyaW5nW10sXG4gIHBhcmFtczogYW55LFxuICBhbGxEYXRhOiBhbnlbXSA9IFtdXG4pOiBzdHJpbmcge1xuICBsZXQgbmV3TGluazogc3RyaW5nID0gbGluaztcbiAgcmVjb3JkID0gb2JqQ29udmVydFRvTG93ZXIocmVjb3JkKTtcbiAgcGFyYW1LZXlzLmZvckVhY2goKHBhcmFta2V5KSA9PiB7XG4gICAgY29uc3QgcGFyYW06IHN0cmluZyA9ICd7eycgKyBwYXJhbWtleS50b0xvd2VyQ2FzZSgpICsgJ319JztcbiAgICBjb25zdCBpc1BhcmFtTWF0Y2hlZCA9IG5ld0xpbmsubG9jYWxlQ29tcGFyZShwYXJhbSk7XG4gICAgY29uc3QgcGFyYW1JblJlY29yZCA9IHNldFBhcmFtS2V5VmFsdWUocmVjb3JkLCBhbGxEYXRhLCBwYXJhbWtleSk7XG5cbiAgICBpZiAoaXNQYXJhbU1hdGNoZWQpIHtcbiAgICAgIGxldCBwYXJhbVZhbHVlID0gcGFyYW1zID8gcGFyYW1zW3BhcmFta2V5XSA6IG51bGw7XG4gICAgICBpZihwYXJhbVZhbHVlID09PSAnJyAmJiBwYXJhbUluUmVjb3JkKXtcbiAgICAgICAgcGFyYW1WYWx1ZSA9ICd7JytwYXJhbWtleSsnfSc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHBhcmFtVmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJyk7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSByZWNvcmRbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIFxuICAgICAgICAvLyBpbiBjYXNlIG9mIHByb3Agbm90IGZvdW5kIGluIHJlY29yZCB0aGVuIHRyeSB0byBmaW5kIHByb3AgaW4gYWxsIGRhdGEgYXJyYXksIHRvIGdldCBpdHMgdmFsdWUgXG4gICAgICAgIGlmICghcHJvcFZhbHVlICYmIGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgYWxsRGF0YS5mb3JFYWNoKChkYXRhKT0+e1xuICAgICAgICAgICAgLy9jb25zdCB2YWx1ZSA9IGRhdGEucmVjb3Jkcy5maW5kKCh4KT0+IHhbcHJvcE5hbWVdKTtcbiAgICAgICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSk9PntcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpO1xuICAgICAgICAgICAgICBsZXQgbWF0Y2hLZXkgPSBrZXlzLmZpbmQoKHgpPT4geC50b0xvd2VyQ2FzZSgpID09PSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoS2V5KXtcbiAgICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gYWxsUmVjb3JkW21hdGNoS2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TGluayA9IG5ld0xpbmsucmVwbGFjZShuZXcgUmVnRXhwKHBhcmFtLCAnaWcnKSwgdG9UcmltKHBhcmFtVmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpID8gcHJvcFZhbHVlIDogcGFyYW1WYWx1ZSkpO1xuICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnZXQgcGFyYW0gdmFsdWUgZnJvbSBhcGkgcmVzcG9uc2UsIGlmIHBhcmFtIGtleSBleGlzdHMgaW4gaXRcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleTogYW55ID0ga2V5cy5maW5kKFxuICAgICAgICAgICh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IHBhcmFta2V5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobWF0Y2hlZEtleSkge1xuICAgICAgICAgIHBhcmFtVmFsdWUgPSByZWNvcmRbbWF0Y2hlZEtleV07XG4gICAgICAgICAgaWYgKHBhcmFtVmFsdWUpIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UoXG4gICAgICAgICAgICAgIG5ldyBSZWdFeHAocGFyYW0sICdpZycpLFxuICAgICAgICAgICAgICB0b1RyaW0ocGFyYW1WYWx1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xpbmsgPSBuZXdMaW5rLnJlcGxhY2UobmV3IFJlZ0V4cChwYXJhbSwgJ2lnJyksIHRvVHJpbSgnJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJlcGxhY2UgdGhlIHt7cGFyYW19fSB3aXRoIGVtcHR5XG4gIGlmKG5ld0xpbmsgJiYgbmV3TGluay5pbmNsdWRlcyhcInt7XCIpICYmIG5ld0xpbmsuaW5jbHVkZXMoXCJ9fVwiKSl7XG4gICAgbmV3TGluayA9IG5ld0xpbms/LnJlcGxhY2UoL3srLio/fSsvZywgXCJcIik7XG4gIH1cbiAgcmV0dXJuIG5ld0xpbms7XG59XG5cbi8vIGl0cyBjaGVja2luZyBpZiB0aGVyZSBpcyBubyB2YWx1ZSBpbiBoeXBlcmxpbmsgcGFyYW0gdGhlbiBpdCBzZXQga2V5IGFzIGEgcGFyYW1WYWx1ZVxuZnVuY3Rpb24gc2V0UGFyYW1LZXlWYWx1ZShyZWNvcmQ6IGFueSwgYWxsRGF0YTogYW55W10gPSBbXSwgcGFyYW1rZXk6IGFueSl7XG4gIGxldCBwYXJhbVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIGlmKGFsbERhdGEgJiYgYWxsRGF0YS5sZW5ndGggPiAwKXtcbiAgICBhbGxEYXRhLmZvckVhY2goKGRhdGE6IGFueSk9PntcbiAgICAgIGlmKGRhdGEucmVjb3JkcyAmJiBkYXRhLnJlY29yZHMubGVuZ3RoID4gMCl7XG4gICAgICAgIGRhdGEucmVjb3Jkcy5mb3JFYWNoKChhbGxSZWNvcmQ6IGFueSkgPT57XG4gICAgICAgICAgIGlmKHBhcmFtVmFsdWUgPT09IGZhbHNlKXtcbiAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBPYmplY3Qua2V5cyhhbGxSZWNvcmQpLnNvbWUoKHJlY29yZCk9PiByZWNvcmQudG9Mb3dlckNhc2UoKSA9PT0gcGFyYW1rZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfWVsc2V7XG4gICAgICAgcGFyYW1WYWx1ZSA9IE9iamVjdC5rZXlzKHJlY29yZCkuc29tZSgoeCk9PiB4ID09PSBwYXJhbWtleS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICByZXR1cm4gcGFyYW1WYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlWYWx1ZShkYXRhOiBhbnksIHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgbGV0IHByb3BWYWx1ZTogYW55O1xuICBkYXRhLnJlY29yZHM/LmZvckVhY2goKHJlY29yZDogYW55KSA9PiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVjb3JkKSkge1xuICAgICAgaWYgKGtleSAmJiBwcm9wTmFtZSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBwcm9wVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcHJvcFZhbHVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGb3JtRmllbGRDVmFsdWUoZmllbGQ6IGFueSkge1xuICBpZiAoXG4gICAgZmllbGQuZm9ybWF0Py50eXBlID09PSBFRm9ybWF0VHlwZS5CT09MRUFOX1lOIHx8XG4gICAgZmllbGQuZm9ybWF0Py5mb3JtYXR0ZXI/Lm5hbWUgPT09ICd0b0Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiAoZmllbGQudmFsdWUgPT09IDEgfHwgZmllbGQudmFsdWU/LnRvU3RyaW5nKCkgPT09ICd0cnVlJyB8fCBmaWVsZC52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knKSA/ICdZJyA6ICdOJztcbiAgfSBlbHNlIGlmIChcbiAgICBmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuQ0FMRU5EQVIgJiZcbiAgICAoZmllbGQudmFsdWUgfHwgZmllbGQudmFsdWUgPT09ICcnKVxuICApIHtcbiAgICBpZihmaWVsZC50aW1lT25seSl7XG4gICAgICBjb25zdCBkYXRlVGltZVJlZ2V4ID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSAoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KSQvOyAvLyBSZWdleCBmb3IgZGF0ZXRpbWUgZm9ybWF0XG4gICAgICBjb25zdCBtYXRjaCA9IGZpZWxkLnZhbHVlLm1hdGNoKGRhdGVUaW1lUmVnZXgpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIC8vIEV4dHJhY3QgdGltZSBvbmx5IGZyb20gdGhlIG1hdGNoZWQgZGF0ZXRpbWUgc3RyaW5nXG4gICAgICAgIGNvbnN0IHRpbWVPbmx5ID0gYCR7bWF0Y2hbMV19OiR7bWF0Y2hbMl19OiR7bWF0Y2hbM119YDtcbiAgICAgICAgZmllbGQudmFsdWUgPSB0aW1lT25seTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZmllbGQudmFsdWUgPSBmaWVsZC52YWx1ZTtcbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIGZpZWxkLnZhbHVlID1cbiAgICAgIGZpZWxkLnNob3dUaW1lID09PSB0cnVlXG4gICAgICAgID8gdG9TaG9ydERhdGVUaW1lKGZpZWxkLnZhbHVlLCBmaWVsZC5mb3JtYXQpXG4gICAgICAgIDogdG9TaG9ydERhdGUoZmllbGQudmFsdWUsIGZpZWxkLmZvcm1hdClcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlO1xuICB9IGVsc2UgaWYgKFxuICAgIChmaWVsZC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUIHx8IGZpZWxkLmNvbnRyb2wgPT09IEVGb3JtQ29udHJvbC5JTlBVVCkgJiZcbiAgICBmaWVsZC52YWx1ZSAmJlxuICAgIHR5cGVvZiBmaWVsZC52YWx1ZSA9PT0gJ29iamVjdCdcbiAgKSB7XG4gICAgcmV0dXJuIGZpZWxkLnZhbHVlLnZhbHVlID09IHVuZGVmaW5lZCA/IG51bGwgOiBmaWVsZC52YWx1ZS52YWx1ZTtcbiAgfSBlbHNlIGlmIChcbiAgICBmaWVsZC5sYWJlbCAmJlxuICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbCAmJlxuICAgIGZpZWxkLmxhYmVsLmxhYmVsQ29udHJvbC5jb250cm9sID09PSBFRm9ybUNvbnRyb2wuTE9PS1VQX0lOUFVUICYmXG4gICAgZmllbGQudmFsdWUgJiZcbiAgICB0eXBlb2YgZmllbGQudmFsdWUgPT09ICdvYmplY3QnXG4gICkge1xuICAgIHJldHVybiBmaWVsZC52YWx1ZS52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBmaWVsZC52YWx1ZSA9IGZpZWxkLnZhbHVlID09IHVuZGVmaW5lZCA/IG51bGwgOiBmaWVsZC52YWx1ZTtcbiAgICByZXR1cm4gZmllbGQudmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1dG9TZXRMb29rdXBEYXRhKFxuICBmaWVsZERhdGE6IGFueSxcbiAgcmVzcG9uc2U6IGFueVxuICApIHtcbiAgbGV0IG9iaiA9IHt9O1xuICBsZXQgcmVjb3JkID0gc2V0RGF0YUZpZWxkcyhbcmVzcG9uc2VdKTtcbiAgaWYgKHJlY29yZCAmJiByZWNvcmQubGVuZ3RoID4gMCkge1xuICAgIHJlY29yZC5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgIHJlY29yZCA9IHg7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGZpZWxkRGF0YSAmJiByZWNvcmQpIHtcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZERhdGEpLmZvckVhY2goKFtkYXRhS2V5LCBkYXRhVmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocmVjb3JkKTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBkYXRhS2V5Py50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGxldCB2YWx1ZSA9IHJvd0tleXM/LmZpbmQoXG4gICAgICAgICh4KSA9PiBkYXRhVmFsdWUgJiYgZGF0YVZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCd7JykgJiYgeD8udG9Mb3dlckNhc2UoKSA9PT0gZGF0YVZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5yZXBsYWNlKFwie1wiLCBcIlwiKT8ucmVwbGFjZShcIn1cIiwgXCJcIilcbiAgICAgICk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiByZWNvcmRbdmFsdWUrJ19vYmonXT8ub3B0aW9uVmFsdWUgPyByZWNvcmRbdmFsdWUrJ19vYmonXT8ub3B0aW9uVmFsdWUgOiByZWNvcmRbdmFsdWVdIH07XG4gICAgICB9IGVsc2UgaWYgKGtleSAmJiBrZXkubGVuZ3RoID4gMCkge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiByZWNvcmRba2V5LnRvTG93ZXJDYXNlKCldIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSB7IC4uLm9iaiwgW2RhdGFLZXldOiBkYXRhVmFsdWUgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRHcmlkTG9va3VwRGF0YShjb2x1bW46IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcsIGRhdGE6IGFueSl7XG4gIGxldCBvYmogPSBjb2x1bW4uZmluZCgoeCk9PiB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKTtcbiAgaWYob2JqICYmIG9iai5sb29rdXBDb250cm9sPy5kYXRhKXtcbiAgICBvYmoubG9va3VwQ29udHJvbC5kYXRhLmRhdGEgPSBkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRhRmllbGRzKHJlc3BvbnNlOiBhbnlbXSkge1xuICBsZXQgZGF0YTogYW55ID0gW107XG4gIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgcmVzcG9uc2UubWFwKCh4OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5rZXlzKHgpLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+ICh7IC4uLnByZXYsIFtjdXJyZW50LnRvTG93ZXJDYXNlKCldOiB4W2N1cnJlbnRdIH0pLFxuICAgICAgICB7fVxuICAgICAgKTtcblxuICAgICAgZGF0YS5wdXNoKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWFsb2dSZXNwb25zZShcbiAgZm9ybUZpZWxkOiBhbnksXG4gIGZvcm1EYXRhOiBhbnksXG4gIHJlc3BvbnNlOiBhbnlcbikge1xuICBsZXQgdmFsdWU6IGFueTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgLy8gaWYgc2VsZWN0ZWRWYWx1ZSBkb2VzIG5vdCBleGlzdCB0aGVuIGNvbnNpZGVyIHZhbHVlRmllbGQgYXMgc2VsZWN0ZWRWYWx1ZVxuICAgIGlmIChcbiAgICAgIGZvcm1EYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcCAmJlxuICAgICAgIWZvcm1EYXRhLmRhdGEudmFsdWVQcm9wXG4gICAgKSB7XG4gICAgICBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcCA9IGZvcm1EYXRhLmRhdGEubGFiZWxQcm9wO1xuICAgIH1cbiAgICBlbHNlIGlmIChcbiAgICAgIGZvcm1EYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhICYmXG4gICAgICBmb3JtRGF0YS5kYXRhLnZhbHVlUHJvcCAmJlxuICAgICAgIWZvcm1EYXRhLmRhdGEubGFiZWxQcm9wXG4gICAgKSB7XG4gICAgICBmb3JtRGF0YS5kYXRhLmxhYmVsUHJvcCA9IGZvcm1EYXRhLmRhdGEudmFsdWVQcm9wO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoVmFsdWVLZXk6IHN0cmluZyA9IGdldE1hdGNoS2V5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBmb3JtRGF0YT8uZGF0YT8udmFsdWVQcm9wXG4gICAgKTtcbiAgICBjb25zdCBtYXRjaEZpZWxkS2V5OiBzdHJpbmcgPSBnZXRNYXRjaEtleShcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgZm9ybURhdGE/LmRhdGE/LmxhYmVsUHJvcFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBmb3JtRGF0YT8uZGF0YSAmJlxuICAgICAgZm9ybURhdGE/LmRhdGEudmFsdWVQcm9wICYmXG4gICAgICBmb3JtRGF0YT8uZGF0YS5sYWJlbFByb3BcbiAgICApIHtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSByZXNwb25zZVttYXRjaFZhbHVlS2V5XTtcbiAgICAgIGxldCBtYXRjaFRleHQgPSByZXNwb25zZVttYXRjaEZpZWxkS2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWVQcm9wID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgbWF0Y2hUZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZVByb3AgPSB2YWx1ZVByb3AudHJpbSgpO1xuICAgICAgICBtYXRjaFRleHQgPSBtYXRjaFRleHQudHJpbSgpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB7IHRleHQ6IG1hdGNoVGV4dCwgdmFsdWU6IHZhbHVlUHJvcCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBGaWVsZEtleTogc3RyaW5nID0gZ2V0TWF0Y2hLZXkocmVzcG9uc2UsIGZvcm1GaWVsZC5maWVsZCk7XG4gICAgICBsZXQgdmFsdWUgPSByZXNwb25zZVtGaWVsZEtleV07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50VXJsKCk6c3RyaW5ne1xuICBsZXQgY3VycmVudFJvdXRlOiBzdHJpbmcgPSAnJztcbiAgbGV0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICBpZih1cmwpe1xuICAgIGxldCBhcnIgPSB1cmwuc3BsaXQoJy8nKTtcbiAgICBjdXJyZW50Um91dGUgPSBhcnJbYXJyLmxlbmd0aC0xXVxuICB9ICAgIFxuICByZXR1cm4gY3VycmVudFJvdXRlO1xufVxuXG5leHBvcnQgIGZ1bmN0aW9uIGdldEdyaWRGaWx0ZXJzKCl7XG4gIGxldCBmaWx0ZXJzOiBhbnkgPSBbXTtcbiAgbGV0IGdyaWRGaWx0ZXJzID0gY3VycmVudFVybCgpO1xuICAgIGlmKGdyaWRGaWx0ZXJzICYmIGdyaWRGaWx0ZXJzLmxlbmd0aCA+IDApe1xuICAgICAgY29uc3QgbG9jYWxGaWx0ZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScrZ3JpZEZpbHRlcnMpIGFzIGFueSk7XG4gICAgICBmaWx0ZXJzID0gbG9jYWxGaWx0ZXI/LmZpbHRlcnM7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzO1xufVxuXG4vL3VwZGF0ZSB0aGUgaGlkZGVuIG9yIGRpc2FibGVkIGFuZCB2YWx1ZSBiYXNlZCBvZmYgb3RoZXIgZ2xvYmFsIGZpbHRlcnMuXG5leHBvcnQgZnVuY3Rpb24gc2V0R2xvYmFsRmlsdGVyUHJvcFZhbHVlcyhcbiAgZ2xvYmFsRmlsdGVyOiBJR2xvYmFsRmlsdGVyW10sXG4gIGZpZWxkOiBzdHJpbmcsXG4gIHByb3BzOiBJRmlsdGVyRGljdGlvbmFyeVtdLFxuKSB7XG4gIHJldHVybiBnbG9iYWxGaWx0ZXIubWFwKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgIGlmIChcbiAgICAgIChmaWx0ZXIuZmllbGQgJiYgZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkPy50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgKGZpbHRlci5kaXNwbGF5VGV4dCAmJlxuICAgICAgICBmaWx0ZXIuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBwcm9wcz8ubWFwKChwcm9wOiBJRmlsdGVyRGljdGlvbmFyeSkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyLmhhc093blByb3BlcnR5KHByb3AucHJvcE5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIChmaWx0ZXJbcHJvcC5wcm9wTmFtZV0gPSBwcm9wLnByb3BWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcC5wcm9wVmFsdWUgJiYgcHJvcC5wcm9wVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiAoZmlsdGVyLnZhbHVlID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FyZEZpZWxkc0RhdGEoZm9ybTogYW55KSB7XG4gIGlmIChmb3JtICYmIGZvcm0uZHluYW1pY2Zvcm0pIHtcbiAgICBjb25zdCB7IGR5bmFtaWNmb3JtLCAuLi5uZXdEYXRhIH0gPSBmb3JtO1xuICAgIGR5bmFtaWNmb3JtPy5mb3JtU2VjdGlvbnM/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHM/LmZvckVhY2goKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKG5ld0RhdGEpIHtcbiAgICAgICAgICBzZXRFZGl0Rm9ybUZpZWxkcyh7IHJlY29yZHM6IFtuZXdEYXRhXSB9LCBkeW5hbWljZm9ybSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG5cbi8vIGRpc2FibGUgR3JpZCBFZGl0YWJsZVJvdyBDb2x1bW5cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlRWRpdFJvd0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBmaWVsZDogc3RyaW5nKTogSUdyaWRDb2x1bW5bXSB7XG4gIGlmIChmaWVsZCAmJiBjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHgpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICAgIGxldCBkaXNhYmxlT2JqID0geyAuLi5vYmosIGRpc2FibGVkOiB0cnVlIH07XG4gICAgY29uc3QgaW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoaTogYW55KSA9PiBpLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGNvbHVtbnNbaW5kZXhdID0gZGlzYWJsZU9iajtcbiAgfVxuICByZXR1cm4gY29sdW1ucztcbn1cblxuLy8gZW5hYmxlZCBHcmlkIEVkaXRhYmxlUm93IENvbHVtblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZWRFZGl0Um93Q29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGZpZWxkOiBzdHJpbmcpOiBJR3JpZENvbHVtbltdIHtcbiAgaWYgKGZpZWxkICYmIGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeCkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgIGxldCBlbmFibGVPYmogPSB7IC4uLm9iaiwgZGlzYWJsZWQ6IGZhbHNlIH07XG4gICAgY29uc3QgaW5kZXggPSBjb2x1bW5zLmZpbmRJbmRleCgoaTogYW55KSA9PiBpLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgY29sdW1uc1tpbmRleF0gPSBlbmFibGVPYmo7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnM7XG59XG5cbiAvLyBjaGVjayB0aGUgTWludXRlcyBJbnRlcnZhbFxuIGV4cG9ydCBmdW5jdGlvbiBzZXRNaW51dGVzSW50ZXJ2YWwodmFsdWU6IGFueSl7XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG1pbiA9IHZhbHVlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpO1xuICAgIGlmIChtaW4pIHtcbiAgICAgdmFsdWUgPSB2YWx1ZS5zZXRNaW51dGVzKDApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbiAvLyB1cGRhdGUgdGhlIHJlc3BvbnNlIHJlY29yZHNcbiBleHBvcnQgZnVuY3Rpb24gc2V0VXBkYXRlZFJlY29yZChyZWNvcmRzOiBhbnlbXSwgcm93RGF0YTogYW55LCBkYXRhS2V5OiBzdHJpbmcpOiBhbnlbXXtcbiAgY29uc3QgaW5kZXggPSByZWNvcmRzPy5maW5kSW5kZXgoKHJlY29yZCk9PiByZWNvcmRbZGF0YUtleT8udG9Mb3dlckNhc2UoKV0gPT0gcm93RGF0YVtkYXRhS2V5Py50b0xvd2VyQ2FzZSgpXSk7XG4gIGlmKGluZGV4ID4gLTEpe1xuICAgIHJlY29yZHNbaW5kZXhdID0gcm93RGF0YTtcbiAgfWVsc2V7XG4gICAgcmVjb3Jkcy5wdXNoKHJvd0RhdGEpO1xuICB9XG4gIHJldHVybiByZWNvcmRzO1xufVxuXG4vL2NvbnZlcnQgdGhlIHRpbWUgaW50byBkYXRlXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUluRGF0ZSh0aW1lOiBhbnkpIHtcbiAgY29uc3QgY29udmVydFRpbWUxMnRvMjQgPSAodGltZTEyaDogYW55KSA9PiB7XG4gICAgY29uc3QgW3RpbWUsIG1vZGlmaWVyXSA9IHRpbWUxMmg/LnRvU3RyaW5nKCk/LnNwbGl0KCcgJyk7XG4gICAgbGV0IFtob3VycywgbWludXRlc10gPSB0aW1lPy5zcGxpdCgnOicpO1xuICAgIGlmIChob3VycyA9PT0gJzEyJykge1xuICAgICAgaG91cnMgPSAnMDAnO1xuICAgIH1cbiAgICBpZiAobW9kaWZpZXIgPT09ICdQTScpIHtcbiAgICAgIGhvdXJzID0gcGFyc2VJbnQoaG91cnMsIDEwKSArIDEyO1xuICAgIH1cbiAgICByZXR1cm4gYCR7aG91cnN9OiR7bWludXRlc31gO1xuICB9O1xuICBjb25zdCBkYXRlID0gY29udmVydFRpbWUxMnRvMjQodGltZSk7XG4gIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUoJ0p1bHkgMSwgMTk5OSwgJyArIGRhdGUgKyAnOjAwJyk7XG4gIGNvbnN0IGZ1dHVyZURhdGUgPSBuZXcgRGF0ZSgpO1xuICBmdXR1cmVEYXRlLnNldFRpbWUodGVtcERhdGUuZ2V0VGltZSgpKTtcbiAgcmV0dXJuIGZ1dHVyZURhdGU7XG59XG5cbi8vIHJldHVybiB0aGUgZGF0YSBvZiB0aGUgZmllbGQgXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGREYXRhKHsgZm9ybVNlY3Rpb25zIH06IGFueSwgZmllbGQ6IHN0cmluZyl7XG4gIGxldCBkYXRhOiBhbnkgPSBbXVxuICBpZihmb3JtU2VjdGlvbnM/Lmxlbmd0aCA+IDAgJiYgZmllbGQpe1xuICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKChzZWN0aW9uOiBhbnkpPT57XG4gICAgICBpZihzZWN0aW9uLmZpZWxkcy5zb21lKChmb3JtRmllbGQ6YW55KT0+IGZvcm1GaWVsZC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZC50b0xvd2VyQ2FzZSgpKSl7XG4gICAgICAgIGRhdGE9c2VjdGlvbi5maWVsZHMuZmluZCgoZm9ybUZpZWxkOmFueSk9PiBmb3JtRmllbGQuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQudG9Mb3dlckNhc2UoKSk/LmRhdGFcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWxsRm9ybUZpZWxkc1ZhbHVlcyhcbiAgeyBmb3JtU2VjdGlvbnMgfTogSUR5bmFtaWNGb3JtLFxuICBwcm9wczogSUZpbHRlckRpY3Rpb25hcnlbXVxuKSB7XG4gIGZvcm1TZWN0aW9ucz8ubWFwKChzZWN0aW9uOiBJRm9ybVNlY3Rpb24pID0+IHtcbiAgICBpZiAoc2VjdGlvbikge1xuICAgICAgc2VjdGlvbi5maWVsZHMubWFwKChmb3JtRmllbGQ6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvcHMubWFwKChwcm9wOiBJRmlsdGVyRGljdGlvbmFyeSkgPT4ge1xuICAgICAgICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiAoZm9ybUZpZWxkW3Byb3AucHJvcE5hbWVdID0gcHJvcC5wcm9wVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyByZXR1cm5zIHRoZSByZXNwb25zZSBoZWFkZXIgZmlsZU5hbWVcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlckZpbGVOYW1lKHJlc3BvbnNlKXtcbiAgY29uc3QgaGVhZGVyID0gcmVzcG9uc2U/LmhlYWRlcnM/LmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpO1xuICByZXR1cm4gaGVhZGVyPy5zcGxpdCgnZmlsZW5hbWU9Jyk/LlsxXT8uc3BsaXQoXCI7XCIpWzBdPy5yZXBsYWNlQWxsKC9cXFwiL2csICcnKTtcbn1cblxuIGV4cG9ydCBmdW5jdGlvbiBkcmFnZ2FibGVEaWFsb2coaWQ6YW55KXtcbiAgICBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpXG4gICAgZGlhbG9nWzBdPy5zZXRBdHRyaWJ1dGUoJ2lkJywnbXlkaXYnICsgaWQpXG4gICAgY29uc3QgZGlhbG9naGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2ctaGVhZGVyJylcbiAgICBkaWFsb2doZWFkZXJbMF0/LnNldEF0dHJpYnV0ZSgnaWQnLCdteWRpdmhlYWRlcicgKyBpZClcbiAgICBjb25zdCBlbG1udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdicgKyBpZCk7XG5cbiAgICAgIGxldCBwb3MxID0gMCxcbiAgICAgICAgcG9zMiA9IDAsXG4gICAgICAgIHBvczMgPSAwLFxuICAgICAgICBwb3M0ID0gMDtcbiAgXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGUpID0+IHtcbiAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBjbG9zZURyYWdFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGVsZW1lbnREcmFnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBlbGVtZW50RHJhZyA9IChlKSA9PiB7XG4gICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XG4gICAgICAgIHBvczIgPSBwb3M0IC0gZS5jbGllbnRZO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBlbG1udC5zdHlsZS50b3AgPSBlbG1udD8ub2Zmc2V0VG9wIC0gcG9zMiArICdweCc7XG4gICAgICAgIGVsbW50LnN0eWxlLmxlZnQgPSBlbG1udD8ub2Zmc2V0TGVmdCAtIHBvczEgKyAncHgnO1xuICAgICAgfTtcbiAgXG4gICAgICBjb25zdCBjbG9zZURyYWdFbGVtZW50ID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xuICAgICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XG4gICAgICB9O1xuICBcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXlkaXZoZWFkZXInICsgaWQpKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteWRpdmhlYWRlcicgKyBpZCkub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duO1xuICAgICAgfSBlbHNlIGlmKGVsbW50KSB7XG4gICAgICAgIGVsbW50Lm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH1cbiAgICB9ICBcbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhck1pbk1heFZhbHVlKGl0ZW06IGFueSx2YWx1ZTogYW55LCBpbmRleCl7XG4gIGxldCB2YWxpZGF0aW9uOiBzdHJpbmcgPSAnZXF1YWwnO1xuICB2YXIgdmFsaWREYXRlID0gbmV3IERhdGUoaXRlbS52YWxpZGF0aW9uc1tpbmRleF0uZXhwcmVzc2lvbik7XG4gIHZhciBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgaWYgKHZhbGlkRGF0ZS5nZXRUaW1lKCkgPCBjdXJyZW50RGF0ZS5nZXRUaW1lKCkpe1xuICAgIHZhbGlkYXRpb24gPSAnZ3JlYXRlcic7XG4gIH1cbiAgZWxzZSBpZiAodmFsaWREYXRlLmdldFRpbWUoKSA+IGN1cnJlbnREYXRlLmdldFRpbWUoKSl7XG4gICAgdmFsaWRhdGlvbiA9ICdtaW5pbXVtJztcbiAgfVxuICByZXR1cm4gdmFsaWRhdGlvbjtcbn1cbi8qICNlbmRyZWdpb24gKi9cbiJdfQ==
|
|
@@ -1115,7 +1115,16 @@ function formatFormFieldCValue(field) {
|
|
|
1115
1115
|
else if (field.control === EFormControl.CALENDAR &&
|
|
1116
1116
|
(field.value || field.value === '')) {
|
|
1117
1117
|
if (field.timeOnly) {
|
|
1118
|
-
|
|
1118
|
+
const dateTimeRegex = /^\d{4}-\d{2}-\d{2} (\d{2}):(\d{2}):(\d{2})$/; // Regex for datetime format
|
|
1119
|
+
const match = field.value.match(dateTimeRegex);
|
|
1120
|
+
if (match) {
|
|
1121
|
+
// Extract time only from the matched datetime string
|
|
1122
|
+
const timeOnly = `${match[1]}:${match[2]}:${match[3]}`;
|
|
1123
|
+
field.value = timeOnly;
|
|
1124
|
+
}
|
|
1125
|
+
else {
|
|
1126
|
+
field.value = field.value;
|
|
1127
|
+
}
|
|
1119
1128
|
}
|
|
1120
1129
|
else {
|
|
1121
1130
|
field.value =
|