@cloudbase/oauth 2.24.10 → 2.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -67,7 +67,7 @@ var oauth2client_1 = require("../oauth2client/oauth2client");
67
67
  var captcha_1 = require("../captcha/captcha");
68
68
  var utils_1 = require("../utils");
69
69
  var urlSearchParams_1 = __importDefault(require("../utils/urlSearchParams"));
70
- var __1 = require("..");
70
+ var auth_error_1 = require("./auth-error");
71
71
  function getEncryptUtils(isEncrypt, adapter) {
72
72
  var _a;
73
73
  return __awaiter(this, void 0, void 0, function () {
@@ -467,7 +467,7 @@ var Auth = (function () {
467
467
  return [3, 6];
468
468
  case 5:
469
469
  error_3 = _d.sent();
470
- res = { data: { type: consts_1.OAUTH_TYPE.BIND_IDENTITY }, error: new __1.AuthError(error_3) };
470
+ res = { data: { type: consts_1.OAUTH_TYPE.BIND_IDENTITY }, error: new auth_error_1.AuthError(error_3) };
471
471
  return [3, 6];
472
472
  case 6:
473
473
  if (params.fireEvent) {
@@ -512,12 +512,12 @@ var Auth = (function () {
512
512
  if (errorParam || errorDescription) {
513
513
  return [2, {
514
514
  data: data,
515
- error: new __1.AuthError({ message: errorDescription || errorParam || 'Unknown error from OAuth provider' }),
515
+ error: new auth_error_1.AuthError({ message: errorDescription || errorParam || 'Unknown error from OAuth provider' }),
516
516
  }];
517
517
  }
518
518
  provider = (cacheData === null || cacheData === void 0 ? void 0 : cacheData.provider) || localSearch.get('provider');
519
519
  if (!provider) {
520
- return [2, { data: data, error: new __1.AuthError({ message: 'Provider is required for OAuth verification' }) }];
520
+ return [2, { data: data, error: new auth_error_1.AuthError({ message: 'Provider is required for OAuth verification' }) }];
521
521
  }
522
522
  redirectUri = location.origin + location.pathname;
523
523
  return [4, this.grantProviderToken({
@@ -574,7 +574,7 @@ var Auth = (function () {
574
574
  return [2, res];
575
575
  case 12:
576
576
  error_4 = _a.sent();
577
- return [2, { data: data, error: new __1.AuthError(error_4) }];
577
+ return [2, { data: data, error: new auth_error_1.AuthError(error_4) }];
578
578
  case 13: return [2];
579
579
  }
580
580
  });
@@ -1265,4 +1265,4 @@ var Auth = (function () {
1265
1265
  return Auth;
1266
1266
  }());
1267
1267
  exports.Auth = Auth;
1268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVosbUNBQXFHO0FBOERyRyw2REFBMkU7QUFFM0UsOENBQTREO0FBQzVELGtDQUFvQztBQUNwQyw2RUFBd0Q7QUFHeEQsd0JBQThCO0FBRTlCLFNBQWUsZUFBZSxDQUFDLFNBQVMsRUFBRSxPQUE0Qjs7Ozs7O1lBQzlELFFBQVEsR0FBRzs7Ozs7OzRCQUlQLEtBQUssR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTs0QkFFekMsV0FBTyxLQUFLLEVBQUE7Ozs7Ozs0QkFJSSxXQUFNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFBOzs0QkFBeEMsS0FBSyxHQUFHLFNBQWdDOzRCQUM5QyxXQUFPLEtBQUssRUFBQTs7OzRCQUVaLFdBQU07Ozs7O2lCQUdYLENBQUE7WUFFRCxJQUFJO2dCQUNGLElBQUksQ0FBQyxDQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksMENBQUUsVUFBVSxLQUFJLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtvQkFDekQsV0FBTTtpQkFDUDtnQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFO29CQUN6QyxXQUFPLFFBQVEsRUFBRSxFQUFBO2lCQUNsQjthQUNGO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsV0FBTyxRQUFRLEVBQUUsRUFBQTtpQkFDbEI7YUFDRjs7OztDQUNGO0FBc0NEO0lBa0JFLGNBQVksSUFBaUI7UUFDckIsSUFBQSxPQUFPLEdBQUssSUFBSSxRQUFULENBQVM7UUFDdEIsSUFBSSxZQUFZLEdB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SSxFQUFFLENBQUE7WUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtTQUN0RDtRQUFDLFdBQU07U0FFUDtJQUNILENBQUM7SUFDSCxXQUFDO0FBQUQsQ0FBQyxBQWhvQ0QsSUFnb0NDO0FBaG9DWSxvQkFBSSIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgeyBBcGlVcmxzLCBBcGlVcmxzVjIsIEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLCBFcnJvclR5cGUsIEVWRU5UUywgT0FVVEhfVFlQRSB9IGZyb20gJy4vY29uc3RzJ1xuaW1wb3J0IHtcbiAgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2UsXG4gIFVzZXJQcm9maWxlLFxuICBVc2VySW5mbyxcbiAgU2lnbkluUmVxdWVzdCxcbiAgU2lnblVwUmVxdWVzdCxcbiAgVmVyaWZ5UmVxdWVzdCxcbiAgVmVyaWZ5UmVzcG9uc2UsXG4gIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0LFxuICBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2UsXG4gIEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gIEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlLFxuICBQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0LFxuICBQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZSxcbiAgU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgU2lnbkluQ3VzdG9tUmVxdWVzdCxcbiAgQmluZFdpdGhQcm92aWRlclJlcXVlc3QsXG4gIFRyYW5zQnlQcm92aWRlclJlcXVlc3QsXG4gIEdyYW50VG9rZW5SZXF1ZXN0LFxuICBVbmJpbmRQcm92aWRlclJlcXVlc3QsXG4gIENoZWNrUGFzc3dvcmRSZXF1ZXN0LFxuICBTZXRQYXNzd29yZFJlcXVlc3QsXG4gIENoYW5nZUJvdW5kUHJvdmlkZXJSZXF1ZXN0LFxuICBDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2UsXG4gIFVwZGF0ZVBhc3N3b3JkUmVxdWVzdCxcbiAgU3Vkb1Jlc3BvbnNlLFxuICBTdWRvUmVxdWVzdCxcbiAgR2V0Q3VzdG9tU2lnblRpY2tldEZuLFxuICBRdWVyeVVzZXJQcm9maWxlUmVxdWVzdCxcbiAgUXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlLFxuICBSZXNldFBhc3N3b3JkUmVxdWVzdCxcbiAgRGV2aWNlQXV0aG9yaXplUmVxdWVzdCxcbiAgRGV2aWNlQXV0aG9yaXplUmVzcG9uc2UsXG4gIENoZWNrVXNlcm5hbWVSZXF1ZXN0LFxuICBDaGVja0lmVXNlckV4aXN0UmVxdWVzdCxcbiAgQ2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlLFxuICBXaXRoU3Vkb1JlcXVlc3QsXG4gIFB1YmxpY0tleSxcbiAgRW5jcnlwdFBhcmFtcyxcbiAgUHJvdmlkZXJTdWJUeXBlLFxuICBHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlcXVlc3QsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZSxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZSxcbiAgTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QsXG4gIEVkaXRDb250YWN0UmVxdWVzdCxcbiAgQXV0aG9yaXplSW5mb1JlcXVlc3QsXG4gIEF1dGhvcml6ZUluZm9SZXNwb25zZSxcbiAgQXV0aG9yaXplRGV2aWNlUmVxdWVzdCxcbiAgQXV0aG9yaXplUmVxdWVzdCxcbiAgQXV0aG9yaXplUmVzcG9uc2UsXG4gIEdldFVzZXJCZWhhdmlvckxvZyxcbiAgR2V0VXNlckJlaGF2aW9yTG9nUmVzLFxuICBSZXZva2VEZXZpY2VSZXF1ZXN0LFxuICBTaWdub3V0UmVwb25zZSxcbiAgUHJvdmlkZXJzUmVzcG9uc2UsXG4gIFNpZ25vdXRSZXF1ZXN0LFxuICBNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QsXG59IGZyb20gJy4vbW9kZWxzJ1xuaW1wb3J0IHsgU2ltcGxlU3RvcmFnZSwgUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L2ludGVyZmFjZSdcbmltcG9ydCB7IE9BdXRoMkNsaWVudCwgZGVmYXVsdFN0b3JhZ2UgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50J1xuaW1wb3J0IHsgQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvbW9kZWxzJ1xuaW1wb3J0IHsgQ2FwdGNoYSwgQ2FwdGNoYU9wdGlvbnMgfSBmcm9tICcuLi9jYXB0Y2hhL2NhcHRjaGEnXG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCBNeVVSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi91dGlscy91cmxTZWFyY2hQYXJhbXMnXG5pbXBvcnQgeyBTREtBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcbmltcG9ydCB7IElDbG91ZGJhc2VDb25maWcgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnLi4nXG5cbmFzeW5jIGZ1bmN0aW9uIGdldEVuY3J5cHRVdGlscyhpc0VuY3J5cHQsIGFkYXB0ZXI6IFNES0FkYXB0ZXJJbnRlcmZhY2UpIHtcbiAgY29uc3QgZ2V0VXRpbHMgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzL2VuY3J5cHQnKVxuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgcmV0dXJuIHV0aWxzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgdXRpbHMgPSBhd2FpdCBpbXBvcnQoJy4uL3V0aWxzL2VuY3J5cHQnKVxuICAgICAgICByZXR1cm4gdXRpbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKChhZGFwdGVyPy5yb290Py5nbG9iYWxUaGlzIHx8IGdsb2JhbFRoaXMpLklTX01QX0JVSUxEKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LklTX01QX0JVSUxEICYmIGlzRW5jcnlwdCkge1xuICAgICAgcmV0dXJuIGdldFV0aWxzKClcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzRW5jcnlwdCkge1xuICAgICAgcmV0dXJuIGdldFV0aWxzKClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoT3B0aW9ucyB7XG4gIGFwaU9yaWdpbjogc3RyaW5nXG4gIGFwaVBhdGg/OiBzdHJpbmdcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICAvKipcbiAgICogYmFzaWMgYXV0aFxuICAgKi9cbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nXG4gIGNyZWRlbnRpYWxzQ2xpZW50PzogT0F1dGgyQ2xpZW50XG4gIHJlcXVlc3Q/OiBSZXF1ZXN0RnVuY3Rpb25cbiAgYmFzZVJlcXVlc3Q/OiBSZXF1ZXN0RnVuY3Rpb25cbiAgc3RvcmFnZT86IFNpbXBsZVN0b3JhZ2VcbiAgYW5vbnltb3VzU2lnbkluRnVuYz86IChDcmVkZW50aWFscykgPT4gUHJvbWlzZTxDcmVkZW50aWFscyB8IHZvaWQ+XG4gIGNhcHRjaGFPcHRpb25zPzogUGFydGlhbDxDYXB0Y2hhT3B0aW9ucz5cbiAgZW52Pzogc3RyaW5nXG4gIHd4Q2xvdWQ/OiBhbnlcbiAgYWRhcHRlcj86IFNES0FkYXB0ZXJJbnRlcmZhY2VcbiAgb25DcmVkZW50aWFsc0Vycm9yPzogKGRhdGE6IHsgbXNnOiBzdHJpbmc7IGV2ZW50VHlwZT86ICdjcmVkZW50aWFsc19lcnJvcicgfSkgPT4gdm9pZFxuICBoZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICBpMThuPzogSUNsb3VkYmFzZUNvbmZpZ1snaTE4biddXG4gIHVzZVd4Q2xvdWQ/OiBib29sZWFuXG4gIGV2ZW50QnVzPzogYW55XG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IGRldGVjdCBPQXV0aCBncmFudHMgaW4gdGhlIFVSTFxuICAgKiBhbmQgZXhjaGFuZ2UgdGhlIGNvZGUgZm9yIGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgZGV0ZWN0U2Vzc2lvbkluVXJsPzogYm9vbGVhblxuICAvKipcbiAgICogRW5hYmxlIGRlYnVnIGxvZ2dpbmdcbiAgICovXG4gIGRlYnVnPzogYm9vbGVhblxufVxuXG4vKipcbiAqIEF1dGhcbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGgge1xuICBwcml2YXRlIHN0YXRpYyBwYXJzZVBhcmFtc1RvU2VhcmNoKHBhcmFtczogYW55KTogc3RyaW5nIHtcbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKCFwYXJhbXNba2V5XSkge1xuICAgICAgICBkZWxldGUgcGFyYW1zW2tleV1cbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhwYXJhbXMgYXMgYW55KVxuICAgIHJldHVybiBzZWFyY2hQYXJhbXMudG9TdHJpbmcoKVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWc6IEF1dGhPcHRpb25zXG4gIHByaXZhdGUgZ2V0Q3VzdG9tU2lnblRpY2tldEZuPzogR2V0Q3VzdG9tU2lnblRpY2tldEZuXG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7QXV0aE9wdGlvbnN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHM6IEF1dGhPcHRpb25zKSB7XG4gICAgbGV0IHsgcmVxdWVzdCB9ID0gb3B0c1xuICAgIGxldCBvQXV0aDJDbGllbnQgPSBvcHRzLmNyZWRlbnRpYWxzQ2xpZW50XG4gICAgaWYgKCFvQXV0aDJDbGllbnQpIHtcbiAgICAgIGNvbnN0IGluaXRPcHRpb25zID0ge1xuICAgICAgICBhcGlPcmlnaW46IG9wdHMuYXBpT3JpZ2luLFxuICAgICAgICBhcGlQYXRoOiBvcHRzLmFwaVBhdGgsXG4gICAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UsXG4gICAgICAgIGVudjogb3B0cy5lbnYsXG4gICAgICAgIGJhc2VSZXF1ZXN0OiBvcHRzLmJhc2VSZXF1ZXN0IC8qIHx8IG9wdHMucmVxdWVzdCAqLywgLy8gb3B0cy5yZXF1ZXN0IOW6n+W8g+S4jeeUqOadpeihqOekuiBvYXV0aCBycXVlc3RcbiAgICAgICAgYW5vbnltb3VzU2lnbkluRnVuYzogb3B0cy5hbm9ueW1vdXNTaWduSW5GdW5jLFxuICAgICAgICB3eENsb3VkOiBvcHRzLnd4Q2xvdWQsXG4gICAgICAgIG9uQ3JlZGVudGlhbHNFcnJvcjogb3B0cy5vbkNyZWRlbnRpYWxzRXJyb3IsXG4gICAgICAgIGhlYWRlcnM6IG9wdHMuaGVhZGVycyB8fCB7fSxcbiAgICAgICAgaTE4bjogb3B0cy5pMThuLFxuICAgICAgICBkZWJ1Zzogb3B0cy5kZWJ1ZyxcbiAgICAgIH1cbiAgICAgIG9BdXRoMkNsaWVudCA9IG5ldyBPQXV0aDJDbGllbnQoaW5pdE9wdGlvbnMpXG4gICAgfVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgY29uc3QgYmFzZVJlcXVlc3QgPSBvQXV0aDJDbGllbnQucmVxdWVzdC5iaW5kKG9BdXRoMkNsaWVudClcbiAgICAgIGNvbnN0IGNhcHRjaGEgPSBuZXcgQ2FwdGNoYSh7XG4gICAgICAgIGVudjogb3B0cy5lbnYsXG4gICAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgICByZXF1ZXN0OiBiYXNlUmVxdWVzdCxcbiAgICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlLFxuICAgICAgICBhZGFwdGVyOiBvcHRzLmFkYXB0ZXIsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMsXG4gICAgICAgIC4uLm9wdHMuY2FwdGNoYU9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgcmVxdWVzdCA9IGNhcHRjaGEucmVxdWVzdC5iaW5kKGNhcHRjaGEpXG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZW52OiBvcHRzLmVudixcbiAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICBhcGlQYXRoOiBvcHRzLmFwaVBhdGgsXG4gICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgIHJlcXVlc3QsXG4gICAgICBjcmVkZW50aWFsc0NsaWVudDogb0F1dGgyQ2xpZW50LFxuICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlLFxuICAgICAgYWRhcHRlcjogb3B0cy5hZGFwdGVyLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7niYjmnKzmoIfor4bvvIzlpITnkIblvoXor7fmsYLnmoR1cmzlkoxwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtczogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtc1RlbXAgPSBkZWVwQ2xvbmUocGFyYW1zKVxuICAgIGNvbnN0IHVybCA9IHsgdjI6IEFwaVVybHNWMiB9W3BhcmFtc1RlbXA/LnZlcnNpb25dPy5ba2V5XSB8fCBBcGlVcmxzW2tleV1cblxuICAgIGlmIChwYXJhbXNUZW1wKSB7XG4gICAgICBkZWxldGUgcGFyYW1zVGVtcC52ZXJzaW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXNUZW1wLCB1cmwgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gaW4uXG4gICAqIEBwYXJhbSB7U2lnbkluUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW4ocGFyYW1zOiBTaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHZlcnNpb24gPSBwYXJhbXMudmVyc2lvbiB8fCAndjEnXG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnQVVUSF9TSUdOX0lOX1VSTCcpXG4gICAgaWYgKHJlcy5wYXJhbXMucXVlcnkpIHtcbiAgICAgIGRlbGV0ZSByZXMucGFyYW1zLnF1ZXJ5XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHRoaXMuZ2V0RW5jcnlwdFBhcmFtcyhyZXMucGFyYW1zKVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKHtcbiAgICAgIC4uLmNyZWRlbnRpYWxzLFxuICAgICAgdmVyc2lvbixcbiAgICB9KVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogU2lnbiBpbiBBbm9ueW1vdXNseVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkoXG4gICAgZGF0YToge1xuICAgICAgcHJvdmlkZXJfdG9rZW4/OiBzdHJpbmdcbiAgICB9ID0ge30sXG4gICAgdXNlV3hDbG91ZCA9IGZhbHNlLFxuICApOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fSU5fQU5PTllNT1VTTFlfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICB1c2VXeENsb3VkLFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHVwLlxuICAgKiBAcGFyYW0ge1NpZ25VcFJlcXVlc3R9IHBhcmFtcyBBIFNpZ25VcFJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblVwKHBhcmFtczogU2lnblVwUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBkYXRhOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuQVVUSF9TSUdOX1VQX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhkYXRhKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8U2lnbm91dFJlcXVlc3Q+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduT3V0KHBhcmFtcz86IFNpZ25vdXRSZXF1ZXN0KTogUHJvbWlzZTxTaWdub3V0UmVwb25zZT4ge1xuICAgIGxldCByZXNwOiBTaWdub3V0UmVwb25zZSA9IHt9XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8U2lnbm91dFJlcG9uc2U+KEFwaVVybHMuQVVUSF9TSUdOT1VUX1VSTCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5lcnJvciAhPT0gRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdzaWduX291dF9lcnJvcicsIGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoKVxuICAgICAgcmV0dXJuIHJlc3BcbiAgICB9XG4gICAgY29uc3QgYWNjZXNzVG9rZW46IHN0cmluZyA9IGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkFVVEhfUkVWT0tFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHRva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIH0sXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscygpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBBbGwgRGV2aWNlc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmV2b2tlQWxsRGV2aWNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSF9SRVZPS0VfQUxMX1VSTCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBEZXZpY2VcbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJldm9rZURldmljZShwYXJhbXM6IFJldm9rZURldmljZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSE9SSVpFRF9ERVZJQ0VTX0RFTEVURV9VUkwgKyBwYXJhbXMuZGV2aWNlX2lkLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7R2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWZXJpZmljYXRpb24oXG4gICAgcGFyYW1zOiBHZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICAgIG9wdGlvbnM/OiB7IHdpdGhDYXB0Y2hhOiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICAvLyDlj5HpgIHnn63kv6Hml7bvvIzlpoLmnpzml7bnu5nlvZPliY3nlKjmiLflj5HvvIzliJnpnIDopoHluKbkuIrpibTmnYPkv6Hmga9cbiAgICBpZiAocGFyYW1zLnRhcmdldCA9PT0gJ0NVUl9VU0VSJykge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYXNMb2dpbiA9IGF3YWl0IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG4gICAgICBpZiAoaGFzTG9naW4pIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBkZWVwQ2xvbmUocGFyYW1zKVxuXG4gICAgaWYgKGJvZHkucGhvbmVfbnVtYmVyICYmICEvXlxcK1xcZHsxLDN9XFxzK1xcZCsvLnRlc3QoYm9keS5waG9uZV9udW1iZXIpKSB7XG4gICAgICBib2R5LnBob25lX251bWJlciA9IGArODYgJHtib2R5LnBob25lX251bWJlcn1gXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+KEFwaVVybHMuVkVSSUZJQ0FUSU9OX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgICAgd2l0aENhcHRjaGE6IG9wdGlvbnM/LndpdGhDYXB0Y2hhIHx8IGZhbHNlLFxuICAgICAgd2l0aENyZWRlbnRpYWxzLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogIFZlcmlmeSB0aGUgY29kZVxuICAgKiBAcGFyYW0ge1ZlcmlmeVJlcXVlc3R9IHBhcmFtcyBBIFZlcmlmeVJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFZlcmlmeVJlc3BvbnNlPn0gQSBQcm9taXNlPFZlcmlmeVJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5KHBhcmFtczogVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8VmVyaWZ5UmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdWRVJJRllfVVJMJylcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxWZXJpZnlSZXNwb25zZT4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiByZXMucGFyYW1zLFxuICAgIH0pXG5cbiAgICBpZiAocGFyYW1zPy52ZXJzaW9uID09PSAndjInKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyh7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHZlcnNpb246ICd2MicsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICAvKipcbiAgICogR2VuIHByb3ZpZGVyIHJlZGlyZWN0IHVyaS5cbiAgICogQHBhcmFtIHtHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdH0gcGFyYW1zIEEgR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT59IEEgUHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtczogR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QpOiBQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBjb25zdCB7IHByb3ZpZGVyX3JlZGlyZWN0X3VyaTogcmVkaXJlY3RfdXJpLCBvdGhlcl9wYXJhbXM6IG90aGVyUGFyYW1zID0ge30sIC4uLnJlc3RQYXJhbXMgfSA9IHBhcmFtc1xuICAgIGlmIChyZWRpcmVjdF91cmkgJiYgIXJlc3RQYXJhbXMucmVkaXJlY3RfdXJpKSB7XG4gICAgICByZXN0UGFyYW1zLnJlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaVxuICAgIH1cblxuICAgIGxldCB1cmwgPSBgJHtBcGlVcmxzLlBST1ZJREVSX1VSSV9VUkx9PyR7QXV0aC5wYXJzZVBhcmFtc1RvU2VhcmNoKHJlc3RQYXJhbXMpfWBcbiAgICBPYmplY3Qua2V5cyhvdGhlclBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG90aGVyUGFyYW1zW2tleV1cbiAgICAgIGlmIChrZXkgPT09ICdzaWduX291dF91cmknICYmICEodmFsdWU/Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXJsICs9IGAmb3RoZXJfcGFyYW1zWyR7a2V5fV09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwcm92aWRlciB0b2tlbi5cbiAgICogQHBhcmFtIHtHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdyYW50UHJvdmlkZXJUb2tlbihcbiAgICBwYXJhbXM6IEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gICAgdXNlV3hDbG91ZCA9IGZhbHNlLFxuICApOiBQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHVzZVd4Q2xvdWQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwcm92aWRlciB0b2tlbi5cbiAgICogQHBhcmFtIHtQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QpOiBQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW4gd2l0aCBwcm92aWRlciByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1NpZ25JbldpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtczogU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCwgdXNlV3hDbG91ZCA9IGZhbHNlKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ0FVVEhfU0lHTl9JTl9XSVRIX1BST1ZJREVSX1VSTCcpXG5cbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHJlcy5wYXJhbXMsXG4gICAgICB1c2VXeENsb3VkLFxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyh7XG4gICAgICAuLi5jcmVkZW50aWFscyxcbiAgICAgIHZlcnNpb246IHBhcmFtcz8udmVyc2lvbiB8fCAndjEnLFxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB0b0JpbmRJZGVudGl0eShwYXJhbXM6IHtcbiAgICBwcm92aWRlcl90b2tlbjogc3RyaW5nXG4gICAgcHJvdmlkZXI6IHN0cmluZ1xuICAgIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNcbiAgICBmaXJlRXZlbnQ/OiBib29sZWFuXG4gIH0pIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcmFtcy5jcmVkZW50aWFscyB8fCAoYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpKVxuICAgIGxldCByZXM6IGFueVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmJpbmRXaXRoUHJvdmlkZXIoXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcl90b2tlbjogcGFyYW1zLnByb3ZpZGVyX3Rva2VuLFxuICAgICAgICB9LFxuICAgICAgICBjcmVkZW50aWFscyxcbiAgICAgIClcbiAgICAgIHJlcyA9IHsgZGF0YTogeyB0eXBlOiBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFksIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXMgPSB7IGRhdGE6IHsgdHlwZTogT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZIH0sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5maXJlRXZlbnQpIHtcbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlPy4oRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwge1xuICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuQklORF9JREVOVElUWSxcbiAgICAgICAgaW5mbzogcmVzLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5Yid5aeLIHNlc3Npb27vvIjlpoLku44gVVJMIOS4reeahCBPQXV0aCDlm57osIPvvInjgIJcbiAgICog55So5LqOIE9BdXRoMkNsaWVudC5pbml0aWFsaXplKCkg5Zue6LCD44CCXG4gICAqIOWGhemDqOWkhOeQhiBVUkwg5qOA5rWL44CBT0F1dGgg6aqM6K+B77yM6L+U5ZueIGNyZWRlbnRpYWxzIOWSjCB1c2Vy44CCXG4gICAqIOS4jeiwg+eUqCBzZXRDcmVkZW50aWFsc++8jOeUsSBPQXV0aDJDbGllbnQg6LSf6LSj5L+d5a2Y44CCXG4gICAqXG4gICAqIEByZXR1cm5zIHsgZGF0YTogeyBzZXNzaW9uOiBDcmVkZW50aWFsczsgdXNlcj86IGFueSB9IHwgbnVsbCwgZXJyb3I6IEVycm9yIHwgbnVsbCB9XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0SW5pdGlhbFNlc3Npb24oKTogUHJvbWlzZTx7XG4gICAgZGF0YTogeyBzZXNzaW9uOiBDcmVkZW50aWFsczsgdXNlcj86IGFueSB9IHwgbnVsbFxuICAgIGVycm9yOiBFcnJvciB8IG51bGxcbiAgfT4ge1xuICAgIGxldCBkYXRhOiBhbnkgPSB7fVxuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiBydW5uaW5nIGluIGJyb3dzZXJcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBudWxsIH1cbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgVVJMIHBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IGxvY2FsU2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbj8uc2VhcmNoKVxuICAgICAgY29uc3QgY29kZSA9IGxvY2FsU2VhcmNoLmdldCgnY29kZScpXG4gICAgICBjb25zdCBzdGF0ZSA9IGxvY2FsU2VhcmNoLmdldCgnc3RhdGUnKVxuXG4gICAgICAvLyBObyBPQXV0aCBjYWxsYmFjayBkZXRlY3RlZFxuICAgICAgaWYgKCFjb2RlIHx8ICFzdGF0ZSkge1xuICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogbnVsbCB9XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCBwcm92aWRlciBmcm9tIHNlc3Npb25TdG9yYWdlIChzYXZlZCBkdXJpbmcgc2lnbkluV2l0aE9BdXRoKVxuICAgICAgbGV0IGNhY2hlRGF0YToge1xuICAgICAgICBwcm92aWRlcj86IHN0cmluZ1xuICAgICAgICBzZWFyY2g/OiBzdHJpbmdcbiAgICAgICAgaGFzaD86IHN0cmluZ1xuICAgICAgICB0eXBlPzogKHR5cGVvZiBPQVVUSF9UWVBFKVtrZXlvZiB0eXBlb2YgT0FVVEhfVFlQRV1cbiAgICAgIH0gfCBudWxsID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY2FjaGVEYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHN0YXRlKSB8fCAnbnVsbCcpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgICBkYXRhID0geyB0eXBlOiBjYWNoZURhdGE/LnR5cGUgfVxuICAgICAgLy8gQ2hlY2sgZm9yIGVycm9yIGluIFVSTFxuICAgICAgY29uc3QgZXJyb3JQYXJhbSA9IGxvY2FsU2VhcmNoLmdldCgnZXJyb3InKVxuICAgICAgY29uc3QgZXJyb3JEZXNjcmlwdGlvbiA9IGxvY2FsU2VhcmNoLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKVxuICAgICAgaWYgKGVycm9yUGFyYW0gfHwgZXJyb3JEZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiBlcnJvckRlc2NyaXB0aW9uIHx8IGVycm9yUGFyYW0gfHwgJ1Vua25vd24gZXJyb3IgZnJvbSBPQXV0aCBwcm92aWRlcicgfSksXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBjYWNoZURhdGE/LnByb3ZpZGVyIHx8IGxvY2FsU2VhcmNoLmdldCgncHJvdmlkZXInKVxuXG4gICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkIGZvciBPQXV0aCB2ZXJpZmljYXRpb24nIH0pIH1cbiAgICAgIH1cblxuICAgICAgLy8g6I635Y+W5b2T5YmN6aG16Z2i55qEIHJlZGlyZWN0X3VyaVxuICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSBsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZVxuXG4gICAgICAvLyBTdGVwIDE6IOiOt+WPliBwcm92aWRlciB0b2tlblxuICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbiB9ID0gYXdhaXQgdGhpcy5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXIsXG4gICAgICAgIHByb3ZpZGVyX3JlZGlyZWN0X3VyaTogcmVkaXJlY3RVcmksXG4gICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICB9KVxuXG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzXG4gICAgICBsZXQgdXNlcjogYW55ID0gbnVsbFxuICAgICAgbGV0IHJlczogYW55XG5cbiAgICAgIGlmIChjYWNoZURhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZKSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMudG9CaW5kSWRlbnRpdHkoeyBwcm92aWRlciwgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4sIGNyZWRlbnRpYWxzIH0pXG4gICAgICB9IGVsc2UgaWYgKGNhY2hlRGF0YS50eXBlID09PSBPQVVUSF9UWVBFLlNJR05fSU4pIHtcbiAgICAgICAgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24oeyBwcm92aWRlciB9LCAnQVVUSF9TSUdOX0lOX1dJVEhfUFJPVklERVJfVVJMJylcblxuICAgICAgICAvLyBTdGVwIDI6IOeUqCBwcm92aWRlciB0b2tlbiDmjaLlj5YgY3JlZGVudGlhbHPvvIjnm7TmjqXosIPnlKggQVBJ77yM5LiN6Kem5Y+RIHNldENyZWRlbnRpYWxz77yJXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4ocmVzLnVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IHsgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4gfSxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTdGVwIDM6IOiOt+WPliB1c2VyIGluZm/vvIzkvKDlhaUgZ2V0Q3JlZGVudGlhbHMg5Ye95pWw6YG/5YWN5q276ZSBXG4gICAgICAgIC8vIOS4jeiwg+eUqCBzZXRDcmVkZW50aWFsc++8jOeUsSBPQXV0aDJDbGllbnQuX2luaXRpYWxpemUg6LSf6LSj5L+d5a2YXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlckluZm8oeyBjcmVkZW50aWFscyB9KVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignZ2V0IHVzZXIgaW5mbyBlcnJvcicsIGUpXG4gICAgICAgICAgLy8g6I635Y+WIHVzZXIg5aSx6LSl5LiN5b2x5ZON55m75b2V5rWB56iLXG4gICAgICAgIH1cblxuICAgICAgICByZXMgPSB7IGRhdGE6IHsgLi4uZGF0YSwgc2Vzc2lvbjogY3JlZGVudGlhbHMsIHVzZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbGVhbiB1cCBVUkwgcGFyYW1ldGVycyBhbmQgcmVzdG9yZSBvcmlnaW5hbCBVUkwgc3RhdGVcbiAgICAgIGxvY2FsU2VhcmNoLmRlbGV0ZSgnY29kZScpXG4gICAgICBsb2NhbFNlYXJjaC5kZWxldGUoJ3N0YXRlJylcbiAgICAgIGxvY2FsU2VhcmNoLmRlbGV0ZSgncHJvdmlkZXInKVxuICAgICAgdGhpcy5yZXN0b3JlVXJsU3RhdGUoXG4gICAgICAgIGNhY2hlRGF0YT8uc2VhcmNoID09PSB1bmRlZmluZWQgPyBgPyR7bG9jYWxTZWFyY2gudG9TdHJpbmcoKX1gIDogY2FjaGVEYXRhLnNlYXJjaCxcbiAgICAgICAgY2FjaGVEYXRhPy5oYXNoIHx8IGxvY2F0aW9uLmhhc2gsXG4gICAgICApXG5cbiAgICAgIC8vIFJlbW92ZSBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oc3RhdGUpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbmluIHdpdGggY3VzdG9tLlxuICAgKiBAcGFyYW0ge1NpZ25JbkN1c3RvbVJlcXVlc3R9IHBhcmFtcyBBIFNpZ25JbkN1c3RvbVJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluQ3VzdG9tKHBhcmFtczogU2lnbkluQ3VzdG9tUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfU0lHTl9JTl9DVVNUT00sIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIHNpZ24gaW4gd2l0aCB3ZWNoYXQgaWRlbmRpZnlcbiAgICog6ZyA6KaB57uT5ZCIIGh0dHAgb3ZlcmNhbGxGdW5jdGlvbiDkvb/nlKhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoV2VjaGF0KHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fSU5fV0lUSF9XRUNIQVRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogQmluZCB3aXRoIHByb3ZpZGVyXG4gICAqIEBwYXJhbSB7QmluZFdpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBQcm9taXNlPGFueT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJpbmRXaXRoUHJvdmlkZXIocGFyYW1zOiBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCwgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oQXBpVXJscy5QUk9WSURFUl9CSU5EX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBnZXRDcmVkZW50aWFsczogY3JlZGVudGlhbHMgPyAoKSA9PiBjcmVkZW50aWFscyA6IHVuZGVmaW5lZCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXNlclByb2ZpbGUocGFyYW1zOiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbyhwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIGluZm8uXG4gICAqIEBwYXJhbSBwYXJhbXMuZ2V0Q3JlZGVudGlhbHMgT3B0aW9uYWwgY3VzdG9tIGdldENyZWRlbnRpYWxzIGZ1bmN0aW9uIHRvIGJ5cGFzcyBkZWZhdWx0IGdldENyZWRlbnRpYWxzKCkgYW5kIGF2b2lkIGRlYWRsb2NrXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlckluZm8+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VySW5mbyhwYXJhbXM6IHtcbiAgICB2ZXJzaW9uPzogc3RyaW5nXG4gICAgcXVlcnk/OiBzdHJpbmdcbiAgICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzXG4gIH0gPSB7fSwpOiBQcm9taXNlPFVzZXJJbmZvPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnVVNFUl9NRV9VUkwnKVxuXG4gICAgaWYgKHJlcy5wYXJhbXM/LnF1ZXJ5KSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgTXlVUkxTZWFyY2hQYXJhbXMocmVzLnBhcmFtcy5xdWVyeSBhcyBhbnkpXG4gICAgICByZXMudXJsICs9IGA/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gXG4gICAgfVxuXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJJbmZvPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgZ2V0Q3JlZGVudGlhbHM6IHBhcmFtcy5jcmVkZW50aWFscyA/ICgpID0+IHBhcmFtcy5jcmVkZW50aWFscyA6IHVuZGVmaW5lZCxcbiAgICB9KVxuXG4gICAgaWYgKHVzZXJJbmZvLnN1Yikge1xuICAgICAgdXNlckluZm8udWlkID0gdXNlckluZm8uc3ViXG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXJJbmZvXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIGluZm8gYnkgd2VkYSBwbHVnaW4uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gQSBQcm9taXNlPGFueT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFdlZGFVc2VySW5mbygpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KEFwaVVybHMuV0VEQV9VU0VSX1VSTCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICAgIHJldHVybiB1c2VySW5mb1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBtZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBXaXRoU3Vkb1JlcXVlc3QpOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnVVNFUl9NRV9VUkwnKVxuICAgIGNvbnN0IHVybCA9IGAke3Jlcy51cmx9PyR7QXV0aC5wYXJzZVBhcmFtc1RvU2VhcmNoKHJlcy5wYXJhbXMpfWBcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxVc2VyUHJvZmlsZT4odXJsLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogaGFzTG9naW5TdGF0ZSBjaGVjayBpZiBoYXMgbG9naW4gc3RhdGVcbiAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gQSBQcm9taXNlPGJvb2xlYW4+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoYXNMb2dpblN0YXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRBY2Nlc3NUb2tlbigpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzTG9naW5TdGF0ZVN5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzU3luYygpXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TG9naW5TdGF0ZSgpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFsc0FzeW5jKClcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFucyBieSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXMgQSBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRyYW5zQnlQcm92aWRlcihwYXJhbXM6IFRyYW5zQnlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuVVNFUl9UUkFOU19CWV9QUk9WSURFUl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRva2VuLlxuICAgKiBAcGFyYW0ge0dyYW50VG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBHcmFudFRva2VuUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBncmFudFRva2VuKHBhcmFtczogR3JhbnRUb2tlblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnQVVUSF9UT0tFTl9VUkwnKVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHJlcy5wYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByb3ZpZGUgbGlzdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxQcm92aWRlcnNSZXNwb25zZT59IEEgUHJvbWlzZTxQcm92aWRlcnNSZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVycygpOiBQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UHJvdmlkZXJzUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfTElTVCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHVuYmluZCBwcm92aWRlci5cbiAgICogQHBhcmFtIHtVbmJpbmRQcm92aWRlclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5iaW5kUHJvdmlkZXIocGFyYW1zOiBVbmJpbmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuUFJPVklERVJfVU5CSU5EX1VSTH0vJHtwYXJhbXMucHJvdmlkZXJfaWR9YCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIFBhc3N3b3JkLlxuICAgKiBAcGFyYW0ge0NoZWNrUGFzc3dvcmRSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrUGFzc3dvcmQocGFyYW1zOiBDaGVja1Bhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5DSEVDS19QV0RfVVJMfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRWRpdCBDb250YWN0IOS/ruaUuSDmiYvmnLrlj7cg5oiWIOmCrueusVxuICAgKiBAcGFyYW0ge0VkaXRDb250YWN0UmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZWRpdENvbnRhY3QocGFyYW1zOiBFZGl0Q29udGFjdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx2b2lkPihgJHtBcGlVcmxzLkJJTkRfQ09OVEFDVF9VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2V0IFBhc3N3b3JkLlxuICAgKiBAcGFyYW0ge1NldFBhc3N3b3JkclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UGFzc3dvcmQocGFyYW1zOiBTZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuQVVUSF9TRVRfUEFTU1dPUkR9YCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlUGFzc3dvcmRCeU9sZCDkvb/nlKjml6flr4bnoIHkv67mlLnlr4bnoIHvvIzlpoLmnpzlt7Lnu4/nu5HlrprmiYvmnLrlj7fvvIzor7flhYjvvJpzdWRv77yM5YaN5L+u5pS55a+G56CBXG4gICAqIEBwYXJhbSB7U2V0UGFzc3dvcmRyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQYXNzd29yZEJ5T2xkKHBhcmFtczogVXBkYXRlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3Vkb1Rva2VuID0gYXdhaXQgdGhpcy5zdWRvKHsgcGFzc3dvcmQ6IHBhcmFtcy5vbGRfcGFzc3dvcmQgfSlcbiAgICByZXR1cm4gdGhpcy5zZXRQYXNzd29yZCh7XG4gICAgICBzdWRvX3Rva2VuOiBzdWRvVG9rZW4uc3Vkb190b2tlbixcbiAgICAgIG5ld19wYXNzd29yZDogcGFyYW1zLm5ld19wYXNzd29yZCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHN1ZG9cbiAgICogQHBhcmFtIHtzdWRvfSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN1ZG8ocGFyYW1zOiBTdWRvUmVxdWVzdCk6IFByb21pc2U8U3Vkb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8U3Vkb1Jlc3BvbnNlPihgJHtBcGlVcmxzLlNVRE9fVVJMfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHVzZXIgdmVyaWZpY2F0aW9uLlxuICAgKiBAcGFyYW0ge0dldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtcyBBIEdldFZlcmlmaWNhdGlvblJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn0gQSBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFZlcmlmaWNhdGlvbkNvZGVUb0N1cnJlbnRVc2VyKHBhcmFtczogR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBwYXJhbXMudGFyZ2V0ID0gJ0NVUl9VU0VSJ1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPihBcGlVcmxzLlZFUklGSUNBVElPTl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgd2l0aENhcHRjaGE6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGFuZ2UgQm91bmQgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7Q2hhbmdlQm91bmRQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIEdldFZlcmlmaWNhdGlvblJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENoYW5nZUJvdW5kUHJvdmlkZXJSZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZUJvdW5kUHJvdmlkZXIocGFyYW1zOiBDaGFuZ2VCb3VuZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlPihgJHtBcGlVcmxzLlBST1ZJREVSX0xJU1R9LyR7cGFyYW1zLnByb3ZpZGVyX2lkfS90cmFuc2AsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICBwcm92aWRlcl90cmFuc190b2tlbjogcGFyYW1zLnRyYW5zX3Rva2VuLFxuICAgICAgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoIHRoZSB1c2VyIHByb2ZpbGUuIOayoeacieWSjOaVsOaNrua6kOWQjOatpVxuICAgKiBAZGVwcmVjYXRlZCB1c2UgdXBkYXRlVXNlckJhc2ljSW5mb1xuICAgKiBAcGFyYW0ge1VzZXJQcm9maWxlfSBwYXJhbXMgQSBVc2VyUHJvZmlsZSBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlclByb2ZpbGU+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRVc2VyUHJvZmlsZShwYXJhbXM6IFVzZXJQcm9maWxlKTogUHJvbWlzZTxVc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJQcm9maWxlPihBcGlVcmxzLlVTRVJfUFJJRklMRV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB1c2VyIGJhc2ljIGluZm9cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLlVTRVJfQkFTSUNfRURJVF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUGF0Y2ggdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogQHBhcmFtIHtRdWVyeVVzZXJQcm9maWxlUmVxfSBhcHBlbmRlZF9wYXJhbXMgQSBRdWVyeVVzZXJQcm9maWxlUmVxIE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VyUHJvZmlsZT59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHF1ZXJ5VXNlclByb2ZpbGUocGFyYW1zOiBRdWVyeVVzZXJQcm9maWxlUmVxdWVzdCk6IFByb21pc2U8UXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlPiB7XG4gICAgLy8gbGV0IHVybCA9IG5ldyBVUkwoQXBpVXJscy5VU0VSX1FVRVJZX1VSTCk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG4gICAgLy8gdXJsLnNlYXJjaCA9IHNlYXJjaFBhcmFtcy50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4oYCR7QXBpVXJscy5VU0VSX1FVRVJZX1VSTH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3VzdG9tU2lnbkZ1bmMgc2V0IHRoZSBnZXQgdGlja2V0IGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBnZXRUaWNrRm5cbiAgICovXG4gIHB1YmxpYyBzZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm46IEdldEN1c3RvbVNpZ25UaWNrZXRGbikge1xuICAgIHRoaXMuZ2V0Q3VzdG9tU2lnblRpY2tldEZuID0gZ2V0VGlja0ZuXG4gIH1cblxuICAvKipcbiAgICogU2lnbkluV2l0aEN1c3RvbVRpY2tldCBjdXN0b20gc2lnbkluXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gIC8vICAgY29uc3QgY3VzdG9tU2lnblRpY2tldEZuID0gdGhpcy5nZXRDdXN0b21TaWduVGlja2V0Rm5cbiAgLy8gICBpZiAoIWN1c3RvbVNpZ25UaWNrZXRGbikge1xuICAvLyAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgLy8gICAgIH0pXG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IGN1c3RvbVRpY2tldCA9IGF3YWl0IGN1c3RvbVNpZ25UaWNrZXRGbigpXG4gIC8vICAgcmV0dXJuIHRoaXMuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgLy8gICAgIC4uLnBhcmFtcyxcbiAgLy8gICAgIHByb3ZpZGVyX2lkOiAnY3VzdG9tJyxcbiAgLy8gICAgIHByb3ZpZGVyX3Rva2VuOiBjdXN0b21UaWNrZXQsXG4gIC8vICAgfSlcbiAgLy8gfVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3VzdG9tU2lnblRpY2tldEZuID0gdGhpcy5nZXRDdXN0b21TaWduVGlja2V0Rm5cbiAgICBpZiAoIWN1c3RvbVNpZ25UaWNrZXRGbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgICAgICAgZXJyb3I6ICdmYWlsZWRfcHJlY29uZGl0aW9uJyxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICdwbGVhc2UgdXNlIHNldEN1c3RvbVNpZ25GdW5jIHRvIHNldCBjdXN0b20gc2lnbiBmdW5jdGlvbicsXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBjdXN0b21UaWNrZXQgPSBhd2FpdCBjdXN0b21TaWduVGlja2V0Rm4oKVxuICAgIHJldHVybiB0aGlzLnNpZ25JbkN1c3RvbSh7XG4gICAgICBwcm92aWRlcl9pZDogJ2N1c3RvbScsXG4gICAgICB0aWNrZXQ6IGN1c3RvbVRpY2tldCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHBhc3N3b3JkXG4gICAqIEBwYXJhbSB7UmVzZXRQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkFVVEhfUkVTRVRfUEFTU1dPUkQsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgLy8gd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRob3JpemUgb2F1dGggQXV0aG9yaXplXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplKHBhcmFtczogQXV0aG9yaXplUmVxdWVzdCk6IFByb21pc2U8QXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxBdXRob3JpemVSZXNwb25zZT4oQXBpVXJscy5BVVRIT1JJWkVfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGF1dGhvcml6ZSBkZXZpY2VcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhvcml6ZURldmljZShwYXJhbXM6IEF1dGhvcml6ZURldmljZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx2b2lkPihBcGlVcmxzLkFVVEhPUklaRV9ERVZJQ0VfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGRldmljZSBhdXRob3JpemF0aW9uXG4gICAqIEBwYXJhbSB7RGV2aWNlQXV0aG9yaXplUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmljZUF1dGhvcml6ZVJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBEZXZpY2VBdXRob3JpemVSZXF1ZXN0KTogUHJvbWlzZTxEZXZpY2VBdXRob3JpemVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9HRVRfREVWSUNFX0NPREUsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogT0F1dGggZ2V0IGF1dGhvcml6ZSBpbmZvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplSW5mbyhwYXJhbXM6IEF1dGhvcml6ZUluZm9SZXF1ZXN0KTogUHJvbWlzZTxBdXRob3JpemVJbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCB1cmwgPSBgJHtBcGlVcmxzLkFVVEhPUklaRV9JTkZPX1VSTH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocGFyYW1zKX1gXG4gICAgbGV0IHdpdGhCYXNpY0F1dGggPSB0cnVlXG4gICAgbGV0IHdpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgY29uc3QgaGFzTG9naW4gPSBhd2FpdCB0aGlzLmhhc0xvZ2luU3RhdGUoKVxuICAgIGlmIChoYXNMb2dpbikge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgd2l0aEJhc2ljQXV0aCA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEF1dGhvcml6ZUluZm9SZXNwb25zZT4odXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aEJhc2ljQXV0aCxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrVXNlcm5hbWUocGFyYW1zOiBDaGVja1VzZXJuYW1lUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQ0hFQ0tfVVNFUk5BTUUsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja0lmVXNlckV4aXN0KHBhcmFtczogQ2hlY2tJZlVzZXJFeGlzdFJlcXVlc3QpOiBQcm9taXNlPENoZWNrSWZVc2VyRXhpc3RSZXNwb25zZT4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhwYXJhbXMgYXMgYW55KVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlPihgJHtBcGlVcmxzLkNIRUNLX0lGX1VTRVJfRVhJU1R9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0U2NvcGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luR3JvdXBzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0R3JvdXBzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoVG9rZW5Gb3JjZShwYXJhbXM6IHsgdmVyc2lvbj86IHN0cmluZyB9KSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5yZWZyZXNoVG9rZW4oe1xuICAgICAgLi4uY3JlZGVudGlhbHMsXG4gICAgICB2ZXJzaW9uOiBwYXJhbXM/LnZlcnNpb24gfHwgJ3YxJyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFscygpXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHB1YmxpYyBrZXkgZm9yIHJlcXVlc3QgcGFyYW1zIGVuY3J5cHRpb25cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQdWJsaWNLZXkoKTogUHJvbWlzZTxQdWJsaWNLZXk+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQdWJsaWNLZXk+KEFwaVVybHNWMi5BVVRIX1BVQkxJQ19LRVksIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge30sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBlbmNyeXB0IHJlcXVlc3QgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbmNyeXB0UGFyYW1zKHBhcmFtczogUmVjb3JkPGFueSwgYW55Pik6IFByb21pc2U8RW5jcnlwdFBhcmFtcz4ge1xuICAgIGNvbnN0IHsgaXNFbmNyeXB0IH0gPSBwYXJhbXNcbiAgICBkZWxldGUgcGFyYW1zLmlzRW5jcnlwdFxuXG4gICAgY29uc3QgcGF5bG9hZCA9IGRlZXBDbG9uZShwYXJhbXMpXG5cbiAgICBjb25zdCBlbmNyeXB0VXRpbHMgPSBhd2FpdCBnZXRFbmNyeXB0VXRpbHMoaXNFbmNyeXB0LCB0aGlzLmNvbmZpZy5hZGFwdGVyKVxuXG4gICAgaWYgKCFlbmNyeXB0VXRpbHMpIHtcbiAgICAgIHJldHVybiBwYXJhbXNcbiAgICB9XG5cbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgbGV0IHB1YmxpY19rZXlfdGh1bWJwcmludCA9ICcnXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNLZXkoKVxuICAgICAgcHVibGljS2V5ID0gcmVzLnB1YmxpY19rZXlcbiAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCA9IHJlcy5wdWJsaWNfa2V5X3RodW1icHJpbnRcblxuICAgICAgaWYgKCFwdWJsaWNLZXkgfHwgIXB1YmxpY19rZXlfdGh1bWJwcmludCkge1xuICAgICAgICB0aHJvdyByZXNcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtczogZW5jcnlwdFV0aWxzLmdldEVuY3J5cHRJbmZvKHsgcHVibGljS2V5LCBwYXlsb2FkIH0pLFxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50LFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgcHJvdmlkZXIgc3ViIHR5cGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlclN1YlR5cGUoKTogUHJvbWlzZTxQcm92aWRlclN1YlR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQcm92aWRlclN1YlR5cGU+KEFwaVVybHMuR0VUX1BST1ZJREVSX1RZUEUsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICBwcm92aWRlcl9pZDogJ3dlZGEnLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBwcm92aWRlciBzdWIgdHlwZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHZlcmlmeUNhcHRjaGFEYXRhKHsgdG9rZW4sIGtleSB9OiB7IHRva2VuOiBzdHJpbmc7IGtleTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx7IGNhcHRjaGFfdG9rZW46IHN0cmluZzsgZXhwaXJlc19pbjogbnVtYmVyIH0+KEFwaVVybHMuVkVSSUZZX0NBUFRDSEFfREFUQV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogeyB0b2tlbiwga2V5IH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQ2FwdGNoYURhdGEoeyBzdGF0ZSwgcmVkaXJlY3RfdXJpID0gdW5kZWZpbmVkIH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx7IHRva2VuOiBzdHJpbmc7IGRhdGE6IHN0cmluZyB9PihBcGlVcmxzLkNBUFRDSEFfREFUQV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogeyBzdGF0ZSwgcmVkaXJlY3RfdXJpIH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogbWluaS1wcm9ncmFtIHNjYW4gY29kZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE1pbmlQcm9ncmFtQ29kZShwYXJhbXM6IEdldE1pbmlQcm9ncmFtUXJDb2RlUmVxdWVzdCk6IFByb21pc2U8R2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdldE1pbmlQcm9ncmFtUXJDb2RlUmVzcG9uc2U+KEFwaVVybHMuR0VUX01JTklQUk9HUkFNX1FSQ09ERSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBtaW5pLXByb2dyYW0gc2NhbiBjb2RlIHN0YXR1c1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzKHBhcmFtczogR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXF1ZXN0LCk6IFByb21pc2U8R2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVzcG9uc2U+KEFwaVVybHMuR0VUX01JTklQUk9HUkFNX1FSQ09ERV9TVEFUVVMsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHVzZXIgYmVoYXZpb3IgbG9nXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zOiBHZXRVc2VyQmVoYXZpb3JMb2cpOiBQcm9taXNlPEdldFVzZXJCZWhhdmlvckxvZ1Jlcz4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHsgTE9HSU46ICdxdWVyeVthY3Rpb25dPVVTRVJfTE9HSU4nLCBNT0RJRlk6ICduZV9xdWVyeVthY3Rpb25dPVVTRVJfTE9HSU4nIH1cbiAgICBjb25zdCB1cmwgPSBgJHtBcGlVcmxzLkdFVF9VU0VSX0JFSEFWSU9SX0xPR30/JHthY3Rpb25bcGFyYW1zLnR5cGVdfSZsaW1pdD0ke3BhcmFtcy5saW1pdH0ke1xuICAgICAgcGFyYW1zLnBhZ2VfdG9rZW4gPyBgJnBhZ2VfdG9rZW49JHtwYXJhbXMucGFnZV90b2tlbn1gIDogJydcbiAgICB9YFxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KHVybCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOi/meS4quaWueazleaYr+eUqOaIt+iHquW3seS/ruaUueiHquW3seeahOWvhuegge+8jOS4jeWQjOS6ji9hdXRoL3YxL3VzZXIvcGFzc3dvcmTmjqXlj6PvvIzor6XmjqXlj6PmmK/nrqHnkIblkZjkv67mlLnkuKrkurrnmoRcbiAgICogQHBhcmFtIHtNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdH0gcGFyYW1zIEEgTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1vZGlmeVBhc3N3b3JkKHBhcmFtczogTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgbGV0IHB1YmxpY19rZXlfdGh1bWJwcmludCA9ICcnXG5cbiAgICBjb25zdCBlbmNyeXB0VXRpbHMgPSBhd2FpdCBnZXRFbmNyeXB0VXRpbHModHJ1ZSwgdGhpcy5jb25maWcuYWRhcHRlcilcblxuICAgIGlmICghZW5jcnlwdFV0aWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvIG5vdCBzdXBwb3J0IGVuY3J5cHQsIGEgZW5jcnlwdCB1dGlsIHJlcXVpcmVkLicpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljS2V5KClcbiAgICAgIHB1YmxpY0tleSA9IHJlcy5wdWJsaWNfa2V5XG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSByZXMucHVibGljX2tleV90aHVtYnByaW50XG5cbiAgICAgIGlmICghcHVibGljS2V5IHx8ICFwdWJsaWNfa2V5X3RodW1icHJpbnQpIHtcbiAgICAgICAgdGhyb3cgcmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGNvbnN0IGVuY3J5cHRfcGFzc3dvcmQgPSBwYXJhbXMucGFzc3dvcmQgPyBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5wYXNzd29yZCB9KSA6ICcnXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGNvbnN0IGVuY3J5cHRfbmV3X3Bhc3N3b3JkID0gZW5jcnlwdFV0aWxzLmdldEVuY3J5cHRJbmZvKHsgcHVibGljS2V5LCBwYXlsb2FkOiBwYXJhbXMubmV3X3Bhc3N3b3JkIH0pXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5VU0VSX0JBU0lDX0VESVRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdXNlcl9pZDogcGFyYW1zLnVzZXJfaWQsXG4gICAgICAgIGVuY3J5cHRfcGFzc3dvcmQsXG4gICAgICAgIGVuY3J5cHRfbmV3X3Bhc3N3b3JkLFxuICAgICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog6YeN572u5a+G56CB77yM6K+l5o6l5Y+j5peg6ZyA55m75b2V5bCx5Y+v5Lul6YeN572u5a+G56CBXG4gICAqIEBwYXJhbSB7TW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0fSBwYXJhbXMgQSBNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luKHBhcmFtczogTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHB1YmxpY0tleSA9ICcnXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGxldCBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSAnJ1xuXG4gICAgY29uc3QgZW5jcnlwdFV0aWxzID0gYXdhaXQgZ2V0RW5jcnlwdFV0aWxzKHRydWUsIHRoaXMuY29uZmlnLmFkYXB0ZXIpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkbyBub3Qgc3VwcG9ydCBlbmNyeXB0LCBhIGVuY3J5cHQgdXRpbCByZXF1aXJlZC4nKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuXG4gICAgICBpZiAoIXB1YmxpY0tleSB8fCAhcHVibGljX2tleV90aHVtYnByaW50KSB7XG4gICAgICAgIHRocm93IHJlc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBjb25zdCBlbmNyeXB0X3Bhc3N3b3JkID0gcGFyYW1zLnBhc3N3b3JkID8gZW5jcnlwdFV0aWxzLmdldEVuY3J5cHRJbmZvKHsgcHVibGljS2V5LCBwYXlsb2FkOiBwYXJhbXMucGFzc3dvcmQgfSkgOiAnJ1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBjb25zdCBlbmNyeXB0X25ld19wYXNzd29yZCA9IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLm5ld19wYXNzd29yZCB9KVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHNWMi5BVVRIX1JFU0VUX1BBU1NXT1JELCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy51c2VybmFtZSxcbiAgICAgICAgcGFzc3dvcmQ6IGVuY3J5cHRfcGFzc3dvcmQsXG4gICAgICAgIG5ld19wYXNzd29yZDogZW5jcnlwdF9uZXdfcGFzc3dvcmQsXG4gICAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIFVSTCBzdGF0ZSBhZnRlciBPQXV0aCBjYWxsYmFja1xuICAgKi9cbiAgcHJpdmF0ZSByZXN0b3JlVXJsU3RhdGUoc2VhcmNoPzogc3RyaW5nLCBoYXNoPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHNlYXJjaCA9PT0gdW5kZWZpbmVkKSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgICAgIHVybC5zZWFyY2ggPSBzZWFyY2hcbiAgICAgIHVybC5oYXNoID0gaGFzaCB8fCAnJ1xuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCB1cmwudG9TdHJpbmcoKSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxufVxuIl19
1268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVosbUNBQXFHO0FBOERyRyw2REFBMkU7QUFFM0UsOENBQTREO0FBQzVELGtDQUFvQztBQUNwQyw2RUFBd0Q7QUFHeEQsMkNBQXdDO0FBRXhDLFNBQWUsZUFBZSxDQUFDLFNBQVMsRUFBRSxPQUE0Qjs7Ozs7O1lBQzlELFFBQVEsR0FBRzs7Ozs7OzRCQUlQLEtBQUssR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTs0QkFFekMsV0FBTyxLQUFLLEVBQUE7Ozs7Ozs0QkFJSSxXQUFNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFBOzs0QkFBeEMsS0FBSyxHQUFHLFNBQWdDOzRCQUM5QyxXQUFPLEtBQUssRUFBQTs7OzRCQUVaLFdBQU07Ozs7O2lCQUdYLENBQUE7WUFFRCxJQUFJO2dCQUNGLElBQUksQ0FBQyxDQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksMENBQUUsVUFBVSxLQUFJLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtvQkFDekQsV0FBTTtpQkFDUDtnQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFO29CQUN6QyxXQUFPLFFBQVEsRUFBRSxFQUFBO2lCQUNsQjthQUNGO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsV0FBTyxRQUFRLEVBQUUsRUFBQTtpQkFDbEI7YUFDRjs7OztDQUNGO0FBc0NEO0lBa0JFLGNBQVksSUFBaUI7UUFDckIsSUFBQSxPQUFPLEdBQUssSUFBSSxRQUFULENBQVM7UUFDdEIsSUFBSSxZQUFZLEdB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LElBQUksRUFBRSxDQUFBO1lBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7U0FDdEQ7UUFBQyxXQUFNO1NBRVA7SUFDSCxDQUFDO0lBQ0gsV0FBQztBQUFELENBQUMsQUFob0NELElBZ29DQztBQWhvQ1ksb0JBQUkiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuaW1wb3J0IHsgQXBpVXJscywgQXBpVXJsc1YyLCBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRSwgRXJyb3JUeXBlLCBFVkVOVFMsIE9BVVRIX1RZUEUgfSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7XG4gIEdldFZlcmlmaWNhdGlvblJlcXVlc3QsXG4gIEdldFZlcmlmaWNhdGlvblJlc3BvbnNlLFxuICBVc2VyUHJvZmlsZSxcbiAgVXNlckluZm8sXG4gIFNpZ25JblJlcXVlc3QsXG4gIFNpZ25VcFJlcXVlc3QsXG4gIFZlcmlmeVJlcXVlc3QsXG4gIFZlcmlmeVJlc3BvbnNlLFxuICBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCxcbiAgR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlLFxuICBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LFxuICBHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSxcbiAgUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2UsXG4gIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QsXG4gIFNpZ25JbkN1c3RvbVJlcXVlc3QsXG4gIEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0LFxuICBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0LFxuICBHcmFudFRva2VuUmVxdWVzdCxcbiAgVW5iaW5kUHJvdmlkZXJSZXF1ZXN0LFxuICBDaGVja1Bhc3N3b3JkUmVxdWVzdCxcbiAgU2V0UGFzc3dvcmRSZXF1ZXN0LFxuICBDaGFuZ2VCb3VuZFByb3ZpZGVyUmVxdWVzdCxcbiAgQ2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlLFxuICBVcGRhdGVQYXNzd29yZFJlcXVlc3QsXG4gIFN1ZG9SZXNwb25zZSxcbiAgU3Vkb1JlcXVlc3QsXG4gIEdldEN1c3RvbVNpZ25UaWNrZXRGbixcbiAgUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3QsXG4gIFF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZSxcbiAgUmVzZXRQYXNzd29yZFJlcXVlc3QsXG4gIERldmljZUF1dGhvcml6ZVJlcXVlc3QsXG4gIERldmljZUF1dGhvcml6ZVJlc3BvbnNlLFxuICBDaGVja1VzZXJuYW1lUmVxdWVzdCxcbiAgQ2hlY2tJZlVzZXJFeGlzdFJlcXVlc3QsXG4gIENoZWNrSWZVc2VyRXhpc3RSZXNwb25zZSxcbiAgV2l0aFN1ZG9SZXF1ZXN0LFxuICBQdWJsaWNLZXksXG4gIEVuY3J5cHRQYXJhbXMsXG4gIFByb3ZpZGVyU3ViVHlwZSxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0LFxuICBHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1JlcXVlc3QsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlUmVzcG9uc2UsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVzcG9uc2UsXG4gIE1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0LFxuICBFZGl0Q29udGFjdFJlcXVlc3QsXG4gIEF1dGhvcml6ZUluZm9SZXF1ZXN0LFxuICBBdXRob3JpemVJbmZvUmVzcG9uc2UsXG4gIEF1dGhvcml6ZURldmljZVJlcXVlc3QsXG4gIEF1dGhvcml6ZVJlcXVlc3QsXG4gIEF1dGhvcml6ZVJlc3BvbnNlLFxuICBHZXRVc2VyQmVoYXZpb3JMb2csXG4gIEdldFVzZXJCZWhhdmlvckxvZ1JlcyxcbiAgUmV2b2tlRGV2aWNlUmVxdWVzdCxcbiAgU2lnbm91dFJlcG9uc2UsXG4gIFByb3ZpZGVyc1Jlc3BvbnNlLFxuICBTaWdub3V0UmVxdWVzdCxcbiAgTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0LFxufSBmcm9tICcuL21vZGVscydcbmltcG9ydCB7IFNpbXBsZVN0b3JhZ2UsIFJlcXVlc3RGdW5jdGlvbiB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9pbnRlcmZhY2UnXG5pbXBvcnQgeyBPQXV0aDJDbGllbnQsIGRlZmF1bHRTdG9yYWdlIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L29hdXRoMmNsaWVudCdcbmltcG9ydCB7IENyZWRlbnRpYWxzIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L21vZGVscydcbmltcG9ydCB7IENhcHRjaGEsIENhcHRjaGFPcHRpb25zIH0gZnJvbSAnLi4vY2FwdGNoYS9jYXB0Y2hhJ1xuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgTXlVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vdXRpbHMvdXJsU2VhcmNoUGFyYW1zJ1xuaW1wb3J0IHsgU0RLQWRhcHRlckludGVyZmFjZSB9IGZyb20gJ0BjbG91ZGJhc2UvYWRhcHRlci1pbnRlcmZhY2UnXG5pbXBvcnQgeyBJQ2xvdWRiYXNlQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcydcbmltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gJy4vYXV0aC1lcnJvcidcblxuYXN5bmMgZnVuY3Rpb24gZ2V0RW5jcnlwdFV0aWxzKGlzRW5jcnlwdCwgYWRhcHRlcjogU0RLQWRhcHRlckludGVyZmFjZSkge1xuICBjb25zdCBnZXRVdGlscyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvZW5jcnlwdCcpXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICByZXR1cm4gdXRpbHNcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCB1dGlscyA9IGF3YWl0IGltcG9ydCgnLi4vdXRpbHMvZW5jcnlwdCcpXG4gICAgICAgIHJldHVybiB1dGlsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoKGFkYXB0ZXI/LnJvb3Q/Lmdsb2JhbFRoaXMgfHwgZ2xvYmFsVGhpcykuSVNfTVBfQlVJTEQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcHJvY2Vzcy5lbnYuSVNfTVBfQlVJTEQgJiYgaXNFbmNyeXB0KSB7XG4gICAgICByZXR1cm4gZ2V0VXRpbHMoKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNFbmNyeXB0KSB7XG4gICAgICByZXR1cm4gZ2V0VXRpbHMoKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhPcHRpb25zIHtcbiAgYXBpT3JpZ2luOiBzdHJpbmdcbiAgYXBpUGF0aD86IHN0cmluZ1xuICBjbGllbnRJZDogc3RyaW5nXG4gIC8qKlxuICAgKiBiYXNpYyBhdXRoXG4gICAqL1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmdcbiAgY3JlZGVudGlhbHNDbGllbnQ/OiBPQXV0aDJDbGllbnRcbiAgcmVxdWVzdD86IFJlcXVlc3RGdW5jdGlvblxuICBiYXNlUmVxdWVzdD86IFJlcXVlc3RGdW5jdGlvblxuICBzdG9yYWdlPzogU2ltcGxlU3RvcmFnZVxuICBhbm9ueW1vdXNTaWduSW5GdW5jPzogKENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzIHwgdm9pZD5cbiAgY2FwdGNoYU9wdGlvbnM/OiBQYXJ0aWFsPENhcHRjaGFPcHRpb25zPlxuICBlbnY/OiBzdHJpbmdcbiAgd3hDbG91ZD86IGFueVxuICBhZGFwdGVyPzogU0RLQWRhcHRlckludGVyZmFjZVxuICBvbkNyZWRlbnRpYWxzRXJyb3I/OiAoZGF0YTogeyBtc2c6IHN0cmluZzsgZXZlbnRUeXBlPzogJ2NyZWRlbnRpYWxzX2Vycm9yJyB9KSA9PiB2b2lkXG4gIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIGkxOG4/OiBJQ2xvdWRiYXNlQ29uZmlnWydpMThuJ11cbiAgdXNlV3hDbG91ZD86IGJvb2xlYW5cbiAgZXZlbnRCdXM/OiBhbnlcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IE9BdXRoIGdyYW50cyBpbiB0aGUgVVJMXG4gICAqIGFuZCBleGNoYW5nZSB0aGUgY29kZSBmb3IgY3JlZGVudGlhbHMuXG4gICAqL1xuICBkZXRlY3RTZXNzaW9uSW5Vcmw/OiBib29sZWFuXG4gIC8qKlxuICAgKiBFbmFibGUgZGVidWcgbG9nZ2luZ1xuICAgKi9cbiAgZGVidWc/OiBib29sZWFuXG59XG5cbi8qKlxuICogQXV0aFxuICovXG5leHBvcnQgY2xhc3MgQXV0aCB7XG4gIHByaXZhdGUgc3RhdGljIHBhcnNlUGFyYW1zVG9TZWFyY2gocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xuICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIXBhcmFtc1trZXldKSB7XG4gICAgICAgIGRlbGV0ZSBwYXJhbXNba2V5XVxuICAgICAgfVxuICAgIH0pXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG4gICAgcmV0dXJuIHNlYXJjaFBhcmFtcy50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGNvbmZpZzogQXV0aE9wdGlvbnNcbiAgcHJpdmF0ZSBnZXRDdXN0b21TaWduVGlja2V0Rm4/OiBHZXRDdXN0b21TaWduVGlja2V0Rm5cblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtBdXRoT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQXV0aE9wdGlvbnMpIHtcbiAgICBsZXQgeyByZXF1ZXN0IH0gPSBvcHRzXG4gICAgbGV0IG9BdXRoMkNsaWVudCA9IG9wdHMuY3JlZGVudGlhbHNDbGllbnRcbiAgICBpZiAoIW9BdXRoMkNsaWVudCkge1xuICAgICAgY29uc3QgaW5pdE9wdGlvbnMgPSB7XG4gICAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICAgIGFwaVBhdGg6IG9wdHMuYXBpUGF0aCxcbiAgICAgICAgY2xpZW50SWQ6IG9wdHMuY2xpZW50SWQsXG4gICAgICAgIHN0b3JhZ2U6IG9wdHMuc3RvcmFnZSxcbiAgICAgICAgZW52OiBvcHRzLmVudixcbiAgICAgICAgYmFzZVJlcXVlc3Q6IG9wdHMuYmFzZVJlcXVlc3QgLyogfHwgb3B0cy5yZXF1ZXN0ICovLCAvLyBvcHRzLnJlcXVlc3Qg5bqf5byD5LiN55So5p2l6KGo56S6IG9hdXRoIHJxdWVzdFxuICAgICAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBvcHRzLmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgICAgIHd4Q2xvdWQ6IG9wdHMud3hDbG91ZCxcbiAgICAgICAgb25DcmVkZW50aWFsc0Vycm9yOiBvcHRzLm9uQ3JlZGVudGlhbHNFcnJvcixcbiAgICAgICAgaGVhZGVyczogb3B0cy5oZWFkZXJzIHx8IHt9LFxuICAgICAgICBpMThuOiBvcHRzLmkxOG4sXG4gICAgICAgIGRlYnVnOiBvcHRzLmRlYnVnLFxuICAgICAgfVxuICAgICAgb0F1dGgyQ2xpZW50ID0gbmV3IE9BdXRoMkNsaWVudChpbml0T3B0aW9ucylcbiAgICB9XG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICBjb25zdCBiYXNlUmVxdWVzdCA9IG9BdXRoMkNsaWVudC5yZXF1ZXN0LmJpbmQob0F1dGgyQ2xpZW50KVxuICAgICAgY29uc3QgY2FwdGNoYSA9IG5ldyBDYXB0Y2hhKHtcbiAgICAgICAgZW52OiBvcHRzLmVudixcbiAgICAgICAgY2xpZW50SWQ6IG9wdHMuY2xpZW50SWQsXG4gICAgICAgIHJlcXVlc3Q6IGJhc2VSZXF1ZXN0LFxuICAgICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UsXG4gICAgICAgIGFkYXB0ZXI6IG9wdHMuYWRhcHRlcixcbiAgICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcyxcbiAgICAgICAgLi4ub3B0cy5jYXB0Y2hhT3B0aW9ucyxcbiAgICAgIH0pXG4gICAgICByZXF1ZXN0ID0gY2FwdGNoYS5yZXF1ZXN0LmJpbmQoY2FwdGNoYSlcbiAgICB9XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBlbnY6IG9wdHMuZW52LFxuICAgICAgYXBpT3JpZ2luOiBvcHRzLmFwaU9yaWdpbixcbiAgICAgIGFwaVBhdGg6IG9wdHMuYXBpUGF0aCxcbiAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIGNyZWRlbnRpYWxzQ2xpZW50OiBvQXV0aDJDbGllbnQsXG4gICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2UsXG4gICAgICBhZGFwdGVyOiBvcHRzLmFkYXB0ZXIsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagueaNrueJiOacrOagh+ivhu+8jOWkhOeQhuW+heivt+axgueahHVybOWSjHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBnZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zVGVtcCA9IGRlZXBDbG9uZShwYXJhbXMpXG4gICAgY29uc3QgdXJsID0geyB2MjogQXBpVXJsc1YyIH1bcGFyYW1zVGVtcD8udmVyc2lvbl0/LltrZXldIHx8IEFwaVVybHNba2V5XVxuXG4gICAgaWYgKHBhcmFtc1RlbXApIHtcbiAgICAgIGRlbGV0ZSBwYXJhbXNUZW1wLnZlcnNpb25cbiAgICB9XG5cbiAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtc1RlbXAsIHVybCB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBpbi5cbiAgICogQHBhcmFtIHtTaWduSW5SZXF1ZXN0fSBwYXJhbXMgQSBTaWduSW5SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IFNpZ25JblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgdmVyc2lvbiA9IHBhcmFtcy52ZXJzaW9uIHx8ICd2MSdcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdBVVRIX1NJR05fSU5fVVJMJylcbiAgICBpZiAocmVzLnBhcmFtcy5xdWVyeSkge1xuICAgICAgZGVsZXRlIHJlcy5wYXJhbXMucXVlcnlcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgdGhpcy5nZXRFbmNyeXB0UGFyYW1zKHJlcy5wYXJhbXMpXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoe1xuICAgICAgLi4uY3JlZGVudGlhbHMsXG4gICAgICB2ZXJzaW9uLFxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGluIEFub255bW91c2x5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5Bbm9ueW1vdXNseShcbiAgICBkYXRhOiB7XG4gICAgICBwcm92aWRlcl90b2tlbj86IHN0cmluZ1xuICAgIH0gPSB7fSxcbiAgICB1c2VXeENsb3VkID0gZmFsc2UsXG4gICk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfU0lHTl9JTl9BTk9OWU1PVVNMWV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIHVzZVd4Q2xvdWQsXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gdXAuXG4gICAqIEBwYXJhbSB7U2lnblVwUmVxdWVzdH0gcGFyYW1zIEEgU2lnblVwUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduVXAocGFyYW1zOiBTaWduVXBSZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IGRhdGE6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fVVBfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGRhdGEpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gb3V0LlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZTxTaWdub3V0UmVxdWVzdD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25PdXQocGFyYW1zPzogU2lnbm91dFJlcXVlc3QpOiBQcm9taXNlPFNpZ25vdXRSZXBvbnNlPiB7XG4gICAgbGV0IHJlc3A6IFNpZ25vdXRSZXBvbnNlID0ge31cbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxTaWdub3V0UmVwb25zZT4oQXBpVXJscy5BVVRIX1NJR05PVVRfVVJMLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyLmVycm9yICE9PSBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3NpZ25fb3V0X2Vycm9yJywgZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscygpXG4gICAgICByZXR1cm4gcmVzcFxuICAgIH1cbiAgICBjb25zdCBhY2Nlc3NUb2tlbjogc3RyaW5nID0gYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0QWNjZXNzVG9rZW4oKVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9SRVZPS0VfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgfSxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKClcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIEFsbCBEZXZpY2VzXG4gICAqIEByZXR1cm4ge09iamVjdH0gQSBQcm9taXNlPHZvaWQ+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXZva2VBbGxEZXZpY2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8dm9pZD4oQXBpVXJscy5BVVRIX1JFVk9LRV9BTExfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIERldmljZVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmV2b2tlRGV2aWNlKHBhcmFtczogUmV2b2tlRGV2aWNlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8dm9pZD4oQXBpVXJscy5BVVRIT1JJWkVEX0RFVklDRVNfREVMRVRFX1VSTCArIHBhcmFtcy5kZXZpY2VfaWQsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtHZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFZlcmlmaWNhdGlvbihcbiAgICBwYXJhbXM6IEdldFZlcmlmaWNhdGlvblJlcXVlc3QsXG4gICAgb3B0aW9ucz86IHsgd2l0aENhcHRjaGE6IGJvb2xlYW4gfSxcbiAgKTogUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4ge1xuICAgIGxldCB3aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIC8vIOWPkemAgeefreS/oeaXtu+8jOWmguaenOaXtue7meW9k+WJjeeUqOaIt+WPke+8jOWImemcgOimgeW4puS4iumJtOadg+S/oeaBr1xuICAgIGlmIChwYXJhbXMudGFyZ2V0ID09PSAnQ1VSX1VTRVInKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhhc0xvZ2luID0gYXdhaXQgdGhpcy5oYXNMb2dpblN0YXRlKClcbiAgICAgIGlmIChoYXNMb2dpbikge1xuICAgICAgICB3aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IGRlZXBDbG9uZShwYXJhbXMpXG5cbiAgICBpZiAoYm9keS5waG9uZV9udW1iZXIgJiYgIS9eXFwrXFxkezEsM31cXHMrXFxkKy8udGVzdChib2R5LnBob25lX251bWJlcikpIHtcbiAgICAgIGJvZHkucGhvbmVfbnVtYmVyID0gYCs4NiAke2JvZHkucGhvbmVfbnVtYmVyfWBcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4oQXBpVXJscy5WRVJJRklDQVRJT05fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHksXG4gICAgICB3aXRoQ2FwdGNoYTogb3B0aW9ucz8ud2l0aENhcHRjaGEgfHwgZmFsc2UsXG4gICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgVmVyaWZ5IHRoZSBjb2RlXG4gICAqIEBwYXJhbSB7VmVyaWZ5UmVxdWVzdH0gcGFyYW1zIEEgVmVyaWZ5UmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VmVyaWZ5UmVzcG9uc2U+fSBBIFByb21pc2U8VmVyaWZ5UmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkocGFyYW1zOiBWZXJpZnlSZXF1ZXN0KTogUHJvbWlzZTxWZXJpZnlSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ1ZFUklGWV9VUkwnKVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PFZlcmlmeVJlc3BvbnNlPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHJlcy5wYXJhbXMsXG4gICAgfSlcblxuICAgIGlmIChwYXJhbXM/LnZlcnNpb24gPT09ICd2MicpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgdmVyc2lvbjogJ3YyJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW4gcHJvdmlkZXIgcmVkaXJlY3QgdXJpLlxuICAgKiBAcGFyYW0ge0dlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0fSBwYXJhbXMgQSBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPn0gQSBQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdlblByb3ZpZGVyUmVkaXJlY3RVcmkocGFyYW1zOiBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCk6IFByb21pc2U8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGNvbnN0IHsgcHJvdmlkZXJfcmVkaXJlY3RfdXJpOiByZWRpcmVjdF91cmksIG90aGVyX3BhcmFtczogb3RoZXJQYXJhbXMgPSB7fSwgLi4ucmVzdFBhcmFtcyB9ID0gcGFyYW1zXG4gICAgaWYgKHJlZGlyZWN0X3VyaSAmJiAhcmVzdFBhcmFtcy5yZWRpcmVjdF91cmkpIHtcbiAgICAgIHJlc3RQYXJhbXMucmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpXG4gICAgfVxuXG4gICAgbGV0IHVybCA9IGAke0FwaVVybHMuUFJPVklERVJfVVJJX1VSTH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocmVzdFBhcmFtcyl9YFxuICAgIE9iamVjdC5rZXlzKG90aGVyUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3RoZXJQYXJhbXNba2V5XVxuICAgICAgaWYgKGtleSA9PT0gJ3NpZ25fb3V0X3VyaScgJiYgISh2YWx1ZT8ubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cmwgKz0gYCZvdGhlcl9wYXJhbXNbJHtrZXl9XT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YFxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+KHVybCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgKiBAcGFyYW0ge0dyYW50UHJvdmlkZXJUb2tlblJlcXVlc3R9IHBhcmFtcyBBIEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPn0gQSBQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKFxuICAgIHBhcmFtczogR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgICB1c2VXeENsb3VkID0gZmFsc2UsXG4gICk6IFByb21pc2U8R3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4oQXBpVXJscy5QUk9WSURFUl9UT0tFTl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgdXNlV3hDbG91ZCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHByb3ZpZGVyIHRva2VuLlxuICAgKiBAcGFyYW0ge1BhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3R9IHBhcmFtcyBBIFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPn0gQSBQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcGF0Y2hQcm92aWRlclRva2VuKHBhcmFtczogUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCk6IFByb21pc2U8UGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4oQXBpVXJscy5QUk9WSURFUl9UT0tFTl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25pbiB3aXRoIHByb3ZpZGVyIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7U2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zOiBTaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0LCB1c2VXeENsb3VkID0gZmFsc2UpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnQVVUSF9TSUdOX0lOX1dJVEhfUFJPVklERVJfVVJMJylcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVzLnBhcmFtcyxcbiAgICAgIHVzZVd4Q2xvdWQsXG4gICAgfSlcblxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKHtcbiAgICAgIC4uLmNyZWRlbnRpYWxzLFxuICAgICAgdmVyc2lvbjogcGFyYW1zPy52ZXJzaW9uIHx8ICd2MScsXG4gICAgfSlcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHRvQmluZElkZW50aXR5KHBhcmFtczoge1xuICAgIHByb3ZpZGVyX3Rva2VuOiBzdHJpbmdcbiAgICBwcm92aWRlcjogc3RyaW5nXG4gICAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc1xuICAgIGZpcmVFdmVudD86IGJvb2xlYW5cbiAgfSkge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyYW1zLmNyZWRlbnRpYWxzIHx8IChhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKCkpXG4gICAgbGV0IHJlczogYW55XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYmluZFdpdGhQcm92aWRlcihcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwYXJhbXMucHJvdmlkZXJfdG9rZW4sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgKVxuICAgICAgcmVzID0geyBkYXRhOiB7IHR5cGU6IE9BVVRIX1RZUEUuQklORF9JREVOVElUWSwgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlcyA9IHsgZGF0YTogeyB0eXBlOiBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFkgfSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmZpcmVFdmVudCkge1xuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmU/LihFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgIGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICBpbmZvOiByZXMsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bliJ3lp4sgc2Vzc2lvbu+8iOWmguS7jiBVUkwg5Lit55qEIE9BdXRoIOWbnuiwg++8ieOAglxuICAgKiDnlKjkuo4gT0F1dGgyQ2xpZW50LmluaXRpYWxpemUoKSDlm57osIPjgIJcbiAgICog5YaF6YOo5aSE55CGIFVSTCDmo4DmtYvjgIFPQXV0aCDpqozor4HvvIzov5Tlm54gY3JlZGVudGlhbHMg5ZKMIHVzZXLjgIJcbiAgICog5LiN6LCD55SoIHNldENyZWRlbnRpYWxz77yM55SxIE9BdXRoMkNsaWVudCDotJ/otKPkv53lrZjjgIJcbiAgICpcbiAgICogQHJldHVybnMgeyBkYXRhOiB7IHNlc3Npb246IENyZWRlbnRpYWxzOyB1c2VyPzogYW55IH0gfCBudWxsLCBlcnJvcjogRXJyb3IgfCBudWxsIH1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRJbml0aWFsU2Vzc2lvbigpOiBQcm9taXNlPHtcbiAgICBkYXRhOiB7IHNlc3Npb246IENyZWRlbnRpYWxzOyB1c2VyPzogYW55IH0gfCBudWxsXG4gICAgZXJyb3I6IEVycm9yIHwgbnVsbFxuICB9PiB7XG4gICAgbGV0IGRhdGE6IGFueSA9IHt9XG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIHJ1bm5pbmcgaW4gYnJvd3NlclxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IG51bGwgfVxuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBVUkwgcGFyYW1ldGVyc1xuICAgICAgY29uc3QgbG9jYWxTZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uPy5zZWFyY2gpXG4gICAgICBjb25zdCBjb2RlID0gbG9jYWxTZWFyY2guZ2V0KCdjb2RlJylcbiAgICAgIGNvbnN0IHN0YXRlID0gbG9jYWxTZWFyY2guZ2V0KCdzdGF0ZScpXG5cbiAgICAgIC8vIE5vIE9BdXRoIGNhbGxiYWNrIGRldGVjdGVkXG4gICAgICBpZiAoIWNvZGUgfHwgIXN0YXRlKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBudWxsIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHByb3ZpZGVyIGZyb20gc2Vzc2lvblN0b3JhZ2UgKHNhdmVkIGR1cmluZyBzaWduSW5XaXRoT0F1dGgpXG4gICAgICBsZXQgY2FjaGVEYXRhOiB7XG4gICAgICAgIHByb3ZpZGVyPzogc3RyaW5nXG4gICAgICAgIHNlYXJjaD86IHN0cmluZ1xuICAgICAgICBoYXNoPzogc3RyaW5nXG4gICAgICAgIHR5cGU/OiAodHlwZW9mIE9BVVRIX1RZUEUpW2tleW9mIHR5cGVvZiBPQVVUSF9UWVBFXVxuICAgICAgfSB8IG51bGwgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjYWNoZURhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oc3RhdGUpIHx8ICdudWxsJylcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICAgIGRhdGEgPSB7IHR5cGU6IGNhY2hlRGF0YT8udHlwZSB9XG4gICAgICAvLyBDaGVjayBmb3IgZXJyb3IgaW4gVVJMXG4gICAgICBjb25zdCBlcnJvclBhcmFtID0gbG9jYWxTZWFyY2guZ2V0KCdlcnJvcicpXG4gICAgICBjb25zdCBlcnJvckRlc2NyaXB0aW9uID0gbG9jYWxTZWFyY2guZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpXG4gICAgICBpZiAoZXJyb3JQYXJhbSB8fCBlcnJvckRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6IGVycm9yRGVzY3JpcHRpb24gfHwgZXJyb3JQYXJhbSB8fCAnVW5rbm93biBlcnJvciBmcm9tIE9BdXRoIHByb3ZpZGVyJyB9KSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm92aWRlciA9IGNhY2hlRGF0YT8ucHJvdmlkZXIgfHwgbG9jYWxTZWFyY2guZ2V0KCdwcm92aWRlcicpXG5cbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQgZm9yIE9BdXRoIHZlcmlmaWNhdGlvbicgfSkgfVxuICAgICAgfVxuXG4gICAgICAvLyDojrflj5blvZPliY3pobXpnaLnmoQgcmVkaXJlY3RfdXJpXG4gICAgICBjb25zdCByZWRpcmVjdFVyaSA9IGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lXG5cbiAgICAgIC8vIFN0ZXAgMTog6I635Y+WIHByb3ZpZGVyIHRva2VuXG4gICAgICBjb25zdCB7IHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuIH0gPSBhd2FpdCB0aGlzLmdyYW50UHJvdmlkZXJUb2tlbih7XG4gICAgICAgIHByb3ZpZGVyX2lkOiBwcm92aWRlcixcbiAgICAgICAgcHJvdmlkZXJfcmVkaXJlY3RfdXJpOiByZWRpcmVjdFVyaSxcbiAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHNcbiAgICAgIGxldCB1c2VyOiBhbnkgPSBudWxsXG4gICAgICBsZXQgcmVzOiBhbnlcblxuICAgICAgaWYgKGNhY2hlRGF0YS50eXBlID09PSBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFkpIHtcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgcmVzID0gYXdhaXQgdGhpcy50b0JpbmRJZGVudGl0eSh7IHByb3ZpZGVyLCBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbiwgY3JlZGVudGlhbHMgfSlcbiAgICAgIH0gZWxzZSBpZiAoY2FjaGVEYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuU0lHTl9JTikge1xuICAgICAgICByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbih7IHByb3ZpZGVyIH0sICdBVVRIX1NJR05fSU5fV0lUSF9QUk9WSURFUl9VUkwnKVxuXG4gICAgICAgIC8vIFN0ZXAgMjog55SoIHByb3ZpZGVyIHRva2VuIOaNouWPliBjcmVkZW50aWFsc++8iOebtOaOpeiwg+eUqCBBUEnvvIzkuI3op6blj5Egc2V0Q3JlZGVudGlhbHPvvIlcbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihyZXMudXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogeyBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbiB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFN0ZXAgMzog6I635Y+WIHVzZXIgaW5mb++8jOS8oOWFpSBnZXRDcmVkZW50aWFscyDlh73mlbDpgb/lhY3mrbvplIFcbiAgICAgICAgLy8g5LiN6LCD55SoIHNldENyZWRlbnRpYWxz77yM55SxIE9BdXRoMkNsaWVudC5faW5pdGlhbGl6ZSDotJ/otKPkv53lrZhcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB1c2VyID0gYXdhaXQgdGhpcy5nZXRVc2VySW5mbyh7IGNyZWRlbnRpYWxzIH0pXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdnZXQgdXNlciBpbmZvIGVycm9yJywgZSlcbiAgICAgICAgICAvLyDojrflj5YgdXNlciDlpLHotKXkuI3lvbHlk43nmbvlvZXmtYHnqItcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyA9IHsgZGF0YTogeyAuLi5kYXRhLCBzZXNzaW9uOiBjcmVkZW50aWFscywgdXNlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFuIHVwIFVSTCBwYXJhbWV0ZXJzIGFuZCByZXN0b3JlIG9yaWdpbmFsIFVSTCBzdGF0ZVxuICAgICAgbG9jYWxTZWFyY2guZGVsZXRlKCdjb2RlJylcbiAgICAgIGxvY2FsU2VhcmNoLmRlbGV0ZSgnc3RhdGUnKVxuICAgICAgbG9jYWxTZWFyY2guZGVsZXRlKCdwcm92aWRlcicpXG4gICAgICB0aGlzLnJlc3RvcmVVcmxTdGF0ZShcbiAgICAgICAgY2FjaGVEYXRhPy5zZWFyY2ggPT09IHVuZGVmaW5lZCA/IGA/JHtsb2NhbFNlYXJjaC50b1N0cmluZygpfWAgOiBjYWNoZURhdGEuc2VhcmNoLFxuICAgICAgICBjYWNoZURhdGE/Lmhhc2ggfHwgbG9jYXRpb24uaGFzaCxcbiAgICAgIClcblxuICAgICAgLy8gUmVtb3ZlIHNlc3Npb24gc3RvcmFnZVxuICAgICAgdHJ5IHtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShzdGF0ZSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW4gd2l0aCBjdXN0b20uXG4gICAqIEBwYXJhbSB7U2lnbkluQ3VzdG9tUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluQ3VzdG9tUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5DdXN0b20ocGFyYW1zOiBTaWduSW5DdXN0b21SZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuQVVUSF9TSUdOX0lOX0NVU1RPTSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcblxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogc2lnbiBpbiB3aXRoIHdlY2hhdCBpZGVuZGlmeVxuICAgKiDpnIDopoHnu5PlkIggaHR0cCBvdmVyY2FsbEZ1bmN0aW9uIOS9v+eUqFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhXZWNoYXQocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfU0lHTl9JTl9XSVRIX1dFQ0hBVF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHdpdGggcHJvdmlkZXJcbiAgICogQHBhcmFtIHtCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgQmluZFdpdGhQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2U8YW55PiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYmluZFdpdGhQcm92aWRlcihwYXJhbXM6IEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0LCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihBcGlVcmxzLlBST1ZJREVSX0JJTkRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGdldENyZWRlbnRpYWxzOiBjcmVkZW50aWFscyA/ICgpID0+IGNyZWRlbnRpYWxzIDogdW5kZWZpbmVkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIHByb2ZpbGUuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlclByb2ZpbGU+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyUHJvZmlsZShwYXJhbXM6IHsgdmVyc2lvbj86IHN0cmluZyB9KTogUHJvbWlzZTxVc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgaW5mby5cbiAgICogQHBhcmFtIHBhcmFtcy5nZXRDcmVkZW50aWFscyBPcHRpb25hbCBjdXN0b20gZ2V0Q3JlZGVudGlhbHMgZnVuY3Rpb24gdG8gYnlwYXNzIGRlZmF1bHQgZ2V0Q3JlZGVudGlhbHMoKSBhbmQgYXZvaWQgZGVhZGxvY2tcbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VySW5mbz59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVzZXJJbmZvKHBhcmFtczoge1xuICAgIHZlcnNpb24/OiBzdHJpbmdcbiAgICBxdWVyeT86IHN0cmluZ1xuICAgIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNcbiAgfSA9IHt9LCk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdVU0VSX01FX1VSTCcpXG5cbiAgICBpZiAocmVzLnBhcmFtcz8ucXVlcnkpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhyZXMucGFyYW1zLnF1ZXJ5IGFzIGFueSlcbiAgICAgIHJlcy51cmwgKz0gYD8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWBcbiAgICB9XG5cbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8VXNlckluZm8+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBnZXRDcmVkZW50aWFsczogcGFyYW1zLmNyZWRlbnRpYWxzID8gKCkgPT4gcGFyYW1zLmNyZWRlbnRpYWxzIDogdW5kZWZpbmVkLFxuICAgIH0pXG5cbiAgICBpZiAodXNlckluZm8uc3ViKSB7XG4gICAgICB1c2VySW5mby51aWQgPSB1c2VySW5mby5zdWJcbiAgICB9XG5cbiAgICByZXR1cm4gdXNlckluZm9cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgaW5mbyBieSB3ZWRhIHBsdWdpbi5cbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fSBBIFByb21pc2U8YW55PiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0V2VkYVVzZXJJbmZvKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oQXBpVXJscy5XRURBX1VTRVJfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gICAgcmV0dXJuIHVzZXJJbmZvXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG1lXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGVNZShwYXJhbXM6IFdpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdVU0VSX01FX1VSTCcpXG4gICAgY29uc3QgdXJsID0gYCR7cmVzLnVybH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocmVzLnBhcmFtcyl9YFxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJQcm9maWxlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBoYXNMb2dpblN0YXRlIGNoZWNrIGlmIGhhcyBsb2dpbiBzdGF0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBBIFByb21pc2U8Ym9vbGVhbj4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGhhc0xvZ2luU3RhdGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNMb2dpblN0YXRlU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0Q3JlZGVudGlhbHNTeW5jKClcbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRMb2dpblN0YXRlKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzQXN5bmMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zIGJ5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1RyYW5zQnlQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFRyYW5zQnlQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdHJhbnNCeVByb3ZpZGVyKHBhcmFtczogVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5VU0VSX1RSQU5TX0JZX1BST1ZJREVSX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgdG9rZW4uXG4gICAqIEBwYXJhbSB7R3JhbnRUb2tlblJlcXVlc3R9IHBhcmFtcyBBIEdyYW50VG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBHcmFudFRva2VuUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdBVVRIX1RPS0VOX1VSTCcpXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVzLnBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJvdmlkZSBsaXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPn0gQSBQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8UHJvdmlkZXJzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQcm92aWRlcnNSZXNwb25zZT4oQXBpVXJscy5QUk9WSURFUl9MSVNULCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdW5iaW5kIHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1VuYmluZFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1bmJpbmRQcm92aWRlcihwYXJhbXM6IFVuYmluZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5QUk9WSURFUl9VTkJJTkRfVVJMfS8ke3BhcmFtcy5wcm92aWRlcl9pZH1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7Q2hlY2tQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tQYXNzd29yZChwYXJhbXM6IENoZWNrUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihgJHtBcGlVcmxzLkNIRUNLX1BXRF9VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IENvbnRhY3Qg5L+u5pS5IOaJi+acuuWPtyDmiJYg6YKu566xXG4gICAqIEBwYXJhbSB7RWRpdENvbnRhY3RSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlZGl0Q29udGFjdChwYXJhbXM6IEVkaXRDb250YWN0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KGAke0FwaVVybHMuQklORF9DT05UQUNUX1VSTH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgUGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7U2V0UGFzc3dvcmRyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQYXNzd29yZChwYXJhbXM6IFNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5BVVRIX1NFVF9QQVNTV09SRH1gLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGVQYXNzd29yZEJ5T2xkIOS9v+eUqOaXp+WvhueggeS/ruaUueWvhuegge+8jOWmguaenOW3sue7j+e7keWumuaJi+acuuWPt++8jOivt+WFiO+8mnN1ZG/vvIzlho3kv67mlLnlr4bnoIFcbiAgICogQHBhcmFtIHtTZXRQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVBhc3N3b3JkQnlPbGQocGFyYW1zOiBVcGRhdGVQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdWRvVG9rZW4gPSBhd2FpdCB0aGlzLnN1ZG8oeyBwYXNzd29yZDogcGFyYW1zLm9sZF9wYXNzd29yZCB9KVxuICAgIHJldHVybiB0aGlzLnNldFBhc3N3b3JkKHtcbiAgICAgIHN1ZG9fdG9rZW46IHN1ZG9Ub2tlbi5zdWRvX3Rva2VuLFxuICAgICAgbmV3X3Bhc3N3b3JkOiBwYXJhbXMubmV3X3Bhc3N3b3JkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogc3Vkb1xuICAgKiBAcGFyYW0ge3N1ZG99IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3VkbyhwYXJhbXM6IFN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxTdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxTdWRvUmVzcG9uc2U+KGAke0FwaVVybHMuU1VET19VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdXNlciB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7R2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVmVyaWZpY2F0aW9uQ29kZVRvQ3VycmVudFVzZXIocGFyYW1zOiBHZXRWZXJpZmljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4ge1xuICAgIHBhcmFtcy50YXJnZXQgPSAnQ1VSX1VTRVInXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+KEFwaVVybHMuVkVSSUZJQ0FUSU9OX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICB3aXRoQ2FwdGNoYTogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNoYW5nZSBCb3VuZCBwcm92aWRlci5cbiAgICogQHBhcmFtIHtDaGFuZ2VCb3VuZFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlPn0gQSBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hhbmdlQm91bmRQcm92aWRlcihwYXJhbXM6IENoYW5nZUJvdW5kUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2U+KGAke0FwaVVybHMuUFJPVklERVJfTElTVH0vJHtwYXJhbXMucHJvdmlkZXJfaWR9L3RyYW5zYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHByb3ZpZGVyX3RyYW5zX3Rva2VuOiBwYXJhbXMudHJhbnNfdG9rZW4sXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUGF0Y2ggdGhlIHVzZXIgcHJvZmlsZS4g5rKh5pyJ5ZKM5pWw5o2u5rqQ5ZCM5q2lXG4gICAqIEBkZXByZWNhdGVkIHVzZSB1cGRhdGVVc2VyQmFzaWNJbmZvXG4gICAqIEBwYXJhbSB7VXNlclByb2ZpbGV9IHBhcmFtcyBBIFVzZXJQcm9maWxlIE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VyUHJvZmlsZT59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFVzZXJQcm9maWxlKHBhcmFtczogVXNlclByb2ZpbGUpOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8VXNlclByb2ZpbGU+KEFwaVVybHMuVVNFUl9QUklGSUxFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHVzZXIgYmFzaWMgaW5mb1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuVVNFUl9CQVNJQ19FRElUX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRjaCB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBAcGFyYW0ge1F1ZXJ5VXNlclByb2ZpbGVSZXF9IGFwcGVuZGVkX3BhcmFtcyBBIFF1ZXJ5VXNlclByb2ZpbGVSZXEgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyUHJvZmlsZShwYXJhbXM6IFF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxRdWVyeVVzZXJQcm9maWxlUmVzcG9uc2U+IHtcbiAgICAvLyBsZXQgdXJsID0gbmV3IFVSTChBcGlVcmxzLlVTRVJfUVVFUllfVVJMKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgTXlVUkxTZWFyY2hQYXJhbXMocGFyYW1zIGFzIGFueSlcbiAgICAvLyB1cmwuc2VhcmNoID0gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlPihgJHtBcGlVcmxzLlVTRVJfUVVFUllfVVJMfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWAsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRDdXN0b21TaWduRnVuYyBzZXQgdGhlIGdldCB0aWNrZXQgZnVuY3Rpb25cbiAgICogQHBhcmFtIGdldFRpY2tGblxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogR2V0Q3VzdG9tU2lnblRpY2tldEZuKSB7XG4gICAgdGhpcy5nZXRDdXN0b21TaWduVGlja2V0Rm4gPSBnZXRUaWNrRm5cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduSW5XaXRoQ3VzdG9tVGlja2V0IGN1c3RvbSBzaWduSW5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldChwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgLy8gICBjb25zdCBjdXN0b21TaWduVGlja2V0Rm4gPSB0aGlzLmdldEN1c3RvbVNpZ25UaWNrZXRGblxuICAvLyAgIGlmICghY3VzdG9tU2lnblRpY2tldEZuKSB7XG4gIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAvLyAgICAgfSlcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgY3VzdG9tVGlja2V0ID0gYXdhaXQgY3VzdG9tU2lnblRpY2tldEZuKClcbiAgLy8gICByZXR1cm4gdGhpcy5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAvLyAgICAgLi4ucGFyYW1zLFxuICAvLyAgICAgcHJvdmlkZXJfaWQ6ICdjdXN0b20nLFxuICAvLyAgICAgcHJvdmlkZXJfdG9rZW46IGN1c3RvbVRpY2tldCxcbiAgLy8gICB9KVxuICAvLyB9XG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjdXN0b21TaWduVGlja2V0Rm4gPSB0aGlzLmdldEN1c3RvbVNpZ25UaWNrZXRGblxuICAgIGlmICghY3VzdG9tU2lnblRpY2tldEZuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICBlcnJvcjogJ2ZhaWxlZF9wcmVjb25kaXRpb24nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ3BsZWFzZSB1c2Ugc2V0Q3VzdG9tU2lnbkZ1bmMgdG8gc2V0IGN1c3RvbSBzaWduIGZ1bmN0aW9uJyxcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IGN1c3RvbVRpY2tldCA9IGF3YWl0IGN1c3RvbVNpZ25UaWNrZXRGbigpXG4gICAgcmV0dXJuIHRoaXMuc2lnbkluQ3VzdG9tKHtcbiAgICAgIHByb3ZpZGVyX2lkOiAnY3VzdG9tJyxcbiAgICAgIHRpY2tldDogY3VzdG9tVGlja2V0LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgcGFzc3dvcmRcbiAgICogQHBhcmFtIHtSZXNldFBhc3N3b3JkUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlc2V0UGFzc3dvcmQocGFyYW1zOiBSZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9SRVNFVF9QQVNTV09SRCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhvcml6ZSBvYXV0aCBBdXRob3JpemVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRob3JpemUocGFyYW1zOiBBdXRob3JpemVSZXF1ZXN0KTogUHJvbWlzZTxBdXRob3JpemVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEF1dGhvcml6ZVJlc3BvbnNlPihBcGlVcmxzLkFVVEhPUklaRV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogYXV0aG9yaXplIGRldmljZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplRGV2aWNlKHBhcmFtczogQXV0aG9yaXplRGV2aWNlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSE9SSVpFX0RFVklDRV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogZGV2aWNlIGF1dGhvcml6YXRpb25cbiAgICogQHBhcmFtIHtEZXZpY2VBdXRob3JpemVSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRldmljZUF1dGhvcml6ZShwYXJhbXM6IERldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPERldmljZUF1dGhvcml6ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5BVVRIX0dFVF9ERVZJQ0VfQ09ERSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPQXV0aCBnZXQgYXV0aG9yaXplIGluZm9cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRob3JpemVJbmZvKHBhcmFtczogQXV0aG9yaXplSW5mb1JlcXVlc3QpOiBQcm9taXNlPEF1dGhvcml6ZUluZm9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHVybCA9IGAke0FwaVVybHMuQVVUSE9SSVpFX0lORk9fVVJMfT8ke0F1dGgucGFyc2VQYXJhbXNUb1NlYXJjaChwYXJhbXMpfWBcbiAgICBsZXQgd2l0aEJhc2ljQXV0aCA9IHRydWVcbiAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICBjb25zdCBoYXNMb2dpbiA9IGF3YWl0IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG4gICAgaWYgKGhhc0xvZ2luKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB3aXRoQmFzaWNBdXRoID0gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8QXV0aG9yaXplSW5mb1Jlc3BvbnNlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQmFzaWNBdXRoLFxuICAgICAgd2l0aENyZWRlbnRpYWxzLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hlY2tVc2VybmFtZShwYXJhbXM6IENoZWNrVXNlcm5hbWVSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5DSEVDS19VU0VSTkFNRSwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrSWZVc2VyRXhpc3QocGFyYW1zOiBDaGVja0lmVXNlckV4aXN0UmVxdWVzdCk6IFByb21pc2U8Q2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDaGVja0lmVXNlckV4aXN0UmVzcG9uc2U+KGAke0FwaVVybHMuQ0hFQ0tfSUZfVVNFUl9FWElTVH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5TY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRTY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRHcm91cHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFscygpXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnJlZnJlc2hUb2tlbih7XG4gICAgICAuLi5jcmVkZW50aWFscyxcbiAgICAgIHZlcnNpb246IHBhcmFtcz8udmVyc2lvbiB8fCAndjEnLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgcHVibGljIGtleSBmb3IgcmVxdWVzdCBwYXJhbXMgZW5jcnlwdGlvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFB1YmxpY0tleSgpOiBQcm9taXNlPFB1YmxpY0tleT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFB1YmxpY0tleT4oQXBpVXJsc1YyLkFVVEhfUFVCTElDX0tFWSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7fSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGVuY3J5cHQgcmVxdWVzdCBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVuY3J5cHRQYXJhbXMocGFyYW1zOiBSZWNvcmQ8YW55LCBhbnk+KTogUHJvbWlzZTxFbmNyeXB0UGFyYW1zPiB7XG4gICAgY29uc3QgeyBpc0VuY3J5cHQgfSA9IHBhcmFtc1xuICAgIGRlbGV0ZSBwYXJhbXMuaXNFbmNyeXB0XG5cbiAgICBjb25zdCBwYXlsb2FkID0gZGVlcENsb25lKHBhcmFtcylcblxuICAgIGNvbnN0IGVuY3J5cHRVdGlscyA9IGF3YWl0IGdldEVuY3J5cHRVdGlscyhpc0VuY3J5cHQsIHRoaXMuY29uZmlnLmFkYXB0ZXIpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgcmV0dXJuIHBhcmFtc1xuICAgIH1cblxuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBsZXQgcHVibGljX2tleV90aHVtYnByaW50ID0gJydcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuXG4gICAgICBpZiAoIXB1YmxpY0tleSB8fCAhcHVibGljX2tleV90aHVtYnByaW50KSB7XG4gICAgICAgIHRocm93IHJlc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQgfSksXG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBwcm92aWRlciBzdWIgdHlwZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVyU3ViVHlwZSgpOiBQcm9taXNlPFByb3ZpZGVyU3ViVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFByb3ZpZGVyU3ViVHlwZT4oQXBpVXJscy5HRVRfUFJPVklERVJfVFlQRSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHByb3ZpZGVyX2lkOiAnd2VkYScsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHByb3ZpZGVyIHN1YiB0eXBlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5Q2FwdGNoYURhdGEoeyB0b2tlbiwga2V5IH06IHsgdG9rZW46IHN0cmluZzsga2V5OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHsgY2FwdGNoYV90b2tlbjogc3RyaW5nOyBleHBpcmVzX2luOiBudW1iZXIgfT4oQXBpVXJscy5WRVJJRllfQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7IHRva2VuLCBrZXkgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YSh7IHN0YXRlLCByZWRpcmVjdF91cmkgPSB1bmRlZmluZWQgfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHsgdG9rZW46IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+KEFwaVVybHMuQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7IHN0YXRlLCByZWRpcmVjdF91cmkgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBtaW5pLXByb2dyYW0gc2NhbiBjb2RlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1Db2RlKHBhcmFtczogR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0KTogUHJvbWlzZTxHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZT4oQXBpVXJscy5HRVRfTUlOSVBST0dSQU1fUVJDT0RFLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIG1pbmktcHJvZ3JhbSBzY2FuIGNvZGUgc3RhdHVzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1JlcXVlc3QsKTogUHJvbWlzZTxHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4oQXBpVXJscy5HRVRfTUlOSVBST0dSQU1fUVJDT0RFX1NUQVRVUywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdXNlciBiZWhhdmlvciBsb2dcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVzZXJCZWhhdmlvckxvZyhwYXJhbXM6IEdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8R2V0VXNlckJlaGF2aW9yTG9nUmVzPiB7XG4gICAgY29uc3QgYWN0aW9uID0geyBMT0dJTjogJ3F1ZXJ5W2FjdGlvbl09VVNFUl9MT0dJTicsIE1PRElGWTogJ25lX3F1ZXJ5W2FjdGlvbl09VVNFUl9MT0dJTicgfVxuICAgIGNvbnN0IHVybCA9IGAke0FwaVVybHMuR0VUX1VTRVJfQkVIQVZJT1JfTE9HfT8ke2FjdGlvbltwYXJhbXMudHlwZV19JmxpbWl0PSR7cGFyYW1zLmxpbWl0fSR7XG4gICAgICBwYXJhbXMucGFnZV90b2tlbiA/IGAmcGFnZV90b2tlbj0ke3BhcmFtcy5wYWdlX3Rva2VufWAgOiAnJ1xuICAgIH1gXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog6L+Z5Liq5pa55rOV5piv55So5oi36Ieq5bex5L+u5pS56Ieq5bex55qE5a+G56CB77yM5LiN5ZCM5LqOL2F1dGgvdjEvdXNlci9wYXNzd29yZOaOpeWPo++8jOivpeaOpeWPo+aYr+euoeeQhuWRmOS/ruaUueS4quS6uueahFxuICAgKiBAcGFyYW0ge01vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0fSBwYXJhbXMgQSBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBsZXQgcHVibGljX2tleV90aHVtYnByaW50ID0gJydcblxuICAgIGNvbnN0IGVuY3J5cHRVdGlscyA9IGF3YWl0IGdldEVuY3J5cHRVdGlscyh0cnVlLCB0aGlzLmNvbmZpZy5hZGFwdGVyKVxuXG4gICAgaWYgKCFlbmNyeXB0VXRpbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG8gbm90IHN1cHBvcnQgZW5jcnlwdCwgYSBlbmNyeXB0IHV0aWwgcmVxdWlyZWQuJylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNLZXkoKVxuICAgICAgcHVibGljS2V5ID0gcmVzLnB1YmxpY19rZXlcbiAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCA9IHJlcy5wdWJsaWNfa2V5X3RodW1icHJpbnRcblxuICAgICAgaWYgKCFwdWJsaWNLZXkgfHwgIXB1YmxpY19rZXlfdGh1bWJwcmludCkge1xuICAgICAgICB0aHJvdyByZXNcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgY29uc3QgZW5jcnlwdF9wYXNzd29yZCA9IHBhcmFtcy5wYXNzd29yZCA/IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLnBhc3N3b3JkIH0pIDogJydcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgY29uc3QgZW5jcnlwdF9uZXdfcGFzc3dvcmQgPSBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5uZXdfcGFzc3dvcmQgfSlcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLlVTRVJfQkFTSUNfRURJVF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keToge1xuICAgICAgICB1c2VyX2lkOiBwYXJhbXMudXNlcl9pZCxcbiAgICAgICAgZW5jcnlwdF9wYXNzd29yZCxcbiAgICAgICAgZW5jcnlwdF9uZXdfcGFzc3dvcmQsXG4gICAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDph43nva7lr4bnoIHvvIzor6XmjqXlj6Pml6DpnIDnmbvlvZXlsLHlj6/ku6Xph43nva7lr4bnoIFcbiAgICogQHBhcmFtIHtNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3R9IHBhcmFtcyBBIE1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW4ocGFyYW1zOiBNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgbGV0IHB1YmxpY19rZXlfdGh1bWJwcmludCA9ICcnXG5cbiAgICBjb25zdCBlbmNyeXB0VXRpbHMgPSBhd2FpdCBnZXRFbmNyeXB0VXRpbHModHJ1ZSwgdGhpcy5jb25maWcuYWRhcHRlcilcblxuICAgIGlmICghZW5jcnlwdFV0aWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvIG5vdCBzdXBwb3J0IGVuY3J5cHQsIGEgZW5jcnlwdCB1dGlsIHJlcXVpcmVkLicpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljS2V5KClcbiAgICAgIHB1YmxpY0tleSA9IHJlcy5wdWJsaWNfa2V5XG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSByZXMucHVibGljX2tleV90aHVtYnByaW50XG5cbiAgICAgIGlmICghcHVibGljS2V5IHx8ICFwdWJsaWNfa2V5X3RodW1icHJpbnQpIHtcbiAgICAgICAgdGhyb3cgcmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGNvbnN0IGVuY3J5cHRfcGFzc3dvcmQgPSBwYXJhbXMucGFzc3dvcmQgPyBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5wYXNzd29yZCB9KSA6ICcnXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGNvbnN0IGVuY3J5cHRfbmV3X3Bhc3N3b3JkID0gZW5jcnlwdFV0aWxzLmdldEVuY3J5cHRJbmZvKHsgcHVibGljS2V5LCBwYXlsb2FkOiBwYXJhbXMubmV3X3Bhc3N3b3JkIH0pXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJsc1YyLkFVVEhfUkVTRVRfUEFTU1dPUkQsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICB1c2VybmFtZTogcGFyYW1zLnVzZXJuYW1lLFxuICAgICAgICBwYXNzd29yZDogZW5jcnlwdF9wYXNzd29yZCxcbiAgICAgICAgbmV3X3Bhc3N3b3JkOiBlbmNyeXB0X25ld19wYXNzd29yZCxcbiAgICAgICAgcHVibGljX2tleV90aHVtYnByaW50LFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgVVJMIHN0YXRlIGFmdGVyIE9BdXRoIGNhbGxiYWNrXG4gICAqL1xuICBwcml2YXRlIHJlc3RvcmVVcmxTdGF0ZShzZWFyY2g/OiBzdHJpbmcsIGhhc2g/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoc2VhcmNoID09PSB1bmRlZmluZWQpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICAgICAgdXJsLnNlYXJjaCA9IHNlYXJjaFxuICAgICAgdXJsLmhhc2ggPSBoYXNoIHx8ICcnXG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIHVybC50b1N0cmluZygpKVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -4,7 +4,7 @@ import { OAuth2Client, defaultStorage } from '../oauth2client/oauth2client';
4
4
  import { Captcha } from '../captcha/captcha';
5
5
  import { deepClone } from '../utils';
6
6
  import MyURLSearchParams from '../utils/urlSearchParams';
7
- import { AuthError } from '..';
7
+ import { AuthError } from './auth-error';
8
8
  async function getEncryptUtils(isEncrypt, adapter) {
9
9
  const getUtils = async () => {
10
10
  try {
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("tcboauth",[],t):"object"==typeof exports?exports.tcboauth=t():e.tcboauth=t()}("undefined"!=typeof window?window:this,()=>(()=>{"use strict";var e={3:(e,t,r)=>{r.r(t),r.d(t,{getEncryptInfo:()=>i});const n=void 0;var o=r(912),i=function(){var{publicKey:e="",payload:t={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!e)return"";try{var r=(0,o.I)(t),i=new n;i.setPublicKey(e);var a=i.encryptLong("object"==typeof r?JSON.stringify(r):r);return a}catch(e){console.error("encrypt error:",e)}return""}},912:(e,t,r)=>{r.d(t,{I:()=>n,y:()=>o});var n=e=>{var t=t=>{for(var r in e)e.hasOwnProperty(r)&&(t[r]=n(e[r]));return t},r=null==e?"NullOrUndefined":Object.prototype.toString.call(e).slice(8,-1);if(["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"].includes(r))return e.slice();switch(r){case"Object":return t(Object.create(Object.getPrototypeOf(e)));case"Array":return t([]);case"Date":return new Date(e.valueOf());case"RegExp":return new RegExp(e.source,(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.sticky?"y":"")+(e.unicode?"u":""));default:return e}},o=e=>{var t=e.match(/^(?:http(s)?:\/\/[^\/]+)?(\/[^\?#]*)/);return t&&t[2]||""}},946:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.COMMUNITY_SITE_URL=t.IS_DEBUG_MODE=t.getProtocol=t.setProtocol=t.getSdkName=t.setSdkName=void 0;var r="@cloudbase/js-sdk";t.setSdkName=function(e){r=e},t.getSdkName=function(){return r};var n="https:";t.setProtocol=function(e){n=e},t.getProtocol=function(){return n},t.IS_DEBUG_MODE=!1,t.COMMUNITY_SITE_URL="https://support.qq.com/products/148793"},205:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ERRORS=void 0,t.ERRORS={INVALID_PARAMS:"INVALID_PARAMS",INVALID_SYNTAX:"INVALID_SYNTAX",INVALID_OPERATION:"INVALID_OPERATION",OPERATION_FAIL:"OPERATION_FAIL",NETWORK_ERROR:"NETWORK_ERROR",UNKOWN_ERROR:"UNKOWN_ERROR"}},794:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.OATUH_LOGINTYPE=void 0,o(r(946),t),o(r(205),t),t.OATUH_LOGINTYPE="constants"},689:function(e,t,r){var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var n,o=0,i=t.length;o<i;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.removeEventListener=t.activateEvent=t.addEventListener=t.CloudbaseEventEmitter=t.IErrorEvent=t.CloudbaseEvent=void 0;var a=r(616);var s=function(e,t){this.data=t||null,this.name=e};t.CloudbaseEvent=s;var c=function(e){function t(t,r){var n=e.call(this,"error",{error:t,data:r})||this;return n.error=t,n}return o(t,e),t}(s);t.IErrorEvent=c;var u=function(){function e(){this.listeners={}}return e.prototype.on=function(e,t){return function(e,t,r){r[e]=r[e]||[],r[e].push(t)}(e,t,this.listeners),this},e.prototype.off=function(e,t){return function(e,t,r){if(null==r?void 0:r[e]){var n=r[e].indexOf(t);-1!==n&&r[e].splice(n,1)}}(e,t,this.listeners),this},e.prototype.fire=function(e,t){if((0,a.isInstanceOf)(e,c))return console.error(e.error),this;var r=(0,a.isString)(e)?new s(e,t||{}):e,n=r.name;if(this.listens(n)){r.target=this;for(var o=0,u=this.listeners[n]?i([],this.listeners[n],!0):[];o<u.length;o++){u[o].call(this,r)}}return this},e.prototype.listens=function(e){return this.listeners[e]&&this.listeners[e].length>0},e}();t.CloudbaseEventEmitter=u;var l=new u;t.addEventListener=function(e,t){l.on(e,t)},t.activateEvent=function(e,t){void 0===t&&(t={}),l.fire(e,t)},t.removeEventListener=function(e,t){l.off(e,t)}},616:function(e,t,r){var n=this&&this.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};Object.defineProperty(t,"__esModule",{value:!0}),t.parseCaptcha=t.parseQueryString=t.transformPhone=t.sleep=t.printGroupLog=t.throwError=t.printInfo=t.printError=t.printWarn=t.execCallback=t.createPromiseCallback=t.removeParam=t.getHash=t.getQuery=t.toQueryString=t.formatUrl=t.generateRequestId=t.genSeqId=t.isFormData=t.isInstanceOf=t.isNull=t.isPalinObject=t.isUndefined=t.isString=t.isArray=void 0;var o=r(794);t.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},t.isString=function(e){return"string"==typeof e},t.isUndefined=function(e){return void 0===e},t.isPalinObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},t.isNull=function(e){return"[object Null]"===Object.prototype.toString.call(e)},t.isInstanceOf=function(e,t){return e instanceof t},t.isFormData=function(e){return"[object FormData]"===Object.prototype.toString.call(e)},t.genSeqId=function(){return Math.random().toString(16).slice(2)},t.generateRequestId=function(){var e=(new Date).getTime(),t=(null===Date||void 0===Date?void 0:Date.now)&&1e3*Date.now()||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(r){var n=16*Math.random();return e>0?(n=(e+n)%16|0,e=Math.floor(e/16)):(n=(t+n)%16|0,t=Math.floor(t/16)),("x"===r?n:7&n|8).toString(16)}))},t.formatUrl=function(e,t,r){void 0===r&&(r={});var n=/\?/.test(t),o="";return Object.keys(r).forEach((function(e){""===o?!n&&(t+="?"):o+="&",o+="".concat(e,"=").concat(encodeURIComponent(r[e]))})),/^http(s)?:\/\//.test(t+=o)?t:"".concat(e).concat(t)},t.toQueryString=function(e){void 0===e&&(e={});var t=[];return Object.keys(e).forEach((function(r){t.push("".concat(r,"=").concat(encodeURIComponent(e[r])))})),t.join("&")},t.getQuery=function(e,t){if("undefined"==typeof window)return!1;var r=t||decodeURIComponent(window.location.search),n=new RegExp("(^|&)".concat(e,"=([^&]*)(&|$)")),o=r.substr(r.indexOf("?")+1).match(n);return null!=o?o[2]:""};t.getHash=function(e){if("undefined"==typeof window)return"";var t=window.location.hash.match(new RegExp("[#?&/]".concat(e,"=([^&#]*)")));return t?t[1]:""},t.removeParam=function(e,t){var r=t.split("?")[0],n=[],o=-1!==t.indexOf("?")?t.split("?")[1]:"";if(""!==o){for(var i=(n=o.split("&")).length-1;i>=0;i-=1)n[i].split("=")[0]===e&&n.splice(i,1);r="".concat(r,"?").concat(n.join("&"))}return r},t.createPromiseCallback=function(){var e={};if(!Promise){(e=function(){}).promise={};var t=function(){throw new Error('Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.')};return Object.defineProperty(e.promise,"then",{get:t}),Object.defineProperty(e.promise,"catch",{get:t}),e}var r=new Promise((function(t,r){e=function(e,n){return e?r(e):t(n)}}));return e.promise=r,e},t.execCallback=function(e,t,r){if(void 0===r&&(r=null),e&&"function"==typeof e)return e(t,r);if(t)throw t;return r},t.printWarn=function(e,t){console.warn("[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t))},t.printError=function(e,t){console.error({code:e,msg:"[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t)})},t.printInfo=function(e,t){console.log("[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t))},t.throwError=function(e,t){throw new Error(JSON.stringify({code:e,msg:"[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t)}))},t.printGroupLog=function(e){var t,r=e.title,n=e.subtitle,o=void 0===n?"":n,i=e.content,a=void 0===i?[]:i,s=e.printTrace,c=void 0!==s&&s,u=e.collapsed;void 0!==u&&u?(console.groupCollapsed||console.error)(r,o):(console.group||console.error)(r,o);for(var l=0,d=a;l<d.length;l++){var f=d[l],p=f.type,h=f.body;switch(p){case"info":console.log(h);break;case"warn":console.warn(h);break;case"error":console.error(h)}}c&&(console.trace||console.log)("stack trace:"),null===(t=console.groupEnd)||void 0===t||t.call(console)};t.sleep=function(e){return void 0===e&&(e=0),new Promise((function(t){return setTimeout(t,e)}))},t.transformPhone=function(e){return"+86".concat(e)};t.parseQueryString=function(e){e=e.replace(/^\?/,"");var t={};return e.split("&").forEach((function(e){var r=e.split("="),n=r[0],o=r[1];n=decodeURIComponent(n),o=decodeURIComponent(o),n&&(t[n]?Array.isArray(t[n])?t[n].push(o):t[n]=[t[n],o]:t[n]=o)})),t},t.parseCaptcha=function(e){var r={},o=e.match(/^(data:.*?)(\?[^#\s]*)?$/);if(o){e=o[1];var i=o[2];i&&(r=(0,t.parseQueryString)(i))}var a=r.token,s=n(r,["token"]);return/^data:/.test(e)&&!a?{error:"invalid_argument",error_description:"invalid captcha data: ".concat(e)}:a?{state:s.state,token:a,captchaData:e}:{error:"unimplemented",error_description:"need to impl captcha data"}}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{r.r(n),r.d(n,{AUTH_API_PREFIX:()=>s,AUTH_STATE_CHANGED_TYPE:()=>l,Auth:()=>Be,AuthError:()=>We,CloudbaseOAuth:()=>ze,EVENTS:()=>d,LOGIN_STATE_CHANGED_TYPE:()=>u,OAUTH_TYPE:()=>f,authModels:()=>e,weappJwtDecodeAll:()=>O});var e={};r.r(e);var t,o,i,a,s="/auth";!function(e){e.AUTH_SIGN_UP_URL="/v1/signup",e.AUTH_TOKEN_URL="/v1/token",e.AUTH_REVOKE_URL="/v1/revoke",e.WEDA_USER_URL="/v1/plugin/weda/userinfo",e.AUTH_RESET_PASSWORD="/v1/reset",e.AUTH_GET_DEVICE_CODE="/v1/device/code",e.CHECK_USERNAME="/v1/checkUsername",e.CHECK_IF_USER_EXIST="/v1/checkIfUserExist",e.GET_PROVIDER_TYPE="/v1/mgr/provider/providerSubType",e.AUTH_SIGN_IN_URL="/v1/signin",e.AUTH_SIGN_IN_ANONYMOUSLY_URL="/v1/signin/anonymously",e.AUTH_SIGN_IN_WITH_PROVIDER_URL="/v1/signin/with/provider",e.AUTH_SIGN_IN_WITH_WECHAT_URL="/v1/signin/wechat/noauth",e.AUTH_SIGN_IN_CUSTOM="/v1/signin/custom",e.PROVIDER_TOKEN_URL="/v1/provider/token",e.PROVIDER_URI_URL="/v1/provider/uri",e.USER_ME_URL="/v1/user/me",e.AUTH_SIGNOUT_URL="/v1/user/signout",e.USER_QUERY_URL="/v1/user/query",e.USER_PRIFILE_URL="/v1/user/profile",e.USER_BASIC_EDIT_URL="/v1/user/basic/edit",e.USER_TRANS_BY_PROVIDER_URL="/v1/user/trans/by/provider",e.PROVIDER_LIST="/v1/user/provider",e.PROVIDER_BIND_URL="/v1/user/provider/bind",e.PROVIDER_UNBIND_URL="/v1/user/provider",e.CHECK_PWD_URL="/v1/user/sudo",e.SUDO_URL="/v1/user/sudo",e.BIND_CONTACT_URL="/v1/user/contact",e.AUTH_SET_PASSWORD="/v1/user/password",e.AUTHORIZE_DEVICE_URL="/v1/user/device/authorize",e.AUTHORIZE_URL="/v1/user/authorize",e.AUTHORIZE_INFO_URL="/v1/user/authorize/info",e.AUTHORIZED_DEVICES_DELETE_URL="/v1/user/authorized/devices/",e.AUTH_REVOKE_ALL_URL="/v1/user/revoke/all",e.GET_USER_BEHAVIOR_LOG="/v1/user/security/history",e.VERIFICATION_URL="/v1/verification",e.VERIFY_URL="/v1/verification/verify",e.CAPTCHA_DATA_URL="/v1/captcha/data",e.VERIFY_CAPTCHA_DATA_URL="/v1/captcha/data/verify",e.GET_CAPTCHA_URL="/v1/captcha/init",e.GET_MINIPROGRAM_QRCODE="/v1/qrcode/generate",e.GET_MINIPROGRAM_QRCODE_STATUS="/v1/qrcode/get/status"}(t||(t={})),function(e){e.AUTH_SIGN_IN_URL="/v2/signin/username",e.AUTH_TOKEN_URL="/v2/token",e.USER_ME_URL="/v2/user/me",e.VERIFY_URL="/v2/signin/verificationcode",e.AUTH_SIGN_IN_WITH_PROVIDER_URL="/v2/signin/with/provider",e.AUTH_PUBLIC_KEY="/v2/signin/publichkey",e.AUTH_RESET_PASSWORD="/v2/signin/password/update"}(o||(o={})),function(e){e.REGISTER="REGISTER",e.SIGN_IN="SIGN_IN",e.PASSWORD_RESET="PASSWORD_RESET",e.EMAIL_ADDRESS_CHANGE="EMAIL_ADDRESS_CHANGE",e.PHONE_NUMBER_CHANGE="PHONE_NUMBER_CHANGE"}(i||(i={})),function(e){e.UNREACHABLE="unreachable",e.LOCAL="local",e.CANCELLED="cancelled",e.UNKNOWN="unknown",e.UNAUTHENTICATED="unauthenticated",e.RESOURCE_EXHAUSTED="resource_exhausted",e.FAILED_PRECONDITION="failed_precondition",e.INVALID_ARGUMENT="invalid_argument",e.DEADLINE_EXCEEDED="deadline_exceeded",e.NOT_FOUND="not_found",e.ALREADY_EXISTS="already_exists",e.PERMISSION_DENIED="permission_denied",e.ABORTED="aborted",e.OUT_OF_RANGE="out_of_range",e.UNIMPLEMENTED="unimplemented",e.INTERNAL="internal",e.UNAVAILABLE="unavailable",e.DATA_LOSS="data_loss",e.INVALID_PASSWORD="invalid_password",e.PASSWORD_NOT_SET="password_not_set",e.INVALID_STATUS="invalid_status",e.USER_PENDING="user_pending",e.USER_BLOCKED="user_blocked",e.INVALID_VERIFICATION_CODE="invalid_verification_code",e.TWO_FACTOR_REQUIRED="two_factor_required",e.INVALID_TWO_FACTOR="invalid_two_factor",e.INVALID_TWO_FACTOR_RECOVERY="invalid_two_factor_recovery",e.UNDER_REVIEW="under_review",e.INVALID_REQUEST="invalid_request",e.UNAUTHORIZED_CLIENT="unauthorized_client",e.ACCESS_DENIED="access_denied",e.UNSUPPORTED_RESPONSE_TYPE="unsupported_response_type",e.INVALID_SCOPE="invalid_scope",e.INVALID_GRANT="invalid_grant",e.SERVER_ERROR="server_error",e.TEMPORARILY_UNAVAILABLE="temporarily_unavailable",e.INTERACTION_REQUIRED="interaction_required",e.LOGIN_REQUIRED="login_required",e.ACCOUNT_SELECTION_REQUIRED="account_selection_required",e.CONSENT_REQUIRED="consent_required",e.INVALID_REQUEST_URI="invalid_request_uri",e.INVALID_REQUEST_OBJECT="invalid_request_object",e.REQUEST_NOT_SUPPORTED="request_not_supported",e.REQUEST_URI_NOT_SUPPORTED="request_uri_not_supported",e.REGISTRATION_NOT_SUPPORTED="registration_not_supported",e.CAPTCHA_REQUIRED="captcha_required",e.CAPTCHA_INVALID="captcha_invalid"}(a||(a={}));var c,u={SIGN_OUT:"sign_out",SIGN_IN:"sign_in",CREDENTIALS_ERROR:"credentials_error"},l={SIGNED_OUT:"SIGNED_OUT",SIGNED_IN:"SIGNED_IN",INITIAL_SESSION:"INITIAL_SESSION",PASSWORD_RECOVERY:"PASSWORD_RECOVERY",TOKEN_REFRESHED:"TOKEN_REFRESHED",USER_UPDATED:"USER_UPDATED",BIND_IDENTITY:"BIND_IDENTITY"},d={LOGIN_STATE_CHANGED:"loginStateChanged",AUTH_STATE_CHANGED:"authStateChanged"},f={SIGN_IN:"sign_in",BIND_IDENTITY:"bind_identity"};function p(){return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,e=>{var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}!function(e){e.CLIENT_ID="client_id",e.CLIENT_SECRET="client_secret",e.RESPONSE_TYPE="response_type",e.SCOPE="scope",e.STATE="state",e.REDIRECT_URI="redirect_uri",e.ERROR="error",e.ERROR_DESCRIPTION="error_description",e.ERROR_URI="error_uri",e.GRANT_TYPE="grant_type",e.CODE="code",e.ACCESS_TOKEN="access_token",e.TOKEN_TYPE="token_type",e.EXPIRES_IN="expires_in",e.USERNAME="username",e.PASSWORD="password",e.REFRESH_TOKEN="refresh_token"}(c||(c={}));var h=r(912);function v(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function y(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){v(i,n,o,a,s,"next",e)}function s(e){v(i,n,o,a,s,"throw",e)}a(void 0)}))}}var g=new Map;class _{constructor(e){this.clientId=(null==e?void 0:e.clientId)||"",g=g||new Map}run(e,t){var r=this;return y((function*(){e="".concat(r.clientId,"_").concat(e);var n=g.get(e);return n||(n=new Promise((n,o)=>{y((function*(){try{yield r.runIdlePromise();var i=t();n(yield i)}catch(e){o(e)}finally{g.delete(e)}}))()}),g.set(e,n)),n}))()}runIdlePromise(){return Promise.resolve()}}var m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",E=/^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;var I=function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!E.test(e))throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");var t;e+="==".slice(2-(3&e.length));for(var r,n,o="",i=0;i<e.length;)t=m.indexOf(e.charAt(i++))<<18|m.indexOf(e.charAt(i++))<<12|(r=m.indexOf(e.charAt(i++)))<<6|(n=m.indexOf(e.charAt(i++))),o+=64===r?String.fromCharCode(t>>16&255):64===n?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return o};function b(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw new Error("Illegal base64url string!")}try{return function(e){return decodeURIComponent(I(e).replace(/(.)/g,e=>{var t=e.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t="0".concat(t)),"%".concat(t)}))}(t)}catch(e){return I(t)}}function O(e){if("string"!=typeof e)throw new Error("Invalid token specified");try{var t=e.split(".").map((e,t)=>2===t?e:JSON.parse(b(e)));return{claims:t[1],header:t[0],signature:t[2]}}catch(e){throw new Error("Invalid token specified: ".concat(e)?e.message:0)}}function S(){if("undefined"==typeof globalThis)return!1;var{wx:e}=globalThis;if(void 0===e)return!1;if(void 0===globalThis.Page)return!1;if(!e.getDeviceInfo)return!1;if(!e.getStorageSync)return!1;if(!e.setStorageSync)return!1;if(!e.connectSocket)return!1;if(!e.request)return!1;try{if(!e.getDeviceInfo())return!1;if("qq"===e.getDeviceInfo().platform)return!1}catch(e){return!1}return!0}var R=!1;function C(){R=R||void 0!==typeof window&&"miniprogram"===window.__wxjs_environment}try{S()||(R=R||!!navigator.userAgent.match(/miniprogram/i)||"miniprogram"===window.__wxjs_environment,window&&window.WeixinJSBridge&&window.WeixinJSBridge.invoke?C():"undefined"!=typeof document&&document.addEventListener("WeixinJSBridgeReady",C,!1))}catch(X){}var T="@cloudbase/js-sdk";function w(){return T}var A="https:";var P,U="INVALID_PARAMS",N="INVALID_OPERATION",D="OPERATION_FAIL";!function(e){e.local="local",e.none="none",e.session="session"}(P||(P={}));var x=function(){};function L(e,t){console.warn("[".concat(w(),"][").concat(e,"]:").concat(t))}var k,j=(k=function(e,t){return(k=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}k(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),q=function(){return(q=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},H=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{c(n.next(e))}catch(e){i(e)}}function s(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}c((n=n.apply(e,t||[])).next())}))},G=function(e,t){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,n=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){a.label=s[1];break}if(6===s[0]&&a.label<o[1]){a.label=o[1],o=s;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(s);break}o[2]&&a.ops.pop(),a.trys.pop();continue}s=t.call(e,a)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}};!function(e){function t(t){var r=e.call(this)||this,n=t.timeout,o=t.timeoutMsg,i=t.restrictedMethods;return r.timeout=n||0,r.timeoutMsg=o||"请求超时",r.restrictedMethods=i||["get","post","upload","download"],r}j(t,e),t.prototype.get=function(e){return this.request(q(q({},e),{method:"get"}),this.restrictedMethods.includes("get"))},t.prototype.post=function(e){return this.request(q(q({},e),{method:"post"}),this.restrictedMethods.includes("post"))},t.prototype.put=function(e){return this.request(q(q({},e),{method:"put"}))},t.prototype.upload=function(e){var t=e.data,r=e.file,n=e.name,o=e.method,i=e.headers,a=void 0===i?{}:i,s={post:"post",put:"put"}[null==o?void 0:o.toLowerCase()]||"put",c=new FormData;return"post"===s?(Object.keys(t).forEach((function(e){c.append(e,t[e])})),c.append("key",n),c.append("file",r),this.request(q(q({},e),{data:c,method:s}),this.restrictedMethods.includes("upload"))):this.request(q(q({},e),{method:"put",headers:a,body:r}),this.restrictedMethods.includes("upload"))},t.prototype.download=function(e){return H(this,void 0,void 0,(function(){var t,r,n,o;return G(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.get(q(q({},e),{headers:{},responseType:"blob"}))];case 1:return t=i.sent().data,r=window.URL.createObjectURL(new Blob([t])),n=decodeURIComponent(new URL(e.url).pathname.split("/").pop()||""),(o=document.createElement("a")).href=r,o.setAttribute("download",n),o.style.display="none",document.body.appendChild(o),o.click(),window.URL.revokeObjectURL(r),document.body.removeChild(o),[3,3];case 2:return i.sent(),[3,3];case 3:return[2,new Promise((function(t){t({statusCode:200,tempFilePath:e.url})}))]}}))}))},t.prototype.fetch=function(e){var t;return H(this,void 0,void 0,(function(){var r,n,o,i,a,s,c,u,l,d,f,p,h,v=this;return G(this,(function(y){switch(y.label){case 0:return r=new AbortController,n=e.url,o=e.enableAbort,i=void 0!==o&&o,a=e.stream,s=void 0!==a&&a,c=e.signal,u=e.timeout,l=e.shouldThrowOnError,d=void 0===l||l,f=null!=u?u:this.timeout,c&&(c.aborted&&r.abort(),c.addEventListener("abort",(function(){return r.abort()}))),p=null,i&&f&&(p=setTimeout((function(){console.warn(v.timeoutMsg),r.abort(new Error(v.timeoutMsg))}),f)),[4,fetch(n,q(q({},e),{signal:r.signal})).then((function(e){return H(v,void 0,void 0,(function(){var t,r,n;return G(this,(function(o){switch(o.label){case 0:return clearTimeout(p),d?e.ok?(t=e,[3,3]):[3,1]:[3,4];case 1:return n=(r=Promise).reject,[4,e.json()];case 2:t=n.apply(r,[o.sent()]),o.label=3;case 3:return[2,t];case 4:return[2,e]}}))}))})).catch((function(e){if(clearTimeout(p),d)return Promise.reject(e)}))];case 1:return h=y.sent(),[2,{data:s?h.body:(null===(t=h.headers.get("content-type"))||void 0===t?void 0:t.includes("application/json"))?h.json():h.text(),statusCode:h.status,header:h.headers}]}}))}))},t.prototype.request=function(e,t){var r=this;void 0===t&&(t=!1);var n=String(e.method).toLowerCase()||"get";return new Promise((function(o){var i,a,s,c=e.url,u=e.headers,l=void 0===u?{}:u,d=e.data,f=e.responseType,p=e.withCredentials,h=e.body,v=e.onUploadProgress,y=function(e,t,r){void 0===r&&(r={});var n=/\?/.test(t),o="";return Object.keys(r).forEach((function(e){""===o?!n&&(t+="?"):o+="&",o+="".concat(e,"=").concat(encodeURIComponent(r[e]))})),/^http(s)?:\/\//.test(t+=o)?t:"".concat(e).concat(t)}(A,c,"get"===n?d:{}),g=new XMLHttpRequest;g.open(n,y),f&&(g.responseType=f),Object.keys(l).forEach((function(e){g.setRequestHeader(e,l[e])})),v&&g.upload.addEventListener("progress",v),g.onreadystatechange=function(){var e={};if(4===g.readyState){var t=g.getAllResponseHeaders().trim().split(/[\r\n]+/),r={};t.forEach((function(e){var t=e.split(": "),n=t.shift().toLowerCase(),o=t.join(": ");r[n]=o})),e.header=r,e.statusCode=g.status;try{e.data="blob"===f?g.response:JSON.parse(g.responseText)}catch(t){e.data="blob"===f?g.response:g.responseText}clearTimeout(i),o(e)}},t&&r.timeout&&(i=setTimeout((function(){console.warn(r.timeoutMsg),g.abort()}),r.timeout)),s=d,a="[object FormData]"===Object.prototype.toString.call(s)?d:"application/x-www-form-urlencoded"===l["content-type"]?function(e){void 0===e&&(e={});var t=[];return Object.keys(e).forEach((function(r){t.push("".concat(r,"=").concat(encodeURIComponent(e[r])))})),t.join("&")}(d):h||(d?JSON.stringify(d):void 0),p&&(g.withCredentials=!0),g.send(a)}))}}((function(){}));var V;!function(e){e.WEB="web",e.WX_MP="wx_mp"}(V||(V={}));var M=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),B=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{c(n.next(e))}catch(e){i(e)}}function s(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}c((n=n.apply(e,t||[])).next())}))},W=function(e,t){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,n=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){a.label=s[1];break}if(6===s[0]&&a.label<o[1]){a.label=o[1],o=s;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(s);break}o[2]&&a.ops.pop(),a.trys.pop();continue}s=t.call(e,a)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}},F=function(e){function t(t){var r=e.call(this)||this;return r.root=t,t.tcbCacheObject||(t.tcbCacheObject={}),r}return M(t,e),t.prototype.setItem=function(e,t){this.root.tcbCacheObject[e]=t},t.prototype.getItem=function(e){return this.root.tcbCacheObject[e]},t.prototype.removeItem=function(e){delete this.root.tcbCacheObject[e]},t.prototype.clear=function(){delete this.root.tcbCacheObject},t}(x);!function(){function e(e){this.keys={};var t=e.persistence,r=e.platformInfo,n=void 0===r?{}:r,o=e.keys,i=void 0===o?{}:o;this.platformInfo=n,this.storage||(this.persistenceTag=this.platformInfo.adapter.primaryStorage||t,this.storage=function(e,t){switch(e){case"local":return t.localStorage?t.localStorage:(L(U,"localStorage is not supported on current platform"),new F(t.root));case"none":return new F(t.root);default:return t.localStorage?t.localStorage:(L(U,"localStorage is not supported on current platform"),new F(t.root))}}(this.persistenceTag,this.platformInfo.adapter),this.keys=i)}Object.defineProperty(e.prototype,"mode",{get:function(){return this.storage.mode||"sync"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"persistence",{get:function(){return this.persistenceTag},enumerable:!1,configurable:!0}),e.prototype.setStore=function(e,t,r){if("async"!==this.mode){if(this.storage)try{var n={version:r||"localCachev1",content:t};this.storage.setItem(e,JSON.stringify(n))}catch(e){throw new Error(JSON.stringify({code:D,msg:"[".concat(w(),"][").concat(D,"]setStore failed"),info:e}))}}else L(N,"current platform's storage is asynchronous, please use setStoreAsync insteed")},e.prototype.setStoreAsync=function(e,t,r){return B(this,void 0,void 0,(function(){var n;return W(this,(function(o){switch(o.label){case 0:if(!this.storage)return[2];o.label=1;case 1:return o.trys.push([1,3,,4]),n={version:r||"localCachev1",content:t},[4,this.storage.setItem(e,JSON.stringify(n))];case 2:return o.sent(),[3,4];case 3:return o.sent(),[2];case 4:return[2]}}))}))},e.prototype.getStore=function(e,t){var r;if("async"!==this.mode){try{if("undefined"!=typeof process&&(null===(r=process.env)||void 0===r?void 0:r.tcb_token))return process.env.tcb_token;if(!this.storage)return""}catch(e){return""}t=t||"localCachev1";var n=this.storage.getItem(e);return n&&n.indexOf(t)>=0?JSON.parse(n).content:""}L(N,"current platform's storage is asynchronous, please use getStoreAsync insteed")},e.prototype.getStoreAsync=function(e,t){var r;return B(this,void 0,void 0,(function(){var n;return W(this,(function(o){switch(o.label){case 0:try{if("undefined"!=typeof process&&(null===(r=process.env)||void 0===r?void 0:r.tcb_token))return[2,process.env.tcb_token];if(!this.storage)return[2,""]}catch(e){return[2,""]}return t=t||"localCachev1",[4,this.storage.getItem(e)];case 1:return(n=o.sent())&&n.indexOf(t)>=0?[2,JSON.parse(n).content]:[2,""]}}))}))},e.prototype.removeStore=function(e){"async"!==this.mode?this.storage.removeItem(e):L(N,"current platform's storage is asynchronous, please use removeStoreAsync insteed")},e.prototype.removeStoreAsync=function(e){return B(this,void 0,void 0,(function(){return W(this,(function(t){switch(t.label){case 0:return[4,this.storage.removeItem(e)];case 1:return t.sent(),[2]}}))}))}}();var K=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),Y=function(e,t,r){if(r||2===arguments.length)for(var n,o=0,i=t.length;o<i;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))};var z=function(e,t){this.data=t||null,this.name=e},Q=function(e){function t(t,r){var n=e.call(this,"error",{error:t,data:r})||this;return n.error=t,n}return K(t,e),t}(z),J=function(){function e(){this.listeners={}}return e.prototype.on=function(e,t){return function(e,t,r){r[e]=r[e]||[],r[e].push(t)}(e,t,this.listeners),this},e.prototype.off=function(e,t){return function(e,t,r){if(null==r?void 0:r[e]){var n=r[e].indexOf(t);-1!==n&&r[e].splice(n,1)}}(e,t,this.listeners),this},e.prototype.fire=function(e,t){if(e instanceof Q)return console.error(e.error),this;var r="string"==typeof e?new z(e,t||{}):e,n=r.name;if(this.listens(n)){r.target=this;for(var o=0,i=this.listeners[n]?Y([],this.listeners[n],!0):[];o<i.length;o++){i[o].call(this,r)}}return this},e.prototype.listens=function(e){return this.listeners[e]&&this.listeners[e].length>0},e}();new J;var Z=new J;"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox");!function(){function e(){var e=this;this.listeners=[],this.signal={aborted:!1,addEventListener:function(t,r){"abort"===t&&e.listeners.push(r)}}}e.prototype.abort=function(){this.signal.aborted||(this.signal.aborted=!0,this.listeners.forEach((function(e){return e()})))}}();function X(e){this.message=e}X.prototype=new Error,X.prototype.name="InvalidCharacterError";"undefined"!=typeof window&&window.atob&&window.atob.bind(window);function $(e){this.message=e}$.prototype=new Error,$.prototype.name="InvalidTokenError";function ee(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function te(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ee(Object(r),!0).forEach((function(t){re(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ee(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function re(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ne(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function oe(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){ne(i,n,o,a,s,"next",e)}function s(e){ne(i,n,o,a,s,"throw",e)}a(void 0)}))}}var ie=function(){var e=oe((function*(e,t){var r=null,n=null;try{var o=Object.assign({},t);o.method||(o.method="GET"),o.body&&"string"!=typeof o.body&&(o.body=JSON.stringify(o.body));var i=yield fetch(e,o),s=yield i.json();null!=s&&s.error?(n=s).error_uri=new URL(e).pathname:r=s}catch(t){n={error:a.UNREACHABLE,error_description:t.message,error_uri:new URL(e).pathname}}if(n)throw n;return r}));return function(t,r){return e.apply(this,arguments)}}();var ae=new class{constructor(e){this._env=(null==e?void 0:e.env)||""}getItem(e){var t=this;return oe((function*(){return window.localStorage.getItem("".concat(e).concat(t._env))}))()}removeItem(e){var t=this;return oe((function*(){window.localStorage.removeItem("".concat(e).concat(t._env))}))()}setItem(e,t){var r=this;return oe((function*(){window.localStorage.setItem("".concat(e).concat(r._env),t)}))()}getItemSync(e){return window.localStorage.getItem("".concat(e).concat(this._env))}removeItemSync(e){window.localStorage.removeItem("".concat(e).concat(this._env))}setItemSync(e,t){window.localStorage.setItem("".concat(e).concat(this._env),t)}};function se(e){var t=!0;return null!=e&&e.expires_at&&null!=e&&e.access_token&&(t=e.expires_at<new Date),t}class ce{constructor(e){this.credentials=null,this.accessKeyCredentials=null,this.singlePromise=null,this.tokenSectionName=e.tokenSectionName,this.storage=e.storage,this.clientId=e.clientId,this.singlePromise=new _({clientId:this.clientId}),this.credentials=e.credentials||null}getStorageCredentialsSync(){var e=null,t=this.storage.getItemSync(this.tokenSectionName);if(null!=t)try{var r;null!==(r=e=JSON.parse(t))&&void 0!==r&&r.expires_at&&(e.expires_at=new Date(e.expires_at))}catch(t){this.storage.removeItem(this.tokenSectionName),e=null}return e}setCredentials(e){var t=this;return oe((function*(){if(null!=e&&e.expires_in){if(null!=e&&e.expires_at||(e.expires_at=new Date(Date.now()+1e3*(e.expires_in-30))),t.storage){var r=JSON.stringify(e);yield t.storage.setItem(t.tokenSectionName,r)}t.credentials=e}else t.storage&&(yield t.storage.removeItem(t.tokenSectionName)),t.credentials=null}))()}setAccessKeyCredentials(e){this.accessKeyCredentials=e}getCredentials(){var e=this;return oe((function*(){return e.singlePromise.run("getCredentials",oe((function*(){if(se(e.credentials)){var{credentials:t,isAccessKeyCredentials:r}=yield e.getStorageCredentials();if(r)return t;e.credentials=t}return e.credentials})))}))()}getStorageCredentials(){var e=this;return oe((function*(){return e.singlePromise.run("_getStorageCredentials",oe((function*(){var t=null,r=!1,n=yield e.storage.getItem(e.tokenSectionName);if(n)try{var o;null!==(o=t=JSON.parse(n))&&void 0!==o&&o.expires_at&&(t.expires_at=new Date(t.expires_at))}catch(r){yield e.storage.removeItem(e.tokenSectionName),t=null}else t=e.accessKeyCredentials||null,r=!0;return{credentials:t,isAccessKeyCredentials:r}})))}))()}}class ue{constructor(e){var t;this.initializePromise=null,this.lockAcquired=!1,this.pendingInLock=[],this.singlePromise=null,e.clientSecret||(e.clientSecret=""),!e.clientId&&e.env&&(e.clientId=e.env),this.apiOrigin=e.apiOrigin,this.apiPath=e.apiPath||s,this.clientId=e.clientId,this.i18n=e.i18n,this.eventBus=e.eventBus,this.singlePromise=new _({clientId:this.clientId}),this.retry=this.formatRetry(e.retry,ue.defaultRetry),e.baseRequest?this.baseRequest=e.baseRequest:this.baseRequest=ie,this.tokenInURL=e.tokenInURL,this.headers=e.headers,this.storage=e.storage||ae,this.localCredentials=new ce({tokenSectionName:"credentials_".concat(e.clientId),storage:this.storage,clientId:e.clientId}),this.clientSecret=e.clientSecret,e.clientId&&(this.basicAuth="Basic ".concat(function(e){for(var t,r,n,o,i="",a=0,s=(e=String(e)).length%3;a<e.length;){if((r=e.charCodeAt(a++))>255||(n=e.charCodeAt(a++))>255||(o=e.charCodeAt(a++))>255)throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");i+=m.charAt((t=r<<16|n<<8|o)>>18&63)+m.charAt(t>>12&63)+m.charAt(t>>6&63)+m.charAt(63&t)}return s?i.slice(0,s-3)+"===".substring(s):i}("".concat(e.clientId,":").concat(this.clientSecret)))),this.wxCloud=e.wxCloud;try{S()&&(this.useWxCloud=e.useWxCloud,void 0===this.wxCloud&&e.env&&(wx.cloud.init({env:e.env}),this.wxCloud=wx.cloud))}catch(e){}this.refreshTokenFunc=e.refreshTokenFunc||this.defaultRefreshTokenFunc,this.anonymousSignInFunc=e.anonymousSignInFunc,this.onCredentialsError=e.onCredentialsError,this.getInitialSession=e.getInitialSession,this.onInitialSessionObtained=e.onInitialSessionObtained,this.logDebugMessages=null!==(t=e.debug)&&void 0!==t&&t,Z.on("lang_change",e=>{var t;this.i18n=(null===(t=e.data)||void 0===t?void 0:t.i18n)||this.i18n})}setGetInitialSession(e){this.getInitialSession=e}setOnInitialSessionObtained(e){this.onInitialSessionObtained=e}initialize(e){var t=this;return oe((function*(){return t.initializePromise?yield t.initializePromise:void 0!==e?(t.initializePromise=e,yield t.initializePromise):(t.initializePromise=oe((function*(){return yield t._acquireLock(-1,oe((function*(){return yield t._initialize()})))}))(),yield t.initializePromise)}))()}setCredentials(e){var t=this;return oe((function*(){return yield t.initializePromise,t._acquireLock(-1,oe((function*(){return t.localCredentials.setCredentials(e)})))}))()}setAccessKeyCredentials(e){return this.localCredentials.setAccessKeyCredentials(e)}getAccessToken(){var e=this;return oe((function*(){yield e.initializePromise;var t=yield e.getCredentials();if(null!=t&&t.access_token)return Promise.resolve(t.access_token);var r={error:a.UNAUTHENTICATED};return Promise.reject(r)}))()}request(e,t){var r=this;return oe((function*(){var n,o,i,s;t||(t={});var c=r.formatRetry(t.retry,r.retry);if(t.headers=te(te({},t.headers),{},{[null===(n=r.i18n)||void 0===n?void 0:n.LANG_HEADER_KEY]:null===(o=r.i18n)||void 0===o?void 0:o.lang}),r.headers&&(t.headers=te(te({},r.headers),t.headers)),t.headers["x-request-id"]||(t.headers["x-request-id"]=p()),!t.headers["x-device-id"]){var u=yield r.getDeviceId();t.headers["x-device-id"]=u}if(null!==(i=t)&&void 0!==i&&i.withBasicAuth&&r.basicAuth&&(t.headers.Authorization=r.basicAuth),null!==(s=t)&&void 0!==s&&s.withCredentials){var l=t.getCredentials?yield t.getCredentials():yield r.getCredentials();l&&(r.tokenInURL?(e.indexOf("?")<0&&(e+="?"),e+="access_token=".concat(l.access_token)):t.headers.Authorization="".concat(l.token_type," ").concat(l.access_token))}else r.clientId&&e.indexOf("client_id")<0&&(e+=e.indexOf("?")<0?"?":"&",e+="client_id=".concat(r.clientId));e.startsWith("/")&&(e="".concat(r.apiOrigin).concat(r.apiPath).concat(e));for(var d=null,f=c+1,h=0;h<f;h++){try{var v;if(null!==(v=d=t.useWxCloud||r.useWxCloud?yield r.wxCloudCallFunction(e,t):yield r.baseRequest(e,t))&&void 0!==v&&v.code)throw{error:d.code,error_description:d.message,error_uri:new URL(e).pathname};break}catch(e){if(t.withCredentials&&e&&e.error===a.UNAUTHENTICATED)return yield r.setCredentials(null),Promise.reject(e);if(h===c||!e||"unreachable"!==e.error)return Promise.reject(e)}yield r.sleep(ue.retryInterval)}return d}))()}wxCloudCallFunction(e,t){var r=this;return oe((function*(){var n=null,o=null;try{var i,s="";try{s=yield wx.getRendererUserAgent()}catch(e){}var{result:c}=yield r.wxCloud.callFunction({name:"httpOverCallFunction",data:{url:e,method:t.method,headers:te({origin:"https://servicewechat.com","User-Agent":s},t.headers),body:t.body}});null!=c&&null!==(i=c.body)&&void 0!==i&&i.error_code?(o=null==c?void 0:c.body).error_uri=(0,h.y)(e):n=null==c?void 0:c.body}catch(t){o={error:a.UNREACHABLE,error_description:t.message,error_uri:(0,h.y)(e)}}if(o)throw o;return n}))()}getCredentials(){var e=this;return oe((function*(){return yield e.initializePromise,e._acquireLock(-1,oe((function*(){return e._getCredentials()})))}))()}getCredentialsSync(){return this.localCredentials.getStorageCredentialsSync()}getCredentialsAsync(){return this.getCredentials()}getScope(){var e=this;return oe((function*(){var t=yield e.localCredentials.getCredentials();if(!t){var r,n="credentials not found";return null===(r=e.onCredentialsError)||void 0===r||r.call(e,{msg:n}),e.unAuthenticatedError(n)}return t.scope}))()}getGroups(){var e=this;return oe((function*(){var t=yield e.localCredentials.getCredentials();if(!t){var r,n="credentials not found";return null===(r=e.onCredentialsError)||void 0===r||r.call(e,{msg:n}),e.unAuthenticatedError(n)}return t.groups}))()}refreshToken(e,t){var r=this;return oe((function*(){return yield r.initializePromise,r._acquireLock(-1,oe((function*(){return r._refreshToken(e,t)})))}))()}_refreshToken(e,t){var r=this;return oe((function*(){return r.singlePromise.run("_refreshToken",oe((function*(){if(!e||!e.refresh_token){var n,o="no refresh token found in credentials";return null===(n=r.onCredentialsError)||void 0===n||n.call(r,{msg:o}),r.unAuthenticatedError(o)}try{var i,s=yield r.refreshTokenFunc(e.refresh_token,e);return yield r.localCredentials.setCredentials(s),null===(i=r.eventBus)||void 0===i||i.fire(d.AUTH_STATE_CHANGED,{event:l.TOKEN_REFRESHED}),s}catch(e){var c;if(null!=t&&t.throwError)throw e;if(e.error===a.INVALID_GRANT){var u;yield r.localCredentials.setCredentials(null);var f=e.error_description;return null===(u=r.onCredentialsError)||void 0===u||u.call(r,{msg:f}),r.unAuthenticatedError(f)}return null===(c=r.onCredentialsError)||void 0===c||c.call(r,{msg:e.error_description}),Promise.reject(e)}})))}))()}anonymousLogin(e){var t=this;return oe((function*(){return t.singlePromise.run("_anonymousLogin",oe((function*(){if(t.anonymousSignInFunc){var r=yield t.anonymousSignInFunc(e);e=r||(yield t.localCredentials.getCredentials())}else e=yield t.anonymousSignIn(e);return e})))}))()}checkRetry(e){var t=null;if(("number"!=typeof e||e<ue.minRetry||e>ue.maxRetry)&&(t={error:a.UNREACHABLE,error_description:"wrong options param: retry"}),t)throw t;return e}formatRetry(e,t){return void 0===e?t:this.checkRetry(e)}sleep(e){return oe((function*(){return new Promise(t=>{setTimeout(()=>{t()},e)})}))()}anonymousSignIn(e){var r=this;return oe((function*(){return r.singlePromise.run("_anonymous",oe((function*(){if(!e||"anonymous"!==e.scope)return r.unAuthenticatedError("no anonymous in credentials");try{var n=yield r.request(t.AUTH_SIGN_IN_ANONYMOUSLY_URL,{method:"POST",withBasicAuth:!0,body:{}});return yield r.localCredentials.setCredentials(n),n}catch(e){return e.error===a.INVALID_GRANT?(yield r.localCredentials.setCredentials(null),r.unAuthenticatedError(e.error_description)):Promise.reject(e)}})))}))()}defaultRefreshTokenFunc(e,r){var n=this;return oe((function*(){if(void 0===e||""===e){var i,a="refresh token not found";return null===(i=n.onCredentialsError)||void 0===i||i.call(n,{msg:a}),n.unAuthenticatedError(a)}var s=t.AUTH_TOKEN_URL;return"v2"===(null==r?void 0:r.version)&&(s=o.AUTH_TOKEN_URL),te(te({},yield n.request(s,{method:"POST",body:{client_id:n.clientId,client_secret:n.clientSecret,grant_type:"refresh_token",refresh_token:e}})),{},{version:(null==r?void 0:r.version)||"v1"})}))()}getDeviceId(){var e=this;return oe((function*(){if(e.deviceID)return e.deviceID;var t=yield e.storage.getItem("device_id");return"string"==typeof t&&t.length>=16&&t.length<=48||(t=p(),yield e.storage.setItem("device_id",t)),e.deviceID=t,t}))()}unAuthenticatedError(e){var t={error:a.UNAUTHENTICATED,error_description:e};return Promise.reject(t)}_debug(){if(this.logDebugMessages){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];console.log("[OAuth2Client]",...t)}}_initialize(){var e=this;return oe((function*(){try{if(!e.getInitialSession)return e._debug("#_initialize()","no getInitialSession callback set, skipping"),{error:null};e._debug("#_initialize()","calling getInitialSession callback");try{var{data:t,error:r}=yield e.getInitialSession();if(null!=t&&t.session&&(e._debug("#_initialize()","session obtained from getInitialSession",t.session),yield e.localCredentials.setCredentials(null==t?void 0:t.session)),e.onInitialSessionObtained){e._debug("#_initialize()","calling onInitialSessionObtained callback");try{yield e.onInitialSessionObtained(t,r)}catch(t){e._debug("#_initialize()","error in onInitialSessionObtained",t)}}return r?(e._debug("#_initialize()","error from getInitialSession",r),{error:r}):{error:null}}catch(t){return e._debug("#_initialize()","exception during getInitialSession",t),{error:t instanceof Error?t:new Error(String(t))}}}catch(r){return e._debug("#_initialize()","unexpected error",r),{error:r instanceof Error?r:new Error(String(r))}}finally{e._debug("#_initialize()","end")}}))()}_acquireLock(e,t){var r=this;return oe((function*(){r._debug("#_acquireLock","begin",e);try{if(r.lockAcquired){var n=r.pendingInLock.length?r.pendingInLock[r.pendingInLock.length-1]:Promise.resolve(),o=oe((function*(){return yield n,yield t()}))();return r.pendingInLock.push(oe((function*(){try{yield o}catch(e){}}))()),o}r._debug("#_acquireLock","acquiring lock for client",r.clientId);try{r.lockAcquired=!0;var i=t();for(r.pendingInLock.push(oe((function*(){try{yield i}catch(e){}}))()),yield i;r.pendingInLock.length;){var a=[...r.pendingInLock];yield Promise.all(a),r.pendingInLock.splice(0,a.length)}return yield i}finally{r._debug("#_acquireLock","releasing lock for client",r.clientId),r.lockAcquired=!1}}finally{r._debug("#_acquireLock","end")}}))()}_getCredentials(){var e=this;return oe((function*(){var t=yield e.localCredentials.getCredentials();if(!t){var r,n="credentials not found";return null===(r=e.onCredentialsError)||void 0===r||r.call(e,{msg:n}),e.unAuthenticatedError(n)}if(se(t))if(t.refresh_token)try{t=yield e._refreshToken(t)}catch(r){var o;if("anonymous"!==t.scope)return null===(o=e.onCredentialsError)||void 0===o||o.call(e,{msg:r.error_description}),Promise.reject(r);t=yield e.anonymousLogin(t)}else{if("anonymous"!==t.scope){var i,a="no refresh token found in credentials";return null===(i=e.onCredentialsError)||void 0===i||i.call(e,{msg:a}),e.unAuthenticatedError(a)}t=yield e.anonymousLogin(t)}return t}))()}}ue.defaultRetry=2,ue.minRetry=0,ue.maxRetry=5,ue.retryInterval=1e3;var le=r(689),de=r(616);function fe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function pe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?fe(Object(r),!0).forEach((function(t){he(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):fe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function he(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ve(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function ye(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){ve(i,n,o,a,s,"next",e)}function s(e){ve(i,n,o,a,s,"throw",e)}a(void 0)}))}}var ge=(e,t)=>{var r;return function(){for(var n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];clearTimeout(r),r=setTimeout(()=>e.apply(null,o),t)}},_e=new le.CloudbaseEventEmitter,me="resolveCaptchaData",Ee="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:999",Ie="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:320px;padding:20px;background:#fff;border-radius:8px;box-shadow:0 0 10px rgba(0,0,0,0.2);z-index:1000",be="margin-bottom:15px",Oe="display:flex;align-items:center;justify-content:space-between;margin-bottom:15px",Se="width:100%;height:auto;border:1px solid #eee",Re="padding:10px 8px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer;flex:1;white-space:nowrap;margin-left:10px",Ce="width:100%;padding:14px 16px;margin-bottom:15px;box-sizing:border-box;border:2px solid #e8ecf4;border-radius:10px;font-size:15px",Te="width:100%;padding:10px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer",we="background:#6c757d;cursor:not-allowed",Ae=e=>{var{oauthInstance:t,captchaState:r}=e,n=function(){var e=ye((function*(){try{var e=yield t.createCaptchaData({state:r.state});r=pe(pe({},r),{},{captchaData:e.data,token:e.token}),document.getElementById("captcha-image").src=e.data}catch(e){console.error("刷新图形验证码失败",e)}}));return function(){return e.apply(this,arguments)}}(),o=(e,t,r)=>{var n=document.createElement(e);return t&&(n.style.cssText=t),r&&(n.textContent=r),n},i=o("div",Ee),a=o("div",Ie);a.appendChild(o("p",be,"请输入你看到的字符:"));var s=o("div",Oe),c=o("img",Se);c.id="captcha-image",c.src=r.captchaData,s.appendChild(c);var u=o("button",Re,"刷新");u.onclick=ge(ye((function*(){u.textContent="加载中...",u.disabled=!0,u.style.cssText="".concat(Re,";").concat(we);try{yield n()}finally{u.textContent="刷新",u.disabled=!1,u.style.cssText=Re}})),500),s.appendChild(u),a.appendChild(s);var l=o("input",Ce);l.type="text",l.placeholder="输入字符",l.maxLength=4,a.appendChild(l);var d=o("div","color:#dc3545;font-size:12px;margin-bottom:10px;display:none;padding:8px;background:#f8d7da;border:1px solid #f5c6cb;border-radius:4px");a.appendChild(d);var f=e=>{d.textContent=e,d.style.display="block"},p=o("button",Te,"确定");p.onclick=ge(ye((function*(){var e=l.value.trim();if(e){d.style.display="none",p.textContent="验证中...",p.disabled=!0,p.style.cssText="".concat(Te,";").concat(we);try{var o=yield t.verifyCaptchaData({token:r.token,key:e});_e.fire(me,o),console.log("图形验证码校验成功"),document.body.removeChild(i),document.body.removeChild(a)}catch(e){console.error("图形验证码校验失败",e);var s=e.error_description||"图形验证码校验失败";f(s),l.value="",l.focus(),yield n()}finally{p.textContent="确定",p.disabled=!1,p.style.cssText=Te}}else f("请输入字符")})),500),a.appendChild(p),document.body.appendChild(i),document.body.appendChild(a)},Pe=function(){var e=ye((function*(e,t){var{captchaData:r,state:n,token:o}=(0,de.parseCaptcha)(e);return Ae({oauthInstance:t,captchaState:{captchaData:r,state:n,token:o}}),new Promise(e=>{console.log("等待图形验证码校验结果..."),_e.on(me,t=>{e(null==t?void 0:t.data)})})}));return function(t,r){return e.apply(this,arguments)}}();function Ue(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function Ne(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){Ue(i,n,o,a,s,"next",e)}function s(e){Ue(i,n,o,a,s,"throw",e)}a(void 0)}))}}class De{constructor(e){e.openURIWithCallback||(e.openURIWithCallback=this.getDefaultOpenURIWithCallback()),e.storage||(e.storage=ae),this.config=e,this.tokenSectionName="captcha_".concat(e.clientId||e.env)}isMatch(){var e,t;return(null===(e=this.config)||void 0===e||null===(e=e.adapter)||void 0===e||null===(t=e.isMatch)||void 0===t?void 0:t.call(e))||S()}request(e,t){var r=this;return Ne((function*(){t||(t={}),t.method||(t.method="GET");var n,o="".concat(t.method,":").concat(e),i=e;t.withCaptcha&&(i=yield r.appendCaptchaTokenToURL(e,o,!1));try{n=yield r.config.request(i,t)}catch(n){return n.error===a.CAPTCHA_REQUIRED||n.error===a.CAPTCHA_INVALID?(e=yield r.appendCaptchaTokenToURL(e,o,n.error===a.CAPTCHA_INVALID),r.config.request(e,t)):Promise.reject(n)}return n}))()}getDefaultOpenURIWithCallback(){return e=>Pe(e,this.config.oauthInstance)}getCaptchaToken(e,r){var n=this;return Ne((function*(){if(!e){var o=yield n.findCaptchaToken();if(o)return o}var i=yield n.config.request(t.CAPTCHA_DATA_URL,{method:"POST",body:{state:r,redirect_uri:""},withCredentials:!1}),a="".concat(i.data,"?state=").concat(encodeURIComponent(r),"&token=").concat(encodeURIComponent(i.token)),s=yield n.config.openURIWithCallback(a);return n.saveCaptchaToken(s),s.captcha_token}))()}appendCaptchaTokenToURL(e,t,r){var n=this;return Ne((function*(){var o=yield n.getCaptchaToken(r,t);return e.indexOf("?")>0?e+="&captcha_token=".concat(o):e+="?captcha_token=".concat(o),e}))()}saveCaptchaToken(e){var t=this;return Ne((function*(){e.expires_at=new Date(Date.now()+1e3*(e.expires_in-10));var r=JSON.stringify(e);yield t.config.storage.setItem(t.tokenSectionName,r)}))()}findCaptchaToken(){var e=this;return Ne((function*(){var t=yield e.config.storage.getItem(e.tokenSectionName);if(null!=t)try{var r=JSON.parse(t);return null!=r&&r.expires_at&&(r.expires_at=new Date(r.expires_at)),r.expires_at<new Date?null:r.captcha_token}catch(t){return yield e.config.storage.removeItem(e.tokenSectionName),null}return null}))()}}const xe=class{constructor(e){if(this.params={},"string"==typeof e)this.parse(e);else if(e&&"object"==typeof e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&this.append(t,e[t])}parse(e){e.split("&").forEach(e=>{var[t,r]=e.split("=").map(decodeURIComponent);this.append(t,r)})}append(e,t){this.params[e]?this.params[e]=this.params[e].concat([t]):this.params[e]=[t]}get(e){return this.params[e]?this.params[e][0]:null}getAll(e){return this.params[e]||[]}delete(e){delete this.params[e]}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}set(e,t){this.params[e]=[t]}toString(){var e=this,t=[],r=function(r){Object.prototype.hasOwnProperty.call(e.params,r)&&e.params[r].forEach(e=>{t.push("".concat(encodeURIComponent(r),"=").concat(encodeURIComponent(e)))})};for(var n in this.params)r(n);return t.join("&")}};var Le=["provider_redirect_uri","other_params"];function ke(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function je(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ke(Object(r),!0).forEach((function(t){qe(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ke(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function qe(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function He(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function Ge(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){He(i,n,o,a,s,"next",e)}function s(e){He(i,n,o,a,s,"throw",e)}a(void 0)}))}}function Ve(e,t){return Me.apply(this,arguments)}function Me(){return(Me=Ge((function*(e,t){var n=function(){var e=Ge((function*(){try{return r(3)}catch(e){try{return yield Promise.resolve().then(r.bind(r,3))}catch(e){return}}}));return function(){return e.apply(this,arguments)}}();try{var o;if(((null==t||null===(o=t.root)||void 0===o?void 0:o.globalThis)||globalThis).IS_MP_BUILD)return;0}catch(t){if(e)return n()}}))).apply(this,arguments)}class Be{static parseParamsToSearch(e){return Object.keys(e).forEach(t=>{e[t]||delete e[t]}),new xe(e).toString()}constructor(e){var{request:t}=e,r=e.credentialsClient;if(!r){var n={apiOrigin:e.apiOrigin,apiPath:e.apiPath,clientId:e.clientId,storage:e.storage,env:e.env,baseRequest:e.baseRequest,anonymousSignInFunc:e.anonymousSignInFunc,wxCloud:e.wxCloud,onCredentialsError:e.onCredentialsError,headers:e.headers||{},i18n:e.i18n,debug:e.debug};r=new ue(n)}if(!t){var o=r.request.bind(r),i=new De(je({env:e.env,clientId:e.clientId,request:o,storage:e.storage,adapter:e.adapter,oauthInstance:this},e.captchaOptions));t=i.request.bind(i)}this.config={env:e.env,apiOrigin:e.apiOrigin,apiPath:e.apiPath,clientId:e.clientId,request:t,credentialsClient:r,storage:e.storage||ae,adapter:e.adapter}}getParamsByVersion(e,r){var n,i=(0,h.I)(e),a=(null===(n={v2:o}[null==i?void 0:i.version])||void 0===n?void 0:n[r])||t[r];return i&&delete i.version,{params:i,url:a}}signIn(e){var t=this;return Ge((function*(){var r=e.version||"v1",n=t.getParamsByVersion(e,"AUTH_SIGN_IN_URL");n.params.query&&delete n.params.query;var o=yield t.getEncryptParams(n.params),i=yield t.config.request(n.url,{method:"POST",body:o});return yield t.config.credentialsClient.setCredentials(je(je({},i),{},{version:r})),Promise.resolve(i)}))()}signInAnonymously(){var e=arguments,r=this;return Ge((function*(){var n=e.length>0&&void 0!==e[0]?e[0]:{},o=e.length>1&&void 0!==e[1]&&e[1],i=yield r.config.request(t.AUTH_SIGN_IN_ANONYMOUSLY_URL,{method:"POST",body:n,useWxCloud:o});return yield r.config.credentialsClient.setCredentials(i),Promise.resolve(i)}))()}signUp(e){var r=this;return Ge((function*(){var n=yield r.config.request(t.AUTH_SIGN_UP_URL,{method:"POST",body:e});return yield r.config.credentialsClient.setCredentials(n),Promise.resolve(n)}))()}signOut(e){var r=this;return Ge((function*(){var n={};if(e){try{n=yield r.config.request(t.AUTH_SIGNOUT_URL,{method:"POST",withCredentials:!0,body:e})}catch(e){e.error!==a.UNAUTHENTICATED&&console.log("sign_out_error",e)}return yield r.config.credentialsClient.setCredentials(),n}var o=yield r.config.credentialsClient.getAccessToken(),i=yield r.config.request(t.AUTH_REVOKE_URL,{method:"POST",body:{token:o}});return yield r.config.credentialsClient.setCredentials(),Promise.resolve(i)}))()}revokeAllDevices(){var e=this;return Ge((function*(){yield e.config.request(t.AUTH_REVOKE_ALL_URL,{method:"DELETE",withCredentials:!0})}))()}revokeDevice(e){var r=this;return Ge((function*(){yield r.config.request(t.AUTHORIZED_DEVICES_DELETE_URL+e.device_id,{method:"DELETE",withCredentials:!0})}))()}getVerification(e,r){var n=this;return Ge((function*(){var o=!1;"CUR_USER"===e.target?o=!0:(yield n.hasLoginState())&&(o=!0);var i=(0,h.I)(e);return i.phone_number&&!/^\+\d{1,3}\s+\d+/.test(i.phone_number)&&(i.phone_number="+86 ".concat(i.phone_number)),n.config.request(t.VERIFICATION_URL,{method:"POST",body:i,withCaptcha:(null==r?void 0:r.withCaptcha)||!1,withCredentials:o})}))()}verify(e){var t=this;return Ge((function*(){var r=t.getParamsByVersion(e,"VERIFY_URL"),n=yield t.config.request(r.url,{method:"POST",body:r.params});return"v2"===(null==e?void 0:e.version)&&(yield t.config.credentialsClient.setCredentials(je(je({},n),{},{version:"v2"}))),n}))()}genProviderRedirectUri(e){var r=this;return Ge((function*(){var{provider_redirect_uri:n,other_params:o={}}=e,i=function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.includes(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.includes(r)||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(e,Le);n&&!i.redirect_uri&&(i.redirect_uri=n);var a="".concat(t.PROVIDER_URI_URL,"?").concat(Be.parseParamsToSearch(i));return Object.keys(o).forEach(e=>{var t=o[e];("sign_out_uri"!==e||(null==t?void 0:t.length)>0)&&(a+="&other_params[".concat(e,"]=").concat(encodeURIComponent(t)))}),r.config.request(a,{method:"GET"})}))()}grantProviderToken(e){var r=arguments,n=this;return Ge((function*(){var o=r.length>1&&void 0!==r[1]&&r[1];return n.config.request(t.PROVIDER_TOKEN_URL,{method:"POST",body:e,useWxCloud:o})}))()}patchProviderToken(e){var r=this;return Ge((function*(){return r.config.request(t.PROVIDER_TOKEN_URL,{method:"PATCH",body:e})}))()}signInWithProvider(e){var t=arguments,r=this;return Ge((function*(){var n=t.length>1&&void 0!==t[1]&&t[1],o=r.getParamsByVersion(e,"AUTH_SIGN_IN_WITH_PROVIDER_URL"),i=yield r.config.request(o.url,{method:"POST",body:o.params,useWxCloud:n});return yield r.config.credentialsClient.setCredentials(je(je({},i),{},{version:(null==e?void 0:e.version)||"v1"})),Promise.resolve(i)}))()}toBindIdentity(e){var t=this;return Ge((function*(){var r,n,o,i=e.credentials||(yield t.config.credentialsClient.localCredentials.getCredentials());try{yield t.bindWithProvider({provider_token:e.provider_token},i),r={data:{type:f.BIND_IDENTITY,provider:e.provider},error:null}}catch(e){r={data:{type:f.BIND_IDENTITY},error:new We(e)}}e.fireEvent&&(null===(n=t.config.eventBus)||void 0===n||null===(o=n.fire)||void 0===o||o.call(n,d.AUTH_STATE_CHANGED,{event:l.BIND_IDENTITY,info:r}));return r}))()}getInitialSession(){var e=this;return Ge((function*(){var t={};try{var r,n,o,i,a;if("undefined"==typeof window||"undefined"==typeof document)return{data:null,error:null};var s=new URLSearchParams(null===(r=location)||void 0===r?void 0:r.search),c=s.get("code"),u=s.get("state");if(!c||!u)return{data:null,error:null};var l=null;try{l=JSON.parse(sessionStorage.getItem(u)||"null")}catch(e){}t={type:null===(n=l)||void 0===n?void 0:n.type};var d=s.get("error"),p=s.get("error_description");if(d||p)return{data:t,error:new We({message:p||d||"Unknown error from OAuth provider"})};var h=(null===(o=l)||void 0===o?void 0:o.provider)||s.get("provider");if(!h)return{data:t,error:new We({message:"Provider is required for OAuth verification"})};var v,y,g=location.origin+location.pathname,{provider_token:_}=yield e.grantProviderToken({provider_id:h,provider_redirect_uri:g,provider_code:c}),m=null;if(l.type===f.BIND_IDENTITY)v=yield e.config.credentialsClient.localCredentials.getCredentials(),y=yield e.toBindIdentity({provider:h,provider_token:_,credentials:v});else if(l.type===f.SIGN_IN){y=e.getParamsByVersion({provider:h},"AUTH_SIGN_IN_WITH_PROVIDER_URL"),v=yield e.config.request(y.url,{method:"POST",body:{provider_token:_}});try{m=yield e.getUserInfo({credentials:v})}catch(e){console.error("get user info error",e)}y={data:je(je({},t),{},{session:v,user:m}),error:null}}s.delete("code"),s.delete("state"),s.delete("provider"),e.restoreUrlState(void 0===(null===(i=l)||void 0===i?void 0:i.search)?"?".concat(s.toString()):l.search,(null===(a=l)||void 0===a?void 0:a.hash)||location.hash);try{sessionStorage.removeItem(u)}catch(e){}return y}catch(e){return{data:t,error:new We(e)}}}))()}signInCustom(e){var r=this;return Ge((function*(){var n=yield r.config.request(t.AUTH_SIGN_IN_CUSTOM,{method:"POST",body:e});return yield r.config.credentialsClient.setCredentials(n),Promise.resolve(n)}))()}signInWithWechat(){var e=arguments,r=this;return Ge((function*(){var n=e.length>0&&void 0!==e[0]?e[0]:{},o=yield r.config.request(t.AUTH_SIGN_IN_WITH_WECHAT_URL,{method:"POST",body:n});return yield r.config.credentialsClient.setCredentials(o),Promise.resolve(o)}))()}bindWithProvider(e,r){var n=this;return Ge((function*(){return n.config.request(t.PROVIDER_BIND_URL,{method:"POST",body:e,withCredentials:!0,getCredentials:r?()=>r:void 0})}))()}getUserProfile(e){var t=this;return Ge((function*(){return t.getUserInfo(e)}))()}getUserInfo(){var e=arguments,t=this;return Ge((function*(){var r,n=e.length>0&&void 0!==e[0]?e[0]:{},o=t.getParamsByVersion(n,"USER_ME_URL");if(null!==(r=o.params)&&void 0!==r&&r.query){var i=new xe(o.params.query);o.url+="?".concat(i.toString())}var a=yield t.config.request(o.url,{method:"GET",withCredentials:!0,getCredentials:n.credentials?()=>n.credentials:void 0});return a.sub&&(a.uid=a.sub),a}))()}getWedaUserInfo(){var e=this;return Ge((function*(){return yield e.config.request(t.WEDA_USER_URL,{method:"GET",withCredentials:!0})}))()}deleteMe(e){var t=this;return Ge((function*(){var r=t.getParamsByVersion(e,"USER_ME_URL"),n="".concat(r.url,"?").concat(Be.parseParamsToSearch(r.params));return t.config.request(n,{method:"DELETE",withCredentials:!0})}))()}hasLoginState(){var e=this;return Ge((function*(){try{return yield e.config.credentialsClient.getAccessToken(),!0}catch(e){return!1}}))()}hasLoginStateSync(){return this.config.credentialsClient.getCredentialsSync()}getLoginState(){var e=this;return Ge((function*(){return e.config.credentialsClient.getCredentialsAsync()}))()}transByProvider(e){var r=this;return Ge((function*(){return r.config.request(t.USER_TRANS_BY_PROVIDER_URL,{method:"PATCH",body:e,withCredentials:!0})}))()}grantToken(e){var t=this;return Ge((function*(){var r=t.getParamsByVersion(e,"AUTH_TOKEN_URL");return t.config.request(r.url,{method:"POST",body:r.params})}))()}getProviders(){var e=this;return Ge((function*(){return e.config.request(t.PROVIDER_LIST,{method:"GET",withCredentials:!0})}))()}unbindProvider(e){var r=this;return Ge((function*(){return r.config.request("".concat(t.PROVIDER_UNBIND_URL,"/").concat(e.provider_id),{method:"DELETE",withCredentials:!0})}))()}checkPassword(e){var r=this;return Ge((function*(){return r.config.request("".concat(t.CHECK_PWD_URL),{method:"POST",withCredentials:!0,body:e})}))()}editContact(e){var r=this;return Ge((function*(){return r.config.request("".concat(t.BIND_CONTACT_URL),{method:"PATCH",withCredentials:!0,body:e})}))()}setPassword(e){var r=this;return Ge((function*(){return r.config.request("".concat(t.AUTH_SET_PASSWORD),{method:"PATCH",withCredentials:!0,body:e})}))()}updatePasswordByOld(e){var t=this;return Ge((function*(){var r=yield t.sudo({password:e.old_password});return t.setPassword({sudo_token:r.sudo_token,new_password:e.new_password})}))()}sudo(e){var r=this;return Ge((function*(){return r.config.request("".concat(t.SUDO_URL),{method:"POST",withCredentials:!0,body:e})}))()}sendVerificationCodeToCurrentUser(e){var r=this;return Ge((function*(){return e.target="CUR_USER",r.config.request(t.VERIFICATION_URL,{method:"POST",body:e,withCredentials:!0,withCaptcha:!0})}))()}changeBoundProvider(e){var r=this;return Ge((function*(){return r.config.request("".concat(t.PROVIDER_LIST,"/").concat(e.provider_id,"/trans"),{method:"POST",body:{provider_trans_token:e.trans_token},withCredentials:!0})}))()}setUserProfile(e){var r=this;return Ge((function*(){return r.config.request(t.USER_PRIFILE_URL,{method:"PATCH",body:e,withCredentials:!0})}))()}updateUserBasicInfo(e){var r=this;return Ge((function*(){return r.config.request(t.USER_BASIC_EDIT_URL,{method:"POST",withCredentials:!0,body:e})}))()}queryUserProfile(e){var r=this;return Ge((function*(){var n=new xe(e);return r.config.request("".concat(t.USER_QUERY_URL,"?").concat(n.toString()),{method:"GET",withCredentials:!0})}))()}setCustomSignFunc(e){this.getCustomSignTicketFn=e}signInWithCustomTicket(){var e=this;return Ge((function*(){var t=e.getCustomSignTicketFn;if(!t)return Promise.reject({error:"failed_precondition",error_description:"please use setCustomSignFunc to set custom sign function"});var r=yield t();return e.signInCustom({provider_id:"custom",ticket:r})}))()}resetPassword(e){var r=this;return Ge((function*(){return r.config.request(t.AUTH_RESET_PASSWORD,{method:"POST",body:e})}))()}authorize(e){var r=this;return Ge((function*(){return r.config.request(t.AUTHORIZE_URL,{method:"POST",withCredentials:!0,body:e})}))()}authorizeDevice(e){var r=this;return Ge((function*(){return r.config.request(t.AUTHORIZE_DEVICE_URL,{method:"POST",withCredentials:!0,body:e})}))()}deviceAuthorize(e){var r=this;return Ge((function*(){return r.config.request(t.AUTH_GET_DEVICE_CODE,{method:"POST",body:e,withCredentials:!0})}))()}authorizeInfo(e){var r=this;return Ge((function*(){var n="".concat(t.AUTHORIZE_INFO_URL,"?").concat(Be.parseParamsToSearch(e)),o=!0,i=!1;return(yield r.hasLoginState())&&(i=!0,o=!1),r.config.request(n,{method:"GET",withBasicAuth:o,withCredentials:i})}))()}checkUsername(e){var r=this;return Ge((function*(){return r.config.request(t.CHECK_USERNAME,{method:"GET",body:e,withCredentials:!0})}))()}checkIfUserExist(e){var r=this;return Ge((function*(){var n=new xe(e);return r.config.request("".concat(t.CHECK_IF_USER_EXIST,"?").concat(n.toString()),{method:"GET"})}))()}loginScope(){var e=this;return Ge((function*(){return e.config.credentialsClient.getScope()}))()}loginGroups(){var e=this;return Ge((function*(){return e.config.credentialsClient.getGroups()}))()}refreshTokenForce(e){var t=this;return Ge((function*(){var r=yield t.config.credentialsClient.getCredentials();return yield t.config.credentialsClient.refreshToken(je(je({},r),{},{version:(null==e?void 0:e.version)||"v1"}))}))()}getCredentials(){var e=this;return Ge((function*(){return e.config.credentialsClient.getCredentials()}))()}getPublicKey(){var e=this;return Ge((function*(){return e.config.request(o.AUTH_PUBLIC_KEY,{method:"POST",body:{}})}))()}getEncryptParams(e){var t=this;return Ge((function*(){var{isEncrypt:r}=e;delete e.isEncrypt;var n=(0,h.I)(e),o=yield Ve(r,t.config.adapter);if(!o)return e;var i="",a="";try{var s=yield t.getPublicKey();if(i=s.public_key,a=s.public_key_thumbprint,!i||!a)throw s}catch(e){throw e}return{params:o.getEncryptInfo({publicKey:i,payload:n}),public_key_thumbprint:a}}))()}getProviderSubType(){var e=this;return Ge((function*(){return e.config.request(t.GET_PROVIDER_TYPE,{method:"POST",body:{provider_id:"weda"}})}))()}verifyCaptchaData(e){var r=this;return Ge((function*(){var{token:n,key:o}=e;return r.config.request(t.VERIFY_CAPTCHA_DATA_URL,{method:"POST",body:{token:n,key:o},withCredentials:!1})}))()}createCaptchaData(e){var r=this;return Ge((function*(){var{state:n,redirect_uri:o}=e;return r.config.request(t.CAPTCHA_DATA_URL,{method:"POST",body:{state:n,redirect_uri:o},withCredentials:!1})}))()}getMiniProgramCode(e){var r=this;return Ge((function*(){return r.config.request(t.GET_MINIPROGRAM_QRCODE,{method:"POST",body:e})}))()}getMiniProgramQrCodeStatus(e){var r=this;return Ge((function*(){return r.config.request(t.GET_MINIPROGRAM_QRCODE_STATUS,{method:"POST",body:e})}))()}getUserBehaviorLog(e){var r=this;return Ge((function*(){var n="".concat(t.GET_USER_BEHAVIOR_LOG,"?").concat({LOGIN:"query[action]=USER_LOGIN",MODIFY:"ne_query[action]=USER_LOGIN"}[e.type],"&limit=").concat(e.limit).concat(e.page_token?"&page_token=".concat(e.page_token):"");return r.config.request(n,{method:"GET",withCredentials:!0})}))()}modifyPassword(e){var r=this;return Ge((function*(){var n="",o="",i=yield Ve(!0,r.config.adapter);if(!i)throw new Error("do not support encrypt, a encrypt util required.");try{var a=yield r.getPublicKey();if(n=a.public_key,o=a.public_key_thumbprint,!n||!o)throw a}catch(e){throw e}var s=e.password?i.getEncryptInfo({publicKey:n,payload:e.password}):"",c=i.getEncryptInfo({publicKey:n,payload:e.new_password});return r.config.request(t.USER_BASIC_EDIT_URL,{method:"POST",withCredentials:!0,body:{user_id:e.user_id,encrypt_password:s,encrypt_new_password:c,public_key_thumbprint:o}})}))()}modifyPasswordWithoutLogin(e){var t=this;return Ge((function*(){var r="",n="",i=yield Ve(!0,t.config.adapter);if(!i)throw new Error("do not support encrypt, a encrypt util required.");try{var a=yield t.getPublicKey();if(r=a.public_key,n=a.public_key_thumbprint,!r||!n)throw a}catch(e){throw e}var s=e.password?i.getEncryptInfo({publicKey:r,payload:e.password}):"",c=i.getEncryptInfo({publicKey:r,payload:e.new_password});return t.config.request(o.AUTH_RESET_PASSWORD,{method:"POST",body:{username:e.username,password:s,new_password:c,public_key_thumbprint:n}})}))()}restoreUrlState(e,t){if(void 0!==e)try{var r=new URL(window.location.href);r.search=e,r.hash=t||"",window.history.replaceState(null,"",r.toString())}catch(e){}}}class We extends Error{constructor(e){super(e.error_description||e.message),this.__isAuthError=!0,this.name="AuthError",this.status=e.error,this.code=e.error_code}}function Fe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ke(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Fe(Object(r),!0).forEach((function(t){Ye(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Fe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ye(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ze{constructor(e){var{apiOrigin:t,apiPath:r=s,clientId:n,env:o,storage:i,request:a,baseRequest:c,anonymousSignInFunc:u,wxCloud:l,adapter:d,onCredentialsError:f,headers:p,i18n:h,useWxCloud:v,eventBus:y,detectSessionInUrl:g,debug:_}=e;this.detectSessionInUrl=null!=g&&g,this.oauth2client=new ue({apiOrigin:t,apiPath:r,clientId:n,env:o,storage:i,baseRequest:c||a,anonymousSignInFunc:u,wxCloud:l,onCredentialsError:f,headers:p||{},i18n:h,useWxCloud:v,eventBus:y,debug:_}),this.authApi=new Be(Ke(Ke({credentialsClient:this.oauth2client},e),{},{request:a?this.oauth2client.request.bind(this.oauth2client):void 0,adapter:d})),g&&this.oauth2client.setGetInitialSession(this.authApi.getInitialSession.bind(this.authApi))}initializeSession(e){this.detectSessionInUrl?(this.oauth2client.setOnInitialSessionObtained(e),this.oauth2client.initialize()):this.oauth2client.initialize(Promise.resolve({error:null}))}}})(),n})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("tcboauth",[],t):"object"==typeof exports?exports.tcboauth=t():e.tcboauth=t()}("undefined"!=typeof window?window:this,()=>(()=>{"use strict";var e={3:(e,t,r)=>{r.r(t),r.d(t,{getEncryptInfo:()=>i});const n=void 0;var o=r(912),i=function(){var{publicKey:e="",payload:t={}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!e)return"";try{var r=(0,o.I)(t),i=new n;i.setPublicKey(e);var a=i.encryptLong("object"==typeof r?JSON.stringify(r):r);return a}catch(e){console.error("encrypt error:",e)}return""}},912:(e,t,r)=>{r.d(t,{I:()=>n,y:()=>o});var n=e=>{var t=t=>{for(var r in e)e.hasOwnProperty(r)&&(t[r]=n(e[r]));return t},r=null==e?"NullOrUndefined":Object.prototype.toString.call(e).slice(8,-1);if(["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"].includes(r))return e.slice();switch(r){case"Object":return t(Object.create(Object.getPrototypeOf(e)));case"Array":return t([]);case"Date":return new Date(e.valueOf());case"RegExp":return new RegExp(e.source,(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.sticky?"y":"")+(e.unicode?"u":""));default:return e}},o=e=>{var t=e.match(/^(?:http(s)?:\/\/[^\/]+)?(\/[^\?#]*)/);return t&&t[2]||""}},946:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.COMMUNITY_SITE_URL=t.IS_DEBUG_MODE=t.getProtocol=t.setProtocol=t.getSdkName=t.setSdkName=void 0;var r="@cloudbase/js-sdk";t.setSdkName=function(e){r=e},t.getSdkName=function(){return r};var n="https:";t.setProtocol=function(e){n=e},t.getProtocol=function(){return n},t.IS_DEBUG_MODE=("undefined"==typeof process||process.env,!1),t.COMMUNITY_SITE_URL="https://support.qq.com/products/148793"},205:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ERRORS=void 0,t.ERRORS={INVALID_PARAMS:"INVALID_PARAMS",INVALID_SYNTAX:"INVALID_SYNTAX",INVALID_OPERATION:"INVALID_OPERATION",OPERATION_FAIL:"OPERATION_FAIL",NETWORK_ERROR:"NETWORK_ERROR",UNKOWN_ERROR:"UNKOWN_ERROR"}},794:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),o=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||n(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.OATUH_LOGINTYPE=void 0,o(r(946),t),o(r(205),t),t.OATUH_LOGINTYPE="constants"},689:function(e,t,r){var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var n,o=0,i=t.length;o<i;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.removeEventListener=t.activateEvent=t.addEventListener=t.CloudbaseEventEmitter=t.IErrorEvent=t.CloudbaseEvent=void 0;var a=r(616);var s=function(e,t){this.data=t||null,this.name=e};t.CloudbaseEvent=s;var c=function(e){function t(t,r){var n=e.call(this,"error",{error:t,data:r})||this;return n.error=t,n}return o(t,e),t}(s);t.IErrorEvent=c;var u=function(){function e(){this.listeners={}}return e.prototype.on=function(e,t){return function(e,t,r){r[e]=r[e]||[],r[e].push(t)}(e,t,this.listeners),this},e.prototype.off=function(e,t){return function(e,t,r){if(null==r?void 0:r[e]){var n=r[e].indexOf(t);-1!==n&&r[e].splice(n,1)}}(e,t,this.listeners),this},e.prototype.fire=function(e,t){if((0,a.isInstanceOf)(e,c))return console.error(e.error),this;var r=(0,a.isString)(e)?new s(e,t||{}):e,n=r.name;if(this.listens(n)){r.target=this;for(var o=0,u=this.listeners[n]?i([],this.listeners[n],!0):[];o<u.length;o++){u[o].call(this,r)}}return this},e.prototype.listens=function(e){return this.listeners[e]&&this.listeners[e].length>0},e}();t.CloudbaseEventEmitter=u;var l=new u;t.addEventListener=function(e,t){l.on(e,t)},t.activateEvent=function(e,t){void 0===t&&(t={}),l.fire(e,t)},t.removeEventListener=function(e,t){l.off(e,t)}},616:function(e,t,r){var n=this&&this.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r};Object.defineProperty(t,"__esModule",{value:!0}),t.parseCaptcha=t.parseQueryString=t.transformPhone=t.sleep=t.printGroupLog=t.throwError=t.printInfo=t.printError=t.printWarn=t.execCallback=t.createPromiseCallback=t.removeParam=t.getHash=t.getQuery=t.toQueryString=t.formatUrl=t.generateRequestId=t.genSeqId=t.isFormData=t.isInstanceOf=t.isNull=t.isPalinObject=t.isUndefined=t.isString=t.isArray=void 0;var o=r(794);t.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},t.isString=function(e){return"string"==typeof e},t.isUndefined=function(e){return void 0===e},t.isPalinObject=function(e){return"[object Object]"===Object.prototype.toString.call(e)},t.isNull=function(e){return"[object Null]"===Object.prototype.toString.call(e)},t.isInstanceOf=function(e,t){return e instanceof t},t.isFormData=function(e){return"[object FormData]"===Object.prototype.toString.call(e)},t.genSeqId=function(){return Math.random().toString(16).slice(2)},t.generateRequestId=function(){var e=(new Date).getTime(),t=(null===Date||void 0===Date?void 0:Date.now)&&1e3*Date.now()||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(r){var n=16*Math.random();return e>0?(n=(e+n)%16|0,e=Math.floor(e/16)):(n=(t+n)%16|0,t=Math.floor(t/16)),("x"===r?n:7&n|8).toString(16)}))},t.formatUrl=function(e,t,r){void 0===r&&(r={});var n=/\?/.test(t),o="";return Object.keys(r).forEach((function(e){""===o?!n&&(t+="?"):o+="&",o+="".concat(e,"=").concat(encodeURIComponent(r[e]))})),/^http(s)?:\/\//.test(t+=o)?t:"".concat(e).concat(t)},t.toQueryString=function(e){void 0===e&&(e={});var t=[];return Object.keys(e).forEach((function(r){t.push("".concat(r,"=").concat(encodeURIComponent(e[r])))})),t.join("&")},t.getQuery=function(e,t){if("undefined"==typeof window)return!1;var r=t||decodeURIComponent(window.location.search),n=new RegExp("(^|&)".concat(e,"=([^&]*)(&|$)")),o=r.substr(r.indexOf("?")+1).match(n);return null!=o?o[2]:""};t.getHash=function(e){if("undefined"==typeof window)return"";var t=window.location.hash.match(new RegExp("[#?&/]".concat(e,"=([^&#]*)")));return t?t[1]:""},t.removeParam=function(e,t){var r=t.split("?")[0],n=[],o=-1!==t.indexOf("?")?t.split("?")[1]:"";if(""!==o){for(var i=(n=o.split("&")).length-1;i>=0;i-=1)n[i].split("=")[0]===e&&n.splice(i,1);r="".concat(r,"?").concat(n.join("&"))}return r},t.createPromiseCallback=function(){var e={};if(!Promise){(e=function(){}).promise={};var t=function(){throw new Error('Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.')};return Object.defineProperty(e.promise,"then",{get:t}),Object.defineProperty(e.promise,"catch",{get:t}),e}var r=new Promise((function(t,r){e=function(e,n){return e?r(e):t(n)}}));return e.promise=r,e},t.execCallback=function(e,t,r){if(void 0===r&&(r=null),e&&"function"==typeof e)return e(t,r);if(t)throw t;return r},t.printWarn=function(e,t){console.warn("[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t))},t.printError=function(e,t){console.error({code:e,msg:"[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t)})},t.printInfo=function(e,t){console.log("[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t))},t.throwError=function(e,t){throw new Error(JSON.stringify({code:e,msg:"[".concat((0,o.getSdkName)(),"][").concat(e,"]:").concat(t)}))},t.printGroupLog=function(e){var t,r=e.title,n=e.subtitle,o=void 0===n?"":n,i=e.content,a=void 0===i?[]:i,s=e.printTrace,c=void 0!==s&&s,u=e.collapsed;void 0!==u&&u?(console.groupCollapsed||console.error)(r,o):(console.group||console.error)(r,o);for(var l=0,d=a;l<d.length;l++){var f=d[l],p=f.type,h=f.body;switch(p){case"info":console.log(h);break;case"warn":console.warn(h);break;case"error":console.error(h)}}c&&(console.trace||console.log)("stack trace:"),null===(t=console.groupEnd)||void 0===t||t.call(console)};t.sleep=function(e){return void 0===e&&(e=0),new Promise((function(t){return setTimeout(t,e)}))},t.transformPhone=function(e){return"+86".concat(e)};t.parseQueryString=function(e){e=e.replace(/^\?/,"");var t={};return e.split("&").forEach((function(e){var r=e.split("="),n=r[0],o=r[1];n=decodeURIComponent(n),o=decodeURIComponent(o),n&&(t[n]?Array.isArray(t[n])?t[n].push(o):t[n]=[t[n],o]:t[n]=o)})),t},t.parseCaptcha=function(e){var r={},o=e.match(/^(data:.*?)(\?[^#\s]*)?$/);if(o){e=o[1];var i=o[2];i&&(r=(0,t.parseQueryString)(i))}var a=r.token,s=n(r,["token"]);return/^data:/.test(e)&&!a?{error:"invalid_argument",error_description:"invalid captcha data: ".concat(e)}:a?{state:s.state,token:a,captchaData:e}:{error:"unimplemented",error_description:"need to impl captcha data"}}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n].call(i.exports,i,i.exports,r),i.exports}r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{r.r(n),r.d(n,{AUTH_API_PREFIX:()=>s,AUTH_STATE_CHANGED_TYPE:()=>l,Auth:()=>We,AuthError:()=>Le,CloudbaseOAuth:()=>ze,EVENTS:()=>d,LOGIN_STATE_CHANGED_TYPE:()=>u,OAUTH_TYPE:()=>f,authModels:()=>e,weappJwtDecodeAll:()=>O});var e={};r.r(e);var t,o,i,a,s="/auth";!function(e){e.AUTH_SIGN_UP_URL="/v1/signup",e.AUTH_TOKEN_URL="/v1/token",e.AUTH_REVOKE_URL="/v1/revoke",e.WEDA_USER_URL="/v1/plugin/weda/userinfo",e.AUTH_RESET_PASSWORD="/v1/reset",e.AUTH_GET_DEVICE_CODE="/v1/device/code",e.CHECK_USERNAME="/v1/checkUsername",e.CHECK_IF_USER_EXIST="/v1/checkIfUserExist",e.GET_PROVIDER_TYPE="/v1/mgr/provider/providerSubType",e.AUTH_SIGN_IN_URL="/v1/signin",e.AUTH_SIGN_IN_ANONYMOUSLY_URL="/v1/signin/anonymously",e.AUTH_SIGN_IN_WITH_PROVIDER_URL="/v1/signin/with/provider",e.AUTH_SIGN_IN_WITH_WECHAT_URL="/v1/signin/wechat/noauth",e.AUTH_SIGN_IN_CUSTOM="/v1/signin/custom",e.PROVIDER_TOKEN_URL="/v1/provider/token",e.PROVIDER_URI_URL="/v1/provider/uri",e.USER_ME_URL="/v1/user/me",e.AUTH_SIGNOUT_URL="/v1/user/signout",e.USER_QUERY_URL="/v1/user/query",e.USER_PRIFILE_URL="/v1/user/profile",e.USER_BASIC_EDIT_URL="/v1/user/basic/edit",e.USER_TRANS_BY_PROVIDER_URL="/v1/user/trans/by/provider",e.PROVIDER_LIST="/v1/user/provider",e.PROVIDER_BIND_URL="/v1/user/provider/bind",e.PROVIDER_UNBIND_URL="/v1/user/provider",e.CHECK_PWD_URL="/v1/user/sudo",e.SUDO_URL="/v1/user/sudo",e.BIND_CONTACT_URL="/v1/user/contact",e.AUTH_SET_PASSWORD="/v1/user/password",e.AUTHORIZE_DEVICE_URL="/v1/user/device/authorize",e.AUTHORIZE_URL="/v1/user/authorize",e.AUTHORIZE_INFO_URL="/v1/user/authorize/info",e.AUTHORIZED_DEVICES_DELETE_URL="/v1/user/authorized/devices/",e.AUTH_REVOKE_ALL_URL="/v1/user/revoke/all",e.GET_USER_BEHAVIOR_LOG="/v1/user/security/history",e.VERIFICATION_URL="/v1/verification",e.VERIFY_URL="/v1/verification/verify",e.CAPTCHA_DATA_URL="/v1/captcha/data",e.VERIFY_CAPTCHA_DATA_URL="/v1/captcha/data/verify",e.GET_CAPTCHA_URL="/v1/captcha/init",e.GET_MINIPROGRAM_QRCODE="/v1/qrcode/generate",e.GET_MINIPROGRAM_QRCODE_STATUS="/v1/qrcode/get/status"}(t||(t={})),function(e){e.AUTH_SIGN_IN_URL="/v2/signin/username",e.AUTH_TOKEN_URL="/v2/token",e.USER_ME_URL="/v2/user/me",e.VERIFY_URL="/v2/signin/verificationcode",e.AUTH_SIGN_IN_WITH_PROVIDER_URL="/v2/signin/with/provider",e.AUTH_PUBLIC_KEY="/v2/signin/publichkey",e.AUTH_RESET_PASSWORD="/v2/signin/password/update"}(o||(o={})),function(e){e.REGISTER="REGISTER",e.SIGN_IN="SIGN_IN",e.PASSWORD_RESET="PASSWORD_RESET",e.EMAIL_ADDRESS_CHANGE="EMAIL_ADDRESS_CHANGE",e.PHONE_NUMBER_CHANGE="PHONE_NUMBER_CHANGE"}(i||(i={})),function(e){e.UNREACHABLE="unreachable",e.LOCAL="local",e.CANCELLED="cancelled",e.UNKNOWN="unknown",e.UNAUTHENTICATED="unauthenticated",e.RESOURCE_EXHAUSTED="resource_exhausted",e.FAILED_PRECONDITION="failed_precondition",e.INVALID_ARGUMENT="invalid_argument",e.DEADLINE_EXCEEDED="deadline_exceeded",e.NOT_FOUND="not_found",e.ALREADY_EXISTS="already_exists",e.PERMISSION_DENIED="permission_denied",e.ABORTED="aborted",e.OUT_OF_RANGE="out_of_range",e.UNIMPLEMENTED="unimplemented",e.INTERNAL="internal",e.UNAVAILABLE="unavailable",e.DATA_LOSS="data_loss",e.INVALID_PASSWORD="invalid_password",e.PASSWORD_NOT_SET="password_not_set",e.INVALID_STATUS="invalid_status",e.USER_PENDING="user_pending",e.USER_BLOCKED="user_blocked",e.INVALID_VERIFICATION_CODE="invalid_verification_code",e.TWO_FACTOR_REQUIRED="two_factor_required",e.INVALID_TWO_FACTOR="invalid_two_factor",e.INVALID_TWO_FACTOR_RECOVERY="invalid_two_factor_recovery",e.UNDER_REVIEW="under_review",e.INVALID_REQUEST="invalid_request",e.UNAUTHORIZED_CLIENT="unauthorized_client",e.ACCESS_DENIED="access_denied",e.UNSUPPORTED_RESPONSE_TYPE="unsupported_response_type",e.INVALID_SCOPE="invalid_scope",e.INVALID_GRANT="invalid_grant",e.SERVER_ERROR="server_error",e.TEMPORARILY_UNAVAILABLE="temporarily_unavailable",e.INTERACTION_REQUIRED="interaction_required",e.LOGIN_REQUIRED="login_required",e.ACCOUNT_SELECTION_REQUIRED="account_selection_required",e.CONSENT_REQUIRED="consent_required",e.INVALID_REQUEST_URI="invalid_request_uri",e.INVALID_REQUEST_OBJECT="invalid_request_object",e.REQUEST_NOT_SUPPORTED="request_not_supported",e.REQUEST_URI_NOT_SUPPORTED="request_uri_not_supported",e.REGISTRATION_NOT_SUPPORTED="registration_not_supported",e.CAPTCHA_REQUIRED="captcha_required",e.CAPTCHA_INVALID="captcha_invalid"}(a||(a={}));var c,u={SIGN_OUT:"sign_out",SIGN_IN:"sign_in",CREDENTIALS_ERROR:"credentials_error"},l={SIGNED_OUT:"SIGNED_OUT",SIGNED_IN:"SIGNED_IN",INITIAL_SESSION:"INITIAL_SESSION",PASSWORD_RECOVERY:"PASSWORD_RECOVERY",TOKEN_REFRESHED:"TOKEN_REFRESHED",USER_UPDATED:"USER_UPDATED",BIND_IDENTITY:"BIND_IDENTITY"},d={LOGIN_STATE_CHANGED:"loginStateChanged",AUTH_STATE_CHANGED:"authStateChanged"},f={SIGN_IN:"sign_in",BIND_IDENTITY:"bind_identity"};function p(){return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,e=>{var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}!function(e){e.CLIENT_ID="client_id",e.CLIENT_SECRET="client_secret",e.RESPONSE_TYPE="response_type",e.SCOPE="scope",e.STATE="state",e.REDIRECT_URI="redirect_uri",e.ERROR="error",e.ERROR_DESCRIPTION="error_description",e.ERROR_URI="error_uri",e.GRANT_TYPE="grant_type",e.CODE="code",e.ACCESS_TOKEN="access_token",e.TOKEN_TYPE="token_type",e.EXPIRES_IN="expires_in",e.USERNAME="username",e.PASSWORD="password",e.REFRESH_TOKEN="refresh_token"}(c||(c={}));var h=r(912);function v(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function y(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){v(i,n,o,a,s,"next",e)}function s(e){v(i,n,o,a,s,"throw",e)}a(void 0)}))}}var g=new Map;class _{constructor(e){this.clientId=(null==e?void 0:e.clientId)||"",g=g||new Map}run(e,t){var r=this;return y((function*(){e="".concat(r.clientId,"_").concat(e);var n=g.get(e);return n||(n=new Promise((n,o)=>{y((function*(){try{yield r.runIdlePromise();var i=t();n(yield i)}catch(e){o(e)}finally{g.delete(e)}}))()}),g.set(e,n)),n}))()}runIdlePromise(){return Promise.resolve()}}var m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",E=/^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;var I=function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!E.test(e))throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");var t;e+="==".slice(2-(3&e.length));for(var r,n,o="",i=0;i<e.length;)t=m.indexOf(e.charAt(i++))<<18|m.indexOf(e.charAt(i++))<<12|(r=m.indexOf(e.charAt(i++)))<<6|(n=m.indexOf(e.charAt(i++))),o+=64===r?String.fromCharCode(t>>16&255):64===n?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return o};function b(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw new Error("Illegal base64url string!")}try{return function(e){return decodeURIComponent(I(e).replace(/(.)/g,e=>{var t=e.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t="0".concat(t)),"%".concat(t)}))}(t)}catch(e){return I(t)}}function O(e){if("string"!=typeof e)throw new Error("Invalid token specified");try{var t=e.split(".").map((e,t)=>2===t?e:JSON.parse(b(e)));return{claims:t[1],header:t[0],signature:t[2]}}catch(e){throw new Error("Invalid token specified: ".concat(e)?e.message:0)}}function S(){if("undefined"==typeof globalThis)return!1;var{wx:e}=globalThis;if(void 0===e)return!1;if(void 0===globalThis.Page)return!1;if(!e.getDeviceInfo)return!1;if(!e.getStorageSync)return!1;if(!e.setStorageSync)return!1;if(!e.connectSocket)return!1;if(!e.request)return!1;try{if(!e.getDeviceInfo())return!1;if("qq"===e.getDeviceInfo().platform)return!1}catch(e){return!1}return!0}var R=!1;function C(){R=R||void 0!==typeof window&&"miniprogram"===window.__wxjs_environment}try{S()||(R=R||!!navigator.userAgent.match(/miniprogram/i)||"miniprogram"===window.__wxjs_environment,window&&window.WeixinJSBridge&&window.WeixinJSBridge.invoke?C():"undefined"!=typeof document&&document.addEventListener("WeixinJSBridgeReady",C,!1))}catch(X){}var T="@cloudbase/js-sdk";function w(){return T}var A="https:";"undefined"==typeof process||process.env;var P,U="INVALID_PARAMS",N="INVALID_OPERATION",D="OPERATION_FAIL";!function(e){e.local="local",e.none="none",e.session="session"}(P||(P={}));var x=function(){};function L(e,t){console.warn("[".concat(w(),"][").concat(e,"]:").concat(t))}var k,j=(k=function(e,t){return(k=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}k(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),q=function(){return(q=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},H=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{c(n.next(e))}catch(e){i(e)}}function s(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}c((n=n.apply(e,t||[])).next())}))},G=function(e,t){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,n=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){a.label=s[1];break}if(6===s[0]&&a.label<o[1]){a.label=o[1],o=s;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(s);break}o[2]&&a.ops.pop(),a.trys.pop();continue}s=t.call(e,a)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}};!function(e){function t(t){var r=e.call(this)||this,n=t.timeout,o=t.timeoutMsg,i=t.restrictedMethods;return r.timeout=n||0,r.timeoutMsg=o||"请求超时",r.restrictedMethods=i||["get","post","upload","download"],r}j(t,e),t.prototype.get=function(e){return this.request(q(q({},e),{method:"get"}),this.restrictedMethods.includes("get"))},t.prototype.post=function(e){return this.request(q(q({},e),{method:"post"}),this.restrictedMethods.includes("post"))},t.prototype.put=function(e){return this.request(q(q({},e),{method:"put"}))},t.prototype.upload=function(e){var t=e.data,r=e.file,n=e.name,o=e.method,i=e.headers,a=void 0===i?{}:i,s={post:"post",put:"put"}[null==o?void 0:o.toLowerCase()]||"put",c=new FormData;return"post"===s?(Object.keys(t).forEach((function(e){c.append(e,t[e])})),c.append("key",n),c.append("file",r),this.request(q(q({},e),{data:c,method:s}),this.restrictedMethods.includes("upload"))):this.request(q(q({},e),{method:"put",headers:a,body:r}),this.restrictedMethods.includes("upload"))},t.prototype.download=function(e){return H(this,void 0,void 0,(function(){var t,r,n,o;return G(this,(function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.get(q(q({},e),{headers:{},responseType:"blob"}))];case 1:return t=i.sent().data,r=window.URL.createObjectURL(new Blob([t])),n=decodeURIComponent(new URL(e.url).pathname.split("/").pop()||""),(o=document.createElement("a")).href=r,o.setAttribute("download",n),o.style.display="none",document.body.appendChild(o),o.click(),window.URL.revokeObjectURL(r),document.body.removeChild(o),[3,3];case 2:return i.sent(),[3,3];case 3:return[2,new Promise((function(t){t({statusCode:200,tempFilePath:e.url})}))]}}))}))},t.prototype.fetch=function(e){var t;return H(this,void 0,void 0,(function(){var r,n,o,i,a,s,c,u,l,d,f,p,h,v=this;return G(this,(function(y){switch(y.label){case 0:return r=new AbortController,n=e.url,o=e.enableAbort,i=void 0!==o&&o,a=e.stream,s=void 0!==a&&a,c=e.signal,u=e.timeout,l=e.shouldThrowOnError,d=void 0===l||l,f=null!=u?u:this.timeout,c&&(c.aborted&&r.abort(),c.addEventListener("abort",(function(){return r.abort()}))),p=null,i&&f&&(p=setTimeout((function(){console.warn(v.timeoutMsg),r.abort(new Error(v.timeoutMsg))}),f)),[4,fetch(n,q(q({},e),{signal:r.signal})).then((function(e){return H(v,void 0,void 0,(function(){var t,r,n;return G(this,(function(o){switch(o.label){case 0:return clearTimeout(p),d?e.ok?(t=e,[3,3]):[3,1]:[3,4];case 1:return n=(r=Promise).reject,[4,e.json()];case 2:t=n.apply(r,[o.sent()]),o.label=3;case 3:return[2,t];case 4:return[2,e]}}))}))})).catch((function(e){if(clearTimeout(p),d)return Promise.reject(e)}))];case 1:return h=y.sent(),[2,{data:s?h.body:(null===(t=h.headers.get("content-type"))||void 0===t?void 0:t.includes("application/json"))?h.json():h.text(),statusCode:h.status,header:h.headers}]}}))}))},t.prototype.request=function(e,t){var r=this;void 0===t&&(t=!1);var n=String(e.method).toLowerCase()||"get";return new Promise((function(o){var i,a,s,c=e.url,u=e.headers,l=void 0===u?{}:u,d=e.data,f=e.responseType,p=e.withCredentials,h=e.body,v=e.onUploadProgress,y=function(e,t,r){void 0===r&&(r={});var n=/\?/.test(t),o="";return Object.keys(r).forEach((function(e){""===o?!n&&(t+="?"):o+="&",o+="".concat(e,"=").concat(encodeURIComponent(r[e]))})),/^http(s)?:\/\//.test(t+=o)?t:"".concat(e).concat(t)}(A,c,"get"===n?d:{}),g=new XMLHttpRequest;g.open(n,y),f&&(g.responseType=f),Object.keys(l).forEach((function(e){g.setRequestHeader(e,l[e])})),v&&g.upload.addEventListener("progress",v),g.onreadystatechange=function(){var e={};if(4===g.readyState){var t=g.getAllResponseHeaders().trim().split(/[\r\n]+/),r={};t.forEach((function(e){var t=e.split(": "),n=t.shift().toLowerCase(),o=t.join(": ");r[n]=o})),e.header=r,e.statusCode=g.status;try{e.data="blob"===f?g.response:JSON.parse(g.responseText)}catch(t){e.data="blob"===f?g.response:g.responseText}clearTimeout(i),o(e)}},t&&r.timeout&&(i=setTimeout((function(){console.warn(r.timeoutMsg),g.abort()}),r.timeout)),s=d,a="[object FormData]"===Object.prototype.toString.call(s)?d:"application/x-www-form-urlencoded"===l["content-type"]?function(e){void 0===e&&(e={});var t=[];return Object.keys(e).forEach((function(r){t.push("".concat(r,"=").concat(encodeURIComponent(e[r])))})),t.join("&")}(d):h||(d?JSON.stringify(d):void 0),p&&(g.withCredentials=!0),g.send(a)}))}}((function(){}));var V;!function(e){e.WEB="web",e.WX_MP="wx_mp"}(V||(V={}));var M=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),B=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function a(e){try{c(n.next(e))}catch(e){i(e)}}function s(e){try{c(n.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(a,s)}c((n=n.apply(e,t||[])).next())}))},W=function(e,t){var r,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,n=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){a.label=s[1];break}if(6===s[0]&&a.label<o[1]){a.label=o[1],o=s;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(s);break}o[2]&&a.ops.pop(),a.trys.pop();continue}s=t.call(e,a)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}},F=function(e){function t(t){var r=e.call(this)||this;return r.root=t,t.tcbCacheObject||(t.tcbCacheObject={}),r}return M(t,e),t.prototype.setItem=function(e,t){this.root.tcbCacheObject[e]=t},t.prototype.getItem=function(e){return this.root.tcbCacheObject[e]},t.prototype.removeItem=function(e){delete this.root.tcbCacheObject[e]},t.prototype.clear=function(){delete this.root.tcbCacheObject},t}(x);!function(){function e(e){this.keys={};var t=e.persistence,r=e.platformInfo,n=void 0===r?{}:r,o=e.keys,i=void 0===o?{}:o;this.platformInfo=n,this.storage||(this.persistenceTag=this.platformInfo.adapter.primaryStorage||t,this.storage=function(e,t){switch(e){case"local":return t.localStorage?t.localStorage:(L(U,"localStorage is not supported on current platform"),new F(t.root));case"none":return new F(t.root);default:return t.localStorage?t.localStorage:(L(U,"localStorage is not supported on current platform"),new F(t.root))}}(this.persistenceTag,this.platformInfo.adapter),this.keys=i)}Object.defineProperty(e.prototype,"mode",{get:function(){return this.storage.mode||"sync"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"persistence",{get:function(){return this.persistenceTag},enumerable:!1,configurable:!0}),e.prototype.setStore=function(e,t,r){if("async"!==this.mode){if(this.storage)try{var n={version:r||"localCachev1",content:t};this.storage.setItem(e,JSON.stringify(n))}catch(e){throw new Error(JSON.stringify({code:D,msg:"[".concat(w(),"][").concat(D,"]setStore failed"),info:e}))}}else L(N,"current platform's storage is asynchronous, please use setStoreAsync insteed")},e.prototype.setStoreAsync=function(e,t,r){return B(this,void 0,void 0,(function(){var n;return W(this,(function(o){switch(o.label){case 0:if(!this.storage)return[2];o.label=1;case 1:return o.trys.push([1,3,,4]),n={version:r||"localCachev1",content:t},[4,this.storage.setItem(e,JSON.stringify(n))];case 2:return o.sent(),[3,4];case 3:return o.sent(),[2];case 4:return[2]}}))}))},e.prototype.getStore=function(e,t){var r;if("async"!==this.mode){try{if("undefined"!=typeof process&&(null===(r=process.env)||void 0===r?void 0:r.tcb_token))return process.env.tcb_token;if(!this.storage)return""}catch(e){return""}t=t||"localCachev1";var n=this.storage.getItem(e);return n&&n.indexOf(t)>=0?JSON.parse(n).content:""}L(N,"current platform's storage is asynchronous, please use getStoreAsync insteed")},e.prototype.getStoreAsync=function(e,t){var r;return B(this,void 0,void 0,(function(){var n;return W(this,(function(o){switch(o.label){case 0:try{if("undefined"!=typeof process&&(null===(r=process.env)||void 0===r?void 0:r.tcb_token))return[2,process.env.tcb_token];if(!this.storage)return[2,""]}catch(e){return[2,""]}return t=t||"localCachev1",[4,this.storage.getItem(e)];case 1:return(n=o.sent())&&n.indexOf(t)>=0?[2,JSON.parse(n).content]:[2,""]}}))}))},e.prototype.removeStore=function(e){"async"!==this.mode?this.storage.removeItem(e):L(N,"current platform's storage is asynchronous, please use removeStoreAsync insteed")},e.prototype.removeStoreAsync=function(e){return B(this,void 0,void 0,(function(){return W(this,(function(t){switch(t.label){case 0:return[4,this.storage.removeItem(e)];case 1:return t.sent(),[2]}}))}))}}();var K=function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(t,r)};return function(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Class extends value "+String(r)+" is not a constructor or null");function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),Y=function(e,t,r){if(r||2===arguments.length)for(var n,o=0,i=t.length;o<i;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))};var z=function(e,t){this.data=t||null,this.name=e},Q=function(e){function t(t,r){var n=e.call(this,"error",{error:t,data:r})||this;return n.error=t,n}return K(t,e),t}(z),J=function(){function e(){this.listeners={}}return e.prototype.on=function(e,t){return function(e,t,r){r[e]=r[e]||[],r[e].push(t)}(e,t,this.listeners),this},e.prototype.off=function(e,t){return function(e,t,r){if(null==r?void 0:r[e]){var n=r[e].indexOf(t);-1!==n&&r[e].splice(n,1)}}(e,t,this.listeners),this},e.prototype.fire=function(e,t){if(e instanceof Q)return console.error(e.error),this;var r="string"==typeof e?new z(e,t||{}):e,n=r.name;if(this.listens(n)){r.target=this;for(var o=0,i=this.listeners[n]?Y([],this.listeners[n],!0):[];o<i.length;o++){i[o].call(this,r)}}return this},e.prototype.listens=function(e){return this.listeners[e]&&this.listeners[e].length>0},e}();new J;var Z=new J;"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.indexOf("Firefox");!function(){function e(){var e=this;this.listeners=[],this.signal={aborted:!1,addEventListener:function(t,r){"abort"===t&&e.listeners.push(r)}}}e.prototype.abort=function(){this.signal.aborted||(this.signal.aborted=!0,this.listeners.forEach((function(e){return e()})))}}();function X(e){this.message=e}X.prototype=new Error,X.prototype.name="InvalidCharacterError";"undefined"!=typeof window&&window.atob&&window.atob.bind(window);function $(e){this.message=e}$.prototype=new Error,$.prototype.name="InvalidTokenError";function ee(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function te(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ee(Object(r),!0).forEach((function(t){re(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ee(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function re(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ne(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function oe(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){ne(i,n,o,a,s,"next",e)}function s(e){ne(i,n,o,a,s,"throw",e)}a(void 0)}))}}var ie=function(){var e=oe((function*(e,t){var r=null,n=null;try{var o=Object.assign({},t);o.method||(o.method="GET"),o.body&&"string"!=typeof o.body&&(o.body=JSON.stringify(o.body));var i=yield fetch(e,o),s=yield i.json();null!=s&&s.error?(n=s).error_uri=new URL(e).pathname:r=s}catch(t){n={error:a.UNREACHABLE,error_description:t.message,error_uri:new URL(e).pathname}}if(n)throw n;return r}));return function(t,r){return e.apply(this,arguments)}}();var ae=new class{constructor(e){this._env=(null==e?void 0:e.env)||""}getItem(e){var t=this;return oe((function*(){return window.localStorage.getItem("".concat(e).concat(t._env))}))()}removeItem(e){var t=this;return oe((function*(){window.localStorage.removeItem("".concat(e).concat(t._env))}))()}setItem(e,t){var r=this;return oe((function*(){window.localStorage.setItem("".concat(e).concat(r._env),t)}))()}getItemSync(e){return window.localStorage.getItem("".concat(e).concat(this._env))}removeItemSync(e){window.localStorage.removeItem("".concat(e).concat(this._env))}setItemSync(e,t){window.localStorage.setItem("".concat(e).concat(this._env),t)}};function se(e){var t=!0;return null!=e&&e.expires_at&&null!=e&&e.access_token&&(t=e.expires_at<new Date),t}class ce{constructor(e){this.credentials=null,this.accessKeyCredentials=null,this.singlePromise=null,this.tokenSectionName=e.tokenSectionName,this.storage=e.storage,this.clientId=e.clientId,this.singlePromise=new _({clientId:this.clientId}),this.credentials=e.credentials||null}getStorageCredentialsSync(){var e=null,t=this.storage.getItemSync(this.tokenSectionName);if(null!=t)try{var r;null!==(r=e=JSON.parse(t))&&void 0!==r&&r.expires_at&&(e.expires_at=new Date(e.expires_at))}catch(t){this.storage.removeItem(this.tokenSectionName),e=null}return e}setCredentials(e){var t=this;return oe((function*(){if(null!=e&&e.expires_in){if(null!=e&&e.expires_at||(e.expires_at=new Date(Date.now()+1e3*(e.expires_in-30))),t.storage){var r=JSON.stringify(e);yield t.storage.setItem(t.tokenSectionName,r)}t.credentials=e}else t.storage&&(yield t.storage.removeItem(t.tokenSectionName)),t.credentials=null}))()}setAccessKeyCredentials(e){this.accessKeyCredentials=e}getCredentials(){var e=this;return oe((function*(){return e.singlePromise.run("getCredentials",oe((function*(){if(se(e.credentials)){var{credentials:t,isAccessKeyCredentials:r}=yield e.getStorageCredentials();if(r)return t;e.credentials=t}return e.credentials})))}))()}getStorageCredentials(){var e=this;return oe((function*(){return e.singlePromise.run("_getStorageCredentials",oe((function*(){var t=null,r=!1,n=yield e.storage.getItem(e.tokenSectionName);if(n)try{var o;null!==(o=t=JSON.parse(n))&&void 0!==o&&o.expires_at&&(t.expires_at=new Date(t.expires_at))}catch(r){yield e.storage.removeItem(e.tokenSectionName),t=null}else t=e.accessKeyCredentials||null,r=!0;return{credentials:t,isAccessKeyCredentials:r}})))}))()}}class ue{constructor(e){var t;this.initializePromise=null,this.lockAcquired=!1,this.pendingInLock=[],this.singlePromise=null,e.clientSecret||(e.clientSecret=""),!e.clientId&&e.env&&(e.clientId=e.env),this.apiOrigin=e.apiOrigin,this.apiPath=e.apiPath||s,this.clientId=e.clientId,this.i18n=e.i18n,this.eventBus=e.eventBus,this.singlePromise=new _({clientId:this.clientId}),this.retry=this.formatRetry(e.retry,ue.defaultRetry),e.baseRequest?this.baseRequest=e.baseRequest:this.baseRequest=ie,this.tokenInURL=e.tokenInURL,this.headers=e.headers,this.storage=e.storage||ae,this.localCredentials=new ce({tokenSectionName:"credentials_".concat(e.clientId),storage:this.storage,clientId:e.clientId}),this.clientSecret=e.clientSecret,e.clientId&&(this.basicAuth="Basic ".concat(function(e){for(var t,r,n,o,i="",a=0,s=(e=String(e)).length%3;a<e.length;){if((r=e.charCodeAt(a++))>255||(n=e.charCodeAt(a++))>255||(o=e.charCodeAt(a++))>255)throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");i+=m.charAt((t=r<<16|n<<8|o)>>18&63)+m.charAt(t>>12&63)+m.charAt(t>>6&63)+m.charAt(63&t)}return s?i.slice(0,s-3)+"===".substring(s):i}("".concat(e.clientId,":").concat(this.clientSecret)))),this.wxCloud=e.wxCloud;try{S()&&(this.useWxCloud=e.useWxCloud,void 0===this.wxCloud&&e.env&&(wx.cloud.init({env:e.env}),this.wxCloud=wx.cloud))}catch(e){}this.refreshTokenFunc=e.refreshTokenFunc||this.defaultRefreshTokenFunc,this.anonymousSignInFunc=e.anonymousSignInFunc,this.onCredentialsError=e.onCredentialsError,this.getInitialSession=e.getInitialSession,this.onInitialSessionObtained=e.onInitialSessionObtained,this.logDebugMessages=null!==(t=e.debug)&&void 0!==t&&t,Z.on("lang_change",e=>{var t;this.i18n=(null===(t=e.data)||void 0===t?void 0:t.i18n)||this.i18n})}setGetInitialSession(e){this.getInitialSession=e}setOnInitialSessionObtained(e){this.onInitialSessionObtained=e}initialize(e){var t=this;return oe((function*(){return t.initializePromise?yield t.initializePromise:void 0!==e?(t.initializePromise=e,yield t.initializePromise):(t.initializePromise=oe((function*(){return yield t._acquireLock(-1,oe((function*(){return yield t._initialize()})))}))(),yield t.initializePromise)}))()}setCredentials(e){var t=this;return oe((function*(){return yield t.initializePromise,t._acquireLock(-1,oe((function*(){return t.localCredentials.setCredentials(e)})))}))()}setAccessKeyCredentials(e){return this.localCredentials.setAccessKeyCredentials(e)}getAccessToken(){var e=this;return oe((function*(){yield e.initializePromise;var t=yield e.getCredentials();if(null!=t&&t.access_token)return Promise.resolve(t.access_token);var r={error:a.UNAUTHENTICATED};return Promise.reject(r)}))()}request(e,t){var r=this;return oe((function*(){var n,o,i,s;t||(t={});var c=r.formatRetry(t.retry,r.retry);if(t.headers=te(te({},t.headers),{},{[null===(n=r.i18n)||void 0===n?void 0:n.LANG_HEADER_KEY]:null===(o=r.i18n)||void 0===o?void 0:o.lang}),r.headers&&(t.headers=te(te({},r.headers),t.headers)),t.headers["x-request-id"]||(t.headers["x-request-id"]=p()),!t.headers["x-device-id"]){var u=yield r.getDeviceId();t.headers["x-device-id"]=u}if(null!==(i=t)&&void 0!==i&&i.withBasicAuth&&r.basicAuth&&(t.headers.Authorization=r.basicAuth),null!==(s=t)&&void 0!==s&&s.withCredentials){var l=t.getCredentials?yield t.getCredentials():yield r.getCredentials();l&&(r.tokenInURL?(e.indexOf("?")<0&&(e+="?"),e+="access_token=".concat(l.access_token)):t.headers.Authorization="".concat(l.token_type," ").concat(l.access_token))}else r.clientId&&e.indexOf("client_id")<0&&(e+=e.indexOf("?")<0?"?":"&",e+="client_id=".concat(r.clientId));e.startsWith("/")&&(e="".concat(r.apiOrigin).concat(r.apiPath).concat(e));for(var d=null,f=c+1,h=0;h<f;h++){try{var v;if(null!==(v=d=t.useWxCloud||r.useWxCloud?yield r.wxCloudCallFunction(e,t):yield r.baseRequest(e,t))&&void 0!==v&&v.code)throw{error:d.code,error_description:d.message,error_uri:new URL(e).pathname};break}catch(e){if(t.withCredentials&&e&&e.error===a.UNAUTHENTICATED)return yield r.setCredentials(null),Promise.reject(e);if(h===c||!e||"unreachable"!==e.error)return Promise.reject(e)}yield r.sleep(ue.retryInterval)}return d}))()}wxCloudCallFunction(e,t){var r=this;return oe((function*(){var n=null,o=null;try{var i,s="";try{s=yield wx.getRendererUserAgent()}catch(e){}var{result:c}=yield r.wxCloud.callFunction({name:"httpOverCallFunction",data:{url:e,method:t.method,headers:te({origin:"https://servicewechat.com","User-Agent":s},t.headers),body:t.body}});null!=c&&null!==(i=c.body)&&void 0!==i&&i.error_code?(o=null==c?void 0:c.body).error_uri=(0,h.y)(e):n=null==c?void 0:c.body}catch(t){o={error:a.UNREACHABLE,error_description:t.message,error_uri:(0,h.y)(e)}}if(o)throw o;return n}))()}getCredentials(){var e=this;return oe((function*(){return yield e.initializePromise,e._acquireLock(-1,oe((function*(){return e._getCredentials()})))}))()}getCredentialsSync(){return this.localCredentials.getStorageCredentialsSync()}getCredentialsAsync(){return this.getCredentials()}getScope(){var e=this;return oe((function*(){var t=yield e.localCredentials.getCredentials();if(!t){var r,n="credentials not found";return null===(r=e.onCredentialsError)||void 0===r||r.call(e,{msg:n}),e.unAuthenticatedError(n)}return t.scope}))()}getGroups(){var e=this;return oe((function*(){var t=yield e.localCredentials.getCredentials();if(!t){var r,n="credentials not found";return null===(r=e.onCredentialsError)||void 0===r||r.call(e,{msg:n}),e.unAuthenticatedError(n)}return t.groups}))()}refreshToken(e,t){var r=this;return oe((function*(){return yield r.initializePromise,r._acquireLock(-1,oe((function*(){return r._refreshToken(e,t)})))}))()}_refreshToken(e,t){var r=this;return oe((function*(){return r.singlePromise.run("_refreshToken",oe((function*(){if(!e||!e.refresh_token){var n,o="no refresh token found in credentials";return null===(n=r.onCredentialsError)||void 0===n||n.call(r,{msg:o}),r.unAuthenticatedError(o)}try{var i,s=yield r.refreshTokenFunc(e.refresh_token,e);return yield r.localCredentials.setCredentials(s),null===(i=r.eventBus)||void 0===i||i.fire(d.AUTH_STATE_CHANGED,{event:l.TOKEN_REFRESHED}),s}catch(e){var c;if(null!=t&&t.throwError)throw e;if(e.error===a.INVALID_GRANT){var u;yield r.localCredentials.setCredentials(null);var f=e.error_description;return null===(u=r.onCredentialsError)||void 0===u||u.call(r,{msg:f}),r.unAuthenticatedError(f)}return null===(c=r.onCredentialsError)||void 0===c||c.call(r,{msg:e.error_description}),Promise.reject(e)}})))}))()}anonymousLogin(e){var t=this;return oe((function*(){return t.singlePromise.run("_anonymousLogin",oe((function*(){if(t.anonymousSignInFunc){var r=yield t.anonymousSignInFunc(e);e=r||(yield t.localCredentials.getCredentials())}else e=yield t.anonymousSignIn(e);return e})))}))()}checkRetry(e){var t=null;if(("number"!=typeof e||e<ue.minRetry||e>ue.maxRetry)&&(t={error:a.UNREACHABLE,error_description:"wrong options param: retry"}),t)throw t;return e}formatRetry(e,t){return void 0===e?t:this.checkRetry(e)}sleep(e){return oe((function*(){return new Promise(t=>{setTimeout(()=>{t()},e)})}))()}anonymousSignIn(e){var r=this;return oe((function*(){return r.singlePromise.run("_anonymous",oe((function*(){if(!e||"anonymous"!==e.scope)return r.unAuthenticatedError("no anonymous in credentials");try{var n=yield r.request(t.AUTH_SIGN_IN_ANONYMOUSLY_URL,{method:"POST",withBasicAuth:!0,body:{}});return yield r.localCredentials.setCredentials(n),n}catch(e){return e.error===a.INVALID_GRANT?(yield r.localCredentials.setCredentials(null),r.unAuthenticatedError(e.error_description)):Promise.reject(e)}})))}))()}defaultRefreshTokenFunc(e,r){var n=this;return oe((function*(){if(void 0===e||""===e){var i,a="refresh token not found";return null===(i=n.onCredentialsError)||void 0===i||i.call(n,{msg:a}),n.unAuthenticatedError(a)}var s=t.AUTH_TOKEN_URL;return"v2"===(null==r?void 0:r.version)&&(s=o.AUTH_TOKEN_URL),te(te({},yield n.request(s,{method:"POST",body:{client_id:n.clientId,client_secret:n.clientSecret,grant_type:"refresh_token",refresh_token:e}})),{},{version:(null==r?void 0:r.version)||"v1"})}))()}getDeviceId(){var e=this;return oe((function*(){if(e.deviceID)return e.deviceID;var t=yield e.storage.getItem("device_id");return"string"==typeof t&&t.length>=16&&t.length<=48||(t=p(),yield e.storage.setItem("device_id",t)),e.deviceID=t,t}))()}unAuthenticatedError(e){var t={error:a.UNAUTHENTICATED,error_description:e};return Promise.reject(t)}_debug(){if(this.logDebugMessages){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];console.log("[OAuth2Client]",...t)}}_initialize(){var e=this;return oe((function*(){try{if(!e.getInitialSession)return e._debug("#_initialize()","no getInitialSession callback set, skipping"),{error:null};e._debug("#_initialize()","calling getInitialSession callback");try{var{data:t,error:r}=yield e.getInitialSession();if(null!=t&&t.session&&(e._debug("#_initialize()","session obtained from getInitialSession",t.session),yield e.localCredentials.setCredentials(null==t?void 0:t.session)),e.onInitialSessionObtained){e._debug("#_initialize()","calling onInitialSessionObtained callback");try{yield e.onInitialSessionObtained(t,r)}catch(t){e._debug("#_initialize()","error in onInitialSessionObtained",t)}}return r?(e._debug("#_initialize()","error from getInitialSession",r),{error:r}):{error:null}}catch(t){return e._debug("#_initialize()","exception during getInitialSession",t),{error:t instanceof Error?t:new Error(String(t))}}}catch(r){return e._debug("#_initialize()","unexpected error",r),{error:r instanceof Error?r:new Error(String(r))}}finally{e._debug("#_initialize()","end")}}))()}_acquireLock(e,t){var r=this;return oe((function*(){r._debug("#_acquireLock","begin",e);try{if(r.lockAcquired){var n=r.pendingInLock.length?r.pendingInLock[r.pendingInLock.length-1]:Promise.resolve(),o=oe((function*(){return yield n,yield t()}))();return r.pendingInLock.push(oe((function*(){try{yield o}catch(e){}}))()),o}r._debug("#_acquireLock","acquiring lock for client",r.clientId);try{r.lockAcquired=!0;var i=t();for(r.pendingInLock.push(oe((function*(){try{yield i}catch(e){}}))()),yield i;r.pendingInLock.length;){var a=[...r.pendingInLock];yield Promise.all(a),r.pendingInLock.splice(0,a.length)}return yield i}finally{r._debug("#_acquireLock","releasing lock for client",r.clientId),r.lockAcquired=!1}}finally{r._debug("#_acquireLock","end")}}))()}_getCredentials(){var e=this;return oe((function*(){var t=yield e.localCredentials.getCredentials();if(!t){var r,n="credentials not found";return null===(r=e.onCredentialsError)||void 0===r||r.call(e,{msg:n}),e.unAuthenticatedError(n)}if(se(t))if(t.refresh_token)try{t=yield e._refreshToken(t)}catch(r){var o;if("anonymous"!==t.scope)return null===(o=e.onCredentialsError)||void 0===o||o.call(e,{msg:r.error_description}),Promise.reject(r);t=yield e.anonymousLogin(t)}else{if("anonymous"!==t.scope){var i,a="no refresh token found in credentials";return null===(i=e.onCredentialsError)||void 0===i||i.call(e,{msg:a}),e.unAuthenticatedError(a)}t=yield e.anonymousLogin(t)}return t}))()}}ue.defaultRetry=2,ue.minRetry=0,ue.maxRetry=5,ue.retryInterval=1e3;var le=r(689),de=r(616);function fe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function pe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?fe(Object(r),!0).forEach((function(t){he(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):fe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function he(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ve(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function ye(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){ve(i,n,o,a,s,"next",e)}function s(e){ve(i,n,o,a,s,"throw",e)}a(void 0)}))}}var ge=(e,t)=>{var r;return function(){for(var n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];clearTimeout(r),r=setTimeout(()=>e.apply(null,o),t)}},_e=new le.CloudbaseEventEmitter,me="resolveCaptchaData",Ee="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);z-index:999",Ie="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:320px;padding:20px;background:#fff;border-radius:8px;box-shadow:0 0 10px rgba(0,0,0,0.2);z-index:1000",be="margin-bottom:15px",Oe="display:flex;align-items:center;justify-content:space-between;margin-bottom:15px",Se="width:100%;height:auto;border:1px solid #eee",Re="padding:10px 8px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer;flex:1;white-space:nowrap;margin-left:10px",Ce="width:100%;padding:14px 16px;margin-bottom:15px;box-sizing:border-box;border:2px solid #e8ecf4;border-radius:10px;font-size:15px",Te="width:100%;padding:10px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer",we="background:#6c757d;cursor:not-allowed",Ae=e=>{var{oauthInstance:t,captchaState:r}=e,n=function(){var e=ye((function*(){try{var e=yield t.createCaptchaData({state:r.state});r=pe(pe({},r),{},{captchaData:e.data,token:e.token}),document.getElementById("captcha-image").src=e.data}catch(e){console.error("刷新图形验证码失败",e)}}));return function(){return e.apply(this,arguments)}}(),o=(e,t,r)=>{var n=document.createElement(e);return t&&(n.style.cssText=t),r&&(n.textContent=r),n},i=o("div",Ee),a=o("div",Ie);a.appendChild(o("p",be,"请输入你看到的字符:"));var s=o("div",Oe),c=o("img",Se);c.id="captcha-image",c.src=r.captchaData,s.appendChild(c);var u=o("button",Re,"刷新");u.onclick=ge(ye((function*(){u.textContent="加载中...",u.disabled=!0,u.style.cssText="".concat(Re,";").concat(we);try{yield n()}finally{u.textContent="刷新",u.disabled=!1,u.style.cssText=Re}})),500),s.appendChild(u),a.appendChild(s);var l=o("input",Ce);l.type="text",l.placeholder="输入字符",l.maxLength=4,a.appendChild(l);var d=o("div","color:#dc3545;font-size:12px;margin-bottom:10px;display:none;padding:8px;background:#f8d7da;border:1px solid #f5c6cb;border-radius:4px");a.appendChild(d);var f=e=>{d.textContent=e,d.style.display="block"},p=o("button",Te,"确定");p.onclick=ge(ye((function*(){var e=l.value.trim();if(e){d.style.display="none",p.textContent="验证中...",p.disabled=!0,p.style.cssText="".concat(Te,";").concat(we);try{var o=yield t.verifyCaptchaData({token:r.token,key:e});_e.fire(me,o),console.log("图形验证码校验成功"),document.body.removeChild(i),document.body.removeChild(a)}catch(e){console.error("图形验证码校验失败",e);var s=e.error_description||"图形验证码校验失败";f(s),l.value="",l.focus(),yield n()}finally{p.textContent="确定",p.disabled=!1,p.style.cssText=Te}}else f("请输入字符")})),500),a.appendChild(p),document.body.appendChild(i),document.body.appendChild(a)},Pe=function(){var e=ye((function*(e,t){var{captchaData:r,state:n,token:o}=(0,de.parseCaptcha)(e);return Ae({oauthInstance:t,captchaState:{captchaData:r,state:n,token:o}}),new Promise(e=>{console.log("等待图形验证码校验结果..."),_e.on(me,t=>{e(null==t?void 0:t.data)})})}));return function(t,r){return e.apply(this,arguments)}}();function Ue(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function Ne(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){Ue(i,n,o,a,s,"next",e)}function s(e){Ue(i,n,o,a,s,"throw",e)}a(void 0)}))}}class De{constructor(e){e.openURIWithCallback||(e.openURIWithCallback=this.getDefaultOpenURIWithCallback()),e.storage||(e.storage=ae),this.config=e,this.tokenSectionName="captcha_".concat(e.clientId||e.env)}isMatch(){var e,t;return(null===(e=this.config)||void 0===e||null===(e=e.adapter)||void 0===e||null===(t=e.isMatch)||void 0===t?void 0:t.call(e))||S()}request(e,t){var r=this;return Ne((function*(){t||(t={}),t.method||(t.method="GET");var n,o="".concat(t.method,":").concat(e),i=e;t.withCaptcha&&(i=yield r.appendCaptchaTokenToURL(e,o,!1));try{n=yield r.config.request(i,t)}catch(n){return n.error===a.CAPTCHA_REQUIRED||n.error===a.CAPTCHA_INVALID?(e=yield r.appendCaptchaTokenToURL(e,o,n.error===a.CAPTCHA_INVALID),r.config.request(e,t)):Promise.reject(n)}return n}))()}getDefaultOpenURIWithCallback(){return e=>Pe(e,this.config.oauthInstance)}getCaptchaToken(e,r){var n=this;return Ne((function*(){if(!e){var o=yield n.findCaptchaToken();if(o)return o}var i=yield n.config.request(t.CAPTCHA_DATA_URL,{method:"POST",body:{state:r,redirect_uri:""},withCredentials:!1}),a="".concat(i.data,"?state=").concat(encodeURIComponent(r),"&token=").concat(encodeURIComponent(i.token)),s=yield n.config.openURIWithCallback(a);return n.saveCaptchaToken(s),s.captcha_token}))()}appendCaptchaTokenToURL(e,t,r){var n=this;return Ne((function*(){var o=yield n.getCaptchaToken(r,t);return e.indexOf("?")>0?e+="&captcha_token=".concat(o):e+="?captcha_token=".concat(o),e}))()}saveCaptchaToken(e){var t=this;return Ne((function*(){e.expires_at=new Date(Date.now()+1e3*(e.expires_in-10));var r=JSON.stringify(e);yield t.config.storage.setItem(t.tokenSectionName,r)}))()}findCaptchaToken(){var e=this;return Ne((function*(){var t=yield e.config.storage.getItem(e.tokenSectionName);if(null!=t)try{var r=JSON.parse(t);return null!=r&&r.expires_at&&(r.expires_at=new Date(r.expires_at)),r.expires_at<new Date?null:r.captcha_token}catch(t){return yield e.config.storage.removeItem(e.tokenSectionName),null}return null}))()}}const xe=class{constructor(e){if(this.params={},"string"==typeof e)this.parse(e);else if(e&&"object"==typeof e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&this.append(t,e[t])}parse(e){e.split("&").forEach(e=>{var[t,r]=e.split("=").map(decodeURIComponent);this.append(t,r)})}append(e,t){this.params[e]?this.params[e]=this.params[e].concat([t]):this.params[e]=[t]}get(e){return this.params[e]?this.params[e][0]:null}getAll(e){return this.params[e]||[]}delete(e){delete this.params[e]}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}set(e,t){this.params[e]=[t]}toString(){var e=this,t=[],r=function(r){Object.prototype.hasOwnProperty.call(e.params,r)&&e.params[r].forEach(e=>{t.push("".concat(encodeURIComponent(r),"=").concat(encodeURIComponent(e)))})};for(var n in this.params)r(n);return t.join("&")}};class Le extends Error{constructor(e){super(e.error_description||e.message),this.__isAuthError=!0,this.name="AuthError",this.status=e.error,this.code=e.error_code}}var ke=["provider_redirect_uri","other_params"];function je(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function qe(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?je(Object(r),!0).forEach((function(t){He(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):je(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function He(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ge(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function Ve(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){Ge(i,n,o,a,s,"next",e)}function s(e){Ge(i,n,o,a,s,"throw",e)}a(void 0)}))}}function Me(e,t){return Be.apply(this,arguments)}function Be(){return(Be=Ve((function*(e,t){var n=function(){var e=Ve((function*(){try{return r(3)}catch(e){try{return yield Promise.resolve().then(r.bind(r,3))}catch(e){return}}}));return function(){return e.apply(this,arguments)}}();try{var o;if(((null==t||null===(o=t.root)||void 0===o?void 0:o.globalThis)||globalThis).IS_MP_BUILD)return;0}catch(t){if(e)return n()}}))).apply(this,arguments)}class We{static parseParamsToSearch(e){return Object.keys(e).forEach(t=>{e[t]||delete e[t]}),new xe(e).toString()}constructor(e){var{request:t}=e,r=e.credentialsClient;if(!r){var n={apiOrigin:e.apiOrigin,apiPath:e.apiPath,clientId:e.clientId,storage:e.storage,env:e.env,baseRequest:e.baseRequest,anonymousSignInFunc:e.anonymousSignInFunc,wxCloud:e.wxCloud,onCredentialsError:e.onCredentialsError,headers:e.headers||{},i18n:e.i18n,debug:e.debug};r=new ue(n)}if(!t){var o=r.request.bind(r),i=new De(qe({env:e.env,clientId:e.clientId,request:o,storage:e.storage,adapter:e.adapter,oauthInstance:this},e.captchaOptions));t=i.request.bind(i)}this.config={env:e.env,apiOrigin:e.apiOrigin,apiPath:e.apiPath,clientId:e.clientId,request:t,credentialsClient:r,storage:e.storage||ae,adapter:e.adapter}}getParamsByVersion(e,r){var n,i=(0,h.I)(e),a=(null===(n={v2:o}[null==i?void 0:i.version])||void 0===n?void 0:n[r])||t[r];return i&&delete i.version,{params:i,url:a}}signIn(e){var t=this;return Ve((function*(){var r=e.version||"v1",n=t.getParamsByVersion(e,"AUTH_SIGN_IN_URL");n.params.query&&delete n.params.query;var o=yield t.getEncryptParams(n.params),i=yield t.config.request(n.url,{method:"POST",body:o});return yield t.config.credentialsClient.setCredentials(qe(qe({},i),{},{version:r})),Promise.resolve(i)}))()}signInAnonymously(){var e=arguments,r=this;return Ve((function*(){var n=e.length>0&&void 0!==e[0]?e[0]:{},o=e.length>1&&void 0!==e[1]&&e[1],i=yield r.config.request(t.AUTH_SIGN_IN_ANONYMOUSLY_URL,{method:"POST",body:n,useWxCloud:o});return yield r.config.credentialsClient.setCredentials(i),Promise.resolve(i)}))()}signUp(e){var r=this;return Ve((function*(){var n=yield r.config.request(t.AUTH_SIGN_UP_URL,{method:"POST",body:e});return yield r.config.credentialsClient.setCredentials(n),Promise.resolve(n)}))()}signOut(e){var r=this;return Ve((function*(){var n={};if(e){try{n=yield r.config.request(t.AUTH_SIGNOUT_URL,{method:"POST",withCredentials:!0,body:e})}catch(e){e.error!==a.UNAUTHENTICATED&&console.log("sign_out_error",e)}return yield r.config.credentialsClient.setCredentials(),n}var o=yield r.config.credentialsClient.getAccessToken(),i=yield r.config.request(t.AUTH_REVOKE_URL,{method:"POST",body:{token:o}});return yield r.config.credentialsClient.setCredentials(),Promise.resolve(i)}))()}revokeAllDevices(){var e=this;return Ve((function*(){yield e.config.request(t.AUTH_REVOKE_ALL_URL,{method:"DELETE",withCredentials:!0})}))()}revokeDevice(e){var r=this;return Ve((function*(){yield r.config.request(t.AUTHORIZED_DEVICES_DELETE_URL+e.device_id,{method:"DELETE",withCredentials:!0})}))()}getVerification(e,r){var n=this;return Ve((function*(){var o=!1;"CUR_USER"===e.target?o=!0:(yield n.hasLoginState())&&(o=!0);var i=(0,h.I)(e);return i.phone_number&&!/^\+\d{1,3}\s+\d+/.test(i.phone_number)&&(i.phone_number="+86 ".concat(i.phone_number)),n.config.request(t.VERIFICATION_URL,{method:"POST",body:i,withCaptcha:(null==r?void 0:r.withCaptcha)||!1,withCredentials:o})}))()}verify(e){var t=this;return Ve((function*(){var r=t.getParamsByVersion(e,"VERIFY_URL"),n=yield t.config.request(r.url,{method:"POST",body:r.params});return"v2"===(null==e?void 0:e.version)&&(yield t.config.credentialsClient.setCredentials(qe(qe({},n),{},{version:"v2"}))),n}))()}genProviderRedirectUri(e){var r=this;return Ve((function*(){var{provider_redirect_uri:n,other_params:o={}}=e,i=function(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(t.includes(n))continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.includes(r)||{}.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}(e,ke);n&&!i.redirect_uri&&(i.redirect_uri=n);var a="".concat(t.PROVIDER_URI_URL,"?").concat(We.parseParamsToSearch(i));return Object.keys(o).forEach(e=>{var t=o[e];("sign_out_uri"!==e||(null==t?void 0:t.length)>0)&&(a+="&other_params[".concat(e,"]=").concat(encodeURIComponent(t)))}),r.config.request(a,{method:"GET"})}))()}grantProviderToken(e){var r=arguments,n=this;return Ve((function*(){var o=r.length>1&&void 0!==r[1]&&r[1];return n.config.request(t.PROVIDER_TOKEN_URL,{method:"POST",body:e,useWxCloud:o})}))()}patchProviderToken(e){var r=this;return Ve((function*(){return r.config.request(t.PROVIDER_TOKEN_URL,{method:"PATCH",body:e})}))()}signInWithProvider(e){var t=arguments,r=this;return Ve((function*(){var n=t.length>1&&void 0!==t[1]&&t[1],o=r.getParamsByVersion(e,"AUTH_SIGN_IN_WITH_PROVIDER_URL"),i=yield r.config.request(o.url,{method:"POST",body:o.params,useWxCloud:n});return yield r.config.credentialsClient.setCredentials(qe(qe({},i),{},{version:(null==e?void 0:e.version)||"v1"})),Promise.resolve(i)}))()}toBindIdentity(e){var t=this;return Ve((function*(){var r,n,o,i=e.credentials||(yield t.config.credentialsClient.localCredentials.getCredentials());try{yield t.bindWithProvider({provider_token:e.provider_token},i),r={data:{type:f.BIND_IDENTITY,provider:e.provider},error:null}}catch(e){r={data:{type:f.BIND_IDENTITY},error:new Le(e)}}e.fireEvent&&(null===(n=t.config.eventBus)||void 0===n||null===(o=n.fire)||void 0===o||o.call(n,d.AUTH_STATE_CHANGED,{event:l.BIND_IDENTITY,info:r}));return r}))()}getInitialSession(){var e=this;return Ve((function*(){var t={};try{var r,n,o,i,a;if("undefined"==typeof window||"undefined"==typeof document)return{data:null,error:null};var s=new URLSearchParams(null===(r=location)||void 0===r?void 0:r.search),c=s.get("code"),u=s.get("state");if(!c||!u)return{data:null,error:null};var l=null;try{l=JSON.parse(sessionStorage.getItem(u)||"null")}catch(e){}t={type:null===(n=l)||void 0===n?void 0:n.type};var d=s.get("error"),p=s.get("error_description");if(d||p)return{data:t,error:new Le({message:p||d||"Unknown error from OAuth provider"})};var h=(null===(o=l)||void 0===o?void 0:o.provider)||s.get("provider");if(!h)return{data:t,error:new Le({message:"Provider is required for OAuth verification"})};var v,y,g=location.origin+location.pathname,{provider_token:_}=yield e.grantProviderToken({provider_id:h,provider_redirect_uri:g,provider_code:c}),m=null;if(l.type===f.BIND_IDENTITY)v=yield e.config.credentialsClient.localCredentials.getCredentials(),y=yield e.toBindIdentity({provider:h,provider_token:_,credentials:v});else if(l.type===f.SIGN_IN){y=e.getParamsByVersion({provider:h},"AUTH_SIGN_IN_WITH_PROVIDER_URL"),v=yield e.config.request(y.url,{method:"POST",body:{provider_token:_}});try{m=yield e.getUserInfo({credentials:v})}catch(e){console.error("get user info error",e)}y={data:qe(qe({},t),{},{session:v,user:m}),error:null}}s.delete("code"),s.delete("state"),s.delete("provider"),e.restoreUrlState(void 0===(null===(i=l)||void 0===i?void 0:i.search)?"?".concat(s.toString()):l.search,(null===(a=l)||void 0===a?void 0:a.hash)||location.hash);try{sessionStorage.removeItem(u)}catch(e){}return y}catch(e){return{data:t,error:new Le(e)}}}))()}signInCustom(e){var r=this;return Ve((function*(){var n=yield r.config.request(t.AUTH_SIGN_IN_CUSTOM,{method:"POST",body:e});return yield r.config.credentialsClient.setCredentials(n),Promise.resolve(n)}))()}signInWithWechat(){var e=arguments,r=this;return Ve((function*(){var n=e.length>0&&void 0!==e[0]?e[0]:{},o=yield r.config.request(t.AUTH_SIGN_IN_WITH_WECHAT_URL,{method:"POST",body:n});return yield r.config.credentialsClient.setCredentials(o),Promise.resolve(o)}))()}bindWithProvider(e,r){var n=this;return Ve((function*(){return n.config.request(t.PROVIDER_BIND_URL,{method:"POST",body:e,withCredentials:!0,getCredentials:r?()=>r:void 0})}))()}getUserProfile(e){var t=this;return Ve((function*(){return t.getUserInfo(e)}))()}getUserInfo(){var e=arguments,t=this;return Ve((function*(){var r,n=e.length>0&&void 0!==e[0]?e[0]:{},o=t.getParamsByVersion(n,"USER_ME_URL");if(null!==(r=o.params)&&void 0!==r&&r.query){var i=new xe(o.params.query);o.url+="?".concat(i.toString())}var a=yield t.config.request(o.url,{method:"GET",withCredentials:!0,getCredentials:n.credentials?()=>n.credentials:void 0});return a.sub&&(a.uid=a.sub),a}))()}getWedaUserInfo(){var e=this;return Ve((function*(){return yield e.config.request(t.WEDA_USER_URL,{method:"GET",withCredentials:!0})}))()}deleteMe(e){var t=this;return Ve((function*(){var r=t.getParamsByVersion(e,"USER_ME_URL"),n="".concat(r.url,"?").concat(We.parseParamsToSearch(r.params));return t.config.request(n,{method:"DELETE",withCredentials:!0})}))()}hasLoginState(){var e=this;return Ve((function*(){try{return yield e.config.credentialsClient.getAccessToken(),!0}catch(e){return!1}}))()}hasLoginStateSync(){return this.config.credentialsClient.getCredentialsSync()}getLoginState(){var e=this;return Ve((function*(){return e.config.credentialsClient.getCredentialsAsync()}))()}transByProvider(e){var r=this;return Ve((function*(){return r.config.request(t.USER_TRANS_BY_PROVIDER_URL,{method:"PATCH",body:e,withCredentials:!0})}))()}grantToken(e){var t=this;return Ve((function*(){var r=t.getParamsByVersion(e,"AUTH_TOKEN_URL");return t.config.request(r.url,{method:"POST",body:r.params})}))()}getProviders(){var e=this;return Ve((function*(){return e.config.request(t.PROVIDER_LIST,{method:"GET",withCredentials:!0})}))()}unbindProvider(e){var r=this;return Ve((function*(){return r.config.request("".concat(t.PROVIDER_UNBIND_URL,"/").concat(e.provider_id),{method:"DELETE",withCredentials:!0})}))()}checkPassword(e){var r=this;return Ve((function*(){return r.config.request("".concat(t.CHECK_PWD_URL),{method:"POST",withCredentials:!0,body:e})}))()}editContact(e){var r=this;return Ve((function*(){return r.config.request("".concat(t.BIND_CONTACT_URL),{method:"PATCH",withCredentials:!0,body:e})}))()}setPassword(e){var r=this;return Ve((function*(){return r.config.request("".concat(t.AUTH_SET_PASSWORD),{method:"PATCH",withCredentials:!0,body:e})}))()}updatePasswordByOld(e){var t=this;return Ve((function*(){var r=yield t.sudo({password:e.old_password});return t.setPassword({sudo_token:r.sudo_token,new_password:e.new_password})}))()}sudo(e){var r=this;return Ve((function*(){return r.config.request("".concat(t.SUDO_URL),{method:"POST",withCredentials:!0,body:e})}))()}sendVerificationCodeToCurrentUser(e){var r=this;return Ve((function*(){return e.target="CUR_USER",r.config.request(t.VERIFICATION_URL,{method:"POST",body:e,withCredentials:!0,withCaptcha:!0})}))()}changeBoundProvider(e){var r=this;return Ve((function*(){return r.config.request("".concat(t.PROVIDER_LIST,"/").concat(e.provider_id,"/trans"),{method:"POST",body:{provider_trans_token:e.trans_token},withCredentials:!0})}))()}setUserProfile(e){var r=this;return Ve((function*(){return r.config.request(t.USER_PRIFILE_URL,{method:"PATCH",body:e,withCredentials:!0})}))()}updateUserBasicInfo(e){var r=this;return Ve((function*(){return r.config.request(t.USER_BASIC_EDIT_URL,{method:"POST",withCredentials:!0,body:e})}))()}queryUserProfile(e){var r=this;return Ve((function*(){var n=new xe(e);return r.config.request("".concat(t.USER_QUERY_URL,"?").concat(n.toString()),{method:"GET",withCredentials:!0})}))()}setCustomSignFunc(e){this.getCustomSignTicketFn=e}signInWithCustomTicket(){var e=this;return Ve((function*(){var t=e.getCustomSignTicketFn;if(!t)return Promise.reject({error:"failed_precondition",error_description:"please use setCustomSignFunc to set custom sign function"});var r=yield t();return e.signInCustom({provider_id:"custom",ticket:r})}))()}resetPassword(e){var r=this;return Ve((function*(){return r.config.request(t.AUTH_RESET_PASSWORD,{method:"POST",body:e})}))()}authorize(e){var r=this;return Ve((function*(){return r.config.request(t.AUTHORIZE_URL,{method:"POST",withCredentials:!0,body:e})}))()}authorizeDevice(e){var r=this;return Ve((function*(){return r.config.request(t.AUTHORIZE_DEVICE_URL,{method:"POST",withCredentials:!0,body:e})}))()}deviceAuthorize(e){var r=this;return Ve((function*(){return r.config.request(t.AUTH_GET_DEVICE_CODE,{method:"POST",body:e,withCredentials:!0})}))()}authorizeInfo(e){var r=this;return Ve((function*(){var n="".concat(t.AUTHORIZE_INFO_URL,"?").concat(We.parseParamsToSearch(e)),o=!0,i=!1;return(yield r.hasLoginState())&&(i=!0,o=!1),r.config.request(n,{method:"GET",withBasicAuth:o,withCredentials:i})}))()}checkUsername(e){var r=this;return Ve((function*(){return r.config.request(t.CHECK_USERNAME,{method:"GET",body:e,withCredentials:!0})}))()}checkIfUserExist(e){var r=this;return Ve((function*(){var n=new xe(e);return r.config.request("".concat(t.CHECK_IF_USER_EXIST,"?").concat(n.toString()),{method:"GET"})}))()}loginScope(){var e=this;return Ve((function*(){return e.config.credentialsClient.getScope()}))()}loginGroups(){var e=this;return Ve((function*(){return e.config.credentialsClient.getGroups()}))()}refreshTokenForce(e){var t=this;return Ve((function*(){var r=yield t.config.credentialsClient.getCredentials();return yield t.config.credentialsClient.refreshToken(qe(qe({},r),{},{version:(null==e?void 0:e.version)||"v1"}))}))()}getCredentials(){var e=this;return Ve((function*(){return e.config.credentialsClient.getCredentials()}))()}getPublicKey(){var e=this;return Ve((function*(){return e.config.request(o.AUTH_PUBLIC_KEY,{method:"POST",body:{}})}))()}getEncryptParams(e){var t=this;return Ve((function*(){var{isEncrypt:r}=e;delete e.isEncrypt;var n=(0,h.I)(e),o=yield Me(r,t.config.adapter);if(!o)return e;var i="",a="";try{var s=yield t.getPublicKey();if(i=s.public_key,a=s.public_key_thumbprint,!i||!a)throw s}catch(e){throw e}return{params:o.getEncryptInfo({publicKey:i,payload:n}),public_key_thumbprint:a}}))()}getProviderSubType(){var e=this;return Ve((function*(){return e.config.request(t.GET_PROVIDER_TYPE,{method:"POST",body:{provider_id:"weda"}})}))()}verifyCaptchaData(e){var r=this;return Ve((function*(){var{token:n,key:o}=e;return r.config.request(t.VERIFY_CAPTCHA_DATA_URL,{method:"POST",body:{token:n,key:o},withCredentials:!1})}))()}createCaptchaData(e){var r=this;return Ve((function*(){var{state:n,redirect_uri:o}=e;return r.config.request(t.CAPTCHA_DATA_URL,{method:"POST",body:{state:n,redirect_uri:o},withCredentials:!1})}))()}getMiniProgramCode(e){var r=this;return Ve((function*(){return r.config.request(t.GET_MINIPROGRAM_QRCODE,{method:"POST",body:e})}))()}getMiniProgramQrCodeStatus(e){var r=this;return Ve((function*(){return r.config.request(t.GET_MINIPROGRAM_QRCODE_STATUS,{method:"POST",body:e})}))()}getUserBehaviorLog(e){var r=this;return Ve((function*(){var n="".concat(t.GET_USER_BEHAVIOR_LOG,"?").concat({LOGIN:"query[action]=USER_LOGIN",MODIFY:"ne_query[action]=USER_LOGIN"}[e.type],"&limit=").concat(e.limit).concat(e.page_token?"&page_token=".concat(e.page_token):"");return r.config.request(n,{method:"GET",withCredentials:!0})}))()}modifyPassword(e){var r=this;return Ve((function*(){var n="",o="",i=yield Me(!0,r.config.adapter);if(!i)throw new Error("do not support encrypt, a encrypt util required.");try{var a=yield r.getPublicKey();if(n=a.public_key,o=a.public_key_thumbprint,!n||!o)throw a}catch(e){throw e}var s=e.password?i.getEncryptInfo({publicKey:n,payload:e.password}):"",c=i.getEncryptInfo({publicKey:n,payload:e.new_password});return r.config.request(t.USER_BASIC_EDIT_URL,{method:"POST",withCredentials:!0,body:{user_id:e.user_id,encrypt_password:s,encrypt_new_password:c,public_key_thumbprint:o}})}))()}modifyPasswordWithoutLogin(e){var t=this;return Ve((function*(){var r="",n="",i=yield Me(!0,t.config.adapter);if(!i)throw new Error("do not support encrypt, a encrypt util required.");try{var a=yield t.getPublicKey();if(r=a.public_key,n=a.public_key_thumbprint,!r||!n)throw a}catch(e){throw e}var s=e.password?i.getEncryptInfo({publicKey:r,payload:e.password}):"",c=i.getEncryptInfo({publicKey:r,payload:e.new_password});return t.config.request(o.AUTH_RESET_PASSWORD,{method:"POST",body:{username:e.username,password:s,new_password:c,public_key_thumbprint:n}})}))()}restoreUrlState(e,t){if(void 0!==e)try{var r=new URL(window.location.href);r.search=e,r.hash=t||"",window.history.replaceState(null,"",r.toString())}catch(e){}}}function Fe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ke(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Fe(Object(r),!0).forEach((function(t){Ye(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Fe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ye(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class ze{constructor(e){var{apiOrigin:t,apiPath:r=s,clientId:n,env:o,storage:i,request:a,baseRequest:c,anonymousSignInFunc:u,wxCloud:l,adapter:d,onCredentialsError:f,headers:p,i18n:h,useWxCloud:v,eventBus:y,detectSessionInUrl:g,debug:_}=e;this.detectSessionInUrl=null!=g&&g,this.oauth2client=new ue({apiOrigin:t,apiPath:r,clientId:n,env:o,storage:i,baseRequest:c||a,anonymousSignInFunc:u,wxCloud:l,onCredentialsError:f,headers:p||{},i18n:h,useWxCloud:v,eventBus:y,debug:_}),this.authApi=new We(Ke(Ke({credentialsClient:this.oauth2client},e),{},{request:a?this.oauth2client.request.bind(this.oauth2client):void 0,adapter:d})),g&&this.oauth2client.setGetInitialSession(this.authApi.getInitialSession.bind(this.authApi))}initializeSession(e){this.detectSessionInUrl?(this.oauth2client.setOnInitialSessionObtained(e),this.oauth2client.initialize()):this.oauth2client.initialize(Promise.resolve({error:null}))}}})(),n})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/oauth",
3
- "version": "2.24.10",
3
+ "version": "2.25.1",
4
4
  "description": "cloudbase javascript sdk auth componets",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -19,16 +19,16 @@
19
19
  "precommit": "npm run lint"
20
20
  },
21
21
  "dependencies": {
22
- "@cloudbase/utilities": "2.24.10"
22
+ "@cloudbase/utilities": "2.25.1"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@babel/preset-env": "^7.25.3",
26
- "@cloudbase/types": "2.24.10",
26
+ "@cloudbase/types": "2.25.1",
27
27
  "@types/node": "^22.5.4",
28
28
  "terser-webpack-plugin": "^3.0.2",
29
29
  "ts-loader": "^9.5.1",
30
30
  "webpack-bundle-analyzer": "^4.9.1"
31
31
  },
32
32
  "license": "Apache-2.0",
33
- "gitHead": "1295166f18177e01052fb4c058483a8cd0f2f969"
33
+ "gitHead": "6bd91c071d8fd06ef6d6d3ed2c8afcb84db4d9d5"
34
34
  }
package/src/auth/apis.ts CHANGED
@@ -69,7 +69,7 @@ import { deepClone } from '../utils'
69
69
  import MyURLSearchParams from '../utils/urlSearchParams'
70
70
  import { SDKAdapterInterface } from '@cloudbase/adapter-interface'
71
71
  import { ICloudbaseConfig } from '@cloudbase/types'
72
- import { AuthError } from '..'
72
+ import { AuthError } from './auth-error'
73
73
 
74
74
  async function getEncryptUtils(isEncrypt, adapter: SDKAdapterInterface) {
75
75
  const getUtils = async () => {