parse-server 9.9.1-alpha.1 → 9.9.1-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/lib/GraphQL/ParseGraphQLServer.js +27 -2
- package/lib/Options/Definitions.js +2 -2
- package/lib/Options/docs.js +2 -2
- package/lib/Options/index.js +1 -1
- package/lib/batch.js +14 -1
- package/lib/middlewares.js +34 -23
- package/package.json +1 -1
package/lib/middlewares.js
CHANGED
|
@@ -15,6 +15,7 @@ exports.handleParseErrors = handleParseErrors;
|
|
|
15
15
|
exports.handleParseHeaders = handleParseHeaders;
|
|
16
16
|
exports.handleParseHealth = handleParseHealth;
|
|
17
17
|
exports.handleParseSession = void 0;
|
|
18
|
+
exports.isRouteAllowed = isRouteAllowed;
|
|
18
19
|
exports.promiseEnforceMasterKeyAccess = promiseEnforceMasterKeyAccess;
|
|
19
20
|
exports.promiseEnsureIdempotency = promiseEnsureIdempotency;
|
|
20
21
|
var _cache = _interopRequireDefault(require("./cache"));
|
|
@@ -508,38 +509,48 @@ function handleParseHealth(options) {
|
|
|
508
509
|
});
|
|
509
510
|
};
|
|
510
511
|
}
|
|
511
|
-
function
|
|
512
|
-
|
|
513
|
-
if (
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
return next();
|
|
518
|
-
}
|
|
519
|
-
let path = req.originalUrl;
|
|
520
|
-
if (config.mount) {
|
|
521
|
-
const mountPath = new URL(config.mount).pathname;
|
|
522
|
-
if (path.startsWith(mountPath)) {
|
|
523
|
-
path = path.substring(mountPath.length);
|
|
512
|
+
function normalizeRouteAllowListPath(path, mount) {
|
|
513
|
+
let normalized = path;
|
|
514
|
+
if (mount) {
|
|
515
|
+
const mountPath = new URL(mount).pathname;
|
|
516
|
+
if (normalized.startsWith(mountPath)) {
|
|
517
|
+
normalized = normalized.substring(mountPath.length);
|
|
524
518
|
}
|
|
525
519
|
}
|
|
526
|
-
if (
|
|
527
|
-
|
|
520
|
+
if (normalized.startsWith('/')) {
|
|
521
|
+
normalized = normalized.substring(1);
|
|
528
522
|
}
|
|
529
|
-
if (
|
|
530
|
-
|
|
523
|
+
if (normalized.endsWith('/')) {
|
|
524
|
+
normalized = normalized.substring(0, normalized.length - 1);
|
|
531
525
|
}
|
|
532
|
-
const queryIndex =
|
|
526
|
+
const queryIndex = normalized.indexOf('?');
|
|
533
527
|
if (queryIndex !== -1) {
|
|
534
|
-
|
|
528
|
+
normalized = normalized.substring(0, queryIndex);
|
|
535
529
|
}
|
|
530
|
+
return normalized;
|
|
531
|
+
}
|
|
532
|
+
function isRouteAllowed(path, config, auth) {
|
|
533
|
+
if (!config || config.routeAllowList === undefined || config.routeAllowList === null) {
|
|
534
|
+
return true;
|
|
535
|
+
}
|
|
536
|
+
if (auth && (auth.isMaster || auth.isMaintenance)) {
|
|
537
|
+
return true;
|
|
538
|
+
}
|
|
539
|
+
const normalized = normalizeRouteAllowListPath(path, config.mount);
|
|
536
540
|
const regexes = config._routeAllowListRegex || [];
|
|
537
541
|
for (const regex of regexes) {
|
|
538
|
-
if (regex.test(
|
|
539
|
-
return
|
|
542
|
+
if (regex.test(normalized)) {
|
|
543
|
+
return true;
|
|
540
544
|
}
|
|
541
545
|
}
|
|
542
|
-
|
|
546
|
+
return false;
|
|
547
|
+
}
|
|
548
|
+
function enforceRouteAllowList(req, res, next) {
|
|
549
|
+
if (isRouteAllowed(req.originalUrl, req.config, req.auth)) {
|
|
550
|
+
return next();
|
|
551
|
+
}
|
|
552
|
+
const path = normalizeRouteAllowListPath(req.originalUrl, req.config?.mount);
|
|
553
|
+
throw (0, _Error.createSanitizedError)(_node.default.Error.OPERATION_FORBIDDEN, `Route not allowed by routeAllowList: ${req.method} ${path}`, req.config);
|
|
543
554
|
}
|
|
544
555
|
function handleParseErrors(err, req, res, next) {
|
|
545
556
|
const log = req.config && req.config.loggerController || _logger.default;
|
|
@@ -796,4 +807,4 @@ function allowDoubleForwardSlash(req, res, next) {
|
|
|
796
807
|
req.url = req.url.startsWith('//') ? req.url.substring(1) : req.url;
|
|
797
808
|
next();
|
|
798
809
|
}
|
|
799
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9ub2RlIiwiX0F1dGgiLCJfQ29uZmlnIiwiX2xvZ2dlciIsIl9yZXN0IiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9leHByZXNzUmF0ZUxpbWl0IiwiX0RlZmluaXRpb25zIiwiX3BhdGhUb1JlZ2V4cCIsIl9yYXRlTGltaXRSZWRpcyIsIl9yZWRpcyIsIl9uZXQiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImV4cG9ydHMiLCJnZXRNb3VudEZvclJlcXVlc3QiLCJyZXEiLCJtb3VudFBhdGhMZW5ndGgiLCJvcmlnaW5hbFVybCIsImxlbmd0aCIsInVybCIsIm1vdW50UGF0aCIsInNsaWNlIiwicHJvdG9jb2wiLCJnZXQiLCJnZXRCbG9ja0xpc3QiLCJpcFJhbmdlTGlzdCIsInN0b3JlIiwiYmxvY2tMaXN0IiwiQmxvY2tMaXN0IiwiZm9yRWFjaCIsImZ1bGxJcCIsInNldCIsImlwIiwibWFzayIsInNwbGl0IiwiYWRkQWRkcmVzcyIsImlzSVB2NCIsImFkZFN1Ym5ldCIsIk51bWJlciIsImNoZWNrSXAiLCJpbmNvbWluZ0lwSXNWNCIsInJlc3VsdCIsImNoZWNrIiwiaW5jbHVkZXMiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyZXMiLCJuZXh0IiwibW91bnQiLCJjb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsIm1haW50ZW5hbmNlS2V5IiwiaW5zdGFsbGF0aW9uSWQiLCJjbGllbnRLZXkiLCJqYXZhc2NyaXB0S2V5IiwiZG90TmV0S2V5IiwicmVzdEFQSUtleSIsImJhc2ljQXV0aCIsImh0dHBBdXRoIiwiYmFzaWNBdXRoQXBwSWQiLCJBcHBDYWNoZSIsImJvZHkiLCJfbm9Cb2R5IiwiZmlsZVZpYUpTT04iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiVXRpbHMiLCJpc09iamVjdCIsIl9Db250ZW50VHlwZSIsImhlYWRlcnMiLCJiYXNlNjQiLCJmaWxlRGF0YSIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiY29uZmlnIiwiQ29uZmlnIiwic3RhdGUiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJlcnJvciIsImxvYWRLZXlzIiwiYXBwIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc29sdmVkIiwicmVzb2x2ZUtleUF1dGgiLCJrZXlWYWx1ZSIsIm1haW50ZW5hbmNlS2V5VmFsdWUiLCJoYW5kbGVSYXRlTGltaXQiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwidXNlckZyb21KV1QiLCJBdXRoIiwidXNlciIsInJhdGVMaW1pdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwibGltaXQiLCJwYXRoRXhwIiwicGF0aCIsInJlZ2V4cCIsInRlc3QiLCJoYW5kbGVyIiwiZXJyIiwiQ09OTkVDVElPTl9GQUlMRUQiLCJsb2dnZXJDb250cm9sbGVyIiwibWVzc2FnZSIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGhvZCIsInJlcXVlc3RBdXRoIiwiaW5kZXhPZiIsImdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4iLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwiVU5LTk9XTl9FUlJPUiIsImF1dGhvcml6YXRpb24iLCJoZWFkZXIiLCJhdXRoUHJlZml4IiwibWF0Y2giLCJ0b0xvd2VyQ2FzZSIsImVuY29kZWRBdXRoIiwic3Vic3RyaW5nIiwiY3JlZGVudGlhbHMiLCJkZWNvZGVCYXNlNjQiLCJqc0tleVByZWZpeCIsIm1hdGNoS2V5Iiwic3RyIiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93SGVhZGVycyIsImpvaW4iLCJiYXNlT3JpZ2lucyIsImFsbG93T3JpZ2luIiwicmVxdWVzdE9yaWdpbiIsIm9yaWdpbiIsImFsbG93T3JpZ2lucyIsInNlbmRTdGF0dXMiLCJhbGxvd01ldGhvZE92ZXJyaWRlIiwiX21ldGhvZCIsIm9yaWdpbmFsTWV0aG9kIiwidG9VcHBlckNhc2UiLCJtYWludGVuYW5jZUtleUlwcyIsIm1haW50ZW5hbmNlS2V5SXBzU3RvcmUiLCJsb2ciLCJkZWZhdWx0TG9nZ2VyIiwibG9hZE1hc3RlcktleSIsIm1hc3RlcktleUlwcyIsIm1hc3RlcktleUlwc1N0b3JlIiwicmVhZE9ubHlNYXN0ZXJLZXkiLCJyZWFkT25seU1hc3RlcktleUlwcyIsInJlYWRPbmx5TWFzdGVyS2V5SXBzU3RvcmUiLCJpc1JlYWRPbmx5IiwiaGFuZGxlUGFyc2VBdXRoIiwiaGFuZGxlUGFyc2VIZWFsdGgiLCJvcHRpb25zIiwiZW5mb3JjZVJvdXRlQWxsb3dMaXN0Iiwicm91dGVBbGxvd0xpc3QiLCJVUkwiLCJwYXRobmFtZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInF1ZXJ5SW5kZXgiLCJyZWdleGVzIiwiX3JvdXRlQWxsb3dMaXN0UmVnZXgiLCJyZWdleCIsImNyZWF0ZVNhbml0aXplZEVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImhhbmRsZVBhcnNlRXJyb3JzIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsInNpZ251cFVzZXJuYW1lVGFrZW5MZXZlbCIsImxvZ0xldmVscyIsInNpZ251cFVzZXJuYW1lVGFrZW4iLCJodHRwU3RhdHVzIiwiT0JKRUNUX05PVF9GT1VORCIsIlVTRVJOQU1FX1RBS0VOIiwibG9nZ2VyTWV0aG9kIiwiYmluZCIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwic3RhY2siLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIiwiZW5kIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJyZXF1ZXN0IiwicmVzb2x2ZSIsImFkZFJhdGVMaW1pdCIsInJvdXRlIiwiY2xvdWQiLCJSYXRlTGltaXRPcHRpb25zIiwicmVkaXNTdG9yZSIsImNvbm5lY3Rpb25Qcm9taXNlIiwicmVkaXNVcmwiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJvbiIsImlzT3BlbiIsImNvbm5lY3QiLCJSZWRpc1N0b3JlIiwic2VuZENvbW1hbmQiLCJhcmdzIiwicHVzaCIsInBhdGhUb1JlZ2V4cCIsInJlcXVlc3RQYXRoIiwicmVxdWVzdENvdW50IiwicmVxdWVzdE1ldGhvZHMiLCJpbmNsdWRlTWFzdGVyS2V5IiwiaW5jbHVkZUludGVybmFsUmVxdWVzdHMiLCJlcnJvclJlc3BvbnNlTWVzc2FnZSIsInJhdGVMaW1pdCIsIndpbmRvd01zIiwicmVxdWVzdFRpbWVXaW5kb3ciLCJtYXgiLCJyZXNwb25zZSIsInNraXAiLCJtZXRob2RzVG9DaGVjayIsIlNldCIsIl9iYXRjaE9yaWdpbmFsTWV0aG9kIiwiYWRkIiwiQXJyYXkiLCJpc0FycmF5IiwibSIsImhhcyIsInJlZ0V4cCIsIlJlZ0V4cCIsImtleUdlbmVyYXRvciIsInpvbmUiLCJTZXJ2ZXIiLCJSYXRlTGltaXRab25lIiwiZ2xvYmFsIiwidG9rZW4iLCJzZXNzaW9uIiwiaWQiLCJwdXQiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJkYXRhYmFzZSIsImFkYXB0ZXIiLCJNb25nb1N0b3JhZ2VBZGFwdGVyIiwiUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsInJlcXVlc3RJZCIsInBhdGhzIiwidHRsIiwiaWRlbXBvdGVuY3lPcHRpb25zIiwicmVxUGF0aCIsInJlcGxhY2UiLCJjaGFyQXQiLCJleHBpcnlEYXRlIiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwicmVzdCIsImNyZWF0ZSIsIm1hc3RlciIsInJlcUlkIiwiZXhwaXJlIiwiX2VuY29kZSIsImNhdGNoIiwiRFVQTElDQVRFX1ZBTFVFIiwiRFVQTElDQVRFX1JFUVVFU1QiLCJJTlZBTElEX0pTT04iLCJhbGxvd0RvdWJsZUZvcndhcmRTbGFzaCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXBwQ2FjaGUgZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgYXV0aCBmcm9tICcuL0F1dGgnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuL0NvbmZpZyc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL1Bvc3RncmVzL1Bvc3RncmVzU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IHJhdGVMaW1pdCBmcm9tICdleHByZXNzLXJhdGUtbGltaXQnO1xuaW1wb3J0IHsgUmF0ZUxpbWl0T3B0aW9ucyB9IGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBwYXRoVG9SZWdleHAgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5pbXBvcnQgUmVkaXNTdG9yZSBmcm9tICdyYXRlLWxpbWl0LXJlZGlzJztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ3JlZGlzJztcbmltcG9ydCB7IEJsb2NrTGlzdCwgaXNJUHY0IH0gZnJvbSAnbmV0JztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciwgY3JlYXRlU2FuaXRpemVkRXJyb3IgfSBmcm9tICcuL0Vycm9yJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTID1cbiAgJ1gtUGFyc2UtTWFzdGVyLUtleSwgWC1QYXJzZS1SRVNULUFQSS1LZXksIFgtUGFyc2UtSmF2YXNjcmlwdC1LZXksIFgtUGFyc2UtQXBwbGljYXRpb24tSWQsIFgtUGFyc2UtQ2xpZW50LVZlcnNpb24sIFgtUGFyc2UtU2Vzc2lvbi1Ub2tlbiwgWC1SZXF1ZXN0ZWQtV2l0aCwgWC1QYXJzZS1SZXZvY2FibGUtU2Vzc2lvbiwgWC1QYXJzZS1SZXF1ZXN0LUlkLCBDb250ZW50LVR5cGUsIFByYWdtYSwgQ2FjaGUtQ29udHJvbCc7XG5cbmNvbnN0IGdldE1vdW50Rm9yUmVxdWVzdCA9IGZ1bmN0aW9uIChyZXEpIHtcbiAgY29uc3QgbW91bnRQYXRoTGVuZ3RoID0gcmVxLm9yaWdpbmFsVXJsLmxlbmd0aCAtIHJlcS51cmwubGVuZ3RoO1xuICBjb25zdCBtb3VudFBhdGggPSByZXEub3JpZ2luYWxVcmwuc2xpY2UoMCwgbW91bnRQYXRoTGVuZ3RoKTtcbiAgcmV0dXJuIHJlcS5wcm90b2NvbCArICc6Ly8nICsgcmVxLmdldCgnaG9zdCcpICsgbW91bnRQYXRoO1xufTtcblxuY29uc3QgZ2V0QmxvY2tMaXN0ID0gKGlwUmFuZ2VMaXN0LCBzdG9yZSkgPT4ge1xuICBpZiAoc3RvcmUuZ2V0KCdibG9ja0xpc3QnKSkgeyByZXR1cm4gc3RvcmUuZ2V0KCdibG9ja0xpc3QnKTsgfVxuICBjb25zdCBibG9ja0xpc3QgPSBuZXcgQmxvY2tMaXN0KCk7XG4gIGlwUmFuZ2VMaXN0LmZvckVhY2goZnVsbElwID0+IHtcbiAgICBpZiAoZnVsbElwID09PSAnOjovMCcgfHwgZnVsbElwID09PSAnOjonIHx8IGZ1bGxJcCA9PT0gJzo6MCcpIHtcbiAgICAgIHN0b3JlLnNldCgnYWxsb3dBbGxJcHY2JywgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmdWxsSXAgPT09ICcwLjAuMC4wLzAnIHx8IGZ1bGxJcCA9PT0gJzAuMC4wLjAnKSB7XG4gICAgICBzdG9yZS5zZXQoJ2FsbG93QWxsSXB2NCcsIHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbaXAsIG1hc2tdID0gZnVsbElwLnNwbGl0KCcvJyk7XG4gICAgaWYgKCFtYXNrKSB7XG4gICAgICBibG9ja0xpc3QuYWRkQWRkcmVzcyhpcCwgaXNJUHY0KGlwKSA/ICdpcHY0JyA6ICdpcHY2Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJsb2NrTGlzdC5hZGRTdWJuZXQoaXAsIE51bWJlcihtYXNrKSwgaXNJUHY0KGlwKSA/ICdpcHY0JyA6ICdpcHY2Jyk7XG4gICAgfVxuICB9KTtcbiAgc3RvcmUuc2V0KCdibG9ja0xpc3QnLCBibG9ja0xpc3QpO1xuICByZXR1cm4gYmxvY2tMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrSXAgPSAoaXAsIGlwUmFuZ2VMaXN0LCBzdG9yZSkgPT4ge1xuICBjb25zdCBpbmNvbWluZ0lwSXNWNCA9IGlzSVB2NChpcCk7XG4gIGNvbnN0IGJsb2NrTGlzdCA9IGdldEJsb2NrTGlzdChpcFJhbmdlTGlzdCwgc3RvcmUpO1xuXG4gIGlmIChzdG9yZS5nZXQoaXApKSB7IHJldHVybiB0cnVlOyB9XG4gIGlmIChzdG9yZS5nZXQoJ2FsbG93QWxsSXB2NCcpICYmIGluY29taW5nSXBJc1Y0KSB7IHJldHVybiB0cnVlOyB9XG4gIGlmIChzdG9yZS5nZXQoJ2FsbG93QWxsSXB2NicpICYmICFpbmNvbWluZ0lwSXNWNCkgeyByZXR1cm4gdHJ1ZTsgfVxuICBjb25zdCByZXN1bHQgPSBibG9ja0xpc3QuY2hlY2soaXAsIGluY29taW5nSXBJc1Y0ID8gJ2lwdjQnIDogJ2lwdjYnKTtcblxuICAvLyBJZiB0aGUgaXAgaXMgaW4gdGhlIGxpc3QsIHdlIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIHN0b3JlXG4gIC8vIHNvIHdlIGhhdmUgYSBvcHRpbWl6ZWQgcGF0aCBmb3IgdGhlIG5leHQgcmVxdWVzdFxuICBpZiAoaXBSYW5nZUxpc3QuaW5jbHVkZXMoaXApICYmIHJlc3VsdCkge1xuICAgIHN0b3JlLnNldChpcCwgcmVzdWx0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gQ2hlY2tzIHRoYXQgdGhlIHJlcXVlc3QgaXMgYXV0aG9yaXplZCBmb3IgdGhpcyBhcHAgYW5kIGNoZWNrcyB1c2VyXG4vLyBhdXRoIHRvby5cbi8vIFRoZSBib2R5cGFyc2VyIHNob3VsZCBydW4gYmVmb3JlIHRoaXMgbWlkZGxld2FyZS5cbi8vIEFkZHMgaW5mbyB0byB0aGUgcmVxdWVzdDpcbi8vIHJlcS5jb25maWcgLSB0aGUgQ29uZmlnIGZvciB0aGlzIGFwcFxuLy8gcmVxLmF1dGggLSB0aGUgQXV0aCBmb3IgdGhpcyByZXF1ZXN0XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGFyc2VIZWFkZXJzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBtb3VudCA9IGdldE1vdW50Rm9yUmVxdWVzdChyZXEpO1xuXG4gIGxldCBjb250ZXh0ID0ge307XG4gIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUNsb3VkLUNvbnRleHQnKSAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnRleHQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpKTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29udGV4dCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIHRocm93ICdDb250ZXh0IGlzIG5vdCBhbiBvYmplY3QnO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgaW5mbyA9IHtcbiAgICBhcHBJZDogcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpLFxuICAgIHNlc3Npb25Ub2tlbjogcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyksXG4gICAgbWFzdGVyS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSxcbiAgICBtYWludGVuYW5jZUtleTogcmVxLmdldCgnWC1QYXJzZS1NYWludGVuYW5jZS1LZXknKSxcbiAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICBjbGllbnRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LUtleScpLFxuICAgIGphdmFzY3JpcHRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtSmF2YXNjcmlwdC1LZXknKSxcbiAgICBkb3ROZXRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtV2luZG93cy1LZXknKSxcbiAgICByZXN0QVBJS2V5OiByZXEuZ2V0KCdYLVBhcnNlLVJFU1QtQVBJLUtleScpLFxuICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gIH07XG5cbiAgdmFyIGJhc2ljQXV0aCA9IGh0dHBBdXRoKHJlcSk7XG5cbiAgaWYgKGJhc2ljQXV0aCkge1xuICAgIHZhciBiYXNpY0F1dGhBcHBJZCA9IGJhc2ljQXV0aC5hcHBJZDtcbiAgICBpZiAoQXBwQ2FjaGUuZ2V0KGJhc2ljQXV0aEFwcElkKSkge1xuICAgICAgaW5mby5hcHBJZCA9IGJhc2ljQXV0aEFwcElkO1xuICAgICAgaW5mby5tYXN0ZXJLZXkgPSBiYXNpY0F1dGgubWFzdGVyS2V5IHx8IGluZm8ubWFzdGVyS2V5O1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gYmFzaWNBdXRoLmphdmFzY3JpcHRLZXkgfHwgaW5mby5qYXZhc2NyaXB0S2V5O1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYm9keSkge1xuICAgIC8vIFVuaXR5IFNESyBzZW5kcyBhIF9ub0JvZHkga2V5IHdoaWNoIG5lZWRzIHRvIGJlIHJlbW92ZWQuXG4gICAgLy8gVW5jbGVhciBhdCB0aGlzIHBvaW50IGlmIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi5cbiAgICBkZWxldGUgcmVxLmJvZHkuX25vQm9keTtcbiAgfVxuXG4gIHZhciBmaWxlVmlhSlNPTiA9IGZhbHNlO1xuXG4gIGlmICghaW5mby5hcHBJZCB8fCAhQXBwQ2FjaGUuZ2V0KGluZm8uYXBwSWQpKSB7XG4gICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBhcHAgaWQgb24gdGhlIGJvZHkuXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXEuYm9keSkpIHtcbiAgICAgIC8vIFRoZSBvbmx5IGNoYW5jZSB0byBmaW5kIHRoZSBhcHAgaWQgaXMgaWYgdGhpcyBpcyBhIGZpbGVcbiAgICAgIC8vIHVwbG9hZCB0aGF0IGFjdHVhbGx5IGlzIGEgSlNPTiBib2R5LiBTbyB0cnkgdG8gcGFyc2UgaXQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGFyc2UtY29tbXVuaXR5L3BhcnNlLXNlcnZlci9pc3N1ZXMvNjU4OVxuICAgICAgLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZSBjbGllbnQgaXMgdHJ5aW5nIHRvIHVwbG9hZCBhIGZpbGUgYnV0IGZvcmdvdFxuICAgICAgLy8gdG8gcHJvdmlkZSB4LXBhcnNlLWFwcC1pZCBpbiBoZWFkZXIgYW5kIHBhcnNlIGEgYmluYXJ5IGZpbGUgd2lsbCBmYWlsXG4gICAgICB0cnkge1xuICAgICAgICByZXEuYm9keSA9IEpTT04ucGFyc2UocmVxLmJvZHkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICB9XG4gICAgICBmaWxlVmlhSlNPTiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcS5ib2R5KSB7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX1Jldm9jYWJsZVNlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVxLmJvZHkgJiZcbiAgICAgIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkICYmXG4gICAgICBBcHBDYWNoZS5nZXQocmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQpICYmXG4gICAgICAoIWluZm8ubWFzdGVyS2V5IHx8IEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkubWFzdGVyS2V5ID09PSBpbmZvLm1hc3RlcktleSlcbiAgICApIHtcbiAgICAgIGluZm8uYXBwSWQgPSByZXEuYm9keS5fQXBwbGljYXRpb25JZDtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5IHx8ICcnO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5O1xuICAgICAgLy8gVE9ETzogdGVzdCB0aGF0IHRoZSBSRVNUIEFQSSBmb3JtYXRzIGdlbmVyYXRlZCBieSB0aGUgb3RoZXJcbiAgICAgIC8vIFNES3MgYXJlIGhhbmRsZWQgb2tcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fQ2xpZW50VmVyc2lvbjtcbiAgICAgIGlmIChyZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLmluc3RhbGxhdGlvbklkID0gcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fU2Vzc2lvblRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gPSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX1Nlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fTWFzdGVyS2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxLmJvZHkuX01hc3RlcktleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8ubWFzdGVyS2V5ID0gcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9NYXN0ZXJLZXk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX2NvbnRleHQpIHtcbiAgICAgICAgaWYgKFV0aWxzLmlzT2JqZWN0KHJlcS5ib2R5Ll9jb250ZXh0KSkge1xuICAgICAgICAgIGluZm8uY29udGV4dCA9IHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmZvLmNvbnRleHQgPSBKU09OLnBhcnNlKHJlcS5ib2R5Ll9jb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5mby5jb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fY29udGV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fQ29udGVudFR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fQ29udGVudFR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXEuaGVhZGVyc1snY29udGVudC10eXBlJ10gPSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZm8uc2Vzc2lvblRva2VuICYmIHR5cGVvZiBpbmZvLnNlc3Npb25Ub2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICB9XG5cbiAgaWYgKGZpbGVWaWFKU09OICYmIHJlcS5ib2R5KSB7XG4gICAgaWYgKHJlcS5ib2R5LmJhc2U2NCAmJiB0eXBlb2YgcmVxLmJvZHkuYmFzZTY0ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICB9XG4gICAgcmVxLmZpbGVEYXRhID0gcmVxLmJvZHkuZmlsZURhdGE7XG4gICAgLy8gV2UgbmVlZCB0byByZXBvcHVsYXRlIHJlcS5ib2R5IHdpdGggYSBidWZmZXJcbiAgICB2YXIgYmFzZTY0ID0gcmVxLmJvZHkuYmFzZTY0O1xuICAgIHJlcS5ib2R5ID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIH1cblxuICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG4gIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWcgfHwgQ29uZmlnLmdldChpbmZvLmFwcElkLCBtb3VudCk7XG4gIGlmIChjb25maWcuc3RhdGUgJiYgY29uZmlnLnN0YXRlICE9PSAnb2snKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIGVycm9yOiBgSW52YWxpZCBzZXJ2ZXIgc3RhdGU6ICR7Y29uZmlnLnN0YXRlfWAsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghcmVxLmNvbmZpZykge1xuICAgIGF3YWl0IGNvbmZpZy5sb2FkS2V5cygpO1xuICB9XG5cbiAgaW5mby5hcHAgPSBBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCk7XG4gIHJlcS5jb25maWcgPSBjb25maWc7XG4gIHJlcS5jb25maWcuaGVhZGVycyA9IHJlcS5oZWFkZXJzIHx8IHt9O1xuICByZXEuY29uZmlnLmlwID0gY2xpZW50SXA7XG4gIHJlcS5pbmZvID0gaW5mbztcblxuICAvLyBTa2lwIGtleSBkZXRlY3Rpb24gaWYgYWxyZWFkeSByZXNvbHZlZCBieSBoYW5kbGVQYXJzZUF1dGggKGhlYWRlci1iYXNlZCkuXG4gIC8vIE9ubHkgcmVzb2x2ZSBoZXJlIGZvciBib2R5LWJhc2VkIF9NYXN0ZXJLZXkgKGluZm8ubWFzdGVyS2V5IG1heSBjb21lIGZyb20gYm9keSkuXG4gIGlmICghcmVxLmF1dGggfHwgKCFyZXEuYXV0aC5pc01hc3RlciAmJiAhcmVxLmF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVLZXlBdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGtleVZhbHVlOiBpbmZvLm1hc3RlcktleSxcbiAgICAgIG1haW50ZW5hbmNlS2V5VmFsdWU6IGluZm8ubWFpbnRlbmFuY2VLZXksXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGNsaWVudElwLFxuICAgIH0pO1xuICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgcmVxLmF1dGggPSByZXNvbHZlZDtcbiAgICB9XG4gIH1cblxuICBpZiAocmVxLmF1dGggJiYgKHJlcS5hdXRoLmlzTWFzdGVyIHx8IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2UpKSB7XG4gICAgcmV0dXJuIGhhbmRsZVJhdGVMaW1pdChyZXEsIHJlcywgbmV4dCk7XG4gIH1cblxuICAvLyBDbGllbnQga2V5cyBhcmUgbm90IHJlcXVpcmVkIGluIHBhcnNlLXNlcnZlciwgYnV0IGlmIGFueSBoYXZlIGJlZW4gY29uZmlndXJlZCBpbiB0aGUgc2VydmVyLCB2YWxpZGF0ZSB0aGVtXG4gIC8vICB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBiZWhhdmlvci5cbiAgY29uc3Qga2V5cyA9IFsnY2xpZW50S2V5JywgJ2phdmFzY3JpcHRLZXknLCAnZG90TmV0S2V5JywgJ3Jlc3RBUElLZXknXTtcbiAgY29uc3Qgb25lS2V5Q29uZmlndXJlZCA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkO1xuICB9KTtcbiAgY29uc3Qgb25lS2V5TWF0Y2hlcyA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkICYmIGluZm9ba2V5XSA9PT0gcmVxLmNvbmZpZ1trZXldO1xuICB9KTtcblxuICBpZiAob25lS2V5Q29uZmlndXJlZCAmJiAhb25lS2V5TWF0Y2hlcykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAocmVxLnVybCA9PSAnL2xvZ2luJykge1xuICAgIGRlbGV0ZSBpbmZvLnNlc3Npb25Ub2tlbjtcbiAgfVxuXG4gIGlmIChyZXEudXNlckZyb21KV1QpIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICB1c2VyOiByZXEudXNlckZyb21KV1QsXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZVJhdGVMaW1pdChyZXEsIHJlcywgbmV4dCk7XG4gIH1cblxuICBpZiAoIWluZm8uc2Vzc2lvblRva2VuKSB7XG4gICAgcmVxLmF1dGggPSBuZXcgYXV0aC5BdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZVJhdGVMaW1pdChyZXEsIHJlcywgbmV4dCk7XG59XG5cbmNvbnN0IGhhbmRsZVJhdGVMaW1pdCA9IGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICBjb25zdCByYXRlTGltaXRzID0gcmVxLmNvbmZpZy5yYXRlTGltaXRzIHx8IFtdO1xuICB0cnkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcmF0ZUxpbWl0cy5tYXAoYXN5bmMgbGltaXQgPT4ge1xuICAgICAgICBjb25zdCBwYXRoRXhwID0gbGltaXQucGF0aC5yZWdleHAgfHwgbGltaXQucGF0aDtcbiAgICAgICAgaWYgKHBhdGhFeHAudGVzdChyZXEudXJsKSkge1xuICAgICAgICAgIGF3YWl0IGxpbWl0LmhhbmRsZXIocmVxLCByZXMsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuQ09OTkVDVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgICAgICAgICdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGFwcGx5IHRoZSByYXRlIGxpbWl0ZXI6ICcsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDQyOSk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVQYXJzZVNlc3Npb24gPSBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbmZvID0gcmVxLmluZm87XG4gICAgaWYgKHJlcS5hdXRoIHx8IChyZXEudXJsID09PSAnL3Nlc3Npb25zL21lJyAmJiByZXEubWV0aG9kID09PSAnR0VUJykpIHtcbiAgICAgIG5leHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RBdXRoID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICBpbmZvLnNlc3Npb25Ub2tlbiAmJlxuICAgICAgcmVxLnVybCA9PT0gJy91cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uJyAmJlxuICAgICAgaW5mby5zZXNzaW9uVG9rZW4uaW5kZXhPZigncjonKSAhPSAwXG4gICAgKSB7XG4gICAgICByZXF1ZXN0QXV0aCA9IGF3YWl0IGF1dGguZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbih7XG4gICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEF1dGggPSBhd2FpdCBhdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcS5hdXRoID0gcmVxdWVzdEF1dGg7XG4gICAgbmV4dCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTG9nIGZ1bGwgZXJyb3IgZGV0YWlscyBpbnRlcm5hbGx5LCBidXQgZG9uJ3QgZXhwb3NlIHRvIGNsaWVudFxuICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci5lcnJvcignZXJyb3IgZ2V0dGluZyBhdXRoIGZvciBzZXNzaW9uVG9rZW4nLCBlcnJvcik7XG4gICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuVU5LTk9XTl9FUlJPUiwgJ1Vua25vd24gZXJyb3InKSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldENsaWVudElwKHJlcSkge1xuICByZXR1cm4gcmVxLmlwO1xufVxuXG5mdW5jdGlvbiBodHRwQXV0aChyZXEpIHtcbiAgaWYgKCEocmVxLnJlcSB8fCByZXEpLmhlYWRlcnMuYXV0aG9yaXphdGlvbikgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZGVyID0gKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gIHZhciBhcHBJZCwgbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5O1xuXG4gIC8vIHBhcnNlIGhlYWRlclxuICB2YXIgYXV0aFByZWZpeCA9ICdiYXNpYyAnO1xuXG4gIHZhciBtYXRjaCA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYXV0aFByZWZpeCk7XG5cbiAgaWYgKG1hdGNoID09IDApIHtcbiAgICB2YXIgZW5jb2RlZEF1dGggPSBoZWFkZXIuc3Vic3RyaW5nKGF1dGhQcmVmaXgubGVuZ3RoLCBoZWFkZXIubGVuZ3RoKTtcbiAgICB2YXIgY3JlZGVudGlhbHMgPSBkZWNvZGVCYXNlNjQoZW5jb2RlZEF1dGgpLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMubGVuZ3RoID09IDIpIHtcbiAgICAgIGFwcElkID0gY3JlZGVudGlhbHNbMF07XG4gICAgICB2YXIga2V5ID0gY3JlZGVudGlhbHNbMV07XG5cbiAgICAgIHZhciBqc0tleVByZWZpeCA9ICdqYXZhc2NyaXB0LWtleT0nO1xuXG4gICAgICB2YXIgbWF0Y2hLZXkgPSBrZXkuaW5kZXhPZihqc0tleVByZWZpeCk7XG4gICAgICBpZiAobWF0Y2hLZXkgPT0gMCkge1xuICAgICAgICBqYXZhc2NyaXB0S2V5ID0ga2V5LnN1YnN0cmluZyhqc0tleVByZWZpeC5sZW5ndGgsIGtleS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFzdGVyS2V5ID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFwcElkOiBhcHBJZCwgbWFzdGVyS2V5OiBtYXN0ZXJLZXksIGphdmFzY3JpcHRLZXk6IGphdmFzY3JpcHRLZXkgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cikge1xuICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93Q3Jvc3NEb21haW4oYXBwSWQpIHtcbiAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIGdldE1vdW50Rm9yUmVxdWVzdChyZXEpKTtcbiAgICBsZXQgYWxsb3dIZWFkZXJzID0gREVGQVVMVF9BTExPV0VEX0hFQURFUlM7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dIZWFkZXJzKSB7XG4gICAgICBhbGxvd0hlYWRlcnMgKz0gYCwgJHtjb25maWcuYWxsb3dIZWFkZXJzLmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlT3JpZ2lucyA9XG4gICAgICB0eXBlb2YgY29uZmlnPy5hbGxvd09yaWdpbiA9PT0gJ3N0cmluZycgPyBbY29uZmlnLmFsbG93T3JpZ2luXSA6IGNvbmZpZz8uYWxsb3dPcmlnaW4gPz8gWycqJ107XG4gICAgY29uc3QgcmVxdWVzdE9yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbjtcbiAgICBjb25zdCBhbGxvd09yaWdpbnMgPVxuICAgICAgcmVxdWVzdE9yaWdpbiAmJiBiYXNlT3JpZ2lucy5pbmNsdWRlcyhyZXF1ZXN0T3JpZ2luKSA/IHJlcXVlc3RPcmlnaW4gOiBiYXNlT3JpZ2luc1swXTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd09yaWdpbnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VULFBVVCxQT1NULERFTEVURSxPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsIGFsbG93SGVhZGVycyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLCAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkLCBYLVBhcnNlLVB1c2gtU3RhdHVzLUlkJyk7XG4gICAgLy8gaW50ZXJjZXB0IE9QVElPTlMgbWV0aG9kXG4gICAgaWYgKCdPUFRJT05TJyA9PSByZXEubWV0aG9kKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dNZXRob2RPdmVycmlkZShyZXEsIHJlcywgbmV4dCkge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnICYmIHJlcS5ib2R5Py5fbWV0aG9kKSB7XG4gICAgaWYgKHR5cGVvZiByZXEuYm9keS5fbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgICAgcmVxLm9yaWdpbmFsTWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICAgIHJlcS5tZXRob2QgPSByZXEuYm9keS5fbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIGRlbGV0ZSByZXEuYm9keS5fbWV0aG9kO1xuICB9XG4gIG5leHQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUtleUF1dGgoeyBjb25maWcsIGtleVZhbHVlLCBtYWludGVuYW5jZUtleVZhbHVlLCBpbnN0YWxsYXRpb25JZCwgY2xpZW50SXAgfSkge1xuICBpZiAobWFpbnRlbmFuY2VLZXlWYWx1ZSAmJiBtYWludGVuYW5jZUtleVZhbHVlID09PSBjb25maWcubWFpbnRlbmFuY2VLZXkpIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzIHx8IFtdLCBjb25maWcubWFpbnRlbmFuY2VLZXlJcHNTdG9yZSkpIHtcbiAgICAgIHJldHVybiBuZXcgYXV0aC5BdXRoKHsgY29uZmlnLCBpbnN0YWxsYXRpb25JZCwgaXNNYWludGVuYW5jZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyBtYWludGVuYW5jZSBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFpbnRlbmFuY2VLZXlJcHMnLmBcbiAgICApO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICBpZiAoa2V5VmFsdWUgPT09IG1hc3RlcktleSkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcubWFzdGVyS2V5SXBzIHx8IFtdLCBjb25maWcubWFzdGVyS2V5SXBzU3RvcmUpKSB7XG4gICAgICByZXR1cm4gbmV3IGF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQsIGlzTWFzdGVyOiB0cnVlIH0pO1xuICAgIH1cbiAgICBjb25zdCBsb2cgPSBjb25maWcubG9nZ2VyQ29udHJvbGxlciB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIGxvZy5lcnJvcihcbiAgICAgIGBSZXF1ZXN0IHVzaW5nIG1hc3RlciBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFzdGVyS2V5SXBzJy5gXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKFxuICAgIGtleVZhbHVlICYmXG4gICAgdHlwZW9mIGNvbmZpZy5yZWFkT25seU1hc3RlcktleSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgJiZcbiAgICBrZXlWYWx1ZSA9PT0gY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5XG4gICkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHMgfHwgW10sIGNvbmZpZy5yZWFkT25seU1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgcmV0dXJuIG5ldyBhdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkLCBpc01hc3RlcjogdHJ1ZSwgaXNSZWFkT25seTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyByZWFkLW9ubHkgbWFzdGVyIGtleSByZWplY3RlZCBhcyB0aGUgcmVxdWVzdCBJUCBhZGRyZXNzICcke2NsaWVudElwfScgaXMgbm90IHNldCBpbiBQYXJzZSBTZXJ2ZXIgb3B0aW9uICdyZWFkT25seU1hc3RlcktleUlwcycuYFxuICAgICk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VBdXRoKGFwcElkKSB7XG4gIHJldHVybiBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBtb3VudCA9IGdldE1vdW50Rm9yUmVxdWVzdChyZXEpO1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIG1vdW50KTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICB9XG4gICAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG4gICAgcmVxLmNvbmZpZy5pcCA9IGNsaWVudElwO1xuICAgIGF3YWl0IGNvbmZpZy5sb2FkS2V5cygpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAga2V5VmFsdWU6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpIHx8IG51bGwsXG4gICAgICBtYWludGVuYW5jZUtleVZhbHVlOiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpIHx8IG51bGwsXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSB8fCAnY2xvdWQnLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dCgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VIZWFsdGgob3B0aW9ucykge1xuICByZXR1cm4gKHJlcSwgcmVzKSA9PiB7XG4gICAgcmVzLnN0YXR1cyhvcHRpb25zLnN0YXRlID09PSAnb2snID8gMjAwIDogNTAzKTtcbiAgICBpZiAob3B0aW9ucy5zdGF0ZSA9PT0gJ3N0YXJ0aW5nJykge1xuICAgICAgcmVzLnNldCgnUmV0cnktQWZ0ZXInLCAxKTtcbiAgICB9XG4gICAgcmVzLmpzb24oe1xuICAgICAgc3RhdHVzOiBvcHRpb25zLnN0YXRlLFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZVJvdXRlQWxsb3dMaXN0KHJlcSwgcmVzLCBuZXh0KSB7XG4gIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gIGlmICghY29uZmlnIHx8IGNvbmZpZy5yb3V0ZUFsbG93TGlzdCA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5yb3V0ZUFsbG93TGlzdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBuZXh0KCk7XG4gIH1cbiAgaWYgKHJlcS5hdXRoICYmIChyZXEuYXV0aC5pc01hc3RlciB8fCByZXEuYXV0aC5pc01haW50ZW5hbmNlKSkge1xuICAgIHJldHVybiBuZXh0KCk7XG4gIH1cbiAgbGV0IHBhdGggPSByZXEub3JpZ2luYWxVcmw7XG4gIGlmIChjb25maWcubW91bnQpIHtcbiAgICBjb25zdCBtb3VudFBhdGggPSBuZXcgVVJMKGNvbmZpZy5tb3VudCkucGF0aG5hbWU7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChtb3VudFBhdGgpKSB7XG4gICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcobW91bnRQYXRoLmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTtcbiAgfVxuICBpZiAocGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7XG4gIH1cbiAgY29uc3QgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZignPycpO1xuICBpZiAocXVlcnlJbmRleCAhPT0gLTEpIHtcbiAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcXVlcnlJbmRleCk7XG4gIH1cbiAgY29uc3QgcmVnZXhlcyA9IGNvbmZpZy5fcm91dGVBbGxvd0xpc3RSZWdleCB8fCBbXTtcbiAgZm9yIChjb25zdCByZWdleCBvZiByZWdleGVzKSB7XG4gICAgaWYgKHJlZ2V4LnRlc3QocGF0aCkpIHtcbiAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICB9XG4gIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgYFJvdXRlIG5vdCBhbGxvd2VkIGJ5IHJvdXRlQWxsb3dMaXN0OiAke3JlcS5tZXRob2R9ICR7cGF0aH1gLFxuICAgIGNvbmZpZ1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VFcnJvcnMoZXJyLCByZXEsIHJlcywgbmV4dCkge1xuICBjb25zdCBsb2cgPSAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIGlmIChyZXEuY29uZmlnICYmIHJlcS5jb25maWcuZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlcikge1xuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsID1cbiAgICAgIHJlcS5jb25maWc/LmxvZ0xldmVscz8uc2lnbnVwVXNlcm5hbWVUYWtlbiB8fCAnaW5mbyc7XG4gICAgbGV0IGh0dHBTdGF0dXM7XG4gICAgLy8gVE9ETzogZmlsbCBvdXQgdGhpcyBtYXBwaW5nXG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1I6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA1MDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EOlxuICAgICAgICBodHRwU3RhdHVzID0gNDA0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDA7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuVVNFUk5BTUVfVEFLRU4pIHtcbiAgICAgIGlmIChzaWdudXBVc2VybmFtZVRha2VuTGV2ZWwgIT09ICdzaWxlbnQnKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlck1ldGhvZCA9XG4gICAgICAgICAgdHlwZW9mIGxvZ1tzaWdudXBVc2VybmFtZVRha2VuTGV2ZWxdID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGxvZ1tzaWdudXBVc2VybmFtZVRha2VuTGV2ZWxdLmJpbmQobG9nKVxuICAgICAgICAgICAgOiBsb2cuZXJyb3IuYmluZChsb2cpO1xuICAgICAgICBsb2dnZXJNZXRob2QoJ1BhcnNlIGVycm9yOiAnLCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoJ1BhcnNlIGVycm9yOiAnLCBlcnIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChlcnIuc3RhdHVzICYmIGVyci5tZXNzYWdlKSB7XG4gICAgcmVzLnN0YXR1cyhlcnIuc3RhdHVzKTtcbiAgICByZXMuanNvbih7IGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVyciwgZXJyLnN0YWNrKTtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIHNlcnZlciBlcnJvci4nLFxuICAgIH0pO1xuICAgIGlmICghKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYuVEVTVElORykpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIHJlcS5jb25maWcpO1xuICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgIHJldHVybjtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyhyZXF1ZXN0KSB7XG4gIGlmICghcmVxdWVzdC5hdXRoLmlzTWFzdGVyKSB7XG4gICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIHJlcXVlc3QuY29uZmlnKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbmV4cG9ydCBjb25zdCBhZGRSYXRlTGltaXQgPSAocm91dGUsIGNvbmZpZywgY2xvdWQpID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gQ29uZmlnLmdldChjb25maWcpO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIHJvdXRlKSB7XG4gICAgaWYgKCFSYXRlTGltaXRPcHRpb25zW2tleV0pIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIHJhdGUgbGltaXQgb3B0aW9uIFwiJHtrZXl9XCJgO1xuICAgIH1cbiAgfVxuICBpZiAoIWNvbmZpZy5yYXRlTGltaXRzKSB7XG4gICAgY29uZmlnLnJhdGVMaW1pdHMgPSBbXTtcbiAgfVxuICBjb25zdCByZWRpc1N0b3JlID0ge1xuICAgIGNvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICBzdG9yZTogbnVsbCxcbiAgfTtcbiAgaWYgKHJvdXRlLnJlZGlzVXJsKSB7XG4gICAgY29uc3QgbG9nID0gY29uZmlnPy5sb2dnZXJDb250cm9sbGVyIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHtcbiAgICAgIHVybDogcm91dGUucmVkaXNVcmwsXG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKCdlcnJvcicsIGVyciA9PiB7IGxvZy5lcnJvcignTWlkZGxld2FyZXMgYWRkUmF0ZUxpbWl0IFJlZGlzIGNsaWVudCBlcnJvcicsIHsgZXJyb3I6IGVyciB9KSB9KTtcbiAgICBjbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7IH0pO1xuICAgIGNsaWVudC5vbigncmVjb25uZWN0aW5nJywgKCkgPT4geyB9KTtcbiAgICBjbGllbnQub24oJ3JlYWR5JywgKCkgPT4geyB9KTtcbiAgICByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGNsaWVudC5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yKGBDb3VsZCBub3QgY29ubmVjdCB0byByZWRpc1VSTCBpbiByYXRlIGxpbWl0OiAke2V9YCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlKCk7XG4gICAgcmVkaXNTdG9yZS5zdG9yZSA9IG5ldyBSZWRpc1N0b3JlKHtcbiAgICAgIHNlbmRDb21tYW5kOiBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgICBhd2FpdCByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlKCk7XG4gICAgICAgIHJldHVybiBjbGllbnQuc2VuZENvbW1hbmQoYXJncyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGNvbmZpZy5yYXRlTGltaXRzLnB1c2goe1xuICAgIHBhdGg6IHBhdGhUb1JlZ2V4cChyb3V0ZS5yZXF1ZXN0UGF0aCksXG4gICAgcmVxdWVzdENvdW50OiByb3V0ZS5yZXF1ZXN0Q291bnQsXG4gICAgcmVxdWVzdE1ldGhvZHM6IHJvdXRlLnJlcXVlc3RNZXRob2RzLFxuICAgIGluY2x1ZGVNYXN0ZXJLZXk6IHJvdXRlLmluY2x1ZGVNYXN0ZXJLZXksXG4gICAgaW5jbHVkZUludGVybmFsUmVxdWVzdHM6IHJvdXRlLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzLFxuICAgIGVycm9yUmVzcG9uc2VNZXNzYWdlOiByb3V0ZS5lcnJvclJlc3BvbnNlTWVzc2FnZSB8fCBSYXRlTGltaXRPcHRpb25zLmVycm9yUmVzcG9uc2VNZXNzYWdlLmRlZmF1bHQsXG4gICAgaGFuZGxlcjogcmF0ZUxpbWl0KHtcbiAgICAgIHdpbmRvd01zOiByb3V0ZS5yZXF1ZXN0VGltZVdpbmRvdyxcbiAgICAgIG1heDogcm91dGUucmVxdWVzdENvdW50LFxuICAgICAgbWVzc2FnZTogcm91dGUuZXJyb3JSZXNwb25zZU1lc3NhZ2UgfHwgUmF0ZUxpbWl0T3B0aW9ucy5lcnJvclJlc3BvbnNlTWVzc2FnZS5kZWZhdWx0LFxuICAgICAgaGFuZGxlcjogKHJlcXVlc3QsIHJlc3BvbnNlLCBuZXh0LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCxcbiAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2tpcDogcmVxdWVzdCA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0LmlwID09PSAnMTI3LjAuMC4xJyAmJiAhcm91dGUuaW5jbHVkZUludGVybmFsUmVxdWVzdHMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuaW5jbHVkZU1hc3RlcktleSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUucmVxdWVzdE1ldGhvZHMpIHtcbiAgICAgICAgICBjb25zdCBtZXRob2RzVG9DaGVjayA9IG5ldyBTZXQoW3JlcXVlc3QubWV0aG9kXSk7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuX2JhdGNoT3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIG1ldGhvZHNUb0NoZWNrLmFkZChyZXF1ZXN0Ll9iYXRjaE9yaWdpbmFsTWV0aG9kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm91dGUucmVxdWVzdE1ldGhvZHMpKSB7XG4gICAgICAgICAgICBpZiAoIXJvdXRlLnJlcXVlc3RNZXRob2RzLnNvbWUobSA9PiBtZXRob2RzVG9DaGVjay5oYXMobSkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKHJvdXRlLnJlcXVlc3RNZXRob2RzKTtcbiAgICAgICAgICAgIGlmICghWy4uLm1ldGhvZHNUb0NoZWNrXS5zb21lKG0gPT4gcmVnRXhwLnRlc3QobSkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxdWVzdC5hdXRoPy5pc01hc3RlcjtcbiAgICAgIH0sXG4gICAgICBrZXlHZW5lcmF0b3I6IGFzeW5jIHJlcXVlc3QgPT4ge1xuICAgICAgICBpZiAocm91dGUuem9uZSA9PT0gUGFyc2UuU2VydmVyLlJhdGVMaW1pdFpvbmUuZ2xvYmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLmFwcElkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdC5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICAgICAgaWYgKHJvdXRlLnpvbmUgPT09IFBhcnNlLlNlcnZlci5SYXRlTGltaXRab25lLnNlc3Npb24gJiYgdG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLnpvbmUgPT09IFBhcnNlLlNlcnZlci5SYXRlTGltaXRab25lLnVzZXIgJiYgdG9rZW4pIHtcbiAgICAgICAgICBpZiAoIXJlcXVlc3QuYXV0aCkge1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBoYW5kbGVQYXJzZVNlc3Npb24ocmVxdWVzdCwgbnVsbCwgcmVzb2x2ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVxdWVzdC5hdXRoPy51c2VyPy5pZCAmJiByb3V0ZS56b25lID09PSAndXNlcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmF1dGgudXNlci5pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLmlwO1xuICAgICAgfSxcbiAgICAgIHN0b3JlOiByZWRpc1N0b3JlLnN0b3JlLFxuICAgIH0pLFxuICAgIGNsb3VkLFxuICB9KTtcbiAgQ29uZmlnLnB1dChjb25maWcpO1xufTtcblxuLyoqXG4gKiBEZWR1cGxpY2F0ZXMgYSByZXF1ZXN0IHRvIGVuc3VyZSBpZGVtcG90ZW5jeS4gRHVwbGljYXRlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgcmVxdWVzdCBJRFxuICogaW4gdGhlIHJlcXVlc3QgaGVhZGVyLiBJZiBhIHJlcXVlc3QgaGFzIG5vIHJlcXVlc3QgSUQsIGl0IGlzIGV4ZWN1dGVkIGFueXdheS5cbiAqIEBwYXJhbSB7Kn0gcmVxIFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgUHJvbWlzZTx7fT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeShyZXEpIHtcbiAgLy8gRW5hYmxlIGZlYXR1cmUgb25seSBmb3IgTW9uZ29EQlxuICBpZiAoXG4gICAgIShcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIE1vbmdvU3RvcmFnZUFkYXB0ZXIgfHxcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIFBvc3RncmVzU3RvcmFnZUFkYXB0ZXJcbiAgICApXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBHZXQgcGFyYW1ldGVyc1xuICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICBjb25zdCByZXF1ZXN0SWQgPSAoKHJlcSB8fCB7fSkuaGVhZGVycyB8fCB7fSlbJ3gtcGFyc2UtcmVxdWVzdC1pZCddO1xuICBjb25zdCB7IHBhdGhzLCB0dGwgfSA9IGNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnM7XG4gIGlmICghcmVxdWVzdElkIHx8ICFjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFJlcXVlc3QgcGF0aCBtYXkgY29udGFpbiB0cmFpbGluZyBzbGFzaGVzLCBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIHJlcXVlc3QsIHNvIHJlbW92ZVxuICAvLyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwZWNpZnkgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcmVxUGF0aCA9IHJlcS5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC8sICcnKTtcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaWRlbXBvdGVuY3kgaXMgZW5hYmxlZCBmb3IgY3VycmVudCByZXF1ZXN0IHBhdGhcbiAgbGV0IG1hdGNoID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIEFzc3VtZSBvbmUgd2FudHMgYSBwYXRoIHRvIGFsd2F5cyBtYXRjaCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gcHJldmVudCBhbnkgbWlzdGFrZXNcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0aC5jaGFyQXQoMCkgPT09ICdeJyA/IHBhdGggOiAnXicgKyBwYXRoKTtcbiAgICBpZiAocmVxUGF0aC5tYXRjaChyZWdleCkpIHtcbiAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFRyeSB0byBzdG9yZSByZXF1ZXN0XG4gIGNvbnN0IGV4cGlyeURhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFNlY29uZHMobmV3IERhdGUoKS5nZXRTZWNvbmRzKCkgKyB0dGwpKTtcbiAgcmV0dXJuIHJlc3RcbiAgICAuY3JlYXRlKGNvbmZpZywgYXV0aC5tYXN0ZXIoY29uZmlnKSwgJ19JZGVtcG90ZW5jeScsIHtcbiAgICAgIHJlcUlkOiByZXF1ZXN0SWQsXG4gICAgICBleHBpcmU6IFBhcnNlLl9lbmNvZGUoZXhwaXJ5RGF0ZSksXG4gICAgfSlcbiAgICAuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09IFBhcnNlLkVycm9yLkRVUExJQ0FURV9WQUxVRSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRFVQTElDQVRFX1JFUVVFU1QsICdEdXBsaWNhdGUgcmVxdWVzdCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDMpO1xuICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkXCJ9Jyk7XG59XG5cbmZ1bmN0aW9uIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDApO1xuICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgZXJyb3I6ICdJbnZhbGlkIG9iamVjdCBmb3IgY29udGV4dC4nIH0pO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgNCBhbGxvd2VkIGEgZG91YmxlIGZvcndhcmQgc2xhc2ggYmV0d2VlbiBhIHJvdXRlIGFuZCByb3V0ZXIuIEFsdGhvdWdoXG4gKiB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGFudGktcGF0dGVybiwgd2UgbmVlZCB0byBzdXBwb3J0IGl0IGZvciBiYWNrd2FyZHNcbiAqIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGVjaG5pY2FsbHkgdmFsaWQgVVJMIHdpdGggZG91YmxlIGZvcm93YXJkIHNsYXNoOlxuICogaHR0cDovL2xvY2FsaG9zdDoxMzM3L3BhcnNlLy9mdW5jdGlvbnMvdGVzdEZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0RvdWJsZUZvcndhcmRTbGFzaChyZXEsIHJlcywgbmV4dCkge1xuICByZXEudXJsID0gcmVxLnVybC5zdGFydHNXaXRoKCcvLycpID8gcmVxLnVybC5zdWJzdHJpbmcoMSkgOiByZXEudXJsO1xuICBuZXh0KCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxLQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxvQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsdUJBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLGlCQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxZQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxhQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxlQUFBLEdBQUFiLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBYSxNQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxJQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxNQUFBLEdBQUFmLE9BQUE7QUFBeUUsU0FBQUQsdUJBQUFpQixDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FB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
|
|
810
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9ub2RlIiwiX0F1dGgiLCJfQ29uZmlnIiwiX2xvZ2dlciIsIl9yZXN0IiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9leHByZXNzUmF0ZUxpbWl0IiwiX0RlZmluaXRpb25zIiwiX3BhdGhUb1JlZ2V4cCIsIl9yYXRlTGltaXRSZWRpcyIsIl9yZWRpcyIsIl9uZXQiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImV4cG9ydHMiLCJnZXRNb3VudEZvclJlcXVlc3QiLCJyZXEiLCJtb3VudFBhdGhMZW5ndGgiLCJvcmlnaW5hbFVybCIsImxlbmd0aCIsInVybCIsIm1vdW50UGF0aCIsInNsaWNlIiwicHJvdG9jb2wiLCJnZXQiLCJnZXRCbG9ja0xpc3QiLCJpcFJhbmdlTGlzdCIsInN0b3JlIiwiYmxvY2tMaXN0IiwiQmxvY2tMaXN0IiwiZm9yRWFjaCIsImZ1bGxJcCIsInNldCIsImlwIiwibWFzayIsInNwbGl0IiwiYWRkQWRkcmVzcyIsImlzSVB2NCIsImFkZFN1Ym5ldCIsIk51bWJlciIsImNoZWNrSXAiLCJpbmNvbWluZ0lwSXNWNCIsInJlc3VsdCIsImNoZWNrIiwiaW5jbHVkZXMiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyZXMiLCJuZXh0IiwibW91bnQiLCJjb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsIm1haW50ZW5hbmNlS2V5IiwiaW5zdGFsbGF0aW9uSWQiLCJjbGllbnRLZXkiLCJqYXZhc2NyaXB0S2V5IiwiZG90TmV0S2V5IiwicmVzdEFQSUtleSIsImJhc2ljQXV0aCIsImh0dHBBdXRoIiwiYmFzaWNBdXRoQXBwSWQiLCJBcHBDYWNoZSIsImJvZHkiLCJfbm9Cb2R5IiwiZmlsZVZpYUpTT04iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiVXRpbHMiLCJpc09iamVjdCIsIl9Db250ZW50VHlwZSIsImhlYWRlcnMiLCJiYXNlNjQiLCJmaWxlRGF0YSIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiY29uZmlnIiwiQ29uZmlnIiwic3RhdGUiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJlcnJvciIsImxvYWRLZXlzIiwiYXBwIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc29sdmVkIiwicmVzb2x2ZUtleUF1dGgiLCJrZXlWYWx1ZSIsIm1haW50ZW5hbmNlS2V5VmFsdWUiLCJoYW5kbGVSYXRlTGltaXQiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwidXNlckZyb21KV1QiLCJBdXRoIiwidXNlciIsInJhdGVMaW1pdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwibGltaXQiLCJwYXRoRXhwIiwicGF0aCIsInJlZ2V4cCIsInRlc3QiLCJoYW5kbGVyIiwiZXJyIiwiQ09OTkVDVElPTl9GQUlMRUQiLCJsb2dnZXJDb250cm9sbGVyIiwibWVzc2FnZSIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsIm1ldGhvZCIsInJlcXVlc3RBdXRoIiwiaW5kZXhPZiIsImdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4iLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwiVU5LTk9XTl9FUlJPUiIsImF1dGhvcml6YXRpb24iLCJoZWFkZXIiLCJhdXRoUHJlZml4IiwibWF0Y2giLCJ0b0xvd2VyQ2FzZSIsImVuY29kZWRBdXRoIiwic3Vic3RyaW5nIiwiY3JlZGVudGlhbHMiLCJkZWNvZGVCYXNlNjQiLCJqc0tleVByZWZpeCIsIm1hdGNoS2V5Iiwic3RyIiwiYWxsb3dDcm9zc0RvbWFpbiIsImFsbG93SGVhZGVycyIsImpvaW4iLCJiYXNlT3JpZ2lucyIsImFsbG93T3JpZ2luIiwicmVxdWVzdE9yaWdpbiIsIm9yaWdpbiIsImFsbG93T3JpZ2lucyIsInNlbmRTdGF0dXMiLCJhbGxvd01ldGhvZE92ZXJyaWRlIiwiX21ldGhvZCIsIm9yaWdpbmFsTWV0aG9kIiwidG9VcHBlckNhc2UiLCJtYWludGVuYW5jZUtleUlwcyIsIm1haW50ZW5hbmNlS2V5SXBzU3RvcmUiLCJsb2ciLCJkZWZhdWx0TG9nZ2VyIiwibG9hZE1hc3RlcktleSIsIm1hc3RlcktleUlwcyIsIm1hc3RlcktleUlwc1N0b3JlIiwicmVhZE9ubHlNYXN0ZXJLZXkiLCJyZWFkT25seU1hc3RlcktleUlwcyIsInJlYWRPbmx5TWFzdGVyS2V5SXBzU3RvcmUiLCJpc1JlYWRPbmx5IiwiaGFuZGxlUGFyc2VBdXRoIiwiaGFuZGxlUGFyc2VIZWFsdGgiLCJvcHRpb25zIiwibm9ybWFsaXplUm91dGVBbGxvd0xpc3RQYXRoIiwibm9ybWFsaXplZCIsIlVSTCIsInBhdGhuYW1lIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwicXVlcnlJbmRleCIsImlzUm91dGVBbGxvd2VkIiwicm91dGVBbGxvd0xpc3QiLCJyZWdleGVzIiwiX3JvdXRlQWxsb3dMaXN0UmVnZXgiLCJyZWdleCIsImVuZm9yY2VSb3V0ZUFsbG93TGlzdCIsImNyZWF0ZVNhbml0aXplZEVycm9yIiwiT1BFUkFUSU9OX0ZPUkJJRERFTiIsImhhbmRsZVBhcnNlRXJyb3JzIiwiZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlciIsInNpZ251cFVzZXJuYW1lVGFrZW5MZXZlbCIsImxvZ0xldmVscyIsInNpZ251cFVzZXJuYW1lVGFrZW4iLCJodHRwU3RhdHVzIiwiT0JKRUNUX05PVF9GT1VORCIsIlVTRVJOQU1FX1RBS0VOIiwibG9nZ2VyTWV0aG9kIiwiYmluZCIsInByb2Nlc3MiLCJlbnYiLCJURVNUSU5HIiwic3RhY2siLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIiwiZW5kIiwicHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MiLCJyZXF1ZXN0IiwicmVzb2x2ZSIsImFkZFJhdGVMaW1pdCIsInJvdXRlIiwiY2xvdWQiLCJSYXRlTGltaXRPcHRpb25zIiwicmVkaXNTdG9yZSIsImNvbm5lY3Rpb25Qcm9taXNlIiwicmVkaXNVcmwiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJvbiIsImlzT3BlbiIsImNvbm5lY3QiLCJSZWRpc1N0b3JlIiwic2VuZENvbW1hbmQiLCJhcmdzIiwicHVzaCIsInBhdGhUb1JlZ2V4cCIsInJlcXVlc3RQYXRoIiwicmVxdWVzdENvdW50IiwicmVxdWVzdE1ldGhvZHMiLCJpbmNsdWRlTWFzdGVyS2V5IiwiaW5jbHVkZUludGVybmFsUmVxdWVzdHMiLCJlcnJvclJlc3BvbnNlTWVzc2FnZSIsInJhdGVMaW1pdCIsIndpbmRvd01zIiwicmVxdWVzdFRpbWVXaW5kb3ciLCJtYXgiLCJyZXNwb25zZSIsInNraXAiLCJtZXRob2RzVG9DaGVjayIsIlNldCIsIl9iYXRjaE9yaWdpbmFsTWV0aG9kIiwiYWRkIiwiQXJyYXkiLCJpc0FycmF5IiwibSIsImhhcyIsInJlZ0V4cCIsIlJlZ0V4cCIsImtleUdlbmVyYXRvciIsInpvbmUiLCJTZXJ2ZXIiLCJSYXRlTGltaXRab25lIiwiZ2xvYmFsIiwidG9rZW4iLCJzZXNzaW9uIiwiaWQiLCJwdXQiLCJwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kiLCJkYXRhYmFzZSIsImFkYXB0ZXIiLCJNb25nb1N0b3JhZ2VBZGFwdGVyIiwiUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsInJlcXVlc3RJZCIsInBhdGhzIiwidHRsIiwiaWRlbXBvdGVuY3lPcHRpb25zIiwicmVxUGF0aCIsInJlcGxhY2UiLCJjaGFyQXQiLCJleHBpcnlEYXRlIiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwicmVzdCIsImNyZWF0ZSIsIm1hc3RlciIsInJlcUlkIiwiZXhwaXJlIiwiX2VuY29kZSIsImNhdGNoIiwiRFVQTElDQVRFX1ZBTFVFIiwiRFVQTElDQVRFX1JFUVVFU1QiLCJJTlZBTElEX0pTT04iLCJhbGxvd0RvdWJsZUZvcndhcmRTbGFzaCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9taWRkbGV3YXJlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXBwQ2FjaGUgZnJvbSAnLi9jYWNoZSc7XG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQgUGFyc2UgZnJvbSAncGFyc2Uvbm9kZSc7XG5pbXBvcnQgYXV0aCBmcm9tICcuL0F1dGgnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuL0NvbmZpZyc7XG5pbXBvcnQgZGVmYXVsdExvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgcmVzdCBmcm9tICcuL3Jlc3QnO1xuaW1wb3J0IE1vbmdvU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL01vbmdvL01vbmdvU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IFBvc3RncmVzU3RvcmFnZUFkYXB0ZXIgZnJvbSAnLi9BZGFwdGVycy9TdG9yYWdlL1Bvc3RncmVzL1Bvc3RncmVzU3RvcmFnZUFkYXB0ZXInO1xuaW1wb3J0IHJhdGVMaW1pdCBmcm9tICdleHByZXNzLXJhdGUtbGltaXQnO1xuaW1wb3J0IHsgUmF0ZUxpbWl0T3B0aW9ucyB9IGZyb20gJy4vT3B0aW9ucy9EZWZpbml0aW9ucyc7XG5pbXBvcnQgeyBwYXRoVG9SZWdleHAgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5pbXBvcnQgUmVkaXNTdG9yZSBmcm9tICdyYXRlLWxpbWl0LXJlZGlzJztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ3JlZGlzJztcbmltcG9ydCB7IEJsb2NrTGlzdCwgaXNJUHY0IH0gZnJvbSAnbmV0JztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciwgY3JlYXRlU2FuaXRpemVkRXJyb3IgfSBmcm9tICcuL0Vycm9yJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTID1cbiAgJ1gtUGFyc2UtTWFzdGVyLUtleSwgWC1QYXJzZS1SRVNULUFQSS1LZXksIFgtUGFyc2UtSmF2YXNjcmlwdC1LZXksIFgtUGFyc2UtQXBwbGljYXRpb24tSWQsIFgtUGFyc2UtQ2xpZW50LVZlcnNpb24sIFgtUGFyc2UtU2Vzc2lvbi1Ub2tlbiwgWC1SZXF1ZXN0ZWQtV2l0aCwgWC1QYXJzZS1SZXZvY2FibGUtU2Vzc2lvbiwgWC1QYXJzZS1SZXF1ZXN0LUlkLCBDb250ZW50LVR5cGUsIFByYWdtYSwgQ2FjaGUtQ29udHJvbCc7XG5cbmNvbnN0IGdldE1vdW50Rm9yUmVxdWVzdCA9IGZ1bmN0aW9uIChyZXEpIHtcbiAgY29uc3QgbW91bnRQYXRoTGVuZ3RoID0gcmVxLm9yaWdpbmFsVXJsLmxlbmd0aCAtIHJlcS51cmwubGVuZ3RoO1xuICBjb25zdCBtb3VudFBhdGggPSByZXEub3JpZ2luYWxVcmwuc2xpY2UoMCwgbW91bnRQYXRoTGVuZ3RoKTtcbiAgcmV0dXJuIHJlcS5wcm90b2NvbCArICc6Ly8nICsgcmVxLmdldCgnaG9zdCcpICsgbW91bnRQYXRoO1xufTtcblxuY29uc3QgZ2V0QmxvY2tMaXN0ID0gKGlwUmFuZ2VMaXN0LCBzdG9yZSkgPT4ge1xuICBpZiAoc3RvcmUuZ2V0KCdibG9ja0xpc3QnKSkgeyByZXR1cm4gc3RvcmUuZ2V0KCdibG9ja0xpc3QnKTsgfVxuICBjb25zdCBibG9ja0xpc3QgPSBuZXcgQmxvY2tMaXN0KCk7XG4gIGlwUmFuZ2VMaXN0LmZvckVhY2goZnVsbElwID0+IHtcbiAgICBpZiAoZnVsbElwID09PSAnOjovMCcgfHwgZnVsbElwID09PSAnOjonIHx8IGZ1bGxJcCA9PT0gJzo6MCcpIHtcbiAgICAgIHN0b3JlLnNldCgnYWxsb3dBbGxJcHY2JywgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmdWxsSXAgPT09ICcwLjAuMC4wLzAnIHx8IGZ1bGxJcCA9PT0gJzAuMC4wLjAnKSB7XG4gICAgICBzdG9yZS5zZXQoJ2FsbG93QWxsSXB2NCcsIHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbaXAsIG1hc2tdID0gZnVsbElwLnNwbGl0KCcvJyk7XG4gICAgaWYgKCFtYXNrKSB7XG4gICAgICBibG9ja0xpc3QuYWRkQWRkcmVzcyhpcCwgaXNJUHY0KGlwKSA/ICdpcHY0JyA6ICdpcHY2Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJsb2NrTGlzdC5hZGRTdWJuZXQoaXAsIE51bWJlcihtYXNrKSwgaXNJUHY0KGlwKSA/ICdpcHY0JyA6ICdpcHY2Jyk7XG4gICAgfVxuICB9KTtcbiAgc3RvcmUuc2V0KCdibG9ja0xpc3QnLCBibG9ja0xpc3QpO1xuICByZXR1cm4gYmxvY2tMaXN0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrSXAgPSAoaXAsIGlwUmFuZ2VMaXN0LCBzdG9yZSkgPT4ge1xuICBjb25zdCBpbmNvbWluZ0lwSXNWNCA9IGlzSVB2NChpcCk7XG4gIGNvbnN0IGJsb2NrTGlzdCA9IGdldEJsb2NrTGlzdChpcFJhbmdlTGlzdCwgc3RvcmUpO1xuXG4gIGlmIChzdG9yZS5nZXQoaXApKSB7IHJldHVybiB0cnVlOyB9XG4gIGlmIChzdG9yZS5nZXQoJ2FsbG93QWxsSXB2NCcpICYmIGluY29taW5nSXBJc1Y0KSB7IHJldHVybiB0cnVlOyB9XG4gIGlmIChzdG9yZS5nZXQoJ2FsbG93QWxsSXB2NicpICYmICFpbmNvbWluZ0lwSXNWNCkgeyByZXR1cm4gdHJ1ZTsgfVxuICBjb25zdCByZXN1bHQgPSBibG9ja0xpc3QuY2hlY2soaXAsIGluY29taW5nSXBJc1Y0ID8gJ2lwdjQnIDogJ2lwdjYnKTtcblxuICAvLyBJZiB0aGUgaXAgaXMgaW4gdGhlIGxpc3QsIHdlIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlIHN0b3JlXG4gIC8vIHNvIHdlIGhhdmUgYSBvcHRpbWl6ZWQgcGF0aCBmb3IgdGhlIG5leHQgcmVxdWVzdFxuICBpZiAoaXBSYW5nZUxpc3QuaW5jbHVkZXMoaXApICYmIHJlc3VsdCkge1xuICAgIHN0b3JlLnNldChpcCwgcmVzdWx0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gQ2hlY2tzIHRoYXQgdGhlIHJlcXVlc3QgaXMgYXV0aG9yaXplZCBmb3IgdGhpcyBhcHAgYW5kIGNoZWNrcyB1c2VyXG4vLyBhdXRoIHRvby5cbi8vIFRoZSBib2R5cGFyc2VyIHNob3VsZCBydW4gYmVmb3JlIHRoaXMgbWlkZGxld2FyZS5cbi8vIEFkZHMgaW5mbyB0byB0aGUgcmVxdWVzdDpcbi8vIHJlcS5jb25maWcgLSB0aGUgQ29uZmlnIGZvciB0aGlzIGFwcFxuLy8gcmVxLmF1dGggLSB0aGUgQXV0aCBmb3IgdGhpcyByZXF1ZXN0XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlUGFyc2VIZWFkZXJzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHZhciBtb3VudCA9IGdldE1vdW50Rm9yUmVxdWVzdChyZXEpO1xuXG4gIGxldCBjb250ZXh0ID0ge307XG4gIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUNsb3VkLUNvbnRleHQnKSAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnRleHQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpKTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29udGV4dCkgIT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICAgIHRocm93ICdDb250ZXh0IGlzIG5vdCBhbiBvYmplY3QnO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpO1xuICAgIH1cbiAgfVxuICB2YXIgaW5mbyA9IHtcbiAgICBhcHBJZDogcmVxLmdldCgnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCcpLFxuICAgIHNlc3Npb25Ub2tlbjogcmVxLmdldCgnWC1QYXJzZS1TZXNzaW9uLVRva2VuJyksXG4gICAgbWFzdGVyS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSxcbiAgICBtYWludGVuYW5jZUtleTogcmVxLmdldCgnWC1QYXJzZS1NYWludGVuYW5jZS1LZXknKSxcbiAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSxcbiAgICBjbGllbnRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtQ2xpZW50LUtleScpLFxuICAgIGphdmFzY3JpcHRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtSmF2YXNjcmlwdC1LZXknKSxcbiAgICBkb3ROZXRLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtV2luZG93cy1LZXknKSxcbiAgICByZXN0QVBJS2V5OiByZXEuZ2V0KCdYLVBhcnNlLVJFU1QtQVBJLUtleScpLFxuICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gIH07XG5cbiAgdmFyIGJhc2ljQXV0aCA9IGh0dHBBdXRoKHJlcSk7XG5cbiAgaWYgKGJhc2ljQXV0aCkge1xuICAgIHZhciBiYXNpY0F1dGhBcHBJZCA9IGJhc2ljQXV0aC5hcHBJZDtcbiAgICBpZiAoQXBwQ2FjaGUuZ2V0KGJhc2ljQXV0aEFwcElkKSkge1xuICAgICAgaW5mby5hcHBJZCA9IGJhc2ljQXV0aEFwcElkO1xuICAgICAgaW5mby5tYXN0ZXJLZXkgPSBiYXNpY0F1dGgubWFzdGVyS2V5IHx8IGluZm8ubWFzdGVyS2V5O1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gYmFzaWNBdXRoLmphdmFzY3JpcHRLZXkgfHwgaW5mby5qYXZhc2NyaXB0S2V5O1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYm9keSkge1xuICAgIC8vIFVuaXR5IFNESyBzZW5kcyBhIF9ub0JvZHkga2V5IHdoaWNoIG5lZWRzIHRvIGJlIHJlbW92ZWQuXG4gICAgLy8gVW5jbGVhciBhdCB0aGlzIHBvaW50IGlmIGFjdGlvbiBuZWVkcyB0byBiZSB0YWtlbi5cbiAgICBkZWxldGUgcmVxLmJvZHkuX25vQm9keTtcbiAgfVxuXG4gIHZhciBmaWxlVmlhSlNPTiA9IGZhbHNlO1xuXG4gIGlmICghaW5mby5hcHBJZCB8fCAhQXBwQ2FjaGUuZ2V0KGluZm8uYXBwSWQpKSB7XG4gICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBhcHAgaWQgb24gdGhlIGJvZHkuXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXEuYm9keSkpIHtcbiAgICAgIC8vIFRoZSBvbmx5IGNoYW5jZSB0byBmaW5kIHRoZSBhcHAgaWQgaXMgaWYgdGhpcyBpcyBhIGZpbGVcbiAgICAgIC8vIHVwbG9hZCB0aGF0IGFjdHVhbGx5IGlzIGEgSlNPTiBib2R5LiBTbyB0cnkgdG8gcGFyc2UgaXQuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGFyc2UtY29tbXVuaXR5L3BhcnNlLXNlcnZlci9pc3N1ZXMvNjU4OVxuICAgICAgLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZSBjbGllbnQgaXMgdHJ5aW5nIHRvIHVwbG9hZCBhIGZpbGUgYnV0IGZvcmdvdFxuICAgICAgLy8gdG8gcHJvdmlkZSB4LXBhcnNlLWFwcC1pZCBpbiBoZWFkZXIgYW5kIHBhcnNlIGEgYmluYXJ5IGZpbGUgd2lsbCBmYWlsXG4gICAgICB0cnkge1xuICAgICAgICByZXEuYm9keSA9IEpTT04ucGFyc2UocmVxLmJvZHkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICB9XG4gICAgICBmaWxlVmlhSlNPTiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcS5ib2R5KSB7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX1Jldm9jYWJsZVNlc3Npb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVxLmJvZHkgJiZcbiAgICAgIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkICYmXG4gICAgICBBcHBDYWNoZS5nZXQocmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQpICYmXG4gICAgICAoIWluZm8ubWFzdGVyS2V5IHx8IEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkubWFzdGVyS2V5ID09PSBpbmZvLm1hc3RlcktleSlcbiAgICApIHtcbiAgICAgIGluZm8uYXBwSWQgPSByZXEuYm9keS5fQXBwbGljYXRpb25JZDtcbiAgICAgIGluZm8uamF2YXNjcmlwdEtleSA9IHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5IHx8ICcnO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9KYXZhU2NyaXB0S2V5O1xuICAgICAgLy8gVE9ETzogdGVzdCB0aGF0IHRoZSBSRVNUIEFQSSBmb3JtYXRzIGdlbmVyYXRlZCBieSB0aGUgb3RoZXJcbiAgICAgIC8vIFNES3MgYXJlIGhhbmRsZWQgb2tcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fQ2xpZW50VmVyc2lvbjtcbiAgICAgIGlmIChyZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLmluc3RhbGxhdGlvbklkID0gcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX0luc3RhbGxhdGlvbklkO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fU2Vzc2lvblRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5zZXNzaW9uVG9rZW4gPSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX1Nlc3Npb25Ub2tlbjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fTWFzdGVyS2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVxLmJvZHkuX01hc3RlcktleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8ubWFzdGVyS2V5ID0gcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9NYXN0ZXJLZXk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX2NvbnRleHQpIHtcbiAgICAgICAgaWYgKFV0aWxzLmlzT2JqZWN0KHJlcS5ib2R5Ll9jb250ZXh0KSkge1xuICAgICAgICAgIGluZm8uY29udGV4dCA9IHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmZvLmNvbnRleHQgPSBKU09OLnBhcnNlKHJlcS5ib2R5Ll9jb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5mby5jb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fY29udGV4dDtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fQ29udGVudFR5cGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fQ29udGVudFR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXEuaGVhZGVyc1snY29udGVudC10eXBlJ10gPSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fQ29udGVudFR5cGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGluZm8uc2Vzc2lvblRva2VuICYmIHR5cGVvZiBpbmZvLnNlc3Npb25Ub2tlbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICB9XG5cbiAgaWYgKGZpbGVWaWFKU09OICYmIHJlcS5ib2R5KSB7XG4gICAgaWYgKHJlcS5ib2R5LmJhc2U2NCAmJiB0eXBlb2YgcmVxLmJvZHkuYmFzZTY0ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICB9XG4gICAgcmVxLmZpbGVEYXRhID0gcmVxLmJvZHkuZmlsZURhdGE7XG4gICAgLy8gV2UgbmVlZCB0byByZXBvcHVsYXRlIHJlcS5ib2R5IHdpdGggYSBidWZmZXJcbiAgICB2YXIgYmFzZTY0ID0gcmVxLmJvZHkuYmFzZTY0O1xuICAgIHJlcS5ib2R5ID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIH1cblxuICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG4gIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWcgfHwgQ29uZmlnLmdldChpbmZvLmFwcElkLCBtb3VudCk7XG4gIGlmIChjb25maWcuc3RhdGUgJiYgY29uZmlnLnN0YXRlICE9PSAnb2snKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIGVycm9yOiBgSW52YWxpZCBzZXJ2ZXIgc3RhdGU6ICR7Y29uZmlnLnN0YXRlfWAsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghcmVxLmNvbmZpZykge1xuICAgIGF3YWl0IGNvbmZpZy5sb2FkS2V5cygpO1xuICB9XG5cbiAgaW5mby5hcHAgPSBBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCk7XG4gIHJlcS5jb25maWcgPSBjb25maWc7XG4gIHJlcS5jb25maWcuaGVhZGVycyA9IHJlcS5oZWFkZXJzIHx8IHt9O1xuICByZXEuY29uZmlnLmlwID0gY2xpZW50SXA7XG4gIHJlcS5pbmZvID0gaW5mbztcblxuICAvLyBTa2lwIGtleSBkZXRlY3Rpb24gaWYgYWxyZWFkeSByZXNvbHZlZCBieSBoYW5kbGVQYXJzZUF1dGggKGhlYWRlci1iYXNlZCkuXG4gIC8vIE9ubHkgcmVzb2x2ZSBoZXJlIGZvciBib2R5LWJhc2VkIF9NYXN0ZXJLZXkgKGluZm8ubWFzdGVyS2V5IG1heSBjb21lIGZyb20gYm9keSkuXG4gIGlmICghcmVxLmF1dGggfHwgKCFyZXEuYXV0aC5pc01hc3RlciAmJiAhcmVxLmF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVLZXlBdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGtleVZhbHVlOiBpbmZvLm1hc3RlcktleSxcbiAgICAgIG1haW50ZW5hbmNlS2V5VmFsdWU6IGluZm8ubWFpbnRlbmFuY2VLZXksXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGNsaWVudElwLFxuICAgIH0pO1xuICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgcmVxLmF1dGggPSByZXNvbHZlZDtcbiAgICB9XG4gIH1cblxuICBpZiAocmVxLmF1dGggJiYgKHJlcS5hdXRoLmlzTWFzdGVyIHx8IHJlcS5hdXRoLmlzTWFpbnRlbmFuY2UpKSB7XG4gICAgcmV0dXJuIGhhbmRsZVJhdGVMaW1pdChyZXEsIHJlcywgbmV4dCk7XG4gIH1cblxuICAvLyBDbGllbnQga2V5cyBhcmUgbm90IHJlcXVpcmVkIGluIHBhcnNlLXNlcnZlciwgYnV0IGlmIGFueSBoYXZlIGJlZW4gY29uZmlndXJlZCBpbiB0aGUgc2VydmVyLCB2YWxpZGF0ZSB0aGVtXG4gIC8vICB0byBwcmVzZXJ2ZSBvcmlnaW5hbCBiZWhhdmlvci5cbiAgY29uc3Qga2V5cyA9IFsnY2xpZW50S2V5JywgJ2phdmFzY3JpcHRLZXknLCAnZG90TmV0S2V5JywgJ3Jlc3RBUElLZXknXTtcbiAgY29uc3Qgb25lS2V5Q29uZmlndXJlZCA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkO1xuICB9KTtcbiAgY29uc3Qgb25lS2V5TWF0Y2hlcyA9IGtleXMuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHJlcS5jb25maWdba2V5XSAhPT0gdW5kZWZpbmVkICYmIGluZm9ba2V5XSA9PT0gcmVxLmNvbmZpZ1trZXldO1xuICB9KTtcblxuICBpZiAob25lS2V5Q29uZmlndXJlZCAmJiAhb25lS2V5TWF0Y2hlcykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAocmVxLnVybCA9PSAnL2xvZ2luJykge1xuICAgIGRlbGV0ZSBpbmZvLnNlc3Npb25Ub2tlbjtcbiAgfVxuXG4gIGlmIChyZXEudXNlckZyb21KV1QpIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgICB1c2VyOiByZXEudXNlckZyb21KV1QsXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZVJhdGVMaW1pdChyZXEsIHJlcywgbmV4dCk7XG4gIH1cblxuICBpZiAoIWluZm8uc2Vzc2lvblRva2VuKSB7XG4gICAgcmVxLmF1dGggPSBuZXcgYXV0aC5BdXRoKHtcbiAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgaXNNYXN0ZXI6IGZhbHNlLFxuICAgIH0pO1xuICB9XG4gIGhhbmRsZVJhdGVMaW1pdChyZXEsIHJlcywgbmV4dCk7XG59XG5cbmNvbnN0IGhhbmRsZVJhdGVMaW1pdCA9IGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICBjb25zdCByYXRlTGltaXRzID0gcmVxLmNvbmZpZy5yYXRlTGltaXRzIHx8IFtdO1xuICB0cnkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcmF0ZUxpbWl0cy5tYXAoYXN5bmMgbGltaXQgPT4ge1xuICAgICAgICBjb25zdCBwYXRoRXhwID0gbGltaXQucGF0aC5yZWdleHAgfHwgbGltaXQucGF0aDtcbiAgICAgICAgaWYgKHBhdGhFeHAudGVzdChyZXEudXJsKSkge1xuICAgICAgICAgIGF3YWl0IGxpbWl0LmhhbmRsZXIocmVxLCByZXMsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuQ09OTkVDVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgICAgICAgICdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGFwcGx5IHRoZSByYXRlIGxpbWl0ZXI6ICcsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDQyOSk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVQYXJzZVNlc3Npb24gPSBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbmZvID0gcmVxLmluZm87XG4gICAgaWYgKHJlcS5hdXRoIHx8IChyZXEudXJsID09PSAnL3Nlc3Npb25zL21lJyAmJiByZXEubWV0aG9kID09PSAnR0VUJykpIHtcbiAgICAgIG5leHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RBdXRoID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICBpbmZvLnNlc3Npb25Ub2tlbiAmJlxuICAgICAgcmVxLnVybCA9PT0gJy91cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uJyAmJlxuICAgICAgaW5mby5zZXNzaW9uVG9rZW4uaW5kZXhPZigncjonKSAhPSAwXG4gICAgKSB7XG4gICAgICByZXF1ZXN0QXV0aCA9IGF3YWl0IGF1dGguZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbih7XG4gICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEF1dGggPSBhd2FpdCBhdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcS5hdXRoID0gcmVxdWVzdEF1dGg7XG4gICAgbmV4dCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTG9nIGZ1bGwgZXJyb3IgZGV0YWlscyBpbnRlcm5hbGx5LCBidXQgZG9uJ3QgZXhwb3NlIHRvIGNsaWVudFxuICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci5lcnJvcignZXJyb3IgZ2V0dGluZyBhdXRoIGZvciBzZXNzaW9uVG9rZW4nLCBlcnJvcik7XG4gICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuVU5LTk9XTl9FUlJPUiwgJ1Vua25vd24gZXJyb3InKSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldENsaWVudElwKHJlcSkge1xuICByZXR1cm4gcmVxLmlwO1xufVxuXG5mdW5jdGlvbiBodHRwQXV0aChyZXEpIHtcbiAgaWYgKCEocmVxLnJlcSB8fCByZXEpLmhlYWRlcnMuYXV0aG9yaXphdGlvbikgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZGVyID0gKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gIHZhciBhcHBJZCwgbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5O1xuXG4gIC8vIHBhcnNlIGhlYWRlclxuICB2YXIgYXV0aFByZWZpeCA9ICdiYXNpYyAnO1xuXG4gIHZhciBtYXRjaCA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYXV0aFByZWZpeCk7XG5cbiAgaWYgKG1hdGNoID09IDApIHtcbiAgICB2YXIgZW5jb2RlZEF1dGggPSBoZWFkZXIuc3Vic3RyaW5nKGF1dGhQcmVmaXgubGVuZ3RoLCBoZWFkZXIubGVuZ3RoKTtcbiAgICB2YXIgY3JlZGVudGlhbHMgPSBkZWNvZGVCYXNlNjQoZW5jb2RlZEF1dGgpLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMubGVuZ3RoID09IDIpIHtcbiAgICAgIGFwcElkID0gY3JlZGVudGlhbHNbMF07XG4gICAgICB2YXIga2V5ID0gY3JlZGVudGlhbHNbMV07XG5cbiAgICAgIHZhciBqc0tleVByZWZpeCA9ICdqYXZhc2NyaXB0LWtleT0nO1xuXG4gICAgICB2YXIgbWF0Y2hLZXkgPSBrZXkuaW5kZXhPZihqc0tleVByZWZpeCk7XG4gICAgICBpZiAobWF0Y2hLZXkgPT0gMCkge1xuICAgICAgICBqYXZhc2NyaXB0S2V5ID0ga2V5LnN1YnN0cmluZyhqc0tleVByZWZpeC5sZW5ndGgsIGtleS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFzdGVyS2V5ID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFwcElkOiBhcHBJZCwgbWFzdGVyS2V5OiBtYXN0ZXJLZXksIGphdmFzY3JpcHRLZXk6IGphdmFzY3JpcHRLZXkgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cikge1xuICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93Q3Jvc3NEb21haW4oYXBwSWQpIHtcbiAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIGdldE1vdW50Rm9yUmVxdWVzdChyZXEpKTtcbiAgICBsZXQgYWxsb3dIZWFkZXJzID0gREVGQVVMVF9BTExPV0VEX0hFQURFUlM7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dIZWFkZXJzKSB7XG4gICAgICBhbGxvd0hlYWRlcnMgKz0gYCwgJHtjb25maWcuYWxsb3dIZWFkZXJzLmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlT3JpZ2lucyA9XG4gICAgICB0eXBlb2YgY29uZmlnPy5hbGxvd09yaWdpbiA9PT0gJ3N0cmluZycgPyBbY29uZmlnLmFsbG93T3JpZ2luXSA6IGNvbmZpZz8uYWxsb3dPcmlnaW4gPz8gWycqJ107XG4gICAgY29uc3QgcmVxdWVzdE9yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbjtcbiAgICBjb25zdCBhbGxvd09yaWdpbnMgPVxuICAgICAgcmVxdWVzdE9yaWdpbiAmJiBiYXNlT3JpZ2lucy5pbmNsdWRlcyhyZXF1ZXN0T3JpZ2luKSA/IHJlcXVlc3RPcmlnaW4gOiBiYXNlT3JpZ2luc1swXTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd09yaWdpbnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VULFBVVCxQT1NULERFTEVURSxPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsIGFsbG93SGVhZGVycyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLCAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkLCBYLVBhcnNlLVB1c2gtU3RhdHVzLUlkJyk7XG4gICAgLy8gaW50ZXJjZXB0IE9QVElPTlMgbWV0aG9kXG4gICAgaWYgKCdPUFRJT05TJyA9PSByZXEubWV0aG9kKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dNZXRob2RPdmVycmlkZShyZXEsIHJlcywgbmV4dCkge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnICYmIHJlcS5ib2R5Py5fbWV0aG9kKSB7XG4gICAgaWYgKHR5cGVvZiByZXEuYm9keS5fbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgICAgcmVxLm9yaWdpbmFsTWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICAgIHJlcS5tZXRob2QgPSByZXEuYm9keS5fbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIGRlbGV0ZSByZXEuYm9keS5fbWV0aG9kO1xuICB9XG4gIG5leHQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUtleUF1dGgoeyBjb25maWcsIGtleVZhbHVlLCBtYWludGVuYW5jZUtleVZhbHVlLCBpbnN0YWxsYXRpb25JZCwgY2xpZW50SXAgfSkge1xuICBpZiAobWFpbnRlbmFuY2VLZXlWYWx1ZSAmJiBtYWludGVuYW5jZUtleVZhbHVlID09PSBjb25maWcubWFpbnRlbmFuY2VLZXkpIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzIHx8IFtdLCBjb25maWcubWFpbnRlbmFuY2VLZXlJcHNTdG9yZSkpIHtcbiAgICAgIHJldHVybiBuZXcgYXV0aC5BdXRoKHsgY29uZmlnLCBpbnN0YWxsYXRpb25JZCwgaXNNYWludGVuYW5jZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyBtYWludGVuYW5jZSBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFpbnRlbmFuY2VLZXlJcHMnLmBcbiAgICApO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICBpZiAoa2V5VmFsdWUgPT09IG1hc3RlcktleSkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcubWFzdGVyS2V5SXBzIHx8IFtdLCBjb25maWcubWFzdGVyS2V5SXBzU3RvcmUpKSB7XG4gICAgICByZXR1cm4gbmV3IGF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQsIGlzTWFzdGVyOiB0cnVlIH0pO1xuICAgIH1cbiAgICBjb25zdCBsb2cgPSBjb25maWcubG9nZ2VyQ29udHJvbGxlciB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIGxvZy5lcnJvcihcbiAgICAgIGBSZXF1ZXN0IHVzaW5nIG1hc3RlciBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFzdGVyS2V5SXBzJy5gXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKFxuICAgIGtleVZhbHVlICYmXG4gICAgdHlwZW9mIGNvbmZpZy5yZWFkT25seU1hc3RlcktleSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgJiZcbiAgICBrZXlWYWx1ZSA9PT0gY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5XG4gICkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHMgfHwgW10sIGNvbmZpZy5yZWFkT25seU1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgcmV0dXJuIG5ldyBhdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkLCBpc01hc3RlcjogdHJ1ZSwgaXNSZWFkT25seTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyByZWFkLW9ubHkgbWFzdGVyIGtleSByZWplY3RlZCBhcyB0aGUgcmVxdWVzdCBJUCBhZGRyZXNzICcke2NsaWVudElwfScgaXMgbm90IHNldCBpbiBQYXJzZSBTZXJ2ZXIgb3B0aW9uICdyZWFkT25seU1hc3RlcktleUlwcycuYFxuICAgICk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VBdXRoKGFwcElkKSB7XG4gIHJldHVybiBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBtb3VudCA9IGdldE1vdW50Rm9yUmVxdWVzdChyZXEpO1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIG1vdW50KTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICB9XG4gICAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG4gICAgcmVxLmNvbmZpZy5pcCA9IGNsaWVudElwO1xuICAgIGF3YWl0IGNvbmZpZy5sb2FkS2V5cygpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAga2V5VmFsdWU6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpIHx8IG51bGwsXG4gICAgICBtYWludGVuYW5jZUtleVZhbHVlOiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpIHx8IG51bGwsXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSB8fCAnY2xvdWQnLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dCgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VIZWFsdGgob3B0aW9ucykge1xuICByZXR1cm4gKHJlcSwgcmVzKSA9PiB7XG4gICAgcmVzLnN0YXR1cyhvcHRpb25zLnN0YXRlID09PSAnb2snID8gMjAwIDogNTAzKTtcbiAgICBpZiAob3B0aW9ucy5zdGF0ZSA9PT0gJ3N0YXJ0aW5nJykge1xuICAgICAgcmVzLnNldCgnUmV0cnktQWZ0ZXInLCAxKTtcbiAgICB9XG4gICAgcmVzLmpzb24oe1xuICAgICAgc3RhdHVzOiBvcHRpb25zLnN0YXRlLFxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgocGF0aCwgbW91bnQpIHtcbiAgbGV0IG5vcm1hbGl6ZWQgPSBwYXRoO1xuICBpZiAobW91bnQpIHtcbiAgICBjb25zdCBtb3VudFBhdGggPSBuZXcgVVJMKG1vdW50KS5wYXRobmFtZTtcbiAgICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKG1vdW50UGF0aCkpIHtcbiAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZyhtb3VudFBhdGgubGVuZ3RoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDEpO1xuICB9XG4gIGlmIChub3JtYWxpemVkLmVuZHNXaXRoKCcvJykpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgbm9ybWFsaXplZC5sZW5ndGggLSAxKTtcbiAgfVxuICBjb25zdCBxdWVyeUluZGV4ID0gbm9ybWFsaXplZC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxdWVyeUluZGV4ICE9PSAtMSkge1xuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZygwLCBxdWVyeUluZGV4KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUm91dGVBbGxvd2VkKHBhdGgsIGNvbmZpZywgYXV0aCkge1xuICBpZiAoIWNvbmZpZyB8fCBjb25maWcucm91dGVBbGxvd0xpc3QgPT09IHVuZGVmaW5lZCB8fCBjb25maWcucm91dGVBbGxvd0xpc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aCAmJiAoYXV0aC5pc01hc3RlciB8fCBhdXRoLmlzTWFpbnRlbmFuY2UpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVJvdXRlQWxsb3dMaXN0UGF0aChwYXRoLCBjb25maWcubW91bnQpO1xuICBjb25zdCByZWdleGVzID0gY29uZmlnLl9yb3V0ZUFsbG93TGlzdFJlZ2V4IHx8IFtdO1xuICBmb3IgKGNvbnN0IHJlZ2V4IG9mIHJlZ2V4ZXMpIHtcbiAgICBpZiAocmVnZXgudGVzdChub3JtYWxpemVkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VSb3V0ZUFsbG93TGlzdChyZXEsIHJlcywgbmV4dCkge1xuICBpZiAoaXNSb3V0ZUFsbG93ZWQocmVxLm9yaWdpbmFsVXJsLCByZXEuY29uZmlnLCByZXEuYXV0aCkpIHtcbiAgICByZXR1cm4gbmV4dCgpO1xuICB9XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgocmVxLm9yaWdpbmFsVXJsLCByZXEuY29uZmlnPy5tb3VudCk7XG4gIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgYFJvdXRlIG5vdCBhbGxvd2VkIGJ5IHJvdXRlQWxsb3dMaXN0OiAke3JlcS5tZXRob2R9ICR7cGF0aH1gLFxuICAgIHJlcS5jb25maWdcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlRXJyb3JzKGVyciwgcmVxLCByZXMsIG5leHQpIHtcbiAgY29uc3QgbG9nID0gKHJlcS5jb25maWcgJiYgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICBpZiAoZXJyIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICBpZiAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgfVxuICAgIGNvbnN0IHNpZ251cFVzZXJuYW1lVGFrZW5MZXZlbCA9XG4gICAgICByZXEuY29uZmlnPy5sb2dMZXZlbHM/LnNpZ251cFVzZXJuYW1lVGFrZW4gfHwgJ2luZm8nO1xuICAgIGxldCBodHRwU3RhdHVzO1xuICAgIC8vIFRPRE86IGZpbGwgb3V0IHRoaXMgbWFwcGluZ1xuICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SOlxuICAgICAgICBodHRwU3RhdHVzID0gNTAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORDpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDQwNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBodHRwU3RhdHVzID0gNDAwO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpO1xuICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoZXJyLmNvZGUgPT09IFBhcnNlLkVycm9yLlVTRVJOQU1FX1RBS0VOKSB7XG4gICAgICBpZiAoc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsICE9PSAnc2lsZW50Jykge1xuICAgICAgICBjb25zdCBsb2dnZXJNZXRob2QgPVxuICAgICAgICAgIHR5cGVvZiBsb2dbc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsXSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBsb2dbc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsXS5iaW5kKGxvZylcbiAgICAgICAgICAgIDogbG9nLmVycm9yLmJpbmQobG9nKTtcbiAgICAgICAgbG9nZ2VyTWV0aG9kKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXJyLnN0YXR1cyAmJiBlcnIubWVzc2FnZSkge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgaWYgKCEocHJvY2VzcyAmJiBwcm9jZXNzLmVudi5URVNUSU5HKSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZXJyb3IoJ1VuY2F1Z2h0IGludGVybmFsIHNlcnZlciBlcnJvci4nLCBlcnIsIGVyci5zdGFjayk7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyxcbiAgICB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmICghcmVxLmF1dGguaXNNYXN0ZXIpIHtcbiAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCByZXEuY29uZmlnKTtcbiAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxdWVzdCkge1xuICBpZiAoIXJlcXVlc3QuYXV0aC5pc01hc3Rlcikge1xuICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCByZXF1ZXN0LmNvbmZpZyk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG5leHBvcnQgY29uc3QgYWRkUmF0ZUxpbWl0ID0gKHJvdXRlLCBjb25maWcsIGNsb3VkKSA9PiB7XG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IENvbmZpZy5nZXQoY29uZmlnKTtcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiByb3V0ZSkge1xuICAgIGlmICghUmF0ZUxpbWl0T3B0aW9uc1trZXldKSB7XG4gICAgICB0aHJvdyBgSW52YWxpZCByYXRlIGxpbWl0IG9wdGlvbiBcIiR7a2V5fVwiYDtcbiAgICB9XG4gIH1cbiAgaWYgKCFjb25maWcucmF0ZUxpbWl0cykge1xuICAgIGNvbmZpZy5yYXRlTGltaXRzID0gW107XG4gIH1cbiAgY29uc3QgcmVkaXNTdG9yZSA9IHtcbiAgICBjb25uZWN0aW9uUHJvbWlzZTogUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgc3RvcmU6IG51bGwsXG4gIH07XG4gIGlmIChyb3V0ZS5yZWRpc1VybCkge1xuICAgIGNvbnN0IGxvZyA9IGNvbmZpZz8ubG9nZ2VyQ29udHJvbGxlciB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUNsaWVudCh7XG4gICAgICB1cmw6IHJvdXRlLnJlZGlzVXJsLFxuICAgIH0pO1xuICAgIGNsaWVudC5vbignZXJyb3InLCBlcnIgPT4geyBsb2cuZXJyb3IoJ01pZGRsZXdhcmVzIGFkZFJhdGVMaW1pdCBSZWRpcyBjbGllbnQgZXJyb3InLCB7IGVycm9yOiBlcnIgfSkgfSk7XG4gICAgY2xpZW50Lm9uKCdjb25uZWN0JywgKCkgPT4geyB9KTtcbiAgICBjbGllbnQub24oJ3JlY29ubmVjdGluZycsICgpID0+IHsgfSk7XG4gICAgY2xpZW50Lm9uKCdyZWFkeScsICgpID0+IHsgfSk7XG4gICAgcmVkaXNTdG9yZS5jb25uZWN0aW9uUHJvbWlzZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChjbGllbnQuaXNPcGVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvcihgQ291bGQgbm90IGNvbm5lY3QgdG8gcmVkaXNVUkwgaW4gcmF0ZSBsaW1pdDogJHtlfWApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmVkaXNTdG9yZS5jb25uZWN0aW9uUHJvbWlzZSgpO1xuICAgIHJlZGlzU3RvcmUuc3RvcmUgPSBuZXcgUmVkaXNTdG9yZSh7XG4gICAgICBzZW5kQ29tbWFuZDogYXN5bmMgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgYXdhaXQgcmVkaXNTdG9yZS5jb25uZWN0aW9uUHJvbWlzZSgpO1xuICAgICAgICByZXR1cm4gY2xpZW50LnNlbmRDb21tYW5kKGFyZ3MpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBjb25maWcucmF0ZUxpbWl0cy5wdXNoKHtcbiAgICBwYXRoOiBwYXRoVG9SZWdleHAocm91dGUucmVxdWVzdFBhdGgpLFxuICAgIHJlcXVlc3RDb3VudDogcm91dGUucmVxdWVzdENvdW50LFxuICAgIHJlcXVlc3RNZXRob2RzOiByb3V0ZS5yZXF1ZXN0TWV0aG9kcyxcbiAgICBpbmNsdWRlTWFzdGVyS2V5OiByb3V0ZS5pbmNsdWRlTWFzdGVyS2V5LFxuICAgIGluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzOiByb3V0ZS5pbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyxcbiAgICBlcnJvclJlc3BvbnNlTWVzc2FnZTogcm91dGUuZXJyb3JSZXNwb25zZU1lc3NhZ2UgfHwgUmF0ZUxpbWl0T3B0aW9ucy5lcnJvclJlc3BvbnNlTWVzc2FnZS5kZWZhdWx0LFxuICAgIGhhbmRsZXI6IHJhdGVMaW1pdCh7XG4gICAgICB3aW5kb3dNczogcm91dGUucmVxdWVzdFRpbWVXaW5kb3csXG4gICAgICBtYXg6IHJvdXRlLnJlcXVlc3RDb3VudCxcbiAgICAgIG1lc3NhZ2U6IHJvdXRlLmVycm9yUmVzcG9uc2VNZXNzYWdlIHx8IFJhdGVMaW1pdE9wdGlvbnMuZXJyb3JSZXNwb25zZU1lc3NhZ2UuZGVmYXVsdCxcbiAgICAgIGhhbmRsZXI6IChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCwgb3B0aW9ucykgPT4ge1xuICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuQ09OTkVDVElPTl9GQUlMRUQsXG4gICAgICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHNraXA6IHJlcXVlc3QgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdC5pcCA9PT0gJzEyNy4wLjAuMScgJiYgIXJvdXRlLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLmluY2x1ZGVNYXN0ZXJLZXkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLnJlcXVlc3RNZXRob2RzKSB7XG4gICAgICAgICAgY29uc3QgbWV0aG9kc1RvQ2hlY2sgPSBuZXcgU2V0KFtyZXF1ZXN0Lm1ldGhvZF0pO1xuICAgICAgICAgIGlmIChyZXF1ZXN0Ll9iYXRjaE9yaWdpbmFsTWV0aG9kKSB7XG4gICAgICAgICAgICBtZXRob2RzVG9DaGVjay5hZGQocmVxdWVzdC5fYmF0Y2hPcmlnaW5hbE1ldGhvZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvdXRlLnJlcXVlc3RNZXRob2RzKSkge1xuICAgICAgICAgICAgaWYgKCFyb3V0ZS5yZXF1ZXN0TWV0aG9kcy5zb21lKG0gPT4gbWV0aG9kc1RvQ2hlY2suaGFzKG0pKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChyb3V0ZS5yZXF1ZXN0TWV0aG9kcyk7XG4gICAgICAgICAgICBpZiAoIVsuLi5tZXRob2RzVG9DaGVja10uc29tZShtID0+IHJlZ0V4cC50ZXN0KG0pKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuYXV0aD8uaXNNYXN0ZXI7XG4gICAgICB9LFxuICAgICAga2V5R2VuZXJhdG9yOiBhc3luYyByZXF1ZXN0ID0+IHtcbiAgICAgICAgaWYgKHJvdXRlLnpvbmUgPT09IFBhcnNlLlNlcnZlci5SYXRlTGltaXRab25lLmdsb2JhbCkge1xuICAgICAgICAgIHJldHVybiByZXF1ZXN0LmNvbmZpZy5hcHBJZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b2tlbiA9IHJlcXVlc3QuaW5mby5zZXNzaW9uVG9rZW47XG4gICAgICAgIGlmIChyb3V0ZS56b25lID09PSBQYXJzZS5TZXJ2ZXIuUmF0ZUxpbWl0Wm9uZS5zZXNzaW9uICYmIHRva2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZS56b25lID09PSBQYXJzZS5TZXJ2ZXIuUmF0ZUxpbWl0Wm9uZS51c2VyICYmIHRva2VuKSB7XG4gICAgICAgICAgaWYgKCFyZXF1ZXN0LmF1dGgpIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gaGFuZGxlUGFyc2VTZXNzaW9uKHJlcXVlc3QsIG51bGwsIHJlc29sdmUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcXVlc3QuYXV0aD8udXNlcj8uaWQgJiYgcm91dGUuem9uZSA9PT0gJ3VzZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5hdXRoLnVzZXIuaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXF1ZXN0LmNvbmZpZy5pcDtcbiAgICAgIH0sXG4gICAgICBzdG9yZTogcmVkaXNTdG9yZS5zdG9yZSxcbiAgICB9KSxcbiAgICBjbG91ZCxcbiAgfSk7XG4gIENvbmZpZy5wdXQoY29uZmlnKTtcbn07XG5cbi8qKlxuICogRGVkdXBsaWNhdGVzIGEgcmVxdWVzdCB0byBlbnN1cmUgaWRlbXBvdGVuY3kuIER1cGxpY2F0ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIHJlcXVlc3QgSURcbiAqIGluIHRoZSByZXF1ZXN0IGhlYWRlci4gSWYgYSByZXF1ZXN0IGhhcyBubyByZXF1ZXN0IElELCBpdCBpcyBleGVjdXRlZCBhbnl3YXkuXG4gKiBAcGFyYW0geyp9IHJlcSBUaGUgcmVxdWVzdCB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIFByb21pc2U8e30+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5zdXJlSWRlbXBvdGVuY3kocmVxKSB7XG4gIC8vIEVuYWJsZSBmZWF0dXJlIG9ubHkgZm9yIE1vbmdvREJcbiAgaWYgKFxuICAgICEoXG4gICAgICByZXEuY29uZmlnLmRhdGFiYXNlLmFkYXB0ZXIgaW5zdGFuY2VvZiBNb25nb1N0b3JhZ2VBZGFwdGVyIHx8XG4gICAgICByZXEuY29uZmlnLmRhdGFiYXNlLmFkYXB0ZXIgaW5zdGFuY2VvZiBQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gR2V0IHBhcmFtZXRlcnNcbiAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgY29uc3QgcmVxdWVzdElkID0gKChyZXEgfHwge30pLmhlYWRlcnMgfHwge30pWyd4LXBhcnNlLXJlcXVlc3QtaWQnXTtcbiAgY29uc3QgeyBwYXRocywgdHRsIH0gPSBjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zO1xuICBpZiAoIXJlcXVlc3RJZCB8fCAhY29uZmlnLmlkZW1wb3RlbmN5T3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBSZXF1ZXN0IHBhdGggbWF5IGNvbnRhaW4gdHJhaWxpbmcgc2xhc2hlcywgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW5hbCByZXF1ZXN0LCBzbyByZW1vdmVcbiAgLy8gbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcyB0byBtYWtlIGl0IGVhc2llciB0byBzcGVjaWZ5IHBhdGhzIGluIHRoZSBjb25maWd1cmF0aW9uXG4gIGNvbnN0IHJlcVBhdGggPSByZXEucGF0aC5yZXBsYWNlKC9eXFwvfFxcLyQvLCAnJyk7XG4gIC8vIERldGVybWluZSB3aGV0aGVyIGlkZW1wb3RlbmN5IGlzIGVuYWJsZWQgZm9yIGN1cnJlbnQgcmVxdWVzdCBwYXRoXG4gIGxldCBtYXRjaCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAvLyBBc3N1bWUgb25lIHdhbnRzIGEgcGF0aCB0byBhbHdheXMgbWF0Y2ggZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHByZXZlbnQgYW55IG1pc3Rha2VzXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdGguY2hhckF0KDApID09PSAnXicgPyBwYXRoIDogJ14nICsgcGF0aCk7XG4gICAgaWYgKHJlcVBhdGgubWF0Y2gocmVnZXgpKSB7XG4gICAgICBtYXRjaCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBUcnkgdG8gc3RvcmUgcmVxdWVzdFxuICBjb25zdCBleHBpcnlEYXRlID0gbmV3IERhdGUobmV3IERhdGUoKS5zZXRTZWNvbmRzKG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpICsgdHRsKSk7XG4gIHJldHVybiByZXN0XG4gICAgLmNyZWF0ZShjb25maWcsIGF1dGgubWFzdGVyKGNvbmZpZyksICdfSWRlbXBvdGVuY3knLCB7XG4gICAgICByZXFJZDogcmVxdWVzdElkLFxuICAgICAgZXhwaXJlOiBQYXJzZS5fZW5jb2RlKGV4cGlyeURhdGUpLFxuICAgIH0pXG4gICAgLmNhdGNoKGUgPT4ge1xuICAgICAgaWYgKGUuY29kZSA9PSBQYXJzZS5FcnJvci5EVVBMSUNBVEVfVkFMVUUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkRVUExJQ0FURV9SRVFVRVNULCAnRHVwbGljYXRlIHJlcXVlc3QnKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKSB7XG4gIHJlcy5zdGF0dXMoNDAzKTtcbiAgcmVzLmVuZCgne1wiZXJyb3JcIjpcInVuYXV0aG9yaXplZFwifScpO1xufVxuXG5mdW5jdGlvbiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKSB7XG4gIHJlcy5zdGF0dXMoNDAwKTtcbiAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sIGVycm9yOiAnSW52YWxpZCBvYmplY3QgZm9yIGNvbnRleHQuJyB9KTtcbn1cblxuLyoqXG4gKiBFeHByZXNzIDQgYWxsb3dlZCBhIGRvdWJsZSBmb3J3YXJkIHNsYXNoIGJldHdlZW4gYSByb3V0ZSBhbmQgcm91dGVyLiBBbHRob3VnaFxuICogdGhpcyBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBhbnRpLXBhdHRlcm4sIHdlIG5lZWQgdG8gc3VwcG9ydCBpdCBmb3IgYmFja3dhcmRzXG4gKiBjb21wYXRpYmlsaXR5LlxuICpcbiAqIFRlY2huaWNhbGx5IHZhbGlkIFVSTCB3aXRoIGRvdWJsZSBmb3Jvd2FyZCBzbGFzaDpcbiAqIGh0dHA6Ly9sb2NhbGhvc3Q6MTMzNy9wYXJzZS8vZnVuY3Rpb25zL3Rlc3RGdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dEb3VibGVGb3J3YXJkU2xhc2gocmVxLCByZXMsIG5leHQpIHtcbiAgcmVxLnVybCA9IHJlcS51cmwuc3RhcnRzV2l0aCgnLy8nKSA/IHJlcS51cmwuc3Vic3RyaW5nKDEpIDogcmVxLnVybDtcbiAgbmV4dCgpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJ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QUksQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxJQUFJRCxJQUFJLENBQUMsQ0FBQyxDQUFDRSxVQUFVLENBQUMsQ0FBQyxHQUFHUixHQUFHLENBQUMsQ0FBQztFQUNqRixPQUFPUyxhQUFJLENBQ1JDLE1BQU0sQ0FBQzdMLE1BQU0sRUFBRVksYUFBSSxDQUFDa0wsTUFBTSxDQUFDOUwsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFFO0lBQ25EK0wsS0FBSyxFQUFFZCxTQUFTO0lBQ2hCZSxNQUFNLEVBQUUxTCxhQUFLLENBQUMyTCxPQUFPLENBQUNULFVBQVU7RUFDbEMsQ0FBQyxDQUFDLENBQ0RVLEtBQUssQ0FBQ3RSLENBQUMsSUFBSTtJQUNWLElBQUlBLENBQUMsQ0FBQ3lGLElBQUksSUFBSUMsYUFBSyxDQUFDQyxLQUFLLENBQUM0TCxlQUFlLEVBQUU7TUFDekMsTUFBTSxJQUFJN0wsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDNkwsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUM7SUFDM0U7SUFDQSxNQUFNeFIsQ0FBQztFQUNULENBQUMsQ0FBQztBQUNOO0FBRUEsU0FBU2tFLGNBQWNBLENBQUM1RCxHQUFHLEVBQUU4QixHQUFHLEVBQUU7RUFDaENBLEdBQUcsQ0FBQ21ELE1BQU0sQ0FBQyxHQUFHLENBQUM7RUFDZm5ELEdBQUcsQ0FBQ3dLLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztBQUNyQztBQUVBLFNBQVM5SixnQkFBZ0JBLENBQUN4QyxHQUFHLEVBQUU4QixHQUFHLEVBQUU7RUFDbENBLEdBQUcsQ0FBQ21ELE1BQU0sQ0FBQyxHQUFHLENBQUM7RUFDZm5ELEdBQUcsQ0FBQ29ELElBQUksQ0FBQztJQUFFQyxJQUFJLEVBQUVDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDOEwsWUFBWTtJQUFFNUwsS0FBSyxFQUFFO0VBQThCLENBQUMsQ0FBQztBQUNwRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZMLHVCQUF1QkEsQ0FBQ3BSLEdBQUcsRUFBRThCLEdBQUcsRUFBRUMsSUFBSSxFQUFFO0VBQ3REL0IsR0FBRyxDQUFDSSxHQUFHLEdBQUdKLEdBQUcsQ0FBQ0ksR0FBRyxDQUFDdUssVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHM0ssR0FBRyxDQUFDSSxHQUFHLENBQUNrSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUd0SSxHQUFHLENBQUNJLEdBQUc7RUFDbkUyQixJQUFJLENBQUMsQ0FBQztBQUNSIiwiaWdub3JlTGlzdCI6W119
|