studiokit-scaffolding-js 7.2.0 → 7.3.0

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.
Files changed (44) hide show
  1. package/lib/components/ActionList.d.ts +2 -0
  2. package/lib/components/ActionList.js +20 -17
  3. package/lib/constants/mockData.js +2 -1
  4. package/lib/css/components/_actionList.css +70 -0
  5. package/lib/css/components/_buttons.css +0 -69
  6. package/lib/index.d.ts +1 -1
  7. package/lib/index.js +13 -6
  8. package/lib/redux/actions/AuthAction.d.ts +5 -1
  9. package/lib/redux/actions/AuthAction.js +6 -3
  10. package/lib/redux/sagas/authSaga.d.ts +5 -3
  11. package/lib/redux/sagas/authSaga.js +139 -34
  12. package/lib/redux/sagas/initialDataLoadSaga.d.ts +2 -1
  13. package/lib/redux/sagas/initialDataLoadSaga.js +5 -2
  14. package/lib/redux/sagas/postLoginDataSaga.js +6 -1
  15. package/lib/redux/sagas/rootSaga.d.ts +8 -2
  16. package/lib/redux/sagas/rootSaga.js +41 -31
  17. package/lib/services/codeProviderService.js +7 -2
  18. package/lib/services/oauthPersistenceService.d.ts +2 -0
  19. package/lib/services/oauthPersistenceService.js +30 -0
  20. package/lib/services/persistenceService.d.ts +2 -2
  21. package/lib/services/persistenceService.js +21 -1
  22. package/lib/services/windowService.d.ts +1 -0
  23. package/lib/services/windowService.js +7 -2
  24. package/lib/startup.d.ts +1 -1
  25. package/lib/startup.js +2 -2
  26. package/lib/types/AppConfiguration.d.ts +3 -1
  27. package/lib/types/AppConfiguration.js +1 -1
  28. package/lib/types/SimpleLocation.d.ts +30 -17
  29. package/lib/types/SimpleLocation.js +1 -1
  30. package/lib/types/auth/CodeProviderService.d.ts +2 -1
  31. package/lib/types/auth/CodeProviderService.js +1 -1
  32. package/lib/types/auth/OAuthPersistenceService.d.ts +9 -0
  33. package/lib/types/auth/OAuthPersistenceService.js +6 -0
  34. package/lib/types/auth/index.d.ts +1 -1
  35. package/lib/types/auth/index.js +5 -5
  36. package/lib/types/net/OAuthToken.d.ts +5 -4
  37. package/lib/types/net/OAuthToken.js +1 -1
  38. package/lib/utils/url.d.ts +12 -0
  39. package/lib/utils/url.js +26 -3
  40. package/package.json +1 -1
  41. package/lib/services/tokenPersistenceService.d.ts +0 -2
  42. package/lib/services/tokenPersistenceService.js +0 -16
  43. package/lib/types/auth/TokenPersistenceService.d.ts +0 -5
  44. package/lib/types/auth/TokenPersistenceService.js +0 -6
@@ -9,19 +9,25 @@ exports.credentialsLoginFlow = credentialsLoginFlow;
9
9
  exports.default = authSaga;
10
10
  exports.getOAuthToken = void 0;
11
11
  exports.getTokenFromCode = getTokenFromCode;
12
+ exports.getTokenFromCodeAndState = getTokenFromCodeAndState;
12
13
  exports.getTokenFromRefreshToken = getTokenFromRefreshToken;
13
14
  exports.handleAuthFailure = handleAuthFailure;
14
15
  exports.localLoginFlow = localLoginFlow;
15
16
  exports.loginFlow = loginFlow;
16
17
  exports.matchesModelFetchReceived = exports.matchesModelFetchFailed = void 0;
17
18
  exports.performTokenRefresh = performTokenRefresh;
19
+ exports.pkceLoginFlow = pkceLoginFlow;
18
20
  exports.takeMatchesModelFetchReceived = exports.takeMatchesModelFetchFailed = void 0;
19
21
  var _effects = require("redux-saga/effects");
22
+ var _uuid = require("uuid");
23
+ var _constants = require("../../constants");
20
24
  var _codeProviderService = require("../../services/codeProviderService");
25
+ var _oauthPersistenceService = require("../../services/oauthPersistenceService");
21
26
  var _ticketProviderService = require("../../services/ticketProviderService");
22
- var _tokenPersistenceService = require("../../services/tokenPersistenceService");
27
+ var _windowService = require("../../services/windowService");
23
28
  var _types = require("../../types");
24
29
  var _logger = require("../../utils/logger");
30
+ var _url = require("../../utils/url");
25
31
  var _actions = require("../actions");
26
32
  //#region Helpers
27
33
 
@@ -37,24 +43,77 @@ const takeMatchesModelFetchFailed = modelName => incomingAction => matchesModelF
37
43
 
38
44
  //#region Local Variables
39
45
  exports.takeMatchesModelFetchFailed = takeMatchesModelFetchFailed;
40
- let clientCredentials;
41
46
  let oauthToken = null;
42
- let tokenPersistenceService;
47
+ let oauthPersistenceService;
43
48
  let refreshLock;
44
49
  let logger;
45
50
 
46
51
  //#endregion Local Variables
47
52
 
48
53
  function* getTokenFromCode(code) {
54
+ const appConfig = (0, _constants.getAppConfig)();
55
+ if (!appConfig.CLIENT_ID || !appConfig.CLIENT_SECRET) {
56
+ throw new Error('CLIENT_ID and CLIENT_SECRET are required in AppConfig');
57
+ }
58
+ const getTokenModelName = 'getToken';
59
+ const formBody = new URLSearchParams({
60
+ grant_type: 'authorization_code',
61
+ client_id: appConfig.CLIENT_ID,
62
+ client_secret: appConfig.CLIENT_SECRET,
63
+ code: code
64
+ });
65
+ yield (0, _effects.put)({
66
+ type: _actions.MODEL_FETCH_REQUEST_ACTION_TYPE.FETCH_REQUEST,
67
+ modelName: getTokenModelName,
68
+ body: formBody.toString(),
69
+ noStore: true
70
+ });
71
+ const {
72
+ fetchResultAction,
73
+ fetchErrorAction
74
+ } = yield (0, _effects.race)({
75
+ fetchResultAction: (0, _effects.take)(takeMatchesModelFetchReceived(getTokenModelName)),
76
+ fetchErrorAction: (0, _effects.take)(takeMatchesModelFetchFailed(getTokenModelName))
77
+ });
78
+ if (fetchErrorAction || !fetchResultAction?.data) {
79
+ return null;
80
+ }
81
+ return fetchResultAction.data;
82
+ }
83
+ function* getTokenFromCodeAndState(code, state) {
84
+ const appConfig = (0, _constants.getAppConfig)();
85
+ if (!appConfig.CLIENT_ID || !appConfig.OAUTH_PKCE_SCOPE || !appConfig.OAUTH_PKCE_ENDPOINT) {
86
+ throw new Error('CLIENT_ID, OAUTH_PKCE_SCOPE, and OAUTH_PKCE_ENDPOINT are required in AppConfig');
87
+ }
88
+
89
+ // validate persisted values
90
+ const codeVerifier = yield (0, _effects.call)(oauthPersistenceService.getPersistedCodeVerifier);
91
+ if (!codeVerifier) {
92
+ throw new Error('invalid code_verifier');
93
+ }
94
+ const persistedState = yield (0, _effects.call)(oauthPersistenceService.getPersistedState);
95
+ if (persistedState !== state) {
96
+ throw new Error('invalid state');
97
+ }
98
+ // clear persisted values
99
+ yield (0, _effects.call)(oauthPersistenceService.persistState, null);
100
+ yield (0, _effects.call)(oauthPersistenceService.persistCodeVerifier, null);
101
+
102
+ // dispatch request
49
103
  const getTokenModelName = 'getToken';
50
- // Manually creating form-url-encoded body here because NOTHING else uses this content-type
51
- // but the OAuth spec requires it
52
- const formBody = ['grant_type=authorization_code', `client_id=${clientCredentials.client_id}`, `client_secret=${clientCredentials.client_secret}`, `code=${encodeURIComponent(code)}`];
53
- const formBodyString = formBody.join('&');
104
+ const location = _windowService.windowService.getLocation();
105
+ const formBody = new URLSearchParams({
106
+ grant_type: 'authorization_code',
107
+ client_id: appConfig.CLIENT_ID,
108
+ scope: appConfig.OAUTH_PKCE_SCOPE,
109
+ code_verifier: codeVerifier,
110
+ redirect_uri: location.origin,
111
+ code: code
112
+ });
54
113
  yield (0, _effects.put)({
55
114
  type: _actions.MODEL_FETCH_REQUEST_ACTION_TYPE.FETCH_REQUEST,
56
115
  modelName: getTokenModelName,
57
- body: formBodyString,
116
+ body: formBody.toString(),
58
117
  noStore: true
59
118
  });
60
119
  const {
@@ -70,15 +129,24 @@ function* getTokenFromCode(code) {
70
129
  return fetchResultAction.data;
71
130
  }
72
131
  function* getTokenFromRefreshToken(oauthTokenParam) {
132
+ const appConfig = (0, _constants.getAppConfig)();
133
+ if (!appConfig.CLIENT_ID) {
134
+ throw new Error('CLIENT_ID is required in AppConfig');
135
+ }
73
136
  const getTokenModelName = 'getToken';
74
- // Manually creating form-url-encoded body here because NOTHING else uses this content-type
75
- // but the OAuth spec requires it
76
- const formBody = ['grant_type=refresh_token', `client_id=${clientCredentials.client_id}`, `client_secret=${clientCredentials.client_secret}`, `refresh_token=${encodeURIComponent(oauthTokenParam.refresh_token)}`];
77
- const formBodyString = formBody.join('&');
137
+ const formBody = new URLSearchParams({
138
+ grant_type: 'refresh_token',
139
+ client_id: appConfig.CLIENT_ID,
140
+ refresh_token: oauthTokenParam.refresh_token
141
+ });
142
+ // create the form body based on if using a client_secret: traditional OAuth vs. PKCE flow
143
+ if (appConfig.CLIENT_SECRET) {
144
+ formBody.append('client_secret', appConfig.CLIENT_SECRET);
145
+ }
78
146
  yield (0, _effects.put)({
79
147
  type: _actions.MODEL_FETCH_REQUEST_ACTION_TYPE.FETCH_REQUEST,
80
148
  modelName: getTokenModelName,
81
- body: formBodyString,
149
+ body: formBody.toString(),
82
150
  noStore: true
83
151
  });
84
152
  const {
@@ -121,7 +189,7 @@ function* performTokenRefresh() {
121
189
  oauthToken = yield (0, _effects.call)(getTokenFromRefreshToken, oauthToken);
122
190
  if (!!oauthToken && oauthToken.access_token !== originalAccessToken) {
123
191
  logger.debug('OAuth token refreshed');
124
- yield (0, _effects.call)(tokenPersistenceService.persistToken, oauthToken);
192
+ yield (0, _effects.call)(oauthPersistenceService.persistToken, oauthToken);
125
193
  yield (0, _effects.put)({
126
194
  type: _actions.AUTH_TOKEN_SUCCESS_ACTION_TYPE.TOKEN_REFRESH_SUCCEEDED,
127
195
  oauthToken
@@ -189,6 +257,35 @@ function* casTicketLoginFlow(ticket, service) {
189
257
  };
190
258
  return yield (0, _effects.call)(loginFlow, modelFetchRequestAction);
191
259
  }
260
+ function* pkceLoginFlow(_) {
261
+ const appConfig = (0, _constants.getAppConfig)();
262
+ if (!appConfig.CLIENT_ID || !appConfig.OAUTH_PKCE_SCOPE || !appConfig.OAUTH_PKCE_ENDPOINT) {
263
+ throw new Error('CLIENT_ID, OAUTH_PKCE_SCOPE, and OAUTH_PKCE_ENDPOINT are required in AppConfig');
264
+ }
265
+
266
+ // Generate state and code verifier values
267
+ const state = (0, _uuid.v4)();
268
+ const codeVerifier = (0, _uuid.v4)();
269
+ const sha256CodeVerifier = yield (0, _effects.call)(_url.sha256Async, codeVerifier);
270
+ const codeChallenge = yield (0, _effects.call)(_url.base64UrlEncode, sha256CodeVerifier);
271
+
272
+ // Persist state and code verifier in local storage for use after code flow redirect.
273
+ yield (0, _effects.call)(oauthPersistenceService.persistState, state);
274
+ yield (0, _effects.call)(oauthPersistenceService.persistCodeVerifier, codeVerifier);
275
+
276
+ // Redirect to BS code flow auth endpoint (which will redirect back here)
277
+ const location = _windowService.windowService.getLocation();
278
+ const pkceAuthRedirectURL = `${appConfig.OAUTH_PKCE_ENDPOINT}?${new URLSearchParams({
279
+ response_type: 'code',
280
+ client_id: appConfig.CLIENT_ID,
281
+ state: state,
282
+ scope: appConfig.OAUTH_PKCE_SCOPE,
283
+ code_challenge: codeChallenge,
284
+ code_challenge_method: 'S256',
285
+ redirect_uri: location.origin
286
+ })}`;
287
+ yield (0, _effects.call)(_windowService.windowService.replace, pkceAuthRedirectURL);
288
+ }
192
289
  function* handleAuthFailure(action) {
193
290
  // This should be unlikely since we normally have a refresh token loop happening
194
291
  // but if the app is backgrounded, the loop might not be caught up yet
@@ -214,17 +311,16 @@ const getOAuthToken = function* (modelName) {
214
311
  return oauthToken;
215
312
  };
216
313
  exports.getOAuthToken = getOAuthToken;
217
- function authSaga(clientCredentialsParam) {
218
- let tokenPersistenceServiceParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _tokenPersistenceService.tokenPersistenceService;
219
- let ticketProviderService = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ticketProviderService.ticketProviderService;
220
- let codeProviderService = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _codeProviderService.codeProviderService;
314
+ function authSaga() {
315
+ let oauthPersistenceServiceParam = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _oauthPersistenceService.oauthPersistenceService;
316
+ let ticketProviderService = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _ticketProviderService.ticketProviderService;
317
+ let codeProviderService = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _codeProviderService.codeProviderService;
221
318
  return function* () {
222
319
  logger = (0, _logger.getLogger)();
223
- clientCredentials = clientCredentialsParam;
224
- tokenPersistenceService = tokenPersistenceServiceParam;
320
+ oauthPersistenceService = oauthPersistenceServiceParam;
225
321
 
226
322
  // Try to get persisted token (normally in AsyncStorage or LocalStorage)
227
- oauthToken = yield (0, _effects.call)(tokenPersistenceService.getPersistedToken);
323
+ oauthToken = yield (0, _effects.call)(oauthPersistenceService.getPersistedToken);
228
324
 
229
325
  // If no token, try to get CAS ticket (normally in the URL), use it to get a token
230
326
  if (!oauthToken) {
@@ -237,7 +333,6 @@ function authSaga(clientCredentialsParam) {
237
333
  }
238
334
 
239
335
  // If OAuth Code exists (normally in the URL), use it to get a token
240
- // e.g. LTI, Shibboleth, Facebook, Google
241
336
  const code = codeProviderService.getCode();
242
337
  if (code) {
243
338
  // Log out the current user if a new token is about to be generated from the OAuth Code
@@ -247,13 +342,20 @@ function authSaga(clientCredentialsParam) {
247
342
  type: _actions.MODEL_REMOVE_KEY_ACTION_TYPE,
248
343
  modelPath: 'user'
249
344
  }),
250
- clearPersistentToken: (0, _effects.call)(tokenPersistenceService.persistToken, null)
345
+ clearPersistentToken: (0, _effects.call)(oauthPersistenceService.persistToken, null)
251
346
  });
252
347
  oauthToken = null;
253
348
  }
254
- oauthToken = yield (0, _effects.call)(getTokenFromCode, code);
349
+
350
+ // If OAuth state exists (normally in the URL), use it in addition to the code for PKCE login flow
351
+ const state = codeProviderService.getState();
352
+ if (state) {
353
+ oauthToken = yield (0, _effects.call)(getTokenFromCodeAndState, code, state);
354
+ } else {
355
+ oauthToken = yield (0, _effects.call)(getTokenFromCode, code);
356
+ }
255
357
  }
256
- codeProviderService.removeCode();
358
+ codeProviderService.removeCodeAndState();
257
359
  yield (0, _effects.put)({
258
360
  type: _actions.AUTH_TOKEN_ACTION_TYPE.AUTH_INITIALIZED,
259
361
  oauthToken
@@ -263,10 +365,12 @@ function authSaga(clientCredentialsParam) {
263
365
  if (!oauthToken) {
264
366
  const {
265
367
  casV1Action,
266
- localLoginAction
368
+ localLoginAction,
369
+ pkceLoginAction
267
370
  } = yield (0, _effects.race)({
268
371
  casV1Action: (0, _effects.take)(_actions.AUTH_CAS_V1_LOGIN_REQUEST_ACTION_TYPE.CAS_V1_LOGIN_REQUEST),
269
- localLoginAction: (0, _effects.take)(_actions.AUTH_LOCAL_LOGIN_REQUEST_ACTION_TYPE.LOCAL_LOGIN_REQUEST)
372
+ localLoginAction: (0, _effects.take)(_actions.AUTH_LOCAL_LOGIN_REQUEST_ACTION_TYPE.LOCAL_LOGIN_REQUEST),
373
+ pkceLoginAction: (0, _effects.take)(_actions.AUTH_PKCE_LOGIN_REQUEST_ACTION_TYPE.PKCE_LOGIN_REQUEST)
270
374
  });
271
375
  yield (0, _effects.put)({
272
376
  type: _actions.AUTH_ACTION_TYPE.LOGIN_REQUESTED
@@ -275,19 +379,20 @@ function authSaga(clientCredentialsParam) {
275
379
  oauthToken = yield (0, _effects.call)(casV1LoginFlow, casV1Action);
276
380
  } else if (localLoginAction) {
277
381
  oauthToken = yield (0, _effects.call)(localLoginFlow, localLoginAction);
382
+ } else if (pkceLoginAction) {
383
+ // oauthToken is not returned here, as this flow will result in a window redirect
384
+ yield (0, _effects.call)(pkceLoginFlow, pkceLoginAction);
385
+ // break execution
386
+ return;
278
387
  }
279
388
  }
280
389
  if (oauthToken) {
281
- yield (0, _effects.call)(tokenPersistenceService.persistToken, oauthToken);
390
+ yield (0, _effects.call)(oauthPersistenceService.persistToken, oauthToken);
282
391
  yield (0, _effects.all)({
283
392
  loginSuccess: (0, _effects.put)({
284
393
  type: _actions.AUTH_TOKEN_SUCCESS_ACTION_TYPE.GET_TOKEN_SUCCEEDED,
285
394
  oauthToken
286
395
  }),
287
- getUserInfo: (0, _effects.put)({
288
- type: _actions.MODEL_FETCH_REQUEST_ACTION_TYPE.FETCH_REQUEST,
289
- modelName: 'user.userInfo'
290
- }),
291
396
  logOut: (0, _effects.take)(_actions.AUTH_ACTION_TYPE.LOG_OUT_REQUESTED)
292
397
  });
293
398
  } else {
@@ -300,10 +405,10 @@ function authSaga(clientCredentialsParam) {
300
405
  type: _actions.MODEL_REMOVE_KEY_ACTION_TYPE,
301
406
  modelPath: 'user'
302
407
  }),
303
- clearPersistentToken: (0, _effects.call)(tokenPersistenceService.persistToken, null)
408
+ clearPersistentToken: (0, _effects.call)(oauthPersistenceService.persistToken, null)
304
409
  });
305
410
  oauthToken = null;
306
411
  } while (true);
307
412
  }();
308
413
  }
309
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfY29kZVByb3ZpZGVyU2VydmljZSIsIl90aWNrZXRQcm92aWRlclNlcnZpY2UiLCJfdG9rZW5QZXJzaXN0ZW5jZVNlcnZpY2UiLCJfdHlwZXMiLCJfbG9nZ2VyIiwiX2FjdGlvbnMiLCJtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiYWN0aW9uIiwibW9kZWxOYW1lIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwibW9kZWxQYXRoIiwiZXhwb3J0cyIsInRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiaW5jb21pbmdBY3Rpb24iLCJtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCIsImlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uIiwidGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkIiwiY2xpZW50Q3JlZGVudGlhbHMiLCJvYXV0aFRva2VuIiwidG9rZW5QZXJzaXN0ZW5jZVNlcnZpY2UiLCJyZWZyZXNoTG9jayIsImxvZ2dlciIsImdldFRva2VuRnJvbUNvZGUiLCJjb2RlIiwiZ2V0VG9rZW5Nb2RlbE5hbWUiLCJmb3JtQm9keSIsImNsaWVudF9pZCIsImNsaWVudF9zZWNyZXQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJmb3JtQm9keVN0cmluZyIsImpvaW4iLCJwdXQiLCJ0eXBlIiwiTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRSIsIkZFVENIX1JFUVVFU1QiLCJib2R5Iiwibm9TdG9yZSIsImZldGNoUmVzdWx0QWN0aW9uIiwiZmV0Y2hFcnJvckFjdGlvbiIsInJhY2UiLCJ0YWtlIiwiZGF0YSIsImdldFRva2VuRnJvbVJlZnJlc2hUb2tlbiIsIm9hdXRoVG9rZW5QYXJhbSIsInJlZnJlc2hfdG9rZW4iLCJlcnJvckRhdGEiLCJzdGF0dXMiLCJIVFRQX1NUQVRVU19DT0RFIiwiSU5URVJOQUxfU0VSVkVSX0VSUk9SIiwicGVyZm9ybVRva2VuUmVmcmVzaCIsInJlZnJlc2hTdWNjZXNzIiwiQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFIiwiVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQiLCJyZWZyZXNoRmFpbGVkIiwiQVVUSF9BQ1RJT05fVFlQRSIsIlRPS0VOX1JFRlJFU0hfRkFJTEVEIiwiZGVidWciLCJvcmlnaW5hbEFjY2Vzc1Rva2VuIiwiYWNjZXNzX3Rva2VuIiwiY2FsbCIsInBlcnNpc3RUb2tlbiIsImFsbCIsImxvZ091dCIsIkxPR19PVVRfUkVRVUVTVEVEIiwibG9naW5GbG93IiwibW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24iLCJjcmVkZW50aWFsc0xvZ2luRmxvdyIsIm5vUmV0cnkiLCJjYXNWMUxvZ2luRmxvdyIsImxvY2FsTG9naW5GbG93IiwiY2FzVGlja2V0TG9naW5GbG93IiwidGlja2V0Iiwic2VydmljZSIsInF1ZXJ5UGFyYW1zIiwiaGFuZGxlQXV0aEZhaWx1cmUiLCJVTkFVVEhPUklaRUQiLCJnZXRPQXV0aFRva2VuIiwidGhpcnR5U2Vjb25kc0Zyb21Ob3ciLCJEYXRlIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJhdXRoU2FnYSIsImNsaWVudENyZWRlbnRpYWxzUGFyYW0iLCJ0b2tlblBlcnNpc3RlbmNlU2VydmljZVBhcmFtIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZGVmYXVsdFRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlIiwidGlja2V0UHJvdmlkZXJTZXJ2aWNlIiwiZGVmYXVsdFRpY2tldFByb3ZpZGVyU2VydmljZSIsImNvZGVQcm92aWRlclNlcnZpY2UiLCJkZWZhdWx0Q29kZVByb3ZpZGVyU2VydmljZSIsImdldExvZ2dlciIsImdldFBlcnNpc3RlZFRva2VuIiwiY2FzVGlja2V0IiwiZ2V0VGlja2V0IiwicmVtb3ZlVGlja2V0IiwiZ2V0QXBwU2VydmljZU5hbWUiLCJnZXRDb2RlIiwiY2xlYXJVc2VyRGF0YSIsIk1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUiLCJjbGVhclBlcnNpc3RlbnRUb2tlbiIsInJlbW92ZUNvZGUiLCJBVVRIX1RPS0VOX0FDVElPTl9UWVBFIiwiQVVUSF9JTklUSUFMSVpFRCIsInRha2VFdmVyeSIsIk1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFIiwiVFJZX0ZFVENIX0ZBSUxFRCIsImNhc1YxQWN0aW9uIiwibG9jYWxMb2dpbkFjdGlvbiIsIkFVVEhfQ0FTX1YxX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJDQVNfVjFfTE9HSU5fUkVRVUVTVCIsIkFVVEhfTE9DQUxfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSIsIkxPQ0FMX0xPR0lOX1JFUVVFU1QiLCJMT0dJTl9SRVFVRVNURUQiLCJsb2dpblN1Y2Nlc3MiLCJHRVRfVE9LRU5fU1VDQ0VFREVEIiwiZ2V0VXNlckluZm8iLCJMT0dJTl9GQUlMRUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVkdXgvc2FnYXMvYXV0aFNhZ2EudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FnYUl0ZXJhdG9yIH0gZnJvbSAnQHJlZHV4LXNhZ2EvY29yZSdcbmltcG9ydCB7IEFueUFjdGlvbiB9IGZyb20gJ3JlZHV4J1xuaW1wb3J0IHsgYWxsLCBjYWxsLCBwdXQsIHJhY2UsIHRha2UsIHRha2VFdmVyeSB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cydcbmltcG9ydCB7IGNvZGVQcm92aWRlclNlcnZpY2UgYXMgZGVmYXVsdENvZGVQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2RlUHJvdmlkZXJTZXJ2aWNlJ1xuaW1wb3J0IHsgdGlja2V0UHJvdmlkZXJTZXJ2aWNlIGFzIGRlZmF1bHRUaWNrZXRQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aWNrZXRQcm92aWRlclNlcnZpY2UnXG5pbXBvcnQgeyB0b2tlblBlcnNpc3RlbmNlU2VydmljZSBhcyBkZWZhdWx0VG9rZW5QZXJzaXN0ZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b2tlblBlcnNpc3RlbmNlU2VydmljZSdcbmltcG9ydCB7XG5cdENsaWVudENyZWRlbnRpYWxzLFxuXHRDb2RlUHJvdmlkZXJTZXJ2aWNlLFxuXHRIVFRQX1NUQVRVU19DT0RFLFxuXHRPQXV0aFRva2VuLFxuXHRPQXV0aFRva2VuT3JOdWxsLFxuXHRUaWNrZXRQcm92aWRlclNlcnZpY2UsXG5cdFRva2VuQWNjZXNzRnVuY3Rpb24sXG5cdFRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlXG59IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQge1xuXHRBVVRIX0FDVElPTl9UWVBFLFxuXHRBVVRIX0NBU19WMV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLFxuXHRBVVRIX0xPQ0FMX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSxcblx0QXV0aEFjdGlvbixcblx0QXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhUb2tlbkFjdGlvbixcblx0QXV0aFRva2VuU3VjY2Vzc0FjdGlvbixcblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24sXG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaFJlc3VsdEFjdGlvbixcblx0TU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUsXG5cdE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsXG5cdE1vZGVsRmV0Y2hFcnJvckFjdGlvbixcblx0TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24sXG5cdE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24sXG5cdE1vZGVsUmVtb3ZlS2V5QWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8vI3JlZ2lvbiBIZWxwZXJzXG5cbmV4cG9ydCBjb25zdCBtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gbW9kZWxOYW1lXG5cbmV4cG9ydCBjb25zdCB0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoaW5jb21pbmdBY3Rpb24sIG1vZGVsTmFtZSlcblxuZXhwb3J0IGNvbnN0IG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24oYWN0aW9uKSAmJiBhY3Rpb24ubW9kZWxQYXRoID09PSBtb2RlbE5hbWVcblxuZXhwb3J0IGNvbnN0IHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGluY29taW5nQWN0aW9uLCBtb2RlbE5hbWUpXG5cbi8vI2VuZHJlZ2lvbiBIZWxwZXJzXG5cbi8vI3JlZ2lvbiBMb2NhbCBWYXJpYWJsZXNcblxubGV0IGNsaWVudENyZWRlbnRpYWxzOiBDbGllbnRDcmVkZW50aWFsc1xubGV0IG9hdXRoVG9rZW46IE9BdXRoVG9rZW5Pck51bGwgPSBudWxsXG5sZXQgdG9rZW5QZXJzaXN0ZW5jZVNlcnZpY2U6IFRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlXG5sZXQgcmVmcmVzaExvY2s6IGJvb2xlYW5cbmxldCBsb2dnZXI6IExvZ2dlclxuXG4vLyNlbmRyZWdpb24gTG9jYWwgVmFyaWFibGVzXG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tQ29kZShjb2RlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBnZXRUb2tlbk1vZGVsTmFtZSA9ICdnZXRUb2tlbidcblx0Ly8gTWFudWFsbHkgY3JlYXRpbmcgZm9ybS11cmwtZW5jb2RlZCBib2R5IGhlcmUgYmVjYXVzZSBOT1RISU5HIGVsc2UgdXNlcyB0aGlzIGNvbnRlbnQtdHlwZVxuXHQvLyBidXQgdGhlIE9BdXRoIHNwZWMgcmVxdWlyZXMgaXRcblx0Y29uc3QgZm9ybUJvZHkgPSBbXG5cdFx0J2dyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlJyxcblx0XHRgY2xpZW50X2lkPSR7Y2xpZW50Q3JlZGVudGlhbHMuY2xpZW50X2lkfWAsXG5cdFx0YGNsaWVudF9zZWNyZXQ9JHtjbGllbnRDcmVkZW50aWFscy5jbGllbnRfc2VjcmV0fWAsXG5cdFx0YGNvZGU9JHtlbmNvZGVVUklDb21wb25lbnQoY29kZSl9YFxuXHRdXG5cdGNvbnN0IGZvcm1Cb2R5U3RyaW5nID0gZm9ybUJvZHkuam9pbignJicpXG5cdHlpZWxkIHB1dDxNb2RlbEZldGNoUmVxdWVzdEFjdGlvbj4oe1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6IGdldFRva2VuTW9kZWxOYW1lLFxuXHRcdGJvZHk6IGZvcm1Cb2R5U3RyaW5nLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbiB8fCAhZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuKG9hdXRoVG9rZW5QYXJhbTogT0F1dGhUb2tlbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGdldFRva2VuTW9kZWxOYW1lID0gJ2dldFRva2VuJ1xuXHQvLyBNYW51YWxseSBjcmVhdGluZyBmb3JtLXVybC1lbmNvZGVkIGJvZHkgaGVyZSBiZWNhdXNlIE5PVEhJTkcgZWxzZSB1c2VzIHRoaXMgY29udGVudC10eXBlXG5cdC8vIGJ1dCB0aGUgT0F1dGggc3BlYyByZXF1aXJlcyBpdFxuXHRjb25zdCBmb3JtQm9keSA9IFtcblx0XHQnZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuJyxcblx0XHRgY2xpZW50X2lkPSR7Y2xpZW50Q3JlZGVudGlhbHMuY2xpZW50X2lkfWAsXG5cdFx0YGNsaWVudF9zZWNyZXQ9JHtjbGllbnRDcmVkZW50aWFscy5jbGllbnRfc2VjcmV0fWAsXG5cdFx0YHJlZnJlc2hfdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQob2F1dGhUb2tlblBhcmFtLnJlZnJlc2hfdG9rZW4pfWBcblx0XVxuXHRjb25zdCBmb3JtQm9keVN0cmluZyA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuXHR5aWVsZCBwdXQ8TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24+KHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiBnZXRUb2tlbk1vZGVsTmFtZSxcblx0XHRib2R5OiBmb3JtQm9keVN0cmluZyxcblx0XHRub1N0b3JlOiB0cnVlXG5cdH0pXG5cdGNvbnN0IHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbixcblx0XHRmZXRjaEVycm9yQWN0aW9uXG5cdH06IHsgZmV0Y2hSZXN1bHRBY3Rpb24/OiBNb2RlbEZldGNoUmVzdWx0QWN0aW9uOyBmZXRjaEVycm9yQWN0aW9uPzogTW9kZWxGZXRjaEVycm9yQWN0aW9uIH0gPSB5aWVsZCByYWNlKHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZChnZXRUb2tlbk1vZGVsTmFtZSkpLFxuXHRcdGZldGNoRXJyb3JBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGdldFRva2VuTW9kZWxOYW1lKSlcblx0fSlcblx0Ly8gYW55IGVycm9yIHJlc3BvbnNlXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uKSB7XG5cdFx0Ly8gaWdub3JlIHNlcnZlciBlcnJvcnNcblx0XHRpZiAoXG5cdFx0XHRmZXRjaEVycm9yQWN0aW9uLmVycm9yRGF0YT8uc3RhdHVzICYmXG5cdFx0XHRmZXRjaEVycm9yQWN0aW9uLmVycm9yRGF0YS5zdGF0dXMgPj0gSFRUUF9TVEFUVVNfQ09ERS5JTlRFUk5BTF9TRVJWRVJfRVJST1Jcblx0XHQpIHtcblx0XHRcdHJldHVybiBvYXV0aFRva2VuUGFyYW1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHQvLyBmb3Igc29tZSByZWFzb24gdGhlIHJlc3BvbnNlIGhhZCBubyBib2R5XG5cdGlmICghZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogcGVyZm9ybVRva2VuUmVmcmVzaCgpOiBTYWdhSXRlcmF0b3Ige1xuXHRpZiAocmVmcmVzaExvY2sgfHwgIW9hdXRoVG9rZW4pIHtcblx0XHQvLyBhbHJlYWR5IHJlZnJlc2hpbmcuIHdhaXQgZm9yIHRoZSBjdXJyZW50IHJlZnJlc2ggdG8gc3VjY2VlZCBvciBmYWlsLlxuXHRcdHlpZWxkIHJhY2Uoe1xuXHRcdFx0cmVmcmVzaFN1Y2Nlc3M6IHRha2UoQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLlRPS0VOX1JFRlJFU0hfU1VDQ0VFREVEKSxcblx0XHRcdHJlZnJlc2hGYWlsZWQ6IHRha2UoQVVUSF9BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX0ZBSUxFRClcblx0XHR9KVxuXHRcdHJldHVyblxuXHR9XG5cdGxvZ2dlci5kZWJ1ZygnUmVmcmVzaGluZyBPQXV0aCB0b2tlbicpXG5cdHJlZnJlc2hMb2NrID0gdHJ1ZVxuXHQvLyBvYXV0aFRva2VuIHdpbGwgYmUgc2V0IHRvOlxuXHQvLyAxLiBuZXcgdG9rZW4gKHN1Y2Nlc3MpXG5cdC8vIDIuIHNhbWUgdG9rZW4gKGZhaWxlZCBmcm9tIHRpbWVvdXQgb3Igc2VydmVyIGVycm9yKVxuXHQvLyAzLiBudWxsIChmYWlsKVxuXHRjb25zdCBvcmlnaW5hbEFjY2Vzc1Rva2VuID0gb2F1dGhUb2tlbi5hY2Nlc3NfdG9rZW5cblx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuLCBvYXV0aFRva2VuKVxuXHRpZiAoISFvYXV0aFRva2VuICYmIG9hdXRoVG9rZW4uYWNjZXNzX3Rva2VuICE9PSBvcmlnaW5hbEFjY2Vzc1Rva2VuKSB7XG5cdFx0bG9nZ2VyLmRlYnVnKCdPQXV0aCB0b2tlbiByZWZyZXNoZWQnKVxuXHRcdHlpZWxkIGNhbGwodG9rZW5QZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBvYXV0aFRva2VuKVxuXHRcdHlpZWxkIHB1dDxBdXRoVG9rZW5TdWNjZXNzQWN0aW9uPih7IHR5cGU6IEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX1NVQ0NFRURFRCwgb2F1dGhUb2tlbiB9KVxuXHR9IGVsc2UgaWYgKG9hdXRoVG9rZW4gPT09IG51bGwpIHtcblx0XHRsb2dnZXIuZGVidWcoJ09BdXRoIHRva2VuIGZhaWxlZCB0byByZWZyZXNoJylcblx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gb3V0c2lkZSBvZiB0aGUgdG9rZW4gaGF2aW5nIGJlZW4gcmV2b2tlZCBvbiB0aGUgc2VydmVyIHNpZGVcblx0XHR5aWVsZCBhbGwoe1xuXHRcdFx0cmVmcmVzaEZhaWxlZDogcHV0PEF1dGhBY3Rpb24+KHsgdHlwZTogQVVUSF9BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX0ZBSUxFRCB9KSxcblx0XHRcdGxvZ091dDogcHV0PEF1dGhBY3Rpb24+KHsgdHlwZTogQVVUSF9BQ1RJT05fVFlQRS5MT0dfT1VUX1JFUVVFU1RFRCB9KVxuXHRcdH0pXG5cdH1cblx0cmVmcmVzaExvY2sgPSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGxvZ2luRmxvdyhtb2RlbEZldGNoUmVxdWVzdEFjdGlvbjogTW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHR5aWVsZCBwdXQobW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pXG5cdGNvbnN0IHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbixcblx0XHRmZXRjaEVycm9yQWN0aW9uXG5cdH06IHsgZmV0Y2hSZXN1bHRBY3Rpb24/OiBNb2RlbEZldGNoUmVzdWx0QWN0aW9uOyBmZXRjaEVycm9yQWN0aW9uPzogTW9kZWxGZXRjaEVycm9yQWN0aW9uIH0gPSB5aWVsZCByYWNlKHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZChtb2RlbEZldGNoUmVxdWVzdEFjdGlvbi5tb2RlbE5hbWUpKSxcblx0XHRmZXRjaEVycm9yQWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChtb2RlbEZldGNoUmVxdWVzdEFjdGlvbi5tb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbikge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0Y29uc3QgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGE/LmNvZGVcblx0aWYgKCFjb2RlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRyZXR1cm4geWllbGQgY2FsbChnZXRUb2tlbkZyb21Db2RlLCBjb2RlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNyZWRlbnRpYWxzTG9naW5GbG93KFxuXHRhY3Rpb246IEF1dGhDYXNWMUxvZ2luUmVxdWVzdEFjdGlvbiB8IEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvbixcblx0bW9kZWxOYW1lOiBzdHJpbmdcbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbiA9IHtcblx0XHQvLyBzZXQgcmVxdWlyZWQgZGVmYXVsdHNcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0Ly8gZm9yY2Ugbm8gcmV0cnlcblx0XHRub1JldHJ5OiB0cnVlLFxuXHRcdC8vIHBhc3MgdGhydSBib2R5XG5cdFx0Ym9keTogYWN0aW9uLmJvZHlcblx0fVxuXHRyZXR1cm4geWllbGQgY2FsbChsb2dpbkZsb3csIG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNhc1YxTG9naW5GbG93KGFjdGlvbjogQXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0cmV0dXJuIHlpZWxkIGNhbGwoY3JlZGVudGlhbHNMb2dpbkZsb3csIGFjdGlvbiwgJ2NvZGVGcm9tQ2FzVjEnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGxvY2FsTG9naW5GbG93KGFjdGlvbjogQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0cmV0dXJuIHlpZWxkIGNhbGwoY3JlZGVudGlhbHNMb2dpbkZsb3csIGFjdGlvbiwgJ2NvZGVGcm9tTG9jYWxDcmVkZW50aWFscycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY2FzVGlja2V0TG9naW5GbG93KHRpY2tldDogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBtb2RlbEZldGNoUmVxdWVzdEFjdGlvbjogTW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24gPSB7XG5cdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdG1vZGVsTmFtZTogJ2NvZGVGcm9tQ2FzVGlja2V0Jyxcblx0XHRub1N0b3JlOiB0cnVlLFxuXHRcdHF1ZXJ5UGFyYW1zOiB7XG5cdFx0XHR0aWNrZXQsXG5cdFx0XHRzZXJ2aWNlXG5cdFx0fVxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGxvZ2luRmxvdywgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaGFuZGxlQXV0aEZhaWx1cmUoYWN0aW9uOiBNb2RlbEZldGNoRXJyb3JBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHQvLyBUaGlzIHNob3VsZCBiZSB1bmxpa2VseSBzaW5jZSB3ZSBub3JtYWxseSBoYXZlIGEgcmVmcmVzaCB0b2tlbiBsb29wIGhhcHBlbmluZ1xuXHQvLyBidXQgaWYgdGhlIGFwcCBpcyBiYWNrZ3JvdW5kZWQsIHRoZSBsb29wIG1pZ2h0IG5vdCBiZSBjYXVnaHQgdXAgeWV0XG5cdGlmIChvYXV0aFRva2VuICYmIGFjdGlvbi5lcnJvckRhdGEgJiYgYWN0aW9uLmVycm9yRGF0YS5zdGF0dXMgPT09IEhUVFBfU1RBVFVTX0NPREUuVU5BVVRIT1JJWkVEKSB7XG5cdFx0bG9nZ2VyLmRlYnVnKCd0b2tlbiBleHBpcmVkIC0gcmVmcmVzaGluZycpXG5cdFx0eWllbGQgY2FsbChwZXJmb3JtVG9rZW5SZWZyZXNoKVxuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aFRva2VuOiBUb2tlbkFjY2Vzc0Z1bmN0aW9uID0gZnVuY3Rpb24qIChtb2RlbE5hbWU6IHN0cmluZykge1xuXHQvLyBEb24ndCB0cnkgdG8gcmVmcmVzaCB0aGUgdG9rZW4gaWYgd2UncmUgYWxyZWFkeSBpbiBhIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgdG9rZW5cblx0aWYgKG1vZGVsTmFtZSA9PT0gJ2dldFRva2VuJykge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0aWYgKG9hdXRoVG9rZW4gJiYgb2F1dGhUb2tlblsnLmV4cGlyZXMnXSkge1xuXHRcdGNvbnN0IHRoaXJ0eVNlY29uZHNGcm9tTm93ID0gbmV3IERhdGUoKVxuXHRcdHRoaXJ0eVNlY29uZHNGcm9tTm93LnNldFNlY29uZHModGhpcnR5U2Vjb25kc0Zyb21Ob3cuZ2V0U2Vjb25kcygpICsgMzApXG5cdFx0aWYgKG5ldyBEYXRlKG9hdXRoVG9rZW5bJy5leHBpcmVzJ10pIDwgdGhpcnR5U2Vjb25kc0Zyb21Ob3cpIHtcblx0XHRcdC8vIHN0YXJ0IGEgdG9rZW4gcmVmcmVzaCBhbmQgd2FpdCBmb3IgdGhlIHN1Y2Nlc3MgYWN0aW9uIGluIGNhc2UgYW5vdGhlciByZWZyZXNoIGlzIGN1cnJlbnRseSBoYXBwZW5pbmdcblx0XHRcdHlpZWxkIGNhbGwocGVyZm9ybVRva2VuUmVmcmVzaClcblx0XHRcdHJldHVybiBvYXV0aFRva2VuXG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYXV0aFRva2VuXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBhdXRoU2FnYShcblx0Y2xpZW50Q3JlZGVudGlhbHNQYXJhbTogQ2xpZW50Q3JlZGVudGlhbHMsXG5cdHRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlUGFyYW06IFRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlID0gZGVmYXVsdFRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlLFxuXHR0aWNrZXRQcm92aWRlclNlcnZpY2U6IFRpY2tldFByb3ZpZGVyU2VydmljZSA9IGRlZmF1bHRUaWNrZXRQcm92aWRlclNlcnZpY2UsXG5cdGNvZGVQcm92aWRlclNlcnZpY2U6IENvZGVQcm92aWRlclNlcnZpY2UgPSBkZWZhdWx0Q29kZVByb3ZpZGVyU2VydmljZVxuKTogU2FnYUl0ZXJhdG9yIHtcblx0bG9nZ2VyID0gZ2V0TG9nZ2VyKClcblxuXHRjbGllbnRDcmVkZW50aWFscyA9IGNsaWVudENyZWRlbnRpYWxzUGFyYW1cblx0dG9rZW5QZXJzaXN0ZW5jZVNlcnZpY2UgPSB0b2tlblBlcnNpc3RlbmNlU2VydmljZVBhcmFtXG5cblx0Ly8gVHJ5IHRvIGdldCBwZXJzaXN0ZWQgdG9rZW4gKG5vcm1hbGx5IGluIEFzeW5jU3RvcmFnZSBvciBMb2NhbFN0b3JhZ2UpXG5cdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKHRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFRva2VuKVxuXG5cdC8vIElmIG5vIHRva2VuLCB0cnkgdG8gZ2V0IENBUyB0aWNrZXQgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgdG8gZ2V0IGEgdG9rZW5cblx0aWYgKCFvYXV0aFRva2VuKSB7XG5cdFx0Y29uc3QgY2FzVGlja2V0ID0gdGlja2V0UHJvdmlkZXJTZXJ2aWNlLmdldFRpY2tldCgpXG5cdFx0dGlja2V0UHJvdmlkZXJTZXJ2aWNlLnJlbW92ZVRpY2tldCgpXG5cdFx0Y29uc3Qgc2VydmljZSA9IHRpY2tldFByb3ZpZGVyU2VydmljZS5nZXRBcHBTZXJ2aWNlTmFtZSgpXG5cdFx0aWYgKGNhc1RpY2tldCAmJiBzZXJ2aWNlKSB7XG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChjYXNUaWNrZXRMb2dpbkZsb3csIGNhc1RpY2tldCwgc2VydmljZSlcblx0XHR9XG5cdH1cblxuXHQvLyBJZiBPQXV0aCBDb2RlIGV4aXN0cyAobm9ybWFsbHkgaW4gdGhlIFVSTCksIHVzZSBpdCB0byBnZXQgYSB0b2tlblxuXHQvLyBlLmcuIExUSSwgU2hpYmJvbGV0aCwgRmFjZWJvb2ssIEdvb2dsZVxuXHRjb25zdCBjb2RlID0gY29kZVByb3ZpZGVyU2VydmljZS5nZXRDb2RlKClcblx0aWYgKGNvZGUpIHtcblx0XHQvLyBMb2cgb3V0IHRoZSBjdXJyZW50IHVzZXIgaWYgYSBuZXcgdG9rZW4gaXMgYWJvdXQgdG8gYmUgZ2VuZXJhdGVkIGZyb20gdGhlIE9BdXRoIENvZGVcblx0XHRpZiAob2F1dGhUb2tlbikge1xuXHRcdFx0eWllbGQgYWxsKHtcblx0XHRcdFx0Y2xlYXJVc2VyRGF0YTogcHV0PE1vZGVsUmVtb3ZlS2V5QWN0aW9uPih7IHR5cGU6IE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsIG1vZGVsUGF0aDogJ3VzZXInIH0pLFxuXHRcdFx0XHRjbGVhclBlcnNpc3RlbnRUb2tlbjogY2FsbCh0b2tlblBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG51bGwpXG5cdFx0XHR9KVxuXHRcdFx0b2F1dGhUb2tlbiA9IG51bGxcblx0XHR9XG5cdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZSwgY29kZSlcblx0fVxuXHRjb2RlUHJvdmlkZXJTZXJ2aWNlLnJlbW92ZUNvZGUoKVxuXG5cdHlpZWxkIHB1dDxBdXRoVG9rZW5BY3Rpb24+KHsgdHlwZTogQVVUSF9UT0tFTl9BQ1RJT05fVFlQRS5BVVRIX0lOSVRJQUxJWkVELCBvYXV0aFRva2VuIH0pXG5cblx0eWllbGQgdGFrZUV2ZXJ5KE1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFLlRSWV9GRVRDSF9GQUlMRUQsIGhhbmRsZUF1dGhGYWlsdXJlKVxuXG5cdGRvIHtcblx0XHRpZiAoIW9hdXRoVG9rZW4pIHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0Y2FzVjFBY3Rpb24sXG5cdFx0XHRcdGxvY2FsTG9naW5BY3Rpb25cblx0XHRcdH06IHtcblx0XHRcdFx0Y2FzVjFBY3Rpb24/OiBBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb25cblx0XHRcdFx0bG9jYWxMb2dpbkFjdGlvbj86IEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvblxuXHRcdFx0fSA9IHlpZWxkIHJhY2Uoe1xuXHRcdFx0XHRjYXNWMUFjdGlvbjogdGFrZShBVVRIX0NBU19WMV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLkNBU19WMV9MT0dJTl9SRVFVRVNUKSxcblx0XHRcdFx0bG9jYWxMb2dpbkFjdGlvbjogdGFrZShBVVRIX0xPQ0FMX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUuTE9DQUxfTE9HSU5fUkVRVUVTVClcblx0XHRcdH0pXG5cblx0XHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fUkVRVUVTVEVEIH0pXG5cdFx0XHRpZiAoY2FzVjFBY3Rpb24pIHtcblx0XHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoY2FzVjFMb2dpbkZsb3csIGNhc1YxQWN0aW9uKVxuXHRcdFx0fSBlbHNlIGlmIChsb2NhbExvZ2luQWN0aW9uKSB7XG5cdFx0XHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKGxvY2FsTG9naW5GbG93LCBsb2NhbExvZ2luQWN0aW9uKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvYXV0aFRva2VuKSB7XG5cdFx0XHR5aWVsZCBjYWxsKHRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgb2F1dGhUb2tlbilcblx0XHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRcdGxvZ2luU3VjY2VzczogcHV0PEF1dGhUb2tlblN1Y2Nlc3NBY3Rpb24+KHtcblx0XHRcdFx0XHR0eXBlOiBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuR0VUX1RPS0VOX1NVQ0NFRURFRCxcblx0XHRcdFx0XHRvYXV0aFRva2VuXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRnZXRVc2VySW5mbzogcHV0PE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uPih7XG5cdFx0XHRcdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdFx0XHRcdG1vZGVsTmFtZTogJ3VzZXIudXNlckluZm8nXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRsb2dPdXQ6IHRha2UoQVVUSF9BQ1RJT05fVFlQRS5MT0dfT1VUX1JFUVVFU1RFRClcblx0XHRcdH0pXG5cdFx0fSBlbHNlIHtcblx0XHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fRkFJTEVEIH0pXG5cdFx0fVxuXG5cdFx0eWllbGQgYWxsKHtcblx0XHRcdGNsZWFyVXNlckRhdGE6IHB1dDxNb2RlbFJlbW92ZUtleUFjdGlvbj4oeyB0eXBlOiBNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLCBtb2RlbFBhdGg6ICd1c2VyJyB9KSxcblx0XHRcdGNsZWFyUGVyc2lzdGVudFRva2VuOiBjYWxsKHRva2VuUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgbnVsbClcblx0XHR9KVxuXHRcdG9hdXRoVG9rZW4gPSBudWxsXG5cdH0gd2hpbGUgKHRydWUpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLG9CQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxzQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsd0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVVBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQXNCQTs7QUFFTyxNQUFNTyx5QkFBeUIsR0FBR0EsQ0FBQ0MsTUFBaUIsRUFBRUMsU0FBaUIsS0FDN0UsSUFBQUMsMENBQWlDLEVBQUNGLE1BQU0sQ0FBQyxJQUFJQSxNQUFNLENBQUNHLFNBQVMsS0FBS0Ys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
414
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfdXVpZCIsIl9jb25zdGFudHMiLCJfY29kZVByb3ZpZGVyU2VydmljZSIsIl9vYXV0aFBlcnNpc3RlbmNlU2VydmljZSIsIl90aWNrZXRQcm92aWRlclNlcnZpY2UiLCJfd2luZG93U2VydmljZSIsIl90eXBlcyIsIl9sb2dnZXIiLCJfdXJsIiwiX2FjdGlvbnMiLCJtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiYWN0aW9uIiwibW9kZWxOYW1lIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwibW9kZWxQYXRoIiwiZXhwb3J0cyIsInRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiaW5jb21pbmdBY3Rpb24iLCJtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCIsImlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uIiwidGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkIiwib2F1dGhUb2tlbiIsIm9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlIiwicmVmcmVzaExvY2siLCJsb2dnZXIiLCJnZXRUb2tlbkZyb21Db2RlIiwiY29kZSIsImFwcENvbmZpZyIsImdldEFwcENvbmZpZyIsIkNMSUVOVF9JRCIsIkNMSUVOVF9TRUNSRVQiLCJFcnJvciIsImdldFRva2VuTW9kZWxOYW1lIiwiZm9ybUJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJncmFudF90eXBlIiwiY2xpZW50X2lkIiwiY2xpZW50X3NlY3JldCIsInB1dCIsInR5cGUiLCJNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFIiwiRkVUQ0hfUkVRVUVTVCIsImJvZHkiLCJ0b1N0cmluZyIsIm5vU3RvcmUiLCJmZXRjaFJlc3VsdEFjdGlvbiIsImZldGNoRXJyb3JBY3Rpb24iLCJyYWNlIiwidGFrZSIsImRhdGEiLCJnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUiLCJzdGF0ZSIsIk9BVVRIX1BLQ0VfU0NPUEUiLCJPQVVUSF9QS0NFX0VORFBPSU5UIiwiY29kZVZlcmlmaWVyIiwiY2FsbCIsImdldFBlcnNpc3RlZENvZGVWZXJpZmllciIsInBlcnNpc3RlZFN0YXRlIiwiZ2V0UGVyc2lzdGVkU3RhdGUiLCJwZXJzaXN0U3RhdGUiLCJwZXJzaXN0Q29kZVZlcmlmaWVyIiwibG9jYXRpb24iLCJ3aW5kb3dTZXJ2aWNlIiwiZ2V0TG9jYXRpb24iLCJzY29wZSIsImNvZGVfdmVyaWZpZXIiLCJyZWRpcmVjdF91cmkiLCJvcmlnaW4iLCJnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4iLCJvYXV0aFRva2VuUGFyYW0iLCJyZWZyZXNoX3Rva2VuIiwiYXBwZW5kIiwiZXJyb3JEYXRhIiwic3RhdHVzIiwiSFRUUF9TVEFUVVNfQ09ERSIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsInBlcmZvcm1Ub2tlblJlZnJlc2giLCJyZWZyZXNoU3VjY2VzcyIsIkFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSIsIlRPS0VOX1JFRlJFU0hfU1VDQ0VFREVEIiwicmVmcmVzaEZhaWxlZCIsIkFVVEhfQUNUSU9OX1RZUEUiLCJUT0tFTl9SRUZSRVNIX0ZBSUxFRCIsImRlYnVnIiwib3JpZ2luYWxBY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsInBlcnNpc3RUb2tlbiIsImFsbCIsImxvZ091dCIsIkxPR19PVVRfUkVRVUVTVEVEIiwibG9naW5GbG93IiwibW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24iLCJjcmVkZW50aWFsc0xvZ2luRmxvdyIsIm5vUmV0cnkiLCJjYXNWMUxvZ2luRmxvdyIsImxvY2FsTG9naW5GbG93IiwiY2FzVGlja2V0TG9naW5GbG93IiwidGlja2V0Iiwic2VydmljZSIsInF1ZXJ5UGFyYW1zIiwicGtjZUxvZ2luRmxvdyIsIl8iLCJ1dWlkdjQiLCJzaGEyNTZDb2RlVmVyaWZpZXIiLCJzaGEyNTZBc3luYyIsImNvZGVDaGFsbGVuZ2UiLCJiYXNlNjRVcmxFbmNvZGUiLCJwa2NlQXV0aFJlZGlyZWN0VVJMIiwicmVzcG9uc2VfdHlwZSIsImNvZGVfY2hhbGxlbmdlIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwicmVwbGFjZSIsImhhbmRsZUF1dGhGYWlsdXJlIiwiVU5BVVRIT1JJWkVEIiwiZ2V0T0F1dGhUb2tlbiIsInRoaXJ0eVNlY29uZHNGcm9tTm93IiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwiYXV0aFNhZ2EiLCJvYXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZGVmYXVsdE9BdXRoUGVyc2lzdGVuY2VTZXJ2aWNlIiwidGlja2V0UHJvdmlkZXJTZXJ2aWNlIiwiZGVmYXVsdFRpY2tldFByb3ZpZGVyU2VydmljZSIsImNvZGVQcm92aWRlclNlcnZpY2UiLCJkZWZhdWx0Q29kZVByb3ZpZGVyU2VydmljZSIsImdldExvZ2dlciIsImdldFBlcnNpc3RlZFRva2VuIiwiY2FzVGlja2V0IiwiZ2V0VGlja2V0IiwicmVtb3ZlVGlja2V0IiwiZ2V0QXBwU2VydmljZU5hbWUiLCJnZXRDb2RlIiwiY2xlYXJVc2VyRGF0YSIsIk1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUiLCJjbGVhclBlcnNpc3RlbnRUb2tlbiIsImdldFN0YXRlIiwicmVtb3ZlQ29kZUFuZFN0YXRlIiwiQVVUSF9UT0tFTl9BQ1RJT05fVFlQRSIsIkFVVEhfSU5JVElBTElaRUQiLCJ0YWtlRXZlcnkiLCJNT0RFTF9GRVRDSF9FUlJPUl9BQ1RJT05fVFlQRSIsIlRSWV9GRVRDSF9GQUlMRUQiLCJjYXNWMUFjdGlvbiIsImxvY2FsTG9naW5BY3Rpb24iLCJwa2NlTG9naW5BY3Rpb24iLCJBVVRIX0NBU19WMV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFIiwiQ0FTX1YxX0xPR0lOX1JFUVVFU1QiLCJBVVRIX0xPQ0FMX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJMT0NBTF9MT0dJTl9SRVFVRVNUIiwiQVVUSF9QS0NFX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJQS0NFX0xPR0lOX1JFUVVFU1QiLCJMT0dJTl9SRVFVRVNURUQiLCJsb2dpblN1Y2Nlc3MiLCJHRVRfVE9LRU5fU1VDQ0VFREVEIiwiTE9HSU5fRkFJTEVEIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3NhZ2FzL2F1dGhTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhZ2FJdGVyYXRvciB9IGZyb20gJ0ByZWR1eC1zYWdhL2NvcmUnXG5pbXBvcnQgeyBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcbmltcG9ydCB7IGFsbCwgY2FsbCwgcHV0LCByYWNlLCB0YWtlLCB0YWtlRXZlcnkgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgY29kZVByb3ZpZGVyU2VydmljZSBhcyBkZWZhdWx0Q29kZVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvZGVQcm92aWRlclNlcnZpY2UnXG5pbXBvcnQgeyBvYXV0aFBlcnNpc3RlbmNlU2VydmljZSBhcyBkZWZhdWx0T0F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vYXV0aFBlcnNpc3RlbmNlU2VydmljZSdcbmltcG9ydCB7IHRpY2tldFByb3ZpZGVyU2VydmljZSBhcyBkZWZhdWx0VGlja2V0UHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGlja2V0UHJvdmlkZXJTZXJ2aWNlJ1xuaW1wb3J0IHsgd2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dpbmRvd1NlcnZpY2UnXG5pbXBvcnQge1xuXHRDb2RlUHJvdmlkZXJTZXJ2aWNlLFxuXHRIVFRQX1NUQVRVU19DT0RFLFxuXHRPQXV0aFBlcnNpc3RlbmNlU2VydmljZSxcblx0T0F1dGhUb2tlbixcblx0T0F1dGhUb2tlbk9yTnVsbCxcblx0VGlja2V0UHJvdmlkZXJTZXJ2aWNlLFxuXHRUb2tlbkFjY2Vzc0Z1bmN0aW9uXG59IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBiYXNlNjRVcmxFbmNvZGUsIHNoYTI1NkFzeW5jIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXJsJ1xuaW1wb3J0IHtcblx0QVVUSF9BQ1RJT05fVFlQRSxcblx0QVVUSF9DQVNfVjFfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9MT0NBTF9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLFxuXHRBVVRIX1BLQ0VfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9UT0tFTl9BQ1RJT05fVFlQRSxcblx0QVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLFxuXHRBdXRoQWN0aW9uLFxuXHRBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvbixcblx0QXV0aFBLQ0VMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhUb2tlbkFjdGlvbixcblx0QXV0aFRva2VuU3VjY2Vzc0FjdGlvbixcblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24sXG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaFJlc3VsdEFjdGlvbixcblx0TU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUsXG5cdE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsXG5cdE1vZGVsRmV0Y2hFcnJvckFjdGlvbixcblx0TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24sXG5cdE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24sXG5cdE1vZGVsUmVtb3ZlS2V5QWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8vI3JlZ2lvbiBIZWxwZXJzXG5cbmV4cG9ydCBjb25zdCBtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gbW9kZWxOYW1lXG5cbmV4cG9ydCBjb25zdCB0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoaW5jb21pbmdBY3Rpb24sIG1vZGVsTmFtZSlcblxuZXhwb3J0IGNvbnN0IG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24oYWN0aW9uKSAmJiBhY3Rpb24ubW9kZWxQYXRoID09PSBtb2RlbE5hbWVcblxuZXhwb3J0IGNvbnN0IHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGluY29taW5nQWN0aW9uLCBtb2RlbE5hbWUpXG5cbi8vI2VuZHJlZ2lvbiBIZWxwZXJzXG5cbi8vI3JlZ2lvbiBMb2NhbCBWYXJpYWJsZXNcblxubGV0IG9hdXRoVG9rZW46IE9BdXRoVG9rZW5Pck51bGwgPSBudWxsXG5sZXQgb2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2U6IE9BdXRoUGVyc2lzdGVuY2VTZXJ2aWNlXG5sZXQgcmVmcmVzaExvY2s6IGJvb2xlYW5cbmxldCBsb2dnZXI6IExvZ2dlclxuXG4vLyNlbmRyZWdpb24gTG9jYWwgVmFyaWFibGVzXG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tQ29kZShjb2RlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRpZiAoIWFwcENvbmZpZy5DTElFTlRfSUQgfHwgIWFwcENvbmZpZy5DTElFTlRfU0VDUkVUKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDTElFTlRfSUQgYW5kIENMSUVOVF9TRUNSRVQgYXJlIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblx0Y29uc3QgZ2V0VG9rZW5Nb2RlbE5hbWUgPSAnZ2V0VG9rZW4nXG5cdGNvbnN0IGZvcm1Cb2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0Z3JhbnRfdHlwZTogJ2F1dGhvcml6YXRpb25fY29kZScsXG5cdFx0Y2xpZW50X2lkOiBhcHBDb25maWcuQ0xJRU5UX0lELFxuXHRcdGNsaWVudF9zZWNyZXQ6IGFwcENvbmZpZy5DTElFTlRfU0VDUkVULFxuXHRcdGNvZGU6IGNvZGVcblx0fSlcblx0eWllbGQgcHV0PE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uPih7XG5cdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdG1vZGVsTmFtZTogZ2V0VG9rZW5Nb2RlbE5hbWUsXG5cdFx0Ym9keTogZm9ybUJvZHkudG9TdHJpbmcoKSxcblx0XHRub1N0b3JlOiB0cnVlXG5cdH0pXG5cdGNvbnN0IHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbixcblx0XHRmZXRjaEVycm9yQWN0aW9uXG5cdH06IHsgZmV0Y2hSZXN1bHRBY3Rpb24/OiBNb2RlbEZldGNoUmVzdWx0QWN0aW9uOyBmZXRjaEVycm9yQWN0aW9uPzogTW9kZWxGZXRjaEVycm9yQWN0aW9uIH0gPSB5aWVsZCByYWNlKHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZChnZXRUb2tlbk1vZGVsTmFtZSkpLFxuXHRcdGZldGNoRXJyb3JBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGdldFRva2VuTW9kZWxOYW1lKSlcblx0fSlcblx0aWYgKGZldGNoRXJyb3JBY3Rpb24gfHwgIWZldGNoUmVzdWx0QWN0aW9uPy5kYXRhKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRyZXR1cm4gZmV0Y2hSZXN1bHRBY3Rpb24uZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGdldFRva2VuRnJvbUNvZGVBbmRTdGF0ZShjb2RlOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRpZiAoIWFwcENvbmZpZy5DTElFTlRfSUQgfHwgIWFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFIHx8ICFhcHBDb25maWcuT0FVVEhfUEtDRV9FTkRQT0lOVCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lELCBPQVVUSF9QS0NFX1NDT1BFLCBhbmQgT0FVVEhfUEtDRV9FTkRQT0lOVCBhcmUgcmVxdWlyZWQgaW4gQXBwQ29uZmlnJylcblx0fVxuXG5cdC8vIHZhbGlkYXRlIHBlcnNpc3RlZCB2YWx1ZXNcblx0Y29uc3QgY29kZVZlcmlmaWVyID0geWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRDb2RlVmVyaWZpZXIpXG5cdGlmICghY29kZVZlcmlmaWVyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvZGVfdmVyaWZpZXInKVxuXHR9XG5cdGNvbnN0IHBlcnNpc3RlZFN0YXRlID0geWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRTdGF0ZSlcblx0aWYgKHBlcnNpc3RlZFN0YXRlICE9PSBzdGF0ZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzdGF0ZScpXG5cdH1cblx0Ly8gY2xlYXIgcGVyc2lzdGVkIHZhbHVlc1xuXHR5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RTdGF0ZSwgbnVsbClcblx0eWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0Q29kZVZlcmlmaWVyLCBudWxsKVxuXG5cdC8vIGRpc3BhdGNoIHJlcXVlc3Rcblx0Y29uc3QgZ2V0VG9rZW5Nb2RlbE5hbWUgPSAnZ2V0VG9rZW4nXG5cdGNvbnN0IGxvY2F0aW9uID0gd2luZG93U2VydmljZS5nZXRMb2NhdGlvbigpXG5cdGNvbnN0IGZvcm1Cb2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0Z3JhbnRfdHlwZTogJ2F1dGhvcml6YXRpb25fY29kZScsXG5cdFx0Y2xpZW50X2lkOiBhcHBDb25maWcuQ0xJRU5UX0lELFxuXHRcdHNjb3BlOiBhcHBDb25maWcuT0FVVEhfUEtDRV9TQ09QRSxcblx0XHRjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXG5cdFx0cmVkaXJlY3RfdXJpOiBsb2NhdGlvbi5vcmlnaW4sXG5cdFx0Y29kZTogY29kZVxuXHR9KVxuXHR5aWVsZCBwdXQ8TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24+KHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiBnZXRUb2tlbk1vZGVsTmFtZSxcblx0XHRib2R5OiBmb3JtQm9keS50b1N0cmluZygpLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbiB8fCAhZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuKG9hdXRoVG9rZW5QYXJhbTogT0F1dGhUb2tlbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGlmICghYXBwQ29uZmlnLkNMSUVOVF9JRCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lEIGlzIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblxuXHRjb25zdCBnZXRUb2tlbk1vZGVsTmFtZSA9ICdnZXRUb2tlbidcblx0Y29uc3QgZm9ybUJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcblx0XHRncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG5cdFx0Y2xpZW50X2lkOiBhcHBDb25maWcuQ0xJRU5UX0lELFxuXHRcdHJlZnJlc2hfdG9rZW46IG9hdXRoVG9rZW5QYXJhbS5yZWZyZXNoX3Rva2VuXG5cdH0pXG5cdC8vIGNyZWF0ZSB0aGUgZm9ybSBib2R5IGJhc2VkIG9uIGlmIHVzaW5nIGEgY2xpZW50X3NlY3JldDogdHJhZGl0aW9uYWwgT0F1dGggdnMuIFBLQ0UgZmxvd1xuXHRpZiAoYXBwQ29uZmlnLkNMSUVOVF9TRUNSRVQpIHtcblx0XHRmb3JtQm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVClcblx0fVxuXHR5aWVsZCBwdXQ8TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24+KHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiBnZXRUb2tlbk1vZGVsTmFtZSxcblx0XHRib2R5OiBmb3JtQm9keS50b1N0cmluZygpLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHQvLyBhbnkgZXJyb3IgcmVzcG9uc2Vcblx0aWYgKGZldGNoRXJyb3JBY3Rpb24pIHtcblx0XHQvLyBpZ25vcmUgc2VydmVyIGVycm9yc1xuXHRcdGlmIChcblx0XHRcdGZldGNoRXJyb3JBY3Rpb24uZXJyb3JEYXRhPy5zdGF0dXMgJiZcblx0XHRcdGZldGNoRXJyb3JBY3Rpb24uZXJyb3JEYXRhLnN0YXR1cyA+PSBIVFRQX1NUQVRVU19DT0RFLklOVEVSTkFMX1NFUlZFUl9FUlJPUlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG9hdXRoVG9rZW5QYXJhbVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdC8vIGZvciBzb21lIHJlYXNvbiB0aGUgcmVzcG9uc2UgaGFkIG5vIGJvZHlcblx0aWYgKCFmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0cmV0dXJuIGZldGNoUmVzdWx0QWN0aW9uLmRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBwZXJmb3JtVG9rZW5SZWZyZXNoKCk6IFNhZ2FJdGVyYXRvciB7XG5cdGlmIChyZWZyZXNoTG9jayB8fCAhb2F1dGhUb2tlbikge1xuXHRcdC8vIGFscmVhZHkgcmVmcmVzaGluZy4gd2FpdCBmb3IgdGhlIGN1cnJlbnQgcmVmcmVzaCB0byBzdWNjZWVkIG9yIGZhaWwuXG5cdFx0eWllbGQgcmFjZSh7XG5cdFx0XHRyZWZyZXNoU3VjY2VzczogdGFrZShBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQpLFxuXHRcdFx0cmVmcmVzaEZhaWxlZDogdGFrZShBVVRIX0FDVElPTl9UWVBFLlRPS0VOX1JFRlJFU0hfRkFJTEVEKVxuXHRcdH0pXG5cdFx0cmV0dXJuXG5cdH1cblx0bG9nZ2VyLmRlYnVnKCdSZWZyZXNoaW5nIE9BdXRoIHRva2VuJylcblx0cmVmcmVzaExvY2sgPSB0cnVlXG5cdC8vIG9hdXRoVG9rZW4gd2lsbCBiZSBzZXQgdG86XG5cdC8vIDEuIG5ldyB0b2tlbiAoc3VjY2Vzcylcblx0Ly8gMi4gc2FtZSB0b2tlbiAoZmFpbGVkIGZyb20gdGltZW91dCBvciBzZXJ2ZXIgZXJyb3IpXG5cdC8vIDMuIG51bGwgKGZhaWwpXG5cdGNvbnN0IG9yaWdpbmFsQWNjZXNzVG9rZW4gPSBvYXV0aFRva2VuLmFjY2Vzc190b2tlblxuXHRvYXV0aFRva2VuID0geWllbGQgY2FsbChnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4sIG9hdXRoVG9rZW4pXG5cdGlmICghIW9hdXRoVG9rZW4gJiYgb2F1dGhUb2tlbi5hY2Nlc3NfdG9rZW4gIT09IG9yaWdpbmFsQWNjZXNzVG9rZW4pIHtcblx0XHRsb2dnZXIuZGVidWcoJ09BdXRoIHRva2VuIHJlZnJlc2hlZCcpXG5cdFx0eWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG9hdXRoVG9rZW4pXG5cdFx0eWllbGQgcHV0PEF1dGhUb2tlblN1Y2Nlc3NBY3Rpb24+KHsgdHlwZTogQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLlRPS0VOX1JFRlJFU0hfU1VDQ0VFREVELCBvYXV0aFRva2VuIH0pXG5cdH0gZWxzZSBpZiAob2F1dGhUb2tlbiA9PT0gbnVsbCkge1xuXHRcdGxvZ2dlci5kZWJ1ZygnT0F1dGggdG9rZW4gZmFpbGVkIHRvIHJlZnJlc2gnKVxuXHRcdC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBvdXRzaWRlIG9mIHRoZSB0b2tlbiBoYXZpbmcgYmVlbiByZXZva2VkIG9uIHRoZSBzZXJ2ZXIgc2lkZVxuXHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRyZWZyZXNoRmFpbGVkOiBwdXQ8QXV0aEFjdGlvbj4oeyB0eXBlOiBBVVRIX0FDVElPTl9UWVBFLlRPS0VOX1JFRlJFU0hfRkFJTEVEIH0pLFxuXHRcdFx0bG9nT3V0OiBwdXQ8QXV0aEFjdGlvbj4oeyB0eXBlOiBBVVRIX0FDVElPTl9UWVBFLkxPR19PVVRfUkVRVUVTVEVEIH0pXG5cdFx0fSlcblx0fVxuXHRyZWZyZXNoTG9jayA9IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbG9naW5GbG93KG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdHlpZWxkIHB1dChtb2RlbEZldGNoUmVxdWVzdEFjdGlvbilcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLm1vZGVsTmFtZSkpLFxuXHRcdGZldGNoRXJyb3JBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLm1vZGVsTmFtZSkpXG5cdH0pXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRjb25zdCBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YT8uY29kZVxuXHRpZiAoIWNvZGUpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGdldFRva2VuRnJvbUNvZGUsIGNvZGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY3JlZGVudGlhbHNMb2dpbkZsb3coXG5cdGFjdGlvbjogQXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uIHwgQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRtb2RlbE5hbWU6IHN0cmluZ1xuKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb246IE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uID0ge1xuXHRcdC8vIHNldCByZXF1aXJlZCBkZWZhdWx0c1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWUsXG5cdFx0bm9TdG9yZTogdHJ1ZSxcblx0XHQvLyBmb3JjZSBubyByZXRyeVxuXHRcdG5vUmV0cnk6IHRydWUsXG5cdFx0Ly8gcGFzcyB0aHJ1IGJvZHlcblx0XHRib2R5OiBhY3Rpb24uYm9keVxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGxvZ2luRmxvdywgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY2FzVjFMb2dpbkZsb3coYWN0aW9uOiBBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRyZXR1cm4geWllbGQgY2FsbChjcmVkZW50aWFsc0xvZ2luRmxvdywgYWN0aW9uLCAnY29kZUZyb21DYXNWMScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbG9jYWxMb2dpbkZsb3coYWN0aW9uOiBBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRyZXR1cm4geWllbGQgY2FsbChjcmVkZW50aWFsc0xvZ2luRmxvdywgYWN0aW9uLCAnY29kZUZyb21Mb2NhbENyZWRlbnRpYWxzJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjYXNUaWNrZXRMb2dpbkZsb3codGlja2V0OiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZyk6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbiA9IHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiAnY29kZUZyb21DYXNUaWNrZXQnLFxuXHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0cXVlcnlQYXJhbXM6IHtcblx0XHRcdHRpY2tldCxcblx0XHRcdHNlcnZpY2Vcblx0XHR9XG5cdH1cblx0cmV0dXJuIHlpZWxkIGNhbGwobG9naW5GbG93LCBtb2RlbEZldGNoUmVxdWVzdEFjdGlvbilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBwa2NlTG9naW5GbG93KF86IEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFhcHBDb25maWcuQ0xJRU5UX0lEIHx8ICFhcHBDb25maWcuT0FVVEhfUEtDRV9TQ09QRSB8fCAhYXBwQ29uZmlnLk9BVVRIX1BLQ0VfRU5EUE9JTlQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NMSUVOVF9JRCwgT0FVVEhfUEtDRV9TQ09QRSwgYW5kIE9BVVRIX1BLQ0VfRU5EUE9JTlQgYXJlIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSBzdGF0ZSBhbmQgY29kZSB2ZXJpZmllciB2YWx1ZXNcblx0Y29uc3Qgc3RhdGUgPSB1dWlkdjQoKVxuXHRjb25zdCBjb2RlVmVyaWZpZXIgPSB1dWlkdjQoKVxuXHRjb25zdCBzaGEyNTZDb2RlVmVyaWZpZXIgPSB5aWVsZCBjYWxsKHNoYTI1NkFzeW5jLCBjb2RlVmVyaWZpZXIpXG5cdGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSB5aWVsZCBjYWxsKGJhc2U2NFVybEVuY29kZSwgc2hhMjU2Q29kZVZlcmlmaWVyKVxuXG5cdC8vIFBlcnNpc3Qgc3RhdGUgYW5kIGNvZGUgdmVyaWZpZXIgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdXNlIGFmdGVyIGNvZGUgZmxvdyByZWRpcmVjdC5cblx0eWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0U3RhdGUsIHN0YXRlKVxuXHR5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RDb2RlVmVyaWZpZXIsIGNvZGVWZXJpZmllcilcblxuXHQvLyBSZWRpcmVjdCB0byBCUyBjb2RlIGZsb3cgYXV0aCBlbmRwb2ludCAod2hpY2ggd2lsbCByZWRpcmVjdCBiYWNrIGhlcmUpXG5cdGNvbnN0IGxvY2F0aW9uID0gd2luZG93U2VydmljZS5nZXRMb2NhdGlvbigpXG5cdGNvbnN0IHBrY2VBdXRoUmVkaXJlY3RVUkwgPSBgJHthcHBDb25maWcuT0FVVEhfUEtDRV9FTkRQT0lOVH0/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKHtcblx0XHRyZXNwb25zZV90eXBlOiAnY29kZScsXG5cdFx0Y2xpZW50X2lkOiBhcHBDb25maWcuQ0xJRU5UX0lELFxuXHRcdHN0YXRlOiBzdGF0ZSxcblx0XHRzY29wZTogYXBwQ29uZmlnLk9BVVRIX1BLQ0VfU0NPUEUsXG5cdFx0Y29kZV9jaGFsbGVuZ2U6IGNvZGVDaGFsbGVuZ2UsXG5cdFx0Y29kZV9jaGFsbGVuZ2VfbWV0aG9kOiAnUzI1NicsXG5cdFx0cmVkaXJlY3RfdXJpOiBsb2NhdGlvbi5vcmlnaW5cblx0fSl9YFxuXHR5aWVsZCBjYWxsKHdpbmRvd1NlcnZpY2UucmVwbGFjZSwgcGtjZUF1dGhSZWRpcmVjdFVSTClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBoYW5kbGVBdXRoRmFpbHVyZShhY3Rpb246IE1vZGVsRmV0Y2hFcnJvckFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdC8vIFRoaXMgc2hvdWxkIGJlIHVubGlrZWx5IHNpbmNlIHdlIG5vcm1hbGx5IGhhdmUgYSByZWZyZXNoIHRva2VuIGxvb3AgaGFwcGVuaW5nXG5cdC8vIGJ1dCBpZiB0aGUgYXBwIGlzIGJhY2tncm91bmRlZCwgdGhlIGxvb3AgbWlnaHQgbm90IGJlIGNhdWdodCB1cCB5ZXRcblx0aWYgKG9hdXRoVG9rZW4gJiYgYWN0aW9uLmVycm9yRGF0YSAmJiBhY3Rpb24uZXJyb3JEYXRhLnN0YXR1cyA9PT0gSFRUUF9TVEFUVVNfQ09ERS5VTkFVVEhPUklaRUQpIHtcblx0XHRsb2dnZXIuZGVidWcoJ3Rva2VuIGV4cGlyZWQgLSByZWZyZXNoaW5nJylcblx0XHR5aWVsZCBjYWxsKHBlcmZvcm1Ub2tlblJlZnJlc2gpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoVG9rZW46IFRva2VuQWNjZXNzRnVuY3Rpb24gPSBmdW5jdGlvbiogKG1vZGVsTmFtZTogc3RyaW5nKSB7XG5cdC8vIERvbid0IHRyeSB0byByZWZyZXNoIHRoZSB0b2tlbiBpZiB3ZSdyZSBhbHJlYWR5IGluIGEgcmVxdWVzdCB0byByZWZyZXNoIHRoZSB0b2tlblxuXHRpZiAobW9kZWxOYW1lID09PSAnZ2V0VG9rZW4nKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRpZiAob2F1dGhUb2tlbiAmJiBvYXV0aFRva2VuWycuZXhwaXJlcyddKSB7XG5cdFx0Y29uc3QgdGhpcnR5U2Vjb25kc0Zyb21Ob3cgPSBuZXcgRGF0ZSgpXG5cdFx0dGhpcnR5U2Vjb25kc0Zyb21Ob3cuc2V0U2Vjb25kcyh0aGlydHlTZWNvbmRzRnJvbU5vdy5nZXRTZWNvbmRzKCkgKyAzMClcblx0XHRpZiAobmV3IERhdGUob2F1dGhUb2tlblsnLmV4cGlyZXMnXSkgPCB0aGlydHlTZWNvbmRzRnJvbU5vdykge1xuXHRcdFx0Ly8gc3RhcnQgYSB0b2tlbiByZWZyZXNoIGFuZCB3YWl0IGZvciB0aGUgc3VjY2VzcyBhY3Rpb24gaW4gY2FzZSBhbm90aGVyIHJlZnJlc2ggaXMgY3VycmVudGx5IGhhcHBlbmluZ1xuXHRcdFx0eWllbGQgY2FsbChwZXJmb3JtVG9rZW5SZWZyZXNoKVxuXHRcdFx0cmV0dXJuIG9hdXRoVG9rZW5cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9hdXRoVG9rZW5cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qIGF1dGhTYWdhKFxuXHRvYXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtOiBPQXV0aFBlcnNpc3RlbmNlU2VydmljZSA9IGRlZmF1bHRPQXV0aFBlcnNpc3RlbmNlU2VydmljZSxcblx0dGlja2V0UHJvdmlkZXJTZXJ2aWNlOiBUaWNrZXRQcm92aWRlclNlcnZpY2UgPSBkZWZhdWx0VGlja2V0UHJvdmlkZXJTZXJ2aWNlLFxuXHRjb2RlUHJvdmlkZXJTZXJ2aWNlOiBDb2RlUHJvdmlkZXJTZXJ2aWNlID0gZGVmYXVsdENvZGVQcm92aWRlclNlcnZpY2Vcbik6IFNhZ2FJdGVyYXRvciB7XG5cdGxvZ2dlciA9IGdldExvZ2dlcigpXG5cdG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlID0gb2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2VQYXJhbVxuXG5cdC8vIFRyeSB0byBnZXQgcGVyc2lzdGVkIHRva2VuIChub3JtYWxseSBpbiBBc3luY1N0b3JhZ2Ugb3IgTG9jYWxTdG9yYWdlKVxuXHRvYXV0aFRva2VuID0geWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRUb2tlbilcblxuXHQvLyBJZiBubyB0b2tlbiwgdHJ5IHRvIGdldCBDQVMgdGlja2V0IChub3JtYWxseSBpbiB0aGUgVVJMKSwgdXNlIGl0IHRvIGdldCBhIHRva2VuXG5cdGlmICghb2F1dGhUb2tlbikge1xuXHRcdGNvbnN0IGNhc1RpY2tldCA9IHRpY2tldFByb3ZpZGVyU2VydmljZS5nZXRUaWNrZXQoKVxuXHRcdHRpY2tldFByb3ZpZGVyU2VydmljZS5yZW1vdmVUaWNrZXQoKVxuXHRcdGNvbnN0IHNlcnZpY2UgPSB0aWNrZXRQcm92aWRlclNlcnZpY2UuZ2V0QXBwU2VydmljZU5hbWUoKVxuXHRcdGlmIChjYXNUaWNrZXQgJiYgc2VydmljZSkge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoY2FzVGlja2V0TG9naW5GbG93LCBjYXNUaWNrZXQsIHNlcnZpY2UpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgT0F1dGggQ29kZSBleGlzdHMgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgdG8gZ2V0IGEgdG9rZW5cblx0Y29uc3QgY29kZSA9IGNvZGVQcm92aWRlclNlcnZpY2UuZ2V0Q29kZSgpXG5cdGlmIChjb2RlKSB7XG5cdFx0Ly8gTG9nIG91dCB0aGUgY3VycmVudCB1c2VyIGlmIGEgbmV3IHRva2VuIGlzIGFib3V0IHRvIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBPQXV0aCBDb2RlXG5cdFx0aWYgKG9hdXRoVG9rZW4pIHtcblx0XHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRcdGNsZWFyVXNlckRhdGE6IHB1dDxNb2RlbFJlbW92ZUtleUFjdGlvbj4oeyB0eXBlOiBNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLCBtb2RlbFBhdGg6ICd1c2VyJyB9KSxcblx0XHRcdFx0Y2xlYXJQZXJzaXN0ZW50VG9rZW46IGNhbGwob2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBudWxsKVxuXHRcdFx0fSlcblx0XHRcdG9hdXRoVG9rZW4gPSBudWxsXG5cdFx0fVxuXG5cdFx0Ly8gSWYgT0F1dGggc3RhdGUgZXhpc3RzIChub3JtYWxseSBpbiB0aGUgVVJMKSwgdXNlIGl0IGluIGFkZGl0aW9uIHRvIHRoZSBjb2RlIGZvciBQS0NFIGxvZ2luIGZsb3dcblx0XHRjb25zdCBzdGF0ZSA9IGNvZGVQcm92aWRlclNlcnZpY2UuZ2V0U3RhdGUoKVxuXHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZUFuZFN0YXRlLCBjb2RlLCBzdGF0ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZSwgY29kZSlcblx0XHR9XG5cdH1cblx0Y29kZVByb3ZpZGVyU2VydmljZS5yZW1vdmVDb2RlQW5kU3RhdGUoKVxuXG5cdHlpZWxkIHB1dDxBdXRoVG9rZW5BY3Rpb24+KHsgdHlwZTogQVVUSF9UT0tFTl9BQ1RJT05fVFlQRS5BVVRIX0lOSVRJQUxJWkVELCBvYXV0aFRva2VuIH0pXG5cblx0eWllbGQgdGFrZUV2ZXJ5KE1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFLlRSWV9GRVRDSF9GQUlMRUQsIGhhbmRsZUF1dGhGYWlsdXJlKVxuXG5cdGRvIHtcblx0XHRpZiAoIW9hdXRoVG9rZW4pIHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0Y2FzVjFBY3Rpb24sXG5cdFx0XHRcdGxvY2FsTG9naW5BY3Rpb24sXG5cdFx0XHRcdHBrY2VMb2dpbkFjdGlvblxuXHRcdFx0fToge1xuXHRcdFx0XHRjYXNWMUFjdGlvbj86IEF1dGhDYXNWMUxvZ2luUmVxdWVzdEFjdGlvblxuXHRcdFx0XHRsb2NhbExvZ2luQWN0aW9uPzogQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uXG5cdFx0XHRcdHBrY2VMb2dpbkFjdGlvbj86IEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uXG5cdFx0XHR9ID0geWllbGQgcmFjZSh7XG5cdFx0XHRcdGNhc1YxQWN0aW9uOiB0YWtlKEFVVEhfQ0FTX1YxX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUuQ0FTX1YxX0xPR0lOX1JFUVVFU1QpLFxuXHRcdFx0XHRsb2NhbExvZ2luQWN0aW9uOiB0YWtlKEFVVEhfTE9DQUxfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRS5MT0NBTF9MT0dJTl9SRVFVRVNUKSxcblx0XHRcdFx0cGtjZUxvZ2luQWN0aW9uOiB0YWtlKEFVVEhfUEtDRV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLlBLQ0VfTE9HSU5fUkVRVUVTVClcblx0XHRcdH0pXG5cblx0XHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fUkVRVUVTVEVEIH0pXG5cdFx0XHRpZiAoY2FzVjFBY3Rpb24pIHtcblx0XHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoY2FzVjFMb2dpbkZsb3csIGNhc1YxQWN0aW9uKVxuXHRcdFx0fSBlbHNlIGlmIChsb2NhbExvZ2luQWN0aW9uKSB7XG5cdFx0XHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKGxvY2FsTG9naW5GbG93LCBsb2NhbExvZ2luQWN0aW9uKVxuXHRcdFx0fSBlbHNlIGlmIChwa2NlTG9naW5BY3Rpb24pIHtcblx0XHRcdFx0Ly8gb2F1dGhUb2tlbiBpcyBub3QgcmV0dXJuZWQgaGVyZSwgYXMgdGhpcyBmbG93IHdpbGwgcmVzdWx0IGluIGEgd2luZG93IHJlZGlyZWN0XG5cdFx0XHRcdHlpZWxkIGNhbGwocGtjZUxvZ2luRmxvdywgcGtjZUxvZ2luQWN0aW9uKVxuXHRcdFx0XHQvLyBicmVhayBleGVjdXRpb25cblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG9hdXRoVG9rZW4pIHtcblx0XHRcdHlpZWxkIGNhbGwob2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBvYXV0aFRva2VuKVxuXHRcdFx0eWllbGQgYWxsKHtcblx0XHRcdFx0bG9naW5TdWNjZXNzOiBwdXQ8QXV0aFRva2VuU3VjY2Vzc0FjdGlvbj4oe1xuXHRcdFx0XHRcdHR5cGU6IEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRS5HRVRfVE9LRU5fU1VDQ0VFREVELFxuXHRcdFx0XHRcdG9hdXRoVG9rZW5cblx0XHRcdFx0fSksXG5cdFx0XHRcdGxvZ091dDogdGFrZShBVVRIX0FDVElPTl9UWVBFLkxPR19PVVRfUkVRVUVTVEVEKVxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0eWllbGQgcHV0PEF1dGhBY3Rpb24+KHsgdHlwZTogQVVUSF9BQ1RJT05fVFlQRS5MT0dJTl9GQUlMRUQgfSlcblx0XHR9XG5cblx0XHR5aWVsZCBhbGwoe1xuXHRcdFx0Y2xlYXJVc2VyRGF0YTogcHV0PE1vZGVsUmVtb3ZlS2V5QWN0aW9uPih7IHR5cGU6IE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsIG1vZGVsUGF0aDogJ3VzZXInIH0pLFxuXHRcdFx0Y2xlYXJQZXJzaXN0ZW50VG9rZW46IGNhbGwob2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBudWxsKVxuXHRcdH0pXG5cdFx0b2F1dGhUb2tlbiA9IG51bGxcblx0fSB3aGlsZSAodHJ1ZSlcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxvQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksd0JBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLHNCQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFTQSxJQUFBUSxPQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxJQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxRQUFBLEdBQUFWLE9BQUE7QUF3QkE7O0FBRU8sTUFBTVcseUJBQXlCLEdBQUdBLENBQUNDLE1BQWlCLEVBQUVDLFNBQWlCLEtBQzdFLElBQUFDLDBDQUFpQyxFQUFDRixNQUFNLENBQUMsSUFBSUEsTUFBTSxDQUFDRyxT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
@@ -1 +1,2 @@
1
- export default function initialDataLoadSaga(): void;
1
+ import { SagaIterator } from '@redux-saga/core';
2
+ export default function initialDataLoadSaga(): SagaIterator;
@@ -4,8 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = initialDataLoadSaga;
7
+ var _effects = require("redux-saga/effects");
7
8
  var _actionCreator = require("../actionCreator");
8
- function initialDataLoadSaga() {
9
+ function* initialDataLoadSaga() {
9
10
  (0, _actionCreator.dispatchPeriodicModelFetchRequest)({
10
11
  modelName: 'configuration',
11
12
  period: 1000 * 60 * 60 * 24,
@@ -37,5 +38,7 @@ function initialDataLoadSaga() {
37
38
  taskId: 'time-sync',
38
39
  noStore: true
39
40
  });
41
+ // noop call to allow this method to be a generator
42
+ yield (0, _effects.call)(() => {});
40
43
  }
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9uQ3JlYXRvciIsInJlcXVpcmUiLCJpbml0aWFsRGF0YUxvYWRTYWdhIiwiZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0IiwibW9kZWxOYW1lIiwicGVyaW9kIiwidGFza0lkIiwibm9TdG9yZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9pbml0aWFsRGF0YUxvYWRTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCB9IGZyb20gJy4uL2FjdGlvbkNyZWF0b3InXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxEYXRhTG9hZFNhZ2EoKSB7XG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0bW9kZWxOYW1lOiAnY29uZmlndXJhdGlvbicsXG5cdFx0cGVyaW9kOiAxMDAwICogNjAgKiA2MCAqIDI0LCAvLyBncmFiIGNvbmZpZ3Mgb25jZSBhIGRheSAoZm9yIHRob3NlIHRhYi1sZWF2ZXItb3BlbmVycylcblx0XHR0YXNrSWQ6ICdjb25maWd1cmF0aW9uLXJlZnJlc2gnXG5cdH0pXG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0bW9kZWxOYW1lOiAnZXh0ZXJuYWxUZXJtcycsXG5cdFx0cGVyaW9kOiAxMDAwICogNjAgKiA2MCAqIDI0LCAvLyBncmFiIGV4dGVybmFsIHRlcm1zIG9uY2UgYSBkYXkgKGZvciB0aG9zZSB0YWItbGVhdmVyLW9wZW5lcnMpXG5cdFx0dGFza0lkOiAnZXh0ZXJuYWwtdGVybS1yZWZyZXNoJ1xuXHR9KVxuXHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZTogJ2lkZW50aXR5UHJvdmlkZXJzJyxcblx0XHRwZXJpb2Q6IDEwMDAgKiA2MCAqIDYwICogMjQsIC8vIGdyYWIgaWRlbnRpdHkgcHJvdmlkZXJzIG9uY2UgYSBkYXkgKGZvciB0aG9zZSB0YWItbGVhdmVyLW9wZW5lcnMpXG5cdFx0dGFza0lkOiAnaWRlbnRpdHktcHJvdmlkZXItcmVmcmVzaCdcblx0fSlcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICdjbGllbnQnLFxuXHRcdHBlcmlvZDogMTAwMCAqIDYwICogMTUsIC8vIGdyYWIgY2xpZW50IGV2ZXJ5IDE1IG1pbnV0ZXNcblx0XHR0YXNrSWQ6ICdjbGllbnQtcmVmcmVzaCdcblx0fSlcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICd0aW1lJyxcblx0XHRwZXJpb2Q6IDEwMDAgKiA2MCAqIDE1LCAvLyBncmFiIGFjY3VyYXRlIHNlcnZlciB0aW1lIGV2ZXJ5IDE1IG1pbnV0ZXNcblx0XHR0YXNrSWQ6ICd0aW1lLXN5bmMnLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsY0FBQSxHQUFBQyxPQUFBO0FBRWUsU0FBU0MsbUJBQW1CQSxDQUFBLEVBQUc7RUFDN0MsSUFBQUMsZ0RBQWlDLEVBQUM7SUFDakNDLFNBQVMsRUFBRSxlQUFlO0lBQzFCQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUFFO0lBQzdCQyxNQUFNLEVBQUU7RUFDVCxDQUFDLENBQUM7RUFDRixJQUFBSCxnREFBaUMsRUFBQztJQUNqQ0MsU0FBUyxFQUFFLGVBQWU7SUFDMUJDLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQUU7SUFDN0JDLE1BQU0sRUFBRTtFQUNULENBQUMsQ0FBQztFQUNGLElBQUFILGdEQUFpQyxFQUFDO0lBQ2pDQyxTQUFTLEVBQUUsbUJBQW1CO0lBQzlCQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUFFO0lBQzdCQyxNQUFNLEVBQUU7RUFDVCxDQUFDLENBQUM7RUFDRixJQUFBSCxnREFBaUMsRUFBQztJQUNqQ0MsU0FBUyxFQUFFLFFBQVE7SUFDbkJDLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFBRTtJQUN4QkMsTUFBTSxFQUFFO0VBQ1QsQ0FBQyxDQUFDO0VBQ0YsSUFBQUgsZ0RBQWlDLEVBQUM7SUFDakNDLFNBQVMsRUFBRSxNQUFNO0lBQ2pCQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQUU7SUFDeEJDLE1BQU0sRUFBRSxXQUFXO0lBQ25CQyxPQUFPLEVBQUU7RUFDVixDQUFDLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfYWN0aW9uQ3JlYXRvciIsImluaXRpYWxEYXRhTG9hZFNhZ2EiLCJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3QiLCJtb2RlbE5hbWUiLCJwZXJpb2QiLCJ0YXNrSWQiLCJub1N0b3JlIiwiY2FsbCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9pbml0aWFsRGF0YUxvYWRTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhZ2FJdGVyYXRvciB9IGZyb20gJ0ByZWR1eC1zYWdhL2NvcmUnXG5pbXBvcnQgeyBjYWxsIH0gZnJvbSAncmVkdXgtc2FnYS9lZmZlY3RzJ1xuaW1wb3J0IHsgZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0IH0gZnJvbSAnLi4vYWN0aW9uQ3JlYXRvcidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qIGluaXRpYWxEYXRhTG9hZFNhZ2EoKTogU2FnYUl0ZXJhdG9yIHtcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICdjb25maWd1cmF0aW9uJyxcblx0XHRwZXJpb2Q6IDEwMDAgKiA2MCAqIDYwICogMjQsIC8vIGdyYWIgY29uZmlncyBvbmNlIGEgZGF5IChmb3IgdGhvc2UgdGFiLWxlYXZlci1vcGVuZXJzKVxuXHRcdHRhc2tJZDogJ2NvbmZpZ3VyYXRpb24tcmVmcmVzaCdcblx0fSlcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICdleHRlcm5hbFRlcm1zJyxcblx0XHRwZXJpb2Q6IDEwMDAgKiA2MCAqIDYwICogMjQsIC8vIGdyYWIgZXh0ZXJuYWwgdGVybXMgb25jZSBhIGRheSAoZm9yIHRob3NlIHRhYi1sZWF2ZXItb3BlbmVycylcblx0XHR0YXNrSWQ6ICdleHRlcm5hbC10ZXJtLXJlZnJlc2gnXG5cdH0pXG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0bW9kZWxOYW1lOiAnaWRlbnRpdHlQcm92aWRlcnMnLFxuXHRcdHBlcmlvZDogMTAwMCAqIDYwICogNjAgKiAyNCwgLy8gZ3JhYiBpZGVudGl0eSBwcm92aWRlcnMgb25jZSBhIGRheSAoZm9yIHRob3NlIHRhYi1sZWF2ZXItb3BlbmVycylcblx0XHR0YXNrSWQ6ICdpZGVudGl0eS1wcm92aWRlci1yZWZyZXNoJ1xuXHR9KVxuXHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZTogJ2NsaWVudCcsXG5cdFx0cGVyaW9kOiAxMDAwICogNjAgKiAxNSwgLy8gZ3JhYiBjbGllbnQgZXZlcnkgMTUgbWludXRlc1xuXHRcdHRhc2tJZDogJ2NsaWVudC1yZWZyZXNoJ1xuXHR9KVxuXHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZTogJ3RpbWUnLFxuXHRcdHBlcmlvZDogMTAwMCAqIDYwICogMTUsIC8vIGdyYWIgYWNjdXJhdGUgc2VydmVyIHRpbWUgZXZlcnkgMTUgbWludXRlc1xuXHRcdHRhc2tJZDogJ3RpbWUtc3luYycsXG5cdFx0bm9TdG9yZTogdHJ1ZVxuXHR9KVxuXHQvLyBub29wIGNhbGwgdG8gYWxsb3cgdGhpcyBtZXRob2QgdG8gYmUgYSBnZW5lcmF0b3Jcblx0eWllbGQgY2FsbCgoKSA9PiB7fSlcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRCxPQUFBO0FBRWUsVUFBVUUsbUJBQW1CQSxDQUFBLEVBQWlCO0VBQzVELElBQUFDLGdEQUFpQyxFQUFDO0lBQ2pDQyxTQUFTLEVBQUUsZUFBZTtJQUMxQkMsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFBRTtJQUM3QkMsTUFBTSxFQUFFO0VBQ1QsQ0FBQyxDQUFDO0VBQ0YsSUFBQUgsZ0RBQWlDLEVBQUM7SUFDakNDLFNBQVMsRUFBRSxlQUFlO0lBQzFCQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUFFO0lBQzdCQyxNQUFNLEVBQUU7RUFDVCxDQUFDLENBQUM7RUFDRixJQUFBSCxnREFBaUMsRUFBQztJQUNqQ0MsU0FBUyxFQUFFLG1CQUFtQjtJQUM5QkMsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFBRTtJQUM3QkMsTUFBTSxFQUFFO0VBQ1QsQ0FBQyxDQUFDO0VBQ0YsSUFBQUgsZ0RBQWlDLEVBQUM7SUFDakNDLFNBQVMsRUFBRSxRQUFRO0lBQ25CQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQUU7SUFDeEJDLE1BQU0sRUFBRTtFQUNULENBQUMsQ0FBQztFQUNGLElBQUFILGdEQUFpQyxFQUFDO0lBQ2pDQyxTQUFTLEVBQUUsTUFBTTtJQUNqQkMsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUFFO0lBQ3hCQyxNQUFNLEVBQUUsV0FBVztJQUNuQkMsT0FBTyxFQUFFO0VBQ1YsQ0FBQyxDQUFDO0VBQ0Y7RUFDQSxNQUFNLElBQUFDLGFBQUksRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JCIiwiaWdub3JlTGlzdCI6W119
@@ -28,6 +28,11 @@ function* postLoginDataSaga() {
28
28
  const externalProvidersTaskId = 'external-provider-refresh';
29
29
  while (true) {
30
30
  yield (0, _effects.take)(_actions.AUTH_TOKEN_SUCCESS_ACTION_TYPE.GET_TOKEN_SUCCEEDED);
31
+
32
+ // load userInfo on initial login
33
+ (0, _actionCreator.dispatchModelFetchRequest)({
34
+ modelName: 'user.userInfo'
35
+ });
31
36
  if (onPostLoginSaga) {
32
37
  const result = yield (0, _effects.call)(onPostLoginSaga);
33
38
  if (!result) {
@@ -52,4 +57,4 @@ function* postLoginDataSaga() {
52
57
  });
53
58
  }
54
59
  }
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfYWN0aW9uQ3JlYXRvciIsIl9hY3Rpb25zIiwib25Qb3N0TG9naW5TYWdhIiwic2V0T25Qb3N0TG9naW5TYWdhIiwidmFsdWUiLCJleHBvcnRzIiwicG9zdExvZ2luRGF0YVNhZ2EiLCJleHRlcm5hbFByb3ZpZGVyc1Rhc2tJZCIsInRha2UiLCJBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUiLCJHRVRfVE9LRU5fU1VDQ0VFREVEIiwicmVzdWx0IiwiY2FsbCIsImRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QiLCJtb2RlbE5hbWUiLCJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3QiLCJ0YXNrSWQiLCJwZXJpb2QiLCJBVVRIX0FDVElPTl9UWVBFIiwiTE9HX09VVF9SRVFVRVNURUQiLCJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFRlcm1pbmF0ZUFjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9wb3N0TG9naW5EYXRhU2FnYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWdhLCBTYWdhSXRlcmF0b3IgfSBmcm9tICdyZWR1eC1zYWdhJ1xuaW1wb3J0IHsgY2FsbCwgdGFrZSB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cydcbmltcG9ydCB7XG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QsXG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCxcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hUZXJtaW5hdGVBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9uQ3JlYXRvcidcbmltcG9ydCB7IEFVVEhfQUNUSU9OX1RZUEUsIEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSB9IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8vI3JlZ2lvbiBTZXR1cFxuXG5sZXQgb25Qb3N0TG9naW5TYWdhOiBTYWdhIHwgdW5kZWZpbmVkXG5cbi8qKlxuICogU2V0cyBvciBjbGVhcnMgYSBzYWdhIHRoYXQgd2lsbCBydW4gYWZ0ZXIgbG9naW4uIEl0IGlzIGNhbGxlZCBpbnNpZGUgb2YgYHBvc3RMb2dpbkRhdGFTYWdhYC5cbiAqICogSWYgdGhlIHNhZ2EgcmV0dXJucyBgdHJ1ZWAsIHRoZSBwYXJlbnQgc2FnYSB3aWxsIGxvYWQgXCJncm91cHNcIiBhbmQgXCJleHRlcm5hbFByb3ZpZGVyc1wiLlxuICogKiBJZiB0aGUgc2FnYSByZXR1cm5zIGBmYWxzZWAsIHRoZSBwYXJlbnQgc2FnYSB3aWxsIHJlc3RhcnQsIGFzc3VtaW5nIHRoZSBjaGlsZCBzYWdhIGhhcyBsb2dnZWQgb3V0IHRoZSB1c2VyLlxuICogQHBhcmFtIHZhbHVlIFRoZSBzYWdhXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPblBvc3RMb2dpblNhZ2EgPSAodmFsdWU6IFNhZ2EpID0+IHtcblx0b25Qb3N0TG9naW5TYWdhID0gdmFsdWVcbn1cblxuLy8jZW5kcmVnaW9uIFNldHVwXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBwb3N0TG9naW5EYXRhU2FnYSgpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBleHRlcm5hbFByb3ZpZGVyc1Rhc2tJZCA9ICdleHRlcm5hbC1wcm92aWRlci1yZWZyZXNoJ1xuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHlpZWxkIHRha2UoQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLkdFVF9UT0tFTl9TVUNDRUVERUQpXG5cdFx0aWYgKG9uUG9zdExvZ2luU2FnYSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0geWllbGQgY2FsbChvblBvc3RMb2dpblNhZ2EpXG5cdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGxvYWQgZ3JvdXBzIG9uIGluaXRpYWwgbG9naW4uIHJlZnJlc2hpbmcgaGFwcGVucyBlbHNld2hlcmVcblx0XHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHsgbW9kZWxOYW1lOiAnZ3JvdXBzJyB9KVxuXG5cdFx0Ly8gZ3JhYiBleHRlcm5hbCBwcm92aWRlcnMgb25jZSBhIGRheSAoZm9yIHRob3NlIHRhYi1sZWF2ZXItb3BlbmVycylcblx0XHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdFx0bW9kZWxOYW1lOiAnZXh0ZXJuYWxQcm92aWRlcnMnLFxuXHRcdFx0dGFza0lkOiBleHRlcm5hbFByb3ZpZGVyc1Rhc2tJZCxcblx0XHRcdHBlcmlvZDogMTAwMCAqIDYwICogNjAgKiAyNFxuXHRcdH0pXG5cblx0XHR5aWVsZCB0YWtlKEFVVEhfQUNUSU9OX1RZUEUuTE9HX09VVF9SRVFVRVNURUQpXG5cblx0XHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFRlcm1pbmF0ZUFjdGlvbih7XG5cdFx0XHR0YXNrSWQ6IGV4dGVybmFsUHJvdmlkZXJzVGFza0lkXG5cdFx0fSlcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRCxPQUFBO0FBS0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBRUE7O0FBRUEsSUFBSUcsZUFBaUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1DLGtCQUFrQixHQUFJQyxLQUFXLElBQUs7RUFDbERGLGVBQWUsR0FBR0UsS0FBSztBQUN4QixDQUFDOztBQUVEO0FBQUFDLE9BQUEsQ0FBQUYsa0JBQUEsR0FBQUEsa0JBQUE7QUFFZSxVQUFVRyxpQkFBaUJBLENBQUEsRUFBaUI7RUFDMUQsTUFBTUMsdUJBQXVCLEdBQUcsMkJBQTJCO0VBQzNELE9BQU8sSUFBSSxFQUFFO0lBQ1osTUFBTSxJQUFBQyxhQUFJLEVBQUNDLHVDQUE4QixDQUFDQyxtQkFBbUIsQ0FBQztJQUM5RCxJQUFJUixlQUFlLEVBQUU7TUFDcEIsTUFBTVMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsYUFBSSxFQUFDVixlQUFlLENBQUM7TUFDMUMsSUFBSSxDQUFDUyxNQUFNLEVBQUU7UUFDWjtNQUNEO0lBQ0Q7O0lBRUE7SUFDQSxJQUFBRSx3Q0FBeUIsRUFBQztNQUFFQyxTQUFTLEVBQUU7SUFBUyxDQUFDLENBQUM7O0lBRWxEO0lBQ0EsSUFBQUMsZ0RBQWlDLEVBQUM7TUFDakNELFNBQVMsRUFBRSxtQkFBbUI7TUFDOUJFLE1BQU0sRUFBRVQsdUJBQXVCO01BQy9CVSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDMUIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxJQUFBVCxhQUFJLEVBQUNVLHlCQUFnQixDQUFDQyxpQkFBaUIsQ0FBQztJQUU5QyxJQUFBQyx3REFBeUMsRUFBQztNQUN6Q0osTUFBTSxFQUFFVDtJQUNULENBQUMsQ0FBQztFQUNIO0FBQ0QiLCJpZ25vcmVMaXN0IjpbXX0=
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfYWN0aW9uQ3JlYXRvciIsIl9hY3Rpb25zIiwib25Qb3N0TG9naW5TYWdhIiwic2V0T25Qb3N0TG9naW5TYWdhIiwidmFsdWUiLCJleHBvcnRzIiwicG9zdExvZ2luRGF0YVNhZ2EiLCJleHRlcm5hbFByb3ZpZGVyc1Rhc2tJZCIsInRha2UiLCJBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUiLCJHRVRfVE9LRU5fU1VDQ0VFREVEIiwiZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCIsIm1vZGVsTmFtZSIsInJlc3VsdCIsImNhbGwiLCJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3QiLCJ0YXNrSWQiLCJwZXJpb2QiLCJBVVRIX0FDVElPTl9UWVBFIiwiTE9HX09VVF9SRVFVRVNURUQiLCJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFRlcm1pbmF0ZUFjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9wb3N0TG9naW5EYXRhU2FnYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWdhLCBTYWdhSXRlcmF0b3IgfSBmcm9tICdyZWR1eC1zYWdhJ1xuaW1wb3J0IHsgY2FsbCwgdGFrZSB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cydcbmltcG9ydCB7XG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QsXG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCxcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hUZXJtaW5hdGVBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9uQ3JlYXRvcidcbmltcG9ydCB7IEFVVEhfQUNUSU9OX1RZUEUsIEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSB9IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8vI3JlZ2lvbiBTZXR1cFxuXG5sZXQgb25Qb3N0TG9naW5TYWdhOiBTYWdhIHwgdW5kZWZpbmVkXG5cbi8qKlxuICogU2V0cyBvciBjbGVhcnMgYSBzYWdhIHRoYXQgd2lsbCBydW4gYWZ0ZXIgbG9naW4uIEl0IGlzIGNhbGxlZCBpbnNpZGUgb2YgYHBvc3RMb2dpbkRhdGFTYWdhYC5cbiAqICogSWYgdGhlIHNhZ2EgcmV0dXJucyBgdHJ1ZWAsIHRoZSBwYXJlbnQgc2FnYSB3aWxsIGxvYWQgXCJncm91cHNcIiBhbmQgXCJleHRlcm5hbFByb3ZpZGVyc1wiLlxuICogKiBJZiB0aGUgc2FnYSByZXR1cm5zIGBmYWxzZWAsIHRoZSBwYXJlbnQgc2FnYSB3aWxsIHJlc3RhcnQsIGFzc3VtaW5nIHRoZSBjaGlsZCBzYWdhIGhhcyBsb2dnZWQgb3V0IHRoZSB1c2VyLlxuICogQHBhcmFtIHZhbHVlIFRoZSBzYWdhXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPblBvc3RMb2dpblNhZ2EgPSAodmFsdWU6IFNhZ2EpID0+IHtcblx0b25Qb3N0TG9naW5TYWdhID0gdmFsdWVcbn1cblxuLy8jZW5kcmVnaW9uIFNldHVwXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBwb3N0TG9naW5EYXRhU2FnYSgpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBleHRlcm5hbFByb3ZpZGVyc1Rhc2tJZCA9ICdleHRlcm5hbC1wcm92aWRlci1yZWZyZXNoJ1xuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdHlpZWxkIHRha2UoQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLkdFVF9UT0tFTl9TVUNDRUVERUQpXG5cblx0XHQvLyBsb2FkIHVzZXJJbmZvIG9uIGluaXRpYWwgbG9naW5cblx0XHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHsgbW9kZWxOYW1lOiAndXNlci51c2VySW5mbycgfSlcblxuXHRcdGlmIChvblBvc3RMb2dpblNhZ2EpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IHlpZWxkIGNhbGwob25Qb3N0TG9naW5TYWdhKVxuXHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0Y29udGludWVcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBsb2FkIGdyb3VwcyBvbiBpbml0aWFsIGxvZ2luLiByZWZyZXNoaW5nIGhhcHBlbnMgZWxzZXdoZXJlXG5cdFx0ZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCh7IG1vZGVsTmFtZTogJ2dyb3VwcycgfSlcblxuXHRcdC8vIGdyYWIgZXh0ZXJuYWwgcHJvdmlkZXJzIG9uY2UgYSBkYXkgKGZvciB0aG9zZSB0YWItbGVhdmVyLW9wZW5lcnMpXG5cdFx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRcdG1vZGVsTmFtZTogJ2V4dGVybmFsUHJvdmlkZXJzJyxcblx0XHRcdHRhc2tJZDogZXh0ZXJuYWxQcm92aWRlcnNUYXNrSWQsXG5cdFx0XHRwZXJpb2Q6IDEwMDAgKiA2MCAqIDYwICogMjRcblx0XHR9KVxuXG5cdFx0eWllbGQgdGFrZShBVVRIX0FDVElPTl9UWVBFLkxPR19PVVRfUkVRVUVTVEVEKVxuXG5cdFx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hUZXJtaW5hdGVBY3Rpb24oe1xuXHRcdFx0dGFza0lkOiBleHRlcm5hbFByb3ZpZGVyc1Rhc2tJZFxuXHRcdH0pXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUtBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUVBOztBQUVBLElBQUlHLGVBQWlDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQyxrQkFBa0IsR0FBSUMsS0FBVyxJQUFLO0VBQ2xERixlQUFlLEdBQUdFLEtBQUs7QUFDeEIsQ0FBQzs7QUFFRDtBQUFBQyxPQUFBLENBQUFGLGtCQUFBLEdBQUFBLGtCQUFBO0FBRWUsVUFBVUcsaUJBQWlCQSxDQUFBLEVBQWlCO0VBQzFELE1BQU1DLHVCQUF1QixHQUFHLDJCQUEyQjtFQUMzRCxPQUFPLElBQUksRUFBRTtJQUNaLE1BQU0sSUFBQUMsYUFBSSxFQUFDQyx1Q0FBOEIsQ0FBQ0MsbUJBQW1CLENBQUM7O0lBRTlEO0lBQ0EsSUFBQUMsd0NBQXlCLEVBQUM7TUFBRUMsU0FBUyxFQUFFO0lBQWdCLENBQUMsQ0FBQztJQUV6RCxJQUFJVixlQUFlLEVBQUU7TUFDcEIsTUFBTVcsTUFBTSxHQUFHLE1BQU0sSUFBQUMsYUFBSSxFQUFDWixlQUFlLENBQUM7TUFDMUMsSUFBSSxDQUFDVyxNQUFNLEVBQUU7UUFDWjtNQUNEO0lBQ0Q7O0lBRUE7SUFDQSxJQUFBRix3Q0FBeUIsRUFBQztNQUFFQyxTQUFTLEVBQUU7SUFBUyxDQUFDLENBQUM7O0lBRWxEO0lBQ0EsSUFBQUcsZ0RBQWlDLEVBQUM7TUFDakNILFNBQVMsRUFBRSxtQkFBbUI7TUFDOUJJLE1BQU0sRUFBRVQsdUJBQXVCO01BQy9CVSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDMUIsQ0FBQyxDQUFDO0lBRUYsTUFBTSxJQUFBVCxhQUFJLEVBQUNVLHlCQUFnQixDQUFDQyxpQkFBaUIsQ0FBQztJQUU5QyxJQUFBQyx3REFBeUMsRUFBQztNQUN6Q0osTUFBTSxFQUFFVDtJQUNULENBQUMsQ0FBQztFQUNIO0FBQ0QiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,5 +1,11 @@
1
- import { Dictionary } from 'lodash';
2
1
  import { SagaIterator } from 'redux-saga';
3
2
  import { AllEffect, ForkEffect } from 'redux-saga/effects';
4
- export declare const setOtherDependentSagas: (value: Dictionary<SagaIterator>) => void;
3
+ /**
4
+ * The default sagas that will run after auth is initialized, unless `setDependentSagas()` is called.
5
+ */
6
+ export declare const getDefaultDependentSagas: () => Record<string, SagaIterator>;
7
+ /**
8
+ * Update the sagas that will run after auth is initialized. See `getDefaultDependentSagas()`.
9
+ */
10
+ export declare const setDependentSagas: (value: Record<string, SagaIterator>) => void;
5
11
  export default function rootSaga(): IterableIterator<ForkEffect | AllEffect<any>>;