parse-server 9.9.1-alpha.3 → 9.9.1-alpha.5
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.
|
@@ -7,22 +7,24 @@ exports.default = exports.FilesController = void 0;
|
|
|
7
7
|
var _cryptoUtils = require("../cryptoUtils");
|
|
8
8
|
var _AdaptableController = _interopRequireDefault(require("./AdaptableController"));
|
|
9
9
|
var _FilesAdapter = require("../Adapters/Files/FilesAdapter");
|
|
10
|
-
var _path = _interopRequireDefault(require("path"));
|
|
11
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
11
|
// FilesController.js
|
|
13
12
|
|
|
14
13
|
const Parse = require('parse/node').Parse;
|
|
14
|
+
const Utils = require('../Utils');
|
|
15
15
|
const legacyFilesRegex = new RegExp('^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}-.*');
|
|
16
16
|
class FilesController extends _AdaptableController.default {
|
|
17
17
|
getFileData(config, filename) {
|
|
18
18
|
return this.adapter.getFileData(filename);
|
|
19
19
|
}
|
|
20
20
|
async createFile(config, filename, data, contentType, options) {
|
|
21
|
-
const extname =
|
|
21
|
+
const extname = Utils.getFileExtension(filename);
|
|
22
22
|
const hasExtension = extname.length > 0;
|
|
23
23
|
const mime = (await import('mime')).default;
|
|
24
24
|
if (!hasExtension && contentType && mime.getExtension(contentType)) {
|
|
25
|
-
|
|
25
|
+
// Avoid producing a doubled dot when the filename already ends in one
|
|
26
|
+
const separator = filename.endsWith('.') ? '' : '.';
|
|
27
|
+
filename = filename + separator + mime.getExtension(contentType);
|
|
26
28
|
} else if (hasExtension) {
|
|
27
29
|
contentType = mime.getType(filename) || contentType;
|
|
28
30
|
}
|
|
@@ -119,4 +121,4 @@ class FilesController extends _AdaptableController.default {
|
|
|
119
121
|
}
|
|
120
122
|
exports.FilesController = FilesController;
|
|
121
123
|
var _default = exports.default = FilesController;
|
|
122
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0ZpbGVzQWRhcHRlciIsIl9wYXRoIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiUGFyc2UiLCJsZWdhY3lGaWxlc1JlZ2V4IiwiUmVnRXhwIiwiRmlsZXNDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImdldEZpbGVEYXRhIiwiY29uZmlnIiwiZmlsZW5hbWUiLCJhZGFwdGVyIiwiY3JlYXRlRmlsZSIsImRhdGEiLCJjb250ZW50VHlwZSIsIm9wdGlvbnMiLCJleHRuYW1lIiwicGF0aCIsImhhc0V4dGVuc2lvbiIsImxlbmd0aCIsIm1pbWUiLCJnZXRFeHRlbnNpb24iLCJnZXRUeXBlIiwicHJlc2VydmVGaWxlTmFtZSIsInJhbmRvbUhleFN0cmluZyIsImRpcmVjdG9yeSIsInBpcGUiLCJzdXBwb3J0c1N0cmVhbWluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY2h1bmtzIiwib24iLCJjaHVuayIsInB1c2giLCJCdWZmZXIiLCJjb25jYXQiLCJsb2NhdGlvbiIsImdldEZpbGVMb2NhdGlvbiIsInVybCIsIm5hbWUiLCJkZWxldGVGaWxlIiwiZ2V0TWV0YWRhdGEiLCJleHBhbmRGaWxlc0luT2JqZWN0Iiwib2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwicHJvbWlzZXMiLCJtYXAiLCJvYmoiLCJhbGwiLCJrZXkiLCJmaWxlT2JqZWN0IiwiZmlsZUtleSIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0ZXN0IiwiZXhwZWN0ZWRBZGFwdGVyVHlwZSIsIkZpbGVzQWRhcHRlciIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZXJyb3IiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL0ZpbGVzQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGaWxlc0NvbnRyb2xsZXIuanNcbmltcG9ydCB7IHJhbmRvbUhleFN0cmluZyB9IGZyb20gJy4uL2NyeXB0b1V0aWxzJztcbmltcG9ydCBBZGFwdGFibGVDb250cm9sbGVyIGZyb20gJy4vQWRhcHRhYmxlQ29udHJvbGxlcic7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbGVuYW1lLCBGaWxlc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9GaWxlcy9GaWxlc0FkYXB0ZXInO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcblxuY29uc3QgbGVnYWN5RmlsZXNSZWdleCA9IG5ldyBSZWdFeHAoXG4gICdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9LS4qJ1xuKTtcblxuZXhwb3J0IGNsYXNzIEZpbGVzQ29udHJvbGxlciBleHRlbmRzIEFkYXB0YWJsZUNvbnRyb2xsZXIge1xuICBnZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRGaWxlRGF0YShmaWxlbmFtZSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlKGNvbmZpZywgZmlsZW5hbWUsIGRhdGEsIGNvbnRlbnRUeXBlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZXh0bmFtZSA9IHBhdGguZXh0bmFtZShmaWxlbmFtZSk7XG5cbiAgICBjb25zdCBoYXNFeHRlbnNpb24gPSBleHRuYW1lLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdFxuICAgIGlmICghaGFzRXh0ZW5zaW9uICYmIGNvbnRlbnRUeXBlICYmIG1pbWUuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKSkge1xuICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZSArICcuJyArIG1pbWUuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0V4dGVuc2lvbikge1xuICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpIHx8IGNvbnRlbnRUeXBlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnByZXNlcnZlRmlsZU5hbWUpIHtcbiAgICAgIGZpbGVuYW1lID0gcmFuZG9tSGV4U3RyaW5nKDMyKSArICdfJyArIGZpbGVuYW1lO1xuICAgIH1cblxuICAgIC8vIFByZXBlbmQgZGlyZWN0b3J5IGlmIHByb3ZpZGVkXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kaXJlY3RvcnkpIHtcbiAgICAgIGZpbGVuYW1lID0gb3B0aW9ucy5kaXJlY3RvcnkgKyAnLycgKyBmaWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBvcHRpb25zLmRpcmVjdG9yeTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogYnVmZmVyIHN0cmVhbSBmb3IgYWRhcHRlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHN0cmVhbWluZ1xuICAgIGlmICh0eXBlb2YgZGF0YT8ucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5hZGFwdGVyLnN1cHBvcnRzU3RyZWFtaW5nKSB7XG4gICAgICBkYXRhID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgZGF0YS5vbignZGF0YScsIGNodW5rID0+IGNodW5rcy5wdXNoKGNodW5rKSk7XG4gICAgICAgIGRhdGEub24oJ2VuZCcsICgpID0+IHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKSk7XG4gICAgICAgIGRhdGEub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uID0gYXdhaXQgdGhpcy5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKTtcbiAgICBhd2FpdCB0aGlzLmFkYXB0ZXIuY3JlYXRlRmlsZShmaWxlbmFtZSwgZGF0YSwgY29udGVudFR5cGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IGxvY2F0aW9uLFxuICAgICAgbmFtZTogZmlsZW5hbWUsXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlRmlsZShjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5kZWxldGVGaWxlKGZpbGVuYW1lKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKGZpbGVuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmFkYXB0ZXIuZ2V0TWV0YWRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZ2V0TWV0YWRhdGEoZmlsZW5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGZpbGUgcmVmZXJlbmNlcyBpbiBSRVNULWZvcm1hdCBvYmplY3QgYW5kIGFkZHMgdGhlIHVybCBrZXlcbiAgICogd2l0aCB0aGUgY3VycmVudCBtb3VudCBwb2ludCBhbmQgYXBwIGlkLlxuICAgKiBPYmplY3QgbWF5IGJlIGEgc2luZ2xlIG9iamVjdCBvciBsaXN0IG9mIFJFU1QtZm9ybWF0IG9iamVjdHMuXG4gICAqL1xuICBhc3luYyBleHBhbmRGaWxlc0luT2JqZWN0KGNvbmZpZywgb2JqZWN0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSBvYmplY3QubWFwKG9iaiA9PiB0aGlzLmV4cGFuZEZpbGVzSW5PYmplY3QoY29uZmlnLCBvYmopKTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IG9iamVjdFtrZXldO1xuICAgICAgaWYgKGZpbGVPYmplY3QgJiYgZmlsZU9iamVjdFsnX190eXBlJ10gPT09ICdGaWxlJykge1xuICAgICAgICBpZiAoZmlsZU9iamVjdFsndXJsJ10pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGZpbGVPYmplY3RbJ25hbWUnXTtcbiAgICAgICAgLy8gYWxsIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIFwidGZzcy1cIiBzaG91bGQgYmUgZnJvbSBmaWxlcy5wYXJzZXRmc3MuY29tXG4gICAgICAgIC8vIGFsbCBmaWxlbmFtZXMgc3RhcnRpbmcgd2l0aCBhIFwiLVwiIHNlcGVyYXRlZCBVVUlEIHNob3VsZCBiZSBmcm9tIGZpbGVzLnBhcnNlLmNvbVxuICAgICAgICAvLyBhbGwgb3RoZXIgZmlsZW5hbWVzIGhhdmUgYmVlbiBtaWdyYXRlZCBvciBjcmVhdGVkIGZyb20gUGFyc2UgU2VydmVyXG4gICAgICAgIGlmIChjb25maWcuZmlsZUtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmlsZU9iamVjdFsndXJsJ10gPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlbmFtZS5pbmRleE9mKCd0ZnNzLScpID09PSAwKSB7XG4gICAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9XG4gICAgICAgICAgICAgICdodHRwOi8vZmlsZXMucGFyc2V0ZnNzLmNvbS8nICsgY29uZmlnLmZpbGVLZXkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsZW5hbWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGVnYWN5RmlsZXNSZWdleC50ZXN0KGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgZmlsZU9iamVjdFsndXJsJ10gPVxuICAgICAgICAgICAgICAnaHR0cDovL2ZpbGVzLnBhcnNlLmNvbS8nICsgY29uZmlnLmZpbGVLZXkgKyAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsZW5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9IGF3YWl0IHRoaXMuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwZWN0ZWRBZGFwdGVyVHlwZSgpIHtcbiAgICByZXR1cm4gRmlsZXNBZGFwdGVyO1xuICB9XG5cbiAgaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmhhbmRsZUZpbGVTdHJlYW0oZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmFkYXB0ZXIudmFsaWRhdGVGaWxlbmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmFkYXB0ZXIudmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gICAgICBpZiAodHlwZW9mIGVycm9yICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCBlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgfVxufVxu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
|
|
124
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0ZpbGVzQWRhcHRlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlBhcnNlIiwiVXRpbHMiLCJsZWdhY3lGaWxlc1JlZ2V4IiwiUmVnRXhwIiwiRmlsZXNDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImdldEZpbGVEYXRhIiwiY29uZmlnIiwiZmlsZW5hbWUiLCJhZGFwdGVyIiwiY3JlYXRlRmlsZSIsImRhdGEiLCJjb250ZW50VHlwZSIsIm9wdGlvbnMiLCJleHRuYW1lIiwiZ2V0RmlsZUV4dGVuc2lvbiIsImhhc0V4dGVuc2lvbiIsImxlbmd0aCIsIm1pbWUiLCJnZXRFeHRlbnNpb24iLCJzZXBhcmF0b3IiLCJlbmRzV2l0aCIsImdldFR5cGUiLCJwcmVzZXJ2ZUZpbGVOYW1lIiwicmFuZG9tSGV4U3RyaW5nIiwiZGlyZWN0b3J5IiwicGlwZSIsInN1cHBvcnRzU3RyZWFtaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjaHVua3MiLCJvbiIsImNodW5rIiwicHVzaCIsIkJ1ZmZlciIsImNvbmNhdCIsImxvY2F0aW9uIiwiZ2V0RmlsZUxvY2F0aW9uIiwidXJsIiwibmFtZSIsImRlbGV0ZUZpbGUiLCJnZXRNZXRhZGF0YSIsImV4cGFuZEZpbGVzSW5PYmplY3QiLCJvYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJwcm9taXNlcyIsIm1hcCIsIm9iaiIsImFsbCIsImtleSIsImZpbGVPYmplY3QiLCJmaWxlS2V5IiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsImVuY29kZVVSSUNvbXBvbmVudCIsInRlc3QiLCJleHBlY3RlZEFkYXB0ZXJUeXBlIiwiRmlsZXNBZGFwdGVyIiwiaGFuZGxlRmlsZVN0cmVhbSIsInJlcSIsInJlcyIsInZhbGlkYXRlRmlsZW5hbWUiLCJlcnJvciIsIkVycm9yIiwiSU5WQUxJRF9GSUxFX05BTUUiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvQ29udHJvbGxlcnMvRmlsZXNDb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZpbGVzQ29udHJvbGxlci5qc1xuaW1wb3J0IHsgcmFuZG9tSGV4U3RyaW5nIH0gZnJvbSAnLi4vY3J5cHRvVXRpbHMnO1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgZnJvbSAnLi9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsZW5hbWUsIEZpbGVzQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0ZpbGVzL0ZpbGVzQWRhcHRlcic7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcblxuY29uc3QgbGVnYWN5RmlsZXNSZWdleCA9IG5ldyBSZWdFeHAoXG4gICdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9LS4qJ1xuKTtcblxuZXhwb3J0IGNsYXNzIEZpbGVzQ29udHJvbGxlciBleHRlbmRzIEFkYXB0YWJsZUNvbnRyb2xsZXIge1xuICBnZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRGaWxlRGF0YShmaWxlbmFtZSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlKGNvbmZpZywgZmlsZW5hbWUsIGRhdGEsIGNvbnRlbnRUeXBlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZXh0bmFtZSA9IFV0aWxzLmdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWUpO1xuICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGV4dG5hbWUubGVuZ3RoID4gMDtcbiAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0XG4gICAgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUgJiYgbWltZS5nZXRFeHRlbnNpb24oY29udGVudFR5cGUpKSB7XG4gICAgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBkb3VibGVkIGRvdCB3aGVuIHRoZSBmaWxlbmFtZSBhbHJlYWR5IGVuZHMgaW4gb25lXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBmaWxlbmFtZS5lbmRzV2l0aCgnLicpID8gJycgOiAnLic7XG4gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lICsgc2VwYXJhdG9yICsgbWltZS5nZXRFeHRlbnNpb24oY29udGVudFR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaGFzRXh0ZW5zaW9uKSB7XG4gICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSkgfHwgY29udGVudFR5cGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucHJlc2VydmVGaWxlTmFtZSkge1xuICAgICAgZmlsZW5hbWUgPSByYW5kb21IZXhTdHJpbmcoMzIpICsgJ18nICsgZmlsZW5hbWU7XG4gICAgfVxuXG4gICAgLy8gUHJlcGVuZCBkaXJlY3RvcnkgaWYgcHJvdmlkZWRcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRpcmVjdG9yeSkge1xuICAgICAgZmlsZW5hbWUgPSBvcHRpb25zLmRpcmVjdG9yeSArICcvJyArIGZpbGVuYW1lO1xuICAgICAgZGVsZXRlIG9wdGlvbnMuZGlyZWN0b3J5O1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBidWZmZXIgc3RyZWFtIGZvciBhZGFwdGVycyB0aGF0IGRvbid0IHN1cHBvcnQgc3RyZWFtaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhPy5waXBlID09PSAnZnVuY3Rpb24nICYmICF0aGlzLmFkYXB0ZXIuc3VwcG9ydHNTdHJlYW1pbmcpIHtcbiAgICAgIGRhdGEgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICBkYXRhLm9uKCdkYXRhJywgY2h1bmsgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgZGF0YS5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNodW5rcykpKTtcbiAgICAgICAgZGF0YS5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVGaWxlKGZpbGVuYW1lLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogbG9jYXRpb24sXG4gICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICB9XG4gIH1cblxuICBkZWxldGVGaWxlKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmRlbGV0ZUZpbGUoZmlsZW5hbWUpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoZmlsZW5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYWRhcHRlci5nZXRNZXRhZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRNZXRhZGF0YShmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgZmlsZSByZWZlcmVuY2VzIGluIFJFU1QtZm9ybWF0IG9iamVjdCBhbmQgYWRkcyB0aGUgdXJsIGtleVxuICAgKiB3aXRoIHRoZSBjdXJyZW50IG1vdW50IHBvaW50IGFuZCBhcHAgaWQuXG4gICAqIE9iamVjdCBtYXkgYmUgYSBzaW5nbGUgb2JqZWN0IG9yIGxpc3Qgb2YgUkVTVC1mb3JtYXQgb2JqZWN0cy5cbiAgICovXG4gIGFzeW5jIGV4cGFuZEZpbGVzSW5PYmplY3QoY29uZmlnLCBvYmplY3QpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IG9iamVjdC5tYXAob2JqID0+IHRoaXMuZXhwYW5kRmlsZXNJbk9iamVjdChjb25maWcsIG9iaikpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgICBpZiAoZmlsZU9iamVjdCAmJiBmaWxlT2JqZWN0WydfX3R5cGUnXSA9PT0gJ0ZpbGUnKSB7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0Wyd1cmwnXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gZmlsZU9iamVjdFsnbmFtZSddO1xuICAgICAgICAvLyBhbGwgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGggXCJ0ZnNzLVwiIHNob3VsZCBiZSBmcm9tIGZpbGVzLnBhcnNldGZzcy5jb21cbiAgICAgICAgLy8gYWxsIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIGEgXCItXCIgc2VwZXJhdGVkIFVVSUQgc2hvdWxkIGJlIGZyb20gZmlsZXMucGFyc2UuY29tXG4gICAgICAgIC8vIGFsbCBvdGhlciBmaWxlbmFtZXMgaGF2ZSBiZWVuIG1pZ3JhdGVkIG9yIGNyZWF0ZWQgZnJvbSBQYXJzZSBTZXJ2ZXJcbiAgICAgICAgaWYgKGNvbmZpZy5maWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9IGF3YWl0IHRoaXMuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVuYW1lLmluZGV4T2YoJ3Rmc3MtJykgPT09IDApIHtcbiAgICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID1cbiAgICAgICAgICAgICAgJ2h0dHA6Ly9maWxlcy5wYXJzZXRmc3MuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsZWdhY3lGaWxlc1JlZ2V4LnRlc3QoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9XG4gICAgICAgICAgICAgICdodHRwOi8vZmlsZXMucGFyc2UuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID0gYXdhaXQgdGhpcy5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBlY3RlZEFkYXB0ZXJUeXBlKCkge1xuICAgIHJldHVybiBGaWxlc0FkYXB0ZXI7XG4gIH1cblxuICBoYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbShmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYWRhcHRlci52YWxpZGF0ZUZpbGVuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuYWRhcHRlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICAgIGlmICh0eXBlb2YgZXJyb3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVzQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQUFnRixTQUFBRSx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUhoRjs7QUFJQSxNQUFNRyxLQUFLLEdBQUdQLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ08sS0FBSztBQUN6QyxNQUFNQyxLQUFLLEdBQUdSLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFFakMsTUFBTVMsZ0JBQWdCLEdBQUcsSUFBSUMsTUFBTSxDQUNqQyxpRkFDRixDQUFDO0FBRU0sTUFBTUMsZUFBZSxTQUFTQyw0QkFBbUIsQ0FBQztFQUN2REMsV0FBV0EsQ0FBQ0MsTUFBTSxFQUFFQyxRQUFRLEVBQUU7SUFDNUIsT0FBTyxJQUFJLENBQUNDLE9BQU8sQ0FBQ0gsV0FBVyxDQUFDRSxRQUFRLENBQUM7RUFDM0M7RUFFQSxNQUFNRSxVQUFVQSxDQUFDSCxNQUFNLEVBQUVDLFFBQVEsRUFBRUcsSUFBSSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sRUFBRTtJQUM3RCxNQUFNQyxPQUFPLEdBQUdiLEtBQUssQ0FBQ2MsZ0JBQWdCLENBQUNQLFFBQVEsQ0FBQztJQUNoRCxNQUFNUSxZQUFZLEdBQUdGLE9BQU8sQ0FBQ0csTUFBTSxH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
|
|
@@ -380,14 +380,20 @@ class FilesRouter {
|
|
|
380
380
|
}
|
|
381
381
|
});
|
|
382
382
|
};
|
|
383
|
-
let extension =
|
|
384
|
-
if (filename && filename.includes('.')) {
|
|
385
|
-
extension = filename.substring(filename.lastIndexOf('.') + 1);
|
|
386
|
-
} else if (contentType && contentType.includes('/')) {
|
|
387
|
-
extension = contentType.split('/')[1];
|
|
388
|
-
}
|
|
383
|
+
let extension = Utils.getFileExtension(filename);
|
|
389
384
|
// Strip MIME parameters (e.g. ";charset=utf-8") and whitespace
|
|
390
385
|
extension = extension?.split(';')[0]?.replace(/\s+/g, '');
|
|
386
|
+
// If the filename has no usable extension (no dot, trailing dot, or
|
|
387
|
+
// whitespace-only suffix), fall back to the Content-Type subtype — same
|
|
388
|
+
// as a dotless filename.
|
|
389
|
+
if (!extension && contentType && contentType.includes('/')) {
|
|
390
|
+
extension = contentType.split('/')[1]?.split(';')[0]?.replace(/\s+/g, '');
|
|
391
|
+
}
|
|
392
|
+
// Last resort for malformed inputs (e.g. Content-Type without a slash):
|
|
393
|
+
// use the raw Content-Type so the existing rejection path still fires.
|
|
394
|
+
if (!extension && contentType) {
|
|
395
|
+
extension = contentType.split(';')[0]?.replace(/\s+/g, '');
|
|
396
|
+
}
|
|
391
397
|
if (extension && !isValidExtension(extension)) {
|
|
392
398
|
next(new _node.default.Error(_node.default.Error.FILE_SAVE_ERROR, `File upload of extension ${extension} is disabled.`));
|
|
393
399
|
return;
|
|
@@ -769,4 +775,4 @@ function isFileStreamable(req, filesController) {
|
|
|
769
775
|
const end = Number(range[1]);
|
|
770
776
|
return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
|
|
771
777
|
}
|
|
772
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsImluaXRJbmZvIiwicmVxIiwicmVzIiwibmV4dCIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImF1dGgiLCJpc01hc3RlciIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwiSU5WQUxJRF9GSUxFX05BTUUiLCJfZWFybHlIZWFkZXJzTWlkZGxld2FyZSIsIl9ib2R5UGFyc2luZ01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJjcmVhdGVIYW5kbGVyIiwiYmluZCIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX2dldEZpbGVuYW1lRnJvbVBhcmFtcyIsInBhcnRzIiwicGFyYW1zIiwiZmlsZXBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwidmFsaWRhdGVEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImZpcnN0U2VnbWVudCIsInNwbGl0IiwiZGlyUmVnZXgiLCJ0ZXN0IiwiX3ZhbGlkYXRlRmlsZURvd25sb2FkIiwiY29uZmlnIiwiaXNNYWludGVuYW5jZSIsInVzZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZURvd25sb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiZGVmYXVsdFJlc3BvbnNlSGVhZGVycyIsImlzRmlsZVN0cmVhbWFibGUiLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwicmVzcG9uc2VIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwiX2RhdGEiLCJyZXNvbHZlRXJyb3IiLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsIm1heFVwbG9hZFNpemVPdmVycmlkZSIsInVuZGVmaW5lZCIsIm1hc3RlcktleSIsImxvYWRNYXN0ZXJLZXkiLCJtYXN0ZXJLZXlJcHMiLCJjaGVja0lwIiwiaXAiLCJtYXN0ZXJLZXlJcHNTdG9yZSIsInBhcnNlZEJ5dGVzIiwicGFyc2VTaXplVG9CeXRlcyIsIl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJkZWZhdWx0TWF4Qnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZUJ5dGVzIiwibGltaXQiLCJyYXciLCJ0eXBlIiwiaXNSZWFkT25seSIsImZpbGVVcGxvYWQiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwiZmlsZURhdGEiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJtZXRhZGF0YSIsIklOVkFMSURfSlNPTiIsInRhZ3MiLCJkaXJlY3RvcnlFcnJvciIsImlzQnVmZmVyIiwiYm9keSIsIl9oYW5kbGVCdWZmZXJlZFVwbG9hZCIsIl9oYW5kbGVTdHJlYW1VcGxvYWQiLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsIklOVkFMSURfS0VZX05BTUUiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJzZXREaXJlY3RvcnkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwiYmVmb3JlU2F2ZSIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiYnVmZmVyRGF0YSIsIl9zb3VyY2UiLCJmb3JtYXQiLCJidWZmZXIiLCJmaWxlT3B0aW9ucyIsIl9tZXRhZGF0YSIsImZpbGVUYWdzIiwia2V5cyIsIl90YWdzIiwiYXNzaWduIiwiX2RpcmVjdG9yeSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3VybCIsIl9yZXF1ZXN0VGFzayIsIl9wcmV2aW91c1NhdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFmdGVyU2F2ZSIsImxvZ2dlciIsInN0cmVhbSIsImNvbnRlbnRMZW5ndGgiLCJwYXJzZUludCIsImhhc0V4dGVuc2lvbiIsInNvdXJjZVR5cGUiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsInJhbmdlIiwic3RhcnQiLCJOdW1iZXIiLCJpc05hTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0ICogYXMgTWlkZGxld2FyZXMgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuY29uc3QgdHJpZ2dlcnMgPSByZXF1aXJlKCcuLi90cmlnZ2VycycpO1xuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi9VdGlscycpO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuXG4vKipcbiAqIFdyYXBzIGEgcmVhZGFibGUgc3RyZWFtIGluIGEgUmVhZGFibGUgdGhhdCBlbmZvcmNlcyBhIGJ5dGUgc2l6ZSBsaW1pdC5cbiAqIERhdGEgZmxvdyBpcyBsYXp5OiB0aGUgc291cmNlIGlzIG5vdCByZWFkIHVudGlsIGEgY29uc3VtZXIgc3RhcnRzIHJlYWRpbmdcbiAqIGZyb20gdGhlIHJldHVybmVkIHN0cmVhbSAodmlhIHBpcGUgb3IgJ2RhdGEnIGxpc3RlbmVyKS4gVGhpcyBlbnN1cmVzIHRoZVxuICogY29uc3VtZXIncyBlcnJvciBsaXN0ZW5lciBpcyBhdHRhY2hlZCBiZWZvcmUgYW55IGRhdGEgKG9yIGVycm9yKSBpcyBlbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0oc291cmNlLCBtYXhCeXRlcykge1xuICBsZXQgdG90YWxCeXRlcyA9IDA7XG4gIGxldCBzdGFydGVkID0gZmFsc2U7XG4gIGxldCBzb3VyY2VFbmRlZCA9IGZhbHNlO1xuICBsZXQgb25EYXRhLCBvbkVuZCwgb25FcnJvcjtcblxuICBjb25zdCBvdXRwdXQgPSBuZXcgUmVhZGFibGUoe1xuICAgIHJlYWQoKSB7XG4gICAgICBpZiAoIXN0YXJ0ZWQpIHtcbiAgICAgICAgc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgICAgb25EYXRhID0gKGNodW5rKSA9PiB7XG4gICAgICAgICAgdG90YWxCeXRlcyArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgICAgaWYgKHRvdGFsQnl0ZXMgPiBtYXhCeXRlcykge1xuICAgICAgICAgICAgb3V0cHV0LmRlc3Ryb3koXG4gICAgICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW91dHB1dC5wdXNoKGNodW5rKSkge1xuICAgICAgICAgICAgc291cmNlLnBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG9uRW5kID0gKCkgPT4ge1xuICAgICAgICAgIHNvdXJjZUVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBvdXRwdXQucHVzaChudWxsKTtcbiAgICAgICAgfTtcblxuICAgICAgICBvbkVycm9yID0gKGVycikgPT4gb3V0cHV0LmRlc3Ryb3koZXJyKTtcblxuICAgICAgICBzb3VyY2Uub24oJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgICBzb3VyY2Uub24oJ2VuZCcsIG9uRW5kKTtcbiAgICAgICAgc291cmNlLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXN1bWUgc291cmNlIGluIGNhc2UgaXQgd2FzIHBhdXNlZCBkdWUgdG8gYmFja3ByZXNzdXJlXG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc3Ryb3koZXJyLCBjYWxsYmFjaykge1xuICAgICAgaWYgKG9uRGF0YSkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbkRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRW5kKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAgICAgfVxuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgfVxuICAgICAgLy8gU3VwcHJlc3MgZXJyb3JzIGVtaXR0ZWQgZHVyaW5nIGRyYWluIChlLmcuIGNsaWVudCBkaXNjb25uZWN0KVxuICAgICAgc291cmNlLm9uKCdlcnJvcicsICgpID0+IHt9KTtcbiAgICAgIGlmICghc291cmNlRW5kZWQpIHtcbiAgICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8vIFNlZ21lbnRzIHRoYXQgY29uZmxpY3Qgd2l0aCBzdWItcm91dGVzIHVuZGVyIEdFVCAvZmlsZXMvOmFwcElkLyouIElmIGEgZmlsZVxuLy8gZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIG9uZSBvZiB0aGVzZSwgaXRzIFVSTCB3b3VsZCBtYXRjaCB0aGUgd3Jvbmcgcm91dGVcbi8vIGhhbmRsZXIuIFVwZGF0ZSB0aGlzIGxpc3Qgd2hlbiBhZGRpbmcgbmV3IHN1Yi1yb3V0ZXMgdG8gZXhwcmVzc1JvdXRlcigpLlxuZXhwb3J0IGNvbnN0IFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyA9IFsnbWV0YWRhdGEnXTtcblxuZXhwb3J0IGNsYXNzIEZpbGVzUm91dGVyIHtcbiAgZXhwcmVzc1JvdXRlcih7IG1heFVwbG9hZFNpemUgPSAnMjBNYicgfSA9IHt9KSB7XG4gICAgdmFyIHJvdXRlciA9IGV4cHJlc3MuUm91dGVyKCk7XG4gICAgLy8gTGlnaHR3ZWlnaHQgaW5mbyBpbml0aWFsaXplciBzbyBoYW5kbGVQYXJzZVNlc3Npb24gY2FuIHJlc29sdmUgc2Vzc2lvbiB0b2tlbnMuXG4gICAgLy8gVW5saWtlIFBPU1QvREVMRVRFIHJvdXRlcywgR0VUIGZpbGUgcm91dGVzIHNraXAgaGFuZGxlUGFyc2VIZWFkZXJzICh3aGljaFxuICAgIC8vIG5vcm1hbGx5IHNldHMgcmVxLmluZm8pIGJlY2F1c2UgdGhvc2UgcmVxdWVzdHMgbWF5IG5vdCBjYXJyeSBQYXJzZSBoZWFkZXJzLlxuICAgIGNvbnN0IGluaXRJbmZvID0gKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBpZiAoIXJlcS5pbmZvKSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHJlcS5nZXQoJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbicpO1xuICAgICAgICByZXEuaW5mbyA9IHtcbiAgICAgICAgICBzZXNzaW9uVG9rZW4sXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtSW5zdGFsbGF0aW9uLUlkJyksXG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIG5vIHNlc3Npb24gdG9rZW4gYW5kIG5vIGF1dGggeWV0IChwdWJsaWMgYWNjZXNzKSwgc2V0IGEgbWluaW1hbFxuICAgICAgICAvLyBhdXRoIG9iamVjdCBzbyBoYW5kbGVQYXJzZVNlc3Npb24gc2tpcHMgc2Vzc2lvbiByZXNvbHV0aW9uLlxuICAgICAgICBpZiAoIXNlc3Npb25Ub2tlbiAmJiAhcmVxLmF1dGgpIHtcbiAgICAgICAgICByZXEuYXV0aCA9IHsgaXNNYXN0ZXI6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICAgIC8vIE1ldGFkYXRhIHJvdXRlIG11c3QgY29tZSBiZWZvcmUgdGhlIGNhdGNoLWFsbCBHRVQgcm91dGVcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLypmaWxlcGF0aCcsIGluaXRJbmZvLCBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLypmaWxlcGF0aCcsIGluaXRJbmZvLCBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sIHRoaXMuZ2V0SGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIHRoaXMuX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSxcbiAgICAgIHRoaXMuX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIHJvdXRlci5kZWxldGUoXG4gICAgICAnL2ZpbGVzLypmaWxlcGF0aCcsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICBNaWRkbGV3YXJlcy5lbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5kZWxldGVIYW5kbGVyXG4gICAgKTtcbiAgICByZXR1cm4gcm91dGVyO1xuICB9XG5cbiAgc3RhdGljIF9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKSB7XG4gICAgY29uc3QgcGFydHMgPSByZXEucGFyYW1zLmZpbGVwYXRoO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnRzKSA/IHBhcnRzLmpvaW4oJy8nKSA6IHBhcnRzO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGlyZWN0b3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPiAyNTYpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgcGF0aCBpcyB0b28gbG9uZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIFwiLi5cIi4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5zdGFydHNXaXRoKCcvJykgfHwgZGlyZWN0b3J5LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIFwiL1wiLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy8vJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gY29uc2VjdXRpdmUgc2xhc2hlcy4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFNlZ21lbnQgPSBkaXJlY3Rvcnkuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAoUkVTRVJWRURfRElSRUNUT1JZX1NFR01FTlRTLmluY2x1ZGVzKGZpcnN0U2VnbWVudCkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICBgRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IHdpdGggcmVzZXJ2ZWQgc2VnbWVudCBcIiR7Zmlyc3RTZWdtZW50fVwiLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRpclJlZ2V4ID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfXFwtL10qJC87XG4gICAgaWYgKCFkaXJSZWdleC50ZXN0KGRpcmVjdG9yeSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBfdmFsaWRhdGVGaWxlRG93bmxvYWQocmVxLCBjb25maWcpIHtcbiAgICBjb25zdCBpc01hc3RlciA9IHJlcS5hdXRoPy5pc01hc3RlcjtcbiAgICBjb25zdCBpc01haW50ZW5hbmNlID0gcmVxLmF1dGg/LmlzTWFpbnRlbmFuY2U7XG4gICAgaWYgKGlzTWFzdGVyIHx8IGlzTWFpbnRlbmFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXNlciA9IHJlcS5hdXRoPy51c2VyO1xuICAgIGNvbnN0IGlzTGlua2VkID0gdXNlciAmJiBQYXJzZS5Bbm9ueW1vdXNVdGlscy5pc0xpbmtlZCh1c2VyKTtcbiAgICBpZiAoIWNvbmZpZy5maWxlRG93bmxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAmJiBpc0xpbmtlZCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAnRmlsZSBkb3dubG9hZCBieSBhbm9ueW1vdXMgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy5maWxlRG93bmxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgJ0ZpbGUgZG93bmxvYWQgYnkgYXV0aGVudGljYXRlZCB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZmlnLmZpbGVEb3dubG9hZC5lbmFibGVGb3JQdWJsaWMgJiYgIXVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgJ0ZpbGUgZG93bmxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0SGFuZGxlcihyZXEsIHJlcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgRmlsZXNSb3V0ZXIuX3ZhbGlkYXRlRmlsZURvd25sb2FkKHJlcSwgY29uZmlnKTtcblxuICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgbGV0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGZpbGVBdXRoID0gcmVxLmF1dGg7XG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICBpZiAodHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZTtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzID0geyAnWC1Db250ZW50LVR5cGUtT3B0aW9ucyc6ICdub3NuaWZmJyB9O1xuXG4gICAgICBpZiAoaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlQXV0aFxuICAgICAgICApO1xuICAgICAgICBpZiAoYWZ0ZXJGaW5kPy5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1EaXNwb3NpdGlvbicsIGBhdHRhY2htZW50O2ZpbGVuYW1lPSR7YWZ0ZXJGaW5kLmZpbGU/Ll9uYW1lIHx8IGZpbGVuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFmdGVyRmluZD8ucmVzcG9uc2VIZWFkZXJzID8/IGRlZmF1bHRSZXNwb25zZUhlYWRlcnMpKSB7XG4gICAgICAgICAgcmVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogZGF0YS50b1N0cmluZygnYmFzZTY0JykgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlLCByZXNwb25zZUhlYWRlcnM6IHsgLi4uZGVmYXVsdFJlc3BvbnNlSGVhZGVycyB9IH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG5cbiAgICAgIGlmIChhZnRlckZpbmQ/LmZpbGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoYWZ0ZXJGaW5kLmZpbGUuX25hbWUpO1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oYWZ0ZXJGaW5kLmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICBpZiAoYWZ0ZXJGaW5kLmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1EaXNwb3NpdGlvbicsIGBhdHRhY2htZW50O2ZpbGVuYW1lPSR7YWZ0ZXJGaW5kLmZpbGUuX25hbWV9YCk7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZnRlckZpbmQucmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBmaW5kIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWlkZGxld2FyZSB0aGF0IHJ1bnMgYmVmb3JlIGJvZHkgcGFyc2luZyB0byBoYW5kbGUgaGVhZGVycyB0aGF0IG11c3QgYmVcbiAgICogcmVzb2x2ZWQgYmVmb3JlIHRoZSByZXF1ZXN0IGJvZHkgaXMgY29uc3VtZWQuIEN1cnJlbnRseSBzdXBwb3J0czpcbiAgICpcbiAgICogLSBgWC1QYXJzZS1GaWxlLU1heC1VcGxvYWQtU2l6ZWA6IE92ZXJyaWRlcyB0aGUgc2VydmVyLXdpZGUgYG1heFVwbG9hZFNpemVgXG4gICAqICAgZm9yIHRoaXMgcmVxdWVzdC4gUmVxdWlyZXMgdGhlIG1hc3RlciBrZXkuIFRoZSB2YWx1ZSB1c2VzIHRoZSBzYW1lIGZvcm1hdFxuICAgKiAgIGFzIHRoZSBzZXJ2ZXIgb3B0aW9uIChlLmcuIGAnNTBtYidgLCBgJzFnYidgKS4gU2V0cyBgcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGVgXG4gICAqICAgKGluIGJ5dGVzKSBmb3IgYF9ib2R5UGFyc2luZ01pZGRsZXdhcmVgIHRvIHVzZS5cbiAgICovXG4gIF9lYXJseUhlYWRlcnNNaWRkbGV3YXJlKCkge1xuICAgIHJldHVybiBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGNvbnN0IG1heFVwbG9hZFNpemVPdmVycmlkZSA9IHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemUnKTtcbiAgICAgIGlmICghbWF4VXBsb2FkU2l6ZU92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBJZCA9IHJlcS5nZXQoJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQpO1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAnSW52YWxpZCBhcHBsaWNhdGlvbiBJRC4nLCB1bmRlZmluZWQpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hc3RlcktleSA9IGF3YWl0IGNvbmZpZy5sb2FkTWFzdGVyS2V5KCk7XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1NYXN0ZXItS2V5JykgIT09IG1hc3RlcktleSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcubWFzdGVyS2V5SXBzPy5sZW5ndGggJiYgIU1pZGRsZXdhcmVzLmNoZWNrSXAocmVxLmlwLCBjb25maWcubWFzdGVyS2V5SXBzLCBjb25maWcubWFzdGVyS2V5SXBzU3RvcmUpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIGNvbmZpZyk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHBhcnNlZEJ5dGVzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkQnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemVPdmVycmlkZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEludmFsaWQgbWF4VXBsb2FkU2l6ZSBvdmVycmlkZSB2YWx1ZTogJHttYXhVcGxvYWRTaXplT3ZlcnJpZGV9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID0gcGFyc2VkQnl0ZXM7XG4gICAgICBuZXh0KCk7XG4gICAgfTtcbiAgfVxuXG4gIF9ib2R5UGFyc2luZ01pZGRsZXdhcmUobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IGRlZmF1bHRNYXhCeXRlcyA9IFV0aWxzLnBhcnNlU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSk7XG4gICAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVxLl9tYXhVcGxvYWRTaXplQnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBkZWZhdWx0TWF4Qnl0ZXM7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdCA9IHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID8/IG1heFVwbG9hZFNpemU7XG4gICAgICByZXR1cm4gZXhwcmVzcy5yYXcoeyB0eXBlOiAoKSA9PiB0cnVlLCBsaW1pdCB9KShyZXEsIHJlcywgbmV4dCk7XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBjcmVhdGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aC5pc01hc3RlcjtcbiAgICBjb25zdCBpc01haW50ZW5hbmNlID0gcmVxLmF1dGguaXNNYWludGVuYW5jZTtcbiAgICBpZiAoIWlzTWFzdGVyICYmICFpc01haW50ZW5hbmNlKSB7XG4gICAgICBjb25zdCB1c2VyID0gcmVxLmF1dGgudXNlcjtcbiAgICAgIGNvbnN0IGlzTGlua2VkID0gdXNlciAmJiBQYXJzZS5Bbm9ueW1vdXNVdGlscy5pc0xpbmtlZCh1c2VyKTtcbiAgICAgIGlmICghY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAmJiBpc0xpbmtlZCkge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBhbm9ueW1vdXMgdXNlciBpcyBkaXNhYmxlZC4nKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckF1dGhlbnRpY2F0ZWRVc2VyICYmICFpc0xpbmtlZCAmJiB1c2VyKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgJ0ZpbGUgdXBsb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBwdWJsaWMgaXMgZGlzYWJsZWQuJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtdHlwZScpO1xuXG4gICAgY29uc3QgZXJyb3IgPSBmaWxlc0NvbnRyb2xsZXIudmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlRXh0ZW5zaW9ucyA9IGNvbmZpZy5maWxlVXBsb2FkPy5maWxlRXh0ZW5zaW9ucztcbiAgICBpZiAoIWlzTWFzdGVyICYmIGZpbGVFeHRlbnNpb25zKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkRXh0ZW5zaW9uID0gZXh0ZW5zaW9uID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbGVFeHRlbnNpb25zLnNvbWUoZXh0ID0+IHtcbiAgICAgICAgICBpZiAoZXh0ID09PSAnKicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoZXh0KTtcbiAgICAgICAgICBpZiAocmVnZXgudGVzdChleHRlbnNpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxldCBleHRlbnNpb24gPSBjb250ZW50VHlwZTtcbiAgICAgIGlmIChmaWxlbmFtZSAmJiBmaWxlbmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIGV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gY29udGVudFR5cGUuc3BsaXQoJy8nKVsxXTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmlwIE1JTUUgcGFyYW1ldGVycyAoZS5nLiBcIjtjaGFyc2V0PXV0Zi04XCIpIGFuZCB3aGl0ZXNwYWNlXG4gICAgICBleHRlbnNpb24gPSBleHRlbnNpb24/LnNwbGl0KCc7JylbMF0/LnJlcGxhY2UoL1xccysvZywgJycpO1xuXG4gICAgICBpZiAoZXh0ZW5zaW9uICYmICFpc1ZhbGlkRXh0ZW5zaW9uKGV4dGVuc2lvbikpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgRmlsZSB1cGxvYWQgb2YgZXh0ZW5zaW9uICR7ZXh0ZW5zaW9ufSBpcyBkaXNhYmxlZC5gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9yIHN0cmVhbWluZyB1cGxvYWRzLCByZWFkIGZpbGUgZGF0YSBmcm9tIGhlYWRlcnMgc2luY2UgdGhlIGJvZHkgaXMgdGhlIHJhdyBzdHJlYW1cbiAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1VcGxvYWQtTW9kZScpID09PSAnc3RyZWFtJykge1xuICAgICAgcmVxLmZpbGVEYXRhID0ge307XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpKSB7XG4gICAgICAgIHJlcS5maWxlRGF0YS5kaXJlY3RvcnkgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5Jyk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEubWV0YWRhdGEgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtTWV0YWRhdGEgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtVGFncycpKTtcbiAgICAgICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXEuZmlsZURhdGEudGFncyA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1UYWdzIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGlyZWN0b3J5IG9wdGlvbiAocmVxdWlyZXMgbWFzdGVyIGtleSlcbiAgICBjb25zdCBkaXJlY3RvcnkgPSByZXEuZmlsZURhdGE/LmRpcmVjdG9yeTtcbiAgICBpZiAoZGlyZWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghaXNNYXN0ZXIpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAgICAgJ0RpcmVjdG9yeSBjYW4gb25seSBiZSBzZXQgdXNpbmcgdGhlIE1hc3RlciBLZXkuJ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGlyZWN0b3J5RXJyb3IgPSBGaWxlc1JvdXRlci52YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgICAgaWYgKGRpcmVjdG9yeUVycm9yKSB7XG4gICAgICAgIG5leHQoZGlyZWN0b3J5RXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgYmFzZWQgb24gd2hldGhlciB0aGUgYm9keSB3YXMgYnVmZmVyZWRcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHJlcS5ib2R5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZVN0cmVhbVVwbG9hZChyZXEsIHJlcywgbmV4dCk7XG4gIH1cblxuICBhc3luYyBfaGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtdHlwZScpO1xuXG4gICAgaWYgKCFyZXEuYm9keSB8fCAhcmVxLmJvZHkubGVuZ3RoKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdJbnZhbGlkIGZpbGUgdXBsb2FkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlNjQgPSByZXEuYm9keS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NCB9LCBjb250ZW50VHlwZSk7XG4gICAgY29uc3QgeyBtZXRhZGF0YSA9IHt9LCB0YWdzID0ge30sIGRpcmVjdG9yeSB9ID0gcmVxLmZpbGVEYXRhIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBTY2FuIHJlcXVlc3QgZGF0YSBmb3IgZGVuaWVkIGtleXdvcmRzXG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgdGFncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbGUuc2V0VGFncyh0YWdzKTtcbiAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICBmaWxlLnNldERpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgIH1cbiAgICBjb25zdCBmaWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHJlcS5ib2R5KTtcbiAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSB9O1xuICAgIHRyeSB7XG4gICAgICAvLyBydW4gYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZVNhdmUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIGlmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgLy8gc2V0IGZpbGVTaXplIHRvIG51bGwgYmVjYXVzZSB3ZSB3b250IGtub3cgaG93IGJpZyBpdCBpcyBoZXJlXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCBza2lwIHNhdmluZyBhbnl0aGluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlU2l6ZVxuICAgICAgICBsZXQgYnVmZmVyRGF0YTtcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy5mb3JtYXQgPT09ICdidWZmZXInKSB7XG4gICAgICAgICAgYnVmZmVyRGF0YSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlLmJ1ZmZlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gQnVmZmVyLmZyb20oZmlsZU9iamVjdC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGJ1ZmZlckRhdGEpO1xuICAgICAgICAvLyBwcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gc29tZSBzMy1jb21wYXRpYmxlIHByb3ZpZGVycyAoRGlnaXRhbE9jZWFuLCBMaW5vZGUpIGRvIG5vdCBhY2NlcHQgdGFnc1xuICAgICAgICAvLyBzbyB3ZSBkbyBub3QgaW5jbHVkZSB0aGUgdGFncyBvcHRpb24gaWYgaXQgaXMgZW1wdHkuXG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG4gICAgICAgIC8vIHNhdmUgZmlsZVxuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBidWZmZXJEYXRhLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fc291cmNlLnR5cGUsXG4gICAgICAgICAgZmlsZU9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gcnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVPYmplY3QuZmlsZS5fbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2hhbmRsZVN0cmVhbVVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGxldCBjb250ZW50VHlwZSA9IHJlcS5nZXQoJ0NvbnRlbnQtVHlwZScpO1xuICAgIGNvbnN0IG1heEJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplQnl0ZXM7XG4gICAgbGV0IHN0cmVhbTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBFYXJseSByZWplY3Rpb24gdmlhIENvbnRlbnQtTGVuZ3RoIGhlYWRlclxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyk7XG4gICAgICBpZiAoY29udGVudExlbmd0aCAmJiBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkgPiBtYXhCeXRlcykge1xuICAgICAgICByZXEucmVzdW1lKCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICBgRmlsZSBzaXplIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkOiAke21heEJ5dGVzfSBieXRlcy5gXG4gICAgICAgICkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG5cbiAgICAgIC8vIEluZmVyIGNvbnRlbnQgdHlwZSBmcm9tIGV4dGVuc2lvbiBvciBhZGQgZXh0ZW5zaW9uIGZyb20gY29udGVudCB0eXBlXG4gICAgICBjb25zdCBoYXNFeHRlbnNpb24gPSBmaWxlbmFtZSAmJiBmaWxlbmFtZS5pbmNsdWRlcygnLicpO1xuICAgICAgaWYgKGhhc0V4dGVuc2lvbiAmJiAhY29udGVudFR5cGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgfSBlbHNlIGlmICghaGFzRXh0ZW5zaW9uICYmIGNvbnRlbnRUeXBlKSB7XG4gICAgICAgIC8vIGV4dGVuc2lvbiB3aWxsIGJlIGFkZGVkIGJ5IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBzaXplLWxpbWl0ZWQgc3RyZWFtIHdyYXBwaW5nIHRoZSByZXF1ZXN0XG4gICAgICBzdHJlYW0gPSBjcmVhdGVTaXplTGltaXRlZFN0cmVhbShyZXEsIG1heEJ5dGVzKTtcblxuICAgICAgLy8gQnVpbGQgYSBQYXJzZS5GaWxlIHdpdGggbm8gX2RhdGEgKHN0cmVhbWluZyBtb2RlKVxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgeyBtZXRhZGF0YSA9IHt9LCB0YWdzID0ge30sIGRpcmVjdG9yeSB9ID0gcmVxLmZpbGVEYXRhIHx8IHt9O1xuXG4gICAgICAvLyBWYWxpZGF0ZSBtZXRhZGF0YSBhbmQgdGFncyBmb3IgcHJvaGliaXRlZCBrZXl3b3Jkc1xuICAgICAgdHJ5IHtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgdGFncyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZpbGUuc2V0VGFncyh0YWdzKTtcbiAgICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgICBmaWxlLnNldERpcmVjdG9yeShkaXJlY3RvcnkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWxlU2l6ZSA9IHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJylcbiAgICAgICAgPyBwYXJzZUludChyZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpLCAxMClcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUsIHN0cmVhbTogdHJ1ZSB9O1xuXG4gICAgICAvLyBSdW4gYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZVNhdmUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG5cbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gSWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkLCBjaGVjayBpZiBpdCdzIGFuIGFscmVhZHkgc2F2ZWQgZmlsZVxuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQgaW5zdGFuY2VvZiBQYXJzZS5GaWxlKSB7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZSA9IHRyaWdnZXJSZXN1bHQ7XG4gICAgICAgIGlmICh0cmlnZ2VyUmVzdWx0LnVybCgpKSB7XG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlU2l6ZSA9IG51bGw7XG4gICAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHVybDogdHJpZ2dlclJlc3VsdC51cmwoKSxcbiAgICAgICAgICAgIG5hbWU6IHRyaWdnZXJSZXN1bHQuX25hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0XG4gICAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkLCBza2lwIHNhdmluZ1xuICAgICAgaWYgKCFzYXZlUmVzdWx0KSB7XG4gICAgICAgIC8vIFByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIGluY2x1ZGUgZGlyZWN0b3J5IGlmIHNldCAoZnJvbSBjbGllbnQgcmVxdWVzdCBvciBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyKVxuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9kaXJlY3RvcnkpIHtcbiAgICAgICAgICBmaWxlT3B0aW9ucy5kaXJlY3RvcnkgPSBmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhc3Mgc3RyZWFtIGRpcmVjdGx5IHRvIGZpbGVzQ29udHJvbGxlciDigJQgaXQgd2lsbCBidWZmZXIgaWYgYWRhcHRlciBkb2Vzbid0IHN1cHBvcnQgc3RyZWFtaW5nXG4gICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZT8udHlwZSB8fCBjb250ZW50VHlwZTtcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgc3RyZWFtLFxuICAgICAgICAgIHNvdXJjZVR5cGUsXG4gICAgICAgICAgZmlsZU9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBVcGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gRGVzdHJveSBzdHJlYW0gdG8gcmVtb3ZlIGxpc3RlbmVycyBhbmQgZHJhaW4gcmVxdWVzdCwgb3IgcmVzdW1lIGRpcmVjdGx5XG4gICAgICBpZiAoc3RyZWFtKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEucmVzdW1lKCk7XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBzdG9yZSBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gZGVsZXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IHJlcS5jb25maWc7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIC8vIHJ1biBiZWZvcmVEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSk7XG4gICAgICBmaWxlLl91cmwgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24ocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemU6IG51bGwgfTtcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZURlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICAvLyBkZWxldGUgZmlsZVxuICAgICAgYXdhaXQgZmlsZXNDb250cm9sbGVyLmRlbGV0ZUZpbGUocmVxLmNvbmZpZywgZmlsZW5hbWUpO1xuICAgICAgLy8gcnVuIGFmdGVyRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckRlbGV0ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gdXNlZnVsIEpTT04gaGVyZT9cbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGEgZmlsZTogJywgZSk7XG4gICAgICBjb25zdCBlcnJvciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkZJTEVfREVMRVRFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGRlbGV0ZSBmaWxlLicsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG1ldGFkYXRhSGFuZGxlcihyZXEsIHJlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICByZXMuanNvbih7fSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEZpbGVzUm91dGVyLl92YWxpZGF0ZUZpbGVEb3dubG9hZChyZXEsIGNvbmZpZyk7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gY29uZmlnO1xuICAgICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IHJlcS5hdXRoO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdC5maWxlLl9uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGdldCBmaWxlIG1ldGFkYXRhLicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBb0QsU0FBQUUsd0JBQUFNLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFSLHVCQUFBLFlBQUFBLENBQUFNLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFB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
|
|
778
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsImluaXRJbmZvIiwicmVxIiwicmVzIiwibmV4dCIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImF1dGgiLCJpc01hc3RlciIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwiSU5WQUxJRF9GSUxFX05BTUUiLCJfZWFybHlIZWFkZXJzTWlkZGxld2FyZSIsIl9ib2R5UGFyc2luZ01pZGRsZXdhcmUiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJjcmVhdGVIYW5kbGVyIiwiYmluZCIsImRlbGV0ZSIsImVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJkZWxldGVIYW5kbGVyIiwiX2dldEZpbGVuYW1lRnJvbVBhcmFtcyIsInBhcnRzIiwicGFyYW1zIiwiZmlsZXBhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwidmFsaWRhdGVEaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImZpcnN0U2VnbWVudCIsInNwbGl0IiwiZGlyUmVnZXgiLCJ0ZXN0IiwiX3ZhbGlkYXRlRmlsZURvd25sb2FkIiwiY29uZmlnIiwiaXNNYWludGVuYW5jZSIsInVzZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZURvd25sb2FkIiwiZW5hYmxlRm9yQW5vbnltb3VzVXNlciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwiZmlsZUF1dGgiLCJ0cmlnZ2VyUmVzdWx0IiwibWF5YmVSdW5GaWxlVHJpZ2dlciIsIlR5cGVzIiwiYmVmb3JlRmluZCIsIl9uYW1lIiwiZGVmYXVsdFJlc3BvbnNlSGVhZGVycyIsImlzRmlsZVN0cmVhbWFibGUiLCJhZnRlckZpbmQiLCJmb3JjZURvd25sb2FkIiwicmVzcG9uc2VIZWFkZXJzIiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiaGFuZGxlRmlsZVN0cmVhbSIsImNhdGNoIiwiZW5kIiwiZGF0YSIsImdldEZpbGVEYXRhIiwidG9TdHJpbmciLCJCdWZmZXIiLCJmcm9tIiwiX2RhdGEiLCJyZXNvbHZlRXJyb3IiLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsIm1heFVwbG9hZFNpemVPdmVycmlkZSIsInVuZGVmaW5lZCIsIm1hc3RlcktleSIsImxvYWRNYXN0ZXJLZXkiLCJtYXN0ZXJLZXlJcHMiLCJjaGVja0lwIiwiaXAiLCJtYXN0ZXJLZXlJcHNTdG9yZSIsInBhcnNlZEJ5dGVzIiwicGFyc2VTaXplVG9CeXRlcyIsIl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJkZWZhdWx0TWF4Qnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZUJ5dGVzIiwibGltaXQiLCJyYXciLCJ0eXBlIiwiaXNSZWFkT25seSIsImZpbGVVcGxvYWQiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwiZ2V0RmlsZUV4dGVuc2lvbiIsInJlcGxhY2UiLCJmaWxlRGF0YSIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIm1ldGFkYXRhIiwiSU5WQUxJRF9KU09OIiwidGFncyIsImRpcmVjdG9yeUVycm9yIiwiaXNCdWZmZXIiLCJib2R5IiwiX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkIiwiX2hhbmRsZVN0cmVhbVVwbG9hZCIsImNoZWNrUHJvaGliaXRlZEtleXdvcmRzIiwiSU5WQUxJRF9LRVlfTkFNRSIsInNldFRhZ3MiLCJzZXRNZXRhZGF0YSIsInNldERpcmVjdG9yeSIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVPYmplY3QiLCJiZWZvcmVTYXZlIiwic2F2ZVJlc3VsdCIsInVybCIsIm5hbWUiLCJidWZmZXJEYXRhIiwiX3NvdXJjZSIsImZvcm1hdCIsImJ1ZmZlciIsImZpbGVPcHRpb25zIiwiX21ldGFkYXRhIiwiZmlsZVRhZ3MiLCJrZXlzIiwiX3RhZ3MiLCJhc3NpZ24iLCJfZGlyZWN0b3J5IiwiY3JlYXRlRmlsZVJlc3VsdCIsImNyZWF0ZUZpbGUiLCJfdXJsIiwiX3JlcXVlc3RUYXNrIiwiX3ByZXZpb3VzU2F2ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWZ0ZXJTYXZlIiwibG9nZ2VyIiwic3RyZWFtIiwiY29udGVudExlbmd0aCIsInBhcnNlSW50IiwiaGFzRXh0ZW5zaW9uIiwic291cmNlVHlwZSIsImFkYXB0ZXIiLCJnZXRGaWxlTG9jYXRpb24iLCJiZWZvcmVEZWxldGUiLCJkZWxldGVGaWxlIiwiYWZ0ZXJEZWxldGUiLCJGSUxFX0RFTEVURV9FUlJPUiIsImdldE1ldGFkYXRhIiwicmFuZ2UiLCJzdGFydCIsIk51bWJlciIsImlzTmFOIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL1JvdXRlcnMvRmlsZXNSb3V0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgKiBhcyBNaWRkbGV3YXJlcyBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5jb25zdCB0cmlnZ2VycyA9IHJlcXVpcmUoJy4uL3RyaWdnZXJzJyk7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzJyk7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IgfSBmcm9tICcuLi9FcnJvcic7XG5cbi8qKlxuICogV3JhcHMgYSByZWFkYWJsZSBzdHJlYW0gaW4gYSBSZWFkYWJsZSB0aGF0IGVuZm9yY2VzIGEgYnl0ZSBzaXplIGxpbWl0LlxuICogRGF0YSBmbG93IGlzIGxhenk6IHRoZSBzb3VyY2UgaXMgbm90IHJlYWQgdW50aWwgYSBjb25zdW1lciBzdGFydHMgcmVhZGluZ1xuICogZnJvbSB0aGUgcmV0dXJuZWQgc3RyZWFtICh2aWEgcGlwZSBvciAnZGF0YScgbGlzdGVuZXIpLiBUaGlzIGVuc3VyZXMgdGhlXG4gKiBjb25zdW1lcidzIGVycm9yIGxpc3RlbmVyIGlzIGF0dGFjaGVkIGJlZm9yZSBhbnkgZGF0YSAob3IgZXJyb3IpIGlzIGVtaXR0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaXplTGltaXRlZFN0cmVhbShzb3VyY2UsIG1heEJ5dGVzKSB7XG4gIGxldCB0b3RhbEJ5dGVzID0gMDtcbiAgbGV0IHN0YXJ0ZWQgPSBmYWxzZTtcbiAgbGV0IHNvdXJjZUVuZGVkID0gZmFsc2U7XG4gIGxldCBvbkRhdGEsIG9uRW5kLCBvbkVycm9yO1xuXG4gIGNvbnN0IG91dHB1dCA9IG5ldyBSZWFkYWJsZSh7XG4gICAgcmVhZCgpIHtcbiAgICAgIGlmICghc3RhcnRlZCkge1xuICAgICAgICBzdGFydGVkID0gdHJ1ZTtcblxuICAgICAgICBvbkRhdGEgPSAoY2h1bmspID0+IHtcbiAgICAgICAgICB0b3RhbEJ5dGVzICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAodG90YWxCeXRlcyA+IG1heEJ5dGVzKSB7XG4gICAgICAgICAgICBvdXRwdXQuZGVzdHJveShcbiAgICAgICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgICAgICBgRmlsZSBzaXplIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkOiAke21heEJ5dGVzfSBieXRlcy5gXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghb3V0cHV0LnB1c2goY2h1bmspKSB7XG4gICAgICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FbmQgPSAoKSA9PiB7XG4gICAgICAgICAgc291cmNlRW5kZWQgPSB0cnVlO1xuICAgICAgICAgIG91dHB1dC5wdXNoKG51bGwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9uRXJyb3IgPSAoZXJyKSA9PiBvdXRwdXQuZGVzdHJveShlcnIpO1xuXG4gICAgICAgIHNvdXJjZS5vbignZGF0YScsIG9uRGF0YSk7XG4gICAgICAgIHNvdXJjZS5vbignZW5kJywgb25FbmQpO1xuICAgICAgICBzb3VyY2Uub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3VtZSBzb3VyY2UgaW4gY2FzZSBpdCB3YXMgcGF1c2VkIGR1ZSB0byBiYWNrcHJlc3N1cmVcbiAgICAgIGlmICghc291cmNlRW5kZWQpIHtcbiAgICAgICAgc291cmNlLnJlc3VtZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveShlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAob25EYXRhKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZGF0YScsIG9uRGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAob25FbmQpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkVuZCk7XG4gICAgICB9XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICB9XG4gICAgICAvLyBTdXBwcmVzcyBlcnJvcnMgZW1pdHRlZCBkdXJpbmcgZHJhaW4gKGUuZy4gY2xpZW50IGRpc2Nvbm5lY3QpXG4gICAgICBzb3VyY2Uub24oJ2Vycm9yJywgKCkgPT4ge30pO1xuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLy8gU2VnbWVudHMgdGhhdCBjb25mbGljdCB3aXRoIHN1Yi1yb3V0ZXMgdW5kZXIgR0VUIC9maWxlcy86YXBwSWQvKi4gSWYgYSBmaWxlXG4vLyBkaXJlY3Rvcnkgc3RhcnRzIHdpdGggb25lIG9mIHRoZXNlLCBpdHMgVVJMIHdvdWxkIG1hdGNoIHRoZSB3cm9uZyByb3V0ZVxuLy8gaGFuZGxlci4gVXBkYXRlIHRoaXMgbGlzdCB3aGVuIGFkZGluZyBuZXcgc3ViLXJvdXRlcyB0byBleHByZXNzUm91dGVyKCkuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfRElSRUNUT1JZX1NFR01FTlRTID0gWydtZXRhZGF0YSddO1xuXG5leHBvcnQgY2xhc3MgRmlsZXNSb3V0ZXIge1xuICBleHByZXNzUm91dGVyKHsgbWF4VXBsb2FkU2l6ZSA9ICcyME1iJyB9ID0ge30pIHtcbiAgICB2YXIgcm91dGVyID0gZXhwcmVzcy5Sb3V0ZXIoKTtcbiAgICAvLyBMaWdodHdlaWdodCBpbmZvIGluaXRpYWxpemVyIHNvIGhhbmRsZVBhcnNlU2Vzc2lvbiBjYW4gcmVzb2x2ZSBzZXNzaW9uIHRva2Vucy5cbiAgICAvLyBVbmxpa2UgUE9TVC9ERUxFVEUgcm91dGVzLCBHRVQgZmlsZSByb3V0ZXMgc2tpcCBoYW5kbGVQYXJzZUhlYWRlcnMgKHdoaWNoXG4gICAgLy8gbm9ybWFsbHkgc2V0cyByZXEuaW5mbykgYmVjYXVzZSB0aG9zZSByZXF1ZXN0cyBtYXkgbm90IGNhcnJ5IFBhcnNlIGhlYWRlcnMuXG4gICAgY29uc3QgaW5pdEluZm8gPSAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmICghcmVxLmluZm8pIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyk7XG4gICAgICAgIHJlcS5pbmZvID0ge1xuICAgICAgICAgIHNlc3Npb25Ub2tlbixcbiAgICAgICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgbm8gc2Vzc2lvbiB0b2tlbiBhbmQgbm8gYXV0aCB5ZXQgKHB1YmxpYyBhY2Nlc3MpLCBzZXQgYSBtaW5pbWFsXG4gICAgICAgIC8vIGF1dGggb2JqZWN0IHNvIGhhbmRsZVBhcnNlU2Vzc2lvbiBza2lwcyBzZXNzaW9uIHJlc29sdXRpb24uXG4gICAgICAgIGlmICghc2Vzc2lvblRva2VuICYmICFyZXEuYXV0aCkge1xuICAgICAgICAgIHJlcS5hdXRoID0geyBpc01hc3RlcjogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH07XG4gICAgLy8gTWV0YWRhdGEgcm91dGUgbXVzdCBjb21lIGJlZm9yZSB0aGUgY2F0Y2gtYWxsIEdFVCByb3V0ZVxuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvbWV0YWRhdGEvKmZpbGVwYXRoJywgaW5pdEluZm8sIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbiwgdGhpcy5tZXRhZGF0YUhhbmRsZXIpO1xuICAgIHJvdXRlci5nZXQoJy9maWxlcy86YXBwSWQvKmZpbGVwYXRoJywgaW5pdEluZm8sIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbiwgdGhpcy5nZXRIYW5kbGVyKTtcblxuICAgIHJvdXRlci5wb3N0KCcvZmlsZXMnLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRmlsZW5hbWUgbm90IHByb3ZpZGVkLicpKTtcbiAgICB9KTtcblxuICAgIHJvdXRlci5wb3N0KFxuICAgICAgJy9maWxlcy86ZmlsZW5hbWUnLFxuICAgICAgdGhpcy5fZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpLFxuICAgICAgdGhpcy5fYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VIZWFkZXJzLFxuICAgICAgTWlkZGxld2FyZXMuaGFuZGxlUGFyc2VTZXNzaW9uLFxuICAgICAgdGhpcy5jcmVhdGVIYW5kbGVyLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgcm91dGVyLmRlbGV0ZShcbiAgICAgICcvZmlsZXMvKmZpbGVwYXRoJyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIE1pZGRsZXdhcmVzLmVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MsXG4gICAgICB0aGlzLmRlbGV0ZUhhbmRsZXJcbiAgICApO1xuICAgIHJldHVybiByb3V0ZXI7XG4gIH1cblxuICBzdGF0aWMgX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHJlcS5wYXJhbXMuZmlsZXBhdGg7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydHMpID8gcGFydHMuam9pbignLycpIDogcGFydHM7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkaXJlY3RvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3QgYmUgYSBzdHJpbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA+IDI1Nikge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBwYXRoIGlzIHRvbyBsb25nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gXCIuLlwiLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy8nKSB8fCBkaXJlY3RvcnkuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgb3IgZW5kIHdpdGggXCIvXCIuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLy8nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBjb25zZWN1dGl2ZSBzbGFzaGVzLidcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IGRpcmVjdG9yeS5zcGxpdCgnLycpWzBdO1xuICAgIGlmIChSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMuaW5jbHVkZXMoZmlyc3RTZWdtZW50KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgIGBEaXJlY3RvcnkgbXVzdCBub3Qgc3RhcnQgd2l0aCByZXNlcnZlZCBzZWdtZW50IFwiJHtmaXJzdFNlZ21lbnR9XCIuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGlyUmVnZXggPSAvXlthLXpBLVowLTldW2EtekEtWjAtOV9cXC0vXSokLztcbiAgICBpZiAoIWRpclJlZ2V4LnRlc3QoZGlyZWN0b3J5KSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsXG4gICAgICAgICdEaXJlY3RvcnkgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIF92YWxpZGF0ZUZpbGVEb3dubG9hZChyZXEsIGNvbmZpZykge1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGg/LmlzTWFzdGVyO1xuICAgIGNvbnN0IGlzTWFpbnRlbmFuY2UgPSByZXEuYXV0aD8uaXNNYWludGVuYW5jZTtcbiAgICBpZiAoaXNNYXN0ZXIgfHwgaXNNYWludGVuYW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1c2VyID0gcmVxLmF1dGg/LnVzZXI7XG4gICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgIGlmICghY29uZmlnLmZpbGVEb3dubG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICYmIGlzTGlua2VkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdGaWxlIGRvd25sb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghY29uZmlnLmZpbGVEb3dubG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAnRmlsZSBkb3dubG9hZCBieSBhdXRoZW50aWNhdGVkIHVzZXIgaXMgZGlzYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFjb25maWcuZmlsZURvd25sb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICAnRmlsZSBkb3dubG9hZCBieSBwdWJsaWMgaXMgZGlzYWJsZWQuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAnSW52YWxpZCBhcHBsaWNhdGlvbiBJRC4nLCBjb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBGaWxlc1JvdXRlci5fdmFsaWRhdGVGaWxlRG93bmxvYWQocmVxLCBjb25maWcpO1xuXG4gICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcbiAgICAgIGxldCBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICBsZXQgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSByZXEuYXV0aDtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lO1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRSZXNwb25zZUhlYWRlcnMgPSB7ICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJzogJ25vc25pZmYnIH07XG5cbiAgICAgIGlmIChpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSkge1xuICAgICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlLCByZXNwb25zZUhlYWRlcnM6IHsgLi4uZGVmYXVsdFJlc3BvbnNlSGVhZGVycyB9IH0sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVBdXRoXG4gICAgICAgICk7XG4gICAgICAgIGlmIChhZnRlckZpbmQ/LmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZT8uX25hbWUgfHwgZmlsZW5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kPy5yZXNwb25zZUhlYWRlcnMgPz8gZGVmYXVsdFJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVzQ29udHJvbGxlci5oYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiBkYXRhLnRvU3RyaW5nKCdiYXNlNjQnKSB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBhZnRlckZpbmQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSwgZm9yY2VEb3dubG9hZDogZmFsc2UsIHJlc3BvbnNlSGVhZGVyczogeyAuLi5kZWZhdWx0UmVzcG9uc2VIZWFkZXJzIH0gfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcblxuICAgICAgaWYgKGFmdGVyRmluZD8uZmlsZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShhZnRlckZpbmQuZmlsZS5fbmFtZSk7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShhZnRlckZpbmQuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgfVxuXG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZSk7XG4gICAgICByZXMuc2V0KCdDb250ZW50LUxlbmd0aCcsIGRhdGEubGVuZ3RoKTtcbiAgICAgIGlmIChhZnRlckZpbmQuZm9yY2VEb3dubG9hZCkge1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJywgYGF0dGFjaG1lbnQ7ZmlsZW5hbWU9JHthZnRlckZpbmQuZmlsZS5fbmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChhZnRlckZpbmQucmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpKSB7XG4gICAgICAgICAgcmVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzLmVuZChkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IGZpbmQgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNaWRkbGV3YXJlIHRoYXQgcnVucyBiZWZvcmUgYm9keSBwYXJzaW5nIHRvIGhhbmRsZSBoZWFkZXJzIHRoYXQgbXVzdCBiZVxuICAgKiByZXNvbHZlZCBiZWZvcmUgdGhlIHJlcXVlc3QgYm9keSBpcyBjb25zdW1lZC4gQ3VycmVudGx5IHN1cHBvcnRzOlxuICAgKlxuICAgKiAtIGBYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplYDogT3ZlcnJpZGVzIHRoZSBzZXJ2ZXItd2lkZSBgbWF4VXBsb2FkU2l6ZWBcbiAgICogICBmb3IgdGhpcyByZXF1ZXN0LiBSZXF1aXJlcyB0aGUgbWFzdGVyIGtleS4gVGhlIHZhbHVlIHVzZXMgdGhlIHNhbWUgZm9ybWF0XG4gICAqICAgYXMgdGhlIHNlcnZlciBvcHRpb24gKGUuZy4gYCc1MG1iJ2AsIGAnMWdiJ2ApLiBTZXRzIGByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZWBcbiAgICogICAoaW4gYnl0ZXMpIGZvciBgX2JvZHlQYXJzaW5nTWlkZGxld2FyZWAgdG8gdXNlLlxuICAgKi9cbiAgX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSB7XG4gICAgcmV0dXJuIGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgY29uc3QgbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLU1heC1VcGxvYWQtU2l6ZScpO1xuICAgICAgaWYgKCFtYXhVcGxvYWRTaXplT3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcElkID0gcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpO1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChhcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIHVuZGVmaW5lZCk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgY29uZmlnLmxvYWRNYXN0ZXJLZXkoKTtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSAhPT0gbWFzdGVyS2V5KSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIGNvbmZpZyk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5tYXN0ZXJLZXlJcHM/Lmxlbmd0aCAmJiAhTWlkZGxld2FyZXMuY2hlY2tJcChyZXEuaXAsIGNvbmZpZy5tYXN0ZXJLZXlJcHMsIGNvbmZpZy5tYXN0ZXJLZXlJcHNTdG9yZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcGFyc2VkQnl0ZXM7XG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRCeXRlcyA9IFV0aWxzLnBhcnNlU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZU92ZXJyaWRlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICBgSW52YWxpZCBtYXhVcGxvYWRTaXplIG92ZXJyaWRlIHZhbHVlOiAke21heFVwbG9hZFNpemVPdmVycmlkZX1gXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSBwYXJzZWRCeXRlcztcbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSB7XG4gICAgY29uc3QgZGVmYXVsdE1heEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplKTtcbiAgICByZXR1cm4gKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1VcGxvYWQtTW9kZScpID09PSAnc3RyZWFtJykge1xuICAgICAgICByZXEuX21heFVwbG9hZFNpemVCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID8/IGRlZmF1bHRNYXhCeXRlcztcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gbWF4VXBsb2FkU2l6ZTtcbiAgICAgIHJldHVybiBleHByZXNzLnJhdyh7IHR5cGU6ICgpID0+IHRydWUsIGxpbWl0IH0pKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGNyZWF0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBpc01hc3RlciA9IHJlcS5hdXRoLmlzTWFzdGVyO1xuICAgIGNvbnN0IGlzTWFpbnRlbmFuY2UgPSByZXEuYXV0aC5pc01haW50ZW5hbmNlO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgIWlzTWFpbnRlbmFuY2UpIHtcbiAgICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aC51c2VyO1xuICAgICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgICAgaWYgKCFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBbm9ueW1vdXNVc2VyICYmIGlzTGlua2VkKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLicpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgICAgbmV4dChcbiAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgICAnRmlsZSB1cGxvYWQgYnkgYXV0aGVudGljYXRlZCB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IHB1YmxpYyBpcyBkaXNhYmxlZC4nKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGV0IGV4dGVuc2lvbiA9IFV0aWxzLmdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWUpO1xuICAgICAgLy8gU3RyaXAgTUlNRSBwYXJhbWV0ZXJzIChlLmcuIFwiO2NoYXJzZXQ9dXRmLThcIikgYW5kIHdoaXRlc3BhY2VcbiAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbj8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICAvLyBJZiB0aGUgZmlsZW5hbWUgaGFzIG5vIHVzYWJsZSBleHRlbnNpb24gKG5vIGRvdCwgdHJhaWxpbmcgZG90LCBvclxuICAgICAgLy8gd2hpdGVzcGFjZS1vbmx5IHN1ZmZpeCksIGZhbGwgYmFjayB0byB0aGUgQ29udGVudC1UeXBlIHN1YnR5cGUg4oCUIHNhbWVcbiAgICAgIC8vIGFzIGEgZG90bGVzcyBmaWxlbmFtZS5cbiAgICAgIGlmICghZXh0ZW5zaW9uICYmIGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gY29udGVudFR5cGUuc3BsaXQoJy8nKVsxXT8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICB9XG4gICAgICAvLyBMYXN0IHJlc29ydCBmb3IgbWFsZm9ybWVkIGlucHV0cyAoZS5nLiBDb250ZW50LVR5cGUgd2l0aG91dCBhIHNsYXNoKTpcbiAgICAgIC8vIHVzZSB0aGUgcmF3IENvbnRlbnQtVHlwZSBzbyB0aGUgZXhpc3RpbmcgcmVqZWN0aW9uIHBhdGggc3RpbGwgZmlyZXMuXG4gICAgICBpZiAoIWV4dGVuc2lvbiAmJiBjb250ZW50VHlwZSkge1xuICAgICAgICBleHRlbnNpb24gPSBjb250ZW50VHlwZS5zcGxpdCgnOycpWzBdPy5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dGVuc2lvbn0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBzdHJlYW1pbmcgdXBsb2FkcywgcmVhZCBmaWxlIGRhdGEgZnJvbSBoZWFkZXJzIHNpbmNlIHRoZSBib2R5IGlzIHRoZSByYXcgc3RyZWFtXG4gICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgIHJlcS5maWxlRGF0YSA9IHt9O1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKSkge1xuICAgICAgICByZXEuZmlsZURhdGEuZGlyZWN0b3J5ID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLm1ldGFkYXRhID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLU1ldGFkYXRhIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLnRhZ3MgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtVGFncyBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGRpcmVjdG9yeSBvcHRpb24gKHJlcXVpcmVzIG1hc3RlciBrZXkpXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gcmVxLmZpbGVEYXRhPy5kaXJlY3Rvcnk7XG4gICAgaWYgKGRpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzTWFzdGVyKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgICdEaXJlY3RvcnkgY2FuIG9ubHkgYmUgc2V0IHVzaW5nIHRoZSBNYXN0ZXIgS2V5LidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdG9yeUVycm9yID0gRmlsZXNSb3V0ZXIudmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIGlmIChkaXJlY3RvcnlFcnJvcikge1xuICAgICAgICBuZXh0KGRpcmVjdG9yeUVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGJvZHkgd2FzIGJ1ZmZlcmVkXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXEuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGlmICghcmVxLmJvZHkgfHwgIXJlcS5ib2R5Lmxlbmd0aCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBmaWxlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXEuYm9keSk7XG4gICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUgfTtcbiAgICB0cnkge1xuICAgICAgLy8gcnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBpZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIC8vIHNldCBmaWxlU2l6ZSB0byBudWxsIGJlY2F1c2Ugd2Ugd29udCBrbm93IGhvdyBiaWcgaXQgaXMgaGVyZVxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgc2tpcCBzYXZpbmcgYW55dGhpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgbGV0IGJ1ZmZlckRhdGE7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZT8uZm9ybWF0ID09PSAnYnVmZmVyJykge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS5idWZmZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChidWZmZXJEYXRhKTtcbiAgICAgICAgLy8gcHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIC8vIHNvbWUgczMtY29tcGF0aWJsZSBwcm92aWRlcnMgKERpZ2l0YWxPY2VhbiwgTGlub2RlKSBkbyBub3QgYWNjZXB0IHRhZ3NcbiAgICAgICAgLy8gc28gd2UgZG8gbm90IGluY2x1ZGUgdGhlIHRhZ3Mgb3B0aW9uIGlmIGl0IGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIGluY2x1ZGUgZGlyZWN0b3J5IGlmIHNldCAoZnJvbSBjbGllbnQgcmVxdWVzdCBvciBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyKVxuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9kaXJlY3RvcnkpIHtcbiAgICAgICAgICBmaWxlT3B0aW9ucy5kaXJlY3RvcnkgPSBmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlIGZpbGVcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgYnVmZmVyRGF0YSxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS50eXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlT2JqZWN0LmZpbGUuX25hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzO1xuICAgIGxldCBzdHJlYW07XG5cbiAgICB0cnkge1xuICAgICAgLy8gRWFybHkgcmVqZWN0aW9uIHZpYSBDb250ZW50LUxlbmd0aCBoZWFkZXJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuXG4gICAgICAvLyBJbmZlciBjb250ZW50IHR5cGUgZnJvbSBleHRlbnNpb24gb3IgYWRkIGV4dGVuc2lvbiBmcm9tIGNvbnRlbnQgdHlwZVxuICAgICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc0V4dGVuc2lvbiAmJiBjb250ZW50VHlwZSkge1xuICAgICAgICAvLyBleHRlbnNpb24gd2lsbCBiZSBhZGRlZCBieSBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgc2l6ZS1saW1pdGVkIHN0cmVhbSB3cmFwcGluZyB0aGUgcmVxdWVzdFxuICAgICAgc3RyZWFtID0gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0ocmVxLCBtYXhCeXRlcyk7XG5cbiAgICAgIC8vIEJ1aWxkIGEgUGFyc2UuRmlsZSB3aXRoIG5vIF9kYXRhIChzdHJlYW1pbmcgbW9kZSlcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcblxuICAgICAgLy8gVmFsaWRhdGUgbWV0YWRhdGEgYW5kIHRhZ3MgZm9yIHByb2hpYml0ZWQga2V5d29yZHNcbiAgICAgIHRyeSB7XG4gICAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVNpemUgPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpXG4gICAgICAgID8gcGFyc2VJbnQocmVxLmdldCgnQ29udGVudC1MZW5ndGgnKSwgMTApXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplLCBzdHJlYW06IHRydWUgfTtcblxuICAgICAgLy8gUnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIElmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCwgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGVzdHJveSBzdHJlYW0gdG8gcmVtb3ZlIGxpc3RlbmVycyBhbmQgZHJhaW4gcmVxdWVzdFxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCwgc2tpcCBzYXZpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyBQcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHN0cmVhbSBkaXJlY3RseSB0byBmaWxlc0NvbnRyb2xsZXIg4oCUIGl0IHdpbGwgYnVmZmVyIGlmIGFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IHN0cmVhbWluZ1xuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LnR5cGUgfHwgY29udGVudFR5cGU7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3QsIG9yIHJlc3VtZSBkaXJlY3RseVxuICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGRlbGV0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSByZXEuY29uZmlnO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgLy8gZGVsZXRlIGZpbGVcbiAgICAgIGF3YWl0IGZpbGVzQ29udHJvbGxlci5kZWxldGVGaWxlKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIC8vIHJ1biBhZnRlckRlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIHVzZWZ1bCBKU09OIGhlcmU/XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBkZWxldGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX0RFTEVURV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBkZWxldGUgZmlsZS4nLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YUhhbmRsZXIocmVxLCByZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBGaWxlc1JvdXRlci5fdmFsaWRhdGVGaWxlRG93bmxvYWQocmVxLCBjb25maWcpO1xuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0pO1xuICAgICAgY29uc3QgZmlsZUF1dGggPSByZXEuYXV0aDtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQuZmlsZS5fbmFtZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgICByZXMuanNvbih7fSk7XG4gICAgICB9KTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGZpbGVBdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLmpzb24oZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBnZXQgZmlsZSBtZXRhZGF0YS4nLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRmlsZVN0cmVhbWFibGUocmVxLCBmaWxlc0NvbnRyb2xsZXIpIHtcbiAgY29uc3QgcmFuZ2UgPSAocmVxLmdldCgnUmFuZ2UnKSB8fCAnLy0vJykuc3BsaXQoJy0nKTtcbiAgY29uc3Qgc3RhcnQgPSBOdW1iZXIocmFuZ2VbMF0pO1xuICBjb25zdCBlbmQgPSBOdW1iZXIocmFuZ2VbMV0pO1xuICByZXR1cm4gKFxuICAgICghaXNOYU4oc3RhcnQpIHx8ICFpc05hTihlbmQpKSAmJiB0eXBlb2YgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBQW9ELFNBQUFFLHdCQUFBTSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFB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
|
|
@@ -314,10 +314,22 @@ class UsersRouter extends _ClassesRouter.default {
|
|
|
314
314
|
const filteredUserResponse = await _rest.default.get(req.config, refetchAuth, '_User', user.objectId, {}, req.info.context);
|
|
315
315
|
filteredUser = filteredUserResponse.results?.[0];
|
|
316
316
|
} catch {
|
|
317
|
-
// re-fetch
|
|
317
|
+
// The re-fetch enforces `_User` `get` CLP and may be denied by access
|
|
318
|
+
// control (e.g. CLP `get: {}` or an ACL that excludes the caller).
|
|
319
|
+
// Handled below; never fall back to the raw row.
|
|
318
320
|
}
|
|
319
321
|
if (!filteredUser) {
|
|
320
|
-
|
|
322
|
+
// Master/maintenance callers bypass CLP, protectedFields, and authData
|
|
323
|
+
// afterFind, so for them an empty re-fetch is a genuine not-found edge, not
|
|
324
|
+
// an access-control denial; they are entitled to the full row. For every
|
|
325
|
+
// other caller, an empty/denied re-fetch means access control withheld the
|
|
326
|
+
// record, so disclose only the identity — never the raw row, which would
|
|
327
|
+
// leak fields hidden by `protectedFields` and raw `authData` (e.g. MFA
|
|
328
|
+
// secrets and recovery codes) that the sanitizing re-fetch would remove.
|
|
329
|
+
// The session token is still attached below so login succeeds.
|
|
330
|
+
filteredUser = req.auth.isMaster || req.auth.isMaintenance ? user : {
|
|
331
|
+
objectId: user.objectId
|
|
332
|
+
};
|
|
321
333
|
}
|
|
322
334
|
UsersRouter.removeHiddenProperties(filteredUser);
|
|
323
335
|
filteredUser.sessionToken = user.sessionToken;
|
|
@@ -397,10 +409,21 @@ class UsersRouter extends _ClassesRouter.default {
|
|
|
397
409
|
const filteredUserResponse = await _rest.default.get(req.config, refetchAuth, '_User', user.objectId, {}, req.info.context);
|
|
398
410
|
filteredUser = filteredUserResponse.results?.[0];
|
|
399
411
|
} catch {
|
|
400
|
-
// re-fetch
|
|
412
|
+
// The re-fetch enforces `_User` `get` CLP and may be denied by access
|
|
413
|
+
// control (e.g. CLP `get: {}` or an ACL that excludes the caller).
|
|
414
|
+
// Handled below; never fall back to the raw row.
|
|
401
415
|
}
|
|
402
416
|
if (!filteredUser) {
|
|
403
|
-
|
|
417
|
+
// See handleLogIn: master/maintenance callers bypass CLP,
|
|
418
|
+
// protectedFields, and authData afterFind, so an empty re-fetch is a
|
|
419
|
+
// genuine not-found edge for them and they are entitled to the full
|
|
420
|
+
// row. For all other callers, an empty/denied re-fetch means access
|
|
421
|
+
// control withheld the record, so disclose only the identity rather
|
|
422
|
+
// than the raw row, which would leak protectedFields and raw authData
|
|
423
|
+
// (e.g. MFA secrets and recovery codes).
|
|
424
|
+
filteredUser = req.auth.isMaster || req.auth.isMaintenance ? user : {
|
|
425
|
+
objectId: user.objectId
|
|
426
|
+
};
|
|
404
427
|
}
|
|
405
428
|
UsersRouter.removeHiddenProperties(filteredUser);
|
|
406
429
|
return {
|
|
@@ -730,4 +753,4 @@ class UsersRouter extends _ClassesRouter.default {
|
|
|
730
753
|
}
|
|
731
754
|
exports.UsersRouter = UsersRouter;
|
|
732
755
|
var _default = exports.default = UsersRouter;
|
|
733
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0NvbmZpZyIsIl9BY2NvdW50TG9ja291dCIsIl9DbGFzc2VzUm91dGVyIiwiX3Jlc3QiLCJfQXV0aCIsIl9wYXNzd29yZCIsIl90cmlnZ2VycyIsIl9taWRkbGV3YXJlcyIsIl9SZXN0V3JpdGUiLCJfbG9nZ2VyIiwiX0Vycm9yIiwiX0F1dGhEYXRhTG9jayIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVzZXJzUm91dGVyIiwiQ2xhc3Nlc1JvdXRlciIsImNsYXNzTmFtZSIsInJlbW92ZUhpZGRlblByb3BlcnRpZXMiLCJvYmoiLCJrZXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0ZXN0IiwiX3Nhbml0aXplQXV0aERhdGEiLCJ1c2VyIiwicGFzc3dvcmQiLCJhdXRoRGF0YSIsImtleXMiLCJmb3JFYWNoIiwicHJvdmlkZXIiLCJsZW5ndGgiLCJfYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0IiwicmVxIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwYXlsb2FkIiwiYm9keSIsInVzZXJuYW1lIiwicXVlcnkiLCJlbWFpbCIsImlnbm9yZUVtYWlsVmVyaWZpY2F0aW9uIiwiUGFyc2UiLCJFcnJvciIsIlVTRVJOQU1FX01JU1NJTkciLCJQQVNTV09SRF9NSVNTSU5HIiwiT0JKRUNUX05PVF9GT1VORCIsImlzVmFsaWRQYXNzd29yZCIsIiRvciIsImNvbmZpZyIsImRhdGFiYXNlIiwiZmluZCIsIkF1dGgiLCJtYWludGVuYW5jZSIsInRoZW4iLCJyZXN1bHRzIiwicGFzc3dvcmRDcnlwdG8iLCJjb21wYXJlIiwiZHVtbXlIYXNoIiwibG9nZ2VyQ29udHJvbGxlciIsIndhcm4iLCJmaWx0ZXIiLCJjb3JyZWN0IiwiYWNjb3VudExvY2tvdXRQb2xpY3kiLCJBY2NvdW50TG9ja291dCIsImhhbmRsZUxvZ2luQXR0ZW1wdCIsImF1dGgiLCJpc01hc3RlciIsIkFDTCIsImF1dGhQcm92aWRlciIsImpvaW4iLCJyZXF1ZXN0IiwibWFzdGVyIiwiaXAiLCJpbnN0YWxsYXRpb25JZCIsIm9iamVjdCIsIlVzZXIiLCJmcm9tSlNPTiIsImFzc2lnbiIsImNyZWF0ZWRXaXRoIiwiUmVzdFdyaXRlIiwiYnVpbGRDcmVhdGVkV2l0aCIsImlzTWFpbnRlbmFuY2UiLCJ2ZXJpZnlVc2VyRW1haWxzIiwicHJldmVudExvZ2luV2l0aFVudmVyaWZpZWRFbWFpbCIsImVtYWlsVmVyaWZpZWQiLCJFTUFJTF9OT1RfRk9VTkQiLCJjYXRjaCIsImVycm9yIiwiaGFuZGxlTWUiLCJpbmZvIiwic2Vzc2lvblRva2VuIiwiY3JlYXRlU2FuaXRpemVkRXJyb3IiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJzZXNzaW9uUmVzcG9uc2UiLCJyZXN0IiwiY29udGV4dCIsInVzZXJJZCIsIm9iamVjdElkIiwidXNlclJlc3BvbnNlIiwiZ2V0IiwicmVzcG9uc2UiLCJoYW5kbGVMb2dJbiIsImNoZWNrSWZVc2VySGFzUHJvdmlkZWRDb25maWd1cmVkUHJvdmlkZXJzRm9yTG9naW4iLCJhdXRoRGF0YVJlc3BvbnNlIiwidmFsaWRhdGVkQXV0aERhdGEiLCJyZXMiLCJoYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24iLCJwYXNzd29yZFBvbGljeSIsIm1heFBhc3N3b3JkQWdlIiwiY2hhbmdlZEF0IiwiX3Bhc3N3b3JkX2NoYW5nZWRfYXQiLCJEYXRlIiwidXBkYXRlIiwiX2VuY29kZSIsIl9fdHlwZSIsImlzbyIsImV4cGlyZXNBdCIsImdldFRpbWUiLCJmaWxlc0NvbnRyb2xsZXIiLCJleHBhbmRGaWxlc0luT2JqZWN0IiwibWF5YmVSdW5UcmlnZ2VyIiwiVHJpZ2dlclR5cGVzIiwiYmVmb3JlTG9naW4iLCJhcHBseUF1dGhEYXRhT3B0aW1pc3RpY0xvY2siLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsInNlc3Npb25EYXRhIiwiY3JlYXRlU2Vzc2lvbiIsImFmdGVyTG9naW5Vc2VyIiwiYWZ0ZXJMb2dpbiIsInJlZmV0Y2hBdXRoIiwiZmlsdGVyZWRVc2VyIiwiZmlsdGVyZWRVc2VyUmVzcG9uc2UiLCJoYW5kbGVMb2dJbkFzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImlzUmVhZE9ubHkiLCJJTlZBTElEX1ZBTFVFIiwicXVlcnlSZXN1bHRzIiwiaGFuZGxlVmVyaWZ5UGFzc3dvcmQiLCJoYW5kbGVMb2dPdXQiLCJzdWNjZXNzIiwicmVjb3JkcyIsInVuZGVmaW5lZCIsImRlbCIsImFmdGVyTG9nb3V0IiwiU2Vzc2lvbiIsIl90aHJvd09uQmFkRW1haWxDb25maWciLCJDb25maWciLCJ2YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbiIsImVtYWlsQWRhcHRlciIsInVzZXJDb250cm9sbGVyIiwiYWRhcHRlciIsImFwcE5hbWUiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJfcHVibGljU2VydmVyVVJMIiwiZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiaGFuZGxlUmVzZXRSZXF1ZXN0IiwidG9rZW4iLCJFTUFJTF9NSVNTSU5HIiwidXNlclJlc3VsdHMiLCJ1c2VyRGF0YSIsIl9wZXJpc2hhYmxlX3Rva2VuIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIiRsdCIsIiRleGlzdHMiLCJsaW1pdCIsIklOVkFMSURfRU1BSUxfQUREUkVTUyIsImluZmxhdGUiLCJiZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCIsInNlbmRQYXNzd29yZFJlc2V0RW1haWwiLCJlcnIiLCJyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwibWVzc2FnZSIsImhhbmRsZVZlcmlmaWNhdGlvbkVtYWlsUmVxdWVzdCIsInZlcmlmeUVtYWlsU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwiZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwiLCJPVEhFUl9DQVVTRSIsInNlbmQiLCJyZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbiIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsImhhbmRsZUNoYWxsZW5nZSIsImNoYWxsZW5nZURhdGEiLCJwYXJzZVVzZXIiLCJBcnJheSIsImlzQXJyYXkiLCJpZCIsImZpbmRVc2Vyc1dpdGhBdXRoRGF0YSIsImdldFJlcXVlc3RPYmplY3QiLCJpc0NoYWxsZW5nZSIsInZhbGlkYXRvciIsImF1dGhEYXRhTWFuYWdlciIsImdldFZhbGlkYXRvckZvclByb3ZpZGVyIiwidmFsaWRhdG9yUmVzcG9uc2UiLCJsb2dnZXIiLCJhY2MiLCJzb3J0IiwiYXV0aEFkYXB0ZXIiLCJjaGFsbGVuZ2UiLCJwcm92aWRlckNoYWxsZW5nZVJlc3BvbnNlIiwicmVzb2x2ZUVycm9yIiwidXNlclN0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJhdXRoZW50aWNhdGlvblN0ZXAiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwiaGFuZGxlRmluZCIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImhhbmRsZUNyZWF0ZSIsImhhbmRsZUdldCIsImhhbmRsZVVwZGF0ZSIsImhhbmRsZURlbGV0ZSIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL1VzZXJzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIHRoZSBVc2VyLXJlbGF0ZWQgcm91dGVzLlxuXG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgQWNjb3VudExvY2tvdXQgZnJvbSAnLi4vQWNjb3VudExvY2tvdXQnO1xuaW1wb3J0IENsYXNzZXNSb3V0ZXIgZnJvbSAnLi9DbGFzc2VzUm91dGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IEF1dGggZnJvbSAnLi4vQXV0aCc7XG5pbXBvcnQgcGFzc3dvcmRDcnlwdG8gZnJvbSAnLi4vcGFzc3dvcmQnO1xuaW1wb3J0IHtcbiAgbWF5YmVSdW5UcmlnZ2VyLFxuICBUeXBlcyBhcyBUcmlnZ2VyVHlwZXMsXG4gIGdldFJlcXVlc3RPYmplY3QsXG4gIHJlc29sdmVFcnJvcixcbiAgaW5mbGF0ZSxcbn0gZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IHsgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IH0gZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IFJlc3RXcml0ZSBmcm9tICcuLi9SZXN0V3JpdGUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuaW1wb3J0IHsgYXBwbHlBdXRoRGF0YU9wdGltaXN0aWNMb2NrIH0gZnJvbSAnLi4vQXV0aERhdGFMb2NrJztcblxuZXhwb3J0IGNsYXNzIFVzZXJzUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ19Vc2VyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBcIl9cIiBwcmVmaXhlZCBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0LCBleGNlcHQgXCJfX3R5cGVcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIEFuIG9iamVjdC5cbiAgICovXG4gIHN0YXRpYyByZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKG9iaikge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIC8vIFJlZ2V4cCBjb21lcyBmcm9tIFBhcnNlLk9iamVjdC5wcm90b3R5cGUudmFsaWRhdGVcbiAgICAgICAgaWYgKGtleSAhPT0gJ19fdHlwZScgJiYgIS9eW0EtWmEtel1bMC05QS1aYS16X10qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHJldHJpZXZpbmcgYSB1c2VyIGRpcmVjdGx5IGZyb20gdGhlIGRhdGFiYXNlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVcbiAgICogcGFzc3dvcmQgZnJvbSB0aGUgb2JqZWN0IChmb3Igc2VjdXJpdHkpLCBhbmQgZml4IGFuIGlzc3VlIHNvbWUgU0RLcyBoYXZlXG4gICAqIHdpdGggbnVsbCB2YWx1ZXNcbiAgICovXG4gIF9zYW5pdGl6ZUF1dGhEYXRhKHVzZXIpIHtcbiAgICBkZWxldGUgdXNlci5wYXNzd29yZDtcblxuICAgIC8vIFNvbWV0aW1lcyB0aGUgYXV0aERhdGEgc3RpbGwgaGFzIG51bGwgb24gdGhhdCBrZXlzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcnNlLWNvbW11bml0eS9wYXJzZS1zZXJ2ZXIvaXNzdWVzLzkzNVxuICAgIGlmICh1c2VyLmF1dGhEYXRhKSB7XG4gICAgICBPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5mb3JFYWNoKHByb3ZpZGVyID0+IHtcbiAgICAgICAgaWYgKHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBkZWxldGUgdXNlci5hdXRoRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgcGFzc3dvcmQgcmVxdWVzdCBpbiBsb2dpbiBhbmQgdmVyaWZ5UGFzc3dvcmRcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBVc2VyIG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gVXNlIHF1ZXJ5IHBhcmFtZXRlcnMgaW5zdGVhZCBpZiBwcm92aWRlZCBpbiB1cmxcbiAgICAgIGxldCBwYXlsb2FkID0gcmVxLmJvZHkgfHwge307XG4gICAgICBpZiAoXG4gICAgICAgICghcGF5bG9hZC51c2VybmFtZSAmJiByZXEucXVlcnkgJiYgcmVxLnF1ZXJ5LnVzZXJuYW1lKSB8fFxuICAgICAgICAoIXBheWxvYWQuZW1haWwgJiYgcmVxLnF1ZXJ5ICYmIHJlcS5xdWVyeS5lbWFpbClcbiAgICAgICkge1xuICAgICAgICBwYXlsb2FkID0gcmVxLnF1ZXJ5O1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkLCBpZ25vcmVFbWFpbFZlcmlmaWNhdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgICAgLy8gVE9ETzogdXNlIHRoZSByaWdodCBlcnJvciBjb2RlcyAvIGRlc2NyaXB0aW9ucy5cbiAgICAgIGlmICghdXNlcm5hbWUgJiYgIWVtYWlsKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5VU0VSTkFNRV9NSVNTSU5HLCAndXNlcm5hbWUvZW1haWwgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QQVNTV09SRF9NSVNTSU5HLCAncGFzc3dvcmQgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgKGVtYWlsICYmIHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHx8XG4gICAgICAgICh1c2VybmFtZSAmJiB0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVzZXI7XG4gICAgICBsZXQgaXNWYWxpZFBhc3N3b3JkID0gZmFsc2U7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZW1haWwgJiYgdXNlcm5hbWUpIHtcbiAgICAgICAgcXVlcnkgPSB7IGVtYWlsLCB1c2VybmFtZSB9O1xuICAgICAgfSBlbHNlIGlmIChlbWFpbCkge1xuICAgICAgICBxdWVyeSA9IHsgZW1haWwgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0geyAkb3I6IFt7IHVzZXJuYW1lIH0sIHsgZW1haWw6IHVzZXJuYW1lIH1dIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgICAuZmluZCgnX1VzZXInLCBxdWVyeSwge30sIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZykpXG4gICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIFBlcmZvcm0gYSBkdW1teSBiY3J5cHQgY29tcGFyZSB0byBub3JtYWxpemUgcmVzcG9uc2UgdGltaW5nLFxuICAgICAgICAgICAgLy8gcHJldmVudGluZyB1c2VyIGVudW1lcmF0aW9uIHZpYSB0aW1pbmcgc2lkZS1jaGFubmVsXG4gICAgICAgICAgICByZXR1cm4gcGFzc3dvcmRDcnlwdG9cbiAgICAgICAgICAgICAgLmNvbXBhcmUocGFzc3dvcmQsIHBhc3N3b3JkQ3J5cHRvLmR1bW15SGFzaClcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gY29ybmVyIGNhc2Ugd2hlcmUgdXNlcjEgaGFzIHVzZXJuYW1lID09IHVzZXIyIGVtYWlsXG4gICAgICAgICAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIud2FybihcbiAgICAgICAgICAgICAgXCJUaGVyZSBpcyBhIHVzZXIgd2hpY2ggZW1haWwgaXMgdGhlIHNhbWUgYXMgYW5vdGhlciB1c2VyJ3MgdXNlcm5hbWUsIGxvZ2dpbmcgaW4gYmFzZWQgb24gdXNlcm5hbWVcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHVzZXIgPSByZXN1bHRzLmZpbHRlcih1c2VyID0+IHVzZXIudXNlcm5hbWUgPT09IHVzZXJuYW1lKVswXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXNlciA9IHJlc3VsdHNbMF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB1c2VyLnBhc3N3b3JkICE9PSAnc3RyaW5nJyB8fCB1c2VyLnBhc3N3b3JkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gUGFzc3dvcmRsZXNzIGFjY291bnQgKGUuZy4gT0F1dGgtb25seSk6IHJ1biBkdW1teSBjb21wYXJlIGZvclxuICAgICAgICAgICAgLy8gdGltaW5nIG5vcm1hbGl6YXRpb24sIGRpc2NhcmQgcmVzdWx0LCBhbHdheXMgcmVqZWN0XG4gICAgICAgICAgICByZXR1cm4gcGFzc3dvcmRDcnlwdG8uY29tcGFyZShwYXNzd29yZCwgcGFzc3dvcmRDcnlwdG8uZHVtbXlIYXNoKS50aGVuKCgpID0+IGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBhc3N3b3JkQ3J5cHRvLmNvbXBhcmUocGFzc3dvcmQsIHVzZXIucGFzc3dvcmQpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihjb3JyZWN0ID0+IHtcbiAgICAgICAgICBpc1ZhbGlkUGFzc3dvcmQgPSBjb3JyZWN0O1xuICAgICAgICAgIGNvbnN0IGFjY291bnRMb2Nrb3V0UG9saWN5ID0gbmV3IEFjY291bnRMb2Nrb3V0KHVzZXIsIHJlcS5jb25maWcpO1xuICAgICAgICAgIHJldHVybiBhY2NvdW50TG9ja291dFBvbGljeS5oYW5kbGVMb2dpbkF0dGVtcHQoaXNWYWxpZFBhc3N3b3JkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghaXNWYWxpZFBhc3N3b3JkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0ludmFsaWQgdXNlcm5hbWUvcGFzc3dvcmQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEEgdXNlciB3aXRoIGFuIGVtcHR5IEFDTCAobWFzdGVyIGtleSBvbmx5KSBpcyBjb25zaWRlcmVkIGxvY2tlZCBvdXQgYW5kXG4gICAgICAgICAgLy8gY2Fubm90IGxvZyBpbi4gVGhpcyBvbmx5IHByZXZlbnRzIG5ldyBsb2dpbnM7IGV4aXN0aW5nIHNlc3Npb24gdG9rZW5zXG4gICAgICAgICAgLy8gcmVtYWluIHZhbGlkLiBUbyBpbW1lZGlhdGVseSByZXZva2UgYWNjZXNzLCBhbHNvIGRlc3Ryb3kgdGhlIHVzZXInc1xuICAgICAgICAgIC8vIHNlc3Npb25zIHZpYSBtYXN0ZXIga2V5LlxuICAgICAgICAgIGlmICghcmVxLmF1dGguaXNNYXN0ZXIgJiYgdXNlci5BQ0wgJiYgT2JqZWN0LmtleXModXNlci5BQ0wpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0ludmFsaWQgdXNlcm5hbWUvcGFzc3dvcmQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENyZWF0ZSByZXF1ZXN0IG9iamVjdCBmb3IgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uc1xuICAgICAgICAgIGNvbnN0IGF1dGhQcm92aWRlciA9XG4gICAgICAgICAgICByZXEuYm9keSAmJlxuICAgICAgICAgICAgcmVxLmJvZHkuYXV0aERhdGEgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlcS5ib2R5LmF1dGhEYXRhKS5sZW5ndGggJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlcS5ib2R5LmF1dGhEYXRhKS5qb2luKCcsJyk7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIG1hc3RlcjogcmVxLmF1dGguaXNNYXN0ZXIsXG4gICAgICAgICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuYXV0aC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgIG9iamVjdDogUGFyc2UuVXNlci5mcm9tSlNPTihPYmplY3QuYXNzaWduKHsgY2xhc3NOYW1lOiAnX1VzZXInIH0sIHVzZXIpKSxcbiAgICAgICAgICAgIGNyZWF0ZWRXaXRoOiBSZXN0V3JpdGUuYnVpbGRDcmVhdGVkV2l0aCgnbG9naW4nLCBhdXRoUHJvdmlkZXIpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBJZiByZXF1ZXN0IGRvZXNuJ3QgdXNlIG1hc3RlciBvciBtYWludGVuYW5jZSBrZXkgd2l0aCBpZ25vcmluZyBlbWFpbCB2ZXJpZmljYXRpb25cbiAgICAgICAgICBpZiAoISgocmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZSkgJiYgaWdub3JlRW1haWxWZXJpZmljYXRpb24pKSB7XG5cbiAgICAgICAgICAgIC8vIEdldCB2ZXJpZmljYXRpb24gY29uZGl0aW9ucyB3aGljaCBjYW4gYmUgYm9vbGVhbnMgb3IgZnVuY3Rpb25zOyB0aGUgcHVycG9zZSBvZiB0aGlzIGFzeW5jL2F3YWl0XG4gICAgICAgICAgICAvLyBzdHJ1Y3R1cmUgaXMgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBleGVjdXRpbmcgc3Vic2VxdWVudCBmdW5jdGlvbnMgaWYgcHJldmlvdXMgb25lcyBmYWlsIGluIHRoZVxuICAgICAgICAgICAgLy8gY29uZGl0aW9uYWwgc3RhdGVtZW50IGJlbG93LCBhcyBhIGRldmVsb3BlciBtYXkgZGVjaWRlIHRvIGV4ZWN1dGUgZXhwZW5zaXZlIG9wZXJhdGlvbnMgaW4gdGhlbVxuICAgICAgICAgICAgY29uc3QgdmVyaWZ5VXNlckVtYWlscyA9IGFzeW5jICgpID0+IHJlcS5jb25maWcudmVyaWZ5VXNlckVtYWlscyA9PT0gdHJ1ZSB8fCAodHlwZW9mIHJlcS5jb25maWcudmVyaWZ5VXNlckVtYWlscyA9PT0gJ2Z1bmN0aW9uJyAmJiBhd2FpdCBQcm9taXNlLnJlc29sdmUocmVxLmNvbmZpZy52ZXJpZnlVc2VyRW1haWxzKHJlcXVlc3QpKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsID0gYXN5bmMgKCkgPT4gcmVxLmNvbmZpZy5wcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsID09PSB0cnVlIHx8ICh0eXBlb2YgcmVxLmNvbmZpZy5wcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsID09PSAnZnVuY3Rpb24nICYmIGF3YWl0IFByb21pc2UucmVzb2x2ZShyZXEuY29uZmlnLnByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwocmVxdWVzdCkpID09PSB0cnVlKTtcbiAgICAgICAgICAgIGlmIChhd2FpdCB2ZXJpZnlVc2VyRW1haWxzKCkgJiYgYXdhaXQgcHJldmVudExvZ2luV2l0aFVudmVyaWZpZWRFbWFpbCgpICYmICF1c2VyLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkVNQUlMX05PVF9GT1VORCwgJ1VzZXIgZW1haWwgaXMgbm90IHZlcmlmaWVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3Nhbml0aXplQXV0aERhdGEodXNlcik7XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh1c2VyKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVNZShyZXEpIHtcbiAgICBpZiAoIXJlcS5pbmZvIHx8ICFyZXEuaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsIHJlcS5jb25maWcpO1xuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuaW5mby5zZXNzaW9uVG9rZW47XG4gICAgLy8gUXVlcnkgdGhlIHNlc3Npb24gd2l0aCBtYXN0ZXIga2V5IHRvIHZhbGlkYXRlIHRoZSBzZXNzaW9uIHRva2VuLFxuICAgIC8vIGJ1dCBkbyBOT1QgaW5jbHVkZSAndXNlcicgdG8gYXZvaWQgbGVha2luZyB1c2VyIGRhdGEgdmlhIG1hc3RlciBjb250ZXh0XG4gICAgY29uc3Qgc2Vzc2lvblJlc3BvbnNlID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIEF1dGgubWFzdGVyKHJlcS5jb25maWcpLFxuICAgICAgJ19TZXNzaW9uJyxcbiAgICAgIHsgc2Vzc2lvblRva2VuIH0sXG4gICAgICB7fSxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICAgIGlmIChcbiAgICAgICFzZXNzaW9uUmVzcG9uc2UucmVzdWx0cyB8fFxuICAgICAgc2Vzc2lvblJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDAgfHxcbiAgICAgICFzZXNzaW9uUmVzcG9uc2UucmVzdWx0c1swXS51c2VyXG4gICAgKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nLCByZXEuY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgdXNlcklkID0gc2Vzc2lvblJlc3BvbnNlLnJlc3VsdHNbMF0udXNlci5vYmplY3RJZDtcbiAgICAvLyBSZS1mZXRjaCB0aGUgdXNlciB3aXRoIHRoZSBjYWxsZXIncyBhdXRoIGNvbnRleHQgc28gdGhhdFxuICAgIC8vIHByb3RlY3RlZEZpZWxkcywgQ0xQLCBhbmQgYXV0aCBhZGFwdGVyIGFmdGVyRmluZCBhcHBseSBjb3JyZWN0bHlcbiAgICBjb25zdCB1c2VyUmVzcG9uc2UgPSBhd2FpdCByZXN0LmdldChcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuYXV0aCxcbiAgICAgICdfVXNlcicsXG4gICAgICB1c2VySWQsXG4gICAgICB7fSxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICAgIGlmICghdXNlclJlc3BvbnNlLnJlc3VsdHMgfHwgdXNlclJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsIHJlcS5jb25maWcpO1xuICAgIH1cbiAgICBjb25zdCB1c2VyID0gdXNlclJlc3BvbnNlLnJlc3VsdHNbMF07XG4gICAgLy8gU2VuZCB0b2tlbiBiYWNrIG9uIHRoZSBsb2dpbiwgYmVjYXVzZSBTREtzIGV4cGVjdCB0aGF0LlxuICAgIHVzZXIuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xuICAgIC8vIFJlbW92ZSBoaWRkZW4gcHJvcGVydGllcy5cbiAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKHVzZXIpO1xuICAgIHJldHVybiB7IHJlc3BvbnNlOiB1c2VyIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVMb2dJbihyZXEpIHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5fYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgYXV0aERhdGEgPSByZXEuYm9keSAmJiByZXEuYm9keS5hdXRoRGF0YTtcbiAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwcm92aWRlZCB0aGVpciByZXF1aXJlZCBhdXRoIHByb3ZpZGVyc1xuICAgIEF1dGguY2hlY2tJZlVzZXJIYXNQcm92aWRlZENvbmZpZ3VyZWRQcm92aWRlcnNGb3JMb2dpbihcbiAgICAgIHJlcSxcbiAgICAgIGF1dGhEYXRhLFxuICAgICAgdXNlci5hdXRoRGF0YSxcbiAgICAgIHJlcS5jb25maWdcbiAgICApO1xuXG4gICAgbGV0IGF1dGhEYXRhUmVzcG9uc2U7XG4gICAgbGV0IHZhbGlkYXRlZEF1dGhEYXRhO1xuICAgIGlmIChhdXRoRGF0YSkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgQXV0aC5oYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24oXG4gICAgICAgIGF1dGhEYXRhLFxuICAgICAgICBuZXcgUmVzdFdyaXRlKFxuICAgICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgICB7IG9iamVjdElkOiB1c2VyLm9iamVjdElkIH0sXG4gICAgICAgICAgcmVxLmJvZHkgfHwge30sXG4gICAgICAgICAgdXNlcixcbiAgICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICAgICksXG4gICAgICAgIHVzZXJcbiAgICAgICk7XG4gICAgICBhdXRoRGF0YVJlc3BvbnNlID0gcmVzLmF1dGhEYXRhUmVzcG9uc2U7XG4gICAgICB2YWxpZGF0ZWRBdXRoRGF0YSA9IHJlcy5hdXRoRGF0YTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgcGFzc3dvcmQgZXhwaXJ5IHBvbGljeVxuICAgIGlmIChyZXEuY29uZmlnLnBhc3N3b3JkUG9saWN5ICYmIHJlcS5jb25maWcucGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UpIHtcbiAgICAgIGxldCBjaGFuZ2VkQXQgPSB1c2VyLl9wYXNzd29yZF9jaGFuZ2VkX2F0O1xuXG4gICAgICBpZiAoIWNoYW5nZWRBdCkge1xuICAgICAgICAvLyBwYXNzd29yZCB3YXMgY3JlYXRlZCBiZWZvcmUgZXhwaXJ5IHBvbGljeSB3YXMgZW5hYmxlZC5cbiAgICAgICAgLy8gc2ltcGx5IHVwZGF0ZSBfVXNlciBvYmplY3Qgc28gdGhhdCBpdCB3aWxsIHN0YXJ0IGVuZm9yY2luZyBmcm9tIG5vd1xuICAgICAgICBjaGFuZ2VkQXQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXEuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICAgICAnX1VzZXInLFxuICAgICAgICAgIHsgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUgfSxcbiAgICAgICAgICB7IF9wYXNzd29yZF9jaGFuZ2VkX2F0OiBQYXJzZS5fZW5jb2RlKGNoYW5nZWRBdCkgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgcGFzc3dvcmQgaGFzIGV4cGlyZWRcbiAgICAgICAgaWYgKGNoYW5nZWRBdC5fX3R5cGUgPT0gJ0RhdGUnKSB7XG4gICAgICAgICAgY2hhbmdlZEF0ID0gbmV3IERhdGUoY2hhbmdlZEF0Lmlzbyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBleHBpcnkgdGltZS5cbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gbmV3IERhdGUoXG4gICAgICAgICAgY2hhbmdlZEF0LmdldFRpbWUoKSArIDg2NDAwMDAwICogcmVxLmNvbmZpZy5wYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhwaXJlc0F0IDwgbmV3IERhdGUoKSlcbiAgICAgICAgLy8gZmFpbCBvZiBjdXJyZW50IHRpbWUgaXMgcGFzdCBwYXNzd29yZCBleHBpcnkgdGltZVxuICAgICAgICB7IHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgICAgICdZb3VyIHBhc3N3b3JkIGhhcyBleHBpcmVkLiBQbGVhc2UgcmVzZXQgeW91ciBwYXNzd29yZC4nXG4gICAgICAgICk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaGlkZGVuIHByb3BlcnRpZXMuXG4gICAgVXNlcnNSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyh1c2VyKTtcblxuICAgIGF3YWl0IHJlcS5jb25maWcuZmlsZXNDb250cm9sbGVyLmV4cGFuZEZpbGVzSW5PYmplY3QocmVxLmNvbmZpZywgdXNlcik7XG5cbiAgICAvLyBCZWZvcmUgbG9naW4gdHJpZ2dlcjsgdGhyb3dzIGlmIGZhaWx1cmVcbiAgICBhd2FpdCBtYXliZVJ1blRyaWdnZXIoXG4gICAgICBUcmlnZ2VyVHlwZXMuYmVmb3JlTG9naW4sXG4gICAgICByZXEuYXV0aCxcbiAgICAgIFBhcnNlLlVzZXIuZnJvbUpTT04oT2JqZWN0LmFzc2lnbih7IGNsYXNzTmFtZTogJ19Vc2VyJyB9LCB1c2VyKSksXG4gICAgICBudWxsLFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBzb21lIG5ldyB2YWxpZGF0ZWQgYXV0aERhdGEgdXBkYXRlIGRpcmVjdGx5XG4gICAgaWYgKHZhbGlkYXRlZEF1dGhEYXRhICYmIE9iamVjdC5rZXlzKHZhbGlkYXRlZEF1dGhEYXRhKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9O1xuICAgICAgLy8gUHJldmVudCBjb25jdXJyZW50IHJlcXVlc3RzIGZyb20gYm90aCBzdWNjZWVkaW5nIHdoZW4gY29uc3VtaW5nIHNpbmdsZS11c2VcbiAgICAgIC8vIHRva2VucyAoZS5nLiBNRkEgcmVjb3ZlcnkgY29kZXMgb3IgU01TIE9UUCB0b2tlbnMpIGJ5IGV4dGVuZGluZyB0aGUgdXBkYXRlXG4gICAgICAvLyBXSEVSRSBjbGF1c2Ugd2l0aCB0aGUgb3JpZ2luYWwgdmFsdWVzIG9mIGNoYW5nZWQgcHJpbWl0aXZlL2FycmF5IGZpZWxkcy5cbiAgICAgIGFwcGx5QXV0aERhdGFPcHRpbWlzdGljTG9jayhxdWVyeSwgdXNlci5hdXRoRGF0YSwgdmFsaWRhdGVkQXV0aERhdGEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS51cGRhdGUoJ19Vc2VyJywgcXVlcnksIHsgYXV0aERhdGE6IHZhbGlkYXRlZEF1dGhEYXRhIH0sIHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsICdJbnZhbGlkIGF1dGggZGF0YScpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2Vzc2lvbkRhdGEsIGNyZWF0ZVNlc3Npb24gfSA9IFJlc3RXcml0ZS5jcmVhdGVTZXNzaW9uKHJlcS5jb25maWcsIHtcbiAgICAgIHVzZXJJZDogdXNlci5vYmplY3RJZCxcbiAgICAgIGNyZWF0ZWRXaXRoOiBSZXN0V3JpdGUuYnVpbGRDcmVhdGVkV2l0aCgnbG9naW4nKSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIHVzZXIuc2Vzc2lvblRva2VuID0gc2Vzc2lvbkRhdGEuc2Vzc2lvblRva2VuO1xuXG4gICAgYXdhaXQgY3JlYXRlU2Vzc2lvbigpO1xuXG4gICAgY29uc3QgYWZ0ZXJMb2dpblVzZXIgPSBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpO1xuICAgIGF3YWl0IG1heWJlUnVuVHJpZ2dlcihcbiAgICAgIFRyaWdnZXJUeXBlcy5hZnRlckxvZ2luLFxuICAgICAgeyAuLi5yZXEuYXV0aCwgdXNlcjogYWZ0ZXJMb2dpblVzZXIgfSxcbiAgICAgIGFmdGVyTG9naW5Vc2VyLFxuICAgICAgbnVsbCxcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcblxuICAgIC8vIFJlLWZldGNoIHRoZSB1c2VyIHdpdGggdGhlIGNhbGxlcidzIGF1dGggY29udGV4dCBzbyB0aGF0XG4gICAgLy8gcHJvdGVjdGVkRmllbGRzIGFuZCBDTFAgYXBwbHkgY29ycmVjdGx5OyBpZiB0aGUgY2FsbGVyIHVzZWQgbWFzdGVyIGtleSxcbiAgICAvLyBwcm90ZWN0ZWRGaWVsZHMgYXJlIGJ5cGFzc2VkLCBtYXRjaGluZyB0aGUgYmVoYXZpb3Igb2YgR0VUIC91c2Vycy86aWRcbiAgICBjb25zdCByZWZldGNoQXV0aCA9XG4gICAgICByZXEuYXV0aC5pc01hc3RlciB8fCByZXEuYXV0aC5pc01haW50ZW5hbmNlXG4gICAgICAgID8gcmVxLmF1dGhcbiAgICAgICAgOiBuZXcgQXV0aC5BdXRoKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgICAgIHVzZXI6IFBhcnNlLk9iamVjdC5mcm9tSlNPTih7IGNsYXNzTmFtZTogJ19Vc2VyJywgb2JqZWN0SWQ6IHVzZXIub2JqZWN0SWQgfSksXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5pbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICB9KTtcbiAgICBsZXQgZmlsdGVyZWRVc2VyO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZFVzZXJSZXNwb25zZSA9IGF3YWl0IHJlc3QuZ2V0KFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZWZldGNoQXV0aCxcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgdXNlci5vYmplY3RJZCxcbiAgICAgICAge30sXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICk7XG4gICAgICBmaWx0ZXJlZFVzZXIgPSBmaWx0ZXJlZFVzZXJSZXNwb25zZS5yZXN1bHRzPy5bMF07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyByZS1mZXRjaCBtYXkgZmFpbCBmb3IgbGVnYWN5IHVzZXJzIHdpdGhvdXQgQUNMOyBmYWxsIHRocm91Z2hcbiAgICB9XG4gICAgaWYgKCFmaWx0ZXJlZFVzZXIpIHtcbiAgICAgIGZpbHRlcmVkVXNlciA9IHVzZXI7XG4gICAgfVxuICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMoZmlsdGVyZWRVc2VyKTtcbiAgICBmaWx0ZXJlZFVzZXIuc2Vzc2lvblRva2VuID0gdXNlci5zZXNzaW9uVG9rZW47XG4gICAgaWYgKGF1dGhEYXRhUmVzcG9uc2UpIHtcbiAgICAgIGZpbHRlcmVkVXNlci5hdXRoRGF0YVJlc3BvbnNlID0gYXV0aERhdGFSZXNwb25zZTtcbiAgICB9XG5cbiAgICByZXR1cm4geyByZXNwb25zZTogZmlsdGVyZWRVc2VyIH07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBhbGxvd3MgbWFzdGVyLWtleSBjbGllbnRzIHRvIGNyZWF0ZSB1c2VyIHNlc3Npb25zIHdpdGhvdXQgYWNjZXNzIHRvXG4gICAqIHVzZXIgY3JlZGVudGlhbHMuIFRoaXMgZW5hYmxlcyBzeXN0ZW1zIHRoYXQgY2FuIGF1dGhlbnRpY2F0ZSBhY2Nlc3MgYW5vdGhlclxuICAgKiB3YXkgKEFQSSBrZXksIGFwcCBhZG1pbmlzdHJhdG9ycykgdG8gYWN0IG9uIGEgdXNlcidzIGJlaGFsZi5cbiAgICpcbiAgICogV2UgY3JlYXRlIGEgbmV3IHNlc3Npb24gcmF0aGVyIHRoYW4gbG9va2luZyBmb3IgYW4gZXhpc3Rpbmcgc2Vzc2lvbjsgd2VcbiAgICogd2FudCB0aGlzIHRvIHdvcmsgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgdXNlciBpcyBsb2dnZWQgb3V0IG9uIGFsbFxuICAgKiBkZXZpY2VzLCBzaW5jZSB0aGlzIGNhbiBiZSB1c2VkIGJ5IGF1dG9tYXRlZCBzeXN0ZW1zIGFjdGluZyBvbiB0aGUgdXNlcidzXG4gICAqIGJlaGFsZi5cbiAgICpcbiAgICogRm9yIHRoZSBtb21lbnQsIHdlJ3JlIG9taXR0aW5nIGV2ZW50IGhvb2tzIGFuZCBsb2Nrb3V0IGNoZWNrcywgc2luY2VcbiAgICogaW1tZWRpYXRlIHVzZSBjYXNlcyBzdWdnZXN0IC9sb2dpbkFzIGNvdWxkIGJlIHVzZWQgZm9yIHNlbWFudGljYWxseVxuICAgKiBkaWZmZXJlbnQgcmVhc29ucyBmcm9tIC9sb2dpblxuICAgKi9cbiAgYXN5bmMgaGFuZGxlTG9nSW5BcyhyZXEpIHtcbiAgICBpZiAoIXJlcS5hdXRoLmlzTWFzdGVyKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgJ21hc3RlciBrZXkgaXMgcmVxdWlyZWQnLFxuICAgICAgICByZXEuY29uZmlnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGxvZ2luIGFzIGFub3RoZXIgdXNlci5cIixcbiAgICAgICAgcmVxLmNvbmZpZ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VySWQgPSByZXEuYm9keT8udXNlcklkIHx8IHJlcS5xdWVyeS51c2VySWQ7XG4gICAgaWYgKCF1c2VySWQpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9WQUxVRSxcbiAgICAgICAgJ3VzZXJJZCBtdXN0IG5vdCBiZSBlbXB0eSwgbnVsbCwgb3IgdW5kZWZpbmVkJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVJlc3VsdHMgPSBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLmZpbmQoJ19Vc2VyJywgeyBvYmplY3RJZDogdXNlcklkIH0pO1xuICAgIGNvbnN0IHVzZXIgPSBxdWVyeVJlc3VsdHNbMF07XG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ3VzZXIgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2FuaXRpemVBdXRoRGF0YSh1c2VyKTtcblxuICAgIGNvbnN0IHsgc2Vzc2lvbkRhdGEsIGNyZWF0ZVNlc3Npb24gfSA9IFJlc3RXcml0ZS5jcmVhdGVTZXNzaW9uKHJlcS5jb25maWcsIHtcbiAgICAgIHVzZXJJZCxcbiAgICAgIGNyZWF0ZWRXaXRoOiBSZXN0V3JpdGUuYnVpbGRDcmVhdGVkV2l0aCgnbG9naW4nLCAnbWFzdGVya2V5JyksXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgfSk7XG5cbiAgICB1c2VyLnNlc3Npb25Ub2tlbiA9IHNlc3Npb25EYXRhLnNlc3Npb25Ub2tlbjtcblxuICAgIGF3YWl0IGNyZWF0ZVNlc3Npb24oKTtcblxuICAgIHJldHVybiB7IHJlc3BvbnNlOiB1c2VyIH07XG4gIH1cblxuICBoYW5kbGVWZXJpZnlQYXNzd29yZChyZXEpIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0KHJlcSlcbiAgICAgIC50aGVuKGFzeW5jIHVzZXIgPT4ge1xuICAgICAgICAvLyBSZW1vdmUgaGlkZGVuIHByb3BlcnRpZXMuXG4gICAgICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXModXNlcik7XG4gICAgICAgIC8vIFJlLWZldGNoIHRoZSB1c2VyIHdpdGggdGhlIGNhbGxlcidzIGF1dGggY29udGV4dCBzbyB0aGF0XG4gICAgICAgIC8vIHByb3RlY3RlZEZpZWxkcyBhbmQgQ0xQIGFwcGx5IGNvcnJlY3RseTsgaWYgdGhlIGNhbGxlciB1c2VkIG1hc3RlciBrZXksXG4gICAgICAgIC8vIHByb3RlY3RlZEZpZWxkcyBhcmUgYnlwYXNzZWQsIG1hdGNoaW5nIHRoZSBiZWhhdmlvciBvZiBHRVQgL3VzZXJzLzppZFxuICAgICAgICBjb25zdCByZWZldGNoQXV0aCA9XG4gICAgICAgICAgcmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZVxuICAgICAgICAgICAgPyByZXEuYXV0aFxuICAgICAgICAgICAgOiBuZXcgQXV0aC5BdXRoKHtcbiAgICAgICAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICAgICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICAgICAgICAgIHVzZXI6IFBhcnNlLk9iamVjdC5mcm9tSlNPTih7IGNsYXNzTmFtZTogJ19Vc2VyJywgb2JqZWN0SWQ6IHVzZXIub2JqZWN0SWQgfSksXG4gICAgICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBsZXQgZmlsdGVyZWRVc2VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkVXNlclJlc3BvbnNlID0gYXdhaXQgcmVzdC5nZXQoXG4gICAgICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICAgICAgcmVmZXRjaEF1dGgsXG4gICAgICAgICAgICAnX1VzZXInLFxuICAgICAgICAgICAgdXNlci5vYmplY3RJZCxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgICAgZmlsdGVyZWRVc2VyID0gZmlsdGVyZWRVc2VyUmVzcG9uc2UucmVzdWx0cz8uWzBdO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyByZS1mZXRjaCBtYXkgZmFpbCBmb3IgbGVnYWN5IHVzZXJzIHdpdGhvdXQgQUNMOyBmYWxsIHRocm91Z2hcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZpbHRlcmVkVXNlcikge1xuICAgICAgICAgIGZpbHRlcmVkVXNlciA9IHVzZXI7XG4gICAgICAgIH1cbiAgICAgICAgVXNlcnNSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyhmaWx0ZXJlZFVzZXIpO1xuICAgICAgICByZXR1cm4geyByZXNwb25zZTogZmlsdGVyZWRVc2VyIH07XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUxvZ091dChyZXEpIHtcbiAgICBjb25zdCBzdWNjZXNzID0geyByZXNwb25zZToge30gfTtcbiAgICBpZiAocmVxLmluZm8gJiYgcmVxLmluZm8uc2Vzc2lvblRva2VuKSB7XG4gICAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICBBdXRoLm1hc3RlcihyZXEuY29uZmlnKSxcbiAgICAgICAgJ19TZXNzaW9uJyxcbiAgICAgICAgeyBzZXNzaW9uVG9rZW46IHJlcS5pbmZvLnNlc3Npb25Ub2tlbiB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICk7XG4gICAgICBpZiAocmVjb3Jkcy5yZXN1bHRzICYmIHJlY29yZHMucmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5kZWwoXG4gICAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgICBBdXRoLm1hc3RlcihyZXEuY29uZmlnKSxcbiAgICAgICAgICAnX1Nlc3Npb24nLFxuICAgICAgICAgIHJlY29yZHMucmVzdWx0c1swXS5vYmplY3RJZCxcbiAgICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IG1heWJlUnVuVHJpZ2dlcihcbiAgICAgICAgICBUcmlnZ2VyVHlwZXMuYWZ0ZXJMb2dvdXQsXG4gICAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgICAgUGFyc2UuU2Vzc2lvbi5mcm9tSlNPTihPYmplY3QuYXNzaWduKHsgY2xhc3NOYW1lOiAnX1Nlc3Npb24nIH0sIHJlY29yZHMucmVzdWx0c1swXSkpLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgcmVxLmNvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIF90aHJvd09uQmFkRW1haWxDb25maWcocmVxKSB7XG4gICAgdHJ5IHtcbiAgICAgIENvbmZpZy52YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbih7XG4gICAgICAgIGVtYWlsQWRhcHRlcjogcmVxLmNvbmZpZy51c2VyQ29udHJvbGxlci5hZGFwdGVyLFxuICAgICAgICBhcHBOYW1lOiByZXEuY29uZmlnLmFwcE5hbWUsXG4gICAgICAgIHB1YmxpY1NlcnZlclVSTDogcmVxLmNvbmZpZy5wdWJsaWNTZXJ2ZXJVUkwgfHwgcmVxLmNvbmZpZy5fcHVibGljU2VydmVyVVJMLFxuICAgICAgICBlbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbjogcmVxLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuVmFsaWRpdHlEdXJhdGlvbixcbiAgICAgICAgZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZDogcmVxLmNvbmZpZy5lbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBNYXliZSB3ZSBuZWVkIGEgQmFkIENvbmZpZ3VyYXRpb24gZXJyb3IsIGJ1dCB0aGUgU0RLcyB3b24ndCB1bmRlcnN0YW5kIGl0LiBGb3Igbm93LCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IuXG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1IsXG4gICAgICAgICAgJ0FuIGFwcE5hbWUsIHB1YmxpY1NlcnZlclVSTCwgYW5kIGVtYWlsQWRhcHRlciBhcmUgcmVxdWlyZWQgZm9yIHBhc3N3b3JkIHJlc2V0IGFuZCBlbWFpbCB2ZXJpZmljYXRpb24gZnVuY3Rpb25hbGl0eS4nXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVJlc2V0UmVxdWVzdChyZXEpIHtcbiAgICB0aGlzLl90aHJvd09uQmFkRW1haWxDb25maWcocmVxKTtcblxuICAgIGxldCBlbWFpbCA9IHJlcS5ib2R5Py5lbWFpbDtcbiAgICBjb25zdCB0b2tlbiA9IHJlcS5ib2R5Py50b2tlbjtcblxuICAgIGlmICghZW1haWwgJiYgIXRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRU1BSUxfTUlTU0lORywgJ3lvdSBtdXN0IHByb3ZpZGUgYW4gZW1haWwnKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4gJiYgdHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfVkFMVUUsICd0b2tlbiBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgbGV0IHVzZXJSZXN1bHRzID0gbnVsbDtcbiAgICBsZXQgdXNlckRhdGEgPSBudWxsO1xuXG4gICAgLy8gV2UgY2FuIGZpbmQgdGhlIHVzZXIgdXNpbmcgdG9rZW5cbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIHVzZXJSZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHtcbiAgICAgICAgX3BlcmlzaGFibGVfdG9rZW46IHRva2VuLFxuICAgICAgICBfcGVyaXNoYWJsZV90b2tlbl9leHBpcmVzX2F0OiB7ICRsdDogUGFyc2UuX2VuY29kZShuZXcgRGF0ZSgpKSB9LFxuICAgICAgfSk7XG4gICAgICBpZiAodXNlclJlc3VsdHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXNlckRhdGEgPSB1c2VyUmVzdWx0c1swXTtcbiAgICAgICAgaWYgKHVzZXJEYXRhLmVtYWlsKSB7XG4gICAgICAgICAgZW1haWwgPSB1c2VyRGF0YS5lbWFpbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIC8vIE9yIHVzaW5nIGVtYWlsIGlmIG5vIHRva2VuIHByb3ZpZGVkXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW1haWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICB1c2VyUmVzdWx0cyA9IGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UuZmluZChcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgeyAkb3I6IFt7IGVtYWlsIH0sIHsgdXNlcm5hbWU6IGVtYWlsLCBlbWFpbDogeyAkZXhpc3RzOiBmYWxzZSB9IH1dIH0sXG4gICAgICAgIHsgbGltaXQ6IDEgfSxcbiAgICAgICAgQXV0aC5tYWludGVuYW5jZShyZXEuY29uZmlnKVxuICAgICAgKTtcbiAgICAgIGlmICh1c2VyUmVzdWx0cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB1c2VyRGF0YSA9IHVzZXJSZXN1bHRzWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZW1haWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRU1BSUxfQUREUkVTUyxcbiAgICAgICAgJ3lvdSBtdXN0IHByb3ZpZGUgYSB2YWxpZCBlbWFpbCBzdHJpbmcnXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh1c2VyRGF0YSkge1xuICAgICAgdGhpcy5fc2FuaXRpemVBdXRoRGF0YSh1c2VyRGF0YSk7XG4gICAgICAvLyBHZXQgZmlsZXMgYXR0YWNoZWQgdG8gdXNlclxuICAgICAgYXdhaXQgcmVxLmNvbmZpZy5maWxlc0NvbnRyb2xsZXIuZXhwYW5kRmlsZXNJbk9iamVjdChyZXEuY29uZmlnLCB1c2VyRGF0YSk7XG5cbiAgICAgIGNvbnN0IHVzZXIgPSBpbmZsYXRlKCdfVXNlcicsIHVzZXJEYXRhKTtcblxuICAgICAgYXdhaXQgbWF5YmVSdW5UcmlnZ2VyKFxuICAgICAgICBUcmlnZ2VyVHlwZXMuYmVmb3JlUGFzc3dvcmRSZXNldFJlcXVlc3QsXG4gICAgICAgIHJlcS5hdXRoLFxuICAgICAgICB1c2VyLFxuICAgICAgICBudWxsLFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJDb250cm9sbGVyID0gcmVxLmNvbmZpZy51c2VyQ29udHJvbGxlcjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdXNlckNvbnRyb2xsZXIuc2VuZFBhc3N3b3JkUmVzZXRFbWFpbChlbWFpbCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNwb25zZToge30sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EKSB7XG4gICAgICAgIGlmIChyZXEuY29uZmlnLnBhc3N3b3JkUG9saWN5Py5yZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsID8/IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZXJyLm1lc3NhZ2UgPSBgQSB1c2VyIHdpdGggdGhhdCBlbWFpbCBkb2VzIG5vdCBleGlzdC5gO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVZlcmlmaWNhdGlvbkVtYWlsUmVxdWVzdChyZXEpIHtcbiAgICB0aGlzLl90aHJvd09uQmFkRW1haWxDb25maWcocmVxKTtcblxuICAgIGNvbnN0IHsgZW1haWwgfSA9IHJlcS5ib2R5IHx8IHt9O1xuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5FTUFJTF9NSVNTSU5HLCAneW91IG11c3QgcHJvdmlkZSBhbiBlbWFpbCcpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGVtYWlsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0VNQUlMX0FERFJFU1MsXG4gICAgICAgICd5b3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgZW1haWwgc3RyaW5nJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJpZnlFbWFpbFN1Y2Nlc3NPbkludmFsaWRFbWFpbCA9IHJlcS5jb25maWcuZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwgPz8gdHJ1ZTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLmZpbmQoJ19Vc2VyJywgeyBlbWFpbDogZW1haWwgfSwge30sIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZykpO1xuICAgIGlmICghcmVzdWx0cy5sZW5ndGggfHwgcmVzdWx0cy5sZW5ndGggPCAxKSB7XG4gICAgICBpZiAodmVyaWZ5RW1haWxTdWNjZXNzT25JbnZhbGlkRW1haWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHt9IH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRU1BSUxfTk9UX0ZPVU5ELCBgTm8gdXNlciBmb3VuZCB3aXRoIGVtYWlsICR7ZW1haWx9YCk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXIgPSByZXN1bHRzWzBdO1xuXG4gICAgLy8gcmVtb3ZlIHBhc3N3b3JkIGZpZWxkLCBtZXNzZXMgd2l0aCBzYXZpbmcgb24gcG9zdGdyZXNcbiAgICBkZWxldGUgdXNlci5wYXNzd29yZDtcblxuICAgIGlmICh1c2VyLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgIGlmICh2ZXJpZnlFbWFpbFN1Y2Nlc3NPbkludmFsaWRFbWFpbCkge1xuICAgICAgICByZXR1cm4geyByZXNwb25zZToge30gfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSwgYEVtYWlsICR7ZW1haWx9IGlzIGFscmVhZHkgdmVyaWZpZWQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckNvbnRyb2xsZXIgPSByZXEuY29uZmlnLnVzZXJDb250cm9sbGVyO1xuICAgIGNvbnN0IHNlbmQgPSBhd2FpdCB1c2VyQ29udHJvbGxlci5yZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbih1c2VyLCByZXEuYXV0aC5pc01hc3RlciwgcmVxLmF1dGguaW5zdGFsbGF0aW9uSWQsIHJlcS5pcCk7XG4gICAgaWYgKHNlbmQpIHtcbiAgICAgIHVzZXJDb250cm9sbGVyLnNlbmRWZXJpZmljYXRpb25FbWFpbCh1c2VyLCByZXEpO1xuICAgIH1cbiAgICByZXR1cm4geyByZXNwb25zZToge30gfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNoYWxsZW5nZShyZXEpIHtcbiAgICBjb25zdCB7IHVzZXJuYW1lLCBlbWFpbCwgcGFzc3dvcmQsIGF1dGhEYXRhLCBjaGFsbGVuZ2VEYXRhIH0gPSByZXEuYm9keSB8fCB7fTtcblxuICAgIC8vIGlmIHVzZXJuYW1lIG9yIGVtYWlsIHByb3ZpZGVkIHdpdGggcGFzc3dvcmQgdHJ5IHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlciBieSB1c2VybmFtZVxuICAgIGxldCB1c2VyO1xuICAgIGlmICh1c2VybmFtZSB8fCBlbWFpbCkge1xuICAgICAgaWYgKCFwYXNzd29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgICAgICAgJ1lvdSBwcm92aWRlZCB1c2VybmFtZSBvciBlbWFpbCwgeW91IG5lZWQgdG8gYWxzbyBwcm92aWRlIHBhc3N3b3JkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHVzZXIgPSBhd2FpdCB0aGlzLl9hdXRoZW50aWNhdGVVc2VyRnJvbVJlcXVlc3QocmVxKTtcbiAgICB9XG5cbiAgICBpZiAoIWNoYWxsZW5nZURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSwgJ05vdGhpbmcgdG8gY2hhbGxlbmdlLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2hhbGxlbmdlRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSwgJ2NoYWxsZW5nZURhdGEgc2hvdWxkIGJlIGFuIG9iamVjdC4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdDtcbiAgICBsZXQgcGFyc2VVc2VyO1xuXG4gICAgLy8gVHJ5IHRvIGZpbmQgdXNlciBieSBhdXRoRGF0YVxuICAgIGlmIChhdXRoRGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBhdXRoRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLCAnYXV0aERhdGEgc2hvdWxkIGJlIGFuIG9iamVjdC4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSxcbiAgICAgICAgICAnWW91IGNhbm5vdCBwcm92aWRlIHVzZXJuYW1lL2VtYWlsIGFuZCBhdXRoRGF0YSwgb25seSB1c2Ugb25lIGlkZW50aWZpY2F0aW9uIG1ldGhvZC4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGF1dGhEYXRhKSkge1xuICAgICAgICBpZiAoYXV0aERhdGFba2V5XSAhPT0gbnVsbCAmJiAodHlwZW9mIGF1dGhEYXRhW2tleV0gIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYXV0aERhdGFba2V5XSkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgICAgICAgICBgYXV0aERhdGEuJHtrZXl9IHNob3VsZCBiZSBhbiBvYmplY3QuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGF1dGhEYXRhKS5maWx0ZXIoa2V5ID0+IGF1dGhEYXRhW2tleV0gJiYgYXV0aERhdGFba2V5XS5pZCkubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgICAgICAgJ1lvdSBjYW5ub3QgcHJvdmlkZSBtb3JlIHRoYW4gb25lIGF1dGhEYXRhIHByb3ZpZGVyIHdpdGggYW4gaWQuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgQXV0aC5maW5kVXNlcnNXaXRoQXV0aERhdGEocmVxLmNvbmZpZywgYXV0aERhdGEpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXJlc3VsdHNbMF0gfHwgcmVzdWx0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdVc2VyIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGaW5kIHRoZSBwcm92aWRlciB1c2VkIHRvIGZpbmQgdGhlIHVzZXJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBPYmplY3Qua2V5cyhhdXRoRGF0YSkuZmluZChrZXkgPT4gYXV0aERhdGFba2V5XSAmJiBhdXRoRGF0YVtrZXldLmlkKTtcblxuICAgICAgICBwYXJzZVVzZXIgPSBQYXJzZS5Vc2VyLmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCAuLi5yZXN1bHRzWzBdIH0pO1xuICAgICAgICByZXF1ZXN0ID0gZ2V0UmVxdWVzdE9iamVjdCh1bmRlZmluZWQsIHJlcS5hdXRoLCBwYXJzZVVzZXIsIHBhcnNlVXNlciwgcmVxLmNvbmZpZyk7XG4gICAgICAgIHJlcXVlc3QuaXNDaGFsbGVuZ2UgPSB0cnVlO1xuICAgICAgICAvLyBWYWxpZGF0ZSBhdXRoRGF0YSB1c2VkIHRvIGlkZW50aWZ5IHRoZSB1c2VyIHRvIGF2b2lkIGJydXRlLWZvcmNlIGF0dGFjayBvbiBgaWRgXG4gICAgICAgIGNvbnN0IHsgdmFsaWRhdG9yIH0gPSByZXEuY29uZmlnLmF1dGhEYXRhTWFuYWdlci5nZXRWYWxpZGF0b3JGb3JQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvclJlc3BvbnNlID0gYXdhaXQgdmFsaWRhdG9yKGF1dGhEYXRhW3Byb3ZpZGVyXSwgcmVxLCBwYXJzZVVzZXIsIHJlcXVlc3QpO1xuICAgICAgICBpZiAodmFsaWRhdG9yUmVzcG9uc2UgJiYgdmFsaWRhdG9yUmVzcG9uc2UudmFsaWRhdG9yKSB7XG4gICAgICAgICAgYXdhaXQgdmFsaWRhdG9yUmVzcG9uc2UudmFsaWRhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gUmV3cml0ZSB0aGUgZXJyb3IgdG8gYXZvaWQgZ3Vlc3MgaWQgYXR0YWNrXG4gICAgICAgIGxvZ2dlci5lcnJvcihlKTtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICdVc2VyIG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlVXNlcikge1xuICAgICAgcGFyc2VVc2VyID0gdXNlciA/IFBhcnNlLlVzZXIuZnJvbUpTT04oeyBjbGFzc05hbWU6ICdfVXNlcicsIC4uLnVzZXIgfSkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXF1ZXN0ID0gZ2V0UmVxdWVzdE9iamVjdCh1bmRlZmluZWQsIHJlcS5hdXRoLCBwYXJzZVVzZXIsIHBhcnNlVXNlciwgcmVxLmNvbmZpZyk7XG4gICAgICByZXF1ZXN0LmlzQ2hhbGxlbmdlID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgYWNjID0ge307XG4gICAgLy8gRXhlY3V0ZSBjaGFsbGVuZ2Ugc3RlcC1ieS1zdGVwIHdpdGggY29uc2lzdGVudCBvcmRlciBmb3IgYmV0dGVyIGVycm9yIGZlZWRiYWNrXG4gICAgLy8gYW5kIHRvIGF2b2lkIHRvIHRyaWdnZXIgb3RoZXJzIGNoYWxsZW5nZXMgaWYgb25lIG9mIHRoZW0gZmFpbHNcbiAgICBmb3IgKGNvbnN0IHByb3ZpZGVyIG9mIE9iamVjdC5rZXlzKGNoYWxsZW5nZURhdGEpLnNvcnQoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXV0aEFkYXB0ZXIgPSByZXEuY29uZmlnLmF1dGhEYXRhTWFuYWdlci5nZXRWYWxpZGF0b3JGb3JQcm92aWRlcihwcm92aWRlcik7XG4gICAgICAgIGlmICghYXV0aEFkYXB0ZXIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgYWRhcHRlcjogeyBjaGFsbGVuZ2UgfSxcbiAgICAgICAgfSA9IGF1dGhBZGFwdGVyO1xuICAgICAgICBpZiAodHlwZW9mIGNoYWxsZW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyQ2hhbGxlbmdlUmVzcG9uc2UgPSBhd2FpdCBjaGFsbGVuZ2UoXG4gICAgICAgICAgICBjaGFsbGVuZ2VEYXRhW3Byb3ZpZGVyXSxcbiAgICAgICAgICAgIGF1dGhEYXRhICYmIGF1dGhEYXRhW3Byb3ZpZGVyXSxcbiAgICAgICAgICAgIHJlcS5jb25maWcuYXV0aFtwcm92aWRlcl0sXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBhY2NbcHJvdmlkZXJdID0gcHJvdmlkZXJDaGFsbGVuZ2VSZXNwb25zZSB8fCB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZSA9IHJlc29sdmVFcnJvcihlcnIsIHtcbiAgICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICAgIG1lc3NhZ2U6ICdDaGFsbGVuZ2UgZmFpbGVkLiBVbmtub3duIGVycm9yLicsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB1c2VyU3RyaW5nID0gcmVxLmF1dGggJiYgcmVxLmF1dGgudXNlciA/IHJlcS5hdXRoLnVzZXIuaWQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHJ1bm5pbmcgYXV0aCBzdGVwIGNoYWxsZW5nZSBmb3IgJHtwcm92aWRlcn0gZm9yIHVzZXIgJHt1c2VyU3RyaW5nfSB3aXRoIEVycm9yOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0aW9uU3RlcDogJ2NoYWxsZW5nZScsXG4gICAgICAgICAgICBlcnJvcjogZSxcbiAgICAgICAgICAgIHVzZXI6IHVzZXJTdHJpbmcsXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHJlc3BvbnNlOiB7IGNoYWxsZW5nZURhdGE6IGFjYyB9IH07XG4gIH1cblxuICBtb3VudFJvdXRlcygpIHtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3VzZXJzJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZpbmQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy91c2VycycsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvdXNlcnMvbWUnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTWUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3VzZXJzLzpvYmplY3RJZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVHZXQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQVVQnLCAnL3VzZXJzLzpvYmplY3RJZCcsIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSwgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0RFTEVURScsICcvdXNlcnMvOm9iamVjdElkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvbG9naW4nLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nSW4ocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9sb2dpbicsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dJbihyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2xvZ2luQXMnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nSW5BcyhyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2xvZ291dCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2dPdXQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9yZXF1ZXN0UGFzc3dvcmRSZXNldCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVSZXNldFJlcXVlc3QocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy92ZXJpZmljYXRpb25FbWFpbFJlcXVlc3QnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVmVyaWZpY2F0aW9uRW1haWxSZXF1ZXN0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy92ZXJpZnlQYXNzd29yZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVWZXJpZnlQYXNzd29yZChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL3ZlcmlmeVBhc3N3b3JkJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVZlcmlmeVBhc3N3b3JkKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvY2hhbGxlbmdlJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUNoYWxsZW5nZShyZXEpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFVzZXJzUm91dGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxJ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
|
|
756
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX0NvbmZpZyIsIl9BY2NvdW50TG9ja291dCIsIl9DbGFzc2VzUm91dGVyIiwiX3Jlc3QiLCJfQXV0aCIsIl9wYXNzd29yZCIsIl90cmlnZ2VycyIsIl9taWRkbGV3YXJlcyIsIl9SZXN0V3JpdGUiLCJfbG9nZ2VyIiwiX0Vycm9yIiwiX0F1dGhEYXRhTG9jayIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVzZXJzUm91dGVyIiwiQ2xhc3Nlc1JvdXRlciIsImNsYXNzTmFtZSIsInJlbW92ZUhpZGRlblByb3BlcnRpZXMiLCJvYmoiLCJrZXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0ZXN0IiwiX3Nhbml0aXplQXV0aERhdGEiLCJ1c2VyIiwicGFzc3dvcmQiLCJhdXRoRGF0YSIsImtleXMiLCJmb3JFYWNoIiwicHJvdmlkZXIiLCJsZW5ndGgiLCJfYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0IiwicmVxIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwYXlsb2FkIiwiYm9keSIsInVzZXJuYW1lIiwicXVlcnkiLCJlbWFpbCIsImlnbm9yZUVtYWlsVmVyaWZpY2F0aW9uIiwiUGFyc2UiLCJFcnJvciIsIlVTRVJOQU1FX01JU1NJTkciLCJQQVNTV09SRF9NSVNTSU5HIiwiT0JKRUNUX05PVF9GT1VORCIsImlzVmFsaWRQYXNzd29yZCIsIiRvciIsImNvbmZpZyIsImRhdGFiYXNlIiwiZmluZCIsIkF1dGgiLCJtYWludGVuYW5jZSIsInRoZW4iLCJyZXN1bHRzIiwicGFzc3dvcmRDcnlwdG8iLCJjb21wYXJlIiwiZHVtbXlIYXNoIiwibG9nZ2VyQ29udHJvbGxlciIsIndhcm4iLCJmaWx0ZXIiLCJjb3JyZWN0IiwiYWNjb3VudExvY2tvdXRQb2xpY3kiLCJBY2NvdW50TG9ja291dCIsImhhbmRsZUxvZ2luQXR0ZW1wdCIsImF1dGgiLCJpc01hc3RlciIsIkFDTCIsImF1dGhQcm92aWRlciIsImpvaW4iLCJyZXF1ZXN0IiwibWFzdGVyIiwiaXAiLCJpbnN0YWxsYXRpb25JZCIsIm9iamVjdCIsIlVzZXIiLCJmcm9tSlNPTiIsImFzc2lnbiIsImNyZWF0ZWRXaXRoIiwiUmVzdFdyaXRlIiwiYnVpbGRDcmVhdGVkV2l0aCIsImlzTWFpbnRlbmFuY2UiLCJ2ZXJpZnlVc2VyRW1haWxzIiwicHJldmVudExvZ2luV2l0aFVudmVyaWZpZWRFbWFpbCIsImVtYWlsVmVyaWZpZWQiLCJFTUFJTF9OT1RfRk9VTkQiLCJjYXRjaCIsImVycm9yIiwiaGFuZGxlTWUiLCJpbmZvIiwic2Vzc2lvblRva2VuIiwiY3JlYXRlU2FuaXRpemVkRXJyb3IiLCJJTlZBTElEX1NFU1NJT05fVE9LRU4iLCJzZXNzaW9uUmVzcG9uc2UiLCJyZXN0IiwiY29udGV4dCIsInVzZXJJZCIsIm9iamVjdElkIiwidXNlclJlc3BvbnNlIiwiZ2V0IiwicmVzcG9uc2UiLCJoYW5kbGVMb2dJbiIsImNoZWNrSWZVc2VySGFzUHJvdmlkZWRDb25maWd1cmVkUHJvdmlkZXJzRm9yTG9naW4iLCJhdXRoRGF0YVJlc3BvbnNlIiwidmFsaWRhdGVkQXV0aERhdGEiLCJyZXMiLCJoYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24iLCJwYXNzd29yZFBvbGljeSIsIm1heFBhc3N3b3JkQWdlIiwiY2hhbmdlZEF0IiwiX3Bhc3N3b3JkX2NoYW5nZWRfYXQiLCJEYXRlIiwidXBkYXRlIiwiX2VuY29kZSIsIl9fdHlwZSIsImlzbyIsImV4cGlyZXNBdCIsImdldFRpbWUiLCJmaWxlc0NvbnRyb2xsZXIiLCJleHBhbmRGaWxlc0luT2JqZWN0IiwibWF5YmVSdW5UcmlnZ2VyIiwiVHJpZ2dlclR5cGVzIiwiYmVmb3JlTG9naW4iLCJhcHBseUF1dGhEYXRhT3B0aW1pc3RpY0xvY2siLCJjb2RlIiwiU0NSSVBUX0ZBSUxFRCIsInNlc3Npb25EYXRhIiwiY3JlYXRlU2Vzc2lvbiIsImFmdGVyTG9naW5Vc2VyIiwiYWZ0ZXJMb2dpbiIsInJlZmV0Y2hBdXRoIiwiZmlsdGVyZWRVc2VyIiwiZmlsdGVyZWRVc2VyUmVzcG9uc2UiLCJoYW5kbGVMb2dJbkFzIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImlzUmVhZE9ubHkiLCJJTlZBTElEX1ZBTFVFIiwicXVlcnlSZXN1bHRzIiwiaGFuZGxlVmVyaWZ5UGFzc3dvcmQiLCJoYW5kbGVMb2dPdXQiLCJzdWNjZXNzIiwicmVjb3JkcyIsInVuZGVmaW5lZCIsImRlbCIsImFmdGVyTG9nb3V0IiwiU2Vzc2lvbiIsIl90aHJvd09uQmFkRW1haWxDb25maWciLCJDb25maWciLCJ2YWxpZGF0ZUVtYWlsQ29uZmlndXJhdGlvbiIsImVtYWlsQWRhcHRlciIsInVzZXJDb250cm9sbGVyIiwiYWRhcHRlciIsImFwcE5hbWUiLCJwdWJsaWNTZXJ2ZXJVUkwiLCJfcHVibGljU2VydmVyVVJMIiwiZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24iLCJlbWFpbFZlcmlmeVRva2VuUmV1c2VJZlZhbGlkIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwiaGFuZGxlUmVzZXRSZXF1ZXN0IiwidG9rZW4iLCJFTUFJTF9NSVNTSU5HIiwidXNlclJlc3VsdHMiLCJ1c2VyRGF0YSIsIl9wZXJpc2hhYmxlX3Rva2VuIiwiX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdCIsIiRsdCIsIiRleGlzdHMiLCJsaW1pdCIsIklOVkFMSURfRU1BSUxfQUREUkVTUyIsImluZmxhdGUiLCJiZWZvcmVQYXNzd29yZFJlc2V0UmVxdWVzdCIsInNlbmRQYXNzd29yZFJlc2V0RW1haWwiLCJlcnIiLCJyZXNldFBhc3N3b3JkU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwibWVzc2FnZSIsImhhbmRsZVZlcmlmaWNhdGlvbkVtYWlsUmVxdWVzdCIsInZlcmlmeUVtYWlsU3VjY2Vzc09uSW52YWxpZEVtYWlsIiwiZW1haWxWZXJpZnlTdWNjZXNzT25JbnZhbGlkRW1haWwiLCJPVEhFUl9DQVVTRSIsInNlbmQiLCJyZWdlbmVyYXRlRW1haWxWZXJpZnlUb2tlbiIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsImhhbmRsZUNoYWxsZW5nZSIsImNoYWxsZW5nZURhdGEiLCJwYXJzZVVzZXIiLCJBcnJheSIsImlzQXJyYXkiLCJpZCIsImZpbmRVc2Vyc1dpdGhBdXRoRGF0YSIsImdldFJlcXVlc3RPYmplY3QiLCJpc0NoYWxsZW5nZSIsInZhbGlkYXRvciIsImF1dGhEYXRhTWFuYWdlciIsImdldFZhbGlkYXRvckZvclByb3ZpZGVyIiwidmFsaWRhdG9yUmVzcG9uc2UiLCJsb2dnZXIiLCJhY2MiLCJzb3J0IiwiYXV0aEFkYXB0ZXIiLCJjaGFsbGVuZ2UiLCJwcm92aWRlckNoYWxsZW5nZVJlc3BvbnNlIiwicmVzb2x2ZUVycm9yIiwidXNlclN0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJhdXRoZW50aWNhdGlvblN0ZXAiLCJtb3VudFJvdXRlcyIsInJvdXRlIiwiaGFuZGxlRmluZCIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImhhbmRsZUNyZWF0ZSIsImhhbmRsZUdldCIsImhhbmRsZVVwZGF0ZSIsImhhbmRsZURlbGV0ZSIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL1VzZXJzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIHRoZSBVc2VyLXJlbGF0ZWQgcm91dGVzLlxuXG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4uL0NvbmZpZyc7XG5pbXBvcnQgQWNjb3VudExvY2tvdXQgZnJvbSAnLi4vQWNjb3VudExvY2tvdXQnO1xuaW1wb3J0IENsYXNzZXNSb3V0ZXIgZnJvbSAnLi9DbGFzc2VzUm91dGVyJztcbmltcG9ydCByZXN0IGZyb20gJy4uL3Jlc3QnO1xuaW1wb3J0IEF1dGggZnJvbSAnLi4vQXV0aCc7XG5pbXBvcnQgcGFzc3dvcmRDcnlwdG8gZnJvbSAnLi4vcGFzc3dvcmQnO1xuaW1wb3J0IHtcbiAgbWF5YmVSdW5UcmlnZ2VyLFxuICBUeXBlcyBhcyBUcmlnZ2VyVHlwZXMsXG4gIGdldFJlcXVlc3RPYmplY3QsXG4gIHJlc29sdmVFcnJvcixcbiAgaW5mbGF0ZSxcbn0gZnJvbSAnLi4vdHJpZ2dlcnMnO1xuaW1wb3J0IHsgcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5IH0gZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IFJlc3RXcml0ZSBmcm9tICcuLi9SZXN0V3JpdGUnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEVycm9yIH0gZnJvbSAnLi4vRXJyb3InO1xuaW1wb3J0IHsgYXBwbHlBdXRoRGF0YU9wdGltaXN0aWNMb2NrIH0gZnJvbSAnLi4vQXV0aERhdGFMb2NrJztcblxuZXhwb3J0IGNsYXNzIFVzZXJzUm91dGVyIGV4dGVuZHMgQ2xhc3Nlc1JvdXRlciB7XG4gIGNsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ19Vc2VyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBcIl9cIiBwcmVmaXhlZCBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0LCBleGNlcHQgXCJfX3R5cGVcIlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIEFuIG9iamVjdC5cbiAgICovXG4gIHN0YXRpYyByZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKG9iaikge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIC8vIFJlZ2V4cCBjb21lcyBmcm9tIFBhcnNlLk9iamVjdC5wcm90b3R5cGUudmFsaWRhdGVcbiAgICAgICAgaWYgKGtleSAhPT0gJ19fdHlwZScgJiYgIS9eW0EtWmEtel1bMC05QS1aYS16X10qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIHJldHJpZXZpbmcgYSB1c2VyIGRpcmVjdGx5IGZyb20gdGhlIGRhdGFiYXNlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVcbiAgICogcGFzc3dvcmQgZnJvbSB0aGUgb2JqZWN0IChmb3Igc2VjdXJpdHkpLCBhbmQgZml4IGFuIGlzc3VlIHNvbWUgU0RLcyBoYXZlXG4gICAqIHdpdGggbnVsbCB2YWx1ZXNcbiAgICovXG4gIF9zYW5pdGl6ZUF1dGhEYXRhKHVzZXIpIHtcbiAgICBkZWxldGUgdXNlci5wYXNzd29yZDtcblxuICAgIC8vIFNvbWV0aW1lcyB0aGUgYXV0aERhdGEgc3RpbGwgaGFzIG51bGwgb24gdGhhdCBrZXlzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcnNlLWNvbW11bml0eS9wYXJzZS1zZXJ2ZXIvaXNzdWVzLzkzNVxuICAgIGlmICh1c2VyLmF1dGhEYXRhKSB7XG4gICAgICBPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5mb3JFYWNoKHByb3ZpZGVyID0+IHtcbiAgICAgICAgaWYgKHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHVzZXIuYXV0aERhdGFbcHJvdmlkZXJdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh1c2VyLmF1dGhEYXRhKS5sZW5ndGggPT0gMCkge1xuICAgICAgICBkZWxldGUgdXNlci5hdXRoRGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgcGFzc3dvcmQgcmVxdWVzdCBpbiBsb2dpbiBhbmQgdmVyaWZ5UGFzc3dvcmRcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlcSBUaGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBVc2VyIG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gVXNlIHF1ZXJ5IHBhcmFtZXRlcnMgaW5zdGVhZCBpZiBwcm92aWRlZCBpbiB1cmxcbiAgICAgIGxldCBwYXlsb2FkID0gcmVxLmJvZHkgfHwge307XG4gICAgICBpZiAoXG4gICAgICAgICghcGF5bG9hZC51c2VybmFtZSAmJiByZXEucXVlcnkgJiYgcmVxLnF1ZXJ5LnVzZXJuYW1lKSB8fFxuICAgICAgICAoIXBheWxvYWQuZW1haWwgJiYgcmVxLnF1ZXJ5ICYmIHJlcS5xdWVyeS5lbWFpbClcbiAgICAgICkge1xuICAgICAgICBwYXlsb2FkID0gcmVxLnF1ZXJ5O1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkLCBpZ25vcmVFbWFpbFZlcmlmaWNhdGlvbiB9ID0gcGF5bG9hZDtcblxuICAgICAgLy8gVE9ETzogdXNlIHRoZSByaWdodCBlcnJvciBjb2RlcyAvIGRlc2NyaXB0aW9ucy5cbiAgICAgIGlmICghdXNlcm5hbWUgJiYgIWVtYWlsKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5VU0VSTkFNRV9NSVNTSU5HLCAndXNlcm5hbWUvZW1haWwgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5QQVNTV09SRF9NSVNTSU5HLCAncGFzc3dvcmQgaXMgcmVxdWlyZWQuJyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBwYXNzd29yZCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgKGVtYWlsICYmIHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHx8XG4gICAgICAgICh1c2VybmFtZSAmJiB0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVzZXI7XG4gICAgICBsZXQgaXNWYWxpZFBhc3N3b3JkID0gZmFsc2U7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZW1haWwgJiYgdXNlcm5hbWUpIHtcbiAgICAgICAgcXVlcnkgPSB7IGVtYWlsLCB1c2VybmFtZSB9O1xuICAgICAgfSBlbHNlIGlmIChlbWFpbCkge1xuICAgICAgICBxdWVyeSA9IHsgZW1haWwgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0geyAkb3I6IFt7IHVzZXJuYW1lIH0sIHsgZW1haWw6IHVzZXJuYW1lIH1dIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxLmNvbmZpZy5kYXRhYmFzZVxuICAgICAgICAuZmluZCgnX1VzZXInLCBxdWVyeSwge30sIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZykpXG4gICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIFBlcmZvcm0gYSBkdW1teSBiY3J5cHQgY29tcGFyZSB0byBub3JtYWxpemUgcmVzcG9uc2UgdGltaW5nLFxuICAgICAgICAgICAgLy8gcHJldmVudGluZyB1c2VyIGVudW1lcmF0aW9uIHZpYSB0aW1pbmcgc2lkZS1jaGFubmVsXG4gICAgICAgICAgICByZXR1cm4gcGFzc3dvcmRDcnlwdG9cbiAgICAgICAgICAgICAgLmNvbXBhcmUocGFzc3dvcmQsIHBhc3N3b3JkQ3J5cHRvLmR1bW15SGFzaClcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZC4nKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gY29ybmVyIGNhc2Ugd2hlcmUgdXNlcjEgaGFzIHVzZXJuYW1lID09IHVzZXIyIGVtYWlsXG4gICAgICAgICAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIud2FybihcbiAgICAgICAgICAgICAgXCJUaGVyZSBpcyBhIHVzZXIgd2hpY2ggZW1haWwgaXMgdGhlIHNhbWUgYXMgYW5vdGhlciB1c2VyJ3MgdXNlcm5hbWUsIGxvZ2dpbmcgaW4gYmFzZWQgb24gdXNlcm5hbWVcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHVzZXIgPSByZXN1bHRzLmZpbHRlcih1c2VyID0+IHVzZXIudXNlcm5hbWUgPT09IHVzZXJuYW1lKVswXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXNlciA9IHJlc3VsdHNbMF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiB1c2VyLnBhc3N3b3JkICE9PSAnc3RyaW5nJyB8fCB1c2VyLnBhc3N3b3JkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gUGFzc3dvcmRsZXNzIGFjY291bnQgKGUuZy4gT0F1dGgtb25seSk6IHJ1biBkdW1teSBjb21wYXJlIGZvclxuICAgICAgICAgICAgLy8gdGltaW5nIG5vcm1hbGl6YXRpb24sIGRpc2NhcmQgcmVzdWx0LCBhbHdheXMgcmVqZWN0XG4gICAgICAgICAgICByZXR1cm4gcGFzc3dvcmRDcnlwdG8uY29tcGFyZShwYXNzd29yZCwgcGFzc3dvcmRDcnlwdG8uZHVtbXlIYXNoKS50aGVuKCgpID0+IGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHBhc3N3b3JkQ3J5cHRvLmNvbXBhcmUocGFzc3dvcmQsIHVzZXIucGFzc3dvcmQpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihjb3JyZWN0ID0+IHtcbiAgICAgICAgICBpc1ZhbGlkUGFzc3dvcmQgPSBjb3JyZWN0O1xuICAgICAgICAgIGNvbnN0IGFjY291bnRMb2Nrb3V0UG9saWN5ID0gbmV3IEFjY291bnRMb2Nrb3V0KHVzZXIsIHJlcS5jb25maWcpO1xuICAgICAgICAgIHJldHVybiBhY2NvdW50TG9ja291dFBvbGljeS5oYW5kbGVMb2dpbkF0dGVtcHQoaXNWYWxpZFBhc3N3b3JkKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghaXNWYWxpZFBhc3N3b3JkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0ludmFsaWQgdXNlcm5hbWUvcGFzc3dvcmQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEEgdXNlciB3aXRoIGFuIGVtcHR5IEFDTCAobWFzdGVyIGtleSBvbmx5KSBpcyBjb25zaWRlcmVkIGxvY2tlZCBvdXQgYW5kXG4gICAgICAgICAgLy8gY2Fubm90IGxvZyBpbi4gVGhpcyBvbmx5IHByZXZlbnRzIG5ldyBsb2dpbnM7IGV4aXN0aW5nIHNlc3Npb24gdG9rZW5zXG4gICAgICAgICAgLy8gcmVtYWluIHZhbGlkLiBUbyBpbW1lZGlhdGVseSByZXZva2UgYWNjZXNzLCBhbHNvIGRlc3Ryb3kgdGhlIHVzZXInc1xuICAgICAgICAgIC8vIHNlc3Npb25zIHZpYSBtYXN0ZXIga2V5LlxuICAgICAgICAgIGlmICghcmVxLmF1dGguaXNNYXN0ZXIgJiYgdXNlci5BQ0wgJiYgT2JqZWN0LmtleXModXNlci5BQ0wpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCwgJ0ludmFsaWQgdXNlcm5hbWUvcGFzc3dvcmQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENyZWF0ZSByZXF1ZXN0IG9iamVjdCBmb3IgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uc1xuICAgICAgICAgIGNvbnN0IGF1dGhQcm92aWRlciA9XG4gICAgICAgICAgICByZXEuYm9keSAmJlxuICAgICAgICAgICAgcmVxLmJvZHkuYXV0aERhdGEgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlcS5ib2R5LmF1dGhEYXRhKS5sZW5ndGggJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlcS5ib2R5LmF1dGhEYXRhKS5qb2luKCcsJyk7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIG1hc3RlcjogcmVxLmF1dGguaXNNYXN0ZXIsXG4gICAgICAgICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgICAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuYXV0aC5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgICAgIG9iamVjdDogUGFyc2UuVXNlci5mcm9tSlNPTihPYmplY3QuYXNzaWduKHsgY2xhc3NOYW1lOiAnX1VzZXInIH0sIHVzZXIpKSxcbiAgICAgICAgICAgIGNyZWF0ZWRXaXRoOiBSZXN0V3JpdGUuYnVpbGRDcmVhdGVkV2l0aCgnbG9naW4nLCBhdXRoUHJvdmlkZXIpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBJZiByZXF1ZXN0IGRvZXNuJ3QgdXNlIG1hc3RlciBvciBtYWludGVuYW5jZSBrZXkgd2l0aCBpZ25vcmluZyBlbWFpbCB2ZXJpZmljYXRpb25cbiAgICAgICAgICBpZiAoISgocmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZSkgJiYgaWdub3JlRW1haWxWZXJpZmljYXRpb24pKSB7XG5cbiAgICAgICAgICAgIC8vIEdldCB2ZXJpZmljYXRpb24gY29uZGl0aW9ucyB3aGljaCBjYW4gYmUgYm9vbGVhbnMgb3IgZnVuY3Rpb25zOyB0aGUgcHVycG9zZSBvZiB0aGlzIGFzeW5jL2F3YWl0XG4gICAgICAgICAgICAvLyBzdHJ1Y3R1cmUgaXMgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBleGVjdXRpbmcgc3Vic2VxdWVudCBmdW5jdGlvbnMgaWYgcHJldmlvdXMgb25lcyBmYWlsIGluIHRoZVxuICAgICAgICAgICAgLy8gY29uZGl0aW9uYWwgc3RhdGVtZW50IGJlbG93LCBhcyBhIGRldmVsb3BlciBtYXkgZGVjaWRlIHRvIGV4ZWN1dGUgZXhwZW5zaXZlIG9wZXJhdGlvbnMgaW4gdGhlbVxuICAgICAgICAgICAgY29uc3QgdmVyaWZ5VXNlckVtYWlscyA9IGFzeW5jICgpID0+IHJlcS5jb25maWcudmVyaWZ5VXNlckVtYWlscyA9PT0gdHJ1ZSB8fCAodHlwZW9mIHJlcS5jb25maWcudmVyaWZ5VXNlckVtYWlscyA9PT0gJ2Z1bmN0aW9uJyAmJiBhd2FpdCBQcm9taXNlLnJlc29sdmUocmVxLmNvbmZpZy52ZXJpZnlVc2VyRW1haWxzKHJlcXVlc3QpKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBwcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsID0gYXN5bmMgKCkgPT4gcmVxLmNvbmZpZy5wcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsID09PSB0cnVlIHx8ICh0eXBlb2YgcmVxLmNvbmZpZy5wcmV2ZW50TG9naW5XaXRoVW52ZXJpZmllZEVtYWlsID09PSAnZnVuY3Rpb24nICYmIGF3YWl0IFByb21pc2UucmVzb2x2ZShyZXEuY29uZmlnLnByZXZlbnRMb2dpbldpdGhVbnZlcmlmaWVkRW1haWwocmVxdWVzdCkpID09PSB0cnVlKTtcbiAgICAgICAgICAgIGlmIChhd2FpdCB2ZXJpZnlVc2VyRW1haWxzKCkgJiYgYXdhaXQgcHJldmVudExvZ2luV2l0aFVudmVyaWZpZWRFbWFpbCgpICYmICF1c2VyLmVtYWlsVmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkVNQUlMX05PVF9GT1VORCwgJ1VzZXIgZW1haWwgaXMgbm90IHZlcmlmaWVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3Nhbml0aXplQXV0aERhdGEodXNlcik7XG5cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh1c2VyKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVNZShyZXEpIHtcbiAgICBpZiAoIXJlcS5pbmZvIHx8ICFyZXEuaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsIHJlcS5jb25maWcpO1xuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSByZXEuaW5mby5zZXNzaW9uVG9rZW47XG4gICAgLy8gUXVlcnkgdGhlIHNlc3Npb24gd2l0aCBtYXN0ZXIga2V5IHRvIHZhbGlkYXRlIHRoZSBzZXNzaW9uIHRva2VuLFxuICAgIC8vIGJ1dCBkbyBOT1QgaW5jbHVkZSAndXNlcicgdG8gYXZvaWQgbGVha2luZyB1c2VyIGRhdGEgdmlhIG1hc3RlciBjb250ZXh0XG4gICAgY29uc3Qgc2Vzc2lvblJlc3BvbnNlID0gYXdhaXQgcmVzdC5maW5kKFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIEF1dGgubWFzdGVyKHJlcS5jb25maWcpLFxuICAgICAgJ19TZXNzaW9uJyxcbiAgICAgIHsgc2Vzc2lvblRva2VuIH0sXG4gICAgICB7fSxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICAgIGlmIChcbiAgICAgICFzZXNzaW9uUmVzcG9uc2UucmVzdWx0cyB8fFxuICAgICAgc2Vzc2lvblJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDAgfHxcbiAgICAgICFzZXNzaW9uUmVzcG9uc2UucmVzdWx0c1swXS51c2VyXG4gICAgKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTYW5pdGl6ZWRFcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1NFU1NJT05fVE9LRU4sICdJbnZhbGlkIHNlc3Npb24gdG9rZW4nLCByZXEuY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgdXNlcklkID0gc2Vzc2lvblJlc3BvbnNlLnJlc3VsdHNbMF0udXNlci5vYmplY3RJZDtcbiAgICAvLyBSZS1mZXRjaCB0aGUgdXNlciB3aXRoIHRoZSBjYWxsZXIncyBhdXRoIGNvbnRleHQgc28gdGhhdFxuICAgIC8vIHByb3RlY3RlZEZpZWxkcywgQ0xQLCBhbmQgYXV0aCBhZGFwdGVyIGFmdGVyRmluZCBhcHBseSBjb3JyZWN0bHlcbiAgICBjb25zdCB1c2VyUmVzcG9uc2UgPSBhd2FpdCByZXN0LmdldChcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuYXV0aCxcbiAgICAgICdfVXNlcicsXG4gICAgICB1c2VySWQsXG4gICAgICB7fSxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuICAgIGlmICghdXNlclJlc3BvbnNlLnJlc3VsdHMgfHwgdXNlclJlc3BvbnNlLnJlc3VsdHMubGVuZ3RoID09IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfU0VTU0lPTl9UT0tFTiwgJ0ludmFsaWQgc2Vzc2lvbiB0b2tlbicsIHJlcS5jb25maWcpO1xuICAgIH1cbiAgICBjb25zdCB1c2VyID0gdXNlclJlc3BvbnNlLnJlc3VsdHNbMF07XG4gICAgLy8gU2VuZCB0b2tlbiBiYWNrIG9uIHRoZSBsb2dpbiwgYmVjYXVzZSBTREtzIGV4cGVjdCB0aGF0LlxuICAgIHVzZXIuc2Vzc2lvblRva2VuID0gc2Vzc2lvblRva2VuO1xuICAgIC8vIFJlbW92ZSBoaWRkZW4gcHJvcGVydGllcy5cbiAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKHVzZXIpO1xuICAgIHJldHVybiB7IHJlc3BvbnNlOiB1c2VyIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVMb2dJbihyZXEpIHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5fYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0KHJlcSk7XG4gICAgY29uc3QgYXV0aERhdGEgPSByZXEuYm9keSAmJiByZXEuYm9keS5hdXRoRGF0YTtcbiAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBwcm92aWRlZCB0aGVpciByZXF1aXJlZCBhdXRoIHByb3ZpZGVyc1xuICAgIEF1dGguY2hlY2tJZlVzZXJIYXNQcm92aWRlZENvbmZpZ3VyZWRQcm92aWRlcnNGb3JMb2dpbihcbiAgICAgIHJlcSxcbiAgICAgIGF1dGhEYXRhLFxuICAgICAgdXNlci5hdXRoRGF0YSxcbiAgICAgIHJlcS5jb25maWdcbiAgICApO1xuXG4gICAgbGV0IGF1dGhEYXRhUmVzcG9uc2U7XG4gICAgbGV0IHZhbGlkYXRlZEF1dGhEYXRhO1xuICAgIGlmIChhdXRoRGF0YSkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgQXV0aC5oYW5kbGVBdXRoRGF0YVZhbGlkYXRpb24oXG4gICAgICAgIGF1dGhEYXRhLFxuICAgICAgICBuZXcgUmVzdFdyaXRlKFxuICAgICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgICAgcmVxLmF1dGgsXG4gICAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgICB7IG9iamVjdElkOiB1c2VyLm9iamVjdElkIH0sXG4gICAgICAgICAgcmVxLmJvZHkgfHwge30sXG4gICAgICAgICAgdXNlcixcbiAgICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICAgICksXG4gICAgICAgIHVzZXJcbiAgICAgICk7XG4gICAgICBhdXRoRGF0YVJlc3BvbnNlID0gcmVzLmF1dGhEYXRhUmVzcG9uc2U7XG4gICAgICB2YWxpZGF0ZWRBdXRoRGF0YSA9IHJlcy5hdXRoRGF0YTtcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgcGFzc3dvcmQgZXhwaXJ5IHBvbGljeVxuICAgIGlmIChyZXEuY29uZmlnLnBhc3N3b3JkUG9saWN5ICYmIHJlcS5jb25maWcucGFzc3dvcmRQb2xpY3kubWF4UGFzc3dvcmRBZ2UpIHtcbiAgICAgIGxldCBjaGFuZ2VkQXQgPSB1c2VyLl9wYXNzd29yZF9jaGFuZ2VkX2F0O1xuXG4gICAgICBpZiAoIWNoYW5nZWRBdCkge1xuICAgICAgICAvLyBwYXNzd29yZCB3YXMgY3JlYXRlZCBiZWZvcmUgZXhwaXJ5IHBvbGljeSB3YXMgZW5hYmxlZC5cbiAgICAgICAgLy8gc2ltcGx5IHVwZGF0ZSBfVXNlciBvYmplY3Qgc28gdGhhdCBpdCB3aWxsIHN0YXJ0IGVuZm9yY2luZyBmcm9tIG5vd1xuICAgICAgICBjaGFuZ2VkQXQgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXEuY29uZmlnLmRhdGFiYXNlLnVwZGF0ZShcbiAgICAgICAgICAnX1VzZXInLFxuICAgICAgICAgIHsgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUgfSxcbiAgICAgICAgICB7IF9wYXNzd29yZF9jaGFuZ2VkX2F0OiBQYXJzZS5fZW5jb2RlKGNoYW5nZWRBdCkgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgcGFzc3dvcmQgaGFzIGV4cGlyZWRcbiAgICAgICAgaWYgKGNoYW5nZWRBdC5fX3R5cGUgPT0gJ0RhdGUnKSB7XG4gICAgICAgICAgY2hhbmdlZEF0ID0gbmV3IERhdGUoY2hhbmdlZEF0Lmlzbyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBleHBpcnkgdGltZS5cbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gbmV3IERhdGUoXG4gICAgICAgICAgY2hhbmdlZEF0LmdldFRpbWUoKSArIDg2NDAwMDAwICogcmVxLmNvbmZpZy5wYXNzd29yZFBvbGljeS5tYXhQYXNzd29yZEFnZVxuICAgICAgICApO1xuICAgICAgICBpZiAoZXhwaXJlc0F0IDwgbmV3IERhdGUoKSlcbiAgICAgICAgLy8gZmFpbCBvZiBjdXJyZW50IHRpbWUgaXMgcGFzdCBwYXNzd29yZCBleHBpcnkgdGltZVxuICAgICAgICB7IHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELFxuICAgICAgICAgICdZb3VyIHBhc3N3b3JkIGhhcyBleHBpcmVkLiBQbGVhc2UgcmVzZXQgeW91ciBwYXNzd29yZC4nXG4gICAgICAgICk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaGlkZGVuIHByb3BlcnRpZXMuXG4gICAgVXNlcnNSb3V0ZXIucmVtb3ZlSGlkZGVuUHJvcGVydGllcyh1c2VyKTtcblxuICAgIGF3YWl0IHJlcS5jb25maWcuZmlsZXNDb250cm9sbGVyLmV4cGFuZEZpbGVzSW5PYmplY3QocmVxLmNvbmZpZywgdXNlcik7XG5cbiAgICAvLyBCZWZvcmUgbG9naW4gdHJpZ2dlcjsgdGhyb3dzIGlmIGZhaWx1cmVcbiAgICBhd2FpdCBtYXliZVJ1blRyaWdnZXIoXG4gICAgICBUcmlnZ2VyVHlwZXMuYmVmb3JlTG9naW4sXG4gICAgICByZXEuYXV0aCxcbiAgICAgIFBhcnNlLlVzZXIuZnJvbUpTT04oT2JqZWN0LmFzc2lnbih7IGNsYXNzTmFtZTogJ19Vc2VyJyB9LCB1c2VyKSksXG4gICAgICBudWxsLFxuICAgICAgcmVxLmNvbmZpZyxcbiAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICApO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBzb21lIG5ldyB2YWxpZGF0ZWQgYXV0aERhdGEgdXBkYXRlIGRpcmVjdGx5XG4gICAgaWYgKHZhbGlkYXRlZEF1dGhEYXRhICYmIE9iamVjdC5rZXlzKHZhbGlkYXRlZEF1dGhEYXRhKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9O1xuICAgICAgLy8gUHJldmVudCBjb25jdXJyZW50IHJlcXVlc3RzIGZyb20gYm90aCBzdWNjZWVkaW5nIHdoZW4gY29uc3VtaW5nIHNpbmdsZS11c2VcbiAgICAgIC8vIHRva2VucyAoZS5nLiBNRkEgcmVjb3ZlcnkgY29kZXMgb3IgU01TIE9UUCB0b2tlbnMpIGJ5IGV4dGVuZGluZyB0aGUgdXBkYXRlXG4gICAgICAvLyBXSEVSRSBjbGF1c2Ugd2l0aCB0aGUgb3JpZ2luYWwgdmFsdWVzIG9mIGNoYW5nZWQgcHJpbWl0aXZlL2FycmF5IGZpZWxkcy5cbiAgICAgIGFwcGx5QXV0aERhdGFPcHRpbWlzdGljTG9jayhxdWVyeSwgdXNlci5hdXRoRGF0YSwgdmFsaWRhdGVkQXV0aERhdGEpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS51cGRhdGUoJ19Vc2VyJywgcXVlcnksIHsgYXV0aERhdGE6IHZhbGlkYXRlZEF1dGhEYXRhIH0sIHt9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsICdJbnZhbGlkIGF1dGggZGF0YScpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2Vzc2lvbkRhdGEsIGNyZWF0ZVNlc3Npb24gfSA9IFJlc3RXcml0ZS5jcmVhdGVTZXNzaW9uKHJlcS5jb25maWcsIHtcbiAgICAgIHVzZXJJZDogdXNlci5vYmplY3RJZCxcbiAgICAgIGNyZWF0ZWRXaXRoOiBSZXN0V3JpdGUuYnVpbGRDcmVhdGVkV2l0aCgnbG9naW4nKSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiByZXEuaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICB9KTtcblxuICAgIHVzZXIuc2Vzc2lvblRva2VuID0gc2Vzc2lvbkRhdGEuc2Vzc2lvblRva2VuO1xuXG4gICAgYXdhaXQgY3JlYXRlU2Vzc2lvbigpO1xuXG4gICAgY29uc3QgYWZ0ZXJMb2dpblVzZXIgPSBQYXJzZS5Vc2VyLmZyb21KU09OKE9iamVjdC5hc3NpZ24oeyBjbGFzc05hbWU6ICdfVXNlcicgfSwgdXNlcikpO1xuICAgIGF3YWl0IG1heWJlUnVuVHJpZ2dlcihcbiAgICAgIFRyaWdnZXJUeXBlcy5hZnRlckxvZ2luLFxuICAgICAgeyAuLi5yZXEuYXV0aCwgdXNlcjogYWZ0ZXJMb2dpblVzZXIgfSxcbiAgICAgIGFmdGVyTG9naW5Vc2VyLFxuICAgICAgbnVsbCxcbiAgICAgIHJlcS5jb25maWcsXG4gICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgKTtcblxuICAgIC8vIFJlLWZldGNoIHRoZSB1c2VyIHdpdGggdGhlIGNhbGxlcidzIGF1dGggY29udGV4dCBzbyB0aGF0XG4gICAgLy8gcHJvdGVjdGVkRmllbGRzIGFuZCBDTFAgYXBwbHkgY29ycmVjdGx5OyBpZiB0aGUgY2FsbGVyIHVzZWQgbWFzdGVyIGtleSxcbiAgICAvLyBwcm90ZWN0ZWRGaWVsZHMgYXJlIGJ5cGFzc2VkLCBtYXRjaGluZyB0aGUgYmVoYXZpb3Igb2YgR0VUIC91c2Vycy86aWRcbiAgICBjb25zdCByZWZldGNoQXV0aCA9XG4gICAgICByZXEuYXV0aC5pc01hc3RlciB8fCByZXEuYXV0aC5pc01haW50ZW5hbmNlXG4gICAgICAgID8gcmVxLmF1dGhcbiAgICAgICAgOiBuZXcgQXV0aC5BdXRoKHtcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgICAgIHVzZXI6IFBhcnNlLk9iamVjdC5mcm9tSlNPTih7IGNsYXNzTmFtZTogJ19Vc2VyJywgb2JqZWN0SWQ6IHVzZXIub2JqZWN0SWQgfSksXG4gICAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5pbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICB9KTtcbiAgICBsZXQgZmlsdGVyZWRVc2VyO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZFVzZXJSZXNwb25zZSA9IGF3YWl0IHJlc3QuZ2V0KFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZWZldGNoQXV0aCxcbiAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgdXNlci5vYmplY3RJZCxcbiAgICAgICAge30sXG4gICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICk7XG4gICAgICBmaWx0ZXJlZFVzZXIgPSBmaWx0ZXJlZFVzZXJSZXNwb25zZS5yZXN1bHRzPy5bMF07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBUaGUgcmUtZmV0Y2ggZW5mb3JjZXMgYF9Vc2VyYCBgZ2V0YCBDTFAgYW5kIG1heSBiZSBkZW5pZWQgYnkgYWNjZXNzXG4gICAgICAvLyBjb250cm9sIChlLmcuIENMUCBgZ2V0OiB7fWAgb3IgYW4gQUNMIHRoYXQgZXhjbHVkZXMgdGhlIGNhbGxlcikuXG4gICAgICAvLyBIYW5kbGVkIGJlbG93OyBuZXZlciBmYWxsIGJhY2sgdG8gdGhlIHJhdyByb3cuXG4gICAgfVxuICAgIGlmICghZmlsdGVyZWRVc2VyKSB7XG4gICAgICAvLyBNYXN0ZXIvbWFpbnRlbmFuY2UgY2FsbGVycyBieXBhc3MgQ0xQLCBwcm90ZWN0ZWRGaWVsZHMsIGFuZCBhdXRoRGF0YVxuICAgICAgLy8gYWZ0ZXJGaW5kLCBzbyBmb3IgdGhlbSBhbiBlbXB0eSByZS1mZXRjaCBpcyBhIGdlbnVpbmUgbm90LWZvdW5kIGVkZ2UsIG5vdFxuICAgICAgLy8gYW4gYWNjZXNzLWNvbnRyb2wgZGVuaWFsOyB0aGV5IGFyZSBlbnRpdGxlZCB0byB0aGUgZnVsbCByb3cuIEZvciBldmVyeVxuICAgICAgLy8gb3RoZXIgY2FsbGVyLCBhbiBlbXB0eS9kZW5pZWQgcmUtZmV0Y2ggbWVhbnMgYWNjZXNzIGNvbnRyb2wgd2l0aGhlbGQgdGhlXG4gICAgICAvLyByZWNvcmQsIHNvIGRpc2Nsb3NlIG9ubHkgdGhlIGlkZW50aXR5IOKAlCBuZXZlciB0aGUgcmF3IHJvdywgd2hpY2ggd291bGRcbiAgICAgIC8vIGxlYWsgZmllbGRzIGhpZGRlbiBieSBgcHJvdGVjdGVkRmllbGRzYCBhbmQgcmF3IGBhdXRoRGF0YWAgKGUuZy4gTUZBXG4gICAgICAvLyBzZWNyZXRzIGFuZCByZWNvdmVyeSBjb2RlcykgdGhhdCB0aGUgc2FuaXRpemluZyByZS1mZXRjaCB3b3VsZCByZW1vdmUuXG4gICAgICAvLyBUaGUgc2Vzc2lvbiB0b2tlbiBpcyBzdGlsbCBhdHRhY2hlZCBiZWxvdyBzbyBsb2dpbiBzdWNjZWVkcy5cbiAgICAgIGZpbHRlcmVkVXNlciA9XG4gICAgICAgIHJlcS5hdXRoLmlzTWFzdGVyIHx8IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2UgPyB1c2VyIDogeyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9O1xuICAgIH1cbiAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKGZpbHRlcmVkVXNlcik7XG4gICAgZmlsdGVyZWRVc2VyLnNlc3Npb25Ub2tlbiA9IHVzZXIuc2Vzc2lvblRva2VuO1xuICAgIGlmIChhdXRoRGF0YVJlc3BvbnNlKSB7XG4gICAgICBmaWx0ZXJlZFVzZXIuYXV0aERhdGFSZXNwb25zZSA9IGF1dGhEYXRhUmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmVzcG9uc2U6IGZpbHRlcmVkVXNlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgYWxsb3dzIG1hc3Rlci1rZXkgY2xpZW50cyB0byBjcmVhdGUgdXNlciBzZXNzaW9ucyB3aXRob3V0IGFjY2VzcyB0b1xuICAgKiB1c2VyIGNyZWRlbnRpYWxzLiBUaGlzIGVuYWJsZXMgc3lzdGVtcyB0aGF0IGNhbiBhdXRoZW50aWNhdGUgYWNjZXNzIGFub3RoZXJcbiAgICogd2F5IChBUEkga2V5LCBhcHAgYWRtaW5pc3RyYXRvcnMpIHRvIGFjdCBvbiBhIHVzZXIncyBiZWhhbGYuXG4gICAqXG4gICAqIFdlIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIHJhdGhlciB0aGFuIGxvb2tpbmcgZm9yIGFuIGV4aXN0aW5nIHNlc3Npb247IHdlXG4gICAqIHdhbnQgdGhpcyB0byB3b3JrIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHVzZXIgaXMgbG9nZ2VkIG91dCBvbiBhbGxcbiAgICogZGV2aWNlcywgc2luY2UgdGhpcyBjYW4gYmUgdXNlZCBieSBhdXRvbWF0ZWQgc3lzdGVtcyBhY3Rpbmcgb24gdGhlIHVzZXInc1xuICAgKiBiZWhhbGYuXG4gICAqXG4gICAqIEZvciB0aGUgbW9tZW50LCB3ZSdyZSBvbWl0dGluZyBldmVudCBob29rcyBhbmQgbG9ja291dCBjaGVja3MsIHNpbmNlXG4gICAqIGltbWVkaWF0ZSB1c2UgY2FzZXMgc3VnZ2VzdCAvbG9naW5BcyBjb3VsZCBiZSB1c2VkIGZvciBzZW1hbnRpY2FsbHlcbiAgICogZGlmZmVyZW50IHJlYXNvbnMgZnJvbSAvbG9naW5cbiAgICovXG4gIGFzeW5jIGhhbmRsZUxvZ0luQXMocmVxKSB7XG4gICAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICdtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJyxcbiAgICAgICAgcmVxLmNvbmZpZ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PUEVSQVRJT05fRk9SQklEREVOLFxuICAgICAgICBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBsb2dpbiBhcyBhbm90aGVyIHVzZXIuXCIsXG4gICAgICAgIHJlcS5jb25maWdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcklkID0gcmVxLmJvZHk/LnVzZXJJZCB8fCByZXEucXVlcnkudXNlcklkO1xuICAgIGlmICghdXNlcklkKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfVkFMVUUsXG4gICAgICAgICd1c2VySWQgbXVzdCBub3QgYmUgZW1wdHksIG51bGwsIG9yIHVuZGVmaW5lZCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlSZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHsgb2JqZWN0SWQ6IHVzZXJJZCB9KTtcbiAgICBjb25zdCB1c2VyID0gcXVlcnlSZXN1bHRzWzBdO1xuICAgIGlmICghdXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLk9CSkVDVF9OT1RfRk9VTkQsICd1c2VyIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3Nhbml0aXplQXV0aERhdGEodXNlcik7XG5cbiAgICBjb25zdCB7IHNlc3Npb25EYXRhLCBjcmVhdGVTZXNzaW9uIH0gPSBSZXN0V3JpdGUuY3JlYXRlU2Vzc2lvbihyZXEuY29uZmlnLCB7XG4gICAgICB1c2VySWQsXG4gICAgICBjcmVhdGVkV2l0aDogUmVzdFdyaXRlLmJ1aWxkQ3JlYXRlZFdpdGgoJ2xvZ2luJywgJ21hc3RlcmtleScpLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5pbmZvLmluc3RhbGxhdGlvbklkLFxuICAgIH0pO1xuXG4gICAgdXNlci5zZXNzaW9uVG9rZW4gPSBzZXNzaW9uRGF0YS5zZXNzaW9uVG9rZW47XG5cbiAgICBhd2FpdCBjcmVhdGVTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4geyByZXNwb25zZTogdXNlciB9O1xuICB9XG5cbiAgaGFuZGxlVmVyaWZ5UGFzc3dvcmQocmVxKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dGhlbnRpY2F0ZVVzZXJGcm9tUmVxdWVzdChyZXEpXG4gICAgICAudGhlbihhc3luYyB1c2VyID0+IHtcbiAgICAgICAgLy8gUmVtb3ZlIGhpZGRlbiBwcm9wZXJ0aWVzLlxuICAgICAgICBVc2Vyc1JvdXRlci5yZW1vdmVIaWRkZW5Qcm9wZXJ0aWVzKHVzZXIpO1xuICAgICAgICAvLyBSZS1mZXRjaCB0aGUgdXNlciB3aXRoIHRoZSBjYWxsZXIncyBhdXRoIGNvbnRleHQgc28gdGhhdFxuICAgICAgICAvLyBwcm90ZWN0ZWRGaWVsZHMgYW5kIENMUCBhcHBseSBjb3JyZWN0bHk7IGlmIHRoZSBjYWxsZXIgdXNlZCBtYXN0ZXIga2V5LFxuICAgICAgICAvLyBwcm90ZWN0ZWRGaWVsZHMgYXJlIGJ5cGFzc2VkLCBtYXRjaGluZyB0aGUgYmVoYXZpb3Igb2YgR0VUIC91c2Vycy86aWRcbiAgICAgICAgY29uc3QgcmVmZXRjaEF1dGggPVxuICAgICAgICAgIHJlcS5hdXRoLmlzTWFzdGVyIHx8IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2VcbiAgICAgICAgICAgID8gcmVxLmF1dGhcbiAgICAgICAgICAgIDogbmV3IEF1dGguQXV0aCh7XG4gICAgICAgICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICB1c2VyOiBQYXJzZS5PYmplY3QuZnJvbUpTT04oeyBjbGFzc05hbWU6ICdfVXNlcicsIG9iamVjdElkOiB1c2VyLm9iamVjdElkIH0pLFxuICAgICAgICAgICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbGV0IGZpbHRlcmVkVXNlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFVzZXJSZXNwb25zZSA9IGF3YWl0IHJlc3QuZ2V0KFxuICAgICAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgICAgIHJlZmV0Y2hBdXRoLFxuICAgICAgICAgICAgJ19Vc2VyJyxcbiAgICAgICAgICAgIHVzZXIub2JqZWN0SWQsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHJlcS5pbmZvLmNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICAgIGZpbHRlcmVkVXNlciA9IGZpbHRlcmVkVXNlclJlc3BvbnNlLnJlc3VsdHM/LlswXTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gVGhlIHJlLWZldGNoIGVuZm9yY2VzIGBfVXNlcmAgYGdldGAgQ0xQIGFuZCBtYXkgYmUgZGVuaWVkIGJ5IGFjY2Vzc1xuICAgICAgICAgIC8vIGNvbnRyb2wgKGUuZy4gQ0xQIGBnZXQ6IHt9YCBvciBhbiBBQ0wgdGhhdCBleGNsdWRlcyB0aGUgY2FsbGVyKS5cbiAgICAgICAgICAvLyBIYW5kbGVkIGJlbG93OyBuZXZlciBmYWxsIGJhY2sgdG8gdGhlIHJhdyByb3cuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaWx0ZXJlZFVzZXIpIHtcbiAgICAgICAgICAvLyBTZWUgaGFuZGxlTG9nSW46IG1hc3Rlci9tYWludGVuYW5jZSBjYWxsZXJzIGJ5cGFzcyBDTFAsXG4gICAgICAgICAgLy8gcHJvdGVjdGVkRmllbGRzLCBhbmQgYXV0aERhdGEgYWZ0ZXJGaW5kLCBzbyBhbiBlbXB0eSByZS1mZXRjaCBpcyBhXG4gICAgICAgICAgLy8gZ2VudWluZSBub3QtZm91bmQgZWRnZSBmb3IgdGhlbSBhbmQgdGhleSBhcmUgZW50aXRsZWQgdG8gdGhlIGZ1bGxcbiAgICAgICAgICAvLyByb3cuIEZvciBhbGwgb3RoZXIgY2FsbGVycywgYW4gZW1wdHkvZGVuaWVkIHJlLWZldGNoIG1lYW5zIGFjY2Vzc1xuICAgICAgICAgIC8vIGNvbnRyb2wgd2l0aGhlbGQgdGhlIHJlY29yZCwgc28gZGlzY2xvc2Ugb25seSB0aGUgaWRlbnRpdHkgcmF0aGVyXG4gICAgICAgICAgLy8gdGhhbiB0aGUgcmF3IHJvdywgd2hpY2ggd291bGQgbGVhayBwcm90ZWN0ZWRGaWVsZHMgYW5kIHJhdyBhdXRoRGF0YVxuICAgICAgICAgIC8vIChlLmcuIE1GQSBzZWNyZXRzIGFuZCByZWNvdmVyeSBjb2RlcykuXG4gICAgICAgICAgZmlsdGVyZWRVc2VyID1cbiAgICAgICAgICAgIHJlcS5hdXRoLmlzTWFzdGVyIHx8IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2UgPyB1c2VyIDogeyBvYmplY3RJZDogdXNlci5vYmplY3RJZCB9O1xuICAgICAgICB9XG4gICAgICAgIFVzZXJzUm91dGVyLnJlbW92ZUhpZGRlblByb3BlcnRpZXMoZmlsdGVyZWRVc2VyKTtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IGZpbHRlcmVkVXNlciB9O1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVMb2dPdXQocmVxKSB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IHsgcmVzcG9uc2U6IHt9IH07XG4gICAgaWYgKHJlcS5pbmZvICYmIHJlcS5pbmZvLnNlc3Npb25Ub2tlbikge1xuICAgICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHJlc3QuZmluZChcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgQXV0aC5tYXN0ZXIocmVxLmNvbmZpZyksXG4gICAgICAgICdfU2Vzc2lvbicsXG4gICAgICAgIHsgc2Vzc2lvblRva2VuOiByZXEuaW5mby5zZXNzaW9uVG9rZW4gfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICByZXEuaW5mby5jb250ZXh0XG4gICAgICApO1xuICAgICAgaWYgKHJlY29yZHMucmVzdWx0cyAmJiByZWNvcmRzLnJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuZGVsKFxuICAgICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgICAgQXV0aC5tYXN0ZXIocmVxLmNvbmZpZyksXG4gICAgICAgICAgJ19TZXNzaW9uJyxcbiAgICAgICAgICByZWNvcmRzLnJlc3VsdHNbMF0ub2JqZWN0SWQsXG4gICAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBtYXliZVJ1blRyaWdnZXIoXG4gICAgICAgICAgVHJpZ2dlclR5cGVzLmFmdGVyTG9nb3V0LFxuICAgICAgICAgIHJlcS5hdXRoLFxuICAgICAgICAgIFBhcnNlLlNlc3Npb24uZnJvbUpTT04oT2JqZWN0LmFzc2lnbih7IGNsYXNzTmFtZTogJ19TZXNzaW9uJyB9LCByZWNvcmRzLnJlc3VsdHNbMF0pKSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHJlcS5jb25maWdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBfdGhyb3dPbkJhZEVtYWlsQ29uZmlnKHJlcSkge1xuICAgIHRyeSB7XG4gICAgICBDb25maWcudmFsaWRhdGVFbWFpbENvbmZpZ3VyYXRpb24oe1xuICAgICAgICBlbWFpbEFkYXB0ZXI6IHJlcS5jb25maWcudXNlckNvbnRyb2xsZXIuYWRhcHRlcixcbiAgICAgICAgYXBwTmFtZTogcmVxLmNvbmZpZy5hcHBOYW1lLFxuICAgICAgICBwdWJsaWNTZXJ2ZXJVUkw6IHJlcS5jb25maWcucHVibGljU2VydmVyVVJMIHx8IHJlcS5jb25maWcuX3B1YmxpY1NlcnZlclVSTCxcbiAgICAgICAgZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb246IHJlcS5jb25maWcuZW1haWxWZXJpZnlUb2tlblZhbGlkaXR5RHVyYXRpb24sXG4gICAgICAgIGVtYWlsVmVyaWZ5VG9rZW5SZXVzZUlmVmFsaWQ6IHJlcS5jb25maWcuZW1haWxWZXJpZnlUb2tlblJldXNlSWZWYWxpZCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh0eXBlb2YgZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gTWF5YmUgd2UgbmVlZCBhIEJhZCBDb25maWd1cmF0aW9uIGVycm9yLCBidXQgdGhlIFNES3Mgd29uJ3QgdW5kZXJzdGFuZCBpdC4gRm9yIG5vdywgSW50ZXJuYWwgU2VydmVyIEVycm9yLlxuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgICAgICdBbiBhcHBOYW1lLCBwdWJsaWNTZXJ2ZXJVUkwsIGFuZCBlbWFpbEFkYXB0ZXIgYXJlIHJlcXVpcmVkIGZvciBwYXNzd29yZCByZXNldCBhbmQgZW1haWwgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uYWxpdHkuJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVSZXNldFJlcXVlc3QocmVxKSB7XG4gICAgdGhpcy5fdGhyb3dPbkJhZEVtYWlsQ29uZmlnKHJlcSk7XG5cbiAgICBsZXQgZW1haWwgPSByZXEuYm9keT8uZW1haWw7XG4gICAgY29uc3QgdG9rZW4gPSByZXEuYm9keT8udG9rZW47XG5cbiAgICBpZiAoIWVtYWlsICYmICF0b2tlbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkVNQUlMX01JU1NJTkcsICd5b3UgbXVzdCBwcm92aWRlIGFuIGVtYWlsJyk7XG4gICAgfVxuXG4gICAgaWYgKHRva2VuICYmIHR5cGVvZiB0b2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX1ZBTFVFLCAndG9rZW4gbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGxldCB1c2VyUmVzdWx0cyA9IG51bGw7XG4gICAgbGV0IHVzZXJEYXRhID0gbnVsbDtcblxuICAgIC8vIFdlIGNhbiBmaW5kIHRoZSB1c2VyIHVzaW5nIHRva2VuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB1c2VyUmVzdWx0cyA9IGF3YWl0IHJlcS5jb25maWcuZGF0YWJhc2UuZmluZCgnX1VzZXInLCB7XG4gICAgICAgIF9wZXJpc2hhYmxlX3Rva2VuOiB0b2tlbixcbiAgICAgICAgX3BlcmlzaGFibGVfdG9rZW5fZXhwaXJlc19hdDogeyAkbHQ6IFBhcnNlLl9lbmNvZGUobmV3IERhdGUoKSkgfSxcbiAgICAgIH0pO1xuICAgICAgaWYgKHVzZXJSZXN1bHRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHVzZXJEYXRhID0gdXNlclJlc3VsdHNbMF07XG4gICAgICAgIGlmICh1c2VyRGF0YS5lbWFpbCkge1xuICAgICAgICAgIGVtYWlsID0gdXNlckRhdGEuZW1haWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAvLyBPciB1c2luZyBlbWFpbCBpZiBubyB0b2tlbiBwcm92aWRlZFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVtYWlsID09PSAnc3RyaW5nJykge1xuICAgICAgdXNlclJlc3VsdHMgPSBhd2FpdCByZXEuY29uZmlnLmRhdGFiYXNlLmZpbmQoXG4gICAgICAgICdfVXNlcicsXG4gICAgICAgIHsgJG9yOiBbeyBlbWFpbCB9LCB7IHVzZXJuYW1lOiBlbWFpbCwgZW1haWw6IHsgJGV4aXN0czogZmFsc2UgfSB9XSB9LFxuICAgICAgICB7IGxpbWl0OiAxIH0sXG4gICAgICAgIEF1dGgubWFpbnRlbmFuY2UocmVxLmNvbmZpZylcbiAgICAgICk7XG4gICAgICBpZiAodXNlclJlc3VsdHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXNlckRhdGEgPSB1c2VyUmVzdWx0c1swXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGVtYWlsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0VNQUlMX0FERFJFU1MsXG4gICAgICAgICd5b3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgZW1haWwgc3RyaW5nJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodXNlckRhdGEpIHtcbiAgICAgIHRoaXMuX3Nhbml0aXplQXV0aERhdGEodXNlckRhdGEpO1xuICAgICAgLy8gR2V0IGZpbGVzIGF0dGFjaGVkIHRvIHVzZXJcbiAgICAgIGF3YWl0IHJlcS5jb25maWcuZmlsZXNDb250cm9sbGVyLmV4cGFuZEZpbGVzSW5PYmplY3QocmVxLmNvbmZpZywgdXNlckRhdGEpO1xuXG4gICAgICBjb25zdCB1c2VyID0gaW5mbGF0ZSgnX1VzZXInLCB1c2VyRGF0YSk7XG5cbiAgICAgIGF3YWl0IG1heWJlUnVuVHJpZ2dlcihcbiAgICAgICAgVHJpZ2dlclR5cGVzLmJlZm9yZVBhc3N3b3JkUmVzZXRSZXF1ZXN0LFxuICAgICAgICByZXEuYXV0aCxcbiAgICAgICAgdXNlcixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcmVxLmNvbmZpZyxcbiAgICAgICAgcmVxLmluZm8uY29udGV4dFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQ29udHJvbGxlciA9IHJlcS5jb25maWcudXNlckNvbnRyb2xsZXI7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHVzZXJDb250cm9sbGVyLnNlbmRQYXNzd29yZFJlc2V0RW1haWwoZW1haWwpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORCkge1xuICAgICAgICBpZiAocmVxLmNvbmZpZy5wYXNzd29yZFBvbGljeT8ucmVzZXRQYXNzd29yZFN1Y2Nlc3NPbkludmFsaWRFbWFpbCA/PyB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiB7fSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVyci5tZXNzYWdlID0gYEEgdXNlciB3aXRoIHRoYXQgZW1haWwgZG9lcyBub3QgZXhpc3QuYDtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVWZXJpZmljYXRpb25FbWFpbFJlcXVlc3QocmVxKSB7XG4gICAgdGhpcy5fdGhyb3dPbkJhZEVtYWlsQ29uZmlnKHJlcSk7XG5cbiAgICBjb25zdCB7IGVtYWlsIH0gPSByZXEuYm9keSB8fCB7fTtcbiAgICBpZiAoIWVtYWlsKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRU1BSUxfTUlTU0lORywgJ3lvdSBtdXN0IHByb3ZpZGUgYW4gZW1haWwnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbWFpbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgUGFyc2UuRXJyb3IuSU5WQUxJRF9FTUFJTF9BRERSRVNTLFxuICAgICAgICAneW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIGVtYWlsIHN0cmluZydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyaWZ5RW1haWxTdWNjZXNzT25JbnZhbGlkRW1haWwgPSByZXEuY29uZmlnLmVtYWlsVmVyaWZ5U3VjY2Vzc09uSW52YWxpZEVtYWlsID8/IHRydWU7XG5cbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVxLmNvbmZpZy5kYXRhYmFzZS5maW5kKCdfVXNlcicsIHsgZW1haWw6IGVtYWlsIH0sIHt9LCBBdXRoLm1haW50ZW5hbmNlKHJlcS5jb25maWcpKTtcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHJlc3VsdHMubGVuZ3RoIDwgMSkge1xuICAgICAgaWYgKHZlcmlmeUVtYWlsU3VjY2Vzc09uSW52YWxpZEVtYWlsKSB7XG4gICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiB7fSB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkVNQUlMX05PVF9GT1VORCwgYE5vIHVzZXIgZm91bmQgd2l0aCBlbWFpbCAke2VtYWlsfWApO1xuICAgIH1cbiAgICBjb25zdCB1c2VyID0gcmVzdWx0c1swXTtcblxuICAgIC8vIHJlbW92ZSBwYXNzd29yZCBmaWVsZCwgbWVzc2VzIHdpdGggc2F2aW5nIG9uIHBvc3RncmVzXG4gICAgZGVsZXRlIHVzZXIucGFzc3dvcmQ7XG5cbiAgICBpZiAodXNlci5lbWFpbFZlcmlmaWVkKSB7XG4gICAgICBpZiAodmVyaWZ5RW1haWxTdWNjZXNzT25JbnZhbGlkRW1haWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHt9IH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsIGBFbWFpbCAke2VtYWlsfSBpcyBhbHJlYWR5IHZlcmlmaWVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJDb250cm9sbGVyID0gcmVxLmNvbmZpZy51c2VyQ29udHJvbGxlcjtcbiAgICBjb25zdCBzZW5kID0gYXdhaXQgdXNlckNvbnRyb2xsZXIucmVnZW5lcmF0ZUVtYWlsVmVyaWZ5VG9rZW4odXNlciwgcmVxLmF1dGguaXNNYXN0ZXIsIHJlcS5hdXRoLmluc3RhbGxhdGlvbklkLCByZXEuaXApO1xuICAgIGlmIChzZW5kKSB7XG4gICAgICB1c2VyQ29udHJvbGxlci5zZW5kVmVyaWZpY2F0aW9uRW1haWwodXNlciwgcmVxKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzcG9uc2U6IHt9IH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVDaGFsbGVuZ2UocmVxKSB7XG4gICAgY29uc3QgeyB1c2VybmFtZSwgZW1haWwsIHBhc3N3b3JkLCBhdXRoRGF0YSwgY2hhbGxlbmdlRGF0YSB9ID0gcmVxLmJvZHkgfHwge307XG5cbiAgICAvLyBpZiB1c2VybmFtZSBvciBlbWFpbCBwcm92aWRlZCB3aXRoIHBhc3N3b3JkIHRyeSB0byBhdXRoZW50aWNhdGUgdGhlIHVzZXIgYnkgdXNlcm5hbWVcbiAgICBsZXQgdXNlcjtcbiAgICBpZiAodXNlcm5hbWUgfHwgZW1haWwpIHtcbiAgICAgIGlmICghcGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAgICdZb3UgcHJvdmlkZWQgdXNlcm5hbWUgb3IgZW1haWwsIHlvdSBuZWVkIHRvIGFsc28gcHJvdmlkZSBwYXNzd29yZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB1c2VyID0gYXdhaXQgdGhpcy5fYXV0aGVudGljYXRlVXNlckZyb21SZXF1ZXN0KHJlcSk7XG4gICAgfVxuXG4gICAgaWYgKCFjaGFsbGVuZ2VEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsICdOb3RoaW5nIHRvIGNoYWxsZW5nZS4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNoYWxsZW5nZURhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsICdjaGFsbGVuZ2VEYXRhIHNob3VsZCBiZSBhbiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3Q7XG4gICAgbGV0IHBhcnNlVXNlcjtcblxuICAgIC8vIFRyeSB0byBmaW5kIHVzZXIgYnkgYXV0aERhdGFcbiAgICBpZiAoYXV0aERhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgYXV0aERhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSwgJ2F1dGhEYXRhIHNob3VsZCBiZSBhbiBvYmplY3QuJyk7XG4gICAgICB9XG4gICAgICBpZiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuT1RIRVJfQ0FVU0UsXG4gICAgICAgICAgJ1lvdSBjYW5ub3QgcHJvdmlkZSB1c2VybmFtZS9lbWFpbCBhbmQgYXV0aERhdGEsIG9ubHkgdXNlIG9uZSBpZGVudGlmaWNhdGlvbiBtZXRob2QuJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhdXRoRGF0YSkpIHtcbiAgICAgICAgaWYgKGF1dGhEYXRhW2tleV0gIT09IG51bGwgJiYgKHR5cGVvZiBhdXRoRGF0YVtrZXldICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGF1dGhEYXRhW2tleV0pKSkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAgICAgYGF1dGhEYXRhLiR7a2V5fSBzaG91bGQgYmUgYW4gb2JqZWN0LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhhdXRoRGF0YSkuZmlsdGVyKGtleSA9PiBhdXRoRGF0YVtrZXldICYmIGF1dGhEYXRhW2tleV0uaWQpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAgICdZb3UgY2Fubm90IHByb3ZpZGUgbW9yZSB0aGFuIG9uZSBhdXRoRGF0YSBwcm92aWRlciB3aXRoIGFuIGlkLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IEF1dGguZmluZFVzZXJzV2l0aEF1dGhEYXRhKHJlcS5jb25maWcsIGF1dGhEYXRhKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyZXN1bHRzWzBdIHx8IHJlc3VsdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnVXNlciBub3QgZm91bmQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmluZCB0aGUgcHJvdmlkZXIgdXNlZCB0byBmaW5kIHRoZSB1c2VyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gT2JqZWN0LmtleXMoYXV0aERhdGEpLmZpbmQoa2V5ID0+IGF1dGhEYXRhW2tleV0gJiYgYXV0aERhdGFba2V5XS5pZCk7XG5cbiAgICAgICAgcGFyc2VVc2VyID0gUGFyc2UuVXNlci5mcm9tSlNPTih7IGNsYXNzTmFtZTogJ19Vc2VyJywgLi4ucmVzdWx0c1swXSB9KTtcbiAgICAgICAgcmVxdWVzdCA9IGdldFJlcXVlc3RPYmplY3QodW5kZWZpbmVkLCByZXEuYXV0aCwgcGFyc2VVc2VyLCBwYXJzZVVzZXIsIHJlcS5jb25maWcpO1xuICAgICAgICByZXF1ZXN0LmlzQ2hhbGxlbmdlID0gdHJ1ZTtcbiAgICAgICAgLy8gVmFsaWRhdGUgYXV0aERhdGEgdXNlZCB0byBpZGVudGlmeSB0aGUgdXNlciB0byBhdm9pZCBicnV0ZS1mb3JjZSBhdHRhY2sgb24gYGlkYFxuICAgICAgICBjb25zdCB7IHZhbGlkYXRvciB9ID0gcmVxLmNvbmZpZy5hdXRoRGF0YU1hbmFnZXIuZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JSZXNwb25zZSA9IGF3YWl0IHZhbGlkYXRvcihhdXRoRGF0YVtwcm92aWRlcl0sIHJlcSwgcGFyc2VVc2VyLCByZXF1ZXN0KTtcbiAgICAgICAgaWYgKHZhbGlkYXRvclJlc3BvbnNlICYmIHZhbGlkYXRvclJlc3BvbnNlLnZhbGlkYXRvcikge1xuICAgICAgICAgIGF3YWl0IHZhbGlkYXRvclJlc3BvbnNlLnZhbGlkYXRvcigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFJld3JpdGUgdGhlIGVycm9yIHRvIGF2b2lkIGd1ZXNzIGlkIGF0dGFja1xuICAgICAgICBsb2dnZXIuZXJyb3IoZSk7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5ELCAnVXNlciBub3QgZm91bmQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZVVzZXIpIHtcbiAgICAgIHBhcnNlVXNlciA9IHVzZXIgPyBQYXJzZS5Vc2VyLmZyb21KU09OKHsgY2xhc3NOYW1lOiAnX1VzZXInLCAuLi51c2VyIH0pIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmVxdWVzdCA9IGdldFJlcXVlc3RPYmplY3QodW5kZWZpbmVkLCByZXEuYXV0aCwgcGFyc2VVc2VyLCBwYXJzZVVzZXIsIHJlcS5jb25maWcpO1xuICAgICAgcmVxdWVzdC5pc0NoYWxsZW5nZSA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGFjYyA9IHt9O1xuICAgIC8vIEV4ZWN1dGUgY2hhbGxlbmdlIHN0ZXAtYnktc3RlcCB3aXRoIGNvbnNpc3RlbnQgb3JkZXIgZm9yIGJldHRlciBlcnJvciBmZWVkYmFja1xuICAgIC8vIGFuZCB0byBhdm9pZCB0byB0cmlnZ2VyIG90aGVycyBjaGFsbGVuZ2VzIGlmIG9uZSBvZiB0aGVtIGZhaWxzXG4gICAgZm9yIChjb25zdCBwcm92aWRlciBvZiBPYmplY3Qua2V5cyhjaGFsbGVuZ2VEYXRhKS5zb3J0KCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGF1dGhBZGFwdGVyID0gcmVxLmNvbmZpZy5hdXRoRGF0YU1hbmFnZXIuZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgICAgICBpZiAoIWF1dGhBZGFwdGVyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGFkYXB0ZXI6IHsgY2hhbGxlbmdlIH0sXG4gICAgICAgIH0gPSBhdXRoQWRhcHRlcjtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGFsbGVuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCBwcm92aWRlckNoYWxsZW5nZVJlc3BvbnNlID0gYXdhaXQgY2hhbGxlbmdlKFxuICAgICAgICAgICAgY2hhbGxlbmdlRGF0YVtwcm92aWRlcl0sXG4gICAgICAgICAgICBhdXRoRGF0YSAmJiBhdXRoRGF0YVtwcm92aWRlcl0sXG4gICAgICAgICAgICByZXEuY29uZmlnLmF1dGhbcHJvdmlkZXJdLFxuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgICAgYWNjW3Byb3ZpZGVyXSA9IHByb3ZpZGVyQ2hhbGxlbmdlUmVzcG9uc2UgfHwgdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGUgPSByZXNvbHZlRXJyb3IoZXJyLCB7XG4gICAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ2hhbGxlbmdlIGZhaWxlZC4gVW5rbm93biBlcnJvci4nLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdXNlclN0cmluZyA9IHJlcS5hdXRoICYmIHJlcS5hdXRoLnVzZXIgPyByZXEuYXV0aC51c2VyLmlkIDogdW5kZWZpbmVkO1xuICAgICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCBydW5uaW5nIGF1dGggc3RlcCBjaGFsbGVuZ2UgZm9yICR7cHJvdmlkZXJ9IGZvciB1c2VyICR7dXNlclN0cmluZ30gd2l0aCBFcnJvcjogYCArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdXRoZW50aWNhdGlvblN0ZXA6ICdjaGFsbGVuZ2UnLFxuICAgICAgICAgICAgZXJyb3I6IGUsXG4gICAgICAgICAgICB1c2VyOiB1c2VyU3RyaW5nLFxuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyByZXNwb25zZTogeyBjaGFsbGVuZ2VEYXRhOiBhY2MgfSB9O1xuICB9XG5cbiAgbW91bnRSb3V0ZXMoKSB7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy91c2VycycsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVGaW5kKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvdXNlcnMnLCBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3ksIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL3VzZXJzL21lJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZU1lKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnR0VUJywgJy91c2Vycy86b2JqZWN0SWQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlR2V0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUFVUJywgJy91c2Vycy86b2JqZWN0SWQnLCBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3ksIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdERUxFVEUnLCAnL3VzZXJzLzpvYmplY3RJZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdHRVQnLCAnL2xvZ2luJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ0luKHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvbG9naW4nLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nSW4ocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9sb2dpbkFzJywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ0luQXMocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy9sb2dvdXQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nT3V0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvcmVxdWVzdFBhc3N3b3JkUmVzZXQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzZXRSZXF1ZXN0KHJlcSk7XG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZSgnUE9TVCcsICcvdmVyaWZpY2F0aW9uRW1haWxSZXF1ZXN0JywgcmVxID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVZlcmlmaWNhdGlvbkVtYWlsUmVxdWVzdChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ0dFVCcsICcvdmVyaWZ5UGFzc3dvcmQnLCByZXEgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVmVyaWZ5UGFzc3dvcmQocmVxKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKCdQT1NUJywgJy92ZXJpZnlQYXNzd29yZCcsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVWZXJpZnlQYXNzd29yZChyZXEpO1xuICAgIH0pO1xuICAgIHRoaXMucm91dGUoJ1BPU1QnLCAnL2NoYWxsZW5nZScsIHJlcSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVDaGFsbGVuZ2UocmVxKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBVc2Vyc1JvdXRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsZUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBTCxz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
|
package/lib/Utils.js
CHANGED
|
@@ -572,6 +572,23 @@ class Utils {
|
|
|
572
572
|
return Math.floor(num);
|
|
573
573
|
}
|
|
574
574
|
}
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Returns the file extension as the substring after the last dot in the
|
|
578
|
+
* filename. A trailing dot or a filename without a dot yields an empty
|
|
579
|
+
* string. Callers apply any further normalization (whitespace, MIME
|
|
580
|
+
* parameters, etc.) for their use case — this is a pure parser, not a
|
|
581
|
+
* policy.
|
|
582
|
+
*
|
|
583
|
+
* @param {string} filename
|
|
584
|
+
* @returns {string} the extension, or `''` if none
|
|
585
|
+
*/
|
|
586
|
+
static getFileExtension(filename) {
|
|
587
|
+
if (!filename || !filename.includes('.')) {
|
|
588
|
+
return '';
|
|
589
|
+
}
|
|
590
|
+
return filename.substring(filename.lastIndexOf('.') + 1);
|
|
591
|
+
}
|
|
575
592
|
}
|
|
576
593
|
module.exports = Utils;
|
|
577
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwicHJvbWlzZXMiLCJ0eXBlcyIsIlV0aWxzIiwiZ2V0TG9jYWxpemVkUGF0aCIsImRlZmF1bHRQYXRoIiwibG9jYWxlIiwiZmlsZSIsImJhc2VuYW1lIiwiYmFzZVBhdGgiLCJkaXJuYW1lIiwibG9jYWxlUGF0aCIsImpvaW4iLCJsb2NhbGVGaWxlRXhpc3RzIiwiZmlsZUV4aXN0cyIsInN1YmRpciIsImxhbmd1YWdlIiwic3BsaXQiLCJsYW5ndWFnZVBhdGgiLCJsYW5ndWFnZUZpbGVFeGlzdHMiLCJhY2Nlc3MiLCJpc1BhdGgiLCJzIiwidGVzdCIsImZsYXR0ZW5PYmplY3QiLCJvYmoiLCJwYXJlbnRLZXkiLCJkZWxpbWl0ZXIiLCJyZXN1bHQiLCJrZXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJuZXdLZXkiLCJpc0RhdGUiLCJ2YWx1ZSIsImlzUmVnRXhwIiwiaXNNYXAiLCJpc1NldCIsImlzTmF0aXZlRXJyb3IiLCJpc1Byb21pc2UiLCJ0aGVuIiwiZ2V0UHJvdG90eXBlT2YiLCJpc09iamVjdCIsImdldE9iamVjdEtleVBlcm11dGF0aW9ucyIsIm9iamVjdCIsImluZGV4IiwiY3VycmVudCIsInJlc3VsdHMiLCJrZXlzIiwidmFsdWVzIiwibmV4dEluZGV4IiwibGVuZ3RoIiwiYXNzaWduIiwicHVzaCIsInZhbGlkYXRlUGFyYW1zIiwicGFyYW1zIiwidHlwZSIsImlzT3B0aW9uYWwiLCJvIiwicGFyYW0iLCJ2IiwidCIsInJlbGF0aXZlVGltZVRvRGF0ZSIsInRleHQiLCJub3ciLCJEYXRlIiwidG9Mb3dlckNhc2UiLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJmdXR1cmUiLCJwYXN0Iiwic3RhdHVzIiwiaW5mbyIsInNsaWNlIiwicGFpcnMiLCJzaGlmdCIsInNlY29uZHMiLCJudW0iLCJpbnRlcnZhbCIsInZhbCIsIk51bWJlciIsImlzSW50ZWdlciIsIm1pbGxpc2Vjb25kcyIsInZhbHVlT2YiLCJvYmplY3RDb250YWluc0tleVZhbHVlIiwiaXNNYXRjaCIsImEiLCJiIiwiUmVnRXhwIiwiaXNLZXlNYXRjaCIsImsiLCJpc1ZhbHVlTWF0Y2giLCJzdGFjayIsInNlZW4iLCJXZWFrU2V0IiwicG9wIiwiaGFzIiwiYWRkIiwiZW50cmllcyIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwidG9TdHJpbmciLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsImNvbmZpZyIsImRhdGEiLCJyZXF1ZXN0S2V5d29yZERlbnlsaXN0Iiwia2V5d29yZCIsIm1hdGNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImFkZE5lc3RlZEtleXNUb1Jvb3QiLCJlbmNvZGVGb3JVcmwiLCJpbnB1dCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJjaGFyIiwiY2hhckNvZGVBdCIsInRvVXBwZXJDYXNlIiwiZ2V0Q2lyY3VsYXJSZXBsYWNlciIsImZyb21FbnRyaWVzIiwiQXJyYXkiLCJmcm9tIiwiZ2V0TmVzdGVkUHJvcGVydHkiLCJwYXJzZVNpemVUb0J5dGVzIiwic2l6ZSIsImlzRmluaXRlIiwiRXJyb3IiLCJNYXRoIiwiZmxvb3IiLCJzdHIiLCJTdHJpbmciLCJ0cmltIiwicGFyc2VGbG9hdCIsInVuaXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL1V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdXRpbHMuanNcbiAqIEBmaWxlIEdlbmVyYWwgcHVycG9zZSB1dGlsaXRpZXNcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmFsIHB1cnBvc2UgdXRpbGl0aWVzLlxuICovXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJykucHJvbWlzZXM7XG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhlIGdlbmVyYWwgcHVycG9zZSB1dGlsaXRpZXMuXG4gKi9cbmNsYXNzIFV0aWxzIHtcbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBnZXRMb2NhbGl6ZWRQYXRoXG4gICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgbG9jYWxpemVkIGZpbGUgcGF0aCBhY2NvcmluZyB0byB0aGUgbG9jYWxlLlxuICAgKlxuICAgKiBMb2NhbGl6ZWQgZmlsZXMgYXJlIHNlYXJjaGVkIGluIHN1YmZvbGRlcnMgb2YgYSBnaXZlbiBwYXRoLCBlLmcuXG4gICAqXG4gICAqIHJvb3QvXG4gICAqIOKUnOKUgOKUgCBiYXNlLyAgICAgICAgICAgICAgICAgICAgLy8gYmFzZSBwYXRoIHRvIGZpbGVzXG4gICAqIOKUgiAgIOKUnOKUgOKUgCBleGFtcGxlLmh0bWwgICAgICAgICAvLyBkZWZhdWx0IGZpbGVcbiAgICog4pSCICAg4pSU4pSA4pSAIGRlLyAgICAgICAgICAgICAgICAgIC8vIGRlIGxhbmd1YWdlIGZvbGRlclxuICAgKiDilIIgICDilIIgICDilJTilIDilIAgZXhhbXBsZS5odG1sICAgICAvLyBkZSBsb2NhbGl6ZWQgZmlsZVxuICAgKiDilIIgICDilJTilIDilIAgZGUtQVQvICAgICAgICAgICAgICAgLy8gZGUtQVQgbG9jYWxlIGZvbGRlclxuICAgKiDilIIgICDilIIgICDilJTilIDilIAgZXhhbXBsZS5odG1sICAgICAvLyBkZS1BVCBsb2NhbGl6ZWQgZmlsZVxuICAgKlxuICAgKiBGaWxlcyBhcmUgbWF0Y2hlZCB3aXRoIHRoZSBsb2NhbGUgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAgICogMS4gTG9jYWxlIG1hdGNoLCBlLmcuIGxvY2FsZSBgZGUtQVRgIG1hdGNoZXMgZmlsZSBpbiBmb2xkZXIgYGRlLUFUYC5cbiAgICogMi4gTGFuZ3VhZ2UgbWF0Y2gsIGUuZy4gbG9jYWxlIGBkZS1BVGAgbWF0Y2hlcyBmaWxlIGluIGZvbGRlciBgZGVgLlxuICAgKiAzLiBEZWZhdWx0OyBmaWxlIGluIGJhc2UgZm9sZGVyIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gZGVmYXVsdFBhdGggVGhlIGFic29sdXRlIGZpbGUgcGF0aCwgd2hpY2ggaXMgYWxzb1xuICAgKiB0aGUgZGVmYXVsdCBwYXRoIHJldHVybmVkIGlmIGxvY2FsaXphdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gbG9jYWxlIFRoZSBsb2NhbGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFRoZSBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYHBhdGhgOiBUaGUgcGF0aCB0byB0aGUgbG9jYWxpemVkIGZpbGUsIG9yIHRoZSBvcmlnaW5hbCBwYXRoIGlmXG4gICAqICAgbG9jYWxpemF0aW9uIGlzIG5vdCBhdmFpbGFibGUuXG4gICAqIC0gYHN1YmRpcmA6IFRoZSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGxvY2FsaXplZCBmaWxlLCBvciB1bmRlZmluZWQgaWZcbiAgICogICB0aGVyZSBpcyBubyBtYXRjaGluZyBsb2NhbGl6ZWQgZmlsZS5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRMb2NhbGl6ZWRQYXRoKGRlZmF1bHRQYXRoLCBsb2NhbGUpIHtcbiAgICAvLyBHZXQgZmlsZSBuYW1lIGFuZCBwYXRoc1xuICAgIGNvbnN0IGZpbGUgPSBwYXRoLmJhc2VuYW1lKGRlZmF1bHRQYXRoKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHBhdGguZGlybmFtZShkZWZhdWx0UGF0aCk7XG5cbiAgICAvLyBJZiBsb2NhbGUgaXMgbm90IHNldCByZXR1cm4gZGVmYXVsdCBmaWxlXG4gICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgIHJldHVybiB7IHBhdGg6IGRlZmF1bHRQYXRoIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZmlsZSBmb3IgbG9jYWxlIGV4aXN0c1xuICAgIGNvbnN0IGxvY2FsZVBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIGxvY2FsZSwgZmlsZSk7XG4gICAgY29uc3QgbG9jYWxlRmlsZUV4aXN0cyA9IGF3YWl0IFV0aWxzLmZpbGVFeGlzdHMobG9jYWxlUGF0aCk7XG5cbiAgICAvLyBJZiBmaWxlIGZvciBsb2NhbGUgZXhpc3RzIHJldHVybiBmaWxlXG4gICAgaWYgKGxvY2FsZUZpbGVFeGlzdHMpIHtcbiAgICAgIHJldHVybiB7IHBhdGg6IGxvY2FsZVBhdGgsIHN1YmRpcjogbG9jYWxlIH07XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZmlsZSBmb3IgbGFuZ3VhZ2UgZXhpc3RzXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsb2NhbGUuc3BsaXQoJy0nKVswXTtcbiAgICBjb25zdCBsYW5ndWFnZVBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIGxhbmd1YWdlLCBmaWxlKTtcbiAgICBjb25zdCBsYW5ndWFnZUZpbGVFeGlzdHMgPSBhd2FpdCBVdGlscy5maWxlRXhpc3RzKGxhbmd1YWdlUGF0aCk7XG5cbiAgICAvLyBJZiBmaWxlIGZvciBsYW5ndWFnZSBleGlzdHMgcmV0dXJuIGZpbGVcbiAgICBpZiAobGFuZ3VhZ2VGaWxlRXhpc3RzKSB7XG4gICAgICByZXR1cm4geyBwYXRoOiBsYW5ndWFnZVBhdGgsIHN1YmRpcjogbGFuZ3VhZ2UgfTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZGVmYXVsdCBmaWxlXG4gICAgcmV0dXJuIHsgcGF0aDogZGVmYXVsdFBhdGggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZnVuY3Rpb24gZmlsZUV4aXN0c1xuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIHdoZXRoZXIgYSBmaWxlIGV4aXN0cy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIGZpbGUgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59IElzIHRydWUgaWYgdGhlIGZpbGUgY2FuIGJlIGFjY2Vzc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZmlsZUV4aXN0cyhwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhwYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZnVuY3Rpb24gaXNQYXRoXG4gICAqIEBkZXNjcmlwdGlvbiBFdmFsdWF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIGZpbGUgcGF0aCAoYXMgb3Bwb3NlZCB0byBhIFVSTCBmb3IgZXhhbXBsZSkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzIFRoZSBzdHJpbmcgdG8gZXZhbHVhdGUuXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGV2YWx1YXRlZCBzdHJpbmcgaXMgYSBwYXRoLlxuICAgKi9cbiAgc3RhdGljIGlzUGF0aChzKSB7XG4gICAgcmV0dXJuIC8oXlxcLyl8KF5cXC5cXC8pfCheXFwuXFwuXFwvKS8udGVzdChzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0dGVucyBhbiBvYmplY3QgYW5kIGNyYXRlcyBuZXcga2V5cyB3aXRoIGN1c3RvbSBkZWxpbWl0ZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gZmxhdHRlbi5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtkZWxpbWl0ZXI9Jy4nXSBUaGUgZGVsaW1pdGVyIG9mIHRoZSBuZXdseSBnZW5lcmF0ZWQga2V5cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlc3VsdFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZmxhdHRlbmVkIG9iamVjdC5cbiAgICoqL1xuICBzdGF0aWMgZmxhdHRlbk9iamVjdChvYmosIHBhcmVudEtleSwgZGVsaW1pdGVyID0gJy4nLCByZXN1bHQgPSB7fSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgY29uc3QgbmV3S2V5ID0gcGFyZW50S2V5ID8gcGFyZW50S2V5ICsgZGVsaW1pdGVyICsga2V5IDoga2V5O1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmIG9ialtrZXldICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5mbGF0dGVuT2JqZWN0KG9ialtrZXldLCBuZXdLZXksIGRlbGltaXRlciwgcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRbbmV3S2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmVhbG0tc2FmZSBjaGVjayBmb3IgRGF0ZS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBEYXRlLlxuICAgKi9cbiAgc3RhdGljIGlzRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlcy5pc0RhdGUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxtLXNhZmUgY2hlY2sgZm9yIFJlZ0V4cC5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBSZWdFeHAuXG4gICAqL1xuICBzdGF0aWMgaXNSZWdFeHAodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZXMuaXNSZWdFeHAodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxtLXNhZmUgY2hlY2sgZm9yIE1hcC5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBNYXAuXG4gICAqL1xuICBzdGF0aWMgaXNNYXAodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZXMuaXNNYXAodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxtLXNhZmUgY2hlY2sgZm9yIFNldC5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBTZXQuXG4gICAqL1xuICBzdGF0aWMgaXNTZXQodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZXMuaXNTZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxtLXNhZmUgY2hlY2sgZm9yIG5hdGl2ZSBFcnJvci5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBuYXRpdmUgRXJyb3IuXG4gICAqL1xuICBzdGF0aWMgaXNOYXRpdmVFcnJvcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlcy5pc05hdGl2ZUVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFsbS1zYWZlIGNoZWNrIGZvciBQcm9taXNlIChkdWNrLXR5cGVkIGFzIHRoZW5hYmxlKS5cbiAgICogR3VhcmRzIGFnYWluc3QgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb24gYnkgZW5zdXJpbmcgYHRoZW5gIGlzIG5vdFxuICAgKiBpbmhlcml0ZWQgc29sZWx5IGZyb20gT2JqZWN0LnByb3RvdHlwZS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBQcm9taXNlIG9yIHRoZW5hYmxlLlxuICAgKi9cbiAgc3RhdGljIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZS50aGVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpICE9PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ3RoZW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFsbS1zYWZlIGNoZWNrIGZvciBvYmplY3QgdHlwZS4gVXNlcyBgdHlwZW9mYCBpbnN0ZWFkIG9mIGBpbnN0YW5jZW9mIE9iamVjdGBcbiAgICogd2hpY2ggZmFpbHMgYWNyb3NzIHJlYWxtcy4gUmV0dXJucyB0cnVlIGZvciBhbnkgbm9uLW51bGwgdmFsdWUgd2hlcmVcbiAgICogYHR5cGVvZmAgaXMgYCdvYmplY3QnYCwgaW5jbHVkaW5nIHBsYWluIG9iamVjdHMsIGFycmF5cywgZGF0ZXMsIG1hcHMsIHNldHMsXG4gICAqIHJlZ2V4LCBhbmQgYm94ZWQgcHJpbWl0aXZlcyAoZS5nLiBgbmV3IFN0cmluZygpYCkuIFJldHVybnMgZmFsc2UgZm9yIGBudWxsYCxcbiAgICogYHVuZGVmaW5lZGAsIHVuYm94ZWQgcHJpbWl0aXZlcywgYW5kIGZ1bmN0aW9ucy5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3QgdHlwZS5cbiAgICovXG4gIHN0YXRpYyBpc09iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggYWxsIHBlcm11dGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwga2V5cy5cbiAgICogRm9yIGV4YW1wbGUsIHRoaXMgZGVmaW5pdGlvbjpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBhOiBbdHJ1ZSwgZmFsc2VdLFxuICAgKiAgIGI6IFsxLCAyXSxcbiAgICogICBjOiBbJ3gnXVxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBwZXJtdXRhdGVzIHRvOlxuICAgKiBgYGBcbiAgICogW1xuICAgKiAgIHsgYTogdHJ1ZSwgYjogMSwgYzogJ3gnIH0sXG4gICAqICAgeyBhOiB0cnVlLCBiOiAyLCBjOiAneCcgfSxcbiAgICogICB7IGE6IGZhbHNlLCBiOiAxLCBjOiAneCcgfSxcbiAgICogICB7IGE6IGZhbHNlLCBiOiAyLCBjOiAneCcgfVxuICAgKiBdXG4gICAqIGBgYFxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcGVybXV0YXRlLlxuICAgKiBAcGFyYW0ge0ludGVnZXJ9IFtpbmRleD0wXSBUaGUgY3VycmVudCBrZXkgaW5kZXguXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY3VycmVudD17fV0gVGhlIGN1cnJlbnQgcmVzdWx0IGVudHJ5IGJlaW5nIGNvbXBvc2VkLlxuICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0cz1bXV0gVGhlIHJlc3VsdGluZyBhcnJheSBvZiBwZXJtdXRhdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0T2JqZWN0S2V5UGVybXV0YXRpb25zKG9iamVjdCwgaW5kZXggPSAwLCBjdXJyZW50ID0ge30sIHJlc3VsdHMgPSBbXSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgIGNvbnN0IHZhbHVlcyA9IG9iamVjdFtrZXldO1xuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGN1cnJlbnRba2V5XSA9IHZhbHVlO1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyAxO1xuXG4gICAgICBpZiAobmV4dEluZGV4IDwga2V5cy5sZW5ndGgpIHtcbiAgICAgICAgVXRpbHMuZ2V0T2JqZWN0S2V5UGVybXV0YXRpb25zKG9iamVjdCwgbmV4dEluZGV4LCBjdXJyZW50LCByZXN1bHRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnQpO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHBhcmFtZXRlcnMgYW5kIHRocm93cyBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkLlxuICAgKiBFeGFtcGxlIHBhcmFtZXRlciB0eXBlcyBzeW50YXg6XG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAgcGFyYW1ldGVyTmFtZToge1xuICAgKiAgICAgIHQ6ICdib29sZWFuJyxcbiAgICogICAgICB2OiBpc0Jvb2xlYW4sXG4gICAqICAgICAgbzogdHJ1ZVxuICAgKiAgIH0sXG4gICAqICAgLi4uXG4gICAqIH1cbiAgICogYGBgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gdHlwZXMgVGhlIHBhcmFtZXRlciB0eXBlcyB1c2VkIGZvciB2YWxpZGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdHlwZXMudCBUaGUgcGFyYW1ldGVyIHR5cGU7IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2UsIG5vdCBmb3IgdmFsaWRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHR5cGVzLnYgVGhlIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3R5cGVzLm89ZmFsc2VdIElzIHRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBvcHRpb25hbC5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHR5cGVzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgY29uc3QgdHlwZSA9IHR5cGVzW2tleV07XG4gICAgICBjb25zdCBpc09wdGlvbmFsID0gISF0eXBlLm87XG4gICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1trZXldO1xuICAgICAgaWYgKCEoaXNPcHRpb25hbCAmJiBwYXJhbSA9PSBudWxsKSAmJiAhdHlwZS52KHBhcmFtKSkge1xuICAgICAgICB0aHJvdyBgSW52YWxpZCBwYXJhbWV0ZXIgJHtrZXl9IG11c3QgYmUgb2YgdHlwZSAke3R5cGUudH0gYnV0IGlzICR7dHlwZW9mIHBhcmFtfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSByZWxhdGl2ZSBkYXRlIGJhc2VkIG9uIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCBUaGUgc3RyaW5nIHRvIGludGVycHJldCB0aGUgZGF0ZSBmcm9tLlxuICAgKiBAcGFyYW0ge0RhdGV9IG5vdyBUaGUgZGF0ZSB0aGUgc3RyaW5nIGlzIGNvbXBhcmluZyBhZ2FpbnN0LlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVsYXRpdmUgZGF0ZSBvYmplY3QuXG4gICAqKi9cbiAgc3RhdGljIHJlbGF0aXZlVGltZVRvRGF0ZSh0ZXh0LCBub3cgPSBuZXcgRGF0ZSgpKSB7XG4gICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICBsZXQgcGFydHMgPSB0ZXh0LnNwbGl0KCcgJyk7XG5cbiAgICAvLyBGaWx0ZXIgb3V0IHdoaXRlc3BhY2VcbiAgICBwYXJ0cyA9IHBhcnRzLmZpbHRlcihwYXJ0ID0+IHBhcnQgIT09ICcnKTtcblxuICAgIGNvbnN0IGZ1dHVyZSA9IHBhcnRzWzBdID09PSAnaW4nO1xuICAgIGNvbnN0IHBhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PT0gJ2Fnbyc7XG5cbiAgICBpZiAoIWZ1dHVyZSAmJiAhcGFzdCAmJiB0ZXh0ICE9PSAnbm93Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiBcIlRpbWUgc2hvdWxkIGVpdGhlciBzdGFydCB3aXRoICdpbicgb3IgZW5kIHdpdGggJ2FnbydcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGZ1dHVyZSAmJiBwYXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIGluZm86IFwiVGltZSBjYW5ub3QgaGF2ZSBib3RoICdpbicgYW5kICdhZ28nXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIHN0cmlwIHRoZSAnYWdvJyBvciAnaW4nXG4gICAgaWYgKGZ1dHVyZSkge1xuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcGFzdFxuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMubGVuZ3RoICUgMiAhPT0gMCAmJiB0ZXh0ICE9PSAnbm93Jykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnSW52YWxpZCB0aW1lIHN0cmluZy4gRGFuZ2xpbmcgdW5pdCBvciBudW1iZXIuJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICB3aGlsZSAocGFydHMubGVuZ3RoKSB7XG4gICAgICBwYWlycy5wdXNoKFtwYXJ0cy5zaGlmdCgpLCBwYXJ0cy5zaGlmdCgpXSk7XG4gICAgfVxuXG4gICAgbGV0IHNlY29uZHMgPSAwO1xuICAgIGZvciAoY29uc3QgW251bSwgaW50ZXJ2YWxdIG9mIHBhaXJzKSB7XG4gICAgICBjb25zdCB2YWwgPSBOdW1iZXIobnVtKTtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86IGAnJHtudW19JyBpcyBub3QgYW4gaW50ZWdlci5gLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICAgIGNhc2UgJ3lyJzpcbiAgICAgICAgY2FzZSAneXJzJzpcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIGNhc2UgJ3llYXJzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbCAqIDMxNTM2MDAwOyAvLyAzNjUgKiAyNCAqIDYwICogNjBcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd3ayc6XG4gICAgICAgIGNhc2UgJ3drcyc6XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWwgKiA2MDQ4MDA7IC8vIDcgKiAyNCAqIDYwICogNjBcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWwgKiA4NjQwMDsgLy8gMjQgKiA2MCAqIDYwXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnaHInOlxuICAgICAgICBjYXNlICdocnMnOlxuICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2FzZSAnaG91cnMnOlxuICAgICAgICAgIHNlY29uZHMgKz0gdmFsICogMzYwMDsgLy8gNjAgKiA2MFxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbCAqIDYwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgIGNhc2UgJ3NlY3MnOlxuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICBpbmZvOiBgSW52YWxpZCBpbnRlcnZhbDogJyR7aW50ZXJ2YWx9J2AsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBzZWNvbmRzICogMTAwMDtcbiAgICBpZiAoZnV0dXJlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaW5mbzogJ2Z1dHVyZScsXG4gICAgICAgIHJlc3VsdDogbmV3IERhdGUobm93LnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyksXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAocGFzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGluZm86ICdwYXN0JyxcbiAgICAgICAgcmVzdWx0OiBuZXcgRGF0ZShub3cudmFsdWVPZigpIC0gbWlsbGlzZWNvbmRzKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICBpbmZvOiAncHJlc2VudCcsXG4gICAgICAgIHJlc3VsdDogbmV3IERhdGUobm93LnZhbHVlT2YoKSksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWVwLXNjYW5zIGFuIG9iamVjdCBmb3IgYSBtYXRjaGluZyBrZXkvdmFsdWUgZGVmaW5pdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHNjYW4uXG4gICAqIEBwYXJhbSB7U3RyaW5nIHwgdW5kZWZpbmVkfSBrZXkgVGhlIGtleSB0byBtYXRjaCwgb3IgdW5kZWZpbmVkIGlmIG9ubHkgdGhlIHZhbHVlIHNob3VsZCBiZSBtYXRjaGVkLlxuICAgKiBAcGFyYW0ge2FueSB8IHVuZGVmaW5lZH0gdmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLCBvciB1bmRlZmluZWQgaWYgb25seSB0aGUga2V5IHNob3VsZCBiZSBtYXRjaGVkLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiBhIG1hdGNoIHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RhdGljIG9iamVjdENvbnRhaW5zS2V5VmFsdWUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgY29uc3QgaXNNYXRjaCA9IChhLCBiKSA9PiAodHlwZW9mIGEgPT09ICdzdHJpbmcnICYmIG5ldyBSZWdFeHAoYikudGVzdChhKSkgfHwgYSA9PT0gYjtcbiAgICBjb25zdCBpc0tleU1hdGNoID0gayA9PiBpc01hdGNoKGssIGtleSk7XG4gICAgY29uc3QgaXNWYWx1ZU1hdGNoID0gdiA9PiBpc01hdGNoKHYsIHZhbHVlKTtcbiAgICBjb25zdCBzdGFjayA9IFtvYmpdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc3RhY2sucG9wKCk7XG4gICAgICBpZiAoc2Vlbi5oYXMoY3VycmVudCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChjdXJyZW50KTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGN1cnJlbnQpKSB7XG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlzS2V5TWF0Y2goaykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGlzVmFsdWVNYXRjaCh2KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXNLZXlNYXRjaChrKSAmJiBpc1ZhbHVlTWF0Y2godikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoWydbb2JqZWN0IE9iamVjdF0nLCAnW29iamVjdCBBcnJheV0nXS5pbmNsdWRlcyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikpKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBkYXRhKSB7XG4gICAgaWYgKGNvbmZpZz8ucmVxdWVzdEtleXdvcmREZW55bGlzdCkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGNvbmZpZy5yZXF1ZXN0S2V5d29yZERlbnlsaXN0KSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gVXRpbHMub2JqZWN0Q29udGFpbnNLZXlWYWx1ZShkYXRhLCBrZXl3b3JkLmtleSwga2V5d29yZC52YWx1ZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHRocm93IGBQcm9oaWJpdGVkIGtleXdvcmQgaW4gcmVxdWVzdCBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGtleXdvcmQpfS5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBuZXN0ZWQga2V5cyBvZiBhIHNwZWNpZmllZCBrZXkgaW4gYW4gb2JqZWN0IHRvIHRoZSByb290IG9mIHRoZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGtleSB3aG9zZSBuZXN0ZWQga2V5cyB3aWxsIGJlIG1vdmVkIHRvIHJvb3QuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBtb2RpZmllZCBvYmplY3QsIG9yIHRoZSBvcmlnaW5hbCBvYmplY3QgaWYgbm8gbW9kaWZpY2F0aW9uIGhhcHBlbmVkLlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBvYmogPSB7XG4gICAqICAgYTogMSxcbiAgICogICBiOiB7XG4gICAqICAgICBjOiAyLFxuICAgKiAgICAgZDogM1xuICAgKiAgIH0sXG4gICAqICAgZTogNFxuICAgKiB9O1xuICAgKiBhZGROZXN0ZWRLZXlzVG9Sb290KG9iaiwgJ2InKTtcbiAgICogY29uc29sZS5sb2cob2JqKTtcbiAgICogLy8gT3V0cHV0OiB7IGE6IDEsIGU6IDQsIGM6IDIsIGQ6IDMgfVxuICAqL1xuICBzdGF0aWMgYWRkTmVzdGVkS2V5c1RvUm9vdChvYmosIGtleSkge1xuICAgIGlmIChvYmpba2V5XSAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBBZGQgbmVzdGVkIGtleXMgdG8gcm9vdFxuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHsgLi4ub2JqW2tleV0gfSk7XG4gICAgICAvLyBEZWxldGUgb3JpZ2luYWwgbmVzdGVkIGtleVxuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBhIFVSTC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgZW5jb2RlRm9yVXJsKGlucHV0KSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpbnB1dCkucmVwbGFjZSgvWyEnLigpKl0vZywgY2hhciA9PlxuICAgICAgJyUnICsgY2hhci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgSlNPTiByZXBsYWNlciBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgTWFwLCBTZXQsIGFuZCBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgKiBUaGlzIHJlcGxhY2VyIGNhbiBiZSB1c2VkIHdpdGggSlNPTi5zdHJpbmdpZnkgdG8gc2FmZWx5IHNlcmlhbGl6ZSBjb21wbGV4IG9iamVjdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSByZXBsYWNlciBmdW5jdGlvbiBmb3IgSlNPTi5zdHJpbmdpZnkgdGhhdDpcbiAgICogLSBDb252ZXJ0cyBNYXAgaW5zdGFuY2VzIHRvIHBsYWluIG9iamVjdHNcbiAgICogLSBDb252ZXJ0cyBTZXQgaW5zdGFuY2VzIHRvIGFycmF5c1xuICAgKiAtIFJlcGxhY2VzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2l0aCAnW0NpcmN1bGFyXScgbWFya2VyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG9iaiA9IHsgbmFtZTogJ3Rlc3QnLCBtYXA6IG5ldyBNYXAoW1sna2V5JywgJ3ZhbHVlJ11dKSB9O1xuICAgKiBvYmouc2VsZiA9IG9iajsgLy8gY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAqIEpTT04uc3RyaW5naWZ5KG9iaiwgVXRpbHMuZ2V0Q2lyY3VsYXJSZXBsYWNlcigpKTtcbiAgICogLy8gT3V0cHV0OiB7XCJuYW1lXCI6XCJ0ZXN0XCIsXCJtYXBcIjp7XCJrZXlcIjpcInZhbHVlXCJ9LFwic2VsZlwiOlwiW0NpcmN1bGFyXVwifVxuICAgKi9cbiAgc3RhdGljIGdldENpcmN1bGFyUmVwbGFjZXIoKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgcmV0dXJuIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoVXRpbHMuaXNNYXAodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKFV0aWxzLmlzU2V0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgfVxuICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbmVzdGVkIHByb3BlcnR5IHZhbHVlIGZyb20gYW4gb2JqZWN0IHVzaW5nIGRvdCBub3RhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGdldCB0aGUgcHJvcGVydHkgZnJvbS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggaW4gZG90IG5vdGF0aW9uLCBlLmcuICdkYXRhYmFzZU9wdGlvbnMuYWxsb3dQdWJsaWNFeHBsYWluJy5cbiAgICogQHJldHVybnMge2FueX0gVGhlIHByb3BlcnR5IHZhbHVlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG9iaiA9IHsgZGF0YWJhc2U6IHsgb3B0aW9uczogeyBlbmFibGVkOiB0cnVlIH0gfSB9O1xuICAgKiBVdGlscy5nZXROZXN0ZWRQcm9wZXJ0eShvYmosICdkYXRhYmFzZS5vcHRpb25zLmVuYWJsZWQnKTtcbiAgICogLy8gT3V0cHV0OiB0cnVlXG4gICAqL1xuICBzdGF0aWMgZ2V0TmVzdGVkUHJvcGVydHkob2JqLCBwYXRoKSB7XG4gICAgaWYgKCFvYmogfHwgIXBhdGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IGN1cnJlbnQgPSBvYmo7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCB8fCB0eXBlb2YgY3VycmVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIGh1bWFuLXJlYWRhYmxlIHNpemUgc3RyaW5nIGludG8gYSBieXRlIGNvdW50LlxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gc2l6ZSAtIEEgbnVtYmVyIChmbG9vcmVkIHRvIGFuIGludGVnZXIpLCBhIG51bWVyaWMgc3RyaW5nXG4gICAqICAgKHRyZWF0ZWQgYXMgYnl0ZXMpLCBvciBhIHN0cmluZyB3aXRoIGEgdW5pdCBzdWZmaXg6IGBiYCwgYGtiYCwgYG1iYCwgYGdiYFxuICAgKiAgIChjYXNlLWluc2Vuc2l0aXZlKS4gRXhhbXBsZXM6IGAnMjBtYidgLCBgJzUxMmtiJ2AsIGAnMS41Z2InYCwgYDEwNDg1NzZgLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgc2l6ZSBpbiBieXRlcywgZmxvb3JlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LlxuICAgKi9cbiAgc3RhdGljIHBhcnNlU2l6ZVRvQnl0ZXMoc2l6ZSkge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHNpemUpIHx8IHNpemUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzaXplIHZhbHVlOiAke3NpemV9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihzaXplKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyID0gU3RyaW5nKHNpemUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1hdGNoID0gc3RyLm1hdGNoKC9eKFxcZCsoPzpcXC5cXGQrKT8pXFxzKihifGtifG1ifGdiKT8kLyk7XG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNpemUgdmFsdWU6ICR7c2l6ZX1gKTtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gcGFyc2VGbG9hdChtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IG1hdGNoWzJdO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAna2InOlxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW0gKiAxMDI0KTtcbiAgICAgIGNhc2UgJ21iJzpcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtICogMTAyNCAqIDEwMjQpO1xuICAgICAgY2FzZSAnZ2InOlxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW0gKiAxMDI0ICogMTAyNCAqIDEwMjQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBVdGlscztcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQ0UsUUFBUTtBQUNqQyxNQUFNO0VBQUVDO0FBQU0s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
|
|
594
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwicHJvbWlzZXMiLCJ0eXBlcyIsIlV0aWxzIiwiZ2V0TG9jYWxpemVkUGF0aCIsImRlZmF1bHRQYXRoIiwibG9jYWxlIiwiZmlsZSIsImJhc2VuYW1lIiwiYmFzZVBhdGgiLCJkaXJuYW1lIiwibG9jYWxlUGF0aCIsImpvaW4iLCJsb2NhbGVGaWxlRXhpc3RzIiwiZmlsZUV4aXN0cyIsInN1YmRpciIsImxhbmd1YWdlIiwic3BsaXQiLCJsYW5ndWFnZVBhdGgiLCJsYW5ndWFnZUZpbGVFeGlzdHMiLCJhY2Nlc3MiLCJpc1BhdGgiLCJzIiwidGVzdCIsImZsYXR0ZW5PYmplY3QiLCJvYmoiLCJwYXJlbnRLZXkiLCJkZWxpbWl0ZXIiLCJyZXN1bHQiLCJrZXkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJuZXdLZXkiLCJpc0RhdGUiLCJ2YWx1ZSIsImlzUmVnRXhwIiwiaXNNYXAiLCJpc1NldCIsImlzTmF0aXZlRXJyb3IiLCJpc1Byb21pc2UiLCJ0aGVuIiwiZ2V0UHJvdG90eXBlT2YiLCJpc09iamVjdCIsImdldE9iamVjdEtleVBlcm11dGF0aW9ucyIsIm9iamVjdCIsImluZGV4IiwiY3VycmVudCIsInJlc3VsdHMiLCJrZXlzIiwidmFsdWVzIiwibmV4dEluZGV4IiwibGVuZ3RoIiwiYXNzaWduIiwicHVzaCIsInZhbGlkYXRlUGFyYW1zIiwicGFyYW1zIiwidHlwZSIsImlzT3B0aW9uYWwiLCJvIiwicGFyYW0iLCJ2IiwidCIsInJlbGF0aXZlVGltZVRvRGF0ZSIsInRleHQiLCJub3ciLCJEYXRlIiwidG9Mb3dlckNhc2UiLCJwYXJ0cyIsImZpbHRlciIsInBhcnQiLCJmdXR1cmUiLCJwYXN0Iiwic3RhdHVzIiwiaW5mbyIsInNsaWNlIiwicGFpcnMiLCJzaGlmdCIsInNlY29uZHMiLCJudW0iLCJpbnRlcnZhbCIsInZhbCIsIk51bWJlciIsImlzSW50ZWdlciIsIm1pbGxpc2Vjb25kcyIsInZhbHVlT2YiLCJvYmplY3RDb250YWluc0tleVZhbHVlIiwiaXNNYXRjaCIsImEiLCJiIiwiUmVnRXhwIiwiaXNLZXlNYXRjaCIsImsiLCJpc1ZhbHVlTWF0Y2giLCJzdGFjayIsInNlZW4iLCJXZWFrU2V0IiwicG9wIiwiaGFzIiwiYWRkIiwiZW50cmllcyIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwidG9TdHJpbmciLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsImNvbmZpZyIsImRhdGEiLCJyZXF1ZXN0S2V5d29yZERlbnlsaXN0Iiwia2V5d29yZCIsIm1hdGNoIiwiSlNPTiIsInN0cmluZ2lmeSIsImFkZE5lc3RlZEtleXNUb1Jvb3QiLCJlbmNvZGVGb3JVcmwiLCJpbnB1dCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJjaGFyIiwiY2hhckNvZGVBdCIsInRvVXBwZXJDYXNlIiwiZ2V0Q2lyY3VsYXJSZXBsYWNlciIsImZyb21FbnRyaWVzIiwiQXJyYXkiLCJmcm9tIiwiZ2V0TmVzdGVkUHJvcGVydHkiLCJwYXJzZVNpemVUb0J5dGVzIiwic2l6ZSIsImlzRmluaXRlIiwiRXJyb3IiLCJNYXRoIiwiZmxvb3IiLCJzdHIiLCJTdHJpbmciLCJ0cmltIiwicGFyc2VGbG9hdCIsInVuaXQiLCJnZXRGaWxlRXh0ZW5zaW9uIiwiZmlsZW5hbWUiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvVXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB1dGlscy5qc1xuICogQGZpbGUgR2VuZXJhbCBwdXJwb3NlIHV0aWxpdGllc1xuICogQGRlc2NyaXB0aW9uIEdlbmVyYWwgcHVycG9zZSB1dGlsaXRpZXMuXG4gKi9cblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKS5wcm9taXNlcztcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGUgZ2VuZXJhbCBwdXJwb3NlIHV0aWxpdGllcy5cbiAqL1xuY2xhc3MgVXRpbHMge1xuICAvKipcbiAgICogQGZ1bmN0aW9uIGdldExvY2FsaXplZFBhdGhcbiAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBsb2NhbGl6ZWQgZmlsZSBwYXRoIGFjY29yaW5nIHRvIHRoZSBsb2NhbGUuXG4gICAqXG4gICAqIExvY2FsaXplZCBmaWxlcyBhcmUgc2VhcmNoZWQgaW4gc3ViZm9sZGVycyBvZiBhIGdpdmVuIHBhdGgsIGUuZy5cbiAgICpcbiAgICogcm9vdC9cbiAgICog4pSc4pSA4pSAIGJhc2UvICAgICAgICAgICAgICAgICAgICAvLyBiYXNlIHBhdGggdG8gZmlsZXNcbiAgICog4pSCICAg4pSc4pSA4pSAIGV4YW1wbGUuaHRtbCAgICAgICAgIC8vIGRlZmF1bHQgZmlsZVxuICAgKiDilIIgICDilJTilIDilIAgZGUvICAgICAgICAgICAgICAgICAgLy8gZGUgbGFuZ3VhZ2UgZm9sZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBleGFtcGxlLmh0bWwgICAgIC8vIGRlIGxvY2FsaXplZCBmaWxlXG4gICAqIOKUgiAgIOKUlOKUgOKUgCBkZS1BVC8gICAgICAgICAgICAgICAvLyBkZS1BVCBsb2NhbGUgZm9sZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBleGFtcGxlLmh0bWwgICAgIC8vIGRlLUFUIGxvY2FsaXplZCBmaWxlXG4gICAqXG4gICAqIEZpbGVzIGFyZSBtYXRjaGVkIHdpdGggdGhlIGxvY2FsZSBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOlxuICAgKiAxLiBMb2NhbGUgbWF0Y2gsIGUuZy4gbG9jYWxlIGBkZS1BVGAgbWF0Y2hlcyBmaWxlIGluIGZvbGRlciBgZGUtQVRgLlxuICAgKiAyLiBMYW5ndWFnZSBtYXRjaCwgZS5nLiBsb2NhbGUgYGRlLUFUYCBtYXRjaGVzIGZpbGUgaW4gZm9sZGVyIGBkZWAuXG4gICAqIDMuIERlZmF1bHQ7IGZpbGUgaW4gYmFzZSBmb2xkZXIgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0UGF0aCBUaGUgYWJzb2x1dGUgZmlsZSBwYXRoLCB3aGljaCBpcyBhbHNvXG4gICAqIHRoZSBkZWZhdWx0IHBhdGggcmV0dXJuZWQgaWYgbG9jYWxpemF0aW9uIGlzIG5vdCBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBsb2NhbGUgVGhlIGxvY2FsZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gVGhlIG9iamVjdCBjb250YWluczpcbiAgICogLSBgcGF0aGA6IFRoZSBwYXRoIHRvIHRoZSBsb2NhbGl6ZWQgZmlsZSwgb3IgdGhlIG9yaWdpbmFsIHBhdGggaWZcbiAgICogICBsb2NhbGl6YXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbiAgICogLSBgc3ViZGlyYDogVGhlIHN1YmRpcmVjdG9yeSBvZiB0aGUgbG9jYWxpemVkIGZpbGUsIG9yIHVuZGVmaW5lZCBpZlxuICAgKiAgIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGxvY2FsaXplZCBmaWxlLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldExvY2FsaXplZFBhdGgoZGVmYXVsdFBhdGgsIGxvY2FsZSkge1xuICAgIC8vIEdldCBmaWxlIG5hbWUgYW5kIHBhdGhzXG4gICAgY29uc3QgZmlsZSA9IHBhdGguYmFzZW5hbWUoZGVmYXVsdFBhdGgpO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gcGF0aC5kaXJuYW1lKGRlZmF1bHRQYXRoKTtcblxuICAgIC8vIElmIGxvY2FsZSBpcyBub3Qgc2V0IHJldHVybiBkZWZhdWx0IGZpbGVcbiAgICBpZiAoIWxvY2FsZSkge1xuICAgICAgcmV0dXJuIHsgcGF0aDogZGVmYXVsdFBhdGggfTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmaWxlIGZvciBsb2NhbGUgZXhpc3RzXG4gICAgY29uc3QgbG9jYWxlUGF0aCA9IHBhdGguam9pbihiYXNlUGF0aCwgbG9jYWxlLCBmaWxlKTtcbiAgICBjb25zdCBsb2NhbGVGaWxlRXhpc3RzID0gYXdhaXQgVXRpbHMuZmlsZUV4aXN0cyhsb2NhbGVQYXRoKTtcblxuICAgIC8vIElmIGZpbGUgZm9yIGxvY2FsZSBleGlzdHMgcmV0dXJuIGZpbGVcbiAgICBpZiAobG9jYWxlRmlsZUV4aXN0cykge1xuICAgICAgcmV0dXJuIHsgcGF0aDogbG9jYWxlUGF0aCwgc3ViZGlyOiBsb2NhbGUgfTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmaWxlIGZvciBsYW5ndWFnZSBleGlzdHNcbiAgICBjb25zdCBsYW5ndWFnZSA9IGxvY2FsZS5zcGxpdCgnLScpWzBdO1xuICAgIGNvbnN0IGxhbmd1YWdlUGF0aCA9IHBhdGguam9pbihiYXNlUGF0aCwgbGFuZ3VhZ2UsIGZpbGUpO1xuICAgIGNvbnN0IGxhbmd1YWdlRmlsZUV4aXN0cyA9IGF3YWl0IFV0aWxzLmZpbGVFeGlzdHMobGFuZ3VhZ2VQYXRoKTtcblxuICAgIC8vIElmIGZpbGUgZm9yIGxhbmd1YWdlIGV4aXN0cyByZXR1cm4gZmlsZVxuICAgIGlmIChsYW5ndWFnZUZpbGVFeGlzdHMpIHtcbiAgICAgIHJldHVybiB7IHBhdGg6IGxhbmd1YWdlUGF0aCwgc3ViZGlyOiBsYW5ndWFnZSB9O1xuICAgIH1cblxuICAgIC8vIFJldHVybiBkZWZhdWx0IGZpbGVcbiAgICByZXR1cm4geyBwYXRoOiBkZWZhdWx0UGF0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBmaWxlRXhpc3RzXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3Mgd2hldGhlciBhIGZpbGUgZXhpc3RzLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBUaGUgZmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gSXMgdHJ1ZSBpZiB0aGUgZmlsZSBjYW4gYmUgYWNjZXNzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBmaWxlRXhpc3RzKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKHBhdGgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBmdW5jdGlvbiBpc1BhdGhcbiAgICogQGRlc2NyaXB0aW9uIEV2YWx1YXRlcyB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgZmlsZSBwYXRoIChhcyBvcHBvc2VkIHRvIGEgVVJMIGZvciBleGFtcGxlKS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHMgVGhlIHN0cmluZyB0byBldmFsdWF0ZS5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgZXZhbHVhdGVkIHN0cmluZyBpcyBhIHBhdGguXG4gICAqL1xuICBzdGF0aWMgaXNQYXRoKHMpIHtcbiAgICByZXR1cm4gLyheXFwvKXwoXlxcLlxcLyl8KF5cXC5cXC5cXC8pLy50ZXN0KHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW5zIGFuIG9iamVjdCBhbmQgY3JhdGVzIG5ldyBrZXlzIHdpdGggY3VzdG9tIGRlbGltaXRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBmbGF0dGVuLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW2RlbGltaXRlcj0nLiddIFRoZSBkZWxpbWl0ZXIgb2YgdGhlIG5ld2x5IGdlbmVyYXRlZCBrZXlzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBmbGF0dGVuZWQgb2JqZWN0LlxuICAgKiovXG4gIHN0YXRpYyBmbGF0dGVuT2JqZWN0KG9iaiwgcGFyZW50S2V5LCBkZWxpbWl0ZXIgPSAnLicsIHJlc3VsdCA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBjb25zdCBuZXdLZXkgPSBwYXJlbnRLZXkgPyBwYXJlbnRLZXkgKyBkZWxpbWl0ZXIgKyBrZXkgOiBrZXk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmZsYXR0ZW5PYmplY3Qob2JqW2tleV0sIG5ld0tleSwgZGVsaW1pdGVyLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtuZXdLZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFsbS1zYWZlIGNoZWNrIGZvciBEYXRlLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIERhdGUuXG4gICAqL1xuICBzdGF0aWMgaXNEYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVzLmlzRGF0ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhbG0tc2FmZSBjaGVjayBmb3IgUmVnRXhwLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIFJlZ0V4cC5cbiAgICovXG4gIHN0YXRpYyBpc1JlZ0V4cCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlcy5pc1JlZ0V4cCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhbG0tc2FmZSBjaGVjayBmb3IgTWFwLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIE1hcC5cbiAgICovXG4gIHN0YXRpYyBpc01hcCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlcy5pc01hcCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhbG0tc2FmZSBjaGVjayBmb3IgU2V0LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIFNldC5cbiAgICovXG4gIHN0YXRpYyBpc1NldCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlcy5pc1NldCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVhbG0tc2FmZSBjaGVjayBmb3IgbmF0aXZlIEVycm9yLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIG5hdGl2ZSBFcnJvci5cbiAgICovXG4gIHN0YXRpYyBpc05hdGl2ZUVycm9yKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVzLmlzTmF0aXZlRXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxtLXNhZmUgY2hlY2sgZm9yIFByb21pc2UgKGR1Y2stdHlwZWQgYXMgdGhlbmFibGUpLlxuICAgKiBHdWFyZHMgYWdhaW5zdCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvbiBieSBlbnN1cmluZyBgdGhlbmAgaXMgbm90XG4gICAqIGluaGVyaXRlZCBzb2xlbHkgZnJvbSBPYmplY3QucHJvdG90eXBlLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIFByb21pc2Ugb3IgdGhlbmFibGUuXG4gICAqL1xuICBzdGF0aWMgaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlLnRoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgIT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAndGhlbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxtLXNhZmUgY2hlY2sgZm9yIG9iamVjdCB0eXBlLiBVc2VzIGB0eXBlb2ZgIGluc3RlYWQgb2YgYGluc3RhbmNlb2YgT2JqZWN0YFxuICAgKiB3aGljaCBmYWlscyBhY3Jvc3MgcmVhbG1zLiBSZXR1cm5zIHRydWUgZm9yIGFueSBub24tbnVsbCB2YWx1ZSB3aGVyZVxuICAgKiBgdHlwZW9mYCBpcyBgJ29iamVjdCdgLCBpbmNsdWRpbmcgcGxhaW4gb2JqZWN0cywgYXJyYXlzLCBkYXRlcywgbWFwcywgc2V0cyxcbiAgICogcmVnZXgsIGFuZCBib3hlZCBwcmltaXRpdmVzIChlLmcuIGBuZXcgU3RyaW5nKClgKS4gUmV0dXJucyBmYWxzZSBmb3IgYG51bGxgLFxuICAgKiBgdW5kZWZpbmVkYCwgdW5ib3hlZCBwcmltaXRpdmVzLCBhbmQgZnVuY3Rpb25zLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdCB0eXBlLlxuICAgKi9cbiAgc3RhdGljIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCBhbGwgcGVybXV0YXRpb25zIG9mIHRoZSBvcmlnaW5hbCBrZXlzLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhpcyBkZWZpbml0aW9uOlxuICAgKiBgYGBcbiAgICoge1xuICAgKiAgIGE6IFt0cnVlLCBmYWxzZV0sXG4gICAqICAgYjogWzEsIDJdLFxuICAgKiAgIGM6IFsneCddXG4gICAqIH1cbiAgICogYGBgXG4gICAqIHBlcm11dGF0ZXMgdG86XG4gICAqIGBgYFxuICAgKiBbXG4gICAqICAgeyBhOiB0cnVlLCBiOiAxLCBjOiAneCcgfSxcbiAgICogICB7IGE6IHRydWUsIGI6IDIsIGM6ICd4JyB9LFxuICAgKiAgIHsgYTogZmFsc2UsIGI6IDEsIGM6ICd4JyB9LFxuICAgKiAgIHsgYTogZmFsc2UsIGI6IDIsIGM6ICd4JyB9XG4gICAqIF1cbiAgICogYGBgXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBwZXJtdXRhdGUuXG4gICAqIEBwYXJhbSB7SW50ZWdlcn0gW2luZGV4PTBdIFRoZSBjdXJyZW50IGtleSBpbmRleC5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtjdXJyZW50PXt9XSBUaGUgY3VycmVudCByZXN1bHQgZW50cnkgYmVpbmcgY29tcG9zZWQuXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzPVtdXSBUaGUgcmVzdWx0aW5nIGFycmF5IG9mIHBlcm11dGF0aW9ucy5cbiAgICovXG4gIHN0YXRpYyBnZXRPYmplY3RLZXlQZXJtdXRhdGlvbnMob2JqZWN0LCBpbmRleCA9IDAsIGN1cnJlbnQgPSB7fSwgcmVzdWx0cyA9IFtdKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpbmRleF07XG4gICAgY29uc3QgdmFsdWVzID0gb2JqZWN0W2tleV07XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgY3VycmVudFtrZXldID0gdmFsdWU7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSBpbmRleCArIDE7XG5cbiAgICAgIGlmIChuZXh0SW5kZXggPCBrZXlzLmxlbmd0aCkge1xuICAgICAgICBVdGlscy5nZXRPYmplY3RLZXlQZXJtdXRhdGlvbnMob2JqZWN0LCBuZXh0SW5kZXgsIGN1cnJlbnQsIHJlc3VsdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudCk7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgcGFyYW1ldGVycyBhbmQgdGhyb3dzIGlmIGEgcGFyYW1ldGVyIGlzIGludmFsaWQuXG4gICAqIEV4YW1wbGUgcGFyYW1ldGVyIHR5cGVzIHN5bnRheDpcbiAgICogYGBgXG4gICAqIHtcbiAgICogICBwYXJhbWV0ZXJOYW1lOiB7XG4gICAqICAgICAgdDogJ2Jvb2xlYW4nLFxuICAgKiAgICAgIHY6IGlzQm9vbGVhbixcbiAgICogICAgICBvOiB0cnVlXG4gICAqICAgfSxcbiAgICogICAuLi5cbiAgICogfVxuICAgKiBgYGBcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBUaGUgcGFyYW1ldGVycyB0byB2YWxpZGF0ZS5cbiAgICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSB0eXBlcyBUaGUgcGFyYW1ldGVyIHR5cGVzIHVzZWQgZm9yIHZhbGlkYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlcy50IFRoZSBwYXJhbWV0ZXIgdHlwZTsgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZSwgbm90IGZvciB2YWxpZGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gdHlwZXMudiBUaGUgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHBhcmFtZXRlciB2YWx1ZS5cbiAgICogQHBhcmFtIHtCb29sZWFufSBbdHlwZXMubz1mYWxzZV0gSXMgdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLlxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlUGFyYW1zKHBhcmFtcywgdHlwZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICBjb25zdCB0eXBlID0gdHlwZXNba2V5XTtcbiAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPSAhIXR5cGUubztcbiAgICAgIGNvbnN0IHBhcmFtID0gcGFyYW1zW2tleV07XG4gICAgICBpZiAoIShpc09wdGlvbmFsICYmIHBhcmFtID09IG51bGwpICYmICF0eXBlLnYocGFyYW0pKSB7XG4gICAgICAgIHRocm93IGBJbnZhbGlkIHBhcmFtZXRlciAke2tleX0gbXVzdCBiZSBvZiB0eXBlICR7dHlwZS50fSBidXQgaXMgJHt0eXBlb2YgcGFyYW19YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHJlbGF0aXZlIGRhdGUgYmFzZWQgb24gYSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IFRoZSBzdHJpbmcgdG8gaW50ZXJwcmV0IHRoZSBkYXRlIGZyb20uXG4gICAqIEBwYXJhbSB7RGF0ZX0gbm93IFRoZSBkYXRlIHRoZSBzdHJpbmcgaXMgY29tcGFyaW5nIGFnYWluc3QuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZWxhdGl2ZSBkYXRlIG9iamVjdC5cbiAgICoqL1xuICBzdGF0aWMgcmVsYXRpdmVUaW1lVG9EYXRlKHRleHQsIG5vdyA9IG5ldyBEYXRlKCkpIHtcbiAgICB0ZXh0ID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIGxldCBwYXJ0cyA9IHRleHQuc3BsaXQoJyAnKTtcblxuICAgIC8vIEZpbHRlciBvdXQgd2hpdGVzcGFjZVxuICAgIHBhcnRzID0gcGFydHMuZmlsdGVyKHBhcnQgPT4gcGFydCAhPT0gJycpO1xuXG4gICAgY29uc3QgZnV0dXJlID0gcGFydHNbMF0gPT09ICdpbic7XG4gICAgY29uc3QgcGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnYWdvJztcblxuICAgIGlmICghZnV0dXJlICYmICFwYXN0ICYmIHRleHQgIT09ICdub3cnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIGluZm86IFwiVGltZSBzaG91bGQgZWl0aGVyIHN0YXJ0IHdpdGggJ2luJyBvciBlbmQgd2l0aCAnYWdvJ1wiLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZnV0dXJlICYmIHBhc3QpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogXCJUaW1lIGNhbm5vdCBoYXZlIGJvdGggJ2luJyBhbmQgJ2FnbydcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gc3RyaXAgdGhlICdhZ28nIG9yICdpbidcbiAgICBpZiAoZnV0dXJlKSB7XG4gICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwYXN0XG4gICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5sZW5ndGggJSAyICE9PSAwICYmIHRleHQgIT09ICdub3cnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIGluZm86ICdJbnZhbGlkIHRpbWUgc3RyaW5nLiBEYW5nbGluZyB1bml0IG9yIG51bWJlci4nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWlycyA9IFtdO1xuICAgIHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHBhaXJzLnB1c2goW3BhcnRzLnNoaWZ0KCksIHBhcnRzLnNoaWZ0KCldKTtcbiAgICB9XG5cbiAgICBsZXQgc2Vjb25kcyA9IDA7XG4gICAgZm9yIChjb25zdCBbbnVtLCBpbnRlcnZhbF0gb2YgcGFpcnMpIHtcbiAgICAgIGNvbnN0IHZhbCA9IE51bWJlcihudW0pO1xuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgaW5mbzogYCcke251bX0nIGlzIG5vdCBhbiBpbnRlZ2VyLmAsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgICAgY2FzZSAneXInOlxuICAgICAgICBjYXNlICd5cnMnOlxuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICAgIHNlY29uZHMgKz0gdmFsICogMzE1MzYwMDA7IC8vIDM2NSAqIDI0ICogNjAgKiA2MFxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3drJzpcbiAgICAgICAgY2FzZSAnd2tzJzpcbiAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIGNhc2UgJ3dlZWtzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbCAqIDYwNDgwMDsgLy8gNyAqIDI0ICogNjAgKiA2MFxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICBjYXNlICdkYXlzJzpcbiAgICAgICAgICBzZWNvbmRzICs9IHZhbCAqIDg2NDAwOyAvLyAyNCAqIDYwICogNjBcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdocic6XG4gICAgICAgIGNhc2UgJ2hycyc6XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgc2Vjb25kcyArPSB2YWwgKiAzNjAwOyAvLyA2MCAqIDYwXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgY2FzZSAnbWlucyc6XG4gICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgICAgICAgIHNlY29uZHMgKz0gdmFsICogNjA7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgY2FzZSAnc2Vjcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY29uZHMnOlxuICAgICAgICAgIHNlY29uZHMgKz0gdmFsO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICAgIGluZm86IGBJbnZhbGlkIGludGVydmFsOiAnJHtpbnRlcnZhbH0nYCxcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IHNlY29uZHMgKiAxMDAwO1xuICAgIGlmIChmdXR1cmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICBpbmZvOiAnZnV0dXJlJyxcbiAgICAgICAgcmVzdWx0OiBuZXcgRGF0ZShub3cudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChwYXN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgaW5mbzogJ3Bhc3QnLFxuICAgICAgICByZXN1bHQ6IG5ldyBEYXRlKG5vdy52YWx1ZU9mKCkgLSBtaWxsaXNlY29uZHMpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIGluZm86ICdwcmVzZW50JyxcbiAgICAgICAgcmVzdWx0OiBuZXcgRGF0ZShub3cudmFsdWVPZigpKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlZXAtc2NhbnMgYW4gb2JqZWN0IGZvciBhIG1hdGNoaW5nIGtleS92YWx1ZSBkZWZpbml0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gc2Nhbi5cbiAgICogQHBhcmFtIHtTdHJpbmcgfCB1bmRlZmluZWR9IGtleSBUaGUga2V5IHRvIG1hdGNoLCBvciB1bmRlZmluZWQgaWYgb25seSB0aGUgdmFsdWUgc2hvdWxkIGJlIG1hdGNoZWQuXG4gICAqIEBwYXJhbSB7YW55IHwgdW5kZWZpbmVkfSB2YWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2gsIG9yIHVuZGVmaW5lZCBpZiBvbmx5IHRoZSBrZXkgc2hvdWxkIGJlIG1hdGNoZWQuXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIGEgbWF0Y2ggd2FzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgb2JqZWN0Q29udGFpbnNLZXlWYWx1ZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBpc01hdGNoID0gKGEsIGIpID0+ICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgbmV3IFJlZ0V4cChiKS50ZXN0KGEpKSB8fCBhID09PSBiO1xuICAgIGNvbnN0IGlzS2V5TWF0Y2ggPSBrID0+IGlzTWF0Y2goaywga2V5KTtcbiAgICBjb25zdCBpc1ZhbHVlTWF0Y2ggPSB2ID0+IGlzTWF0Y2godiwgdmFsdWUpO1xuICAgIGNvbnN0IHN0YWNrID0gW29ial07XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdGFjay5wb3AoKTtcbiAgICAgIGlmIChzZWVuLmhhcyhjdXJyZW50KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGN1cnJlbnQpO1xuICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoY3VycmVudCkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID09PSB1bmRlZmluZWQgJiYgaXNLZXlNYXRjaChrKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXNWYWx1ZU1hdGNoKHYpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpc0tleU1hdGNoKGspICYmIGlzVmFsdWVNYXRjaCh2KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbJ1tvYmplY3QgT2JqZWN0XScsICdbb2JqZWN0IEFycmF5XSddLmluY2x1ZGVzKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSkpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIGRhdGEpIHtcbiAgICBpZiAoY29uZmlnPy5yZXF1ZXN0S2V5d29yZERlbnlsaXN0KSB7XG4gICAgICAvLyBTY2FuIHJlcXVlc3QgZGF0YSBmb3IgZGVuaWVkIGtleXdvcmRzXG4gICAgICBmb3IgKGNvbnN0IGtleXdvcmQgb2YgY29uZmlnLnJlcXVlc3RLZXl3b3JkRGVueWxpc3QpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBVdGlscy5vYmplY3RDb250YWluc0tleVZhbHVlKGRhdGEsIGtleXdvcmQua2V5LCBrZXl3b3JkLnZhbHVlKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgdGhyb3cgYFByb2hpYml0ZWQga2V5d29yZCBpbiByZXF1ZXN0IGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoa2V5d29yZCl9LmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgdGhlIG5lc3RlZCBrZXlzIG9mIGEgc3BlY2lmaWVkIGtleSBpbiBhbiBvYmplY3QgdG8gdGhlIHJvb3Qgb2YgdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IGtleSBUaGUga2V5IHdob3NlIG5lc3RlZCBrZXlzIHdpbGwgYmUgbW92ZWQgdG8gcm9vdC5cbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIG1vZGlmaWVkIG9iamVjdCwgb3IgdGhlIG9yaWdpbmFsIG9iamVjdCBpZiBubyBtb2RpZmljYXRpb24gaGFwcGVuZWQuXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IG9iaiA9IHtcbiAgICogICBhOiAxLFxuICAgKiAgIGI6IHtcbiAgICogICAgIGM6IDIsXG4gICAqICAgICBkOiAzXG4gICAqICAgfSxcbiAgICogICBlOiA0XG4gICAqIH07XG4gICAqIGFkZE5lc3RlZEtleXNUb1Jvb3Qob2JqLCAnYicpO1xuICAgKiBjb25zb2xlLmxvZyhvYmopO1xuICAgKiAvLyBPdXRwdXQ6IHsgYTogMSwgZTogNCwgYzogMiwgZDogMyB9XG4gICovXG4gIHN0YXRpYyBhZGROZXN0ZWRLZXlzVG9Sb290KG9iaiwga2V5KSB7XG4gICAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIEFkZCBuZXN0ZWQga2V5cyB0byByb290XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwgeyAuLi5vYmpba2V5XSB9KTtcbiAgICAgIC8vIERlbGV0ZSBvcmlnaW5hbCBuZXN0ZWQga2V5XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyBhIHN0cmluZyB0byBiZSB1c2VkIGluIGEgVVJMLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBlbmNvZGVGb3JVcmwoaW5wdXQpIHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KS5yZXBsYWNlKC9bIScuKCkqXS9nLCBjaGFyID0+XG4gICAgICAnJScgKyBjaGFyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBKU09OIHJlcGxhY2VyIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBNYXAsIFNldCwgYW5kIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gICAqIFRoaXMgcmVwbGFjZXIgY2FuIGJlIHVzZWQgd2l0aCBKU09OLnN0cmluZ2lmeSB0byBzYWZlbHkgc2VyaWFsaXplIGNvbXBsZXggb2JqZWN0cy5cbiAgICpcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlcGxhY2VyIGZ1bmN0aW9uIGZvciBKU09OLnN0cmluZ2lmeSB0aGF0OlxuICAgKiAtIENvbnZlcnRzIE1hcCBpbnN0YW5jZXMgdG8gcGxhaW4gb2JqZWN0c1xuICAgKiAtIENvbnZlcnRzIFNldCBpbnN0YW5jZXMgdG8gYXJyYXlzXG4gICAqIC0gUmVwbGFjZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyB3aXRoICdbQ2lyY3VsYXJdJyBtYXJrZXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgb2JqID0geyBuYW1lOiAndGVzdCcsIG1hcDogbmV3IE1hcChbWydrZXknLCAndmFsdWUnXV0pIH07XG4gICAqIG9iai5zZWxmID0gb2JqOyAvLyBjaXJjdWxhciByZWZlcmVuY2VcbiAgICogSlNPTi5zdHJpbmdpZnkob2JqLCBVdGlscy5nZXRDaXJjdWxhclJlcGxhY2VyKCkpO1xuICAgKiAvLyBPdXRwdXQ6IHtcIm5hbWVcIjpcInRlc3RcIixcIm1hcFwiOntcImtleVwiOlwidmFsdWVcIn0sXCJzZWxmXCI6XCJbQ2lyY3VsYXJdXCJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0Q2lyY3VsYXJSZXBsYWNlcigpIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICByZXR1cm4gKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChVdGlscy5pc01hcCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoVXRpbHMuaXNTZXQodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBuZXN0ZWQgcHJvcGVydHkgdmFsdWUgZnJvbSBhbiBvYmplY3QgdXNpbmcgZG90IG5vdGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBmcm9tLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCBpbiBkb3Qgbm90YXRpb24sIGUuZy4gJ2RhdGFiYXNlT3B0aW9ucy5hbGxvd1B1YmxpY0V4cGxhaW4nLlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgcHJvcGVydHkgdmFsdWUgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgb2JqID0geyBkYXRhYmFzZTogeyBvcHRpb25zOiB7IGVuYWJsZWQ6IHRydWUgfSB9IH07XG4gICAqIFV0aWxzLmdldE5lc3RlZFByb3BlcnR5KG9iaiwgJ2RhdGFiYXNlLm9wdGlvbnMuZW5hYmxlZCcpO1xuICAgKiAvLyBPdXRwdXQ6IHRydWVcbiAgICovXG4gIHN0YXRpYyBnZXROZXN0ZWRQcm9wZXJ0eShvYmosIHBhdGgpIHtcbiAgICBpZiAoIW9iaiB8fCAhcGF0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycmVudCA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoY3VycmVudCA9PSBudWxsIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIGEgaHVtYW4tcmVhZGFibGUgc2l6ZSBzdHJpbmcgaW50byBhIGJ5dGUgY291bnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBzaXplIC0gQSBudW1iZXIgKGZsb29yZWQgdG8gYW4gaW50ZWdlciksIGEgbnVtZXJpYyBzdHJpbmdcbiAgICogICAodHJlYXRlZCBhcyBieXRlcyksIG9yIGEgc3RyaW5nIHdpdGggYSB1bml0IHN1ZmZpeDogYGJgLCBga2JgLCBgbWJgLCBgZ2JgXG4gICAqICAgKGNhc2UtaW5zZW5zaXRpdmUpLiBFeGFtcGxlczogYCcyMG1iJ2AsIGAnNTEya2InYCwgYCcxLjVnYidgLCBgMTA0ODU3NmAuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBzaXplIGluIGJ5dGVzLCBmbG9vcmVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuXG4gICAqL1xuICBzdGF0aWMgcGFyc2VTaXplVG9CeXRlcyhzaXplKSB7XG4gICAgaWYgKHR5cGVvZiBzaXplID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2l6ZSkgfHwgc2l6ZSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNpemUgdmFsdWU6ICR7c2l6ZX1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNpemUpO1xuICAgIH1cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoc2l6ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWF0Y2ggPSBzdHIubWF0Y2goL14oXFxkKyg/OlxcLlxcZCspPylcXHMqKGJ8a2J8bWJ8Z2IpPyQvKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2l6ZSB2YWx1ZTogJHtzaXplfWApO1xuICAgIH1cbiAgICBjb25zdCBudW0gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gbWF0Y2hbMl07XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdrYic6XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bSAqIDEwMjQpO1xuICAgICAgY2FzZSAnbWInOlxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW0gKiAxMDI0ICogMTAyNCk7XG4gICAgICBjYXNlICdnYic6XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bSAqIDEwMjQgKiAxMDI0ICogMTAyNCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaWxlIGV4dGVuc2lvbiBhcyB0aGUgc3Vic3RyaW5nIGFmdGVyIHRoZSBsYXN0IGRvdCBpbiB0aGVcbiAgICogZmlsZW5hbWUuIEEgdHJhaWxpbmcgZG90IG9yIGEgZmlsZW5hbWUgd2l0aG91dCBhIGRvdCB5aWVsZHMgYW4gZW1wdHlcbiAgICogc3RyaW5nLiBDYWxsZXJzIGFwcGx5IGFueSBmdXJ0aGVyIG5vcm1hbGl6YXRpb24gKHdoaXRlc3BhY2UsIE1JTUVcbiAgICogcGFyYW1ldGVycywgZXRjLikgZm9yIHRoZWlyIHVzZSBjYXNlIOKAlCB0aGlzIGlzIGEgcHVyZSBwYXJzZXIsIG5vdCBhXG4gICAqIHBvbGljeS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBleHRlbnNpb24sIG9yIGAnJ2AgaWYgbm9uZVxuICAgKi9cbiAgc3RhdGljIGdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWUpIHtcbiAgICBpZiAoIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBmaWxlbmFtZS5zdWJzdHJpbmcoZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUNFLFFBQVE7QUFDakMsTUFBTTtFQUFFQztBQUFNLENBQUMsR0FBR0gsT0FBTyxDQUFDLE1BQU0sQ0FBQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0EsTUFBTUksS0FBSyxDQUFDO0VBQ1Y7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxhQUFhQyxnQkFBZ0JBLENBQUNDLFdBQVcsRUFB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
|