parse-server 6.3.0-alpha.2 → 6.3.0-alpha.4
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/lib/Adapters/Auth/AuthAdapter.js +4 -2
- package/lib/Adapters/Auth/index.js +7 -6
- package/lib/Adapters/Auth/mfa.js +246 -0
- package/lib/Auth.js +13 -5
- package/lib/Controllers/DatabaseController.js +11 -5
- package/lib/Deprecator/Deprecations.js +4 -1
- package/lib/Options/Definitions.js +8 -3
- package/lib/Options/docs.js +3 -2
- package/lib/Options/index.js +1 -1
- package/lib/RestWrite.js +10 -15
- package/lib/Routers/FilesRouter.js +7 -9
- package/lib/Routers/FunctionsRouter.js +8 -8
- package/lib/Routers/UsersRouter.js +2 -2
- package/lib/Utils.js +12 -1
- package/lib/index.js +1 -1
- package/package.json +3 -2
|
@@ -27,7 +27,9 @@ class AuthAdapter {
|
|
|
27
27
|
* Usage policy
|
|
28
28
|
* @type {AuthPolicy}
|
|
29
29
|
*/
|
|
30
|
-
this.policy
|
|
30
|
+
if (!this.policy) {
|
|
31
|
+
this.policy = 'default';
|
|
32
|
+
}
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
35
|
* @param appIds The specified app IDs in the configuration
|
|
@@ -121,4 +123,4 @@ class AuthAdapter {
|
|
|
121
123
|
exports.AuthAdapter = AuthAdapter;
|
|
122
124
|
var _default = AuthAdapter;
|
|
123
125
|
exports.default = _default;
|
|
124
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdXRoQWRhcHRlciIsImNvbnN0cnVjdG9yIiwicG9saWN5IiwidmFsaWRhdGVBcHBJZCIsImFwcElkcyIsImF1dGhEYXRhIiwib3B0aW9ucyIsInJlcXVlc3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInZhbGlkYXRlQXV0aERhdGEiLCJ2YWxpZGF0ZVNldFVwIiwicmVxIiwidmFsaWRhdGVMb2dpbiIsInZhbGlkYXRlVXBkYXRlIiwiY2hhbGxlbmdlIiwiY2hhbGxlbmdlRGF0YSIsImFmdGVyRmluZCIsInZhbGlkYXRlT3B0aW9ucyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL0F1dGhBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiKi9cblxuLyoqXG4gKiBAaW50ZXJmYWNlIFBhcnNlQXV0aFJlc3BvbnNlXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IFtkb05vdFNhdmVdIElmIHRydWUsIFBhcnNlIFNlcnZlciB3aWxsIG5vdCBzYXZlIHByb3ZpZGVkIGF1dGhEYXRhLlxuICogQHByb3BlcnR5IHtPYmplY3R9IFtyZXNwb25zZV0gSWYgc2V0LCBQYXJzZSBTZXJ2ZXIgd2lsbCBzZW5kIHRoZSBwcm92aWRlZCByZXNwb25zZSB0byB0aGUgY2xpZW50IHVuZGVyIGF1dGhEYXRhUmVzcG9uc2VcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc2F2ZV0gSWYgc2V0LCBQYXJzZSBTZXJ2ZXIgd2lsbCBzYXZlIHRoZSBvYmplY3QgcHJvdmlkZWQgaW50byB0aGlzIGtleSwgaW5zdGVhZCBvZiBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAqL1xuXG4vKipcbiAqIEF1dGhQb2xpY3lcbiAqIGRlZmF1bHQ6IGNhbiBiZSBjb21iaW5lZCB3aXRoIE9ORSBhZGRpdGlvbmFsIGF1dGggcHJvdmlkZXIgaWYgYWRkaXRpb25hbCBjb25maWd1cmVkIG9uIHVzZXJcbiAqIGFkZGl0aW9uYWw6IGNvdWxkIGJlIG9ubHkgdXNlZCB3aXRoIGEgZGVmYXVsdCBwb2xpY3kgYXV0aCBwcm92aWRlclxuICogc29sbzogV2lsbCBpZ25vcmUgQUxMIGFkZGl0aW9uYWwgcHJvdmlkZXJzIGlmIGFkZGl0aW9uYWwgY29uZmlndXJlZCBvbiB1c2VyXG4gKiBAdHlwZWRlZiB7XCJkZWZhdWx0XCIgfCBcImFkZGl0aW9uYWxcIiB8IFwic29sb1wifSBBdXRoUG9saWN5XG4gKi9cblxuZXhwb3J0IGNsYXNzIEF1dGhBZGFwdGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogVXNhZ2UgcG9saWN5XG4gICAgICogQHR5cGUge0F1dGhQb2xpY3l9XG4gICAgICovXG4gICAgaWYgKCF0aGlzLnBvbGljeSkge1xuICAgICAgdGhpcy5wb2xpY3kgPSAnZGVmYXVsdCc7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gYXBwSWRzIFRoZSBzcGVjaWZpZWQgYXBwIElEcyBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIHsoUHJvbWlzZTx1bmRlZmluZWR8dm9pZD58dm9pZHx1bmRlZmluZWQpfSByZXNvbHZlcyBvciByZXR1cm5zIGlmIHRoZSBhcHBsaWNhdGlvbklkIGlzIHZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMZWdhY3kgdXNhZ2UsIGlmIHByb3ZpZGVkIGl0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyIGlzIHRvdWNoZWQgKHNpZ251cC91cGRhdGUvbG9naW4pXG4gICAqIG90aGVyd2lzZSB5b3Ugc2hvdWxkIGltcGxlbWVudCB2YWxpZGF0ZVNldHVwLCB2YWxpZGF0ZUxvZ2luIGFuZCB2YWxpZGF0ZVVwZGF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIHJlcXVlc3QsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgZm9yIHRoZSBmaXJzdCB0aW1lIHRoaXMgYXV0aCBwcm92aWRlclxuICAgKiBjb3VsZCBiZSBhIHJlZ2lzdGVyIG9yIHRoZSB1c2VyIGFkZGluZyBhIG5ldyBhdXRoIHNlcnZpY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhZGRpdGlvbmFsIGFkYXB0ZXIgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVNldFVwKGF1dGhEYXRhLCByZXEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyZWQgd2hlbiB1c2VyIHByb3ZpZGUgYXV0aERhdGEgcmVsYXRlZCB0byB0aGlzIHByb3ZpZGVyXG4gICAqIFRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4gYW5kIGhhcyBhbHJlYWR5IHNldCB0aGlzIHByb3ZpZGVyIGJlZm9yZVxuICAgKiBAcGFyYW0ge09iamVjdH0gYXV0aERhdGEgVGhlIGNsaWVudCBwcm92aWRlZCBhdXRoRGF0YVxuICAgKiBAcGFyYW0ge1BhcnNlLkNsb3VkLlRyaWdnZXJSZXF1ZXN0fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFBhcnNlQXV0aFJlc3BvbnNlfHZvaWR8dW5kZWZpbmVkPn1cbiAgICovXG4gIHZhbGlkYXRlTG9naW4oYXV0aERhdGEsIHJlcSwgb3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIHVzZXIgcHJvdmlkZSBhdXRoRGF0YSByZWxhdGVkIHRvIHRoaXMgcHJvdmlkZXJcbiAgICogdGhlIHVzZXIgaXMgbG9nZ2VkIGluIGFuZCBoYXMgYWxyZWFkeSBzZXQgdGhpcyBwcm92aWRlciBiZWZvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIFRoZSBjbGllbnQgcHJvdmlkZWQgYXV0aERhdGFcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxQYXJzZUF1dGhSZXNwb25zZXx2b2lkfHVuZGVmaW5lZD59XG4gICAqL1xuICB2YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgcmVxLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcmVkIGluIHByZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzIGlmIG5lZWRlZCAobGlrZSB3ZWJhdXRobiwgU01TIE9UUClcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYWxsZW5nZURhdGEgRGF0YSBwcm92aWRlZCBieSB0aGUgY2xpZW50XG4gICAqIEBwYXJhbSB7KE9iamVjdHx1bmRlZmluZWQpfSBhdXRoRGF0YSBBdXRoIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgY2FuIGJlIHVzZWQgZm9yIHZhbGlkYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgYWRkaXRpb25hbCBhZGFwdGVyIG9wdGlvbnNcbiAgICogQHBhcmFtIHtQYXJzZS5DbG91ZC5UcmlnZ2VyUmVxdWVzdH0gcmVxdWVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcywgcmVzb2x2ZWQgdmFsdWUgd2lsbCBiZSBhZGRlZCB0byBjaGFsbGVuZ2UgcmVzcG9uc2UgdW5kZXIgY2hhbGxlbmdlIGtleVxuICAgKi9cbiAgY2hhbGxlbmdlKGNoYWxsZW5nZURhdGEsIGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcmVkIHdoZW4gYXV0aCBkYXRhIGlzIGZldGNoZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IGF1dGhEYXRhIGF1dGhEYXRhXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGFkZGl0aW9uYWwgYWRhcHRlciBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IEFueSBvdmVycmlkZXMgcmVxdWlyZWQgdG8gYXV0aERhdGFcbiAgICovXG4gIGFmdGVyRmluZChhdXRoRGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIHRoZSBhZGFwdGVyIGlzIGZpcnN0IGF0dGFjaGVkIHRvIFBhcnNlIFNlcnZlclxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBBZGFwdGVyIE9wdGlvbnNcbiAgICovXG4gIHZhbGlkYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgLyogKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdXRoQWRhcHRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLE1BQU1BLFdBQVcsQ0FBQztFQUN2QkMsV0FBVyxHQUFHO0lBQ1o7QUFDSjtBQUNBO0FBQ0E7SUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDaEIsSUFBSSxDQUFDQSxNQUFNLEdBQUcsU0FBUztJQUN6QjtFQUNGO0VBQ0E7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsYUFBYSxDQUFDQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxPQUFPLEVBQUU7SUFDaEQsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUI7O0VBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFQyxnQkFBZ0IsQ0FBQ0wsUUFBUSxFQUFFRSxPQUFPLEVBQUVELE9BQU8sRUFBRTtJQUMzQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VFLGFBQWEsQ0FBQ04sUUFBUSxFQUFFTyxHQUFHLEVBQUVOLE9BQU8sRUFBRTtJQUNwQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VJLGFBQWEsQ0FBQ1IsUUFBUSxFQUFFTyxHQUFHLEVBQUVOLE9BQU8sRUFBRTtJQUNwQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VLLGNBQWMsQ0FBQ1QsUUFBUSxFQUFFTyxHQUFHLEVBQUVOLE9BQU8sRUFBRTtJQUNyQyxPQUFPRSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0VNLFNBQVMsQ0FBQ0MsYUFBYSxFQUFFWCxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO0lBQ25ELE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFUSxTQUFTLENBQUNaLFFBQVEsRUFBRUMsT0FBTyxFQUFFO0lBQzNCLE9BQU9FLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0VBQ0VTLGVBQWUsQ0FBQ1osT0FBTyxFQUFFO0lBQ3ZCO0VBQUE7QUFFSjtBQUFDO0FBQUEsZUFFY04sV0FBVztBQUFBIn0=
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var _AdapterLoader = _interopRequireDefault(require("../AdapterLoader"));
|
|
4
4
|
var _node = _interopRequireDefault(require("parse/node"));
|
|
5
5
|
var _AuthAdapter = _interopRequireDefault(require("./AuthAdapter"));
|
|
6
|
+
var _mfa = _interopRequireDefault(require("./mfa"));
|
|
6
7
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
7
8
|
const apple = require('./apple');
|
|
8
9
|
const gcenter = require('./gcenter');
|
|
@@ -44,6 +45,7 @@ const providers = {
|
|
|
44
45
|
instagram,
|
|
45
46
|
linkedin,
|
|
46
47
|
meetup,
|
|
48
|
+
mfa: _mfa.default,
|
|
47
49
|
google,
|
|
48
50
|
github,
|
|
49
51
|
twitter,
|
|
@@ -74,7 +76,7 @@ function authDataValidator(provider, adapter, appIds, options) {
|
|
|
74
76
|
if (appIds && typeof adapter.validateAppId === 'function') {
|
|
75
77
|
await Promise.resolve(adapter.validateAppId(appIds, authData, options, requestObject));
|
|
76
78
|
}
|
|
77
|
-
if (adapter.policy && !authAdapterPolicies[adapter.policy]) {
|
|
79
|
+
if (adapter.policy && !authAdapterPolicies[adapter.policy] && typeof adapter.policy !== 'function') {
|
|
78
80
|
throw new _node.default.Error(_node.default.Error.OTHER_CAUSE, 'AuthAdapter policy is not configured correctly. The value must be either "solo", "additional", "default" or undefined (will be handled as "default")');
|
|
79
81
|
}
|
|
80
82
|
if (typeof adapter.validateAuthData === 'function') {
|
|
@@ -200,18 +202,17 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
|
|
|
200
202
|
return;
|
|
201
203
|
}
|
|
202
204
|
const {
|
|
203
|
-
adapter
|
|
204
|
-
afterFind
|
|
205
|
-
},
|
|
205
|
+
adapter,
|
|
206
206
|
providerOptions
|
|
207
207
|
} = authAdapter;
|
|
208
|
+
const afterFind = adapter.afterFind;
|
|
208
209
|
if (afterFind && typeof afterFind === 'function') {
|
|
209
210
|
const requestObject = {
|
|
210
211
|
ip: req.config.ip,
|
|
211
212
|
user: req.auth.user,
|
|
212
213
|
master: req.auth.isMaster
|
|
213
214
|
};
|
|
214
|
-
const result = afterFind(requestObject, authData[provider], providerOptions);
|
|
215
|
+
const result = afterFind.call(adapter, requestObject, authData[provider], providerOptions);
|
|
215
216
|
if (result) {
|
|
216
217
|
authData[provider] = result;
|
|
217
218
|
}
|
|
@@ -225,4 +226,4 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
|
|
|
225
226
|
});
|
|
226
227
|
};
|
|
227
228
|
module.exports.loadAuthAdapter = loadAuthAdapter;
|
|
228
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBsZSIsInJlcXVpcmUiLCJnY2VudGVyIiwiZ3BnYW1lcyIsImZhY2Vib29rIiwiaW5zdGFncmFtIiwibGlua2VkaW4iLCJtZWV0dXAiLCJnb29nbGUiLCJnaXRodWIiLCJ0d2l0dGVyIiwic3BvdGlmeSIsImRpZ2l0cyIsImphbnJhaW5lbmdhZ2UiLCJqYW5yYWluY2FwdHVyZSIsImxpbmUiLCJ2a29udGFrdGUiLCJxcSIsIndlY2hhdCIsIndlaWJvIiwib2F1dGgyIiwicGhhbnRhdXRoIiwibWljcm9zb2Z0Iiwia2V5Y2xvYWsiLCJsZGFwIiwiYW5vbnltb3VzIiwidmFsaWRhdGVBdXRoRGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRhdGVBcHBJZCIsInByb3ZpZGVycyIsImF1dGhBZGFwdGVyUG9saWNpZXMiLCJkZWZhdWx0Iiwic29sbyIsImFkZGl0aW9uYWwiLCJhdXRoRGF0YVZhbGlkYXRvciIsInByb3ZpZGVyIiwiYWRhcHRlciIsImFwcElkcyIsIm9wdGlvbnMiLCJhdXRoRGF0YSIsInJlcSIsInVzZXIiLCJyZXF1ZXN0T2JqZWN0IiwicG9saWN5IiwiUGFyc2UiLCJFcnJvciIsIk9USEVSX0NBVVNFIiwidmFsaWRhdGVTZXRVcCIsInZhbGlkYXRlTG9naW4iLCJ2YWxpZGF0ZVVwZGF0ZSIsImlzTG9nZ2VkSW4iLCJhdXRoIiwiaWQiLCJpc01hc3RlciIsImhhc0F1dGhEYXRhQ29uZmlndXJlZCIsImdldCIsIm1ldGhvZCIsInZhbGlkYXRvciIsImxvYWRBdXRoQWRhcHRlciIsImF1dGhPcHRpb25zIiwiZGVmYXVsdEFkYXB0ZXIiLCJwcm92aWRlck9wdGlvbnMiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJBdXRoQWRhcHRlciIsImFzc2lnbiIsImtleXMiLCJkZWZhdWx0QXV0aEFkYXB0ZXIiLCJmb3JFYWNoIiwia2V5IiwiZXhpc3RpbmciLCJ0b1N0cmluZyIsInVuZGVmaW5lZCIsIm9wdGlvbmFsQWRhcHRlciIsImxvYWRBZGFwdGVyIiwidmFsaWRhdGVPcHRpb25zIiwibW9kdWxlIiwiZXhwb3J0cyIsImVuYWJsZUFub255bW91c1VzZXJzIiwiX2VuYWJsZUFub255bW91c1VzZXJzIiwic2V0RW5hYmxlQW5vbnltb3VzVXNlcnMiLCJlbmFibGUiLCJnZXRWYWxpZGF0b3JGb3JQcm92aWRlciIsImF1dGhBZGFwdGVyIiwicnVuQWZ0ZXJGaW5kIiwiYWRhcHRlcnMiLCJhbGwiLCJtYXAiLCJhZnRlckZpbmQiLCJpcCIsImNvbmZpZyIsIm1hc3RlciIsInJlc3VsdCIsImZyZWV6ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2FkQWRhcHRlciBmcm9tICcuLi9BZGFwdGVyTG9hZGVyJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBBdXRoQWRhcHRlciBmcm9tICcuL0F1dGhBZGFwdGVyJztcblxuY29uc3QgYXBwbGUgPSByZXF1aXJlKCcuL2FwcGxlJyk7XG5jb25zdCBnY2VudGVyID0gcmVxdWlyZSgnLi9nY2VudGVyJyk7XG5jb25zdCBncGdhbWVzID0gcmVxdWlyZSgnLi9ncGdhbWVzJyk7XG5jb25zdCBmYWNlYm9vayA9IHJlcXVpcmUoJy4vZmFjZWJvb2snKTtcbmNvbnN0IGluc3RhZ3JhbSA9IHJlcXVpcmUoJy4vaW5zdGFncmFtJyk7XG5jb25zdCBsaW5rZWRpbiA9IHJlcXVpcmUoJy4vbGlua2VkaW4nKTtcbmNvbnN0IG1lZXR1cCA9IHJlcXVpcmUoJy4vbWVldHVwJyk7XG5jb25zdCBnb29nbGUgPSByZXF1aXJlKCcuL2dvb2dsZScpO1xuY29uc3QgZ2l0aHViID0gcmVxdWlyZSgnLi9naXRodWInKTtcbmNvbnN0IHR3aXR0ZXIgPSByZXF1aXJlKCcuL3R3aXR0ZXInKTtcbmNvbnN0IHNwb3RpZnkgPSByZXF1aXJlKCcuL3Nwb3RpZnknKTtcbmNvbnN0IGRpZ2l0cyA9IHJlcXVpcmUoJy4vdHdpdHRlcicpOyAvLyBkaWdpdHMgdG9rZW5zIGFyZSB2YWxpZGF0ZWQgYnkgdHdpdHRlclxuY29uc3QgamFucmFpbmVuZ2FnZSA9IHJlcXVpcmUoJy4vamFucmFpbmVuZ2FnZScpO1xuY29uc3QgamFucmFpbmNhcHR1cmUgPSByZXF1aXJlKCcuL2phbnJhaW5jYXB0dXJlJyk7XG5jb25zdCBsaW5lID0gcmVxdWlyZSgnLi9saW5lJyk7XG5jb25zdCB2a29udGFrdGUgPSByZXF1aXJlKCcuL3Zrb250YWt0ZScpO1xuY29uc3QgcXEgPSByZXF1aXJlKCcuL3FxJyk7XG5jb25zdCB3ZWNoYXQgPSByZXF1aXJlKCcuL3dlY2hhdCcpO1xuY29uc3Qgd2VpYm8gPSByZXF1aXJlKCcuL3dlaWJvJyk7XG5jb25zdCBvYXV0aDIgPSByZXF1aXJlKCcuL29hdXRoMicpO1xuY29uc3QgcGhhbnRhdXRoID0gcmVxdWlyZSgnLi9waGFudGF1dGgnKTtcbmNvbnN0IG1pY3Jvc29mdCA9IHJlcXVpcmUoJy4vbWljcm9zb2Z0Jyk7XG5jb25zdCBrZXljbG9hayA9IHJlcXVpcmUoJy4va2V5Y2xvYWsnKTtcbmNvbnN0IGxkYXAgPSByZXF1aXJlKCcuL2xkYXAnKTtcblxuY29uc3QgYW5vbnltb3VzID0ge1xuICB2YWxpZGF0ZUF1dGhEYXRhOiAoKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9LFxuICB2YWxpZGF0ZUFwcElkOiAoKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9LFxufTtcblxuY29uc3QgcHJvdmlkZXJzID0ge1xuICBhcHBsZSxcbiAgZ2NlbnRlcixcbiAgZ3BnYW1lcyxcbiAgZmFjZWJvb2ssXG4gIGluc3RhZ3JhbSxcbiAgbGlua2VkaW4sXG4gIG1lZXR1cCxcbiAgZ29vZ2xlLFxuICBnaXRodWIsXG4gIHR3aXR0ZXIsXG4gIHNwb3RpZnksXG4gIGFub255bW91cyxcbiAgZGlnaXRzLFxuICBqYW5yYWluZW5nYWdlLFxuICBqYW5yYWluY2FwdHVyZSxcbiAgbGluZSxcbiAgdmtvbnRha3RlLFxuICBxcSxcbiAgd2VjaGF0LFxuICB3ZWlibyxcbiAgcGhhbnRhdXRoLFxuICBtaWNyb3NvZnQsXG4gIGtleWNsb2FrLFxuICBsZGFwLFxufTtcblxuLy8gSW5kZXhlZCBhdXRoIHBvbGljaWVzXG5jb25zdCBhdXRoQWRhcHRlclBvbGljaWVzID0ge1xuICBkZWZhdWx0OiB0cnVlLFxuICBzb2xvOiB0cnVlLFxuICBhZGRpdGlvbmFsOiB0cnVlLFxufTtcblxuZnVuY3Rpb24gYXV0aERhdGFWYWxpZGF0b3IocHJvdmlkZXIsIGFkYXB0ZXIsIGFwcElkcywgb3B0aW9ucykge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKGF1dGhEYXRhLCByZXEsIHVzZXIsIHJlcXVlc3RPYmplY3QpIHtcbiAgICBpZiAoYXBwSWRzICYmIHR5cGVvZiBhZGFwdGVyLnZhbGlkYXRlQXBwSWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShhZGFwdGVyLnZhbGlkYXRlQXBwSWQoYXBwSWRzLCBhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCkpO1xuICAgIH1cbiAgICBpZiAoYWRhcHRlci5wb2xpY3kgJiYgIWF1dGhBZGFwdGVyUG9saWNpZXNbYWRhcHRlci5wb2xpY3ldKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAnQXV0aEFkYXB0ZXIgcG9saWN5IGlzIG5vdCBjb25maWd1cmVkIGNvcnJlY3RseS4gVGhlIHZhbHVlIG11c3QgYmUgZWl0aGVyIFwic29sb1wiLCBcImFkZGl0aW9uYWxcIiwgXCJkZWZhdWx0XCIgb3IgdW5kZWZpbmVkICh3aWxsIGJlIGhhbmRsZWQgYXMgXCJkZWZhdWx0XCIpJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhZGFwdGVyLnZhbGlkYXRlQXV0aERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBhZGFwdGVyLnZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgYWRhcHRlci52YWxpZGF0ZVNldFVwICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2YgYWRhcHRlci52YWxpZGF0ZUxvZ2luICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2YgYWRhcHRlci52YWxpZGF0ZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSxcbiAgICAgICAgJ0FkYXB0ZXIgaXMgbm90IGNvbmZpZ3VyZWQuIEltcGxlbWVudCBlaXRoZXIgdmFsaWRhdGVBdXRoRGF0YSBvciBhbGwgb2YgdGhlIGZvbGxvd2luZzogdmFsaWRhdGVTZXRVcCwgdmFsaWRhdGVMb2dpbiBhbmQgdmFsaWRhdGVVcGRhdGUnXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBXaGVuIG1hc3RlcktleSBpcyBkZXRlY3RlZCwgd2Ugc2hvdWxkIHRyaWdnZXIgYSBsb2dnZWQgaW4gdXNlclxuICAgIGNvbnN0IGlzTG9nZ2VkSW4gPVxuICAgICAgKHJlcS5hdXRoLnVzZXIgJiYgdXNlciAmJiByZXEuYXV0aC51c2VyLmlkID09PSB1c2VyLmlkKSB8fCAodXNlciAmJiByZXEuYXV0aC5pc01hc3Rlcik7XG4gICAgbGV0IGhhc0F1dGhEYXRhQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHVzZXIgJiYgdXNlci5nZXQoJ2F1dGhEYXRhJykgJiYgdXNlci5nZXQoJ2F1dGhEYXRhJylbcHJvdmlkZXJdKSB7XG4gICAgICBoYXNBdXRoRGF0YUNvbmZpZ3VyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICAvLyBVc2VyIGlzIHVwZGF0aW5nIHRoZWlyIGF1dGhEYXRhXG4gICAgICBpZiAoaGFzQXV0aERhdGFDb25maWd1cmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWV0aG9kOiAndmFsaWRhdGVVcGRhdGUnLFxuICAgICAgICAgIHZhbGlkYXRvcjogKCkgPT4gYWRhcHRlci52YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBTZXQgdXAgaWYgdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSB0aGUgcHJvdmlkZXIgY29uZmlndXJlZFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAndmFsaWRhdGVTZXRVcCcsXG4gICAgICAgIHZhbGlkYXRvcjogKCkgPT4gYWRhcHRlci52YWxpZGF0ZVNldFVwKGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTm90IGxvZ2dlZCBpbiBhbmQgYXV0aERhdGEgaXMgY29uZmlndXJlZCBvbiB0aGUgdXNlclxuICAgIGlmIChoYXNBdXRoRGF0YUNvbmZpZ3VyZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ3ZhbGlkYXRlTG9naW4nLFxuICAgICAgICB2YWxpZGF0b3I6ICgpID0+IGFkYXB0ZXIudmFsaWRhdGVMb2dpbihhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFVzZXIgbm90IGxvZ2dlZCBpbiBhbmQgdGhlIHByb3ZpZGVyIGlzIG5vdCBzZXQgdXAsIGZvciBleGFtcGxlIHdoZW4gYSBuZXcgdXNlclxuICAgIC8vIHNpZ25zIHVwIG9yIGFuIGV4aXN0aW5nIHVzZXIgdXNlcyBhIG5ldyBhdXRoIHByb3ZpZGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogJ3ZhbGlkYXRlU2V0VXAnLFxuICAgICAgdmFsaWRhdG9yOiAoKSA9PiBhZGFwdGVyLnZhbGlkYXRlU2V0VXAoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvYWRBdXRoQWRhcHRlcihwcm92aWRlciwgYXV0aE9wdGlvbnMpIHtcbiAgLy8gcHJvdmlkZXJzIGFyZSBhdXRoIHByb3ZpZGVycyBpbXBsZW1lbnRlZCBieSBkZWZhdWx0XG4gIGxldCBkZWZhdWx0QWRhcHRlciA9IHByb3ZpZGVyc1twcm92aWRlcl07XG4gIC8vIGF1dGhPcHRpb25zIGNhbiBjb250YWluIGNvbXBsZXRlIGN1c3RvbSBhdXRoIGFkYXB0ZXJzIG9yXG4gIC8vIGEgZGVmYXVsdCBhdXRoIGFkYXB0ZXIgbGlrZSBGYWNlYm9va1xuICBjb25zdCBwcm92aWRlck9wdGlvbnMgPSBhdXRoT3B0aW9uc1twcm92aWRlcl07XG4gIGlmIChcbiAgICBwcm92aWRlck9wdGlvbnMgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdmlkZXJPcHRpb25zLCAnb2F1dGgyJykgJiZcbiAgICBwcm92aWRlck9wdGlvbnNbJ29hdXRoMiddID09PSB0cnVlXG4gICkge1xuICAgIGRlZmF1bHRBZGFwdGVyID0gb2F1dGgyO1xuICB9XG5cbiAgLy8gRGVmYXVsdCBwcm92aWRlciBub3QgZm91bmQgYW5kIGEgY3VzdG9tIGF1dGggcHJvdmlkZXIgd2FzIG5vdCBwcm92aWRlZFxuICBpZiAoIWRlZmF1bHRBZGFwdGVyICYmICFwcm92aWRlck9wdGlvbnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID1cbiAgICBkZWZhdWx0QWRhcHRlciBpbnN0YW5jZW9mIEF1dGhBZGFwdGVyID8gZGVmYXVsdEFkYXB0ZXIgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0QWRhcHRlcik7XG4gIGNvbnN0IGtleXMgPSBbXG4gICAgJ3ZhbGlkYXRlQXV0aERhdGEnLFxuICAgICd2YWxpZGF0ZUFwcElkJyxcbiAgICAndmFsaWRhdGVTZXRVcCcsXG4gICAgJ3ZhbGlkYXRlTG9naW4nLFxuICAgICd2YWxpZGF0ZVVwZGF0ZScsXG4gICAgJ2NoYWxsZW5nZScsXG4gICAgJ3ZhbGlkYXRlT3B0aW9ucycsXG4gICAgJ3BvbGljeScsXG4gICAgJ2FmdGVyRmluZCcsXG4gIF07XG4gIGNvbnN0IGRlZmF1bHRBdXRoQWRhcHRlciA9IG5ldyBBdXRoQWRhcHRlcigpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGFkYXB0ZXI/LltrZXldO1xuICAgIGlmIChcbiAgICAgIGV4aXN0aW5nICYmXG4gICAgICB0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIGV4aXN0aW5nLnRvU3RyaW5nKCkgPT09IGRlZmF1bHRBdXRoQWRhcHRlcltrZXldLnRvU3RyaW5nKClcbiAgICApIHtcbiAgICAgIGFkYXB0ZXJba2V5XSA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgYXBwSWRzID0gcHJvdmlkZXJPcHRpb25zID8gcHJvdmlkZXJPcHRpb25zLmFwcElkcyA6IHVuZGVmaW5lZDtcblxuICAvLyBUcnkgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kc1xuICBpZiAocHJvdmlkZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgb3B0aW9uYWxBZGFwdGVyID0gbG9hZEFkYXB0ZXIocHJvdmlkZXJPcHRpb25zLCB1bmRlZmluZWQsIHByb3ZpZGVyT3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbmFsQWRhcHRlcikge1xuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25hbEFkYXB0ZXJba2V5XSkge1xuICAgICAgICAgIGFkYXB0ZXJba2V5XSA9IG9wdGlvbmFsQWRhcHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGFkYXB0ZXIudmFsaWRhdGVPcHRpb25zKSB7XG4gICAgYWRhcHRlci52YWxpZGF0ZU9wdGlvbnMocHJvdmlkZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiB7IGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGF1dGhPcHRpb25zID0ge30sIGVuYWJsZUFub255bW91c1VzZXJzID0gdHJ1ZSkge1xuICBsZXQgX2VuYWJsZUFub255bW91c1VzZXJzID0gZW5hYmxlQW5vbnltb3VzVXNlcnM7XG4gIGNvbnN0IHNldEVuYWJsZUFub255bW91c1VzZXJzID0gZnVuY3Rpb24gKGVuYWJsZSkge1xuICAgIF9lbmFibGVBbm9ueW1vdXNVc2VycyA9IGVuYWJsZTtcbiAgfTtcbiAgLy8gVG8gaGFuZGxlIHRoZSB0ZXN0IGNhc2VzIG9uIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIgPT09ICdhbm9ueW1vdXMnICYmICFfZW5hYmxlQW5vbnltb3VzVXNlcnMpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkYXRvcjogdW5kZWZpbmVkIH07XG4gICAgfVxuICAgIGNvbnN0IGF1dGhBZGFwdGVyID0gbG9hZEF1dGhBZGFwdGVyKHByb3ZpZGVyLCBhdXRoT3B0aW9ucyk7XG4gICAgaWYgKCFhdXRoQWRhcHRlcikgcmV0dXJuO1xuICAgIGNvbnN0IHsgYWRhcHRlciwgYXBwSWRzLCBwcm92aWRlck9wdGlvbnMgfSA9IGF1dGhBZGFwdGVyO1xuICAgIHJldHVybiB7IHZhbGlkYXRvcjogYXV0aERhdGFWYWxpZGF0b3IocHJvdmlkZXIsIGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zKSwgYWRhcHRlciB9O1xuICB9O1xuXG4gIGNvbnN0IHJ1bkFmdGVyRmluZCA9IGFzeW5jIChyZXEsIGF1dGhEYXRhKSA9PiB7XG4gICAgaWYgKCFhdXRoRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVycyA9IE9iamVjdC5rZXlzKGF1dGhEYXRhKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFkYXB0ZXJzLm1hcChhc3luYyBwcm92aWRlciA9PiB7XG4gICAgICAgIGNvbnN0IGF1dGhBZGFwdGVyID0gZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgICAgICBpZiAoIWF1dGhBZGFwdGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBhZGFwdGVyOiB7IGFmdGVyRmluZCB9LFxuICAgICAgICAgIHByb3ZpZGVyT3B0aW9ucyxcbiAgICAgICAgfSA9IGF1dGhBZGFwdGVyO1xuICAgICAgICBpZiAoYWZ0ZXJGaW5kICYmIHR5cGVvZiBhZnRlckZpbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0ge1xuICAgICAgICAgICAgaXA6IHJlcS5jb25maWcuaXAsXG4gICAgICAgICAgICB1c2VyOiByZXEuYXV0aC51c2VyLFxuICAgICAgICAgICAgbWFzdGVyOiByZXEuYXV0aC5pc01hc3RlcixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGFmdGVyRmluZChyZXF1ZXN0T2JqZWN0LCBhdXRoRGF0YVtwcm92aWRlcl0sIHByb3ZpZGVyT3B0aW9ucyk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgYXV0aERhdGFbcHJvdmlkZXJdID0gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBnZXRWYWxpZGF0b3JGb3JQcm92aWRlcixcbiAgICBzZXRFbmFibGVBbm9ueW1vdXNVc2VycyxcbiAgICBydW5BZnRlckZpbmQsXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMubG9hZEF1dGhB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
|
|
229
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBsZSIsInJlcXVpcmUiLCJnY2VudGVyIiwiZ3BnYW1lcyIsImZhY2Vib29rIiwiaW5zdGFncmFtIiwibGlua2VkaW4iLCJtZWV0dXAiLCJnb29nbGUiLCJnaXRodWIiLCJ0d2l0dGVyIiwic3BvdGlmeSIsImRpZ2l0cyIsImphbnJhaW5lbmdhZ2UiLCJqYW5yYWluY2FwdHVyZSIsImxpbmUiLCJ2a29udGFrdGUiLCJxcSIsIndlY2hhdCIsIndlaWJvIiwib2F1dGgyIiwicGhhbnRhdXRoIiwibWljcm9zb2Z0Iiwia2V5Y2xvYWsiLCJsZGFwIiwiYW5vbnltb3VzIiwidmFsaWRhdGVBdXRoRGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsaWRhdGVBcHBJZCIsInByb3ZpZGVycyIsIm1mYSIsImF1dGhBZGFwdGVyUG9saWNpZXMiLCJkZWZhdWx0Iiwic29sbyIsImFkZGl0aW9uYWwiLCJhdXRoRGF0YVZhbGlkYXRvciIsInByb3ZpZGVyIiwiYWRhcHRlciIsImFwcElkcyIsIm9wdGlvbnMiLCJhdXRoRGF0YSIsInJlcSIsInVzZXIiLCJyZXF1ZXN0T2JqZWN0IiwicG9saWN5IiwiUGFyc2UiLCJFcnJvciIsIk9USEVSX0NBVVNFIiwidmFsaWRhdGVTZXRVcCIsInZhbGlkYXRlTG9naW4iLCJ2YWxpZGF0ZVVwZGF0ZSIsImlzTG9nZ2VkSW4iLCJhdXRoIiwiaWQiLCJpc01hc3RlciIsImhhc0F1dGhEYXRhQ29uZmlndXJlZCIsImdldCIsIm1ldGhvZCIsInZhbGlkYXRvciIsImxvYWRBdXRoQWRhcHRlciIsImF1dGhPcHRpb25zIiwiZGVmYXVsdEFkYXB0ZXIiLCJwcm92aWRlck9wdGlvbnMiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJBdXRoQWRhcHRlciIsImFzc2lnbiIsImtleXMiLCJkZWZhdWx0QXV0aEFkYXB0ZXIiLCJmb3JFYWNoIiwia2V5IiwiZXhpc3RpbmciLCJ0b1N0cmluZyIsInVuZGVmaW5lZCIsIm9wdGlvbmFsQWRhcHRlciIsImxvYWRBZGFwdGVyIiwidmFsaWRhdGVPcHRpb25zIiwibW9kdWxlIiwiZXhwb3J0cyIsImVuYWJsZUFub255bW91c1VzZXJzIiwiX2VuYWJsZUFub255bW91c1VzZXJzIiwic2V0RW5hYmxlQW5vbnltb3VzVXNlcnMiLCJlbmFibGUiLCJnZXRWYWxpZGF0b3JGb3JQcm92aWRlciIsImF1dGhBZGFwdGVyIiwicnVuQWZ0ZXJGaW5kIiwiYWRhcHRlcnMiLCJhbGwiLCJtYXAiLCJhZnRlckZpbmQiLCJpcCIsImNvbmZpZyIsIm1hc3RlciIsInJlc3VsdCIsImZyZWV6ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9BZGFwdGVycy9BdXRoL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2FkQWRhcHRlciBmcm9tICcuLi9BZGFwdGVyTG9hZGVyJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBBdXRoQWRhcHRlciBmcm9tICcuL0F1dGhBZGFwdGVyJztcblxuY29uc3QgYXBwbGUgPSByZXF1aXJlKCcuL2FwcGxlJyk7XG5jb25zdCBnY2VudGVyID0gcmVxdWlyZSgnLi9nY2VudGVyJyk7XG5jb25zdCBncGdhbWVzID0gcmVxdWlyZSgnLi9ncGdhbWVzJyk7XG5jb25zdCBmYWNlYm9vayA9IHJlcXVpcmUoJy4vZmFjZWJvb2snKTtcbmNvbnN0IGluc3RhZ3JhbSA9IHJlcXVpcmUoJy4vaW5zdGFncmFtJyk7XG5jb25zdCBsaW5rZWRpbiA9IHJlcXVpcmUoJy4vbGlua2VkaW4nKTtcbmNvbnN0IG1lZXR1cCA9IHJlcXVpcmUoJy4vbWVldHVwJyk7XG5pbXBvcnQgbWZhIGZyb20gJy4vbWZhJztcbmNvbnN0IGdvb2dsZSA9IHJlcXVpcmUoJy4vZ29vZ2xlJyk7XG5jb25zdCBnaXRodWIgPSByZXF1aXJlKCcuL2dpdGh1YicpO1xuY29uc3QgdHdpdHRlciA9IHJlcXVpcmUoJy4vdHdpdHRlcicpO1xuY29uc3Qgc3BvdGlmeSA9IHJlcXVpcmUoJy4vc3BvdGlmeScpO1xuY29uc3QgZGlnaXRzID0gcmVxdWlyZSgnLi90d2l0dGVyJyk7IC8vIGRpZ2l0cyB0b2tlbnMgYXJlIHZhbGlkYXRlZCBieSB0d2l0dGVyXG5jb25zdCBqYW5yYWluZW5nYWdlID0gcmVxdWlyZSgnLi9qYW5yYWluZW5nYWdlJyk7XG5jb25zdCBqYW5yYWluY2FwdHVyZSA9IHJlcXVpcmUoJy4vamFucmFpbmNhcHR1cmUnKTtcbmNvbnN0IGxpbmUgPSByZXF1aXJlKCcuL2xpbmUnKTtcbmNvbnN0IHZrb250YWt0ZSA9IHJlcXVpcmUoJy4vdmtvbnRha3RlJyk7XG5jb25zdCBxcSA9IHJlcXVpcmUoJy4vcXEnKTtcbmNvbnN0IHdlY2hhdCA9IHJlcXVpcmUoJy4vd2VjaGF0Jyk7XG5jb25zdCB3ZWlibyA9IHJlcXVpcmUoJy4vd2VpYm8nKTtcbmNvbnN0IG9hdXRoMiA9IHJlcXVpcmUoJy4vb2F1dGgyJyk7XG5jb25zdCBwaGFudGF1dGggPSByZXF1aXJlKCcuL3BoYW50YXV0aCcpO1xuY29uc3QgbWljcm9zb2Z0ID0gcmVxdWlyZSgnLi9taWNyb3NvZnQnKTtcbmNvbnN0IGtleWNsb2FrID0gcmVxdWlyZSgnLi9rZXljbG9haycpO1xuY29uc3QgbGRhcCA9IHJlcXVpcmUoJy4vbGRhcCcpO1xuXG5jb25zdCBhbm9ueW1vdXMgPSB7XG4gIHZhbGlkYXRlQXV0aERhdGE6ICgpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH0sXG4gIHZhbGlkYXRlQXBwSWQ6ICgpID0+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH0sXG59O1xuXG5jb25zdCBwcm92aWRlcnMgPSB7XG4gIGFwcGxlLFxuICBnY2VudGVyLFxuICBncGdhbWVzLFxuICBmYWNlYm9vayxcbiAgaW5zdGFncmFtLFxuICBsaW5rZWRpbixcbiAgbWVldHVwLFxuICBtZmEsXG4gIGdvb2dsZSxcbiAgZ2l0aHViLFxuICB0d2l0dGVyLFxuICBzcG90aWZ5LFxuICBhbm9ueW1vdXMsXG4gIGRpZ2l0cyxcbiAgamFucmFpbmVuZ2FnZSxcbiAgamFucmFpbmNhcHR1cmUsXG4gIGxpbmUsXG4gIHZrb250YWt0ZSxcbiAgcXEsXG4gIHdlY2hhdCxcbiAgd2VpYm8sXG4gIHBoYW50YXV0aCxcbiAgbWljcm9zb2Z0LFxuICBrZXljbG9hayxcbiAgbGRhcCxcbn07XG5cbi8vIEluZGV4ZWQgYXV0aCBwb2xpY2llc1xuY29uc3QgYXV0aEFkYXB0ZXJQb2xpY2llcyA9IHtcbiAgZGVmYXVsdDogdHJ1ZSxcbiAgc29sbzogdHJ1ZSxcbiAgYWRkaXRpb25hbDogdHJ1ZSxcbn07XG5cbmZ1bmN0aW9uIGF1dGhEYXRhVmFsaWRhdG9yKHByb3ZpZGVyLCBhZGFwdGVyLCBhcHBJZHMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChhdXRoRGF0YSwgcmVxLCB1c2VyLCByZXF1ZXN0T2JqZWN0KSB7XG4gICAgaWYgKGFwcElkcyAmJiB0eXBlb2YgYWRhcHRlci52YWxpZGF0ZUFwcElkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoYWRhcHRlci52YWxpZGF0ZUFwcElkKGFwcElkcywgYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYWRhcHRlci5wb2xpY3kgJiZcbiAgICAgICFhdXRoQWRhcHRlclBvbGljaWVzW2FkYXB0ZXIucG9saWN5XSAmJlxuICAgICAgdHlwZW9mIGFkYXB0ZXIucG9saWN5ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLk9USEVSX0NBVVNFLFxuICAgICAgICAnQXV0aEFkYXB0ZXIgcG9saWN5IGlzIG5vdCBjb25maWd1cmVkIGNvcnJlY3RseS4gVGhlIHZhbHVlIG11c3QgYmUgZWl0aGVyIFwic29sb1wiLCBcImFkZGl0aW9uYWxcIiwgXCJkZWZhdWx0XCIgb3IgdW5kZWZpbmVkICh3aWxsIGJlIGhhbmRsZWQgYXMgXCJkZWZhdWx0XCIpJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhZGFwdGVyLnZhbGlkYXRlQXV0aERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBhZGFwdGVyLnZhbGlkYXRlQXV0aERhdGEoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgYWRhcHRlci52YWxpZGF0ZVNldFVwICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2YgYWRhcHRlci52YWxpZGF0ZUxvZ2luICE9PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2YgYWRhcHRlci52YWxpZGF0ZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5PVEhFUl9DQVVTRSxcbiAgICAgICAgJ0FkYXB0ZXIgaXMgbm90IGNvbmZpZ3VyZWQuIEltcGxlbWVudCBlaXRoZXIgdmFsaWRhdGVBdXRoRGF0YSBvciBhbGwgb2YgdGhlIGZvbGxvd2luZzogdmFsaWRhdGVTZXRVcCwgdmFsaWRhdGVMb2dpbiBhbmQgdmFsaWRhdGVVcGRhdGUnXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBXaGVuIG1hc3RlcktleSBpcyBkZXRlY3RlZCwgd2Ugc2hvdWxkIHRyaWdnZXIgYSBsb2dnZWQgaW4gdXNlclxuICAgIGNvbnN0IGlzTG9nZ2VkSW4gPVxuICAgICAgKHJlcS5hdXRoLnVzZXIgJiYgdXNlciAmJiByZXEuYXV0aC51c2VyLmlkID09PSB1c2VyLmlkKSB8fCAodXNlciAmJiByZXEuYXV0aC5pc01hc3Rlcik7XG4gICAgbGV0IGhhc0F1dGhEYXRhQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHVzZXIgJiYgdXNlci5nZXQoJ2F1dGhEYXRhJykgJiYgdXNlci5nZXQoJ2F1dGhEYXRhJylbcHJvdmlkZXJdKSB7XG4gICAgICBoYXNBdXRoRGF0YUNvbmZpZ3VyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc0xvZ2dlZEluKSB7XG4gICAgICAvLyBVc2VyIGlzIHVwZGF0aW5nIHRoZWlyIGF1dGhEYXRhXG4gICAgICBpZiAoaGFzQXV0aERhdGFDb25maWd1cmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWV0aG9kOiAndmFsaWRhdGVVcGRhdGUnLFxuICAgICAgICAgIHZhbGlkYXRvcjogKCkgPT4gYWRhcHRlci52YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBTZXQgdXAgaWYgdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSB0aGUgcHJvdmlkZXIgY29uZmlndXJlZFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWV0aG9kOiAndmFsaWRhdGVTZXRVcCcsXG4gICAgICAgIHZhbGlkYXRvcjogKCkgPT4gYWRhcHRlci52YWxpZGF0ZVNldFVwKGF1dGhEYXRhLCBvcHRpb25zLCByZXF1ZXN0T2JqZWN0KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gTm90IGxvZ2dlZCBpbiBhbmQgYXV0aERhdGEgaXMgY29uZmlndXJlZCBvbiB0aGUgdXNlclxuICAgIGlmIChoYXNBdXRoRGF0YUNvbmZpZ3VyZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ3ZhbGlkYXRlTG9naW4nLFxuICAgICAgICB2YWxpZGF0b3I6ICgpID0+IGFkYXB0ZXIudmFsaWRhdGVMb2dpbihhdXRoRGF0YSwgb3B0aW9ucywgcmVxdWVzdE9iamVjdCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFVzZXIgbm90IGxvZ2dlZCBpbiBhbmQgdGhlIHByb3ZpZGVyIGlzIG5vdCBzZXQgdXAsIGZvciBleGFtcGxlIHdoZW4gYSBuZXcgdXNlclxuICAgIC8vIHNpZ25zIHVwIG9yIGFuIGV4aXN0aW5nIHVzZXIgdXNlcyBhIG5ldyBhdXRoIHByb3ZpZGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogJ3ZhbGlkYXRlU2V0VXAnLFxuICAgICAgdmFsaWRhdG9yOiAoKSA9PiBhZGFwdGVyLnZhbGlkYXRlU2V0VXAoYXV0aERhdGEsIG9wdGlvbnMsIHJlcXVlc3RPYmplY3QpLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvYWRBdXRoQWRhcHRlcihwcm92aWRlciwgYXV0aE9wdGlvbnMpIHtcbiAgLy8gcHJvdmlkZXJzIGFyZSBhdXRoIHByb3ZpZGVycyBpbXBsZW1lbnRlZCBieSBkZWZhdWx0XG4gIGxldCBkZWZhdWx0QWRhcHRlciA9IHByb3ZpZGVyc1twcm92aWRlcl07XG4gIC8vIGF1dGhPcHRpb25zIGNhbiBjb250YWluIGNvbXBsZXRlIGN1c3RvbSBhdXRoIGFkYXB0ZXJzIG9yXG4gIC8vIGEgZGVmYXVsdCBhdXRoIGFkYXB0ZXIgbGlrZSBGYWNlYm9va1xuICBjb25zdCBwcm92aWRlck9wdGlvbnMgPSBhdXRoT3B0aW9uc1twcm92aWRlcl07XG4gIGlmIChcbiAgICBwcm92aWRlck9wdGlvbnMgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdmlkZXJPcHRpb25zLCAnb2F1dGgyJykgJiZcbiAgICBwcm92aWRlck9wdGlvbnNbJ29hdXRoMiddID09PSB0cnVlXG4gICkge1xuICAgIGRlZmF1bHRBZGFwdGVyID0gb2F1dGgyO1xuICB9XG5cbiAgLy8gRGVmYXVsdCBwcm92aWRlciBub3QgZm91bmQgYW5kIGEgY3VzdG9tIGF1dGggcHJvdmlkZXIgd2FzIG5vdCBwcm92aWRlZFxuICBpZiAoIWRlZmF1bHRBZGFwdGVyICYmICFwcm92aWRlck9wdGlvbnMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID1cbiAgICBkZWZhdWx0QWRhcHRlciBpbnN0YW5jZW9mIEF1dGhBZGFwdGVyID8gZGVmYXVsdEFkYXB0ZXIgOiBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0QWRhcHRlcik7XG4gIGNvbnN0IGtleXMgPSBbXG4gICAgJ3ZhbGlkYXRlQXV0aERhdGEnLFxuICAgICd2YWxpZGF0ZUFwcElkJyxcbiAgICAndmFsaWRhdGVTZXRVcCcsXG4gICAgJ3ZhbGlkYXRlTG9naW4nLFxuICAgICd2YWxpZGF0ZVVwZGF0ZScsXG4gICAgJ2NoYWxsZW5nZScsXG4gICAgJ3ZhbGlkYXRlT3B0aW9ucycsXG4gICAgJ3BvbGljeScsXG4gICAgJ2FmdGVyRmluZCcsXG4gIF07XG4gIGNvbnN0IGRlZmF1bHRBdXRoQWRhcHRlciA9IG5ldyBBdXRoQWRhcHRlcigpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGFkYXB0ZXI/LltrZXldO1xuICAgIGlmIChcbiAgICAgIGV4aXN0aW5nICYmXG4gICAgICB0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIGV4aXN0aW5nLnRvU3RyaW5nKCkgPT09IGRlZmF1bHRBdXRoQWRhcHRlcltrZXldLnRvU3RyaW5nKClcbiAgICApIHtcbiAgICAgIGFkYXB0ZXJba2V5XSA9IG51bGw7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgYXBwSWRzID0gcHJvdmlkZXJPcHRpb25zID8gcHJvdmlkZXJPcHRpb25zLmFwcElkcyA6IHVuZGVmaW5lZDtcblxuICAvLyBUcnkgdGhlIGNvbmZpZ3VyYXRpb24gbWV0aG9kc1xuICBpZiAocHJvdmlkZXJPcHRpb25zKSB7XG4gICAgY29uc3Qgb3B0aW9uYWxBZGFwdGVyID0gbG9hZEFkYXB0ZXIocHJvdmlkZXJPcHRpb25zLCB1bmRlZmluZWQsIHByb3ZpZGVyT3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbmFsQWRhcHRlcikge1xuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25hbEFkYXB0ZXJba2V5XSkge1xuICAgICAgICAgIGFkYXB0ZXJba2V5XSA9IG9wdGlvbmFsQWRhcHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGFkYXB0ZXIudmFsaWRhdGVPcHRpb25zKSB7XG4gICAgYWRhcHRlci52YWxpZGF0ZU9wdGlvbnMocHJvdmlkZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiB7IGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGF1dGhPcHRpb25zID0ge30sIGVuYWJsZUFub255bW91c1VzZXJzID0gdHJ1ZSkge1xuICBsZXQgX2VuYWJsZUFub255bW91c1VzZXJzID0gZW5hYmxlQW5vbnltb3VzVXNlcnM7XG4gIGNvbnN0IHNldEVuYWJsZUFub255bW91c1VzZXJzID0gZnVuY3Rpb24gKGVuYWJsZSkge1xuICAgIF9lbmFibGVBbm9ueW1vdXNVc2VycyA9IGVuYWJsZTtcbiAgfTtcbiAgLy8gVG8gaGFuZGxlIHRoZSB0ZXN0IGNhc2VzIG9uIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIgPT09ICdhbm9ueW1vdXMnICYmICFfZW5hYmxlQW5vbnltb3VzVXNlcnMpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkYXRvcjogdW5kZWZpbmVkIH07XG4gICAgfVxuICAgIGNvbnN0IGF1dGhBZGFwdGVyID0gbG9hZEF1dGhBZGFwdGVyKHByb3ZpZGVyLCBhdXRoT3B0aW9ucyk7XG4gICAgaWYgKCFhdXRoQWRhcHRlcikgcmV0dXJuO1xuICAgIGNvbnN0IHsgYWRhcHRlciwgYXBwSWRzLCBwcm92aWRlck9wdGlvbnMgfSA9IGF1dGhBZGFwdGVyO1xuICAgIHJldHVybiB7IHZhbGlkYXRvcjogYXV0aERhdGFWYWxpZGF0b3IocHJvdmlkZXIsIGFkYXB0ZXIsIGFwcElkcywgcHJvdmlkZXJPcHRpb25zKSwgYWRhcHRlciB9O1xuICB9O1xuXG4gIGNvbnN0IHJ1bkFmdGVyRmluZCA9IGFzeW5jIChyZXEsIGF1dGhEYXRhKSA9PiB7XG4gICAgaWYgKCFhdXRoRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVycyA9IE9iamVjdC5rZXlzKGF1dGhEYXRhKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFkYXB0ZXJzLm1hcChhc3luYyBwcm92aWRlciA9PiB7XG4gICAgICAgIGNvbnN0IGF1dGhBZGFwdGVyID0gZ2V0VmFsaWRhdG9yRm9yUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgICAgICBpZiAoIWF1dGhBZGFwdGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYWRhcHRlciwgcHJvdmlkZXJPcHRpb25zIH0gPSBhdXRoQWRhcHRlcjtcbiAgICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYWRhcHRlci5hZnRlckZpbmQ7XG4gICAgICAgIGlmIChhZnRlckZpbmQgJiYgdHlwZW9mIGFmdGVyRmluZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RPYmplY3QgPSB7XG4gICAgICAgICAgICBpcDogcmVxLmNvbmZpZy5pcCxcbiAgICAgICAgICAgIHVzZXI6IHJlcS5hdXRoLnVzZXIsXG4gICAgICAgICAgICBtYXN0ZXI6IHJlcS5hdXRoLmlzTWFzdGVyLFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWZ0ZXJGaW5kLmNhbGwoXG4gICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgcmVxdWVzdE9iamVjdCxcbiAgICAgICAgICAgIGF1dGhEYXRhW3Byb3ZpZGVyXSxcbiAgICAgICAgICAgIHByb3ZpZGVyT3B0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgYXV0aERhdGFbcHJvdmlkZXJdID0gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBnZXRWYWxpZGF0b3JGb3JQcm92aWRlcixcbiAgICBzZXRFbmFibGVBbm9ueW1vdXNVc2VycyxcbiAgICBydW5BZnRlckZpbmQsXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMubG9hZEF1dGhBZGFwdGVyID0gbG9hZEF1dGhBZGFwdGVyO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQVNBO0FBQXdCO0FBUHhCLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNoQyxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDcEMsTUFBTUUsT0FBTyxHQUFHRixPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3BDLE1BQU1HLFFBQVEsR0FBR0gsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUN0QyxNQUFNSSxTQUFTLEdBQUdKLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDeEMsTUFBTUssUUFBUSxHQUFHTCxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQ3RDLE1BQU1NLE1BQU0sR0FBR04sT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUVsQyxNQUFNTyxNQUFNLEdBQUdQLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDbEMsTUFBTVEsTUFBTSxHQUFHUixPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ2xDLE1BQU1TLE9BQU8sR0FBR1QsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNwQyxNQUFNVSxPQUFPLEdBQUdWLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDcEMsTUFBTVcsTUFBTSxHQUFHWCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNWSxhQUFhLEdBQUdaLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztBQUNoRCxNQUFNYSxjQUFjLEdBQUdiLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUNsRCxNQUFNYyxJQUFJLEdBQUdkLE9BQU8s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
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _otpauth = require("otpauth");
|
|
8
|
+
var _cryptoUtils = require("../../cryptoUtils");
|
|
9
|
+
var _AuthAdapter = _interopRequireDefault(require("./AuthAdapter"));
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
class MFAAdapter extends _AuthAdapter.default {
|
|
12
|
+
validateOptions(opts) {
|
|
13
|
+
const validOptions = opts.options;
|
|
14
|
+
if (!Array.isArray(validOptions)) {
|
|
15
|
+
throw 'mfa.options must be an array';
|
|
16
|
+
}
|
|
17
|
+
this.sms = validOptions.includes('SMS');
|
|
18
|
+
this.totp = validOptions.includes('TOTP');
|
|
19
|
+
if (!this.sms && !this.totp) {
|
|
20
|
+
throw 'mfa.options must include SMS or TOTP';
|
|
21
|
+
}
|
|
22
|
+
const digits = opts.digits || 6;
|
|
23
|
+
const period = opts.period || 30;
|
|
24
|
+
if (typeof digits !== 'number') {
|
|
25
|
+
throw 'mfa.digits must be a number';
|
|
26
|
+
}
|
|
27
|
+
if (typeof period !== 'number') {
|
|
28
|
+
throw 'mfa.period must be a number';
|
|
29
|
+
}
|
|
30
|
+
if (digits < 4 || digits > 10) {
|
|
31
|
+
throw 'mfa.digits must be between 4 and 10';
|
|
32
|
+
}
|
|
33
|
+
if (period < 10) {
|
|
34
|
+
throw 'mfa.period must be greater than 10';
|
|
35
|
+
}
|
|
36
|
+
const sendSMS = opts.sendSMS;
|
|
37
|
+
if (this.sms && typeof sendSMS !== 'function') {
|
|
38
|
+
throw 'mfa.sendSMS callback must be defined when using SMS OTPs';
|
|
39
|
+
}
|
|
40
|
+
this.smsCallback = sendSMS;
|
|
41
|
+
this.digits = digits;
|
|
42
|
+
this.period = period;
|
|
43
|
+
this.algorithm = opts.algorithm || 'SHA1';
|
|
44
|
+
}
|
|
45
|
+
validateSetUp(mfaData) {
|
|
46
|
+
if (mfaData.mobile && this.sms) {
|
|
47
|
+
return this.setupMobileOTP(mfaData.mobile);
|
|
48
|
+
}
|
|
49
|
+
if (this.totp) {
|
|
50
|
+
return this.setupTOTP(mfaData);
|
|
51
|
+
}
|
|
52
|
+
throw 'Invalid MFA data';
|
|
53
|
+
}
|
|
54
|
+
async validateLogin(token, _, req) {
|
|
55
|
+
const saveResponse = {
|
|
56
|
+
doNotSave: true
|
|
57
|
+
};
|
|
58
|
+
const auth = req.original.get('authData') || {};
|
|
59
|
+
const {
|
|
60
|
+
secret,
|
|
61
|
+
recovery,
|
|
62
|
+
mobile,
|
|
63
|
+
token: saved,
|
|
64
|
+
expiry
|
|
65
|
+
} = auth.mfa || {};
|
|
66
|
+
if (this.sms && mobile) {
|
|
67
|
+
if (typeof token === 'boolean') {
|
|
68
|
+
const {
|
|
69
|
+
token: sendToken,
|
|
70
|
+
expiry
|
|
71
|
+
} = await this.sendSMS(mobile);
|
|
72
|
+
auth.mfa.token = sendToken;
|
|
73
|
+
auth.mfa.expiry = expiry;
|
|
74
|
+
req.object.set('authData', auth);
|
|
75
|
+
await req.object.save(null, {
|
|
76
|
+
useMasterKey: true
|
|
77
|
+
});
|
|
78
|
+
throw 'Please enter the token';
|
|
79
|
+
}
|
|
80
|
+
if (!saved || token !== saved) {
|
|
81
|
+
throw 'Invalid MFA token 1';
|
|
82
|
+
}
|
|
83
|
+
if (new Date() > expiry) {
|
|
84
|
+
throw 'Invalid MFA token 2';
|
|
85
|
+
}
|
|
86
|
+
delete auth.mfa.token;
|
|
87
|
+
delete auth.mfa.expiry;
|
|
88
|
+
return {
|
|
89
|
+
save: auth.mfa
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (this.totp) {
|
|
93
|
+
if (typeof token !== 'string') {
|
|
94
|
+
throw 'Invalid MFA token';
|
|
95
|
+
}
|
|
96
|
+
if (!secret) {
|
|
97
|
+
return saveResponse;
|
|
98
|
+
}
|
|
99
|
+
if (recovery[0] === token || recovery[1] === token) {
|
|
100
|
+
return saveResponse;
|
|
101
|
+
}
|
|
102
|
+
const totp = new _otpauth.TOTP({
|
|
103
|
+
algorithm: this.algorithm,
|
|
104
|
+
digits: this.digits,
|
|
105
|
+
period: this.period,
|
|
106
|
+
secret: _otpauth.Secret.fromBase32(secret)
|
|
107
|
+
});
|
|
108
|
+
const valid = totp.validate({
|
|
109
|
+
token
|
|
110
|
+
});
|
|
111
|
+
if (valid === null) {
|
|
112
|
+
throw 'Invalid MFA token';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return saveResponse;
|
|
116
|
+
}
|
|
117
|
+
validateUpdate(authData, _, req) {
|
|
118
|
+
if (req.master) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (authData.mobile && this.sms) {
|
|
122
|
+
var _req$original$get;
|
|
123
|
+
if (!authData.token) {
|
|
124
|
+
throw 'MFA is already set up on this account';
|
|
125
|
+
}
|
|
126
|
+
return this.confirmSMSOTP(authData, ((_req$original$get = req.original.get('authData')) === null || _req$original$get === void 0 ? void 0 : _req$original$get.mfa) || {});
|
|
127
|
+
}
|
|
128
|
+
if (this.totp) {
|
|
129
|
+
this.validateLogin(authData.old, null, req);
|
|
130
|
+
return this.validateSetUp(authData);
|
|
131
|
+
}
|
|
132
|
+
throw 'Invalid MFA data';
|
|
133
|
+
}
|
|
134
|
+
afterFind(req, authData) {
|
|
135
|
+
if (req.master) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (this.totp && authData.secret) {
|
|
139
|
+
return {
|
|
140
|
+
enabled: true
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (this.sms && authData.mobile) {
|
|
144
|
+
return {
|
|
145
|
+
enabled: true
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
enabled: false
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
policy(req, auth) {
|
|
153
|
+
if (this.sms && auth !== null && auth !== void 0 && auth.pending && Object.keys(auth).length === 1) {
|
|
154
|
+
return 'default';
|
|
155
|
+
}
|
|
156
|
+
return 'additional';
|
|
157
|
+
}
|
|
158
|
+
async setupMobileOTP(mobile) {
|
|
159
|
+
const {
|
|
160
|
+
token,
|
|
161
|
+
expiry
|
|
162
|
+
} = await this.sendSMS(mobile);
|
|
163
|
+
return {
|
|
164
|
+
save: {
|
|
165
|
+
pending: {
|
|
166
|
+
[mobile]: {
|
|
167
|
+
token,
|
|
168
|
+
expiry
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
async sendSMS(mobile) {
|
|
175
|
+
if (!/^[+]*[(]{0,1}[0-9]{1,3}[)]{0,1}[-\s\./0-9]*$/g.test(mobile)) {
|
|
176
|
+
throw 'Invalid mobile number.';
|
|
177
|
+
}
|
|
178
|
+
let token = '';
|
|
179
|
+
while (token.length < this.digits) {
|
|
180
|
+
token += (0, _cryptoUtils.randomString)(10).replace(/\D/g, '');
|
|
181
|
+
}
|
|
182
|
+
token = token.substring(0, this.digits);
|
|
183
|
+
await Promise.resolve(this.smsCallback(token, mobile));
|
|
184
|
+
const expiry = new Date(new Date().getTime() + this.period * 1000);
|
|
185
|
+
return {
|
|
186
|
+
token,
|
|
187
|
+
expiry
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
async confirmSMSOTP(inputData, authData) {
|
|
191
|
+
var _authData$pending;
|
|
192
|
+
const {
|
|
193
|
+
mobile,
|
|
194
|
+
token
|
|
195
|
+
} = inputData;
|
|
196
|
+
if (!((_authData$pending = authData.pending) !== null && _authData$pending !== void 0 && _authData$pending[mobile])) {
|
|
197
|
+
throw 'This number is not pending';
|
|
198
|
+
}
|
|
199
|
+
const pendingData = authData.pending[mobile];
|
|
200
|
+
if (token !== pendingData.token) {
|
|
201
|
+
throw 'Invalid MFA token';
|
|
202
|
+
}
|
|
203
|
+
if (new Date() > pendingData.expiry) {
|
|
204
|
+
throw 'Invalid MFA token';
|
|
205
|
+
}
|
|
206
|
+
delete authData.pending[mobile];
|
|
207
|
+
authData.mobile = mobile;
|
|
208
|
+
return {
|
|
209
|
+
save: authData
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
setupTOTP(mfaData) {
|
|
213
|
+
const {
|
|
214
|
+
secret,
|
|
215
|
+
token
|
|
216
|
+
} = mfaData;
|
|
217
|
+
if (!secret || !token || secret.length < 20) {
|
|
218
|
+
throw 'Invalid MFA data';
|
|
219
|
+
}
|
|
220
|
+
const totp = new _otpauth.TOTP({
|
|
221
|
+
algorithm: this.algorithm,
|
|
222
|
+
digits: this.digits,
|
|
223
|
+
period: this.period,
|
|
224
|
+
secret: _otpauth.Secret.fromBase32(secret)
|
|
225
|
+
});
|
|
226
|
+
const valid = totp.validate({
|
|
227
|
+
token
|
|
228
|
+
});
|
|
229
|
+
if (valid === null) {
|
|
230
|
+
throw 'Invalid MFA token';
|
|
231
|
+
}
|
|
232
|
+
const recovery = [(0, _cryptoUtils.randomString)(30), (0, _cryptoUtils.randomString)(30)];
|
|
233
|
+
return {
|
|
234
|
+
response: {
|
|
235
|
+
recovery
|
|
236
|
+
},
|
|
237
|
+
save: {
|
|
238
|
+
secret,
|
|
239
|
+
recovery
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
var _default = new MFAAdapter();
|
|
245
|
+
exports.default = _default;
|
|
246
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNRkFBZGFwdGVyIiwiQXV0aEFkYXB0ZXIiLCJ2YWxpZGF0ZU9wdGlvbnMiLCJvcHRzIiwidmFsaWRPcHRpb25zIiwib3B0aW9ucyIsIkFycmF5IiwiaXNBcnJheSIsInNtcyIsImluY2x1ZGVzIiwidG90cCIsImRpZ2l0cyIsInBlcmlvZCIsInNlbmRTTVMiLCJzbXNDYWxsYmFjayIsImFsZ29yaXRobSIsInZhbGlkYXRlU2V0VXAiLCJtZmFEYXRhIiwibW9iaWxlIiwic2V0dXBNb2JpbGVPVFAiLCJzZXR1cFRPVFAiLCJ2YWxpZGF0ZUxvZ2luIiwidG9rZW4iLCJfIiwicmVxIiwic2F2ZVJlc3BvbnNlIiwiZG9Ob3RTYXZlIiwiYXV0aCIsIm9yaWdpbmFsIiwiZ2V0Iiwic2VjcmV0IiwicmVjb3ZlcnkiLCJzYXZlZCIsImV4cGlyeSIsIm1mYSIsInNlbmRUb2tlbiIsIm9iamVjdCIsInNldCIsInNhdmUiLCJ1c2VNYXN0ZXJLZXkiLCJEYXRlIiwiVE9UUCIsIlNlY3JldCIsImZyb21CYXNlMzIiLCJ2YWxpZCIsInZhbGlkYXRlIiwidmFsaWRhdGVVcGRhdGUiLCJhdXRoRGF0YSIsIm1hc3RlciIsImNvbmZpcm1TTVNPVFAiLCJvbGQiLCJhZnRlckZpbmQiLCJlbmFibGVkIiwicG9saWN5IiwicGVuZGluZyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJ0ZXN0IiwicmFuZG9tU3RyaW5nIiwicmVwbGFjZSIsInN1YnN0cmluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwiZ2V0VGltZSIsImlucHV0RGF0YSIsInBlbmRpbmdEYXRhIiwicmVzcG9uc2UiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQWRhcHRlcnMvQXV0aC9tZmEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVE9UUCwgU2VjcmV0IH0gZnJvbSAnb3RwYXV0aCc7XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tICcuLi8uLi9jcnlwdG9VdGlscyc7XG5pbXBvcnQgQXV0aEFkYXB0ZXIgZnJvbSAnLi9BdXRoQWRhcHRlcic7XG5jbGFzcyBNRkFBZGFwdGVyIGV4dGVuZHMgQXV0aEFkYXB0ZXIge1xuICB2YWxpZGF0ZU9wdGlvbnMob3B0cykge1xuICAgIGNvbnN0IHZhbGlkT3B0aW9ucyA9IG9wdHMub3B0aW9ucztcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRPcHRpb25zKSkge1xuICAgICAgdGhyb3cgJ21mYS5vcHRpb25zIG11c3QgYmUgYW4gYXJyYXknO1xuICAgIH1cbiAgICB0aGlzLnNtcyA9IHZhbGlkT3B0aW9ucy5pbmNsdWRlcygnU01TJyk7XG4gICAgdGhpcy50b3RwID0gdmFsaWRPcHRpb25zLmluY2x1ZGVzKCdUT1RQJyk7XG4gICAgaWYgKCF0aGlzLnNtcyAmJiAhdGhpcy50b3RwKSB7XG4gICAgICB0aHJvdyAnbWZhLm9wdGlvbnMgbXVzdCBpbmNsdWRlIFNNUyBvciBUT1RQJztcbiAgICB9XG4gICAgY29uc3QgZGlnaXRzID0gb3B0cy5kaWdpdHMgfHwgNjtcbiAgICBjb25zdCBwZXJpb2QgPSBvcHRzLnBlcmlvZCB8fCAzMDtcbiAgICBpZiAodHlwZW9mIGRpZ2l0cyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93ICdtZmEuZGlnaXRzIG11c3QgYmUgYSBudW1iZXInO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBlcmlvZCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93ICdtZmEucGVyaW9kIG11c3QgYmUgYSBudW1iZXInO1xuICAgIH1cbiAgICBpZiAoZGlnaXRzIDwgNCB8fCBkaWdpdHMgPiAxMCkge1xuICAgICAgdGhyb3cgJ21mYS5kaWdpdHMgbXVzdCBiZSBiZXR3ZWVuIDQgYW5kIDEwJztcbiAgICB9XG4gICAgaWYgKHBlcmlvZCA8IDEwKSB7XG4gICAgICB0aHJvdyAnbWZhLnBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxMCc7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRTTVMgPSBvcHRzLnNlbmRTTVM7XG4gICAgaWYgKHRoaXMuc21zICYmIHR5cGVvZiBzZW5kU01TICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyAnbWZhLnNlbmRTTVMgY2FsbGJhY2sgbXVzdCBiZSBkZWZpbmVkIHdoZW4gdXNpbmcgU01TIE9UUHMnO1xuICAgIH1cbiAgICB0aGlzLnNtc0NhbGxiYWNrID0gc2VuZFNNUztcbiAgICB0aGlzLmRpZ2l0cyA9IGRpZ2l0cztcbiAgICB0aGlzLnBlcmlvZCA9IHBlcmlvZDtcbiAgICB0aGlzLmFsZ29yaXRobSA9IG9wdHMuYWxnb3JpdGhtIHx8ICdTSEExJztcbiAgfVxuICB2YWxpZGF0ZVNldFVwKG1mYURhdGEpIHtcbiAgICBpZiAobWZhRGF0YS5tb2JpbGUgJiYgdGhpcy5zbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldHVwTW9iaWxlT1RQKG1mYURhdGEubW9iaWxlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG90cCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dXBUT1RQKG1mYURhdGEpO1xuICAgIH1cbiAgICB0aHJvdyAnSW52YWxpZCBNRkEgZGF0YSc7XG4gIH1cbiAgYXN5bmMgdmFsaWRhdGVMb2dpbih0b2tlbiwgXywgcmVxKSB7XG4gICAgY29uc3Qgc2F2ZVJlc3BvbnNlID0ge1xuICAgICAgZG9Ob3RTYXZlOiB0cnVlLFxuICAgIH07XG4gICAgY29uc3QgYXV0aCA9IHJlcS5vcmlnaW5hbC5nZXQoJ2F1dGhEYXRhJykgfHwge307XG4gICAgY29uc3QgeyBzZWNyZXQsIHJlY292ZXJ5LCBtb2JpbGUsIHRva2VuOiBzYXZlZCwgZXhwaXJ5IH0gPSBhdXRoLm1mYSB8fCB7fTtcbiAgICBpZiAodGhpcy5zbXMgJiYgbW9iaWxlKSB7XG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgY29uc3QgeyB0b2tlbjogc2VuZFRva2VuLCBleHBpcnkgfSA9IGF3YWl0IHRoaXMuc2VuZFNNUyhtb2JpbGUpO1xuICAgICAgICBhdXRoLm1mYS50b2tlbiA9IHNlbmRUb2tlbjtcbiAgICAgICAgYXV0aC5tZmEuZXhwaXJ5ID0gZXhwaXJ5O1xuICAgICAgICByZXEub2JqZWN0LnNldCgnYXV0aERhdGEnLCBhdXRoKTtcbiAgICAgICAgYXdhaXQgcmVxLm9iamVjdC5zYXZlKG51bGwsIHsgdXNlTWFzdGVyS2V5OiB0cnVlIH0pO1xuICAgICAgICB0aHJvdyAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbic7XG4gICAgICB9XG4gICAgICBpZiAoIXNhdmVkIHx8IHRva2VuICE9PSBzYXZlZCkge1xuICAgICAgICB0aHJvdyAnSW52YWxpZCBNRkEgdG9rZW4gMSc7XG4gICAgICB9XG4gICAgICBpZiAobmV3IERhdGUoKSA+IGV4cGlyeSkge1xuICAgICAgICB0aHJvdyAnSW52YWxpZCBNRkEgdG9rZW4gMic7XG4gICAgICB9XG4gICAgICBkZWxldGUgYXV0aC5tZmEudG9rZW47XG4gICAgICBkZWxldGUgYXV0aC5tZmEuZXhwaXJ5O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2F2ZTogYXV0aC5tZmEsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy50b3RwKSB7XG4gICAgICBpZiAodHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyAnSW52YWxpZCBNRkEgdG9rZW4nO1xuICAgICAgfVxuICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgcmV0dXJuIHNhdmVSZXNwb25zZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWNvdmVyeVswXSA9PT0gdG9rZW4gfHwgcmVjb3ZlcnlbMV0gPT09IHRva2VuKSB7XG4gICAgICAgIHJldHVybiBzYXZlUmVzcG9uc2U7XG4gICAgICB9XG4gICAgICBjb25zdCB0b3RwID0gbmV3IFRPVFAoe1xuICAgICAgICBhbGdvcml0aG06IHRoaXMuYWxnb3JpdGhtLFxuICAgICAgICBkaWdpdHM6IHRoaXMuZGlnaXRzLFxuICAgICAgICBwZXJpb2Q6IHRoaXMucGVyaW9kLFxuICAgICAgICBzZWNyZXQ6IFNlY3JldC5mcm9tQmFzZTMyKHNlY3JldCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHZhbGlkID0gdG90cC52YWxpZGF0ZSh7XG4gICAgICAgIHRva2VuLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFsaWQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgJ0ludmFsaWQgTUZBIHRva2VuJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNhdmVSZXNwb25zZTtcbiAgfVxuICB2YWxpZGF0ZVVwZGF0ZShhdXRoRGF0YSwgXywgcmVxKSB7XG4gICAgaWYgKHJlcS5tYXN0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGF1dGhEYXRhLm1vYmlsZSAmJiB0aGlzLnNtcykge1xuICAgICAgaWYgKCFhdXRoRGF0YS50b2tlbikge1xuICAgICAgICB0aHJvdyAnTUZBIGlzIGFscmVhZHkgc2V0IHVwIG9uIHRoaXMgYWNjb3VudCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jb25maXJtU01TT1RQKGF1dGhEYXRhLCByZXEub3JpZ2luYWwuZ2V0KCdhdXRoRGF0YScpPy5tZmEgfHwge30pO1xuICAgIH1cbiAgICBpZiAodGhpcy50b3RwKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTG9naW4oYXV0aERhdGEub2xkLCBudWxsLCByZXEpO1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVTZXRVcChhdXRoRGF0YSk7XG4gICAgfVxuICAgIHRocm93ICdJbnZhbGlkIE1GQSBkYXRhJztcbiAgfVxuICBhZnRlckZpbmQocmVxLCBhdXRoRGF0YSkge1xuICAgIGlmIChyZXEubWFzdGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnRvdHAgJiYgYXV0aERhdGEuc2VjcmV0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc21zICYmIGF1dGhEYXRhLm1vYmlsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcG9saWN5KHJlcSwgYXV0aCkge1xuICAgIGlmICh0aGlzLnNtcyAmJiBhdXRoPy5wZW5kaW5nICYmIE9iamVjdC5rZXlzKGF1dGgpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9XG4gICAgcmV0dXJuICdhZGRpdGlvbmFsJztcbiAgfVxuXG4gIGFzeW5jIHNldHVwTW9iaWxlT1RQKG1vYmlsZSkge1xuICAgIGNvbnN0IHsgdG9rZW4sIGV4cGlyeSB9ID0gYXdhaXQgdGhpcy5zZW5kU01TKG1vYmlsZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhdmU6IHtcbiAgICAgICAgcGVuZGluZzoge1xuICAgICAgICAgIFttb2JpbGVdOiB7XG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIGV4cGlyeSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2VuZFNNUyhtb2JpbGUpIHtcbiAgICBpZiAoIS9eWytdKlsoXXswLDF9WzAtOV17MSwzfVspXXswLDF9Wy1cXHNcXC4vMC05XSokL2cudGVzdChtb2JpbGUpKSB7XG4gICAgICB0aHJvdyAnSW52YWxpZCBtb2JpbGUgbnVtYmVyLic7XG4gICAgfVxuICAgIGxldCB0b2tlbiA9ICcnO1xuICAgIHdoaWxlICh0b2tlbi5sZW5ndGggPCB0aGlzLmRpZ2l0cykge1xuICAgICAgdG9rZW4gKz0gcmFuZG9tU3RyaW5nKDEwKS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIH1cbiAgICB0b2tlbiA9IHRva2VuLnN1YnN0cmluZygwLCB0aGlzLmRpZ2l0cyk7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuc21zQ2FsbGJhY2sodG9rZW4sIG1vYmlsZSkpO1xuICAgIGNvbnN0IGV4cGlyeSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgdGhpcy5wZXJpb2QgKiAxMDAwKTtcbiAgICByZXR1cm4geyB0b2tlbiwgZXhwaXJ5IH07XG4gIH1cblxuICBhc3luYyBjb25maXJtU01TT1RQKGlucHV0RGF0YSwgYXV0aERhdGEpIHtcbiAgICBjb25zdCB7IG1vYmlsZSwgdG9rZW4gfSA9IGlucHV0RGF0YTtcbiAgICBpZiAoIWF1dGhEYXRhLnBlbmRpbmc/Llttb2JpbGVdKSB7XG4gICAgICB0aHJvdyAnVGhpcyBudW1iZXIgaXMgbm90IHBlbmRpbmcnO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nRGF0YSA9IGF1dGhEYXRhLnBlbmRpbmdbbW9iaWxlXTtcbiAgICBpZiAodG9rZW4gIT09IHBlbmRpbmdEYXRhLnRva2VuKSB7XG4gICAgICB0aHJvdyAnSW52YWxpZCBNRkEgdG9rZW4nO1xuICAgIH1cbiAgICBpZiAobmV3IERhdGUoKSA+IHBlbmRpbmdEYXRhLmV4cGlyeSkge1xuICAgICAgdGhyb3cgJ0ludmFsaWQgTUZBIHRva2VuJztcbiAgICB9XG4gICAgZGVsZXRlIGF1dGhEYXRhLnBlbmRpbmdbbW9iaWxlXTtcbiAgICBhdXRoRGF0YS5tb2JpbGUgPSBtb2JpbGU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhdmU6IGF1dGhEYXRhLFxuICAgIH07XG4gIH1cblxuICBzZXR1cFRPVFAobWZhRGF0YSkge1xuICAgIGNvbnN0IHsgc2VjcmV0LCB0b2tlbiB9ID0gbWZhRGF0YTtcbiAgICBpZiAoIXNlY3JldCB8fCAhdG9rZW4gfHwgc2VjcmV0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICB0aHJvdyAnSW52YWxpZCBNRkEgZGF0YSc7XG4gICAgfVxuICAgIGNvbnN0IHRvdHAgPSBuZXcgVE9UUCh7XG4gICAgICBhbGdvcml0aG06IHRoaXMuYWxnb3JpdGhtLFxuICAgICAgZGlnaXRzOiB0aGlzLmRpZ2l0cyxcbiAgICAgIHBlcmlvZDogdGhpcy5wZXJpb2QsXG4gICAgICBzZWNyZXQ6IFNlY3JldC5mcm9tQmFzZTMyKHNlY3JldCksXG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWQgPSB0b3RwLnZhbGlkYXRlKHtcbiAgICAgIHRva2VuLFxuICAgIH0pO1xuICAgIGlmICh2YWxpZCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgJ0ludmFsaWQgTUZBIHRva2VuJztcbiAgICB9XG4gICAgY29uc3QgcmVjb3ZlcnkgPSBbcmFuZG9tU3RyaW5nKDMwKSwgcmFuZG9tU3RyaW5nKDMwKV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3BvbnNlOiB7IHJlY292ZXJ5IH0sXG4gICAgICBzYXZlOiB7IHNlY3JldCwgcmVjb3ZlcnkgfSxcbiAgICB9O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBuZXcgTUZBQWRhcHRlcigpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFBd0M7QUFDeEMsTUFBTUEsVUFBVSxTQUFTQyxvQkFBVyxDQUFDO0VBQ25DQyxlQUFlLENBQUNDLElBQUksRUFBRTtJQUNwQixNQUFNQyxZQUFZLEdBQUdELElBQUksQ0FBQ0UsT0FBTztJQUNqQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxZQUFZLENBQUMsRUFBRTtNQUNoQyxNQUFNLDhCQUE4QjtJQUN0QztJQUNBLElBQUksQ0FBQ0ksR0FBRyxHQUFHSixZQUFZLENBQUNLLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDdkMsSUFBSSxDQUFDQyxJQUFJLEdBQUdOLFlBQVksQ0FBQ0ssUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDRCxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUNFLElBQUksRUFBRTtNQUMzQixNQUFNLHNDQUFzQztJQUM5QztJQUNBLE1BQU1DLE1BQU0sR0FBR1IsSUFBSSxDQUFDUSxNQUFNLElBQUksQ0FBQztJQUMvQixNQUFNQyxNQUFNLEdBQUdULElBQUksQ0FBQ1MsTUFBTSxJQUFJLEVBQUU7SUFDaEMs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
|