@cloudbase/oauth 2.17.13 → 2.17.15

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.
@@ -3,6 +3,7 @@ import { SimpleStorage, RequestFunction } from '../oauth2client/interface';
3
3
  import { OAuth2Client } from '../oauth2client/oauth2client';
4
4
  import { Credentials } from '../oauth2client/models';
5
5
  import { CaptchaOptions } from '../captcha/captcha';
6
+ import { SDKAdapterInterface } from '@cloudbase/adapter-interface';
6
7
  export interface AuthOptions {
7
8
  apiOrigin: string;
8
9
  clientId: string;
@@ -15,6 +16,7 @@ export interface AuthOptions {
15
16
  captchaOptions?: Partial<CaptchaOptions>;
16
17
  env?: string;
17
18
  wxCloud?: any;
19
+ adapter?: SDKAdapterInterface;
18
20
  }
19
21
  export declare class Auth {
20
22
  private static parseParamsToSearch;
@@ -67,14 +67,18 @@ 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
- function getEncryptUtils(isEncrypt) {
71
- if (globalThis.IS_MP_BUILD) {
72
- return;
73
- }
74
- if (isEncrypt) {
75
- var utils = require('../utils/encrypt');
76
- return utils;
70
+ function getEncryptUtils(isEncrypt, adapter) {
71
+ var _a;
72
+ try {
73
+ if ((((_a = adapter === null || adapter === void 0 ? void 0 : adapter.root) === null || _a === void 0 ? void 0 : _a.globalThis) || globalThis).IS_MP_BUILD) {
74
+ return;
75
+ }
76
+ if (!process.env.IS_MP_BUILD && isEncrypt) {
77
+ var utils = require('../utils/encrypt');
78
+ return utils;
79
+ }
77
80
  }
81
+ catch (error) { }
78
82
  }
79
83
  var Auth = (function () {
80
84
  function Auth(opts) {
@@ -94,7 +98,7 @@ var Auth = (function () {
94
98
  }
95
99
  if (!request) {
96
100
  var baseRequest = oAuth2Client.request.bind(oAuth2Client);
97
- var captcha = new captcha_1.Captcha(__assign({ clientId: opts.clientId, request: baseRequest, storage: opts.storage }, opts.captchaOptions));
101
+ var captcha = new captcha_1.Captcha(__assign({ clientId: opts.clientId, request: baseRequest, storage: opts.storage, adapter: opts.adapter }, opts.captchaOptions));
98
102
  request = captcha.request.bind(captcha);
99
103
  }
100
104
  this.config = {
@@ -104,6 +108,7 @@ var Auth = (function () {
104
108
  request: request,
105
109
  credentialsClient: oAuth2Client,
106
110
  storage: opts.storage || oauth2client_1.defaultStorage,
111
+ adapter: opts.adapter,
107
112
  };
108
113
  }
109
114
  Auth.parseParamsToSearch = function (params) {
@@ -865,7 +870,7 @@ var Auth = (function () {
865
870
  isEncrypt = params.isEncrypt;
866
871
  delete params.isEncrypt;
867
872
  payload = (0, utils_1.deepClone)(params);
868
- encryptUtils = getEncryptUtils(isEncrypt);
873
+ encryptUtils = getEncryptUtils(isEncrypt, this.config.adapter);
869
874
  if (!encryptUtils) {
870
875
  return [2, params];
871
876
  }
@@ -971,7 +976,7 @@ var Auth = (function () {
971
976
  case 0:
972
977
  publicKey = '';
973
978
  public_key_thumbprint = '';
974
- encryptUtils = getEncryptUtils(true);
979
+ encryptUtils = getEncryptUtils(true, this.config.adapter);
975
980
  if (!encryptUtils) {
976
981
  throw new Error('do not support encrypt, a encrypt util required.');
977
982
  }
@@ -1015,7 +1020,7 @@ var Auth = (function () {
1015
1020
  case 0:
1016
1021
  publicKey = '';
1017
1022
  public_key_thumbprint = '';
1018
- encryptUtils = getEncryptUtils(true);
1023
+ encryptUtils = getEncryptUtils(true, this.config.adapter);
1019
1024
  if (!encryptUtils) {
1020
1025
  throw new Error('do not support encrypt, a encrypt util required.');
1021
1026
  }
@@ -1053,4 +1058,4 @@ var Auth = (function () {
1053
1058
  return Auth;
1054
1059
  }());
1055
1060
  exports.Auth = Auth;
1056
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVosbUNBQXdEO0FBOER4RCw2REFBMkU7QUFFM0UsOENBQTREO0FBQzVELGtDQUFvQztBQUNwQyw2RUFBd0Q7QUFFeEQsU0FBUyxlQUFlLENBQUMsU0FBUztJQUNoQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUU7UUFDMUIsT0FBTTtLQUNQO0lBQ0QsSUFBSSxTQUFTLEVBQUU7UUFHYixJQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUV6QyxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQXNCRDtJQWtCRSxjQUFZLElBQWlCO1FBQ3JCLElBQUEsT0FBTyxHQUFLLElBQUksUUFBVCxDQUFTO1FBQ3RCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQTtRQUN6QyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLElBQU0sV0FBVyxHQUFHO2dCQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87YUFDdEIsQ0FBQTtZQUNELFlBQVksR0FBRyxJQUFJLDJCQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7U0FDN0M7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osSUFB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LEVBQUUsQ0FBQyxDQUFBO3dCQUNyRyxXQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFTLENBQUMsbUJBQW1CLEVBQUU7Z0NBQ3hELE1BQU0sRUFBRSxNQUFNO2dDQUNkLElBQUksRUFBRTtvQ0FDSixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0NBQ3pCLFFBQVEsRUFBRSxnQkFBZ0I7b0NBQzFCLFlBQVksRUFBRSxvQkFBb0I7b0NBQ2xDLHFCQUFxQix1QkFBQTtpQ0FDdEI7NkJBQ0YsQ0FBQyxFQUFBOzs7O0tBQ0g7SUFDSCxXQUFDO0FBQUQsQ0FBQyxBQXQ3QkQsSUFzN0JDO0FBdDdCWSxvQkFBSSIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5pbXBvcnQgeyBBcGlVcmxzLCBBcGlVcmxzVjIsIEVycm9yVHlwZSB9IGZyb20gJy4vY29uc3RzJ1xuaW1wb3J0IHtcbiAgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2UsXG4gIFVzZXJQcm9maWxlLFxuICBVc2VySW5mbyxcbiAgU2lnbkluUmVxdWVzdCxcbiAgU2lnblVwUmVxdWVzdCxcbiAgVmVyaWZ5UmVxdWVzdCxcbiAgVmVyaWZ5UmVzcG9uc2UsXG4gIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0LFxuICBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2UsXG4gIEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gIEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlLFxuICBQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0LFxuICBQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZSxcbiAgU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgU2lnbkluQ3VzdG9tUmVxdWVzdCxcbiAgQmluZFdpdGhQcm92aWRlclJlcXVlc3QsXG4gIFRyYW5zQnlQcm92aWRlclJlcXVlc3QsXG4gIEdyYW50VG9rZW5SZXF1ZXN0LFxuICBVbmJpbmRQcm92aWRlclJlcXVlc3QsXG4gIENoZWNrUGFzc3dvcmRSZXF1ZXN0LFxuICBTZXRQYXNzd29yZFJlcXVlc3QsXG4gIENoYW5nZUJvdW5kUHJvdmlkZXJSZXF1ZXN0LFxuICBDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2UsXG4gIFVwZGF0ZVBhc3N3b3JkUmVxdWVzdCxcbiAgU3Vkb1Jlc3BvbnNlLFxuICBTdWRvUmVxdWVzdCxcbiAgR2V0Q3VzdG9tU2lnblRpY2tldEZuLFxuICBRdWVyeVVzZXJQcm9maWxlUmVxdWVzdCxcbiAgUXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlLFxuICBSZXNldFBhc3N3b3JkUmVxdWVzdCxcbiAgRGV2aWNlQXV0aG9yaXplUmVxdWVzdCxcbiAgRGV2aWNlQXV0aG9yaXplUmVzcG9uc2UsXG4gIENoZWNrVXNlcm5hbWVSZXF1ZXN0LFxuICBDaGVja0lmVXNlckV4aXN0UmVxdWVzdCxcbiAgQ2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlLFxuICBXaXRoU3Vkb1JlcXVlc3QsXG4gIFB1YmxpY0tleSxcbiAgRW5jcnlwdFBhcmFtcyxcbiAgUHJvdmlkZXJTdWJUeXBlLFxuICBHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlcXVlc3QsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZSxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZSxcbiAgTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QsXG4gIEVkaXRDb250YWN0UmVxdWVzdCxcbiAgQXV0aG9yaXplSW5mb1JlcXVlc3QsXG4gIEF1dGhvcml6ZUluZm9SZXNwb25zZSxcbiAgQXV0aG9yaXplRGV2aWNlUmVxdWVzdCxcbiAgQXV0aG9yaXplUmVxdWVzdCxcbiAgQXV0aG9yaXplUmVzcG9uc2UsXG4gIEdldFVzZXJCZWhhdmlvckxvZyxcbiAgR2V0VXNlckJlaGF2aW9yTG9nUmVzLFxuICBSZXZva2VEZXZpY2VSZXF1ZXN0LFxuICBTaWdub3V0UmVwb25zZSxcbiAgUHJvdmlkZXJzUmVzcG9uc2UsXG4gIFNpZ25vdXRSZXF1ZXN0LFxuICBNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QsXG59IGZyb20gJy4vbW9kZWxzJ1xuaW1wb3J0IHsgU2ltcGxlU3RvcmFnZSwgUmVxdWVzdEZ1bmN0aW9uIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L2ludGVyZmFjZSdcbmltcG9ydCB7IE9BdXRoMkNsaWVudCwgZGVmYXVsdFN0b3JhZ2UgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50J1xuaW1wb3J0IHsgQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvbW9kZWxzJ1xuaW1wb3J0IHsgQ2FwdGNoYSwgQ2FwdGNoYU9wdGlvbnMgfSBmcm9tICcuLi9jYXB0Y2hhL2NhcHRjaGEnXG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCBNeVVSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi91dGlscy91cmxTZWFyY2hQYXJhbXMnXG5cbmZ1bmN0aW9uIGdldEVuY3J5cHRVdGlscyhpc0VuY3J5cHQpIHtcbiAgaWYgKGdsb2JhbFRoaXMuSVNfTVBfQlVJTEQpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNFbmNyeXB0KSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9lbmNyeXB0JylcbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgcmV0dXJuIHV0aWxzXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoT3B0aW9ucyB7XG4gIGFwaU9yaWdpbjogc3RyaW5nXG4gIGNsaWVudElkOiBzdHJpbmdcbiAgLyoqXG4gICAqIGJhc2ljIGF1dGhcbiAgICovXG4gIGNsaWVudFNlY3JldD86IHN0cmluZ1xuICBjcmVkZW50aWFsc0NsaWVudD86IE9BdXRoMkNsaWVudFxuICByZXF1ZXN0PzogUmVxdWVzdEZ1bmN0aW9uXG4gIGJhc2VSZXF1ZXN0PzogUmVxdWVzdEZ1bmN0aW9uXG4gIHN0b3JhZ2U/OiBTaW1wbGVTdG9yYWdlXG4gIGFub255bW91c1NpZ25JbkZ1bmM/OiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuICBjYXB0Y2hhT3B0aW9ucz86IFBhcnRpYWw8Q2FwdGNoYU9wdGlvbnM+XG4gIGVudj86IHN0cmluZ1xuICB3eENsb3VkPzogYW55XG59XG5cbi8qKlxuICogQXV0aFxuICovXG5leHBvcnQgY2xhc3MgQXV0aCB7XG4gIHByaXZhdGUgc3RhdGljIHBhcnNlUGFyYW1zVG9TZWFyY2gocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xuICAgIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIXBhcmFtc1trZXldKSB7XG4gICAgICAgIGRlbGV0ZSBwYXJhbXNba2V5XVxuICAgICAgfVxuICAgIH0pXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG4gICAgcmV0dXJuIHNlYXJjaFBhcmFtcy50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGNvbmZpZzogQXV0aE9wdGlvbnNcbiAgcHJpdmF0ZSBnZXRDdXN0b21TaWduVGlja2V0Rm4/OiBHZXRDdXN0b21TaWduVGlja2V0Rm5cblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtBdXRoT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQXV0aE9wdGlvbnMpIHtcbiAgICBsZXQgeyByZXF1ZXN0IH0gPSBvcHRzXG4gICAgbGV0IG9BdXRoMkNsaWVudCA9IG9wdHMuY3JlZGVudGlhbHNDbGllbnRcbiAgICBpZiAoIW9BdXRoMkNsaWVudCkge1xuICAgICAgY29uc3QgaW5pdE9wdGlvbnMgPSB7XG4gICAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UsXG4gICAgICAgIGVudjogb3B0cy5lbnYsXG4gICAgICAgIGJhc2VSZXF1ZXN0OiBvcHRzLmJhc2VSZXF1ZXN0IC8qIHx8IG9wdHMucmVxdWVzdCAqLywgLy8gb3B0cy5yZXF1ZXN0IOW6n+W8g+S4jeeUqOadpeihqOekuiBvYXV0aCBycXVlc3RcbiAgICAgICAgYW5vbnltb3VzU2lnbkluRnVuYzogb3B0cy5hbm9ueW1vdXNTaWduSW5GdW5jLFxuICAgICAgICB3eENsb3VkOiBvcHRzLnd4Q2xvdWQsXG4gICAgICB9XG4gICAgICBvQXV0aDJDbGllbnQgPSBuZXcgT0F1dGgyQ2xpZW50KGluaXRPcHRpb25zKVxuICAgIH1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGJhc2VSZXF1ZXN0ID0gb0F1dGgyQ2xpZW50LnJlcXVlc3QuYmluZChvQXV0aDJDbGllbnQpXG4gICAgICBjb25zdCBjYXB0Y2hhID0gbmV3IENhcHRjaGEoe1xuICAgICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgICAgcmVxdWVzdDogYmFzZVJlcXVlc3QsXG4gICAgICAgIHN0b3JhZ2U6IG9wdHMuc3RvcmFnZSxcbiAgICAgICAgLi4ub3B0cy5jYXB0Y2hhT3B0aW9ucyxcbiAgICAgIH0pXG4gICAgICByZXF1ZXN0ID0gY2FwdGNoYS5yZXF1ZXN0LmJpbmQoY2FwdGNoYSlcbiAgICB9XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBlbnY6IG9wdHMuZW52LFxuICAgICAgYXBpT3JpZ2luOiBvcHRzLmFwaU9yaWdpbixcbiAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIGNyZWRlbnRpYWxzQ2xpZW50OiBvQXV0aDJDbGllbnQsXG4gICAgICBzdG9yYWdlOiBvcHRzLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2UsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagueaNrueJiOacrOagh+ivhu+8jOWkhOeQhuW+heivt+axgueahHVybOWSjHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBnZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zVGVtcCA9IGRlZXBDbG9uZShwYXJhbXMpXG4gICAgY29uc3QgdXJsID0geyB2MjogQXBpVXJsc1YyIH1bcGFyYW1zVGVtcD8udmVyc2lvbl0/LltrZXldIHx8IEFwaVVybHNba2V5XVxuXG4gICAgaWYgKHBhcmFtc1RlbXApIHtcbiAgICAgIGRlbGV0ZSBwYXJhbXNUZW1wLnZlcnNpb25cbiAgICB9XG5cbiAgICByZXR1cm4geyBwYXJhbXM6IHBhcmFtc1RlbXAsIHVybCB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBpbi5cbiAgICogQHBhcmFtIHtTaWduSW5SZXF1ZXN0fSBwYXJhbXMgQSBTaWduSW5SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IFNpZ25JblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgdmVyc2lvbiA9IHBhcmFtcy52ZXJzaW9uIHx8ICd2MSdcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdBVVRIX1NJR05fSU5fVVJMJylcbiAgICBpZiAocmVzLnBhcmFtcy5xdWVyeSkge1xuICAgICAgZGVsZXRlIHJlcy5wYXJhbXMucXVlcnlcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgdGhpcy5nZXRFbmNyeXB0UGFyYW1zKHJlcy5wYXJhbXMpXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoe1xuICAgICAgLi4uY3JlZGVudGlhbHMsXG4gICAgICB2ZXJzaW9uLFxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGluIEFub255bW91c2x5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5Bbm9ueW1vdXNseShkYXRhOiB7XG4gICAgcHJvdmlkZXJfdG9rZW4/OiBzdHJpbmdcbiAgfSA9IHt9LCB1c2VXeENsb3VkID0gZmFsc2UpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fSU5fQU5PTllNT1VTTFlfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICB1c2VXeENsb3VkLFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHVwLlxuICAgKiBAcGFyYW0ge1NpZ25VcFJlcXVlc3R9IHBhcmFtcyBBIFNpZ25VcFJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblVwKHBhcmFtczogU2lnblVwUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBkYXRhOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuQVVUSF9TSUdOX1VQX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhkYXRhKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8U2lnbm91dFJlcXVlc3Q+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduT3V0KHBhcmFtcz86IFNpZ25vdXRSZXF1ZXN0KTogUHJvbWlzZTxTaWdub3V0UmVwb25zZT4ge1xuICAgIGxldCByZXNwOiBTaWdub3V0UmVwb25zZSA9IHt9XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8U2lnbm91dFJlcG9uc2U+KEFwaVVybHMuQVVUSF9TSUdOT1VUX1VSTCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5lcnJvciAhPT0gRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdzaWduX291dF9lcnJvcicsIGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoKVxuICAgICAgcmV0dXJuIHJlc3BcbiAgICB9XG4gICAgY29uc3QgYWNjZXNzVG9rZW46IHN0cmluZyA9IGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkFVVEhfUkVWT0tFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHRva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIH0sXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscygpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBBbGwgRGV2aWNlc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmV2b2tlQWxsRGV2aWNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSF9SRVZPS0VfQUxMX1VSTCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBEZXZpY2VcbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJldm9rZURldmljZShwYXJhbXM6IFJldm9rZURldmljZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSE9SSVpFRF9ERVZJQ0VTX0RFTEVURV9VUkwgKyBwYXJhbXMuZGV2aWNlX2lkLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7R2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWZXJpZmljYXRpb24ocGFyYW1zOiBHZXRWZXJpZmljYXRpb25SZXF1ZXN0LCBvcHRpb25zPzogeyB3aXRoQ2FwdGNoYTogYm9vbGVhbn0pOiBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgbGV0IHdpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgLy8g5Y+R6YCB55+t5L+h5pe277yM5aaC5p6c5pe257uZ5b2T5YmN55So5oi35Y+R77yM5YiZ6ZyA6KaB5bim5LiK6Ym05p2D5L+h5oGvXG4gICAgaWYgKHBhcmFtcy50YXJnZXQgPT09ICdDVVJfVVNFUicpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGFzTG9naW4gPSBhd2FpdCB0aGlzLmhhc0xvZ2luU3RhdGUoKVxuICAgICAgaWYgKGhhc0xvZ2luKSB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+KEFwaVVybHMuVkVSSUZJQ0FUSU9OX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ2FwdGNoYTogb3B0aW9ucz8ud2l0aENhcHRjaGEgfHwgZmFsc2UsXG4gICAgICB3aXRoQ3JlZGVudGlhbHMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiAgVmVyaWZ5IHRoZSBjb2RlXG4gICAqIEBwYXJhbSB7VmVyaWZ5UmVxdWVzdH0gcGFyYW1zIEEgVmVyaWZ5UmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VmVyaWZ5UmVzcG9uc2U+fSBBIFByb21pc2U8VmVyaWZ5UmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkocGFyYW1zOiBWZXJpZnlSZXF1ZXN0KTogUHJvbWlzZTxWZXJpZnlSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ1ZFUklGWV9VUkwnKVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PFZlcmlmeVJlc3BvbnNlPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHJlcy5wYXJhbXMsXG4gICAgfSlcblxuICAgIGlmIChwYXJhbXM/LnZlcnNpb24gPT09ICd2MicpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgdmVyc2lvbjogJ3YyJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW4gcHJvdmlkZXIgcmVkaXJlY3QgdXJpLlxuICAgKiBAcGFyYW0ge0dlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0fSBwYXJhbXMgQSBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPn0gQSBQcm9taXNlPEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdlblByb3ZpZGVyUmVkaXJlY3RVcmkocGFyYW1zOiBHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCk6IFByb21pc2U8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPiB7XG4gICAgY29uc3QgeyBwcm92aWRlcl9yZWRpcmVjdF91cmk6IHJlZGlyZWN0X3VyaSwgb3RoZXJfcGFyYW1zOiBvdGhlclBhcmFtcyA9IHt9LCAuLi5yZXN0UGFyYW1zIH0gPSBwYXJhbXNcbiAgICBpZiAocmVkaXJlY3RfdXJpICYmICFyZXN0UGFyYW1zLnJlZGlyZWN0X3VyaSkge1xuICAgICAgcmVzdFBhcmFtcy5yZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmlcbiAgICB9XG5cbiAgICBsZXQgdXJsID0gYCR7QXBpVXJscy5QUk9WSURFUl9VUklfVVJMfT8ke0F1dGgucGFyc2VQYXJhbXNUb1NlYXJjaChyZXN0UGFyYW1zKX1gXG4gICAgT2JqZWN0LmtleXMob3RoZXJQYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBvdGhlclBhcmFtc1trZXldXG4gICAgICBpZiAoa2V5ID09PSAnc2lnbl9vdXRfdXJpJyAmJiAhKHZhbHVlPy5sZW5ndGggPiAwKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVybCArPSBgJm90aGVyX3BhcmFtc1ske2tleX1dPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gXG4gICAgfSlcblxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4odXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcHJvdmlkZXIgdG9rZW4uXG4gICAqIEBwYXJhbSB7R3JhbnRQcm92aWRlclRva2VuUmVxdWVzdH0gcGFyYW1zIEEgR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+fSBBIFByb21pc2U8R3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBncmFudFByb3ZpZGVyVG9rZW4oXG4gICAgcGFyYW1zOiBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LFxuICAgIHVzZVd4Q2xvdWQgPSBmYWxzZSxcbiAgKTogUHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPihBcGlVcmxzLlBST1ZJREVSX1RPS0VOX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB1c2VXeENsb3VkLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcHJvdmlkZXIgdG9rZW4uXG4gICAqIEBwYXJhbSB7UGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdH0gcGFyYW1zIEEgUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+fSBBIFByb21pc2U8UGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwYXRjaFByb3ZpZGVyVG9rZW4ocGFyYW1zOiBQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPihBcGlVcmxzLlBST1ZJREVSX1RPS0VOX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2lnbmluIHdpdGggcHJvdmlkZXIgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtTaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXMgQSBTaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhQcm92aWRlcihwYXJhbXM6IFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QsIHVzZVd4Q2xvdWQgPSBmYWxzZSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdBVVRIX1NJR05fSU5fV0lUSF9QUk9WSURFUl9VUkwnKVxuXG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiByZXMucGFyYW1zLFxuICAgICAgdXNlV3hDbG91ZCxcbiAgICB9KVxuXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoe1xuICAgICAgLi4uY3JlZGVudGlhbHMsXG4gICAgICB2ZXJzaW9uOiBwYXJhbXM/LnZlcnNpb24gfHwgJ3YxJyxcbiAgICB9KVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogU2lnbmluIHdpdGggY3VzdG9tLlxuICAgKiBAcGFyYW0ge1NpZ25JbkN1c3RvbVJlcXVlc3R9IHBhcmFtcyBBIFNpZ25JbkN1c3RvbVJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluQ3VzdG9tKHBhcmFtczogU2lnbkluQ3VzdG9tUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfU0lHTl9JTl9DVVNUT00sIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgLyoqXG4gICAqIHNpZ24gaW4gd2l0aCB3ZWNoYXQgaWRlbmRpZnlcbiAgICog6ZyA6KaB57uT5ZCIIGh0dHAgb3ZlcmNhbGxGdW5jdGlvbiDkvb/nlKhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoV2VjaGF0KHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fSU5fV0lUSF9XRUNIQVRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogQmluZCB3aXRoIHByb3ZpZGVyXG4gICAqIEBwYXJhbSB7QmluZFdpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBQcm9taXNlPGFueT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGJpbmRXaXRoUHJvdmlkZXIocGFyYW1zOiBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oQXBpVXJscy5QUk9WSURFUl9CSU5EX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VyUHJvZmlsZT59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVzZXJQcm9maWxlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckluZm8ocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBpbmZvLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJJbmZvPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8ocGFyYW1zOiB7IHZlcnNpb24/OiBzdHJpbmc7IHF1ZXJ5Pzogc3RyaW5nIH0gPSB7fSk6IFByb21pc2U8VXNlckluZm8+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmdldFBhcmFtc0J5VmVyc2lvbihwYXJhbXMsICdVU0VSX01FX1VSTCcpXG5cbiAgICBpZiAocmVzLnBhcmFtcz8ucXVlcnkpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhyZXMucGFyYW1zLnF1ZXJ5IGFzIGFueSlcbiAgICAgIHJlcy51cmwgKz0gYD8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWBcbiAgICB9XG5cbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8VXNlckluZm8+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcblxuICAgIGlmICh1c2VySW5mby5zdWIpIHtcbiAgICAgIHVzZXJJbmZvLnVpZCA9IHVzZXJJbmZvLnN1YlxuICAgIH1cblxuICAgIHJldHVybiB1c2VySW5mb1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBpbmZvIGJ5IHdlZGEgcGx1Z2luLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59IEEgUHJvbWlzZTxhbnk+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRXZWRhVXNlckluZm8oKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihBcGlVcmxzLldFREFfVVNFUl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgICByZXR1cm4gdXNlckluZm9cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgbWVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlbGV0ZU1lKHBhcmFtczogV2l0aFN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxVc2VyUHJvZmlsZT4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ1VTRVJfTUVfVVJMJylcbiAgICBjb25zdCB1cmwgPSBgJHtyZXMudXJsfT8ke0F1dGgucGFyc2VQYXJhbXNUb1NlYXJjaChyZXMucGFyYW1zKX1gXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8VXNlclByb2ZpbGU+KHVybCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGhhc0xvZ2luU3RhdGUgY2hlY2sgaWYgaGFzIGxvZ2luIHN0YXRlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IEEgUHJvbWlzZTxib29sZWFuPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaGFzTG9naW5TdGF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhc0xvZ2luU3RhdGVTeW5jKCk6IENyZWRlbnRpYWxzIHwgbnVsbCB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFsc1N5bmMoKVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExvZ2luU3RhdGUoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0Q3JlZGVudGlhbHNBc3luYygpXG4gIH1cblxuICAvKipcbiAgICogVHJhbnMgYnkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7VHJhbnNCeVByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFuc0J5UHJvdmlkZXIocGFyYW1zOiBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLlVTRVJfVFJBTlNfQllfUFJPVklERVJfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB0b2tlbi5cbiAgICogQHBhcmFtIHtHcmFudFRva2VuUmVxdWVzdH0gcGFyYW1zIEEgR3JhbnRUb2tlblJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ3JhbnRUb2tlbihwYXJhbXM6IEdyYW50VG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ0FVVEhfVE9LRU5fVVJMJylcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiByZXMucGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcm92aWRlIGxpc3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UHJvdmlkZXJzUmVzcG9uc2U+fSBBIFByb21pc2U8UHJvdmlkZXJzUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlcnMoKTogUHJvbWlzZTxQcm92aWRlcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFByb3ZpZGVyc1Jlc3BvbnNlPihBcGlVcmxzLlBST1ZJREVSX0xJU1QsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiB1bmJpbmQgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7VW5iaW5kUHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVuYmluZFByb3ZpZGVyKHBhcmFtczogVW5iaW5kUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihgJHtBcGlVcmxzLlBST1ZJREVSX1VOQklORF9VUkx9LyR7cGFyYW1zLnByb3ZpZGVyX2lkfWAsIHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBQYXNzd29yZC5cbiAgICogQHBhcmFtIHtDaGVja1Bhc3N3b3JkUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja1Bhc3N3b3JkKHBhcmFtczogQ2hlY2tQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuQ0hFQ0tfUFdEX1VSTH1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVkaXQgQ29udGFjdCDkv67mlLkg5omL5py65Y+3IOaIliDpgq7nrrFcbiAgICogQHBhcmFtIHtFZGl0Q29udGFjdFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVkaXRDb250YWN0KHBhcmFtczogRWRpdENvbnRhY3RSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8dm9pZD4oYCR7QXBpVXJscy5CSU5EX0NPTlRBQ1RfVVJMfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBQYXNzd29yZC5cbiAgICogQHBhcmFtIHtTZXRQYXNzd29yZHJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFBhc3N3b3JkKHBhcmFtczogU2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihgJHtBcGlVcmxzLkFVVEhfU0VUX1BBU1NXT1JEfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZVBhc3N3b3JkQnlPbGQg5L2/55So5pen5a+G56CB5L+u5pS55a+G56CB77yM5aaC5p6c5bey57uP57uR5a6a5omL5py65Y+377yM6K+35YWI77yac3Vkb++8jOWGjeS/ruaUueWvhueggVxuICAgKiBAcGFyYW0ge1NldFBhc3N3b3JkclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlUGFzc3dvcmRCeU9sZChwYXJhbXM6IFVwZGF0ZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN1ZG9Ub2tlbiA9IGF3YWl0IHRoaXMuc3Vkbyh7IHBhc3N3b3JkOiBwYXJhbXMub2xkX3Bhc3N3b3JkIH0pXG4gICAgcmV0dXJuIHRoaXMuc2V0UGFzc3dvcmQoe1xuICAgICAgc3Vkb190b2tlbjogc3Vkb1Rva2VuLnN1ZG9fdG9rZW4sXG4gICAgICBuZXdfcGFzc3dvcmQ6IHBhcmFtcy5uZXdfcGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBzdWRvXG4gICAqIEBwYXJhbSB7c3Vkb30gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdWRvKHBhcmFtczogU3Vkb1JlcXVlc3QpOiBQcm9taXNlPFN1ZG9SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFN1ZG9SZXNwb25zZT4oYCR7QXBpVXJscy5TVURPX1VSTH1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB1c2VyIHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtHZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlbmRWZXJpZmljYXRpb25Db2RlVG9DdXJyZW50VXNlcihwYXJhbXM6IEdldFZlcmlmaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgcGFyYW1zLnRhcmdldCA9ICdDVVJfVVNFUidcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4oQXBpVXJscy5WRVJJRklDQVRJT05fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIHdpdGhDYXB0Y2hhOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogY2hhbmdlIEJvdW5kIHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge0NoYW5nZUJvdW5kUHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXMgQSBHZXRWZXJpZmljYXRpb25SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDaGFuZ2VCb3VuZFByb3ZpZGVyUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VCb3VuZFByb3ZpZGVyKHBhcmFtczogQ2hhbmdlQm91bmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENoYW5nZUJvdW5kUHJvdmlkZXJSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PENoYW5nZUJvdW5kUHJvdmlkZXJSZXNwb25zZT4oYCR7QXBpVXJscy5QUk9WSURFUl9MSVNUfS8ke3BhcmFtcy5wcm92aWRlcl9pZH0vdHJhbnNgLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgcHJvdmlkZXJfdHJhbnNfdG9rZW46IHBhcmFtcy50cmFuc190b2tlbixcbiAgICAgIH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRjaCB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBAcGFyYW0ge1VzZXJQcm9maWxlfSBwYXJhbXMgQSBVc2VyUHJvZmlsZSBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlclByb2ZpbGU+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRVc2VyUHJvZmlsZShwYXJhbXM6IFVzZXJQcm9maWxlKTogUHJvbWlzZTxVc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFVzZXJQcm9maWxlPihBcGlVcmxzLlVTRVJfUFJJRklMRV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB1c2VyIGJhc2ljIGluZm9cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLlVTRVJfQkFTSUNfRURJVF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUGF0Y2ggdGhlIHVzZXIgcHJvZmlsZS5cbiAgICogQHBhcmFtIHtRdWVyeVVzZXJQcm9maWxlUmVxfSBhcHBlbmRlZF9wYXJhbXMgQSBRdWVyeVVzZXJQcm9maWxlUmVxIE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VyUHJvZmlsZT59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHF1ZXJ5VXNlclByb2ZpbGUocGFyYW1zOiBRdWVyeVVzZXJQcm9maWxlUmVxdWVzdCk6IFByb21pc2U8UXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlPiB7XG4gICAgLy8gbGV0IHVybCA9IG5ldyBVUkwoQXBpVXJscy5VU0VSX1FVRVJZX1VSTCk7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG4gICAgLy8gdXJsLnNlYXJjaCA9IHNlYXJjaFBhcmFtcy50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4oYCR7QXBpVXJscy5VU0VSX1FVRVJZX1VSTH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3VzdG9tU2lnbkZ1bmMgc2V0IHRoZSBnZXQgdGlja2V0IGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBnZXRUaWNrRm5cbiAgICovXG4gIHB1YmxpYyBzZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm46IEdldEN1c3RvbVNpZ25UaWNrZXRGbikge1xuICAgIHRoaXMuZ2V0Q3VzdG9tU2lnblRpY2tldEZuID0gZ2V0VGlja0ZuXG4gIH1cblxuICAvKipcbiAgICogU2lnbkluV2l0aEN1c3RvbVRpY2tldCBjdXN0b20gc2lnbkluXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gIC8vICAgY29uc3QgY3VzdG9tU2lnblRpY2tldEZuID0gdGhpcy5nZXRDdXN0b21TaWduVGlja2V0Rm5cbiAgLy8gICBpZiAoIWN1c3RvbVNpZ25UaWNrZXRGbikge1xuICAvLyAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgLy8gICAgIH0pXG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IGN1c3RvbVRpY2tldCA9IGF3YWl0IGN1c3RvbVNpZ25UaWNrZXRGbigpXG4gIC8vICAgcmV0dXJuIHRoaXMuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgLy8gICAgIC4uLnBhcmFtcyxcbiAgLy8gICAgIHByb3ZpZGVyX2lkOiAnY3VzdG9tJyxcbiAgLy8gICAgIHByb3ZpZGVyX3Rva2VuOiBjdXN0b21UaWNrZXQsXG4gIC8vICAgfSlcbiAgLy8gfVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3VzdG9tU2lnblRpY2tldEZuID0gdGhpcy5nZXRDdXN0b21TaWduVGlja2V0Rm5cbiAgICBpZiAoIWN1c3RvbVNpZ25UaWNrZXRGbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgICAgICAgZXJyb3I6ICdmYWlsZWRfcHJlY29uZGl0aW9uJyxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICdwbGVhc2UgdXNlIHNldEN1c3RvbVNpZ25GdW5jIHRvIHNldCBjdXN0b20gc2lnbiBmdW5jdGlvbicsXG4gICAgICB9KVxuICAgIH1cbiAgICBjb25zdCBjdXN0b21UaWNrZXQgPSBhd2FpdCBjdXN0b21TaWduVGlja2V0Rm4oKVxuICAgIHJldHVybiB0aGlzLnNpZ25JbkN1c3RvbSh7XG4gICAgICBwcm92aWRlcl9pZDogJ2N1c3RvbScsXG4gICAgICB0aWNrZXQ6IGN1c3RvbVRpY2tldCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHBhc3N3b3JkXG4gICAqIEBwYXJhbSB7UmVzZXRQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkFVVEhfUkVTRVRfUEFTU1dPUkQsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgLy8gd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRob3JpemUgb2F1dGggQXV0aG9yaXplXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplKHBhcmFtczogQXV0aG9yaXplUmVxdWVzdCk6IFByb21pc2U8QXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxBdXRob3JpemVSZXNwb25zZT4oQXBpVXJscy5BVVRIT1JJWkVfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGF1dGhvcml6ZSBkZXZpY2VcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhvcml6ZURldmljZShwYXJhbXM6IEF1dGhvcml6ZURldmljZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx2b2lkPihBcGlVcmxzLkFVVEhPUklaRV9ERVZJQ0VfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGRldmljZSBhdXRob3JpemF0aW9uXG4gICAqIEBwYXJhbSB7RGV2aWNlQXV0aG9yaXplUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmljZUF1dGhvcml6ZVJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBEZXZpY2VBdXRob3JpemVSZXF1ZXN0KTogUHJvbWlzZTxEZXZpY2VBdXRob3JpemVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9HRVRfREVWSUNFX0NPREUsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogT0F1dGggZ2V0IGF1dGhvcml6ZSBpbmZvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplSW5mbyhwYXJhbXM6IEF1dGhvcml6ZUluZm9SZXF1ZXN0KTogUHJvbWlzZTxBdXRob3JpemVJbmZvUmVzcG9uc2U+IHtcbiAgICBjb25zdCB1cmwgPSBgJHtBcGlVcmxzLkFVVEhPUklaRV9JTkZPX1VSTH0/JHtBdXRoLnBhcnNlUGFyYW1zVG9TZWFyY2gocGFyYW1zKX1gXG4gICAgbGV0IHdpdGhCYXNpY0F1dGggPSB0cnVlXG4gICAgbGV0IHdpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgY29uc3QgaGFzTG9naW4gPSBhd2FpdCB0aGlzLmhhc0xvZ2luU3RhdGUoKVxuICAgIGlmIChoYXNMb2dpbikge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgd2l0aEJhc2ljQXV0aCA9IGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEF1dGhvcml6ZUluZm9SZXNwb25zZT4odXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aEJhc2ljQXV0aCxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrVXNlcm5hbWUocGFyYW1zOiBDaGVja1VzZXJuYW1lUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQ0hFQ0tfVVNFUk5BTUUsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja0lmVXNlckV4aXN0KHBhcmFtczogQ2hlY2tJZlVzZXJFeGlzdFJlcXVlc3QpOiBQcm9taXNlPENoZWNrSWZVc2VyRXhpc3RSZXNwb25zZT4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBNeVVSTFNlYXJjaFBhcmFtcyhwYXJhbXMgYXMgYW55KVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlPihgJHtBcGlVcmxzLkNIRUNLX0lGX1VTRVJfRVhJU1R9PyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0U2NvcGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luR3JvdXBzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0R3JvdXBzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoVG9rZW5Gb3JjZShwYXJhbXM6IHsgdmVyc2lvbj86IHN0cmluZyB9KSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5yZWZyZXNoVG9rZW4oe1xuICAgICAgLi4uY3JlZGVudGlhbHMsXG4gICAgICB2ZXJzaW9uOiBwYXJhbXM/LnZlcnNpb24gfHwgJ3YxJyxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFscygpXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHB1YmxpYyBrZXkgZm9yIHJlcXVlc3QgcGFyYW1zIGVuY3J5cHRpb25cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQdWJsaWNLZXkoKTogUHJvbWlzZTxQdWJsaWNLZXk+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxQdWJsaWNLZXk+KEFwaVVybHNWMi5BVVRIX1BVQkxJQ19LRVksIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge30sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBlbmNyeXB0IHJlcXVlc3QgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRFbmNyeXB0UGFyYW1zKHBhcmFtczogUmVjb3JkPGFueSwgYW55Pik6IFByb21pc2U8RW5jcnlwdFBhcmFtcz4ge1xuICAgIGNvbnN0IHsgaXNFbmNyeXB0IH0gPSBwYXJhbXNcbiAgICBkZWxldGUgcGFyYW1zLmlzRW5jcnlwdFxuXG4gICAgY29uc3QgcGF5bG9hZCA9IGRlZXBDbG9uZShwYXJhbXMpXG5cbiAgICBjb25zdCBlbmNyeXB0VXRpbHMgPSBnZXRFbmNyeXB0VXRpbHMoaXNFbmNyeXB0KVxuXG4gICAgaWYgKCFlbmNyeXB0VXRpbHMpIHtcbiAgICAgIHJldHVybiBwYXJhbXNcbiAgICB9XG5cbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICBsZXQgcHVibGljX2tleV90aHVtYnByaW50ID0gJydcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuXG4gICAgICBpZiAoIXB1YmxpY0tleSB8fCAhcHVibGljX2tleV90aHVtYnByaW50KSB7XG4gICAgICAgIHRocm93IHJlc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQgfSksXG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBwcm92aWRlciBzdWIgdHlwZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVyU3ViVHlwZSgpOiBQcm9taXNlPFByb3ZpZGVyU3ViVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFByb3ZpZGVyU3ViVHlwZT4oQXBpVXJscy5HRVRfUFJPVklERVJfVFlQRSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHByb3ZpZGVyX2lkOiAnd2VkYScsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogZ2V0IHByb3ZpZGVyIHN1YiB0eXBlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmVyaWZ5Q2FwdGNoYURhdGEoeyB0b2tlbiwga2V5IH06IHsgdG9rZW46IHN0cmluZzsga2V5OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHsgY2FwdGNoYV90b2tlbjogc3RyaW5nOyBleHBpcmVzX2luOiBudW1iZXIgfT4oQXBpVXJscy5WRVJJRllfQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7IHRva2VuLCBrZXkgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YSh7IHN0YXRlLCByZWRpcmVjdF91cmkgPSB1bmRlZmluZWQgfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHsgdG9rZW46IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+KEFwaVVybHMuQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7IHN0YXRlLCByZWRpcmVjdF91cmkgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBtaW5pLXByb2dyYW0gc2NhbiBjb2RlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1Db2RlKHBhcmFtczogR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0KTogUHJvbWlzZTxHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZT4oQXBpVXJscy5HRVRfTUlOSVBST0dSQU1fUVJDT0RFLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIG1pbmktcHJvZ3JhbSBzY2FuIGNvZGUgc3RhdHVzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1JlcXVlc3QsKTogUHJvbWlzZTxHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4oQXBpVXJscy5HRVRfTUlOSVBST0dSQU1fUVJDT0RFX1NUQVRVUywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgdXNlciBiZWhhdmlvciBsb2dcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFVzZXJCZWhhdmlvckxvZyhwYXJhbXM6IEdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8R2V0VXNlckJlaGF2aW9yTG9nUmVzPiB7XG4gICAgY29uc3QgYWN0aW9uID0geyBMT0dJTjogJ3F1ZXJ5W2FjdGlvbl09VVNFUl9MT0dJTicsIE1PRElGWTogJ25lX3F1ZXJ5W2FjdGlvbl09VVNFUl9MT0dJTicgfVxuICAgIGNvbnN0IHVybCA9IGAke0FwaVVybHMuR0VUX1VTRVJfQkVIQVZJT1JfTE9HfT8ke2FjdGlvbltwYXJhbXMudHlwZV19JmxpbWl0PSR7cGFyYW1zLmxpbWl0fSR7XG4gICAgICBwYXJhbXMucGFnZV90b2tlbiA/IGAmcGFnZV90b2tlbj0ke3BhcmFtcy5wYWdlX3Rva2VufWAgOiAnJ1xuICAgIH1gXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog6L+Z5Liq5pa55rOV5piv55So5oi36Ieq5bex5L+u5pS56Ieq5bex55qE5a+G56CB77yM5LiN5ZCM5LqOL2F1dGgvdjEvdXNlci9wYXNzd29yZOaOpeWPo++8jOivpeaOpeWPo+aYr+euoeeQhuWRmOS/ruaUueS4quS6uueahFxuICAgKiBAcGFyYW0ge01vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0fSBwYXJhbXMgQSBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIGxldCBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSAnJ1xuXG4gICAgY29uc3QgZW5jcnlwdFV0aWxzID0gZ2V0RW5jcnlwdFV0aWxzKHRydWUpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkbyBub3Qgc3VwcG9ydCBlbmNyeXB0LCBhIGVuY3J5cHQgdXRpbCByZXF1aXJlZC4nKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuXG4gICAgICBpZiAoIXB1YmxpY0tleSB8fCAhcHVibGljX2tleV90aHVtYnByaW50KSB7XG4gICAgICAgIHRocm93IHJlc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRfcGFzc3dvcmQgPSBwYXJhbXMucGFzc3dvcmQgPyBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5wYXNzd29yZCB9KSA6ICcnXG4gICAgY29uc3QgZW5jcnlwdF9uZXdfcGFzc3dvcmQgPSBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5uZXdfcGFzc3dvcmQgfSlcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLlVTRVJfQkFTSUNfRURJVF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keToge1xuICAgICAgICB1c2VyX2lkOiBwYXJhbXMudXNlcl9pZCxcbiAgICAgICAgZW5jcnlwdF9wYXNzd29yZCxcbiAgICAgICAgZW5jcnlwdF9uZXdfcGFzc3dvcmQsXG4gICAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDph43nva7lr4bnoIHvvIzor6XmjqXlj6Pml6DpnIDnmbvlvZXlsLHlj6/ku6Xph43nva7lr4bnoIFcbiAgICogQHBhcmFtIHtNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3R9IHBhcmFtcyBBIE1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW4ocGFyYW1zOiBNb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgcHVibGljS2V5ID0gJydcbiAgICBsZXQgcHVibGljX2tleV90aHVtYnByaW50ID0gJydcblxuICAgIGNvbnN0IGVuY3J5cHRVdGlscyA9IGdldEVuY3J5cHRVdGlscyh0cnVlKVxuXG4gICAgaWYgKCFlbmNyeXB0VXRpbHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG8gbm90IHN1cHBvcnQgZW5jcnlwdCwgYSBlbmNyeXB0IHV0aWwgcmVxdWlyZWQuJylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRQdWJsaWNLZXkoKVxuICAgICAgcHVibGljS2V5ID0gcmVzLnB1YmxpY19rZXlcbiAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCA9IHJlcy5wdWJsaWNfa2V5X3RodW1icHJpbnRcblxuICAgICAgaWYgKCFwdWJsaWNLZXkgfHwgIXB1YmxpY19rZXlfdGh1bWJwcmludCkge1xuICAgICAgICB0aHJvdyByZXNcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICBjb25zdCBlbmNyeXB0X3Bhc3N3b3JkID0gcGFyYW1zLnBhc3N3b3JkID8gZW5jcnlwdFV0aWxzLmdldEVuY3J5cHRJbmZvKHsgcHVibGljS2V5LCBwYXlsb2FkOiBwYXJhbXMucGFzc3dvcmQgfSkgOiAnJ1xuICAgIGNvbnN0IGVuY3J5cHRfbmV3X3Bhc3N3b3JkID0gZW5jcnlwdFV0aWxzLmdldEVuY3J5cHRJbmZvKHsgcHVibGljS2V5LCBwYXlsb2FkOiBwYXJhbXMubmV3X3Bhc3N3b3JkIH0pXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJsc1YyLkFVVEhfUkVTRVRfUEFTU1dPUkQsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICB1c2VybmFtZTogcGFyYW1zLnVzZXJuYW1lLFxuICAgICAgICBwYXNzd29yZDogZW5jcnlwdF9wYXNzd29yZCxcbiAgICAgICAgbmV3X3Bhc3N3b3JkOiBlbmNyeXB0X25ld19wYXNzd29yZCxcbiAgICAgICAgcHVibGljX2tleV90aHVtYnByaW50LFxuICAgICAgfSxcbiAgICB9KVxuICB9XG59XG4iXX0=
1061
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2FwaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVosbUNBQXdEO0FBOER4RCw2REFBMkU7QUFFM0UsOENBQTREO0FBQzVELGtDQUFvQztBQUNwQyw2RUFBd0Q7QUFHeEQsU0FBUyxlQUFlLENBQUMsU0FBUyxFQUFFLE9BQTRCOztJQUM5RCxJQUFJO1FBQ0YsSUFBSSxDQUFDLENBQUEsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSwwQ0FBRSxVQUFVLEtBQUksVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ3pELE9BQU07U0FDUDtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxTQUFTLEVBQUU7WUFHekMsSUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFFekMsT0FBTyxLQUFLLENBQUE7U0FDYjtLQUNGO0lBQUMsT0FBTyxLQUFLLEVBQUUsR0FBRTtBQUNwQixDQUFDO0FBdUJEO0lBa0JFLGNBQVksSUFBaUI7UUFDckIsSUFBQSxPQUFPLEdBQUssSUFBSSxRQUFULENBQVM7UUFDdEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFBO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsSUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFDYixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JB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U0FBUyxJQUFJLENBQUMscUJBQXFCLEVBQUU7NEJBQ3hDLE1BQU0sR0FBRyxDQUFBO3lCQUNWOzs7O3dCQUVELE1BQU0sT0FBSyxDQUFBOzt3QkFHUCxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxXQUFBLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7d0JBQzlHLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxTQUFTLFdBQUEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUE7d0JBQ3JHLFdBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQVMsQ0FBQyxtQkFBbUIsRUFBRTtnQ0FDeEQsTUFBTSxFQUFFLE1BQU07Z0NBQ2QsSUFBSSxFQUFFO29DQUNKLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtvQ0FDekIsUUFBUSxFQUFFLGdCQUFnQjtvQ0FDMUIsWUFBWSxFQUFFLG9CQUFvQjtvQ0FDbEMscUJBQXFCLHVCQUFBO2lDQUN0Qjs2QkFDRixDQUFDLEVBQUE7Ozs7S0FDSDtJQUNILFdBQUM7QUFBRCxDQUFDLEFBOTdCRCxJQTg3QkM7QUE5N0JZLG9CQUFJIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCB7IEFwaVVybHMsIEFwaVVybHNWMiwgRXJyb3JUeXBlIH0gZnJvbSAnLi9jb25zdHMnXG5pbXBvcnQge1xuICBHZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICBHZXRWZXJpZmljYXRpb25SZXNwb25zZSxcbiAgVXNlclByb2ZpbGUsXG4gIFVzZXJJbmZvLFxuICBTaWduSW5SZXF1ZXN0LFxuICBTaWduVXBSZXF1ZXN0LFxuICBWZXJpZnlSZXF1ZXN0LFxuICBWZXJpZnlSZXNwb25zZSxcbiAgR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QsXG4gIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZSxcbiAgR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCxcbiAgR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UsXG4gIFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gIFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlLFxuICBTaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0LFxuICBTaWduSW5DdXN0b21SZXF1ZXN0LFxuICBCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCxcbiAgVHJhbnNCeVByb3ZpZGVyUmVxdWVzdCxcbiAgR3JhbnRUb2tlblJlcXVlc3QsXG4gIFVuYmluZFByb3ZpZGVyUmVxdWVzdCxcbiAgQ2hlY2tQYXNzd29yZFJlcXVlc3QsXG4gIFNldFBhc3N3b3JkUmVxdWVzdCxcbiAgQ2hhbmdlQm91bmRQcm92aWRlclJlcXVlc3QsXG4gIENoYW5nZUJvdW5kUHJvdmlkZXJSZXNwb25zZSxcbiAgVXBkYXRlUGFzc3dvcmRSZXF1ZXN0LFxuICBTdWRvUmVzcG9uc2UsXG4gIFN1ZG9SZXF1ZXN0LFxuICBHZXRDdXN0b21TaWduVGlja2V0Rm4sXG4gIFF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0LFxuICBRdWVyeVVzZXJQcm9maWxlUmVzcG9uc2UsXG4gIFJlc2V0UGFzc3dvcmRSZXF1ZXN0LFxuICBEZXZpY2VBdXRob3JpemVSZXF1ZXN0LFxuICBEZXZpY2VBdXRob3JpemVSZXNwb25zZSxcbiAgQ2hlY2tVc2VybmFtZVJlcXVlc3QsXG4gIENoZWNrSWZVc2VyRXhpc3RSZXF1ZXN0LFxuICBDaGVja0lmVXNlckV4aXN0UmVzcG9uc2UsXG4gIFdpdGhTdWRvUmVxdWVzdCxcbiAgUHVibGljS2V5LFxuICBFbmNyeXB0UGFyYW1zLFxuICBQcm92aWRlclN1YlR5cGUsXG4gIEdldE1pbmlQcm9ncmFtUXJDb2RlUmVxdWVzdCxcbiAgR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXF1ZXN0LFxuICBHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlLFxuICBHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1Jlc3BvbnNlLFxuICBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCxcbiAgRWRpdENvbnRhY3RSZXF1ZXN0LFxuICBBdXRob3JpemVJbmZvUmVxdWVzdCxcbiAgQXV0aG9yaXplSW5mb1Jlc3BvbnNlLFxuICBBdXRob3JpemVEZXZpY2VSZXF1ZXN0LFxuICBBdXRob3JpemVSZXF1ZXN0LFxuICBBdXRob3JpemVSZXNwb25zZSxcbiAgR2V0VXNlckJlaGF2aW9yTG9nLFxuICBHZXRVc2VyQmVoYXZpb3JMb2dSZXMsXG4gIFJldm9rZURldmljZVJlcXVlc3QsXG4gIFNpZ25vdXRSZXBvbnNlLFxuICBQcm92aWRlcnNSZXNwb25zZSxcbiAgU2lnbm91dFJlcXVlc3QsXG4gIE1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCxcbn0gZnJvbSAnLi9tb2RlbHMnXG5pbXBvcnQgeyBTaW1wbGVTdG9yYWdlLCBSZXF1ZXN0RnVuY3Rpb24gfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvaW50ZXJmYWNlJ1xuaW1wb3J0IHsgT0F1dGgyQ2xpZW50LCBkZWZhdWx0U3RvcmFnZSB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQnXG5pbXBvcnQgeyBDcmVkZW50aWFscyB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9tb2RlbHMnXG5pbXBvcnQgeyBDYXB0Y2hhLCBDYXB0Y2hhT3B0aW9ucyB9IGZyb20gJy4uL2NhcHRjaGEvY2FwdGNoYSdcbmltcG9ydCB7IGRlZXBDbG9uZSB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IE15VVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL3V0aWxzL3VybFNlYXJjaFBhcmFtcydcbmltcG9ydCB7IFNES0FkYXB0ZXJJbnRlcmZhY2UgfSBmcm9tICdAY2xvdWRiYXNlL2FkYXB0ZXItaW50ZXJmYWNlJ1xuXG5mdW5jdGlvbiBnZXRFbmNyeXB0VXRpbHMoaXNFbmNyeXB0LCBhZGFwdGVyOiBTREtBZGFwdGVySW50ZXJmYWNlKSB7XG4gIHRyeSB7XG4gICAgaWYgKChhZGFwdGVyPy5yb290Py5nbG9iYWxUaGlzIHx8IGdsb2JhbFRoaXMpLklTX01QX0JVSUxEKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXByb2Nlc3MuZW52LklTX01QX0JVSUxEICYmIGlzRW5jcnlwdCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvZW5jcnlwdCcpXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgICByZXR1cm4gdXRpbHNcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhPcHRpb25zIHtcbiAgYXBpT3JpZ2luOiBzdHJpbmdcbiAgY2xpZW50SWQ6IHN0cmluZ1xuICAvKipcbiAgICogYmFzaWMgYXV0aFxuICAgKi9cbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nXG4gIGNyZWRlbnRpYWxzQ2xpZW50PzogT0F1dGgyQ2xpZW50XG4gIHJlcXVlc3Q/OiBSZXF1ZXN0RnVuY3Rpb25cbiAgYmFzZVJlcXVlc3Q/OiBSZXF1ZXN0RnVuY3Rpb25cbiAgc3RvcmFnZT86IFNpbXBsZVN0b3JhZ2VcbiAgYW5vbnltb3VzU2lnbkluRnVuYz86IChDcmVkZW50aWFscykgPT4gUHJvbWlzZTxDcmVkZW50aWFscyB8IHZvaWQ+XG4gIGNhcHRjaGFPcHRpb25zPzogUGFydGlhbDxDYXB0Y2hhT3B0aW9ucz5cbiAgZW52Pzogc3RyaW5nXG4gIHd4Q2xvdWQ/OiBhbnlcbiAgYWRhcHRlcj86IFNES0FkYXB0ZXJJbnRlcmZhY2Vcbn1cblxuLyoqXG4gKiBBdXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VQYXJhbXNUb1NlYXJjaChwYXJhbXM6IGFueSk6IHN0cmluZyB7XG4gICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICghcGFyYW1zW2tleV0pIHtcbiAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgTXlVUkxTZWFyY2hQYXJhbXMocGFyYW1zIGFzIGFueSlcbiAgICByZXR1cm4gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKClcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnOiBBdXRoT3B0aW9uc1xuICBwcml2YXRlIGdldEN1c3RvbVNpZ25UaWNrZXRGbj86IEdldEN1c3RvbVNpZ25UaWNrZXRGblxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0F1dGhPcHRpb25zfSBvcHRzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRzOiBBdXRoT3B0aW9ucykge1xuICAgIGxldCB7IHJlcXVlc3QgfSA9IG9wdHNcbiAgICBsZXQgb0F1dGgyQ2xpZW50ID0gb3B0cy5jcmVkZW50aWFsc0NsaWVudFxuICAgIGlmICghb0F1dGgyQ2xpZW50KSB7XG4gICAgICBjb25zdCBpbml0T3B0aW9ucyA9IHtcbiAgICAgICAgYXBpT3JpZ2luOiBvcHRzLmFwaU9yaWdpbixcbiAgICAgICAgY2xpZW50SWQ6IG9wdHMuY2xpZW50SWQsXG4gICAgICAgIHN0b3JhZ2U6IG9wdHMuc3RvcmFnZSxcbiAgICAgICAgZW52OiBvcHRzLmVudixcbiAgICAgICAgYmFzZVJlcXVlc3Q6IG9wdHMuYmFzZVJlcXVlc3QgLyogfHwgb3B0cy5yZXF1ZXN0ICovLCAvLyBvcHRzLnJlcXVlc3Qg5bqf5byD5LiN55So5p2l6KGo56S6IG9hdXRoIHJxdWVzdFxuICAgICAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBvcHRzLmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgICAgIHd4Q2xvdWQ6IG9wdHMud3hDbG91ZCxcbiAgICAgIH1cbiAgICAgIG9BdXRoMkNsaWVudCA9IG5ldyBPQXV0aDJDbGllbnQoaW5pdE9wdGlvbnMpXG4gICAgfVxuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgY29uc3QgYmFzZVJlcXVlc3QgPSBvQXV0aDJDbGllbnQucmVxdWVzdC5iaW5kKG9BdXRoMkNsaWVudClcbiAgICAgIGNvbnN0IGNhcHRjaGEgPSBuZXcgQ2FwdGNoYSh7XG4gICAgICAgIGNsaWVudElkOiBvcHRzLmNsaWVudElkLFxuICAgICAgICByZXF1ZXN0OiBiYXNlUmVxdWVzdCxcbiAgICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlLFxuICAgICAgICBhZGFwdGVyOiBvcHRzLmFkYXB0ZXIsXG4gICAgICAgIC4uLm9wdHMuY2FwdGNoYU9wdGlvbnMsXG4gICAgICB9KVxuICAgICAgcmVxdWVzdCA9IGNhcHRjaGEucmVxdWVzdC5iaW5kKGNhcHRjaGEpXG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZW52OiBvcHRzLmVudixcbiAgICAgIGFwaU9yaWdpbjogb3B0cy5hcGlPcmlnaW4sXG4gICAgICBjbGllbnRJZDogb3B0cy5jbGllbnRJZCxcbiAgICAgIHJlcXVlc3QsXG4gICAgICBjcmVkZW50aWFsc0NsaWVudDogb0F1dGgyQ2xpZW50LFxuICAgICAgc3RvcmFnZTogb3B0cy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlLFxuICAgICAgYWRhcHRlcjogb3B0cy5hZGFwdGVyLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoLnmja7niYjmnKzmoIfor4bvvIzlpITnkIblvoXor7fmsYLnmoR1cmzlkoxwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtczogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtc1RlbXAgPSBkZWVwQ2xvbmUocGFyYW1zKVxuICAgIGNvbnN0IHVybCA9IHsgdjI6IEFwaVVybHNWMiB9W3BhcmFtc1RlbXA/LnZlcnNpb25dPy5ba2V5XSB8fCBBcGlVcmxzW2tleV1cblxuICAgIGlmIChwYXJhbXNUZW1wKSB7XG4gICAgICBkZWxldGUgcGFyYW1zVGVtcC52ZXJzaW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcGFyYW1zOiBwYXJhbXNUZW1wLCB1cmwgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gaW4uXG4gICAqIEBwYXJhbSB7U2lnbkluUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW4ocGFyYW1zOiBTaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHZlcnNpb24gPSBwYXJhbXMudmVyc2lvbiB8fCAndjEnXG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnQVVUSF9TSUdOX0lOX1VSTCcpXG4gICAgaWYgKHJlcy5wYXJhbXMucXVlcnkpIHtcbiAgICAgIGRlbGV0ZSByZXMucGFyYW1zLnF1ZXJ5XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHRoaXMuZ2V0RW5jcnlwdFBhcmFtcyhyZXMucGFyYW1zKVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKHtcbiAgICAgIC4uLmNyZWRlbnRpYWxzLFxuICAgICAgdmVyc2lvbixcbiAgICB9KVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogU2lnbiBpbiBBbm9ueW1vdXNseVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkoXG4gICAgZGF0YToge1xuICAgICAgcHJvdmlkZXJfdG9rZW4/OiBzdHJpbmdcbiAgICB9ID0ge30sXG4gICAgdXNlV3hDbG91ZCA9IGZhbHNlLFxuICApOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxDcmVkZW50aWFscz4oQXBpVXJscy5BVVRIX1NJR05fSU5fQU5PTllNT1VTTFlfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICB1c2VXeENsb3VkLFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIHVwLlxuICAgKiBAcGFyYW0ge1NpZ25VcFJlcXVlc3R9IHBhcmFtcyBBIFNpZ25VcFJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnblVwKHBhcmFtczogU2lnblVwUmVxdWVzdCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBkYXRhOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuQVVUSF9TSUdOX1VQX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyhkYXRhKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG91dC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8U2lnbm91dFJlcXVlc3Q+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduT3V0KHBhcmFtcz86IFNpZ25vdXRSZXF1ZXN0KTogUHJvbWlzZTxTaWdub3V0UmVwb25zZT4ge1xuICAgIGxldCByZXNwOiBTaWdub3V0UmVwb25zZSA9IHt9XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8U2lnbm91dFJlcG9uc2U+KEFwaVVybHMuQVVUSF9TSUdOT1VUX1VSTCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5lcnJvciAhPT0gRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdzaWduX291dF9lcnJvcicsIGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoKVxuICAgICAgcmV0dXJuIHJlc3BcbiAgICB9XG4gICAgY29uc3QgYWNjZXNzVG9rZW46IHN0cmluZyA9IGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzLkFVVEhfUkVWT0tFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHRva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIH0sXG4gICAgfSlcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscygpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBBbGwgRGV2aWNlc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZTx2b2lkPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmV2b2tlQWxsRGV2aWNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSF9SRVZPS0VfQUxMX1VSTCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBEZXZpY2VcbiAgICogQHJldHVybiB7T2JqZWN0fSBBIFByb21pc2U8dm9pZD4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJldm9rZURldmljZShwYXJhbXM6IFJldm9rZURldmljZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSE9SSVpFRF9ERVZJQ0VTX0RFTEVURV9VUkwgKyBwYXJhbXMuZGV2aWNlX2lkLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2ZXJpZmljYXRpb24uXG4gICAqIEBwYXJhbSB7R2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zIEEgR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCBPYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fSBBIFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRWZXJpZmljYXRpb24oXG4gICAgcGFyYW1zOiBHZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICAgIG9wdGlvbnM/OiB7IHdpdGhDYXB0Y2hhOiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICAvLyDlj5HpgIHnn63kv6Hml7bvvIzlpoLmnpzml7bnu5nlvZPliY3nlKjmiLflj5HvvIzliJnpnIDopoHluKbkuIrpibTmnYPkv6Hmga9cbiAgICBpZiAocGFyYW1zLnRhcmdldCA9PT0gJ0NVUl9VU0VSJykge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoYXNMb2dpbiA9IGF3YWl0IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG4gICAgICBpZiAoaGFzTG9naW4pIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4oQXBpVXJscy5WRVJJRklDQVRJT05fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDYXB0Y2hhOiBvcHRpb25zPy53aXRoQ2FwdGNoYSB8fCBmYWxzZSxcbiAgICAgIHdpdGhDcmVkZW50aWFscyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqICBWZXJpZnkgdGhlIGNvZGVcbiAgICogQHBhcmFtIHtWZXJpZnlSZXF1ZXN0fSBwYXJhbXMgQSBWZXJpZnlSZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxWZXJpZnlSZXNwb25zZT59IEEgUHJvbWlzZTxWZXJpZnlSZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZlcmlmeShwYXJhbXM6IFZlcmlmeVJlcXVlc3QpOiBQcm9taXNlPFZlcmlmeVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnVkVSSUZZX1VSTCcpXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8VmVyaWZ5UmVzcG9uc2U+KHJlcy51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVzLnBhcmFtcyxcbiAgICB9KVxuXG4gICAgaWYgKHBhcmFtcz8udmVyc2lvbiA9PT0gJ3YyJykge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoe1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICB2ZXJzaW9uOiAndjInLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbiBwcm92aWRlciByZWRpcmVjdCB1cmkuXG4gICAqIEBwYXJhbSB7R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3R9IHBhcmFtcyBBIEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+fSBBIFByb21pc2U8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXM6IEdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0KTogUHJvbWlzZTxHZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHByb3ZpZGVyX3JlZGlyZWN0X3VyaTogcmVkaXJlY3RfdXJpLCBvdGhlcl9wYXJhbXM6IG90aGVyUGFyYW1zID0ge30sIC4uLnJlc3RQYXJhbXMgfSA9IHBhcmFtc1xuICAgIGlmIChyZWRpcmVjdF91cmkgJiYgIXJlc3RQYXJhbXMucmVkaXJlY3RfdXJpKSB7XG4gICAgICByZXN0UGFyYW1zLnJlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaVxuICAgIH1cblxuICAgIGxldCB1cmwgPSBgJHtBcGlVcmxzLlBST1ZJREVSX1VSSV9VUkx9PyR7QXV0aC5wYXJzZVBhcmFtc1RvU2VhcmNoKHJlc3RQYXJhbXMpfWBcbiAgICBPYmplY3Qua2V5cyhvdGhlclBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG90aGVyUGFyYW1zW2tleV1cbiAgICAgIGlmIChrZXkgPT09ICdzaWduX291dF91cmknICYmICEodmFsdWU/Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXJsICs9IGAmb3RoZXJfcGFyYW1zWyR7a2V5fV09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwcm92aWRlciB0b2tlbi5cbiAgICogQHBhcmFtIHtHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBHcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdyYW50UHJvdmlkZXJUb2tlbihcbiAgICBwYXJhbXM6IEdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsXG4gICAgdXNlV3hDbG91ZCA9IGZhbHNlLFxuICApOiBQcm9taXNlPEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8R3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHVzZVd4Q2xvdWQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwcm92aWRlciB0b2tlbi5cbiAgICogQHBhcmFtIHtQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBQYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT59IEEgUHJvbWlzZTxQYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IFBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QpOiBQcm9taXNlPFBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfVE9LRU5fVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW4gd2l0aCBwcm92aWRlciByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge1NpZ25JbldpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIFNpZ25JbldpdGhQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn0gQSBQcm9taXNlPENyZWRlbnRpYWxzPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtczogU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCwgdXNlV3hDbG91ZCA9IGZhbHNlKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ0FVVEhfU0lHTl9JTl9XSVRIX1BST1ZJREVSX1VSTCcpXG5cbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHJlcy5wYXJhbXMsXG4gICAgICB1c2VXeENsb3VkLFxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5zZXRDcmVkZW50aWFscyh7XG4gICAgICAuLi5jcmVkZW50aWFscyxcbiAgICAgIHZlcnNpb246IHBhcmFtcz8udmVyc2lvbiB8fCAndjEnLFxuICAgIH0pXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduaW4gd2l0aCBjdXN0b20uXG4gICAqIEBwYXJhbSB7U2lnbkluQ3VzdG9tUmVxdWVzdH0gcGFyYW1zIEEgU2lnbkluQ3VzdG9tUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5DdXN0b20ocGFyYW1zOiBTaWduSW5DdXN0b21SZXF1ZXN0KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuQVVUSF9TSUdOX0lOX0NVU1RPTSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcblxuICAgIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogc2lnbiBpbiB3aXRoIHdlY2hhdCBpZGVuZGlmeVxuICAgKiDpnIDopoHnu5PlkIggaHR0cCBvdmVyY2FsbEZ1bmN0aW9uIOS9v+eUqFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhXZWNoYXQocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihBcGlVcmxzLkFVVEhfU0lHTl9JTl9XSVRIX1dFQ0hBVF9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuY3JlZGVudGlhbHNDbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHdpdGggcHJvdmlkZXJcbiAgICogQHBhcmFtIHtCaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zIEEgQmluZFdpdGhQcm92aWRlclJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIFByb21pc2U8YW55PiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYmluZFdpdGhQcm92aWRlcihwYXJhbXM6IEJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8YW55PihBcGlVcmxzLlBST1ZJREVSX0JJTkRfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXNlclByb2ZpbGUocGFyYW1zOiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8VXNlclByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbyhwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIGluZm8uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VXNlckluZm8+fSBBIFByb21pc2U8VXNlclByb2ZpbGU+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VySW5mbyhwYXJhbXM6IHsgdmVyc2lvbj86IHN0cmluZzsgcXVlcnk/OiBzdHJpbmcgfSA9IHt9KTogUHJvbWlzZTxVc2VySW5mbz4ge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0UGFyYW1zQnlWZXJzaW9uKHBhcmFtcywgJ1VTRVJfTUVfVVJMJylcblxuICAgIGlmIChyZXMucGFyYW1zPy5xdWVyeSkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKHJlcy5wYXJhbXMucXVlcnkgYXMgYW55KVxuICAgICAgcmVzLnVybCArPSBgPyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9YFxuICAgIH1cblxuICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxVc2VySW5mbz4ocmVzLnVybCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuXG4gICAgaWYgKHVzZXJJbmZvLnN1Yikge1xuICAgICAgdXNlckluZm8udWlkID0gdXNlckluZm8uc3ViXG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXJJbmZvXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIGluZm8gYnkgd2VkYSBwbHVnaW4uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gQSBQcm9taXNlPGFueT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFdlZGFVc2VySW5mbygpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KEFwaVVybHMuV0VEQV9VU0VSX1VSTCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICAgIHJldHVybiB1c2VySW5mb1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBtZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBXaXRoU3Vkb1JlcXVlc3QpOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnVVNFUl9NRV9VUkwnKVxuICAgIGNvbnN0IHVybCA9IGAke3Jlcy51cmx9PyR7QXV0aC5wYXJzZVBhcmFtc1RvU2VhcmNoKHJlcy5wYXJhbXMpfWBcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxVc2VyUHJvZmlsZT4odXJsLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogaGFzTG9naW5TdGF0ZSBjaGVjayBpZiBoYXMgbG9naW4gc3RhdGVcbiAgICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gQSBQcm9taXNlPGJvb2xlYW4+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBoYXNMb2dpblN0YXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRBY2Nlc3NUb2tlbigpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFzTG9naW5TdGF0ZVN5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzU3luYygpXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TG9naW5TdGF0ZSgpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFsc0FzeW5jKClcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFucyBieSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXMgQSBUcmFuc0J5UHJvdmlkZXJSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59IEEgUHJvbWlzZTxDcmVkZW50aWFscz4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRyYW5zQnlQcm92aWRlcihwYXJhbXM6IFRyYW5zQnlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q3JlZGVudGlhbHM+KEFwaVVybHMuVVNFUl9UUkFOU19CWV9QUk9WSURFUl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRva2VuLlxuICAgKiBAcGFyYW0ge0dyYW50VG9rZW5SZXF1ZXN0fSBwYXJhbXMgQSBHcmFudFRva2VuUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fSBBIFByb21pc2U8Q3JlZGVudGlhbHM+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBncmFudFRva2VuKHBhcmFtczogR3JhbnRUb2tlblJlcXVlc3QpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQYXJhbXNCeVZlcnNpb24ocGFyYW1zLCAnQVVUSF9UT0tFTl9VUkwnKVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PENyZWRlbnRpYWxzPihyZXMudXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHJlcy5wYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByb3ZpZGUgbGlzdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxQcm92aWRlcnNSZXNwb25zZT59IEEgUHJvbWlzZTxQcm92aWRlcnNSZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVycygpOiBQcm9taXNlPFByb3ZpZGVyc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UHJvdmlkZXJzUmVzcG9uc2U+KEFwaVVybHMuUFJPVklERVJfTElTVCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHVuYmluZCBwcm92aWRlci5cbiAgICogQHBhcmFtIHtVbmJpbmRQcm92aWRlclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdW5iaW5kUHJvdmlkZXIocGFyYW1zOiBVbmJpbmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuUFJPVklERVJfVU5CSU5EX1VSTH0vJHtwYXJhbXMucHJvdmlkZXJfaWR9YCwge1xuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIFBhc3N3b3JkLlxuICAgKiBAcGFyYW0ge0NoZWNrUGFzc3dvcmRSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrUGFzc3dvcmQocGFyYW1zOiBDaGVja1Bhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PGFueT4oYCR7QXBpVXJscy5DSEVDS19QV0RfVVJMfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRWRpdCBDb250YWN0IOS/ruaUuSDmiYvmnLrlj7cg5oiWIOmCrueusVxuICAgKiBAcGFyYW0ge0VkaXRDb250YWN0UmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZWRpdENvbnRhY3QocGFyYW1zOiBFZGl0Q29udGFjdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDx2b2lkPihgJHtBcGlVcmxzLkJJTkRfQ09OVEFDVF9VUkx9YCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2V0IFBhc3N3b3JkLlxuICAgKiBAcGFyYW0ge1NldFBhc3N3b3JkclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UGFzc3dvcmQocGFyYW1zOiBTZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxhbnk+KGAke0FwaVVybHMuQVVUSF9TRVRfUEFTU1dPUkR9YCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlUGFzc3dvcmRCeU9sZCDkvb/nlKjml6flr4bnoIHkv67mlLnlr4bnoIHvvIzlpoLmnpzlt7Lnu4/nu5HlrprmiYvmnLrlj7fvvIzor7flhYjvvJpzdWRv77yM5YaN5L+u5pS55a+G56CBXG4gICAqIEBwYXJhbSB7U2V0UGFzc3dvcmRyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQYXNzd29yZEJ5T2xkKHBhcmFtczogVXBkYXRlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3Vkb1Rva2VuID0gYXdhaXQgdGhpcy5zdWRvKHsgcGFzc3dvcmQ6IHBhcmFtcy5vbGRfcGFzc3dvcmQgfSlcbiAgICByZXR1cm4gdGhpcy5zZXRQYXNzd29yZCh7XG4gICAgICBzdWRvX3Rva2VuOiBzdWRvVG9rZW4uc3Vkb190b2tlbixcbiAgICAgIG5ld19wYXNzd29yZDogcGFyYW1zLm5ld19wYXNzd29yZCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIHN1ZG9cbiAgICogQHBhcmFtIHtzdWRvfSBwYXJhbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN1ZG8ocGFyYW1zOiBTdWRvUmVxdWVzdCk6IFByb21pc2U8U3Vkb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8U3Vkb1Jlc3BvbnNlPihgJHtBcGlVcmxzLlNVRE9fVVJMfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHVzZXIgdmVyaWZpY2F0aW9uLlxuICAgKiBAcGFyYW0ge0dldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtcyBBIEdldFZlcmlmaWNhdGlvblJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn0gQSBQcm9taXNlPEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFZlcmlmaWNhdGlvbkNvZGVUb0N1cnJlbnRVc2VyKHBhcmFtczogR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8R2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICBwYXJhbXMudGFyZ2V0ID0gJ0NVUl9VU0VSJ1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEdldFZlcmlmaWNhdGlvblJlc3BvbnNlPihBcGlVcmxzLlZFUklGSUNBVElPTl9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgd2l0aENhcHRjaGE6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGFuZ2UgQm91bmQgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7Q2hhbmdlQm91bmRQcm92aWRlclJlcXVlc3R9IHBhcmFtcyBBIEdldFZlcmlmaWNhdGlvblJlcXVlc3QgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENoYW5nZUJvdW5kUHJvdmlkZXJSZXNwb25zZT59IEEgUHJvbWlzZTxHZXRWZXJpZmljYXRpb25SZXNwb25zZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoYW5nZUJvdW5kUHJvdmlkZXIocGFyYW1zOiBDaGFuZ2VCb3VuZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8Q2hhbmdlQm91bmRQcm92aWRlclJlc3BvbnNlPihgJHtBcGlVcmxzLlBST1ZJREVSX0xJU1R9LyR7cGFyYW1zLnByb3ZpZGVyX2lkfS90cmFuc2AsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICBwcm92aWRlcl90cmFuc190b2tlbjogcGFyYW1zLnRyYW5zX3Rva2VuLFxuICAgICAgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFBhdGNoIHRoZSB1c2VyIHByb2ZpbGUuXG4gICAqIEBwYXJhbSB7VXNlclByb2ZpbGV9IHBhcmFtcyBBIFVzZXJQcm9maWxlIE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxVc2VyUHJvZmlsZT59IEEgUHJvbWlzZTxVc2VyUHJvZmlsZT4gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFVzZXJQcm9maWxlKHBhcmFtczogVXNlclByb2ZpbGUpOiBQcm9taXNlPFVzZXJQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8VXNlclByb2ZpbGU+KEFwaVVybHMuVVNFUl9QUklGSUxFX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHVzZXIgYmFzaWMgaW5mb1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBNb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuVVNFUl9CQVNJQ19FRElUX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRjaCB0aGUgdXNlciBwcm9maWxlLlxuICAgKiBAcGFyYW0ge1F1ZXJ5VXNlclByb2ZpbGVSZXF9IGFwcGVuZGVkX3BhcmFtcyBBIFF1ZXJ5VXNlclByb2ZpbGVSZXEgT2JqZWN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXJQcm9maWxlPn0gQSBQcm9taXNlPFVzZXJQcm9maWxlPiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyUHJvZmlsZShwYXJhbXM6IFF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxRdWVyeVVzZXJQcm9maWxlUmVzcG9uc2U+IHtcbiAgICAvLyBsZXQgdXJsID0gbmV3IFVSTChBcGlVcmxzLlVTRVJfUVVFUllfVVJMKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgTXlVUkxTZWFyY2hQYXJhbXMocGFyYW1zIGFzIGFueSlcbiAgICAvLyB1cmwuc2VhcmNoID0gc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlPihgJHtBcGlVcmxzLlVTRVJfUVVFUllfVVJMfT8ke3NlYXJjaFBhcmFtcy50b1N0cmluZygpfWAsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRDdXN0b21TaWduRnVuYyBzZXQgdGhlIGdldCB0aWNrZXQgZnVuY3Rpb25cbiAgICogQHBhcmFtIGdldFRpY2tGblxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogR2V0Q3VzdG9tU2lnblRpY2tldEZuKSB7XG4gICAgdGhpcy5nZXRDdXN0b21TaWduVGlja2V0Rm4gPSBnZXRUaWNrRm5cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduSW5XaXRoQ3VzdG9tVGlja2V0IGN1c3RvbSBzaWduSW5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldChwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgLy8gICBjb25zdCBjdXN0b21TaWduVGlja2V0Rm4gPSB0aGlzLmdldEN1c3RvbVNpZ25UaWNrZXRGblxuICAvLyAgIGlmICghY3VzdG9tU2lnblRpY2tldEZuKSB7XG4gIC8vICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAvLyAgICAgfSlcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgY3VzdG9tVGlja2V0ID0gYXdhaXQgY3VzdG9tU2lnblRpY2tldEZuKClcbiAgLy8gICByZXR1cm4gdGhpcy5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAvLyAgICAgLi4ucGFyYW1zLFxuICAvLyAgICAgcHJvdmlkZXJfaWQ6ICdjdXN0b20nLFxuICAvLyAgICAgcHJvdmlkZXJfdG9rZW46IGN1c3RvbVRpY2tldCxcbiAgLy8gICB9KVxuICAvLyB9XG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBjb25zdCBjdXN0b21TaWduVGlja2V0Rm4gPSB0aGlzLmdldEN1c3RvbVNpZ25UaWNrZXRGblxuICAgIGlmICghY3VzdG9tU2lnblRpY2tldEZuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICBlcnJvcjogJ2ZhaWxlZF9wcmVjb25kaXRpb24nLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ3BsZWFzZSB1c2Ugc2V0Q3VzdG9tU2lnbkZ1bmMgdG8gc2V0IGN1c3RvbSBzaWduIGZ1bmN0aW9uJyxcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IGN1c3RvbVRpY2tldCA9IGF3YWl0IGN1c3RvbVNpZ25UaWNrZXRGbigpXG4gICAgcmV0dXJuIHRoaXMuc2lnbkluQ3VzdG9tKHtcbiAgICAgIHByb3ZpZGVyX2lkOiAnY3VzdG9tJyxcbiAgICAgIHRpY2tldDogY3VzdG9tVGlja2V0LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgcGFzc3dvcmRcbiAgICogQHBhcmFtIHtSZXNldFBhc3N3b3JkUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlc2V0UGFzc3dvcmQocGFyYW1zOiBSZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9SRVNFVF9QQVNTV09SRCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAvLyB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhvcml6ZSBvYXV0aCBBdXRob3JpemVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRob3JpemUocGFyYW1zOiBBdXRob3JpemVSZXF1ZXN0KTogUHJvbWlzZTxBdXRob3JpemVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PEF1dGhvcml6ZVJlc3BvbnNlPihBcGlVcmxzLkFVVEhPUklaRV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogYXV0aG9yaXplIGRldmljZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aG9yaXplRGV2aWNlKHBhcmFtczogQXV0aG9yaXplRGV2aWNlUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PHZvaWQ+KEFwaVVybHMuQVVUSE9SSVpFX0RFVklDRV9VUkwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogZGV2aWNlIGF1dGhvcml6YXRpb25cbiAgICogQHBhcmFtIHtEZXZpY2VBdXRob3JpemVSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRldmljZUF1dGhvcml6ZShwYXJhbXM6IERldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPERldmljZUF1dGhvcml6ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5BVVRIX0dFVF9ERVZJQ0VfQ09ERSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXJhbXMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPQXV0aCBnZXQgYXV0aG9yaXplIGluZm9cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRob3JpemVJbmZvKHBhcmFtczogQXV0aG9yaXplSW5mb1JlcXVlc3QpOiBQcm9taXNlPEF1dGhvcml6ZUluZm9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHVybCA9IGAke0FwaVVybHMuQVVUSE9SSVpFX0lORk9fVVJMfT8ke0F1dGgucGFyc2VQYXJhbXNUb1NlYXJjaChwYXJhbXMpfWBcbiAgICBsZXQgd2l0aEJhc2ljQXV0aCA9IHRydWVcbiAgICBsZXQgd2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICBjb25zdCBoYXNMb2dpbiA9IGF3YWl0IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG4gICAgaWYgKGhhc0xvZ2luKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB3aXRoQmFzaWNBdXRoID0gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8QXV0aG9yaXplSW5mb1Jlc3BvbnNlPih1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQmFzaWNBdXRoLFxuICAgICAgd2l0aENyZWRlbnRpYWxzLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hlY2tVc2VybmFtZShwYXJhbXM6IENoZWNrVXNlcm5hbWVSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3QoQXBpVXJscy5DSEVDS19VU0VSTkFNRSwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrSWZVc2VyRXhpc3QocGFyYW1zOiBDaGVja0lmVXNlckV4aXN0UmVxdWVzdCk6IFByb21pc2U8Q2hlY2tJZlVzZXJFeGlzdFJlc3BvbnNlPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKHBhcmFtcyBhcyBhbnkpXG5cbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxDaGVja0lmVXNlckV4aXN0UmVzcG9uc2U+KGAke0FwaVVybHMuQ0hFQ0tfSUZfVVNFUl9FWElTVH0/JHtzZWFyY2hQYXJhbXMudG9TdHJpbmcoKX1gLCB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5TY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRTY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRHcm91cHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmNvbmZpZy5jcmVkZW50aWFsc0NsaWVudC5nZXRDcmVkZW50aWFscygpXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LnJlZnJlc2hUb2tlbih7XG4gICAgICAuLi5jcmVkZW50aWFscyxcbiAgICAgIHZlcnNpb246IHBhcmFtcz8udmVyc2lvbiB8fCAndjEnLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzQ2xpZW50LmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgcHVibGljIGtleSBmb3IgcmVxdWVzdCBwYXJhbXMgZW5jcnlwdGlvblxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFB1YmxpY0tleSgpOiBQcm9taXNlPFB1YmxpY0tleT4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0PFB1YmxpY0tleT4oQXBpVXJsc1YyLkFVVEhfUFVCTElDX0tFWSwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7fSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGVuY3J5cHQgcmVxdWVzdCBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEVuY3J5cHRQYXJhbXMocGFyYW1zOiBSZWNvcmQ8YW55LCBhbnk+KTogUHJvbWlzZTxFbmNyeXB0UGFyYW1zPiB7XG4gICAgY29uc3QgeyBpc0VuY3J5cHQgfSA9IHBhcmFtc1xuICAgIGRlbGV0ZSBwYXJhbXMuaXNFbmNyeXB0XG5cbiAgICBjb25zdCBwYXlsb2FkID0gZGVlcENsb25lKHBhcmFtcylcblxuICAgIGNvbnN0IGVuY3J5cHRVdGlscyA9IGdldEVuY3J5cHRVdGlscyhpc0VuY3J5cHQsIHRoaXMuY29uZmlnLmFkYXB0ZXIpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgcmV0dXJuIHBhcmFtc1xuICAgIH1cblxuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIGxldCBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSAnJ1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljS2V5KClcbiAgICAgIHB1YmxpY0tleSA9IHJlcy5wdWJsaWNfa2V5XG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSByZXMucHVibGljX2tleV90aHVtYnByaW50XG5cbiAgICAgIGlmICghcHVibGljS2V5IHx8ICFwdWJsaWNfa2V5X3RodW1icHJpbnQpIHtcbiAgICAgICAgdGhyb3cgcmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXJhbXM6IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZCB9KSxcbiAgICAgIHB1YmxpY19rZXlfdGh1bWJwcmludCxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHByb3ZpZGVyIHN1YiB0eXBlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJTdWJUeXBlKCk6IFByb21pc2U8UHJvdmlkZXJTdWJUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8UHJvdmlkZXJTdWJUeXBlPihBcGlVcmxzLkdFVF9QUk9WSURFUl9UWVBFLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgcHJvdmlkZXJfaWQ6ICd3ZWRhJyxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgcHJvdmlkZXIgc3ViIHR5cGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlDYXB0Y2hhRGF0YSh7IHRva2VuLCBrZXkgfTogeyB0b2tlbjogc3RyaW5nOyBrZXk6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8eyBjYXB0Y2hhX3Rva2VuOiBzdHJpbmc7IGV4cGlyZXNfaW46IG51bWJlciB9PihBcGlVcmxzLlZFUklGWV9DQVBUQ0hBX0RBVEFfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHsgdG9rZW4sIGtleSB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNhcHRjaGFEYXRhKHsgc3RhdGUsIHJlZGlyZWN0X3VyaSA9IHVuZGVmaW5lZCB9KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlcXVlc3Q8eyB0b2tlbjogc3RyaW5nOyBkYXRhOiBzdHJpbmcgfT4oQXBpVXJscy5DQVBUQ0hBX0RBVEFfVVJMLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHsgc3RhdGUsIHJlZGlyZWN0X3VyaSB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIG1pbmktcHJvZ3JhbSBzY2FuIGNvZGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbUNvZGUocGFyYW1zOiBHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlcXVlc3QpOiBQcm9taXNlPEdldE1pbmlQcm9ncmFtUXJDb2RlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPihBcGlVcmxzLkdFVF9NSU5JUFJPR1JBTV9RUkNPREUsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcGFyYW1zLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogbWluaS1wcm9ncmFtIHNjYW4gY29kZSBzdGF0dXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1cyhwYXJhbXM6IEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCwpOiBQcm9taXNlPEdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxHZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1Jlc3BvbnNlPihBcGlVcmxzLkdFVF9NSU5JUFJPR1JBTV9RUkNPREVfU1RBVFVTLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCB1c2VyIGJlaGF2aW9yIGxvZ1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtczogR2V0VXNlckJlaGF2aW9yTG9nKTogUHJvbWlzZTxHZXRVc2VyQmVoYXZpb3JMb2dSZXM+IHtcbiAgICBjb25zdCBhY3Rpb24gPSB7IExPR0lOOiAncXVlcnlbYWN0aW9uXT1VU0VSX0xPR0lOJywgTU9ESUZZOiAnbmVfcXVlcnlbYWN0aW9uXT1VU0VSX0xPR0lOJyB9XG4gICAgY29uc3QgdXJsID0gYCR7QXBpVXJscy5HRVRfVVNFUl9CRUhBVklPUl9MT0d9PyR7YWN0aW9uW3BhcmFtcy50eXBlXX0mbGltaXQ9JHtwYXJhbXMubGltaXR9JHtcbiAgICAgIHBhcmFtcy5wYWdlX3Rva2VuID8gYCZwYWdlX3Rva2VuPSR7cGFyYW1zLnBhZ2VfdG9rZW59YCA6ICcnXG4gICAgfWBcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDov5nkuKrmlrnms5XmmK/nlKjmiLfoh6rlt7Hkv67mlLnoh6rlt7HnmoTlr4bnoIHvvIzkuI3lkIzkuo4vYXV0aC92MS91c2VyL3Bhc3N3b3Jk5o6l5Y+j77yM6K+l5o6l5Y+j5piv566h55CG5ZGY5L+u5pS55Liq5Lq655qEXG4gICAqIEBwYXJhbSB7TW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3R9IHBhcmFtcyBBIE1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBQcm9taXNlPHZvaWQ+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZChwYXJhbXM6IE1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHB1YmxpY0tleSA9ICcnXG4gICAgbGV0IHB1YmxpY19rZXlfdGh1bWJwcmludCA9ICcnXG5cbiAgICBjb25zdCBlbmNyeXB0VXRpbHMgPSBnZXRFbmNyeXB0VXRpbHModHJ1ZSwgdGhpcy5jb25maWcuYWRhcHRlcilcblxuICAgIGlmICghZW5jcnlwdFV0aWxzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvIG5vdCBzdXBwb3J0IGVuY3J5cHQsIGEgZW5jcnlwdCB1dGlsIHJlcXVpcmVkLicpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UHVibGljS2V5KClcbiAgICAgIHB1YmxpY0tleSA9IHJlcy5wdWJsaWNfa2V5XG4gICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSByZXMucHVibGljX2tleV90aHVtYnByaW50XG5cbiAgICAgIGlmICghcHVibGljS2V5IHx8ICFwdWJsaWNfa2V5X3RodW1icHJpbnQpIHtcbiAgICAgICAgdGhyb3cgcmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgY29uc3QgZW5jcnlwdF9wYXNzd29yZCA9IHBhcmFtcy5wYXNzd29yZCA/IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLnBhc3N3b3JkIH0pIDogJydcbiAgICBjb25zdCBlbmNyeXB0X25ld19wYXNzd29yZCA9IGVuY3J5cHRVdGlscy5nZXRFbmNyeXB0SW5mbyh7IHB1YmxpY0tleSwgcGF5bG9hZDogcGFyYW1zLm5ld19wYXNzd29yZCB9KVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5yZXF1ZXN0KEFwaVVybHMuVVNFUl9CQVNJQ19FRElUX1VSTCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHVzZXJfaWQ6IHBhcmFtcy51c2VyX2lkLFxuICAgICAgICBlbmNyeXB0X3Bhc3N3b3JkLFxuICAgICAgICBlbmNyeXB0X25ld19wYXNzd29yZCxcbiAgICAgICAgcHVibGljX2tleV90aHVtYnByaW50LFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOmHjee9ruWvhuegge+8jOivpeaOpeWPo+aXoOmcgOeZu+W9leWwseWPr+S7pemHjee9ruWvhueggVxuICAgKiBAcGFyYW0ge01vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdH0gcGFyYW1zIEEgTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0IE9iamVjdC5cbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBQcm9taXNlPHZvaWQ+IG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXM6IE1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBwdWJsaWNLZXkgPSAnJ1xuICAgIGxldCBwdWJsaWNfa2V5X3RodW1icHJpbnQgPSAnJ1xuXG4gICAgY29uc3QgZW5jcnlwdFV0aWxzID0gZ2V0RW5jcnlwdFV0aWxzKHRydWUsIHRoaXMuY29uZmlnLmFkYXB0ZXIpXG5cbiAgICBpZiAoIWVuY3J5cHRVdGlscykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkbyBub3Qgc3VwcG9ydCBlbmNyeXB0LCBhIGVuY3J5cHQgdXRpbCByZXF1aXJlZC4nKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFB1YmxpY0tleSgpXG4gICAgICBwdWJsaWNLZXkgPSByZXMucHVibGljX2tleVxuICAgICAgcHVibGljX2tleV90aHVtYnByaW50ID0gcmVzLnB1YmxpY19rZXlfdGh1bWJwcmludFxuXG4gICAgICBpZiAoIXB1YmxpY0tleSB8fCAhcHVibGljX2tleV90aHVtYnByaW50KSB7XG4gICAgICAgIHRocm93IHJlc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRfcGFzc3dvcmQgPSBwYXJhbXMucGFzc3dvcmQgPyBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5wYXNzd29yZCB9KSA6ICcnXG4gICAgY29uc3QgZW5jcnlwdF9uZXdfcGFzc3dvcmQgPSBlbmNyeXB0VXRpbHMuZ2V0RW5jcnlwdEluZm8oeyBwdWJsaWNLZXksIHBheWxvYWQ6IHBhcmFtcy5uZXdfcGFzc3dvcmQgfSlcbiAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdChBcGlVcmxzVjIuQVVUSF9SRVNFVF9QQVNTV09SRCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIHVzZXJuYW1lOiBwYXJhbXMudXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBlbmNyeXB0X3Bhc3N3b3JkLFxuICAgICAgICBuZXdfcGFzc3dvcmQ6IGVuY3J5cHRfbmV3X3Bhc3N3b3JkLFxuICAgICAgICBwdWJsaWNfa2V5X3RodW1icHJpbnQsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -1,10 +1,14 @@
1
1
  import { SimpleStorage, RequestFunction } from '../oauth2client/interface';
2
2
  import { AuthClientRequestOptions } from '../oauth2client/models';
3
+ import { SDKAdapterInterface } from '@cloudbase/adapter-interface';
3
4
  export interface CaptchaOptions {
4
5
  clientId: string;
5
6
  request: RequestFunction;
6
7
  storage: SimpleStorage;
7
8
  openURIWithCallback?: OpenURIWithCallbackFuction;
9
+ adapter?: SDKAdapterInterface & {
10
+ isMatch?: () => boolean;
11
+ };
8
12
  }
9
13
  type OpenURIWithCallbackFuction = (url: string) => Promise<CaptchaToken>;
10
14
  export interface CaptchaToken {
@@ -24,6 +28,7 @@ export declare class Captcha {
24
28
  private config;
25
29
  private tokenSectionName;
26
30
  constructor(opts: CaptchaOptions);
31
+ isMatch(): boolean;
27
32
  request<T>(url: string, options?: CaptchaRequestOptions): Promise<T>;
28
33
  private getDefaultOpenURIWithCallback;
29
34
  private defaultOpenURIWithCallback;
@@ -55,6 +55,10 @@ var Captcha = (function () {
55
55
  this.config = opts;
56
56
  this.tokenSectionName = "captcha_".concat(opts.clientId);
57
57
  }
58
+ Captcha.prototype.isMatch = function () {
59
+ var _a, _b;
60
+ return ((_b = (_a = this.config.adapter) === null || _a === void 0 ? void 0 : _a.isMatch) === null || _b === void 0 ? void 0 : _b.call(_a)) || (0, mp_1.isMp)();
61
+ };
58
62
  Captcha.prototype.request = function (url, options) {
59
63
  return __awaiter(this, void 0, void 0, function () {
60
64
  var state, reqURL, resp, err_1;
@@ -94,7 +98,7 @@ var Captcha = (function () {
94
98
  });
95
99
  };
96
100
  Captcha.prototype.getDefaultOpenURIWithCallback = function () {
97
- if (!(0, mp_1.isMp)() && !(0, mp_1.isInMpWebView)()) {
101
+ if (!this.isMatch() && !(0, mp_1.isInMpWebView)()) {
98
102
  if (window.location.search.indexOf('__captcha') > 0) {
99
103
  document.body.style.display = 'none';
100
104
  }
@@ -174,7 +178,7 @@ var Captcha = (function () {
174
178
  }
175
179
  _a.label = 2;
176
180
  case 2:
177
- if (!(!(0, mp_1.isMp)() && !(0, mp_1.isInMpWebView)())) return [3, 4];
181
+ if (!(!this.isMatch() && !(0, mp_1.isInMpWebView)())) return [3, 4];
178
182
  redirect_uri = "".concat(window.location.origin + window.location.pathname, "?__captcha=on");
179
183
  return [4, this.config.request(consts_1.ApiUrls.GET_CAPTCHA_URL, {
180
184
  method: 'POST',
@@ -289,4 +293,4 @@ var Captcha = (function () {
289
293
  return Captcha;
290
294
  }());
291
295
  exports.Captcha = Captcha;
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXB0Y2hhL2NhcHRjaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQW1EO0FBR25ELDZEQUE2RDtBQUM3RCxrQ0FBaUQ7QUFDakQsNkVBQXdEO0FBNEJ4RDtJQVFFLGlCQUFZLElBQW9CO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFBO1NBQ2hFO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyw2QkFBYyxDQUFBO1NBQzlCO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGtCQUFXLElBQUksQ0FBQyxRQUFRLENBQUUsQ0FBQTtJQUNwRCxDQUFDO0lBT1kseUJBQU8sR0FBcEIsVUFBd0IsR0FBVyxFQUFFLE9BQStCOzs7Ozs7d0JBQ2xFLElBQUksQ0FBQyxPQUFPLEVBQUU7NEJBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQTt5QkFDYjt3QkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTs0QkFDbkIsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7eUJBQ3ZCO3dCQUNLLEtBQUssR0FBRyxVQUFHLE9BQU8sQ0FBQyxNQUFNLGNBQUksR0FBRyxDQUFFLENBQUE7d0JBQ3BDLE1BQU0sR0FBRyxHQUFHLENBQUE7NkJBQ1osT0FBTyxDQUFDLFdBQVcsRUFBbkIsY0FBbUI7d0JBQ1osV0FBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBQTs7d0JBQTlELE1BQU0sR0FB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TlksMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlVcmxzLCBFcnJvclR5cGUgfSBmcm9tICcuLi9hdXRoL2NvbnN0cydcbmltcG9ydCB7IFNpbXBsZVN0b3JhZ2UsIFJlcXVlc3RGdW5jdGlvbiB9IGZyb20gJy4uL29hdXRoMmNsaWVudC9pbnRlcmZhY2UnXG5pbXBvcnQgeyBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvbW9kZWxzJ1xuaW1wb3J0IHsgZGVmYXVsdFN0b3JhZ2UgfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvb2F1dGgyY2xpZW50J1xuaW1wb3J0IHsgaXNJbk1wV2ViVmlldywgaXNNcCB9IGZyb20gJy4uL3V0aWxzL21wJ1xuaW1wb3J0IE15VVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL3V0aWxzL3VybFNlYXJjaFBhcmFtcydcblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhT3B0aW9ucyB7XG4gIGNsaWVudElkOiBzdHJpbmdcbiAgcmVxdWVzdDogUmVxdWVzdEZ1bmN0aW9uXG4gIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcbiAgLy8g5omT5byA572R6aG15bm26YCa6L+HVVJM5Zue6LCD6I635Y+WIENhcHRjaGFUb2tlbu+8jOmSiOWvueS4jemAmueahOW5s+WPsO+8jOivpeWHveaVsOWPr+S7peiHquWumuS5ieWunueOsCwg6buY6K6k6ZuG5oiQ5rWP6KeI5Zmo56uv6K6k6K+BXG4gIG9wZW5VUklXaXRoQ2FsbGJhY2s/OiBPcGVuVVJJV2l0aENhbGxiYWNrRnVjdGlvblxufVxuXG50eXBlIE9wZW5VUklXaXRoQ2FsbGJhY2tGdWN0aW9uID0gKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPENhcHRjaGFUb2tlbj5cblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhVG9rZW4ge1xuICBjYXB0Y2hhX3Rva2VuOiBzdHJpbmdcbiAgZXhwaXJlc19pbjogbnVtYmVyXG4gIGV4cGlyZXNfYXQ/OiBEYXRlIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyB7XG4gIHdpdGhDYXB0Y2hhPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldENhcHRjaGFSZXNwb25zZSB7XG4gIGNhcHRjaGFfdG9rZW4/OiBzdHJpbmdcbiAgZXhwaXJlc19pbj86IG51bWJlclxuICB1cmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIENhcHRjaGEge1xuICBwcml2YXRlIGNvbmZpZzogQ2FwdGNoYU9wdGlvbnNcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtDYXB0Y2hhT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQ2FwdGNoYU9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdHMub3BlblVSSVdpdGhDYWxsYmFjaykge1xuICAgICAgb3B0cy5vcGVuVVJJV2l0aENhbGxiYWNrID0gdGhpcy5nZXREZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjaygpXG4gICAgfVxuICAgIGlmICghb3B0cy5zdG9yYWdlKSB7XG4gICAgICBvcHRzLnN0b3JhZ2UgPSBkZWZhdWx0U3RvcmFnZVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gb3B0c1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IGBjYXB0Y2hhXyR7b3B0cy5jbGllbnRJZH1gXG4gIH1cblxuICAvKipcbiAgICogcmVxdWVzdCBodHRwIGxpa2Ugc2ltcGxlIGZldGNoIGFwaSwgZXhwOnJlcXVlc3QoJy92MS91c2VyL21lJywge3dpdGhDcmVkZW50aWFsczp0cnVlfSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0F1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBDYXB0Y2hhUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBvcHRpb25zLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0gYCR7b3B0aW9ucy5tZXRob2R9OiR7dXJsfWBcbiAgICBsZXQgcmVxVVJMID0gdXJsXG4gICAgaWYgKG9wdGlvbnMud2l0aENhcHRjaGEpIHtcbiAgICAgIHJlcVVSTCA9IGF3YWl0IHRoaXMuYXBwZW5kQ2FwdGNoYVRva2VuVG9VUkwodXJsLCBzdGF0ZSwgZmFsc2UpXG4gICAgfVxuXG4gICAgbGV0IHJlc3A6IFRcbiAgICB0cnkge1xuICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8VD4ocmVxVVJMLCBvcHRpb25zKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5lcnJvciA9PT0gRXJyb3JUeXBlLkNBUFRDSEFfUkVRVUlSRUQgfHwgZXJyLmVycm9yID09PSBFcnJvclR5cGUuQ0FQVENIQV9JTlZBTElEKSB7XG4gICAgICAgIHVybCA9IGF3YWl0IHRoaXMuYXBwZW5kQ2FwdGNoYVRva2VuVG9VUkwodXJsLCBzdGF0ZSwgZXJyLmVycm9yID09PSBFcnJvclR5cGUuQ0FQVENIQV9JTlZBTElEKVxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcFxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjaygpOiBPcGVuVVJJV2l0aENhbGxiYWNrRnVjdGlvbiB7XG4gICAgaWYgKCFpc01wKCkgJiYgIWlzSW5NcFdlYlZpZXcoKSkge1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZignX19jYXB0Y2hhJykgPiAwKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXB0Y2hhX3BhbmVsX3dyYXAnKSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbGVtZW50RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgICAgZWxlbWVudERpdi5zdHlsZS5jc3NUZXh0ID0gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtwb3NpdGlvbjogZml4ZWQ7bGVmdDogMHB4O3JpZ2h0OiAwcHg7dG9wOiAwcHg7Ym90dG9tOiAwcHg7cGFkZGluZzogOXZ3IDAgMCAwO2Rpc3BsYXk6IG5vbmU7ei1pbmRleDoxMDA7J1xuICAgICAgICBlbGVtZW50RGl2LnNldEF0dHJpYnV0ZSgnaWQnLCAnY2FwdGNoYV9wYW5lbF93cmFwJylcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50RGl2KVxuICAgICAgICB9LCAwKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIOm7mOiupOmAmui/h+a1j+iniOWZqOaJk+W8gOe9kemhteW5tuiOt+WPluWbnuiwg1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjayhcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvcHRzPzogeyB3aWR0aD86IHN0cmluZzsgaGVpZ2h0Pzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8Q2FwdGNoYVRva2VuPiB7XG4gICAgY29uc3QgeyB3aWR0aCA9ICczNTVweCcsIGhlaWdodCA9ICczNTVweCcgfSA9IG9wdHMgfHwge31cblxuICAgIGNvbnN0IG1hdGNoZWQgPSB1cmwubWF0Y2goL14oZGF0YTouKikkLylcbiAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTklNUExFTUVOVEVELFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ25lZWQgdG8gaW1wbCBjYXB0Y2hhIGRhdGEnLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FwdGNoYV9wYW5lbF93cmFwJylcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKVxuICAgIHRhcmdldC5pbm5lckhUTUwgPSAnJ1xuXG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3JjJywgdXJsKVxuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3Jldmlldy1wYW5lbC1pZnJhbWUnKVxuICAgIGlmcmFtZS5zdHlsZS5jc3NUZXh0ID0gYG1pbi13aWR0aDoke3dpZHRofTtkaXNwbGF5OmJsb2NrO2hlaWdodDoke2hlaWdodH07bWFyZ2luOjAgYXV0bztiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Ym9yZGVyOiBub25lO2BcbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoaWZyYW1lKVxuICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxDYXB0Y2hhVG9rZW4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgd2luZG93TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb25cbiAgICAgICAgICBjb25zdCBpZnJhbWVMb2NhdGlvbiA9IGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uXG4gICAgICAgICAgaWYgKGlmcmFtZUxvY2F0aW9uLmhvc3QgKyBpZnJhbWVMb2NhdGlvbi5wYXRobmFtZSA9PT0gd2luZG93TG9jYXRpb24uaG9zdCArIHdpbmRvd0xvY2F0aW9uLnBhdGhuYW1lKSB7XG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICAgICAgY29uc3QgaWZyYW1lVXJsUGFyYW1zID0gbmV3IE15VVJMU2VhcmNoUGFyYW1zKGlmcmFtZUxvY2F0aW9uLnNlYXJjaClcbiAgICAgICAgICAgIGNvbnN0IGNhcHRjaFRva2VuID0gaWZyYW1lVXJsUGFyYW1zLmdldCgnY2FwdGNoYV90b2tlbicpXG4gICAgICAgICAgICBpZiAoY2FwdGNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGNhcHRjaGFfdG9rZW46IGNhcHRjaFRva2VuLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNfaW46IE51bWJlcihpZnJhbWVVcmxQYXJhbXMuZ2V0KCdleHBpcmVzX2luJykpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7XG4gICAgICAgICAgICAgIGVycm9yOiBpZnJhbWVVcmxQYXJhbXMuZ2V0KCdlcnJvcicpLFxuICAgICAgICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogaWZyYW1lVXJsUGFyYW1zLmdldCgnZXJyb3JfZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICAvKipcbiAgICogZ2V0Q2FwdGNoYVRva2VuIOiOt+WPlmNhcHRjaGFUb2tlblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRDYXB0Y2hhVG9rZW4oZm9yY2VOZXdUb2tlbjogYm9vbGVhbiwgc3RhdGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFmb3JjZU5ld1Rva2VuKSB7XG4gICAgICAvLyDlpoLmnpzmnKzlnLDlrZjlnKjvvIzliJnnm7TmjqXov5Tlm55cbiAgICAgIGNvbnN0IGNhcHRjaGFUb2tlbiA9IGF3YWl0IHRoaXMuZmluZENhcHRjaGFUb2tlbigpXG4gICAgICBpZiAoY2FwdGNoYVRva2VuKSB7XG4gICAgICAgIHJldHVybiBjYXB0Y2hhVG9rZW5cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGNhcHRjaGFUb2tlblJlc3A6IHtcbiAgICAgIHVybD86IHN0cmluZ1xuICAgICAgY2FwdGNoYV90b2tlbj86IHN0cmluZ1xuICAgICAgZXhwaXJlc19pbj86IG51bWJlclxuICAgIH1cbiAgICBpZiAoIWlzTXAoKSAmJiAhaXNJbk1wV2ViVmlldygpKSB7XG4gICAgICBjb25zdCByZWRpcmVjdF91cmkgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfT9fX2NhcHRjaGE9b25gXG4gICAgICBjYXB0Y2hhVG9rZW5SZXNwID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDxHZXRDYXB0Y2hhUmVzcG9uc2U+KEFwaVVybHMuR0VUX0NBUFRDSEFfVVJMLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcbiAgICAgICAgICByZWRpcmVjdF91cmksXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICB9KVxuICAgICAgaWYgKGNhcHRjaGFUb2tlblJlc3AuY2FwdGNoYV90b2tlbikge1xuICAgICAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSB7XG4gICAgICAgICAgY2FwdGNoYV90b2tlbjogY2FwdGNoYVRva2VuUmVzcC5jYXB0Y2hhX3Rva2VuLFxuICAgICAgICAgIGV4cGlyZXNfaW46IGNhcHRjaGFUb2tlblJlc3AuZXhwaXJlc19pbixcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhdmVDYXB0Y2hhVG9rZW4oY2FwdGNoYVRva2VuKVxuICAgICAgICByZXR1cm4gY2FwdGNoYVRva2VuUmVzcC5jYXB0Y2hhX3Rva2VuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qKlxuICAgICAgICogaHR0cHM6Ly9pd2lraS53b2EuY29tL3AvNDAxMDY5OTQxN1xuICAgICAgICovXG4gICAgICBjb25zdCBjYXB0Y2hhRGF0YVJlc3AgPSBhd2FpdCB0aGlzLmNvbmZpZy5yZXF1ZXN0PHtcbiAgICAgICAgZGF0YTogc3RyaW5nXG4gICAgICAgIHR5cGU6ICdpbWFnZSdcbiAgICAgICAgdG9rZW46IHN0cmluZ1xuICAgICAgICBleHBpcmVzX2luOiBudW1iZXJcbiAgICAgIH0+KEFwaVVybHMuQ0FQVENIQV9EQVRBX1VSTCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHJlZGlyZWN0X3VyaTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICB9KVxuICAgICAgY2FwdGNoYVRva2VuUmVzcCA9IHtcbiAgICAgICAgdXJsOiBgJHtjYXB0Y2hhRGF0YVJlc3AuZGF0YX0/c3RhdGU9JHtlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpfSZ0b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudChjYXB0Y2hhRGF0YVJlc3AudG9rZW4sKX1gLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLmNvbmZpZy5vcGVuVVJJV2l0aENhbGxiYWNrKGNhcHRjaGFUb2tlblJlc3AudXJsKVxuICAgIHRoaXMuc2F2ZUNhcHRjaGFUb2tlbihjYXB0Y2hhVG9rZW4pXG4gICAgcmV0dXJuIGNhcHRjaGFUb2tlbi5jYXB0Y2hhX3Rva2VuXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGVuZENhcHRjaGFUb2tlblRvVVJMKHVybDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCBmb3JjZU5ld1Rva2VuOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjYXB0Y2hhVG9rZW4gPSBhd2FpdCB0aGlzLmdldENhcHRjaGFUb2tlbihmb3JjZU5ld1Rva2VuLCBzdGF0ZSlcbiAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA+IDApIHtcbiAgICAgIHVybCArPSBgJmNhcHRjaGFfdG9rZW49JHtjYXB0Y2hhVG9rZW59YFxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgKz0gYD9jYXB0Y2hhX3Rva2VuPSR7Y2FwdGNoYVRva2VufWBcbiAgICB9XG4gICAgcmV0dXJuIHVybFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlQ2FwdGNoYVRva2VuKHRva2VuOiBDYXB0Y2hhVG9rZW4pIHtcbiAgICB0b2tlbi5leHBpcmVzX2F0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArICh0b2tlbi5leHBpcmVzX2luIC0gMTApICogMTAwMClcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodG9rZW4pXG4gICAgYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5zZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSwgdG9rZW5TdHIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRDYXB0Y2hhVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0b2tlblN0cjogc3RyaW5nID0gYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FwdGNoYVRva2VuID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNhcHRjaGFUb2tlbj8uZXhwaXJlc19hdCkge1xuICAgICAgICAgIGNhcHRjaGFUb2tlbi5leHBpcmVzX2F0ID0gbmV3IERhdGUoY2FwdGNoYVRva2VuLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNFeHBpcmVkID0gY2FwdGNoYVRva2VuLmV4cGlyZXNfYXQgPCBuZXcgRGF0ZSgpXG4gICAgICAgIGlmIChpc0V4cGlyZWQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYXB0Y2hhVG9rZW4uY2FwdGNoYV90b2tlblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWcuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuIl19
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdGNoYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXB0Y2hhL2NhcHRjaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQW1EO0FBR25ELDZEQUE2RDtBQUM3RCxrQ0FBaUQ7QUFDakQsNkVBQXdEO0FBOEJ4RDtJQVFFLGlCQUFZLElBQW9CO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFBO1NBQ2hFO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyw2QkFBYyxDQUFBO1NBQzlCO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGtCQUFXLElBQUksQ0FBQyxRQUFRLENBQUUsQ0FBQTtJQUNwRCxDQUFDO0lBRU0seUJBQU8sR0FBZDs7UUFDRSxPQUFPLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTywwQ0FBRSxPQUFPLGtEQUFJLEtBQUksSUFBQSxTQUFJLEdBQUUsQ0FBQTtJQUNuRCxDQUFDO0lBT1kseUJBQU8sR0FBcEIsVUFBd0IsR0FBVyxFQUFFLE9BQStCOzs7Ozs7d0JBQ2xFLElBQUksQ0FBQyxPQUFPLEVBQUU7NEJBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQTt5QkFDYjt3QkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTs0QkFDbkIsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7eUJBQ3ZCO3dCQUNLLEtBQUssR0FBRyxVQUFHLE9BQU8sQ0FBQyxNQUFNLGNBQUksR0FBRyxDQUFFLENBQUE7d0JBQ3BDLE1BQU0sR0FBRyxHQUFHLENB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QUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFBOzt3QkFBM0QsU0FBMkQsQ0FBQTt3QkFDM0QsV0FBTyxJQUFJLEVBQUE7NEJBR2YsV0FBTyxJQUFJLEVBQUE7Ozs7S0FDWjtJQUNILGNBQUM7QUFBRCxDQUFDLEFBOU5ELElBOE5DO0FBOU5ZLDBCQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBpVXJscywgRXJyb3JUeXBlIH0gZnJvbSAnLi4vYXV0aC9jb25zdHMnXG5pbXBvcnQgeyBTaW1wbGVTdG9yYWdlLCBSZXF1ZXN0RnVuY3Rpb24gfSBmcm9tICcuLi9vYXV0aDJjbGllbnQvaW50ZXJmYWNlJ1xuaW1wb3J0IHsgQXV0aENsaWVudFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L21vZGVscydcbmltcG9ydCB7IGRlZmF1bHRTdG9yYWdlIH0gZnJvbSAnLi4vb2F1dGgyY2xpZW50L29hdXRoMmNsaWVudCdcbmltcG9ydCB7IGlzSW5NcFdlYlZpZXcsIGlzTXAgfSBmcm9tICcuLi91dGlscy9tcCdcbmltcG9ydCBNeVVSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi91dGlscy91cmxTZWFyY2hQYXJhbXMnXG5pbXBvcnQgeyBTREtBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnQGNsb3VkYmFzZS9hZGFwdGVyLWludGVyZmFjZSdcblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhT3B0aW9ucyB7XG4gIGNsaWVudElkOiBzdHJpbmdcbiAgcmVxdWVzdDogUmVxdWVzdEZ1bmN0aW9uXG4gIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcbiAgLy8g5omT5byA572R6aG15bm26YCa6L+HVVJM5Zue6LCD6I635Y+WIENhcHRjaGFUb2tlbu+8jOmSiOWvueS4jemAmueahOW5s+WPsO+8jOivpeWHveaVsOWPr+S7peiHquWumuS5ieWunueOsCwg6buY6K6k6ZuG5oiQ5rWP6KeI5Zmo56uv6K6k6K+BXG4gIG9wZW5VUklXaXRoQ2FsbGJhY2s/OiBPcGVuVVJJV2l0aENhbGxiYWNrRnVjdGlvblxuICBhZGFwdGVyPzogU0RLQWRhcHRlckludGVyZmFjZSAmIHsgaXNNYXRjaD86ICgpID0+IGJvb2xlYW4gfVxufVxuXG50eXBlIE9wZW5VUklXaXRoQ2FsbGJhY2tGdWN0aW9uID0gKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPENhcHRjaGFUb2tlbj5cblxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhVG9rZW4ge1xuICBjYXB0Y2hhX3Rva2VuOiBzdHJpbmdcbiAgZXhwaXJlc19pbjogbnVtYmVyXG4gIGV4cGlyZXNfYXQ/OiBEYXRlIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcHRjaGFSZXF1ZXN0T3B0aW9ucyBleHRlbmRzIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyB7XG4gIHdpdGhDYXB0Y2hhPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldENhcHRjaGFSZXNwb25zZSB7XG4gIGNhcHRjaGFfdG9rZW4/OiBzdHJpbmdcbiAgZXhwaXJlc19pbj86IG51bWJlclxuICB1cmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIENhcHRjaGEge1xuICBwcml2YXRlIGNvbmZpZzogQ2FwdGNoYU9wdGlvbnNcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtDYXB0Y2hhT3B0aW9uc30gb3B0c1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQ2FwdGNoYU9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdHMub3BlblVSSVdpdGhDYWxsYmFjaykge1xuICAgICAgb3B0cy5vcGVuVVJJV2l0aENhbGxiYWNrID0gdGhpcy5nZXREZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjaygpXG4gICAgfVxuICAgIGlmICghb3B0cy5zdG9yYWdlKSB7XG4gICAgICBvcHRzLnN0b3JhZ2UgPSBkZWZhdWx0U3RvcmFnZVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0gb3B0c1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IGBjYXB0Y2hhXyR7b3B0cy5jbGllbnRJZH1gXG4gIH1cblxuICBwdWJsaWMgaXNNYXRjaCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYWRhcHRlcj8uaXNNYXRjaD8uKCkgfHwgaXNNcCgpXG4gIH1cblxuICAvKipcbiAgICogcmVxdWVzdCBodHRwIGxpa2Ugc2ltcGxlIGZldGNoIGFwaSwgZXhwOnJlcXVlc3QoJy92MS91c2VyL21lJywge3dpdGhDcmVkZW50aWFsczp0cnVlfSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0F1dGhDbGllbnRSZXF1ZXN0T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBDYXB0Y2hhUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBvcHRpb25zLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0gYCR7b3B0aW9ucy5tZXRob2R9OiR7dXJsfWBcbiAgICBsZXQgcmVxVVJMID0gdXJsXG4gICAgaWYgKG9wdGlvbnMud2l0aENhcHRjaGEpIHtcbiAgICAgIHJlcVVSTCA9IGF3YWl0IHRoaXMuYXBwZW5kQ2FwdGNoYVRva2VuVG9VUkwodXJsLCBzdGF0ZSwgZmFsc2UpXG4gICAgfVxuXG4gICAgbGV0IHJlc3A6IFRcbiAgICB0cnkge1xuICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8VD4ocmVxVVJMLCBvcHRpb25zKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5lcnJvciA9PT0gRXJyb3JUeXBlLkNBUFRDSEFfUkVRVUlSRUQgfHwgZXJyLmVycm9yID09PSBFcnJvclR5cGUuQ0FQVENIQV9JTlZBTElEKSB7XG4gICAgICAgIHVybCA9IGF3YWl0IHRoaXMuYXBwZW5kQ2FwdGNoYVRva2VuVG9VUkwodXJsLCBzdGF0ZSwgZXJyLmVycm9yID09PSBFcnJvclR5cGUuQ0FQVENIQV9JTlZBTElEKVxuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcucmVxdWVzdDxUPih1cmwsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgIH1cbiAgICByZXR1cm4gcmVzcFxuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0T3BlblVSSVdpdGhDYWxsYmFjaygpOiBPcGVuVVJJV2l0aENhbGxiYWNrRnVjdGlvbiB7XG4gICAgaWYgKCF0aGlzLmlzTWF0Y2goKSAmJiAhaXNJbk1wV2ViVmlldygpKSB7XG4gICAgICBpZiAod2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCdfX2NhcHRjaGEnKSA+IDApIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICB9XG4gICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhcHRjaGFfcGFuZWxfd3JhcCcpID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgICBlbGVtZW50RGl2LnN0eWxlLmNzc1RleHQgPSAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjcpO3Bvc2l0aW9uOiBmaXhlZDtsZWZ0OiAwcHg7cmlnaHQ6IDBweDt0b3A6IDBweDtib3R0b206IDBweDtwYWRkaW5nOiA5dncgMCAwIDA7ZGlzcGxheTogbm9uZTt6LWluZGV4OjEwMDsnXG4gICAgICAgIGVsZW1lbnREaXYuc2V0QXR0cmlidXRlKCdpZCcsICdjYXB0Y2hhX3BhbmVsX3dyYXAnKVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnREaXYpXG4gICAgICAgIH0sIDApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRPcGVuVVJJV2l0aENhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICog6buY6K6k6YCa6L+H5rWP6KeI5Zmo5omT5byA572R6aG15bm26I635Y+W5Zue6LCDXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlZmF1bHRPcGVuVVJJV2l0aENhbGxiYWNrKFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdHM/OiB7IHdpZHRoPzogc3RyaW5nOyBoZWlnaHQ/OiBzdHJpbmcgfSxcbiAgKTogUHJvbWlzZTxDYXB0Y2hhVG9rZW4+IHtcbiAgICBjb25zdCB7IHdpZHRoID0gJzM1NXB4JywgaGVpZ2h0ID0gJzM1NXB4JyB9ID0gb3B0cyB8fCB7fVxuXG4gICAgY29uc3QgbWF0Y2hlZCA9IHVybC5tYXRjaCgvXihkYXRhOi4qKSQvKVxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoe1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOSU1QTEVNRU5URUQsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiAnbmVlZCB0byBpbXBsIGNhcHRjaGEgZGF0YScsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXB0Y2hhX3BhbmVsX3dyYXAnKVxuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpXG4gICAgdGFyZ2V0LmlubmVySFRNTCA9ICcnXG5cbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCB1cmwpXG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnaWQnLCAncmV2aWV3LXBhbmVsLWlmcmFtZScpXG4gICAgaWZyYW1lLnN0eWxlLmNzc1RleHQgPSBgbWluLXdpZHRoOiR7d2lkdGh9O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OiR7aGVpZ2h0fTttYXJnaW46MCBhdXRvO2JhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTtib3JkZXI6IG5vbmU7YFxuICAgIHRhcmdldC5hcHBlbmRDaGlsZChpZnJhbWUpXG4gICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPENhcHRjaGFUb2tlbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3aW5kb3dMb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvblxuICAgICAgICAgIGNvbnN0IGlmcmFtZUxvY2F0aW9uID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb25cbiAgICAgICAgICBpZiAoaWZyYW1lTG9jYXRpb24uaG9zdCArIGlmcmFtZUxvY2F0aW9uLnBhdGhuYW1lID09PSB3aW5kb3dMb2NhdGlvbi5ob3N0ICsgd2luZG93TG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICAgICAgICBjb25zdCBpZnJhbWVVcmxQYXJhbXMgPSBuZXcgTXlVUkxTZWFyY2hQYXJhbXMoaWZyYW1lTG9jYXRpb24uc2VhcmNoKVxuICAgICAgICAgICAgY29uc3QgY2FwdGNoVG9rZW4gPSBpZnJhbWVVcmxQYXJhbXMuZ2V0KCdjYXB0Y2hhX3Rva2VuJylcbiAgICAgICAgICAgIGlmIChjYXB0Y2hUb2tlbikge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgY2FwdGNoYV90b2tlbjogY2FwdGNoVG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlc19pbjogTnVtYmVyKGlmcmFtZVVybFBhcmFtcy5nZXQoJ2V4cGlyZXNfaW4nKSksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KHtcbiAgICAgICAgICAgICAgZXJyb3I6IGlmcmFtZVVybFBhcmFtcy5nZXQoJ2Vycm9yJyksXG4gICAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBpZnJhbWVVcmxQYXJhbXMuZ2V0KCdlcnJvcl9kZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIC8qKlxuICAgKiBnZXRDYXB0Y2hhVG9rZW4g6I635Y+WY2FwdGNoYVRva2VuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldENhcHRjaGFUb2tlbihmb3JjZU5ld1Rva2VuOiBib29sZWFuLCBzdGF0ZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIWZvcmNlTmV3VG9rZW4pIHtcbiAgICAgIC8vIOWmguaenOacrOWcsOWtmOWcqO+8jOWImeebtOaOpei/lOWbnlxuICAgICAgY29uc3QgY2FwdGNoYVRva2VuID0gYXdhaXQgdGhpcy5maW5kQ2FwdGNoYVRva2VuKClcbiAgICAgIGlmIChjYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGNhcHRjaGFUb2tlblxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgY2FwdGNoYVRva2VuUmVzcDoge1xuICAgICAgdXJsPzogc3RyaW5nXG4gICAgICBjYXB0Y2hhX3Rva2VuPzogc3RyaW5nXG4gICAgICBleHBpcmVzX2luPzogbnVtYmVyXG4gICAgfVxuICAgIGlmICghdGhpcy5pc01hdGNoKCkgJiYgIWlzSW5NcFdlYlZpZXcoKSkge1xuICAgICAgY29uc3QgcmVkaXJlY3RfdXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbiArIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZX0/X19jYXB0Y2hhPW9uYFxuICAgICAgY2FwdGNoYVRva2VuUmVzcCA9IGF3YWl0IHRoaXMuY29uZmlnLnJlcXVlc3Q8R2V0Q2FwdGNoYVJlc3BvbnNlPihBcGlVcmxzLkdFVF9DQVBUQ0hBX1VSTCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIGNsaWVudF9pZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICAgICAgcmVkaXJlY3RfdXJpLFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICB9LFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgIGlmIChjYXB0Y2hhVG9rZW5SZXNwLmNhcHRjaGFfdG9rZW4pIHtcbiAgICAgICAgY29uc3QgY2FwdGNoYVRva2VuID0ge1xuICAgICAgICAgIGNhcHRjaGFfdG9rZW46IGNhcHRjaGFUb2tlblJlc3AuY2FwdGNoYV90b2tlbixcbiAgICAgICAgICBleHBpcmVzX2luOiBjYXB0Y2hhVG9rZW5SZXNwLmV4cGlyZXNfaW4sXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zYXZlQ2FwdGNoYVRva2VuKGNhcHRjaGFUb2tlbilcbiAgICAgICAgcmV0dXJuIGNhcHRjaGFUb2tlblJlc3AuY2FwdGNoYV90b2tlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKipcbiAgICAgICAqIGh0dHBzOi8vaXdpa2kud29hLmNvbS9wLzQwMTA2OTk0MTdcbiAgICAgICAqL1xuICAgICAgY29uc3QgY2FwdGNoYURhdGFSZXNwID0gYXdhaXQgdGhpcy5jb25maWcucmVxdWVzdDx7XG4gICAgICAgIGRhdGE6IHN0cmluZ1xuICAgICAgICB0eXBlOiAnaW1hZ2UnXG4gICAgICAgIHRva2VuOiBzdHJpbmdcbiAgICAgICAgZXhwaXJlc19pbjogbnVtYmVyXG4gICAgICB9PihBcGlVcmxzLkNBUFRDSEFfREFUQV9VUkwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICByZWRpcmVjdF91cmk6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgIGNhcHRjaGFUb2tlblJlc3AgPSB7XG4gICAgICAgIHVybDogYCR7Y2FwdGNoYURhdGFSZXNwLmRhdGF9P3N0YXRlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHN0YXRlKX0mdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQoY2FwdGNoYURhdGFSZXNwLnRva2VuLCl9YCxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2FwdGNoYVRva2VuID0gYXdhaXQgdGhpcy5jb25maWcub3BlblVSSVdpdGhDYWxsYmFjayhjYXB0Y2hhVG9rZW5SZXNwLnVybClcbiAgICB0aGlzLnNhdmVDYXB0Y2hhVG9rZW4oY2FwdGNoYVRva2VuKVxuICAgIHJldHVybiBjYXB0Y2hhVG9rZW4uY2FwdGNoYV90b2tlblxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBlbmRDYXB0Y2hhVG9rZW5Ub1VSTCh1cmw6IHN0cmluZywgc3RhdGU6IHN0cmluZywgZm9yY2VOZXdUb2tlbjogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY2FwdGNoYVRva2VuID0gYXdhaXQgdGhpcy5nZXRDYXB0Y2hhVG9rZW4oZm9yY2VOZXdUb2tlbiwgc3RhdGUpXG4gICAgaWYgKHVybC5pbmRleE9mKCc/JykgPiAwKSB7XG4gICAgICB1cmwgKz0gYCZjYXB0Y2hhX3Rva2VuPSR7Y2FwdGNoYVRva2VufWBcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsICs9IGA/Y2FwdGNoYV90b2tlbj0ke2NhcHRjaGFUb2tlbn1gXG4gICAgfVxuICAgIHJldHVybiB1cmxcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZUNhcHRjaGFUb2tlbih0b2tlbjogQ2FwdGNoYVRva2VuKSB7XG4gICAgdG9rZW4uZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAodG9rZW4uZXhwaXJlc19pbiAtIDEwKSAqIDEwMDApXG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRva2VuKVxuICAgIGF3YWl0IHRoaXMuY29uZmlnLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUsIHRva2VuU3RyKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kQ2FwdGNoYVRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IGF3YWl0IHRoaXMuY29uZmlnLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgaWYgKHRva2VuU3RyICE9PSB1bmRlZmluZWQgJiYgdG9rZW5TdHIgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNhcHRjaGFUb2tlbiA9IEpTT04ucGFyc2UodG9rZW5TdHIpXG4gICAgICAgIGlmIChjYXB0Y2hhVG9rZW4/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICBjYXB0Y2hhVG9rZW4uZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNhcHRjaGFUb2tlbi5leHBpcmVzX2F0KVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IGNhcHRjaGFUb2tlbi5leHBpcmVzX2F0IDwgbmV3IERhdGUoKVxuICAgICAgICBpZiAoaXNFeHBpcmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FwdGNoYVRva2VuLmNhcHRjaGFfdG9rZW5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiJdfQ==
package/dist/cjs/index.js CHANGED
@@ -42,7 +42,7 @@ Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { re
42
42
  exports.authModels = __importStar(require("./auth/models"));
43
43
  var CloudbaseOAuth = (function () {
44
44
  function CloudbaseOAuth(authOptions) {
45
- var apiOrigin = authOptions.apiOrigin, clientId = authOptions.clientId, env = authOptions.env, storage = authOptions.storage, request = authOptions.request, baseRequest = authOptions.baseRequest, anonymousSignInFunc = authOptions.anonymousSignInFunc, wxCloud = authOptions.wxCloud;
45
+ var apiOrigin = authOptions.apiOrigin, clientId = authOptions.clientId, env = authOptions.env, storage = authOptions.storage, request = authOptions.request, baseRequest = authOptions.baseRequest, anonymousSignInFunc = authOptions.anonymousSignInFunc, wxCloud = authOptions.wxCloud, adapter = authOptions.adapter;
46
46
  this.oauth2client = new oauth2client_1.OAuth2Client({
47
47
  apiOrigin: apiOrigin,
48
48
  clientId: clientId,
@@ -52,9 +52,9 @@ var CloudbaseOAuth = (function () {
52
52
  anonymousSignInFunc: anonymousSignInFunc,
53
53
  wxCloud: wxCloud,
54
54
  });
55
- this.authApi = new apis_1.Auth(__assign(__assign({ credentialsClient: this.oauth2client }, authOptions), { request: request ? this.oauth2client.request.bind(this.oauth2client) : undefined }));
55
+ this.authApi = new apis_1.Auth(__assign(__assign({ credentialsClient: this.oauth2client }, authOptions), { request: request ? this.oauth2client.request.bind(this.oauth2client) : undefined, adapter: adapter }));
56
56
  }
57
57
  return CloudbaseOAuth;
58
58
  }());
59
59
  exports.CloudbaseOAuth = CloudbaseOAuth;
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDREQUEwRDtBQUMxRCxvQ0FBK0M7QUFDL0Msb0NBQWtDO0FBQXpCLDRGQUFBLElBQUksT0FBQTtBQUNiLDREQUEyQztBQUszQztJQUlFLHdCQUFZLFdBQXdCO1FBQzFCLElBQUEsU0FBUyxHQUFpRixXQUFXLFVBQTVGLEVBQUUsUUFBUSxHQUF1RSxXQUFXLFNBQWxGLEVBQUUsR0FBRyxHQUFrRSxXQUFXLElBQTdFLEVBQUUsT0FBTyxHQUF5RCxXQUFXLFFBQXBFLEVBQUUsT0FBTyxHQUFnRCxXQUFXLFFBQTNELEVBQUUsV0FBVyxHQUFtQyxXQUFXLFlBQTlDLEVBQUUsbUJBQW1CLEdBQWMsV0FBVyxvQkFBekIsRUFBRSxPQUFPLEdBQUssV0FBVyxRQUFoQixDQUFnQjtRQUM3RyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksMkJBQVksQ0FBQztZQUNuQyxTQUFTLFdBQUE7WUFDVCxRQUFRLFVBQUE7WUFDUixHQUFHLEtBQUE7WUFDSCxPQUFPLFNBQUE7WUFDUCxXQUFXLEVBQUUsV0FBVyxJQUFJLE9BQU87WUFDbkMsbUJBQW1CLHFCQUFBO1lBQ25CLE9BQU8sU0FBQTtTQUNSLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFJLHFCQUNyQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUNqQyxXQUFXLEtBRWQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUNoRixDQUFBO0lBQ0osQ0FBQztJQUNILHFCQUFDO0FBQUQsQ0FBQyxBQXZCRCxJQXVCQztBQXZCWSx3Q0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9BdXRoMkNsaWVudCB9IGZyb20gJy4vb2F1dGgyY2xpZW50L29hdXRoMmNsaWVudCdcbmltcG9ydCB7IEF1dGhPcHRpb25zLCBBdXRoIH0gZnJvbSAnLi9hdXRoL2FwaXMnXG5leHBvcnQgeyBBdXRoIH0gZnJvbSAnLi9hdXRoL2FwaXMnXG5leHBvcnQgKiBhcyBhdXRoTW9kZWxzIGZyb20gJy4vYXV0aC9tb2RlbHMnXG5leHBvcnQgdHlwZSB7IFByb3ZpZGVyUHJvZmlsZSB9IGZyb20gJy4vYXV0aC9tb2RlbHMnXG5leHBvcnQgdHlwZSB7IENyZWRlbnRpYWxzLCBPQXV0aDJDbGllbnRPcHRpb25zLCBSZXNwb25zZUVycm9yLCBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL29hdXRoMmNsaWVudC9tb2RlbHMnXG5leHBvcnQgdHlwZSB7IEF1dGhPcHRpb25zIH0gZnJvbSAnLi9hdXRoL2FwaXMnXG5cbmV4cG9ydCBjbGFzcyBDbG91ZGJhc2VPQXV0aCB7XG4gIHB1YmxpYyBvYXV0aDJjbGllbnQ6IE9BdXRoMkNsaWVudFxuICBwdWJsaWMgYXV0aEFwaTogQXV0aFxuXG4gIGNvbnN0cnVjdG9yKGF1dGhPcHRpb25zOiBBdXRoT3B0aW9ucykge1xuICAgIGNvbnN0IHsgYXBpT3JpZ2luLCBjbGllbnRJZCwgZW52LCBzdG9yYWdlLCByZXF1ZXN0LCBiYXNlUmVxdWVzdCwgYW5vbnltb3VzU2lnbkluRnVuYywgd3hDbG91ZCB9ID0gYXV0aE9wdGlvbnNcbiAgICB0aGlzLm9hdXRoMmNsaWVudCA9IG5ldyBPQXV0aDJDbGllbnQoe1xuICAgICAgYXBpT3JpZ2luLFxuICAgICAgY2xpZW50SWQsXG4gICAgICBlbnYsXG4gICAgICBzdG9yYWdlLFxuICAgICAgYmFzZVJlcXVlc3Q6IGJhc2VSZXF1ZXN0IHx8IHJlcXVlc3QsXG4gICAgICBhbm9ueW1vdXNTaWduSW5GdW5jLFxuICAgICAgd3hDbG91ZCxcbiAgICB9KVxuXG4gICAgdGhpcy5hdXRoQXBpID0gbmV3IEF1dGgoe1xuICAgICAgY3JlZGVudGlhbHNDbGllbnQ6IHRoaXMub2F1dGgyY2xpZW50LFxuICAgICAgLi4uYXV0aE9wdGlvbnMsXG4gICAgICAvLyDlhbzlrrnogIHpgLvovpHvvIzmnInlgLzkvKDlhaXliJnkuI3otbBBdXRo5YaF55qE6aqM6K+B56CB6K+35rGC6YC76L6RXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0ID8gdGhpcy5vYXV0aDJjbGllbnQucmVxdWVzdC5iaW5kKHRoaXMub2F1dGgyY2xpZW50KSA6IHVuZGVmaW5lZCxcbiAgICB9KVxuICB9XG59XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDREQUEwRDtBQUMxRCxvQ0FBK0M7QUFDL0Msb0NBQWtDO0FBQXpCLDRGQUFBLElBQUksT0FBQTtBQUNiLDREQUEyQztBQUszQztJQUlFLHdCQUFZLFdBQXdCO1FBQzFCLElBQUEsU0FBUyxHQUEwRixXQUFXLFVBQXJHLEVBQUUsUUFBUSxHQUFnRixXQUFXLFNBQTNGLEVBQUUsR0FBRyxHQUEyRSxXQUFXLElBQXRGLEVBQUUsT0FBTyxHQUFrRSxXQUFXLFFBQTdFLEVBQUUsT0FBTyxHQUF5RCxXQUFXLFFBQXBFLEVBQUUsV0FBVyxHQUE0QyxXQUFXLFlBQXZELEVBQUUsbUJBQW1CLEdBQXVCLFdBQVcsb0JBQWxDLEVBQUUsT0FBTyxHQUFjLFdBQVcsUUFBekIsRUFBRSxPQUFPLEdBQUssV0FBVyxRQUFoQixDQUFnQjtRQUN0SCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksMkJBQVksQ0FBQztZQUNuQyxTQUFTLFdBQUE7WUFDVCxRQUFRLFVBQUE7WUFDUixHQUFHLEtBQUE7WUFDSCxPQUFPLFNBQUE7WUFDUCxXQUFXLEVBQUUsV0FBVyxJQUFJLE9BQU87WUFDbkMsbUJBQW1CLHFCQUFBO1lBQ25CLE9BQU8sU0FBQTtTQUNSLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFJLHFCQUNyQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUNqQyxXQUFXLEtBRWQsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNoRixPQUFPLFNBQUEsSUFDUCxDQUFBO0lBQ0osQ0FBQztJQUNILHFCQUFDO0FBQUQsQ0FBQyxBQXhCRCxJQXdCQztBQXhCWSx3Q0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9BdXRoMkNsaWVudCB9IGZyb20gJy4vb2F1dGgyY2xpZW50L29hdXRoMmNsaWVudCdcbmltcG9ydCB7IEF1dGhPcHRpb25zLCBBdXRoIH0gZnJvbSAnLi9hdXRoL2FwaXMnXG5leHBvcnQgeyBBdXRoIH0gZnJvbSAnLi9hdXRoL2FwaXMnXG5leHBvcnQgKiBhcyBhdXRoTW9kZWxzIGZyb20gJy4vYXV0aC9tb2RlbHMnXG5leHBvcnQgdHlwZSB7IFByb3ZpZGVyUHJvZmlsZSB9IGZyb20gJy4vYXV0aC9tb2RlbHMnXG5leHBvcnQgdHlwZSB7IENyZWRlbnRpYWxzLCBPQXV0aDJDbGllbnRPcHRpb25zLCBSZXNwb25zZUVycm9yLCBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL29hdXRoMmNsaWVudC9tb2RlbHMnXG5leHBvcnQgdHlwZSB7IEF1dGhPcHRpb25zIH0gZnJvbSAnLi9hdXRoL2FwaXMnXG5cbmV4cG9ydCBjbGFzcyBDbG91ZGJhc2VPQXV0aCB7XG4gIHB1YmxpYyBvYXV0aDJjbGllbnQ6IE9BdXRoMkNsaWVudFxuICBwdWJsaWMgYXV0aEFwaTogQXV0aFxuXG4gIGNvbnN0cnVjdG9yKGF1dGhPcHRpb25zOiBBdXRoT3B0aW9ucykge1xuICAgIGNvbnN0IHsgYXBpT3JpZ2luLCBjbGllbnRJZCwgZW52LCBzdG9yYWdlLCByZXF1ZXN0LCBiYXNlUmVxdWVzdCwgYW5vbnltb3VzU2lnbkluRnVuYywgd3hDbG91ZCwgYWRhcHRlciB9ID0gYXV0aE9wdGlvbnNcbiAgICB0aGlzLm9hdXRoMmNsaWVudCA9IG5ldyBPQXV0aDJDbGllbnQoe1xuICAgICAgYXBpT3JpZ2luLFxuICAgICAgY2xpZW50SWQsXG4gICAgICBlbnYsXG4gICAgICBzdG9yYWdlLFxuICAgICAgYmFzZVJlcXVlc3Q6IGJhc2VSZXF1ZXN0IHx8IHJlcXVlc3QsXG4gICAgICBhbm9ueW1vdXNTaWduSW5GdW5jLFxuICAgICAgd3hDbG91ZCxcbiAgICB9KVxuXG4gICAgdGhpcy5hdXRoQXBpID0gbmV3IEF1dGgoe1xuICAgICAgY3JlZGVudGlhbHNDbGllbnQ6IHRoaXMub2F1dGgyY2xpZW50LFxuICAgICAgLi4uYXV0aE9wdGlvbnMsXG4gICAgICAvLyDlhbzlrrnogIHpgLvovpHvvIzmnInlgLzkvKDlhaXliJnkuI3otbBBdXRo5YaF55qE6aqM6K+B56CB6K+35rGC6YC76L6RXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0ID8gdGhpcy5vYXV0aDJjbGllbnQucmVxdWVzdC5iaW5kKHRoaXMub2F1dGgyY2xpZW50KSA6IHVuZGVmaW5lZCxcbiAgICAgIGFkYXB0ZXIsXG4gICAgfSlcbiAgfVxufVxuIl19