@discordeno/rest 19.0.0-next.ad7e74c → 19.0.0-next.aecc55d

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.
@@ -71,6 +71,7 @@ function createRestManager(options) {
71
71
  logger: options.logger
72
72
  }),
73
73
  isProxied: !baseUrl.startsWith(DISCORD_API_URL),
74
+ updateBearerTokenEndpoint: options.proxy?.updateBearerTokenEndpoint,
74
75
  maxRetryCount: Infinity,
75
76
  processingRateLimitedPaths: false,
76
77
  queues: new Map(),
@@ -84,9 +85,8 @@ function createRestManager(options) {
84
85
  'user-agent': `DiscordBot (https://github.com/discordeno/discordeno, v${version})`
85
86
  };
86
87
  },
87
- checkRateLimits (url, headers) {
88
- const authHeader = headers?.authorization ?? '';
89
- const ratelimited = rest.rateLimitedPaths.get(`${authHeader}${url}`);
88
+ checkRateLimits (url, requestAuthorization) {
89
+ const ratelimited = rest.rateLimitedPaths.get(`${requestAuthorization}${url}`);
90
90
  const global = rest.rateLimitedPaths.get('global');
91
91
  const now = Date.now();
92
92
  if (ratelimited && now < ratelimited.resetTimestamp) {
@@ -97,6 +97,54 @@ function createRestManager(options) {
97
97
  }
98
98
  return false;
99
99
  },
100
+ async updateTokenQueues (oldToken, newToken) {
101
+ if (rest.isProxied) {
102
+ if (!rest.updateBearerTokenEndpoint) {
103
+ throw new Error("The 'proxy.updateBearerTokenEndpoint' option needs to be set when using a rest proxy and needed to call 'updateTokenQueues'");
104
+ }
105
+ const headers = {
106
+ 'content-type': 'application/json'
107
+ };
108
+ if (rest.authorization !== undefined) {
109
+ headers[rest.authorizationHeader] = rest.authorization;
110
+ }
111
+ await fetch(`${rest.baseUrl}/${rest.updateBearerTokenEndpoint}`, {
112
+ method: 'POST',
113
+ body: JSON.stringify({
114
+ oldToken,
115
+ newToken
116
+ }),
117
+ headers
118
+ });
119
+ return;
120
+ }
121
+ const newAuthorization = `Bearer ${newToken}`;
122
+ // Update all the queues
123
+ for (const [key, queue] of rest.queues.entries()){
124
+ if (!key.startsWith(`Bearer ${oldToken}`)) continue;
125
+ rest.queues.delete(key);
126
+ queue.requestAuthorization = newAuthorization;
127
+ const newKey = `${newAuthorization}${queue.url}`;
128
+ const newQueue = rest.queues.get(newKey);
129
+ // Merge the queues
130
+ if (newQueue) {
131
+ newQueue.waiting.unshift(...queue.waiting);
132
+ newQueue.pending.unshift(...queue.pending);
133
+ queue.waiting = [];
134
+ queue.pending = [];
135
+ queue.cleanup();
136
+ } else {
137
+ rest.queues.set(newKey, queue);
138
+ }
139
+ }
140
+ for (const [key, ratelimitPath] of rest.rateLimitedPaths.entries()){
141
+ if (!key.startsWith(`Bearer ${oldToken}`)) continue;
142
+ rest.rateLimitedPaths.set(`${newAuthorization}${ratelimitPath.url}`, ratelimitPath);
143
+ if (ratelimitPath.bucketId) {
144
+ rest.rateLimitedPaths.set(`${newAuthorization}${ratelimitPath.bucketId}`, ratelimitPath);
145
+ }
146
+ }
147
+ },
100
148
  changeToDiscordFormat (obj) {
101
149
  if (obj === null) return null;
102
150
  if (typeof obj === 'object') {
@@ -260,7 +308,7 @@ function createRestManager(options) {
260
308
  bucketId
261
309
  });
262
310
  if (bucketId) {
263
- rest.rateLimitedPaths.set(`${requestAuthorization}${bucketId}`, {
311
+ rest.rateLimitedPaths.set(requestAuthorization, {
264
312
  url: 'global',
265
313
  resetTimestamp: globalReset,
266
314
  bucketId
@@ -278,9 +326,9 @@ function createRestManager(options) {
278
326
  const loggingHeaders = {
279
327
  ...payload.headers
280
328
  };
281
- const authenticationScheme = payload.headers.authorization?.split(' ')[0];
282
329
  if (payload.headers.authorization) {
283
- loggingHeaders.authorization = `${authenticationScheme} tokenhere`;
330
+ const authorizationScheme = payload.headers.authorization?.split(' ')[0];
331
+ loggingHeaders.authorization = `${authorizationScheme} tokenhere`;
284
332
  }
285
333
  rest.logger.debug(`sending request to ${url}`, 'with payload:', {
286
334
  ...payload,
@@ -301,7 +349,7 @@ function createRestManager(options) {
301
349
  // Mark request and completed
302
350
  rest.invalidBucket.handleCompletedRequest(response.status, response.headers.get(RATE_LIMIT_SCOPE_HEADER) === 'shared');
303
351
  // Set the bucket id if it was available on the headers
304
- const bucketId = rest.processHeaders(rest.simplifyUrl(options.route, options.method), response.headers, authenticationScheme === 'Bearer' ? payload.headers.authorization : '');
352
+ const bucketId = rest.processHeaders(rest.simplifyUrl(options.route, options.method), response.headers, payload.headers.authorization);
305
353
  if (bucketId) options.bucketId = bucketId;
306
354
  if (response.status < 200 || response.status >= 400) {
307
355
  rest.logger.debug(`Request to ${url} failed.`);
@@ -366,8 +414,8 @@ function createRestManager(options) {
366
414
  await rest.sendRequest(request);
367
415
  return;
368
416
  }
369
- const authHeader = request.requestBodyOptions?.headers?.authorization ?? '';
370
- const queue = rest.queues.get(`${authHeader}${url}`);
417
+ const authorization = request.requestBodyOptions?.headers?.authorization ?? `Bot ${rest.token}`;
418
+ const queue = rest.queues.get(`${authorization}${url}`);
371
419
  if (queue !== undefined) {
372
420
  queue.makeRequest(request);
373
421
  } else {
@@ -375,12 +423,12 @@ function createRestManager(options) {
375
423
  const bucketQueue = new _queue.Queue(rest, {
376
424
  url,
377
425
  deleteQueueDelay: rest.deleteQueueDelay,
378
- authentication: authHeader
426
+ requestAuthorization: authorization
379
427
  });
428
+ // Save queue
429
+ rest.queues.set(`${authorization}${url}`, bucketQueue);
380
430
  // Add request to queue
381
431
  bucketQueue.makeRequest(request);
382
- // Save queue
383
- rest.queues.set(`${authHeader}${url}`, bucketQueue);
384
432
  }
385
433
  },
386
434
  async makeRequest (method, route, options) {
@@ -1395,4 +1443,4 @@ var HttpResponseCode;
1395
1443
  /** This request got rate limited. */ HttpResponseCode[HttpResponseCode["TooManyRequests"] = 429] = "TooManyRequests";
1396
1444
  })(HttpResponseCode || (HttpResponseCode = {}));
1397
1445
 
1398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnQgKi9cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuXG5pbXBvcnQgeyBjYWxjdWxhdGVCaXRzLCBjYW1lbGl6ZSwgY2FtZWxUb1NuYWtlQ2FzZSwgZGVsYXksIGdldEJvdElkRnJvbVRva2VuLCBsb2dnZXIsIHByb2Nlc3NSZWFjdGlvblN0cmluZywgdXJsVG9CYXNlNjQgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcblxuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5cbmltcG9ydCB7XG4gIEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyxcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBhcnRpYWxHdWlsZCxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXIsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXJQYWNrLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7dmVyc2lvbn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaGVhZGVycykge1xuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IGhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gJydcblxuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2F1dGhIZWFkZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgcmVxdWVzdEF1dGhvcml6YXRpb24pIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke3JlcXVlc3RBdXRob3JpemF0aW9ufSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtyZXF1ZXN0QXV0aG9yaXphdGlvbn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpXG5cbiAgICAgIGNvbnN0IGxvZ2dpbmdIZWFkZXJzID0geyAuLi5wYXlsb2FkLmhlYWRlcnMgfVxuXG4gICAgICBjb25zdCBhdXRoZW50aWNhdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdXG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aGVudGljYXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMoXG4gICAgICAgIHJlc3Quc2ltcGxpZnlVcmwob3B0aW9ucy5yb3V0ZSwgb3B0aW9ucy5tZXRob2QpLFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICBhdXRoZW50aWNhdGlvblNjaGVtZSA9PT0gJ0JlYXJlcicgPyBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbiA6ICcnLFxuICAgICAgKVxuICAgICAgaWYgKGJ1Y2tldElkKSBvcHRpb25zLmJ1Y2tldElkID0gYnVja2V0SWRcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA8IEh0dHBSZXNwb25zZUNvZGUuU3VjY2VzcyB8fCByZXNwb25zZS5zdGF0dXMgPj0gSHR0cFJlc3BvbnNlQ29kZS5FcnJvcikge1xuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZmFpbGVkLmApXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gSHR0cFJlc3BvbnNlQ29kZS5Ub29NYW55UmVxdWVzdHMpIHtcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IGF3YWl0IHJlc3BvbnNlLnRleHQoKSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIGVycm9yOiAnVGhlIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDFcblxuICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuICAgICAgICAvLyBwcm9jZXNzIHRoZSByZXNwb25zZSB0byBwcmV2ZW50IG1lbSBsZWFrXG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgYXV0aEhlYWRlciA9IHJlcXVlc3QucmVxdWVzdEJvZHlPcHRpb25zPy5oZWFkZXJzPy5hdXRob3JpemF0aW9uID8/ICcnXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke2F1dGhIZWFkZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgYXV0aGVudGljYXRpb246IGF1dGhIZWFkZXIgfSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHthdXRoSGVhZGVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHJvdXRlLCBvcHRpb25zKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgY29uc3QgZXJyID0gKGF3YWl0IHJlc3VsdC5qc29uKCkuY2F0Y2goKCkgPT4ge30pKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICAgICAgLy8gTGVnYWN5IEhhbmRsaW5nIHRvIG5vdCBicmVhayBvbGQgY29kZSBvciB3aGVuIGJvZHkgaXMgbWlzc2luZ1xuICAgICAgICAgIGlmICghZXJyPy5ib2R5KSB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke2Vyci5tZXNzYWdlID8/IHJlc3VsdC5zdGF0dXNUZXh0fWApXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KGVycikpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIG9mIGhvdyBzdGFjayB0cmFjZXMgZ2V0IGNhbGN1bGF0ZWRcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSAnRmFpbGVkIHRvIHNlbmQgcmVxdWVzdCB0byBkaXNjb3JkLidcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGQoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5hbGwoKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGJvZHksIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUodGVtcGxhdGVDb2RlLCBib2R5KSB7XG4gICAgICBpZiAoYm9keS5pY29uKSB7XG4gICAgICAgIGJvZHkuaWNvbiA9IGF3YWl0IHVybFRvQmFzZTY0KGJvZHkuaWNvbilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbilcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBib2R5ID0ge30sIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkTWZhTGV2ZWwoZ3VpbGRJZDogQmlnU3RyaW5nLCBtZmFMZXZlbDogTWZhTGV2ZWxzLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5ndWlsZHMubWZhKGd1aWxkSWQpLCB7IGJvZHk6IHsgbGV2ZWw6IG1mYUxldmVsIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIGJvZHk6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5vcmlnaW5hbCh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdHlwZTogSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLlVwZGF0ZU1lc3NhZ2UsXG4gICAgICAgICAgZGF0YTogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RfdG9fc3BlYWtfdGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va19jaGFubmVsX2lkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRfaWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUGFydGlhbEd1aWxkW10+KHJlc3Qucm91dGVzLmd1aWxkcy51c2VyR3VpbGRzKG9wdGlvbnMpLCBtYWtlUmVxdWVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubGVhdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVEbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgcHJlZmVyU25ha2VDYXNlKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgIGNvbnN0IGNhbWVsaXplciA9IGVuYWJsZWQgPyAoeDogYW55KSA9PiB4IDogY2FtZWxpemVcblxuICAgICAgcmVzdC5nZXQgPSBhc3luYyAodXJsLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wb3N0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LmRlbGV0ZSA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucGF0Y2ggPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnB1dCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdFxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gcmVzdFxufVxuXG5lbnVtIEh0dHBSZXNwb25zZUNvZGUge1xuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb2RlciB0byBjb25zaWRlciB0aGF0IGl0IHdhcyBzdWNjZXNzZnVsLiAqL1xuICBTdWNjZXNzID0gMjAwLFxuICAvKiogUmVxdWVzdCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBidXQgRGlzY29yZCByZXR1cm5lZCBhbiBlbXB0eSBib2R5LiAqL1xuICBOb0NvbnRlbnQgPSAyMDQsXG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvcmRlciB0byBjb25zaWRlciB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nLiAqL1xuICBFcnJvciA9IDQwMCxcbiAgLyoqIFRoaXMgcmVxdWVzdCBnb3QgcmF0ZSBsaW1pdGVkLiAqL1xuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG59XG4iXSwibmFtZXMiOlsiQVVESVRfTE9HX1JFQVNPTl9IRUFERVIiLCJESVNDT1JEX0FQSV9VUkwiLCJESVNDT1JEX0FQSV9WRVJTSU9OIiwiUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSIiwiUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSIiwiUkFURV9MSU1JVF9MSU1JVF9IRUFERVIiLCJSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIiLCJSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJ2ZXJzaW9uIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwibWF4UmV0cnlDb3VudCIsIkluZmluaXR5IiwicHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMiLCJxdWV1ZXMiLCJNYXAiLCJyYXRlTGltaXRlZFBhdGhzIiwicm91dGVzIiwiY3JlYXRlUm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJoZWFkZXJzIiwiYXV0aEhlYWRlciIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwiRGF0ZSIsInJlc2V0VGltZXN0YW1wIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsImtleSIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImNhbGN1bGF0ZUJpdHMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJjYW1lbFRvU25ha2VDYXNlIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsIm1ldGhvZCIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImJvZHkiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJlbnRyaWVzIiwiZGVsZXRlIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJlcXVlc3RBdXRob3JpemF0aW9uIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJidWNrZXRJZCIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4Iiwic2V0IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aGVudGljYXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJmZXRjaCIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInRleHQiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsImRlbGF5IiwiYXJyYXlCdWZmZXIiLCJyZXRyeVJlcXVlc3QiLCJyZXNvbHZlIiwicGFydHMiLCJzZWNvbmRMYXN0UGFydCIsInNwbGljZSIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInJ1blRocm91Z2hRdWV1ZSIsInF1ZXVlIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlF1ZXVlIiwiYXV0aGVudGljYXRpb24iLCJyZXN1bHQiLCJlcnIiLCJqc29uIiwiRXJyb3IiLCJtZXNzYWdlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImNhdXNlIiwiY2FtZWxpemUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsInVybFRvQmFzZTY0IiwidGVtcGxhdGVzIiwiY29kZSIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImV2ZW50cyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZE1mYUxldmVsIiwibWZhTGV2ZWwiLCJtZmEiLCJsZXZlbCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlIiwidHlwZSIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsIlVwZGF0ZU1lc3NhZ2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsInZvaWNlIiwicmVxdWVzdF90b19zcGVha190aW1lc3RhbXAiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rX2NoYW5uZWxfaWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRfaWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRVc2VyIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ0eXBpbmciLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwiYWRkR3VpbGRNZW1iZXIiLCJjcmVhdGVUZXN0RW50aXRsZW1lbnQiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJsaXN0RW50aXRsZW1lbnRzIiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7Ozs7Ozs7Ozs7O0lBcUUzQ0EsdUJBQXVCO2VBQXZCQTs7SUFGQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7SUFPQUMsd0JBQXdCO2VBQXhCQTs7SUFEQUMsd0JBQXdCO2VBQXhCQTs7SUFFQUMsdUJBQXVCO2VBQXZCQTs7SUFKQUMsMkJBQTJCO2VBQTNCQTs7SUFDQUMsNkJBQTZCO2VBQTdCQTs7SUFJQUMsdUJBQXVCO2VBQXZCQTs7SUFFR0MsaUJBQWlCO2VBQWpCQTs7OzRCQTVFTzt1QkFFeUc7K0JBRXJGO3VCQUNyQjt1QkFxRGY7d0JBQ3NCO0FBRzdCLGdEQUFnRDtBQUNoRCxNQUFNQyxVQUFVO0FBRVQsTUFBTVIsc0JBQXNCO0FBQzVCLE1BQU1ELGtCQUFrQjtBQUV4QixNQUFNRCwwQkFBMEI7QUFDaEMsTUFBTU0sOEJBQThCO0FBQ3BDLE1BQU1DLGdDQUFnQztBQUN0QyxNQUFNSCwyQkFBMkI7QUFDakMsTUFBTUQsMkJBQTJCO0FBQ2pDLE1BQU1FLDBCQUEwQjtBQUNoQyxNQUFNRywwQkFBMEI7QUFFaEMsU0FBU0Msa0JBQWtCRSxPQUFpQztJQUNqRSxNQUFNQyxnQkFBZ0JELFFBQVFDLGFBQWEsR0FBR0MsT0FBT0YsUUFBUUMsYUFBYSxJQUFJRSxJQUFBQSx3QkFBaUIsRUFBQ0gsUUFBUUksS0FBSztJQUU3RyxNQUFNQyxVQUFVTCxRQUFRTSxLQUFLLEVBQUVELFdBQVdmO0lBRTFDLE1BQU1pQixPQUFvQjtRQUN4Qk47UUFDQU8sZUFBZVIsUUFBUU0sS0FBSyxFQUFFRTtRQUM5QkMscUJBQXFCVCxRQUFRTSxLQUFLLEVBQUVHLHVCQUF1QjtRQUMzREo7UUFDQUssa0JBQWtCO1FBQ2xCQyxxQkFBcUI7UUFDckJDLGVBQWVDLElBQUFBLHlDQUEwQixFQUFDO1lBQUVDLFFBQVFkLFFBQVFjLE1BQU07UUFBQztRQUNuRUMsV0FBVyxDQUFDVixRQUFRVyxVQUFVLENBQUMxQjtRQUMvQjJCLGVBQWVDO1FBQ2ZDLDRCQUE0QjtRQUM1QkMsUUFBUSxJQUFJQztRQUNaQyxrQkFBa0IsSUFBSUQ7UUFDdEJqQixPQUFPSixRQUFRSSxLQUFLO1FBQ3BCTCxTQUFTQyxRQUFRRCxPQUFPLElBQUlSO1FBQzVCdUIsUUFBUWQsUUFBUWMsTUFBTSxJQUFJQSxhQUFNO1FBRWhDUyxRQUFRQyxJQUFBQSxvQkFBWTtRQUVwQkM7WUFDRSxPQUFPO2dCQUNMLGNBQWMsQ0FBQyx1REFBdUQsRUFBRTFCLFFBQVEsQ0FBQyxDQUFDO1lBQ3BGO1FBQ0Y7UUFFQTJCLGlCQUFnQkMsR0FBRyxFQUFFQyxPQUFPO1lBQzFCLE1BQU1DLGFBQWFELFNBQVNwQixpQkFBaUI7WUFFN0MsTUFBTXNCLGNBQWN2QixLQUFLZSxnQkFBZ0IsQ0FBQ1MsR0FBRyxDQUFDLENBQUMsRUFBRUYsV0FBVyxFQUFFRixJQUFJLENBQUM7WUFFbkUsTUFBTUssU0FBU3pCLEtBQUtlLGdCQUFnQixDQUFDUyxHQUFHLENBQUM7WUFDekMsTUFBTUUsTUFBTUMsS0FBS0QsR0FBRztZQUVwQixJQUFJSCxlQUFlRyxNQUFNSCxZQUFZSyxjQUFjLEVBQUU7Z0JBQ25ELE9BQU9MLFlBQVlLLGNBQWMsR0FBR0Y7WUFDdEM7WUFFQSxJQUFJRCxVQUFVQyxNQUFNRCxPQUFPRyxjQUFjLEVBQUU7Z0JBQ3pDLE9BQU9ILE9BQU9HLGNBQWMsR0FBR0Y7WUFDakM7WUFFQSxPQUFPO1FBQ1Q7UUFFQUcsdUJBQXNCQyxHQUFRO1lBQzVCLElBQUlBLFFBQVEsTUFBTSxPQUFPO1lBRXpCLElBQUksT0FBT0EsUUFBUSxVQUFVO2dCQUMzQixJQUFJQyxNQUFNQyxPQUFPLENBQUNGLE1BQU07b0JBQ3RCLE9BQU9BLElBQUlHLEdBQUcsQ0FBQyxDQUFDQyxPQUFTbEMsS0FBSzZCLHFCQUFxQixDQUFDSztnQkFDdEQ7Z0JBRUEsTUFBTUMsU0FBYyxDQUFDO2dCQUVyQixLQUFLLE1BQU1DLE9BQU9DLE9BQU9DLElBQUksQ0FBQ1IsS0FBTTtvQkFDbEMsTUFBTVMsUUFBUVQsR0FBRyxDQUFDTSxJQUFJO29CQUV0QixxREFBcUQ7b0JBQ3JELElBQUlHLFVBQVVDLFdBQVc7d0JBQ3ZCLE9BQVFKOzRCQUNOLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLO2dDQUNIRCxNQUFNLENBQUNDLElBQUksR0FBRyxPQUFPRyxVQUFVLFdBQVdBLFFBQVFFLElBQUFBLG9CQUFhLEVBQUNGO2dDQUNoRTs0QkFDRixLQUFLO2dDQUNISixPQUFPTywwQkFBMEIsR0FBRyxPQUFPSCxVQUFVLFdBQVdBLFFBQVFFLElBQUFBLG9CQUFhLEVBQUNGO2dDQUN0Rjs0QkFDRixLQUFLO2dDQUNISixPQUFPUSxrQkFBa0IsR0FBR0o7Z0NBQzVCOzRCQUNGLEtBQUs7Z0NBQ0hKLE9BQU9TLHlCQUF5QixHQUFHTDtnQ0FDbkM7d0JBQ0o7b0JBQ0Y7b0JBRUFKLE1BQU0sQ0FBQ1UsSUFBQUEsdUJBQWdCLEVBQUNULEtBQUssR0FBR3BDLEtBQUs2QixxQkFBcUIsQ0FBQ1U7Z0JBQzdEO2dCQUVBLE9BQU9KO1lBQ1Q7WUFFQSxJQUFJLE9BQU9MLFFBQVEsVUFBVSxPQUFPQSxJQUFJZ0IsUUFBUTtZQUVoRCxPQUFPaEI7UUFDVDtRQUVBaUIsbUJBQWtCQyxNQUFNLEVBQUV2RCxPQUFPO1lBQy9CLE1BQU00QixVQUFVLElBQUksQ0FBQ0gsaUJBQWlCO1lBRXRDLElBQUl6QixTQUFTd0QsaUJBQWlCLE1BQU01QixRQUFRcEIsYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFRCxLQUFLSCxLQUFLLENBQUMsQ0FBQztZQUUvRSwrQ0FBK0M7WUFDL0MsSUFBSUosU0FBU3lELFdBQVdWLFdBQVc7Z0JBQ2pDbkIsT0FBTyxDQUFDdkMsd0JBQXdCLEdBQUdxRSxtQkFBbUIxRCxTQUFTeUQ7WUFDakU7WUFFQSxJQUFJRTtZQUVKLDhEQUE4RDtZQUM5RCxrQ0FBa0M7WUFFbEMsMEZBQTBGO1lBQzFGLElBQUkzRCxTQUFTNEQsVUFBVWIsV0FBVztnQkFDaEMsTUFBTWMsT0FBTyxJQUFJQztnQkFDakIsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUkvRCxRQUFRNEQsS0FBSyxDQUFDSSxNQUFNLEVBQUUsRUFBRUQsRUFBRztvQkFDN0NGLEtBQUtJLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRUYsRUFBRSxDQUFDLEVBQUUvRCxRQUFRNEQsS0FBSyxDQUFDRyxFQUFFLENBQUNHLElBQUksRUFBRWxFLFFBQVE0RCxLQUFLLENBQUNHLEVBQUUsQ0FBQ0ksSUFBSTtnQkFDdEU7Z0JBRUEsd0hBQXdIO2dCQUN4SE4sS0FBS0ksTUFBTSxDQUFDLGdCQUFnQkcsS0FBS0MsU0FBUyxDQUFDOUQsS0FBSzZCLHFCQUFxQixDQUFDO29CQUFFLEdBQUdwQyxRQUFRMkQsSUFBSTtvQkFBRUMsT0FBT2I7Z0JBQVU7Z0JBRTFHLHlIQUF5SDtnQkFDekhZLE9BQU9FO1lBQ1QsT0FBTyxJQUFJN0QsU0FBUzJELFFBQVEzRCxRQUFRNEIsT0FBTyxJQUFJNUIsUUFBUTRCLE9BQU8sQ0FBQyxlQUFlLEtBQUsscUNBQXFDO2dCQUN0SCx1QkFBdUI7Z0JBQ3ZCLE1BQU0wQyxXQUFxQixFQUFFO2dCQUU3QixNQUFNQyxjQUFjaEUsS0FBSzZCLHFCQUFxQixDQUFDcEMsUUFBUTJELElBQUk7Z0JBRTNELElBQUssTUFBTWEsUUFBUUQsWUFBYTtvQkFDOUJELFNBQVNHLElBQUksQ0FBQyxDQUFDLEVBQUVmLG1CQUFtQmMsTUFBTSxDQUFDLEVBQUVkLG1CQUFtQmEsV0FBVyxDQUFDQyxLQUFLLEVBQUUsQ0FBQztnQkFDdEY7Z0JBRUFiLE9BQU9XLFNBQVNJLElBQUksQ0FBQztZQUN2QixPQUFPLElBQUkxRSxTQUFTMkQsU0FBU1osV0FBVztnQkFDdEMsSUFBSS9DLFFBQVEyRCxJQUFJLFlBQVlHLFVBQVU7b0JBQ3BDSCxPQUFPM0QsUUFBUTJELElBQUk7Z0JBQ25CLHlIQUF5SDtnQkFDM0gsT0FBTztvQkFDTEEsT0FBT1MsS0FBS0MsU0FBUyxDQUFDOUQsS0FBSzZCLHFCQUFxQixDQUFDcEMsUUFBUTJELElBQUk7b0JBQzdEL0IsT0FBTyxDQUFDLGVBQWUsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dCQUM5QztZQUNGO1lBRUEsd0VBQXdFO1lBQ3hFLElBQUk1QixTQUFTNEIsU0FBUztnQkFDcEJnQixPQUFPK0IsTUFBTSxDQUFDL0MsU0FBUzVCLFFBQVE0QixPQUFPO1lBQ3hDO1lBRUEsT0FBTztnQkFDTCtCO2dCQUNBL0I7Z0JBQ0EyQjtZQUNGO1FBQ0Y7UUFFQXFCO1lBQ0UsTUFBTTNDLE1BQU1DLEtBQUtELEdBQUc7WUFFcEIsS0FBSyxNQUFNLENBQUNVLEtBQUtHLE1BQU0sSUFBSXZDLEtBQUtlLGdCQUFnQixDQUFDdUQsT0FBTyxHQUFJO2dCQUMxRCxnQkFBZ0I7Z0JBQ2hCLDREQUE0RDtnQkFDNUQsK0JBQStCO2dCQUMvQixLQUFLO2dCQUNMLE1BQU07Z0JBQ04scUNBQXFDO2dCQUNyQyxJQUFJL0IsTUFBTVgsY0FBYyxHQUFHRixLQUFLO2dCQUVoQyw4Q0FBOEM7Z0JBQzlDMUIsS0FBS2UsZ0JBQWdCLENBQUN3RCxNQUFNLENBQUNuQztnQkFDN0Isd0RBQXdEO2dCQUN4RCxJQUFJQSxRQUFRLFVBQVVwQyxLQUFLSSxtQkFBbUIsR0FBRztZQUNuRDtZQUVBLHdDQUF3QztZQUN4QyxJQUFJSixLQUFLZSxnQkFBZ0IsQ0FBQ3lELElBQUksS0FBSyxHQUFHO2dCQUNwQ3hFLEtBQUtZLDBCQUEwQixHQUFHO1lBQ3BDLE9BQU87Z0JBQ0xaLEtBQUtZLDBCQUEwQixHQUFHO2dCQUNsQyxzQkFBc0I7Z0JBQ3RCNkQsV0FBVztvQkFDVCxxRUFBcUU7b0JBQ3JFekUsS0FBS3FFLHVCQUF1QjtnQkFDOUIsR0FBRztZQUNMO1FBQ0Y7UUFFQSwwSEFBMEgsR0FDMUhLLGdCQUFldEQsR0FBRyxFQUFFQyxPQUFPLEVBQUVzRCxvQkFBb0I7WUFDL0MsSUFBSUMsY0FBYztZQUVsQiw0QkFBNEI7WUFDNUIsTUFBTUMsWUFBWXhELFFBQVFHLEdBQUcsQ0FBQ3BDO1lBQzlCLE1BQU0wRixhQUFhekQsUUFBUUcsR0FBRyxDQUFDbkM7WUFDL0IsTUFBTTBGLFFBQVFwRCxLQUFLRCxHQUFHLEtBQUtzRCxPQUFPRixjQUFjO1lBQ2hELE1BQU1yRCxTQUFTSixRQUFRRyxHQUFHLENBQUN0QztZQUMzQiw2Q0FBNkM7WUFDN0MsTUFBTStGLFdBQVc1RCxRQUFRRyxHQUFHLENBQUN2Qyw2QkFBNkJ1RDtZQUMxRCxNQUFNMEMsUUFBUTdELFFBQVFHLEdBQUcsQ0FBQ3JDO1lBRTFCYSxLQUFLYSxNQUFNLENBQUNXLEdBQUcsQ0FBQyxDQUFDLEVBQUVtRCxxQkFBcUIsRUFBRXZELElBQUksQ0FBQyxHQUFHK0QsdUJBQXVCO2dCQUN2RU4sV0FBV0EsWUFBWUcsT0FBT0gsYUFBYXJDO2dCQUMzQzRDLFVBQVVOLGFBQWFFLE9BQU9GLGNBQWMsT0FBT3RDO2dCQUNuRDZDLEtBQUtILFFBQVFGLE9BQU9FLFNBQVMxQztZQUMvQjtZQUVBLCtEQUErRDtZQUMvRCxJQUFJcUMsY0FBYyxLQUFLO2dCQUNyQkQsY0FBYztnQkFFZCw2RUFBNkU7Z0JBQzdFNUUsS0FBS2UsZ0JBQWdCLENBQUN1RSxHQUFHLENBQUMsQ0FBQyxFQUFFWCxxQkFBcUIsRUFBRXZELElBQUksQ0FBQyxFQUFFO29CQUN6REE7b0JBQ0FRLGdCQUFnQm1EO29CQUNoQkU7Z0JBQ0Y7Z0JBRUEscUVBQXFFO2dCQUNyRSxJQUFJQSxVQUFVO29CQUNaakYsS0FBS2UsZ0JBQWdCLENBQUN1RSxHQUFHLENBQUMsQ0FBQyxFQUFFWCxxQkFBcUIsRUFBRU0sU0FBUyxDQUFDLEVBQUU7d0JBQzlEN0Q7d0JBQ0FRLGdCQUFnQm1EO3dCQUNoQkU7b0JBQ0Y7Z0JBQ0Y7WUFDRjtZQUVBLHVFQUF1RTtZQUN2RSxJQUFJeEQsUUFBUTtnQkFDVixNQUFNcUQsYUFBYUUsT0FBTzNELFFBQVFHLEdBQUcsQ0FBQyxrQkFBa0I7Z0JBQ3hELE1BQU0rRCxjQUFjNUQsS0FBS0QsR0FBRyxLQUFLb0Q7Z0JBQ2pDLGdCQUFnQjtnQkFDaEIsNkVBQTZFO2dCQUM3RSxNQUFNO2dCQUNOOUUsS0FBS0ksbUJBQW1CLEdBQUc7Z0JBQzNCd0UsY0FBYztnQkFFZEgsV0FBVztvQkFDVHpFLEtBQUtJLG1CQUFtQixHQUFHO2dCQUM3QixHQUFHMEU7Z0JBRUg5RSxLQUFLZSxnQkFBZ0IsQ0FBQ3VFLEdBQUcsQ0FBQyxVQUFVO29CQUNsQ2xFLEtBQUs7b0JBQ0xRLGdCQUFnQjJEO29CQUNoQk47Z0JBQ0Y7Z0JBRUEsSUFBSUEsVUFBVTtvQkFDWmpGLEtBQUtlLGdCQUFnQixDQUFDdUUsR0FBRyxDQUFDLENBQUMsRUFBRVgscUJBQXFCLEVBQUVNLFNBQVMsQ0FBQyxFQUFFO3dCQUM5RDdELEtBQUs7d0JBQ0xRLGdCQUFnQjJEO3dCQUNoQk47b0JBQ0Y7Z0JBQ0Y7WUFDRjtZQUVBLElBQUlMLGVBQWUsQ0FBQzVFLEtBQUtZLDBCQUEwQixFQUFFO2dCQUNuRFosS0FBS3FFLHVCQUF1QjtZQUM5QjtZQUNBLE9BQU9PLGNBQWNLLFdBQVd6QztRQUNsQztRQUVBLE1BQU1nRCxhQUFZL0YsT0FBTztZQUN2QixNQUFNMkIsTUFBTSxDQUFDLEVBQUVwQixLQUFLRixPQUFPLENBQUMsRUFBRSxFQUFFRSxLQUFLUixPQUFPLENBQUMsRUFBRUMsUUFBUWdHLEtBQUssQ0FBQyxDQUFDO1lBQzlELE1BQU1DLFVBQVUxRixLQUFLK0MsaUJBQWlCLENBQUN0RCxRQUFRdUQsTUFBTSxFQUFFdkQsUUFBUWtHLGtCQUFrQjtZQUVqRixNQUFNQyxpQkFBaUI7Z0JBQUUsR0FBR0YsUUFBUXJFLE9BQU87WUFBQztZQUU1QyxNQUFNd0UsdUJBQXVCSCxRQUFRckUsT0FBTyxDQUFDcEIsYUFBYSxFQUFFNkYsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUV6RSxJQUFJSixRQUFRckUsT0FBTyxDQUFDcEIsYUFBYSxFQUFFO2dCQUNqQzJGLGVBQWUzRixhQUFhLEdBQUcsQ0FBQyxFQUFFNEYscUJBQXFCLFVBQVUsQ0FBQztZQUNwRTtZQUVBN0YsS0FBS08sTUFBTSxDQUFDd0YsS0FBSyxDQUFDLENBQUMsbUJBQW1CLEVBQUUzRSxJQUFJLENBQUMsRUFBRSxpQkFBaUI7Z0JBQUUsR0FBR3NFLE9BQU87Z0JBQUVyRSxTQUFTdUU7WUFBZTtZQUN0RyxNQUFNSSxXQUFXLE1BQU1DLE1BQU03RSxLQUFLc0UsU0FBU1EsS0FBSyxDQUFDLE9BQU9DO2dCQUN0RG5HLEtBQUtPLE1BQU0sQ0FBQzRGLEtBQUssQ0FBQ0E7Z0JBQ2xCLDZCQUE2QjtnQkFDN0JuRyxLQUFLSyxhQUFhLENBQUM4RSxzQkFBc0IsQ0FBQyxLQUFLO2dCQUMvQzFGLFFBQVEyRyxNQUFNLENBQUM7b0JBQ2JDLElBQUk7b0JBQ0pDLFFBQVE7b0JBQ1JILE9BQU87Z0JBQ1Q7Z0JBQ0EsTUFBTUE7WUFDUjtZQUNBbkcsS0FBS08sTUFBTSxDQUFDd0YsS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUUzRSxJQUFJLGFBQWEsRUFBRTRFLFNBQVNNLE1BQU0sQ0FBQyxHQUFHLEVBQUVOLFNBQVNPLFVBQVUsQ0FBQyxDQUFDO1lBRXZHLDZCQUE2QjtZQUM3QnZHLEtBQUtLLGFBQWEsQ0FBQzhFLHNCQUFzQixDQUFDYSxTQUFTTSxNQUFNLEVBQUVOLFNBQVMzRSxPQUFPLENBQUNHLEdBQUcsQ0FBQ2xDLDZCQUE2QjtZQUU3Ryx1REFBdUQ7WUFDdkQsTUFBTTJGLFdBQVdqRixLQUFLMEUsY0FBYyxDQUNsQzFFLEtBQUt3RyxXQUFXLENBQUMvRyxRQUFRZ0csS0FBSyxFQUFFaEcsUUFBUXVELE1BQU0sR0FDOUNnRCxTQUFTM0UsT0FBTyxFQUNoQndFLHlCQUF5QixXQUFXSCxRQUFRckUsT0FBTyxDQUFDcEIsYUFBYSxHQUFHO1lBRXRFLElBQUlnRixVQUFVeEYsUUFBUXdGLFFBQVEsR0FBR0E7WUFFakMsSUFBSWUsU0FBU00sTUFBTSxVQUErQk4sU0FBU00sTUFBTSxTQUE0QjtnQkFDM0Z0RyxLQUFLTyxNQUFNLENBQUN3RixLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUzRSxJQUFJLFFBQVEsQ0FBQztnQkFFN0MsSUFBSTRFLFNBQVNNLE1BQU0sVUFBdUM7b0JBQ3hEN0csUUFBUTJHLE1BQU0sQ0FBQzt3QkFBRUMsSUFBSTt3QkFBT0MsUUFBUU4sU0FBU00sTUFBTTt3QkFBRWxELE1BQU0sTUFBTTRDLFNBQVNTLElBQUk7b0JBQUc7b0JBQ2pGO2dCQUNGO2dCQUVBekcsS0FBS08sTUFBTSxDQUFDd0YsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFM0UsSUFBSSxpQkFBaUIsQ0FBQztnQkFDdEQsb0RBQW9EO2dCQUNwRCxJQUFJM0IsUUFBUWlILFVBQVUsSUFBSTFHLEtBQUtVLGFBQWEsRUFBRTtvQkFDNUNWLEtBQUtPLE1BQU0sQ0FBQ3dGLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRTNFLElBQUksc0NBQXNDLENBQUMsRUFBRSxpQkFBaUJzRTtvQkFDOUYsaUVBQWlFO29CQUNqRWpHLFFBQVEyRyxNQUFNLENBQUM7d0JBQ2JDLElBQUk7d0JBQ0pDLFFBQVFOLFNBQVNNLE1BQU07d0JBQ3ZCSCxPQUFPO29CQUNUO29CQUVBO2dCQUNGO2dCQUVBMUcsUUFBUWlILFVBQVUsSUFBSTtnQkFFdEIsTUFBTUMsYUFBYVgsU0FBUzNFLE9BQU8sQ0FBQ0csR0FBRyxDQUFDbkM7Z0JBQ3hDLElBQUlzSCxZQUFZLE1BQU1DLElBQUFBLFlBQUssRUFBQzVCLE9BQU8yQixjQUFjO2dCQUNqRCwyQ0FBMkM7Z0JBQzNDLE1BQU1YLFNBQVNhLFdBQVc7Z0JBRTFCLE9BQU8sTUFBTXBILFFBQVFxSCxZQUFZLEdBQUdySDtZQUN0QztZQUVBLHVEQUF1RDtZQUN2REEsUUFBUXNILE9BQU8sQ0FBQztnQkFBRVYsSUFBSTtnQkFBTUMsUUFBUU4sU0FBU00sTUFBTTtnQkFBRWxELE1BQU00QyxTQUFTTSxNQUFNLFdBQWtDOUQsWUFBWSxNQUFNd0QsU0FBU1MsSUFBSTtZQUFHO1FBQ2hKO1FBRUFELGFBQVlwRixHQUFHLEVBQUU0QixNQUFNO1lBQ3JCLE1BQU1nRSxRQUFRNUYsSUFBSTBFLEtBQUssQ0FBQztZQUN4QixNQUFNbUIsaUJBQWlCRCxLQUFLLENBQUNBLE1BQU12RCxNQUFNLEdBQUcsRUFBRTtZQUU5QyxJQUFJd0QsbUJBQW1CLGNBQWNBLG1CQUFtQixVQUFVO2dCQUNoRSxPQUFPN0Y7WUFDVDtZQUVBLElBQUk2RixtQkFBbUIsZUFBZUQsS0FBSyxDQUFDQSxNQUFNdkQsTUFBTSxHQUFHLEVBQUUsS0FBSyxPQUFPO2dCQUN2RXVELE1BQU1FLE1BQU0sQ0FBQyxDQUFDO2dCQUNkRixNQUFNOUMsSUFBSSxDQUFDO1lBQ2IsT0FBTztnQkFDTDhDLE1BQU1FLE1BQU0sQ0FBQyxDQUFDO2dCQUNkRixNQUFNOUMsSUFBSSxDQUFDO1lBQ2I7WUFFQSxJQUFJOEMsS0FBSyxDQUFDQSxNQUFNdkQsTUFBTSxHQUFHLEVBQUUsS0FBSyxhQUFhO2dCQUMzQ3VELE1BQU1FLE1BQU0sQ0FBQyxDQUFDO1lBQ2hCO1lBRUEsSUFBSWxFLFdBQVcsWUFBWWlFLG1CQUFtQixZQUFZO2dCQUN4RCxPQUFPLENBQUMsQ0FBQyxFQUFFRCxNQUFNN0MsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM5QjtZQUVBLE9BQU82QyxNQUFNN0MsSUFBSSxDQUFDO1FBQ3BCO1FBRUEsTUFBTWdELGdCQUFlQyxPQUEyQjtZQUM5QyxNQUFNaEcsTUFBTXBCLEtBQUt3RyxXQUFXLENBQUNZLFFBQVEzQixLQUFLLEVBQUUyQixRQUFRcEUsTUFBTTtZQUUxRCxJQUFJb0UsUUFBUUMsZUFBZSxLQUFLLE9BQU87Z0JBQ3JDLE1BQU1ySCxLQUFLd0YsV0FBVyxDQUFDNEI7Z0JBRXZCO1lBQ0Y7WUFFQSxNQUFNOUYsYUFBYThGLFFBQVF6QixrQkFBa0IsRUFBRXRFLFNBQVNwQixpQkFBaUI7WUFFekUsTUFBTXFILFFBQVF0SCxLQUFLYSxNQUFNLENBQUNXLEdBQUcsQ0FBQyxDQUFDLEVBQUVGLFdBQVcsRUFBRUYsSUFBSSxDQUFDO1lBRW5ELElBQUlrRyxVQUFVOUUsV0FBVztnQkFDdkI4RSxNQUFNQyxXQUFXLENBQUNIO1lBQ3BCLE9BQU87Z0JBQ0wsc0JBQXNCO2dCQUN0QixNQUFNSSxjQUFjLElBQUlDLFlBQUssQ0FBQ3pILE1BQU07b0JBQUVvQjtvQkFBS2pCLGtCQUFrQkgsS0FBS0csZ0JBQWdCO29CQUFFdUgsZ0JBQWdCcEc7Z0JBQVc7Z0JBRS9HLHVCQUF1QjtnQkFDdkJrRyxZQUFZRCxXQUFXLENBQUNIO2dCQUN4QixhQUFhO2dCQUNicEgsS0FBS2EsTUFBTSxDQUFDeUUsR0FBRyxDQUFDLENBQUMsRUFBRWhFLFdBQVcsRUFBRUYsSUFBSSxDQUFDLEVBQUVvRztZQUN6QztRQUNGO1FBRUEsTUFBTUQsYUFBWXZFLE1BQU0sRUFBRXlDLEtBQUssRUFBRWhHLE9BQU87WUFDdEMsSUFBSU8sS0FBS1EsU0FBUyxFQUFFO2dCQUNsQixJQUFJUixLQUFLQyxhQUFhLEtBQUt1QyxXQUFXO29CQUNwQy9DLFlBQVksQ0FBQztvQkFDYkEsUUFBUTRCLE9BQU8sS0FBSyxDQUFDO29CQUNyQjVCLFFBQVE0QixPQUFPLENBQUNyQixLQUFLRSxtQkFBbUIsQ0FBQyxHQUFHRixLQUFLQyxhQUFhO2dCQUNoRTtnQkFFQSxNQUFNMEgsU0FBUyxNQUFNMUIsTUFBTSxDQUFDLEVBQUVqRyxLQUFLRixPQUFPLENBQUMsRUFBRSxFQUFFRSxLQUFLUixPQUFPLENBQUMsRUFBRWlHLE1BQU0sQ0FBQyxFQUFFekYsS0FBSytDLGlCQUFpQixDQUFDQyxRQUFRdkQ7Z0JBRXRHLElBQUksQ0FBQ2tJLE9BQU90QixFQUFFLEVBQUU7b0JBQ2QsTUFBTXVCLE1BQU8sTUFBTUQsT0FBT0UsSUFBSSxHQUFHM0IsS0FBSyxDQUFDLEtBQU87b0JBQzlDLGdFQUFnRTtvQkFDaEUsSUFBSSxDQUFDMEIsS0FBS3hFLE1BQU0sTUFBTSxJQUFJMEUsTUFBTSxDQUFDLE9BQU8sRUFBRUYsSUFBSUcsT0FBTyxJQUFJSixPQUFPcEIsVUFBVSxDQUFDLENBQUM7b0JBQzVFLE1BQU0sSUFBSXVCLE1BQU1qRSxLQUFLQyxTQUFTLENBQUM4RDtnQkFDakM7Z0JBRUEsT0FBT0QsT0FBT3JCLE1BQU0sS0FBSyxNQUFNLE1BQU1xQixPQUFPRSxJQUFJLEtBQUtyRjtZQUN2RDtZQUVBLGlGQUFpRjtZQUNqRixNQUFNMkQsUUFBUSxJQUFJMkI7WUFDbEIzQixNQUFNNEIsT0FBTyxHQUFHO1lBRWhCLHFEQUFxRDtZQUNyRCxPQUFPLE1BQU0sSUFBSUMsUUFBUSxPQUFPakIsU0FBU1g7Z0JBQ3ZDLE1BQU1WLFVBQThCO29CQUNsQ0Q7b0JBQ0F6QztvQkFDQTJDLG9CQUFvQmxHO29CQUNwQmlILFlBQVk7b0JBQ1pJLGNBQWMsT0FBT3BCO3dCQUNuQixNQUFNMUYsS0FBS21ILGNBQWMsQ0FBQ3pCO29CQUM1QjtvQkFDQXFCLFNBQVMsQ0FBQ2tCO3dCQUNSbEIsUUFBUWtCLEtBQUszQixNQUFNLEtBQUssTUFBTXpDLEtBQUtxRSxLQUFLLENBQUNELEtBQUs3RSxJQUFJLElBQUksUUFBUVo7b0JBQ2hFO29CQUNBNEQsUUFBUSxDQUFDbEQ7d0JBQ1BpRCxNQUFNZ0MsS0FBSyxHQUFHakY7d0JBQ2RrRCxPQUFPRDtvQkFDVDtvQkFDQWtCLGlCQUFpQjVILFNBQVM0SDtnQkFDNUI7Z0JBRUEsTUFBTXJILEtBQUttSCxjQUFjLENBQUN6QjtZQUM1QjtRQUNGO1FBRUEsTUFBTWxFLEtBQWlDSixHQUFXLEVBQUUzQixPQUEyRDtZQUM3RyxPQUFPMkksSUFBQUEsZUFBUSxFQUFDLE1BQU1wSSxLQUFLdUgsV0FBVyxDQUFDLE9BQU9uRyxLQUFLM0I7UUFDckQ7UUFFQSxNQUFNNEksTUFBa0NqSCxHQUFXLEVBQUUzQixPQUEyRDtZQUM5RyxPQUFPMkksSUFBQUEsZUFBUSxFQUFDLE1BQU1wSSxLQUFLdUgsV0FBVyxDQUFDLFFBQVFuRyxLQUFLM0I7UUFDdEQ7UUFFQSxNQUFNOEUsUUFBT25ELEdBQVcsRUFBRTNCLE9BQTJEO1lBQ25GMkksSUFBQUEsZUFBUSxFQUFDLE1BQU1wSSxLQUFLdUgsV0FBVyxDQUFDLFVBQVVuRyxLQUFLM0I7UUFDakQ7UUFFQSxNQUFNNkksT0FBbUNsSCxHQUFXLEVBQUUzQixPQUEyRDtZQUMvRyxPQUFPMkksSUFBQUEsZUFBUSxFQUFDLE1BQU1wSSxLQUFLdUgsV0FBVyxDQUFDLFNBQVNuRyxLQUFLM0I7UUFDdkQ7UUFFQSxNQUFNOEksS0FBY25ILEdBQVcsRUFBRTNCLE9BQTJEO1lBQzFGLE9BQU8ySSxJQUFBQSxlQUFRLEVBQUMsTUFBTXBJLEtBQUt1SCxXQUFXLENBQUMsT0FBT25HLEtBQUszQjtRQUNyRDtRQUVBLE1BQU0rSSxhQUFZQyxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsUUFBUTtZQUM5Q0EsV0FBV0MsSUFBQUEsNEJBQXFCLEVBQUNEO1lBRWpDLE1BQU0zSSxLQUFLdUksR0FBRyxDQUFDdkksS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxHQUFHLENBQUNOLFdBQVdDLFdBQVdDO1FBQzFFO1FBRUEsTUFBTUssY0FBYVAsU0FBUyxFQUFFQyxTQUFTLEVBQUVJLFNBQVMsRUFBRUcsVUFBVSxLQUFLO1lBQ2pFLElBQUksQ0FBQ0EsU0FBUztnQkFDWixNQUFNakIsUUFBUWtCLEdBQUcsQ0FDZkosVUFBVTdHLEdBQUcsQ0FBQyxPQUFPMEc7b0JBQ25CLE1BQU0zSSxLQUFLd0ksV0FBVyxDQUFDQyxXQUFXQyxXQUFXQztnQkFDL0M7Z0JBRUY7WUFDRjtZQUVBLEtBQUssTUFBTUEsWUFBWUcsVUFBVztnQkFDaEMsTUFBTTlJLEtBQUt3SSxXQUFXLENBQUNDLFdBQVdDLFdBQVdDO1lBQy9DO1FBQ0Y7UUFFQSxNQUFNUSxTQUFRQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFcEcsTUFBTTtZQUMzQyxNQUFNbEQsS0FBS3VJLEdBQUcsQ0FBQ3ZJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDTCxTQUFTQyxRQUFRQyxTQUFTO2dCQUFFcEc7WUFBTztRQUNwRjtRQUVBLE1BQU13RyxpQkFBZ0JqQixTQUFTLEVBQUVZLE1BQU07WUFDckMsTUFBTXJKLEtBQUt1SSxHQUFHLENBQUN2SSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDYyxPQUFPLENBQUNDLElBQUksQ0FBQ25CLFdBQVdZO1FBQzlEO1FBRUEsTUFBTVEsZ0JBQWVwQixTQUFTLEVBQUVZLE1BQU0sRUFBRWpHLElBQUk7WUFDMUMsTUFBTXBELEtBQUt1SSxHQUFHLENBQUN2SSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDaUIsV0FBVyxDQUFDckIsV0FBV1ksU0FBUztnQkFBRWpHO1lBQUs7UUFDN0U7UUFFQSxNQUFNMkcsbUJBQWtCWCxPQUFPLEVBQUVoRyxJQUFJLEVBQUVGLE1BQU07WUFDM0MsT0FBTyxNQUFNbEQsS0FBS3FJLElBQUksQ0FBNEJySSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDUyxPQUFPLENBQUNDLEtBQUssQ0FBQ2IsVUFBVTtnQkFBRWhHO2dCQUFNRjtZQUFPO1FBQzlHO1FBRUEsTUFBTWdILGVBQWNkLE9BQU8sRUFBRWhHLElBQUksRUFBRUYsTUFBTTtZQUN2QyxPQUFPLE1BQU1sRCxLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNWLFFBQVEsQ0FBQ08sVUFBVTtnQkFBRWhHO2dCQUFNRjtZQUFPO1FBQzlGO1FBRUEsTUFBTWlILGFBQVlmLE9BQU8sRUFBRWhHLElBQUksRUFBRUYsTUFBTTtZQUNyQyxPQUFPLE1BQU1sRCxLQUFLcUksSUFBSSxDQUFlckksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ2EsTUFBTSxDQUFDaEIsVUFBVTtnQkFBRWhHO2dCQUFNRjtZQUFPO1FBQzFGO1FBRUEsTUFBTW1ILGdDQUErQmpILElBQUksRUFBRTNELE9BQU87WUFDaEQsTUFBTTZLLGNBQWtDO2dCQUFFbEg7WUFBSztZQUUvQyxJQUFJM0QsU0FBUzhLLGFBQWE7Z0JBQ3hCRCxZQUFZckgsWUFBWSxHQUFHO2dCQUMzQnFILFlBQVlqSixPQUFPLEdBQUc7b0JBQ3BCcEIsZUFBZSxDQUFDLE9BQU8sRUFBRVIsUUFBUThLLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRDtZQUNGO1lBRUEsT0FBTyxNQUFNdkssS0FBS3FJLElBQUksQ0FBNEJySSxLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDQyxRQUFRLENBQUNBLFFBQVEsQ0FBQ3pLLEtBQUtOLGFBQWEsR0FBRzRLO1FBQ3BIO1FBRUEsTUFBTUksYUFBWXRILElBQUk7WUFDcEIsT0FBTyxNQUFNcEQsS0FBS3FJLElBQUksQ0FBZXJJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNMLEdBQUcsSUFBSTtnQkFBRTlGO1lBQUs7UUFDeEU7UUFFQSxNQUFNdUgsK0JBQThCdkgsSUFBSSxFQUFFZ0csT0FBTyxFQUFFM0osT0FBTztZQUN4RCxNQUFNNkssY0FBa0M7Z0JBQUVsSDtZQUFLO1lBRS9DLElBQUkzRCxTQUFTOEssYUFBYTtnQkFDeEJELFlBQVlySCxZQUFZLEdBQUc7Z0JBQzNCcUgsWUFBWWpKLE9BQU8sR0FBRztvQkFDcEJwQixlQUFlLENBQUMsT0FBTyxFQUFFUixRQUFROEssV0FBVyxDQUFDLENBQUM7Z0JBQ2hEO1lBQ0Y7WUFFQSxPQUFPLE1BQU12SyxLQUFLcUksSUFBSSxDQUE0QnJJLEtBQUtnQixNQUFNLENBQUN3SixZQUFZLENBQUNDLFFBQVEsQ0FBQ2xCLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDbEosS0FBS04sYUFBYSxFQUFFMEosVUFBVWtCO1FBQy9IO1FBRUEsTUFBTU0seUJBQXdCQyxZQUFZLEVBQUV6SCxJQUFJO1lBQzlDLElBQUlBLEtBQUswSCxJQUFJLEVBQUU7Z0JBQ2IxSCxLQUFLMEgsSUFBSSxHQUFHLE1BQU1DLElBQUFBLGtCQUFXLEVBQUMzSCxLQUFLMEgsSUFBSTtZQUN6QztZQUVBLE9BQU8sTUFBTTlLLEtBQUtxSSxJQUFJLENBQWVySSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDeUIsU0FBUyxDQUFDQyxJQUFJLENBQUNKLGVBQWU7Z0JBQUV6SDtZQUFLO1FBQy9GO1FBRUEsTUFBTThILG9CQUFtQjlCLE9BQU8sRUFBRTNKLE9BQU8sRUFBRXlELE1BQU07WUFDL0MsTUFBTUksT0FBTyxJQUFJQztZQUNqQkQsS0FBS0ksTUFBTSxDQUFDLFFBQVFqRSxRQUFRMEwsSUFBSSxDQUFDeEgsSUFBSSxFQUFFbEUsUUFBUTBMLElBQUksQ0FBQ3ZILElBQUk7WUFDeEROLEtBQUtJLE1BQU0sQ0FBQyxRQUFRakUsUUFBUW1FLElBQUk7WUFDaENOLEtBQUtJLE1BQU0sQ0FBQyxlQUFlakUsUUFBUTJMLFdBQVc7WUFDOUM5SCxLQUFLSSxNQUFNLENBQUMsUUFBUWpFLFFBQVE0TCxJQUFJO1lBRWhDLE9BQU8sTUFBTXJMLEtBQUtxSSxJQUFJLENBQWlCckksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQytCLFFBQVEsQ0FBQ2xDLFVBQVU7Z0JBQUVoRyxNQUFNRTtnQkFBTUo7WUFBTztRQUNwRztRQUVBLE1BQU1xSSxxQkFBb0JuQyxPQUFPLEVBQUVoRyxJQUFJO1lBQ3JDLE9BQU8sTUFBTXBELEtBQUtxSSxJQUFJLENBQWtCckksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3lCLFNBQVMsQ0FBQzlCLEdBQUcsQ0FBQ0UsVUFBVTtnQkFBRWhHO1lBQUs7UUFDNUY7UUFFQSxNQUFNb0ksbUJBQWtCL0MsU0FBUyxFQUFFckYsSUFBSSxFQUFFRixNQUFNO1lBQzdDLE9BQU8sTUFBTWxELEtBQUtxSSxJQUFJLENBQWlCckksS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQzRDLEtBQUssQ0FBQ2hELFlBQVk7Z0JBQUVyRjtnQkFBTUMsT0FBT0QsS0FBS0MsS0FBSztnQkFBRUg7WUFBTztRQUNsSDtRQUVBLE1BQU13SSxjQUFhakQsU0FBUyxFQUFFckYsT0FBTyxDQUFDLENBQUMsRUFBRUYsTUFBTTtZQUM3QyxPQUFPLE1BQU1sRCxLQUFLcUksSUFBSSxDQUFnQnJJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUM4QyxPQUFPLENBQUNsRCxZQUFZO2dCQUFFckY7Z0JBQU1GO1lBQU87UUFDaEc7UUFFQSxNQUFNMEksWUFBV3hDLE9BQU8sRUFBRWhHLElBQUksRUFBRUYsTUFBTTtZQUNwQyxPQUFPLE1BQU1sRCxLQUFLcUksSUFBSSxDQUFjckksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDTixHQUFHLENBQUNFLFVBQVU7Z0JBQUVoRztnQkFBTUY7WUFBTztRQUM1RjtRQUVBLE1BQU0ySSxzQkFBcUJ6QyxPQUFPLEVBQUVoRyxJQUFJLEVBQUVGLE1BQU07WUFDOUMsT0FBTyxNQUFNbEQsS0FBS3FJLElBQUksQ0FBd0JySSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDdUMsTUFBTSxDQUFDQSxNQUFNLENBQUMxQyxVQUFVO2dCQUFFaEc7Z0JBQU1GO1lBQU87UUFDMUc7UUFFQSxNQUFNNkkscUJBQW9CM0ksSUFBSSxFQUFFRixNQUFNO1lBQ3BDLE9BQU8sTUFBTWxELEtBQUtxSSxJQUFJLENBQXVCckksS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ21ELE1BQU0sSUFBSTtnQkFBRTVJO2dCQUFNRjtZQUFPO1FBQzdGO1FBRUEsTUFBTStJLGVBQWN4RCxTQUFTLEVBQUVoSixPQUFPLEVBQUV5RCxNQUFNO1lBQzVDLE9BQU8sTUFBTWxELEtBQUtxSSxJQUFJLENBQWlCckksS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ3FELFFBQVEsQ0FBQ3pELFlBQVk7Z0JBQy9FckYsTUFBTTtvQkFDSlEsTUFBTW5FLFFBQVFtRSxJQUFJO29CQUNsQnVJLFFBQVExTSxRQUFRME0sTUFBTSxHQUFHLE1BQU1wQixJQUFBQSxrQkFBVyxFQUFDdEwsUUFBUTBNLE1BQU0sSUFBSTNKO2dCQUMvRDtnQkFDQVU7WUFDRjtRQUNGO1FBRUEsTUFBTWtKLG1CQUFrQmhELE9BQU8sRUFBRWlELE1BQU0sRUFBRW5KLE1BQU07WUFDN0MsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDUyxPQUFPLENBQUNzQyxJQUFJLENBQUNsRCxTQUFTaUQsU0FBUztnQkFBRW5KO1lBQU87UUFDL0U7UUFFQSxNQUFNcUosZUFBYzlELFNBQVMsRUFBRXZGLE1BQU07WUFDbkMsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDMkQsT0FBTyxDQUFDL0QsWUFBWTtnQkFDekR2RjtZQUNGO1FBQ0Y7UUFFQSxNQUFNdUosaUNBQWdDaEUsU0FBUyxFQUFFaUUsV0FBVyxFQUFFeEosTUFBTTtZQUNsRSxNQUFNbEQsS0FBS3VFLE1BQU0sQ0FBQ3ZFLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUM4RCxTQUFTLENBQUNsRSxXQUFXaUUsY0FBYztnQkFBRXhKO1lBQU87UUFDckY7UUFFQSxNQUFNMEosYUFBWXhELE9BQU8sRUFBRXlELEVBQUUsRUFBRTNKLE1BQU07WUFDbkMsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDdUQsS0FBSyxDQUFDMUQsU0FBU3lELEtBQUs7Z0JBQUUzSjtZQUFPO1FBQ3BFO1FBRUEsTUFBTTZKLHVCQUFzQmxOLEtBQUssRUFBRTZJLFNBQVM7WUFDMUMsTUFBTTFJLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDd0MsU0FBUyxDQUFDakYsT0FBTyxDQUFDL0gsS0FBS04sYUFBYSxFQUFFRyxPQUFPNkksWUFBWTtnQkFBRXpGLGNBQWM7WUFBSztRQUMzSDtRQUVBLE1BQU1nSyxnQ0FBK0JDLFNBQVM7WUFDNUMsTUFBTWxOLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDQyxRQUFRLENBQUMwQyxPQUFPLENBQUNuTixLQUFLTixhQUFhLEVBQUV3TjtRQUNsRjtRQUVBLE1BQU1FLGFBQVloRSxPQUFPO1lBQ3ZCLE1BQU1wSixLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQzhELEtBQUssQ0FBQ2pFO1FBQzdDO1FBRUEsTUFBTWtFLCtCQUE4QkosU0FBUyxFQUFFOUQsT0FBTztZQUNwRCxNQUFNcEosS0FBS3VFLE1BQU0sQ0FBQ3ZFLEtBQUtnQixNQUFNLENBQUN3SixZQUFZLENBQUNDLFFBQVEsQ0FBQ2xCLE1BQU0sQ0FBQ2dFLEdBQUcsQ0FBQ3ZOLEtBQUtOLGFBQWEsRUFBRTBKLFNBQVM4RDtRQUM5RjtRQUVBLE1BQU1NLG9CQUFtQnBFLE9BQU8sRUFBRXFFLFNBQVMsRUFBRXZLLE1BQU07WUFDakQsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDbUUsT0FBTyxDQUFDdEUsU0FBU3FFLFlBQVk7Z0JBQUV2SztZQUFPO1FBQzdFO1FBRUEsTUFBTXlLLHFCQUFvQnZFLE9BQU8sRUFBRXlCLFlBQVk7WUFDN0MsTUFBTTdLLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDeUIsU0FBUyxDQUFDcUMsS0FBSyxDQUFDakUsU0FBU3lCO1FBQ2hFO1FBRUEsTUFBTStDLG1CQUFrQnhFLE9BQU8sRUFBRXlFLGFBQWEsRUFBRTNLLE1BQU07WUFDcEQsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDdUUsV0FBVyxDQUFDMUUsU0FBU3lFLGdCQUFnQjtnQkFBRTNLO1lBQU87UUFDckY7UUFFQSxNQUFNNkssY0FBYUMsVUFBVSxFQUFFOUssTUFBTTtZQUNuQyxNQUFNbEQsS0FBS3VFLE1BQU0sQ0FBQ3ZFLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUMwRSxNQUFNLENBQUNELGFBQWE7Z0JBQUU5SztZQUFPO1FBQ3BFO1FBRUEsTUFBTWdMLGVBQWN6RixTQUFTLEVBQUVDLFNBQVMsRUFBRXhGLE1BQU07WUFDOUMsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDZCxPQUFPLENBQUNVLFdBQVdDLFlBQVk7Z0JBQUV4RjtZQUFPO1FBQ2pGO1FBRUEsTUFBTWlMLGdCQUFlMUYsU0FBUyxFQUFFMkYsVUFBVSxFQUFFbEwsTUFBTTtZQUNoRCxNQUFNbEQsS0FBS3FJLElBQUksQ0FBQ3JJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUN3RixJQUFJLENBQUM1RixZQUFZO2dCQUNwRHJGLE1BQU07b0JBQ0prTCxVQUFVRixXQUFXRyxLQUFLLENBQUMsR0FBRyxLQUFLdE0sR0FBRyxDQUFDLENBQUM0SyxLQUFPQSxHQUFHL0osUUFBUTtnQkFDNUQ7Z0JBQ0FJO1lBQ0Y7UUFDRjtRQUVBLE1BQU1zTCxtQ0FBa0MzTyxLQUFLO1lBQzNDLE1BQU1HLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDd0MsU0FBUyxDQUFDeUIsUUFBUSxDQUFDek8sS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUFFb0QsY0FBYztZQUFLO1FBQ2pIO1FBRUEsTUFBTXlMLG1CQUFrQmpHLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxRQUFRO1lBQ3BEQSxXQUFXQyxJQUFBQSw0QkFBcUIsRUFBQ0Q7WUFFakMsTUFBTTNJLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDQyxTQUFTLENBQUNDLEdBQUcsQ0FBQ04sV0FBV0MsV0FBV0M7UUFDN0U7UUFFQSxNQUFNZ0csb0JBQW1CbEcsU0FBUyxFQUFFQyxTQUFTO1lBQzNDLE1BQU0xSSxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ0MsU0FBUyxDQUFDSSxHQUFHLENBQUNULFdBQVdDO1FBQ2xFO1FBRUEsTUFBTWtHLHNCQUFxQm5HLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxRQUFRO1lBQ3ZEQSxXQUFXQyxJQUFBQSw0QkFBcUIsRUFBQ0Q7WUFFakMsTUFBTTNJLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDQyxTQUFTLENBQUNnRSxLQUFLLENBQUNyRSxXQUFXQyxXQUFXQztRQUMvRTtRQUVBLE1BQU1rRyxZQUFXekYsT0FBTyxFQUFFRSxNQUFNLEVBQUVwRyxNQUFNO1lBQ3RDLE1BQU1sRCxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDK0QsR0FBRyxDQUFDbkUsU0FBU0UsU0FBUztnQkFBRXBHO1lBQU87UUFDNUU7UUFFQSxNQUFNNEwsc0JBQXFCMUYsT0FBTyxFQUFFMkYsT0FBTztZQUN6QyxNQUFNL08sS0FBS3VFLE1BQU0sQ0FBQ3ZFLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUN1QyxNQUFNLENBQUNrRCxLQUFLLENBQUM1RixTQUFTMkY7UUFDN0Q7UUFFQSxNQUFNRSxxQkFBb0J4RyxTQUFTLEVBQUV2RixNQUFNO1lBQ3pDLE1BQU1sRCxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ3FHLEtBQUssQ0FBQ3pHLFlBQVk7Z0JBQUV2RjtZQUFPO1FBQ3BFO1FBRUEsTUFBTWlNLG9CQUFtQjFHLFNBQVMsRUFBRUMsU0FBUyxFQUFFVyxNQUFNLEVBQUVWLFFBQVE7WUFDN0RBLFdBQVdDLElBQUFBLDRCQUFxQixFQUFDRDtZQUVqQyxNQUFNM0ksS0FBS3VFLE1BQU0sQ0FBQ3ZFLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNDLFNBQVMsQ0FBQ2MsSUFBSSxDQUFDbkIsV0FBV0MsV0FBV0MsVUFBVVU7UUFDeEY7UUFFQSxNQUFNK0YsZUFBY0MsU0FBUyxFQUFFbk0sTUFBTTtZQUNuQyxNQUFNbEQsS0FBS3VFLE1BQU0sQ0FBQ3ZFLEtBQUtnQixNQUFNLENBQUNrTCxRQUFRLENBQUNXLEVBQUUsQ0FBQ3dDLFlBQVk7Z0JBQUVuTTtZQUFPO1FBQ2pFO1FBRUEsTUFBTW9NLHNCQUFxQkQsU0FBUyxFQUFFeFAsS0FBSyxFQUFFNkksU0FBUyxFQUFFakosT0FBTztZQUM3RCxNQUFNTyxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQ2tMLFFBQVEsQ0FBQ25FLE9BQU8sQ0FBQ3NILFdBQVd4UCxPQUFPNkksV0FBV2pKO1FBQzlFO1FBRUEsTUFBTThQLHdCQUF1QkYsU0FBUyxFQUFFeFAsS0FBSztZQUMzQyxNQUFNRyxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQ2tMLFFBQVEsQ0FBQ3NELE9BQU8sQ0FBQ0gsV0FBV3hQO1FBQzVEO1FBRUEsTUFBTTRQLG1DQUFrQ3JHLE9BQU8sRUFBRThELFNBQVMsRUFBRTNDLFdBQVcsRUFBRW1GLFdBQVc7WUFDbEYsT0FBTyxNQUFNMVAsS0FBS3VJLEdBQUcsQ0FDbkJ2SSxLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDQyxRQUFRLENBQUNrRixVQUFVLENBQUMzUCxLQUFLTixhQUFhLEVBQUUwSixTQUFTOEQsWUFDMUU7Z0JBQ0U5SixNQUFNO29CQUNKc007Z0JBQ0Y7Z0JBQ0FyTyxTQUFTO29CQUFFcEIsZUFBZSxDQUFDLE9BQU8sRUFBRXNLLFlBQVksQ0FBQztnQkFBQztZQUNwRDtRQUVKO1FBRUEsTUFBTXFGLGlCQUFnQnhHLE9BQU8sRUFBRWlELE1BQU0sRUFBRWpKLElBQUksRUFBRUYsTUFBTTtZQUNqRCxPQUFPLE1BQU1sRCxLQUFLc0ksS0FBSyxDQUE0QnRJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNTLE9BQU8sQ0FBQ3NDLElBQUksQ0FBQ2xELFNBQVNpRCxTQUFTO2dCQUFFako7Z0JBQU1GO1lBQU87UUFDdEg7UUFFQSxNQUFNMk0sZ0JBQWVwUSxPQUFPO1lBQzFCLE1BQU0wTSxTQUFTMU0sU0FBU3FRLGVBQWUsTUFBTS9FLElBQUFBLGtCQUFXLEVBQUN0TCxTQUFTcVEsZ0JBQWdCclEsU0FBU3FRO1lBQzNGLE1BQU1DLFNBQVN0USxTQUFTdVEsZUFBZSxNQUFNakYsSUFBQUEsa0JBQVcsRUFBQ3RMLFNBQVN1USxnQkFBZ0J2USxTQUFTdVE7WUFFM0YsT0FBTyxNQUFNaFEsS0FBS3NJLEtBQUssQ0FBY3RJLEtBQUtnQixNQUFNLENBQUNpUCxXQUFXLElBQUk7Z0JBQzlEN00sTUFBTTtvQkFDSjhNLFVBQVV6USxRQUFReVEsUUFBUSxFQUFFQztvQkFDNUJoRTtvQkFDQTREO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLE1BQU1LLGFBQVkzSCxTQUFTLEVBQUVyRixJQUFJLEVBQUVGLE1BQU07WUFDdkMsT0FBTyxNQUFNbEQsS0FBS3NJLEtBQUssQ0FBaUJ0SSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDMkQsT0FBTyxDQUFDL0QsWUFBWTtnQkFBRXJGO2dCQUFNRjtZQUFPO1FBQ2xHO1FBRUEsTUFBTW1OLGdDQUErQjVILFNBQVMsRUFBRXJGLElBQUksRUFBRUYsTUFBTTtZQUMxRCxNQUFNbEQsS0FBS3VJLEdBQUcsQ0FBQ3ZJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUM4RCxTQUFTLENBQUNsRSxXQUFXckYsS0FBS3lKLEVBQUUsR0FBRztnQkFBRXpKO2dCQUFNRjtZQUFPO1FBQ3BGO1FBRUEsTUFBTW9OLHNCQUFxQmxILE9BQU8sRUFBRWhHLElBQUk7WUFDdEMsTUFBTXBELEtBQUtzSSxLQUFLLENBQUN0SSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDVixRQUFRLENBQUNPLFVBQVU7Z0JBQUVoRztZQUFLO1FBQ2hFO1FBRUEsTUFBTW1OLFdBQVVuSCxPQUFPLEVBQUV5RCxFQUFFLEVBQUV6SixJQUFJLEVBQUVGLE1BQU07WUFDdkMsT0FBTyxNQUFNbEQsS0FBS3NJLEtBQUssQ0FBZXRJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUN1RCxLQUFLLENBQUMxRCxTQUFTeUQsS0FBSztnQkFBRXpKO2dCQUFNRjtZQUFPO1FBQzlGO1FBRUEsTUFBTXNOLHFCQUFvQjNRLEtBQUssRUFBRTZJLFNBQVMsRUFBRXRGLElBQUk7WUFDOUMsT0FBTyxNQUFNcEQsS0FBS3NJLEtBQUssQ0FBaUJ0SSxLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDd0MsU0FBUyxDQUFDakYsT0FBTyxDQUFDL0gsS0FBS04sYUFBYSxFQUFFRyxPQUFPNkksWUFBWTtnQkFDeEh0RjtnQkFDQUMsT0FBT0QsS0FBS0MsS0FBSztnQkFDakJKLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU13Tiw4QkFBNkJ2RCxTQUFTLEVBQUU5SixJQUFJO1lBQ2hELE9BQU8sTUFBTXBELEtBQUtzSSxLQUFLLENBQTRCdEksS0FBS2dCLE1BQU0sQ0FBQ3dKLFlBQVksQ0FBQ0MsUUFBUSxDQUFDMEMsT0FBTyxDQUFDbk4sS0FBS04sYUFBYSxFQUFFd04sWUFBWTtnQkFBRTlKO1lBQUs7UUFDdEk7UUFFQSxNQUFNc04sV0FBVXRILE9BQU8sRUFBRWhHLElBQUksRUFBRUYsTUFBTTtZQUNuQyxPQUFPLE1BQU1sRCxLQUFLc0ksS0FBSyxDQUFldEksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQzhELEtBQUssQ0FBQ2pFLFVBQVU7Z0JBQUVoRztnQkFBTUY7WUFBTztRQUMxRjtRQUVBLE1BQU15Tiw2QkFBNEJ6RCxTQUFTLEVBQUU5RCxPQUFPLEVBQUVoRyxJQUFJO1lBQ3hELE9BQU8sTUFBTXBELEtBQUtzSSxLQUFLLENBQTRCdEksS0FBS2dCLE1BQU0sQ0FBQ3dKLFlBQVksQ0FBQ0MsUUFBUSxDQUFDbEIsTUFBTSxDQUFDZ0UsR0FBRyxDQUFDdk4sS0FBS04sYUFBYSxFQUFFMEosU0FBUzhELFlBQVk7Z0JBQ3ZJOUo7WUFDRjtRQUNGO1FBRUEsTUFBTXdOLG1CQUFrQnhILE9BQWtCLEVBQUV5SCxRQUFtQixFQUFFM04sTUFBZTtZQUM5RSxNQUFNbEQsS0FBS3FJLElBQUksQ0FBQ3JJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUN1SCxHQUFHLENBQUMxSCxVQUFVO2dCQUFFaEcsTUFBTTtvQkFBRTJOLE9BQU9GO2dCQUFTO2dCQUFHM047WUFBTztRQUN2RjtRQUVBLE1BQU04TixrQkFBaUI1SCxPQUFPLEVBQUVxRSxTQUFTLEVBQUVySyxJQUFJLEVBQUVGLE1BQU07WUFDckQsT0FBTyxNQUFNbEQsS0FBS3NJLEtBQUssQ0FBaUJ0SSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDbUUsT0FBTyxDQUFDdEUsU0FBU3FFLFlBQVk7Z0JBQUVySztnQkFBTUY7WUFBTztRQUN6RztRQUVBLE1BQU0rTixtQkFBa0I3SCxPQUFPLEVBQUV5QixZQUFvQixFQUFFekgsSUFBeUI7WUFDOUUsT0FBTyxNQUFNcEQsS0FBS3NJLEtBQUssQ0FBa0J0SSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDeUIsU0FBUyxDQUFDcUMsS0FBSyxDQUFDakUsU0FBU3lCLGVBQWU7Z0JBQUV6SDtZQUFLO1FBQzdHO1FBRUEsTUFBTThOLGFBQVl6SSxTQUFTLEVBQUVDLFNBQVMsRUFBRXRGLElBQUk7WUFDMUMsT0FBTyxNQUFNcEQsS0FBS3NJLEtBQUssQ0FBaUJ0SSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDZCxPQUFPLENBQUNVLFdBQVdDLFlBQVk7Z0JBQUV0RjtnQkFBTUMsT0FBT0QsS0FBS0MsS0FBSztZQUFDO1FBQ3hIO1FBRUEsTUFBTThOLGlDQUFnQ3RSLEtBQUssRUFBRXVELElBQUk7WUFDL0MsT0FBTyxNQUFNcEQsS0FBS3NJLEtBQUssQ0FBaUJ0SSxLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDd0MsU0FBUyxDQUFDeUIsUUFBUSxDQUFDek8sS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUM5R3VEO2dCQUNBQyxPQUFPRCxLQUFLQyxLQUFLO1lBQ25CO1FBQ0Y7UUFFQSxNQUFNK04sNEJBQTJCL0IsU0FBUyxFQUFFeFAsS0FBSyxFQUFFSixPQUFPO1lBQ3hELE9BQU8sTUFBTU8sS0FBS3NJLEtBQUssQ0FBaUJ0SSxLQUFLZ0IsTUFBTSxDQUFDa0wsUUFBUSxDQUFDdUMsUUFBUSxDQUFDWSxXQUFXeFAsT0FBT0osVUFBVTtnQkFDaEcyRCxNQUFNO29CQUNKaU8sTUFBTUMsK0JBQXdCLENBQUNDLGFBQWE7b0JBQzVDdEosTUFBTXhJO2dCQUNSO2dCQUNBNEQsT0FBTzVELFFBQVE0RCxLQUFLO2dCQUNwQkosY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTXVPLG1CQUFrQnBJLE9BQU8sRUFBRTNKLE9BQU87WUFDdEMsTUFBTU8sS0FBS3NJLEtBQUssQ0FBQ3RJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNrSSxLQUFLLENBQUNySSxVQUFVO2dCQUNsRGhHLE1BQU07b0JBQ0osR0FBRzNELE9BQU87b0JBQ1ZpUyw0QkFBNEJqUyxRQUFRa1MsdUJBQXVCLEdBQ3ZELElBQUloUSxLQUFLbEMsUUFBUWtTLHVCQUF1QixFQUFFQyxXQUFXLEtBQ3JEblMsUUFBUWtTLHVCQUF1QjtnQkFDckM7WUFDRjtRQUNGO1FBRUEsTUFBTUUsb0JBQW1CekksT0FBTyxFQUFFMkYsT0FBTyxFQUFFM0wsSUFBSSxFQUFFRixNQUFNO1lBQ3JELE9BQU8sTUFBTWxELEtBQUtzSSxLQUFLLENBQXdCdEksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3VDLE1BQU0sQ0FBQ2tELEtBQUssQ0FBQzVGLFNBQVMyRixVQUFVO2dCQUFFM0w7Z0JBQU1GO1lBQU87UUFDbkg7UUFFQSxNQUFNNE8sVUFBUzFJLE9BQU8sRUFBRUUsTUFBTSxFQUFFbEcsSUFBSSxFQUFFRixNQUFNO1lBQzFDLE9BQU8sTUFBTWxELEtBQUtzSSxLQUFLLENBQWN0SSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDQyxLQUFLLENBQUMrRCxHQUFHLENBQUNuRSxTQUFTRSxTQUFTO2dCQUFFbEc7Z0JBQU1GO1lBQU87UUFDckc7UUFFQSxNQUFNNk8sbUJBQWtCM0ksT0FBTyxFQUFFaEcsSUFBSSxFQUFFRixNQUFNO1lBQzNDLE9BQU8sTUFBTWxELEtBQUtzSSxLQUFLLENBQWdCdEksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDTixHQUFHLENBQUNFLFVBQVU7Z0JBQUVoRztnQkFBTUY7WUFBTztRQUMvRjtRQUVBLE1BQU04TyxtQkFBa0J2SixTQUFTLEVBQUV3SixLQUFLLEVBQUUvTyxNQUFlO1lBQ3ZELE9BQU8sTUFBTWxELEtBQUtzSSxLQUFLLENBQXVCdEksS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ3FHLEtBQUssQ0FBQ3pHLFlBQVk7Z0JBQUVyRixNQUFNO29CQUFFNk87Z0JBQU07Z0JBQUcvTztZQUFPO1FBQ2pIO1FBRUEsTUFBTWdQLG9CQUFtQjlJLE9BQU8sRUFBRTNKLE9BQU87WUFDdkMsTUFBTU8sS0FBS3NJLEtBQUssQ0FBQ3RJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNrSSxLQUFLLENBQUNySSxTQUFTM0osUUFBUTRKLE1BQU0sR0FBRztnQkFBRWpHLE1BQU0zRDtZQUFRO1FBQ3RGO1FBRUEsTUFBTTBTLGFBQVk5QyxTQUFTLEVBQUVqTSxJQUFJLEVBQUVGLE1BQU07WUFDdkMsT0FBTyxNQUFNbEQsS0FBS3NJLEtBQUssQ0FBaUJ0SSxLQUFLZ0IsTUFBTSxDQUFDa0wsUUFBUSxDQUFDVyxFQUFFLENBQUN3QyxZQUFZO2dCQUFFak07Z0JBQU1GO1lBQU87UUFDN0Y7UUFFQSxNQUFNa1Asb0JBQW1CL0MsU0FBUyxFQUFFeFAsS0FBSyxFQUFFNkksU0FBUyxFQUFFakosT0FBTztZQUMzRCxPQUFPLE1BQU1PLEtBQUtzSSxLQUFLLENBQWlCdEksS0FBS2dCLE1BQU0sQ0FBQ2tMLFFBQVEsQ0FBQ25FLE9BQU8sQ0FBQ3NILFdBQVd4UCxPQUFPNkksV0FBV2pKLFVBQVU7Z0JBQzFHMkQsTUFBTTNEO2dCQUNONEQsT0FBTzVELFFBQVE0RCxLQUFLO1lBQ3RCO1FBQ0Y7UUFFQSxNQUFNZ1Asc0JBQXFCaEQsU0FBUyxFQUFFeFAsS0FBSyxFQUFFdUQsSUFBSTtZQUMvQyxPQUFPLE1BQU1wRCxLQUFLc0ksS0FBSyxDQUFpQnRJLEtBQUtnQixNQUFNLENBQUNrTCxRQUFRLENBQUNzRCxPQUFPLENBQUNILFdBQVd4UCxRQUFRO2dCQUFFdUQ7WUFBSztRQUNqRztRQUVBLE1BQU1rUCxtQkFBa0JsSixPQUFPLEVBQUVoRyxJQUFJLEVBQUVGLE1BQU07WUFDM0MsT0FBTyxNQUFNbEQsS0FBS3NJLEtBQUssQ0FBdUJ0SSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDZ0osT0FBTyxDQUFDbkosVUFBVTtnQkFBRWhHO2dCQUFNRjtZQUFPO1FBQ3BHO1FBRUEsTUFBTXNQLG9CQUFtQnBKLE9BQU8sRUFBRWhHLElBQUksRUFBRUYsTUFBTTtZQUM1QyxPQUFPLE1BQU1sRCxLQUFLc0ksS0FBSyxDQUE2QnRJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNrSixNQUFNLENBQUNySixVQUFVO2dCQUFFaEc7Z0JBQU1GO1lBQU87UUFDekc7UUFFQSxNQUFNd1AsZ0JBQWVyRCxTQUFTLEVBQUV4UCxLQUFLLEVBQUVKLE9BQU87WUFDNUMsT0FBTyxNQUFNTyxLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUNrTCxRQUFRLENBQUNzRCxPQUFPLENBQUNILFdBQVd4UCxPQUFPSixVQUFVO2dCQUFFMkQsTUFBTTNEO1lBQVE7UUFDbEg7UUFFQSxNQUFNa1Qsb0JBQW1CQyxlQUFlLEVBQUVDLGVBQWUsRUFBRTNQLE1BQU07WUFDL0QsT0FBTyxNQUFNbEQsS0FBS3FJLElBQUksQ0FBeUJySSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDaUssTUFBTSxDQUFDRixrQkFBa0I7Z0JBQzNGeFAsTUFBTTtvQkFDSjJQLG9CQUFvQkY7Z0JBQ3RCO2dCQUNBM1A7WUFDRjtRQUNGO1FBRUEsTUFBTThQLGtCQUFpQjVKLE9BQU87WUFDNUIsT0FBTyxNQUFNcEosS0FBS3dCLEdBQUcsQ0FBMkJ4QixLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDYyxPQUFPLENBQUNzSixNQUFNLENBQUM3SjtRQUN0RjtRQUVBLE1BQU04SixpQ0FBZ0M5SixPQUFPLEVBQUU4RCxTQUFTLEVBQUV6TixPQUFPO1lBQy9ELE1BQU02SyxjQUFnRCxDQUFDO1lBRXZELElBQUk3SyxTQUFTMFQsYUFBYTtnQkFDeEI3SSxZQUFZckgsWUFBWSxHQUFHO2dCQUMzQnFILFlBQVlqSixPQUFPLEdBQUc7b0JBQ3BCcEIsZUFBZSxDQUFDLE9BQU8sRUFBRVIsUUFBUTBULFdBQVcsQ0FBQyxDQUFDO2dCQUNoRDtZQUNGO1lBRUEsT0FBTyxNQUFNblQsS0FBS3dCLEdBQUcsQ0FDbkJ4QixLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDQyxRQUFRLENBQUNrRixVQUFVLENBQUNsUSxTQUFTQyxpQkFBaUJNLEtBQUtOLGFBQWEsRUFBRTBKLFNBQVM4RCxZQUNwRzVDO1FBRUo7UUFFQSxNQUFNOEksa0NBQWlDaEssT0FBTyxFQUFFM0osT0FBTztZQUNyRCxNQUFNNkssY0FBZ0QsQ0FBQztZQUV2RCxJQUFJN0ssU0FBUzBULGFBQWE7Z0JBQ3hCN0ksWUFBWXJILFlBQVksR0FBRztnQkFDM0JxSCxZQUFZakosT0FBTyxHQUFHO29CQUNwQnBCLGVBQWUsQ0FBQyxPQUFPLEVBQUVSLFFBQVEwVCxXQUFXLENBQUMsQ0FBQztnQkFDaEQ7WUFDRjtZQUVBLE9BQU8sTUFBTW5ULEtBQUt3QixHQUFHLENBQ25CeEIsS0FBS2dCLE1BQU0sQ0FBQ3dKLFlBQVksQ0FBQ0MsUUFBUSxDQUFDaUYsV0FBVyxDQUFDalEsU0FBU0MsaUJBQWlCTSxLQUFLTixhQUFhLEVBQUUwSixVQUM1RmtCO1FBRUo7UUFFQSxNQUFNK0k7WUFDSixPQUFPLE1BQU1yVCxLQUFLd0IsR0FBRyxDQUFxQnhCLEtBQUtnQixNQUFNLENBQUNzUyxNQUFNLENBQUNDLFdBQVc7UUFDMUU7UUFFQSxNQUFNQyxxQkFBb0JwUSxJQUFJO1lBQzVCLE9BQU8sTUFBTXBELEtBQUtzSSxLQUFLLENBQXFCdEksS0FBS2dCLE1BQU0sQ0FBQ3VTLFdBQVcsSUFBSTtnQkFDckVuUTtZQUNGO1FBQ0Y7UUFFQSxNQUFNcVEsOEJBQTZCNVQsS0FBSztZQUN0QyxPQUFPLE1BQU1HLEtBQUt3QixHQUFHLENBQThCeEIsS0FBS2dCLE1BQU0sQ0FBQ3NTLE1BQU0sQ0FBQ0ksb0JBQW9CLElBQUk7Z0JBQzVGclMsU0FBUztvQkFDUHBCLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE1BQU0sQ0FBQztnQkFDbEM7Z0JBQ0FvRCxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNMFEsZUFBY0MsUUFBUSxFQUFFQyxZQUFZLEVBQUV6USxJQUFJO1lBQzlDLE1BQU0wUSxtQkFBbUJDLGtCQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLEVBQUVKLFNBQVMsQ0FBQyxFQUFFQyxhQUFhLENBQUM7WUFFbEUsTUFBTXZKLGNBQWtDO2dCQUN0Q2xIO2dCQUNBL0IsU0FBUztvQkFDUCxnQkFBZ0I7b0JBQ2hCcEIsZUFBZSxDQUFDLE1BQU0sRUFBRTZULGlCQUFpQmhSLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQy9EO2dCQUNBRyxjQUFjO1lBQ2hCO1lBRUEsSUFBSUcsS0FBSzZRLFNBQVMsS0FBSyxzQkFBc0I7Z0JBQzNDM0osWUFBWWxILElBQUksQ0FBQzhRLEtBQUssR0FBRzlRLEtBQUs4USxLQUFLLENBQUMvUCxJQUFJLENBQUM7WUFDM0M7WUFFQSxPQUFPLE1BQU1uRSxLQUFLcUksSUFBSSxDQUE2QnJJLEtBQUtnQixNQUFNLENBQUNzUyxNQUFNLENBQUNhLGFBQWEsSUFBSTdKO1FBQ3pGO1FBRUEsTUFBTThKLGFBQVlSLFFBQVEsRUFBRUMsWUFBWSxFQUFFelEsSUFBSTtZQUM1QyxNQUFNMFEsbUJBQW1CQyxrQkFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxFQUFFSixTQUFTLENBQUMsRUFBRUMsYUFBYSxDQUFDO1lBRWxFLE1BQU03VCxLQUFLcUksSUFBSSxDQUFDckksS0FBS2dCLE1BQU0sQ0FBQ3NTLE1BQU0sQ0FBQ2UsV0FBVyxJQUFJO2dCQUNoRGpSO2dCQUNBL0IsU0FBUztvQkFDUCxnQkFBZ0I7b0JBQ2hCcEIsZUFBZSxDQUFDLE1BQU0sRUFBRTZULGlCQUFpQmhSLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQy9EO2dCQUNBRyxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNcVIsYUFBWWxMLE9BQU8sRUFBRTNKLE9BQU87WUFDaEMsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUFrQnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNnTCxTQUFTLENBQUNuTCxTQUFTM0o7UUFDL0U7UUFFQSxNQUFNK1UsZ0JBQWVwTCxPQUFPLEVBQUVpRCxNQUFNO1lBQ2xDLE9BQU8sTUFBTXJNLEtBQUt3QixHQUFHLENBQTRCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ1MsT0FBTyxDQUFDc0MsSUFBSSxDQUFDbEQsU0FBU2lEO1FBQzVGO1FBRUEsTUFBTW9JLGlCQUFnQnJMLE9BQU87WUFDM0IsT0FBTyxNQUFNcEosS0FBS3dCLEdBQUcsQ0FBOEJ4QixLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDUyxPQUFPLENBQUNDLEtBQUssQ0FBQ2I7UUFDdEY7UUFFQSxNQUFNc0w7WUFDSixPQUFPLE1BQU0xVSxLQUFLd0IsR0FBRyxDQUF1QnhCLEtBQUtnQixNQUFNLENBQUMyVCxPQUFPO1FBQ2pFO1FBRUEsTUFBTUMsUUFBT3hMLE9BQU8sRUFBRUMsTUFBTTtZQUMxQixPQUFPLE1BQU1ySixLQUFLd0IsR0FBRyxDQUFheEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDMUwsU0FBU0M7UUFDNUU7UUFFQSxNQUFNMEwsU0FBUTNMLE9BQU8sRUFBRTNKLE9BQU87WUFDNUIsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUFleEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ0csSUFBSSxDQUFDNUwsU0FBUzNKO1FBQy9FO1FBRUEsTUFBTXdWLFlBQVdwSSxFQUFFO1lBQ2pCLE9BQU8sTUFBTTdNLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQzJELE9BQU8sQ0FBQ0s7UUFDckU7UUFFQSxNQUFNcUksbUJBQWtCek0sU0FBUztZQUMvQixPQUFPLE1BQU16SSxLQUFLd0IsR0FBRyxDQUEwQnhCLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUM4QyxPQUFPLENBQUNsRDtRQUM5RTtRQUVBLE1BQU0wTSxhQUFZL0wsT0FBTztZQUN2QixPQUFPLE1BQU1wSixLQUFLd0IsR0FBRyxDQUFtQnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNWLFFBQVEsQ0FBQ087UUFDdEU7UUFFQSxNQUFNZ00sb0JBQW1CM00sU0FBUztZQUNoQyxPQUFPLE1BQU16SSxLQUFLd0IsR0FBRyxDQUFtQnhCLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNxRCxRQUFRLENBQUN6RDtRQUN4RTtRQUVBLE1BQU00TSxjQUFhaE0sTUFBTTtZQUN2QixPQUFPLE1BQU1ySixLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUN5TSxFQUFFLElBQUk7Z0JBQ2hFbFMsTUFBTTtvQkFBRW1TLGNBQWNsTTtnQkFBTztZQUMvQjtRQUNGO1FBRUEsTUFBTW1NLG1CQUFrQnBTLElBQUk7WUFDMUIsT0FBTyxNQUFNcEQsS0FBS3FJLElBQUksQ0FBaUJySSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDeU0sRUFBRSxJQUFJO2dCQUNoRWxTO1lBQ0Y7UUFDRjtRQUVBLE1BQU1xUyxVQUFTck0sT0FBTyxFQUFFc00sT0FBTztZQUM3QixPQUFPLE1BQU0xVixLQUFLd0IsR0FBRyxDQUFleEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3VELEtBQUssQ0FBQzFELFNBQVNzTTtRQUN4RTtRQUVBLE1BQU1DLFdBQVV2TSxPQUFPO1lBQ3JCLE9BQU8sTUFBTXBKLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ2EsTUFBTSxDQUFDaEI7UUFDbEU7UUFFQSxNQUFNd00sb0JBQW1CL1YsS0FBSyxFQUFFNkksU0FBUztZQUN2QyxPQUFPLE1BQU0xSSxLQUFLd0IsR0FBRyxDQUFpQnhCLEtBQUtnQixNQUFNLENBQUN3SixZQUFZLENBQUN3QyxTQUFTLENBQUNqRixPQUFPLENBQUMvSCxLQUFLTixhQUFhLEVBQUVHLE9BQU82SSxZQUFZO2dCQUFFekYsY0FBYztZQUFLO1FBQy9JO1FBRUEsTUFBTTRTO1lBQ0osT0FBTyxNQUFNN1YsS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLZ0IsTUFBTSxDQUFDOFUsVUFBVTtRQUNwRTtRQUVBLE1BQU1DLDZCQUE0QjdJLFNBQVM7WUFDekMsT0FBTyxNQUFNbE4sS0FBS3dCLEdBQUcsQ0FBNEJ4QixLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDQyxRQUFRLENBQUMwQyxPQUFPLENBQUNuTixLQUFLTixhQUFhLEVBQUV3TjtRQUNqSDtRQUVBLE1BQU04STtZQUNKLE9BQU8sTUFBTWhXLEtBQUt3QixHQUFHLENBQThCeEIsS0FBS2dCLE1BQU0sQ0FBQ3dKLFlBQVksQ0FBQ0MsUUFBUSxDQUFDQSxRQUFRLENBQUN6SyxLQUFLTixhQUFhO1FBQ2xIO1FBRUEsTUFBTXVXLFVBQVM3TSxPQUFPLEVBQUUzSixVQUFVO1lBQUV5VyxRQUFRO1FBQUssQ0FBQztZQUNoRCxPQUFPLE1BQU1sVyxLQUFLd0IsR0FBRyxDQUFleEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQzhELEtBQUssQ0FBQ2pFLFNBQVMzSixRQUFReVcsTUFBTTtRQUN0RjtRQUVBLE1BQU1DLFdBQVV0VyxLQUFLLEVBQUVKLE9BQU87WUFDNUIsTUFBTTJXLHFCQUFxRHZXLFFBQ3ZEO2dCQUNFd0IsU0FBUztvQkFDUHBCLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE1BQU0sQ0FBQztnQkFDbEM7Z0JBQ0FvRCxjQUFjO1lBQ2hCLElBQ0FUO1lBRUosT0FBTyxNQUFNeEMsS0FBS3dCLEdBQUcsQ0FBd0J4QixLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDOE0sVUFBVSxDQUFDNVcsVUFBVTJXO1FBQ3ZGO1FBRUEsTUFBTUUsNEJBQTJCcEosU0FBUyxFQUFFOUQsT0FBTztZQUNqRCxPQUFPLE1BQU1wSixLQUFLd0IsR0FBRyxDQUE0QnhCLEtBQUtnQixNQUFNLENBQUN3SixZQUFZLENBQUNDLFFBQVEsQ0FBQ2xCLE1BQU0sQ0FBQ2dFLEdBQUcsQ0FBQ3ZOLEtBQUtOLGFBQWEsRUFBRTBKLFNBQVM4RDtRQUM3SDtRQUVBLE1BQU1xSiw2QkFBNEJuTixPQUFPO1lBQ3ZDLE9BQU8sTUFBTXBKLEtBQUt3QixHQUFHLENBQThCeEIsS0FBS2dCLE1BQU0sQ0FBQ3dKLFlBQVksQ0FBQ0MsUUFBUSxDQUFDbEIsTUFBTSxDQUFDTCxHQUFHLENBQUNsSixLQUFLTixhQUFhLEVBQUUwSjtRQUN0SDtRQUVBLE1BQU1vTixpQkFBZ0JwTixPQUFPO1lBQzNCLE9BQU8sTUFBTXBKLEtBQUt3QixHQUFHLENBQXNCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ2tOLE9BQU8sQ0FBQ3JOO1FBQ3hFO1FBRUEsTUFBTXNOLGtCQUFpQjdMLFlBQVk7WUFDakMsT0FBTyxNQUFNN0ssS0FBS3dCLEdBQUcsQ0FBa0J4QixLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDeUIsU0FBUyxDQUFDQyxJQUFJLENBQUNKO1FBQzNFO1FBRUEsTUFBTThMLG1CQUFrQnZOLE9BQU87WUFDN0IsT0FBTyxNQUFNcEosS0FBS3dCLEdBQUcsQ0FBb0J4QixLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDeUIsU0FBUyxDQUFDOUIsR0FBRyxDQUFDRTtRQUM1RTtRQUVBLE1BQU13TixrQkFBaUJ4TixPQUFPO1lBQzVCLE9BQU8sTUFBTXBKLEtBQUt3QixHQUFHLENBQW1CeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQzJDLFFBQVEsQ0FBQzlDO1FBQ3RFO1FBRUEsTUFBTXlOLGlCQUFnQnpOLE9BQU87WUFDM0IsT0FBTyxNQUFNcEosS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDdU4sWUFBWSxDQUFDMU47UUFDOUU7UUFFQSxNQUFNMk4sV0FBVS9JLFVBQVUsRUFBRXZPLE9BQU87WUFDakMsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUF3QnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUMwRSxNQUFNLENBQUNELFlBQVl2TztRQUNyRjtRQUVBLE1BQU11WCxZQUFXNU4sT0FBTztZQUN0QixPQUFPLE1BQU1wSixLQUFLd0IsR0FBRyxDQUEwQnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNvQyxPQUFPLENBQUN2QztRQUM1RTtRQUVBLE1BQU02TixZQUFXeE8sU0FBUyxFQUFFQyxTQUFTO1lBQ25DLE9BQU8sTUFBTTFJLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ2QsT0FBTyxDQUFDVSxXQUFXQztRQUNoRjtRQUVBLE1BQU13TyxhQUFZek8sU0FBUyxFQUFFaEosT0FBTztZQUNsQyxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQW1CeEIsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ3lGLFFBQVEsQ0FBQzdGLFdBQVdoSjtRQUNuRjtRQUVBLE1BQU0wWDtZQUNKLE9BQU8sTUFBTW5YLEtBQUt3QixHQUFHLENBQXVCeEIsS0FBS2dCLE1BQU0sQ0FBQ29XLFlBQVk7UUFDdEU7UUFFQSxNQUFNQyxnQ0FBK0J4WCxLQUFLO1lBQ3hDLE9BQU8sTUFBTUcsS0FBS3dCLEdBQUcsQ0FBaUJ4QixLQUFLZ0IsTUFBTSxDQUFDd0osWUFBWSxDQUFDd0MsU0FBUyxDQUFDeUIsUUFBUSxDQUFDek8sS0FBS04sYUFBYSxFQUFFRyxRQUFRO2dCQUFFb0QsY0FBYztZQUFLO1FBQ3JJO1FBRUEsTUFBTXFVLG1CQUFrQjdPLFNBQVM7WUFDL0IsT0FBTyxNQUFNekksS0FBS3dCLEdBQUcsQ0FBbUJ4QixLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDME8sSUFBSSxDQUFDOU87UUFDcEU7UUFFQSxNQUFNK08sMkJBQTBCL08sU0FBUyxFQUFFaEosT0FBTztZQUNoRCxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQTZCeEIsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ2MsT0FBTyxDQUFDOE4sT0FBTyxDQUFDaFAsV0FBV2hKO1FBQ3BHO1FBRUEsTUFBTWlZLGlDQUFnQ2pQLFNBQVMsRUFBRWhKLE9BQU87WUFDdEQsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUE2QnhCLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNjLE9BQU8sQ0FBQ2dPLE1BQU0sQ0FBQ2xQLFdBQVdoSjtRQUNuRztRQUVBLE1BQU1tWSxlQUFjeE8sT0FBTyxFQUFFM0osT0FBTztZQUNsQyxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQXFCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NPLEtBQUssQ0FBQ3pPLFNBQVMzSjtRQUM5RTtRQUVBLE1BQU1xWSwwQkFBeUJyUCxTQUFTLEVBQUVoSixPQUFPO1lBQy9DLE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBNkJ4QixLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDYyxPQUFPLENBQUNvTyxNQUFNLENBQUN0UCxXQUFXaEo7UUFDbkc7UUFFQSxNQUFNdVksVUFBUzVPLE9BQU87WUFDcEIsT0FBTyxNQUFNcEosS0FBS3dCLEdBQUcsQ0FBZ0J4QixLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDQyxLQUFLLENBQUNOLEdBQUcsQ0FBQ0U7UUFDcEU7UUFFQSxNQUFNNk8sbUJBQWtCN08sT0FBTyxFQUFFMkYsT0FBTyxFQUFFdFAsT0FBTztZQUMvQyxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQXdCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3VDLE1BQU0sQ0FBQ2tELEtBQUssQ0FBQzVGLFNBQVMyRixTQUFTdFAsU0FBU3lZO1FBQzFHO1FBRUEsTUFBTUMsb0JBQW1CL08sT0FBTyxFQUFFM0osT0FBTztZQUN2QyxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQTBCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3VDLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDMUMsU0FBUzNKLFNBQVN5WTtRQUNwRztRQUVBLE1BQU1FLHdCQUF1QmhQLE9BQU8sRUFBRTJGLE9BQU8sRUFBRXRQLE9BQU87WUFDcEQsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUF1RHhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUN1QyxNQUFNLENBQUN1TSxLQUFLLENBQUNqUCxTQUFTMkYsU0FBU3RQO1FBQ2hJO1FBRUEsTUFBTTZZO1lBQ0osT0FBTyxNQUFNdFksS0FBSzZWLGFBQWE7UUFDakM7UUFFQSxNQUFNMEMsa0JBQWlCOVAsU0FBUztZQUM5QixPQUFPLE1BQU16SSxLQUFLd0IsR0FBRyxDQUF1QnhCLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNxRyxLQUFLLENBQUN6RztRQUN6RTtRQUVBLE1BQU0rUCxZQUFXL0ssU0FBb0I7WUFDbkMsT0FBTyxNQUFNek4sS0FBS3dCLEdBQUcsQ0FBaUJ4QixLQUFLZ0IsTUFBTSxDQUFDME0sT0FBTyxDQUFDRDtRQUM1RDtRQUVBLE1BQU1nTCxpQkFBZ0JyUCxPQUFPLEVBQUVxRSxTQUFTO1lBQ3RDLE9BQU8sTUFBTXpOLEtBQUt3QixHQUFHLENBQWlCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ21FLE9BQU8sQ0FBQ3RFLFNBQVNxRTtRQUM1RTtRQUVBLE1BQU1pTCxrQkFBaUJ0UCxPQUFPO1lBQzVCLE9BQU8sTUFBTXBKLEtBQUt3QixHQUFHLENBQW1CeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQytCLFFBQVEsQ0FBQ2xDO1FBQ3RFO1FBRUEsTUFBTXVQLGlCQUFnQmxRLFNBQVMsRUFBRVksTUFBTTtZQUNyQyxPQUFPLE1BQU1ySixLQUFLd0IsR0FBRyxDQUFzQnhCLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNjLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDbkIsV0FBV1k7UUFDMUY7UUFFQSxNQUFNdVAsa0JBQWlCblEsU0FBUztZQUM5QixPQUFPLE1BQU16SSxLQUFLd0IsR0FBRyxDQUF3QnhCLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNjLE9BQU8sQ0FBQ2tMLE9BQU8sQ0FBQ3BNO1FBQ3BGO1FBRUEsTUFBTW9RLGNBQWFwUSxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxFQUFFbEosT0FBTztZQUN4RCxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQWdCeEIsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ0MsU0FBUyxDQUFDZixPQUFPLENBQUNVLFdBQVdDLFdBQVdDLFVBQVVsSjtRQUM5RztRQUVBLE1BQU1xWixTQUFRak0sRUFBRTtZQUNkLE9BQU8sTUFBTTdNLEtBQUt3QixHQUFHLENBQWN4QixLQUFLZ0IsTUFBTSxDQUFDNEksSUFBSSxDQUFDaUQ7UUFDdEQ7UUFFQSxNQUFNa00sZ0JBQWVsWixLQUFLO1lBQ3hCLE9BQU8sTUFBTUcsS0FBS3dCLEdBQUcsQ0FBY3hCLEtBQUtnQixNQUFNLENBQUNpUCxXQUFXLElBQUk7Z0JBQzVENU8sU0FBUztvQkFDUHBCLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE1BQU0sQ0FBQztnQkFDbEM7Z0JBQ0FvRCxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNK1Ysb0JBQW1CblosS0FBSztZQUM1QixPQUFPLE1BQU1HLEtBQUt3QixHQUFHLENBQXNCeEIsS0FBS2dCLE1BQU0sQ0FBQ3NTLE1BQU0sQ0FBQzJGLFdBQVcsSUFBSTtnQkFDM0U1WCxTQUFTO29CQUNQcEIsZUFBZSxDQUFDLE9BQU8sRUFBRUosTUFBTSxDQUFDO2dCQUNsQztnQkFDQW9ELGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU1pVyxrQ0FBaUNyWixLQUFLLEVBQUVILGFBQWE7WUFDekQsT0FBTyxNQUFNTSxLQUFLd0IsR0FBRyxDQUFtQ3hCLEtBQUtnQixNQUFNLENBQUNzUyxNQUFNLENBQUM2RixlQUFlLENBQUN6WixnQkFBZ0I7Z0JBQ3pHMkIsU0FBUztvQkFDUHBCLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE1BQU0sQ0FBQztnQkFDbEM7Z0JBQ0FvRCxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNbVcsY0FBYWhRLE9BQU87WUFDeEIsT0FBTyxNQUFNcEosS0FBS3dCLEdBQUcsQ0FBbUJ4QixLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDOFAsTUFBTSxDQUFDalE7UUFDcEU7UUFFQSxNQUFNa1EsaUJBQWdCbFEsT0FBTztZQUMzQixPQUFPLE1BQU1wSixLQUFLd0IsR0FBRyxDQUF1QnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNvTCxPQUFPLENBQUN2TDtRQUN6RTtRQUVBLE1BQU1tUSxZQUFXbEssU0FBUztZQUN4QixPQUFPLE1BQU1yUCxLQUFLd0IsR0FBRyxDQUFpQnhCLEtBQUtnQixNQUFNLENBQUNrTCxRQUFRLENBQUNXLEVBQUUsQ0FBQ3dDO1FBQ2hFO1FBRUEsTUFBTW1LLG1CQUFrQm5LLFNBQVMsRUFBRXhQLEtBQUssRUFBRTZJLFNBQVMsRUFBRWpKLE9BQU87WUFDMUQsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUFpQnhCLEtBQUtnQixNQUFNLENBQUNrTCxRQUFRLENBQUNuRSxPQUFPLENBQUNzSCxXQUFXeFAsT0FBTzZJLFdBQVdqSjtRQUNsRztRQUVBLE1BQU1nYSxxQkFBb0JwSyxTQUFTLEVBQUV4UCxLQUFLO1lBQ3hDLE9BQU8sTUFBTUcsS0FBS3dCLEdBQUcsQ0FBaUJ4QixLQUFLZ0IsTUFBTSxDQUFDa0wsUUFBUSxDQUFDc0QsT0FBTyxDQUFDSCxXQUFXeFA7UUFDaEY7UUFFQSxNQUFNNlosa0JBQWlCdFEsT0FBTztZQUM1QixPQUFPLE1BQU1wSixLQUFLd0IsR0FBRyxDQUF1QnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNnSixPQUFPLENBQUNuSjtRQUN6RTtRQUVBLE1BQU11USxXQUFVdlEsT0FBTztZQUNyQixPQUFPLE1BQU1wSixLQUFLd0IsR0FBRyxDQUFxQnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNxUSxVQUFVLENBQUN4UTtRQUMxRTtRQUVBLE1BQU15USxtQkFBa0J6USxPQUFPO1lBQzdCLE9BQU8sTUFBTXBKLEtBQUt3QixHQUFHLENBQTZCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ2tKLE1BQU0sQ0FBQ3JKO1FBQzlFO1FBRUEsTUFBTTBRLFlBQVdyUixTQUFTO1lBQ3hCLE1BQU16SSxLQUFLdUksR0FBRyxDQUFDdkksS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ2MsT0FBTyxDQUFDb1EsRUFBRSxDQUFDdFI7UUFDakQ7UUFFQSxNQUFNdVIsWUFBVzVRLE9BQU87WUFDdEIsTUFBTXBKLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDMFEsS0FBSyxDQUFDN1E7UUFDN0M7UUFFQSxNQUFNOFEsYUFBWXpSLFNBQVM7WUFDekIsTUFBTXpJLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDYyxPQUFPLENBQUNvUSxFQUFFLENBQUN0UjtRQUNwRDtRQUVBLE1BQU0wUixnQkFBZTFSLFNBQVMsRUFBRUMsU0FBUztZQUN2QyxPQUFPLE1BQU0xSSxLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUN1UixTQUFTLENBQUMzUixXQUFXQztRQUNuRjtRQUVBLE1BQU0yUixZQUFXalIsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRXBHLE1BQU07WUFDOUMsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0wsU0FBU0MsUUFBUUMsU0FBUztnQkFBRXBHO1lBQU87UUFDdkY7UUFFQSxNQUFNb1gsb0JBQW1CN1IsU0FBUyxFQUFFWSxNQUFNO1lBQ3hDLE1BQU1ySixLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ2MsT0FBTyxDQUFDQyxJQUFJLENBQUNuQixXQUFXWTtRQUNqRTtRQUVBLE1BQU1rUixtQkFBa0I5UixTQUFTLEVBQUVZLE1BQU07WUFDdkMsTUFBTXJKLEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDaUIsV0FBVyxDQUFDckIsV0FBV1k7UUFDaEU7UUFFQSxNQUFNbVIscUJBQW9CM2EsS0FBSyxFQUFFSixPQUFPO1lBQ3RDLE9BQU8sTUFBTU8sS0FBS3FJLElBQUksQ0FBQ3JJLEtBQUtnQixNQUFNLENBQUNrTCxRQUFRLENBQUNzRCxPQUFPLENBQUN4UCxLQUFLTixhQUFhLEVBQUVHLFFBQVE7Z0JBQzlFdUQsTUFBTTNEO2dCQUNONEQsT0FBTzVELFFBQVE0RCxLQUFLO2dCQUNwQkosY0FBYztZQUNoQjtRQUNGO1FBRUEsTUFBTXdYLHlCQUF3QkMsYUFBYSxFQUFFN2EsS0FBSyxFQUFFSixPQUFPO1lBQ3pELE9BQU8sTUFBTU8sS0FBS3FJLElBQUksQ0FBQ3JJLEtBQUtnQixNQUFNLENBQUN3SixZQUFZLENBQUN3QyxTQUFTLENBQUMyTixRQUFRLENBQUNELGVBQWU3YSxRQUFRO2dCQUN4RnVELE1BQU0zRDtnQkFDTjRELE9BQU81RCxRQUFRd0ksSUFBSSxFQUFFNUU7Z0JBQ3JCZ0UsaUJBQWlCO2dCQUNqQnBFLGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU0yWCxhQUFZblMsU0FBUyxFQUFFckYsSUFBSTtZQUMvQixPQUFPLE1BQU1wRCxLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUN5RixRQUFRLENBQUM3RixZQUFZO2dCQUFFckY7Z0JBQU1DLE9BQU9ELEtBQUtDLEtBQUs7WUFBQztRQUM3RztRQUVBLE1BQU13WCx3QkFBdUJwUyxTQUFTLEVBQUVDLFNBQVMsRUFBRXRGLElBQUksRUFBRUYsTUFBTTtZQUM3RCxPQUFPLE1BQU1sRCxLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNjLE9BQU8sQ0FBQzVCLE9BQU8sQ0FBQ1UsV0FBV0MsWUFBWTtnQkFBRXRGO2dCQUFNRjtZQUFPO1FBQ3BIO1FBRUEsTUFBTTRYLDJCQUEwQnJTLFNBQVMsRUFBRXJGLElBQUksRUFBRUYsTUFBTTtZQUNyRCxPQUFPLE1BQU1sRCxLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNjLE9BQU8sQ0FBQ1QsR0FBRyxDQUFDVCxZQUFZO2dCQUFFckY7Z0JBQU1GO1lBQU87UUFDckc7UUFFQSxNQUFNNlgscUJBQW9CdFMsU0FBUyxFQUFFQyxTQUFTLEVBQUVzUyxRQUFRLEVBQUV2YixPQUFPO1lBQy9ELE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBZ0N4QixLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDb1MsS0FBSyxDQUFDQyxLQUFLLENBQUN6UyxXQUFXQyxXQUFXc1MsVUFBVXZiO1FBQ3hIO1FBRUEsTUFBTTBiLFNBQVExUyxTQUFTLEVBQUVDLFNBQVM7WUFDaEMsT0FBTyxNQUFNMUksS0FBS3FJLElBQUksQ0FBaUJySSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDb1MsS0FBSyxDQUFDRyxNQUFNLENBQUMzUyxXQUFXQztRQUN0RjtRQUVBLE1BQU0yUyxtQkFBa0JqUyxPQUFPO1lBQzdCLE9BQU8sTUFBTXBKLEtBQUt1SSxHQUFHLENBQWtCdkksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3lCLFNBQVMsQ0FBQzlCLEdBQUcsQ0FBQ0U7UUFDMUU7UUFFQSxNQUFNa1MsV0FBVWxTLE9BQU8sRUFBRUMsTUFBTSxFQUFFakcsSUFBSSxFQUFFRixNQUFNO1lBQzNDLE1BQU1sRCxLQUFLdUksR0FBRyxDQUFPdkksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDMUwsU0FBU0MsU0FBUztnQkFBRWpHO2dCQUFNRjtZQUFPO1FBQ3ZGO1FBRUEsTUFBTXFZLGdCQUFlblMsT0FBTyxFQUFFM0osT0FBTyxFQUFFeUQsTUFBTTtZQUMzQyxPQUFPLE1BQU1sRCxLQUFLcUksSUFBSSxDQUFpQnJJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNzTCxPQUFPLENBQUMyRyxPQUFPLENBQUNwUyxVQUFVO2dCQUFFaEcsTUFBTTNEO2dCQUFTeUQ7WUFBTztRQUM5RztRQUVBLE1BQU11WSxlQUFjclMsT0FBTyxFQUFFaEcsSUFBSSxFQUFFRixNQUFNO1lBQ3ZDLE9BQU8sTUFBTWxELEtBQUtzSSxLQUFLLENBQWdCdEksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQzlMLEdBQUcsQ0FBQ0ssVUFBVTtnQkFBRWhHO2dCQUFNRjtZQUFPO1FBQ2pHO1FBRUEsTUFBTXdZLFlBQVd0UyxPQUFPLEVBQUVDLE1BQU0sRUFBRWpHLElBQUksRUFBRUYsTUFBTTtZQUM1QyxPQUFPLE1BQU1sRCxLQUFLc0ksS0FBSyxDQUF3QnRJLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNzTCxPQUFPLENBQUNwTCxNQUFNLENBQUNMLFNBQVNDLFNBQVM7Z0JBQUVqRztnQkFBTUY7WUFBTztRQUNwSDtRQUVBLE1BQU15WSxXQUFVdlMsT0FBTyxFQUFFQyxNQUFNO1lBQzdCLE9BQU8sTUFBTXJKLEtBQUt3QixHQUFHLENBQXdCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ3BMLE1BQU0sQ0FBQ0wsU0FBU0M7UUFDMUY7UUFFQSxNQUFNdVMsa0JBQWlCeFMsT0FBTyxFQUFFdkosS0FBSztZQUNuQyxPQUFPLE1BQU1HLEtBQUt3QixHQUFHLENBQXdCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ2dILGFBQWEsQ0FBQ3pTLFVBQVU7Z0JBQzlGL0gsU0FBUztvQkFDUHBCLGVBQWUsQ0FBQyxPQUFPLEVBQUVKLE1BQU0sQ0FBQztnQkFDbEM7Z0JBQ0FvRCxjQUFjO1lBQ2hCO1FBQ0Y7UUFFQSxNQUFNNlksWUFBVzFTLE9BQU8sRUFBRTNKLE9BQU87WUFDL0IsT0FBTyxNQUFNTyxLQUFLd0IsR0FBRyxDQUEwQnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNzTCxPQUFPLENBQUNBLE9BQU8sQ0FBQ3pMLFNBQVMzSjtRQUM3RjtRQUVBLE1BQU1zYyxZQUFXM1MsT0FBTyxFQUFFQyxNQUFNLEVBQUVuRyxNQUFNO1lBQ3RDLE1BQU1sRCxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ3BMLE1BQU0sQ0FBQ0wsU0FBU0MsU0FBUztnQkFDcEVuRztZQUNGO1FBQ0Y7UUFFQSxNQUFNOFksWUFBV3ZULFNBQVMsRUFBRUMsU0FBUyxFQUFFeEYsTUFBTTtZQUMzQyxNQUFNbEQsS0FBS3VJLEdBQUcsQ0FBQ3ZJLEtBQUtnQixNQUFNLENBQUM2SCxRQUFRLENBQUNvVCxHQUFHLENBQUN4VCxXQUFXQyxZQUFZO2dCQUFFeEY7WUFBTztRQUMxRTtRQUVBLE1BQU1nWixjQUFhOVMsT0FBTyxFQUFFaEcsSUFBSSxFQUFFRixNQUFNO1lBQ3RDLE9BQU8sTUFBTWxELEtBQUtxSSxJQUFJLENBQTRCckksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ2dELEtBQUssQ0FBQ3pPLFVBQVU7Z0JBQUVoRztnQkFBTUY7WUFBTztRQUM5RztRQUVBLE1BQU1pWixlQUFjL1MsT0FBTyxFQUFFZ1QsS0FBSyxFQUFFM2MsT0FBTztZQUN6QyxPQUFPLE1BQU1PLEtBQUt3QixHQUFHLENBQTBCeEIsS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ3dILE1BQU0sQ0FBQ2pULFNBQVNnVCxPQUFPM2M7UUFDbkc7UUFFQSxNQUFNNmMsb0JBQW1CbFQsT0FBTztZQUM5QixPQUFPLE1BQU1wSixLQUFLd0IsR0FBRyxDQUF5QnhCLEtBQUtnQixNQUFNLENBQUN1SSxNQUFNLENBQUNnVCxVQUFVLENBQUNuVDtRQUM5RTtRQUVBLE1BQU1vVCxxQkFBb0JwVCxPQUFPLEVBQUUzSixPQUFPLEVBQUV5RCxNQUFNO1lBQ2hELE9BQU8sTUFBTWxELEtBQUt1SSxHQUFHLENBQXlCdkksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ2dULFVBQVUsQ0FBQ25ULFVBQVU7Z0JBQ3BGaEcsTUFBTTNEO2dCQUNOeUQ7WUFDRjtRQUNGO1FBRUEsTUFBTXVaLGFBQVlyVCxPQUFPLEVBQUVDLE1BQU0sRUFBRW5HLE1BQU07WUFDdkMsTUFBTWxELEtBQUt1RSxNQUFNLENBQUN2RSxLQUFLZ0IsTUFBTSxDQUFDdUksTUFBTSxDQUFDc0wsT0FBTyxDQUFDQyxHQUFHLENBQUMxTCxTQUFTQyxTQUFTO2dCQUFFbkc7WUFBTztRQUM5RTtRQUVBLE1BQU13WixjQUFhalUsU0FBUyxFQUFFQyxTQUFTLEVBQUV4RixNQUFNO1lBQzdDLE1BQU1sRCxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQzZILFFBQVEsQ0FBQ29ULEdBQUcsQ0FBQ3hULFdBQVdDLFlBQVk7Z0JBQUV4RjtZQUFPO1FBQzdFO1FBRUEsTUFBTXlaLHdCQUF1QmxVLFNBQVM7WUFDcEMsTUFBTXpJLEtBQUtxSSxJQUFJLENBQUNySSxLQUFLZ0IsTUFBTSxDQUFDNkgsUUFBUSxDQUFDK1QsTUFBTSxDQUFDblU7UUFDOUM7UUFFQSxNQUFNb1UsaUNBQWdDelosSUFBSSxFQUFFM0QsT0FBTztZQUNqRCxNQUFNNkssY0FBa0M7Z0JBQUVsSDtZQUFLO1lBRS9DLElBQUkzRCxTQUFTOEssYUFBYTtnQkFDeEJELFlBQVlySCxZQUFZLEdBQUc7Z0JBQzNCcUgsWUFBWWpKLE9BQU8sR0FBRztvQkFDcEJwQixlQUFlLENBQUMsT0FBTyxFQUFFUixRQUFROEssV0FBVyxDQUFDLENBQUM7Z0JBQ2hEO1lBQ0Y7WUFFQSxPQUFPLE1BQU12SyxLQUFLdUksR0FBRyxDQUE4QnZJLEtBQUtnQixNQUFNLENBQUN3SixZQUFZLENBQUNDLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDekssS0FBS04sYUFBYSxHQUFHNEs7UUFDckg7UUFFQSxNQUFNd1MsZ0NBQStCMVQsT0FBTyxFQUFFaEcsSUFBSSxFQUFFM0QsT0FBTztZQUN6RCxNQUFNNkssY0FBa0M7Z0JBQUVsSDtZQUFLO1lBRS9DLElBQUkzRCxTQUFTOEssYUFBYTtnQkFDeEJELFlBQVlySCxZQUFZLEdBQUc7Z0JBQzNCcUgsWUFBWWpKLE9BQU8sR0FBRztvQkFDcEJwQixlQUFlLENBQUMsT0FBTyxFQUFFUixRQUFROEssV0FBVyxDQUFDLENBQUM7Z0JBQ2hEO1lBQ0Y7WUFFQSxPQUFPLE1BQU12SyxLQUFLdUksR0FBRyxDQUE4QnZJLEtBQUtnQixNQUFNLENBQUN3SixZQUFZLENBQUNDLFFBQVEsQ0FBQ2xCLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDbEosS0FBS04sYUFBYSxFQUFFMEosVUFBVWtCO1FBQ2hJO1FBRUEsTUFBTXlTLG1DQUFrQ2xkLEtBQUssRUFBRUgsYUFBYSxFQUFFMEQsSUFBSTtZQUNoRSxPQUFPLE1BQU1wRCxLQUFLdUksR0FBRyxDQUFtQ3ZJLEtBQUtnQixNQUFNLENBQUNzUyxNQUFNLENBQUM2RixlQUFlLENBQUN6WixnQkFBZ0I7Z0JBQ3pHMEQ7Z0JBQ0EvQixTQUFTO29CQUNQcEIsZUFBZSxDQUFDLE9BQU8sRUFBRUosTUFBTSxDQUFDO2dCQUNsQztnQkFDQW9ELGNBQWM7WUFDaEI7UUFDRjtRQUVBLE1BQU0rWixnQkFBZTVULE9BQU8sRUFBRUMsTUFBTSxFQUFFakcsSUFBSTtZQUN4QyxPQUFPLE1BQU1wRCxLQUFLdUksR0FBRyxDQUFDdkksS0FBS2dCLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQ3NMLE9BQU8sQ0FBQ3BMLE1BQU0sQ0FBQ0wsU0FBU0MsU0FBUztnQkFDeEVqRztZQUNGO1FBQ0Y7UUFFQSxNQUFNNlosdUJBQXNCdmQsYUFBYSxFQUFFMEQsSUFBSTtZQUM3QyxPQUFPLE1BQU1wRCxLQUFLcUksSUFBSSxDQUFxQnJJLEtBQUtnQixNQUFNLENBQUNrYyxZQUFZLENBQUNDLFlBQVksQ0FBQ3pkLGdCQUFnQjtnQkFDL0YwRDtZQUNGO1FBQ0Y7UUFFQSxNQUFNZ2Esa0JBQWlCMWQsYUFBYSxFQUFFRCxPQUFPO1lBQzNDLE9BQU8sTUFBTU8sS0FBS3dCLEdBQUcsQ0FBdUJ4QixLQUFLZ0IsTUFBTSxDQUFDa2MsWUFBWSxDQUFDQyxZQUFZLENBQUN6ZCxlQUFlRDtRQUNuRztRQUVBLE1BQU00ZCx1QkFBc0IzZCxhQUFhLEVBQUU0ZCxhQUFhO1lBQ3RELE1BQU10ZCxLQUFLdUUsTUFBTSxDQUFDdkUsS0FBS2dCLE1BQU0sQ0FBQ2tjLFlBQVksQ0FBQ0ssV0FBVyxDQUFDN2QsZUFBZTRkO1FBQ3hFO1FBRUEsTUFBTUUsb0JBQW1COWQsYUFBYSxFQUFFNGQsYUFBYTtZQUNuRCxNQUFNdGQsS0FBS3FJLElBQUksQ0FBQ3JJLEtBQUtnQixNQUFNLENBQUNrYyxZQUFZLENBQUNNLGtCQUFrQixDQUFDOWQsZUFBZTRkO1FBQzdFO1FBRUEsTUFBTUcsVUFBUy9kLGFBQWE7WUFDMUIsT0FBTyxNQUFNTSxLQUFLd0IsR0FBRyxDQUFleEIsS0FBS2dCLE1BQU0sQ0FBQ2tjLFlBQVksQ0FBQ1EsSUFBSSxDQUFDaGU7UUFDcEU7UUFFQWllLGlCQUFnQkMsT0FBZ0I7WUFDOUIsTUFBTUMsWUFBWUQsVUFBVSxDQUFDRSxJQUFXQSxJQUFJMVYsZUFBUTtZQUVwRHBJLEtBQUt3QixHQUFHLEdBQUcsT0FBT0osS0FBSzNCO2dCQUNyQixPQUFPb2UsVUFBVSxNQUFNN2QsS0FBS3VILFdBQVcsQ0FBQyxPQUFPbkcsS0FBSzNCO1lBQ3REO1lBRUFPLEtBQUtxSSxJQUFJLEdBQUcsT0FBT2pILEtBQWEzQjtnQkFDOUIsT0FBT29lLFVBQVUsTUFBTTdkLEtBQUt1SCxXQUFXLENBQUMsUUFBUW5HLEtBQUszQjtZQUN2RDtZQUVBTyxLQUFLdUUsTUFBTSxHQUFHLE9BQU9uRCxLQUFhM0I7Z0JBQ2hDb2UsVUFBVSxNQUFNN2QsS0FBS3VILFdBQVcsQ0FBQyxVQUFVbkcsS0FBSzNCO1lBQ2xEO1lBRUFPLEtBQUtzSSxLQUFLLEdBQUcsT0FBT2xILEtBQWEzQjtnQkFDL0IsT0FBT29lLFVBQVUsTUFBTTdkLEtBQUt1SCxXQUFXLENBQUMsU0FBU25HLEtBQUszQjtZQUN4RDtZQUVBTyxLQUFLdUksR0FBRyxHQUFHLE9BQU9uSCxLQUFhM0I7Z0JBQzdCLE9BQU9vZSxVQUFVLE1BQU03ZCxLQUFLdUgsV0FBVyxDQUFDLE9BQU9uRyxLQUFLM0I7WUFDdEQ7WUFFQSxPQUFPTztRQUNUO0lBQ0Y7SUFFQSxPQUFPQTtBQUNUOztVQUVLK2Q7SUFDSCx3RUFBd0U7SUFFeEUsd0VBQXdFO0lBRXhFLDRFQUE0RTtJQUU1RSxtQ0FBbUM7R0FQaENBLHFCQUFBQSJ9
1446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnQgKi9cbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuXG5pbXBvcnQgeyBjYWxjdWxhdGVCaXRzLCBjYW1lbGl6ZSwgY2FtZWxUb1NuYWtlQ2FzZSwgZGVsYXksIGdldEJvdElkRnJvbVRva2VuLCBsb2dnZXIsIHByb2Nlc3NSZWFjdGlvblN0cmluZywgdXJsVG9CYXNlNjQgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcblxuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5cbmltcG9ydCB7XG4gIEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyxcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBhcnRpYWxHdWlsZCxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXIsXG4gIHR5cGUgRGlzY29yZFN0aWNrZXJQYWNrLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHt2ZXJzaW9ufSlgLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGVja1JhdGVMaW1pdHModXJsLCByZXF1ZXN0QXV0aG9yaXphdGlvbikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke3JlcXVlc3RBdXRob3JpemF0aW9ufSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0F1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5yZXF1ZXN0QXV0aG9yaXphdGlvbiA9IG5ld0F1dGhvcml6YXRpb25cblxuICAgICAgICBjb25zdCBuZXdLZXkgPSBgJHtuZXdBdXRob3JpemF0aW9ufSR7cXVldWUudXJsfWBcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KVxuXG4gICAgICAgIC8vIE1lcmdlIHRoZSBxdWV1ZXNcbiAgICAgICAgaWYgKG5ld1F1ZXVlKSB7XG4gICAgICAgICAgbmV3UXVldWUud2FpdGluZy51bnNoaWZ0KC4uLnF1ZXVlLndhaXRpbmcpXG4gICAgICAgICAgbmV3UXVldWUucGVuZGluZy51bnNoaWZ0KC4uLnF1ZXVlLnBlbmRpbmcpXG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW11cbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gW11cblxuICAgICAgICAgIHF1ZXVlLmNsZWFudXAoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgcmF0ZWxpbWl0UGF0aF0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0F1dGhvcml6YXRpb259JHtyYXRlbGltaXRQYXRoLnVybH1gLCByYXRlbGltaXRQYXRoKVxuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdBdXRob3JpemF0aW9ufSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuXG4gICAgICAgICAgLy8gU29tZSBmYWxzeSB2YWx1ZXMgc2hvdWxkIGJlIGFsbG93ZWQgbGlrZSBudWxsIG9yIDBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICBjYXNlICdhbGxvdyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnknOlxuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0TWVtYmVyUGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnbmFtZUxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5uYW1lX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZUJhc2VIZWFkZXJzKClcblxuICAgICAgaWYgKG9wdGlvbnM/LnVuYXV0aG9yaXplZCAhPT0gdHJ1ZSkgaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbilcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIHNwZWNpZmljIGNoZWNrIGZvciBHRVQgbWV0aG9kXG4gICAgICAvLyBTaW5jZSBHRVQgZG9lcyBub3QgYWxsb3cgYm9kaWVzXG5cbiAgICAgIC8vIEhhdmUgdG8gY2hlY2sgZm9yIGF0dGFjaG1lbnRzIGZpcnN0LCBzaW5jZSBib2R5IHRoZW4gaGFzIHRvIGJlIHNlbmQgaW4gYSBkaWZmZXJlbnQgd2F5LlxuICAgICAgaWYgKG9wdGlvbnM/LmZpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlJHtpfWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGF2ZSB0byB1c2UgY2hhbmdlVG9EaXNjb3JkRm9ybWF0IG9yIGVsc2UgSlNPTi5zdHJpbmdpZnkgbWF5IHRocm93IGFuIGVycm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgQmlnSW50KHMpIGluIHRoZSBqc29uXG4gICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh7IC4uLm9wdGlvbnMuYm9keSwgZmlsZXM6IHVuZGVmaW5lZCB9KSkpXG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICBib2R5ID0gZm9ybVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIGNvbnN0IGRpc2NvcmRCb2R5ID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaXNjb3JkQm9keSkge1xuICAgICAgICAgIGZvcm1Cb2R5LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3ApfT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNjb3JkQm9keVtwcm9wXSl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJylcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgIGJvZHkgPSBvcHRpb25zLmJvZHlcbiAgICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpXG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBtZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzLCByZXF1ZXN0QXV0aG9yaXphdGlvbikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQoYCR7cmVxdWVzdEF1dGhvcml6YXRpb259JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtyZXF1ZXN0QXV0aG9yaXphdGlvbn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtyZXF1ZXN0QXV0aG9yaXphdGlvbn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKSkgKiAxMDAwXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXJcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCByZXRyeUFmdGVyKVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoJ2dsb2JhbCcsIHtcbiAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KHJlcXVlc3RBdXRob3JpemF0aW9uLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcbiAgICAgICAgLy8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgdG8gcHJldmVudCBtZW0gbGVha1xuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke2F1dGhvcml6YXRpb259JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgcmVxdWVzdEF1dGhvcml6YXRpb246IGF1dGhvcml6YXRpb24gfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHthdXRob3JpemF0aW9ufSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSAoYXdhaXQgcmVzdWx0Lmpzb24oKS5jYXRjaCgoKSA9PiB7fSkpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAvLyBMZWdhY3kgSGFuZGxpbmcgdG8gbm90IGJyZWFrIG9sZCBjb2RlIG9yIHdoZW4gYm9keSBpcyBtaXNzaW5nXG4gICAgICAgICAgaWYgKCFlcnI/LmJvZHkpIHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7ZXJyLm1lc3NhZ2UgPz8gcmVzdWx0LnN0YXR1c1RleHR9YClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgZXJyb3IuY2F1c2UgPSByZWFzb25cbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1blRocm91Z2hRdWV1ZTogb3B0aW9ucz8ucnVuVGhyb3VnaFF1ZXVlLFxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwYXRjaDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb25zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgIGlmICghb3JkZXJlZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByZWFjdGlvbnMubWFwKGFzeW5jIChyZWFjdGlvbikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVhY3Rpb24gb2YgcmVhY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZERtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUNoYW5uZWwoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUsIGJvZHkpIHtcbiAgICAgIGlmIChib2R5Lmljb24pIHtcbiAgICAgICAgYm9keS5pY29uID0gYXdhaXQgdXJsVG9CYXNlNjQoYm9keS5pY29uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgcGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTFxuICAgICAgY29uc3QgYmFubmVyID0gb3B0aW9ucz8uYm90QmFubmVyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QmFubmVyVVJMKSA6IG9wdGlvbnM/LmJvdEJhbm5lclVSTFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWU/LnRyaW0oKSxcbiAgICAgICAgICBhdmF0YXIsXG4gICAgICAgICAgYmFubmVyLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgYm9keS5pZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdF90b19zcGVha190aW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rX2NoYW5uZWxfaWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudF9pZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQYXJ0aWFsR3VpbGRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXIoc3RpY2tlcklkOiBCaWdTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuc3RpY2tlcihzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlcihpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudFVzZXIodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJDb25uZWN0aW9ucyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDb25uZWN0aW9uW10+KHJlc3Qucm91dGVzLm9hdXRoMi5jb25uZWN0aW9ucygpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbml0eVVybChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZhbml0eVVybD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZhbml0eShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Vm9pY2VSZWdpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJlZ2lvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZGF0YT8uZmlsZXMsXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWxsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBvbGxBbnN3ZXJWb3RlcnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLnZvdGVzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGVuZFBvbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLmV4cGlyZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHN5bmNHdWlsZFRlbXBsYXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBiYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0PHZvaWQ+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBidWxrQmFuTWVtYmVycyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEJ1bGtCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJ1bGtCYW4oZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50TWVtYmVyKGd1aWxkSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5jdXJyZW50TWVtYmVyKGd1aWxkSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5jb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsInZlcnNpb24iLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsImdldEJvdElkRnJvbVRva2VuIiwidG9rZW4iLCJiYXNlVXJsIiwicHJveHkiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsImxvZ2dlciIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJ1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50IiwibWF4UmV0cnlDb3VudCIsIkluZmluaXR5IiwicHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMiLCJxdWV1ZXMiLCJNYXAiLCJyYXRlTGltaXRlZFBhdGhzIiwicm91dGVzIiwiY3JlYXRlUm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJyZXF1ZXN0QXV0aG9yaXphdGlvbiIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwiRGF0ZSIsInJlc2V0VGltZXN0YW1wIiwidXBkYXRlVG9rZW5RdWV1ZXMiLCJvbGRUb2tlbiIsIm5ld1Rva2VuIiwiRXJyb3IiLCJoZWFkZXJzIiwidW5kZWZpbmVkIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5ld0F1dGhvcml6YXRpb24iLCJrZXkiLCJxdWV1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJuZXdLZXkiLCJuZXdRdWV1ZSIsIndhaXRpbmciLCJ1bnNoaWZ0IiwicGVuZGluZyIsImNsZWFudXAiLCJzZXQiLCJyYXRlbGltaXRQYXRoIiwiYnVja2V0SWQiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJ0ZXh0IiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsImFycmF5QnVmZmVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJyZXN1bHQiLCJlcnIiLCJqc29uIiwibWVzc2FnZSIsIlByb21pc2UiLCJkYXRhIiwicGFyc2UiLCJjYXVzZSIsImNhbWVsaXplIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJ1cmxUb0Jhc2U2NCIsInRlbXBsYXRlcyIsImNvZGUiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGQiLCJndWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibWZhIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RfdG9fc3BlYWtfdGltZXN0YW1wIiwicmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImVkaXRTY2hlZHVsZWRFdmVudCIsImVkaXRSb2xlIiwiZWRpdFJvbGVQb3NpdGlvbnMiLCJlZGl0U3RhZ2VJbnN0YW5jZSIsInRvcGljIiwiZWRpdFVzZXJWb2ljZVN0YXRlIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwid2VsY29tZSIsImVkaXRXaWRnZXRTZXR0aW5ncyIsIndpZGdldCIsImV4ZWN1dGVXZWJob29rIiwiZm9sbG93QW5ub3VuY2VtZW50Iiwic291cmNlQ2hhbm5lbElkIiwidGFyZ2V0Q2hhbm5lbElkIiwiZm9sbG93Iiwid2ViaG9va19jaGFubmVsX2lkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsIkJ1ZmZlciIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50X2lkIiwiZ2V0R3JvdXBEbUNoYW5uZWwiLCJnZXRFbW9qaSIsImVtb2ppSWQiLCJnZXRFbW9qaXMiLCJnZXRGb2xsb3d1cE1lc3NhZ2UiLCJnZXRHYXRld2F5Qm90IiwiZ2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0VXNlciIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsInBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEOzs7Ozs7Ozs7OztJQXFFM0NBLHVCQUF1QjtlQUF2QkE7O0lBRkFDLGVBQWU7ZUFBZkE7O0lBREFDLG1CQUFtQjtlQUFuQkE7O0lBT0FDLHdCQUF3QjtlQUF4QkE7O0lBREFDLHdCQUF3QjtlQUF4QkE7O0lBRUFDLHVCQUF1QjtlQUF2QkE7O0lBSkFDLDJCQUEyQjtlQUEzQkE7O0lBQ0FDLDZCQUE2QjtlQUE3QkE7O0lBSUFDLHVCQUF1QjtlQUF2QkE7O0lBRUdDLGlCQUFpQjtlQUFqQkE7Ozs0QkE1RU87dUJBRXlHOytCQUVyRjt1QkFDckI7dUJBcURmO3dCQUNzQjtBQUc3QixnREFBZ0Q7QUFDaEQsTUFBTUMsVUFBVTtBQUVULE1BQU1SLHNCQUFz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