@discordeno/rest 19.0.0-next.f9bdfce → 19.0.0-next.faaa8af

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.
@@ -1,8 +1,8 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-argument */ import { Buffer } from 'node:buffer';
2
- import { calculateBits, camelize, camelToSnakeCase, delay, getBotIdFromToken, logger, processReactionString, urlToBase64 } from '@discordeno/utils';
1
+ import { Buffer } from 'node:buffer';
2
+ import { InteractionResponseTypes } from '@discordeno/types';
3
+ import { calculateBits, camelToSnakeCase, camelize, delay, getBotIdFromToken, logger, processReactionString, urlToBase64 } from '@discordeno/utils';
3
4
  import { createInvalidRequestBucket } from './invalidBucket.js';
4
5
  import { Queue } from './queue.js';
5
- import { InteractionResponseTypes } from '@discordeno/types';
6
6
  import { createRoutes } from './routes.js';
7
7
  // TODO: make dynamic based on package.json file
8
8
  const version = '19.0.0-alpha.1';
@@ -43,8 +43,8 @@ export function createRestManager(options) {
43
43
  'user-agent': `DiscordBot (https://github.com/discordeno/discordeno, v${version})`
44
44
  };
45
45
  },
46
- checkRateLimits (url, requestAuthorization) {
47
- const ratelimited = rest.rateLimitedPaths.get(`${requestAuthorization}${url}`);
46
+ checkRateLimits (url, identifier) {
47
+ const ratelimited = rest.rateLimitedPaths.get(`${identifier}${url}`);
48
48
  const global = rest.rateLimitedPaths.get('global');
49
49
  const now = Date.now();
50
50
  if (ratelimited && now < ratelimited.resetTimestamp) {
@@ -76,13 +76,13 @@ export function createRestManager(options) {
76
76
  });
77
77
  return;
78
78
  }
79
- const newAuthorization = `Bearer ${newToken}`;
79
+ const newIdentifier = `Bearer ${newToken}`;
80
80
  // Update all the queues
81
81
  for (const [key, queue] of rest.queues.entries()){
82
82
  if (!key.startsWith(`Bearer ${oldToken}`)) continue;
83
83
  rest.queues.delete(key);
84
- queue.requestAuthorization = newAuthorization;
85
- const newKey = `${newAuthorization}${queue.url}`;
84
+ queue.identifier = newIdentifier;
85
+ const newKey = `${newIdentifier}${queue.url}`;
86
86
  const newQueue = rest.queues.get(newKey);
87
87
  // Merge the queues
88
88
  if (newQueue) {
@@ -97,9 +97,9 @@ export function createRestManager(options) {
97
97
  }
98
98
  for (const [key, ratelimitPath] of rest.rateLimitedPaths.entries()){
99
99
  if (!key.startsWith(`Bearer ${oldToken}`)) continue;
100
- rest.rateLimitedPaths.set(`${newAuthorization}${ratelimitPath.url}`, ratelimitPath);
100
+ rest.rateLimitedPaths.set(`${newIdentifier}${ratelimitPath.url}`, ratelimitPath);
101
101
  if (ratelimitPath.bucketId) {
102
- rest.rateLimitedPaths.set(`${newAuthorization}${ratelimitPath.bucketId}`, ratelimitPath);
102
+ rest.rateLimitedPaths.set(`${newIdentifier}${ratelimitPath.bucketId}`, ratelimitPath);
103
103
  }
104
104
  }
105
105
  },
@@ -215,7 +215,7 @@ export function createRestManager(options) {
215
215
  }, 1000);
216
216
  }
217
217
  },
218
- /** Processes the rate limit headers and determines if it needs to be rate limited and returns the bucket id if available */ processHeaders (url, headers, requestAuthorization) {
218
+ /** Processes the rate limit headers and determines if it needs to be rate limited and returns the bucket id if available */ processHeaders (url, headers, identifier) {
219
219
  let rateLimited = false;
220
220
  // GET ALL NECESSARY HEADERS
221
221
  const remaining = headers.get(RATE_LIMIT_REMAINING_HEADER);
@@ -225,7 +225,9 @@ export function createRestManager(options) {
225
225
  // undefined override null needed for typings
226
226
  const bucketId = headers.get(RATE_LIMIT_BUCKET_HEADER) ?? undefined;
227
227
  const limit = headers.get(RATE_LIMIT_LIMIT_HEADER);
228
- rest.queues.get(`${requestAuthorization}${url}`)?.handleCompletedRequest({
228
+ // If we didn't received the identifier, fallback to the bot token
229
+ identifier ??= `Bot ${rest.token}`;
230
+ rest.queues.get(`${identifier}${url}`)?.handleCompletedRequest({
229
231
  remaining: remaining ? Number(remaining) : undefined,
230
232
  interval: retryAfter ? Number(retryAfter) * 1000 : undefined,
231
233
  max: limit ? Number(limit) : undefined
@@ -234,14 +236,14 @@ export function createRestManager(options) {
234
236
  if (remaining === '0') {
235
237
  rateLimited = true;
236
238
  // SAVE THE URL AS LIMITED, IMPORTANT FOR NEW REQUESTS BY USER WITHOUT BUCKET
237
- rest.rateLimitedPaths.set(`${requestAuthorization}${url}`, {
239
+ rest.rateLimitedPaths.set(`${identifier}${url}`, {
238
240
  url,
239
241
  resetTimestamp: reset,
240
242
  bucketId
241
243
  });
242
244
  // SAVE THE BUCKET AS LIMITED SINCE DIFFERENT URLS MAY SHARE A BUCKET
243
245
  if (bucketId) {
244
- rest.rateLimitedPaths.set(`${requestAuthorization}${bucketId}`, {
246
+ rest.rateLimitedPaths.set(`${identifier}${bucketId}`, {
245
247
  url,
246
248
  resetTimestamp: reset,
247
249
  bucketId
@@ -266,7 +268,7 @@ export function createRestManager(options) {
266
268
  bucketId
267
269
  });
268
270
  if (bucketId) {
269
- rest.rateLimitedPaths.set(requestAuthorization, {
271
+ rest.rateLimitedPaths.set(identifier, {
270
272
  url: 'global',
271
273
  resetTimestamp: globalReset,
272
274
  bucketId
@@ -372,8 +374,10 @@ export function createRestManager(options) {
372
374
  await rest.sendRequest(request);
373
375
  return;
374
376
  }
375
- const authorization = request.requestBodyOptions?.headers?.authorization ?? `Bot ${rest.token}`;
376
- const queue = rest.queues.get(`${authorization}${url}`);
377
+ // If we the request has a token, use it
378
+ // Else fallback to prefix with the bot token
379
+ const queueIdentifier = request.requestBodyOptions?.headers?.authorization ?? `Bot ${rest.token}`;
380
+ const queue = rest.queues.get(`${queueIdentifier}${url}`);
377
381
  if (queue !== undefined) {
378
382
  queue.makeRequest(request);
379
383
  } else {
@@ -381,10 +385,10 @@ export function createRestManager(options) {
381
385
  const bucketQueue = new Queue(rest, {
382
386
  url,
383
387
  deleteQueueDelay: rest.deleteQueueDelay,
384
- requestAuthorization: authorization
388
+ identifier: queueIdentifier
385
389
  });
386
390
  // Save queue
387
- rest.queues.set(`${authorization}${url}`, bucketQueue);
391
+ rest.queues.set(`${queueIdentifier}${url}`, bucketQueue);
388
392
  // Add request to queue
389
393
  bucketQueue.makeRequest(request);
390
394
  }
@@ -408,7 +412,6 @@ export function createRestManager(options) {
408
412
  // This error needs to be created here because of how stack traces get calculated
409
413
  const error = new Error();
410
414
  error.message = 'Failed to send request to discord.';
411
- // eslint-disable-next-line no-async-promise-executor
412
415
  return await new Promise(async (resolve, reject)=>{
413
416
  const payload = {
414
417
  route,
@@ -491,6 +494,11 @@ export function createRestManager(options) {
491
494
  reason
492
495
  });
493
496
  },
497
+ async createApplicationEmoji (body) {
498
+ return await rest.post(rest.routes.applicationEmojis(rest.applicationId), {
499
+ body
500
+ });
501
+ },
494
502
  async createGlobalApplicationCommand (body, options) {
495
503
  const restOptions = {
496
504
  body
@@ -604,6 +612,9 @@ export function createRestManager(options) {
604
612
  reason
605
613
  });
606
614
  },
615
+ async deleteApplicationEmoji (id) {
616
+ await rest.delete(rest.routes.applicationEmoji(rest.applicationId, id));
617
+ },
607
618
  async deleteFollowupMessage (token, messageId) {
608
619
  await rest.delete(rest.routes.interactions.responses.message(rest.applicationId, token, messageId), {
609
620
  unauthorized: true
@@ -691,7 +702,9 @@ export function createRestManager(options) {
691
702
  await rest.delete(rest.routes.webhooks.message(webhookId, token, messageId, options));
692
703
  },
693
704
  async deleteWebhookWithToken (webhookId, token) {
694
- await rest.delete(rest.routes.webhooks.webhook(webhookId, token));
705
+ await rest.delete(rest.routes.webhooks.webhook(webhookId, token), {
706
+ unauthorized: true
707
+ });
695
708
  },
696
709
  async editApplicationCommandPermissions (guildId, commandId, bearerToken, permissions) {
697
710
  return await rest.put(rest.routes.interactions.commands.permission(rest.applicationId, guildId, commandId), {
@@ -743,6 +756,11 @@ export function createRestManager(options) {
743
756
  reason
744
757
  });
745
758
  },
759
+ async editApplicationEmoji (id, body) {
760
+ return await rest.patch(rest.routes.applicationEmoji(rest.applicationId, id), {
761
+ body
762
+ });
763
+ },
746
764
  async editFollowupMessage (token, messageId, body) {
747
765
  return await rest.patch(rest.routes.interactions.responses.message(rest.applicationId, token, messageId), {
748
766
  body,
@@ -855,12 +873,14 @@ export function createRestManager(options) {
855
873
  async editWebhookMessage (webhookId, token, messageId, options) {
856
874
  return await rest.patch(rest.routes.webhooks.message(webhookId, token, messageId, options), {
857
875
  body: options,
858
- files: options.files
876
+ files: options.files,
877
+ unauthorized: true
859
878
  });
860
879
  },
861
880
  async editWebhookWithToken (webhookId, token, body) {
862
881
  return await rest.patch(rest.routes.webhooks.webhook(webhookId, token), {
863
- body
882
+ body,
883
+ unauthorized: true
864
884
  });
865
885
  },
866
886
  async editWelcomeScreen (guildId, body, reason) {
@@ -877,7 +897,8 @@ export function createRestManager(options) {
877
897
  },
878
898
  async executeWebhook (webhookId, token, options) {
879
899
  return await rest.post(rest.routes.webhooks.webhook(webhookId, token, options), {
880
- body: options
900
+ body: options,
901
+ unauthorized: true
881
902
  });
882
903
  },
883
904
  async followAnnouncement (sourceChannelId, targetChannelId, reason) {
@@ -935,6 +956,7 @@ export function createRestManager(options) {
935
956
  'content-type': 'application/x-www-form-urlencoded',
936
957
  authorization: `Basic ${basicCredentials.toString('base64')}`
937
958
  },
959
+ runThroughQueue: false,
938
960
  unauthorized: true
939
961
  };
940
962
  if (body.grantType === 'client_credentials') {
@@ -998,9 +1020,15 @@ export function createRestManager(options) {
998
1020
  async getEmoji (guildId, emojiId) {
999
1021
  return await rest.get(rest.routes.guilds.emoji(guildId, emojiId));
1000
1022
  },
1023
+ async getApplicationEmoji (emojiId) {
1024
+ return await rest.get(rest.routes.applicationEmoji(rest.applicationId, emojiId));
1025
+ },
1001
1026
  async getEmojis (guildId) {
1002
1027
  return await rest.get(rest.routes.guilds.emojis(guildId));
1003
1028
  },
1029
+ async getApplicationEmojis () {
1030
+ return await rest.get(rest.routes.applicationEmojis(rest.applicationId));
1031
+ },
1004
1032
  async getFollowupMessage (token, messageId) {
1005
1033
  return await rest.get(rest.routes.interactions.responses.message(rest.applicationId, token, messageId), {
1006
1034
  unauthorized: true
@@ -1158,10 +1186,14 @@ export function createRestManager(options) {
1158
1186
  return await rest.get(rest.routes.webhooks.id(webhookId));
1159
1187
  },
1160
1188
  async getWebhookMessage (webhookId, token, messageId, options) {
1161
- return await rest.get(rest.routes.webhooks.message(webhookId, token, messageId, options));
1189
+ return await rest.get(rest.routes.webhooks.message(webhookId, token, messageId, options), {
1190
+ unauthorized: true
1191
+ });
1162
1192
  },
1163
1193
  async getWebhookWithToken (webhookId, token) {
1164
- return await rest.get(rest.routes.webhooks.webhook(webhookId, token));
1194
+ return await rest.get(rest.routes.webhooks.webhook(webhookId, token), {
1195
+ unauthorized: true
1196
+ });
1165
1197
  },
1166
1198
  async getWelcomeScreen (guildId) {
1167
1199
  return await rest.get(rest.routes.guilds.welcome(guildId));
@@ -1401,4 +1433,4 @@ var HttpResponseCode;
1401
1433
  /** This request got rate limited. */ HttpResponseCode[HttpResponseCode["TooManyRequests"] = 429] = "TooManyRequests";
1402
1434
  })(HttpResponseCode || (HttpResponseCode = {}));
1403
1435
 
1404
- //# 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+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJCdWZmZXIiLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxpemUiLCJjYW1lbFRvU25ha2VDYXNlIiwiZGVsYXkiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImxvZ2dlciIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsInVybFRvQmFzZTY0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJRdWV1ZSIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsImNyZWF0ZVJvdXRlcyIsInZlcnNpb24iLCJESVNDT1JEX0FQSV9WRVJTSU9OIiwiRElTQ09SRF9BUElfVVJMIiwiQVVESVRfTE9HX1JFQVNPTl9IRUFERVIiLCJSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIiLCJSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwidG9rZW4iLCJiYXNlVXJsIiwicHJveHkiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInJvdXRlcyIsImNyZWF0ZUJhc2VIZWFkZXJzIiwiY2hlY2tSYXRlTGltaXRzIiwidXJsIiwicmVxdWVzdEF1dGhvcml6YXRpb24iLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdBdXRob3JpemF0aW9uIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInRleHQiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsImFycmF5QnVmZmVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwicmVzdWx0IiwiZXJyIiwianNvbiIsIm1lc3NhZ2UiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiY2F1c2UiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsInRlbXBsYXRlcyIsImNvZGUiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGQiLCJndWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibWZhIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RfdG9fc3BlYWtfdGltZXN0YW1wIiwicmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImVkaXRTY2hlZHVsZWRFdmVudCIsImVkaXRSb2xlIiwiZWRpdFJvbGVQb3NpdGlvbnMiLCJlZGl0U3RhZ2VJbnN0YW5jZSIsInRvcGljIiwiZWRpdFVzZXJWb2ljZVN0YXRlIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwid2VsY29tZSIsImVkaXRXaWRnZXRTZXR0aW5ncyIsIndpZGdldCIsImV4ZWN1dGVXZWJob29rIiwiZm9sbG93QW5ub3VuY2VtZW50Iiwic291cmNlQ2hhbm5lbElkIiwidGFyZ2V0Q2hhbm5lbElkIiwiZm9sbG93Iiwid2ViaG9va19jaGFubmVsX2lkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50X2lkIiwiZ2V0R3JvdXBEbUNoYW5uZWwiLCJnZXRFbW9qaSIsImVtb2ppSWQiLCJnZXRFbW9qaXMiLCJnZXRGb2xsb3d1cE1lc3NhZ2UiLCJnZXRHYXRld2F5Qm90IiwiZ2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0VXNlciIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsInBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdELEdBQ3hELFNBQVNBLE1BQU0sUUFBUSxjQUFhO0FBRXBDLFNBQVNDLGFBQWEsRUFBRUMsUUFBUSxFQUFFQyxnQkFBZ0IsRUFBRUMsS0FBSyxFQUFFQyxpQkFBaUIsRUFBRUMsTUFBTSxFQUFFQyxxQkFBcUIsRUFBRUMsV0FBVyxRQUFRLG9CQUFtQjtBQUVuSixTQUFTQywwQkFBMEIsUUFBUSxxQkFBb0I7QUFDL0QsU0FBU0MsS0FBSyxRQUFRLGFBQVk7QUFFbEMsU0FDRUMsd0JBQXdCLFFBa0RuQixvQkFBbUI7QUFDMUIsU0FBU0MsWUFBWSxRQUFRLGNBQWE7QUFHMUMsZ0RBQWdEO0FBQ2hELE1BQU1DLFVBQVU7QUFFaEIsT0FBTyxNQUFNQyxzQkFB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
1436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW52aXRlLFxuICB0eXBlIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIHR5cGUgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIHR5cGUgRGlzY29yZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2UsXG4gIHR5cGUgRGlzY29yZFBydW5lZENvdW50LFxuICB0eXBlIERpc2NvcmRSb2xlLFxuICB0eXBlIERpc2NvcmRTY2hlZHVsZWRFdmVudCxcbiAgdHlwZSBEaXNjb3JkU2t1LFxuICB0eXBlIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICB0eXBlIERpc2NvcmRTdGlja2VyLFxuICB0eXBlIERpc2NvcmRTdGlja2VyUGFjayxcbiAgdHlwZSBEaXNjb3JkVGVtcGxhdGUsXG4gIHR5cGUgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkVXNlcixcbiAgdHlwZSBEaXNjb3JkVmFuaXR5VXJsLFxuICB0eXBlIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgdHlwZSBEaXNjb3JkV2ViaG9vayxcbiAgdHlwZSBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IGNhbGN1bGF0ZUJpdHMsIGNhbWVsVG9TbmFrZUNhc2UsIGNhbWVsaXplLCBkZWxheSwgZ2V0Qm90SWRGcm9tVG9rZW4sIGxvZ2dlciwgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLCB1cmxUb0Jhc2U2NCB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbi8vIFRPRE86IG1ha2UgZHluYW1pYyBiYXNlZCBvbiBwYWNrYWdlLmpzb24gZmlsZVxuY29uc3QgdmVyc2lvbiA9ICcxOS4wLjAtYWxwaGEuMSdcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGF1dGhvcml6YXRpb246IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb24sXG4gICAgYXV0aG9yaXphdGlvbkhlYWRlcjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbkhlYWRlciA/PyAnYXV0aG9yaXphdGlvbicsXG4gICAgYmFzZVVybCxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBpbnZhbGlkQnVja2V0OiBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCh7IGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgfSksXG4gICAgaXNQcm94aWVkOiAhYmFzZVVybC5zdGFydHNXaXRoKERJU0NPUkRfQVBJX1VSTCksXG4gICAgdXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludDogb3B0aW9ucy5wcm94eT8udXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyBESVNDT1JEX0FQSV9WRVJTSU9OLFxuICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIgPz8gbG9nZ2VyLFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7dmVyc2lvbn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcbiAgICAgICAgLy8gcHJvY2VzcyB0aGUgcmVzcG9uc2UgdG8gcHJldmVudCBtZW0gbGVha1xuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcHRpb25zID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG5cbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSAoYXdhaXQgcmVzdWx0Lmpzb24oKS5jYXRjaCgoKSA9PiB7fSkpIGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICAgICAvLyBMZWdhY3kgSGFuZGxpbmcgdG8gbm90IGJyZWFrIG9sZCBjb2RlIG9yIHdoZW4gYm9keSBpcyBtaXNzaW5nXG4gICAgICAgICAgaWYgKCFlcnI/LmJvZHkpIHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7ZXJyLm1lc3NhZ2UgPz8gcmVzdWx0LnN0YXR1c1RleHR9YClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IHJlYXNvblxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUsIGJvZHkpIHtcbiAgICAgIGlmIChib2R5Lmljb24pIHtcbiAgICAgICAgYm9keS5pY29uID0gYXdhaXQgdXJsVG9CYXNlNjQoYm9keS5pY29uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdF90b19zcGVha190aW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va19jaGFubmVsX2lkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRfaWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8UGFydGlhbDxEaXNjb3JkR3VpbGQ+W10+KHJlc3Qucm91dGVzLmd1aWxkcy51c2VyR3VpbGRzKG9wdGlvbnMpLCBtYWtlUmVxdWVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsImNhbGN1bGF0ZUJpdHMiLCJjYW1lbFRvU25ha2VDYXNlIiwiY2FtZWxpemUiLCJkZWxheSIsImdldEJvdElkRnJvbVRva2VuIiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUm91dGVzIiwidmVyc2lvbiIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJESVNDT1JEX0FQSV9VUkwiLCJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSIiwiUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSIiwiUkFURV9MSU1JVF9MSU1JVF9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJ1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50IiwibWF4UmV0cnlDb3VudCIsIkluZmluaXR5IiwicHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMiLCJxdWV1ZXMiLCJNYXAiLCJyYXRlTGltaXRlZFBhdGhzIiwicm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJ0ZXh0IiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJhcnJheUJ1ZmZlciIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsInJlc3VsdCIsImVyciIsImpzb24iLCJtZXNzYWdlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImNhdXNlIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGQiLCJndWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZE1mYUxldmVsIiwibWZhTGV2ZWwiLCJtZmEiLCJsZXZlbCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlIiwidHlwZSIsIlVwZGF0ZU1lc3NhZ2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsInZvaWNlIiwicmVxdWVzdF90b19zcGVha190aW1lc3RhbXAiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rX2NoYW5uZWxfaWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRfaWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEFwcGxpY2F0aW9uRW1vamkiLCJnZXRFbW9qaXMiLCJnZXRBcHBsaWNhdGlvbkVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRVc2VyIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ0eXBpbmciLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwiYWRkR3VpbGRNZW1iZXIiLCJjcmVhdGVUZXN0RW50aXRsZW1lbnQiLCJtb25ldGl6YXRpb24iLCJlbnRpdGxlbWVudHMiLCJsaXN0RW50aXRsZW1lbnRzIiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUFNLFFBQVEsY0FBYTtBQUNwQyxTQStDRUMsd0JBQXdCLFFBR25CLG9CQUFt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