New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@axway/amplify-auth-sdk

Package Overview
Dependencies
Maintainers
14
Versions
37
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@axway/amplify-auth-sdk - npm Package Compare versions

Comparing version 1.4.1 to 2.0.0

6

dist/authenticators/signed-jwt.js

@@ -16,3 +16,3 @@ "use strict";

var _uuid = _interopRequireDefault(require("uuid"));
var _uuid = require("uuid");

@@ -83,3 +83,3 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

iss: this.clientId,
jti: _uuid.default.v4(),
jti: (0, _uuid.v4)(),
sub: this.clientId

@@ -143,2 +143,2 @@ },

exports.default = SignedJWT;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF1dGhlbnRpY2F0b3JzL3NpZ25lZC1qd3QuanMiXSwibmFtZXMiOlsiSldUQXNzZXJ0aW9uIiwiQ2xpZW50Q3JlZGVudGlhbHMiLCJBdXRoZW50aWNhdG9yIiwiR3JhbnRUeXBlcyIsIlNpZ25lZEpXVCIsImNvbnN0cnVjdG9yIiwib3B0cyIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwic2VjcmV0RmlsZSIsInNob3VsZEZldGNoT3JncyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJnZXRTaWduZWRKV1QiLCJzaWduZWRKV1QiLCJmcyIsInN0YXRTeW5jIiwiaXNGaWxlIiwiZSIsIklOVkFMSURfRklMRSIsImlzc3VlZEF0IiwiTWF0aCIsImZsb29yIiwiRGF0ZSIsIm5vdyIsImp3cyIsInNpZ24iLCJoZWFkZXIiLCJhbGciLCJ0eXAiLCJwYXlsb2FkIiwiYXVkIiwiZW5kcG9pbnRzIiwidG9rZW4iLCJleHAiLCJpYXQiLCJpc3MiLCJjbGllbnRJZCIsImp0aSIsInV1aWQiLCJ2NCIsInN1YiIsInNlY3JldCIsInJlYWRGaWxlU3luYyIsImhhc2hQYXJhbXMiLCJyZWZyZXNoVG9rZW5QYXJhbXMiLCJjbGllbnRBc3NlcnRpb24iLCJjbGllbnRBc3NlcnRpb25UeXBlIiwidG9rZW5QYXJhbXMiLCJncmFudFR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsWUFBRjtBQUFnQkMsRUFBQUE7QUFBaEIsSUFBc0NDLHVCQUFjQyxVQUExRDtBQUVBOzs7O0FBR2UsTUFBTUMsU0FBTixTQUF3QkYsc0JBQXhCLENBQXNDO0FBQ3BEOzs7Ozs7O0FBT0FHLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBRCxFQUFPO0FBQ2pCLFFBQUksQ0FBQ0EsSUFBRCxJQUFTLE9BQU9BLElBQVAsS0FBZ0IsUUFBN0IsRUFBdUM7QUFDdEMsWUFBTUMsZ0JBQUVDLGdCQUFGLENBQW1CLGtDQUFuQixDQUFOO0FBQ0E7O0FBRUQsUUFBSSxDQUFDRixJQUFJLENBQUNHLFVBQU4sSUFBb0IsT0FBT0gsSUFBSSxDQUFDRyxVQUFaLEtBQTJCLFFBQW5ELEVBQTZEO0FBQzVELFlBQU1GLGdCQUFFQyxnQkFBRixDQUFtQix1REFBbkIsQ0FBTjtBQUNBOztBQUVELFVBQU1GLElBQU47QUFFQSxTQUFLSSxlQUFMLEdBQXVCLEtBQXZCO0FBRUFDLElBQUFBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QixZQUE1QixFQUEwQztBQUFFQyxNQUFBQSxLQUFLLEVBQUVQLElBQUksQ0FBQ0c7QUFBZCxLQUExQztBQUNBO0FBRUQ7Ozs7Ozs7O0FBTUFLLEVBQUFBLFlBQVksR0FBRztBQUNkLFFBQUksS0FBS0MsU0FBVCxFQUFvQjtBQUNuQixhQUFPLEtBQUtBLFNBQVo7QUFDQTs7QUFFRCxRQUFJO0FBQ0hDLGtCQUFHQyxRQUFILENBQVksS0FBS1IsVUFBakIsRUFBNkJTLE1BQTdCO0FBQ0EsS0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNYLFlBQU1aLGdCQUFFYSxZQUFGLENBQWdCLHVDQUFzQyxLQUFLWCxVQUFXLEVBQXRFLENBQU47QUFDQTs7QUFFRCxVQUFNWSxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXQyxJQUFJLENBQUNDLEdBQUwsS0FBYSxJQUF4QixDQUFqQjtBQUVBLFdBQU8sS0FBS1YsU0FBTCxHQUFpQlcsYUFBSUMsSUFBSixDQUFTO0FBQ2hDQyxNQUFBQSxNQUFNLEVBQUc7QUFBRUMsUUFBQUEsR0FBRyxFQUFFLE9BQVA7QUFBZ0JDLFFBQUFBLEdBQUcsRUFBRTtBQUFyQixPQUR1QjtBQUVoQ0MsTUFBQUEsT0FBTyxFQUFFO0FBQ1JDLFFBQUFBLEdBQUcsRUFBRSxLQUFLQyxTQUFMLENBQWVDLEtBRFo7QUFFUkMsUUFBQUEsR0FBRyxFQUFFZCxRQUFRLEdBQUksS0FBSyxFQUFMLEdBQVUsSUFGbkI7QUFFMEI7QUFDbENlLFFBQUFBLEdBQUcsRUFBRWYsUUFIRztBQUlSZ0IsUUFBQUEsR0FBRyxFQUFFLEtBQUtDLFFBSkY7QUFLUkMsUUFBQUEsR0FBRyxFQUFFQyxjQUFLQyxFQUFMLEVBTEc7QUFNUkMsUUFBQUEsR0FBRyxFQUFFLEtBQUtKO0FBTkYsT0FGdUI7QUFVaENLLE1BQUFBLE1BQU0sRUFBRzNCLFlBQUc0QixZQUFILENBQWdCLEtBQUtuQyxVQUFyQixFQUFpQyxNQUFqQztBQVZ1QixLQUFULENBQXhCO0FBWUE7QUFFRDs7Ozs7Ozs7QUFNQSxNQUFJb0MsVUFBSixHQUFpQjtBQUNoQixRQUFJRixNQUFNLEdBQUcsSUFBYjs7QUFFQSxRQUFJO0FBQ0hBLE1BQUFBLE1BQU0sR0FBRzNCLFlBQUc0QixZQUFILENBQWdCLEtBQUtuQyxVQUFyQixFQUFpQyxNQUFqQyxDQUFUO0FBQ0EsS0FGRCxDQUVFLE9BQU9VLENBQVAsRUFBVSxDQUNYO0FBQ0E7O0FBRUQsV0FBTztBQUFFd0IsTUFBQUE7QUFBRixLQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7QUFNQSxNQUFJRyxrQkFBSixHQUF5QjtBQUN4QixXQUFPO0FBQ05DLE1BQUFBLGVBQWUsRUFBTSxLQUFLakMsWUFBTCxFQURmO0FBRU5rQyxNQUFBQSxtQkFBbUIsRUFBRWhEO0FBRmYsS0FBUDtBQUlBO0FBRUQ7Ozs7Ozs7O0FBTUEsTUFBSWlELFdBQUosR0FBa0I7QUFDakIsV0FBTztBQUNORixNQUFBQSxlQUFlLEVBQU0sS0FBS2pDLFlBQUwsRUFEZjtBQUVOa0MsTUFBQUEsbUJBQW1CLEVBQUVoRCxZQUZmO0FBR05rRCxNQUFBQSxTQUFTLEVBQVlqRDtBQUhmLEtBQVA7QUFLQTs7QUFwR21EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1dGhlbnRpY2F0b3IgZnJvbSAnLi9hdXRoZW50aWNhdG9yJztcbmltcG9ydCBFIGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IGp3cyBmcm9tICdqd3MnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZCc7XG5cbmNvbnN0IHsgSldUQXNzZXJ0aW9uLCBDbGllbnRDcmVkZW50aWFscyB9ID0gQXV0aGVudGljYXRvci5HcmFudFR5cGVzO1xuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIHNjaGVtZSB1c2luZyBhIEpTT04gV2ViIFRva2VuIChKV1QpLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduZWRKV1QgZXh0ZW5kcyBBdXRoZW50aWNhdG9yIHtcblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGFuIFBLQ0UgYXV0aGVudGljYXRpb24gaW5zdGFuY2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5zZWNyZXRGaWxlIC0gVGhlIHBhdGggdG8gdGhlIGp3dCBzZWNyZXQgZmlsZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMpIHtcblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFvcHRzLnNlY3JldEZpbGUgfHwgdHlwZW9mIG9wdHMuc2VjcmV0RmlsZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgSldUIHNlY3JldCBrZXkgZmlsZSB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0XHR9XG5cblx0XHRzdXBlcihvcHRzKTtcblxuXHRcdHRoaXMuc2hvdWxkRmV0Y2hPcmdzID0gZmFsc2U7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3NlY3JldEZpbGUnLCB7IHZhbHVlOiBvcHRzLnNlY3JldEZpbGUgfSk7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBzaWduZWQgSldULlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGdldFNpZ25lZEpXVCgpIHtcblx0XHRpZiAodGhpcy5zaWduZWRKV1QpIHtcblx0XHRcdHJldHVybiB0aGlzLnNpZ25lZEpXVDtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0ZnMuc3RhdFN5bmModGhpcy5zZWNyZXRGaWxlKS5pc0ZpbGUoKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfRklMRShgSldUIHNlY3JldCBrZXkgZmlsZSBkb2VzIG5vdCBleGlzdDogJHt0aGlzLnNlY3JldEZpbGV9YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNzdWVkQXQgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcblxuXHRcdHJldHVybiB0aGlzLnNpZ25lZEpXVCA9IGp3cy5zaWduKHtcblx0XHRcdGhlYWRlcjogIHsgYWxnOiAnUlMyNTYnLCB0eXA6ICdKV1QnIH0sXG5cdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdGF1ZDogdGhpcy5lbmRwb2ludHMudG9rZW4sXG5cdFx0XHRcdGV4cDogaXNzdWVkQXQgKyAoNjAgKiA2MCAqIDEwMDApLCAvLyAxIGhvdXJcblx0XHRcdFx0aWF0OiBpc3N1ZWRBdCxcblx0XHRcdFx0aXNzOiB0aGlzLmNsaWVudElkLFxuXHRcdFx0XHRqdGk6IHV1aWQudjQoKSxcblx0XHRcdFx0c3ViOiB0aGlzLmNsaWVudElkXG5cdFx0XHR9LFxuXHRcdFx0c2VjcmV0OiAgZnMucmVhZEZpbGVTeW5jKHRoaXMuc2VjcmV0RmlsZSwgJ3V0ZjgnKVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcmFtZXRlcnMgdG8gYmFzZSB0aGUgYXV0aGVudGljYXRvciBoYXNoIG9uLlxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGdldCBoYXNoUGFyYW1zKCkge1xuXHRcdGxldCBzZWNyZXQgPSBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHNlY3JldCA9IGZzLnJlYWRGaWxlU3luYyh0aGlzLnNlY3JldEZpbGUsICd1dGY4Jyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gc3F1ZWxjaFxuXHRcdH1cblxuXHRcdHJldHVybiB7IHNlY3JldCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcmFtZXRlcnMgdG8gaW5jbHVkZSB3aXRoIHJlZnJlc2ggcmVxdWVzdHMuXG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0Z2V0IHJlZnJlc2hUb2tlblBhcmFtcygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xpZW50QXNzZXJ0aW9uOiAgICAgdGhpcy5nZXRTaWduZWRKV1QoKSxcblx0XHRcdGNsaWVudEFzc2VydGlvblR5cGU6IEpXVEFzc2VydGlvblxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUGFyYW1ldGVycyB0byBpbmNsdWRlIHdpdGggYXV0aGVudGljYXRpb24gcmVxdWVzdHMuXG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0Z2V0IHRva2VuUGFyYW1zKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjbGllbnRBc3NlcnRpb246ICAgICB0aGlzLmdldFNpZ25lZEpXVCgpLFxuXHRcdFx0Y2xpZW50QXNzZXJ0aW9uVHlwZTogSldUQXNzZXJ0aW9uLFxuXHRcdFx0Z3JhbnRUeXBlOiAgICAgICAgICAgQ2xpZW50Q3JlZGVudGlhbHNcblx0XHR9O1xuXHR9XG59XG4iXSwiZmlsZSI6ImF1dGhlbnRpY2F0b3JzL3NpZ25lZC1qd3QuanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF1dGhlbnRpY2F0b3JzL3NpZ25lZC1qd3QuanMiXSwibmFtZXMiOlsiSldUQXNzZXJ0aW9uIiwiQ2xpZW50Q3JlZGVudGlhbHMiLCJBdXRoZW50aWNhdG9yIiwiR3JhbnRUeXBlcyIsIlNpZ25lZEpXVCIsImNvbnN0cnVjdG9yIiwib3B0cyIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwic2VjcmV0RmlsZSIsInNob3VsZEZldGNoT3JncyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJnZXRTaWduZWRKV1QiLCJzaWduZWRKV1QiLCJmcyIsInN0YXRTeW5jIiwiaXNGaWxlIiwiZSIsIklOVkFMSURfRklMRSIsImlzc3VlZEF0IiwiTWF0aCIsImZsb29yIiwiRGF0ZSIsIm5vdyIsImp3cyIsInNpZ24iLCJoZWFkZXIiLCJhbGciLCJ0eXAiLCJwYXlsb2FkIiwiYXVkIiwiZW5kcG9pbnRzIiwidG9rZW4iLCJleHAiLCJpYXQiLCJpc3MiLCJjbGllbnRJZCIsImp0aSIsInN1YiIsInNlY3JldCIsInJlYWRGaWxlU3luYyIsImhhc2hQYXJhbXMiLCJyZWZyZXNoVG9rZW5QYXJhbXMiLCJjbGllbnRBc3NlcnRpb24iLCJjbGllbnRBc3NlcnRpb25UeXBlIiwidG9rZW5QYXJhbXMiLCJncmFudFR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsWUFBRjtBQUFnQkMsRUFBQUE7QUFBaEIsSUFBc0NDLHVCQUFjQyxVQUExRDtBQUVBOzs7O0FBR2UsTUFBTUMsU0FBTixTQUF3QkYsc0JBQXhCLENBQXNDO0FBQ3BEOzs7Ozs7O0FBT0FHLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBRCxFQUFPO0FBQ2pCLFFBQUksQ0FBQ0EsSUFBRCxJQUFTLE9BQU9BLElBQVAsS0FBZ0IsUUFBN0IsRUFBdUM7QUFDdEMsWUFBTUMsZ0JBQUVDLGdCQUFGLENBQW1CLGtDQUFuQixDQUFOO0FBQ0E7O0FBRUQsUUFBSSxDQUFDRixJQUFJLENBQUNHLFVBQU4sSUFBb0IsT0FBT0gsSUFBSSxDQUFDRyxVQUFaLEtBQTJCLFFBQW5ELEVBQTZEO0FBQzVELFlBQU1GLGdCQUFFQyxnQkFBRixDQUFtQix1REFBbkIsQ0FBTjtBQUNBOztBQUVELFVBQU1GLElBQU47QUFFQSxTQUFLSSxlQUFMLEdBQXVCLEtBQXZCO0FBRUFDLElBQUFBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QixZQUE1QixFQUEwQztBQUFFQyxNQUFBQSxLQUFLLEVBQUVQLElBQUksQ0FBQ0c7QUFBZCxLQUExQztBQUNBO0FBRUQ7Ozs7Ozs7O0FBTUFLLEVBQUFBLFlBQVksR0FBRztBQUNkLFFBQUksS0FBS0MsU0FBVCxFQUFvQjtBQUNuQixhQUFPLEtBQUtBLFNBQVo7QUFDQTs7QUFFRCxRQUFJO0FBQ0hDLGtCQUFHQyxRQUFILENBQVksS0FBS1IsVUFBakIsRUFBNkJTLE1BQTdCO0FBQ0EsS0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNYLFlBQU1aLGdCQUFFYSxZQUFGLENBQWdCLHVDQUFzQyxLQUFLWCxVQUFXLEVBQXRFLENBQU47QUFDQTs7QUFFRCxVQUFNWSxRQUFRLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXQyxJQUFJLENBQUNDLEdBQUwsS0FBYSxJQUF4QixDQUFqQjtBQUVBLFdBQU8sS0FBS1YsU0FBTCxHQUFpQlcsYUFBSUMsSUFBSixDQUFTO0FBQ2hDQyxNQUFBQSxNQUFNLEVBQUc7QUFBRUMsUUFBQUEsR0FBRyxFQUFFLE9BQVA7QUFBZ0JDLFFBQUFBLEdBQUcsRUFBRTtBQUFyQixPQUR1QjtBQUVoQ0MsTUFBQUEsT0FBTyxFQUFFO0FBQ1JDLFFBQUFBLEdBQUcsRUFBRSxLQUFLQyxTQUFMLENBQWVDLEtBRFo7QUFFUkMsUUFBQUEsR0FBRyxFQUFFZCxRQUFRLEdBQUksS0FBSyxFQUFMLEdBQVUsSUFGbkI7QUFFMEI7QUFDbENlLFFBQUFBLEdBQUcsRUFBRWYsUUFIRztBQUlSZ0IsUUFBQUEsR0FBRyxFQUFFLEtBQUtDLFFBSkY7QUFLUkMsUUFBQUEsR0FBRyxFQUFFLGVBTEc7QUFNUkMsUUFBQUEsR0FBRyxFQUFFLEtBQUtGO0FBTkYsT0FGdUI7QUFVaENHLE1BQUFBLE1BQU0sRUFBR3pCLFlBQUcwQixZQUFILENBQWdCLEtBQUtqQyxVQUFyQixFQUFpQyxNQUFqQztBQVZ1QixLQUFULENBQXhCO0FBWUE7QUFFRDs7Ozs7Ozs7QUFNQSxNQUFJa0MsVUFBSixHQUFpQjtBQUNoQixRQUFJRixNQUFNLEdBQUcsSUFBYjs7QUFFQSxRQUFJO0FBQ0hBLE1BQUFBLE1BQU0sR0FBR3pCLFlBQUcwQixZQUFILENBQWdCLEtBQUtqQyxVQUFyQixFQUFpQyxNQUFqQyxDQUFUO0FBQ0EsS0FGRCxDQUVFLE9BQU9VLENBQVAsRUFBVSxDQUNYO0FBQ0E7O0FBRUQsV0FBTztBQUFFc0IsTUFBQUE7QUFBRixLQUFQO0FBQ0E7QUFFRDs7Ozs7Ozs7QUFNQSxNQUFJRyxrQkFBSixHQUF5QjtBQUN4QixXQUFPO0FBQ05DLE1BQUFBLGVBQWUsRUFBTSxLQUFLL0IsWUFBTCxFQURmO0FBRU5nQyxNQUFBQSxtQkFBbUIsRUFBRTlDO0FBRmYsS0FBUDtBQUlBO0FBRUQ7Ozs7Ozs7O0FBTUEsTUFBSStDLFdBQUosR0FBa0I7QUFDakIsV0FBTztBQUNORixNQUFBQSxlQUFlLEVBQU0sS0FBSy9CLFlBQUwsRUFEZjtBQUVOZ0MsTUFBQUEsbUJBQW1CLEVBQUU5QyxZQUZmO0FBR05nRCxNQUFBQSxTQUFTLEVBQVkvQztBQUhmLEtBQVA7QUFLQTs7QUFwR21EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1dGhlbnRpY2F0b3IgZnJvbSAnLi9hdXRoZW50aWNhdG9yJztcbmltcG9ydCBFIGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IGp3cyBmcm9tICdqd3MnO1xuXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuY29uc3QgeyBKV1RBc3NlcnRpb24sIENsaWVudENyZWRlbnRpYWxzIH0gPSBBdXRoZW50aWNhdG9yLkdyYW50VHlwZXM7XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24gc2NoZW1lIHVzaW5nIGEgSlNPTiBXZWIgVG9rZW4gKEpXVCkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25lZEpXVCBleHRlbmRzIEF1dGhlbnRpY2F0b3Ige1xuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgYW4gUEtDRSBhdXRoZW50aWNhdGlvbiBpbnN0YW5jZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLnNlY3JldEZpbGUgLSBUaGUgcGF0aCB0byB0aGUgand0IHNlY3JldCBmaWxlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cykge1xuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAoIW9wdHMuc2VjcmV0RmlsZSB8fCB0eXBlb2Ygb3B0cy5zZWNyZXRGaWxlICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBKV1Qgc2VjcmV0IGtleSBmaWxlIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHRcdH1cblxuXHRcdHN1cGVyKG9wdHMpO1xuXG5cdFx0dGhpcy5zaG91bGRGZXRjaE9yZ3MgPSBmYWxzZTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2VjcmV0RmlsZScsIHsgdmFsdWU6IG9wdHMuc2VjcmV0RmlsZSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHNpZ25lZCBKV1QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U2lnbmVkSldUKCkge1xuXHRcdGlmICh0aGlzLnNpZ25lZEpXVCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc2lnbmVkSldUO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRmcy5zdGF0U3luYyh0aGlzLnNlY3JldEZpbGUpLmlzRmlsZSgpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9GSUxFKGBKV1Qgc2VjcmV0IGtleSBmaWxlIGRvZXMgbm90IGV4aXN0OiAke3RoaXMuc2VjcmV0RmlsZX1gKTtcblx0XHR9XG5cblx0XHRjb25zdCBpc3N1ZWRBdCA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2lnbmVkSldUID0gandzLnNpZ24oe1xuXHRcdFx0aGVhZGVyOiAgeyBhbGc6ICdSUzI1NicsIHR5cDogJ0pXVCcgfSxcblx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0YXVkOiB0aGlzLmVuZHBvaW50cy50b2tlbixcblx0XHRcdFx0ZXhwOiBpc3N1ZWRBdCArICg2MCAqIDYwICogMTAwMCksIC8vIDEgaG91clxuXHRcdFx0XHRpYXQ6IGlzc3VlZEF0LFxuXHRcdFx0XHRpc3M6IHRoaXMuY2xpZW50SWQsXG5cdFx0XHRcdGp0aTogdXVpZHY0KCksXG5cdFx0XHRcdHN1YjogdGhpcy5jbGllbnRJZFxuXHRcdFx0fSxcblx0XHRcdHNlY3JldDogIGZzLnJlYWRGaWxlU3luYyh0aGlzLnNlY3JldEZpbGUsICd1dGY4Jylcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXJzIHRvIGJhc2UgdGhlIGF1dGhlbnRpY2F0b3IgaGFzaCBvbi5cblx0ICpcblx0ICogQHR5cGUge09iamVjdH1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRnZXQgaGFzaFBhcmFtcygpIHtcblx0XHRsZXQgc2VjcmV0ID0gbnVsbDtcblxuXHRcdHRyeSB7XG5cdFx0XHRzZWNyZXQgPSBmcy5yZWFkRmlsZVN5bmModGhpcy5zZWNyZXRGaWxlLCAndXRmOCcpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIHNxdWVsY2hcblx0XHR9XG5cblx0XHRyZXR1cm4geyBzZWNyZXQgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJhbWV0ZXJzIHRvIGluY2x1ZGUgd2l0aCByZWZyZXNoIHJlcXVlc3RzLlxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGdldCByZWZyZXNoVG9rZW5QYXJhbXMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNsaWVudEFzc2VydGlvbjogICAgIHRoaXMuZ2V0U2lnbmVkSldUKCksXG5cdFx0XHRjbGllbnRBc3NlcnRpb25UeXBlOiBKV1RBc3NlcnRpb25cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcmFtZXRlcnMgdG8gaW5jbHVkZSB3aXRoIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RzLlxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0fVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGdldCB0b2tlblBhcmFtcygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2xpZW50QXNzZXJ0aW9uOiAgICAgdGhpcy5nZXRTaWduZWRKV1QoKSxcblx0XHRcdGNsaWVudEFzc2VydGlvblR5cGU6IEpXVEFzc2VydGlvbixcblx0XHRcdGdyYW50VHlwZTogICAgICAgICAgIENsaWVudENyZWRlbnRpYWxzXG5cdFx0fTtcblx0fVxufVxuIl0sImZpbGUiOiJhdXRoZW50aWNhdG9ycy9zaWduZWQtand0LmpzIn0=

@@ -23,3 +23,2 @@ "use strict";

baseUrl,
platformUrl,
realm

@@ -31,6 +30,2 @@ } = {}) {

if (platformUrl && typeof platformUrl !== 'string') {
throw _errors.default.INVALID_ARGUMENT('Expected platformUrl to be a non-empty string');
}
if (!realm || typeof realm !== 'string') {

@@ -45,6 +40,3 @@ throw _errors.default.INVALID_ARGUMENT('Expected realm to be a non-empty string');

certs: `${baseUrl}/auth/realms/${realm}/protocol/openid-connect/certs`,
deviceauth: platformUrl ? `${platformUrl.replace(/\/$/, '')}/api/v1/auth/deviceauth` : undefined,
findSession: platformUrl ? `${platformUrl.replace(/\/$/, '')}/api/v1/auth/findSession` : undefined,
logout: `${baseUrl}/auth/realms/${realm}/protocol/openid-connect/logout`,
switchLoggedInOrg: platformUrl ? `${platformUrl.replace(/\/$/, '')}/api/v1/auth/switchLoggedInOrg` : undefined,
token: `${baseUrl}/auth/realms/${realm}/protocol/openid-connect/token`,

@@ -55,2 +47,2 @@ userinfo: `${baseUrl}/auth/realms/${realm}/protocol/openid-connect/userinfo`,

}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVuZHBvaW50cy5qcyJdLCJuYW1lcyI6WyJnZXRFbmRwb2ludHMiLCJiYXNlVXJsIiwicGxhdGZvcm1VcmwiLCJyZWFsbSIsIkUiLCJJTlZBTElEX0FSR1VNRU5UIiwicmVwbGFjZSIsImF1dGgiLCJjZXJ0cyIsImRldmljZWF1dGgiLCJ1bmRlZmluZWQiLCJmaW5kU2Vzc2lvbiIsImxvZ291dCIsInN3aXRjaExvZ2dlZEluT3JnIiwidG9rZW4iLCJ1c2VyaW5mbyIsIndlbGxLbm93biJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUE7Ozs7Ozs7OztBQVNlLFNBQVNBLFlBQVQsQ0FBc0I7QUFBRUMsRUFBQUEsT0FBRjtBQUFXQyxFQUFBQSxXQUFYO0FBQXdCQyxFQUFBQTtBQUF4QixJQUFrQyxFQUF4RCxFQUE0RDtBQUMxRSxNQUFJLENBQUNGLE9BQUQsSUFBWSxPQUFPQSxPQUFQLEtBQW1CLFFBQW5DLEVBQTZDO0FBQzVDLFVBQU1HLGdCQUFFQyxnQkFBRixDQUFtQiwyQ0FBbkIsQ0FBTjtBQUNBOztBQUVELE1BQUlILFdBQVcsSUFBSSxPQUFPQSxXQUFQLEtBQXVCLFFBQTFDLEVBQW9EO0FBQ25ELFVBQU1FLGdCQUFFQyxnQkFBRixDQUFtQiwrQ0FBbkIsQ0FBTjtBQUNBOztBQUVELE1BQUksQ0FBQ0YsS0FBRCxJQUFVLE9BQU9BLEtBQVAsS0FBaUIsUUFBL0IsRUFBeUM7QUFDeEMsVUFBTUMsZ0JBQUVDLGdCQUFGLENBQW1CLHlDQUFuQixDQUFOO0FBQ0EsR0FYeUUsQ0FhMUU7OztBQUNBSixFQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0ssT0FBUixDQUFnQixLQUFoQixFQUF1QixFQUF2QixDQUFWO0FBRUEsU0FBTztBQUNOQyxJQUFBQSxJQUFJLEVBQWdCLEdBQUVOLE9BQVEsZ0JBQWVFLEtBQU0sK0JBRDdDO0FBRU5LLElBQUFBLEtBQUssRUFBZSxHQUFFUCxPQUFRLGdCQUFlRSxLQUFNLGdDQUY3QztBQUdOTSxJQUFBQSxVQUFVLEVBQVNQLFdBQVcsR0FBSSxHQUFFQSxXQUFXLENBQUNJLE9BQVosQ0FBb0IsS0FBcEIsRUFBMkIsRUFBM0IsQ0FBK0IseUJBQXJDLEdBQWdFSSxTQUh4RjtBQUlOQyxJQUFBQSxXQUFXLEVBQVFULFdBQVcsR0FBSSxHQUFFQSxXQUFXLENBQUNJLE9BQVosQ0FBb0IsS0FBcEIsRUFBMkIsRUFBM0IsQ0FBK0IsMEJBQXJDLEdBQWlFSSxTQUp6RjtBQUtORSxJQUFBQSxNQUFNLEVBQWMsR0FBRVgsT0FBUSxnQkFBZUUsS0FBTSxpQ0FMN0M7QUFNTlUsSUFBQUEsaUJBQWlCLEVBQUVYLFdBQVcsR0FBSSxHQUFFQSxXQUFXLENBQUNJLE9BQVosQ0FBb0IsS0FBcEIsRUFBMkIsRUFBM0IsQ0FBK0IsZ0NBQXJDLEdBQXVFSSxTQU4vRjtBQU9OSSxJQUFBQSxLQUFLLEVBQWUsR0FBRWIsT0FBUSxnQkFBZUUsS0FBTSxnQ0FQN0M7QUFRTlksSUFBQUEsUUFBUSxFQUFZLEdBQUVkLE9BQVEsZ0JBQWVFLEtBQU0sbUNBUjdDO0FBU05hLElBQUFBLFNBQVMsRUFBVyxHQUFFZixPQUFRLGdCQUFlRSxLQUFNO0FBVDdDLEdBQVA7QUFXQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFIGZyb20gJy4vZXJyb3JzJztcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGFsbCBlbmRwb2ludHMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJhc2VVcmwgLSBUaGUgYmFzZSBVUkwuXG4gKiBAcGFyYW0ge1N0cmluZ30gW3BhcmFtcy5wbGF0Zm9ybVVybF0gLSBUaGUgcGxhdGZvcm0gVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5yZWFsbSAtIFRoZSBhdXRoZW50aWNhdGlvbiByZWFsbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEVuZHBvaW50cyh7IGJhc2VVcmwsIHBsYXRmb3JtVXJsLCByZWFsbSB9ID0ge30pIHtcblx0aWYgKCFiYXNlVXJsIHx8IHR5cGVvZiBiYXNlVXJsICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgYmFzZVVybCB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXG5cdGlmIChwbGF0Zm9ybVVybCAmJiB0eXBlb2YgcGxhdGZvcm1VcmwgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBwbGF0Zm9ybVVybCB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXG5cdGlmICghcmVhbG0gfHwgdHlwZW9mIHJlYWxtICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgcmVhbG0gdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblxuXHQvLyBzdHJpcCB0aGUgdHJhaWxpbmcgc2xhc2hlc1xuXHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG5cdHJldHVybiB7XG5cdFx0YXV0aDogICAgICAgICAgICAgIGAke2Jhc2VVcmx9L2F1dGgvcmVhbG1zLyR7cmVhbG19L3Byb3RvY29sL29wZW5pZC1jb25uZWN0L2F1dGhgLFxuXHRcdGNlcnRzOiAgICAgICAgICAgICBgJHtiYXNlVXJsfS9hdXRoL3JlYWxtcy8ke3JlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9jZXJ0c2AsXG5cdFx0ZGV2aWNlYXV0aDogICAgICAgIHBsYXRmb3JtVXJsID8gYCR7cGxhdGZvcm1VcmwucmVwbGFjZSgvXFwvJC8sICcnKX0vYXBpL3YxL2F1dGgvZGV2aWNlYXV0aGAgOiB1bmRlZmluZWQsXG5cdFx0ZmluZFNlc3Npb246ICAgICAgIHBsYXRmb3JtVXJsID8gYCR7cGxhdGZvcm1VcmwucmVwbGFjZSgvXFwvJC8sICcnKX0vYXBpL3YxL2F1dGgvZmluZFNlc3Npb25gIDogdW5kZWZpbmVkLFxuXHRcdGxvZ291dDogICAgICAgICAgICBgJHtiYXNlVXJsfS9hdXRoL3JlYWxtcy8ke3JlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9sb2dvdXRgLFxuXHRcdHN3aXRjaExvZ2dlZEluT3JnOiBwbGF0Zm9ybVVybCA/IGAke3BsYXRmb3JtVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyl9L2FwaS92MS9hdXRoL3N3aXRjaExvZ2dlZEluT3JnYCA6IHVuZGVmaW5lZCxcblx0XHR0b2tlbjogICAgICAgICAgICAgYCR7YmFzZVVybH0vYXV0aC9yZWFsbXMvJHtyZWFsbX0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW5gLFxuXHRcdHVzZXJpbmZvOiAgICAgICAgICBgJHtiYXNlVXJsfS9hdXRoL3JlYWxtcy8ke3JlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC91c2VyaW5mb2AsXG5cdFx0d2VsbEtub3duOiAgICAgICAgIGAke2Jhc2VVcmx9L2F1dGgvcmVhbG1zLyR7cmVhbG19Ly53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYFxuXHR9O1xufVxuIl0sImZpbGUiOiJlbmRwb2ludHMuanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVuZHBvaW50cy5qcyJdLCJuYW1lcyI6WyJnZXRFbmRwb2ludHMiLCJiYXNlVXJsIiwicmVhbG0iLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsInJlcGxhY2UiLCJhdXRoIiwiY2VydHMiLCJsb2dvdXQiLCJ0b2tlbiIsInVzZXJpbmZvIiwid2VsbEtub3duIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFFQTs7Ozs7Ozs7O0FBU2UsU0FBU0EsWUFBVCxDQUFzQjtBQUFFQyxFQUFBQSxPQUFGO0FBQVdDLEVBQUFBO0FBQVgsSUFBcUIsRUFBM0MsRUFBK0M7QUFDN0QsTUFBSSxDQUFDRCxPQUFELElBQVksT0FBT0EsT0FBUCxLQUFtQixRQUFuQyxFQUE2QztBQUM1QyxVQUFNRSxnQkFBRUMsZ0JBQUYsQ0FBbUIsMkNBQW5CLENBQU47QUFDQTs7QUFFRCxNQUFJLENBQUNGLEtBQUQsSUFBVSxPQUFPQSxLQUFQLEtBQWlCLFFBQS9CLEVBQXlDO0FBQ3hDLFVBQU1DLGdCQUFFQyxnQkFBRixDQUFtQix5Q0FBbkIsQ0FBTjtBQUNBLEdBUDRELENBUzdEOzs7QUFDQUgsRUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNJLE9BQVIsQ0FBZ0IsS0FBaEIsRUFBdUIsRUFBdkIsQ0FBVjtBQUVBLFNBQU87QUFDTkMsSUFBQUEsSUFBSSxFQUFRLEdBQUVMLE9BQVEsZ0JBQWVDLEtBQU0sK0JBRHJDO0FBRU5LLElBQUFBLEtBQUssRUFBTyxHQUFFTixPQUFRLGdCQUFlQyxLQUFNLGdDQUZyQztBQUdOTSxJQUFBQSxNQUFNLEVBQU0sR0FBRVAsT0FBUSxnQkFBZUMsS0FBTSxpQ0FIckM7QUFJTk8sSUFBQUEsS0FBSyxFQUFPLEdBQUVSLE9BQVEsZ0JBQWVDLEtBQU0sZ0NBSnJDO0FBS05RLElBQUFBLFFBQVEsRUFBSSxHQUFFVCxPQUFRLGdCQUFlQyxLQUFNLG1DQUxyQztBQU1OUyxJQUFBQSxTQUFTLEVBQUcsR0FBRVYsT0FBUSxnQkFBZUMsS0FBTTtBQU5yQyxHQUFQO0FBUUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRSBmcm9tICcuL2Vycm9ycyc7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbGwgZW5kcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBSZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5iYXNlVXJsIC0gVGhlIGJhc2UgVVJMLlxuICogQHBhcmFtIHtTdHJpbmd9IFtwYXJhbXMucGxhdGZvcm1VcmxdIC0gVGhlIHBsYXRmb3JtIFVSTC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMucmVhbG0gLSBUaGUgYXV0aGVudGljYXRpb24gcmVhbG0uXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRFbmRwb2ludHMoeyBiYXNlVXJsLCByZWFsbSB9ID0ge30pIHtcblx0aWYgKCFiYXNlVXJsIHx8IHR5cGVvZiBiYXNlVXJsICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgYmFzZVVybCB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXG5cdGlmICghcmVhbG0gfHwgdHlwZW9mIHJlYWxtICE9PSAnc3RyaW5nJykge1xuXHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgcmVhbG0gdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblxuXHQvLyBzdHJpcCB0aGUgdHJhaWxpbmcgc2xhc2hlc1xuXHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG5cdHJldHVybiB7XG5cdFx0YXV0aDogICAgICBgJHtiYXNlVXJsfS9hdXRoL3JlYWxtcy8ke3JlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC9hdXRoYCxcblx0XHRjZXJ0czogICAgIGAke2Jhc2VVcmx9L2F1dGgvcmVhbG1zLyR7cmVhbG19L3Byb3RvY29sL29wZW5pZC1jb25uZWN0L2NlcnRzYCxcblx0XHRsb2dvdXQ6ICAgIGAke2Jhc2VVcmx9L2F1dGgvcmVhbG1zLyR7cmVhbG19L3Byb3RvY29sL29wZW5pZC1jb25uZWN0L2xvZ291dGAsXG5cdFx0dG9rZW46ICAgICBgJHtiYXNlVXJsfS9hdXRoL3JlYWxtcy8ke3JlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC90b2tlbmAsXG5cdFx0dXNlcmluZm86ICBgJHtiYXNlVXJsfS9hdXRoL3JlYWxtcy8ke3JlYWxtfS9wcm90b2NvbC9vcGVuaWQtY29ubmVjdC91c2VyaW5mb2AsXG5cdFx0d2VsbEtub3duOiBgJHtiYXNlVXJsfS9hdXRoL3JlYWxtcy8ke3JlYWxtfS8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbmBcblx0fTtcbn1cbiJdLCJmaWxlIjoiZW5kcG9pbnRzLmpzIn0=

@@ -6,6 +6,7 @@ "use strict";

});
exports.default = exports.environments = void 0;
exports.resolve = resolve;
exports.environments = void 0;
/**
* Environment specific default settings.
* Environment specific settings.
*

@@ -17,20 +18,44 @@ * @type {Object}

baseUrl: 'https://login-dev.axway.com',
platformUrl: 'https://platform.axwaytest.net'
redirectLoginSuccess: 'https://platform.axwaytest.net/'
},
preprod: {
baseUrl: 'https://login-preprod.axway.com',
platformUrl: 'https://platform.axwaytest.net'
redirectLoginSuccess: 'https://platform.axwaytest.net/'
},
staging: {
baseUrl: 'https://login-preprod.axway.com',
platformUrl: 'https://platform.axwaytest.net'
},
prod: {
baseUrl: 'https://login.axway.com',
platformUrl: 'https://platform.axway.com'
redirectLoginSuccess: 'https://platform.axway.com/'
}
};
exports.environments = environments;
var _default = environments;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudmlyb25tZW50cy5qcyJdLCJuYW1lcyI6WyJlbnZpcm9ubWVudHMiLCJkZXYiLCJiYXNlVXJsIiwicGxhdGZvcm1VcmwiLCJwcmVwcm9kIiwic3RhZ2luZyIsInByb2QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7QUFLTyxNQUFNQSxZQUFZLEdBQUc7QUFDM0JDLEVBQUFBLEdBQUcsRUFBRTtBQUNKQyxJQUFBQSxPQUFPLEVBQUUsNkJBREw7QUFFSkMsSUFBQUEsV0FBVyxFQUFFO0FBRlQsR0FEc0I7QUFLM0JDLEVBQUFBLE9BQU8sRUFBRTtBQUNSRixJQUFBQSxPQUFPLEVBQUUsaUNBREQ7QUFFUkMsSUFBQUEsV0FBVyxFQUFFO0FBRkwsR0FMa0I7QUFTM0JFLEVBQUFBLE9BQU8sRUFBRTtBQUNSSCxJQUFBQSxPQUFPLEVBQUUsaUNBREQ7QUFFUkMsSUFBQUEsV0FBVyxFQUFFO0FBRkwsR0FUa0I7QUFhM0JHLEVBQUFBLElBQUksRUFBRTtBQUNMSixJQUFBQSxPQUFPLEVBQUUseUJBREo7QUFFTEMsSUFBQUEsV0FBVyxFQUFFO0FBRlI7QUFicUIsQ0FBckI7O2VBbUJRSCxZIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbnZpcm9ubWVudCBzcGVjaWZpYyBkZWZhdWx0IHNldHRpbmdzLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBlbnZpcm9ubWVudHMgPSB7XG5cdGRldjoge1xuXHRcdGJhc2VVcmw6ICdodHRwczovL2xvZ2luLWRldi5heHdheS5jb20nLFxuXHRcdHBsYXRmb3JtVXJsOiAnaHR0cHM6Ly9wbGF0Zm9ybS5heHdheXRlc3QubmV0J1xuXHR9LFxuXHRwcmVwcm9kOiB7XG5cdFx0YmFzZVVybDogJ2h0dHBzOi8vbG9naW4tcHJlcHJvZC5heHdheS5jb20nLFxuXHRcdHBsYXRmb3JtVXJsOiAnaHR0cHM6Ly9wbGF0Zm9ybS5heHdheXRlc3QubmV0J1xuXHR9LFxuXHRzdGFnaW5nOiB7XG5cdFx0YmFzZVVybDogJ2h0dHBzOi8vbG9naW4tcHJlcHJvZC5heHdheS5jb20nLFxuXHRcdHBsYXRmb3JtVXJsOiAnaHR0cHM6Ly9wbGF0Zm9ybS5heHdheXRlc3QubmV0J1xuXHR9LFxuXHRwcm9kOiB7XG5cdFx0YmFzZVVybDogJ2h0dHBzOi8vbG9naW4uYXh3YXkuY29tJyxcblx0XHRwbGF0Zm9ybVVybDogJ2h0dHBzOi8vcGxhdGZvcm0uYXh3YXkuY29tJ1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlbnZpcm9ubWVudHM7XG4iXSwiZmlsZSI6ImVudmlyb25tZW50cy5qcyJ9
const mapping = {
development: 'dev',
preproduction: 'preprod',
'pre-production': 'preprod',
production: 'prod',
staging: 'preprod',
test: 'preprod'
};
function resolve(env) {
let environment = 'prod';
if (env) {
if (typeof env !== 'string') {
throw new TypeError('Expected environment to be a string');
}
environment = env.toLowerCase();
environment = mapping[environment] || environment;
if (!environments[environment]) {
throw new Error(`Invalid environment "${env}"`);
}
}
return {
name: environment,
...environments[environment]
};
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudmlyb25tZW50cy5qcyJdLCJuYW1lcyI6WyJlbnZpcm9ubWVudHMiLCJkZXYiLCJiYXNlVXJsIiwicmVkaXJlY3RMb2dpblN1Y2Nlc3MiLCJwcmVwcm9kIiwicHJvZCIsIm1hcHBpbmciLCJkZXZlbG9wbWVudCIsInByZXByb2R1Y3Rpb24iLCJwcm9kdWN0aW9uIiwic3RhZ2luZyIsInRlc3QiLCJyZXNvbHZlIiwiZW52IiwiZW52aXJvbm1lbnQiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIkVycm9yIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7Ozs7QUFLTyxNQUFNQSxZQUFZLEdBQUc7QUFDM0JDLEVBQUFBLEdBQUcsRUFBRTtBQUNKQyxJQUFBQSxPQUFPLEVBQUUsNkJBREw7QUFFSkMsSUFBQUEsb0JBQW9CLEVBQUU7QUFGbEIsR0FEc0I7QUFLM0JDLEVBQUFBLE9BQU8sRUFBRTtBQUNSRixJQUFBQSxPQUFPLEVBQUUsaUNBREQ7QUFFUkMsSUFBQUEsb0JBQW9CLEVBQUU7QUFGZCxHQUxrQjtBQVMzQkUsRUFBQUEsSUFBSSxFQUFFO0FBQ0xILElBQUFBLE9BQU8sRUFBRSx5QkFESjtBQUVMQyxJQUFBQSxvQkFBb0IsRUFBRTtBQUZqQjtBQVRxQixDQUFyQjs7QUFlUCxNQUFNRyxPQUFPLEdBQUc7QUFDZkMsRUFBQUEsV0FBVyxFQUFFLEtBREU7QUFFZkMsRUFBQUEsYUFBYSxFQUFFLFNBRkE7QUFHZixvQkFBa0IsU0FISDtBQUlmQyxFQUFBQSxVQUFVLEVBQUUsTUFKRztBQUtmQyxFQUFBQSxPQUFPLEVBQUUsU0FMTTtBQU1mQyxFQUFBQSxJQUFJLEVBQUU7QUFOUyxDQUFoQjs7QUFTTyxTQUFTQyxPQUFULENBQWlCQyxHQUFqQixFQUFzQjtBQUM1QixNQUFJQyxXQUFXLEdBQUcsTUFBbEI7O0FBQ0EsTUFBSUQsR0FBSixFQUFTO0FBQ1IsUUFBSSxPQUFPQSxHQUFQLEtBQWUsUUFBbkIsRUFBNkI7QUFDNUIsWUFBTSxJQUFJRSxTQUFKLENBQWMscUNBQWQsQ0FBTjtBQUNBOztBQUNERCxJQUFBQSxXQUFXLEdBQUdELEdBQUcsQ0FBQ0csV0FBSixFQUFkO0FBQ0FGLElBQUFBLFdBQVcsR0FBR1IsT0FBTyxDQUFDUSxXQUFELENBQVAsSUFBd0JBLFdBQXRDOztBQUNBLFFBQUksQ0FBQ2QsWUFBWSxDQUFDYyxXQUFELENBQWpCLEVBQWdDO0FBQy9CLFlBQU0sSUFBSUcsS0FBSixDQUFXLHdCQUF1QkosR0FBSSxHQUF0QyxDQUFOO0FBQ0E7QUFDRDs7QUFFRCxTQUFPO0FBQ05LLElBQUFBLElBQUksRUFBRUosV0FEQTtBQUVOLE9BQUdkLFlBQVksQ0FBQ2MsV0FBRDtBQUZULEdBQVA7QUFJQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW52aXJvbm1lbnQgc3BlY2lmaWMgc2V0dGluZ3MuXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGVudmlyb25tZW50cyA9IHtcblx0ZGV2OiB7XG5cdFx0YmFzZVVybDogJ2h0dHBzOi8vbG9naW4tZGV2LmF4d2F5LmNvbScsXG5cdFx0cmVkaXJlY3RMb2dpblN1Y2Nlc3M6ICdodHRwczovL3BsYXRmb3JtLmF4d2F5dGVzdC5uZXQvJ1xuXHR9LFxuXHRwcmVwcm9kOiB7XG5cdFx0YmFzZVVybDogJ2h0dHBzOi8vbG9naW4tcHJlcHJvZC5heHdheS5jb20nLFxuXHRcdHJlZGlyZWN0TG9naW5TdWNjZXNzOiAnaHR0cHM6Ly9wbGF0Zm9ybS5heHdheXRlc3QubmV0Lydcblx0fSxcblx0cHJvZDoge1xuXHRcdGJhc2VVcmw6ICdodHRwczovL2xvZ2luLmF4d2F5LmNvbScsXG5cdFx0cmVkaXJlY3RMb2dpblN1Y2Nlc3M6ICdodHRwczovL3BsYXRmb3JtLmF4d2F5LmNvbS8nXG5cdH1cbn07XG5cbmNvbnN0IG1hcHBpbmcgPSB7XG5cdGRldmVsb3BtZW50OiAnZGV2Jyxcblx0cHJlcHJvZHVjdGlvbjogJ3ByZXByb2QnLFxuXHQncHJlLXByb2R1Y3Rpb24nOiAncHJlcHJvZCcsXG5cdHByb2R1Y3Rpb246ICdwcm9kJyxcblx0c3RhZ2luZzogJ3ByZXByb2QnLFxuXHR0ZXN0OiAncHJlcHJvZCdcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKGVudikge1xuXHRsZXQgZW52aXJvbm1lbnQgPSAncHJvZCc7XG5cdGlmIChlbnYpIHtcblx0XHRpZiAodHlwZW9mIGVudiAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGVudmlyb25tZW50IHRvIGJlIGEgc3RyaW5nJyk7XG5cdFx0fVxuXHRcdGVudmlyb25tZW50ID0gZW52LnRvTG93ZXJDYXNlKCk7XG5cdFx0ZW52aXJvbm1lbnQgPSBtYXBwaW5nW2Vudmlyb25tZW50XSB8fCBlbnZpcm9ubWVudDtcblx0XHRpZiAoIWVudmlyb25tZW50c1tlbnZpcm9ubWVudF0pIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbnZpcm9ubWVudCBcIiR7ZW52fVwiYCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRuYW1lOiBlbnZpcm9ubWVudCxcblx0XHQuLi5lbnZpcm9ubWVudHNbZW52aXJvbm1lbnRdXG5cdH07XG59XG4iXSwiZmlsZSI6ImVudmlyb25tZW50cy5qcyJ9

@@ -60,8 +60,2 @@ "use strict";

});
Object.defineProperty(exports, "environments", {
enumerable: true,
get: function () {
return _environments.default;
}
});
Object.defineProperty(exports, "getEndpoints", {

@@ -73,3 +67,3 @@ enumerable: true,

});
exports.server = exports.Auth = exports.default = void 0;
exports.server = exports.environments = exports.Auth = exports.default = void 0;

@@ -96,8 +90,12 @@ var _errors = _interopRequireDefault(require("./errors"));

var _environments = _interopRequireDefault(require("./environments"));
var _endpoints = _interopRequireDefault(require("./endpoints"));
var _got = _interopRequireDefault(require("got"));
var _snooplogg = _interopRequireDefault(require("snooplogg"));
var environments = _interopRequireWildcard(require("./environments"));
exports.environments = environments;
var server = _interopRequireWildcard(require("./server"));

@@ -107,6 +105,2 @@

var _amplifyRequest = _interopRequireDefault(require("@axway/amplify-request"));
var _util = require("./util");
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }

@@ -150,3 +144,3 @@

*
* @param {Object} opts - Various options.
* @param {Object} [opts] - Various options.
* @param {String} [opts.baseUrl] - The base URL to use for all outgoing requests.

@@ -161,3 +155,2 @@ * @param {String} [opts.clientId] - The client id to specify when authenticating.

* @param {String} [opts.password] - The password used to authenticate. Requires a `username`.
* @param {String} [opts.platformUrl] - The platform URL used to get user info and orgs.
* @param {String} [opts.realm] - The name of the realm to authenticate with.

@@ -207,5 +200,2 @@ * @param {String} [opts.secretFile] - The path to the jwt secret file.

},
platformUrl: {
value: opts.platformUrl
},
realm: {

@@ -283,9 +273,9 @@ value: opts.realm

const env = opts.env || this.env || 'prod';
const env = environments.resolve(opts.env || this.env);
if (!_environments.default[env]) {
if (!env) {
throw _errors.default.INVALID_VALUE(`Invalid environment: ${opts.env || this.env}`);
}
opts.baseUrl = opts.baseUrl || this.baseUrl || _environments.default[env].baseUrl;
opts.baseUrl = opts.baseUrl || this.baseUrl || env.baseUrl;
opts.clientId = opts.clientId || this.clientId;

@@ -296,3 +286,2 @@ opts.clientSecret = opts.clientSecret || this.clientSecret;

opts.password = opts.password || this.password;
opts.platformUrl = opts.platformUrl || this.platformUrl || _environments.default[env].platformUrl;
opts.realm = opts.realm || this.realm;

@@ -355,3 +344,2 @@ opts.secretFile = opts.secretFile || this.secretFile;

* @param {String} [opts.baseUrl] - The base URL to filter by.
* @param {String} [opts.platformUrl] - The platform URL used to get user info and orgs.
* @returns {Promise<?Object>}

@@ -362,3 +350,3 @@ * @access public

async getAccount(opts = {}) {
async find(opts = {}) {
if (!this.tokenStore) {

@@ -387,5 +375,7 @@ log('Cannot get account, no token store');

for (const prop of ['baseUrl', 'clientId', 'realm', 'env']) {
if (account[prop] && opts[prop] !== account[prop]) {
log(`Overriding "${prop}" auth param with account's: ${opts[prop]} -> ${account[prop]}`);
opts[prop] = account[prop];
if (account.auth[prop] && opts[prop] !== account.auth[prop]) {
const from = prop === 'env' ? opts[prop].name : opts[prop];
const to = prop === 'env' ? account.auth[prop].name : account.auth[prop];
log(`Overriding "${prop}" auth param with account's: ${from} -> ${to}`);
opts[prop] = account.auth[prop];
}

@@ -396,3 +386,3 @@ }

if (account.expired) {
if (account.auth.expired) {
// refresh the access token if the refresh token is valid

@@ -407,4 +397,3 @@ log(`Access token for account ${account.name || account.hash} is expired`);

log(`Refreshing access token for account ${account.name || account.hash}`);
const result = await authenticator.getToken();
return result.account;
return await authenticator.getToken();
}

@@ -445,3 +434,2 @@

* launching the auth URL in the default browser.
* @param {String} [opts.platformUrl] - The platform URL used to get user info and orgs.
* @param {String} [opts.realm] - The name of the realm to authenticate with.

@@ -470,3 +458,3 @@ * @param {Number} [opts.timeout] - The number of milliseconds to wait before timing out.

* @param {String} [opts.baseUrl] - The base URL used to filter accounts.
* @returns {Promise<Array>} Returns a list of revoked credentials.
* @returns {Promise<Array>} Resolves a list of revoked credentials.
* @access public

@@ -476,3 +464,3 @@ */

async revoke({
async logout({
accounts,

@@ -505,3 +493,3 @@ all,

for (const entry of revoked) {
const url = `${(0, _endpoints.default)(entry).logout}?id_token_hint=${entry.tokens.id_token}`;
const url = `${(0, _endpoints.default)(entry.auth).logout}?id_token_hint=${entry.auth.tokens.id_token}`;

@@ -511,5 +499,5 @@ try {

status
} = await (0, _amplifyRequest.default)({
url,
validateJSON: true
} = await (0, _got.default)(url, {
responseType: 'json',
retry: 0
});

@@ -549,87 +537,25 @@ log(`Successfully logged out ${highlight(entry.name)} ${magenta(status)} ${note(`(${entry.baseUrl}, ${entry.realm})`)}`);

return await (0, _util.getServerInfo)(url);
}
/**
* Switches the current organization.
*
* @param {Object} opts - Various options.
* @param {String} opts.accessToken - The access token.
* @param {Object} [opts.account] - The account object.
* @param {String} [opts.baseUrl] - The base URL to use for all outgoing requests.
* @param {String} opts.orgId - The org id.
* @param {String} [opts.platformUrl] - The Axway Platform URL.
* @param {String} [opts.realm] - The name of the realm to authenticate with.
* @returns {Promise<Object>} Resolves the selected organization info.
* @access public
*/
async switchOrg(opts) {
if (!opts || typeof opts !== 'object') {
throw _errors.default.INVALID_ARGUMENT('Expected options to be an object');
if (!url || typeof url !== 'string') {
throw _errors.default.INVALID_ARGUMENT('Expected URL to be a non-empty string');
}
this.applyDefaults(opts);
const {
accessToken,
orgId
} = opts;
log(`Switching org to ${orgId}`);
const response = await (0, _amplifyRequest.default)({
formData: {
org_id: orgId
},
headers: {
Accept: 'application/json',
Authorization: `Bearer ${accessToken}`
},
method: 'POST',
url: `${(0, _endpoints.default)(opts).switchLoggedInOrg}`,
validateJSON: true
});
const {
body,
status,
statusCode
} = response;
if (statusCode >= 200 && statusCode < 300) {
if (!body) {
throw _errors.default.REQUEST_FAILED(`Switch org failed: Response has no body (${status})`);
try {
log(`Fetching server info: ${url}...`);
return (await (0, _got.default)(url, {
responseType: 'json',
retry: 0
})).body;
} catch (err) {
if (err.name !== 'ParseError') {
err.message = `Failed to get server info (status ${err.response.statusCode})`;
}
if (!body.success) {
throw _errors.default.REQUEST_FAILED(`Switch org failed: Request was not successful (${status})`);
}
if (!body.result) {
throw _errors.default.REQUEST_FAILED(`Switch org failed: Response did not contain a result (${status})`);
}
log('Switch org successful:');
log(body.result);
const org = {
name: body.result.org_name,
org_id: body.result.org_id
};
if (opts.account && typeof opts.account === 'object' && this.tokenStore) {
opts.account.org = org;
await this.tokenStore.set(opts.account);
}
return org;
throw err;
}
throw (0, _util.handleRequestError)({
label: 'Failed to switch org',
response
});
}
/**
* Sends the device auth code to the platform.
* Update the stored account.
*
* @param {Object} opts - Various options.
* @param {String} opts.accessToken - The access token.
* @param {String} opts.code - The device authorization code.
* @param {Object} account - An object containing the account info.
* @returns {Promise}
* @access public

@@ -639,38 +565,6 @@ */

async sendAuthCode(opts) {
if (!opts || typeof opts !== 'object') {
throw _errors.default.INVALID_ARGUMENT('Expected options to be an object');
async updateAccount(account) {
if (this.tokenStore) {
await this.tokenStore.set(account);
}
this.applyDefaults(opts);
const {
accessToken,
code
} = opts;
const response = await (0, _amplifyRequest.default)({
formData: {
code,
from: 'cli'
},
headers: {
Accept: 'application/json',
Authorization: `Bearer ${accessToken}`
},
method: 'POST',
url: `${(0, _endpoints.default)(opts).deviceauth}`,
validateJSON: true
});
const {
body,
statusCode
} = response;
if (statusCode >= 400 || !body || !body.success || !body.result || body.result.expired === true) {
throw (0, _util.handleRequestError)({
label: 'Failed to send device auth code',
response
});
}
log(`Auth code sent successfully (status ${statusCode})`);
}

@@ -681,2 +575,2 @@

exports.Auth = exports.default = Auth;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJtYWdlbnRhIiwibm90ZSIsInNub29wbG9nZyIsInN0eWxlcyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsIk9iamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJiYXNlVXJsIiwidmFsdWUiLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImVudiIsIm1lc3NhZ2VzIiwicGFzc3dvcmQiLCJwbGF0Zm9ybVVybCIsInJlYWxtIiwic2VjcmV0RmlsZSIsInNlcnZpY2VBY2NvdW50IiwidXNlcm5hbWUiLCJ0b2tlblN0b3JlIiwiVG9rZW5TdG9yZSIsIklOVkFMSURfUEFSQU1FVEVSIiwidG9rZW5TdG9yZVR5cGUiLCJ1bmRlZmluZWQiLCJTZWN1cmVTdG9yZSIsImUiLCJjb2RlIiwiU0VDVVJFX1NUT1JFX1VOQVZBSUxBQkxFIiwiRmlsZVN0b3JlIiwiTWVtb3J5U3RvcmUiLCJhcHBseURlZmF1bHRzIiwiZW52aXJvbm1lbnRzIiwiSU5WQUxJRF9WQUxVRSIsImNyZWF0ZUF1dGhlbnRpY2F0b3IiLCJhdXRoZW50aWNhdG9yIiwiQXV0aGVudGljYXRvciIsIklOVkFMSURfQVJVR01FTlQiLCJPd25lclBhc3N3b3JkIiwiQ2xpZW50U2VjcmV0IiwiU2lnbmVkSldUIiwiUEtDRSIsImdldEFjY291bnQiLCJhY2NvdW50TmFtZSIsImhhc2giLCJhY2NvdW50IiwiZ2V0IiwicHJvcCIsImV4cGlyZWQiLCJuYW1lIiwiZXhwaXJlcyIsInJlZnJlc2giLCJEYXRlIiwibm93IiwicmVzdWx0IiwiZ2V0VG9rZW4iLCJnZXRJbmZvIiwibGlzdCIsImxvZ2luIiwicmV2b2tlIiwiYWNjb3VudHMiLCJhbGwiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJyZXZva2VkIiwiY2xlYXIiLCJkZWxldGUiLCJlbnRyeSIsInVybCIsImxvZ291dCIsInRva2VucyIsImlkX3Rva2VuIiwic3RhdHVzIiwidmFsaWRhdGVKU09OIiwiZXJyIiwic2VydmVySW5mbyIsIndlbGxLbm93biIsInN3aXRjaE9yZyIsImFjY2Vzc1Rva2VuIiwib3JnSWQiLCJyZXNwb25zZSIsImZvcm1EYXRhIiwib3JnX2lkIiwiaGVhZGVycyIsIkFjY2VwdCIsIkF1dGhvcml6YXRpb24iLCJtZXRob2QiLCJzd2l0Y2hMb2dnZWRJbk9yZyIsImJvZHkiLCJzdGF0dXNDb2RlIiwiUkVRVUVTVF9GQUlMRUQiLCJzdWNjZXNzIiwib3JnIiwib3JnX25hbWUiLCJzZXQiLCJsYWJlbCIsInNlbmRBdXRoQ29kZSIsImZyb20iLCJkZXZpY2VhdXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQTs7QUFDQTs7Ozs7Ozs7OztBQXhCQTtBQUNBLElBQUksQ0FBQ0EsS0FBSyxDQUFDQyxpQkFBWCxFQUE4QjtBQUM3QkMsRUFBQUEsT0FBTyxDQUFDLDZCQUFELENBQVA7QUFDQTs7QUF1QkQsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQVUsd0JBQVUsY0FBVixDQUFoQjtBQUNBLE1BQU07QUFBRUMsRUFBQUEsS0FBRjtBQUFTQyxFQUFBQSxTQUFUO0FBQW9CQyxFQUFBQSxPQUFwQjtBQUE2QkMsRUFBQUE7QUFBN0IsSUFBc0NDLG1CQUFVQyxNQUF0RDtBQUVBOzs7O0FBR2UsTUFBTUMsSUFBTixDQUFXO0FBQ3pCOzs7Ozs7O0FBUUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQUMsRUFBQUEsV0FBVyxDQUFDQyxJQUFJLEdBQUcsRUFB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aWYgKi9cbmlmICghRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcblx0cmVxdWlyZSgnc291cmNlLW1hcC1zdXBwb3J0L3JlZ2lzdGVyJyk7XG59XG5cbmltcG9ydCBFIGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IEF1dGhlbnRpY2F0b3IgZnJvbSAnLi9hdXRoZW50aWNhdG9ycy9hdXRoZW50aWNhdG9yJztcbmltcG9ydCBDbGllbnRTZWNyZXQgZnJvbSAnLi9hdXRoZW50aWNhdG9ycy9jbGllbnQtc2VjcmV0JztcbmltcG9ydCBPd25lclBhc3N3b3JkIGZyb20gJy4vYXV0aGVudGljYXRvcnMvb3duZXItcGFzc3dvcmQnO1xuaW1wb3J0IFBLQ0UgZnJvbSAnLi9hdXRoZW50aWNhdG9ycy9wa2NlJztcbmltcG9ydCBTaWduZWRKV1QgZnJvbSAnLi9hdXRoZW50aWNhdG9ycy9zaWduZWQtand0JztcblxuaW1wb3J0IEZpbGVTdG9yZSBmcm9tICcuL3N0b3Jlcy9maWxlLXN0b3JlJztcbmltcG9ydCBNZW1vcnlTdG9yZSBmcm9tICcuL3N0b3Jlcy9tZW1vcnktc3RvcmUnO1xuaW1wb3J0IFNlY3VyZVN0b3JlIGZyb20gJy4vc3RvcmVzL3NlY3VyZS1zdG9yZSc7XG5pbXBvcnQgVG9rZW5TdG9yZSBmcm9tICcuL3N0b3Jlcy90b2tlbi1zdG9yZSc7XG5cbmltcG9ydCBlbnZpcm9ubWVudHMgZnJvbSAnLi9lbnZpcm9ubWVudHMnO1xuaW1wb3J0IGdldEVuZHBvaW50cyBmcm9tICcuL2VuZHBvaW50cyc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5pbXBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSAnLi9zZXJ2ZXInO1xuXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdAYXh3YXkvYW1wbGlmeS1yZXF1ZXN0JztcbmltcG9ydCB7IGdldFNlcnZlckluZm8sIGhhbmRsZVJlcXVlc3RFcnJvciB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IHsgbG9nIH0gPSBzbm9vcGxvZ2coJ2FtcGxpZnktYXV0aCcpO1xuY29uc3QgeyBhbGVydCwgaGlnaGxpZ2h0LCBtYWdlbnRhLCBub3RlIH0gPSBzbm9vcGxvZ2cuc3R5bGVzO1xuXG4vKipcbiAqIEF1dGhlbnRpY2F0ZXMgdGhlIG1hY2hpbmUgYW5kIHJldHJlaXZlcyB0aGUgYXV0aCB0b2tlbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aCB7XG5cdC8qKlxuXHQgKiBUaGUgc3RvcmUgdG8gcGVyc2lzdCB0aGUgdG9rZW4uXG5cdCAqXG5cdCAqIEB0eXBlIHtUb2tlblN0b3JlfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdHRva2VuU3RvcmUgPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgYXV0aGVudGljYXRpb24gaW5zdGFuY2UgYnkgc2V0dGluZyB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhbmQgY3JlYXRpbmcgdGhlXG5cdCAqIHRva2VuIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmJhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgYWxsIG91dGdvaW5nIHJlcXVlc3RzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY2xpZW50SWRdIC0gVGhlIGNsaWVudCBpZCB0byBzcGVjaWZ5IHdoZW4gYXV0aGVudGljYXRpbmcuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5jbGllbnRTZWNyZXRdIC0gVGhlIHNlY3JldCB0b2tlbiB0byB1c2UgdG8gYXV0aGVudGljYXRlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZW52PXByb2RdIC0gVGhlIGVudmlyb25tZW50IG5hbWUuIE11c3QgYmUgYGRldmAsIGBwcmVwcm9kYCwgb3IgYHByb2RgLlxuXHQgKiBUaGUgZW52aXJvbm1lbnQgaXMgYSBzaG9ydGhhbmQgd2F5IG9mIHNwZWNpZnlpbmcgYSBBeHdheSBkZWZhdWx0IGJhc2UgVVJMLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaG9tZURpcl0gLSBUaGUgcGF0aCB0byB0aGUgaG9tZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYGxpYmBcblx0ICogZGlyZWN0b3J5IHdoZXJlIGBrZXl0YXJgIGlzIGxvY2F0ZWQuIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIHdoZW4gYHRva2VuU3RvcmVUeXBlYCBpcyBzZXQgdG9cblx0ICogYHNlY3VyZWAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGFzc3dvcmRdIC0gVGhlIHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGB1c2VybmFtZWAuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5wbGF0Zm9ybVVybF0gLSBUaGUgcGxhdGZvcm0gVVJMIHVzZWQgdG8gZ2V0IHVzZXIgaW5mbyBhbmQgb3Jncy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnNlY3JldEZpbGVdIC0gVGhlIHBhdGggdG8gdGhlIGp3dCBzZWNyZXQgZmlsZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnNlY3VyZVNlcnZpY2VOYW1lPVwiQXh3YXkgQU1QTElGWSBBdXRoXCJdIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnN1bWVyXG5cdCAqIHVzaW5nIHRoaXMgbGlicmFyeSB3aGVuIHVzaW5nIHRoZSBcInNlY3VyZVwiIHRva2VuIHN0b3JlLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnNlcnZpY2VBY2NvdW50PWZhbHNlXSAtIFdoZW4gYHRydWVgLCBpbmRpY2F0ZXMgYXV0aGVudGljYXRpb24gaXMgYmVpbmdcblx0ICogcmVxdWVzdGVkIGJ5IGEgc2VydmljZSBpbnN0ZWFkIG9mIGEgdXNlci5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQ9MF0gLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3Ncblx0ICogdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICogQHBhcmFtIHtUb2tlblN0b3JlfSBbb3B0cy50b2tlblN0b3JlXSAtIEEgdG9rZW4gc3RvcmUgaW5zdGFuY2UgZm9yIHBlcnNpc3RpbmcgdGhlIHRva2Vucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnRva2VuU3RvcmVEaXJdIC0gVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdG9rZW4gc3RvcmUgaXMgc2F2ZWQuIFJlcXVpcmVkXG5cdCAqIHdoZW4gdGhlIGB0b2tlblN0b3JlVHlwZWAgaXMgYHNlY3VyZWAgb3IgYGZpbGVgLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudG9rZW5TdG9yZVR5cGU9c2VjdXJlXSAtIFRoZSB0eXBlIG9mIHN0b3JlIHRvIHBlcnNpc3QgdGhlIGFjY2VzcyB0b2tlbi5cblx0ICogUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6IGBhdXRvYCwgYHNlY3VyZWAsIGBmaWxlYCwgb3IgYG1lbW9yeWAuIElmIHZhbHVlIGlzIGBhdXRvYCwgaXQgd2lsbFxuXHQgKiBhdHRlbXB0IHRvIHVzZSBgc2VjdXJlYCwgdGhlbiBgZmlsZWAsIHRoZW4gYG1lbW9yeWAuIElmIHNldCB0byBgbnVsbGAsIHRoZW4gaXQgd2lsbCBub3Rcblx0ICogcGVyc2lzdCB0aGUgYWNjZXNzIHRva2VuLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudXNlcm5hbWVdIC0gVGhlIHVzZXJuYW1lIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGBwYXNzd29yZGAuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdFx0YmFzZVVybDogICAgICAgIHsgdmFsdWU6IG9wdHMuYmFzZVVybCB9LFxuXHRcdFx0Y2xpZW50SWQ6ICAgICAgIHsgdmFsdWU6IG9wdHMuY2xpZW50SWQgfSxcblx0XHRcdGNsaWVudFNlY3JldDogICB7IHZhbHVlOiBvcHRzLmNsaWVudFNlY3JldCB9LFxuXHRcdFx0ZW52OiAgICAgICAgICAgIHsgdmFsdWU6IG9wdHMuZW52IH0sXG5cdFx0XHRtZXNzYWdlczogICAgICAgeyB2YWx1ZTogb3B0cy5tZXNzYWdlcyB9LFxuXHRcdFx0cGFzc3dvcmQ6ICAgICAgIHsgdmFsdWU6IG9wdHMucGFzc3dvcmQgfSxcblx0XHRcdHBsYXRmb3JtVXJsOiAgICB7IHZhbHVlOiBvcHRzLnBsYXRmb3JtVXJsIH0sXG5cdFx0XHRyZWFsbTogICAgICAgICAgeyB2YWx1ZTogb3B0cy5yZWFsbSB9LFxuXHRcdFx0c2VjcmV0RmlsZTogICAgIHsgdmFsdWU6IG9wdHMuc2VjcmV0RmlsZSB9LFxuXHRcdFx0c2VydmljZUFjY291bnQ6IHsgdmFsdWU6IG9wdHMuc2VydmljZUFjY291bnQgfSxcblx0XHRcdHVzZXJuYW1lOiAgICAgICB7IHZhbHVlOiBvcHRzLnVzZXJuYW1lIH1cblx0XHR9KTtcblxuXHRcdGlmIChvcHRzLnRva2VuU3RvcmUpIHtcblx0XHRcdGlmICghKG9wdHMudG9rZW5TdG9yZSBpbnN0YW5jZW9mIFRva2VuU3RvcmUpKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9QQVJBTUVURVIoJ0V4cGVjdGVkIHRoZSB0b2tlbiBzdG9yZSB0byBiZSBhIFwiVG9rZW5TdG9yZVwiIGluc3RhbmNlJyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRva2VuU3RvcmUgPSBvcHRzLnRva2VuU3RvcmU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRva2VuU3RvcmVUeXBlID0gb3B0cy50b2tlblN0b3JlVHlwZSA9PT0gdW5kZWZpbmVkID8gJ3NlY3VyZScgOiBvcHRzLnRva2VuU3RvcmVUeXBlO1xuXHRcdFx0c3dpdGNoICh0b2tlblN0b3JlVHlwZSkge1xuXHRcdFx0XHRjYXNlICdhdXRvJzpcblx0XHRcdFx0Y2FzZSAnc2VjdXJlJzpcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpcy50b2tlblN0b3JlID0gbmV3IFNlY3VyZVN0b3JlKG9wdHMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cdFx0XHRcdFx0XHRpZiAodG9rZW5TdG9yZVR5cGUgPT09ICdhdXRvJykge1xuXHRcdFx0XHRcdFx0XHQvLyBsZXQgJ2F1dG8nIGZhbGwgdGhyb3VnaFxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlLmNvZGUgPT09ICdFUlJfS0VZVEFSX05PVF9GT1VORCcpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgRS5TRUNVUkVfU1RPUkVfVU5BVkFJTEFCTEUoJ1NlY3VyZSB0b2tlbiBzdG9yZSBpcyBub3QgYXZhaWxhYmxlLlxcblBsZWFzZSByZWluc3RhbGwgb3IgcmVidWlsZCB0aGlzIGFwcGxpY2F0aW9uLicpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FzZSAnZmlsZSc6XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoaXMudG9rZW5TdG9yZSA9IG5ldyBGaWxlU3RvcmUob3B0cyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cblx0XHRcdFx0XHRcdGlmICh0b2tlblN0b3JlVHlwZSA9PT0gJ2F1dG8nICYmIGUuY29kZSA9PT0gJ0VSUl9NSVNTSU5HX1JFUVVJUkVEX1BBUkFNRVRFUicpIHtcblx0XHRcdFx0XHRcdFx0Ly8gbGV0ICdhdXRvJyBmYWxsIHRocm91Z2hcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ21lbW9yeSc6XG5cdFx0XHRcdFx0dGhpcy50b2tlblN0b3JlID0gbmV3IE1lbW9yeVN0b3JlKG9wdHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBvcHRpb25zIGNvbnRhaW5zIHRoZSBjb25maWd1cmFibGUgc2V0dGluZ3MuIFZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgY29kZVxuXHQgKiByZXF1aXJpbmcgdGhlIHZhbHVlcy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRhcHBseURlZmF1bHRzKG9wdHMgPSB7fSkge1xuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbnYgPSBvcHRzLmVudiB8fCB0aGlzLmVudiB8fCAncHJvZCc7XG5cdFx0aWYgKCFlbnZpcm9ubWVudHNbZW52XSkge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX1ZBTFVFKGBJbnZhbGlkIGVudmlyb25tZW50OiAke29wdHMuZW52IHx8IHRoaXMuZW52fWApO1xuXHRcdH1cblxuXHRcdG9wdHMuYmFzZVVybCAgICAgICAgPSBvcHRzLmJhc2VVcmwgfHwgdGhpcy5iYXNlVXJsIHx8IGVudmlyb25tZW50c1tlbnZdLmJhc2VVcmw7XG5cdFx0b3B0cy5jbGllbnRJZCAgICAgICA9IG9wdHMuY2xpZW50SWQgfHwgdGhpcy5jbGllbnRJZDtcblx0XHRvcHRzLmNsaWVudFNlY3JldCAgID0gb3B0cy5jbGllbnRTZWNyZXQgfHwgdGhpcy5jbGllbnRTZWNyZXQ7XG5cdFx0b3B0cy5lbnYgICAgICAgICAgICA9IGVudjtcblx0XHRvcHRzLm1lc3NhZ2VzICAgICAgID0gb3B0cy5tZXNzYWdlcyB8fCB0aGlzLm1lc3NhZ2VzO1xuXHRcdG9wdHMucGFzc3dvcmQgICAgICAgPSBvcHRzLnBhc3N3b3JkIHx8IHRoaXMucGFzc3dvcmQ7XG5cdFx0b3B0cy5wbGF0Zm9ybVVybCAgICA9IG9wdHMucGxhdGZvcm1VcmwgfHwgdGhpcy5wbGF0Zm9ybVVybCB8fCBlbnZpcm9ubWVudHNbZW52XS5wbGF0Zm9ybVVybDtcblx0XHRvcHRzLnJlYWxtICAgICAgICAgID0gb3B0cy5yZWFsbSB8fCB0aGlzLnJlYWxtO1xuXHRcdG9wdHMuc2VjcmV0RmlsZSAgICAgPSBvcHRzLnNlY3JldEZpbGUgfHwgdGhpcy5zZWNyZXRGaWxlO1xuXHRcdG9wdHMuc2VydmljZUFjY291bnQgPSBvcHRzLnNlcnZpY2VBY2NvdW50IHx8IHRoaXMuc2VydmljZUFjY291bnQ7XG5cdFx0b3B0cy50b2tlblN0b3JlICAgICA9IHRoaXMudG9rZW5TdG9yZTtcblx0XHRvcHRzLnVzZXJuYW1lICAgICAgID0gb3B0cy51c2VybmFtZSB8fCB0aGlzLnVzZXJuYW1lO1xuXG5cdFx0cmV0dXJuIG9wdHM7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhdXRoZXRuaWNhdG9yIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBvcHRpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge0F1dGhlbnRpY2F0b3J9IFtvcHRzLmF1dGhlbnRpY2F0b3JdIC0gQW4gYXV0aGVudGljYXRvciBpbnN0YW5jZSB0byB1c2UuIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGF1dG8tc2VsZWN0ZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5jbGllbnRTZWNyZXRdIC0gVGhlIHNlY3JldCB0b2tlbiB0byB1c2UgdG8gYXV0aGVudGljYXRlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGFzc3dvcmRdIC0gVGhlIHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGB1c2VybmFtZWAuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zZWNyZXRGaWxlXSAtIFRoZSBwYXRoIHRvIHRoZSBqd3Qgc2VjcmV0IGZpbGUuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuc2VydmljZUFjY291bnQ9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGluZGljYXRlcyBhdXRoZW50aWNhdGlvbiBpcyBiZWluZ1xuXHQgKiByZXF1ZXN0ZWQgYnkgYSBzZXJ2aWNlIGluc3RlYWQgb2YgYSB1c2VyLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudXNlcm5hbWVdIC0gVGhlIHVzZXJuYW1lIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGBwYXNzd29yZGAuXG5cdCAqIEByZXR1cm5zIHtBdXRoZW50aWNhdG9yfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y3JlYXRlQXV0aGVudGljYXRvcihvcHRzID0ge30pIHtcblx0XHRpZiAob3B0cy5hdXRoZW50aWNhdG9yKSB7XG5cdFx0XHRpZiAoIShvcHRzLmF1dGhlbnRpY2F0b3IgaW5zdGFuY2VvZiBBdXRoZW50aWNhdG9yKSkge1xuXHRcdFx0XHR0aHJvdyBFLklOVkFMSURfQVJVR01FTlQoJ0V4cGVjdGVkIGF1dGhlbnRpY2F0b3IgdG8gYmUgYW4gQXV0aGVudGljYXRvciBpbnN0YW5jZS4nKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvcHRzLmF1dGhlbnRpY2F0b3I7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBvcHRzLnVzZXJuYW1lID09PSAnc3RyaW5nJyAmJiBvcHRzLnVzZXJuYW1lICYmIHR5cGVvZiBvcHRzLnBhc3N3b3JkID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIG5ldyBPd25lclBhc3N3b3JkKG9wdHMpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb3B0cy5jbGllbnRTZWNyZXQgPT09ICdzdHJpbmcnICYmIG9wdHMuY2xpZW50U2VjcmV0KSB7XG5cdFx0XHRyZXR1cm4gbmV3IENsaWVudFNlY3JldChvcHRzKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9wdHMuc2VjcmV0RmlsZSA9PT0gJ3N0cmluZycgJiYgb3B0cy5zZWNyZXRGaWxlKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFNpZ25lZEpXVChvcHRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFBLQ0Uob3B0cyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhY2Nlc3MgdG9rZW4uIElmIHRoZSBhdXRoZW50aWNhdG9yIGlzIGludGVyYWN0aXZlIGFuZCB0aGUgYXV0aGVudGljYXRvciBoYXMgbm90XG5cdCAqIHlldCBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHNlcnZlciwgYW4gZXJyb3IgaXMgdGhyb3duLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IG9wdHMgLSBSZXF1aXJlZCBvcHRpb25zIG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGhhc2ggb3IgYWNjb3VudFxuXHQgKiBuYW1lLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5hY2NvdW50TmFtZSAtIFRoZSBhY2NvdW50IG5hbWUgdG8gcmV0cmlldmUuXG5cdCAqIEBwYXJhbSB7QXV0aGVudGljYXRvcn0gW29wdHMuYXV0aGVudGljYXRvcl0gLSBBbiBhdXRoZW50aWNhdG9yIGluc3RhbmNlIHRvIHVzZS4gSWYgbm90XG5cdCAqIHNwZWNpZmllZCwgb25lIHdpbGwgYmUgYXV0by1zZWxlY3RlZCBiYXNlZCBvbiB0aGUgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmJhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHRvIGZpbHRlciBieS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnBsYXRmb3JtVXJsXSAtIFRoZSBwbGF0Zm9ybSBVUkwgdXNlZCB0byBnZXQgdXNlciBpbmZvIGFuZCBvcmdzLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTw/T2JqZWN0Pn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldEFjY291bnQob3B0cyA9IHt9KSB7XG5cdFx0aWYgKCF0aGlzLnRva2VuU3RvcmUpIHtcblx0XHRcdGxvZygnQ2Fubm90IGdldCBhY2NvdW50LCBubyB0b2tlbiBzdG9yZScpO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0bGV0IGF1dGhlbnRpY2F0b3I7XG5cblx0XHRpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRvcHRzID0gdGhpcy5hcHBseURlZmF1bHRzKHsgYWNjb3VudE5hbWU6IG9wdHMsIGhhc2g6IG9wdHMgfSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblx0XHRcdGF1dGhlbnRpY2F0b3IgPSB0aGlzLmNyZWF0ZUF1dGhlbnRpY2F0b3Iob3B0cyk7XG5cdFx0XHRvcHRzLmhhc2ggPSBhdXRoZW50aWNhdG9yLmhhc2g7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWNjb3VudCA9IGF3YWl0IHRoaXMudG9rZW5TdG9yZS5nZXQob3B0cyk7XG5cblx0XHRpZiAoYWNjb3VudCkge1xuXHRcdFx0Ly8gY29weSBvdmVyIHRoZSBjb3JyZWN0IGF1dGggcGFyYW1zXG5cdFx0XHRmb3IgKGNvbnN0IHByb3Agb2YgWyAnYmFzZVVybCcsICdjbGllbnRJZCcsICdyZWFsbScsICdlbnYnIF0pIHtcblx0XHRcdFx0aWYgKGFjY291bnRbcHJvcF0gJiYgb3B0c1twcm9wXSAhPT0gYWNjb3VudFtwcm9wXSkge1xuXHRcdFx0XHRcdGxvZyhgT3ZlcnJpZGluZyBcIiR7cHJvcH1cIiBhdXRoIHBhcmFtIHdpdGggYWNjb3VudCdzOiAke29wdHNbcHJvcF19IC0+ICR7YWNjb3VudFtwcm9wXX1gKTtcblx0XHRcdFx0XHRvcHRzW3Byb3BdID0gYWNjb3VudFtwcm9wXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXV0aGVudGljYXRvciA9IHRoaXMuY3JlYXRlQXV0aGVudGljYXRvcihvcHRzKTtcblxuXHRcdFx0aWYgKGFjY291bnQuZXhwaXJlZCkge1xuXHRcdFx0XHQvLyByZWZyZXNoIHRoZSBhY2Nlc3MgdG9rZW4gaWYgdGhlIHJlZnJlc2ggdG9rZW4gaXMgdmFsaWRcblx0XHRcdFx0bG9nKGBBY2Nlc3MgdG9rZW4gZm9yIGFjY291bnQgJHthY2NvdW50Lm5hbWUgfHwgYWNjb3VudC5oYXNofSBpcyBleHBpcmVkYCk7XG5cblx0XHRcdFx0aWYgKGFjY291bnQuZXhwaXJlcy5yZWZyZXNoIDwgRGF0ZS5ub3coKSkge1xuXHRcdFx0XHRcdGxvZyhgVW5hYmxlIHRvIHJlZnJlc2ggYWNjZXNzIHRva2VuIGZvciBhY2NvdW50ICR7YWNjb3VudC5uYW1lIHx8IGFjY291bnQuaGFzaH0gYmVjYXVzZSByZWZyZXNoIHRva2VuIGlzIGFsc28gZXhwaXJlZGApO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxvZyhgUmVmcmVzaGluZyBhY2Nlc3MgdG9rZW4gZm9yIGFjY291bnQgJHthY2NvdW50Lm5hbWUgfHwgYWNjb3VudC5oYXNofWApO1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRoZW50aWNhdG9yLmdldFRva2VuKCk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQuYWNjb3VudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGF3YWl0IGF1dGhlbnRpY2F0b3IuZ2V0SW5mbyhhY2NvdW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHZhbGlkIGFjY2VzcyB0b2tlbnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5Pn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxpc3QoKSB7XG5cdFx0aWYgKHRoaXMudG9rZW5TdG9yZSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHRoaXMudG9rZW5TdG9yZS5saXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdXRoZW50aWNhdGVzIHVzaW5nIHRoZSBjb25maWd1cmVkIGF1dGhlbnRpY2F0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbb3B0LmFwcF0gLSBTcGVjaWZ5IHRoZSBhcHAgdG8gb3BlbiB0aGUgYHRhcmdldGAgd2l0aCwgb3IgYW5cblx0ICogYXJyYXkgd2l0aCB0aGUgYXBwIGFuZCBhcHAgYXJndW1lbnRzLlxuXHQgKiBAcGFyYW0ge0F1dGhlbnRpY2F0b3J9IFtvcHRzLmF1dGhlbnRpY2F0b3JdIC0gQW4gYXV0aGVudGljYXRvciBpbnN0YW5jZSB0byB1c2UuIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGF1dG8tc2VsZWN0ZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmNsaWVudElkXSAtIFRoZSBjbGllbnQgaWQgdG8gc3BlY2lmeSB3aGVuIGF1dGhlbnRpY2F0aW5nLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY29kZV0gLSBUaGUgYXV0aGVudGljYXRpb24gY29kZSBmcm9tIGEgc3VjY2Vzc2Z1bCBpbnRlcmFjdGl2ZSBsb2dpbi5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVudj1wcm9kXSAtIFRoZSBlbnZpcm9ubWVudCBuYW1lLiBNdXN0IGJlIGBkZXZgLCBgcHJlcHJvZGAsIG9yIGBwcm9kYC5cblx0ICogVGhlIGVudmlyb25tZW50IGlzIGEgc2hvcnRoYW5kIHdheSBvZiBzcGVjaWZ5aW5nIGEgQXh3YXkgZGVmYXVsdCBiYXNlIFVSTC5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5tYW51YWw9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGl0IHdpbGwgcmV0dXJuIHRoZSBhdXRoIFVSTCBpbnN0ZWFkIG9mXG5cdCAqIGxhdW5jaGluZyB0aGUgYXV0aCBVUkwgaW4gdGhlIGRlZmF1bHQgYnJvd3Nlci5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnBsYXRmb3JtVXJsXSAtIFRoZSBwbGF0Zm9ybSBVUkwgdXNlZCB0byBnZXQgdXNlciBpbmZvIGFuZCBvcmdzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucmVhbG1dIC0gVGhlIG5hbWUgb2YgdGhlIHJlYWxtIHRvIGF1dGhlbnRpY2F0ZSB3aXRoLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdHMudGltZW91dF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aW1pbmcgb3V0LlxuXHQgKiBEZWZhdWx0cyB0byB0aGUgYGludGVyYWN0aXZlTG9naW5UaW1lb3V0YCBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy53YWl0PWZhbHNlXSAtIFdhaXQgZm9yIHRoZSBvcGVuZWQgYXBwIHRvIGV4aXQgYmVmb3JlIGZ1bGZpbGxpbmcgdGhlXG5cdCAqIHByb21pc2UuIElmIGBmYWxzZWAgaXQncyBmdWxmaWxsZWQgaW1tZWRpYXRlbHkgd2hlbiBvcGVuaW5nIHRoZSBhcHAuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFJlc29sdmVzIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhY2Nlc3MgdG9rZW4sIGFjY291bnQgbmFtZSwgYW5kXG5cdCAqIHVzZXIgaW5mby5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxvZ2luKG9wdHMgPSB7fSkge1xuXHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblx0XHRjb25zdCBhdXRoZW50aWNhdG9yID0gdGhpcy5jcmVhdGVBdXRoZW50aWNhdG9yKG9wdHMpO1xuXHRcdHJldHVybiBhd2FpdCBhdXRoZW50aWNhdG9yLmxvZ2luKG9wdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldm9rZXMgYWxsIG9yIHNwZWNpZmljIGF1dGhlbnRpY2F0ZWQgYWNjb3VudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gUmVxdWlyZWQgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPnxTdHJpbmd9IG9wdHMuYWNjb3VudHMgLSBBIGxpc3Qgb2YgYWNjb3VudHMgbmFtZXMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0cy5hbGwgLSBXaGVuIGB0cnVlYCwgcmV2b2tlcyBhbGwgYWNjb3VudHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fSBSZXR1cm5zIGEgbGlzdCBvZiByZXZva2VkIGNyZWRlbnRpYWxzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgcmV2b2tlKHsgYWNjb3VudHMsIGFsbCwgYmFzZVVybCB9ID0ge30pIHtcblx0XHRpZiAoIXRoaXMudG9rZW5TdG9yZSkge1xuXHRcdFx0bG9nKCdObyB0b2tlbiBzdG9yZSwgcmV0dXJuaW5nIGVtcHR5IGFycmF5Jyk7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0aWYgKCFhbGwgJiYgdHlwZW9mIGFjY291bnRzICE9PSAnc3RyaW5nJyAmJiAhQXJyYXkuaXNBcnJheShhY2NvdW50cykpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgYWNjb3VudHMgdG8gYmUgXCJhbGxcIiBvciBhIGxpc3Qgb2YgYWNjb3VudHMnKTtcblx0XHR9XG5cblx0XHRpZiAoIWFsbCAmJiAhYWNjb3VudHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0bGV0IHJldm9rZWQ7XG5cdFx0aWYgKGFsbCkge1xuXHRcdFx0cmV2b2tlZCA9IGF3YWl0IHRoaXMudG9rZW5TdG9yZS5jbGVhcihiYXNlVXJsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV2b2tlZCA9IGF3YWl0IHRoaXMudG9rZW5TdG9yZS5kZWxldGUoYWNjb3VudHMsIGJhc2VVcmwpO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHJldm9rZWQpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHJldm9rZWQpIHtcblx0XHRcdFx0Y29uc3QgdXJsID0gYCR7Z2V0RW5kcG9pbnRzKGVudHJ5KS5sb2dvdXR9P2lkX3Rva2VuX2hpbnQ9JHtlbnRyeS50b2tlbnMuaWRfdG9rZW59YDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgcmVxdWVzdCh7IHVybCwgdmFsaWRhdGVKU09OOiB0cnVlIH0pO1xuXHRcdFx0XHRcdGxvZyhgU3VjY2Vzc2Z1bGx5IGxvZ2dlZCBvdXQgJHtoaWdobGlnaHQoZW50cnkubmFtZSl9ICR7bWFnZW50YShzdGF0dXMpfSAke25vdGUoYCgke2VudHJ5LmJhc2VVcmx9LCAke2VudHJ5LnJlYWxtfSlgKX1gKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0bG9nKGBGYWlsZWQgdG8gbG9nIG91dCAke2hpZ2hsaWdodChlbnRyeS5uYW1lKX0gJHthbGVydChlcnIuc3RhdHVzKX0gJHtub3RlKGAoJHtlbnRyeS5iYXNlVXJsfSwgJHtlbnRyeS5yZWFsbX0pYCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV2b2tlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNjb3ZlcnMgYXZhaWxhYmxlIGVuZHBvaW50cyBiYXNlZCBvbiB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyJ3MgT3BlbklEIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVudj1wcm9kXSAtIFRoZSBlbnZpcm9ubWVudCBuYW1lLiBNdXN0IGJlIGBkZXZgLCBgcHJlcHJvZGAsIG9yIGBwcm9kYC5cblx0ICogVGhlIGVudmlyb25tZW50IGlzIGEgc2hvcnRoYW5kIHdheSBvZiBzcGVjaWZ5aW5nIGEgQXh3YXkgZGVmYXVsdCBiYXNlIFVSTC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVybF0gLSBBbiBvcHRpb25hbCBVUkwgdG8gZGlzY292ZXIgdGhlIGF2YWlsYWJsZSBlbmRwb2ludHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXJ2ZXJJbmZvKG9wdHMgPSB7fSkge1xuXHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblxuXHRcdGxldCB7IHVybCB9ID0gb3B0cztcblxuXHRcdGlmICghdXJsKSB7XG5cdFx0XHR1cmwgPSBnZXRFbmRwb2ludHMob3B0cykud2VsbEtub3duO1xuXHRcdH1cblxuXHRcdHJldHVybiBhd2FpdCBnZXRTZXJ2ZXJJbmZvKHVybCk7XG5cdH1cblxuXHQvKipcblx0ICogU3dpdGNoZXMgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMuYWNjZXNzVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuYWNjb3VudF0gLSBUaGUgYWNjb3VudCBvYmplY3QuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMub3JnSWQgLSBUaGUgb3JnIGlkLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGxhdGZvcm1VcmxdIC0gVGhlIEF4d2F5IFBsYXRmb3JtIFVSTC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gUmVzb2x2ZXMgdGhlIHNlbGVjdGVkIG9yZ2FuaXphdGlvbiBpbmZvLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc3dpdGNoT3JnKG9wdHMpIHtcblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5hcHBseURlZmF1bHRzKG9wdHMpO1xuXG5cdFx0Y29uc3QgeyBhY2Nlc3NUb2tlbiwgb3JnSWQgfSA9IG9wdHM7XG5cdFx0bG9nKGBTd2l0Y2hpbmcgb3JnIHRvICR7b3JnSWR9YCk7XG5cblx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3Qoe1xuXHRcdFx0Zm9ybURhdGE6IHsgb3JnX2lkOiBvcmdJZCB9LFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRcdFx0QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VufWBcblx0XHRcdH0sXG5cdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdHVybDogYCR7Z2V0RW5kcG9pbnRzKG9wdHMpLnN3aXRjaExvZ2dlZEluT3JnfWAsXG5cdFx0XHR2YWxpZGF0ZUpTT046IHRydWVcblx0XHR9KTtcblx0XHRjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzQ29kZSB9ID0gcmVzcG9uc2U7XG5cblx0XHRpZiAoc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVzQ29kZSA8IDMwMCkge1xuXHRcdFx0aWYgKCFib2R5KSB7XG5cdFx0XHRcdHRocm93IEUuUkVRVUVTVF9GQUlMRUQoYFN3aXRjaCBvcmcgZmFpbGVkOiBSZXNwb25zZSBoYXMgbm8gYm9keSAoJHtzdGF0dXN9KWApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJvZHkuc3VjY2Vzcykge1xuXHRcdFx0XHR0aHJvdyBFLlJFUVVFU1RfRkFJTEVEKGBTd2l0Y2ggb3JnIGZhaWxlZDogUmVxdWVzdCB3YXMgbm90IHN1Y2Nlc3NmdWwgKCR7c3RhdHVzfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFib2R5LnJlc3VsdCkge1xuXHRcdFx0XHR0aHJvdyBFLlJFUVVFU1RfRkFJTEVEKGBTd2l0Y2ggb3JnIGZhaWxlZDogUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGEgcmVzdWx0ICgke3N0YXR1c30pYCk7XG5cdFx0XHR9XG5cblx0XHRcdGxvZygnU3dpdGNoIG9yZyBzdWNjZXNzZnVsOicpO1xuXHRcdFx0bG9nKGJvZHkucmVzdWx0KTtcblxuXHRcdFx0Y29uc3Qgb3JnID0ge1xuXHRcdFx0XHRuYW1lOiAgIGJvZHkucmVzdWx0Lm9yZ19uYW1lLFxuXHRcdFx0XHRvcmdfaWQ6IGJvZHkucmVzdWx0Lm9yZ19pZFxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKG9wdHMuYWNjb3VudCAmJiB0eXBlb2Ygb3B0cy5hY2NvdW50ID09PSAnb2JqZWN0JyAmJiB0aGlzLnRva2VuU3RvcmUpIHtcblx0XHRcdFx0b3B0cy5hY2NvdW50Lm9yZyA9IG9yZztcblx0XHRcdFx0YXdhaXQgdGhpcy50b2tlblN0b3JlLnNldChvcHRzLmFjY291bnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb3JnO1xuXHRcdH1cblxuXHRcdHRocm93IGhhbmRsZVJlcXVlc3RFcnJvcih7IGxhYmVsOiAnRmFpbGVkIHRvIHN3aXRjaCBvcmcnLCByZXNwb25zZSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZW5kcyB0aGUgZGV2aWNlIGF1dGggY29kZSB0byB0aGUgcGxhdGZvcm0uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5hY2Nlc3NUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLmNvZGUgLSBUaGUgZGV2aWNlIGF1dGhvcml6YXRpb24gY29kZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNlbmRBdXRoQ29kZShvcHRzKSB7XG5cdFx0aWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblxuXHRcdGNvbnN0IHsgYWNjZXNzVG9rZW4sIGNvZGUgfSA9IG9wdHM7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHtcblx0XHRcdGZvcm1EYXRhOiB7XG5cdFx0XHRcdGNvZGUsXG5cdFx0XHRcdGZyb206ICdjbGknXG5cdFx0XHR9LFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRcdFx0QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VufWBcblx0XHRcdH0sXG5cdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdHVybDogYCR7Z2V0RW5kcG9pbnRzKG9wdHMpLmRldmljZWF1dGh9YCxcblx0XHRcdHZhbGlkYXRlSlNPTjogdHJ1ZVxuXHRcdH0pO1xuXHRcdGNvbnN0IHsgYm9keSwgc3RhdHVzQ29kZSB9ID0gcmVzcG9uc2U7XG5cblx0XHRpZiAoc3RhdHVzQ29kZSA+PSA0MDAgfHwgIWJvZHkgfHwgIWJvZHkuc3VjY2VzcyB8fCAhYm9keS5yZXN1bHQgfHwgYm9keS5yZXN1bHQuZXhwaXJlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgaGFuZGxlUmVxdWVzdEVycm9yKHsgbGFiZWw6ICdGYWlsZWQgdG8gc2VuZCBkZXZpY2UgYXV0aCBjb2RlJywgcmVzcG9uc2UgfSk7XG5cdFx0fVxuXG5cdFx0bG9nKGBBdXRoIGNvZGUgc2VudCBzdWNjZXNzZnVsbHkgKHN0YXR1cyAke3N0YXR1c0NvZGV9KWApO1xuXHR9XG59XG5cbmV4cG9ydCB7XG5cdEF1dGgsXG5cblx0QXV0aGVudGljYXRvcixcblx0Q2xpZW50U2VjcmV0LFxuXHRPd25lclBhc3N3b3JkLFxuXHRQS0NFLFxuXHRTaWduZWRKV1QsXG5cblx0RmlsZVN0b3JlLFxuXHRNZW1vcnlTdG9yZSxcblx0U2VjdXJlU3RvcmUsXG5cdFRva2VuU3RvcmUsXG5cblx0ZW52aXJvbm1lbnRzLFxuXHRnZXRFbmRwb2ludHMsXG5cdHNlcnZlclxufTtcbiJdLCJmaWxlIjoiaW5kZXguanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJtYWdlbnRhIiwibm90ZSIsInNub29wbG9nZyIsInN0eWxlcyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsIk9iamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJiYXNlVXJsIiwidmFsdWUiLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImVudiIsIm1lc3NhZ2VzIiwicGFzc3dvcmQiLCJyZWFsbSIsInNlY3JldEZpbGUiLCJzZXJ2aWNlQWNjb3VudCIsInVzZXJuYW1lIiwidG9rZW5TdG9yZSIsIlRva2VuU3RvcmUiLCJJTlZBTElEX1BBUkFNRVRFUiIsInRva2VuU3RvcmVUeXBlIiwidW5kZWZpbmVkIiwiU2VjdXJlU3RvcmUiLCJlIiwiY29kZSIsIlNFQ1VSRV9TVE9SRV9VTkFWQUlMQUJMRSIsIkZpbGVTdG9yZSIsIk1lbW9yeVN0b3JlIiwiYXBwbHlEZWZhdWx0cyIsImVudmlyb25tZW50cyIsInJlc29sdmUiLCJJTlZBTElEX1ZBTFVFIiwiY3JlYXRlQXV0aGVudGljYXRvciIsImF1dGhlbnRpY2F0b3IiLCJBdXRoZW50aWNhdG9yIiwiSU5WQUxJRF9BUlVHTUVOVCIsIk93bmVyUGFzc3dvcmQiLCJDbGllbnRTZWNyZXQiLCJTaWduZWRKV1QiLCJQS0NFIiwiZmluZCIsImFjY291bnROYW1lIiwiaGFzaCIsImFjY291bnQiLCJnZXQiLCJwcm9wIiwiYXV0aCIsImZyb20iLCJuYW1lIiwidG8iLCJleHBpcmVkIiwiZXhwaXJlcyIsInJlZnJlc2giLCJEYXRlIiwibm93IiwiZ2V0VG9rZW4iLCJnZXRJbmZvIiwibGlzdCIsImxvZ2luIiwibG9nb3V0IiwiYWNjb3VudHMiLCJhbGwiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJyZXZva2VkIiwiY2xlYXIiLCJkZWxldGUiLCJlbnRyeSIsInVybCIsInRva2VucyIsImlkX3Rva2VuIiwic3RhdHVzIiwicmVzcG9uc2VUeXBlIiwicmV0cnkiLCJlcnIiLCJzZXJ2ZXJJbmZvIiwid2VsbEtub3duIiwiYm9keSIsIm1lc3NhZ2UiLCJyZXNwb25zZSIsInN0YXR1c0NvZGUiLCJ1cGRhdGVBY2NvdW50Iiwic2V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7QUFDQTs7Ozs7Ozs7Ozs7O0FBdkJBO0FBQ0EsSUFBSSxDQUFDQSxLQUFLLENBQUNDLGlCQUFYLEVBQThCO0FBQzdCQyxFQUFBQSxPQUFPLENBQUMsNkJBQUQsQ0FBUDtBQUNBOztBQXNCRCxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSxjQUFWLENBQWhCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBLFNBQVQ7QUFBb0JDLEVBQUFBLE9BQXBCO0FBQTZCQyxFQUFBQTtBQUE3QixJQUFzQ0MsbUJBQVVDLE1BQXREO0FBRUE7Ozs7QUFHZSxNQUFNQyxJQUFOLENBQVc7QUFDekI7Ozs7Ozs7QUFRQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ0FDLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBSSxHQUFHLEVBQVIsRUFBWTtBQUFBLHdDQWxDVixJQWtDVTs7QUFDdEIsUUFBSSxDQUFDQSxJQUFELElBQVMsT0FBT0EsSUFBUCxLQUFnQixRQUE3QixFQUF1QztBQUN0QyxZQUFNQyxnQkFBRUMsZ0JBQUYsQ0FBbUIsa0NBQW5CLENBQU47QUFDQTs7QUFFREMsSUFBQUEsTUFBTSxDQUFDQyxnQkFBUCxDQUF3QixJQUF4QixFQUE4QjtBQUM3QkMsTUFBQUEs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T0EsR0FBUCxLQUFlLFFBQTNCLEVBQXFDO0FBQ3BDLFlBQU1uRSxnQkFBRUMsZ0JBQUYsQ0FBbUIsdUNBQW5CLENBQU47QUFDQTs7QUFFRCxRQUFJO0FBQ0hYLE1BQUFBLEdBQUcsQ0FBRSx5QkFBd0I2RSxHQUFJLEtBQTlCLENBQUg7QUFDQSxhQUFPLENBQUMsTUFBTSxrQkFBSUEsR0FBSixFQUFTO0FBQUVJLFFBQUFBLFlBQVksRUFBRSxNQUFoQjtBQUF3QkMsUUFBQUEsS0FBSyxFQUFFO0FBQS9CLE9BQVQsQ0FBUCxFQUFxREksSUFBNUQ7QUFDQSxLQUhELENBR0UsT0FBT0gsR0FBUCxFQUFZO0FBQ2IsVUFBSUEsR0FBRyxDQUFDM0IsSUFBSixLQUFhLFlBQWpCLEVBQStCO0FBQzlCMkIsUUFBQUEsR0FBRyxDQUFDSSxPQUFKLEdBQWUscUNBQW9DSixHQUFHLENBQUNLLFFBQUosQ0FBYUMsVUFBVyxHQUEzRTtBQUNBOztBQUNELFlBQU1OLEdBQU47QUFDQTtBQUNEO0FBRUQ7Ozs7Ozs7OztBQU9BLFFBQU1PLGFBQU4sQ0FBb0J2QyxPQUFwQixFQUE2QjtBQUM1QixRQUFJLEtBQUsxQixVQUFULEVBQXFCO0FBQ3BCLFlBQU0sS0FBS0EsVUFBTCxDQUFnQmtFLEdBQWhCLENBQW9CeEMsT0FBcEIsQ0FBTjtBQUNBO0FBQ0Q7O0FBbFh3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuaW1wb3J0IEUgZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgQXV0aGVudGljYXRvciBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL2F1dGhlbnRpY2F0b3InO1xuaW1wb3J0IENsaWVudFNlY3JldCBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL2NsaWVudC1zZWNyZXQnO1xuaW1wb3J0IE93bmVyUGFzc3dvcmQgZnJvbSAnLi9hdXRoZW50aWNhdG9ycy9vd25lci1wYXNzd29yZCc7XG5pbXBvcnQgUEtDRSBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL3BrY2UnO1xuaW1wb3J0IFNpZ25lZEpXVCBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL3NpZ25lZC1qd3QnO1xuXG5pbXBvcnQgRmlsZVN0b3JlIGZyb20gJy4vc3RvcmVzL2ZpbGUtc3RvcmUnO1xuaW1wb3J0IE1lbW9yeVN0b3JlIGZyb20gJy4vc3RvcmVzL21lbW9yeS1zdG9yZSc7XG5pbXBvcnQgU2VjdXJlU3RvcmUgZnJvbSAnLi9zdG9yZXMvc2VjdXJlLXN0b3JlJztcbmltcG9ydCBUb2tlblN0b3JlIGZyb20gJy4vc3RvcmVzL3Rva2VuLXN0b3JlJztcblxuaW1wb3J0IGdldEVuZHBvaW50cyBmcm9tICcuL2VuZHBvaW50cyc7XG5pbXBvcnQgZ290IGZyb20gJ2dvdCc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbmltcG9ydCAqIGFzIGVudmlyb25tZW50cyBmcm9tICcuL2Vudmlyb25tZW50cyc7XG5pbXBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSAnLi9zZXJ2ZXInO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdhbXBsaWZ5LWF1dGgnKTtcbmNvbnN0IHsgYWxlcnQsIGhpZ2hsaWdodCwgbWFnZW50YSwgbm90ZSB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBBdXRoZW50aWNhdGVzIHRoZSBtYWNoaW5lIGFuZCByZXRyZWl2ZXMgdGhlIGF1dGggdG9rZW4uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGgge1xuXHQvKipcblx0ICogVGhlIHN0b3JlIHRvIHBlcnNpc3QgdGhlIHRva2VuLlxuXHQgKlxuXHQgKiBAdHlwZSB7VG9rZW5TdG9yZX1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHR0b2tlblN0b3JlID0gbnVsbDtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIGluc3RhbmNlIGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYW5kIGNyZWF0aW5nIHRoZVxuXHQgKiB0b2tlbiBzdG9yZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmJhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgYWxsIG91dGdvaW5nIHJlcXVlc3RzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY2xpZW50SWRdIC0gVGhlIGNsaWVudCBpZCB0byBzcGVjaWZ5IHdoZW4gYXV0aGVudGljYXRpbmcuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5jbGllbnRTZWNyZXRdIC0gVGhlIHNlY3JldCB0b2tlbiB0byB1c2UgdG8gYXV0aGVudGljYXRlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZW52PXByb2RdIC0gVGhlIGVudmlyb25tZW50IG5hbWUuIE11c3QgYmUgYGRldmAsIGBwcmVwcm9kYCwgb3IgYHByb2RgLlxuXHQgKiBUaGUgZW52aXJvbm1lbnQgaXMgYSBzaG9ydGhhbmQgd2F5IG9mIHNwZWNpZnlpbmcgYSBBeHdheSBkZWZhdWx0IGJhc2UgVVJMLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaG9tZURpcl0gLSBUaGUgcGF0aCB0byB0aGUgaG9tZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYGxpYmBcblx0ICogZGlyZWN0b3J5IHdoZXJlIGBrZXl0YXJgIGlzIGxvY2F0ZWQuIFRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkIHdoZW4gYHRva2VuU3RvcmVUeXBlYCBpcyBzZXQgdG9cblx0ICogYHNlY3VyZWAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGFzc3dvcmRdIC0gVGhlIHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGB1c2VybmFtZWAuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5yZWFsbV0gLSBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdG8gYXV0aGVudGljYXRlIHdpdGguXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zZWNyZXRGaWxlXSAtIFRoZSBwYXRoIHRvIHRoZSBqd3Qgc2VjcmV0IGZpbGUuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zZWN1cmVTZXJ2aWNlTmFtZT1cIkF4d2F5IEFNUExJRlkgQXV0aFwiXSAtIFRoZSBuYW1lIG9mIHRoZSBjb25zdW1lclxuXHQgKiB1c2luZyB0aGlzIGxpYnJhcnkgd2hlbiB1c2luZyB0aGUgXCJzZWN1cmVcIiB0b2tlbiBzdG9yZS5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5zZXJ2aWNlQWNjb3VudD1mYWxzZV0gLSBXaGVuIGB0cnVlYCwgaW5kaWNhdGVzIGF1dGhlbnRpY2F0aW9uIGlzIGJlaW5nXG5cdCAqIHJlcXVlc3RlZCBieSBhIHNlcnZpY2UgaW5zdGVhZCBvZiBhIHVzZXIuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMudG9rZW5SZWZyZXNoVGhyZXNob2xkPTBdIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUgYWNjZXNzXG5cdCAqIHRva2VuIGV4cGlyZXMgYW5kIHNob3VsZCBiZSByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSB7VG9rZW5TdG9yZX0gW29wdHMudG9rZW5TdG9yZV0gLSBBIHRva2VuIHN0b3JlIGluc3RhbmNlIGZvciBwZXJzaXN0aW5nIHRoZSB0b2tlbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy50b2tlblN0b3JlRGlyXSAtIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHRva2VuIHN0b3JlIGlzIHNhdmVkLiBSZXF1aXJlZFxuXHQgKiB3aGVuIHRoZSBgdG9rZW5TdG9yZVR5cGVgIGlzIGBzZWN1cmVgIG9yIGBmaWxlYC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnRva2VuU3RvcmVUeXBlPXNlY3VyZV0gLSBUaGUgdHlwZSBvZiBzdG9yZSB0byBwZXJzaXN0IHRoZSBhY2Nlc3MgdG9rZW4uXG5cdCAqIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiBgYXV0b2AsIGBzZWN1cmVgLCBgZmlsZWAsIG9yIGBtZW1vcnlgLiBJZiB2YWx1ZSBpcyBgYXV0b2AsIGl0IHdpbGxcblx0ICogYXR0ZW1wdCB0byB1c2UgYHNlY3VyZWAsIHRoZW4gYGZpbGVgLCB0aGVuIGBtZW1vcnlgLiBJZiBzZXQgdG8gYG51bGxgLCB0aGVuIGl0IHdpbGwgbm90XG5cdCAqIHBlcnNpc3QgdGhlIGFjY2VzcyB0b2tlbi5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVzZXJuYW1lXSAtIFRoZSB1c2VybmFtZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gUmVxdWlyZXMgYSBgcGFzc3dvcmRgLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0aWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRcdGJhc2VVcmw6ICAgICAgICB7IHZhbHVlOiBvcHRzLmJhc2VVcmwgfSxcblx0XHRcdGNsaWVudElkOiAgICAgICB7IHZhbHVlOiBvcHRzLmNsaWVudElkIH0sXG5cdFx0XHRjbGllbnRTZWNyZXQ6ICAgeyB2YWx1ZTogb3B0cy5jbGllbnRTZWNyZXQgfSxcblx0XHRcdGVudjogICAgICAgICAgICB7IHZhbHVlOiBvcHRzLmVudiB9LFxuXHRcdFx0bWVzc2FnZXM6ICAgICAgIHsgdmFsdWU6IG9wdHMubWVzc2FnZXMgfSxcblx0XHRcdHBhc3N3b3JkOiAgICAgICB7IHZhbHVlOiBvcHRzLnBhc3N3b3JkIH0sXG5cdFx0XHRyZWFsbTogICAgICAgICAgeyB2YWx1ZTogb3B0cy5yZWFsbSB9LFxuXHRcdFx0c2VjcmV0RmlsZTogICAgIHsgdmFsdWU6IG9wdHMuc2VjcmV0RmlsZSB9LFxuXHRcdFx0c2VydmljZUFjY291bnQ6IHsgdmFsdWU6IG9wdHMuc2VydmljZUFjY291bnQgfSxcblx0XHRcdHVzZXJuYW1lOiAgICAgICB7IHZhbHVlOiBvcHRzLnVzZXJuYW1lIH1cblx0XHR9KTtcblxuXHRcdGlmIChvcHRzLnRva2VuU3RvcmUpIHtcblx0XHRcdGlmICghKG9wdHMudG9rZW5TdG9yZSBpbnN0YW5jZW9mIFRva2VuU3RvcmUpKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9QQVJBTUVURVIoJ0V4cGVjdGVkIHRoZSB0b2tlbiBzdG9yZSB0byBiZSBhIFwiVG9rZW5TdG9yZVwiIGluc3RhbmNlJyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRva2VuU3RvcmUgPSBvcHRzLnRva2VuU3RvcmU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRva2VuU3RvcmVUeXBlID0gb3B0cy50b2tlblN0b3JlVHlwZSA9PT0gdW5kZWZpbmVkID8gJ3NlY3VyZScgOiBvcHRzLnRva2VuU3RvcmVUeXBlO1xuXHRcdFx0c3dpdGNoICh0b2tlblN0b3JlVHlwZSkge1xuXHRcdFx0XHRjYXNlICdhdXRvJzpcblx0XHRcdFx0Y2FzZSAnc2VjdXJlJzpcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0dGhpcy50b2tlblN0b3JlID0gbmV3IFNlY3VyZVN0b3JlKG9wdHMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cdFx0XHRcdFx0XHRpZiAodG9rZW5TdG9yZVR5cGUgPT09ICdhdXRvJykge1xuXHRcdFx0XHRcdFx0XHQvLyBsZXQgJ2F1dG8nIGZhbGwgdGhyb3VnaFxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlLmNvZGUgPT09ICdFUlJfS0VZVEFSX05PVF9GT1VORCcpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgRS5TRUNVUkVfU1RPUkVfVU5BVkFJTEFCTEUoJ1NlY3VyZSB0b2tlbiBzdG9yZSBpcyBub3QgYXZhaWxhYmxlLlxcblBsZWFzZSByZWluc3RhbGwgb3IgcmVidWlsZCB0aGlzIGFwcGxpY2F0aW9uLicpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FzZSAnZmlsZSc6XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoaXMudG9rZW5TdG9yZSA9IG5ldyBGaWxlU3RvcmUob3B0cyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cblx0XHRcdFx0XHRcdGlmICh0b2tlblN0b3JlVHlwZSA9PT0gJ2F1dG8nICYmIGUuY29kZSA9PT0gJ0VSUl9NSVNTSU5HX1JFUVVJUkVEX1BBUkFNRVRFUicpIHtcblx0XHRcdFx0XHRcdFx0Ly8gbGV0ICdhdXRvJyBmYWxsIHRocm91Z2hcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ21lbW9yeSc6XG5cdFx0XHRcdFx0dGhpcy50b2tlblN0b3JlID0gbmV3IE1lbW9yeVN0b3JlKG9wdHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFbnN1cmVzIHRoZSBvcHRpb25zIGNvbnRhaW5zIHRoZSBjb25maWd1cmFibGUgc2V0dGluZ3MuIFZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgY29kZVxuXHQgKiByZXF1aXJpbmcgdGhlIHZhbHVlcy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRhcHBseURlZmF1bHRzKG9wdHMgPSB7fSkge1xuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRjb25zdCBlbnYgPSBlbnZpcm9ubWVudHMucmVzb2x2ZShvcHRzLmVudiB8fCB0aGlzLmVudik7XG5cdFx0aWYgKCFlbnYpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9WQUxVRShgSW52YWxpZCBlbnZpcm9ubWVudDogJHtvcHRzLmVudiB8fCB0aGlzLmVudn1gKTtcblx0XHR9XG5cblx0XHRvcHRzLmJhc2VVcmwgICAgICAgID0gb3B0cy5iYXNlVXJsIHx8IHRoaXMuYmFzZVVybCB8fCBlbnYuYmFzZVVybDtcblx0XHRvcHRzLmNsaWVudElkICAgICAgID0gb3B0cy5jbGllbnRJZCB8fCB0aGlzLmNsaWVudElkO1xuXHRcdG9wdHMuY2xpZW50U2VjcmV0ICAgPSBvcHRzLmNsaWVudFNlY3JldCB8fCB0aGlzLmNsaWVudFNlY3JldDtcblx0XHRvcHRzLmVudiAgICAgICAgICAgID0gZW52O1xuXHRcdG9wdHMubWVzc2FnZXMgICAgICAgPSBvcHRzLm1lc3NhZ2VzIHx8IHRoaXMubWVzc2FnZXM7XG5cdFx0b3B0cy5wYXNzd29yZCAgICAgICA9IG9wdHMucGFzc3dvcmQgfHwgdGhpcy5wYXNzd29yZDtcblx0XHRvcHRzLnJlYWxtICAgICAgICAgID0gb3B0cy5yZWFsbSB8fCB0aGlzLnJlYWxtO1xuXHRcdG9wdHMuc2VjcmV0RmlsZSAgICAgPSBvcHRzLnNlY3JldEZpbGUgfHwgdGhpcy5zZWNyZXRGaWxlO1xuXHRcdG9wdHMuc2VydmljZUFjY291bnQgPSBvcHRzLnNlcnZpY2VBY2NvdW50IHx8IHRoaXMuc2VydmljZUFjY291bnQ7XG5cdFx0b3B0cy50b2tlblN0b3JlICAgICA9IHRoaXMudG9rZW5TdG9yZTtcblx0XHRvcHRzLnVzZXJuYW1lICAgICAgID0gb3B0cy51c2VybmFtZSB8fCB0aGlzLnVzZXJuYW1lO1xuXG5cdFx0cmV0dXJuIG9wdHM7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhdXRoZXRuaWNhdG9yIGJhc2VkIG9uIHRoZSBzdXBwbGllZCBvcHRpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge0F1dGhlbnRpY2F0b3J9IFtvcHRzLmF1dGhlbnRpY2F0b3JdIC0gQW4gYXV0aGVudGljYXRvciBpbnN0YW5jZSB0byB1c2UuIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGF1dG8tc2VsZWN0ZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5jbGllbnRTZWNyZXRdIC0gVGhlIHNlY3JldCB0b2tlbiB0byB1c2UgdG8gYXV0aGVudGljYXRlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGFzc3dvcmRdIC0gVGhlIHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGB1c2VybmFtZWAuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zZWNyZXRGaWxlXSAtIFRoZSBwYXRoIHRvIHRoZSBqd3Qgc2VjcmV0IGZpbGUuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuc2VydmljZUFjY291bnQ9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGluZGljYXRlcyBhdXRoZW50aWNhdGlvbiBpcyBiZWluZ1xuXHQgKiByZXF1ZXN0ZWQgYnkgYSBzZXJ2aWNlIGluc3RlYWQgb2YgYSB1c2VyLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudXNlcm5hbWVdIC0gVGhlIHVzZXJuYW1lIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGBwYXNzd29yZGAuXG5cdCAqIEByZXR1cm5zIHtBdXRoZW50aWNhdG9yfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y3JlYXRlQXV0aGVudGljYXRvcihvcHRzID0ge30pIHtcblx0XHRpZiAob3B0cy5hdXRoZW50aWNhdG9yKSB7XG5cdFx0XHRpZiAoIShvcHRzLmF1dGhlbnRpY2F0b3IgaW5zdGFuY2VvZiBBdXRoZW50aWNhdG9yKSkge1xuXHRcdFx0XHR0aHJvdyBFLklOVkFMSURfQVJVR01FTlQoJ0V4cGVjdGVkIGF1dGhlbnRpY2F0b3IgdG8gYmUgYW4gQXV0aGVudGljYXRvciBpbnN0YW5jZS4nKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvcHRzLmF1dGhlbnRpY2F0b3I7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBvcHRzLnVzZXJuYW1lID09PSAnc3RyaW5nJyAmJiBvcHRzLnVzZXJuYW1lICYmIHR5cGVvZiBvcHRzLnBhc3N3b3JkID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIG5ldyBPd25lclBhc3N3b3JkKG9wdHMpO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb3B0cy5jbGllbnRTZWNyZXQgPT09ICdzdHJpbmcnICYmIG9wdHMuY2xpZW50U2VjcmV0KSB7XG5cdFx0XHRyZXR1cm4gbmV3IENsaWVudFNlY3JldChvcHRzKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9wdHMuc2VjcmV0RmlsZSA9PT0gJ3N0cmluZycgJiYgb3B0cy5zZWNyZXRGaWxlKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFNpZ25lZEpXVChvcHRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFBLQ0Uob3B0cyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhY2Nlc3MgdG9rZW4uIElmIHRoZSBhdXRoZW50aWNhdG9yIGlzIGludGVyYWN0aXZlIGFuZCB0aGUgYXV0aGVudGljYXRvciBoYXMgbm90XG5cdCAqIHlldCBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHNlcnZlciwgYW4gZXJyb3IgaXMgdGhyb3duLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IG9wdHMgLSBSZXF1aXJlZCBvcHRpb25zIG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGhhc2ggb3IgYWNjb3VudFxuXHQgKiBuYW1lLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5hY2NvdW50TmFtZSAtIFRoZSBhY2NvdW50IG5hbWUgdG8gcmV0cmlldmUuXG5cdCAqIEBwYXJhbSB7QXV0aGVudGljYXRvcn0gW29wdHMuYXV0aGVudGljYXRvcl0gLSBBbiBhdXRoZW50aWNhdG9yIGluc3RhbmNlIHRvIHVzZS4gSWYgbm90XG5cdCAqIHNwZWNpZmllZCwgb25lIHdpbGwgYmUgYXV0by1zZWxlY3RlZCBiYXNlZCBvbiB0aGUgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmJhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHRvIGZpbHRlciBieS5cblx0ICogQHJldHVybnMge1Byb21pc2U8P09iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBmaW5kKG9wdHMgPSB7fSkge1xuXHRcdGlmICghdGhpcy50b2tlblN0b3JlKSB7XG5cdFx0XHRsb2coJ0Nhbm5vdCBnZXQgYWNjb3VudCwgbm8gdG9rZW4gc3RvcmUnKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGxldCBhdXRoZW50aWNhdG9yO1xuXG5cdFx0aWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuXHRcdFx0b3B0cyA9IHRoaXMuYXBwbHlEZWZhdWx0cyh7IGFjY291bnROYW1lOiBvcHRzLCBoYXNoOiBvcHRzIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFwcGx5RGVmYXVsdHMob3B0cyk7XG5cdFx0XHRhdXRoZW50aWNhdG9yID0gdGhpcy5jcmVhdGVBdXRoZW50aWNhdG9yKG9wdHMpO1xuXHRcdFx0b3B0cy5oYXNoID0gYXV0aGVudGljYXRvci5oYXNoO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLnRva2VuU3RvcmUuZ2V0KG9wdHMpO1xuXG5cdFx0aWYgKGFjY291bnQpIHtcblx0XHRcdC8vIGNvcHkgb3ZlciB0aGUgY29ycmVjdCBhdXRoIHBhcmFtc1xuXHRcdFx0Zm9yIChjb25zdCBwcm9wIG9mIFsgJ2Jhc2VVcmwnLCAnY2xpZW50SWQnLCAncmVhbG0nLCAnZW52JyBdKSB7XG5cdFx0XHRcdGlmIChhY2NvdW50LmF1dGhbcHJvcF0gJiYgb3B0c1twcm9wXSAhPT0gYWNjb3VudC5hdXRoW3Byb3BdKSB7XG5cdFx0XHRcdFx0Y29uc3QgZnJvbSA9IHByb3AgPT09ICdlbnYnID8gb3B0c1twcm9wXS5uYW1lIDogb3B0c1twcm9wXTtcblx0XHRcdFx0XHRjb25zdCB0byA9IHByb3AgPT09ICdlbnYnID8gYWNjb3VudC5hdXRoW3Byb3BdLm5hbWUgOiBhY2NvdW50LmF1dGhbcHJvcF07XG5cdFx0XHRcdFx0bG9nKGBPdmVycmlkaW5nIFwiJHtwcm9wfVwiIGF1dGggcGFyYW0gd2l0aCBhY2NvdW50J3M6ICR7ZnJvbX0gLT4gJHt0b31gKTtcblx0XHRcdFx0XHRvcHRzW3Byb3BdID0gYWNjb3VudC5hdXRoW3Byb3BdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRhdXRoZW50aWNhdG9yID0gdGhpcy5jcmVhdGVBdXRoZW50aWNhdG9yKG9wdHMpO1xuXG5cdFx0XHRpZiAoYWNjb3VudC5hdXRoLmV4cGlyZWQpIHtcblx0XHRcdFx0Ly8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGlzIHZhbGlkXG5cdFx0XHRcdGxvZyhgQWNjZXNzIHRva2VuIGZvciBhY2NvdW50ICR7YWNjb3VudC5uYW1lIHx8IGFjY291bnQuaGFzaH0gaXMgZXhwaXJlZGApO1xuXG5cdFx0XHRcdGlmIChhY2NvdW50LmV4cGlyZXMucmVmcmVzaCA8IERhdGUubm93KCkpIHtcblx0XHRcdFx0XHRsb2coYFVuYWJsZSB0byByZWZyZXNoIGFjY2VzcyB0b2tlbiBmb3IgYWNjb3VudCAke2FjY291bnQubmFtZSB8fCBhY2NvdW50Lmhhc2h9IGJlY2F1c2UgcmVmcmVzaCB0b2tlbiBpcyBhbHNvIGV4cGlyZWRgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsb2coYFJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZvciBhY2NvdW50ICR7YWNjb3VudC5uYW1lIHx8IGFjY291bnQuaGFzaH1gKTtcblx0XHRcdFx0cmV0dXJuIGF3YWl0IGF1dGhlbnRpY2F0b3IuZ2V0VG9rZW4oKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGF3YWl0IGF1dGhlbnRpY2F0b3IuZ2V0SW5mbyhhY2NvdW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHZhbGlkIGFjY2VzcyB0b2tlbnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5Pn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxpc3QoKSB7XG5cdFx0aWYgKHRoaXMudG9rZW5TdG9yZSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHRoaXMudG9rZW5TdG9yZS5saXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdXRoZW50aWNhdGVzIHVzaW5nIHRoZSBjb25maWd1cmVkIGF1dGhlbnRpY2F0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbb3B0LmFwcF0gLSBTcGVjaWZ5IHRoZSBhcHAgdG8gb3BlbiB0aGUgYHRhcmdldGAgd2l0aCwgb3IgYW5cblx0ICogYXJyYXkgd2l0aCB0aGUgYXBwIGFuZCBhcHAgYXJndW1lbnRzLlxuXHQgKiBAcGFyYW0ge0F1dGhlbnRpY2F0b3J9IFtvcHRzLmF1dGhlbnRpY2F0b3JdIC0gQW4gYXV0aGVudGljYXRvciBpbnN0YW5jZSB0byB1c2UuIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGF1dG8tc2VsZWN0ZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmNsaWVudElkXSAtIFRoZSBjbGllbnQgaWQgdG8gc3BlY2lmeSB3aGVuIGF1dGhlbnRpY2F0aW5nLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY29kZV0gLSBUaGUgYXV0aGVudGljYXRpb24gY29kZSBmcm9tIGEgc3VjY2Vzc2Z1bCBpbnRlcmFjdGl2ZSBsb2dpbi5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVudj1wcm9kXSAtIFRoZSBlbnZpcm9ubWVudCBuYW1lLiBNdXN0IGJlIGBkZXZgLCBgcHJlcHJvZGAsIG9yIGBwcm9kYC5cblx0ICogVGhlIGVudmlyb25tZW50IGlzIGEgc2hvcnRoYW5kIHdheSBvZiBzcGVjaWZ5aW5nIGEgQXh3YXkgZGVmYXVsdCBiYXNlIFVSTC5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5tYW51YWw9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGl0IHdpbGwgcmV0dXJuIHRoZSBhdXRoIFVSTCBpbnN0ZWFkIG9mXG5cdCAqIGxhdW5jaGluZyB0aGUgYXV0aCBVUkwgaW4gdGhlIGRlZmF1bHQgYnJvd3Nlci5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnRpbWVvdXRdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdGltaW5nIG91dC5cblx0ICogRGVmYXVsdHMgdG8gdGhlIGBpbnRlcmFjdGl2ZUxvZ2luVGltZW91dGAgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMud2FpdD1mYWxzZV0gLSBXYWl0IGZvciB0aGUgb3BlbmVkIGFwcCB0byBleGl0IGJlZm9yZSBmdWxmaWxsaW5nIHRoZVxuXHQgKiBwcm9taXNlLiBJZiBgZmFsc2VgIGl0J3MgZnVsZmlsbGVkIGltbWVkaWF0ZWx5IHdoZW4gb3BlbmluZyB0aGUgYXBwLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBSZXNvbHZlcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYWNjZXNzIHRva2VuLCBhY2NvdW50IG5hbWUsIGFuZFxuXHQgKiB1c2VyIGluZm8uXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBsb2dpbihvcHRzID0ge30pIHtcblx0XHR0aGlzLmFwcGx5RGVmYXVsdHMob3B0cyk7XG5cdFx0Y29uc3QgYXV0aGVudGljYXRvciA9IHRoaXMuY3JlYXRlQXV0aGVudGljYXRvcihvcHRzKTtcblx0XHRyZXR1cm4gYXdhaXQgYXV0aGVudGljYXRvci5sb2dpbihvcHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXZva2VzIGFsbCBvciBzcGVjaWZpYyBhdXRoZW50aWNhdGVkIGFjY291bnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFJlcXVpcmVkIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz58U3RyaW5nfSBvcHRzLmFjY291bnRzIC0gQSBsaXN0IG9mIGFjY291bnRzIG5hbWVzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IG9wdHMuYWxsIC0gV2hlbiBgdHJ1ZWAsIHJldm9rZXMgYWxsIGFjY291bnRzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5Pn0gUmVzb2x2ZXMgYSBsaXN0IG9mIHJldm9rZWQgY3JlZGVudGlhbHMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBsb2dvdXQoeyBhY2NvdW50cywgYWxsLCBiYXNlVXJsIH0gPSB7fSkge1xuXHRcdGlmICghdGhpcy50b2tlblN0b3JlKSB7XG5cdFx0XHRsb2coJ05vIHRva2VuIHN0b3JlLCByZXR1cm5pbmcgZW1wdHkgYXJyYXknKTtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRpZiAoIWFsbCAmJiB0eXBlb2YgYWNjb3VudHMgIT09ICdzdHJpbmcnICYmICFBcnJheS5pc0FycmF5KGFjY291bnRzKSkge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBhY2NvdW50cyB0byBiZSBcImFsbFwiIG9yIGEgbGlzdCBvZiBhY2NvdW50cycpO1xuXHRcdH1cblxuXHRcdGlmICghYWxsICYmICFhY2NvdW50cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRsZXQgcmV2b2tlZDtcblx0XHRpZiAoYWxsKSB7XG5cdFx0XHRyZXZva2VkID0gYXdhaXQgdGhpcy50b2tlblN0b3JlLmNsZWFyKGJhc2VVcmwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXZva2VkID0gYXdhaXQgdGhpcy50b2tlblN0b3JlLmRlbGV0ZShhY2NvdW50cywgYmFzZVVybCk7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkocmV2b2tlZCkpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgcmV2b2tlZCkge1xuXHRcdFx0XHRjb25zdCB1cmwgPSBgJHtnZXRFbmRwb2ludHMoZW50cnkuYXV0aCkubG9nb3V0fT9pZF90b2tlbl9oaW50PSR7ZW50cnkuYXV0aC50b2tlbnMuaWRfdG9rZW59YDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgZ290KHVybCwgeyByZXNwb25zZVR5cGU6ICdqc29uJywgcmV0cnk6IDAgfSk7XG5cdFx0XHRcdFx0bG9nKGBTdWNjZXNzZnVsbHkgbG9nZ2VkIG91dCAke2hpZ2hsaWdodChlbnRyeS5uYW1lKX0gJHttYWdlbnRhKHN0YXR1cyl9ICR7bm90ZShgKCR7ZW50cnkuYmFzZVVybH0sICR7ZW50cnkucmVhbG19KWApfWApO1xuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRsb2coYEZhaWxlZCB0byBsb2cgb3V0ICR7aGlnaGxpZ2h0KGVudHJ5Lm5hbWUpfSAke2FsZXJ0KGVyci5zdGF0dXMpfSAke25vdGUoYCgke2VudHJ5LmJhc2VVcmx9LCAke2VudHJ5LnJlYWxtfSlgKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXZva2VkO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2NvdmVycyBhdmFpbGFibGUgZW5kcG9pbnRzIGJhc2VkIG9uIHRoZSBhdXRoZW50aWNhdGlvbiBzZXJ2ZXIncyBPcGVuSUQgY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmJhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHRvIHVzZSBmb3IgYWxsIG91dGdvaW5nIHJlcXVlc3RzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZW52PXByb2RdIC0gVGhlIGVudmlyb25tZW50IG5hbWUuIE11c3QgYmUgYGRldmAsIGBwcmVwcm9kYCwgb3IgYHByb2RgLlxuXHQgKiBUaGUgZW52aXJvbm1lbnQgaXMgYSBzaG9ydGhhbmQgd2F5IG9mIHNwZWNpZnlpbmcgYSBBeHdheSBkZWZhdWx0IGJhc2UgVVJMLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucmVhbG1dIC0gVGhlIG5hbWUgb2YgdGhlIHJlYWxtIHRvIGF1dGhlbnRpY2F0ZSB3aXRoLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudXJsXSAtIEFuIG9wdGlvbmFsIFVSTCB0byBkaXNjb3ZlciB0aGUgYXZhaWxhYmxlIGVuZHBvaW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNlcnZlckluZm8ob3B0cyA9IHt9KSB7XG5cdFx0dGhpcy5hcHBseURlZmF1bHRzKG9wdHMpO1xuXG5cdFx0bGV0IHsgdXJsIH0gPSBvcHRzO1xuXG5cdFx0aWYgKCF1cmwpIHtcblx0XHRcdHVybCA9IGdldEVuZHBvaW50cyhvcHRzKS53ZWxsS25vd247XG5cdFx0fVxuXG5cdFx0aWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgVVJMIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRsb2coYEZldGNoaW5nIHNlcnZlciBpbmZvOiAke3VybH0uLi5gKTtcblx0XHRcdHJldHVybiAoYXdhaXQgZ290KHVybCwgeyByZXNwb25zZVR5cGU6ICdqc29uJywgcmV0cnk6IDAgfSkpLmJvZHk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRpZiAoZXJyLm5hbWUgIT09ICdQYXJzZUVycm9yJykge1xuXHRcdFx0XHRlcnIubWVzc2FnZSA9IGBGYWlsZWQgdG8gZ2V0IHNlcnZlciBpbmZvIChzdGF0dXMgJHtlcnIucmVzcG9uc2Uuc3RhdHVzQ29kZX0pYDtcblx0XHRcdH1cblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlIHRoZSBzdG9yZWQgYWNjb3VudC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGFjY291bnQgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgYWNjb3VudCBpbmZvLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHVwZGF0ZUFjY291bnQoYWNjb3VudCkge1xuXHRcdGlmICh0aGlzLnRva2VuU3RvcmUpIHtcblx0XHRcdGF3YWl0IHRoaXMudG9rZW5TdG9yZS5zZXQoYWNjb3VudCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7XG5cdEF1dGgsXG5cblx0QXV0aGVudGljYXRvcixcblx0Q2xpZW50U2VjcmV0LFxuXHRPd25lclBhc3N3b3JkLFxuXHRQS0NFLFxuXHRTaWduZWRKV1QsXG5cblx0RmlsZVN0b3JlLFxuXHRNZW1vcnlTdG9yZSxcblx0U2VjdXJlU3RvcmUsXG5cdFRva2VuU3RvcmUsXG5cblx0ZW52aXJvbm1lbnRzLFxuXHRnZXRFbmRwb2ludHMsXG5cdHNlcnZlclxufTtcbiJdLCJmaWxlIjoiaW5kZXguanMifQ==

@@ -15,4 +15,2 @@ "use strict";

var _url = require("url");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -57,2 +55,3 @@

getToken,
redirect,
requestId,

@@ -70,3 +69,3 @@ serverHost,

server: createServer(async (req, res) => {
const url = (0, _url.parse)(req.url);
const url = new URL(req.url, `http://${serverHost}:${serverPort}`);
const m = url.pathname.match(callbackRegExp);

@@ -77,3 +76,3 @@ let stopServer = false;

if (m && m[1] === 'callback') {
const code = new _url.URLSearchParams(url.query).get('code');
const code = url.searchParams.get('code');
const id = m[2];

@@ -98,4 +97,4 @@ const request = servers[serverId].pending.get(id);

log(`Getting token using code: ${highlight(code)}`);
const accessToken = await getToken(code, id);
request.resolve(accessToken);
const account = await getToken(code, id);
request.resolve(account);
const {

@@ -105,6 +104,13 @@ contentType,

} = getResponse(req, 'interactiveSuccess');
log(`[${serverId}] ${green(200)} ${url.pathname} (${m[2]})`);
res.writeHead(200, {
const statusCode = !process.env.APPCD_TEST && redirect ? 302 : 200;
const headers = {
'Content-Type': contentType
});
};
if (redirect) {
headers.Location = redirect;
}
log(`[${serverId}] ${green(statusCode)} ${url.pathname} (${m[2]})`);
res.writeHead(statusCode, headers);
res.end(message);

@@ -265,2 +271,2 @@ } catch (e) {

}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZlci5qcyJdLCJuYW1lcyI6WyJlcnJvciIsImxvZyIsImdyYXkiLCJncmVlbiIsImhpZ2hsaWdodCIsIm1hZ2VudGEiLCJyZWQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJjYWxsYmFja1JlZ0V4cCIsInNlcnZlcnMiLCJzdGFydCIsImdldFJlc3BvbnNlIiwiZ2V0VG9rZW4iLCJyZXF1ZXN0SWQiLCJzZXJ2ZXJIb3N0Iiwic2VydmVyUG9ydCIsInRpbWVvdXQiLCJzZXJ2ZXJJZCIsInBlbmRpbmciLCJNYXAiLCJzZXJ2ZXIiLCJjcmVhdGVTZXJ2ZXIiLCJyZXEiLCJyZXMiLCJ1cmwiLCJtIiwicGF0aG5hbWUiLCJtYXRjaCIsInN0b3BTZXJ2ZXIiLCJjb2RlIiwiVVJMU2VhcmNoUGFyYW1zIiwicXVlcnkiLCJnZXQiLCJpZCIsInJlcXVlc3QiLCJFcnJvciIsImNsZWFyVGltZW91dCIsInRpbWVyIiwiZGVsZXRlIiwiYWNjZXNzVG9rZW4iLCJyZXNvbHZlIiwiY29udGVudFR5cGUiLCJtZXNzYWdlIiwid3JpdGVIZWFkIiwiZW5kIiwiZSIsInJlamVjdCIsImVyciIsInN0YXR1cyIsInN0b3AiLCJQcm9taXNlIiwib24iLCJsaXN0ZW4iLCJzZXRUaW1lb3V0IiwiRSIsIkFVVEhfVElNRU9VVCIsImNhbmNlbCIsInByb21pc2UiLCJzZXQiLCJmb3JjZSIsInNlcnZlcklkcyIsIk9iamVjdCIsImtleXMiLCJBcnJheSIsImlzQXJyYXkiLCJzaXplIiwiZGVzdHJveSIsImVudHJpZXMiLCJoYW5kbGVyIiwiY29ubmVjdGlvbnMiLCJodHRwIiwiY29ubiIsImtleSIsInJlbW90ZUFkZHJlc3MiLCJyZW1vdGVQb3J0IiwicCIsImNsb3NlIiwidmFsdWVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOzs7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBO0FBQVQsSUFBaUIsd0JBQVUscUJBQVYsQ0FB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TUMsR0FBRyxHQUFJLEdBQUVELElBQUksQ0FBQ0UsYUFBYyxJQUFHRixJQUFJLENBQUNHLFVBQVcsRUFBckQ7QUFDQUwsSUFBQUEsV0FBVyxDQUFDRyxHQUFELENBQVgsR0FBbUJELElBQW5CO0FBQ0FBLElBQUFBLElBQUksQ0FBQ3BCLEVBQUwsQ0FBUSxPQUFSLEVBQWlCLE1BQU07QUFDdEIsYUFBT2tCLFdBQVcsQ0FBQ0csR0FBRCxDQUFsQjtBQUNBLEtBRkQ7QUFHQSxHQU5EOztBQVFBcEQsRUFBQUEsTUFBTSxDQUFDOEMsT0FBUCxHQUFpQixTQUFTQSxPQUFULEdBQW1CO0FBQ25DLFVBQU1TLENBQUMsR0FBRyxJQUFJekIsT0FBSixDQUFZVixPQUFPLElBQUlwQixNQUFNLENBQUN3RCxLQUFQLENBQWFwQyxPQUFiLENBQXZCLENBQVY7O0FBQ0EsU0FBSyxNQUFNK0IsSUFBWCxJQUFtQlYsTUFBTSxDQUFDZ0IsTUFBUCxDQUFjUixXQUFkLENBQW5CLEVBQStDO0FBQzlDRSxNQUFBQSxJQUFJLENBQUNMLE9BQUw7QUFDQTs7QUFDRCxXQUFPUyxDQUFQO0FBQ0EsR0FORDs7QUFRQSxTQUFPdkQsTUFBUDtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEUgZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbmltcG9ydCB7IHBhcnNlLCBVUkxTZWFyY2hQYXJhbXMgfSBmcm9tICd1cmwnO1xuXG5jb25zdCB7IGVycm9yLCBsb2cgfSA9IHNub29wbG9nZygnYW1wbGlmeS1hdXRoOnNlcnZlcicpO1xuY29uc3QgeyBncmF5LCBncmVlbiwgaGlnaGxpZ2h0LCBtYWdlbnRhLCByZWQgfSA9IHNub29wbG9nZy5zdHlsZXM7XG5cbi8qKlxuICogTWF0Y2hlcyB0aGUgaW5jb21pbmcgcmVxdWVzdCBhcyBhIGF1dGhvcml6YXRpb24gY2FsbGJhY2sgYW5kIHNlbGVjdHMgdGhlIHJlcXVlc3QgaWQuXG4gKlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xuY29uc3QgY2FsbGJhY2tSZWdFeHAgPSAvXlxcLyhjYWxsYmFjaykoPzpcXC8oW0EtWjAtOV0rKSk/LztcblxuLyoqXG4gKiBBIG1hcCBvZiBsb2NhbCBIVFRQIHNlcnZlciBpbnN0YW5jZXMgYmFzZWQgb24gc2VydmVyIGlkIChob3N0bmFtZSArIHBvcnQpLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmNvbnN0IHNlcnZlcnMgPSB7fTtcblxuLyoqXG4gKiBTdGFydHMgdGhlIHNlcnZlciwgaWYgbm90IGFscmVhZHkgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFJlcXVpcmVkIG9wdGlvbnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5zZXJ2ZXJIb3N0IC0gVGhlIGhvc3RuYW1lIHRvIGxpc3RlbiBvbi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPFByb21pc2U+fSBSZXNvbHZlcyBhIHByb21pc2Ugb25jZSB0aGUgc2VydmVyIGlzIHN0YXJ0ZWQgdGhhdCByZXNvbHZlcyBhbm90aGVyXG4gKiBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRoZSBhdXRoIGNvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydCh7IGdldFJlc3BvbnNlLCBnZXRUb2tlbiwgcmVxdWVzdElkLCBzZXJ2ZXJIb3N0LCBzZXJ2ZXJQb3J0LCB0aW1lb3V0IH0pIHtcblx0Y29uc3Qgc2VydmVySWQgPSBgJHtzZXJ2ZXJIb3N0fToke3NlcnZlclBvcnR9YDtcblxuXHRpZiAoIXNlcnZlcnNbc2VydmVySWRdKSB7XG5cdFx0Ly8gdGhlIHNlcnZlciBpcyBub3QgcnVubmluZywgc28gY3JlYXRlIGFuZCByZWdpc3RlciBpdFxuXHRcdHNlcnZlcnNbc2VydmVySWRdID0ge1xuXHRcdFx0cGVuZGluZzogbmV3IE1hcCgpLFxuXHRcdFx0c2VydmVyOiBjcmVhdGVTZXJ2ZXIoYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IHBhcnNlKHJlcS51cmwpO1xuXHRcdFx0XHRjb25zdCBtID0gdXJsLnBhdGhuYW1lLm1hdGNoKGNhbGxiYWNrUmVnRXhwKTtcblx0XHRcdFx0bGV0IHN0b3BTZXJ2ZXIgPSBmYWxzZTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGlmIChtICYmIG1bMV0gPT09ICdjYWxsYmFjaycpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGNvZGUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHVybC5xdWVyeSkuZ2V0KCdjb2RlJyk7XG5cdFx0XHRcdFx0XHRjb25zdCBpZCA9IG1bMl07XG5cdFx0XHRcdFx0XHRjb25zdCByZXF1ZXN0ID0gc2VydmVyc1tzZXJ2ZXJJZF0ucGVuZGluZy5nZXQoaWQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoIWNvZGUpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGF1dGggY29kZScpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoIXJlcXVlc3QpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFJlcXVlc3QgSUQnKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bG9nKGBSZXF1ZXN0ICR7aGlnaGxpZ2h0KGlkKX0gcmVjZWl2ZWQgYXV0aCBjb2RlICR7aGlnaGxpZ2h0KGNvZGUpfSwgY2xlYXJpbmcgdGltZW91dCBhbmQgcmVxdWVzdGApO1xuXHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHJlcXVlc3QudGltZXIpO1xuXHRcdFx0XHRcdFx0c2VydmVyc1tzZXJ2ZXJJZF0ucGVuZGluZy5kZWxldGUocmVxdWVzdElkKTtcblx0XHRcdFx0XHRcdHN0b3BTZXJ2ZXIgPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHQvLyB3ZSBkbyBhbiBpbm5lciB0cnkvY2F0Y2ggYmVjYXVzZSB0aGUgcmVxdWVzdCBpcyB2YWxpZCwgYnV0IGF1dGggY291bGRcblx0XHRcdFx0XHRcdC8vIHN0aWxsIGZhaWxcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGxvZyhgR2V0dGluZyB0b2tlbiB1c2luZyBjb2RlOiAke2hpZ2hsaWdodChjb2RlKX1gKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRUb2tlbihjb2RlLCBpZCk7XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3QucmVzb2x2ZShhY2Nlc3NUb2tlbik7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBjb250ZW50VHlwZSwgbWVzc2FnZSB9ID0gZ2V0UmVzcG9uc2UocmVxLCAnaW50ZXJhY3RpdmVTdWNjZXNzJyk7XG5cdFx0XHRcdFx0XHRcdGxvZyhgWyR7c2VydmVySWR9XSAke2dyZWVuKDIwMCl9ICR7dXJsLnBhdGhuYW1lfSAoJHttWzJdfSlgKTtcblx0XHRcdFx0XHRcdFx0cmVzLndyaXRlSGVhZCgyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlIH0pO1xuXHRcdFx0XHRcdFx0XHRyZXMuZW5kKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0LnJlamVjdChlKTtcblx0XHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bG9nKGBbJHtzZXJ2ZXJJZH1dICR7bWFnZW50YSg0MDQpfSAke3VybC5wYXRobmFtZX1gKTtcblx0XHRcdFx0XHRcdGNvbnN0IGVyciA9IG5ldyBFcnJvcignTm90IEZvdW5kJyk7XG5cdFx0XHRcdFx0XHRlcnIuc3RhdHVzID0gNDA0O1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGxvZyhgJHtncmF5KGBbJHtzZXJ2ZXJJZH1dYCl9ICR7cmVkKGUuc3RhdHVzIHx8ICc0MDAnKX0gJHt1cmwucGF0aG5hbWV9YCk7XG5cdFx0XHRcdFx0ZXJyb3IoZSk7XG5cblx0XHRcdFx0XHRjb25zdCB7IGNvbnRlbnRUeXBlLCBtZXNzYWdlIH0gPSBnZXRSZXNwb25zZShyZXEsIGUpO1xuXHRcdFx0XHRcdHJlcy53cml0ZUhlYWQoZS5zdGF0dXMgfHwgNDAwLCB7ICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZSB9KTtcblx0XHRcdFx0XHRyZXMuZW5kKG1lc3NhZ2UpO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmIChzdG9wU2VydmVyKSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBzdG9wKGZhbHNlLCBzZXJ2ZXJJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH07XG5cblx0XHQvLyBub3cgdGhhdCB3ZSBoYXZlIGRlZmluZWQgYW5kIHNldCB0aGUgc2VydmVyLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBIVFRQIHNlcnZlciB0byBzdGFydFxuXHRcdC8vIGxpc3RlbmluZ1xuXHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHNlcnZlcnNbc2VydmVySWRdLnNlcnZlclxuXHRcdFx0XHQub24oJ2xpc3RlbmluZycsICgpID0+IHtcblx0XHRcdFx0XHRsb2coYExvY2FsIEhUVFAgc2VydmVyIHN0YXJ0ZWQ6ICR7aGlnaGxpZ2h0KHNlcnZlcklkKX1gKTtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5vbignZXJyb3InLCByZWplY3QpXG5cdFx0XHRcdC5saXN0ZW4oc2VydmVyUG9ydCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBzZXQgdXAgdGhlIHRpbWVyIHRvIHN0b3AgdGhlIHNlcnZlclxuXHRjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChzZXJ2ZXJzW3NlcnZlcklkXSkge1xuXHRcdFx0Y29uc3QgeyBwZW5kaW5nIH0gPSBzZXJ2ZXJzW3NlcnZlcklkXTtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBwZW5kaW5nLmdldChyZXF1ZXN0SWQpO1xuXHRcdFx0aWYgKHJlcXVlc3QpIHtcblx0XHRcdFx0bG9nKGBSZXF1ZXN0ICR7aGlnaGxpZ2h0KHJlcXVlc3RJZCl9IHRpbWVkIG91dGApO1xuXHRcdFx0XHRwZW5kaW5nLmRlbGV0ZShyZXF1ZXN0SWQpO1xuXHRcdFx0XHRyZXF1ZXN0LnJlamVjdChFLkFVVEhfVElNRU9VVCgnQXV0aGVudGljYXRpb24gZmFpbGVkOiBUaW1lZCBvdXQnKSk7XG5cdFx0XHR9XG5cdFx0XHRzdG9wKGZhbHNlLCBzZXJ2ZXJJZCk7XG5cdFx0fVxuXHR9LCB0aW1lb3V0KTtcblxuXHQvLyByZXR1cm4gdGhlIGNhbmNlbCBjYWxsYmFjayBhbmQgYXV0aGVudGljYXRpb24gcHJvbWlzZVxuXHRyZXR1cm4ge1xuXHRcdGFzeW5jIGNhbmNlbCgpIHtcblx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzZXJ2ZXJzW3NlcnZlcklkXSAmJiBzZXJ2ZXJzW3NlcnZlcklkXS5wZW5kaW5nLmdldChyZXF1ZXN0SWQpO1xuXHRcdFx0aWYgKHJlcXVlc3QpIHtcblx0XHRcdFx0bG9nKGBDYW5jZWxsaW5nIHJlcXVlc3QgJHtoaWdobGlnaHQocmVxdWVzdElkKX1gKTtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHJlcXVlc3QudGltZXIpO1xuXHRcdFx0XHRzZXJ2ZXJzW3NlcnZlcklkXS5wZW5kaW5nLmRlbGV0ZShyZXF1ZXN0SWQpO1xuXHRcdFx0XHRhd2FpdCBzdG9wKGZhbHNlLCBzZXJ2ZXJJZCk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRwcm9taXNlOiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRzZXJ2ZXJzW3NlcnZlcklkXS5wZW5kaW5nLnNldChyZXF1ZXN0SWQsIHsgcmVzb2x2ZSwgcmVqZWN0LCB0aW1lciB9KTtcblx0XHR9KVxuXHR9O1xufVxuXG4vKipcbiAqIFN0b3BzIHRoZSBIVFRQIHNlcnZlciB1c2VkIGZvciBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gLSBXaGVuIGB0cnVlYCwgcmVtb3ZlcyBhbGwgcGVuZGluZyByZXF1ZXN0cyBhbmQgc3RvcHMgdGhlIGxvY2FsXG4gKiBIVFRQIHNlcnZlci5cbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbc2VydmVySWRzXSAtIEEgc2VydmVyIGlkIG9mIGEgc3BlY2lmaWMgSFRUUCBzZXJ2ZXIgb3IgYSBsaXN0IG9mXG4gKiBzcGVjaWZpYyBzZXJ2ZXIgaWRzIHRvIHN0b3AuIERlZmF1bHRzIHRvIGFsbCBzZXJ2ZXJzLlxuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdG9wKGZvcmNlLCBzZXJ2ZXJJZHMpIHtcblx0aWYgKCFzZXJ2ZXJJZHMpIHtcblx0XHRzZXJ2ZXJJZHMgPSBPYmplY3Qua2V5cyhzZXJ2ZXJzKTtcblx0fSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzZXJ2ZXJJZHMpKSB7XG5cdFx0c2VydmVySWRzID0gWyBzZXJ2ZXJJZHMgXTtcblx0fVxuXG5cdGZvciAoY29uc3Qgc2VydmVySWQgb2Ygc2VydmVySWRzKSB7XG5cdFx0Y29uc3QgeyBzZXJ2ZXIsIHBlbmRpbmcgfSA9IHNlcnZlcnNbc2VydmVySWRdIHx8IHt9O1xuXG5cdFx0aWYgKHNlcnZlciAmJiAoZm9yY2UgfHwgIXBlbmRpbmcuc2l6ZSkpIHtcblx0XHRcdC8vIG51bGwgdGhlIHNlcnZlciByZWYgYXNhcFxuXHRcdFx0ZGVsZXRlIHNlcnZlcnNbc2VydmVySWRdO1xuXG5cdFx0XHRsb2coJ0Rlc3Ryb3lpbmcgbG9jYWwgSFRUUCBzZXJ2ZXIuLi4nKTtcblx0XHRcdGF3YWl0IHNlcnZlci5kZXN0cm95KCk7XG5cdFx0XHRsb2coJ0xvY2FsIEhUVFAgc2VydmVyIHN0b3BwZWQnKTtcblxuXHRcdFx0Ly8gd2UgbmVlZCB0byBub3RpZnkgYWxsIHBlbmRpbmcgbG9naW5zIHRoYXQgdGhlIHNlcnZlciB3YXMgc2h1dCBkb3duXG5cdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1NlcnZlciBzdG9wcGVkJyk7XG5cdFx0XHRmb3IgKGNvbnN0IFsgaWQsIHsgcmVqZWN0LCB0aW1lciB9IF0gb2YgcGVuZGluZy5lbnRyaWVzKCkpIHtcblx0XHRcdFx0bG9nKGBSZWplY3RpbmcgcmVxdWVzdCAke2hpZ2hsaWdodChpZCl9YCk7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lcik7XG5cdFx0XHRcdHJlamVjdChlcnIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gSFRUUCBzZXJ2ZXIgd2l0aCBjb25uZWN0aW9uIG1hbmFnZW1lbnQuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciAtIEEgZnVuY3Rpb24gdGhhdCBwcm9jZXNzIGluY29taW5nIHJlcXVlc3RzLlxuICogQHJldHVybnMge2h0dHAuU2VydmVyfVxuICovXG5mdW5jdGlvbiBjcmVhdGVTZXJ2ZXIoaGFuZGxlcikge1xuXHRjb25zdCBjb25uZWN0aW9ucyA9IHt9O1xuXHRjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihoYW5kbGVyKTtcblxuXHRzZXJ2ZXIub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoY29ubikge1xuXHRcdGNvbnN0IGtleSA9IGAke2Nvbm4ucmVtb3RlQWRkcmVzc306JHtjb25uLnJlbW90ZVBvcnR9YDtcblx0XHRjb25uZWN0aW9uc1trZXldID0gY29ubjtcblx0XHRjb25uLm9uKCdjbG9zZScsICgpID0+IHtcblx0XHRcdGRlbGV0ZSBjb25uZWN0aW9uc1trZXldO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRzZXJ2ZXIuZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG5cdFx0Y29uc3QgcCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2VydmVyLmNsb3NlKHJlc29sdmUpKTtcblx0XHRmb3IgKGNvbnN0IGNvbm4gb2YgT2JqZWN0LnZhbHVlcyhjb25uZWN0aW9ucykpIHtcblx0XHRcdGNvbm4uZGVzdHJveSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gcDtcblx0fTtcblxuXHRyZXR1cm4gc2VydmVyO1xufVxuIl0sImZpbGUiOiJzZXJ2ZXIuanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNlcnZlci5qcyJdLCJuYW1lcyI6WyJlcnJvciIsImxvZyIsImdyYXkiLCJncmVlbiIsImhpZ2hsaWdodCIsIm1hZ2VudGEiLCJyZWQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJjYWxsYmFja1JlZ0V4cCIsInNlcnZlcnMiLCJzdGFydCIsImdldFJlc3BvbnNlIiwiZ2V0VG9rZW4iLCJyZWRpcmVjdCIsInJlcXVlc3RJZCIsInNlcnZlckhvc3QiLCJzZXJ2ZXJQb3J0IiwidGltZW91dCIsInNlcnZlcklkIiwicGVuZGluZyIsIk1hcCIsInNlcnZlciIsImNyZWF0ZVNlcnZlciIsInJlcSIsInJlcyIsInVybCIsIlVSTCIsIm0iLCJwYXRobmFtZSIsIm1hdGNoIiwic3RvcFNlcnZlciIsImNvZGUiLCJzZWFyY2hQYXJhbXMiLCJnZXQiLCJpZCIsInJlcXVlc3QiLCJFcnJvciIsImNsZWFyVGltZW91dCIsInRpbWVyIiwiZGVsZXRlIiwiYWNjb3VudCIsInJlc29sdmUiLCJjb250ZW50VHlwZSIsIm1lc3NhZ2UiLCJzdGF0dXNDb2RlIiwicHJvY2VzcyIsImVudiIsIkFQUENEX1RFU1QiLCJoZWFkZXJzIiwiTG9jYXRpb24iLCJ3cml0ZUhlYWQiLCJlbmQiLCJlIiwicmVqZWN0IiwiZXJyIiwic3RhdHVzIiwic3RvcCIsIlByb21pc2UiLCJvbiIsImxpc3RlbiIsInNldFRpbWVvdXQiLCJFIiwiQVVUSF9USU1FT1VUIiwiY2FuY2VsIiwicHJvbWlzZSIsInNldCIsImZvcmNlIiwic2VydmVySWRzIiwiT2JqZWN0Iiwia2V5cyIsIkFycmF5IiwiaXNBcnJheSIsInNpemUiLCJkZXN0cm95IiwiZW50cmllcyIsImhhbmRsZXIiLCJjb25uZWN0aW9ucyIsImh0dHAiLCJjb25uIiwia2V5IiwicmVtb3RlQWRkcmVzcyIsInJlbW90ZVBvcnQiLCJwIiwiY2xvc2UiLCJ2YWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxN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cCc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbmNvbnN0IHsgZXJyb3IsIGxvZyB9ID0gc25vb3Bsb2dnKCdhbXBsaWZ5LWF1dGg6c2VydmVyJyk7XG5jb25zdCB7IGdyYXksIGdyZWVuLCBoaWdobGlnaHQsIG1hZ2VudGEsIHJlZCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBNYXRjaGVzIHRoZSBpbmNvbWluZyByZXF1ZXN0IGFzIGEgYXV0aG9yaXphdGlvbiBjYWxsYmFjayBhbmQgc2VsZWN0cyB0aGUgcmVxdWVzdCBpZC5cbiAqXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCBjYWxsYmFja1JlZ0V4cCA9IC9eXFwvKGNhbGxiYWNrKSg/OlxcLyhbQS1aMC05XSspKT8vO1xuXG4vKipcbiAqIEEgbWFwIG9mIGxvY2FsIEhUVFAgc2VydmVyIGluc3RhbmNlcyBiYXNlZCBvbiBzZXJ2ZXIgaWQgKGhvc3RuYW1lICsgcG9ydCkuXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuY29uc3Qgc2VydmVycyA9IHt9O1xuXG4vKipcbiAqIFN0YXJ0cyB0aGUgc2VydmVyLCBpZiBub3QgYWxyZWFkeSBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gUmVxdWlyZWQgb3B0aW9ucy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLnNlcnZlckhvc3QgLSBUaGUgaG9zdG5hbWUgdG8gbGlzdGVuIG9uLlxuICogQHJldHVybnMge1Byb21pc2U8UHJvbWlzZT59IFJlc29sdmVzIGEgcHJvbWlzZSBvbmNlIHRoZSBzZXJ2ZXIgaXMgc3RhcnRlZCB0aGF0IHJlc29sdmVzIGFub3RoZXJcbiAqIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdGhlIGF1dGggY29kZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KHsgZ2V0UmVzcG9uc2UsIGdldFRva2VuLCByZWRpcmVjdCwgcmVxdWVzdElkLCBzZXJ2ZXJIb3N0LCBzZXJ2ZXJQb3J0LCB0aW1lb3V0IH0pIHtcblx0Y29uc3Qgc2VydmVySWQgPSBgJHtzZXJ2ZXJIb3N0fToke3NlcnZlclBvcnR9YDtcblxuXHRpZiAoIXNlcnZlcnNbc2VydmVySWRdKSB7XG5cdFx0Ly8gdGhlIHNlcnZlciBpcyBub3QgcnVubmluZywgc28gY3JlYXRlIGFuZCByZWdpc3RlciBpdFxuXHRcdHNlcnZlcnNbc2VydmVySWRdID0ge1xuXHRcdFx0cGVuZGluZzogbmV3IE1hcCgpLFxuXHRcdFx0c2VydmVyOiBjcmVhdGVTZXJ2ZXIoYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCwgYGh0dHA6Ly8ke3NlcnZlckhvc3R9OiR7c2VydmVyUG9ydH1gKTtcblx0XHRcdFx0Y29uc3QgbSA9IHVybC5wYXRobmFtZS5tYXRjaChjYWxsYmFja1JlZ0V4cCk7XG5cdFx0XHRcdGxldCBzdG9wU2VydmVyID0gZmFsc2U7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAobSAmJiBtWzFdID09PSAnY2FsbGJhY2snKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBjb2RlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ2NvZGUnKTtcblx0XHRcdFx0XHRcdGNvbnN0IGlkID0gbVsyXTtcblx0XHRcdFx0XHRcdGNvbnN0IHJlcXVlc3QgPSBzZXJ2ZXJzW3NlcnZlcklkXS5wZW5kaW5nLmdldChpZCk7XG5cblx0XHRcdFx0XHRcdGlmICghY29kZSkge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXV0aCBjb2RlJyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghcmVxdWVzdCkge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgUmVxdWVzdCBJRCcpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRsb2coYFJlcXVlc3QgJHtoaWdobGlnaHQoaWQpfSByZWNlaXZlZCBhdXRoIGNvZGUgJHtoaWdobGlnaHQoY29kZSl9LCBjbGVhcmluZyB0aW1lb3V0IGFuZCByZXF1ZXN0YCk7XG5cdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQocmVxdWVzdC50aW1lcik7XG5cdFx0XHRcdFx0XHRzZXJ2ZXJzW3NlcnZlcklkXS5wZW5kaW5nLmRlbGV0ZShyZXF1ZXN0SWQpO1xuXHRcdFx0XHRcdFx0c3RvcFNlcnZlciA9IHRydWU7XG5cblx0XHRcdFx0XHRcdC8vIHdlIGRvIGFuIGlubmVyIHRyeS9jYXRjaCBiZWNhdXNlIHRoZSByZXF1ZXN0IGlzIHZhbGlkLCBidXQgYXV0aCBjb3VsZFxuXHRcdFx0XHRcdFx0Ly8gc3RpbGwgZmFpbFxuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0bG9nKGBHZXR0aW5nIHRva2VuIHVzaW5nIGNvZGU6ICR7aGlnaGxpZ2h0KGNvZGUpfWApO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhY2NvdW50ID0gYXdhaXQgZ2V0VG9rZW4oY29kZSwgaWQpO1xuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0LnJlc29sdmUoYWNjb3VudCk7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBjb250ZW50VHlwZSwgbWVzc2FnZSB9ID0gZ2V0UmVzcG9uc2UocmVxLCAnaW50ZXJhY3RpdmVTdWNjZXNzJyk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN0YXR1c0NvZGUgPSAhcHJvY2Vzcy5lbnYuQVBQQ0RfVEVTVCAmJiByZWRpcmVjdCA/IDMwMiA6IDIwMDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgaGVhZGVycyA9IHtcblx0XHRcdFx0XHRcdFx0XHQnQ29udGVudC1UeXBlJzogY29udGVudFR5cGVcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0aWYgKHJlZGlyZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0aGVhZGVycy5Mb2NhdGlvbiA9IHJlZGlyZWN0O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGxvZyhgWyR7c2VydmVySWR9XSAke2dyZWVuKHN0YXR1c0NvZGUpfSAke3VybC5wYXRobmFtZX0gKCR7bVsyXX0pYCk7XG5cblx0XHRcdFx0XHRcdFx0cmVzLndyaXRlSGVhZChzdGF0dXNDb2RlLCBoZWFkZXJzKTtcblx0XHRcdFx0XHRcdFx0cmVzLmVuZChtZXNzYWdlKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0cmVxdWVzdC5yZWplY3QoZSk7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGxvZyhgWyR7c2VydmVySWR9XSAke21hZ2VudGEoNDA0KX0gJHt1cmwucGF0aG5hbWV9YCk7XG5cdFx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ05vdCBGb3VuZCcpO1xuXHRcdFx0XHRcdFx0ZXJyLnN0YXR1cyA9IDQwNDtcblx0XHRcdFx0XHRcdHRocm93IGVycjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRsb2coYCR7Z3JheShgWyR7c2VydmVySWR9XWApfSAke3JlZChlLnN0YXR1cyB8fCAnNDAwJyl9ICR7dXJsLnBhdGhuYW1lfWApO1xuXHRcdFx0XHRcdGVycm9yKGUpO1xuXG5cdFx0XHRcdFx0Y29uc3QgeyBjb250ZW50VHlwZSwgbWVzc2FnZSB9ID0gZ2V0UmVzcG9uc2UocmVxLCBlKTtcblx0XHRcdFx0XHRyZXMud3JpdGVIZWFkKGUuc3RhdHVzIHx8IDQwMCwgeyAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGUgfSk7XG5cdFx0XHRcdFx0cmVzLmVuZChtZXNzYWdlKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoc3RvcFNlcnZlcikge1xuXHRcdFx0XHRcdFx0YXdhaXQgc3RvcChmYWxzZSwgc2VydmVySWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9O1xuXG5cdFx0Ly8gbm93IHRoYXQgd2UgaGF2ZSBkZWZpbmVkIGFuZCBzZXQgdGhlIHNlcnZlciwgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgSFRUUCBzZXJ2ZXIgdG8gc3RhcnRcblx0XHQvLyBsaXN0ZW5pbmdcblx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRzZXJ2ZXJzW3NlcnZlcklkXS5zZXJ2ZXJcblx0XHRcdFx0Lm9uKCdsaXN0ZW5pbmcnLCAoKSA9PiB7XG5cdFx0XHRcdFx0bG9nKGBMb2NhbCBIVFRQIHNlcnZlciBzdGFydGVkOiAke2hpZ2hsaWdodChzZXJ2ZXJJZCl9YCk7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQub24oJ2Vycm9yJywgcmVqZWN0KVxuXHRcdFx0XHQubGlzdGVuKHNlcnZlclBvcnQpO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gc2V0IHVwIHRoZSB0aW1lciB0byBzdG9wIHRoZSBzZXJ2ZXJcblx0Y29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRpZiAoc2VydmVyc1tzZXJ2ZXJJZF0pIHtcblx0XHRcdGNvbnN0IHsgcGVuZGluZyB9ID0gc2VydmVyc1tzZXJ2ZXJJZF07XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gcGVuZGluZy5nZXQocmVxdWVzdElkKTtcblx0XHRcdGlmIChyZXF1ZXN0KSB7XG5cdFx0XHRcdGxvZyhgUmVxdWVzdCAke2hpZ2hsaWdodChyZXF1ZXN0SWQpfSB0aW1lZCBvdXRgKTtcblx0XHRcdFx0cGVuZGluZy5kZWxldGUocmVxdWVzdElkKTtcblx0XHRcdFx0cmVxdWVzdC5yZWplY3QoRS5BVVRIX1RJTUVPVVQoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogVGltZWQgb3V0JykpO1xuXHRcdFx0fVxuXHRcdFx0c3RvcChmYWxzZSwgc2VydmVySWQpO1xuXHRcdH1cblx0fSwgdGltZW91dCk7XG5cblx0Ly8gcmV0dXJuIHRoZSBjYW5jZWwgY2FsbGJhY2sgYW5kIGF1dGhlbnRpY2F0aW9uIHByb21pc2Vcblx0cmV0dXJuIHtcblx0XHRhc3luYyBjYW5jZWwoKSB7XG5cdFx0XHRjb25zdCByZXF1ZXN0ID0gc2VydmVyc1tzZXJ2ZXJJZF0gJiYgc2VydmVyc1tzZXJ2ZXJJZF0ucGVuZGluZy5nZXQocmVxdWVzdElkKTtcblx0XHRcdGlmIChyZXF1ZXN0KSB7XG5cdFx0XHRcdGxvZyhgQ2FuY2VsbGluZyByZXF1ZXN0ICR7aGlnaGxpZ2h0KHJlcXVlc3RJZCl9YCk7XG5cdFx0XHRcdGNsZWFyVGltZW91dChyZXF1ZXN0LnRpbWVyKTtcblx0XHRcdFx0c2VydmVyc1tzZXJ2ZXJJZF0ucGVuZGluZy5kZWxldGUocmVxdWVzdElkKTtcblx0XHRcdFx0YXdhaXQgc3RvcChmYWxzZSwgc2VydmVySWQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cHJvbWlzZTogbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0c2VydmVyc1tzZXJ2ZXJJZF0ucGVuZGluZy5zZXQocmVxdWVzdElkLCB7IHJlc29sdmUsIHJlamVjdCwgdGltZXIgfSk7XG5cdFx0fSlcblx0fTtcbn1cblxuLyoqXG4gKiBTdG9wcyB0aGUgSFRUUCBzZXJ2ZXIgdXNlZCBmb3IgaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb24uXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbZm9yY2U9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIHJlbW92ZXMgYWxsIHBlbmRpbmcgcmVxdWVzdHMgYW5kIHN0b3BzIHRoZSBsb2NhbFxuICogSFRUUCBzZXJ2ZXIuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gW3NlcnZlcklkc10gLSBBIHNlcnZlciBpZCBvZiBhIHNwZWNpZmljIEhUVFAgc2VydmVyIG9yIGEgbGlzdCBvZlxuICogc3BlY2lmaWMgc2VydmVyIGlkcyB0byBzdG9wLiBEZWZhdWx0cyB0byBhbGwgc2VydmVycy5cbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RvcChmb3JjZSwgc2VydmVySWRzKSB7XG5cdGlmICghc2VydmVySWRzKSB7XG5cdFx0c2VydmVySWRzID0gT2JqZWN0LmtleXMoc2VydmVycyk7XG5cdH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoc2VydmVySWRzKSkge1xuXHRcdHNlcnZlcklkcyA9IFsgc2VydmVySWRzIF07XG5cdH1cblxuXHRmb3IgKGNvbnN0IHNlcnZlcklkIG9mIHNlcnZlcklkcykge1xuXHRcdGNvbnN0IHsgc2VydmVyLCBwZW5kaW5nIH0gPSBzZXJ2ZXJzW3NlcnZlcklkXSB8fCB7fTtcblxuXHRcdGlmIChzZXJ2ZXIgJiYgKGZvcmNlIHx8ICFwZW5kaW5nLnNpemUpKSB7XG5cdFx0XHQvLyBudWxsIHRoZSBzZXJ2ZXIgcmVmIGFzYXBcblx0XHRcdGRlbGV0ZSBzZXJ2ZXJzW3NlcnZlcklkXTtcblxuXHRcdFx0bG9nKCdEZXN0cm95aW5nIGxvY2FsIEhUVFAgc2VydmVyLi4uJyk7XG5cdFx0XHRhd2FpdCBzZXJ2ZXIuZGVzdHJveSgpO1xuXHRcdFx0bG9nKCdMb2NhbCBIVFRQIHNlcnZlciBzdG9wcGVkJyk7XG5cblx0XHRcdC8vIHdlIG5lZWQgdG8gbm90aWZ5IGFsbCBwZW5kaW5nIGxvZ2lucyB0aGF0IHRoZSBzZXJ2ZXIgd2FzIHNodXQgZG93blxuXHRcdFx0Y29uc3QgZXJyID0gbmV3IEVycm9yKCdTZXJ2ZXIgc3RvcHBlZCcpO1xuXHRcdFx0Zm9yIChjb25zdCBbIGlkLCB7IHJlamVjdCwgdGltZXIgfSBdIG9mIHBlbmRpbmcuZW50cmllcygpKSB7XG5cdFx0XHRcdGxvZyhgUmVqZWN0aW5nIHJlcXVlc3QgJHtoaWdobGlnaHQoaWQpfWApO1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEhUVFAgc2VydmVyIHdpdGggY29ubmVjdGlvbiBtYW5hZ2VtZW50LlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcHJvY2VzcyBpbmNvbWluZyByZXF1ZXN0cy5cbiAqIEByZXR1cm5zIHtodHRwLlNlcnZlcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2VydmVyKGhhbmRsZXIpIHtcblx0Y29uc3QgY29ubmVjdGlvbnMgPSB7fTtcblx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoaGFuZGxlcik7XG5cblx0c2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGNvbm4pIHtcblx0XHRjb25zdCBrZXkgPSBgJHtjb25uLnJlbW90ZUFkZHJlc3N9OiR7Y29ubi5yZW1vdGVQb3J0fWA7XG5cdFx0Y29ubmVjdGlvbnNba2V5XSA9IGNvbm47XG5cdFx0Y29ubi5vbignY2xvc2UnLCAoKSA9PiB7XG5cdFx0XHRkZWxldGUgY29ubmVjdGlvbnNba2V5XTtcblx0XHR9KTtcblx0fSk7XG5cblx0c2VydmVyLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnN0IHAgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNlcnZlci5jbG9zZShyZXNvbHZlKSk7XG5cdFx0Zm9yIChjb25zdCBjb25uIG9mIE9iamVjdC52YWx1ZXMoY29ubmVjdGlvbnMpKSB7XG5cdFx0XHRjb25uLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0cmV0dXJuIHA7XG5cdH07XG5cblx0cmV0dXJuIHNlcnZlcjtcbn1cbiJdLCJmaWxlIjoic2VydmVyLmpzIn0=

@@ -115,3 +115,3 @@ "use strict";

try {
decipher = _crypto.default.createDecipheriv(algorithm, (await this.getKey()), iv);
decipher = _crypto.default.createDecipheriv(algorithm, await this.getKey(), iv);
} catch (e) {

@@ -174,3 +174,3 @@ e.amplifyCode = 'ERR_BAD_KEY';

try {
cipher = _crypto.default.createCipheriv(algorithm, (await this.getKey()), iv);
cipher = _crypto.default.createCipheriv(algorithm, await this.getKey(), iv);
} catch (e) {

@@ -246,2 +246,2 @@ e.amplifyCode = 'ERR_BAD_KEY';

exports.default = FileStore;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy9maWxlLXN0b3JlLmpzIl0sIm5hbWVzIjpbImxvZyIsIndhcm4iLCJoaWdobGlnaHQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJhbGdvcml0aG0iLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiRmlsZVN0b3JlIiwiVG9rZW5TdG9yZSIsImNvbnN0cnVjdG9yIiwib3B0cyIsInRva2VuU3RvcmVEaXIiLCJFIiwiTUlTU0lOR19SRVFVSVJFRF9QQVJBTUVURVIiLCJwYXRoIiwicmVzb2x2ZSIsInRva2VuU3RvcmVGaWxlIiwiam9pbiIsImZpbGVuYW1lIiwiY2xlYXIiLCJiYXNlVXJsIiwiZW50cmllcyIsInJlbW92ZWQiLCJfY2xlYXIiLCJsZW5ndGgiLCJkYXRhIiwiZW5jb2RlIiwiZnMiLCJvdXRwdXRGaWxlIiwibW9kZSIsInJlbW92ZSIsImRlY29kZSIsInN0ciIsImRlY2lwaGVyIiwiY3J5cHRvIiwiY3JlYXRlRGVjaXBoZXJpdiIsImdldEtleSIsImUiLCJhbXBsaWZ5Q29kZSIsIkpTT04iLCJwYXJzZSIsInVwZGF0ZSIsImZpbmFsIiwiZGVsZXRlIiwiYWNjb3VudHMiLCJfZGVsZXRlIiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJzdHJpbmdpZnkiLCJfa2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImxpc3QiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwicHVyZ2UiLCJzZXQiLCJvYmoiLCJfc2V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsR0FBRjtBQUFPQyxFQUFBQTtBQUFQLElBQWdCLHdCQUFVLHlCQUFWLENBQXRCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxtQkFBVUMsTUFBaEM7QUFFQTs7Ozs7QUFJQSxNQUFNQyxTQUFTLEdBQUcsYUFBbEI7QUFFQTs7Ozs7QUFJQSxN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LFFBQUFBLEtBQUssRUFBRTtBQUQ0QixPQUFwQztBQUdBOztBQUNELFdBQU8sS0FBS0gsSUFBWjtBQUNBO0FBRUQ7Ozs7Ozs7O0FBTUEsUUFBTUksSUFBTixHQUFhO0FBQ1osUUFBSTFCLGlCQUFHMkIsVUFBSCxDQUFjLEtBQUt0QyxjQUFuQixDQUFKLEVBQXdDO0FBQ3ZDLFVBQUk7QUFDSGxCLFFBQUFBLEdBQUcsQ0FBRSxXQUFVRSxTQUFTLENBQUMsS0FBS2dCLGNBQU4sQ0FBc0IsRUFBM0MsQ0FBSDtBQUNBLGNBQU1LLE9BQU8sR0FBRyxNQUFNLEtBQUtVLE1BQUwsQ0FBWUosaUJBQUc0QixZQUFILENBQWdCLEtBQUt2QyxjQUFyQixFQUFxQyxNQUFyQyxDQUFaLENBQXRCO0FBQ0EsZUFBTyxLQUFLd0MsS0FBTCxDQUFXbkMsT0FBWCxDQUFQO0FBQ0EsT0FKRCxDQUlFLE9BQU9nQixDQUFQLEVBQVU7QUFDWDtBQUNBO0FBQ0F0QyxRQUFBQSxJQUFJLENBQUNzQyxDQUFELENBQUo7QUFDQTtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BLFFBQU1vQixHQUFOLENBQVVDLEdBQVYsRUFBZTtBQUNkLFVBQU1yQyxPQUFPLEdBQUcsTUFBTSxNQUFNc0MsSUFBTixDQUFXRCxHQUFYLENBQXRCO0FBQ0EsVUFBTWpDLElBQUksR0FBRyxNQUFNLEtBQUtDLE1BQUwsQ0FBWUwsT0FBWixDQUFuQjtBQUNBdkIsSUFBQUEsR0FBRyxDQUFFLFdBQVVFLFNBQVMsQ0FBQyxLQUFLZ0IsY0FBTixDQUFzQixFQUEzQyxDQUFIO0FBQ0EsVUFBTVcsaUJBQUdDLFVBQUgsQ0FBYyxLQUFLWixjQUFuQixFQUFtQ1MsSUFBbkMsRUFBeUM7QUFBRUksTUFBQUEsSUFBSSxFQUFFO0FBQUk7O0FBQVosS0FBekMsQ0FBTjtBQUNBOztBQS9KZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgRSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuaW1wb3J0IFRva2VuU3RvcmUgZnJvbSAnLi90b2tlbi1zdG9yZSc7XG5cbmNvbnN0IHsgbG9nLCB3YXJuIH0gPSBzbm9vcGxvZ2coJ2FtcGxpZnktYXV0aDpmaWxlLXN0b3JlJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBUaGUgYWxnb3JpdGhtIGZvciBlbmNyeXB0aW5nIGFuZCBkZWNyeXB0aW5nLlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgYWxnb3JpdGhtID0gJ2Flcy0xMjgtY2JjJztcblxuLyoqXG4gKiBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIGZvciBlbmNyeXB0aW5nIGFuZCBkZWNyeXB0aW5nLlxuICogQHR5cGUge0J1ZmZlcn1cbiAqL1xuY29uc3QgaXYgPSBuZXcgQnVmZmVyLmFsbG9jKDE2KTtcblxuLyoqXG4gKiBBIGZpbGUtYmFzZWQgdG9rZW4gc3RvcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVTdG9yZSBleHRlbmRzIFRva2VuU3RvcmUge1xuXHQvKipcblx0ICogVGhlIG5hbWUgb2YgdGhlIHRva2VuIHN0b3JlIGZpbGUuXG5cdCAqIEB0eXBlIHtTdHJpbmd9XG5cdCAqL1xuXHRmaWxlbmFtZSA9ICcudG9rZW5zdG9yZSc7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBmaWxlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMudG9rZW5TdG9yZURpciAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlLWJhc2VkIHRva2VuIHN0b3JlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0c3VwZXIob3B0cyk7XG5cblx0XHRpZiAoIW9wdHMudG9rZW5TdG9yZURpciB8fCB0eXBlb2Ygb3B0cy50b2tlblN0b3JlRGlyICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgRS5NSVNTSU5HX1JFUVVJUkVEX1BBUkFNRVRFUignVG9rZW4gc3RvcmUgcmVxdWlyZXMgYSB0b2tlbiBzdG9yZSBwYXRoJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy50b2tlblN0b3JlRGlyID0gcGF0aC5yZXNvbHZlKG9wdHMudG9rZW5TdG9yZURpcik7XG5cdFx0dGhpcy50b2tlblN0b3JlRmlsZSA9IHBhdGguam9pbih0aGlzLnRva2VuU3RvcmVEaXIsIHRoaXMuZmlsZW5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRva2Vucy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgY2xlYXIoYmFzZVVybCkge1xuXHRcdGNvbnN0IHsgZW50cmllcywgcmVtb3ZlZCB9ID0gYXdhaXQgc3VwZXIuX2NsZWFyKGJhc2VVcmwpO1xuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZW5jb2RlKGVudHJpZXMpO1xuXHRcdFx0bG9nKGBXcml0aW5nICR7aGlnaGxpZ2h0KHRoaXMudG9rZW5TdG9yZUZpbGUpfWApO1xuXHRcdFx0YXdhaXQgZnMub3V0cHV0RmlsZSh0aGlzLnRva2VuU3RvcmVGaWxlLCBkYXRhLCB7IG1vZGU6IDM4NCAvKiA2MDAgKi8gfSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZyhgRGVsZXRpbmcgZW1wdHkgdG9rZW4gZmlsZTogJHtoaWdobGlnaHQodGhpcy50b2tlblN0b3JlRmlsZSl9YCk7XG5cdFx0XHRhd2FpdCBmcy5yZW1vdmUodGhpcy50b2tlblN0b3JlRmlsZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZW1vdmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlY29kZXMgdGhlIHN1cHBsaWVkIHN0cmluZyBpbnRvIGFuIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZGVjb2RlIGludG8gYW4gb2JqZWN0LlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgZGVjb2RlKHN0cikge1xuXHRcdGxldCBkZWNpcGhlcjtcblx0XHR0cnkge1xuXHRcdFx0ZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGF3YWl0IHRoaXMuZ2V0S2V5KCksIGl2KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRlLmFtcGxpZnlDb2RlID0gJ0VSUl9CQURfS0VZJztcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKGRlY2lwaGVyLnVwZGF0ZShzdHIsICdoZXgnLCAndXRmOCcpICsgZGVjaXBoZXIuZmluYWwoJ3V0ZjgnKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBhIHRva2Vuc3RvcmUgb24gZGlzayB0aGF0IHdhcyBlbmNyeXB0ZWQgd2l0aCBhbiBvbGQga2V5XG5cdFx0XHQvLyB0aGF0IG5vIGxvbmdlciBleGlzdHMgYW5kIHRoZSBuZXcga2V5IGNhbid0IGRlY29kZSBpdCwgc28ganVzdCBudWtlIHRoZSB0b2tlbnN0b3JlXG5cdFx0XHRsb2coYFJlbW92aW5nICR7aGlnaGxpZ2h0KHRoaXMudG9rZW5TdG9yZUZpbGUpfWApO1xuXHRcdFx0YXdhaXQgZnMucmVtb3ZlKHRoaXMudG9rZW5TdG9yZUZpbGUpO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gYWNjb3VudHMgLSBUaGUgYWNjb3VudCBuYW1lKHMpIHRvIGRlbGV0ZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZGVsZXRlKGFjY291bnRzLCBiYXNlVXJsKSB7XG5cdFx0Y29uc3QgeyBlbnRyaWVzLCByZW1vdmVkIH0gPSBhd2FpdCBzdXBlci5fZGVsZXRlKGFjY291bnRzLCBiYXNlVXJsKTtcblx0XHRpZiAoZW50cmllcy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmVuY29kZShlbnRyaWVzKTtcblx0XHRcdGxvZyhgV3JpdGluZyAke2hpZ2hsaWdodCh0aGlzLnRva2VuU3RvcmVGaWxlKX1gKTtcblx0XHRcdGF3YWl0IGZzLm91dHB1dEZpbGUodGhpcy50b2tlblN0b3JlRmlsZSwgZGF0YSwgeyBtb2RlOiAwbzYwMCB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9nKGBEZWxldGluZyBlbXB0eSB0b2tlbiBmaWxlOiAke2hpZ2hsaWdodCh0aGlzLnRva2VuU3RvcmVGaWxlKX1gKTtcblx0XHRcdGF3YWl0IGZzLnJlbW92ZSh0aGlzLnRva2VuU3RvcmVGaWxlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlbW92ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRW5jb2RlcyBhbiBvYmplY3QgaW50byBhIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgb2JqZWN0IHRvIGVuY29kZSBpbnRvIGEgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIGVuY29kZShkYXRhKSB7XG5cdFx0bGV0IGNpcGhlcjtcblx0XHR0cnkge1xuXHRcdFx0Y2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwgYXdhaXQgdGhpcy5nZXRLZXkoKSwgaXYpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGUuYW1wbGlmeUNvZGUgPSAnRVJSX0JBRF9LRVknO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cdFx0cmV0dXJuIGNpcGhlci51cGRhdGUoSlNPTi5zdHJpbmdpZnkoZGF0YSksICd1dGY4JywgJ2hleCcpICsgY2lwaGVyLmZpbmFsKCdoZXgnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkZWNpcGhlciBrZXkgb3IgZ2VuZXJhdGVzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7QnVmZmVyfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIGdldEtleSgpIHtcblx0XHRpZiAoIXRoaXMuX2tleSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfa2V5Jywge1xuXHRcdFx0XHR2YWx1ZTogJ2Q0YmUwOTA2YmM5ZmFlNDAnXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2tleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyZWl2ZXMgYWxsIHRva2VucyBmcm9tIHRoZSBzdG9yZS5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fSBSZXNvbHZlcyBhbiBhcnJheSBvZiB0b2tlbnMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBsaXN0KCkge1xuXHRcdGlmIChmcy5leGlzdHNTeW5jKHRoaXMudG9rZW5TdG9yZUZpbGUpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2coYFJlYWRpbmcgJHtoaWdobGlnaHQodGhpcy50b2tlblN0b3JlRmlsZSl9YCk7XG5cdFx0XHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmRlY29kZShmcy5yZWFkRmlsZVN5bmModGhpcy50b2tlblN0b3JlRmlsZSwgJ3V0ZjgnKSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLnB1cmdlKGVudHJpZXMpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHQvLyB0aGUgZGVjb2RlIGZhaWxlZCAob3IgdGhlcmUgd2FzIGEga2V5dGFyIHByb2JsZW0pLCBzbyBqdXN0IGxvZyBhIHdhcm5pbmcgYW5kXG5cdFx0XHRcdC8vIHJldHVybiBhbiBlbXB0eSByZXN1bHRcblx0XHRcdFx0d2FybihlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIGFjY291bnQgY3JlZGVudGlhbHMuIElmIGV4aXN0cywgdGhlIG9sZCBvbmUgaXMgZGVsZXRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSB0b2tlbiBkYXRhLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldChvYmopIHtcblx0XHRjb25zdCBlbnRyaWVzID0gYXdhaXQgc3VwZXIuX3NldChvYmopO1xuXHRcdGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmVuY29kZShlbnRyaWVzKTtcblx0XHRsb2coYFdyaXRpbmcgJHtoaWdobGlnaHQodGhpcy50b2tlblN0b3JlRmlsZSl9YCk7XG5cdFx0YXdhaXQgZnMub3V0cHV0RmlsZSh0aGlzLnRva2VuU3RvcmVGaWxlLCBkYXRhLCB7IG1vZGU6IDM4NCAvKiA2MDAgKi8gfSk7XG5cdH1cbn1cbiJdLCJmaWxlIjoic3RvcmVzL2ZpbGUtc3RvcmUuanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy9maWxlLXN0b3JlLmpzIl0sIm5hbWVzIjpbImxvZyIsIndhcm4iLCJoaWdobGlnaHQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJhbGdvcml0aG0iLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiRmlsZVN0b3JlIiwiVG9rZW5TdG9yZSIsImNvbnN0cnVjdG9yIiwib3B0cyIsInRva2VuU3RvcmVEaXIiLCJFIiwiTUlTU0lOR19SRVFVSVJFRF9QQVJBTUVURVIiLCJwYXRoIiwicmVzb2x2ZSIsInRva2VuU3RvcmVGaWxlIiwiam9pbiIsImZpbGVuYW1lIiwiY2xlYXIiLCJiYXNlVXJsIiwiZW50cmllcyIsInJlbW92ZWQiLCJfY2xlYXIiLCJsZW5ndGgiLCJkYXRhIiwiZW5jb2RlIiwiZnMiLCJvdXRwdXRGaWxlIiwibW9kZSIsInJlbW92ZSIsImRlY29kZSIsInN0ciIsImRlY2lwaGVyIiwiY3J5cHRvIiwiY3JlYXRlRGVjaXBoZXJpdiIsImdldEtleSIsImUiLCJhbXBsaWZ5Q29kZSIsIkpTT04iLCJwYXJzZSIsInVwZGF0ZSIsImZpbmFsIiwiZGVsZXRlIiwiYWNjb3VudHMiLCJfZGVsZXRlIiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJzdHJpbmdpZnkiLCJfa2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImxpc3QiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwicHVyZ2UiLCJzZXQiLCJvYmoiLCJfc2V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU07QUFBRUEsRUFBQUEsR0FBRjtBQUFPQyxFQUFBQTtBQUFQLElBQWdCLHdCQUFVLHlCQUFWLENBQXRCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCQyxtQkFBVUMsTUFBaEM7QUFFQTs7Ozs7QUFJQSxNQUFNQyxTQUFTLEdBQUcsYUFBbEI7QUFFQTs7Ozs7QUFJQSxN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LFFBQUFBLEtBQUssRUFBRTtBQUQ0QixPQUFwQztBQUdBOztBQUNELFdBQU8sS0FBS0gsSUFBWjtBQUNBO0FBRUQ7Ozs7Ozs7O0FBTUEsUUFBTUksSUFBTixHQUFhO0FBQ1osUUFBSTFCLGlCQUFHMkIsVUFBSCxDQUFjLEtBQUt0QyxjQUFuQixDQUFKLEVBQXdDO0FBQ3ZDLFVBQUk7QUFDSGxCLFFBQUFBLEdBQUcsQ0FBRSxXQUFVRSxTQUFTLENBQUMsS0FBS2dCLGNBQU4sQ0FBc0IsRUFBM0MsQ0FBSDtBQUNBLGNBQU1LLE9BQU8sR0FBRyxNQUFNLEtBQUtVLE1BQUwsQ0FBWUosaUJBQUc0QixZQUFILENBQWdCLEtBQUt2QyxjQUFyQixFQUFxQyxNQUFyQyxDQUFaLENBQXRCO0FBQ0EsZUFBTyxLQUFLd0MsS0FBTCxDQUFXbkMsT0FBWCxDQUFQO0FBQ0EsT0FKRCxDQUlFLE9BQU9nQixDQUFQLEVBQVU7QUFDWDtBQUNBO0FBQ0F0QyxRQUFBQSxJQUFJLENBQUNzQyxDQUFELENBQUo7QUFDQTtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNBO0FBRUQ7Ozs7Ozs7OztBQU9BLFFBQU1vQixHQUFOLENBQVVDLEdBQVYsRUFBZTtBQUNkLFVBQU1yQyxPQUFPLEdBQUcsTUFBTSxNQUFNc0MsSUFBTixDQUFXRCxHQUFYLENBQXRCO0FBQ0EsVUFBTWpDLElBQUksR0FBRyxNQUFNLEtBQUtDLE1BQUwsQ0FBWUwsT0FBWixDQUFuQjtBQUNBdkIsSUFBQUEsR0FBRyxDQUFFLFdBQVVFLFNBQVMsQ0FBQyxLQUFLZ0IsY0FBTixDQUFzQixFQUEzQyxDQUFIO0FBQ0EsVUFBTVcsaUJBQUdDLFVBQUgsQ0FBYyxLQUFLWixjQUFuQixFQUFtQ1MsSUFBbkMsRUFBeUM7QUFBRUksTUFBQUEsSUFBSSxFQUFFO0FBQUk7O0FBQVosS0FBekMsQ0FBTjtBQUNBOztBQS9KZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgRSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuaW1wb3J0IFRva2VuU3RvcmUgZnJvbSAnLi90b2tlbi1zdG9yZSc7XG5cbmNvbnN0IHsgbG9nLCB3YXJuIH0gPSBzbm9vcGxvZ2coJ2FtcGxpZnktYXV0aDpmaWxlLXN0b3JlJyk7XG5jb25zdCB7IGhpZ2hsaWdodCB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBUaGUgYWxnb3JpdGhtIGZvciBlbmNyeXB0aW5nIGFuZCBkZWNyeXB0aW5nLlxuICogQHR5cGUge1N0cmluZ31cbiAqL1xuY29uc3QgYWxnb3JpdGhtID0gJ2Flcy0xMjgtY2JjJztcblxuLyoqXG4gKiBUaGUgaW5pdGlhbGl6YXRpb24gdmVjdG9yIGZvciBlbmNyeXB0aW5nIGFuZCBkZWNyeXB0aW5nLlxuICogQHR5cGUge0J1ZmZlcn1cbiAqL1xuY29uc3QgaXYgPSBuZXcgQnVmZmVyLmFsbG9jKDE2KTtcblxuLyoqXG4gKiBBIGZpbGUtYmFzZWQgdG9rZW4gc3RvcmUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVTdG9yZSBleHRlbmRzIFRva2VuU3RvcmUge1xuXHQvKipcblx0ICogVGhlIG5hbWUgb2YgdGhlIHRva2VuIHN0b3JlIGZpbGUuXG5cdCAqIEB0eXBlIHtTdHJpbmd9XG5cdCAqL1xuXHRmaWxlbmFtZSA9ICcudG9rZW5zdG9yZSc7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBmaWxlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMudG9rZW5TdG9yZURpciAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlLWJhc2VkIHRva2VuIHN0b3JlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0c3VwZXIob3B0cyk7XG5cblx0XHRpZiAoIW9wdHMudG9rZW5TdG9yZURpciB8fCB0eXBlb2Ygb3B0cy50b2tlblN0b3JlRGlyICE9PSAnc3RyaW5nJykge1xuXHRcdFx0dGhyb3cgRS5NSVNTSU5HX1JFUVVJUkVEX1BBUkFNRVRFUignVG9rZW4gc3RvcmUgcmVxdWlyZXMgYSB0b2tlbiBzdG9yZSBwYXRoJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy50b2tlblN0b3JlRGlyID0gcGF0aC5yZXNvbHZlKG9wdHMudG9rZW5TdG9yZURpcik7XG5cdFx0dGhpcy50b2tlblN0b3JlRmlsZSA9IHBhdGguam9pbih0aGlzLnRva2VuU3RvcmVEaXIsIHRoaXMuZmlsZW5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRva2Vucy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgY2xlYXIoYmFzZVVybCkge1xuXHRcdGNvbnN0IHsgZW50cmllcywgcmVtb3ZlZCB9ID0gYXdhaXQgc3VwZXIuX2NsZWFyKGJhc2VVcmwpO1xuXHRcdGlmIChlbnRyaWVzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZW5jb2RlKGVudHJpZXMpO1xuXHRcdFx0bG9nKGBXcml0aW5nICR7aGlnaGxpZ2h0KHRoaXMudG9rZW5TdG9yZUZpbGUpfWApO1xuXHRcdFx0YXdhaXQgZnMub3V0cHV0RmlsZSh0aGlzLnRva2VuU3RvcmVGaWxlLCBkYXRhLCB7IG1vZGU6IDM4NCAvKiA2MDAgKi8gfSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZyhgRGVsZXRpbmcgZW1wdHkgdG9rZW4gZmlsZTogJHtoaWdobGlnaHQodGhpcy50b2tlblN0b3JlRmlsZSl9YCk7XG5cdFx0XHRhd2FpdCBmcy5yZW1vdmUodGhpcy50b2tlblN0b3JlRmlsZSk7XG5cdFx0fVxuXHRcdHJldHVybiByZW1vdmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlY29kZXMgdGhlIHN1cHBsaWVkIHN0cmluZyBpbnRvIGFuIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZGVjb2RlIGludG8gYW4gb2JqZWN0LlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgZGVjb2RlKHN0cikge1xuXHRcdGxldCBkZWNpcGhlcjtcblx0XHR0cnkge1xuXHRcdFx0ZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGF3YWl0IHRoaXMuZ2V0S2V5KCksIGl2KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRlLmFtcGxpZnlDb2RlID0gJ0VSUl9CQURfS0VZJztcblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKGRlY2lwaGVyLnVwZGF0ZShzdHIsICdoZXgnLCAndXRmOCcpICsgZGVjaXBoZXIuZmluYWwoJ3V0ZjgnKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBhIHRva2Vuc3RvcmUgb24gZGlzayB0aGF0IHdhcyBlbmNyeXB0ZWQgd2l0aCBhbiBvbGQga2V5XG5cdFx0XHQvLyB0aGF0IG5vIGxvbmdlciBleGlzdHMgYW5kIHRoZSBuZXcga2V5IGNhbid0IGRlY29kZSBpdCwgc28ganVzdCBudWtlIHRoZSB0b2tlbnN0b3JlXG5cdFx0XHRsb2coYFJlbW92aW5nICR7aGlnaGxpZ2h0KHRoaXMudG9rZW5TdG9yZUZpbGUpfWApO1xuXHRcdFx0YXdhaXQgZnMucmVtb3ZlKHRoaXMudG9rZW5TdG9yZUZpbGUpO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gYWNjb3VudHMgLSBUaGUgYWNjb3VudCBuYW1lKHMpIHRvIGRlbGV0ZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgZGVsZXRlKGFjY291bnRzLCBiYXNlVXJsKSB7XG5cdFx0Y29uc3QgeyBlbnRyaWVzLCByZW1vdmVkIH0gPSBhd2FpdCBzdXBlci5fZGVsZXRlKGFjY291bnRzLCBiYXNlVXJsKTtcblx0XHRpZiAoZW50cmllcy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmVuY29kZShlbnRyaWVzKTtcblx0XHRcdGxvZyhgV3JpdGluZyAke2hpZ2hsaWdodCh0aGlzLnRva2VuU3RvcmVGaWxlKX1gKTtcblx0XHRcdGF3YWl0IGZzLm91dHB1dEZpbGUodGhpcy50b2tlblN0b3JlRmlsZSwgZGF0YSwgeyBtb2RlOiAwbzYwMCB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9nKGBEZWxldGluZyBlbXB0eSB0b2tlbiBmaWxlOiAke2hpZ2hsaWdodCh0aGlzLnRva2VuU3RvcmVGaWxlKX1gKTtcblx0XHRcdGF3YWl0IGZzLnJlbW92ZSh0aGlzLnRva2VuU3RvcmVGaWxlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlbW92ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRW5jb2RlcyBhbiBvYmplY3QgaW50byBhIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgb2JqZWN0IHRvIGVuY29kZSBpbnRvIGEgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIGVuY29kZShkYXRhKSB7XG5cdFx0bGV0IGNpcGhlcjtcblx0XHR0cnkge1xuXHRcdFx0Y2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwgYXdhaXQgdGhpcy5nZXRLZXkoKSwgaXYpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGUuYW1wbGlmeUNvZGUgPSAnRVJSX0JBRF9LRVknO1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cdFx0cmV0dXJuIGNpcGhlci51cGRhdGUoSlNPTi5zdHJpbmdpZnkoZGF0YSksICd1dGY4JywgJ2hleCcpICsgY2lwaGVyLmZpbmFsKCdoZXgnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBkZWNpcGhlciBrZXkgb3IgZ2VuZXJhdGVzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7QnVmZmVyfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIGdldEtleSgpIHtcblx0XHRpZiAoIXRoaXMuX2tleSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfa2V5Jywge1xuXHRcdFx0XHR2YWx1ZTogJ2Q0YmUwOTA2YmM5ZmFlNDAnXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX2tleTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyZWl2ZXMgYWxsIHRva2VucyBmcm9tIHRoZSBzdG9yZS5cblx0ICpcblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fSBSZXNvbHZlcyBhbiBhcnJheSBvZiB0b2tlbnMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBsaXN0KCkge1xuXHRcdGlmIChmcy5leGlzdHNTeW5jKHRoaXMudG9rZW5TdG9yZUZpbGUpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2coYFJlYWRpbmcgJHtoaWdobGlnaHQodGhpcy50b2tlblN0b3JlRmlsZSl9YCk7XG5cdFx0XHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmRlY29kZShmcy5yZWFkRmlsZVN5bmModGhpcy50b2tlblN0b3JlRmlsZSwgJ3V0ZjgnKSk7XG5cdFx0XHRcdHJldHVybiB0aGlzLnB1cmdlKGVudHJpZXMpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHQvLyB0aGUgZGVjb2RlIGZhaWxlZCAob3IgdGhlcmUgd2FzIGEga2V5dGFyIHByb2JsZW0pLCBzbyBqdXN0IGxvZyBhIHdhcm5pbmcgYW5kXG5cdFx0XHRcdC8vIHJldHVybiBhbiBlbXB0eSByZXN1bHRcblx0XHRcdFx0d2FybihlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIGFjY291bnQgY3JlZGVudGlhbHMuIElmIGV4aXN0cywgdGhlIG9sZCBvbmUgaXMgZGVsZXRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIFRoZSB0b2tlbiBkYXRhLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNldChvYmopIHtcblx0XHRjb25zdCBlbnRyaWVzID0gYXdhaXQgc3VwZXIuX3NldChvYmopO1xuXHRcdGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmVuY29kZShlbnRyaWVzKTtcblx0XHRsb2coYFdyaXRpbmcgJHtoaWdobGlnaHQodGhpcy50b2tlblN0b3JlRmlsZSl9YCk7XG5cdFx0YXdhaXQgZnMub3V0cHV0RmlsZSh0aGlzLnRva2VuU3RvcmVGaWxlLCBkYXRhLCB7IG1vZGU6IDM4NCAvKiA2MDAgKi8gfSk7XG5cdH1cbn1cbiJdLCJmaWxlIjoic3RvcmVzL2ZpbGUtc3RvcmUuanMifQ==

@@ -102,3 +102,3 @@ "use strict";

for (const entry of entries) {
Object.defineProperty(entry, 'expired', {
Object.defineProperty(entry.auth, 'expired', {
value: true

@@ -118,5 +118,5 @@ });

for (let i = 0; i < entries.length; i++) {
if (entries[i].baseUrl.replace(protoRegExp, '') === baseUrl) {
if (entries[i].auth.baseUrl.replace(protoRegExp, '') === baseUrl) {
const entry = entries.splice(i--, 1)[0];
Object.defineProperty(entry, 'expired', {
Object.defineProperty(entry.auth, 'expired', {
value: true

@@ -171,5 +171,5 @@ });

for (let i = 0; i < entries.length; i++) {
if (accounts.includes(entries[i].name) && (!baseUrl || entries[i].baseUrl.replace(protoRegExp, '') === baseUrl)) {
if (accounts.includes(entries[i].name) && (!baseUrl || entries[i].auth.baseUrl.replace(protoRegExp, '') === baseUrl)) {
const entry = entries.splice(i--, 1)[0];
Object.defineProperty(entry, 'expired', {
Object.defineProperty(entry.auth, 'expired', {
value: true

@@ -216,3 +216,3 @@ });

for (let i = 0; i < len; i++) {
if ((accountName && entries[i].name === accountName || hash && entries[i].hash === hash) && (!baseUrl || entries[i].baseUrl.replace(protoRegExp, '').replace(/\/$/, '') === baseUrl)) {
if ((accountName && entries[i].name === accountName || hash && entries[i].hash === hash) && (!baseUrl || entries[i].auth.baseUrl.replace(protoRegExp, '').replace(/\/$/, '') === baseUrl)) {
log(`Found account tokens: ${highlight(entries[i].name)}`);

@@ -223,2 +223,3 @@ return entries[i];

log('Token not found');
return null;

@@ -257,5 +258,4 @@ }

const {
expires,
tokens
} = entries[i];
expires
} = entries[i].auth;
const now = Date.now();

@@ -265,4 +265,4 @@

// not expired
if (!Object.getOwnPropertyDescriptor(entries[i], 'expired')) {
Object.defineProperty(entries[i], 'expired', {
if (!Object.getOwnPropertyDescriptor(entries[i].auth, 'expired')) {
Object.defineProperty(entries[i].auth, 'expired', {
configurable: true,

@@ -313,3 +313,3 @@

for (let i = 0, len = entries.length; i < len; i++) {
if (entries[i].baseUrl === data.baseUrl && entries[i].name === data.name) {
if (entries[i].auth.baseUrl === data.auth.baseUrl && entries[i].name === data.name) {
entries.splice(i, 1);

@@ -327,2 +327,2 @@ break;

exports.default = TokenStore;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy90b2tlbi1zdG9yZS5qcyJdLCJuYW1lcyI6WyJsb2ciLCJoaWdobGlnaHQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJwcm90b1JlZ0V4cCIsIlRva2VuU3RvcmUiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsInRva2VuUmVmcmVzaFRocmVzaG9sZCIsInVuZGVmaW5lZCIsInRocmVzaG9sZCIsInBhcnNlSW50IiwiaXNOYU4iLCJJTlZBTElEX1BBUkFNRVRFUiIsIklOVkFMSURfUkFOR0UiLCJjbGVhciIsImJhc2VVcmwiLCJlbnRyaWVzIiwicmVtb3ZlZCIsIl9jbGVhciIsImxpc3QiLCJlbnRyeSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJyZXBsYWNlIiwiaSIsImxlbmd0aCIsInNwbGljZSIsInB1c2giLCJkZWxldGUiLCJhY2NvdW50cyIsIl9kZWxldGUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsIm5hbWUiLCJnZXQiLCJhY2NvdW50TmFtZSIsImhhc2giLCJNSVNTSU5HX1JFUVVJUkVEX1BBUkFNRVRFUiIsImxlbiIsInB1cmdlIiwiY291bnQiLCJleHBpcmVzIiwidG9rZW5zIiwibm93IiwiRGF0ZSIsImFjY2VzcyIsInJlZnJlc2giLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJzZXQiLCJkYXRhIiwiX3NldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSwwQkFBVixDQUFoQjtBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFnQkMsbUJBQVVDLE1BQWhDO0FBRUE7Ozs7O0FBSUEsTUFBTUMsV0FBVyxHQUFHLFNBQXBCO0FBRUE7Ozs7QUFHZSxNQUFNQyxVQUFOLENBQWlCO0FBQy9COzs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUFDLEVB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QUs7QUFDTDFCLE1BQUFBLE9BQU8sQ0FBQ1csTUFBUixDQUFlRixDQUFDLEVBQWhCLEVBQW9CLENBQXBCO0FBQ0E7O0FBRUQ1QixJQUFBQSxHQUFHLENBQUUsVUFBU0MsU0FBUyxDQUFDNEMsS0FBRCxDQUFRLElBQUcsd0JBQVUsT0FBVixFQUFtQkEsS0FBbkIsQ0FBMEIsRUFBekQsQ0FBSDtBQUVBLFdBQU8xQixPQUFQO0FBQ0E7QUFFRDs7QUFDQTs7Ozs7Ozs7O0FBT0EsUUFBTW1DLEdBQU4sQ0FBVUMsSUFBVixFQUFnQixDQUVmLENBRkQsQ0FDQzs7QUFHRDs7Ozs7Ozs7O0FBT0EsUUFBTUMsSUFBTixDQUFXRCxJQUFYLEVBQWlCO0FBQ2hCLFVBQU1wQyxPQUFPLEdBQUcsTUFBTSxLQUFLRyxJQUFMLEVBQXRCOztBQUVBLFNBQUssSUFBSU0sQ0FBQyxHQUFHLENBQVIsRUFBV2UsR0FBRyxHQUFHeEIsT0FBTyxDQUFDVSxNQUE5QixFQUFzQ0QsQ0FBQyxHQUFHZSxHQUExQyxFQUErQ2YsQ0FBQyxFQUFoRCxFQUFvRDtBQUNuRCxVQUFJVCxPQUFPLENBQUNTLENBQUQsQ0FBUCxDQUFXVixPQUFYLEtBQXVCcUMsSUFBSSxDQUFDckMsT0FBNUIsSUFBdUNDLE9BQU8sQ0FBQ1MsQ0FBRCxDQUFQLENBQVdVLElBQVgsS0FBb0JpQixJQUFJLENBQUNqQixJQUFwRSxFQUEwRTtBQUN6RW5CLFFBQUFBLE9BQU8sQ0FBQ1csTUFBUixDQUFlRixDQUFmLEVBQWtCLENBQWxCO0FBQ0E7QUFDQTtBQUNEOztBQUVEVCxJQUFBQSxPQUFPLENBQUNZLElBQVIsQ0FBYXdCLElBQWI7QUFDQSxXQUFPcEMsT0FBUDtBQUNBOztBQTdPOEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgRSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHBsdXJhbGl6ZSBmcm9tICdwbHVyYWxpemUnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdhbXBsaWZ5LWF1dGg6dG9rZW4tc3RvcmUnKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gPSBzbm9vcGxvZ2cuc3R5bGVzO1xuXG4vKipcbiAqIEEgcmVnZXggdG8gbWF0Y2ggYSBVUkwgcHJvdG9jb2wuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCBwcm90b1JlZ0V4cCA9IC9eLipcXC9cXC8vO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHRva2VuIHN0b3JhZ2UgYmFja2VuZHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuU3RvcmUge1xuXHQvKipcblx0ICogVGhlIGFnZSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICpcblx0ICogQHR5cGUge051bWJlcn1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHR0b2tlblJlZnJlc2hUaHJlc2hvbGQgPSAwO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZmlsZSBzdG9yZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQ9MF0gLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3Ncblx0ICogdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAob3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgdGhyZXNob2xkID0gcGFyc2VJbnQob3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQsIDEwKTtcblx0XHRcdGlmIChpc05hTih0aHJlc2hvbGQpKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9QQVJBTUVURVIoJ0V4cGVjdGVkIHRva2VuIHJlZnJlc2ggdGhyZXNob2xkIHRvIGJlIGEgbnVtYmVyIG9mIHNlY29uZHMnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRocmVzaG9sZCA8IDApIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX1JBTkdFKCdUb2tlbiByZWZyZXNoIHRocmVzaG9sZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvJyk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9rZW5SZWZyZXNoVGhyZXNob2xkID0gdGhyZXNob2xkICogMTAwMDtcblx0XHR9XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgdG9rZW5zLiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSBvdmVyd3JpdHRlbi5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgY2xlYXIoYmFzZVVybCkge1xuXHRcdHJldHVybiB7IGVudHJpZXM6IFtdLCByZW1vdmVkOiBbXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRva2Vucy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgX2NsZWFyKGJhc2VVcmwpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG5cblx0XHRpZiAoIWJhc2VVcmwpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZW50cnksICdleHBpcmVkJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7IGVudHJpZXM6IFtdLCByZW1vdmVkOiBlbnRyaWVzIH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVtb3ZlZCA9IFtdO1xuXHRcdGJhc2VVcmwgPSBiYXNlVXJsLnJlcGxhY2UoL14uKlxcL1xcLy8sICcnKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChlbnRyaWVzW2ldLmJhc2VVcmwucmVwbGFjZShwcm90b1JlZ0V4cCwgJycpID09PSBiYXNlVXJsKSB7XG5cdFx0XHRcdGNvbnN0IGVudHJ5ID0gZW50cmllcy5zcGxpY2UoaS0tLCAxKVswXTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVudHJ5LCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdHJlbW92ZWQucHVzaChlbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZW50cmllcywgcmVtb3ZlZCB9O1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSB0b2tlbiBmcm9tIHRoZSBzdG9yZS4gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBhY2NvdW50cyAtIFRoZSBhY2NvdW50IG5hbWUocykgdG8gZGVsZXRlLlxuIFx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBkZWxldGUoYWNjb3VudHMsIGJhc2VVcmwpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gYWNjb3VudHMgLSBUaGUgYWNjb3VudCBuYW1lKHMpIHRvIGRlbGV0ZS5cbiBcdCAqIEBwYXJhbSB7U3RyaW5nfSBbYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgX2RlbGV0ZShhY2NvdW50cywgYmFzZVVybCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblx0XHRjb25zdCByZW1vdmVkID0gW107XG5cblx0XHRpZiAoYmFzZVVybCkge1xuXHRcdFx0YmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgvXi4qXFwvXFwvLywgJycpO1xuXHRcdH1cblxuXHRcdGlmICghQXJyYXkuaXNBcnJheShhY2NvdW50cykpIHtcblx0XHRcdGFjY291bnRzID0gWyBhY2NvdW50cyBdO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFjY291bnRzLmluY2x1ZGVzKGVudHJpZXNbaV0ubmFtZSkgJiYgKCFiYXNlVXJsIHx8IGVudHJpZXNbaV0uYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykgPT09IGJhc2VVcmwpKSB7XG5cdFx0XHRcdGNvbnN0IGVudHJ5ID0gZW50cmllcy5zcGxpY2UoaS0tLCAxKVswXTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVudHJ5LCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdHJlbW92ZWQucHVzaChlbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZW50cmllcywgcmVtb3ZlZCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJlaXZlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVmFyaW91cyBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmFjY291bnROYW1lIC0gVGhlIGFjY291bnQgbmFtZSB0byBnZXQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB0aGUgdG9rZW4gb3IgYHVuZGVmaW5lZGAgaWYgbm90IHNldC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldCh7IGFjY291bnROYW1lLCBiYXNlVXJsLCBoYXNoIH0gPSB7fSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblxuXHRcdGlmIChiYXNlVXJsKSB7XG5cdFx0XHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKTtcblx0XHR9XG5cblx0XHRpZiAoIWFjY291bnROYW1lICYmICFoYXNoKSB7XG5cdFx0XHR0aHJvdyBFLk1JU1NJTkdfUkVRVUlSRURfUEFSQU1FVEVSKCdNdXN0IHNwZWNpZnkgZWl0aGVyIHRoZSBhY2NvdW50IG5hbWUgb3IgYXV0aGVudGljYXRvciBoYXNoJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuID0gZW50cmllcy5sZW5ndGg7XG5cdFx0bG9nKGBTY2FubmluZyAke2hpZ2hsaWdodChsZW4pfSAke3BsdXJhbGl6ZSgndG9rZW4nLCBsZW4pfSBmb3IgYWNjb3VudE5hbWU9JHtoaWdobGlnaHQoYWNjb3VudE5hbWUpfSBoYXNoPSR7aGlnaGxpZ2h0KGhhc2gpfSBiYXNlVXJsPSR7aGlnaGxpZ2h0KGJhc2VVcmwpfWApO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCgoYWNjb3VudE5hbWUgJiYgZW50cmllc1tpXS5uYW1lID09PSBhY2NvdW50TmFtZSkgfHwgKGhhc2ggJiYgZW50cmllc1tpXS5oYXNoID09PSBoYXNoKSkgJiYgKCFiYXNlVXJsIHx8IGVudHJpZXNbaV0uYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKSA9PT0gYmFzZVVybCkpIHtcblx0XHRcdFx0bG9nKGBGb3VuZCBhY2NvdW50IHRva2VuczogJHtoaWdobGlnaHQoZW50cmllc1tpXS5uYW1lKX1gKTtcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmVpdmVzIGFsbCB0b2tlbnMgZnJvbSB0aGUgc3RvcmUuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59IFJlc29sdmVzIGFuIGFycmF5IG9mIHRva2Vucy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxpc3QoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgbGlzdCBvZiB0b2tlbnMgaXMgdmFsaWQgYW5kIGRvZXMgbm90IGNvbnRhaW4gYW55IGV4cGlyZWQgdG9rZW5zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBlbnRyaWVzIC0gQW4gYXJyYXkgb2YgdG9rZW5zLlxuXHQgKiBAcmV0dXJucyB7QXJyYXkuPE9iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cHVyZ2UoZW50cmllcykge1xuXHRcdGlmICghZW50cmllcykge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IDA7XG5cblx0XHQvLyBsb29wIG92ZXIgZWFjaCBlbnRyeSBhbmQgcmVtb3ZlIGFueSBleHBpcmVkIHRva2Vuc1xuXHRcdC8vIE5PVEU6IHRoaXMgY29kZSBpbnRlbnRpb25hbGx5IGNoZWNrZXMgYGVudHJpZXMubGVuZ3RoYCBlYWNoIGxvb3AgaW5zdGVhZCBvZiBjYWNoaW5nIHRoZVxuXHRcdC8vIGxlbmd0aCBzaW5jZSBzcGxpY2UoKSBzaHJpbmtzIHRoZSBhcnJheSBsZW5ndGhcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHsgZXhwaXJlcywgdG9rZW5zIH0gPSBlbnRyaWVzW2ldO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChleHBpcmVzICYmICgoZXhwaXJlcy5hY2Nlc3MgPiAobm93ICsgdGhpcy50b2tlblJlZnJlc2hUaHJlc2hvbGQpKSB8fCAoZXhwaXJlcy5yZWZyZXNoID4gbm93KSkpIHtcblx0XHRcdFx0Ly8gbm90IGV4cGlyZWRcblx0XHRcdFx0aWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVudHJpZXNbaV0sICdleHBpcmVkJykpIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZW50cmllc1tpXSwgJ2V4cGlyZWQnLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGlyZXMuYWNjZXNzIDwgRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvdW50Kys7XG5cdFx0XHRlbnRyaWVzLnNwbGljZShpLS0sIDEpO1xuXHRcdH1cblxuXHRcdGxvZyhgUHVyZ2VkICR7aGlnaGxpZ2h0KGNvdW50KX0gJHtwbHVyYWxpemUoJ2VudHJ5JywgY291bnQpfWApO1xuXG5cdFx0cmV0dXJuIGVudHJpZXM7XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvKipcblx0ICogU2F2ZXMgYWNjb3VudCBjcmVkZW50aWFscy4gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIHRva2VuIGRhdGEuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIHNldChkYXRhKSB7XG5cdFx0Ly8gbm9vcFxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIGFjY291bnQgY3JlZGVudGlhbHMuIElmIGV4aXN0cywgdGhlIG9sZCBvbmUgaXMgZGVsZXRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgdG9rZW4gZGF0YS5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX3NldChkYXRhKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChlbnRyaWVzW2ldLmJhc2VVcmwgPT09IGRhdGEuYmFzZVVybCAmJiBlbnRyaWVzW2ldLm5hbWUgPT09IGRhdGEubmFtZSkge1xuXHRcdFx0XHRlbnRyaWVzLnNwbGljZShpLCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZW50cmllcy5wdXNoKGRhdGEpO1xuXHRcdHJldHVybiBlbnRyaWVzO1xuXHR9XG59XG4iXSwiZmlsZSI6InN0b3Jlcy90b2tlbi1zdG9yZS5qcyJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy90b2tlbi1zdG9yZS5qcyJdLCJuYW1lcyI6WyJsb2ciLCJoaWdobGlnaHQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJwcm90b1JlZ0V4cCIsIlRva2VuU3RvcmUiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsInRva2VuUmVmcmVzaFRocmVzaG9sZCIsInVuZGVmaW5lZCIsInRocmVzaG9sZCIsInBhcnNlSW50IiwiaXNOYU4iLCJJTlZBTElEX1BBUkFNRVRFUiIsIklOVkFMSURfUkFOR0UiLCJjbGVhciIsImJhc2VVcmwiLCJlbnRyaWVzIiwicmVtb3ZlZCIsIl9jbGVhciIsImxpc3QiLCJlbnRyeSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiYXV0aCIsInZhbHVlIiwicmVwbGFjZSIsImkiLCJsZW5ndGgiLCJzcGxpY2UiLCJwdXNoIiwiZGVsZXRlIiwiYWNjb3VudHMiLCJfZGVsZXRlIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJuYW1lIiwiZ2V0IiwiYWNjb3VudE5hbWUiLCJoYXNoIiwiTUlTU0lOR19SRVFVSVJFRF9QQVJBTUVURVIiLCJsZW4iLCJwdXJnZSIsImNvdW50IiwiZXhwaXJlcyIsIm5vdyIsIkRhdGUiLCJhY2Nlc3MiLCJyZWZyZXNoIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwic2V0IiwiZGF0YSIsIl9zZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQVUsd0JBQVUsMEJBQVYsQ0FBaEI7QUFDQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBZ0JDLG1CQUFVQyxNQUFoQztBQUVBOzs7OztBQUlBLE1BQU1DLFdBQVcsR0FBRyxTQUFwQjtBQUVBOzs7O0FBR2UsTUFBTUMsVUFBTixDQUFpQjtBQUMvQjs7Ozs7OztBQVFBOzs7Ozs7OztBQVFBQyxFQUFB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ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmltcG9ydCBFIGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbmNvbnN0IHsgbG9nIH0gPSBzbm9vcGxvZ2coJ2FtcGxpZnktYXV0aDp0b2tlbi1zdG9yZScpO1xuY29uc3QgeyBoaWdobGlnaHQgfSA9IHNub29wbG9nZy5zdHlsZXM7XG5cbi8qKlxuICogQSByZWdleCB0byBtYXRjaCBhIFVSTCBwcm90b2NvbC5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKi9cbmNvbnN0IHByb3RvUmVnRXhwID0gL14uKlxcL1xcLy87XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgdG9rZW4gc3RvcmFnZSBiYWNrZW5kcy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5TdG9yZSB7XG5cdC8qKlxuXHQgKiBUaGUgYWdlIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIGFjY2VzcyB0b2tlbiBleHBpcmVzIGFuZCBzaG91bGQgYmUgcmVmcmVzaGVkLlxuXHQgKlxuXHQgKiBAdHlwZSB7TnVtYmVyfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdHRva2VuUmVmcmVzaFRocmVzaG9sZCA9IDA7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBmaWxlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnRva2VuUmVmcmVzaFRocmVzaG9sZD0wXSAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIGFjY2Vzc1xuXHQgKiB0b2tlbiBleHBpcmVzIGFuZCBzaG91bGQgYmUgcmVmcmVzaGVkLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0aWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRzLnRva2VuUmVmcmVzaFRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCB0aHJlc2hvbGQgPSBwYXJzZUludChvcHRzLnRva2VuUmVmcmVzaFRocmVzaG9sZCwgMTApO1xuXHRcdFx0aWYgKGlzTmFOKHRocmVzaG9sZCkpIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX1BBUkFNRVRFUignRXhwZWN0ZWQgdG9rZW4gcmVmcmVzaCB0aHJlc2hvbGQgdG8gYmUgYSBudW1iZXIgb2Ygc2Vjb25kcycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhyZXNob2xkIDwgMCkge1xuXHRcdFx0XHR0aHJvdyBFLklOVkFMSURfUkFOR0UoJ1Rva2VuIHJlZnJlc2ggdGhyZXNob2xkIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8nKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy50b2tlblJlZnJlc2hUaHJlc2hvbGQgPSB0aHJlc2hvbGQgKiAxMDAwO1xuXHRcdH1cblx0fVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFsbCB0b2tlbnMuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW2Jhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHVzZWQgdG8gZmlsdGVyIGFjY291bnRzLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBjbGVhcihiYXNlVXJsKSB7XG5cdFx0cmV0dXJuIHsgZW50cmllczogW10sIHJlbW92ZWQ6IFtdIH07XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgdG9rZW5zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW2Jhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHVzZWQgdG8gZmlsdGVyIGFjY291bnRzLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBfY2xlYXIoYmFzZVVybCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblxuXHRcdGlmICghYmFzZVVybCkge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnRyeS5hdXRoLCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyBlbnRyaWVzOiBbXSwgcmVtb3ZlZDogZW50cmllcyB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlbW92ZWQgPSBbXTtcblx0XHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKC9eLipcXC9cXC8vLCAnJyk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZW50cmllc1tpXS5hdXRoLmJhc2VVcmwucmVwbGFjZShwcm90b1JlZ0V4cCwgJycpID09PSBiYXNlVXJsKSB7XG5cdFx0XHRcdGNvbnN0IGVudHJ5ID0gZW50cmllcy5zcGxpY2UoaS0tLCAxKVswXTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVudHJ5LmF1dGgsICdleHBpcmVkJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0XHRcdFx0cmVtb3ZlZC5wdXNoKGVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4geyBlbnRyaWVzLCByZW1vdmVkIH07XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvKipcblx0ICogRGVsZXRlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSBvdmVyd3JpdHRlbi5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IGFjY291bnRzIC0gVGhlIGFjY291bnQgbmFtZShzKSB0byBkZWxldGUuXG4gXHQgKiBAcGFyYW0ge1N0cmluZ30gW2Jhc2VVcmxdIC0gVGhlIGJhc2UgVVJMIHVzZWQgdG8gZmlsdGVyIGFjY291bnRzLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGRlbGV0ZShhY2NvdW50cywgYmFzZVVybCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgdG9rZW4gZnJvbSB0aGUgc3RvcmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBhY2NvdW50cyAtIFRoZSBhY2NvdW50IG5hbWUocykgdG8gZGVsZXRlLlxuIFx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBfZGVsZXRlKGFjY291bnRzLCBiYXNlVXJsKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuXHRcdGNvbnN0IHJlbW92ZWQgPSBbXTtcblxuXHRcdGlmIChiYXNlVXJsKSB7XG5cdFx0XHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKC9eLipcXC9cXC8vLCAnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KGFjY291bnRzKSkge1xuXHRcdFx0YWNjb3VudHMgPSBbIGFjY291bnRzIF07XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYWNjb3VudHMuaW5jbHVkZXMoZW50cmllc1tpXS5uYW1lKSAmJiAoIWJhc2VVcmwgfHwgZW50cmllc1tpXS5hdXRoLmJhc2VVcmwucmVwbGFjZShwcm90b1JlZ0V4cCwgJycpID09PSBiYXNlVXJsKSkge1xuXHRcdFx0XHRjb25zdCBlbnRyeSA9IGVudHJpZXMuc3BsaWNlKGktLSwgMSlbMF07XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnRyeS5hdXRoLCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdHJlbW92ZWQucHVzaChlbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZW50cmllcywgcmVtb3ZlZCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJlaXZlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVmFyaW91cyBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmFjY291bnROYW1lIC0gVGhlIGFjY291bnQgbmFtZSB0byBnZXQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB0aGUgdG9rZW4gb3IgYHVuZGVmaW5lZGAgaWYgbm90IHNldC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldCh7IGFjY291bnROYW1lLCBiYXNlVXJsLCBoYXNoIH0gPSB7fSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblxuXHRcdGlmIChiYXNlVXJsKSB7XG5cdFx0XHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKTtcblx0XHR9XG5cblx0XHRpZiAoIWFjY291bnROYW1lICYmICFoYXNoKSB7XG5cdFx0XHR0aHJvdyBFLk1JU1NJTkdfUkVRVUlSRURfUEFSQU1FVEVSKCdNdXN0IHNwZWNpZnkgZWl0aGVyIHRoZSBhY2NvdW50IG5hbWUgb3IgYXV0aGVudGljYXRvciBoYXNoJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuID0gZW50cmllcy5sZW5ndGg7XG5cdFx0bG9nKGBTY2FubmluZyAke2hpZ2hsaWdodChsZW4pfSAke3BsdXJhbGl6ZSgndG9rZW4nLCBsZW4pfSBmb3IgYWNjb3VudE5hbWU9JHtoaWdobGlnaHQoYWNjb3VudE5hbWUpfSBoYXNoPSR7aGlnaGxpZ2h0KGhhc2gpfSBiYXNlVXJsPSR7aGlnaGxpZ2h0KGJhc2VVcmwpfWApO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCgoYWNjb3VudE5hbWUgJiYgZW50cmllc1tpXS5uYW1lID09PSBhY2NvdW50TmFtZSkgfHwgKGhhc2ggJiYgZW50cmllc1tpXS5oYXNoID09PSBoYXNoKSkgJiYgKCFiYXNlVXJsIHx8IGVudHJpZXNbaV0uYXV0aC5iYXNlVXJsLnJlcGxhY2UocHJvdG9SZWdFeHAsICcnKS5yZXBsYWNlKC9cXC8kLywgJycpID09PSBiYXNlVXJsKSkge1xuXHRcdFx0XHRsb2coYEZvdW5kIGFjY291bnQgdG9rZW5zOiAke2hpZ2hsaWdodChlbnRyaWVzW2ldLm5hbWUpfWApO1xuXHRcdFx0XHRyZXR1cm4gZW50cmllc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsb2coJ1Rva2VuIG5vdCBmb3VuZCcpO1xuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmVpdmVzIGFsbCB0b2tlbnMgZnJvbSB0aGUgc3RvcmUuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59IFJlc29sdmVzIGFuIGFycmF5IG9mIHRva2Vucy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxpc3QoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgbGlzdCBvZiB0b2tlbnMgaXMgdmFsaWQgYW5kIGRvZXMgbm90IGNvbnRhaW4gYW55IGV4cGlyZWQgdG9rZW5zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBlbnRyaWVzIC0gQW4gYXJyYXkgb2YgdG9rZW5zLlxuXHQgKiBAcmV0dXJucyB7QXJyYXkuPE9iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cHVyZ2UoZW50cmllcykge1xuXHRcdGlmICghZW50cmllcykge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IDA7XG5cblx0XHQvLyBsb29wIG92ZXIgZWFjaCBlbnRyeSBhbmQgcmVtb3ZlIGFueSBleHBpcmVkIHRva2Vuc1xuXHRcdC8vIE5PVEU6IHRoaXMgY29kZSBpbnRlbnRpb25hbGx5IGNoZWNrZXMgYGVudHJpZXMubGVuZ3RoYCBlYWNoIGxvb3AgaW5zdGVhZCBvZiBjYWNoaW5nIHRoZVxuXHRcdC8vIGxlbmd0aCBzaW5jZSBzcGxpY2UoKSBzaHJpbmtzIHRoZSBhcnJheSBsZW5ndGhcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHsgZXhwaXJlcyB9ID0gZW50cmllc1tpXS5hdXRoO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChleHBpcmVzICYmICgoZXhwaXJlcy5hY2Nlc3MgPiAobm93ICsgdGhpcy50b2tlblJlZnJlc2hUaHJlc2hvbGQpKSB8fCAoZXhwaXJlcy5yZWZyZXNoID4gbm93KSkpIHtcblx0XHRcdFx0Ly8gbm90IGV4cGlyZWRcblx0XHRcdFx0aWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVudHJpZXNbaV0uYXV0aCwgJ2V4cGlyZWQnKSkge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbnRyaWVzW2ldLmF1dGgsICdleHBpcmVkJywge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5leHBpcmVzLmFjY2VzcyA8IERhdGUubm93KCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb3VudCsrO1xuXHRcdFx0ZW50cmllcy5zcGxpY2UoaS0tLCAxKTtcblx0XHR9XG5cblx0XHRsb2coYFB1cmdlZCAke2hpZ2hsaWdodChjb3VudCl9ICR7cGx1cmFsaXplKCdlbnRyeScsIGNvdW50KX1gKTtcblxuXHRcdHJldHVybiBlbnRyaWVzO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0LyoqXG5cdCAqIFNhdmVzIGFjY291bnQgY3JlZGVudGlhbHMuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIFRoZSB0b2tlbiBkYXRhLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRhc3luYyBzZXQoZGF0YSkge1xuXHRcdC8vIG5vb3Bcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyBhY2NvdW50IGNyZWRlbnRpYWxzLiBJZiBleGlzdHMsIHRoZSBvbGQgb25lIGlzIGRlbGV0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIHRva2VuIGRhdGEuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIF9zZXQoZGF0YSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBsZW4gPSBlbnRyaWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoZW50cmllc1tpXS5hdXRoLmJhc2VVcmwgPT09IGRhdGEuYXV0aC5iYXNlVXJsICYmIGVudHJpZXNbaV0ubmFtZSA9PT0gZGF0YS5uYW1lKSB7XG5cdFx0XHRcdGVudHJpZXMuc3BsaWNlKGksIDEpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRlbnRyaWVzLnB1c2goZGF0YSk7XG5cdFx0cmV0dXJuIGVudHJpZXM7XG5cdH1cbn1cbiJdLCJmaWxlIjoic3RvcmVzL3Rva2VuLXN0b3JlLmpzIn0=

@@ -6,7 +6,6 @@ "use strict";

});
exports.getServerInfo = getServerInfo;
exports.handleRequestError = handleRequestError;
exports.md5 = md5;
exports.renderHTML = renderHTML;
exports.stringifyQueryString = stringifyQueryString;
exports.prepareForm = prepareForm;

@@ -17,4 +16,2 @@ var _crypto = _interopRequireDefault(require("crypto"));

var _amplifyRequest = _interopRequireDefault(require("@axway/amplify-request"));
var _snooplogg = _interopRequireDefault(require("snooplogg"));

@@ -24,4 +21,2 @@

var _url = require("url");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -34,32 +29,2 @@

/**
* Discovers available endpoints based on the remote server's OpenID configuration.
*
* @param {String} [url] - An optional URL to discover the available endpoints.
* @returns {Promise<Object>}
*/
async function getServerInfo(url) {
if (!url || typeof url !== 'string') {
throw _errors.default.INVALID_ARGUMENT('Expected URL to be a non-empty string');
}
log(`Fetching server info: ${url}...`);
try {
const {
body
} = await (0, _amplifyRequest.default)({
url,
validateJSON: true
});
return body;
} catch (err) {
if (err.code === 'INVALID_JSON') {
throw err;
}
throw new Error(`Failed to get server info (status ${err.statusCode})`);
}
}
/**
* Constructs an error from a failed fetch request, logs it, and returns it.

@@ -74,3 +39,2 @@ *

function handleRequestError({

@@ -189,20 +153,19 @@ label,

/**
* Copies all params into a new object and converts camelcase property names to underscore case,
* then returns the stringified query string.
* Copies all params into a new object and converts camelcase property names to underscore case.
*
* @param {Object} params - The query string parameters to stringify.
* @returns {String}
* @returns {Object}
*/
function stringifyQueryString(params) {
const queryParams = new _url.URLSearchParams();
function prepareForm(params) {
const form = new URLSearchParams();
for (const prop of Object.keys(params).sort()) {
const name = prop.replace(/[A-Z]/g, (m, i) => `${i ? '_' : ''}${m.toLowerCase()}`);
queryParams.append(name, params[prop]);
form.append(name, params[prop]);
}
return queryParams.toString();
return form;
}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWwuanMiXSwibmFtZXMiOlsiZXJyb3IiLCJsb2ciLCJnZXRTZXJ2ZXJJbmZvIiwidXJsIiwiRSIsIklOVkFMSURfQVJHVU1FTlQiLCJib2R5IiwidmFsaWRhdGVKU09OIiwiZXJyIiwiY29kZSIsIkVycm9yIiwic3RhdHVzQ29kZSIsImhhbmRsZVJlcXVlc3RFcnJvciIsImxhYmVsIiwicmVzcG9uc2UiLCJvcHRpb25hbCIsIm1ldGEiLCJtZXNzYWdlIiwic3RhdHVzIiwiU1RBVFVTX0NPREVTIiwiU3RyaW5nIiwiZGV0YWlscyIsIm9iaiIsIkpTT04iLCJwYXJzZSIsImVycm9yX2Rlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJlIiwibXNnIiwiUkVRVUVTVF9GQUlMRUQiLCJtZDUiLCJpdCIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJyZW5kZXJIVE1MIiwiY2xzIiwidGl0bGUiLCJyZXBsYWNlIiwic3RyaW5naWZ5UXVlcnlTdHJpbmciLCJwYXJhbXMiLCJxdWVyeVBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsInByb3AiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsIm5hbWUiLCJtIiwiaSIsInRvTG93ZXJDYXNlIiwiYXBwZW5kIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBLEtBQUY7QUFBU0MsRUFBQUE7QUFBVCxJQUFpQix3QkFBVSxtQkFBVixDQUF2QjtBQUVBOzs7Ozs7O0FBTU8sZUFBZUMsYUFBZixDQUE2QkMsR0FBN0IsRUFBa0M7QUFDeEMsTUFBSSxDQUFDQSxHQUFELElBQVEsT0FBT0EsR0FBUCxLQUFlLFFBQTNCLEVBQXFDO0FBQ3BDLFVBQU1DLGdCQUFFQyxnQkFBRixDQUFtQix1Q0FBbkIsQ0FBTjtBQUNBOztBQUVESixFQUFBQSxHQUFHLENBQUUseUJB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBb0NERCxHQUFHLElBQUksRUFBRzs7UUFFakJDLEtBQU07T0FDUG5CLE1BQU0sQ0FBQ0gsT0FBRCxDQUFOLENBQWdCdUIsT0FBaEIsQ0FBd0IsSUFBeEIsRUFBOEIsT0FBOUIsRUFBdUNBLE9BQXZDLENBQStDLElBQS9DLEVBQXFELE1BQXJELEVBQTZEQSxPQUE3RCxDQUFxRSxJQUFyRSxFQUEyRSxNQUEzRSxDQUFtRjs7O1FBMUN6RjtBQThDQTtBQUVEOzs7Ozs7Ozs7QUFPTyxTQUFTQyxvQkFBVCxDQUE4QkMsTUFBOUIsRUFBc0M7QUFDNUMsUUFBTUMsV0FBVyxHQUFHLElBQUlDLG9CQUFKLEVBQXBCOztBQUNBLE9BQUssTUFBTUMsSUFBWCxJQUFtQkMsTUFBTSxDQUFDQyxJQUFQLENBQVlMLE1BQVosRUFBb0JNLElBQXBCLEVBQW5CLEVBQStDO0FBQzlDLFVBQU1DLElBQUksR0FBR0osSUFBSSxDQUFDTCxPQUFMLENBQWEsUUFBYixFQUF1QixDQUFDVSxDQUFELEVBQUlDLENBQUosS0FBVyxHQUFFQSxDQUFDLEdBQUcsR0FBSCxHQUFTLEVBQUcsR0FBRUQsQ0FBQyxDQUFDRSxXQUFGLEVBQWdCLEVBQW5FLENBQWI7QUFDQVQsSUFBQUEsV0FBVyxDQUFDVSxNQUFaLENBQW1CSixJQUFuQixFQUF5QlAsTUFBTSxDQUFDRyxJQUFELENBQS9CO0FBQ0E7O0FBQ0QsU0FBT0YsV0FBVyxDQUFDVyxRQUFaLEVBQVA7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBFIGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ0BheHdheS9hbXBsaWZ5LXJlcXVlc3QnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuXG5pbXBvcnQgeyBTVEFUVVNfQ09ERVMgfSBmcm9tICdodHRwJztcbmltcG9ydCB7IFVSTFNlYXJjaFBhcmFtcyB9IGZyb20gJ3VybCc7XG5cbmNvbnN0IHsgZXJyb3IsIGxvZyB9ID0gc25vb3Bsb2dnKCdhbXBsaWZ5LWF1dGg6dXRpbCcpO1xuXG4vKipcbiAqIERpc2NvdmVycyBhdmFpbGFibGUgZW5kcG9pbnRzIGJhc2VkIG9uIHRoZSByZW1vdGUgc2VydmVyJ3MgT3BlbklEIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IFt1cmxdIC0gQW4gb3B0aW9uYWwgVVJMIHRvIGRpc2NvdmVyIHRoZSBhdmFpbGFibGUgZW5kcG9pbnRzLlxuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNlcnZlckluZm8odXJsKSB7XG5cdGlmICghdXJsIHx8IHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBVUkwgdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblxuXHRsb2coYEZldGNoaW5nIHNlcnZlciBpbmZvOiAke3VybH0uLi5gKTtcblx0dHJ5IHtcblx0XHRjb25zdCB7IGJvZHkgfSA9IGF3YWl0IHJlcXVlc3QoeyB1cmwsIHZhbGlkYXRlSlNPTjogdHJ1ZSB9KTtcblx0XHRyZXR1cm4gYm9keTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKGVyci5jb2RlID09PSAnSU5WQUxJRF9KU09OJykge1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBnZXQgc2VydmVyIGluZm8gKHN0YXR1cyAke2Vyci5zdGF0dXNDb2RlfSlgKTtcblx0fVxuXG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBlcnJvciBmcm9tIGEgZmFpbGVkIGZldGNoIHJlcXVlc3QsIGxvZ3MgaXQsIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBWYXJpb3VzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmxhYmVsIC0gVGhlIGVycm9yIGxhYmVsLlxuICogQHBhcmFtIHtSZXNwb25zZX0gcGFyYW1zLnJlc3BvbnNlIC0gQSBmZXRjaCByZXNwb25zZSBvYmplY3QuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXJhbXMub3B0aW9uYWxdIC0gV2hlbiBgdHJ1ZWAsIGEgZmFpbGVkIHJlcXVlc3QgaXMgbG9nZ2VkLCBidXQgbm90IGFzIGFuIGVycm9yLlxuICogQHJldHVybnMge1Byb21pc2U8RXJyb3I+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKHsgbGFiZWwsIHJlc3BvbnNlLCBvcHRpb25hbCB9KSB7XG5cdGNvbnN0IG1ldGEgPSB7fTtcblx0bGV0IGVyciA9IHJlc3BvbnNlLmVycm9yO1xuXHRsZXQgeyBtZXNzYWdlLCBzdGF0dXNDb2RlIH0gPSByZXNwb25zZTtcblx0bGV0IHN0YXR1cyA9IG1ldGEuc3RhdHVzID0gc3RhdHVzQ29kZSA/IFNUQVRVU19DT0RFU1tTdHJpbmcoc3RhdHVzQ29kZSldIDogJ1Vua25vd24gZXJyb3InO1xuXHRsZXQgZGV0YWlscztcblxuXHRtZXRhLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuXHRpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1ldGEuZXJyb3IgPSByZXNwb25zZTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0Y29uc3Qgb2JqID0gSlNPTi5wYXJzZShlcnIgfHwgbWVzc2FnZSk7XG5cdFx0aWYgKG9iai5lcnJvcikge1xuXHRcdFx0ZGV0YWlscyA9IGAke29iai5lcnJvcn0ke29iai5lcnJvcl9kZXNjcmlwdGlvbiA/IGA6ICR7b2JqLmVycm9yX2Rlc2NyaXB0aW9ufWAgOiAnJ31gO1xuXHRcdH0gZWxzZSBpZiAob2JqLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRkZXRhaWxzID0gb2JqLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIHNxdWVsY2hcblx0fVxuXG5cdGNvbnN0IG1zZyA9IGAke2xhYmVsfTogJHtzdGF0dXNDb2RlID8gYCR7c3RhdHVzQ29kZX0gYCA6ICcnfSR7ZGV0YWlscyB8fCBlcnIgfHwgbWVzc2FnZSB8fCBzdGF0dXN9YDtcblx0aWYgKG9wdGlvbmFsKSB7XG5cdFx0bG9nKG1zZyk7XG5cdH0gZWxzZSB7XG5cdFx0ZXJyb3IobXNnKTtcblx0fVxuXHRyZXR1cm4gRS5SRVFVRVNUX0ZBSUxFRChtc2csIG1ldGEpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBoZXggZW5jb2RlZCBtZDUgaGFzaCBvZiBhIHN0cmluZyBvciBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBpdCAtIFRoZSBvYmplY3QgdG8gc2VyaWFsaXplIGFuZCBoYXNoLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1kNShpdCkge1xuXHRyZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZSh0eXBlb2YgaXQgPT09ICdzdHJpbmcnID8gaXQgOiBKU09OLnN0cmluZ2lmeShpdCkpLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIEhUTUwgcGFnZSB3aXRoIGEgcGFuZWwgY29udGFpbmluZyBhIHRpdGxlIGFuZCBhIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRpdGxlIC0gVGhlIHRpdGxlIHRvIGRpc3BsYXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGluamVjdCBpbnRvIHRoZSBwYWdlLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckhUTUwoeyBjbHMsIG1lc3NhZ2UsIHRpdGxlIH0pIHtcblx0cmV0dXJuIGA8IWRvY3R5cGUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG5cdDx0aXRsZT4ke3RpdGxlfTwvdGl0bGU+XG5cdDxzdHlsZT5cblx0Ym9keSB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRjb2xvcjogIzMzMztcblx0XHRmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIixcIkhlbHZldGljYSBOZXVlXCIsXCJBcmlhbFwiLHNhbnMtc2VyaWY7XG5cdFx0Zm9udC1zaXplOiAxNXB4O1xuXHR9XG5cblx0Ym9keSA+IGRpdiB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjY2JjYmNiO1xuXHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRtYXJnaW46IDMwcHggYXV0bztcblx0XHRwYWRkaW5nOiAyMHB4IDMwcHg7XG5cdFx0d2lkdGg6IDM2MHB4O1xuXHR9XG5cblx0LnN1Y2Nlc3MgPiBkaXYge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNkYWZmZGI7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgIzAwY2IwNjtcblx0XHRjb2xvcjogIzAwY2IwNjtcblx0fVxuXG5cdC5lcnJvciA+IGRpdiB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZGFkYTtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjY2IwMDAwO1xuXHRcdGNvbG9yOiAjY2IwMDAwO1xuXHR9XG5cblx0aDEge1xuXHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHRmb250LXdlaWdodDogYm9sZDtcblx0fVxuXHQ8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHkgY2xhc3M9XCIke2NscyB8fCAnJ31cIj5cblx0PGRpdj5cblx0XHQ8aDE+JHt0aXRsZX08L2gxPlxuXHRcdDxwPiR7U3RyaW5nKG1lc3NhZ2UpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKX08L3A+XG5cdDwvZGl2PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbi8qKlxuICogQ29waWVzIGFsbCBwYXJhbXMgaW50byBhIG5ldyBvYmplY3QgYW5kIGNvbnZlcnRzIGNhbWVsY2FzZSBwcm9wZXJ0eSBuYW1lcyB0byB1bmRlcnNjb3JlIGNhc2UsXG4gKiB0aGVuIHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHF1ZXJ5IHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHN0cmluZ2lmeS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlRdWVyeVN0cmluZyhwYXJhbXMpIHtcblx0Y29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cdGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhwYXJhbXMpLnNvcnQoKSkge1xuXHRcdGNvbnN0IG5hbWUgPSBwcm9wLnJlcGxhY2UoL1tBLVpdL2csIChtLCBpKSA9PiBgJHtpID8gJ18nIDogJyd9JHttLnRvTG93ZXJDYXNlKCl9YCk7XG5cdFx0cXVlcnlQYXJhbXMuYXBwZW5kKG5hbWUsIHBhcmFtc1twcm9wXSk7XG5cdH1cblx0cmV0dXJuIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCk7XG59XG4iXSwiZmlsZSI6InV0aWwuanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWwuanMiXSwibmFtZXMiOlsiZXJyb3IiLCJsb2ciLCJoYW5kbGVSZXF1ZXN0RXJyb3IiLCJsYWJlbCIsInJlc3BvbnNlIiwib3B0aW9uYWwiLCJtZXRhIiwiZXJyIiwibWVzc2FnZSIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJTVEFUVVNfQ09ERVMiLCJTdHJpbmciLCJkZXRhaWxzIiwiRXJyb3IiLCJvYmoiLCJKU09OIiwicGFyc2UiLCJlcnJvcl9kZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiZSIsIm1zZyIsIkUiLCJSRVFVRVNUX0ZBSUxFRCIsIm1kNSIsIml0IiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsInN0cmluZ2lmeSIsImRpZ2VzdCIsInJlbmRlckhUTUwiLCJjbHMiLCJ0aXRsZSIsInJlcGxhY2UiLCJwcmVwYXJlRm9ybSIsInBhcmFtcyIsImZvcm0iLCJVUkxTZWFyY2hQYXJhbXMiLCJwcm9wIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJuYW1lIiwibSIsImkiLCJ0b0xvd2VyQ2FzZSIsImFwcGVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBOzs7O0FBRUEsTUFBTTtBQUFFQSxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBO0FBQVQsSUFBaUIsd0JBQVUsbUJBQVYsQ0FBdkI7QUFFQTs7Ozs7Ozs7OztBQVNPLFNBQVNDLGtCQUFULENBQTRCO0FBQUVDLEVBQUFBLEtBQUY7QUFBU0MsRUFBQUEsUUFBVDtBQUFtQkMsRUFBQUE7QUFBbkIsQ0FBNUIsRUFBMkQ7QUFDakUsUUFBTUMsSUFBSSxHQUFHLEVBQWI7QUFDQSxNQUFJQyxHQUFHLEdBQUdILFFBQVEsQ0FBQ0osS0FBbkI7QUFDQSxNQUFJO0FBQUVRLElBQUFBLE9BQUY7QUFBV0MsSUFBQUE7QUFBWCxNQUEwQkwsUUFBOUI7QUFDQSxNQUFJTSxNQUFNLEdBQUdKLElBQUksQ0FBQ0ksTUFBTCxHQUFjRCxVQUFVLEdBQUdFLG1CQUFhQyxNQUFNLENBQUNILFVBQUQsQ0FBbkIsQ0FBSCxHQUFzQyxlQUEzRTtBQUNBLE1BQUlJLE9BQUo7QUFFQVAsRUFBQUEsSUFBSSxDQUFDRyxVQUFMLEdBQWtCQSxVQUFsQjs7QUFDQSxNQUFJTCxRQUFRLFlBQVlVLEtBQXhCLEVBQStCO0FBQzlCUixJQUFBQSxJQUFJLENBQUNOLEtBQUwsR0FBYUksUUFBYjtBQUNBOztBQUVELE1BQUk7QUFDSCxVQUFNVyxHQUFHLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXVixHQUFHLElBQUlDLE9BQWxCLENBQVo7O0FBQ0EsUUFBSU8sR0FBRyxDQUFDZixLQUFSLEVBQWU7QUFDZGEsTUFBQUEsT0FBTyxHQUFJLEdBQUVFLEdBQUcsQ0FBQ2YsS0FBTSxHQUFFZSxHQUFHLENBQUNHLGlCQUFKLEdBQXlCLEtBQUlILEdBQUcsQ0FBQ0csaUJBQWtCLEVBQW5ELEdBQXVELEVBQUcsRUFBbkY7QUFDQSxLQUZELE1BRU8sSUFBSUgsR0FBRyxDQUFDSSxXQUFSLEVBQXFCO0FBQzNCTixNQUFBQSxPQUFPLEdBQUdFLEdBQUcsQ0FBQ0ksV0FBZDtBQUNBO0FBQ0QsR0FQRCxDQU9FLE9BQU9DLENBQVAsRUFBVSxDQUNYO0FBQ0E7O0FBRUQsUUFBTUMsR0FBRyxHQUFJLEdBQUVsQixLQUFNLEtBQUlNLFVBQVUsR0FBSSxHQUFFQSxVQUFXLEdBQWpCLEdBQXNCLEVBQUcsR0FBRUksT0FBTyxJQUFJTixHQUFYLElBQWtCQyxPQUFsQixJQUE2QkUsTUFBTyxFQUFsRzs7QUFDQSxNQUFJTCxRQUFKLEVBQWM7QUFDYkosSUFBQUEsR0FBRyxDQUFDb0IsR0FBRCxDQUFIO0FBQ0EsR0FGRCxNQUVPO0FBQ05yQixJQUFBQSxLQUFLLENBQUNxQixHQUFELENBQUw7QUFDQTs7QUFDRCxTQUFPQyxnQkFBRUMsY0FBRixDQUFpQkYsR0FBakIsRUFBc0JmLElBQXRCLENBQVA7QUFDQTtBQUVEOzs7Ozs7OztBQU1PLFNBQVNrQixHQUFULENBQWFDLEVBQWIsRUFBaUI7QUFDdkIsU0FBT0MsZ0JBQU9DLFVBQVAsQ0FBa0IsS0FBbEIsRUFBeUJDLE1BQXpCLENBQWdDLE9BQU9ILEVBQVAsS0FBYyxRQUFkLEdBQXlCQSxFQUF6QixHQUE4QlQsSUFBSSxDQUFDYSxTQUFMLENBQWVKLEVBQWYsQ0FBOUQsRUFBa0ZLLE1BQWxGLENBQXlGLEtBQXpGLENBQVA7QUFDQTtBQUVEOzs7Ozs7Ozs7QUFPTyxTQUFTQyxVQUFULENBQW9CO0FBQUVDLEVBQUFBLEdBQUY7QUFBT3hCLEVBQUFBLE9BQVA7QUFBZ0J5QixFQUFBQTtBQUFoQixDQUFwQixFQUE2QztBQUNuRCxTQUFROzs7VUFHQ0EsS0FBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBb0NERCxHQUFHLElBQUksRUFBRzs7UUFFakJDLEtBQU07T0FDUHJCLE1BQU0sQ0FBQ0osT0FBRCxDQUFOLENBQWdCMEIsT0FBaEIsQ0FBd0IsSUFBeEIsRUFBOEIsT0FBOUIsRUFBdUNBLE9BQXZDLENBQStDLElBQS9DLEVBQXFELE1BQXJELEVBQTZEQSxPQUE3RCxDQUFxRSxJQUFyRSxFQUEyRSxNQUEzRSxDQUFtRjs7O1FBMUN6RjtBQThDQTtBQUVEOzs7Ozs7OztBQU1PLFNBQVNDLFdBQVQsQ0FBcUJDLE1BQXJCLEVBQTZCO0FBQ25DLFFBQU1DLElBQUksR0FBRyxJQUFJQyxlQUFKLEVBQWI7O0FBQ0EsT0FBSyxNQUFNQyxJQUFYLElBQW1CQyxNQUFNLENBQUNDLElBQVAsQ0FBWUwsTUFBWixFQUFvQk0sSUFBcEIsRUFBbkIsRUFBK0M7QUFDOUMsVUFBTUMsSUFBSSxHQUFHSixJQUFJLENBQUNMLE9BQUwsQ0FBYSxRQUFiLEVBQXVCLENBQUNVLENBQUQsRUFBSUMsQ0FBSixLQUFXLEdBQUVBLENBQUMsR0FBRyxHQUFILEdBQVMsRUFBRyxHQUFFRCxDQUFDLENBQUNFLFdBQUYsRUFBZ0IsRUFBbkUsQ0FBYjtBQUNBVCxJQUFBQSxJQUFJLENBQUNVLE1BQUwsQ0FBWUosSUFBWixFQUFrQlAsTUFBTSxDQUFDRyxJQUFELENBQXhCO0FBQ0E7O0FBQ0QsU0FBT0YsSUFBUDtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IEUgZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuXG5pbXBvcnQgeyBTVEFUVVNfQ09ERVMgfSBmcm9tICdodHRwJztcblxuY29uc3QgeyBlcnJvciwgbG9nIH0gPSBzbm9vcGxvZ2coJ2FtcGxpZnktYXV0aDp1dGlsJyk7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBlcnJvciBmcm9tIGEgZmFpbGVkIGZldGNoIHJlcXVlc3QsIGxvZ3MgaXQsIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBWYXJpb3VzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmxhYmVsIC0gVGhlIGVycm9yIGxhYmVsLlxuICogQHBhcmFtIHtSZXNwb25zZX0gcGFyYW1zLnJlc3BvbnNlIC0gQSBmZXRjaCByZXNwb25zZSBvYmplY3QuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtwYXJhbXMub3B0aW9uYWxdIC0gV2hlbiBgdHJ1ZWAsIGEgZmFpbGVkIHJlcXVlc3QgaXMgbG9nZ2VkLCBidXQgbm90IGFzIGFuIGVycm9yLlxuICogQHJldHVybnMge1Byb21pc2U8RXJyb3I+fVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKHsgbGFiZWwsIHJlc3BvbnNlLCBvcHRpb25hbCB9KSB7XG5cdGNvbnN0IG1ldGEgPSB7fTtcblx0bGV0IGVyciA9IHJlc3BvbnNlLmVycm9yO1xuXHRsZXQgeyBtZXNzYWdlLCBzdGF0dXNDb2RlIH0gPSByZXNwb25zZTtcblx0bGV0IHN0YXR1cyA9IG1ldGEuc3RhdHVzID0gc3RhdHVzQ29kZSA/IFNUQVRVU19DT0RFU1tTdHJpbmcoc3RhdHVzQ29kZSldIDogJ1Vua25vd24gZXJyb3InO1xuXHRsZXQgZGV0YWlscztcblxuXHRtZXRhLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuXHRpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdG1ldGEuZXJyb3IgPSByZXNwb25zZTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0Y29uc3Qgb2JqID0gSlNPTi5wYXJzZShlcnIgfHwgbWVzc2FnZSk7XG5cdFx0aWYgKG9iai5lcnJvcikge1xuXHRcdFx0ZGV0YWlscyA9IGAke29iai5lcnJvcn0ke29iai5lcnJvcl9kZXNjcmlwdGlvbiA/IGA6ICR7b2JqLmVycm9yX2Rlc2NyaXB0aW9ufWAgOiAnJ31gO1xuXHRcdH0gZWxzZSBpZiAob2JqLmRlc2NyaXB0aW9uKSB7XG5cdFx0XHRkZXRhaWxzID0gb2JqLmRlc2NyaXB0aW9uO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIHNxdWVsY2hcblx0fVxuXG5cdGNvbnN0IG1zZyA9IGAke2xhYmVsfTogJHtzdGF0dXNDb2RlID8gYCR7c3RhdHVzQ29kZX0gYCA6ICcnfSR7ZGV0YWlscyB8fCBlcnIgfHwgbWVzc2FnZSB8fCBzdGF0dXN9YDtcblx0aWYgKG9wdGlvbmFsKSB7XG5cdFx0bG9nKG1zZyk7XG5cdH0gZWxzZSB7XG5cdFx0ZXJyb3IobXNnKTtcblx0fVxuXHRyZXR1cm4gRS5SRVFVRVNUX0ZBSUxFRChtc2csIG1ldGEpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBoZXggZW5jb2RlZCBtZDUgaGFzaCBvZiBhIHN0cmluZyBvciBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBpdCAtIFRoZSBvYmplY3QgdG8gc2VyaWFsaXplIGFuZCBoYXNoLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1kNShpdCkge1xuXHRyZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZSh0eXBlb2YgaXQgPT09ICdzdHJpbmcnID8gaXQgOiBKU09OLnN0cmluZ2lmeShpdCkpLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIEhUTUwgcGFnZSB3aXRoIGEgcGFuZWwgY29udGFpbmluZyBhIHRpdGxlIGFuZCBhIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRpdGxlIC0gVGhlIHRpdGxlIHRvIGRpc3BsYXkuXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGluamVjdCBpbnRvIHRoZSBwYWdlLlxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckhUTUwoeyBjbHMsIG1lc3NhZ2UsIHRpdGxlIH0pIHtcblx0cmV0dXJuIGA8IWRvY3R5cGUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG5cdDx0aXRsZT4ke3RpdGxlfTwvdGl0bGU+XG5cdDxzdHlsZT5cblx0Ym9keSB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRjb2xvcjogIzMzMztcblx0XHRmb250LWZhbWlseTogXCJPcGVuIFNhbnNcIixcIkhlbHZldGljYSBOZXVlXCIsXCJBcmlhbFwiLHNhbnMtc2VyaWY7XG5cdFx0Zm9udC1zaXplOiAxNXB4O1xuXHR9XG5cblx0Ym9keSA+IGRpdiB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjY2JjYmNiO1xuXHRcdGJvcmRlci1yYWRpdXM6IDRweDtcblx0XHRtYXJnaW46IDMwcHggYXV0bztcblx0XHRwYWRkaW5nOiAyMHB4IDMwcHg7XG5cdFx0d2lkdGg6IDM2MHB4O1xuXHR9XG5cblx0LnN1Y2Nlc3MgPiBkaXYge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNkYWZmZGI7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgIzAwY2IwNjtcblx0XHRjb2xvcjogIzAwY2IwNjtcblx0fVxuXG5cdC5lcnJvciA+IGRpdiB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZGFkYTtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjY2IwMDAwO1xuXHRcdGNvbG9yOiAjY2IwMDAwO1xuXHR9XG5cblx0aDEge1xuXHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHRmb250LXdlaWdodDogYm9sZDtcblx0fVxuXHQ8L3N0eWxlPlxuPC9oZWFkPlxuPGJvZHkgY2xhc3M9XCIke2NscyB8fCAnJ31cIj5cblx0PGRpdj5cblx0XHQ8aDE+JHt0aXRsZX08L2gxPlxuXHRcdDxwPiR7U3RyaW5nKG1lc3NhZ2UpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKX08L3A+XG5cdDwvZGl2PlxuPC9ib2R5PlxuPC9odG1sPmA7XG59XG5cbi8qKlxuICogQ29waWVzIGFsbCBwYXJhbXMgaW50byBhIG5ldyBvYmplY3QgYW5kIGNvbnZlcnRzIGNhbWVsY2FzZSBwcm9wZXJ0eSBuYW1lcyB0byB1bmRlcnNjb3JlIGNhc2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byBzdHJpbmdpZnkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUZvcm0ocGFyYW1zKSB7XG5cdGNvbnN0IGZvcm0gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cdGZvciAoY29uc3QgcHJvcCBvZiBPYmplY3Qua2V5cyhwYXJhbXMpLnNvcnQoKSkge1xuXHRcdGNvbnN0IG5hbWUgPSBwcm9wLnJlcGxhY2UoL1tBLVpdL2csIChtLCBpKSA9PiBgJHtpID8gJ18nIDogJyd9JHttLnRvTG93ZXJDYXNlKCl9YCk7XG5cdFx0Zm9ybS5hcHBlbmQobmFtZSwgcGFyYW1zW3Byb3BdKTtcblx0fVxuXHRyZXR1cm4gZm9ybTtcbn1cbiJdLCJmaWxlIjoidXRpbC5qcyJ9
{
"name": "@axway/amplify-auth-sdk",
"version": "1.4.1",
"version": "2.0.0",
"description": "Axway AMPLIFY authentication SDK for Node.js",

@@ -22,17 +22,17 @@ "author": "Axway, Inc. <npmjs@appcelerator.com>",

"dependencies": {
"@axway/amplify-request": "^1.2.0",
"accepts": "^1.3.7",
"cross-spawn": "^7.0.0",
"fs-extra": "^8.1.0",
"jws": "^3.2.2",
"open": "^6.4.0",
"cross-spawn": "^7.0.2",
"fs-extra": "^9.0.0",
"got": "^11.0.3",
"jws": "^4.0.0",
"open": "^7.0.3",
"pluralize": "^8.0.0",
"snooplogg": "^2.3.2",
"source-map-support": "^0.5.13",
"tmp": "^0.1.0",
"uuid": "^3.3.3"
"snooplogg": "^3.0.0",
"source-map-support": "^0.5.19",
"tmp": "^0.2.1",
"uuid": "^8.0.0"
},
"devDependencies": {
"appcd-gulp": "^2.2.0",
"keytar": "5.0.0"
"appcd-gulp": "^3.0.0",
"keytar": "5.6.0"
},

@@ -43,6 +43,6 @@ "homepage": "https://github.com/appcelerator/amplify-tooling#readme",

"engines": {
"node": ">=8.0.0"
"node": ">=10.13.0"
},
"keytar": "5.0.0",
"keytar": "5.6.0",
"gitHead": "eefa21264fb5f89697020e22db1087ce0f8116e3"
}

@@ -6,6 +6,11 @@ # AMPLIFY Auth SDK

> NOTICE:
>
> In nearly all cases, you should use [@axway/amplify-sdk][amplify-sdk] instead of this package.
> AMPLIFY SDK will populate the account org info and facilitate org switching which was removed
> from this package in v2.
## Installation
npm i @axway/amplify-auth-sdk --save
npm i keytar --save-optional

@@ -87,6 +92,5 @@ ## Overview

// this will launch the default browser and wait for the user to complete the process
const { accessToken, account, userInfo } = await auth.login();
const account = await auth.login();
console.log(`Authenticated successfully ${account.name}!`);
console.log(userInfo);
})().catch(console.error);

@@ -102,4 +106,3 @@ ```

import Auth from '@axway/amplify-auth-sdk';
import fetch from 'node-fetch';
import { parse, URLSearchParams } from 'url';
import got from 'got';

@@ -113,8 +116,7 @@ (async function main() {

const { url } = await auth.login({ manual: true });
const res = await fetch(url, { redirect: 'manual' });
const code = new URLSearchParams(parse(res.headers.get('location')).query).get('code');
const { accessToken, account, userInfo } = await auth.login({ code });
const res = await got(url, { followRedirect: false });
const code = new URL(res.headers.get('location')).searchParams.get('code');
const account = await auth.login({ code });
console.log(`Authenticated successfully ${account.name}!`);
console.log(userInfo);
})().catch(console.error);

@@ -136,6 +138,5 @@ ```

const { accessToken, account, userInfo } = await auth.login();
const account = await auth.login();
console.log(`Authenticated successfully ${account.name}!`);
console.log(userInfo);
})().catch(console.error);

@@ -157,6 +158,5 @@ ```

// this will launch the default browser and wait for the user to complete the process
const { accessToken, account, userInfo } = await auth.login();
const account = await auth.login();
console.log(`Authenticated successfully ${account.name}!`);
console.log(userInfo);
})().catch(console.error);

@@ -177,6 +177,5 @@ ```

const { accessToken, account, userInfo } = await auth.login();
const account = await auth.login();
console.log(`Authenticated successfully ${account.name}!`);
console.log(userInfo);
})().catch(console.error);

@@ -237,3 +236,3 @@ ```

#### `getAccount(options)`
#### `find(options)`

@@ -253,14 +252,15 @@ Retrieves the access token based on the supplied account name.

* `authenticator`: (String) The authentication method.
* `baseUrl`: (String) The base URL.
* `env`: (String) The environment name. Note that a user may override the environment's base URL.
* `expired`: (Boolean) This is a computed property that determimes if the access token is expired.
* `auth`: (Object) Authentication related info.
* `auth.authenticator`: (String) The authentication method.
* `auth.baseUrl`: (String) The base URL.
* `auth.env`: (String) The environment name. Note that a user may override the environment's base URL.
* `auth.expired`: (Boolean) This is a computed property that determimes if the access token is expired.
Auth SDK consumers should check this after retreiving the account to see if they need to
re-authenticate by calling `login()`.
* `expires`: (Object) An object containing a timestamp (in milliseconds) for which the `access` and
`refresh` tokens expire.
* `auth.expires`: (Object) An object containing a timestamp (in milliseconds) for which the `access` and
* `auth.realm`: (String) The OpenID realm.
`auth.refresh` tokens expire.
* `auth.tokens`: (Object) The original OpenID tokens object.
* `hash`: (String) A base64 encoded md5 hash of the authenticator parameters.
* `name`: (String) The account name. Generally this is the user's email address.
* `realm`: (String) The OpenID realm.
* `tokens`: (Object) The original OpenID tokens object.

@@ -273,3 +273,3 @@ If the account is not found or if the `tokenStoreType` has been explicitly set to `null`, it will

```js
const account = await auth.getAccount({ accountName: 'foo@bar.com' });
const account = await auth.find({ accountName: 'foo@bar.com' });
if (account) {

@@ -292,3 +292,3 @@ if (account.expired) {

Returns a `Promise` that resolves an `Array` of account objects (as described in `getAccount()`).
Returns a `Promise` that resolves an `Array` of account objects (as described in `find()`).

@@ -384,20 +384,16 @@ If the `tokenStoreType` has been explicitly set to `null`, it will resolve an empty array.

If *NOT* `manual`, the resolved object contains:
If *NOT* `manual`, it resolves an `account` info object as described in the `find()` return value
description.
* `accessToken`: (String) The access token.
* `account`: (Object) The account info as described in the `getAccount()` return value description.
* `authenticator`: (Authenticator) A reference to the authenticator that performed the login.
* `userInfo`: (Object) An object containing various information returned by the server about the
user.
##### Example
```js
const { accessToken, account, userInfo } = await auth.login();
console.log(`Access token = ${accessToken}`);
const account = await auth.login();
console.log(`Account name = ${account.name}`);
console.log('User info =', userInfo);
console.log(`Access token = ${account.auth.tokens.access_token}`);
console.log('User info =', account.user);
console.log('Org info =', account.org);
```
#### `revoke(options)`
#### `logout(options)`

@@ -419,4 +415,4 @@ Invalidates all or specific account access tokens by name.

This function will always succeed regardless if it the Axway platform was able to
invalidate the access token.
This function will always succeed regardless if it the Axway platform was able to invalidate the
access token.

@@ -426,3 +422,3 @@ ##### Example

```js
const revoked = await auth.revoke({ accounts: [ 'foo@bar.com' ] });
const revoked = await auth.logout({ accounts: [ 'foo@bar.com' ] });
console.log(`Revoked ${revoked.length} accounts`);

@@ -432,3 +428,3 @@ ```

```js
const revoked = await auth.revoke({ all: true });
const revoked = await auth.logout({ all: true });
console.log(`Revoked ${revoked.length} accounts`);

@@ -532,1 +528,2 @@ ```

[1]: https://github.com/appcelerator/amplify-tooling/blob/master/packages/amplify-auth-sdk/LICENSE
[amplify-sdk]: https://npmjs.com/package/@axway/amplify-sdk

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc