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
11
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 0.2.3 to 0.3.0

3

dist/errors.js

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

createError('REQUEST_FAILED', Error, 'An HTTP request has errored or returned an invalid response');
createError('SECURE_STORE_UNAVAILABLE', Error, 'The secure store is not available, probably because "keytar" is not built or compatible with the current Node.js version');
createError('SEND_AUTH_CODE_FAILED', Error, 'The submit device authorization code request has errored or returned an invalid response');

@@ -77,2 +78,2 @@ createError('TOKEN_EXPIRED', Error, 'The access token is expired');

}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVycm9ycy5qcyJdLCJuYW1lcyI6WyJlcnJvcnMiLCJjcmVhdGVFcnJvciIsIkVycm9yIiwiVHlwZUVycm9yIiwiUmFuZ2VFcnJvciIsImNvZGUiLCJ0eXBlIiwiZGVzYyIsIm1zZyIsIm1ldGEiLCJlcnIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJuYW1lIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLE1BQU0sR0FBRyxFQUFmO2VBQ2VBLE07O0FBRWZDLFdBQVcsQ0FBQyxhQUFELEVBQStCQyxLQUEvQixFQUEyQyxzQkFBM0MsQ0FBWDtBQUNBRCxXQUFXLENBQUMsY0FBRCxFQUErQkMsS0FBL0IsRUFBMkMsMkRBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLGtCQUFELEVBQStCRSxTQUEvQixFQUEyQyw2REFBM0MsQ0FBWDtBQUNBRixXQUFXLENBQUMsY0FBRCxFQUErQkMsS0FBL0IsRUFBMkMsNkNBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLG1CQUFELEVBQStCRSxTQUEvQixFQUEyQywyQ0FBM0MsQ0FBWDtBQUNBRixXQUFXLENBQUMsZUFBRCxFQUErQkcsVUFBL0IsRUFBMkMsc0RBQTNDLENBQVg7QUFDQUgsV0FBVyxDQUFDLGVBQUQsRUFBK0JDLEtBQS9CLEVBQTJDLGdDQUEzQyxDQUFYO0FBQ0FELFdBQVcsQ0FBQyxlQUFELEVBQStCQyxLQUEvQixFQUEyQywwQ0FBM0MsQ0FBWDtBQUNBRCxXQUFXLENBQUMsZ0JBQUQsRUFBK0JDLEtBQS9CLEVBQTJDLG1CQUEzQyxDQUFYO0FBQ0FELFdBQVcsQ0FBQyxrQkFBRCxFQUErQkMsS0FBL0IsRUFBMkMsdUNBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLG1CQUFELEVBQStCRSxTQUEvQixFQUEyQyxvQ0FBM0MsQ0FBWDtBQUNBRixXQUFXLENBQUMsNEJBQUQsRUFBK0JFLFNBQS9CLEVBQTJDLDREQUEzQyxDQUFYO0FBQ0FGLFdBQVcsQ0FBQyxtQkFBRCxFQUErQkMsS0FBL0IsRUFBMkMsa0RBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLGdCQUFELEVBQStCQyxLQUEvQixFQUEyQyw2REFBM0MsQ0FBWDtBQUNBRCxXQUFXLENBQUMsdUJBQUQsRUFBK0JDLEtBQS9CLEVBQTJDLDBGQUEzQyxDQUFYO0FBQ0FELFdBQVcsQ0FBQyxlQUFELEVBQStCQyxLQUEvQixFQUEyQyw2QkFBM0MsQ0FBWDtBQUVBOzs7Ozs7OztBQU9BLFNBQVNELFdBQVQsQ0FBcUJJLElBQXJCLEVBQTJCQyxJQUEzQixFQUFpQ0MsSUFBakMsRUFBdUM7QUFDdENQLEVBQUFBLE1BQU0sQ0FBQ0ssSUFBRCxDQUFOLEdBQWUsVUFBVUcsR0FBVixFQUFlQyxJQUFmLEVBQXFCO0FBQ25DLFVBQU1DLEdBQUcsR0FBRyxJQUFJSixJQUFKLENBQVNFLEdBQVQsQ0FBWjs7QUFFQSxRQUFJRCxJQUFKLEVBQVU7QUFDVCxVQUFJLENBQUNFLElBQUwsRUFBVztBQUNWQSxRQUFBQSxJQUFJLEdBQUcsRUFBUDtBQUNBOztBQUNEQSxNQUFBQSxJQUFJLENBQUNGLElBQUwsR0FBWUEsSUFBWjtBQUNBOztBQUVELFdBQU9JLE1BQU0sQ0FBQ0MsZ0JBQVAsQ0FBd0JGLEdBQXhCLEVBQTZCO0FBQ25DTCxNQUFBQSxJQUFJLEVBQUU7QUFDTFEsUUFBQUEsWUFBWSxFQUFFLElBRFQ7QUFFTEMsUUFBQUEsVUFBVSxFQUFFLElBRlA7QUFHTEMsUUFBQUEsUUFBUSxFQUFFLElBSEw7QUFJTEMsUUFBQUEsS0FBSyxFQUFHLE9BQU1YLElBQUs7QUFKZCxPQUQ2QjtBQU9uQ0ksTUFBQUEsSUFBSSxFQUFFO0FBQ0xJLFFBQUFBLFlBQVksRUFBRSxJQURUO0FBRUxHLFFBQUFBLEtBQUssRUFBRVAsSUFBSSxJQUFJUSxTQUZWO0FBR0xGLFFBQUFBLFFBQVEsRUFBRTtBQUhMO0FBUDZCLEtBQTdCLENBQVA7QUFhQSxHQXZCRDs7QUF5QkFKLEVBQUFBLE1BQU0sQ0FBQ0MsZ0JBQVAsQ0FBd0JaLE1BQU0sQ0FBQ0ssSUFBRCxDQUE5QixFQUFzQztBQUNyQ2EsSUFBQUEsSUFBSSxFQUFFO0FBQ0xMLE1BQUFBLFlBQVksRUFBRSxJQURUO0FBRUxHLE1BQUFBLEtBQUssRUFBRVgsSUFGRjtBQUdMVSxNQUFBQSxRQUFRLEVBQUU7QUFITCxLQUQrQjtBQU1yQ0ksSUFBQUEsUUFBUSxFQUFFO0FBQ1ROLE1BQUFBLFlBQVksRUFBRSxJQURMO0FBRVRHLE1BQUFBLEtBQUssRUFBRSxTQUFTRyxRQUFULEdBQW9CO0FBQzFCLGVBQVEsT0FBTWQsSUFBSyxFQUFuQjtBQUNBLE9BSlE7QUFLVFUsTUFBQUEsUUFBUSxFQUFFO0FBTEQ7QUFOMkIsR0FBdEM7QUFjQSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9ycyA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgZXJyb3JzO1xuXG5jcmVhdGVFcnJvcignQVVUSF9GQUlMRUQnLCAgICAgICAgICAgICAgICBFcnJvciwgICAgICAnQXV0aG9yaXphdGlvbiBmYWlsZWQnKTtcbmNyZWF0ZUVycm9yKCdBVVRIX1RJTUVPVVQnLCAgICAgICAgICAgICAgIEVycm9yLCAgICAgICdBIHN1Y2Nlc3NmdWwgbG9naW4gZGlkIG5vdCBoYXBwZW4gd2l0aGluIHRoZSBhbGxvd2VkIHRpbWUnKTtcbmNyZWF0ZUVycm9yKCdJTlZBTElEX0FSR1VNRU5UJywgICAgICAgICAgIFR5cGVFcnJvciwgICdBIGZ1bmN0aW9uIGFyZ3VtZW50IGlzIHVuZGVmaW5lZCBvciB0aGUgaW5jb3JyZWN0IGRhdGEgdHlwZScpO1xuY3JlYXRlRXJyb3IoJ0lOVkFMSURfRklMRScsICAgICAgICAgICAgICAgRXJyb3IsICAgICAgJ1RoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGFjY2VzcyBpcyBkZW5pZWQnKTtcbmNyZWF0ZUVycm9yKCdJTlZBTElEX1BBUkFNRVRFUicsICAgICAgICAgIFR5cGVFcnJvciwgICdBIHBhcmFtZXRlciB3YXMgbm90IGEgdmFsaWQgdmFsdWUgb3IgdHlwZScpO1xuY3JlYXRlRXJyb3IoJ0lOVkFMSURfUkFOR0UnLCAgICAgICAgICAgICAgUmFuZ2VFcnJvciwgJ1RoZSB2YWx1ZSBpcyBub3Qgd2l0aGluIHRoZSBhY2NlcHRhYmxlIG1pbi9tYXggcmFuZ2UnKTtcbmNyZWF0ZUVycm9yKCdJTlZBTElEX1RPS0VOJywgICAgICAgICAgICAgIEVycm9yLCAgICAgICdUaGUgdG9rZW4gY291bGQgbm90IGJlIGRlY29kZWQnKTtcbmNyZWF0ZUVycm9yKCdJTlZBTElEX1ZBTFVFJywgICAgICAgICAgICAgIEVycm9yLCAgICAgICdUaGUgc3BlY2lmaWVkIHZhbHVlIGlzIGFuIGFjY2VwdGVkIHZhbHVlJyk7XG5jcmVhdGVFcnJvcignTE9HSU5fUkVRVUlSRUQnLCAgICAgICAgICAgICBFcnJvciwgICAgICAnTG9naW4gaXMgcmVxdWlyZWQnKTtcbmNyZWF0ZUVycm9yKCdLRVlUQVJfTk9UX0ZPVU5EJywgICAgICAgICAgIEVycm9yLCAgICAgICdUaGUgdG9rZW4gc3RvcmUgY291bGQgbm90IGZpbmQga2V5dGFyJyk7XG5jcmVhdGVFcnJvcignTUlTU0lOR19BVVRIX0NPREUnLCAgICAgICAgICBUeXBlRXJyb3IsICAnQW4gYXV0aG9yaXphdGlvbiBjb2RlIHdhcyBleHBlY3RlZCcpO1xuY3JlYXRlRXJyb3IoJ01JU1NJTkdfUkVRVUlSRURfUEFSQU1FVEVSJywgVHlwZUVycm9yLCAgJ0EgcmVxdWlyZWQgcGFyYW1ldGVyIHdhcyBub3Qgc3BlY2lmaWVkIG9yIG5vdCBhIHZhbGlkIHR5cGUnKTtcbmNyZWF0ZUVycm9yKCdPUkdfU1dJVENIX0ZBSUxFRCcsICAgICAgICAgIEVycm9yLCAgICAgICdGYWlsZWQgdG8gc3dpdGNoIHRoZSBjdXJyZW50IG9yZyBmb3Igc29tZSByZWFzb24nKTtcbmNyZWF0ZUVycm9yKCdSRVFVRVNUX0ZBSUxFRCcsICAgICAgICAgICAgIEVycm9yLCAgICAgICdBbiBIVFRQIHJlcXVlc3QgaGFzIGVycm9yZWQgb3IgcmV0dXJuZWQgYW4gaW52YWxpZCByZXNwb25zZScpO1xuY3JlYXRlRXJyb3IoJ1NFTkRfQVVUSF9DT0RFX0ZBSUxFRCcsICAgICAgRXJyb3IsICAgICAgJ1RoZSBzdWJtaXQgZGV2aWNlIGF1dGhvcml6YXRpb24gY29kZSByZXF1ZXN0IGhhcyBlcnJvcmVkIG9yIHJldHVybmVkIGFuIGludmFsaWQgcmVzcG9uc2UnKTtcbmNyZWF0ZUVycm9yKCdUT0tFTl9FWFBJUkVEJywgICAgICAgICAgICAgIEVycm9yLCAgICAgICdUaGUgYWNjZXNzIHRva2VuIGlzIGV4cGlyZWQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIHRoZSBlcnJvciBvYmplY3QgYW5kIHBvcHVsYXRlcyB0aGUgbWVzc2FnZSwgY29kZSwgYW5kIG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBjb2RlIC0gVGhlIGVycm9yIGNvZGUuXG4gKiBAcGFyYW0ge0Vycm9yfFJhbmdlRXJyb3J8VHlwZUVycm9yfSB0eXBlIC0gQW4gaW5zdGFudGlhYmxlIGVycm9yIG9iamVjdC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjIC0gQSBnZW5lcmljIGVycm9yIGRlc2NyaXB0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihjb2RlLCB0eXBlLCBkZXNjKSB7XG5cdGVycm9yc1tjb2RlXSA9IGZ1bmN0aW9uIChtc2csIG1ldGEpIHtcblx0XHRjb25zdCBlcnIgPSBuZXcgdHlwZShtc2cpO1xuXG5cdFx0aWYgKGRlc2MpIHtcblx0XHRcdGlmICghbWV0YSkge1xuXHRcdFx0XHRtZXRhID0ge307XG5cdFx0XHR9XG5cdFx0XHRtZXRhLmRlc2MgPSBkZXNjO1xuXHRcdH1cblxuXHRcdHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlcnIsIHtcblx0XHRcdGNvZGU6IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IGBFUlJfJHtjb2RlfWBcblx0XHRcdH0sXG5cdFx0XHRtZXRhOiB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IG1ldGEgfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGVycm9yc1tjb2RlXSwge1xuXHRcdG5hbWU6IHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBjb2RlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdHRvU3RyaW5nOiB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG5cdFx0XHRcdHJldHVybiBgRVJSXyR7Y29kZX1gO1xuXHRcdFx0fSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fVxuXHR9KTtcbn1cbiJdLCJmaWxlIjoiZXJyb3JzLmpzIn0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVycm9ycy5qcyJdLCJuYW1lcyI6WyJlcnJvcnMiLCJjcmVhdGVFcnJvciIsIkVycm9yIiwiVHlwZUVycm9yIiwiUmFuZ2VFcnJvciIsImNvZGUiLCJ0eXBlIiwiZGVzYyIsIm1zZyIsIm1ldGEiLCJlcnIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJuYW1lIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLE1BQU0sR0FBRyxFQUFmO2VBQ2VBLE07O0FBRWZDLFdBQVcsQ0FBQyxhQUFELEVBQStCQyxLQUEvQixFQUEyQyxzQkFBM0MsQ0FBWDtBQUNBRCxXQUFXLENBQUMsY0FBRCxFQUErQkMsS0FBL0IsRUFBMkMsMkRBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLGtCQUFELEVBQStCRSxTQUEvQixFQUEyQyw2REFBM0MsQ0FBWDtBQUNBRixXQUFXLENBQUMsY0FBRCxFQUErQkMsS0FBL0IsRUFBMkMsNkNBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLG1CQUFELEVBQStCRSxTQUEvQixFQUEyQywyQ0FBM0MsQ0FBWDtBQUNBRixXQUFXLENBQUMsZUFBRCxFQUErQkcsVUFBL0IsRUFBMkMsc0RBQTNDLENBQVg7QUFDQUgsV0FBVyxDQUFDLGVBQUQsRUFBK0JDLEtBQS9CLEVBQTJDLGdDQUEzQyxDQUFYO0FBQ0FELFdBQVcsQ0FBQyxlQUFELEVBQStCQyxLQUEvQixFQUEyQywwQ0FBM0MsQ0FBWDtBQUNBRCxXQUFXLENBQUMsZ0JBQUQsRUFBK0JDLEtBQS9CLEVBQTJDLG1CQUEzQyxDQUFYO0FBQ0FELFdBQVcsQ0FBQyxrQkFBRCxFQUErQkMsS0FBL0IsRUFBMkMsdUNBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLG1CQUFELEVBQStCRSxTQUEvQixFQUEyQyxvQ0FBM0MsQ0FBWDtBQUNBRixXQUFXLENBQUMsNEJBQUQsRUFBK0JFLFNBQS9CLEVBQTJDLDREQUEzQyxDQUFYO0FBQ0FGLFdBQVcsQ0FBQyxtQkFBRCxFQUErQkMsS0FBL0IsRUFBMkMsa0RBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLGdCQUFELEVBQStCQyxLQUEvQixFQUEyQyw2REFBM0MsQ0FBWDtBQUNBRCxXQUFXLENBQUMsMEJBQUQsRUFBK0JDLEtBQS9CLEVBQTJDLDBIQUEzQyxDQUFYO0FBQ0FELFdBQVcsQ0FBQyx1QkFBRCxFQUErQkMsS0FBL0IsRUFBMkMsMEZBQTNDLENBQVg7QUFDQUQsV0FBVyxDQUFDLGVBQUQsRUFBK0JDLEtBQS9CLEVBQTJDLDZCQUEzQyxDQUFYO0FBRUE7Ozs7Ozs7O0FBT0EsU0FBU0QsV0FBVCxDQUFxQkksSUFBckIsRUFBMkJDLElBQTNCLEVBQWlDQyxJQUFqQyxFQUF1QztBQUN0Q1AsRUFBQUEsTUFBTSxDQUFDSyxJQUFELENBQU4sR0FBZSxVQUFVRyxHQUFWLEVBQWVDLElBQWYsRUFBcUI7QUFDbkMsVUFBTUMsR0FBRyxHQUFHLElBQUlKLElBQUosQ0FBU0UsR0FBVCxDQUFaOztBQUVBLFFBQUlELElBQUosRUFBVTtBQUNULFVBQUksQ0FBQ0UsSUFBTCxFQUFXO0FBQ1ZBLFFBQUFBLElBQUksR0FBRyxFQUFQO0FBQ0E7O0FBQ0RBLE1BQUFBLElBQUksQ0FBQ0YsSUFBTCxHQUFZQSxJQUFaO0FBQ0E7O0FBRUQsV0FBT0ksTUFBTSxDQUFDQyxnQkFBUCxDQUF3QkYsR0FBeEIsRUFBNkI7QUFDbkNMLE1BQUFBLElBQUksRUFBRTtBQUNMUSxRQUFBQSxZQUFZLEVBQUUsSUFEVDtBQUVMQyxRQUFBQSxVQUFVLEVBQUUsSUFGUDtBQUdMQyxRQUFBQSxRQUFRLEVBQUUsSUFITDtBQUlMQyxRQUFBQSxLQUFLLEVBQUcsT0FBTVgsSUFBSztBQUpkLE9BRDZCO0FBT25DSSxNQUFBQSxJQUFJLEVBQUU7QUFDTEksUUFBQUEsWUFBWSxFQUFFLElBRFQ7QUFFTEcsUUFBQUEsS0FBSyxFQUFFUCxJQUFJLElBQUlRLFNBRlY7QUFHTEYsUUFBQUEsUUFBUSxFQUFFO0FBSEw7QUFQNkIsS0FBN0IsQ0FBUDtBQWFBLEdBdkJEOztBQXlCQUosRUFBQUEsTUFBTSxDQUFDQyxnQkFBUCxDQUF3QlosTUFBTSxDQUFDSyxJQUFELENBQTlCLEVBQXNDO0FBQ3JDYSxJQUFBQSxJQUFJLEVBQUU7QUFDTEwsTUFBQUEsWUFBWSxFQUFFLElBRFQ7QUFFTEcsTUFBQUEsS0FBSyxFQUFFWCxJQUZGO0FBR0xVLE1BQUFBLFFBQVEsRUFBRTtBQUhMLEtBRCtCO0FBTXJDSSxJQUFBQSxRQUFRLEVBQUU7QUFDVE4sTUFBQUEsWUFBWSxFQUFFLElBREw7QUFFVEcsTUFBQUEsS0FBSyxFQUFFLFNBQVNHLFFBQVQsR0FBb0I7QUFDMUIsZUFBUSxPQUFNZCxJQUFLLEVBQW5CO0FBQ0EsT0FKUTtBQUtUVSxNQUFBQSxRQUFRLEVBQUU7QUFMRDtBQU4yQixHQUF0QztBQWNBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXJyb3JzID0ge307XG5leHBvcnQgZGVmYXVsdCBlcnJvcnM7XG5cbmNyZWF0ZUVycm9yKCdBVVRIX0ZBSUxFRCcsICAgICAgICAgICAgICAgIEVycm9yLCAgICAgICdBdXRob3JpemF0aW9uIGZhaWxlZCcpO1xuY3JlYXRlRXJyb3IoJ0FVVEhfVElNRU9VVCcsICAgICAgICAgICAgICAgRXJyb3IsICAgICAgJ0Egc3VjY2Vzc2Z1bCBsb2dpbiBkaWQgbm90IGhhcHBlbiB3aXRoaW4gdGhlIGFsbG93ZWQgdGltZScpO1xuY3JlYXRlRXJyb3IoJ0lOVkFMSURfQVJHVU1FTlQnLCAgICAgICAgICAgVHlwZUVycm9yLCAgJ0EgZnVuY3Rpb24gYXJndW1lbnQgaXMgdW5kZWZpbmVkIG9yIHRoZSBpbmNvcnJlY3QgZGF0YSB0eXBlJyk7XG5jcmVhdGVFcnJvcignSU5WQUxJRF9GSUxFJywgICAgICAgICAgICAgICBFcnJvciwgICAgICAnVGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgYWNjZXNzIGlzIGRlbmllZCcpO1xuY3JlYXRlRXJyb3IoJ0lOVkFMSURfUEFSQU1FVEVSJywgICAgICAgICAgVHlwZUVycm9yLCAgJ0EgcGFyYW1ldGVyIHdhcyBub3QgYSB2YWxpZCB2YWx1ZSBvciB0eXBlJyk7XG5jcmVhdGVFcnJvcignSU5WQUxJRF9SQU5HRScsICAgICAgICAgICAgICBSYW5nZUVycm9yLCAnVGhlIHZhbHVlIGlzIG5vdCB3aXRoaW4gdGhlIGFjY2VwdGFibGUgbWluL21heCByYW5nZScpO1xuY3JlYXRlRXJyb3IoJ0lOVkFMSURfVE9LRU4nLCAgICAgICAgICAgICAgRXJyb3IsICAgICAgJ1RoZSB0b2tlbiBjb3VsZCBub3QgYmUgZGVjb2RlZCcpO1xuY3JlYXRlRXJyb3IoJ0lOVkFMSURfVkFMVUUnLCAgICAgICAgICAgICAgRXJyb3IsICAgICAgJ1RoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gYWNjZXB0ZWQgdmFsdWUnKTtcbmNyZWF0ZUVycm9yKCdMT0dJTl9SRVFVSVJFRCcsICAgICAgICAgICAgIEVycm9yLCAgICAgICdMb2dpbiBpcyByZXF1aXJlZCcpO1xuY3JlYXRlRXJyb3IoJ0tFWVRBUl9OT1RfRk9VTkQnLCAgICAgICAgICAgRXJyb3IsICAgICAgJ1RoZSB0b2tlbiBzdG9yZSBjb3VsZCBub3QgZmluZCBrZXl0YXInKTtcbmNyZWF0ZUVycm9yKCdNSVNTSU5HX0FVVEhfQ09ERScsICAgICAgICAgIFR5cGVFcnJvciwgICdBbiBhdXRob3JpemF0aW9uIGNvZGUgd2FzIGV4cGVjdGVkJyk7XG5jcmVhdGVFcnJvcignTUlTU0lOR19SRVFVSVJFRF9QQVJBTUVURVInLCBUeXBlRXJyb3IsICAnQSByZXF1aXJlZCBwYXJhbWV0ZXIgd2FzIG5vdCBzcGVjaWZpZWQgb3Igbm90IGEgdmFsaWQgdHlwZScpO1xuY3JlYXRlRXJyb3IoJ09SR19TV0lUQ0hfRkFJTEVEJywgICAgICAgICAgRXJyb3IsICAgICAgJ0ZhaWxlZCB0byBzd2l0Y2ggdGhlIGN1cnJlbnQgb3JnIGZvciBzb21lIHJlYXNvbicpO1xuY3JlYXRlRXJyb3IoJ1JFUVVFU1RfRkFJTEVEJywgICAgICAgICAgICAgRXJyb3IsICAgICAgJ0FuIEhUVFAgcmVxdWVzdCBoYXMgZXJyb3JlZCBvciByZXR1cm5lZCBhbiBpbnZhbGlkIHJlc3BvbnNlJyk7XG5jcmVhdGVFcnJvcignU0VDVVJFX1NUT1JFX1VOQVZBSUxBQkxFJywgICBFcnJvciwgICAgICAnVGhlIHNlY3VyZSBzdG9yZSBpcyBub3QgYXZhaWxhYmxlLCBwcm9iYWJseSBiZWNhdXNlIFwia2V5dGFyXCIgaXMgbm90IGJ1aWx0IG9yIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCBOb2RlLmpzIHZlcnNpb24nKTtcbmNyZWF0ZUVycm9yKCdTRU5EX0FVVEhfQ09ERV9GQUlMRUQnLCAgICAgIEVycm9yLCAgICAgICdUaGUgc3VibWl0IGRldmljZSBhdXRob3JpemF0aW9uIGNvZGUgcmVxdWVzdCBoYXMgZXJyb3JlZCBvciByZXR1cm5lZCBhbiBpbnZhbGlkIHJlc3BvbnNlJyk7XG5jcmVhdGVFcnJvcignVE9LRU5fRVhQSVJFRCcsICAgICAgICAgICAgICBFcnJvciwgICAgICAnVGhlIGFjY2VzcyB0b2tlbiBpcyBleHBpcmVkJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiB0aGUgZXJyb3Igb2JqZWN0IGFuZCBwb3B1bGF0ZXMgdGhlIG1lc3NhZ2UsIGNvZGUsIGFuZCBtZXRhZGF0YS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gY29kZSAtIFRoZSBlcnJvciBjb2RlLlxuICogQHBhcmFtIHtFcnJvcnxSYW5nZUVycm9yfFR5cGVFcnJvcn0gdHlwZSAtIEFuIGluc3RhbnRpYWJsZSBlcnJvciBvYmplY3QuXG4gKiBAcGFyYW0ge1N0cmluZ30gZGVzYyAtIEEgZ2VuZXJpYyBlcnJvciBkZXNjcmlwdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXJyb3IoY29kZSwgdHlwZSwgZGVzYykge1xuXHRlcnJvcnNbY29kZV0gPSBmdW5jdGlvbiAobXNnLCBtZXRhKSB7XG5cdFx0Y29uc3QgZXJyID0gbmV3IHR5cGUobXNnKTtcblxuXHRcdGlmIChkZXNjKSB7XG5cdFx0XHRpZiAoIW1ldGEpIHtcblx0XHRcdFx0bWV0YSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0bWV0YS5kZXNjID0gZGVzYztcblx0XHR9XG5cblx0XHRyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZXJyLCB7XG5cdFx0XHRjb2RlOiB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBgRVJSXyR7Y29kZX1gXG5cdFx0XHR9LFxuXHRcdFx0bWV0YToge1xuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiBtZXRhIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlcnJvcnNbY29kZV0sIHtcblx0XHRuYW1lOiB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogY29kZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHR0b1N0cmluZzoge1xuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdFx0XHRyZXR1cm4gYEVSUl8ke2NvZGV9YDtcblx0XHRcdH0sXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH1cblx0fSk7XG59XG4iXSwiZmlsZSI6ImVycm9ycy5qcyJ9

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

* when the `tokenStoreType` is `secure` or `file`.
* @param {String} [opts.tokenStoreType=auto] - The type of store to persist the access token.
* @param {String} [opts.tokenStoreType=secure] - The type of store to persist the access token.
* Possible values include: `auto`, `secure`, `file`, or `memory`. If value is `auto`, it will

@@ -221,3 +221,3 @@ * attempt to use `secure`, then `file`, then `memory`. If set to `null`, then it will not

} else {
const tokenStoreType = opts.tokenStoreType === undefined ? 'auto' : opts.tokenStoreType;
const tokenStoreType = opts.tokenStoreType === undefined ? 'secure' : opts.tokenStoreType;

@@ -233,2 +233,4 @@ switch (tokenStoreType) {

if (tokenStoreType === 'auto') {// let 'auto' fall through
} else if (e.code === 'ERR_KEYTAR_NOT_FOUND') {
throw _errors.default.SECURE_STORE_UNAVAILABLE('Secure token store is not available.\nPlease reinstall or rebuild this application.');
} else {

@@ -369,7 +371,27 @@ throw e;

if (account && !account.expired) {
if (!authenticator) {
authenticator = this.createAuthenticator(opts);
if (account) {
// copy over the correct auth params
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];
}
}
authenticator = this.createAuthenticator(opts);
if (account.expired) {
// refresh the access token if the refresh token is valid
log(`Access token for account ${account.name || account.hash} is expired`);
if (account.expires.refresh < Date.now()) {
log(`Unable to refresh access token for account ${account.name || account.hash} because refresh token is also expired`);
return;
}
log(`Refreshing access token for account ${account.name || account.hash}`);
const result = await authenticator.getToken();
return result.account;
}
return await authenticator.getInfo(account);

@@ -637,2 +659,2 @@ }

exports.Auth = exports.default = Auth;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJtYWdlbnRhIiwibm90ZSIsInNub29wbG9nZyIsInN0eWxlcyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsIk9iamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJiYXNlVXJsIiwidmFsdWUiLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImVudiIsIm1lc3NhZ2VzIiwicGFzc3dvcmQiLCJwbGF0Zm9ybVVybCIsInJlYWxtIiwic2VjcmV0RmlsZSIsInNlcnZpY2VBY2NvdW50IiwidXNlcm5hbWUiLCJ0b2tlblN0b3JlIiwiVG9rZW5TdG9yZSIsIklOVkFMSURfUEFSQU1FVEVSIiwidG9rZW5TdG9yZVR5cGUiLCJ1bmRlZmluZWQiLCJTZWN1cmVTdG9yZSIsImUiLCJGaWxlU3RvcmUiLCJjb2RlIiwiTWVtb3J5U3RvcmUiLCJhcHBseURlZmF1bHRzIiwiZW52aXJvbm1lbnRzIiwiSU5WQUxJRF9WQUxVRSIsImNyZWF0ZUF1dGhlbnRpY2F0b3IiLCJhdXRoZW50aWNhdG9yIiwiQXV0aGVudGljYXRvciIsIklOVkFMSURfQVJVR01FTlQiLCJPd25lclBhc3N3b3JkIiwiQ2xpZW50U2VjcmV0IiwiU2lnbmVkSldUIiwiUEtDRSIsImdldEFjY291bnQiLCJhY2NvdW50TmFtZSIsImhhc2giLCJhY2NvdW50IiwiZ2V0IiwiZXhwaXJlZCIsImdldEluZm8iLCJsaXN0IiwibG9naW4iLCJyZXZva2UiLCJhY2NvdW50cyIsImFsbCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInJldm9rZWQiLCJjbGVhciIsImRlbGV0ZSIsImVudHJ5IiwidXJsIiwibG9nb3V0IiwidG9rZW5zIiwiaWRfdG9rZW4iLCJzdGF0dXMiLCJ2YWxpZGF0ZUpTT04iLCJuYW1lIiwiZXJyIiwic2VydmVySW5mbyIsIndlbGxLbm93biIsInN3aXRjaE9yZyIsImFjY2Vzc1Rva2VuIiwib3JnSWQiLCJyZXNwb25zZSIsImZvcm1EYXRhIiwib3JnX2lkIiwiaGVhZGVycyIsIkFjY2VwdCIsIkF1dGhvcml6YXRpb24iLCJtZXRob2QiLCJzd2l0Y2hMb2dnZWRJbk9yZyIsImJvZHkiLCJzdGF0dXNDb2RlIiwiUkVRVUVTVF9GQUlMRUQiLCJzdWNjZXNzIiwicmVzdWx0Iiwib3JnIiwib3JnX25hbWUiLCJzZXQiLCJsYWJlbCIsInNlbmRBdXRoQ29kZSIsImZyb20iLCJkZXZpY2VhdXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQTs7QUFDQTs7Ozs7Ozs7QUF4QkE7QUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQ0MsaUJBQVgsRUFBOEI7QUFDN0JDLEVBQUFBLE9BQU8sQ0FBQyw2QkFBRCxDQUFQO0FBQ0E7O0FBdUJELE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFVLHdCQUFVLGNBQVYsQ0FBaEI7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLEtBQUY7QUFBU0MsRUFBQUEsU0FBVDtBQUFvQkMsRUFBQUEsT0FBcEI7QUFBNkJDLEVBQUFBO0FBQTdCLElBQXNDQyxtQkFBVUMsTUFBdEQ7QUFFQTs7OztBQUdlLE1BQU1DLElBQU4sQ0FBVztBQUN6Qjs7Ozs7OztBQVFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkFDLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBSSxHQUFHLEVBQVIsRUFBWTtBQUFBLHdDQWhDVixJQWdDVTs7QUFDdEIsUUFBSSxDQUFDQSxJQUFELElBQVMsT0FBT0EsSUFBUCxLQUFnQixRQUE3QixFQUF1QztB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LENBQW1CLGtDQUFuQixDQUFOO0FBQ0E7O0FBRUQsU0FBS3lCLGFBQUwsQ0FBbUIzQixJQUFuQjtBQUVBLFVBQU07QUFBRW9FLE1BQUFBLFdBQUY7QUFBZTNDLE1BQUFBO0FBQWYsUUFBd0J6QixJQUE5QjtBQUNBLFVBQU1zRSxRQUFRLEdBQUcsTUFBTSw2QkFBUTtBQUM5QkMsTUFBQUEsUUFBUSxFQUFFO0FBQ1Q5QyxRQUFBQSxJQURTO0FBRVQrRCxRQUFBQSxJQUFJLEVBQUU7QUFGRyxPQURvQjtBQUs5QmYsTUFBQUEsT0FBTyxFQUFFO0FBQ1JDLFFBQUFBLE1BQU0sRUFBRSxrQkFEQTtBQUVSQyxRQUFBQSxhQUFhLEVBQUcsVUFBU1AsV0FBWTtBQUY3QixPQUxxQjtBQVM5QlEsTUFBQUEsTUFBTSxFQUFFLE1BVHNCO0FBVTlCbkIsTUFBQUEsR0FBRyxFQUFHLEdBQUUsd0JBQWF6RCxJQUFiLEVBQW1CeUYsVUFBVyxFQVZSO0FBVzlCM0IsTUFBQUEsWUFBWSxFQUFFO0FBWGdCLEtBQVIsQ0FBdkI7QUFhQSxVQUFNO0FBQUVnQixNQUFBQSxJQUFGO0FBQVFDLE1BQUFBO0FBQVIsUUFBdUJULFFBQTdCOztBQUVBLFFBQUlTLFVBQVUsSUFBSSxHQUFkLElBQXFCLENBQUNELElBQXRCLElBQThCLENBQUNBLElBQUksQ0FBQ0csT0FBcEMsSUFBK0MsQ0FBQ0gsSUFBSSxDQUFDSSxNQUFyRCxJQUErREosSUFBSSxDQUFDSSxNQUFMLENBQVl2QyxPQUFaLEtBQXdCLElBQTNGLEVBQWlHO0FBQ2hHLFlBQU0sOEJBQW1CO0FBQUUyQyxRQUFBQSxLQUFLLEVBQUUsaUNBQVQ7QUFBNENoQixRQUFBQTtBQUE1QyxPQUFuQixDQUFOO0FBQ0E7O0FBRUQvRSxJQUFBQSxHQUFHLENBQUUsdUNBQXNDd0YsVUFBVyxHQUFuRCxDQUFIO0FBQ0E7O0FBNWF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKCFFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuXHRyZXF1aXJlKCdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXInKTtcbn1cblxuaW1wb3J0IEUgZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgQXV0aGVudGljYXRvciBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL2F1dGhlbnRpY2F0b3InO1xuaW1wb3J0IENsaWVudFNlY3JldCBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL2NsaWVudC1zZWNyZXQnO1xuaW1wb3J0IE93bmVyUGFzc3dvcmQgZnJvbSAnLi9hdXRoZW50aWNhdG9ycy9vd25lci1wYXNzd29yZCc7XG5pbXBvcnQgUEtDRSBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL3BrY2UnO1xuaW1wb3J0IFNpZ25lZEpXVCBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL3NpZ25lZC1qd3QnO1xuXG5pbXBvcnQgRmlsZVN0b3JlIGZyb20gJy4vc3RvcmVzL2ZpbGUtc3RvcmUnO1xuaW1wb3J0IE1lbW9yeVN0b3JlIGZyb20gJy4vc3RvcmVzL21lbW9yeS1zdG9yZSc7XG5pbXBvcnQgU2VjdXJlU3RvcmUgZnJvbSAnLi9zdG9yZXMvc2VjdXJlLXN0b3JlJztcbmltcG9ydCBUb2tlblN0b3JlIGZyb20gJy4vc3RvcmVzL3Rva2VuLXN0b3JlJztcblxuaW1wb3J0IGVudmlyb25tZW50cyBmcm9tICcuL2Vudmlyb25tZW50cyc7XG5pbXBvcnQgZ2V0RW5kcG9pbnRzIGZyb20gJy4vZW5kcG9pbnRzJztcbmltcG9ydCBzbm9vcGxvZ2cgZnJvbSAnc25vb3Bsb2dnJztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL3NlcnZlcic7XG5cbmltcG9ydCByZXF1ZXN0IGZyb20gJ0BheHdheS9hbXBsaWZ5LXJlcXVlc3QnO1xuaW1wb3J0IHsgZ2V0U2VydmVySW5mbywgaGFuZGxlUmVxdWVzdEVycm9yIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgeyBsb2cgfSA9IHNub29wbG9nZygnYW1wbGlmeS1hdXRoJyk7XG5jb25zdCB7IGFsZXJ0LCBoaWdobGlnaHQsIG1hZ2VudGEsIG5vdGUgfSA9IHNub29wbG9nZy5zdHlsZXM7XG5cbi8qKlxuICogQXV0aGVudGljYXRlcyB0aGUgbWFjaGluZSBhbmQgcmV0cmVpdmVzIHRoZSBhdXRoIHRva2VuLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRoIHtcblx0LyoqXG5cdCAqIFRoZSBzdG9yZSB0byBwZXJzaXN0IHRoZSB0b2tlbi5cblx0ICpcblx0ICogQHR5cGUge1Rva2VuU3RvcmV9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0dG9rZW5TdG9yZSA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBhdXRoZW50aWNhdGlvbiBpbnN0YW5jZSBieSBzZXR0aW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzIGFuZCBjcmVhdGluZyB0aGVcblx0ICogdG9rZW4gc3RvcmUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdG8gdXNlIGZvciBhbGwgb3V0Z29pbmcgcmVxdWVzdHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5jbGllbnRJZF0gLSBUaGUgY2xpZW50IGlkIHRvIHNwZWNpZnkgd2hlbiBhdXRoZW50aWNhdGluZy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmNsaWVudFNlY3JldF0gLSBUaGUgc2VjcmV0IHRva2VuIHRvIHVzZSB0byBhdXRoZW50aWNhdGUuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lbnY9cHJvZF0gLSBUaGUgZW52aXJvbm1lbnQgbmFtZS4gTXVzdCBiZSBgZGV2YCwgYHByZXByb2RgLCBvciBgcHJvZGAuXG5cdCAqIFRoZSBlbnZpcm9ubWVudCBpcyBhIHNob3J0aGFuZCB3YXkgb2Ygc3BlY2lmeWluZyBhIEF4d2F5IGRlZmF1bHQgYmFzZSBVUkwuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zZWN1cmVTZXJ2aWNlTmFtZT1cIkF4d2F5IEFNUExJRlkgQXV0aFwiXSAtIFRoZSBuYW1lIG9mIHRoZSBjb25zdW1lclxuXHQgKiB1c2luZyB0aGlzIGxpYnJhcnkgd2hlbiB1c2luZyB0aGUgXCJzZWN1cmVcIiB0b2tlbiBzdG9yZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnBhc3N3b3JkXSAtIFRoZSBwYXNzd29yZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gUmVxdWlyZXMgYSBgdXNlcm5hbWVgLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGxhdGZvcm1VcmxdIC0gVGhlIHBsYXRmb3JtIFVSTCB1c2VkIHRvIGdldCB1c2VyIGluZm8gYW5kIG9yZ3MuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5yZWFsbV0gLSBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdG8gYXV0aGVudGljYXRlIHdpdGguXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zZWNyZXRGaWxlXSAtIFRoZSBwYXRoIHRvIHRoZSBqd3Qgc2VjcmV0IGZpbGUuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuc2VydmljZUFjY291bnQ9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGluZGljYXRlcyBhdXRoZW50aWNhdGlvbiBpcyBiZWluZ1xuXHQgKiByZXF1ZXN0ZWQgYnkgYSBzZXJ2aWNlIGluc3RlYWQgb2YgYSB1c2VyLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnRva2VuUmVmcmVzaFRocmVzaG9sZD0wXSAtIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIGFjY2Vzc1xuXHQgKiB0b2tlbiBleHBpcmVzIGFuZCBzaG91bGQgYmUgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0ge1Rva2VuU3RvcmV9IFtvcHRzLnRva2VuU3RvcmVdIC0gQSB0b2tlbiBzdG9yZSBpbnN0YW5jZSBmb3IgcGVyc2lzdGluZyB0aGUgdG9rZW5zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudG9rZW5TdG9yZURpcl0gLSBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB0b2tlbiBzdG9yZSBpcyBzYXZlZC4gUmVxdWlyZWRcblx0ICogd2hlbiB0aGUgYHRva2VuU3RvcmVUeXBlYCBpcyBgc2VjdXJlYCBvciBgZmlsZWAuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy50b2tlblN0b3JlVHlwZT1hdXRvXSAtIFRoZSB0eXBlIG9mIHN0b3JlIHRvIHBlcnNpc3QgdGhlIGFjY2VzcyB0b2tlbi5cblx0ICogUG9zc2libGUgdmFsdWVzIGluY2x1ZGU6IGBhdXRvYCwgYHNlY3VyZWAsIGBmaWxlYCwgb3IgYG1lbW9yeWAuIElmIHZhbHVlIGlzIGBhdXRvYCwgaXQgd2lsbFxuXHQgKiBhdHRlbXB0IHRvIHVzZSBgc2VjdXJlYCwgdGhlbiBgZmlsZWAsIHRoZW4gYG1lbW9yeWAuIElmIHNldCB0byBgbnVsbGAsIHRoZW4gaXQgd2lsbCBub3Rcblx0ICogcGVyc2lzdCB0aGUgYWNjZXNzIHRva2VuLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMudXNlcm5hbWVdIC0gVGhlIHVzZXJuYW1lIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGBwYXNzd29yZGAuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdFx0YmFzZVVybDogICAgICAgIHsgdmFsdWU6IG9wdHMuYmFzZVVybCB9LFxuXHRcdFx0Y2xpZW50SWQ6ICAgICAgIHsgdmFsdWU6IG9wdHMuY2xpZW50SWQgfSxcblx0XHRcdGNsaWVudFNlY3JldDogICB7IHZhbHVlOiBvcHRzLmNsaWVudFNlY3JldCB9LFxuXHRcdFx0ZW52OiAgICAgICAgICAgIHsgdmFsdWU6IG9wdHMuZW52IH0sXG5cdFx0XHRtZXNzYWdlczogICAgICAgeyB2YWx1ZTogb3B0cy5tZXNzYWdlcyB9LFxuXHRcdFx0cGFzc3dvcmQ6ICAgICAgIHsgdmFsdWU6IG9wdHMucGFzc3dvcmQgfSxcblx0XHRcdHBsYXRmb3JtVXJsOiAgICB7IHZhbHVlOiBvcHRzLnBsYXRmb3JtVXJsIH0sXG5cdFx0XHRyZWFsbTogICAgICAgICAgeyB2YWx1ZTogb3B0cy5yZWFsbSB9LFxuXHRcdFx0c2VjcmV0RmlsZTogICAgIHsgdmFsdWU6IG9wdHMuc2VjcmV0RmlsZSB9LFxuXHRcdFx0c2VydmljZUFjY291bnQ6IHsgdmFsdWU6IG9wdHMuc2VydmljZUFjY291bnQgfSxcblx0XHRcdHVzZXJuYW1lOiAgICAgICB7IHZhbHVlOiBvcHRzLnVzZXJuYW1lIH1cblx0XHR9KTtcblxuXHRcdGlmIChvcHRzLnRva2VuU3RvcmUpIHtcblx0XHRcdGlmICghKG9wdHMudG9rZW5TdG9yZSBpbnN0YW5jZW9mIFRva2VuU3RvcmUpKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9QQVJBTUVURVIoJ0V4cGVjdGVkIHRoZSB0b2tlbiBzdG9yZSB0byBiZSBhIFwiVG9rZW5TdG9yZVwiIGluc3RhbmNlJyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnRva2VuU3RvcmUgPSBvcHRzLnRva2VuU3RvcmU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHRva2VuU3RvcmVUeXBlID0gb3B0cy50b2tlblN0b3JlVHlwZSA9PT0gdW5kZWZpbmVkID8gJ2F1dG8nIDogb3B0cy50b2tlblN0b3JlVHlwZTtcblx0XHRcdHN3aXRjaCAodG9rZW5TdG9yZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYXV0byc6XG5cdFx0XHRcdGNhc2UgJ3NlY3VyZSc6XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoaXMudG9rZW5TdG9yZSA9IG5ldyBTZWN1cmVTdG9yZShvcHRzKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuXHRcdFx0XHRcdFx0aWYgKHRva2VuU3RvcmVUeXBlID09PSAnYXV0bycpIHtcblx0XHRcdFx0XHRcdFx0Ly8gbGV0ICdhdXRvJyBmYWxsIHRocm91Z2hcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRva2VuU3RvcmUgPSBuZXcgRmlsZVN0b3JlKG9wdHMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cdFx0XHRcdFx0XHRpZiAodG9rZW5TdG9yZVR5cGUgPT09ICdhdXRvJyAmJiBlLmNvZGUgPT09ICdFUlJfTUlTU0lOR19SRVFVSVJFRF9QQVJBTUVURVInKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGxldCAnYXV0bycgZmFsbCB0aHJvdWdoXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRjYXNlICdtZW1vcnknOlxuXHRcdFx0XHRcdHRoaXMudG9rZW5TdG9yZSA9IG5ldyBNZW1vcnlTdG9yZShvcHRzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGUgb3B0aW9ucyBjb250YWlucyB0aGUgY29uZmlndXJhYmxlIHNldHRpbmdzLiBWYWxpZGF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIGNvZGVcblx0ICogcmVxdWlyaW5nIHRoZSB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0YXBwbHlEZWZhdWx0cyhvcHRzID0ge30pIHtcblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW52ID0gb3B0cy5lbnYgfHwgdGhpcy5lbnYgfHwgJ3Byb2QnO1xuXHRcdGlmICghZW52aXJvbm1lbnRzW2Vudl0pIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9WQUxVRShgSW52YWxpZCBlbnZpcm9ubWVudDogJHtvcHRzLmVudiB8fCB0aGlzLmVudn1gKTtcblx0XHR9XG5cblx0XHRvcHRzLmJhc2VVcmwgICAgICAgID0gb3B0cy5iYXNlVXJsIHx8IHRoaXMuYmFzZVVybCB8fCBlbnZpcm9ubWVudHNbZW52XS5iYXNlVXJsO1xuXHRcdG9wdHMuY2xpZW50SWQgICAgICAgPSBvcHRzLmNsaWVudElkIHx8IHRoaXMuY2xpZW50SWQ7XG5cdFx0b3B0cy5jbGllbnRTZWNyZXQgICA9IG9wdHMuY2xpZW50U2VjcmV0IHx8IHRoaXMuY2xpZW50U2VjcmV0O1xuXHRcdG9wdHMuZW52ICAgICAgICAgICAgPSBlbnY7XG5cdFx0b3B0cy5tZXNzYWdlcyAgICAgICA9IG9wdHMubWVzc2FnZXMgfHwgdGhpcy5tZXNzYWdlcztcblx0XHRvcHRzLnBhc3N3b3JkICAgICAgID0gb3B0cy5wYXNzd29yZCB8fCB0aGlzLnBhc3N3b3JkO1xuXHRcdG9wdHMucGxhdGZvcm1VcmwgICAgPSBvcHRzLnBsYXRmb3JtVXJsIHx8IHRoaXMucGxhdGZvcm1VcmwgfHwgZW52aXJvbm1lbnRzW2Vudl0ucGxhdGZvcm1Vcmw7XG5cdFx0b3B0cy5yZWFsbSAgICAgICAgICA9IG9wdHMucmVhbG0gfHwgdGhpcy5yZWFsbTtcblx0XHRvcHRzLnNlY3JldEZpbGUgICAgID0gb3B0cy5zZWNyZXRGaWxlIHx8IHRoaXMuc2VjcmV0RmlsZTtcblx0XHRvcHRzLnNlcnZpY2VBY2NvdW50ID0gb3B0cy5zZXJ2aWNlQWNjb3VudCB8fCB0aGlzLnNlcnZpY2VBY2NvdW50O1xuXHRcdG9wdHMudG9rZW5TdG9yZSAgICAgPSB0aGlzLnRva2VuU3RvcmU7XG5cdFx0b3B0cy51c2VybmFtZSAgICAgICA9IG9wdHMudXNlcm5hbWUgfHwgdGhpcy51c2VybmFtZTtcblxuXHRcdHJldHVybiBvcHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gYXV0aGV0bmljYXRvciBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgb3B0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtBdXRoZW50aWNhdG9yfSBbb3B0cy5hdXRoZW50aWNhdG9yXSAtIEFuIGF1dGhlbnRpY2F0b3IgaW5zdGFuY2UgdG8gdXNlLiBJZiBub3Rcblx0ICogc3BlY2lmaWVkLCBvbmUgd2lsbCBiZSBhdXRvLXNlbGVjdGVkIGJhc2VkIG9uIHRoZSBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY2xpZW50U2VjcmV0XSAtIFRoZSBzZWNyZXQgdG9rZW4gdG8gdXNlIHRvIGF1dGhlbnRpY2F0ZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnBhc3N3b3JkXSAtIFRoZSBwYXNzd29yZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gUmVxdWlyZXMgYSBgdXNlcm5hbWVgLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc2VjcmV0RmlsZV0gLSBUaGUgcGF0aCB0byB0aGUgand0IHNlY3JldCBmaWxlLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnNlcnZpY2VBY2NvdW50PWZhbHNlXSAtIFdoZW4gYHRydWVgLCBpbmRpY2F0ZXMgYXV0aGVudGljYXRpb24gaXMgYmVpbmdcblx0ICogcmVxdWVzdGVkIGJ5IGEgc2VydmljZSBpbnN0ZWFkIG9mIGEgdXNlci5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVzZXJuYW1lXSAtIFRoZSB1c2VybmFtZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gUmVxdWlyZXMgYSBgcGFzc3dvcmRgLlxuXHQgKiBAcmV0dXJucyB7QXV0aGVudGljYXRvcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNyZWF0ZUF1dGhlbnRpY2F0b3Iob3B0cyA9IHt9KSB7XG5cdFx0aWYgKG9wdHMuYXV0aGVudGljYXRvcikge1xuXHRcdFx0aWYgKCEob3B0cy5hdXRoZW50aWNhdG9yIGluc3RhbmNlb2YgQXV0aGVudGljYXRvcikpIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSVUdNRU5UKCdFeHBlY3RlZCBhdXRoZW50aWNhdG9yIHRvIGJlIGFuIEF1dGhlbnRpY2F0b3IgaW5zdGFuY2UuJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3B0cy5hdXRoZW50aWNhdG9yO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb3B0cy51c2VybmFtZSA9PT0gJ3N0cmluZycgJiYgb3B0cy51c2VybmFtZSAmJiB0eXBlb2Ygb3B0cy5wYXNzd29yZCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiBuZXcgT3duZXJQYXNzd29yZChvcHRzKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9wdHMuY2xpZW50U2VjcmV0ID09PSAnc3RyaW5nJyAmJiBvcHRzLmNsaWVudFNlY3JldCkge1xuXHRcdFx0cmV0dXJuIG5ldyBDbGllbnRTZWNyZXQob3B0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBvcHRzLnNlY3JldEZpbGUgPT09ICdzdHJpbmcnICYmIG9wdHMuc2VjcmV0RmlsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBTaWduZWRKV1Qob3B0cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQS0NFKG9wdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgYWNjZXNzIHRva2VuLiBJZiB0aGUgYXV0aGVudGljYXRvciBpcyBpbnRlcmFjdGl2ZSBhbmQgdGhlIGF1dGhlbnRpY2F0b3IgaGFzIG5vdFxuXHQgKiB5ZXQgYXV0aGVudGljYXRlZCB3aXRoIHRoZSBzZXJ2ZXIsIGFuIGVycm9yIGlzIHRocm93bi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBvcHRzIC0gUmVxdWlyZWQgb3B0aW9ucyBvciBhIHN0cmluZyBjb250YWluaW5nIHRoZSBoYXNoIG9yIGFjY291bnRcblx0ICogbmFtZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMuYWNjb3VudE5hbWUgLSBUaGUgYWNjb3VudCBuYW1lIHRvIHJldHJpZXZlLlxuXHQgKiBAcGFyYW0ge0F1dGhlbnRpY2F0b3J9IFtvcHRzLmF1dGhlbnRpY2F0b3JdIC0gQW4gYXV0aGVudGljYXRvciBpbnN0YW5jZSB0byB1c2UuIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGF1dG8tc2VsZWN0ZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byBmaWx0ZXIgYnkuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5wbGF0Zm9ybVVybF0gLSBUaGUgcGxhdGZvcm0gVVJMIHVzZWQgdG8gZ2V0IHVzZXIgaW5mbyBhbmQgb3Jncy5cblx0ICogQHJldHVybnMge1Byb21pc2U8P09iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRBY2NvdW50KG9wdHMgPSB7fSkge1xuXHRcdGlmICghdGhpcy50b2tlblN0b3JlKSB7XG5cdFx0XHRsb2coJ0Nhbm5vdCBnZXQgYWNjb3VudCwgbm8gdG9rZW4gc3RvcmUnKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGxldCBhdXRoZW50aWNhdG9yO1xuXG5cdFx0aWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuXHRcdFx0b3B0cyA9IHRoaXMuYXBwbHlEZWZhdWx0cyh7IGFjY291bnROYW1lOiBvcHRzLCBoYXNoOiBvcHRzIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFwcGx5RGVmYXVsdHMob3B0cyk7XG5cdFx0XHRhdXRoZW50aWNhdG9yID0gdGhpcy5jcmVhdGVBdXRoZW50aWNhdG9yKG9wdHMpO1xuXHRcdFx0b3B0cy5oYXNoID0gYXV0aGVudGljYXRvci5oYXNoO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLnRva2VuU3RvcmUuZ2V0KG9wdHMpO1xuXHRcdGlmIChhY2NvdW50ICYmICFhY2NvdW50LmV4cGlyZWQpIHtcblx0XHRcdGlmICghYXV0aGVudGljYXRvcikge1xuXHRcdFx0XHRhdXRoZW50aWNhdG9yID0gdGhpcy5jcmVhdGVBdXRoZW50aWNhdG9yKG9wdHMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGF3YWl0IGF1dGhlbnRpY2F0b3IuZ2V0SW5mbyhhY2NvdW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHZhbGlkIGFjY2VzcyB0b2tlbnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5Pn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxpc3QoKSB7XG5cdFx0aWYgKHRoaXMudG9rZW5TdG9yZSkge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHRoaXMudG9rZW5TdG9yZS5saXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBdXRoZW50aWNhdGVzIHVzaW5nIHRoZSBjb25maWd1cmVkIGF1dGhlbnRpY2F0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbb3B0LmFwcF0gLSBTcGVjaWZ5IHRoZSBhcHAgdG8gb3BlbiB0aGUgYHRhcmdldGAgd2l0aCwgb3IgYW5cblx0ICogYXJyYXkgd2l0aCB0aGUgYXBwIGFuZCBhcHAgYXJndW1lbnRzLlxuXHQgKiBAcGFyYW0ge0F1dGhlbnRpY2F0b3J9IFtvcHRzLmF1dGhlbnRpY2F0b3JdIC0gQW4gYXV0aGVudGljYXRvciBpbnN0YW5jZSB0byB1c2UuIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGF1dG8tc2VsZWN0ZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmNsaWVudElkXSAtIFRoZSBjbGllbnQgaWQgdG8gc3BlY2lmeSB3aGVuIGF1dGhlbnRpY2F0aW5nLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY29kZV0gLSBUaGUgYXV0aGVudGljYXRpb24gY29kZSBmcm9tIGEgc3VjY2Vzc2Z1bCBpbnRlcmFjdGl2ZSBsb2dpbi5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVudj1wcm9kXSAtIFRoZSBlbnZpcm9ubWVudCBuYW1lLiBNdXN0IGJlIGBkZXZgLCBgcHJlcHJvZGAsIG9yIGBwcm9kYC5cblx0ICogVGhlIGVudmlyb25tZW50IGlzIGEgc2hvcnRoYW5kIHdheSBvZiBzcGVjaWZ5aW5nIGEgQXh3YXkgZGVmYXVsdCBiYXNlIFVSTC5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5tYW51YWw9ZmFsc2VdIC0gV2hlbiBgdHJ1ZWAsIGl0IHdpbGwgcmV0dXJuIHRoZSBhdXRoIFVSTCBpbnN0ZWFkIG9mXG5cdCAqIGxhdW5jaGluZyB0aGUgYXV0aCBVUkwgaW4gdGhlIGRlZmF1bHQgYnJvd3Nlci5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnBsYXRmb3JtVXJsXSAtIFRoZSBwbGF0Zm9ybSBVUkwgdXNlZCB0byBnZXQgdXNlciBpbmZvIGFuZCBvcmdzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucmVhbG1dIC0gVGhlIG5hbWUgb2YgdGhlIHJlYWxtIHRvIGF1dGhlbnRpY2F0ZSB3aXRoLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdHMudGltZW91dF0gLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aW1pbmcgb3V0LlxuXHQgKiBEZWZhdWx0cyB0byB0aGUgYGludGVyYWN0aXZlTG9naW5UaW1lb3V0YCBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy53YWl0PWZhbHNlXSAtIFdhaXQgZm9yIHRoZSBvcGVuZWQgYXBwIHRvIGV4aXQgYmVmb3JlIGZ1bGZpbGxpbmcgdGhlXG5cdCAqIHByb21pc2UuIElmIGBmYWxzZWAgaXQncyBmdWxmaWxsZWQgaW1tZWRpYXRlbHkgd2hlbiBvcGVuaW5nIHRoZSBhcHAuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFJlc29sdmVzIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBhY2Nlc3MgdG9rZW4sIGFjY291bnQgbmFtZSwgYW5kXG5cdCAqIHVzZXIgaW5mby5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxvZ2luKG9wdHMgPSB7fSkge1xuXHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblx0XHRjb25zdCBhdXRoZW50aWNhdG9yID0gdGhpcy5jcmVhdGVBdXRoZW50aWNhdG9yKG9wdHMpO1xuXHRcdHJldHVybiBhd2FpdCBhdXRoZW50aWNhdG9yLmxvZ2luKG9wdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldm9rZXMgYWxsIG9yIHNwZWNpZmljIGF1dGhlbnRpY2F0ZWQgYWNjb3VudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gUmVxdWlyZWQgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtBcnJheS48U3RyaW5nPnxTdHJpbmd9IG9wdHMuYWNjb3VudHMgLSBBIGxpc3Qgb2YgYWNjb3VudHMgbmFtZXMuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0cy5hbGwgLSBXaGVuIGB0cnVlYCwgcmV2b2tlcyBhbGwgYWNjb3VudHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fSBSZXR1cm5zIGEgbGlzdCBvZiByZXZva2VkIGNyZWRlbnRpYWxzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgcmV2b2tlKHsgYWNjb3VudHMsIGFsbCwgYmFzZVVybCB9ID0ge30pIHtcblx0XHRpZiAoIXRoaXMudG9rZW5TdG9yZSkge1xuXHRcdFx0bG9nKCdObyB0b2tlbiBzdG9yZSwgcmV0dXJuaW5nIGVtcHR5IGFycmF5Jyk7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0aWYgKCFhbGwgJiYgdHlwZW9mIGFjY291bnRzICE9PSAnc3RyaW5nJyAmJiAhQXJyYXkuaXNBcnJheShhY2NvdW50cykpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgYWNjb3VudHMgdG8gYmUgXCJhbGxcIiBvciBhIGxpc3Qgb2YgYWNjb3VudHMnKTtcblx0XHR9XG5cblx0XHRpZiAoIWFsbCAmJiAhYWNjb3VudHMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0bGV0IHJldm9rZWQ7XG5cdFx0aWYgKGFsbCkge1xuXHRcdFx0cmV2b2tlZCA9IGF3YWl0IHRoaXMudG9rZW5TdG9yZS5jbGVhcihiYXNlVXJsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV2b2tlZCA9IGF3YWl0IHRoaXMudG9rZW5TdG9yZS5kZWxldGUoYWNjb3VudHMsIGJhc2VVcmwpO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHJldm9rZWQpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHJldm9rZWQpIHtcblx0XHRcdFx0Y29uc3QgdXJsID0gYCR7Z2V0RW5kcG9pbnRzKGVudHJ5KS5sb2dvdXR9P2lkX3Rva2VuX2hpbnQ9JHtlbnRyeS50b2tlbnMuaWRfdG9rZW59YDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgcmVxdWVzdCh7IHVybCwgdmFsaWRhdGVKU09OOiB0cnVlIH0pO1xuXHRcdFx0XHRcdGxvZyhgU3VjY2Vzc2Z1bGx5IGxvZ2dlZCBvdXQgJHtoaWdobGlnaHQoZW50cnkubmFtZSl9ICR7bWFnZW50YShzdGF0dXMpfSAke25vdGUoYCgke2VudHJ5LmJhc2VVcmx9LCAke2VudHJ5LnJlYWxtfSlgKX1gKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0bG9nKGBGYWlsZWQgdG8gbG9nIG91dCAke2hpZ2hsaWdodChlbnRyeS5uYW1lKX0gJHthbGVydChlcnIuc3RhdHVzKX0gJHtub3RlKGAoJHtlbnRyeS5iYXNlVXJsfSwgJHtlbnRyeS5yZWFsbX0pYCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV2b2tlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNjb3ZlcnMgYXZhaWxhYmxlIGVuZHBvaW50cyBiYXNlZCBvbiB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyJ3MgT3BlbklEIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVudj1wcm9kXSAtIFRoZSBlbnZpcm9ubWVudCBuYW1lLiBNdXN0IGJlIGBkZXZgLCBgcHJlcHJvZGAsIG9yIGBwcm9kYC5cblx0ICogVGhlIGVudmlyb25tZW50IGlzIGEgc2hvcnRoYW5kIHdheSBvZiBzcGVjaWZ5aW5nIGEgQXh3YXkgZGVmYXVsdCBiYXNlIFVSTC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVybF0gLSBBbiBvcHRpb25hbCBVUkwgdG8gZGlzY292ZXIgdGhlIGF2YWlsYWJsZSBlbmRwb2ludHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZXJ2ZXJJbmZvKG9wdHMgPSB7fSkge1xuXHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblxuXHRcdGxldCB7IHVybCB9ID0gb3B0cztcblxuXHRcdGlmICghdXJsKSB7XG5cdFx0XHR1cmwgPSBnZXRFbmRwb2ludHMob3B0cykud2VsbEtub3duO1xuXHRcdH1cblxuXHRcdHJldHVybiBhd2FpdCBnZXRTZXJ2ZXJJbmZvKHVybCk7XG5cdH1cblxuXHQvKipcblx0ICogU3dpdGNoZXMgdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMuYWNjZXNzVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuYWNjb3VudF0gLSBUaGUgYWNjb3VudCBvYmplY3QuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMub3JnSWQgLSBUaGUgb3JnIGlkLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGxhdGZvcm1VcmxdIC0gVGhlIEF4d2F5IFBsYXRmb3JtIFVSTC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gUmVzb2x2ZXMgdGhlIHNlbGVjdGVkIG9yZ2FuaXphdGlvbiBpbmZvLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc3dpdGNoT3JnKG9wdHMpIHtcblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5hcHBseURlZmF1bHRzKG9wdHMpO1xuXG5cdFx0Y29uc3QgeyBhY2Nlc3NUb2tlbiwgb3JnSWQgfSA9IG9wdHM7XG5cdFx0bG9nKGBTd2l0Y2hpbmcgb3JnIHRvICR7b3JnSWR9YCk7XG5cblx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3Qoe1xuXHRcdFx0Zm9ybURhdGE6IHsgb3JnX2lkOiBvcmdJZCB9LFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRcdFx0QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VufWBcblx0XHRcdH0sXG5cdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdHVybDogYCR7Z2V0RW5kcG9pbnRzKG9wdHMpLnN3aXRjaExvZ2dlZEluT3JnfWAsXG5cdFx0XHR2YWxpZGF0ZUpTT046IHRydWVcblx0XHR9KTtcblx0XHRjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzQ29kZSB9ID0gcmVzcG9uc2U7XG5cblx0XHRpZiAoc3RhdHVzQ29kZSA+PSAyMDAgJiYgc3RhdHVzQ29kZSA8IDMwMCkge1xuXHRcdFx0aWYgKCFib2R5KSB7XG5cdFx0XHRcdHRocm93IEUuUkVRVUVTVF9GQUlMRUQoYFN3aXRjaCBvcmcgZmFpbGVkOiBSZXNwb25zZSBoYXMgbm8gYm9keSAoJHtzdGF0dXN9KWApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJvZHkuc3VjY2Vzcykge1xuXHRcdFx0XHR0aHJvdyBFLlJFUVVFU1RfRkFJTEVEKGBTd2l0Y2ggb3JnIGZhaWxlZDogUmVxdWVzdCB3YXMgbm90IHN1Y2Nlc3NmdWwgKCR7c3RhdHVzfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFib2R5LnJlc3VsdCkge1xuXHRcdFx0XHR0aHJvdyBFLlJFUVVFU1RfRkFJTEVEKGBTd2l0Y2ggb3JnIGZhaWxlZDogUmVzcG9uc2UgZGlkIG5vdCBjb250YWluIGEgcmVzdWx0ICgke3N0YXR1c30pYCk7XG5cdFx0XHR9XG5cblx0XHRcdGxvZygnU3dpdGNoIG9yZyBzdWNjZXNzZnVsOicpO1xuXHRcdFx0bG9nKGJvZHkucmVzdWx0KTtcblxuXHRcdFx0Y29uc3Qgb3JnID0ge1xuXHRcdFx0XHRuYW1lOiAgIGJvZHkucmVzdWx0Lm9yZ19uYW1lLFxuXHRcdFx0XHRvcmdfaWQ6IGJvZHkucmVzdWx0Lm9yZ19pZFxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKG9wdHMuYWNjb3VudCAmJiB0eXBlb2Ygb3B0cy5hY2NvdW50ID09PSAnb2JqZWN0JyAmJiB0aGlzLnRva2VuU3RvcmUpIHtcblx0XHRcdFx0b3B0cy5hY2NvdW50Lm9yZyA9IG9yZztcblx0XHRcdFx0YXdhaXQgdGhpcy50b2tlblN0b3JlLnNldChvcHRzLmFjY291bnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb3JnO1xuXHRcdH1cblxuXHRcdHRocm93IGhhbmRsZVJlcXVlc3RFcnJvcih7IGxhYmVsOiAnRmFpbGVkIHRvIHN3aXRjaCBvcmcnLCByZXNwb25zZSB9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZW5kcyB0aGUgZGV2aWNlIGF1dGggY29kZSB0byB0aGUgcGxhdGZvcm0uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5hY2Nlc3NUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLmNvZGUgLSBUaGUgZGV2aWNlIGF1dGhvcml6YXRpb24gY29kZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHNlbmRBdXRoQ29kZShvcHRzKSB7XG5cdFx0aWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblxuXHRcdGNvbnN0IHsgYWNjZXNzVG9rZW4sIGNvZGUgfSA9IG9wdHM7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHtcblx0XHRcdGZvcm1EYXRhOiB7XG5cdFx0XHRcdGNvZGUsXG5cdFx0XHRcdGZyb206ICdjbGknXG5cdFx0XHR9LFxuXHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0XHRcdFx0QXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FjY2Vzc1Rva2VufWBcblx0XHRcdH0sXG5cdFx0XHRtZXRob2Q6ICdQT1NUJyxcblx0XHRcdHVybDogYCR7Z2V0RW5kcG9pbnRzKG9wdHMpLmRldmljZWF1dGh9YCxcblx0XHRcdHZhbGlkYXRlSlNPTjogdHJ1ZVxuXHRcdH0pO1xuXHRcdGNvbnN0IHsgYm9keSwgc3RhdHVzQ29kZSB9ID0gcmVzcG9uc2U7XG5cblx0XHRpZiAoc3RhdHVzQ29kZSA+PSA0MDAgfHwgIWJvZHkgfHwgIWJvZHkuc3VjY2VzcyB8fCAhYm9keS5yZXN1bHQgfHwgYm9keS5yZXN1bHQuZXhwaXJlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgaGFuZGxlUmVxdWVzdEVycm9yKHsgbGFiZWw6ICdGYWlsZWQgdG8gc2VuZCBkZXZpY2UgYXV0aCBjb2RlJywgcmVzcG9uc2UgfSk7XG5cdFx0fVxuXG5cdFx0bG9nKGBBdXRoIGNvZGUgc2VudCBzdWNjZXNzZnVsbHkgKHN0YXR1cyAke3N0YXR1c0NvZGV9KWApO1xuXHR9XG59XG5cbmV4cG9ydCB7XG5cdEF1dGgsXG5cblx0QXV0aGVudGljYXRvcixcblx0Q2xpZW50U2VjcmV0LFxuXHRPd25lclBhc3N3b3JkLFxuXHRQS0NFLFxuXHRTaWduZWRKV1QsXG5cblx0RmlsZVN0b3JlLFxuXHRNZW1vcnlTdG9yZSxcblx0U2VjdXJlU3RvcmUsXG5cdFRva2VuU3RvcmUsXG5cblx0ZW52aXJvbm1lbnRzLFxuXHRnZXRFbmRwb2ludHMsXG5cdHNlcnZlclxufTtcbiJdLCJmaWxlIjoiaW5kZXguanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkVycm9yIiwicHJlcGFyZVN0YWNrVHJhY2UiLCJyZXF1aXJlIiwibG9nIiwiYWxlcnQiLCJoaWdobGlnaHQiLCJtYWdlbnRhIiwibm90ZSIsInNub29wbG9nZyIsInN0eWxlcyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsIk9iamVjdCIsImRlZmluZVByb3BlcnRpZXMiLCJiYXNlVXJsIiwidmFsdWUiLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImVudiIsIm1lc3NhZ2VzIiwicGFzc3dvcmQiLCJwbGF0Zm9ybVVybCIsInJlYWxtIiwic2VjcmV0RmlsZSIsInNlcnZpY2VBY2NvdW50IiwidXNlcm5hbWUiLCJ0b2tlblN0b3JlIiwiVG9rZW5TdG9yZSIsIklOVkFMSURfUEFSQU1FVEVSIiwidG9rZW5TdG9yZVR5cGUiLCJ1bmRlZmluZWQiLCJTZWN1cmVTdG9yZSIsImUiLCJjb2RlIiwiU0VDVVJFX1NUT1JFX1VOQVZBSUxBQkxFIiwiRmlsZVN0b3JlIiwiTWVtb3J5U3RvcmUiLCJhcHBseURlZmF1bHRzIiwiZW52aXJvbm1lbnRzIiwiSU5WQUxJRF9WQUxVRSIsImNyZWF0ZUF1dGhlbnRpY2F0b3IiLCJhdXRoZW50aWNhdG9yIiwiQXV0aGVudGljYXRvciIsIklOVkFMSURfQVJVR01FTlQiLCJPd25lclBhc3N3b3JkIiwiQ2xpZW50U2VjcmV0IiwiU2lnbmVkSldUIiwiUEtDRSIsImdldEFjY291bnQiLCJhY2NvdW50TmFtZSIsImhhc2giLCJhY2NvdW50IiwiZ2V0IiwicHJvcCIsImV4cGlyZWQiLCJuYW1lIiwiZXhwaXJlcyIsInJlZnJlc2giLCJEYXRlIiwibm93IiwicmVzdWx0IiwiZ2V0VG9rZW4iLCJnZXRJbmZvIiwibGlzdCIsImxvZ2luIiwicmV2b2tlIiwiYWNjb3VudHMiLCJhbGwiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJyZXZva2VkIiwiY2xlYXIiLCJkZWxldGUiLCJlbnRyeSIsInVybCIsImxvZ291dCIsInRva2VucyIsImlkX3Rva2VuIiwic3RhdHVzIiwidmFsaWRhdGVKU09OIiwiZXJyIiwic2VydmVySW5mbyIsIndlbGxLbm93biIsInN3aXRjaE9yZyIsImFjY2Vzc1Rva2VuIiwib3JnSWQiLCJyZXNwb25zZSIsImZvcm1EYXRhIiwib3JnX2lkIiwiaGVhZGVycyIsIkFjY2VwdCIsIkF1dGhvcml6YXRpb24iLCJtZXRob2QiLCJzd2l0Y2hMb2dnZWRJbk9yZyIsImJvZHkiLCJzdGF0dXNDb2RlIiwiUkVRVUVTVF9GQUlMRUQiLCJzdWNjZXNzIiwib3JnIiwib3JnX25hbWUiLCJzZXQiLCJsYWJlbCIsInNlbmRBdXRoQ29kZSIsImZyb20iLCJkZXZpY2VhdXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQTs7QUFDQTs7Ozs7Ozs7QUF4QkE7QUFDQSxJQUFJLENBQUNBLEtBQUssQ0FBQ0MsaUJBQVgsRUFBOEI7QUFDN0JDLEVBQUFBLE9BQU8sQ0FBQyw2QkFBRCxDQUFQO0FBQ0E7O0FBdUJELE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFVLHdCQUFVLGNBQVYsQ0FBaEI7QUFDQSxNQUFNO0FBQUVDLEVBQUFBLEtBQUY7QUFBU0MsRUFBQUEsU0FBVDtBQUFvQkMsRUFBQUEsT0FBcEI7QUFBNkJDLEVBQUFBO0FBQTdCLElBQXNDQyxtQkFBVUMsTUFBdEQ7QUFFQTs7OztBQUdlLE1BQU1DLElBQU4sQ0FBVztBQUN6Qjs7Ozs7OztBQVFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkFDLEVBQUFBLFdBQVcsQ0FBQ0MsSUFBSSxHQUFHLEVBQVIsRUFB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XG5pZiAoIUVycm9yLnByZXBhcmVTdGFja1RyYWNlKSB7XG5cdHJlcXVpcmUoJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3RlcicpO1xufVxuXG5pbXBvcnQgRSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCBBdXRoZW50aWNhdG9yIGZyb20gJy4vYXV0aGVudGljYXRvcnMvYXV0aGVudGljYXRvcic7XG5pbXBvcnQgQ2xpZW50U2VjcmV0IGZyb20gJy4vYXV0aGVudGljYXRvcnMvY2xpZW50LXNlY3JldCc7XG5pbXBvcnQgT3duZXJQYXNzd29yZCBmcm9tICcuL2F1dGhlbnRpY2F0b3JzL293bmVyLXBhc3N3b3JkJztcbmltcG9ydCBQS0NFIGZyb20gJy4vYXV0aGVudGljYXRvcnMvcGtjZSc7XG5pbXBvcnQgU2lnbmVkSldUIGZyb20gJy4vYXV0aGVudGljYXRvcnMvc2lnbmVkLWp3dCc7XG5cbmltcG9ydCBGaWxlU3RvcmUgZnJvbSAnLi9zdG9yZXMvZmlsZS1zdG9yZSc7XG5pbXBvcnQgTWVtb3J5U3RvcmUgZnJvbSAnLi9zdG9yZXMvbWVtb3J5LXN0b3JlJztcbmltcG9ydCBTZWN1cmVTdG9yZSBmcm9tICcuL3N0b3Jlcy9zZWN1cmUtc3RvcmUnO1xuaW1wb3J0IFRva2VuU3RvcmUgZnJvbSAnLi9zdG9yZXMvdG9rZW4tc3RvcmUnO1xuXG5pbXBvcnQgZW52aXJvbm1lbnRzIGZyb20gJy4vZW52aXJvbm1lbnRzJztcbmltcG9ydCBnZXRFbmRwb2ludHMgZnJvbSAnLi9lbmRwb2ludHMnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuaW1wb3J0ICogYXMgc2VydmVyIGZyb20gJy4vc2VydmVyJztcblxuaW1wb3J0IHJlcXVlc3QgZnJvbSAnQGF4d2F5L2FtcGxpZnktcmVxdWVzdCc7XG5pbXBvcnQgeyBnZXRTZXJ2ZXJJbmZvLCBoYW5kbGVSZXF1ZXN0RXJyb3IgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdhbXBsaWZ5LWF1dGgnKTtcbmNvbnN0IHsgYWxlcnQsIGhpZ2hsaWdodCwgbWFnZW50YSwgbm90ZSB9ID0gc25vb3Bsb2dnLnN0eWxlcztcblxuLyoqXG4gKiBBdXRoZW50aWNhdGVzIHRoZSBtYWNoaW5lIGFuZCByZXRyZWl2ZXMgdGhlIGF1dGggdG9rZW4uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGgge1xuXHQvKipcblx0ICogVGhlIHN0b3JlIHRvIHBlcnNpc3QgdGhlIHRva2VuLlxuXHQgKlxuXHQgKiBAdHlwZSB7VG9rZW5TdG9yZX1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHR0b2tlblN0b3JlID0gbnVsbDtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIGluc3RhbmNlIGJ5IHNldHRpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYW5kIGNyZWF0aW5nIHRoZVxuXHQgKiB0b2tlbiBzdG9yZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byB1c2UgZm9yIGFsbCBvdXRnb2luZyByZXF1ZXN0cy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmNsaWVudElkXSAtIFRoZSBjbGllbnQgaWQgdG8gc3BlY2lmeSB3aGVuIGF1dGhlbnRpY2F0aW5nLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY2xpZW50U2VjcmV0XSAtIFRoZSBzZWNyZXQgdG9rZW4gdG8gdXNlIHRvIGF1dGhlbnRpY2F0ZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVudj1wcm9kXSAtIFRoZSBlbnZpcm9ubWVudCBuYW1lLiBNdXN0IGJlIGBkZXZgLCBgcHJlcHJvZGAsIG9yIGBwcm9kYC5cblx0ICogVGhlIGVudmlyb25tZW50IGlzIGEgc2hvcnRoYW5kIHdheSBvZiBzcGVjaWZ5aW5nIGEgQXh3YXkgZGVmYXVsdCBiYXNlIFVSTC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnNlY3VyZVNlcnZpY2VOYW1lPVwiQXh3YXkgQU1QTElGWSBBdXRoXCJdIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnN1bWVyXG5cdCAqIHVzaW5nIHRoaXMgbGlicmFyeSB3aGVuIHVzaW5nIHRoZSBcInNlY3VyZVwiIHRva2VuIHN0b3JlLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMucGFzc3dvcmRdIC0gVGhlIHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlLiBSZXF1aXJlcyBhIGB1c2VybmFtZWAuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5wbGF0Zm9ybVVybF0gLSBUaGUgcGxhdGZvcm0gVVJMIHVzZWQgdG8gZ2V0IHVzZXIgaW5mbyBhbmQgb3Jncy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnNlY3JldEZpbGVdIC0gVGhlIHBhdGggdG8gdGhlIGp3dCBzZWNyZXQgZmlsZS5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5zZXJ2aWNlQWNjb3VudD1mYWxzZV0gLSBXaGVuIGB0cnVlYCwgaW5kaWNhdGVzIGF1dGhlbnRpY2F0aW9uIGlzIGJlaW5nXG5cdCAqIHJlcXVlc3RlZCBieSBhIHNlcnZpY2UgaW5zdGVhZCBvZiBhIHVzZXIuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMudG9rZW5SZWZyZXNoVGhyZXNob2xkPTBdIC0gVGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUgYWNjZXNzXG5cdCAqIHRva2VuIGV4cGlyZXMgYW5kIHNob3VsZCBiZSByZWZyZXNoZWQuXG5cdCAqIEBwYXJhbSB7VG9rZW5TdG9yZX0gW29wdHMudG9rZW5TdG9yZV0gLSBBIHRva2VuIHN0b3JlIGluc3RhbmNlIGZvciBwZXJzaXN0aW5nIHRoZSB0b2tlbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy50b2tlblN0b3JlRGlyXSAtIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHRva2VuIHN0b3JlIGlzIHNhdmVkLiBSZXF1aXJlZFxuXHQgKiB3aGVuIHRoZSBgdG9rZW5TdG9yZVR5cGVgIGlzIGBzZWN1cmVgIG9yIGBmaWxlYC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnRva2VuU3RvcmVUeXBlPXNlY3VyZV0gLSBUaGUgdHlwZSBvZiBzdG9yZSB0byBwZXJzaXN0IHRoZSBhY2Nlc3MgdG9rZW4uXG5cdCAqIFBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlOiBgYXV0b2AsIGBzZWN1cmVgLCBgZmlsZWAsIG9yIGBtZW1vcnlgLiBJZiB2YWx1ZSBpcyBgYXV0b2AsIGl0IHdpbGxcblx0ICogYXR0ZW1wdCB0byB1c2UgYHNlY3VyZWAsIHRoZW4gYGZpbGVgLCB0aGVuIGBtZW1vcnlgLiBJZiBzZXQgdG8gYG51bGxgLCB0aGVuIGl0IHdpbGwgbm90XG5cdCAqIHBlcnNpc3QgdGhlIGFjY2VzcyB0b2tlbi5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVzZXJuYW1lXSAtIFRoZSB1c2VybmFtZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gUmVxdWlyZXMgYSBgcGFzc3dvcmRgLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG5cdFx0aWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRcdGJhc2VVcmw6ICAgICAgICB7IHZhbHVlOiBvcHRzLmJhc2VVcmwgfSxcblx0XHRcdGNsaWVudElkOiAgICAgICB7IHZhbHVlOiBvcHRzLmNsaWVudElkIH0sXG5cdFx0XHRjbGllbnRTZWNyZXQ6ICAgeyB2YWx1ZTogb3B0cy5jbGllbnRTZWNyZXQgfSxcblx0XHRcdGVudjogICAgICAgICAgICB7IHZhbHVlOiBvcHRzLmVudiB9LFxuXHRcdFx0bWVzc2FnZXM6ICAgICAgIHsgdmFsdWU6IG9wdHMubWVzc2FnZXMgfSxcblx0XHRcdHBhc3N3b3JkOiAgICAgICB7IHZhbHVlOiBvcHRzLnBhc3N3b3JkIH0sXG5cdFx0XHRwbGF0Zm9ybVVybDogICAgeyB2YWx1ZTogb3B0cy5wbGF0Zm9ybVVybCB9LFxuXHRcdFx0cmVhbG06ICAgICAgICAgIHsgdmFsdWU6IG9wdHMucmVhbG0gfSxcblx0XHRcdHNlY3JldEZpbGU6ICAgICB7IHZhbHVlOiBvcHRzLnNlY3JldEZpbGUgfSxcblx0XHRcdHNlcnZpY2VBY2NvdW50OiB7IHZhbHVlOiBvcHRzLnNlcnZpY2VBY2NvdW50IH0sXG5cdFx0XHR1c2VybmFtZTogICAgICAgeyB2YWx1ZTogb3B0cy51c2VybmFtZSB9XG5cdFx0fSk7XG5cblx0XHRpZiAob3B0cy50b2tlblN0b3JlKSB7XG5cdFx0XHRpZiAoIShvcHRzLnRva2VuU3RvcmUgaW5zdGFuY2VvZiBUb2tlblN0b3JlKSkge1xuXHRcdFx0XHR0aHJvdyBFLklOVkFMSURfUEFSQU1FVEVSKCdFeHBlY3RlZCB0aGUgdG9rZW4gc3RvcmUgdG8gYmUgYSBcIlRva2VuU3RvcmVcIiBpbnN0YW5jZScpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy50b2tlblN0b3JlID0gb3B0cy50b2tlblN0b3JlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB0b2tlblN0b3JlVHlwZSA9IG9wdHMudG9rZW5TdG9yZVR5cGUgPT09IHVuZGVmaW5lZCA/ICdzZWN1cmUnIDogb3B0cy50b2tlblN0b3JlVHlwZTtcblx0XHRcdHN3aXRjaCAodG9rZW5TdG9yZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYXV0byc6XG5cdFx0XHRcdGNhc2UgJ3NlY3VyZSc6XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdHRoaXMudG9rZW5TdG9yZSA9IG5ldyBTZWN1cmVTdG9yZShvcHRzKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuXHRcdFx0XHRcdFx0aWYgKHRva2VuU3RvcmVUeXBlID09PSAnYXV0bycpIHtcblx0XHRcdFx0XHRcdFx0Ly8gbGV0ICdhdXRvJyBmYWxsIHRocm91Z2hcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZS5jb2RlID09PSAnRVJSX0tFWVRBUl9OT1RfRk9VTkQnKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IEUuU0VDVVJFX1NUT1JFX1VOQVZBSUxBQkxFKCdTZWN1cmUgdG9rZW4gc3RvcmUgaXMgbm90IGF2YWlsYWJsZS5cXG5QbGVhc2UgcmVpbnN0YWxsIG9yIHJlYnVpbGQgdGhpcyBhcHBsaWNhdGlvbi4nKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRva2VuU3RvcmUgPSBuZXcgRmlsZVN0b3JlKG9wdHMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cdFx0XHRcdFx0XHRpZiAodG9rZW5TdG9yZVR5cGUgPT09ICdhdXRvJyAmJiBlLmNvZGUgPT09ICdFUlJfTUlTU0lOR19SRVFVSVJFRF9QQVJBTUVURVInKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGxldCAnYXV0bycgZmFsbCB0aHJvdWdoXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRjYXNlICdtZW1vcnknOlxuXHRcdFx0XHRcdHRoaXMudG9rZW5TdG9yZSA9IG5ldyBNZW1vcnlTdG9yZShvcHRzKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRW5zdXJlcyB0aGUgb3B0aW9ucyBjb250YWlucyB0aGUgY29uZmlndXJhYmxlIHNldHRpbmdzLiBWYWxpZGF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIGNvZGVcblx0ICogcmVxdWlyaW5nIHRoZSB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0YXBwbHlEZWZhdWx0cyhvcHRzID0ge30pIHtcblx0XHRpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW52ID0gb3B0cy5lbnYgfHwgdGhpcy5lbnYgfHwgJ3Byb2QnO1xuXHRcdGlmICghZW52aXJvbm1lbnRzW2Vudl0pIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9WQUxVRShgSW52YWxpZCBlbnZpcm9ubWVudDogJHtvcHRzLmVudiB8fCB0aGlzLmVudn1gKTtcblx0XHR9XG5cblx0XHRvcHRzLmJhc2VVcmwgICAgICAgID0gb3B0cy5iYXNlVXJsIHx8IHRoaXMuYmFzZVVybCB8fCBlbnZpcm9ubWVudHNbZW52XS5iYXNlVXJsO1xuXHRcdG9wdHMuY2xpZW50SWQgICAgICAgPSBvcHRzLmNsaWVudElkIHx8IHRoaXMuY2xpZW50SWQ7XG5cdFx0b3B0cy5jbGllbnRTZWNyZXQgICA9IG9wdHMuY2xpZW50U2VjcmV0IHx8IHRoaXMuY2xpZW50U2VjcmV0O1xuXHRcdG9wdHMuZW52ICAgICAgICAgICAgPSBlbnY7XG5cdFx0b3B0cy5tZXNzYWdlcyAgICAgICA9IG9wdHMubWVzc2FnZXMgfHwgdGhpcy5tZXNzYWdlcztcblx0XHRvcHRzLnBhc3N3b3JkICAgICAgID0gb3B0cy5wYXNzd29yZCB8fCB0aGlzLnBhc3N3b3JkO1xuXHRcdG9wdHMucGxhdGZvcm1VcmwgICAgPSBvcHRzLnBsYXRmb3JtVXJsIHx8IHRoaXMucGxhdGZvcm1VcmwgfHwgZW52aXJvbm1lbnRzW2Vudl0ucGxhdGZvcm1Vcmw7XG5cdFx0b3B0cy5yZWFsbSAgICAgICAgICA9IG9wdHMucmVhbG0gfHwgdGhpcy5yZWFsbTtcblx0XHRvcHRzLnNlY3JldEZpbGUgICAgID0gb3B0cy5zZWNyZXRGaWxlIHx8IHRoaXMuc2VjcmV0RmlsZTtcblx0XHRvcHRzLnNlcnZpY2VBY2NvdW50ID0gb3B0cy5zZXJ2aWNlQWNjb3VudCB8fCB0aGlzLnNlcnZpY2VBY2NvdW50O1xuXHRcdG9wdHMudG9rZW5TdG9yZSAgICAgPSB0aGlzLnRva2VuU3RvcmU7XG5cdFx0b3B0cy51c2VybmFtZSAgICAgICA9IG9wdHMudXNlcm5hbWUgfHwgdGhpcy51c2VybmFtZTtcblxuXHRcdHJldHVybiBvcHRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gYXV0aGV0bmljYXRvciBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgb3B0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtBdXRoZW50aWNhdG9yfSBbb3B0cy5hdXRoZW50aWNhdG9yXSAtIEFuIGF1dGhlbnRpY2F0b3IgaW5zdGFuY2UgdG8gdXNlLiBJZiBub3Rcblx0ICogc3BlY2lmaWVkLCBvbmUgd2lsbCBiZSBhdXRvLXNlbGVjdGVkIGJhc2VkIG9uIHRoZSBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuY2xpZW50U2VjcmV0XSAtIFRoZSBzZWNyZXQgdG9rZW4gdG8gdXNlIHRvIGF1dGhlbnRpY2F0ZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnBhc3N3b3JkXSAtIFRoZSBwYXNzd29yZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gUmVxdWlyZXMgYSBgdXNlcm5hbWVgLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc2VjcmV0RmlsZV0gLSBUaGUgcGF0aCB0byB0aGUgand0IHNlY3JldCBmaWxlLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLnNlcnZpY2VBY2NvdW50PWZhbHNlXSAtIFdoZW4gYHRydWVgLCBpbmRpY2F0ZXMgYXV0aGVudGljYXRpb24gaXMgYmVpbmdcblx0ICogcmVxdWVzdGVkIGJ5IGEgc2VydmljZSBpbnN0ZWFkIG9mIGEgdXNlci5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnVzZXJuYW1lXSAtIFRoZSB1c2VybmFtZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gUmVxdWlyZXMgYSBgcGFzc3dvcmRgLlxuXHQgKiBAcmV0dXJucyB7QXV0aGVudGljYXRvcn1cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNyZWF0ZUF1dGhlbnRpY2F0b3Iob3B0cyA9IHt9KSB7XG5cdFx0aWYgKG9wdHMuYXV0aGVudGljYXRvcikge1xuXHRcdFx0aWYgKCEob3B0cy5hdXRoZW50aWNhdG9yIGluc3RhbmNlb2YgQXV0aGVudGljYXRvcikpIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSVUdNRU5UKCdFeHBlY3RlZCBhdXRoZW50aWNhdG9yIHRvIGJlIGFuIEF1dGhlbnRpY2F0b3IgaW5zdGFuY2UuJyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3B0cy5hdXRoZW50aWNhdG9yO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb3B0cy51c2VybmFtZSA9PT0gJ3N0cmluZycgJiYgb3B0cy51c2VybmFtZSAmJiB0eXBlb2Ygb3B0cy5wYXNzd29yZCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiBuZXcgT3duZXJQYXNzd29yZChvcHRzKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9wdHMuY2xpZW50U2VjcmV0ID09PSAnc3RyaW5nJyAmJiBvcHRzLmNsaWVudFNlY3JldCkge1xuXHRcdFx0cmV0dXJuIG5ldyBDbGllbnRTZWNyZXQob3B0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBvcHRzLnNlY3JldEZpbGUgPT09ICdzdHJpbmcnICYmIG9wdHMuc2VjcmV0RmlsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBTaWduZWRKV1Qob3B0cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQS0NFKG9wdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgYWNjZXNzIHRva2VuLiBJZiB0aGUgYXV0aGVudGljYXRvciBpcyBpbnRlcmFjdGl2ZSBhbmQgdGhlIGF1dGhlbnRpY2F0b3IgaGFzIG5vdFxuXHQgKiB5ZXQgYXV0aGVudGljYXRlZCB3aXRoIHRoZSBzZXJ2ZXIsIGFuIGVycm9yIGlzIHRocm93bi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBvcHRzIC0gUmVxdWlyZWQgb3B0aW9ucyBvciBhIHN0cmluZyBjb250YWluaW5nIHRoZSBoYXNoIG9yIGFjY291bnRcblx0ICogbmFtZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMuYWNjb3VudE5hbWUgLSBUaGUgYWNjb3VudCBuYW1lIHRvIHJldHJpZXZlLlxuXHQgKiBAcGFyYW0ge0F1dGhlbnRpY2F0b3J9IFtvcHRzLmF1dGhlbnRpY2F0b3JdIC0gQW4gYXV0aGVudGljYXRvciBpbnN0YW5jZSB0byB1c2UuIElmIG5vdFxuXHQgKiBzcGVjaWZpZWQsIG9uZSB3aWxsIGJlIGF1dG8tc2VsZWN0ZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5iYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB0byBmaWx0ZXIgYnkuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5wbGF0Zm9ybVVybF0gLSBUaGUgcGxhdGZvcm0gVVJMIHVzZWQgdG8gZ2V0IHVzZXIgaW5mbyBhbmQgb3Jncy5cblx0ICogQHJldHVybnMge1Byb21pc2U8P09iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBnZXRBY2NvdW50KG9wdHMgPSB7fSkge1xuXHRcdGlmICghdGhpcy50b2tlblN0b3JlKSB7XG5cdFx0XHRsb2coJ0Nhbm5vdCBnZXQgYWNjb3VudCwgbm8gdG9rZW4gc3RvcmUnKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGxldCBhdXRoZW50aWNhdG9yO1xuXG5cdFx0aWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuXHRcdFx0b3B0cyA9IHRoaXMuYXBwbHlEZWZhdWx0cyh7IGFjY291bnROYW1lOiBvcHRzLCBoYXNoOiBvcHRzIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFwcGx5RGVmYXVsdHMob3B0cyk7XG5cdFx0XHRhdXRoZW50aWNhdG9yID0gdGhpcy5jcmVhdGVBdXRoZW50aWNhdG9yKG9wdHMpO1xuXHRcdFx0b3B0cy5oYXNoID0gYXV0aGVudGljYXRvci5oYXNoO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFjY291bnQgPSBhd2FpdCB0aGlzLnRva2VuU3RvcmUuZ2V0KG9wdHMpO1xuXG5cdFx0aWYgKGFjY291bnQpIHtcblx0XHRcdC8vIGNvcHkgb3ZlciB0aGUgY29ycmVjdCBhdXRoIHBhcmFtc1xuXHRcdFx0Zm9yIChjb25zdCBwcm9wIG9mIFsgJ2Jhc2VVcmwnLCAnY2xpZW50SWQnLCAncmVhbG0nLCAnZW52JyBdKSB7XG5cdFx0XHRcdGlmIChhY2NvdW50W3Byb3BdICYmIG9wdHNbcHJvcF0gIT09IGFjY291bnRbcHJvcF0pIHtcblx0XHRcdFx0XHRsb2coYE92ZXJyaWRpbmcgXCIke3Byb3B9XCIgYXV0aCBwYXJhbSB3aXRoIGFjY291bnQnczogJHtvcHRzW3Byb3BdfSAtPiAke2FjY291bnRbcHJvcF19YCk7XG5cdFx0XHRcdFx0b3B0c1twcm9wXSA9IGFjY291bnRbcHJvcF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF1dGhlbnRpY2F0b3IgPSB0aGlzLmNyZWF0ZUF1dGhlbnRpY2F0b3Iob3B0cyk7XG5cblx0XHRcdGlmIChhY2NvdW50LmV4cGlyZWQpIHtcblx0XHRcdFx0Ly8gcmVmcmVzaCB0aGUgYWNjZXNzIHRva2VuIGlmIHRoZSByZWZyZXNoIHRva2VuIGlzIHZhbGlkXG5cdFx0XHRcdGxvZyhgQWNjZXNzIHRva2VuIGZvciBhY2NvdW50ICR7YWNjb3VudC5uYW1lIHx8IGFjY291bnQuaGFzaH0gaXMgZXhwaXJlZGApO1xuXG5cdFx0XHRcdGlmIChhY2NvdW50LmV4cGlyZXMucmVmcmVzaCA8IERhdGUubm93KCkpIHtcblx0XHRcdFx0XHRsb2coYFVuYWJsZSB0byByZWZyZXNoIGFjY2VzcyB0b2tlbiBmb3IgYWNjb3VudCAke2FjY291bnQubmFtZSB8fCBhY2NvdW50Lmhhc2h9IGJlY2F1c2UgcmVmcmVzaCB0b2tlbiBpcyBhbHNvIGV4cGlyZWRgKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsb2coYFJlZnJlc2hpbmcgYWNjZXNzIHRva2VuIGZvciBhY2NvdW50ICR7YWNjb3VudC5uYW1lIHx8IGFjY291bnQuaGFzaH1gKTtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aGVudGljYXRvci5nZXRUb2tlbigpO1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LmFjY291bnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhd2FpdCBhdXRoZW50aWNhdG9yLmdldEluZm8oYWNjb3VudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCB2YWxpZCBhY2Nlc3MgdG9rZW5zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBsaXN0KCkge1xuXHRcdGlmICh0aGlzLnRva2VuU3RvcmUpIHtcblx0XHRcdHJldHVybiBhd2FpdCB0aGlzLnRva2VuU3RvcmUubGlzdCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogQXV0aGVudGljYXRlcyB1c2luZyB0aGUgY29uZmlndXJlZCBhdXRoZW50aWNhdG9yLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gW29wdC5hcHBdIC0gU3BlY2lmeSB0aGUgYXBwIHRvIG9wZW4gdGhlIGB0YXJnZXRgIHdpdGgsIG9yIGFuXG5cdCAqIGFycmF5IHdpdGggdGhlIGFwcCBhbmQgYXBwIGFyZ3VtZW50cy5cblx0ICogQHBhcmFtIHtBdXRoZW50aWNhdG9yfSBbb3B0cy5hdXRoZW50aWNhdG9yXSAtIEFuIGF1dGhlbnRpY2F0b3IgaW5zdGFuY2UgdG8gdXNlLiBJZiBub3Rcblx0ICogc3BlY2lmaWVkLCBvbmUgd2lsbCBiZSBhdXRvLXNlbGVjdGVkIGJhc2VkIG9uIHRoZSBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdG8gdXNlIGZvciBhbGwgb3V0Z29pbmcgcmVxdWVzdHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5jbGllbnRJZF0gLSBUaGUgY2xpZW50IGlkIHRvIHNwZWNpZnkgd2hlbiBhdXRoZW50aWNhdGluZy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmNvZGVdIC0gVGhlIGF1dGhlbnRpY2F0aW9uIGNvZGUgZnJvbSBhIHN1Y2Nlc3NmdWwgaW50ZXJhY3RpdmUgbG9naW4uXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lbnY9cHJvZF0gLSBUaGUgZW52aXJvbm1lbnQgbmFtZS4gTXVzdCBiZSBgZGV2YCwgYHByZXByb2RgLCBvciBgcHJvZGAuXG5cdCAqIFRoZSBlbnZpcm9ubWVudCBpcyBhIHNob3J0aGFuZCB3YXkgb2Ygc3BlY2lmeWluZyBhIEF4d2F5IGRlZmF1bHQgYmFzZSBVUkwuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMubWFudWFsPWZhbHNlXSAtIFdoZW4gYHRydWVgLCBpdCB3aWxsIHJldHVybiB0aGUgYXV0aCBVUkwgaW5zdGVhZCBvZlxuXHQgKiBsYXVuY2hpbmcgdGhlIGF1dGggVVJMIGluIHRoZSBkZWZhdWx0IGJyb3dzZXIuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5wbGF0Zm9ybVVybF0gLSBUaGUgcGxhdGZvcm0gVVJMIHVzZWQgdG8gZ2V0IHVzZXIgaW5mbyBhbmQgb3Jncy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnJlYWxtXSAtIFRoZSBuYW1lIG9mIHRoZSByZWFsbSB0byBhdXRoZW50aWNhdGUgd2l0aC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnRpbWVvdXRdIC0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdGltaW5nIG91dC5cblx0ICogRGVmYXVsdHMgdG8gdGhlIGBpbnRlcmFjdGl2ZUxvZ2luVGltZW91dGAgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMud2FpdD1mYWxzZV0gLSBXYWl0IGZvciB0aGUgb3BlbmVkIGFwcCB0byBleGl0IGJlZm9yZSBmdWxmaWxsaW5nIHRoZVxuXHQgKiBwcm9taXNlLiBJZiBgZmFsc2VgIGl0J3MgZnVsZmlsbGVkIGltbWVkaWF0ZWx5IHdoZW4gb3BlbmluZyB0aGUgYXBwLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSBSZXNvbHZlcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYWNjZXNzIHRva2VuLCBhY2NvdW50IG5hbWUsIGFuZFxuXHQgKiB1c2VyIGluZm8uXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBsb2dpbihvcHRzID0ge30pIHtcblx0XHR0aGlzLmFwcGx5RGVmYXVsdHMob3B0cyk7XG5cdFx0Y29uc3QgYXV0aGVudGljYXRvciA9IHRoaXMuY3JlYXRlQXV0aGVudGljYXRvcihvcHRzKTtcblx0XHRyZXR1cm4gYXdhaXQgYXV0aGVudGljYXRvci5sb2dpbihvcHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXZva2VzIGFsbCBvciBzcGVjaWZpYyBhdXRoZW50aWNhdGVkIGFjY291bnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFJlcXVpcmVkIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz58U3RyaW5nfSBvcHRzLmFjY291bnRzIC0gQSBsaXN0IG9mIGFjY291bnRzIG5hbWVzLlxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IG9wdHMuYWxsIC0gV2hlbiBgdHJ1ZWAsIHJldm9rZXMgYWxsIGFjY291bnRzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5Pn0gUmV0dXJucyBhIGxpc3Qgb2YgcmV2b2tlZCBjcmVkZW50aWFscy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHJldm9rZSh7IGFjY291bnRzLCBhbGwsIGJhc2VVcmwgfSA9IHt9KSB7XG5cdFx0aWYgKCF0aGlzLnRva2VuU3RvcmUpIHtcblx0XHRcdGxvZygnTm8gdG9rZW4gc3RvcmUsIHJldHVybmluZyBlbXB0eSBhcnJheScpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGlmICghYWxsICYmIHR5cGVvZiBhY2NvdW50cyAhPT0gJ3N0cmluZycgJiYgIUFycmF5LmlzQXJyYXkoYWNjb3VudHMpKSB7XG5cdFx0XHR0aHJvdyBFLklOVkFMSURfQVJHVU1FTlQoJ0V4cGVjdGVkIGFjY291bnRzIHRvIGJlIFwiYWxsXCIgb3IgYSBsaXN0IG9mIGFjY291bnRzJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFhbGwgJiYgIWFjY291bnRzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGxldCByZXZva2VkO1xuXHRcdGlmIChhbGwpIHtcblx0XHRcdHJldm9rZWQgPSBhd2FpdCB0aGlzLnRva2VuU3RvcmUuY2xlYXIoYmFzZVVybCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldm9rZWQgPSBhd2FpdCB0aGlzLnRva2VuU3RvcmUuZGVsZXRlKGFjY291bnRzLCBiYXNlVXJsKTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShyZXZva2VkKSkge1xuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiByZXZva2VkKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IGAke2dldEVuZHBvaW50cyhlbnRyeSkubG9nb3V0fT9pZF90b2tlbl9oaW50PSR7ZW50cnkudG9rZW5zLmlkX3Rva2VufWA7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHJlcXVlc3QoeyB1cmwsIHZhbGlkYXRlSlNPTjogdHJ1ZSB9KTtcblx0XHRcdFx0XHRsb2coYFN1Y2Nlc3NmdWxseSBsb2dnZWQgb3V0ICR7aGlnaGxpZ2h0KGVudHJ5Lm5hbWUpfSAke21hZ2VudGEoc3RhdHVzKX0gJHtub3RlKGAoJHtlbnRyeS5iYXNlVXJsfSwgJHtlbnRyeS5yZWFsbX0pYCl9YCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdGxvZyhgRmFpbGVkIHRvIGxvZyBvdXQgJHtoaWdobGlnaHQoZW50cnkubmFtZSl9ICR7YWxlcnQoZXJyLnN0YXR1cyl9ICR7bm90ZShgKCR7ZW50cnkuYmFzZVVybH0sICR7ZW50cnkucmVhbG19KWApfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldm9rZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRGlzY292ZXJzIGF2YWlsYWJsZSBlbmRwb2ludHMgYmFzZWQgb24gdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZlcidzIE9wZW5JRCBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gVmFyaW91cyBvcHRpb25zLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdG8gdXNlIGZvciBhbGwgb3V0Z29pbmcgcmVxdWVzdHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lbnY9cHJvZF0gLSBUaGUgZW52aXJvbm1lbnQgbmFtZS4gTXVzdCBiZSBgZGV2YCwgYHByZXByb2RgLCBvciBgcHJvZGAuXG5cdCAqIFRoZSBlbnZpcm9ubWVudCBpcyBhIHNob3J0aGFuZCB3YXkgb2Ygc3BlY2lmeWluZyBhIEF4d2F5IGRlZmF1bHQgYmFzZSBVUkwuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5yZWFsbV0gLSBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdG8gYXV0aGVudGljYXRlIHdpdGguXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy51cmxdIC0gQW4gb3B0aW9uYWwgVVJMIHRvIGRpc2NvdmVyIHRoZSBhdmFpbGFibGUgZW5kcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgc2VydmVySW5mbyhvcHRzID0ge30pIHtcblx0XHR0aGlzLmFwcGx5RGVmYXVsdHMob3B0cyk7XG5cblx0XHRsZXQgeyB1cmwgfSA9IG9wdHM7XG5cblx0XHRpZiAoIXVybCkge1xuXHRcdFx0dXJsID0gZ2V0RW5kcG9pbnRzKG9wdHMpLndlbGxLbm93bjtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXdhaXQgZ2V0U2VydmVySW5mbyh1cmwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN3aXRjaGVzIHRoZSBjdXJyZW50IG9yZ2FuaXphdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBWYXJpb3VzIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLmFjY2Vzc1Rva2VuIC0gVGhlIGFjY2VzcyB0b2tlbi5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLmFjY291bnRdIC0gVGhlIGFjY291bnQgb2JqZWN0LlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdG8gdXNlIGZvciBhbGwgb3V0Z29pbmcgcmVxdWVzdHMuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm9yZ0lkIC0gVGhlIG9yZyBpZC5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnBsYXRmb3JtVXJsXSAtIFRoZSBBeHdheSBQbGF0Zm9ybSBVUkwuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5yZWFsbV0gLSBUaGUgbmFtZSBvZiB0aGUgcmVhbG0gdG8gYXV0aGVudGljYXRlIHdpdGguXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IFJlc29sdmVzIHRoZSBzZWxlY3RlZCBvcmdhbml6YXRpb24gaW5mby5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHN3aXRjaE9yZyhvcHRzKSB7XG5cdFx0aWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0dGhyb3cgRS5JTlZBTElEX0FSR1VNRU5UKCdFeHBlY3RlZCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuYXBwbHlEZWZhdWx0cyhvcHRzKTtcblxuXHRcdGNvbnN0IHsgYWNjZXNzVG9rZW4sIG9yZ0lkIH0gPSBvcHRzO1xuXHRcdGxvZyhgU3dpdGNoaW5nIG9yZyB0byAke29yZ0lkfWApO1xuXG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KHtcblx0XHRcdGZvcm1EYXRhOiB7IG9yZ19pZDogb3JnSWQgfSxcblx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0QWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHRcdEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gXG5cdFx0XHR9LFxuXHRcdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0XHR1cmw6IGAke2dldEVuZHBvaW50cyhvcHRzKS5zd2l0Y2hMb2dnZWRJbk9yZ31gLFxuXHRcdFx0dmFsaWRhdGVKU09OOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgeyBib2R5LCBzdGF0dXMsIHN0YXR1c0NvZGUgfSA9IHJlc3BvbnNlO1xuXG5cdFx0aWYgKHN0YXR1c0NvZGUgPj0gMjAwICYmIHN0YXR1c0NvZGUgPCAzMDApIHtcblx0XHRcdGlmICghYm9keSkge1xuXHRcdFx0XHR0aHJvdyBFLlJFUVVFU1RfRkFJTEVEKGBTd2l0Y2ggb3JnIGZhaWxlZDogUmVzcG9uc2UgaGFzIG5vIGJvZHkgKCR7c3RhdHVzfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFib2R5LnN1Y2Nlc3MpIHtcblx0XHRcdFx0dGhyb3cgRS5SRVFVRVNUX0ZBSUxFRChgU3dpdGNoIG9yZyBmYWlsZWQ6IFJlcXVlc3Qgd2FzIG5vdCBzdWNjZXNzZnVsICgke3N0YXR1c30pYCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghYm9keS5yZXN1bHQpIHtcblx0XHRcdFx0dGhyb3cgRS5SRVFVRVNUX0ZBSUxFRChgU3dpdGNoIG9yZyBmYWlsZWQ6IFJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhIHJlc3VsdCAoJHtzdGF0dXN9KWApO1xuXHRcdFx0fVxuXG5cdFx0XHRsb2coJ1N3aXRjaCBvcmcgc3VjY2Vzc2Z1bDonKTtcblx0XHRcdGxvZyhib2R5LnJlc3VsdCk7XG5cblx0XHRcdGNvbnN0IG9yZyA9IHtcblx0XHRcdFx0bmFtZTogICBib2R5LnJlc3VsdC5vcmdfbmFtZSxcblx0XHRcdFx0b3JnX2lkOiBib2R5LnJlc3VsdC5vcmdfaWRcblx0XHRcdH07XG5cblx0XHRcdGlmIChvcHRzLmFjY291bnQgJiYgdHlwZW9mIG9wdHMuYWNjb3VudCA9PT0gJ29iamVjdCcgJiYgdGhpcy50b2tlblN0b3JlKSB7XG5cdFx0XHRcdG9wdHMuYWNjb3VudC5vcmcgPSBvcmc7XG5cdFx0XHRcdGF3YWl0IHRoaXMudG9rZW5TdG9yZS5zZXQob3B0cy5hY2NvdW50KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9yZztcblx0XHR9XG5cblx0XHR0aHJvdyBoYW5kbGVSZXF1ZXN0RXJyb3IoeyBsYWJlbDogJ0ZhaWxlZCB0byBzd2l0Y2ggb3JnJywgcmVzcG9uc2UgfSk7XG5cdH1cblxuXHQvKipcblx0ICogU2VuZHMgdGhlIGRldmljZSBhdXRoIGNvZGUgdG8gdGhlIHBsYXRmb3JtLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtTdHJpbmd9IG9wdHMuYWNjZXNzVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5jb2RlIC0gVGhlIGRldmljZSBhdXRob3JpemF0aW9uIGNvZGUuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBzZW5kQXV0aENvZGUob3B0cykge1xuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHR0aGlzLmFwcGx5RGVmYXVsdHMob3B0cyk7XG5cblx0XHRjb25zdCB7IGFjY2Vzc1Rva2VuLCBjb2RlIH0gPSBvcHRzO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCh7XG5cdFx0XHRmb3JtRGF0YToge1xuXHRcdFx0XHRjb2RlLFxuXHRcdFx0XHRmcm9tOiAnY2xpJ1xuXHRcdFx0fSxcblx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0QWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHRcdEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gXG5cdFx0XHR9LFxuXHRcdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0XHR1cmw6IGAke2dldEVuZHBvaW50cyhvcHRzKS5kZXZpY2VhdXRofWAsXG5cdFx0XHR2YWxpZGF0ZUpTT046IHRydWVcblx0XHR9KTtcblx0XHRjb25zdCB7IGJvZHksIHN0YXR1c0NvZGUgfSA9IHJlc3BvbnNlO1xuXG5cdFx0aWYgKHN0YXR1c0NvZGUgPj0gNDAwIHx8ICFib2R5IHx8ICFib2R5LnN1Y2Nlc3MgfHwgIWJvZHkucmVzdWx0IHx8IGJvZHkucmVzdWx0LmV4cGlyZWQgPT09IHRydWUpIHtcblx0XHRcdHRocm93IGhhbmRsZVJlcXVlc3RFcnJvcih7IGxhYmVsOiAnRmFpbGVkIHRvIHNlbmQgZGV2aWNlIGF1dGggY29kZScsIHJlc3BvbnNlIH0pO1xuXHRcdH1cblxuXHRcdGxvZyhgQXV0aCBjb2RlIHNlbnQgc3VjY2Vzc2Z1bGx5IChzdGF0dXMgJHtzdGF0dXNDb2RlfSlgKTtcblx0fVxufVxuXG5leHBvcnQge1xuXHRBdXRoLFxuXG5cdEF1dGhlbnRpY2F0b3IsXG5cdENsaWVudFNlY3JldCxcblx0T3duZXJQYXNzd29yZCxcblx0UEtDRSxcblx0U2lnbmVkSldULFxuXG5cdEZpbGVTdG9yZSxcblx0TWVtb3J5U3RvcmUsXG5cdFNlY3VyZVN0b3JlLFxuXHRUb2tlblN0b3JlLFxuXG5cdGVudmlyb25tZW50cyxcblx0Z2V0RW5kcG9pbnRzLFxuXHRzZXJ2ZXJcbn07XG4iXSwiZmlsZSI6ImluZGV4LmpzIn0=

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

var _pluralize = _interopRequireDefault(require("pluralize"));
var _snooplogg = _interopRequireDefault(require("snooplogg"));

@@ -18,5 +20,2 @@

const {
pluralize
} = _snooplogg.default;
const {
log

@@ -213,3 +212,3 @@ } = (0, _snooplogg.default)('amplify-auth:token-store');

const len = entries.length;
log(`Scanning ${highlight(len)} ${pluralize('token', len)} for accountName=${highlight(accountName)} hash=${highlight(hash)} baseUrl=${highlight(baseUrl)}`);
log(`Scanning ${highlight(len)} ${(0, _pluralize.default)('token', len)} for accountName=${highlight(accountName)} hash=${highlight(hash)} baseUrl=${highlight(baseUrl)}`);

@@ -281,3 +280,3 @@ for (let i = 0; i < len; i++) {

log(`Purged ${highlight(count)} ${pluralize('entry', count)}`);
log(`Purged ${highlight(count)} ${(0, _pluralize.default)('entry', count)}`);
return entries;

@@ -324,2 +323,2 @@ }

exports.default = TokenStore;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy90b2tlbi1zdG9yZS5qcyJdLCJuYW1lcyI6WyJwbHVyYWxpemUiLCJzbm9vcGxvZ2ciLCJsb2ciLCJoaWdobGlnaHQiLCJzdHlsZXMiLCJwcm90b1JlZ0V4cCIsIlRva2VuU3RvcmUiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsInRva2VuUmVmcmVzaFRocmVzaG9sZCIsInVuZGVmaW5lZCIsInRocmVzaG9sZCIsInBhcnNlSW50IiwiaXNOYU4iLCJJTlZBTElEX1BBUkFNRVRFUiIsIklOVkFMSURfUkFOR0UiLCJjbGVhciIsImJhc2VVcmwiLCJlbnRyaWVzIiwicmVtb3ZlZCIsIl9jbGVhciIsImxpc3QiLCJlbnRyeSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJyZXBsYWNlIiwiaSIsImxlbmd0aCIsInNwbGljZSIsInB1c2giLCJkZWxldGUiLCJhY2NvdW50cyIsIl9kZWxldGUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsIm5hbWUiLCJnZXQiLCJhY2NvdW50TmFtZSIsImhhc2giLCJNSVNTSU5HX1JFUVVJUkVEX1BBUkFNRVRFUiIsImxlbiIsInB1cmdlIiwiY291bnQiLCJleHBpcmVzIiwidG9rZW5zIiwibm93IiwiRGF0ZSIsImFjY2VzcyIsInJlZnJlc2giLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJzZXQiLCJkYXRhIiwiX3NldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBZ0JDLGtCQUF0QjtBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFVLHdCQUFVLDBCQUFWLENBQWhCO0FBQ0EsTUFBTTtBQUFFQyxFQUFBQTtBQUFGLElBQWdCRixtQkFBVUcsTUFBaEM7QUFFQTs7Ozs7QUFJQSxNQUFNQyxXQUFXLEdBQUcsU0FBcEI7QUFFQTs7OztBQUdlLE1B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QjtBQUNBOztBQUoyQyxXQUE3QztBQU1BOztBQUNEO0FBQ0E7O0FBQ0RILE1BQUFBLEtBQUs7QUFDTDFCLE1BQUFBLE9BQU8sQ0FBQ1csTUFBUixDQUFlRixDQUFDLEVBQWhCLEVBQW9CLENBQXBCO0FBQ0E7O0FBRUQzQixJQUFBQSxHQUFHLENBQUUsVUFBU0MsU0FBUyxDQUFDMkMsS0FBRCxDQUFRLElBQUc5QyxTQUFTLENBQUMsT0FBRCxFQUFVOEMsS0FBVixDQUFpQixFQUF6RCxDQUFIO0FBRUEsV0FBTzFCLE9BQVA7QUFDQTtBQUVEOztBQUNBOzs7Ozs7Ozs7QUFPQSxRQUFNbUMsR0FBTixDQUFVQyxJQUFWLEVBQWdCLENBRWYsQ0FGRCxDQUNDOztBQUdEOzs7Ozs7Ozs7QUFPQSxRQUFNQyxJQUFOLENBQVdELElBQVgsRUFBaUI7QUFDaEIsVUFBTXBDLE9BQU8sR0FBRyxNQUFNLEtBQUtHLElBQUwsRUFBdEI7O0FBRUEsU0FBSyxJQUFJTSxDQUFDLEdBQUcsQ0FBUixFQUFXZSxHQUFHLEdBQUd4QixPQUFPLENBQUNVLE1BQTlCLEVBQXNDRCxDQUFDLEdBQUdlLEdBQTFDLEVBQStDZixDQUFDLEVBQWhELEVBQW9EO0FBQ25ELFVBQUlULE9BQU8sQ0FBQ1MsQ0FBRCxDQUFQLENBQVdWLE9BQVgsS0FBdUJxQyxJQUFJLENBQUNyQyxPQUE1QixJQUF1Q0MsT0FBTyxDQUFDUyxDQUFELENBQVAsQ0FBV1UsSUFBWCxLQUFvQmlCLElBQUksQ0FBQ2pCLElBQXBFLEVBQTBFO0FBQ3pFbkIsUUFBQUEsT0FBTyxDQUFDVyxNQUFSLENBQWVGLENBQWYsRUFBa0IsQ0FBbEI7QUFDQTtBQUNBO0FBQ0Q7O0FBRURULElBQUFBLE9BQU8sQ0FBQ1ksSUFBUixDQUFhd0IsSUFBYjtBQUNBLFdBQU9wQyxPQUFQO0FBQ0E7O0FBN084QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmltcG9ydCBFIGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgc25vb3Bsb2dnIGZyb20gJ3Nub29wbG9nZyc7XG5cbmNvbnN0IHsgcGx1cmFsaXplIH0gPSBzbm9vcGxvZ2c7XG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdhbXBsaWZ5LWF1dGg6dG9rZW4tc3RvcmUnKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gPSBzbm9vcGxvZ2cuc3R5bGVzO1xuXG4vKipcbiAqIEEgcmVnZXggdG8gbWF0Y2ggYSBVUkwgcHJvdG9jb2wuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCBwcm90b1JlZ0V4cCA9IC9eLipcXC9cXC8vO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHRva2VuIHN0b3JhZ2UgYmFja2VuZHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuU3RvcmUge1xuXHQvKipcblx0ICogVGhlIGFnZSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICpcblx0ICogQHR5cGUge051bWJlcn1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHR0b2tlblJlZnJlc2hUaHJlc2hvbGQgPSAwO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZmlsZSBzdG9yZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQ9MF0gLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3Ncblx0ICogdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAob3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgdGhyZXNob2xkID0gcGFyc2VJbnQob3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQsIDEwKTtcblx0XHRcdGlmIChpc05hTih0aHJlc2hvbGQpKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9QQVJBTUVURVIoJ0V4cGVjdGVkIHRva2VuIHJlZnJlc2ggdGhyZXNob2xkIHRvIGJlIGEgbnVtYmVyIG9mIHNlY29uZHMnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRocmVzaG9sZCA8IDApIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX1JBTkdFKCdUb2tlbiByZWZyZXNoIHRocmVzaG9sZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvJyk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9rZW5SZWZyZXNoVGhyZXNob2xkID0gdGhyZXNob2xkICogMTAwMDtcblx0XHR9XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgdG9rZW5zLiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSBvdmVyd3JpdHRlbi5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgY2xlYXIoYmFzZVVybCkge1xuXHRcdHJldHVybiB7IGVudHJpZXM6IFtdLCByZW1vdmVkOiBbXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRva2Vucy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgX2NsZWFyKGJhc2VVcmwpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG5cblx0XHRpZiAoIWJhc2VVcmwpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZW50cnksICdleHBpcmVkJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7IGVudHJpZXM6IFtdLCByZW1vdmVkOiBlbnRyaWVzIH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVtb3ZlZCA9IFtdO1xuXHRcdGJhc2VVcmwgPSBiYXNlVXJsLnJlcGxhY2UoL14uKlxcL1xcLy8sICcnKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChlbnRyaWVzW2ldLmJhc2VVcmwucmVwbGFjZShwcm90b1JlZ0V4cCwgJycpID09PSBiYXNlVXJsKSB7XG5cdFx0XHRcdGNvbnN0IGVudHJ5ID0gZW50cmllcy5zcGxpY2UoaS0tLCAxKVswXTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVudHJ5LCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdHJlbW92ZWQucHVzaChlbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZW50cmllcywgcmVtb3ZlZCB9O1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSB0b2tlbiBmcm9tIHRoZSBzdG9yZS4gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBhY2NvdW50cyAtIFRoZSBhY2NvdW50IG5hbWUocykgdG8gZGVsZXRlLlxuIFx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBkZWxldGUoYWNjb3VudHMsIGJhc2VVcmwpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gYWNjb3VudHMgLSBUaGUgYWNjb3VudCBuYW1lKHMpIHRvIGRlbGV0ZS5cbiBcdCAqIEBwYXJhbSB7U3RyaW5nfSBbYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgX2RlbGV0ZShhY2NvdW50cywgYmFzZVVybCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblx0XHRjb25zdCByZW1vdmVkID0gW107XG5cblx0XHRpZiAoYmFzZVVybCkge1xuXHRcdFx0YmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgvXi4qXFwvXFwvLywgJycpO1xuXHRcdH1cblxuXHRcdGlmICghQXJyYXkuaXNBcnJheShhY2NvdW50cykpIHtcblx0XHRcdGFjY291bnRzID0gWyBhY2NvdW50cyBdO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFjY291bnRzLmluY2x1ZGVzKGVudHJpZXNbaV0ubmFtZSkgJiYgKCFiYXNlVXJsIHx8IGVudHJpZXNbaV0uYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykgPT09IGJhc2VVcmwpKSB7XG5cdFx0XHRcdGNvbnN0IGVudHJ5ID0gZW50cmllcy5zcGxpY2UoaS0tLCAxKVswXTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVudHJ5LCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdHJlbW92ZWQucHVzaChlbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZW50cmllcywgcmVtb3ZlZCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJlaXZlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVmFyaW91cyBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmFjY291bnROYW1lIC0gVGhlIGFjY291bnQgbmFtZSB0byBnZXQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB0aGUgdG9rZW4gb3IgYHVuZGVmaW5lZGAgaWYgbm90IHNldC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldCh7IGFjY291bnROYW1lLCBiYXNlVXJsLCBoYXNoIH0gPSB7fSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblxuXHRcdGlmIChiYXNlVXJsKSB7XG5cdFx0XHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKTtcblx0XHR9XG5cblx0XHRpZiAoIWFjY291bnROYW1lICYmICFoYXNoKSB7XG5cdFx0XHR0aHJvdyBFLk1JU1NJTkdfUkVRVUlSRURfUEFSQU1FVEVSKCdNdXN0IHNwZWNpZnkgZWl0aGVyIHRoZSBhY2NvdW50IG5hbWUgb3IgYXV0aGVudGljYXRvciBoYXNoJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuID0gZW50cmllcy5sZW5ndGg7XG5cdFx0bG9nKGBTY2FubmluZyAke2hpZ2hsaWdodChsZW4pfSAke3BsdXJhbGl6ZSgndG9rZW4nLCBsZW4pfSBmb3IgYWNjb3VudE5hbWU9JHtoaWdobGlnaHQoYWNjb3VudE5hbWUpfSBoYXNoPSR7aGlnaGxpZ2h0KGhhc2gpfSBiYXNlVXJsPSR7aGlnaGxpZ2h0KGJhc2VVcmwpfWApO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCgoYWNjb3VudE5hbWUgJiYgZW50cmllc1tpXS5uYW1lID09PSBhY2NvdW50TmFtZSkgfHwgKGhhc2ggJiYgZW50cmllc1tpXS5oYXNoID09PSBoYXNoKSkgJiYgKCFiYXNlVXJsIHx8IGVudHJpZXNbaV0uYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKSA9PT0gYmFzZVVybCkpIHtcblx0XHRcdFx0bG9nKGBGb3VuZCBhY2NvdW50IHRva2VuczogJHtoaWdobGlnaHQoZW50cmllc1tpXS5uYW1lKX1gKTtcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmVpdmVzIGFsbCB0b2tlbnMgZnJvbSB0aGUgc3RvcmUuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59IFJlc29sdmVzIGFuIGFycmF5IG9mIHRva2Vucy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxpc3QoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgbGlzdCBvZiB0b2tlbnMgaXMgdmFsaWQgYW5kIGRvZXMgbm90IGNvbnRhaW4gYW55IGV4cGlyZWQgdG9rZW5zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBlbnRyaWVzIC0gQW4gYXJyYXkgb2YgdG9rZW5zLlxuXHQgKiBAcmV0dXJucyB7QXJyYXkuPE9iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cHVyZ2UoZW50cmllcykge1xuXHRcdGlmICghZW50cmllcykge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IDA7XG5cblx0XHQvLyBsb29wIG92ZXIgZWFjaCBlbnRyeSBhbmQgcmVtb3ZlIGFueSBleHBpcmVkIHRva2Vuc1xuXHRcdC8vIE5PVEU6IHRoaXMgY29kZSBpbnRlbnRpb25hbGx5IGNoZWNrZXMgYGVudHJpZXMubGVuZ3RoYCBlYWNoIGxvb3AgaW5zdGVhZCBvZiBjYWNoaW5nIHRoZVxuXHRcdC8vIGxlbmd0aCBzaW5jZSBzcGxpY2UoKSBzaHJpbmtzIHRoZSBhcnJheSBsZW5ndGhcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHsgZXhwaXJlcywgdG9rZW5zIH0gPSBlbnRyaWVzW2ldO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChleHBpcmVzICYmICgoZXhwaXJlcy5hY2Nlc3MgPiAobm93ICsgdGhpcy50b2tlblJlZnJlc2hUaHJlc2hvbGQpKSB8fCAoZXhwaXJlcy5yZWZyZXNoID4gbm93KSkpIHtcblx0XHRcdFx0Ly8gbm90IGV4cGlyZWRcblx0XHRcdFx0aWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVudHJpZXNbaV0sICdleHBpcmVkJykpIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZW50cmllc1tpXSwgJ2V4cGlyZWQnLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGlyZXMuYWNjZXNzIDwgRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvdW50Kys7XG5cdFx0XHRlbnRyaWVzLnNwbGljZShpLS0sIDEpO1xuXHRcdH1cblxuXHRcdGxvZyhgUHVyZ2VkICR7aGlnaGxpZ2h0KGNvdW50KX0gJHtwbHVyYWxpemUoJ2VudHJ5JywgY291bnQpfWApO1xuXG5cdFx0cmV0dXJuIGVudHJpZXM7XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvKipcblx0ICogU2F2ZXMgYWNjb3VudCBjcmVkZW50aWFscy4gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIHRva2VuIGRhdGEuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIHNldChkYXRhKSB7XG5cdFx0Ly8gbm9vcFxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIGFjY291bnQgY3JlZGVudGlhbHMuIElmIGV4aXN0cywgdGhlIG9sZCBvbmUgaXMgZGVsZXRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgdG9rZW4gZGF0YS5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX3NldChkYXRhKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChlbnRyaWVzW2ldLmJhc2VVcmwgPT09IGRhdGEuYmFzZVVybCAmJiBlbnRyaWVzW2ldLm5hbWUgPT09IGRhdGEubmFtZSkge1xuXHRcdFx0XHRlbnRyaWVzLnNwbGljZShpLCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZW50cmllcy5wdXNoKGRhdGEpO1xuXHRcdHJldHVybiBlbnRyaWVzO1xuXHR9XG59XG4iXSwiZmlsZSI6InN0b3Jlcy90b2tlbi1zdG9yZS5qcyJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0b3Jlcy90b2tlbi1zdG9yZS5qcyJdLCJuYW1lcyI6WyJsb2ciLCJoaWdobGlnaHQiLCJzbm9vcGxvZ2ciLCJzdHlsZXMiLCJwcm90b1JlZ0V4cCIsIlRva2VuU3RvcmUiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJFIiwiSU5WQUxJRF9BUkdVTUVOVCIsInRva2VuUmVmcmVzaFRocmVzaG9sZCIsInVuZGVmaW5lZCIsInRocmVzaG9sZCIsInBhcnNlSW50IiwiaXNOYU4iLCJJTlZBTElEX1BBUkFNRVRFUiIsIklOVkFMSURfUkFOR0UiLCJjbGVhciIsImJhc2VVcmwiLCJlbnRyaWVzIiwicmVtb3ZlZCIsIl9jbGVhciIsImxpc3QiLCJlbnRyeSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJyZXBsYWNlIiwiaSIsImxlbmd0aCIsInNwbGljZSIsInB1c2giLCJkZWxldGUiLCJhY2NvdW50cyIsIl9kZWxldGUiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlcyIsIm5hbWUiLCJnZXQiLCJhY2NvdW50TmFtZSIsImhhc2giLCJNSVNTSU5HX1JFUVVJUkVEX1BBUkFNRVRFUiIsImxlbiIsInB1cmdlIiwiY291bnQiLCJleHBpcmVzIiwidG9rZW5zIiwibm93IiwiRGF0ZSIsImFjY2VzcyIsInJlZnJlc2giLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJzZXQiLCJkYXRhIiwiX3NldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBVSx3QkFBVSwwQkFBVixDQUFoQjtBQUNBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFnQkMsbUJBQVVDLE1BQWhDO0FBRUE7Ozs7O0FBSUEsTUFBTUMsV0FBVyxHQUFHLFNBQXBCO0FBRUE7Ozs7QUFHZSxNQUFNQyxVQUFOLENBQWlCO0FBQy9COzs7Ozs7O0FBUUE7Ozs7Ozs7O0FBUUFDLEVB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QUs7QUFDTDFCLE1BQUFBLE9BQU8sQ0FBQ1csTUFBUixDQUFlRixDQUFDLEVBQWhCLEVBQW9CLENBQXBCO0FBQ0E7O0FBRUQ1QixJQUFBQSxHQUFHLENBQUUsVUFBU0MsU0FBUyxDQUFDNEMsS0FBRCxDQUFRLElBQUcsd0JBQVUsT0FBVixFQUFtQkEsS0FBbkIsQ0FBMEIsRUFBekQsQ0FBSDtBQUVBLFdBQU8xQixPQUFQO0FBQ0E7QUFFRDs7QUFDQTs7Ozs7Ozs7O0FBT0EsUUFBTW1DLEdBQU4sQ0FBVUMsSUFBVixFQUFnQixDQUVmLENBRkQsQ0FDQzs7QUFHRDs7Ozs7Ozs7O0FBT0EsUUFBTUMsSUFBTixDQUFXRCxJQUFYLEVBQWlCO0FBQ2hCLFVBQU1wQyxPQUFPLEdBQUcsTUFBTSxLQUFLRyxJQUFMLEVBQXRCOztBQUVBLFNBQUssSUFBSU0sQ0FBQyxHQUFHLENBQVIsRUFBV2UsR0FBRyxHQUFHeEIsT0FBTyxDQUFDVSxNQUE5QixFQUFzQ0QsQ0FBQyxHQUFHZSxHQUExQyxFQUErQ2YsQ0FBQyxFQUFoRCxFQUFvRDtBQUNuRCxVQUFJVCxPQUFPLENBQUNTLENBQUQsQ0FBUCxDQUFXVixPQUFYLEtBQXVCcUMsSUFBSSxDQUFDckMsT0FBNUIsSUFBdUNDLE9BQU8sQ0FBQ1MsQ0FBRCxDQUFQLENBQVdVLElBQVgsS0FBb0JpQixJQUFJLENBQUNqQixJQUFwRSxFQUEwRTtBQUN6RW5CLFFBQUFBLE9BQU8sQ0FBQ1csTUFBUixDQUFlRixDQUFmLEVBQWtCLENBQWxCO0FBQ0E7QUFDQTtBQUNEOztBQUVEVCxJQUFBQSxPQUFPLENBQUNZLElBQVIsQ0FBYXdCLElBQWI7QUFDQSxXQUFPcEMsT0FBUDtBQUNBOztBQTdPOEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG5pbXBvcnQgRSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHBsdXJhbGl6ZSBmcm9tICdwbHVyYWxpemUnO1xuaW1wb3J0IHNub29wbG9nZyBmcm9tICdzbm9vcGxvZ2cnO1xuXG5jb25zdCB7IGxvZyB9ID0gc25vb3Bsb2dnKCdhbXBsaWZ5LWF1dGg6dG9rZW4tc3RvcmUnKTtcbmNvbnN0IHsgaGlnaGxpZ2h0IH0gPSBzbm9vcGxvZ2cuc3R5bGVzO1xuXG4vKipcbiAqIEEgcmVnZXggdG8gbWF0Y2ggYSBVUkwgcHJvdG9jb2wuXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG5jb25zdCBwcm90b1JlZ0V4cCA9IC9eLipcXC9cXC8vO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHRva2VuIHN0b3JhZ2UgYmFja2VuZHMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuU3RvcmUge1xuXHQvKipcblx0ICogVGhlIGFnZSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICpcblx0ICogQHR5cGUge051bWJlcn1cblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHR0b2tlblJlZnJlc2hUaHJlc2hvbGQgPSAwO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgZmlsZSBzdG9yZS5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIFZhcmlvdXMgb3B0aW9ucy5cblx0ICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQ9MF0gLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBhY2Nlc3Ncblx0ICogdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIGJlIHJlZnJlc2hlZC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuXHRcdGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHRocm93IEUuSU5WQUxJRF9BUkdVTUVOVCgnRXhwZWN0ZWQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRpZiAob3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgdGhyZXNob2xkID0gcGFyc2VJbnQob3B0cy50b2tlblJlZnJlc2hUaHJlc2hvbGQsIDEwKTtcblx0XHRcdGlmIChpc05hTih0aHJlc2hvbGQpKSB7XG5cdFx0XHRcdHRocm93IEUuSU5WQUxJRF9QQVJBTUVURVIoJ0V4cGVjdGVkIHRva2VuIHJlZnJlc2ggdGhyZXNob2xkIHRvIGJlIGEgbnVtYmVyIG9mIHNlY29uZHMnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRocmVzaG9sZCA8IDApIHtcblx0XHRcdFx0dGhyb3cgRS5JTlZBTElEX1JBTkdFKCdUb2tlbiByZWZyZXNoIHRocmVzaG9sZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvJyk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMudG9rZW5SZWZyZXNoVGhyZXNob2xkID0gdGhyZXNob2xkICogMTAwMDtcblx0XHR9XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvKipcblx0ICogUmVtb3ZlcyBhbGwgdG9rZW5zLiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSBvdmVyd3JpdHRlbi5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgY2xlYXIoYmFzZVVybCkge1xuXHRcdHJldHVybiB7IGVudHJpZXM6IFtdLCByZW1vdmVkOiBbXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYWxsIHRva2Vucy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgX2NsZWFyKGJhc2VVcmwpIHtcblx0XHRjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG5cblx0XHRpZiAoIWJhc2VVcmwpIHtcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZW50cnksICdleHBpcmVkJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7IGVudHJpZXM6IFtdLCByZW1vdmVkOiBlbnRyaWVzIH07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVtb3ZlZCA9IFtdO1xuXHRcdGJhc2VVcmwgPSBiYXNlVXJsLnJlcGxhY2UoL14uKlxcL1xcLy8sICcnKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChlbnRyaWVzW2ldLmJhc2VVcmwucmVwbGFjZShwcm90b1JlZ0V4cCwgJycpID09PSBiYXNlVXJsKSB7XG5cdFx0XHRcdGNvbnN0IGVudHJ5ID0gZW50cmllcy5zcGxpY2UoaS0tLCAxKVswXTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVudHJ5LCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdHJlbW92ZWQucHVzaChlbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZW50cmllcywgcmVtb3ZlZCB9O1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSB0b2tlbiBmcm9tIHRoZSBzdG9yZS4gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBhY2NvdW50cyAtIFRoZSBhY2NvdW50IG5hbWUocykgdG8gZGVsZXRlLlxuIFx0ICogQHBhcmFtIHtTdHJpbmd9IFtiYXNlVXJsXSAtIFRoZSBiYXNlIFVSTCB1c2VkIHRvIGZpbHRlciBhY2NvdW50cy5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRhc3luYyBkZWxldGUoYWNjb3VudHMsIGJhc2VVcmwpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gYWNjb3VudHMgLSBUaGUgYWNjb3VudCBuYW1lKHMpIHRvIGRlbGV0ZS5cbiBcdCAqIEBwYXJhbSB7U3RyaW5nfSBbYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgX2RlbGV0ZShhY2NvdW50cywgYmFzZVVybCkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblx0XHRjb25zdCByZW1vdmVkID0gW107XG5cblx0XHRpZiAoYmFzZVVybCkge1xuXHRcdFx0YmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgvXi4qXFwvXFwvLywgJycpO1xuXHRcdH1cblxuXHRcdGlmICghQXJyYXkuaXNBcnJheShhY2NvdW50cykpIHtcblx0XHRcdGFjY291bnRzID0gWyBhY2NvdW50cyBdO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFjY291bnRzLmluY2x1ZGVzKGVudHJpZXNbaV0ubmFtZSkgJiYgKCFiYXNlVXJsIHx8IGVudHJpZXNbaV0uYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykgPT09IGJhc2VVcmwpKSB7XG5cdFx0XHRcdGNvbnN0IGVudHJ5ID0gZW50cmllcy5zcGxpY2UoaS0tLCAxKVswXTtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVudHJ5LCAnZXhwaXJlZCcsIHsgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdHJlbW92ZWQucHVzaChlbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHsgZW50cmllcywgcmVtb3ZlZCB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJlaXZlcyBhIHRva2VuIGZyb20gdGhlIHN0b3JlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVmFyaW91cyBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmFjY291bnROYW1lIC0gVGhlIGFjY291bnQgbmFtZSB0byBnZXQuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbYmFzZVVybF0gLSBUaGUgYmFzZSBVUkwgdXNlZCB0byBmaWx0ZXIgYWNjb3VudHMuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXNvbHZlcyB0aGUgdG9rZW4gb3IgYHVuZGVmaW5lZGAgaWYgbm90IHNldC5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGdldCh7IGFjY291bnROYW1lLCBiYXNlVXJsLCBoYXNoIH0gPSB7fSkge1xuXHRcdGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcblxuXHRcdGlmIChiYXNlVXJsKSB7XG5cdFx0XHRiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKTtcblx0XHR9XG5cblx0XHRpZiAoIWFjY291bnROYW1lICYmICFoYXNoKSB7XG5cdFx0XHR0aHJvdyBFLk1JU1NJTkdfUkVRVUlSRURfUEFSQU1FVEVSKCdNdXN0IHNwZWNpZnkgZWl0aGVyIHRoZSBhY2NvdW50IG5hbWUgb3IgYXV0aGVudGljYXRvciBoYXNoJyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuID0gZW50cmllcy5sZW5ndGg7XG5cdFx0bG9nKGBTY2FubmluZyAke2hpZ2hsaWdodChsZW4pfSAke3BsdXJhbGl6ZSgndG9rZW4nLCBsZW4pfSBmb3IgYWNjb3VudE5hbWU9JHtoaWdobGlnaHQoYWNjb3VudE5hbWUpfSBoYXNoPSR7aGlnaGxpZ2h0KGhhc2gpfSBiYXNlVXJsPSR7aGlnaGxpZ2h0KGJhc2VVcmwpfWApO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCgoYWNjb3VudE5hbWUgJiYgZW50cmllc1tpXS5uYW1lID09PSBhY2NvdW50TmFtZSkgfHwgKGhhc2ggJiYgZW50cmllc1tpXS5oYXNoID09PSBoYXNoKSkgJiYgKCFiYXNlVXJsIHx8IGVudHJpZXNbaV0uYmFzZVVybC5yZXBsYWNlKHByb3RvUmVnRXhwLCAnJykucmVwbGFjZSgvXFwvJC8sICcnKSA9PT0gYmFzZVVybCkpIHtcblx0XHRcdFx0bG9nKGBGb3VuZCBhY2NvdW50IHRva2VuczogJHtoaWdobGlnaHQoZW50cmllc1tpXS5uYW1lKX1gKTtcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmVpdmVzIGFsbCB0b2tlbnMgZnJvbSB0aGUgc3RvcmUuIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIG92ZXJ3cml0dGVuLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59IFJlc29sdmVzIGFuIGFycmF5IG9mIHRva2Vucy5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGFzeW5jIGxpc3QoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuc3VyZXMgbGlzdCBvZiB0b2tlbnMgaXMgdmFsaWQgYW5kIGRvZXMgbm90IGNvbnRhaW4gYW55IGV4cGlyZWQgdG9rZW5zLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fSBlbnRyaWVzIC0gQW4gYXJyYXkgb2YgdG9rZW5zLlxuXHQgKiBAcmV0dXJucyB7QXJyYXkuPE9iamVjdD59XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0cHVyZ2UoZW50cmllcykge1xuXHRcdGlmICghZW50cmllcykge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IDA7XG5cblx0XHQvLyBsb29wIG92ZXIgZWFjaCBlbnRyeSBhbmQgcmVtb3ZlIGFueSBleHBpcmVkIHRva2Vuc1xuXHRcdC8vIE5PVEU6IHRoaXMgY29kZSBpbnRlbnRpb25hbGx5IGNoZWNrZXMgYGVudHJpZXMubGVuZ3RoYCBlYWNoIGxvb3AgaW5zdGVhZCBvZiBjYWNoaW5nIHRoZVxuXHRcdC8vIGxlbmd0aCBzaW5jZSBzcGxpY2UoKSBzaHJpbmtzIHRoZSBhcnJheSBsZW5ndGhcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHsgZXhwaXJlcywgdG9rZW5zIH0gPSBlbnRyaWVzW2ldO1xuXHRcdFx0Y29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblx0XHRcdGlmIChleHBpcmVzICYmICgoZXhwaXJlcy5hY2Nlc3MgPiAobm93ICsgdGhpcy50b2tlblJlZnJlc2hUaHJlc2hvbGQpKSB8fCAoZXhwaXJlcy5yZWZyZXNoID4gbm93KSkpIHtcblx0XHRcdFx0Ly8gbm90IGV4cGlyZWRcblx0XHRcdFx0aWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVudHJpZXNbaV0sICdleHBpcmVkJykpIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZW50cmllc1tpXSwgJ2V4cGlyZWQnLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmV4cGlyZXMuYWNjZXNzIDwgRGF0ZS5ub3coKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvdW50Kys7XG5cdFx0XHRlbnRyaWVzLnNwbGljZShpLS0sIDEpO1xuXHRcdH1cblxuXHRcdGxvZyhgUHVyZ2VkICR7aGlnaGxpZ2h0KGNvdW50KX0gJHtwbHVyYWxpemUoJ2VudHJ5JywgY291bnQpfWApO1xuXG5cdFx0cmV0dXJuIGVudHJpZXM7XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvKipcblx0ICogU2F2ZXMgYWNjb3VudCBjcmVkZW50aWFscy4gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgb3ZlcndyaXR0ZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gVGhlIHRva2VuIGRhdGEuXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICovXG5cdGFzeW5jIHNldChkYXRhKSB7XG5cdFx0Ly8gbm9vcFxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIGFjY291bnQgY3JlZGVudGlhbHMuIElmIGV4aXN0cywgdGhlIG9sZCBvbmUgaXMgZGVsZXRlZC5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgLSBUaGUgdG9rZW4gZGF0YS5cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX3NldChkYXRhKSB7XG5cdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChlbnRyaWVzW2ldLmJhc2VVcmwgPT09IGRhdGEuYmFzZVVybCAmJiBlbnRyaWVzW2ldLm5hbWUgPT09IGRhdGEubmFtZSkge1xuXHRcdFx0XHRlbnRyaWVzLnNwbGljZShpLCAxKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZW50cmllcy5wdXNoKGRhdGEpO1xuXHRcdHJldHVybiBlbnRyaWVzO1xuXHR9XG59XG4iXSwiZmlsZSI6InN0b3Jlcy90b2tlbi1zdG9yZS5qcyJ9
{
"name": "@axway/amplify-auth-sdk",
"version": "0.2.3",
"version": "0.3.0",
"description": "Axway AMPLIFY authentication SDK for Node.js",

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

"dependencies": {
"@axway/amplify-request": "^0.2.2",
"@axway/amplify-request": "^0.3.0",
"accepts": "^1.3.5",

@@ -28,9 +28,9 @@ "fs-extra": "^7.0.1",

"opn": "^5.4.0",
"snooplogg": "^1.13.2",
"source-map-support": "^0.5.9",
"pluralize": "^7.0.0",
"snooplogg": "^2.0.1",
"source-map-support": "^0.5.10",
"uuid": "^3.3.2"
},
"devDependencies": {
"appcd-gulp": "^1.2.1",
"gulp": "^3.9.1",
"appcd-gulp": "^2.0.0",
"tmp": "^0.0.33"

@@ -46,3 +46,4 @@ },

"node": ">=8.0.0"
}
},
"gitHead": "bb0ae7a1d4ca98c050febe74288fcabb7e0aec5c"
}

@@ -214,3 +214,3 @@ # AMPLIFY Auth SDK

will attempt to use `secure`, then `file`, then `memory`. If set to `null`, then it will not
persist the access token.
persist the access token. Defaults `"secure"`.
* PKCE:

@@ -217,0 +217,0 @@ * This is the default authentication method and has no options.

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

Sorry, the diff of this file is not supported yet

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