studiokit-scaffolding-js 7.2.0-next.2.5 → 7.2.0-next.2.6
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.
|
@@ -52,13 +52,20 @@ let logger;
|
|
|
52
52
|
|
|
53
53
|
function* getTokenFromCode(code) {
|
|
54
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
|
+
}
|
|
55
58
|
const getTokenModelName = 'getToken';
|
|
56
|
-
const formBody =
|
|
57
|
-
|
|
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
|
+
});
|
|
58
65
|
yield (0, _effects.put)({
|
|
59
66
|
type: _actions.MODEL_FETCH_REQUEST_ACTION_TYPE.FETCH_REQUEST,
|
|
60
67
|
modelName: getTokenModelName,
|
|
61
|
-
body:
|
|
68
|
+
body: formBody,
|
|
62
69
|
noStore: true
|
|
63
70
|
});
|
|
64
71
|
const {
|
|
@@ -75,25 +82,38 @@ function* getTokenFromCode(code) {
|
|
|
75
82
|
}
|
|
76
83
|
function* getTokenFromCodeAndState(code, state) {
|
|
77
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
|
+
}
|
|
78
88
|
|
|
79
|
-
//
|
|
80
|
-
const codeVerifier = oauthPersistenceService.getPersistedCodeVerifier
|
|
81
|
-
|
|
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);
|
|
82
95
|
if (persistedState !== state) {
|
|
83
|
-
throw new Error('
|
|
96
|
+
throw new Error('invalid state');
|
|
84
97
|
}
|
|
85
|
-
// clear persisted
|
|
86
|
-
oauthPersistenceService.persistState
|
|
98
|
+
// clear persisted values
|
|
99
|
+
yield (0, _effects.call)(oauthPersistenceService.persistState, null);
|
|
100
|
+
yield (0, _effects.call)(oauthPersistenceService.persistCodeVerifier, null);
|
|
87
101
|
|
|
88
102
|
// dispatch request
|
|
89
|
-
const location = _windowService.windowService.getLocation();
|
|
90
103
|
const getTokenModelName = 'getToken';
|
|
91
|
-
const
|
|
92
|
-
const
|
|
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
|
+
});
|
|
93
113
|
yield (0, _effects.put)({
|
|
94
114
|
type: _actions.MODEL_FETCH_REQUEST_ACTION_TYPE.FETCH_REQUEST,
|
|
95
115
|
modelName: getTokenModelName,
|
|
96
|
-
body:
|
|
116
|
+
body: formBody,
|
|
97
117
|
noStore: true
|
|
98
118
|
});
|
|
99
119
|
const {
|
|
@@ -106,20 +126,27 @@ function* getTokenFromCodeAndState(code, state) {
|
|
|
106
126
|
if (fetchErrorAction || !fetchResultAction?.data) {
|
|
107
127
|
return null;
|
|
108
128
|
}
|
|
109
|
-
// clear persisted codeVerifier on success
|
|
110
|
-
oauthPersistenceService.persistCodeVerifier(null);
|
|
111
129
|
return fetchResultAction.data;
|
|
112
130
|
}
|
|
113
131
|
function* getTokenFromRefreshToken(oauthTokenParam) {
|
|
114
132
|
const appConfig = (0, _constants.getAppConfig)();
|
|
133
|
+
if (!appConfig.CLIENT_ID) {
|
|
134
|
+
throw new Error('CLIENT_ID, is required in AppConfig');
|
|
135
|
+
}
|
|
115
136
|
const getTokenModelName = 'getToken';
|
|
137
|
+
const formBody = new URLSearchParams({
|
|
138
|
+
grant_type: 'refresh_token',
|
|
139
|
+
client_id: appConfig.CLIENT_ID,
|
|
140
|
+
refresh_token: oauthTokenParam.refresh_token
|
|
141
|
+
});
|
|
116
142
|
// create the form body based on if using a client_secret: traditional OAuth vs. PKCE flow
|
|
117
|
-
|
|
118
|
-
|
|
143
|
+
if (appConfig.CLIENT_SECRET) {
|
|
144
|
+
formBody.append('client_secret', appConfig.CLIENT_SECRET);
|
|
145
|
+
}
|
|
119
146
|
yield (0, _effects.put)({
|
|
120
147
|
type: _actions.MODEL_FETCH_REQUEST_ACTION_TYPE.FETCH_REQUEST,
|
|
121
148
|
modelName: getTokenModelName,
|
|
122
|
-
body:
|
|
149
|
+
body: formBody,
|
|
123
150
|
noStore: true
|
|
124
151
|
});
|
|
125
152
|
const {
|
|
@@ -233,21 +260,21 @@ function* casTicketLoginFlow(ticket, service) {
|
|
|
233
260
|
function* pkceLoginFlow(_) {
|
|
234
261
|
const appConfig = (0, _constants.getAppConfig)();
|
|
235
262
|
if (!appConfig.CLIENT_ID || !appConfig.OAUTH_PKCE_SCOPE || !appConfig.OAUTH_PKCE_ENDPOINT) {
|
|
236
|
-
throw new Error('
|
|
263
|
+
throw new Error('CLIENT_ID, OAUTH_PKCE_SCOPE, and OAUTH_PKCE_ENDPOINT are required in AppConfig');
|
|
237
264
|
}
|
|
238
265
|
|
|
239
|
-
//
|
|
240
|
-
// These will be sent to the backend to get the actual bearer token.
|
|
266
|
+
// Generate state and code verifier values
|
|
241
267
|
const state = (0, _uuid.v4)();
|
|
242
268
|
const codeVerifier = (0, _uuid.v4)();
|
|
243
269
|
const sha256CodeVerifier = yield (0, _effects.call)(_url.sha256Async, codeVerifier);
|
|
244
|
-
const codeChallenge = (0, _url.base64UrlEncode
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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);
|
|
249
275
|
|
|
250
276
|
// Redirect to BS code flow auth endpoint (which will redirect back here)
|
|
277
|
+
const location = _windowService.windowService.getLocation();
|
|
251
278
|
const pkceAuthRedirectURL = `${appConfig.OAUTH_PKCE_ENDPOINT}?${new URLSearchParams({
|
|
252
279
|
response_type: 'code',
|
|
253
280
|
client_id: appConfig.CLIENT_ID,
|
|
@@ -257,9 +284,7 @@ function* pkceLoginFlow(_) {
|
|
|
257
284
|
code_challenge_method: 'S256',
|
|
258
285
|
redirect_uri: location.origin
|
|
259
286
|
})}`;
|
|
260
|
-
|
|
261
|
-
window.location.replace(pkceAuthRedirectURL);
|
|
262
|
-
yield (0, _effects.call)(() => {});
|
|
287
|
+
yield (0, _effects.call)(_windowService.windowService.replace, pkceAuthRedirectURL);
|
|
263
288
|
}
|
|
264
289
|
function* handleAuthFailure(action) {
|
|
265
290
|
// This should be unlikely since we normally have a refresh token loop happening
|
|
@@ -357,6 +382,8 @@ function authSaga() {
|
|
|
357
382
|
} else if (pkceLoginAction) {
|
|
358
383
|
// oauthToken is not returned here, as this flow will result in a window redirect
|
|
359
384
|
yield (0, _effects.call)(pkceLoginFlow, pkceLoginAction);
|
|
385
|
+
// break execution
|
|
386
|
+
return;
|
|
360
387
|
}
|
|
361
388
|
}
|
|
362
389
|
if (oauthToken) {
|
|
@@ -384,4 +411,4 @@ function authSaga() {
|
|
|
384
411
|
} while (true);
|
|
385
412
|
}();
|
|
386
413
|
}
|
|
387
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfdXVpZCIsIl9jb25zdGFudHMiLCJfY29kZVByb3ZpZGVyU2VydmljZSIsIl9vYXV0aFBlcnNpc3RlbmNlU2VydmljZSIsIl90aWNrZXRQcm92aWRlclNlcnZpY2UiLCJfd2luZG93U2VydmljZSIsIl90eXBlcyIsIl9sb2dnZXIiLCJfdXJsIiwiX2FjdGlvbnMiLCJtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiYWN0aW9uIiwibW9kZWxOYW1lIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwibW9kZWxQYXRoIiwiZXhwb3J0cyIsInRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiaW5jb21pbmdBY3Rpb24iLCJtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCIsImlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uIiwidGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkIiwib2F1dGhUb2tlbiIsIm9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlIiwicmVmcmVzaExvY2siLCJsb2dnZXIiLCJnZXRUb2tlbkZyb21Db2RlIiwiY29kZSIsImFwcENvbmZpZyIsImdldEFwcENvbmZpZyIsImdldFRva2VuTW9kZWxOYW1lIiwiZm9ybUJvZHkiLCJDTElFTlRfSUQiLCJDTElFTlRfU0VDUkVUIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZm9ybUJvZHlTdHJpbmciLCJqb2luIiwicHV0IiwidHlwZSIsIk1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJGRVRDSF9SRVFVRVNUIiwiYm9keSIsIm5vU3RvcmUiLCJmZXRjaFJlc3VsdEFjdGlvbiIsImZldGNoRXJyb3JBY3Rpb24iLCJyYWNlIiwidGFrZSIsImRhdGEiLCJnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUiLCJzdGF0ZSIsImNvZGVWZXJpZmllciIsImdldFBlcnNpc3RlZENvZGVWZXJpZmllciIsInBlcnNpc3RlZFN0YXRlIiwiZ2V0UGVyc2lzdGVkU3RhdGUiLCJFcnJvciIsInBlcnNpc3RTdGF0ZSIsImxvY2F0aW9uIiwid2luZG93U2VydmljZSIsImdldExvY2F0aW9uIiwiT0FVVEhfUEtDRV9TQ09QRSIsIm9yaWdpbiIsInBlcnNpc3RDb2RlVmVyaWZpZXIiLCJnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4iLCJvYXV0aFRva2VuUGFyYW0iLCJyZWZyZXNoX3Rva2VuIiwiZXJyb3JEYXRhIiwic3RhdHVzIiwiSFRUUF9TVEFUVVNfQ09ERSIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsInBlcmZvcm1Ub2tlblJlZnJlc2giLCJyZWZyZXNoU3VjY2VzcyIsIkFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSIsIlRPS0VOX1JFRlJFU0hfU1VDQ0VFREVEIiwicmVmcmVzaEZhaWxlZCIsIkFVVEhfQUNUSU9OX1RZUEUiLCJUT0tFTl9SRUZSRVNIX0ZBSUxFRCIsImRlYnVnIiwib3JpZ2luYWxBY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsImNhbGwiLCJwZXJzaXN0VG9rZW4iLCJhbGwiLCJsb2dPdXQiLCJMT0dfT1VUX1JFUVVFU1RFRCIsImxvZ2luRmxvdyIsIm1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uIiwiY3JlZGVudGlhbHNMb2dpbkZsb3ciLCJub1JldHJ5IiwiY2FzVjFMb2dpbkZsb3ciLCJsb2NhbExvZ2luRmxvdyIsImNhc1RpY2tldExvZ2luRmxvdyIsInRpY2tldCIsInNlcnZpY2UiLCJxdWVyeVBhcmFtcyIsInBrY2VMb2dpbkZsb3ciLCJfIiwiT0FVVEhfUEtDRV9FTkRQT0lOVCIsInV1aWR2NCIsInNoYTI1NkNvZGVWZXJpZmllciIsInNoYTI1NkFzeW5jIiwiY29kZUNoYWxsZW5nZSIsImJhc2U2NFVybEVuY29kZSIsImhpc3RvcnkiLCJnZXRIaXN0b3J5IiwicGtjZUF1dGhSZWRpcmVjdFVSTCIsIlVSTFNlYXJjaFBhcmFtcyIsInJlc3BvbnNlX3R5cGUiLCJjbGllbnRfaWQiLCJzY29wZSIsImNvZGVfY2hhbGxlbmdlIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwicmVkaXJlY3RfdXJpIiwid2luZG93IiwicmVwbGFjZSIsImhhbmRsZUF1dGhGYWlsdXJlIiwiVU5BVVRIT1JJWkVEIiwiZ2V0T0F1dGhUb2tlbiIsInRoaXJ0eVNlY29uZHNGcm9tTm93IiwiRGF0ZSIsInNldFNlY29uZHMiLCJnZXRTZWNvbmRzIiwiYXV0aFNhZ2EiLCJvYXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZGVmYXVsdE9BdXRoUGVyc2lzdGVuY2VTZXJ2aWNlIiwidGlja2V0UHJvdmlkZXJTZXJ2aWNlIiwiZGVmYXVsdFRpY2tldFByb3ZpZGVyU2VydmljZSIsImNvZGVQcm92aWRlclNlcnZpY2UiLCJkZWZhdWx0Q29kZVByb3ZpZGVyU2VydmljZSIsImdldExvZ2dlciIsImdldFBlcnNpc3RlZFRva2VuIiwiY2FzVGlja2V0IiwiZ2V0VGlja2V0IiwicmVtb3ZlVGlja2V0IiwiZ2V0QXBwU2VydmljZU5hbWUiLCJnZXRDb2RlIiwiY2xlYXJVc2VyRGF0YSIsIk1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUiLCJjbGVhclBlcnNpc3RlbnRUb2tlbiIsImdldFN0YXRlIiwicmVtb3ZlQ29kZUFuZFN0YXRlIiwiQVVUSF9UT0tFTl9BQ1RJT05fVFlQRSIsIkFVVEhfSU5JVElBTElaRUQiLCJ0YWtlRXZlcnkiLCJNT0RFTF9GRVRDSF9FUlJPUl9BQ1RJT05fVFlQRSIsIlRSWV9GRVRDSF9GQUlMRUQiLCJjYXNWMUFjdGlvbiIsImxvY2FsTG9naW5BY3Rpb24iLCJwa2NlTG9naW5BY3Rpb24iLCJBVVRIX0NBU19WMV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFIiwiQ0FTX1YxX0xPR0lOX1JFUVVFU1QiLCJBVVRIX0xPQ0FMX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJMT0NBTF9MT0dJTl9SRVFVRVNUIiwiQVVUSF9QS0NFX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJQS0NFX0xPR0lOX1JFUVVFU1QiLCJMT0dJTl9SRVFVRVNURUQiLCJsb2dpblN1Y2Nlc3MiLCJHRVRfVE9LRU5fU1VDQ0VFREVEIiwiTE9HSU5fRkFJTEVEIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3NhZ2FzL2F1dGhTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhZ2FJdGVyYXRvciB9IGZyb20gJ0ByZWR1eC1zYWdhL2NvcmUnXG5pbXBvcnQgeyBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcbmltcG9ydCB7IGFsbCwgY2FsbCwgcHV0LCByYWNlLCB0YWtlLCB0YWtlRXZlcnkgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgY29kZVByb3ZpZGVyU2VydmljZSBhcyBkZWZhdWx0Q29kZVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvZGVQcm92aWRlclNlcnZpY2UnXG5pbXBvcnQgeyBvYXV0aFBlcnNpc3RlbmNlU2VydmljZSBhcyBkZWZhdWx0T0F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vYXV0aFBlcnNpc3RlbmNlU2VydmljZSdcbmltcG9ydCB7IHRpY2tldFByb3ZpZGVyU2VydmljZSBhcyBkZWZhdWx0VGlja2V0UHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGlja2V0UHJvdmlkZXJTZXJ2aWNlJ1xuaW1wb3J0IHsgd2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dpbmRvd1NlcnZpY2UnXG5pbXBvcnQge1xuXHRDb2RlUHJvdmlkZXJTZXJ2aWNlLFxuXHRIVFRQX1NUQVRVU19DT0RFLFxuXHRPQXV0aFBlcnNpc3RlbmNlU2VydmljZSxcblx0T0F1dGhUb2tlbixcblx0T0F1dGhUb2tlbk9yTnVsbCxcblx0VGlja2V0UHJvdmlkZXJTZXJ2aWNlLFxuXHRUb2tlbkFjY2Vzc0Z1bmN0aW9uXG59IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBiYXNlNjRVcmxFbmNvZGUsIHNoYTI1NkFzeW5jIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXJsJ1xuaW1wb3J0IHtcblx0QVVUSF9BQ1RJT05fVFlQRSxcblx0QVVUSF9DQVNfVjFfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9MT0NBTF9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLFxuXHRBVVRIX1BLQ0VfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9UT0tFTl9BQ1RJT05fVFlQRSxcblx0QVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLFxuXHRBdXRoQWN0aW9uLFxuXHRBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvbixcblx0QXV0aFBLQ0VMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhUb2tlbkFjdGlvbixcblx0QXV0aFRva2VuU3VjY2Vzc0FjdGlvbixcblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24sXG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaFJlc3VsdEFjdGlvbixcblx0TU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUsXG5cdE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsXG5cdE1vZGVsRmV0Y2hFcnJvckFjdGlvbixcblx0TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24sXG5cdE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24sXG5cdE1vZGVsUmVtb3ZlS2V5QWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8vI3JlZ2lvbiBIZWxwZXJzXG5cbmV4cG9ydCBjb25zdCBtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gbW9kZWxOYW1lXG5cbmV4cG9ydCBjb25zdCB0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoaW5jb21pbmdBY3Rpb24sIG1vZGVsTmFtZSlcblxuZXhwb3J0IGNvbnN0IG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24oYWN0aW9uKSAmJiBhY3Rpb24ubW9kZWxQYXRoID09PSBtb2RlbE5hbWVcblxuZXhwb3J0IGNvbnN0IHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGluY29taW5nQWN0aW9uLCBtb2RlbE5hbWUpXG5cbi8vI2VuZHJlZ2lvbiBIZWxwZXJzXG5cbi8vI3JlZ2lvbiBMb2NhbCBWYXJpYWJsZXNcblxubGV0IG9hdXRoVG9rZW46IE9BdXRoVG9rZW5Pck51bGwgPSBudWxsXG5sZXQgb2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2U6IE9BdXRoUGVyc2lzdGVuY2VTZXJ2aWNlXG5sZXQgcmVmcmVzaExvY2s6IGJvb2xlYW5cbmxldCBsb2dnZXI6IExvZ2dlclxuXG4vLyNlbmRyZWdpb24gTG9jYWwgVmFyaWFibGVzXG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tQ29kZShjb2RlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRjb25zdCBnZXRUb2tlbk1vZGVsTmFtZSA9ICdnZXRUb2tlbidcblx0Y29uc3QgZm9ybUJvZHkgPSBbXG5cdFx0J2dyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlJyxcblx0XHRgY2xpZW50X2lkPSR7YXBwQ29uZmlnLkNMSUVOVF9JRH1gLFxuXHRcdGBjbGllbnRfc2VjcmV0PSR7YXBwQ29uZmlnLkNMSUVOVF9TRUNSRVR9YCxcblx0XHRgY29kZT0ke2VuY29kZVVSSUNvbXBvbmVudChjb2RlKX1gXG5cdF1cblx0Y29uc3QgZm9ybUJvZHlTdHJpbmcgPSBmb3JtQm9keS5qb2luKCcmJylcblx0eWllbGQgcHV0PE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uPih7XG5cdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdG1vZGVsTmFtZTogZ2V0VG9rZW5Nb2RlbE5hbWUsXG5cdFx0Ym9keTogZm9ybUJvZHlTdHJpbmcsXG5cdFx0bm9TdG9yZTogdHJ1ZVxuXHR9KVxuXHRjb25zdCB7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb24sXG5cdFx0ZmV0Y2hFcnJvckFjdGlvblxuXHR9OiB7IGZldGNoUmVzdWx0QWN0aW9uPzogTW9kZWxGZXRjaFJlc3VsdEFjdGlvbjsgZmV0Y2hFcnJvckFjdGlvbj86IE1vZGVsRmV0Y2hFcnJvckFjdGlvbiB9ID0geWllbGQgcmFjZSh7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKSxcblx0XHRmZXRjaEVycm9yQWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChnZXRUb2tlbk1vZGVsTmFtZSkpXG5cdH0pXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uIHx8ICFmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0cmV0dXJuIGZldGNoUmVzdWx0QWN0aW9uLmRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUoY29kZTogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblxuXHQvLyBjb21wYXJlIHN0YXRlIHRvIHBlcnNpc3RlZCB2YWx1ZVxuXHRjb25zdCBjb2RlVmVyaWZpZXIgPSBvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRDb2RlVmVyaWZpZXIoKVxuXHRjb25zdCBwZXJzaXN0ZWRTdGF0ZSA9IG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFN0YXRlKClcblx0aWYgKHBlcnNpc3RlZFN0YXRlICE9PSBzdGF0ZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGF0ZScpXG5cdH1cblx0Ly8gY2xlYXIgcGVyc2lzdGVkIHN0YXRlXG5cdG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RTdGF0ZShudWxsKVxuXG5cdC8vIGRpc3BhdGNoIHJlcXVlc3Rcblx0Y29uc3QgbG9jYXRpb24gPSB3aW5kb3dTZXJ2aWNlLmdldExvY2F0aW9uKClcblx0Y29uc3QgZ2V0VG9rZW5Nb2RlbE5hbWUgPSAnZ2V0VG9rZW4nXG5cdGNvbnN0IGZvcm1Cb2R5ID0gW1xuXHRcdGBjb2RlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvZGUpfWAsXG5cdFx0YHNjb3BlPSR7YXBwQ29uZmlnLk9BVVRIX1BLQ0VfU0NPUEV9YCxcblx0XHRgY29kZV92ZXJpZmllcj0ke2NvZGVWZXJpZmllcn1gLFxuXHRcdGByZWRpcmVjdF91cmk9JHtsb2NhdGlvbi5vcmlnaW59YFxuXHRdXG5cdGNvbnN0IGZvcm1Cb2R5U3RyaW5nID0gZm9ybUJvZHkuam9pbignJicpXG5cdHlpZWxkIHB1dDxNb2RlbEZldGNoUmVxdWVzdEFjdGlvbj4oe1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6IGdldFRva2VuTW9kZWxOYW1lLFxuXHRcdGJvZHk6IGZvcm1Cb2R5U3RyaW5nLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbiB8fCAhZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdC8vIGNsZWFyIHBlcnNpc3RlZCBjb2RlVmVyaWZpZXIgb24gc3VjY2Vzc1xuXHRvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0Q29kZVZlcmlmaWVyKG51bGwpXG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuKG9hdXRoVG9rZW5QYXJhbTogT0F1dGhUb2tlbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGNvbnN0IGdldFRva2VuTW9kZWxOYW1lID0gJ2dldFRva2VuJ1xuXHQvLyBjcmVhdGUgdGhlIGZvcm0gYm9keSBiYXNlZCBvbiBpZiB1c2luZyBhIGNsaWVudF9zZWNyZXQ6IHRyYWRpdGlvbmFsIE9BdXRoIHZzLiBQS0NFIGZsb3dcblx0Y29uc3QgZm9ybUJvZHkgPSBhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVFxuXHRcdD8gW1xuXHRcdFx0XHQnZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuJyxcblx0XHRcdFx0YGNsaWVudF9pZD0ke2FwcENvbmZpZy5DTElFTlRfSUR9YCxcblx0XHRcdFx0YGNsaWVudF9zZWNyZXQ9JHthcHBDb25maWcuQ0xJRU5UX1NFQ1JFVH1gLFxuXHRcdFx0XHRgcmVmcmVzaF90b2tlbj0ke2VuY29kZVVSSUNvbXBvbmVudChvYXV0aFRva2VuUGFyYW0ucmVmcmVzaF90b2tlbil9YFxuXHRcdFx0XVxuXHRcdDogW2ByZWZyZXNoX3Rva2VuPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9hdXRoVG9rZW5QYXJhbS5yZWZyZXNoX3Rva2VuKX1gXVxuXHRjb25zdCBmb3JtQm9keVN0cmluZyA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuXHR5aWVsZCBwdXQ8TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24+KHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiBnZXRUb2tlbk1vZGVsTmFtZSxcblx0XHRib2R5OiBmb3JtQm9keVN0cmluZyxcblx0XHRub1N0b3JlOiB0cnVlXG5cdH0pXG5cdGNvbnN0IHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbixcblx0XHRmZXRjaEVycm9yQWN0aW9uXG5cdH06IHsgZmV0Y2hSZXN1bHRBY3Rpb24/OiBNb2RlbEZldGNoUmVzdWx0QWN0aW9uOyBmZXRjaEVycm9yQWN0aW9uPzogTW9kZWxGZXRjaEVycm9yQWN0aW9uIH0gPSB5aWVsZCByYWNlKHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZChnZXRUb2tlbk1vZGVsTmFtZSkpLFxuXHRcdGZldGNoRXJyb3JBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGdldFRva2VuTW9kZWxOYW1lKSlcblx0fSlcblx0Ly8gYW55IGVycm9yIHJlc3BvbnNlXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uKSB7XG5cdFx0Ly8gaWdub3JlIHNlcnZlciBlcnJvcnNcblx0XHRpZiAoXG5cdFx0XHRmZXRjaEVycm9yQWN0aW9uLmVycm9yRGF0YT8uc3RhdHVzICYmXG5cdFx0XHRmZXRjaEVycm9yQWN0aW9uLmVycm9yRGF0YS5zdGF0dXMgPj0gSFRUUF9TVEFUVVNfQ09ERS5JTlRFUk5BTF9TRVJWRVJfRVJST1Jcblx0XHQpIHtcblx0XHRcdHJldHVybiBvYXV0aFRva2VuUGFyYW1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHQvLyBmb3Igc29tZSByZWFzb24gdGhlIHJlc3BvbnNlIGhhZCBubyBib2R5XG5cdGlmICghZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogcGVyZm9ybVRva2VuUmVmcmVzaCgpOiBTYWdhSXRlcmF0b3Ige1xuXHRpZiAocmVmcmVzaExvY2sgfHwgIW9hdXRoVG9rZW4pIHtcblx0XHQvLyBhbHJlYWR5IHJlZnJlc2hpbmcuIHdhaXQgZm9yIHRoZSBjdXJyZW50IHJlZnJlc2ggdG8gc3VjY2VlZCBvciBmYWlsLlxuXHRcdHlpZWxkIHJhY2Uoe1xuXHRcdFx0cmVmcmVzaFN1Y2Nlc3M6IHRha2UoQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLlRPS0VOX1JFRlJFU0hfU1VDQ0VFREVEKSxcblx0XHRcdHJlZnJlc2hGYWlsZWQ6IHRha2UoQVVUSF9BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX0ZBSUxFRClcblx0XHR9KVxuXHRcdHJldHVyblxuXHR9XG5cdGxvZ2dlci5kZWJ1ZygnUmVmcmVzaGluZyBPQXV0aCB0b2tlbicpXG5cdHJlZnJlc2hMb2NrID0gdHJ1ZVxuXHQvLyBvYXV0aFRva2VuIHdpbGwgYmUgc2V0IHRvOlxuXHQvLyAxLiBuZXcgdG9rZW4gKHN1Y2Nlc3MpXG5cdC8vIDIuIHNhbWUgdG9rZW4gKGZhaWxlZCBmcm9tIHRpbWVvdXQgb3Igc2VydmVyIGVycm9yKVxuXHQvLyAzLiBudWxsIChmYWlsKVxuXHRjb25zdCBvcmlnaW5hbEFjY2Vzc1Rva2VuID0gb2F1dGhUb2tlbi5hY2Nlc3NfdG9rZW5cblx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuLCBvYXV0aFRva2VuKVxuXHRpZiAoISFvYXV0aFRva2VuICYmIG9hdXRoVG9rZW4uYWNjZXNzX3Rva2VuICE9PSBvcmlnaW5hbEFjY2Vzc1Rva2VuKSB7XG5cdFx0bG9nZ2VyLmRlYnVnKCdPQXV0aCB0b2tlbiByZWZyZXNoZWQnKVxuXHRcdHlpZWxkIGNhbGwob2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBvYXV0aFRva2VuKVxuXHRcdHlpZWxkIHB1dDxBdXRoVG9rZW5TdWNjZXNzQWN0aW9uPih7IHR5cGU6IEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX1NVQ0NFRURFRCwgb2F1dGhUb2tlbiB9KVxuXHR9IGVsc2UgaWYgKG9hdXRoVG9rZW4gPT09IG51bGwpIHtcblx0XHRsb2dnZXIuZGVidWcoJ09BdXRoIHRva2VuIGZhaWxlZCB0byByZWZyZXNoJylcblx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gb3V0c2lkZSBvZiB0aGUgdG9rZW4gaGF2aW5nIGJlZW4gcmV2b2tlZCBvbiB0aGUgc2VydmVyIHNpZGVcblx0XHR5aWVsZCBhbGwoe1xuXHRcdFx0cmVmcmVzaEZhaWxlZDogcHV0PEF1dGhBY3Rpb24+KHsgdHlwZTogQVVUSF9BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX0ZBSUxFRCB9KSxcblx0XHRcdGxvZ091dDogcHV0PEF1dGhBY3Rpb24+KHsgdHlwZTogQVVUSF9BQ1RJT05fVFlQRS5MT0dfT1VUX1JFUVVFU1RFRCB9KVxuXHRcdH0pXG5cdH1cblx0cmVmcmVzaExvY2sgPSBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGxvZ2luRmxvdyhtb2RlbEZldGNoUmVxdWVzdEFjdGlvbjogTW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHR5aWVsZCBwdXQobW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pXG5cdGNvbnN0IHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbixcblx0XHRmZXRjaEVycm9yQWN0aW9uXG5cdH06IHsgZmV0Y2hSZXN1bHRBY3Rpb24/OiBNb2RlbEZldGNoUmVzdWx0QWN0aW9uOyBmZXRjaEVycm9yQWN0aW9uPzogTW9kZWxGZXRjaEVycm9yQWN0aW9uIH0gPSB5aWVsZCByYWNlKHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZChtb2RlbEZldGNoUmVxdWVzdEFjdGlvbi5tb2RlbE5hbWUpKSxcblx0XHRmZXRjaEVycm9yQWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChtb2RlbEZldGNoUmVxdWVzdEFjdGlvbi5tb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbikge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0Y29uc3QgY29kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGE/LmNvZGVcblx0aWYgKCFjb2RlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRyZXR1cm4geWllbGQgY2FsbChnZXRUb2tlbkZyb21Db2RlLCBjb2RlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNyZWRlbnRpYWxzTG9naW5GbG93KFxuXHRhY3Rpb246IEF1dGhDYXNWMUxvZ2luUmVxdWVzdEFjdGlvbiB8IEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvbixcblx0bW9kZWxOYW1lOiBzdHJpbmdcbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbiA9IHtcblx0XHQvLyBzZXQgcmVxdWlyZWQgZGVmYXVsdHNcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lLFxuXHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0Ly8gZm9yY2Ugbm8gcmV0cnlcblx0XHRub1JldHJ5OiB0cnVlLFxuXHRcdC8vIHBhc3MgdGhydSBib2R5XG5cdFx0Ym9keTogYWN0aW9uLmJvZHlcblx0fVxuXHRyZXR1cm4geWllbGQgY2FsbChsb2dpbkZsb3csIG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNhc1YxTG9naW5GbG93KGFjdGlvbjogQXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0cmV0dXJuIHlpZWxkIGNhbGwoY3JlZGVudGlhbHNMb2dpbkZsb3csIGFjdGlvbiwgJ2NvZGVGcm9tQ2FzVjEnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGxvY2FsTG9naW5GbG93KGFjdGlvbjogQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0cmV0dXJuIHlpZWxkIGNhbGwoY3JlZGVudGlhbHNMb2dpbkZsb3csIGFjdGlvbiwgJ2NvZGVGcm9tTG9jYWxDcmVkZW50aWFscycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY2FzVGlja2V0TG9naW5GbG93KHRpY2tldDogc3RyaW5nLCBzZXJ2aWNlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBtb2RlbEZldGNoUmVxdWVzdEFjdGlvbjogTW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24gPSB7XG5cdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdG1vZGVsTmFtZTogJ2NvZGVGcm9tQ2FzVGlja2V0Jyxcblx0XHRub1N0b3JlOiB0cnVlLFxuXHRcdHF1ZXJ5UGFyYW1zOiB7XG5cdFx0XHR0aWNrZXQsXG5cdFx0XHRzZXJ2aWNlXG5cdFx0fVxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGxvZ2luRmxvdywgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogcGtjZUxvZ2luRmxvdyhfOiBBdXRoUEtDRUxvZ2luUmVxdWVzdEFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGlmICghYXBwQ29uZmlnLkNMSUVOVF9JRCB8fCAhYXBwQ29uZmlnLk9BVVRIX1BLQ0VfU0NPUEUgfHwgIWFwcENvbmZpZy5PQVVUSF9QS0NFX0VORFBPSU5UKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdPQXV0aCBQS0NFIHNldHRpbmdzIG1pc3NpbmcgaW4gQXBwQ29uZmlnJylcblx0fVxuXG5cdC8vIFNldCBzdGF0ZSBhbmQgY29kZSB2ZXJpZmllciBpbiBsb2NhbCBzdG9yYWdlIGZvciB1c2UgYWZ0ZXIgY29kZSBmbG93IHJlZGlyZWN0LlxuXHQvLyBUaGVzZSB3aWxsIGJlIHNlbnQgdG8gdGhlIGJhY2tlbmQgdG8gZ2V0IHRoZSBhY3R1YWwgYmVhcmVyIHRva2VuLlxuXHRjb25zdCBzdGF0ZSA9IHV1aWR2NCgpXG5cdGNvbnN0IGNvZGVWZXJpZmllciA9IHV1aWR2NCgpXG5cdGNvbnN0IHNoYTI1NkNvZGVWZXJpZmllciA9IHlpZWxkIGNhbGwoc2hhMjU2QXN5bmMsIGNvZGVWZXJpZmllcilcblx0Y29uc3QgY29kZUNoYWxsZW5nZSA9IGJhc2U2NFVybEVuY29kZShzaGEyNTZDb2RlVmVyaWZpZXIpXG5cdG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RTdGF0ZShzdGF0ZSlcblx0b2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdENvZGVWZXJpZmllcihjb2RlVmVyaWZpZXIpXG5cblx0Y29uc3QgaGlzdG9yeSA9IHdpbmRvd1NlcnZpY2UuZ2V0SGlzdG9yeSgpXG5cdGNvbnN0IGxvY2F0aW9uID0gd2luZG93U2VydmljZS5nZXRMb2NhdGlvbigpXG5cblx0Ly8gUmVkaXJlY3QgdG8gQlMgY29kZSBmbG93IGF1dGggZW5kcG9pbnQgKHdoaWNoIHdpbGwgcmVkaXJlY3QgYmFjayBoZXJlKVxuXHRjb25zdCBwa2NlQXV0aFJlZGlyZWN0VVJMID0gYCR7YXBwQ29uZmlnLk9BVVRIX1BLQ0VfRU5EUE9JTlR9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0cmVzcG9uc2VfdHlwZTogJ2NvZGUnLFxuXHRcdGNsaWVudF9pZDogYXBwQ29uZmlnLkNMSUVOVF9JRCxcblx0XHRzdGF0ZTogc3RhdGUsXG5cdFx0c2NvcGU6IGFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFLFxuXHRcdGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxlbmdlLFxuXHRcdGNvZGVfY2hhbGxlbmdlX21ldGhvZDogJ1MyNTYnLFxuXHRcdHJlZGlyZWN0X3VyaTogbG9jYXRpb24ub3JpZ2luXG5cdH0pfWBcblx0Ly8gVE9ETzogcmVmYWN0b3IgdG8gYWxsb3cgdGVzdGluZyB3aXRoIHdpbmRvd1NlcnZpY2Vcblx0d2luZG93LmxvY2F0aW9uLnJlcGxhY2UocGtjZUF1dGhSZWRpcmVjdFVSTClcblx0eWllbGQgY2FsbCgoKSA9PiB7fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBoYW5kbGVBdXRoRmFpbHVyZShhY3Rpb246IE1vZGVsRmV0Y2hFcnJvckFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdC8vIFRoaXMgc2hvdWxkIGJlIHVubGlrZWx5IHNpbmNlIHdlIG5vcm1hbGx5IGhhdmUgYSByZWZyZXNoIHRva2VuIGxvb3AgaGFwcGVuaW5nXG5cdC8vIGJ1dCBpZiB0aGUgYXBwIGlzIGJhY2tncm91bmRlZCwgdGhlIGxvb3AgbWlnaHQgbm90IGJlIGNhdWdodCB1cCB5ZXRcblx0aWYgKG9hdXRoVG9rZW4gJiYgYWN0aW9uLmVycm9yRGF0YSAmJiBhY3Rpb24uZXJyb3JEYXRhLnN0YXR1cyA9PT0gSFRUUF9TVEFUVVNfQ09ERS5VTkFVVEhPUklaRUQpIHtcblx0XHRsb2dnZXIuZGVidWcoJ3Rva2VuIGV4cGlyZWQgLSByZWZyZXNoaW5nJylcblx0XHR5aWVsZCBjYWxsKHBlcmZvcm1Ub2tlblJlZnJlc2gpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldE9BdXRoVG9rZW46IFRva2VuQWNjZXNzRnVuY3Rpb24gPSBmdW5jdGlvbiogKG1vZGVsTmFtZTogc3RyaW5nKSB7XG5cdC8vIERvbid0IHRyeSB0byByZWZyZXNoIHRoZSB0b2tlbiBpZiB3ZSdyZSBhbHJlYWR5IGluIGEgcmVxdWVzdCB0byByZWZyZXNoIHRoZSB0b2tlblxuXHRpZiAobW9kZWxOYW1lID09PSAnZ2V0VG9rZW4nKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRpZiAob2F1dGhUb2tlbiAmJiBvYXV0aFRva2VuWycuZXhwaXJlcyddKSB7XG5cdFx0Y29uc3QgdGhpcnR5U2Vjb25kc0Zyb21Ob3cgPSBuZXcgRGF0ZSgpXG5cdFx0dGhpcnR5U2Vjb25kc0Zyb21Ob3cuc2V0U2Vjb25kcyh0aGlydHlTZWNvbmRzRnJvbU5vdy5nZXRTZWNvbmRzKCkgKyAzMClcblx0XHRpZiAobmV3IERhdGUob2F1dGhUb2tlblsnLmV4cGlyZXMnXSkgPCB0aGlydHlTZWNvbmRzRnJvbU5vdykge1xuXHRcdFx0Ly8gc3RhcnQgYSB0b2tlbiByZWZyZXNoIGFuZCB3YWl0IGZvciB0aGUgc3VjY2VzcyBhY3Rpb24gaW4gY2FzZSBhbm90aGVyIHJlZnJlc2ggaXMgY3VycmVudGx5IGhhcHBlbmluZ1xuXHRcdFx0eWllbGQgY2FsbChwZXJmb3JtVG9rZW5SZWZyZXNoKVxuXHRcdFx0cmV0dXJuIG9hdXRoVG9rZW5cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9hdXRoVG9rZW5cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qIGF1dGhTYWdhKFxuXHRvYXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtOiBPQXV0aFBlcnNpc3RlbmNlU2VydmljZSA9IGRlZmF1bHRPQXV0aFBlcnNpc3RlbmNlU2VydmljZSxcblx0dGlja2V0UHJvdmlkZXJTZXJ2aWNlOiBUaWNrZXRQcm92aWRlclNlcnZpY2UgPSBkZWZhdWx0VGlja2V0UHJvdmlkZXJTZXJ2aWNlLFxuXHRjb2RlUHJvdmlkZXJTZXJ2aWNlOiBDb2RlUHJvdmlkZXJTZXJ2aWNlID0gZGVmYXVsdENvZGVQcm92aWRlclNlcnZpY2Vcbik6IFNhZ2FJdGVyYXRvciB7XG5cdGxvZ2dlciA9IGdldExvZ2dlcigpXG5cdG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlID0gb2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2VQYXJhbVxuXG5cdC8vIFRyeSB0byBnZXQgcGVyc2lzdGVkIHRva2VuIChub3JtYWxseSBpbiBBc3luY1N0b3JhZ2Ugb3IgTG9jYWxTdG9yYWdlKVxuXHRvYXV0aFRva2VuID0geWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRUb2tlbilcblxuXHQvLyBJZiBubyB0b2tlbiwgdHJ5IHRvIGdldCBDQVMgdGlja2V0IChub3JtYWxseSBpbiB0aGUgVVJMKSwgdXNlIGl0IHRvIGdldCBhIHRva2VuXG5cdGlmICghb2F1dGhUb2tlbikge1xuXHRcdGNvbnN0IGNhc1RpY2tldCA9IHRpY2tldFByb3ZpZGVyU2VydmljZS5nZXRUaWNrZXQoKVxuXHRcdHRpY2tldFByb3ZpZGVyU2VydmljZS5yZW1vdmVUaWNrZXQoKVxuXHRcdGNvbnN0IHNlcnZpY2UgPSB0aWNrZXRQcm92aWRlclNlcnZpY2UuZ2V0QXBwU2VydmljZU5hbWUoKVxuXHRcdGlmIChjYXNUaWNrZXQgJiYgc2VydmljZSkge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoY2FzVGlja2V0TG9naW5GbG93LCBjYXNUaWNrZXQsIHNlcnZpY2UpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgT0F1dGggQ29kZSBleGlzdHMgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgdG8gZ2V0IGEgdG9rZW5cblx0Y29uc3QgY29kZSA9IGNvZGVQcm92aWRlclNlcnZpY2UuZ2V0Q29kZSgpXG5cdGlmIChjb2RlKSB7XG5cdFx0Ly8gTG9nIG91dCB0aGUgY3VycmVudCB1c2VyIGlmIGEgbmV3IHRva2VuIGlzIGFib3V0IHRvIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBPQXV0aCBDb2RlXG5cdFx0aWYgKG9hdXRoVG9rZW4pIHtcblx0XHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRcdGNsZWFyVXNlckRhdGE6IHB1dDxNb2RlbFJlbW92ZUtleUFjdGlvbj4oeyB0eXBlOiBNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLCBtb2RlbFBhdGg6ICd1c2VyJyB9KSxcblx0XHRcdFx0Y2xlYXJQZXJzaXN0ZW50VG9rZW46IGNhbGwob2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBudWxsKVxuXHRcdFx0fSlcblx0XHRcdG9hdXRoVG9rZW4gPSBudWxsXG5cdFx0fVxuXG5cdFx0Ly8gSWYgT0F1dGggc3RhdGUgZXhpc3RzIChub3JtYWxseSBpbiB0aGUgVVJMKSwgdXNlIGl0IGluIGFkZGl0aW9uIHRvIHRoZSBjb2RlIGZvciBQS0NFIGxvZ2luIGZsb3dcblx0XHRjb25zdCBzdGF0ZSA9IGNvZGVQcm92aWRlclNlcnZpY2UuZ2V0U3RhdGUoKVxuXHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZUFuZFN0YXRlLCBjb2RlLCBzdGF0ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZSwgY29kZSlcblx0XHR9XG5cdH1cblx0Y29kZVByb3ZpZGVyU2VydmljZS5yZW1vdmVDb2RlQW5kU3RhdGUoKVxuXG5cdHlpZWxkIHB1dDxBdXRoVG9rZW5BY3Rpb24+KHsgdHlwZTogQVVUSF9UT0tFTl9BQ1RJT05fVFlQRS5BVVRIX0lOSVRJQUxJWkVELCBvYXV0aFRva2VuIH0pXG5cblx0eWllbGQgdGFrZUV2ZXJ5KE1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFLlRSWV9GRVRDSF9GQUlMRUQsIGhhbmRsZUF1dGhGYWlsdXJlKVxuXG5cdGRvIHtcblx0XHRpZiAoIW9hdXRoVG9rZW4pIHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0Y2FzVjFBY3Rpb24sXG5cdFx0XHRcdGxvY2FsTG9naW5BY3Rpb24sXG5cdFx0XHRcdHBrY2VMb2dpbkFjdGlvblxuXHRcdFx0fToge1xuXHRcdFx0XHRjYXNWMUFjdGlvbj86IEF1dGhDYXNWMUxvZ2luUmVxdWVzdEFjdGlvblxuXHRcdFx0XHRsb2NhbExvZ2luQWN0aW9uPzogQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uXG5cdFx0XHRcdHBrY2VMb2dpbkFjdGlvbj86IEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uXG5cdFx0XHR9ID0geWllbGQgcmFjZSh7XG5cdFx0XHRcdGNhc1YxQWN0aW9uOiB0YWtlKEFVVEhfQ0FTX1YxX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUuQ0FTX1YxX0xPR0lOX1JFUVVFU1QpLFxuXHRcdFx0XHRsb2NhbExvZ2luQWN0aW9uOiB0YWtlKEFVVEhfTE9DQUxfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRS5MT0NBTF9MT0dJTl9SRVFVRVNUKSxcblx0XHRcdFx0cGtjZUxvZ2luQWN0aW9uOiB0YWtlKEFVVEhfUEtDRV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLlBLQ0VfTE9HSU5fUkVRVUVTVClcblx0XHRcdH0pXG5cblx0XHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fUkVRVUVTVEVEIH0pXG5cdFx0XHRpZiAoY2FzVjFBY3Rpb24pIHtcblx0XHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoY2FzVjFMb2dpbkZsb3csIGNhc1YxQWN0aW9uKVxuXHRcdFx0fSBlbHNlIGlmIChsb2NhbExvZ2luQWN0aW9uKSB7XG5cdFx0XHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKGxvY2FsTG9naW5GbG93LCBsb2NhbExvZ2luQWN0aW9uKVxuXHRcdFx0fSBlbHNlIGlmIChwa2NlTG9naW5BY3Rpb24pIHtcblx0XHRcdFx0Ly8gb2F1dGhUb2tlbiBpcyBub3QgcmV0dXJuZWQgaGVyZSwgYXMgdGhpcyBmbG93IHdpbGwgcmVzdWx0IGluIGEgd2luZG93IHJlZGlyZWN0XG5cdFx0XHRcdHlpZWxkIGNhbGwocGtjZUxvZ2luRmxvdywgcGtjZUxvZ2luQWN0aW9uKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvYXV0aFRva2VuKSB7XG5cdFx0XHR5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgb2F1dGhUb2tlbilcblx0XHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRcdGxvZ2luU3VjY2VzczogcHV0PEF1dGhUb2tlblN1Y2Nlc3NBY3Rpb24+KHtcblx0XHRcdFx0XHR0eXBlOiBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuR0VUX1RPS0VOX1NVQ0NFRURFRCxcblx0XHRcdFx0XHRvYXV0aFRva2VuXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRsb2dPdXQ6IHRha2UoQVVUSF9BQ1RJT05fVFlQRS5MT0dfT1VUX1JFUVVFU1RFRClcblx0XHRcdH0pXG5cdFx0fSBlbHNlIHtcblx0XHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fRkFJTEVEIH0pXG5cdFx0fVxuXG5cdFx0eWllbGQgYWxsKHtcblx0XHRcdGNsZWFyVXNlckRhdGE6IHB1dDxNb2RlbFJlbW92ZUtleUFjdGlvbj4oeyB0eXBlOiBNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLCBtb2RlbFBhdGg6ICd1c2VyJyB9KSxcblx0XHRcdGNsZWFyUGVyc2lzdGVudFRva2VuOiBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgbnVsbClcblx0XHR9KVxuXHRcdG9hdXRoVG9rZW4gPSBudWxsXG5cdH0gd2hpbGUgKHRydWUpXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsb0JBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHdCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxzQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBUCxPQUFBO0FBU0EsSUFBQVEsT0FBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsSUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsUUFBQSxHQUFBVixPQUFBO0FBd0JBOztBQUVPLE1BQU1XLHlCQUF5QixHQUFHQSxDQUFDQyxNQUFpQixFQUFFQyxTQUFpQixLQUM3RSxJQUFBQywwQ0FBaUMsRUFBQ0YsTUFBTSxDQUFDLElBQUlBLE1BQU0sQ0FBQ0csU0FBUyxLQUFLRixTQUFTO0FBQUFHLE9BQUEsQ0FBQUwseUJBQUEsR0FBQUEseUJBQUE7QUFFckUsTUFBTU0sNkJBQTZCLEdBQUlKLFNBQWlCLElBQU1LLGNBQXlCLElBQzdGUCx5QkFBeUIsQ0FBQ08sY0FBYyxFQUFFTCxTQUFTLENBQUM7QUFBQUcsT0FBQSxDQUFBQyw2QkFBQSxHQUFBQSw2QkFBQTtBQUU5QyxNQUFNRSx1QkFBdUIsR0FBR0EsQ0FBQ1AsTUFBaUIsRUFBRUMsU0FBaUIsS0FDM0UsSUFBQU8seUNBQWdDLEVBQUNSLE1BQU0sQ0FBQyxJQUFJQSxNQUFNLENBQUNHLFNBQVMsS0FBS0YsU0FBUztBQUFBRyxPQUFBLENBQUFHLHVCQUFBLEdBQUFBLHVCQUFBO0FBRXBF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
|
|
414
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZWZmZWN0cyIsInJlcXVpcmUiLCJfdXVpZCIsIl9jb25zdGFudHMiLCJfY29kZVByb3ZpZGVyU2VydmljZSIsIl9vYXV0aFBlcnNpc3RlbmNlU2VydmljZSIsIl90aWNrZXRQcm92aWRlclNlcnZpY2UiLCJfd2luZG93U2VydmljZSIsIl90eXBlcyIsIl9sb2dnZXIiLCJfdXJsIiwiX2FjdGlvbnMiLCJtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiYWN0aW9uIiwibW9kZWxOYW1lIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwibW9kZWxQYXRoIiwiZXhwb3J0cyIsInRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiaW5jb21pbmdBY3Rpb24iLCJtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCIsImlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uIiwidGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkIiwib2F1dGhUb2tlbiIsIm9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlIiwicmVmcmVzaExvY2siLCJsb2dnZXIiLCJnZXRUb2tlbkZyb21Db2RlIiwiY29kZSIsImFwcENvbmZpZyIsImdldEFwcENvbmZpZyIsIkNMSUVOVF9JRCIsIkNMSUVOVF9TRUNSRVQiLCJFcnJvciIsImdldFRva2VuTW9kZWxOYW1lIiwiZm9ybUJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJncmFudF90eXBlIiwiY2xpZW50X2lkIiwiY2xpZW50X3NlY3JldCIsInB1dCIsInR5cGUiLCJNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFIiwiRkVUQ0hfUkVRVUVTVCIsImJvZHkiLCJub1N0b3JlIiwiZmV0Y2hSZXN1bHRBY3Rpb24iLCJmZXRjaEVycm9yQWN0aW9uIiwicmFjZSIsInRha2UiLCJkYXRhIiwiZ2V0VG9rZW5Gcm9tQ29kZUFuZFN0YXRlIiwic3RhdGUiLCJPQVVUSF9QS0NFX1NDT1BFIiwiT0FVVEhfUEtDRV9FTkRQT0lOVCIsImNvZGVWZXJpZmllciIsImNhbGwiLCJnZXRQZXJzaXN0ZWRDb2RlVmVyaWZpZXIiLCJwZXJzaXN0ZWRTdGF0ZSIsImdldFBlcnNpc3RlZFN0YXRlIiwicGVyc2lzdFN0YXRlIiwicGVyc2lzdENvZGVWZXJpZmllciIsImxvY2F0aW9uIiwid2luZG93U2VydmljZSIsImdldExvY2F0aW9uIiwic2NvcGUiLCJjb2RlX3ZlcmlmaWVyIiwicmVkaXJlY3RfdXJpIiwib3JpZ2luIiwiZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuIiwib2F1dGhUb2tlblBhcmFtIiwicmVmcmVzaF90b2tlbiIsImFwcGVuZCIsImVycm9yRGF0YSIsInN0YXR1cyIsIkhUVFBfU1RBVFVTX0NPREUiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJwZXJmb3JtVG9rZW5SZWZyZXNoIiwicmVmcmVzaFN1Y2Nlc3MiLCJBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUiLCJUT0tFTl9SRUZSRVNIX1NVQ0NFRURFRCIsInJlZnJlc2hGYWlsZWQiLCJBVVRIX0FDVElPTl9UWVBFIiwiVE9LRU5fUkVGUkVTSF9GQUlMRUQiLCJkZWJ1ZyIsIm9yaWdpbmFsQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJwZXJzaXN0VG9rZW4iLCJhbGwiLCJsb2dPdXQiLCJMT0dfT1VUX1JFUVVFU1RFRCIsImxvZ2luRmxvdyIsIm1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uIiwiY3JlZGVudGlhbHNMb2dpbkZsb3ciLCJub1JldHJ5IiwiY2FzVjFMb2dpbkZsb3ciLCJsb2NhbExvZ2luRmxvdyIsImNhc1RpY2tldExvZ2luRmxvdyIsInRpY2tldCIsInNlcnZpY2UiLCJxdWVyeVBhcmFtcyIsInBrY2VMb2dpbkZsb3ciLCJfIiwidXVpZHY0Iiwic2hhMjU2Q29kZVZlcmlmaWVyIiwic2hhMjU2QXN5bmMiLCJjb2RlQ2hhbGxlbmdlIiwiYmFzZTY0VXJsRW5jb2RlIiwicGtjZUF1dGhSZWRpcmVjdFVSTCIsInJlc3BvbnNlX3R5cGUiLCJjb2RlX2NoYWxsZW5nZSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCIsInJlcGxhY2UiLCJoYW5kbGVBdXRoRmFpbHVyZSIsIlVOQVVUSE9SSVpFRCIsImdldE9BdXRoVG9rZW4iLCJ0aGlydHlTZWNvbmRzRnJvbU5vdyIsIkRhdGUiLCJzZXRTZWNvbmRzIiwiZ2V0U2Vjb25kcyIsImF1dGhTYWdhIiwib2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2VQYXJhbSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImRlZmF1bHRPQXV0aFBlcnNpc3RlbmNlU2VydmljZSIsInRpY2tldFByb3ZpZGVyU2VydmljZSIsImRlZmF1bHRUaWNrZXRQcm92aWRlclNlcnZpY2UiLCJjb2RlUHJvdmlkZXJTZXJ2aWNlIiwiZGVmYXVsdENvZGVQcm92aWRlclNlcnZpY2UiLCJnZXRMb2dnZXIiLCJnZXRQZXJzaXN0ZWRUb2tlbiIsImNhc1RpY2tldCIsImdldFRpY2tldCIsInJlbW92ZVRpY2tldCIsImdldEFwcFNlcnZpY2VOYW1lIiwiZ2V0Q29kZSIsImNsZWFyVXNlckRhdGEiLCJNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFIiwiY2xlYXJQZXJzaXN0ZW50VG9rZW4iLCJnZXRTdGF0ZSIsInJlbW92ZUNvZGVBbmRTdGF0ZSIsIkFVVEhfVE9LRU5fQUNUSU9OX1RZUEUiLCJBVVRIX0lOSVRJQUxJWkVEIiwidGFrZUV2ZXJ5IiwiTU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUiLCJUUllfRkVUQ0hfRkFJTEVEIiwiY2FzVjFBY3Rpb24iLCJsb2NhbExvZ2luQWN0aW9uIiwicGtjZUxvZ2luQWN0aW9uIiwiQVVUSF9DQVNfVjFfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSIsIkNBU19WMV9MT0dJTl9SRVFVRVNUIiwiQVVUSF9MT0NBTF9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFIiwiTE9DQUxfTE9HSU5fUkVRVUVTVCIsIkFVVEhfUEtDRV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFIiwiUEtDRV9MT0dJTl9SRVFVRVNUIiwiTE9HSU5fUkVRVUVTVEVEIiwibG9naW5TdWNjZXNzIiwiR0VUX1RPS0VOX1NVQ0NFRURFRCIsIkxPR0lOX0ZBSUxFRCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9hdXRoU2FnYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWdhSXRlcmF0b3IgfSBmcm9tICdAcmVkdXgtc2FnYS9jb3JlJ1xuaW1wb3J0IHsgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXG5pbXBvcnQgeyBhbGwsIGNhbGwsIHB1dCwgcmFjZSwgdGFrZSwgdGFrZUV2ZXJ5IH0gZnJvbSAncmVkdXgtc2FnYS9lZmZlY3RzJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IGdldEFwcENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cydcbmltcG9ydCB7IGNvZGVQcm92aWRlclNlcnZpY2UgYXMgZGVmYXVsdENvZGVQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb2RlUHJvdmlkZXJTZXJ2aWNlJ1xuaW1wb3J0IHsgb2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UgYXMgZGVmYXVsdE9BdXRoUGVyc2lzdGVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UnXG5pbXBvcnQgeyB0aWNrZXRQcm92aWRlclNlcnZpY2UgYXMgZGVmYXVsdFRpY2tldFByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldFByb3ZpZGVyU2VydmljZSdcbmltcG9ydCB7IHdpbmRvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93aW5kb3dTZXJ2aWNlJ1xuaW1wb3J0IHtcblx0Q29kZVByb3ZpZGVyU2VydmljZSxcblx0SFRUUF9TVEFUVVNfQ09ERSxcblx0T0F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UsXG5cdE9BdXRoVG9rZW4sXG5cdE9BdXRoVG9rZW5Pck51bGwsXG5cdFRpY2tldFByb3ZpZGVyU2VydmljZSxcblx0VG9rZW5BY2Nlc3NGdW5jdGlvblxufSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IGdldExvZ2dlciwgTG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJ1xuaW1wb3J0IHsgYmFzZTY0VXJsRW5jb2RlLCBzaGEyNTZBc3luYyB9IGZyb20gJy4uLy4uL3V0aWxzL3VybCdcbmltcG9ydCB7XG5cdEFVVEhfQUNUSU9OX1RZUEUsXG5cdEFVVEhfQ0FTX1YxX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdEFVVEhfTE9DQUxfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9QS0NFX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSxcblx0QXV0aEFjdGlvbixcblx0QXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRBdXRoVG9rZW5BY3Rpb24sXG5cdEF1dGhUb2tlblN1Y2Nlc3NBY3Rpb24sXG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uLFxuXHRpc1RyYW5zaWVudE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24sXG5cdE1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFLFxuXHRNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLFxuXHRNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLFxuXHRNb2RlbEZldGNoRXJyb3JBY3Rpb24sXG5cdE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLFxuXHRNb2RlbEZldGNoUmVzdWx0QWN0aW9uLFxuXHRNb2RlbFJlbW92ZUtleUFjdGlvblxufSBmcm9tICcuLi9hY3Rpb25zJ1xuXG4vLyNyZWdpb24gSGVscGVyc1xuXG5leHBvcnQgY29uc3QgbWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZCA9IChhY3Rpb246IEFueUFjdGlvbiwgbW9kZWxOYW1lOiBzdHJpbmcpID0+XG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaFJlc3VsdEFjdGlvbihhY3Rpb24pICYmIGFjdGlvbi5tb2RlbFBhdGggPT09IG1vZGVsTmFtZVxuXG5leHBvcnQgY29uc3QgdGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQgPSAobW9kZWxOYW1lOiBzdHJpbmcpID0+IChpbmNvbWluZ0FjdGlvbjogQW55QWN0aW9uKSA9PlxuXHRtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGluY29taW5nQWN0aW9uLCBtb2RlbE5hbWUpXG5cbmV4cG9ydCBjb25zdCBtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCA9IChhY3Rpb246IEFueUFjdGlvbiwgbW9kZWxOYW1lOiBzdHJpbmcpID0+XG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gbW9kZWxOYW1lXG5cbmV4cG9ydCBjb25zdCB0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQgPSAobW9kZWxOYW1lOiBzdHJpbmcpID0+IChpbmNvbWluZ0FjdGlvbjogQW55QWN0aW9uKSA9PlxuXHRtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChpbmNvbWluZ0FjdGlvbiwgbW9kZWxOYW1lKVxuXG4vLyNlbmRyZWdpb24gSGVscGVyc1xuXG4vLyNyZWdpb24gTG9jYWwgVmFyaWFibGVzXG5cbmxldCBvYXV0aFRva2VuOiBPQXV0aFRva2VuT3JOdWxsID0gbnVsbFxubGV0IG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlOiBPQXV0aFBlcnNpc3RlbmNlU2VydmljZVxubGV0IHJlZnJlc2hMb2NrOiBib29sZWFuXG5sZXQgbG9nZ2VyOiBMb2dnZXJcblxuLy8jZW5kcmVnaW9uIExvY2FsIFZhcmlhYmxlc1xuXG5leHBvcnQgZnVuY3Rpb24qIGdldFRva2VuRnJvbUNvZGUoY29kZTogc3RyaW5nKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFhcHBDb25maWcuQ0xJRU5UX0lEIHx8ICFhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lEIGFuZCBDTElFTlRfU0VDUkVUIGFyZSByZXF1aXJlZCBpbiBBcHBDb25maWcnKVxuXHR9XG5cdGNvbnN0IGdldFRva2VuTW9kZWxOYW1lID0gJ2dldFRva2VuJ1xuXHRjb25zdCBmb3JtQm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuXHRcdGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuXHRcdGNsaWVudF9pZDogYXBwQ29uZmlnLkNMSUVOVF9JRCxcblx0XHRjbGllbnRfc2VjcmV0OiBhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVCxcblx0XHRjb2RlOiBjb2RlXG5cdH0pXG5cdHlpZWxkIHB1dDxNb2RlbEZldGNoUmVxdWVzdEFjdGlvbj4oe1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6IGdldFRva2VuTW9kZWxOYW1lLFxuXHRcdGJvZHk6IGZvcm1Cb2R5LFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbiB8fCAhZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tQ29kZUFuZFN0YXRlKGNvZGU6IHN0cmluZywgc3RhdGU6IHN0cmluZyk6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGlmICghYXBwQ29uZmlnLkNMSUVOVF9JRCB8fCAhYXBwQ29uZmlnLk9BVVRIX1BLQ0VfU0NPUEUgfHwgIWFwcENvbmZpZy5PQVVUSF9QS0NFX0VORFBPSU5UKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDTElFTlRfSUQsIE9BVVRIX1BLQ0VfU0NPUEUsIGFuZCBPQVVUSF9QS0NFX0VORFBPSU5UIGFyZSByZXF1aXJlZCBpbiBBcHBDb25maWcnKVxuXHR9XG5cblx0Ly8gdmFsaWRhdGUgcGVyc2lzdGVkIHZhbHVlc1xuXHRjb25zdCBjb2RlVmVyaWZpZXIgPSB5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZENvZGVWZXJpZmllcilcblx0aWYgKCFjb2RlVmVyaWZpZXIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29kZV92ZXJpZmllcicpXG5cdH1cblx0Y29uc3QgcGVyc2lzdGVkU3RhdGUgPSB5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFN0YXRlKVxuXHRpZiAocGVyc2lzdGVkU3RhdGUgIT09IHN0YXRlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN0YXRlJylcblx0fVxuXHQvLyBjbGVhciBwZXJzaXN0ZWQgdmFsdWVzXG5cdHlpZWxkIGNhbGwob2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFN0YXRlLCBudWxsKVxuXHR5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RDb2RlVmVyaWZpZXIsIG51bGwpXG5cblx0Ly8gZGlzcGF0Y2ggcmVxdWVzdFxuXHRjb25zdCBnZXRUb2tlbk1vZGVsTmFtZSA9ICdnZXRUb2tlbidcblx0Y29uc3QgbG9jYXRpb24gPSB3aW5kb3dTZXJ2aWNlLmdldExvY2F0aW9uKClcblx0Y29uc3QgZm9ybUJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcblx0XHRncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcblx0XHRjbGllbnRfaWQ6IGFwcENvbmZpZy5DTElFTlRfSUQsXG5cdFx0c2NvcGU6IGFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFLFxuXHRcdGNvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllcixcblx0XHRyZWRpcmVjdF91cmk6IGxvY2F0aW9uLm9yaWdpbixcblx0XHRjb2RlOiBjb2RlXG5cdH0pXG5cdHlpZWxkIHB1dDxNb2RlbEZldGNoUmVxdWVzdEFjdGlvbj4oe1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6IGdldFRva2VuTW9kZWxOYW1lLFxuXHRcdGJvZHk6IGZvcm1Cb2R5LFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbiB8fCAhZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuKG9hdXRoVG9rZW5QYXJhbTogT0F1dGhUb2tlbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGlmICghYXBwQ29uZmlnLkNMSUVOVF9JRCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lELCBpcyByZXF1aXJlZCBpbiBBcHBDb25maWcnKVxuXHR9XG5cblx0Y29uc3QgZ2V0VG9rZW5Nb2RlbE5hbWUgPSAnZ2V0VG9rZW4nXG5cdGNvbnN0IGZvcm1Cb2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0Z3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuXHRcdGNsaWVudF9pZDogYXBwQ29uZmlnLkNMSUVOVF9JRCxcblx0XHRyZWZyZXNoX3Rva2VuOiBvYXV0aFRva2VuUGFyYW0ucmVmcmVzaF90b2tlblxuXHR9KVxuXHQvLyBjcmVhdGUgdGhlIGZvcm0gYm9keSBiYXNlZCBvbiBpZiB1c2luZyBhIGNsaWVudF9zZWNyZXQ6IHRyYWRpdGlvbmFsIE9BdXRoIHZzLiBQS0NFIGZsb3dcblx0aWYgKGFwcENvbmZpZy5DTElFTlRfU0VDUkVUKSB7XG5cdFx0Zm9ybUJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgYXBwQ29uZmlnLkNMSUVOVF9TRUNSRVQpXG5cdH1cblx0eWllbGQgcHV0PE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uPih7XG5cdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdG1vZGVsTmFtZTogZ2V0VG9rZW5Nb2RlbE5hbWUsXG5cdFx0Ym9keTogZm9ybUJvZHksXG5cdFx0bm9TdG9yZTogdHJ1ZVxuXHR9KVxuXHRjb25zdCB7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb24sXG5cdFx0ZmV0Y2hFcnJvckFjdGlvblxuXHR9OiB7IGZldGNoUmVzdWx0QWN0aW9uPzogTW9kZWxGZXRjaFJlc3VsdEFjdGlvbjsgZmV0Y2hFcnJvckFjdGlvbj86IE1vZGVsRmV0Y2hFcnJvckFjdGlvbiB9ID0geWllbGQgcmFjZSh7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKSxcblx0XHRmZXRjaEVycm9yQWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChnZXRUb2tlbk1vZGVsTmFtZSkpXG5cdH0pXG5cdC8vIGFueSBlcnJvciByZXNwb25zZVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbikge1xuXHRcdC8vIGlnbm9yZSBzZXJ2ZXIgZXJyb3JzXG5cdFx0aWYgKFxuXHRcdFx0ZmV0Y2hFcnJvckFjdGlvbi5lcnJvckRhdGE/LnN0YXR1cyAmJlxuXHRcdFx0ZmV0Y2hFcnJvckFjdGlvbi5lcnJvckRhdGEuc3RhdHVzID49IEhUVFBfU1RBVFVTX0NPREUuSU5URVJOQUxfU0VSVkVSX0VSUk9SXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gb2F1dGhUb2tlblBhcmFtXG5cdFx0fVxuXHRcdHJldHVybiBudWxsXG5cdH1cblx0Ly8gZm9yIHNvbWUgcmVhc29uIHRoZSByZXNwb25zZSBoYWQgbm8gYm9keVxuXHRpZiAoIWZldGNoUmVzdWx0QWN0aW9uPy5kYXRhKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRyZXR1cm4gZmV0Y2hSZXN1bHRBY3Rpb24uZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHBlcmZvcm1Ub2tlblJlZnJlc2goKTogU2FnYUl0ZXJhdG9yIHtcblx0aWYgKHJlZnJlc2hMb2NrIHx8ICFvYXV0aFRva2VuKSB7XG5cdFx0Ly8gYWxyZWFkeSByZWZyZXNoaW5nLiB3YWl0IGZvciB0aGUgY3VycmVudCByZWZyZXNoIHRvIHN1Y2NlZWQgb3IgZmFpbC5cblx0XHR5aWVsZCByYWNlKHtcblx0XHRcdHJlZnJlc2hTdWNjZXNzOiB0YWtlKEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX1NVQ0NFRURFRCksXG5cdFx0XHRyZWZyZXNoRmFpbGVkOiB0YWtlKEFVVEhfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9GQUlMRUQpXG5cdFx0fSlcblx0XHRyZXR1cm5cblx0fVxuXHRsb2dnZXIuZGVidWcoJ1JlZnJlc2hpbmcgT0F1dGggdG9rZW4nKVxuXHRyZWZyZXNoTG9jayA9IHRydWVcblx0Ly8gb2F1dGhUb2tlbiB3aWxsIGJlIHNldCB0bzpcblx0Ly8gMS4gbmV3IHRva2VuIChzdWNjZXNzKVxuXHQvLyAyLiBzYW1lIHRva2VuIChmYWlsZWQgZnJvbSB0aW1lb3V0IG9yIHNlcnZlciBlcnJvcilcblx0Ly8gMy4gbnVsbCAoZmFpbClcblx0Y29uc3Qgb3JpZ2luYWxBY2Nlc3NUb2tlbiA9IG9hdXRoVG9rZW4uYWNjZXNzX3Rva2VuXG5cdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKGdldFRva2VuRnJvbVJlZnJlc2hUb2tlbiwgb2F1dGhUb2tlbilcblx0aWYgKCEhb2F1dGhUb2tlbiAmJiBvYXV0aFRva2VuLmFjY2Vzc190b2tlbiAhPT0gb3JpZ2luYWxBY2Nlc3NUb2tlbikge1xuXHRcdGxvZ2dlci5kZWJ1ZygnT0F1dGggdG9rZW4gcmVmcmVzaGVkJylcblx0XHR5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgb2F1dGhUb2tlbilcblx0XHR5aWVsZCBwdXQ8QXV0aFRva2VuU3VjY2Vzc0FjdGlvbj4oeyB0eXBlOiBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQsIG9hdXRoVG9rZW4gfSlcblx0fSBlbHNlIGlmIChvYXV0aFRva2VuID09PSBudWxsKSB7XG5cdFx0bG9nZ2VyLmRlYnVnKCdPQXV0aCB0b2tlbiBmYWlsZWQgdG8gcmVmcmVzaCcpXG5cdFx0Ly8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIG91dHNpZGUgb2YgdGhlIHRva2VuIGhhdmluZyBiZWVuIHJldm9rZWQgb24gdGhlIHNlcnZlciBzaWRlXG5cdFx0eWllbGQgYWxsKHtcblx0XHRcdHJlZnJlc2hGYWlsZWQ6IHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9GQUlMRUQgfSksXG5cdFx0XHRsb2dPdXQ6IHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HX09VVF9SRVFVRVNURUQgfSlcblx0XHR9KVxuXHR9XG5cdHJlZnJlc2hMb2NrID0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBsb2dpbkZsb3cobW9kZWxGZXRjaFJlcXVlc3RBY3Rpb246IE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0eWllbGQgcHV0KG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uKVxuXHRjb25zdCB7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb24sXG5cdFx0ZmV0Y2hFcnJvckFjdGlvblxuXHR9OiB7IGZldGNoUmVzdWx0QWN0aW9uPzogTW9kZWxGZXRjaFJlc3VsdEFjdGlvbjsgZmV0Y2hFcnJvckFjdGlvbj86IE1vZGVsRmV0Y2hFcnJvckFjdGlvbiB9ID0geWllbGQgcmFjZSh7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQobW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24ubW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQobW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24ubW9kZWxOYW1lKSlcblx0fSlcblx0aWYgKGZldGNoRXJyb3JBY3Rpb24pIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdGNvbnN0IGNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGZldGNoUmVzdWx0QWN0aW9uPy5kYXRhPy5jb2RlXG5cdGlmICghY29kZSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0cmV0dXJuIHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZSwgY29kZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjcmVkZW50aWFsc0xvZ2luRmxvdyhcblx0YWN0aW9uOiBBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb24gfCBBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb24sXG5cdG1vZGVsTmFtZTogc3RyaW5nXG4pOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBtb2RlbEZldGNoUmVxdWVzdEFjdGlvbjogTW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24gPSB7XG5cdFx0Ly8gc2V0IHJlcXVpcmVkIGRlZmF1bHRzXG5cdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdG1vZGVsTmFtZSxcblx0XHRub1N0b3JlOiB0cnVlLFxuXHRcdC8vIGZvcmNlIG5vIHJldHJ5XG5cdFx0bm9SZXRyeTogdHJ1ZSxcblx0XHQvLyBwYXNzIHRocnUgYm9keVxuXHRcdGJvZHk6IGFjdGlvbi5ib2R5XG5cdH1cblx0cmV0dXJuIHlpZWxkIGNhbGwobG9naW5GbG93LCBtb2RlbEZldGNoUmVxdWVzdEFjdGlvbilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjYXNWMUxvZ2luRmxvdyhhY3Rpb246IEF1dGhDYXNWMUxvZ2luUmVxdWVzdEFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdHJldHVybiB5aWVsZCBjYWxsKGNyZWRlbnRpYWxzTG9naW5GbG93LCBhY3Rpb24sICdjb2RlRnJvbUNhc1YxJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBsb2NhbExvZ2luRmxvdyhhY3Rpb246IEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdHJldHVybiB5aWVsZCBjYWxsKGNyZWRlbnRpYWxzTG9naW5GbG93LCBhY3Rpb24sICdjb2RlRnJvbUxvY2FsQ3JlZGVudGlhbHMnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNhc1RpY2tldExvZ2luRmxvdyh0aWNrZXQ6IHN0cmluZywgc2VydmljZTogc3RyaW5nKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb246IE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uID0ge1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6ICdjb2RlRnJvbUNhc1RpY2tldCcsXG5cdFx0bm9TdG9yZTogdHJ1ZSxcblx0XHRxdWVyeVBhcmFtczoge1xuXHRcdFx0dGlja2V0LFxuXHRcdFx0c2VydmljZVxuXHRcdH1cblx0fVxuXHRyZXR1cm4geWllbGQgY2FsbChsb2dpbkZsb3csIG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHBrY2VMb2dpbkZsb3coXzogQXV0aFBLQ0VMb2dpblJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRpZiAoIWFwcENvbmZpZy5DTElFTlRfSUQgfHwgIWFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFIHx8ICFhcHBDb25maWcuT0FVVEhfUEtDRV9FTkRQT0lOVCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lELCBPQVVUSF9QS0NFX1NDT1BFLCBhbmQgT0FVVEhfUEtDRV9FTkRQT0lOVCBhcmUgcmVxdWlyZWQgaW4gQXBwQ29uZmlnJylcblx0fVxuXG5cdC8vIEdlbmVyYXRlIHN0YXRlIGFuZCBjb2RlIHZlcmlmaWVyIHZhbHVlc1xuXHRjb25zdCBzdGF0ZSA9IHV1aWR2NCgpXG5cdGNvbnN0IGNvZGVWZXJpZmllciA9IHV1aWR2NCgpXG5cdGNvbnN0IHNoYTI1NkNvZGVWZXJpZmllciA9IHlpZWxkIGNhbGwoc2hhMjU2QXN5bmMsIGNvZGVWZXJpZmllcilcblx0Y29uc3QgY29kZUNoYWxsZW5nZSA9IHlpZWxkIGNhbGwoYmFzZTY0VXJsRW5jb2RlLCBzaGEyNTZDb2RlVmVyaWZpZXIpXG5cblx0Ly8gUGVyc2lzdCBzdGF0ZSBhbmQgY29kZSB2ZXJpZmllciBpbiBsb2NhbCBzdG9yYWdlIGZvciB1c2UgYWZ0ZXIgY29kZSBmbG93IHJlZGlyZWN0LlxuXHR5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RTdGF0ZSwgc3RhdGUpXG5cdHlpZWxkIGNhbGwob2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdENvZGVWZXJpZmllciwgY29kZVZlcmlmaWVyKVxuXG5cdC8vIFJlZGlyZWN0IHRvIEJTIGNvZGUgZmxvdyBhdXRoIGVuZHBvaW50ICh3aGljaCB3aWxsIHJlZGlyZWN0IGJhY2sgaGVyZSlcblx0Y29uc3QgbG9jYXRpb24gPSB3aW5kb3dTZXJ2aWNlLmdldExvY2F0aW9uKClcblx0Y29uc3QgcGtjZUF1dGhSZWRpcmVjdFVSTCA9IGAke2FwcENvbmZpZy5PQVVUSF9QS0NFX0VORFBPSU5UfT8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe1xuXHRcdHJlc3BvbnNlX3R5cGU6ICdjb2RlJyxcblx0XHRjbGllbnRfaWQ6IGFwcENvbmZpZy5DTElFTlRfSUQsXG5cdFx0c3RhdGU6IHN0YXRlLFxuXHRcdHNjb3BlOiBhcHBDb25maWcuT0FVVEhfUEtDRV9TQ09QRSxcblx0XHRjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSxcblx0XHRjb2RlX2NoYWxsZW5nZV9tZXRob2Q6ICdTMjU2Jyxcblx0XHRyZWRpcmVjdF91cmk6IGxvY2F0aW9uLm9yaWdpblxuXHR9KX1gXG5cdHlpZWxkIGNhbGwod2luZG93U2VydmljZS5yZXBsYWNlLCBwa2NlQXV0aFJlZGlyZWN0VVJMKVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGhhbmRsZUF1dGhGYWlsdXJlKGFjdGlvbjogTW9kZWxGZXRjaEVycm9yQWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0Ly8gVGhpcyBzaG91bGQgYmUgdW5saWtlbHkgc2luY2Ugd2Ugbm9ybWFsbHkgaGF2ZSBhIHJlZnJlc2ggdG9rZW4gbG9vcCBoYXBwZW5pbmdcblx0Ly8gYnV0IGlmIHRoZSBhcHAgaXMgYmFja2dyb3VuZGVkLCB0aGUgbG9vcCBtaWdodCBub3QgYmUgY2F1Z2h0IHVwIHlldFxuXHRpZiAob2F1dGhUb2tlbiAmJiBhY3Rpb24uZXJyb3JEYXRhICYmIGFjdGlvbi5lcnJvckRhdGEuc3RhdHVzID09PSBIVFRQX1NUQVRVU19DT0RFLlVOQVVUSE9SSVpFRCkge1xuXHRcdGxvZ2dlci5kZWJ1ZygndG9rZW4gZXhwaXJlZCAtIHJlZnJlc2hpbmcnKVxuXHRcdHlpZWxkIGNhbGwocGVyZm9ybVRva2VuUmVmcmVzaClcblx0fVxufVxuXG5leHBvcnQgY29uc3QgZ2V0T0F1dGhUb2tlbjogVG9rZW5BY2Nlc3NGdW5jdGlvbiA9IGZ1bmN0aW9uKiAobW9kZWxOYW1lOiBzdHJpbmcpIHtcblx0Ly8gRG9uJ3QgdHJ5IHRvIHJlZnJlc2ggdGhlIHRva2VuIGlmIHdlJ3JlIGFscmVhZHkgaW4gYSByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIHRva2VuXG5cdGlmIChtb2RlbE5hbWUgPT09ICdnZXRUb2tlbicpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdGlmIChvYXV0aFRva2VuICYmIG9hdXRoVG9rZW5bJy5leHBpcmVzJ10pIHtcblx0XHRjb25zdCB0aGlydHlTZWNvbmRzRnJvbU5vdyA9IG5ldyBEYXRlKClcblx0XHR0aGlydHlTZWNvbmRzRnJvbU5vdy5zZXRTZWNvbmRzKHRoaXJ0eVNlY29uZHNGcm9tTm93LmdldFNlY29uZHMoKSArIDMwKVxuXHRcdGlmIChuZXcgRGF0ZShvYXV0aFRva2VuWycuZXhwaXJlcyddKSA8IHRoaXJ0eVNlY29uZHNGcm9tTm93KSB7XG5cdFx0XHQvLyBzdGFydCBhIHRva2VuIHJlZnJlc2ggYW5kIHdhaXQgZm9yIHRoZSBzdWNjZXNzIGFjdGlvbiBpbiBjYXNlIGFub3RoZXIgcmVmcmVzaCBpcyBjdXJyZW50bHkgaGFwcGVuaW5nXG5cdFx0XHR5aWVsZCBjYWxsKHBlcmZvcm1Ub2tlblJlZnJlc2gpXG5cdFx0XHRyZXR1cm4gb2F1dGhUb2tlblxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2F1dGhUb2tlblxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiogYXV0aFNhZ2EoXG5cdG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlUGFyYW06IE9BdXRoUGVyc2lzdGVuY2VTZXJ2aWNlID0gZGVmYXVsdE9BdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLFxuXHR0aWNrZXRQcm92aWRlclNlcnZpY2U6IFRpY2tldFByb3ZpZGVyU2VydmljZSA9IGRlZmF1bHRUaWNrZXRQcm92aWRlclNlcnZpY2UsXG5cdGNvZGVQcm92aWRlclNlcnZpY2U6IENvZGVQcm92aWRlclNlcnZpY2UgPSBkZWZhdWx0Q29kZVByb3ZpZGVyU2VydmljZVxuKTogU2FnYUl0ZXJhdG9yIHtcblx0bG9nZ2VyID0gZ2V0TG9nZ2VyKClcblx0b2F1dGhQZXJzaXN0ZW5jZVNlcnZpY2UgPSBvYXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtXG5cblx0Ly8gVHJ5IHRvIGdldCBwZXJzaXN0ZWQgdG9rZW4gKG5vcm1hbGx5IGluIEFzeW5jU3RvcmFnZSBvciBMb2NhbFN0b3JhZ2UpXG5cdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKG9hdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFRva2VuKVxuXG5cdC8vIElmIG5vIHRva2VuLCB0cnkgdG8gZ2V0IENBUyB0aWNrZXQgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgdG8gZ2V0IGEgdG9rZW5cblx0aWYgKCFvYXV0aFRva2VuKSB7XG5cdFx0Y29uc3QgY2FzVGlja2V0ID0gdGlja2V0UHJvdmlkZXJTZXJ2aWNlLmdldFRpY2tldCgpXG5cdFx0dGlja2V0UHJvdmlkZXJTZXJ2aWNlLnJlbW92ZVRpY2tldCgpXG5cdFx0Y29uc3Qgc2VydmljZSA9IHRpY2tldFByb3ZpZGVyU2VydmljZS5nZXRBcHBTZXJ2aWNlTmFtZSgpXG5cdFx0aWYgKGNhc1RpY2tldCAmJiBzZXJ2aWNlKSB7XG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChjYXNUaWNrZXRMb2dpbkZsb3csIGNhc1RpY2tldCwgc2VydmljZSlcblx0XHR9XG5cdH1cblxuXHQvLyBJZiBPQXV0aCBDb2RlIGV4aXN0cyAobm9ybWFsbHkgaW4gdGhlIFVSTCksIHVzZSBpdCB0byBnZXQgYSB0b2tlblxuXHRjb25zdCBjb2RlID0gY29kZVByb3ZpZGVyU2VydmljZS5nZXRDb2RlKClcblx0aWYgKGNvZGUpIHtcblx0XHQvLyBMb2cgb3V0IHRoZSBjdXJyZW50IHVzZXIgaWYgYSBuZXcgdG9rZW4gaXMgYWJvdXQgdG8gYmUgZ2VuZXJhdGVkIGZyb20gdGhlIE9BdXRoIENvZGVcblx0XHRpZiAob2F1dGhUb2tlbikge1xuXHRcdFx0eWllbGQgYWxsKHtcblx0XHRcdFx0Y2xlYXJVc2VyRGF0YTogcHV0PE1vZGVsUmVtb3ZlS2V5QWN0aW9uPih7IHR5cGU6IE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsIG1vZGVsUGF0aDogJ3VzZXInIH0pLFxuXHRcdFx0XHRjbGVhclBlcnNpc3RlbnRUb2tlbjogY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG51bGwpXG5cdFx0XHR9KVxuXHRcdFx0b2F1dGhUb2tlbiA9IG51bGxcblx0XHR9XG5cblx0XHQvLyBJZiBPQXV0aCBzdGF0ZSBleGlzdHMgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgaW4gYWRkaXRpb24gdG8gdGhlIGNvZGUgZm9yIFBLQ0UgbG9naW4gZmxvd1xuXHRcdGNvbnN0IHN0YXRlID0gY29kZVByb3ZpZGVyU2VydmljZS5nZXRTdGF0ZSgpXG5cdFx0aWYgKHN0YXRlKSB7XG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUsIGNvZGUsIHN0YXRlKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChnZXRUb2tlbkZyb21Db2RlLCBjb2RlKVxuXHRcdH1cblx0fVxuXHRjb2RlUHJvdmlkZXJTZXJ2aWNlLnJlbW92ZUNvZGVBbmRTdGF0ZSgpXG5cblx0eWllbGQgcHV0PEF1dGhUb2tlbkFjdGlvbj4oeyB0eXBlOiBBVVRIX1RPS0VOX0FDVElPTl9UWVBFLkFVVEhfSU5JVElBTElaRUQsIG9hdXRoVG9rZW4gfSlcblxuXHR5aWVsZCB0YWtlRXZlcnkoTU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUuVFJZX0ZFVENIX0ZBSUxFRCwgaGFuZGxlQXV0aEZhaWx1cmUpXG5cblx0ZG8ge1xuXHRcdGlmICghb2F1dGhUb2tlbikge1xuXHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRjYXNWMUFjdGlvbixcblx0XHRcdFx0bG9jYWxMb2dpbkFjdGlvbixcblx0XHRcdFx0cGtjZUxvZ2luQWN0aW9uXG5cdFx0XHR9OiB7XG5cdFx0XHRcdGNhc1YxQWN0aW9uPzogQXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uXG5cdFx0XHRcdGxvY2FsTG9naW5BY3Rpb24/OiBBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb25cblx0XHRcdFx0cGtjZUxvZ2luQWN0aW9uPzogQXV0aFBLQ0VMb2dpblJlcXVlc3RBY3Rpb25cblx0XHRcdH0gPSB5aWVsZCByYWNlKHtcblx0XHRcdFx0Y2FzVjFBY3Rpb246IHRha2UoQVVUSF9DQVNfVjFfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRS5DQVNfVjFfTE9HSU5fUkVRVUVTVCksXG5cdFx0XHRcdGxvY2FsTG9naW5BY3Rpb246IHRha2UoQVVUSF9MT0NBTF9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLkxPQ0FMX0xPR0lOX1JFUVVFU1QpLFxuXHRcdFx0XHRwa2NlTG9naW5BY3Rpb246IHRha2UoQVVUSF9QS0NFX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUuUEtDRV9MT0dJTl9SRVFVRVNUKVxuXHRcdFx0fSlcblxuXHRcdFx0eWllbGQgcHV0PEF1dGhBY3Rpb24+KHsgdHlwZTogQVVUSF9BQ1RJT05fVFlQRS5MT0dJTl9SRVFVRVNURUQgfSlcblx0XHRcdGlmIChjYXNWMUFjdGlvbikge1xuXHRcdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChjYXNWMUxvZ2luRmxvdywgY2FzVjFBY3Rpb24pXG5cdFx0XHR9IGVsc2UgaWYgKGxvY2FsTG9naW5BY3Rpb24pIHtcblx0XHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwobG9jYWxMb2dpbkZsb3csIGxvY2FsTG9naW5BY3Rpb24pXG5cdFx0XHR9IGVsc2UgaWYgKHBrY2VMb2dpbkFjdGlvbikge1xuXHRcdFx0XHQvLyBvYXV0aFRva2VuIGlzIG5vdCByZXR1cm5lZCBoZXJlLCBhcyB0aGlzIGZsb3cgd2lsbCByZXN1bHQgaW4gYSB3aW5kb3cgcmVkaXJlY3Rcblx0XHRcdFx0eWllbGQgY2FsbChwa2NlTG9naW5GbG93LCBwa2NlTG9naW5BY3Rpb24pXG5cdFx0XHRcdC8vIGJyZWFrIGV4ZWN1dGlvblxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob2F1dGhUb2tlbikge1xuXHRcdFx0eWllbGQgY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG9hdXRoVG9rZW4pXG5cdFx0XHR5aWVsZCBhbGwoe1xuXHRcdFx0XHRsb2dpblN1Y2Nlc3M6IHB1dDxBdXRoVG9rZW5TdWNjZXNzQWN0aW9uPih7XG5cdFx0XHRcdFx0dHlwZTogQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLkdFVF9UT0tFTl9TVUNDRUVERUQsXG5cdFx0XHRcdFx0b2F1dGhUb2tlblxuXHRcdFx0XHR9KSxcblx0XHRcdFx0bG9nT3V0OiB0YWtlKEFVVEhfQUNUSU9OX1RZUEUuTE9HX09VVF9SRVFVRVNURUQpXG5cdFx0XHR9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR5aWVsZCBwdXQ8QXV0aEFjdGlvbj4oeyB0eXBlOiBBVVRIX0FDVElPTl9UWVBFLkxPR0lOX0ZBSUxFRCB9KVxuXHRcdH1cblxuXHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRjbGVhclVzZXJEYXRhOiBwdXQ8TW9kZWxSZW1vdmVLZXlBY3Rpb24+KHsgdHlwZTogTU9ERUxfUkVNT1ZFX0tFWV9BQ1RJT05fVFlQRSwgbW9kZWxQYXRoOiAndXNlcicgfSksXG5cdFx0XHRjbGVhclBlcnNpc3RlbnRUb2tlbjogY2FsbChvYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG51bGwpXG5cdFx0fSlcblx0XHRvYXV0aFRva2VuID0gbnVsbFxuXHR9IHdoaWxlICh0cnVlKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLG9CQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSx3QkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssc0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGNBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQVNBLElBQUFRLE9BQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLElBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFFBQUEsR0FBQVYsT0FBQTtBQXdCQTs7QUFFTyxNQUFNVyx5QkFBeUIsR0FBR0EsQ0FBQ0MsTUFBaUIsRUFBRUMsU0FBaUIsS0FDN0UsSUFBQUMsMENBQWlDLEVBQUNGLE1BQU0sQ0FBQyxJQUFJQSxNQUFNLENBQUNHLFNBQVMsS0FBS0YsU0FBUztBQUFBRyxPQUFBLENBQUFMLHlCQUFBLEdBQUFB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
|
|
@@ -19,6 +19,10 @@ const windowService = exports.windowService = {
|
|
|
19
19
|
setIsOnline: value => {
|
|
20
20
|
isOnline = value;
|
|
21
21
|
},
|
|
22
|
-
getIsOnline: () => typeof isOnline !== 'undefined' ? isOnline : window.navigator.onLine
|
|
22
|
+
getIsOnline: () => typeof isOnline !== 'undefined' ? isOnline : window.navigator.onLine,
|
|
23
|
+
replace: url => {
|
|
24
|
+
if (location) return;
|
|
25
|
+
window.location.replace(url);
|
|
26
|
+
}
|
|
23
27
|
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2NhdGlvbiIsImhpc3RvcnkiLCJpc09ubGluZSIsIndpbmRvd1NlcnZpY2UiLCJleHBvcnRzIiwic2V0TG9jYXRpb24iLCJ2YWx1ZSIsImdldExvY2F0aW9uIiwid2luZG93Iiwic2V0SGlzdG9yeSIsImdldEhpc3RvcnkiLCJzZXRJc09ubGluZSIsImdldElzT25saW5lIiwibmF2aWdhdG9yIiwib25MaW5lIiwicmVwbGFjZSIsInVybCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy93aW5kb3dTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpbXBsZUxvY2F0aW9uIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2luZG93U2VydmljZSB7XG5cdHNldExvY2F0aW9uOiAodmFsdWU/OiBTaW1wbGVMb2NhdGlvbikgPT4gdm9pZFxuXHRnZXRMb2NhdGlvbjogKCkgPT4gU2ltcGxlTG9jYXRpb24gfCBMb2NhdGlvblxuXHRzZXRIaXN0b3J5OiAodmFsdWU/OiBIaXN0b3J5KSA9PiB2b2lkXG5cdGdldEhpc3Rvcnk6ICgpID0+IEhpc3Rvcnlcblx0c2V0SXNPbmxpbmU6IChpc09ubGluZT86IGJvb2xlYW4pID0+IHZvaWRcblx0Z2V0SXNPbmxpbmU6ICgpID0+IGJvb2xlYW4sXG5cdHJlcGxhY2U6ICh1cmw6IHN0cmluZyB8IFVSTCkgPT4gdm9pZFxufVxuXG5sZXQgbG9jYXRpb246IFNpbXBsZUxvY2F0aW9uIHwgdW5kZWZpbmVkXG5sZXQgaGlzdG9yeTogSGlzdG9yeSB8IHVuZGVmaW5lZFxubGV0IGlzT25saW5lOiBib29sZWFuIHwgdW5kZWZpbmVkXG5cbmV4cG9ydCBjb25zdCB3aW5kb3dTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlID0ge1xuXHRzZXRMb2NhdGlvbjogKHZhbHVlPzogU2ltcGxlTG9jYXRpb24pID0+IHtcblx0XHRsb2NhdGlvbiA9IHZhbHVlXG5cdH0sXG5cdGdldExvY2F0aW9uOiAoKSA9PiBsb2NhdGlvbiB8fCB3aW5kb3cubG9jYXRpb24sXG5cdHNldEhpc3Rvcnk6ICh2YWx1ZT86IEhpc3RvcnkpID0+IHtcblx0XHRoaXN0b3J5ID0gdmFsdWVcblx0fSxcblx0Z2V0SGlzdG9yeTogKCkgPT4gaGlzdG9yeSB8fCB3aW5kb3cuaGlzdG9yeSxcblx0c2V0SXNPbmxpbmU6ICh2YWx1ZT86IGJvb2xlYW4pID0+IHtcblx0XHRpc09ubGluZSA9IHZhbHVlXG5cdH0sXG5cdGdldElzT25saW5lOiAoKSA9PiAodHlwZW9mIGlzT25saW5lICE9PSAndW5kZWZpbmVkJyA/IGlzT25saW5lIDogd2luZG93Lm5hdmlnYXRvci5vbkxpbmUpLFxuXHRyZXBsYWNlOiAodXJsOiBzdHJpbmcgfCBVUkwpID0+IHtcblx0XHRpZiAobG9jYXRpb24pIHJldHVyblxuXHRcdHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybClcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFZQSxJQUFJQSxRQUFvQztBQUN4QyxJQUFJQyxPQUE0QjtBQUNoQyxJQUFJQyxRQUE2QjtBQUUxQixNQUFNQyxhQUE0QixHQUFBQyxPQUFBLENBQUFELGFBQUEsR0FBRztFQUMzQ0UsV0FBVyxFQUFHQyxLQUFzQixJQUFLO0lBQ3hDTixRQUFRLEdBQUdNLEtBQUs7RUFDakIsQ0FBQztFQUNEQyxXQUFXLEVBQUVBLENBQUEsS0FBTVAsUUFBUSxJQUFJUSxNQUFNLENBQUNSLFFBQVE7RUFDOUNTLFVBQVUsRUFBR0gsS0FBZSxJQUFLO0lBQ2hDTCxPQUFPLEdBQUdLLEtBQUs7RUFDaEIsQ0FBQztFQUNESSxVQUFVLEVBQUVBLENBQUEsS0FBTVQsT0FBTyxJQUFJTyxNQUFNLENBQUNQLE9BQU87RUFDM0NVLFdBQVcsRUFBR0wsS0FBZSxJQUFLO0lBQ2pDSixRQUFRLEdBQUdJLEtBQUs7RUFDakIsQ0FBQztFQUNETSxXQUFXLEVBQUVBLENBQUEsS0FBTyxPQUFPVixRQUFRLEtBQUssV0FBVyxHQUFHQSxRQUFRLEdBQUdNLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDQyxNQUFPO0VBQ3pGQyxPQUFPLEVBQUdDLEdBQWlCLElBQUs7SUFDL0IsSUFBSWhCLFFBQVEsRUFBRTtJQUNkUSxNQUFNLENBQUNSLFFBQVEsQ0FBQ2UsT0FBTyxDQUFDQyxHQUFHLENBQUM7RUFDN0I7QUFDRCxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "studiokit-scaffolding-js",
|
|
3
|
-
"version": "7.2.0-next.2.
|
|
3
|
+
"version": "7.2.0-next.2.6",
|
|
4
4
|
"description": "Common scaffolding for Studio apps at Purdue",
|
|
5
5
|
"repository": "https://gitlab.com/purdue-informatics/studiokit/studiokit-scaffolding-js",
|
|
6
6
|
"license": "MIT",
|