@discordeno/gateway 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,4 +1,4 @@
1
- /* eslint-disable @typescript-eslint/no-confusing-void-expression */ "use strict";
1
+ "use strict";
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
@@ -67,20 +67,20 @@ function createGatewayManager(options) {
67
67
  throw new Error('[Resharding] was enabled but no getSessionInfo handler was provided. Please set a handler like: gateway.resharding.getSessionInfo = async () => { // insert code here to fetch getSessionInfo from rest process. }');
68
68
  },
69
69
  async checkIfReshardingIsNeeded () {
70
- _utils.logger.warn(`[Resharding] Checking if resharding is needed.`);
70
+ gateway.logger.warn(`[Resharding] Checking if resharding is needed.`);
71
71
  // Resharding is disabled.
72
72
  if (!gateway.resharding.enabled) return {
73
73
  needed: false
74
74
  };
75
- _utils.logger.warn(`[Resharding] Resharding is enabled.`);
75
+ gateway.logger.warn(`[Resharding] Resharding is enabled.`);
76
76
  const sessionInfo = await gateway.resharding.getSessionInfo();
77
- _utils.logger.warn(`[Resharding] Session info retrieved.`);
77
+ gateway.logger.warn(`[Resharding] Session info retrieved.`);
78
78
  // Don't have enough identify limits to try resharding
79
79
  if (sessionInfo.sessionStartLimit.remaining < sessionInfo.shards) return {
80
80
  needed: false,
81
81
  info: sessionInfo
82
82
  };
83
- _utils.logger.warn(`[Resharding] Able to reshard, checking whether necessary now.`);
83
+ gateway.logger.warn(`[Resharding] Able to reshard, checking whether necessary now.`);
84
84
  // 2500 is the max amount of guilds a single shard can handle
85
85
  // 1000 is the amount of guilds discord uses to determine how many shards to recommend.
86
86
  // This algo helps check if your bot has grown enough to reshard.
@@ -90,14 +90,14 @@ function createGatewayManager(options) {
90
90
  needed: false,
91
91
  info: sessionInfo
92
92
  };
93
- _utils.logger.warn(`[Resharding] Resharding is needed.`);
93
+ gateway.logger.warn(`[Resharding] Resharding is needed.`);
94
94
  return {
95
95
  needed: true,
96
96
  info: sessionInfo
97
97
  };
98
98
  },
99
99
  async reshard (info) {
100
- _utils.logger.warn(`[Resharding] Starting the reshard process. Previous total shards. ${gateway.totalShards}`);
100
+ gateway.logger.warn(`[Resharding] Starting the reshard process. Previous total shards. ${gateway.totalShards}`);
101
101
  // Set values on gateway
102
102
  gateway.totalShards = info.shards;
103
103
  // Handles preparing mid sized bots for LBS
@@ -106,7 +106,7 @@ function createGatewayManager(options) {
106
106
  if (typeof info.firstShardId === 'number') gateway.firstShardId = info.firstShardId;
107
107
  // Set last shard id if provided in info
108
108
  if (typeof info.lastShardId === 'number') gateway.lastShardId = info.lastShardId;
109
- _utils.logger.warn(`[Resharding] Starting the reshard process. New Total Shards. ${gateway.totalShards}`);
109
+ gateway.logger.warn(`[Resharding] Starting the reshard process. New Total Shards. ${gateway.totalShards}`);
110
110
  // Resetting buckets
111
111
  gateway.buckets.clear();
112
112
  // Refilling buckets with new values
@@ -121,7 +121,7 @@ function createGatewayManager(options) {
121
121
  });
122
122
  },
123
123
  async tellWorkerToPrepare (workerId, shardId, bucketId) {
124
- _utils.logger.warn(`[Resharding] Telling worker to prepare. Worker: ${workerId} | Shard: ${shardId} | Bucket: ${bucketId}`);
124
+ gateway.logger.warn(`[Resharding] Telling worker to prepare. Worker: ${workerId} | Shard: ${shardId} | Bucket: ${bucketId}`);
125
125
  const shard = new _Shard.default({
126
126
  id: shardId,
127
127
  connection: {
@@ -145,9 +145,9 @@ function createGatewayManager(options) {
145
145
  await gateway.identify(shardId);
146
146
  },
147
147
  shardIsReady: async ()=>{
148
- _utils.logger.debug(`[Shard] Shard #${shardId} is ready`);
148
+ gateway.logger.debug(`[Shard] Shard #${shardId} is ready`);
149
149
  await (0, _utils.delay)(gateway.spawnShardDelay);
150
- _utils.logger.debug(`[Shard] Resolving shard identify request`);
150
+ gateway.logger.debug(`[Shard] Resolving shard identify request`);
151
151
  gateway.buckets.get(shardId % gateway.connection.sessionStartLimit.maxConcurrency).identifyRequests.shift()?.();
152
152
  }
153
153
  });
@@ -162,7 +162,7 @@ function createGatewayManager(options) {
162
162
  return await new Promise((resolve)=>{
163
163
  // Mark that we are making an identify request so another is not made.
164
164
  bucket.identifyRequests.push(resolve);
165
- _utils.logger.debug(`[Gateway] identifying shard #(${shardId}).`);
165
+ gateway.logger.debug(`[Gateway] identifying shard #(${shardId}).`);
166
166
  // This will trigger identify and when READY is received it will resolve the above request.
167
167
  shard?.identify().then(async ()=>{
168
168
  // Tell the manager that this shard is online
@@ -171,15 +171,15 @@ function createGatewayManager(options) {
171
171
  });
172
172
  },
173
173
  async updateGuildsShardId (guildIds, shardId) {
174
- _utils.logger.debug(`[Resharding] Updating the following guild ids shard to #${shardId}: ${guildIds.join(', ')}. Override this function to update your cache if you need to.`);
174
+ gateway.logger.debug(`[Resharding] Updating the following guild ids shard to #${shardId}: ${guildIds.join(', ')}. Override this function to update your cache if you need to.`);
175
175
  },
176
176
  async shardIsPending (shard) {
177
177
  // Save this in pending at the moment, until all shards are online
178
178
  gateway.resharding.pendingShards.set(shard.id, shard);
179
- _utils.logger.warn(`[Resharding] Shard #${shard.id} is now pending`);
179
+ gateway.logger.warn(`[Resharding] Shard #${shard.id} is now pending`);
180
180
  // Check if all shards are now online.
181
181
  if (gateway.lastShardId - gateway.firstShardId + 1 > gateway.resharding.pendingShards.size) return;
182
- _utils.logger.warn(`[Resharding] All shards are now online.`);
182
+ gateway.logger.warn(`[Resharding] All shards are now online.`);
183
183
  // New shards start processing events
184
184
  for (const shard of gateway.resharding.pendingShards.values()){
185
185
  for(const event in options.events){
@@ -201,10 +201,10 @@ function createGatewayManager(options) {
201
201
  }
202
202
  };
203
203
  }
204
- _utils.logger.warn(`[Resharding] Shutting down old shards.`);
204
+ gateway.logger.warn(`[Resharding] Shutting down old shards.`);
205
205
  // Close old shards
206
206
  await gateway.shutdown(_types1.ShardSocketCloseCodes.Resharded, 'Resharded!', false);
207
- _utils.logger.warn(`[Resharding] Completed.`);
207
+ gateway.logger.warn(`[Resharding] Completed.`);
208
208
  // Replace old shards
209
209
  gateway.shards = gateway.resharding.shards;
210
210
  }
@@ -262,7 +262,6 @@ function createGatewayManager(options) {
262
262
  }
263
263
  for (const bucket of gateway.buckets.values()){
264
264
  for (const worker of bucket.workers.values()){
265
- // eslint-disable-next-line @typescript-eslint/require-array-sort-compare
266
265
  worker.queue = worker.queue.sort((a, b)=>a - b);
267
266
  }
268
267
  }
@@ -357,7 +356,7 @@ function createGatewayManager(options) {
357
356
  this.shards.delete(shardId);
358
357
  await shard.shutdown();
359
358
  },
360
- async requestIdentify (shardId) {
359
+ async requestIdentify (_shardId) {
361
360
  gateway.logger.debug(`[Gateway] requesting identify`);
362
361
  // const bucket = gateway.buckets.get(shardId % gateway.connection.sessionStartLimit.maxConcurrency)
363
362
  // if (!bucket) return
@@ -461,4 +460,4 @@ function createGatewayManager(options) {
461
460
  return gateway;
462
461
  }
463
462
 
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uICovXG5pbXBvcnQge1xuICBHYXRld2F5SW50ZW50cyxcbiAgR2F0ZXdheU9wY29kZXMsXG4gIHR5cGUgQXRMZWFzdE9uZSxcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEdldEdhdGV3YXlCb3QsXG4gIHR5cGUgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICB0eXBlIERpc2NvcmRSZWFkeSxcbiAgdHlwZSBSZXF1ZXN0R3VpbGRNZW1iZXJzLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IENvbGxlY3Rpb24sIGRlbGF5LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuaW1wb3J0IHsgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLCB0eXBlIFNoYXJkRXZlbnRzLCB0eXBlIFNoYXJkU29ja2V0UmVxdWVzdCwgdHlwZSBTdGF0dXNVcGRhdGUsIHR5cGUgVXBkYXRlVm9pY2VTdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHYXRld2F5TWFuYWdlcihvcHRpb25zOiBDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnMpOiBHYXRld2F5TWFuYWdlciB7XG4gIGNvbnN0IGNvbm5lY3Rpb25PcHRpb25zID0gb3B0aW9ucy5jb25uZWN0aW9uID8/IHtcbiAgICB1cmw6ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnLFxuICAgIHNoYXJkczogMSxcbiAgICBzZXNzaW9uU3RhcnRMaW1pdDoge1xuICAgICAgbWF4Q29uY3VycmVuY3k6IDEsXG4gICAgICByZW1haW5pbmc6IDEwMDAsXG4gICAgICB0b3RhbDogMTAwMCxcbiAgICAgIHJlc2V0QWZ0ZXI6IDEwMDAgKiA2MCAqIDYwICogMjQsXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IGdhdGV3YXk6IEdhdGV3YXlNYW5hZ2VyID0ge1xuICAgIGV2ZW50czogb3B0aW9ucy5ldmVudHMgPz8ge30sXG4gICAgY29tcHJlc3M6IG9wdGlvbnMuY29tcHJlc3MgPz8gZmFsc2UsXG4gICAgaW50ZW50czogb3B0aW9ucy5pbnRlbnRzID8/IDAsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgb3M6IG9wdGlvbnMucHJvcGVydGllcz8ub3MgPz8gcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgIGJyb3dzZXI6IG9wdGlvbnMucHJvcGVydGllcz8uYnJvd3NlciA/PyAnRGlzY29yZGVubycsXG4gICAgICBkZXZpY2U6IG9wdGlvbnMucHJvcGVydGllcz8uZGV2aWNlID8/ICdEaXNjb3JkZW5vJyxcbiAgICB9LFxuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIHVybDogb3B0aW9ucy51cmwgPz8gY29ubmVjdGlvbk9wdGlvbnMudXJsID8/ICd3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2cnLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyAxMCxcbiAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uT3B0aW9ucyxcbiAgICB0b3RhbFNoYXJkczogb3B0aW9ucy50b3RhbFNoYXJkcyA/PyBjb25uZWN0aW9uT3B0aW9ucy5zaGFyZHMgPz8gMSxcbiAgICBsYXN0U2hhcmRJZDogb3B0aW9ucy5sYXN0U2hhcmRJZCA/PyAob3B0aW9ucy50b3RhbFNoYXJkcyA/IG9wdGlvbnMudG90YWxTaGFyZHMgLSAxIDogY29ubmVjdGlvbk9wdGlvbnMgPyBjb25uZWN0aW9uT3B0aW9ucy5zaGFyZHMgLSAxIDogMCksXG4gICAgZmlyc3RTaGFyZElkOiBvcHRpb25zLmZpcnN0U2hhcmRJZCA/PyAwLFxuICAgIHRvdGFsV29ya2Vyczogb3B0aW9ucy50b3RhbFdvcmtlcnMgPz8gNCxcbiAgICBzaGFyZHNQZXJXb3JrZXI6IG9wdGlvbnMuc2hhcmRzUGVyV29ya2VyID8/IDI1LFxuICAgIHNwYXduU2hhcmREZWxheTogb3B0aW9ucy5zcGF3blNoYXJkRGVsYXkgPz8gNTMwMCxcbiAgICBwcmVmZXJTbmFrZUNhc2U6IG9wdGlvbnMucHJlZmVyU25ha2VDYXNlID8/IGZhbHNlLFxuICAgIHNoYXJkczogbmV3IE1hcCgpLFxuICAgIGJ1Y2tldHM6IG5ldyBNYXAoKSxcbiAgICBjYWNoZToge1xuICAgICAgcmVxdWVzdE1lbWJlcnM6IHtcbiAgICAgICAgZW5hYmxlZDogb3B0aW9ucy5jYWNoZT8ucmVxdWVzdE1lbWJlcnM/LmVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICAgIHBlbmRpbmc6IG5ldyBDb2xsZWN0aW9uKCksXG4gICAgICB9LFxuICAgIH0sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG4gICAgcmVzaGFyZGluZzoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHNoYXJkc0Z1bGxQZXJjZW50YWdlOiA4MCxcbiAgICAgIGNoZWNrSW50ZXJ2YWw6IDI4ODAwMDAwLFxuICAgICAgc2hhcmRzOiBuZXcgQ29sbGVjdGlvbigpLFxuICAgICAgcGVuZGluZ1NoYXJkczogbmV3IENvbGxlY3Rpb24oKSxcbiAgICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1tSZXNoYXJkaW5nXSB3YXMgZW5hYmxlZCBidXQgbm8gZ2V0U2Vzc2lvbkluZm8gaGFuZGxlciB3YXMgcHJvdmlkZWQuIFBsZWFzZSBzZXQgYSBoYW5kbGVyIGxpa2U6IGdhdGV3YXkucmVzaGFyZGluZy5nZXRTZXNzaW9uSW5mbyA9IGFzeW5jICgpID0+IHsgLy8gaW5zZXJ0IGNvZGUgaGVyZSB0byBmZXRjaCBnZXRTZXNzaW9uSW5mbyBmcm9tIHJlc3QgcHJvY2Vzcy4gfScsXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBhc3luYyBjaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkKCkge1xuICAgICAgICBsb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIENoZWNraW5nIGlmIHJlc2hhcmRpbmcgaXMgbmVlZGVkLmApXG4gICAgICAgIC8vIFJlc2hhcmRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICAgIGlmICghZ2F0ZXdheS5yZXNoYXJkaW5nLmVuYWJsZWQpIHJldHVybiB7IG5lZWRlZDogZmFsc2UgfVxuICAgICAgICBsb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZC5gKVxuXG4gICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKClcbiAgICAgICAgbG9nZ2VyLndhcm4oYFtSZXNoYXJkaW5nXSBTZXNzaW9uIGluZm8gcmV0cmlldmVkLmApXG4gICAgICAgIC8vIERvbid0IGhhdmUgZW5vdWdoIGlkZW50aWZ5IGxpbWl0cyB0byB0cnkgcmVzaGFyZGluZ1xuICAgICAgICBpZiAoc2Vzc2lvbkluZm8uc2Vzc2lvblN0YXJ0TGltaXQucmVtYWluaW5nIDwgc2Vzc2lvbkluZm8uc2hhcmRzKSByZXR1cm4geyBuZWVkZWQ6IGZhbHNlLCBpbmZvOiBzZXNzaW9uSW5mbyB9XG4gICAgICAgIGxvZ2dlci53YXJuKGBbUmVzaGFyZGluZ10gQWJsZSB0byByZXNoYXJkLCBjaGVja2luZyB3aGV0aGVyIG5lY2Vzc2FyeSBub3cuYClcblxuICAgICAgICAvLyAyNTAwIGlzIHRoZSBtYXggYW1vdW50IG9mIGd1aWxkcyBhIHNpbmdsZSBzaGFyZCBjYW4gaGFuZGxlXG4gICAgICAgIC8vIDEwMDAgaXMgdGhlIGFtb3VudCBvZiBndWlsZHMgZGlzY29yZCB1c2VzIHRvIGRldGVybWluZSBob3cgbWFueSBzaGFyZHMgdG8gcmVjb21tZW5kLlxuICAgICAgICAvLyBUaGlzIGFsZ28gaGVscHMgY2hlY2sgaWYgeW91ciBib3QgaGFzIGdyb3duIGVub3VnaCB0byByZXNoYXJkLlxuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gKCgyNTAwICogc2Vzc2lvbkluZm8uc2hhcmRzKSAvIChnYXRld2F5LnRvdGFsU2hhcmRzICogMTAwMCkpICogMTAwXG4gICAgICAgIC8vIExlc3MgdGhhbiBuZWNlc3NhcnklIGJlaW5nIHVzZWQgc28gZG8gbm90aGluZ1xuICAgICAgICBpZiAocGVyY2VudGFnZSA8IGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHNGdWxsUGVyY2VudGFnZSkgcmV0dXJuIHsgbmVlZGVkOiBmYWxzZSwgaW5mbzogc2Vzc2lvbkluZm8gfVxuICAgICAgICBsb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgbmVlZGVkLmApXG5cbiAgICAgICAgcmV0dXJuIHsgbmVlZGVkOiB0cnVlLCBpbmZvOiBzZXNzaW9uSW5mbyB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgcmVzaGFyZChpbmZvKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBbUmVzaGFyZGluZ10gU3RhcnRpbmcgdGhlIHJlc2hhcmQgcHJvY2Vzcy4gUHJldmlvdXMgdG90YWwgc2hhcmRzLiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcbiAgICAgICAgLy8gU2V0IHZhbHVlcyBvbiBnYXRld2F5XG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBpbmZvLnNoYXJkc1xuICAgICAgICAvLyBIYW5kbGVzIHByZXBhcmluZyBtaWQgc2l6ZWQgYm90cyBmb3IgTEJTXG4gICAgICAgIGdhdGV3YXkudG90YWxTaGFyZHMgPSBnYXRld2F5LmNhbGN1bGF0ZVRvdGFsU2hhcmRzKClcbiAgICAgICAgLy8gU2V0IGZpcnN0IHNoYXJkIGlkIGlmIHByb3ZpZGVkIGluIGluZm9cbiAgICAgICAgaWYgKHR5cGVvZiBpbmZvLmZpcnN0U2hhcmRJZCA9PT0gJ251bWJlcicpIGdhdGV3YXkuZmlyc3RTaGFyZElkID0gaW5mby5maXJzdFNoYXJkSWRcbiAgICAgICAgLy8gU2V0IGxhc3Qgc2hhcmQgaWQgaWYgcHJvdmlkZWQgaW4gaW5mb1xuICAgICAgICBpZiAodHlwZW9mIGluZm8ubGFzdFNoYXJkSWQgPT09ICdudW1iZXInKSBnYXRld2F5Lmxhc3RTaGFyZElkID0gaW5mby5sYXN0U2hhcmRJZFxuICAgICAgICBsb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFN0YXJ0aW5nIHRoZSByZXNoYXJkIHByb2Nlc3MuIE5ldyBUb3RhbCBTaGFyZHMuICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuXG4gICAgICAgIC8vIFJlc2V0dGluZyBidWNrZXRzXG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5jbGVhcigpXG4gICAgICAgIC8vIFJlZmlsbGluZyBidWNrZXRzIHdpdGggbmV3IHZhbHVlc1xuICAgICAgICBnYXRld2F5LnByZXBhcmVCdWNrZXRzKClcblxuICAgICAgICAvLyBTUFJFQUQgVEhJUyBPVVQgVE8gRElGRkVSRU5UIFdPUktFUlMgVE8gQkVHSU4gU1RBUlRJTkcgVVBcbiAgICAgICAgZ2F0ZXdheS5idWNrZXRzLmZvckVhY2goYXN5bmMgKGJ1Y2tldCwgYnVja2V0SWQpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnJlc2hhcmRpbmcudGVsbFdvcmtlclRvUHJlcGFyZSh3b3JrZXIuaWQsIHNoYXJkSWQsIGJ1Y2tldElkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBhc3luYyB0ZWxsV29ya2VyVG9QcmVwYXJlKHdvcmtlcklkLCBzaGFyZElkLCBidWNrZXRJZCkge1xuICAgICAgICBsb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFRlbGxpbmcgd29ya2VyIHRvIHByZXBhcmUuIFdvcmtlcjogJHt3b3JrZXJJZH0gfCBTaGFyZDogJHtzaGFyZElkfSB8IEJ1Y2tldDogJHtidWNrZXRJZH1gKVxuICAgICAgICBjb25zdCBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IGdhdGV3YXkuY29tcHJlc3MsXG4gICAgICAgICAgICBpbnRlbnRzOiBnYXRld2F5LmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBnYXRld2F5LnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogZ2F0ZXdheS50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiBnYXRld2F5LnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiBnYXRld2F5LnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IGdhdGV3YXkudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIElnbm9yZSBldmVudHMgdW50aWwgd2UgYXJlIHJlYWR5XG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBhc3luYyBtZXNzYWdlKF9zaGFyZCwgcGF5bG9hZCkge1xuICAgICAgICAgICAgICBpZiAocGF5bG9hZC50ID09PSAnUkVBRFknKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnVwZGF0ZUd1aWxkc1NoYXJkSWQoXG4gICAgICAgICAgICAgICAgICAocGF5bG9hZC5kIGFzIERpc2NvcmRSZWFkeSkuZ3VpbGRzLm1hcCgoZykgPT4gZy5pZCksXG4gICAgICAgICAgICAgICAgICBzaGFyZElkLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVlc3RJZGVudGlmeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5pZGVudGlmeShzaGFyZElkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hhcmRJc1JlYWR5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7c2hhcmRJZH0gaXMgcmVhZHlgKVxuICAgICAgICAgICAgYXdhaXQgZGVsYXkoZ2F0ZXdheS5zcGF3blNoYXJkRGVsYXkpXG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVzb2x2aW5nIHNoYXJkIGlkZW50aWZ5IHJlcXVlc3RgKVxuICAgICAgICAgICAgZ2F0ZXdheS5idWNrZXRzLmdldChzaGFyZElkICUgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5KSEuaWRlbnRpZnlSZXF1ZXN0cy5zaGlmdCgpPy4oKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdhdGV3YXkucHJlZmVyU25ha2VDYXNlKSB7XG4gICAgICAgICAgc2hhcmQuZm9yd2FyZFRvQm90ID0gYXN5bmMgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIHNoYXJkLmV2ZW50cz8ubWVzc2FnZT8uKHNoYXJkLCBwYXlsb2FkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuXG4gICAgICAgIGNvbnN0IGJ1Y2tldCA9IGdhdGV3YXkuYnVja2V0cy5nZXQoc2hhcmRJZCAlIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSlcbiAgICAgICAgaWYgKCFidWNrZXQpIHJldHVyblxuXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIC8vIE1hcmsgdGhhdCB3ZSBhcmUgbWFraW5nIGFuIGlkZW50aWZ5IHJlcXVlc3Qgc28gYW5vdGhlciBpcyBub3QgbWFkZS5cbiAgICAgICAgICBidWNrZXQuaWRlbnRpZnlSZXF1ZXN0cy5wdXNoKHJlc29sdmUpXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gaWRlbnRpZnlpbmcgc2hhcmQgIygke3NoYXJkSWR9KS5gKVxuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGlkZW50aWZ5IGFuZCB3aGVuIFJFQURZIGlzIHJlY2VpdmVkIGl0IHdpbGwgcmVzb2x2ZSB0aGUgYWJvdmUgcmVxdWVzdC5cbiAgICAgICAgICBzaGFyZD8uaWRlbnRpZnkoKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIG1hbmFnZXIgdGhhdCB0aGlzIHNoYXJkIGlzIG9ubGluZVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZElzUGVuZGluZyhzaGFyZClcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHVwZGF0ZUd1aWxkc1NoYXJkSWQoZ3VpbGRJZHMsIHNoYXJkSWQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBbUmVzaGFyZGluZ10gVXBkYXRpbmcgdGhlIGZvbGxvd2luZyBndWlsZCBpZHMgc2hhcmQgdG8gIyR7c2hhcmRJZH06ICR7Z3VpbGRJZHMuam9pbignLCAnKX0uIE92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gdXBkYXRlIHlvdXIgY2FjaGUgaWYgeW91IG5lZWQgdG8uYCxcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHNoYXJkSXNQZW5kaW5nKHNoYXJkKSB7XG4gICAgICAgIC8vIFNhdmUgdGhpcyBpbiBwZW5kaW5nIGF0IHRoZSBtb21lbnQsIHVudGlsIGFsbCBzaGFyZHMgYXJlIG9ubGluZVxuICAgICAgICBnYXRld2F5LnJlc2hhcmRpbmcucGVuZGluZ1NoYXJkcy5zZXQoc2hhcmQuaWQsIHNoYXJkKVxuICAgICAgICBsb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFNoYXJkICMke3NoYXJkLmlkfSBpcyBub3cgcGVuZGluZ2ApXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCBzaGFyZHMgYXJlIG5vdyBvbmxpbmUuXG4gICAgICAgIGlmIChnYXRld2F5Lmxhc3RTaGFyZElkIC0gZ2F0ZXdheS5maXJzdFNoYXJkSWQgKyAxID4gZ2F0ZXdheS5yZXNoYXJkaW5nLnBlbmRpbmdTaGFyZHMuc2l6ZSkgcmV0dXJuXG4gICAgICAgIGxvZ2dlci53YXJuKGBbUmVzaGFyZGluZ10gQWxsIHNoYXJkcyBhcmUgbm93IG9ubGluZS5gKVxuXG4gICAgICAgIC8vIE5ldyBzaGFyZHMgc3RhcnQgcHJvY2Vzc2luZyBldmVudHNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnJlc2hhcmRpbmcucGVuZGluZ1NoYXJkcy52YWx1ZXMoKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgaW4gb3B0aW9ucy5ldmVudHMpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4aW5nIHRoaXMgc2VlbXMgY29tcGxleCBhbmQgZG9lc250IHNlZW0gd29ydGggaXQsIGZlZWwgZnJlZSB0byBmaXggaWYgeW91IHdpc2hcbiAgICAgICAgICAgIHNoYXJkLmV2ZW50c1tldmVudF0gPSBvcHRpb25zLmV2ZW50c1tldmVudF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbGQgc2hhcmRzIHN0b3AgcHJvY2Vzc2luZyBldmVudHNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnNoYXJkcy52YWx1ZXMoKSkge1xuICAgICAgICAgIGNvbnN0IG9sZEhhbmRsZXIgPSBzaGFyZC5ldmVudHMubWVzc2FnZVxuXG4gICAgICAgICAgLy8gQ2hhbmdlIHdpdGggc3ByZWFkIG9wZXJhdG9yIHRvIG5vdCBhZmZlY3QgbmV3IHNoYXJkcywgYXMgY2hhbmdpbmcgYW55dGhpbmcgb24gc2hhcmQuZXZlbnRzIHdpbGwgZGlyZWN0bHkgY2hhbmdlIG9wdGlvbnMuZXZlbnRzLCB3aGljaCBjaGFuZ2VzIG5ldyBzaGFyZHMnIGV2ZW50c1xuICAgICAgICAgIHNoYXJkLmV2ZW50cyA9IHtcbiAgICAgICAgICAgIC4uLnNoYXJkLmV2ZW50cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFzeW5jIGZ1bmN0aW9uIChfLCBtZXNzYWdlKSB7XG4gICAgICAgICAgICAgIC8vIE1lbWJlciBjaGVja3MgbmVlZCB0byBjb250aW51ZSBidXQgb3RoZXJzIGNhbiBzdG9wXG4gICAgICAgICAgICAgIGlmIChtZXNzYWdlLnQgIT09ICdHVUlMRF9NRU1CRVJTX0NIVU5LJykgcmV0dXJuXG4gICAgICAgICAgICAgIC8vIFByb2Nlc3Mgb25seSB0aGUgY2h1bmtpbmcgZXZlbnRzXG4gICAgICAgICAgICAgIG9sZEhhbmRsZXI/LihzaGFyZCwgbWVzc2FnZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9nZ2VyLndhcm4oYFtSZXNoYXJkaW5nXSBTaHV0dGluZyBkb3duIG9sZCBzaGFyZHMuYClcbiAgICAgICAgLy8gQ2xvc2Ugb2xkIHNoYXJkc1xuICAgICAgICBhd2FpdCBnYXRld2F5LnNodXRkb3duKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXNoYXJkZWQsICdSZXNoYXJkZWQhJywgZmFsc2UpXG4gICAgICAgIGxvZ2dlci53YXJuKGBbUmVzaGFyZGluZ10gQ29tcGxldGVkLmApXG5cbiAgICAgICAgLy8gUmVwbGFjZSBvbGQgc2hhcmRzXG4gICAgICAgIGdhdGV3YXkuc2hhcmRzID0gZ2F0ZXdheS5yZXNoYXJkaW5nLnNoYXJkc1xuICAgICAgfSxcbiAgICB9LFxuXG4gICAgY2FsY3VsYXRlVG90YWxTaGFyZHMoKSB7XG4gICAgICAvLyBCb3RzIHVuZGVyIDEwMGsgc2VydmVycyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gTEJTLlxuICAgICAgaWYgKGdhdGV3YXkudG90YWxTaGFyZHMgPCAxMDApIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHM6ICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICByZXR1cm4gZ2F0ZXdheS50b3RhbFNoYXJkc1xuICAgICAgfVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIENhbGN1bGF0aW5nIHRvdGFsIHNoYXJkc2AsIGdhdGV3YXkudG90YWxTaGFyZHMsIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSlcbiAgICAgIC8vIENhbGN1bGF0ZSBhIG11bHRpcGxlIG9mIGBtYXhDb25jdXJyZW5jeWAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgZ2F0ZXdheS5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIE1hdGguY2VpbChcbiAgICAgICAgICBnYXRld2F5LnRvdGFsU2hhcmRzIC9cbiAgICAgICAgICAgIC8vIElmIGBtYXhDb25jdXJyZW5jeWAgaXMgMSwgd2UgY2FuIHNhZmVseSB1c2UgMTYgdG8gZ2V0IGB0b3RhbFNoYXJkc2AgdG8gYmUgaW4gYSBtdWx0aXBsZSBvZiAxNiBzbyB0aGF0IHdlIGNhbiBwcmVwYXJlIGJvdHMgd2l0aCAxMDBrIHNlcnZlcnMgZm9yIExCUy5cbiAgICAgICAgICAgIChnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kgPT09IDEgPyAxNiA6IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSksXG4gICAgICAgICkgKiAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICApXG4gICAgfSxcbiAgICBjYWxjdWxhdGVXb3JrZXJJZChzaGFyZElkKSB7XG4gICAgICBjb25zdCB3b3JrZXJJZCA9IE1hdGgubWluKHNoYXJkSWQgJSBnYXRld2F5LnNoYXJkc1BlcldvcmtlciwgZ2F0ZXdheS50b3RhbFdvcmtlcnMgLSAxKVxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBbR2F0ZXdheV0gQ2FsY3VsYXRpbmcgd29ya2VySWQ6IFNoYXJkOiAke3NoYXJkSWR9IC0+IFdvcmtlcjogJHt3b3JrZXJJZH0gLT4gUGVyIFdvcmtlcjogJHtnYXRld2F5LnNoYXJkc1Blcldvcmtlcn0gLT4gVG90YWw6ICR7Z2F0ZXdheS50b3RhbFdvcmtlcnN9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiB3b3JrZXJJZFxuICAgIH0sXG4gICAgcHJlcGFyZUJ1Y2tldHMoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeTsgKytpKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gUHJlcGFyaW5nIGJ1Y2tldHMgZm9yIGNvbmN1cnJlbmN5OiAke2l9YClcbiAgICAgICAgZ2F0ZXdheS5idWNrZXRzLnNldChpLCB7XG4gICAgICAgICAgd29ya2VyczogW10sXG4gICAgICAgICAgaWRlbnRpZnlSZXF1ZXN0czogW10sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIE9SR0FOSVpFIEFMTCBTSEFSRFMgSU5UTyBUSEVJUiBPV04gQlVDS0VUU1xuICAgICAgZm9yIChsZXQgc2hhcmRJZCA9IGdhdGV3YXkuZmlyc3RTaGFyZElkOyBzaGFyZElkIDw9IGdhdGV3YXkubGFzdFNoYXJkSWQ7ICsrc2hhcmRJZCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFByZXBhcmluZyBidWNrZXRzIGZvciBzaGFyZDogJHtzaGFyZElkfWApXG4gICAgICAgIGlmIChzaGFyZElkID49IGdhdGV3YXkudG90YWxTaGFyZHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNoYXJkIChpZDogJHtzaGFyZElkfSkgaXMgYmlnZ2VyIG9yIGVxdWFsIHRvIHRoZSB1c2VkIGFtb3VudCBvZiB1c2VkIHNoYXJkcyB3aGljaCBpcyAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1Y2tldElkID0gc2hhcmRJZCAlIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeVxuICAgICAgICBjb25zdCBidWNrZXQgPSBnYXRld2F5LmJ1Y2tldHMuZ2V0KGJ1Y2tldElkKVxuICAgICAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0pIGdvdCBhc3NpZ25lZCB0byBhbiBpbGxlZ2FsIGJ1Y2tldCBpZDogJHtidWNrZXRJZH0sIGV4cGVjdGVkIGEgYnVja2V0IGlkIGJldHdlZW4gMCBhbmQgJHtcbiAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5IC0gMVxuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRklORCBBIFFVRVVFIElOIFRISVMgQlVDS0VUIFRIQVQgSEFTIFNQQUNFXG4gICAgICAgIC8vIGNvbnN0IHdvcmtlciA9IGJ1Y2tldC53b3JrZXJzLmZpbmQoKHcpID0+IHcucXVldWUubGVuZ3RoIDwgZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIpO1xuICAgICAgICBjb25zdCB3b3JrZXJJZCA9IGdhdGV3YXkuY2FsY3VsYXRlV29ya2VySWQoc2hhcmRJZClcbiAgICAgICAgY29uc3Qgd29ya2VyID0gYnVja2V0LndvcmtlcnMuZmluZCgodykgPT4gdy5pZCA9PT0gd29ya2VySWQpXG4gICAgICAgIGlmICh3b3JrZXIpIHtcbiAgICAgICAgICAvLyBJRiBUSEUgUVVFVUUgSEFTIFNQQUNFIEpVU1QgQUREIElUIFRPIFRISVMgUVVFVUVcbiAgICAgICAgICB3b3JrZXIucXVldWUucHVzaChzaGFyZElkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1Y2tldC53b3JrZXJzLnB1c2goeyBpZDogd29ya2VySWQsIHF1ZXVlOiBbc2hhcmRJZF0gfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGJ1Y2tldCBvZiBnYXRld2F5LmJ1Y2tldHMudmFsdWVzKCkpIHtcbiAgICAgICAgZm9yIChjb25zdCB3b3JrZXIgb2YgYnVja2V0LndvcmtlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXJyYXktc29ydC1jb21wYXJlXG4gICAgICAgICAgd29ya2VyLnF1ZXVlID0gd29ya2VyLnF1ZXVlLnNvcnQoKGEsIGIpID0+IGEgLSBiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFBSRVBBUkVTIEFMTCBTSEFSRFMgSU4gU1BFQ0lGSUMgQlVDS0VUU1xuICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgIC8vIFByZWZlciBjb25jdXJyZW5jeSBvZiBmb3JFYWNoIGluc3RlYWQgb2YgZm9yb2ZcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKV0ubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlci5pZCwgc2hhcmRJZCwgYnVja2V0SWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgLy8gQ2hlY2sgYW5kIHJlc2hhcmQgYXV0b21hdGljYWxseSBpZiBhdXRvIHJlc2hhcmRpbmcgaXMgZW5hYmxlZC5cbiAgICAgIGlmIChnYXRld2F5LnJlc2hhcmRpbmcuZW5hYmxlZCAmJiBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbCAhPT0gLTEpIHtcbiAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXNoYXJkaW5nSW5mbyA9IGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkKClcblxuICAgICAgICAgIGlmIChyZXNoYXJkaW5nSW5mby5uZWVkZWQgJiYgcmVzaGFyZGluZ0luZm8uaW5mbykgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnJlc2hhcmQocmVzaGFyZGluZ0luZm8uaW5mbylcbiAgICAgICAgfSwgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWwpXG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzaHV0ZG93bihjb2RlLCByZWFzb24sIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsID0gdHJ1ZSkge1xuICAgICAgZ2F0ZXdheS5zaGFyZHMuZm9yRWFjaCgoc2hhcmQpID0+IHNoYXJkLmNsb3NlKGNvZGUsIHJlYXNvbikpXG5cbiAgICAgIGlmIChjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCAmJiBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbElkKSBjbGVhckludGVydmFsKGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsSWQpXG5cbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApXG4gICAgfSxcbiAgICBhc3luYyBzZW5kUGF5bG9hZChzaGFyZElkLCBwYXlsb2FkKSB7XG4gICAgICBjb25zdCBzaGFyZCA9IGdhdGV3YXkuc2hhcmRzLmdldChzaGFyZElkKVxuXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmQgKGlkOiAke3NoYXJkSWR9IG5vdCBmb3VuZGApXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNoYXJkLnNlbmQocGF5bG9hZClcbiAgICB9LFxuICAgIGFzeW5jIHRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlcklkLCBzaGFyZElkLCBidWNrZXRJZCkge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSB0ZWxsIHdvcmtlciB0byBpZGVudGlmeSAoJHt3b3JrZXJJZH0sICR7c2hhcmRJZH0sICR7YnVja2V0SWR9KWApXG4gICAgICBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBpZGVudGlmeWluZyAke3NoYXJkID8gJ2V4aXN0aW5nJyA6ICduZXcnfSBzaGFyZCAoJHtzaGFyZElkfSlgKVxuXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHNoYXJkID0gbmV3IFNoYXJkKHtcbiAgICAgICAgICBpZDogc2hhcmRJZCxcbiAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICBjb21wcmVzczogdGhpcy5jb21wcmVzcyxcbiAgICAgICAgICAgIGludGVudHM6IHRoaXMuaW50ZW50cyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRva2VuLFxuICAgICAgICAgICAgdG90YWxTaGFyZHM6IHRoaXMudG90YWxTaGFyZHMsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXZlbnRzOiBvcHRpb25zLmV2ZW50cyA/PyB7fSxcbiAgICAgICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgICAgICAgIHJlcXVlc3RJZGVudGlmeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5pZGVudGlmeShzaGFyZElkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hhcmRJc1JlYWR5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHtzaGFyZElkfSBpcyByZWFkeWApXG4gICAgICAgICAgICBhd2FpdCBkZWxheShnYXRld2F5LnNwYXduU2hhcmREZWxheSlcbiAgICAgICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc29sdmluZyBzaGFyZCBpZGVudGlmeSByZXF1ZXN0YClcbiAgICAgICAgICAgIGdhdGV3YXkuYnVja2V0cy5nZXQoc2hhcmRJZCAlIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSkhLmlkZW50aWZ5UmVxdWVzdHMuc2hpZnQoKT8uKClcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLnByZWZlclNuYWtlQ2FzZSkge1xuICAgICAgICAgIHNoYXJkLmZvcndhcmRUb0JvdCA9IGFzeW5jIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBzaGFyZCEuZXZlbnRzLm1lc3NhZ2U/LihzaGFyZCEsIHBheWxvYWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBidWNrZXQgPSBnYXRld2F5LmJ1Y2tldHMuZ2V0KHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICBpZiAoIWJ1Y2tldCkgcmV0dXJuXG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBNYXJrIHRoYXQgd2UgYXJlIG1ha2luZyBhbiBpZGVudGlmeSByZXF1ZXN0IHNvIGFub3RoZXIgaXMgbm90IG1hZGUuXG4gICAgICAgIGJ1Y2tldC5pZGVudGlmeVJlcXVlc3RzLnB1c2gocmVzb2x2ZSlcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBpZGVudGlmeWluZyBzaGFyZCAjKCR7c2hhcmRJZH0pLmApXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGlkZW50aWZ5IGFuZCB3aGVuIFJFQURZIGlzIHJlY2VpdmVkIGl0IHdpbGwgcmVzb2x2ZSB0aGUgYWJvdmUgcmVxdWVzdC5cbiAgICAgICAgc2hhcmQ/LmlkZW50aWZ5KClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBhc3luYyBraWxsKHNoYXJkSWQ6IG51bWJlcikge1xuICAgICAgY29uc3Qgc2hhcmQgPSB0aGlzLnNoYXJkcy5nZXQoc2hhcmRJZClcbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgcmV0dXJuIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0ga2lsbCBzaGFyZCBidXQgbm90IGZvdW5kICgke3NoYXJkSWR9KWApXG4gICAgICB9XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0ga2lsbCBzaGFyZCAoJHtzaGFyZElkfSlgKVxuICAgICAgdGhpcy5zaGFyZHMuZGVsZXRlKHNoYXJkSWQpXG4gICAgICBhd2FpdCBzaGFyZC5zaHV0ZG93bigpXG4gICAgfSxcbiAgICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoc2hhcmRJZDogbnVtYmVyKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIHJlcXVlc3RpbmcgaWRlbnRpZnlgKVxuICAgICAgLy8gY29uc3QgYnVja2V0ID0gZ2F0ZXdheS5idWNrZXRzLmdldChzaGFyZElkICUgZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5KVxuICAgICAgLy8gaWYgKCFidWNrZXQpIHJldHVyblxuXG4gICAgICAvLyByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIC8vICAgYnVja2V0LmlkZW50aWZ5UmVxdWVzdHMucHVzaChyZXNvbHZlKVxuICAgICAgLy8gfSlcbiAgICB9LFxuXG4gICAgLy8gSGVscGVycyBtZXRob2RzIGJlbG93IHRoaXNcblxuICAgIGNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZCwgdG90YWxTaGFyZHMpIHtcbiAgICAgIC8vIElmIG5vbmUgaXMgcHJvdmlkZWQsIHVzZSB0aGUgdG90YWwgc2hhcmRzIG51bWJlciBmcm9tIGdhdGV3YXkgb2JqZWN0LlxuICAgICAgaWYgKCF0b3RhbFNoYXJkcykgdG90YWxTaGFyZHMgPSBnYXRld2F5LnRvdGFsU2hhcmRzXG4gICAgICAvLyBJZiBpdCBpcyBvbmx5IDEgc2hhcmQsIGl0IHdpbGwgYWx3YXlzIGJlIHNoYXJkIGlkIDBcbiAgICAgIGlmICh0b3RhbFNoYXJkcyA9PT0gMSkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGNhbGN1bGF0ZVNoYXJkSWQgKDEgc2hhcmQpYClcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBjYWxjdWxhdGVTaGFyZElkIChndWlsZElkOiAke2d1aWxkSWR9LCB0b3RhbFNoYXJkczogJHt0b3RhbFNoYXJkc30pYClcbiAgICAgIHJldHVybiBOdW1iZXIoKEJpZ0ludChndWlsZElkKSA+PiAyMm4pICUgQmlnSW50KHRvdGFsU2hhcmRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblZvaWNlQ2hhbm5lbChndWlsZElkLCBjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZClcblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBqb2luVm9pY2VDaGFubmVsIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gY2hhbm5lbElkOiAke2NoYW5uZWxJZH1gKVxuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlZvaWNlU3RhdGVVcGRhdGUsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBndWlsZF9pZDogZ3VpbGRJZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYW5uZWxfaWQ6IGNoYW5uZWxJZC50b1N0cmluZygpLFxuICAgICAgICAgIHNlbGZfbXV0ZTogb3B0aW9ucz8uc2VsZk11dGUgPz8gZmFsc2UsXG4gICAgICAgICAgc2VsZl9kZWFmOiBvcHRpb25zPy5zZWxmRGVhZiA/PyB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFN0YXR1cyhkYXRhKSB7XG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGVkaXRCb3RTdGF0dXMgZGF0YTogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKVxuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgWy4uLmdhdGV3YXkuc2hhcmRzLnZhbHVlcygpXS5tYXAoYXN5bmMgKHNoYXJkKSA9PiB7XG4gICAgICAgICAgZ2F0ZXdheS5lZGl0U2hhcmRTdGF0dXMoc2hhcmQuaWQsIGRhdGEpXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2hhcmRTdGF0dXMoc2hhcmRJZCwgZGF0YSkge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBlZGl0U2hhcmRTdGF0dXMgc2hhcmRJZDogJHtzaGFyZElkfSAtPiBkYXRhOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApXG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUHJlc2VuY2VVcGRhdGUsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICBzaW5jZTogbnVsbCxcbiAgICAgICAgICBhZms6IGZhbHNlLFxuICAgICAgICAgIGFjdGl2aXRpZXM6IGRhdGEuYWN0aXZpdGllcyxcbiAgICAgICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVxdWVzdE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKVxuXG4gICAgICBpZiAoZ2F0ZXdheS5pbnRlbnRzICYmICghb3B0aW9ucz8ubGltaXQgfHwgb3B0aW9ucy5saW1pdCA+IDEpICYmICEoZ2F0ZXdheS5pbnRlbnRzICYgR2F0ZXdheUludGVudHMuR3VpbGRNZW1iZXJzKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmV0Y2ggbW9yZSB0aGVuIDEgbWVtYmVyIHdpdGhvdXQgdGhlIEdVSUxEX01FTUJFUlMgaW50ZW50JylcblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSByZXF1ZXN0TWVtYmVycyBndWlsZElkOiAke2d1aWxkSWR9IC0+IGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcblxuICAgICAgaWYgKG9wdGlvbnM/LnVzZXJJZHM/Lmxlbmd0aCkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIHJlcXVlc3RNZW1iZXJzIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gLT4gc2V0dGluZyB1c2VyIGxpbWl0IGJhc2VkIG9uIHVzZXJJZHMgbGVuZ3RoOiAke29wdGlvbnMudXNlcklkcy5sZW5ndGh9YClcblxuICAgICAgICBvcHRpb25zLmxpbWl0ID0gb3B0aW9ucy51c2VySWRzLmxlbmd0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZW1iZXJzID1cbiAgICAgICAgIWdhdGV3YXkuY2FjaGUucmVxdWVzdE1lbWJlcnMuZW5hYmxlZCB8fCAhb3B0aW9ucz8ubm9uY2VcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBuZXcgUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgICAgICAgICAgaWYgKCFnYXRld2F5LmNhY2hlLnJlcXVlc3RNZW1iZXJzLmVuYWJsZWQgfHwgIW9wdGlvbnM/Lm5vbmNlKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlcXVlc3QgdGhlIG1lbWJlcnMgd2l0aG91dCB0aGUgbm9uY2Ugb3Igd2l0aCB0aGUgZmVhdHVyZSBkaXNhYmxlZC5cIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBnYXRld2F5LmNhY2hlLnJlcXVlc3RNZW1iZXJzLnBlbmRpbmcuc2V0KG9wdGlvbnMubm9uY2UsIHtcbiAgICAgICAgICAgICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgIG1lbWJlcnM6IFtdLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgYXdhaXQgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXF1ZXN0R3VpbGRNZW1iZXJzLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgZ3VpbGRfaWQ6IGd1aWxkSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAvLyBJZiBhIHF1ZXJ5IGlzIHByb3ZpZGVkIHVzZSBpdCwgT1IgaWYgYSBsaW1pdCBpcyBOT1QgcHJvdmlkZWQgdXNlIFwiXCJcbiAgICAgICAgICBxdWVyeTogb3B0aW9ucz8ucXVlcnkgPz8gKG9wdGlvbnM/LmxpbWl0ID8gdW5kZWZpbmVkIDogJycpLFxuICAgICAgICAgIGxpbWl0OiBvcHRpb25zPy5saW1pdCA/PyAwLFxuICAgICAgICAgIHByZXNlbmNlczogb3B0aW9ucz8ucHJlc2VuY2VzID8/IGZhbHNlLFxuICAgICAgICAgIHVzZXJfaWRzOiBvcHRpb25zPy51c2VySWRzPy5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgICBub25jZTogb3B0aW9ucz8ubm9uY2UsXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gYXdhaXQgbWVtYmVyc1xuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVZvaWNlQ2hhbm5lbChndWlsZElkKSB7XG4gICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gbGVhdmVWb2ljZUNoYW5uZWwgZ3VpbGRJZDogJHtndWlsZElkfSBTaGFyZCAke3NoYXJkSWR9YClcblxuICAgICAgYXdhaXQgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5Wb2ljZVN0YXRlVXBkYXRlLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgZ3VpbGRfaWQ6IGd1aWxkSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGFubmVsX2lkOiBudWxsLFxuICAgICAgICAgIHNlbGZfbXV0ZTogZmFsc2UsXG4gICAgICAgICAgc2VsZl9kZWFmOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiBnYXRld2F5XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR2F0ZXdheU1hbmFnZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBmaXJzdCBTaGFyZCB3aGljaCBzaG91bGQgZ2V0IGNvbnRyb2xsZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBmaXJzdFNoYXJkSWQ/OiBudW1iZXJcbiAgLyoqXG4gICAqIElkIG9mIHRoZSBsYXN0IFNoYXJkIHdoaWNoIHNob3VsZCBnZXQgY29udHJvbGxlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGxhc3RTaGFyZElkPzogbnVtYmVyXG4gIC8qKlxuICAgKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3Bhd25pbmcgbmV4dCBzaGFyZC4gT1BUSU1BTCBJUyBBQk9WRSA1MTAwLiBZT1UgRE9OJ1QgV0FOVCBUTyBISVQgVEhFIFJBVEUgTElNSVQhISFcbiAgICogQGRlZmF1bHQgNTMwMFxuICAgKi9cbiAgc3Bhd25TaGFyZERlbGF5PzogbnVtYmVyXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNlbmQgdGhlIGRpc2NvcmQgcGFja2V0cyBpbiBzbmFrZSBjYXNlIGZvcm0uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcmVmZXJTbmFrZUNhc2U/OiBib29sZWFuXG4gIC8qKlxuICAgKiBUb3RhbCBhbW91bnQgb2Ygc2hhcmRzIHlvdXIgYm90IHVzZXMuIFVzZWZ1bCBmb3IgemVyby1kb3dudGltZSB1cGRhdGVzIG9yIHJlc2hhcmRpbmcuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzPzogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHNoYXJkcyB0byBsb2FkIHBlciB3b3JrZXIuXG4gICAqIEBkZWZhdWx0IDI1XG4gICAqL1xuICBzaGFyZHNQZXJXb3JrZXI/OiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBhbW91bnQgb2Ygd29ya2VycyB0byB1c2UgZm9yIHlvdXIgYm90LlxuICAgKiBAZGVmYXVsdCA0XG4gICAqL1xuICB0b3RhbFdvcmtlcnM/OiBudW1iZXJcbiAgLyoqIEltcG9ydGFudCBkYXRhIHdoaWNoIGlzIHVzZWQgYnkgdGhlIG1hbmFnZXIgdG8gY29ubmVjdCBzaGFyZHMgdG8gdGhlIGdhdGV3YXkuICovXG4gIGNvbm5lY3Rpb24/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD5cbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzPzogYm9vbGVhblxuICAvKiogVGhlIGNhbGN1bGF0ZWQgaW50ZW50IHZhbHVlIG9mIHRoZSBldmVudHMgd2hpY2ggdGhlIHNoYXJkIHNob3VsZCByZWNlaXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpbnRlbnRzPzogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzPzoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsPzogc3RyaW5nXG4gIC8qKiBUaGUgZ2F0ZXdheSB2ZXJzaW9uIHdoaWNoIHNob3VsZCBiZSB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IG51bWJlclxuICAvKiogVGhlIGV2ZW50cyBoYW5kbGVycyAqL1xuICBldmVudHM/OiBTaGFyZEV2ZW50c1xuICAvKiogVGhpcyBtYW5hZ2VycyBjYWNoZSByZWxhdGVkIHNldHRpbmdzLiAqL1xuICBjYWNoZT86IHtcbiAgICByZXF1ZXN0TWVtYmVycz86IHtcbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciBvciBub3QgcmVxdWVzdCBtZW1iZXIgcmVxdWVzdHMgc2hvdWxkIGJlIGNhY2hlZC5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgbG9nZ2VyIHRoYXQgdGhlIGdhdGV3YXkgbWFuYWdlciB3aWxsIHVzZVxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5TWFuYWdlciBleHRlbmRzIFJlcXVpcmVkPENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucz4ge1xuICAvKiogVGhlIG1heCBjb25jdXJyZW5jeSBidWNrZXRzLiBUaG9zZSB3aWxsIGJlIGNyZWF0ZWQgd2hlbiB0aGUgYHNwYXduU2hhcmRzYCAod2hpY2ggY2FsbHMgYHByZXBhcmVCdWNrZXRzYCB1bmRlciB0aGUgaG9vZCkgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuICovXG4gIGJ1Y2tldHM6IE1hcDxcbiAgICBudW1iZXIsXG4gICAge1xuICAgICAgd29ya2VyczogQXJyYXk8eyBpZDogbnVtYmVyOyBxdWV1ZTogbnVtYmVyW10gfT5cbiAgICAgIC8qKiBSZXF1ZXN0cyB0byBpZGVudGlmeSBzaGFyZHMgYXJlIG1hZGUgYmFzZWQgb24gd2hldGhlciBpdCBpcyBhdmFpbGFibGUgdG8gYmUgbWFkZS4gKi9cbiAgICAgIGlkZW50aWZ5UmVxdWVzdHM6IEFycmF5PCh2YWx1ZTogdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+KSA9PiB2b2lkPlxuICAgIH1cbiAgPlxuICAvKiogVGhlIHNoYXJkcyB0aGF0IGFyZSBjcmVhdGVkLiAqL1xuICBzaGFyZHM6IE1hcDxudW1iZXIsIFNoYXJkPlxuICAvKiogVGhlIGxvZ2dlciBmb3IgdGhlIGdhdGV3YXkgbWFuYWdlciAqL1xuICBsb2dnZXI6IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPlxuICAvKiogRXZlcnl0aGluZyByZWxhdGVkIHRvIHJlc2hhcmRpbmcuICovXG4gIHJlc2hhcmRpbmc6IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhdXRvbWF0ZWQgcmVzaGFyZGluZyBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSAlIG9mIGhvdyBmdWxsIGEgc2hhcmQgaXMgd2hlbiByZXNoYXJkaW5nIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAgICogQGRlZmF1bHQgODAgYXMgaW4gODAlXG4gICAgICovXG4gICAgc2hhcmRzRnVsbFBlcmNlbnRhZ2U6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMsIG9mIGhvdyBvZnRlbiB0byBjaGVjayB3aGV0aGVyIHJlc2hhcmRpbmcgaXMgbmVlZGVkIGFuZCByZXNoYXJkIGF1dG9tYXRpY2FsbHkuIFNldCB0byAtMSB0byBkaXNhYmxlIGF1dG8gcmVzaGFyZGluZy5cbiAgICAgKiBAZGVmYXVsdCAyODgwMDAwMCAoOCBob3VycylcbiAgICAgKi9cbiAgICBjaGVja0ludGVydmFsOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgaW50ZXJ2YWwgaWQgb2YgdGhlIGNoZWNrIGludGVydmFsLiBUaGlzIGlzIHVzZWQgdG8gY2xlYXIgdGhlIGludGVydmFsIHdoZW4gdGhlIG1hbmFnZXIgaXMgc2h1dGRvd24uXG4gICAgICovXG4gICAgY2hlY2tJbnRlcnZhbElkPzogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWRcbiAgICAvKiogSG9sZHMgdGhlIHNoYXJkcyB0aGF0IHJlc2hhcmRpbmcgaGFzIGNyZWF0ZWQuIE9uY2UgcmVzaGFyZGluZyBpcyBkb25lLCB0aGlzIHJlcGxhY2VzIHRoZSBnYXRld2F5LnNoYXJkcyAqL1xuICAgIHNoYXJkczogQ29sbGVjdGlvbjxudW1iZXIsIFNoYXJkPlxuICAgIC8qKiBIb2xkcyB0aGUgcGVuZGluZyBzaGFyZHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgYXJlIHBlbmRpbmcgYWxsIHNoYXJkcyBmaW5pc2ggbG9hZGluZy4gKi9cbiAgICBwZW5kaW5nU2hhcmRzOiBDb2xsZWN0aW9uPG51bWJlciwgU2hhcmQ+XG4gICAgLyoqIEhhbmRsZXIgdG8gZ2V0IHNoYXJkIGNvdW50IGFuZCBvdGhlciBzZXNzaW9uIGluZm8uICovXG4gICAgZ2V0U2Vzc2lvbkluZm86ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+PlxuICAgIC8qKiBIYW5kbGVyIHRvIGVkaXQgdGhlIHNoYXJkIGlkIG9uIGFueSBjYWNoZWQgZ3VpbGRzLiAqL1xuICAgIHVwZGF0ZUd1aWxkc1NoYXJkSWQ6IChndWlsZElkczogc3RyaW5nW10sIHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAgIC8qKiBIYW5kbGVyIHRvIGNoZWNrIGlmIHJlc2hhcmRpbmcgaXMgbmVjZXNzYXJ5LiAqL1xuICAgIGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQ6ICgpID0+IFByb21pc2U8eyBuZWVkZWQ6IGJvb2xlYW47IGluZm8/OiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4gfT5cbiAgICAvKiogSGFuZGxlciB0byBiZWdpbiByZXNoYXJkaW5nLiAqL1xuICAgIHJlc2hhcmQ6IChpbmZvOiBDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4gJiB7IGZpcnN0U2hhcmRJZD86IG51bWJlcjsgbGFzdFNoYXJkSWQ/OiBudW1iZXIgfSkgPT4gUHJvbWlzZTx2b2lkPlxuICAgIC8qKiBIYW5kbGVyIHRvIGNvbW11bmljYXRlIHRvIGEgd29ya2VyIHRoYXQgYSBzaGFyZCBuZWVkcyB0byBiZSBjcmVhdGVkLiAqL1xuICAgIHRlbGxXb3JrZXJUb1ByZXBhcmU6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgICAvKiogSGFuZGxlciB0byBhbGVydCB0aGUgZ2F0ZXdheSB0aGF0IGEgc2hhcmQocmVzaGFyZGVkKSBpcyBvbmxpbmUuIEl0IHNob3VsZCBub3cgd2FpdCBmb3IgYWxsIHNoYXJkcyB0byBiZSBwZW5kaW5nIGJlZm9yZSBzaHV0dGluZyBvZmYgb2xkIHNoYXJkcy4gKi9cbiAgICBzaGFyZElzUGVuZGluZzogKHNoYXJkOiBTaGFyZCkgPT4gUHJvbWlzZTx2b2lkPlxuICB9XG4gIC8qKiBEZXRlcm1pbmUgbWF4IG51bWJlciBvZiBzaGFyZHMgdG8gdXNlIGJhc2VkIHVwb24gdGhlIG1heCBjb25jdXJyZW5jeS4gKi9cbiAgY2FsY3VsYXRlVG90YWxTaGFyZHM6ICgpID0+IG51bWJlclxuICAvKiogRGV0ZXJtaW5lIHRoZSBpZCBvZiB0aGUgd29ya2VyIHdoaWNoIGlzIGhhbmRsaW5nIGEgc2hhcmQuICovXG4gIGNhbGN1bGF0ZVdvcmtlcklkOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBudW1iZXJcbiAgLyoqIFByZXBhcmVzIGFsbCB0aGUgYnVja2V0cyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIGlkZW50aWZ5aW5nIHRoZSBzaGFyZHMuICovXG4gIHByZXBhcmVCdWNrZXRzOiAoKSA9PiB2b2lkXG4gIC8qKiBTdGFydCBpZGVudGlmeWluZyBhbGwgdGhlIHNoYXJkcy4gKi9cbiAgc3Bhd25TaGFyZHM6ICgpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFNodXRkb3duIGFsbCBzaGFyZHMuICovXG4gIHNodXRkb3duOiAoY29kZTogbnVtYmVyLCByZWFzb246IHN0cmluZywgY2xlYXJSZXNoYXJkaW5nSW50ZXJ2YWw/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+XG4gIHNlbmRQYXlsb2FkOiAoc2hhcmRJZDogbnVtYmVyLCBwYXlsb2FkOiBTaGFyZFNvY2tldFJlcXVlc3QpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEFsbG93cyB1c2VycyB0byBob29rIGluIGFuZCBjaGFuZ2UgdG8gY29tbXVuaWNhdGUgdG8gZGlmZmVyZW50IHdvcmtlcnMgYWNyb3NzIGRpZmZlcmVudCBzZXJ2ZXJzIG9yIGFueXRoaW5nIHRoZXkgbGlrZS4gRm9yIGV4YW1wbGUgdXNpbmcgcmVkaXMgcHVic3ViIHRvIHRhbGsgdG8gb3RoZXIgc2VydmVycy4gKi9cbiAgdGVsbFdvcmtlclRvSWRlbnRpZnk6ICh3b3JrZXJJZDogbnVtYmVyLCBzaGFyZElkOiBudW1iZXIsIGJ1Y2tldElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRlbGwgdGhlIG1hbmFnZXIgdG8gaWRlbnRpZnkgYSBTaGFyZC4gSWYgdGhpcyBTaGFyZCBpcyBub3QgYWxyZWFkeSBtYW5hZ2VkIHRoaXMgd2lsbCBhbHNvIGFkZCB0aGUgU2hhcmQgdG8gdGhlIG1hbmFnZXIuICovXG4gIGlkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBLaWxsIGEgc2hhcmQuIENsb3NlIGEgc2hhcmRzIGNvbm5lY3Rpb24gdG8gRGlzY29yZCdzIGdhdGV3YXkgKGlmIGFueSkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBtYW5hZ2VyLiAqL1xuICBraWxsOiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCB0aGUgYnVja2V0IGlzIGFsbG93ZWQgdG8gbWFrZSB0aGUgbmV4dCBpZGVudGlmeSByZXF1ZXN0LiAqL1xuICByZXF1ZXN0SWRlbnRpZnk6IChzaGFyZElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBzaGFyZHMgYmFzZWQgb24gdGhlIGd1aWxkIGlkIGFuZCB0b3RhbCBzaGFyZHMuICovXG4gIGNhbGN1bGF0ZVNoYXJkSWQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHRvdGFsU2hhcmRzPzogbnVtYmVyKSA9PiBudW1iZXJcbiAgLyoqXG4gICAqIENvbm5lY3RzIHRoZSBib3QgdXNlciB0byBhIHZvaWNlIG9yIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgeW91IHdhbnQgdG8gam9pbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDT05ORUNUYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9Wb2ljZSBTdGF0ZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3VwZGF0ZS12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGpvaW5Wb2ljZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcsIGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQXRMZWFzdE9uZTxPbWl0PFVwZGF0ZVZvaWNlU3RhdGUsICdndWlsZElkJyB8ICdjaGFubmVsSWQnPj4pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBib3Qgc3RhdHVzIGluIGFsbCBzaGFyZHMgdGhhdCB0aGlzIGdhdGV3YXkgbWFuYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIHN0YXR1cyBkYXRhIHRvIHNldCB0aGUgYm90cyBzdGF0dXMgdG8uXG4gICAqIEByZXR1cm5zIG5vdGhpbmdcbiAgICovXG4gIGVkaXRCb3RTdGF0dXM6IChkYXRhOiBTdGF0dXNVcGRhdGUpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBib3QncyBzdGF0dXMgb24gb25lIHNoYXJkLlxuICAgKlxuICAgKiBAcGFyYW0gc2hhcmRJZCBUaGUgc2hhcmQgaWQgdG8gZWRpdCB0aGUgc3RhdHVzIGZvci5cbiAgICogQHBhcmFtIGRhdGEgVGhlIHN0YXR1cyBkYXRhIHRvIHNldCB0aGUgYm90cyBzdGF0dXMgdG8uXG4gICAqIEByZXR1cm5zIG5vdGhpbmdcbiAgICovXG4gIGVkaXRTaGFyZFN0YXR1czogKHNoYXJkSWQ6IG51bWJlciwgZGF0YTogU3RhdHVzVXBkYXRlKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIGEgZ3VpbGQgb3ZlciB0aGUgZ2F0ZXdheS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZW1iZXJzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiByZXF1ZXN0aW5nIHRoZSBlbnRpcmUgbWVtYmVyIGxpc3Q6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBHVUlMRF9NRU1CRVJTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgcHJlc2VuY2VzICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy5wcmVzZW5jZXMgfCBwcmVzZW5jZXN9IHNldCB0byBgdHJ1ZWApOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgR1VJTERfUFJFU0VOQ0VTYCBpbnRlbnQuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSBwcmVmaXggKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnF1ZXJ5IHwgcXVlcnl9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIElmIHJlcXVlc3RpbmcgYSB1c2VycyBieSBJRCAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMudXNlcklkcyB8IHVzZXJJZHN9IG5vbi1gdW5kZWZpbmVkYCk6XG4gICAqIC0gUmV0dXJucyBhIG1heGltdW0gb2YgMTAwIG1lbWJlcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlcnMgQ2h1bmtfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IDEwMDAgbWVtYmVycyBmZXRjaGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNyZXF1ZXN0LWd1aWxkLW1lbWJlcnN9XG4gICAqL1xuICByZXF1ZXN0TWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IE9taXQ8UmVxdWVzdEd1aWxkTWVtYmVycywgJ2d1aWxkSWQnPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+XG4gIC8qKlxuICAgKiBMZWF2ZXMgdGhlIHZvaWNlIGNoYW5uZWwgdGhlIGJvdCB1c2VyIGlzIGN1cnJlbnRseSBpbi5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgX1VwZGF0ZSBWb2ljZSBTdGF0ZV8gZ2F0ZXdheSBjb21tYW5kIG92ZXIgdGhlIGdhdGV3YXkgYmVoaW5kIHRoZSBzY2VuZXMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgdm9pY2UgY2hhbm5lbCB0byBsZWF2ZSBpcyBpbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfVm9pY2UgU3RhdGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGV9XG4gICAqL1xuICBsZWF2ZVZvaWNlQ2hhbm5lbDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogVGhpcyBtYW5hZ2VycyBjYWNoZSByZWxhdGVkIHNldHRpbmdzLiAqL1xuICBjYWNoZToge1xuICAgIHJlcXVlc3RNZW1iZXJzOiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHJlcXVlc3QgbWVtYmVyIHJlcXVlc3RzIHNob3VsZCBiZSBjYWNoZWQuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICBlbmFibGVkOiBib29sZWFuXG4gICAgICAvKiogVGhlIHBlbmRpbmcgcmVxdWVzdHMuICovXG4gICAgICBwZW5kaW5nOiBDb2xsZWN0aW9uPHN0cmluZywgUmVxdWVzdE1lbWJlclJlcXVlc3Q+XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdE1lbWJlclJlcXVlc3Qge1xuICAvKiogVGhlIHVuaXF1ZSBub25jZSBmb3IgdGhpcyByZXF1ZXN0LiAqL1xuICBub25jZTogc3RyaW5nXG4gIC8qKiBUaGUgcmVzb2x2ZXIgaGFuZGxlciB0byBydW4gd2hlbiBhbGwgbWVtYmVycyBhcnJpdmUuICovXG4gIHJlc29sdmU6ICh2YWx1ZTogQ2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+IHwgUHJvbWlzZUxpa2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+PikgPT4gdm9pZFxuICAvKiogVGhlIG1lbWJlcnMgdGhhdCBoYXZlIGFscmVhZHkgYXJyaXZlZCBmb3IgdGhpcyByZXF1ZXN0LiAqL1xuICBtZW1iZXJzOiBEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUdhdGV3YXlNYW5hZ2VyIiwib3B0aW9ucyIsImNvbm5lY3Rpb25PcHRpb25zIiwiY29ubmVjdGlvbiIsInVybCIsInNoYXJkcyIsInNlc3Npb25TdGFydExpbWl0IiwibWF4Q29uY3VycmVuY3kiLCJyZW1haW5pbmciLCJ0b3RhbCIsInJlc2V0QWZ0ZXIiLCJnYXRld2F5IiwiZXZlbnRzIiwiY29tcHJlc3MiLCJpbnRlbnRzIiwicHJvcGVydGllcyIsIm9zIiwicHJvY2VzcyIsInBsYXRmb3JtIiwiYnJvd3NlciIsImRldmljZSIsInRva2VuIiwidmVyc2lvbiIsInRvdGFsU2hhcmRzIiwibGFzdFNoYXJkSWQiLCJmaXJzdFNoYXJkSWQiLCJ0b3RhbFdvcmtlcnMiLCJzaGFyZHNQZXJXb3JrZXIiLCJzcGF3blNoYXJkRGVsYXkiLCJwcmVmZXJTbmFrZUNhc2UiLCJNYXAiLCJidWNrZXRzIiwiY2FjaGUiLCJyZXF1ZXN0TWVtYmVycyIsImVuYWJsZWQiLCJwZW5kaW5nIiwiQ29sbGVjdGlvbiIsImxvZ2dlciIsInJlc2hhcmRpbmciLCJzaGFyZHNGdWxsUGVyY2VudGFnZSIsImNoZWNrSW50ZXJ2YWwiLCJwZW5kaW5nU2hhcmRzIiwiZ2V0U2Vzc2lvbkluZm8iLCJFcnJvciIsImNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQiLCJ3YXJuIiwibmVlZGVkIiwic2Vzc2lvbkluZm8iLCJpbmZvIiwicGVyY2VudGFnZSIsInJlc2hhcmQiLCJjYWxjdWxhdGVUb3RhbFNoYXJkcyIsImNsZWFyIiwicHJlcGFyZUJ1Y2tldHMiLCJmb3JFYWNoIiwiYnVja2V0IiwiYnVja2V0SWQiLCJ3b3JrZXIiLCJ3b3JrZXJzIiwic2hhcmRJZCIsInF1ZXVlIiwidGVsbFdvcmtlclRvUHJlcGFyZSIsImlkIiwid29ya2VySWQiLCJzaGFyZCIsIlNoYXJkIiwibWVzc2FnZSIsIl9zaGFyZCIsInBheWxvYWQiLCJ0IiwidXBkYXRlR3VpbGRzU2hhcmRJZCIsImQiLCJndWlsZHMiLCJtYXAiLCJnIiwicmVxdWVzdElkZW50aWZ5IiwiaWRlbnRpZnkiLCJzaGFyZElzUmVhZHkiLCJkZWJ1ZyIsImRlbGF5IiwiZ2V0IiwiaWRlbnRpZnlSZXF1ZXN0cyIsInNoaWZ0IiwiZm9yd2FyZFRvQm90Iiwic2V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJwdXNoIiwidGhlbiIsInNoYXJkSXNQZW5kaW5nIiwiZ3VpbGRJZHMiLCJqb2luIiwic2l6ZSIsInZhbHVlcyIsImV2ZW50Iiwib2xkSGFuZGxlciIsIl8iLCJzaHV0ZG93biIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlJlc2hhcmRlZCIsIk1hdGgiLCJjZWlsIiwiY2FsY3VsYXRlV29ya2VySWQiLCJtaW4iLCJpIiwiZmluZCIsInciLCJzb3J0IiwiYSIsImIiLCJzcGF3blNoYXJkcyIsImFsbCIsImVudHJpZXMiLCJ0ZWxsV29ya2VyVG9JZGVudGlmeSIsImNoZWNrSW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwicmVzaGFyZGluZ0luZm8iLCJjb2RlIiwicmVhc29uIiwiY2xlYXJSZXNoYXJkaW5nSW50ZXJ2YWwiLCJjbG9zZSIsImNsZWFySW50ZXJ2YWwiLCJzZW5kUGF5bG9hZCIsInNlbmQiLCJraWxsIiwiZGVsZXRlIiwiY2FsY3VsYXRlU2hhcmRJZCIsImd1aWxkSWQiLCJOdW1iZXIiLCJCaWdJbnQiLCJqb2luVm9pY2VDaGFubmVsIiwiY2hhbm5lbElkIiwib3AiLCJHYXRld2F5T3Bjb2RlcyIsIlZvaWNlU3RhdGVVcGRhdGUiLCJndWlsZF9pZCIsInRvU3RyaW5nIiwiY2hhbm5lbF9pZCIsInNlbGZfbXV0ZSIsInNlbGZNdXRlIiwic2VsZl9kZWFmIiwic2VsZkRlYWYiLCJlZGl0Qm90U3RhdHVzIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJlZGl0U2hhcmRTdGF0dXMiLCJQcmVzZW5jZVVwZGF0ZSIsInNpbmNlIiwiYWZrIiwiYWN0aXZpdGllcyIsInN0YXR1cyIsImxpbWl0IiwiR2F0ZXdheUludGVudHMiLCJHdWlsZE1lbWJlcnMiLCJ1c2VySWRzIiwibGVuZ3RoIiwibWVtYmVycyIsIm5vbmNlIiwicmVqZWN0IiwiUmVxdWVzdEd1aWxkTWVtYmVycyIsInF1ZXJ5IiwidW5kZWZpbmVkIiwicHJlc2VuY2VzIiwidXNlcl9pZHMiLCJsZWF2ZVZvaWNlQ2hhbm5lbCJdLCJtYXBwaW5ncyI6IkFBQUEsa0VBQWtFOzs7OytCQWdCbERBOzs7ZUFBQUE7Ozt1QkFMVDt1QkFDbUM7OERBQ3hCO3dCQUN5Rzs7Ozs7O0FBRXBILFNBQVNBLHFCQUFxQkMsT0FBb0M7SUFDdkUsTUFBTUMsb0JBQW9CRCxRQUFRRSxVQUFVLElBQUk7UUFDOUNDLEtBQUs7UUFDTEMsUUFB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
463
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgQXRMZWFzdE9uZSxcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEdldEdhdGV3YXlCb3QsXG4gIHR5cGUgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICB0eXBlIERpc2NvcmRSZWFkeSxcbiAgR2F0ZXdheUludGVudHMsXG4gIEdhdGV3YXlPcGNvZGVzLFxuICB0eXBlIFJlcXVlc3RHdWlsZE1lbWJlcnMsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgQ29sbGVjdGlvbiwgZGVsYXksIGxvZ2dlciB9IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IFNoYXJkIGZyb20gJy4vU2hhcmQuanMnXG5pbXBvcnQgeyB0eXBlIFNoYXJkRXZlbnRzLCBTaGFyZFNvY2tldENsb3NlQ29kZXMsIHR5cGUgU2hhcmRTb2NrZXRSZXF1ZXN0LCB0eXBlIFN0YXR1c1VwZGF0ZSwgdHlwZSBVcGRhdGVWb2ljZVN0YXRlIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdhdGV3YXlNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucyk6IEdhdGV3YXlNYW5hZ2VyIHtcbiAgY29uc3QgY29ubmVjdGlvbk9wdGlvbnMgPSBvcHRpb25zLmNvbm5lY3Rpb24gPz8ge1xuICAgIHVybDogJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgc2hhcmRzOiAxLFxuICAgIHNlc3Npb25TdGFydExpbWl0OiB7XG4gICAgICBtYXhDb25jdXJyZW5jeTogMSxcbiAgICAgIHJlbWFpbmluZzogMTAwMCxcbiAgICAgIHRvdGFsOiAxMDAwLFxuICAgICAgcmVzZXRBZnRlcjogMTAwMCAqIDYwICogNjAgKiAyNCxcbiAgICB9LFxuICB9XG5cbiAgY29uc3QgZ2F0ZXdheTogR2F0ZXdheU1hbmFnZXIgPSB7XG4gICAgZXZlbnRzOiBvcHRpb25zLmV2ZW50cyA/PyB7fSxcbiAgICBjb21wcmVzczogb3B0aW9ucy5jb21wcmVzcyA/PyBmYWxzZSxcbiAgICBpbnRlbnRzOiBvcHRpb25zLmludGVudHMgPz8gMCxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBvczogb3B0aW9ucy5wcm9wZXJ0aWVzPy5vcyA/PyBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgYnJvd3Nlcjogb3B0aW9ucy5wcm9wZXJ0aWVzPy5icm93c2VyID8/ICdEaXNjb3JkZW5vJyxcbiAgICAgIGRldmljZTogb3B0aW9ucy5wcm9wZXJ0aWVzPy5kZXZpY2UgPz8gJ0Rpc2NvcmRlbm8nLFxuICAgIH0sXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdXJsOiBvcHRpb25zLnVybCA/PyBjb25uZWN0aW9uT3B0aW9ucy51cmwgPz8gJ3dzczovL2dhdGV3YXkuZGlzY29yZC5nZycsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb25PcHRpb25zLFxuICAgIHRvdGFsU2hhcmRzOiBvcHRpb25zLnRvdGFsU2hhcmRzID8/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyA/PyAxLFxuICAgIGxhc3RTaGFyZElkOiBvcHRpb25zLmxhc3RTaGFyZElkID8/IChvcHRpb25zLnRvdGFsU2hhcmRzID8gb3B0aW9ucy50b3RhbFNoYXJkcyAtIDEgOiBjb25uZWN0aW9uT3B0aW9ucyA/IGNvbm5lY3Rpb25PcHRpb25zLnNoYXJkcyAtIDEgOiAwKSxcbiAgICBmaXJzdFNoYXJkSWQ6IG9wdGlvbnMuZmlyc3RTaGFyZElkID8/IDAsXG4gICAgdG90YWxXb3JrZXJzOiBvcHRpb25zLnRvdGFsV29ya2VycyA/PyA0LFxuICAgIHNoYXJkc1Blcldvcmtlcjogb3B0aW9ucy5zaGFyZHNQZXJXb3JrZXIgPz8gMjUsXG4gICAgc3Bhd25TaGFyZERlbGF5OiBvcHRpb25zLnNwYXduU2hhcmREZWxheSA/PyA1MzAwLFxuICAgIHByZWZlclNuYWtlQ2FzZTogb3B0aW9ucy5wcmVmZXJTbmFrZUNhc2UgPz8gZmFsc2UsXG4gICAgc2hhcmRzOiBuZXcgTWFwKCksXG4gICAgYnVja2V0czogbmV3IE1hcCgpLFxuICAgIGNhY2hlOiB7XG4gICAgICByZXF1ZXN0TWVtYmVyczoge1xuICAgICAgICBlbmFibGVkOiBvcHRpb25zLmNhY2hlPy5yZXF1ZXN0TWVtYmVycz8uZW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgICAgcGVuZGluZzogbmV3IENvbGxlY3Rpb24oKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcixcbiAgICByZXNoYXJkaW5nOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgc2hhcmRzRnVsbFBlcmNlbnRhZ2U6IDgwLFxuICAgICAgY2hlY2tJbnRlcnZhbDogMjg4MDAwMDAsXG4gICAgICBzaGFyZHM6IG5ldyBDb2xsZWN0aW9uKCksXG4gICAgICBwZW5kaW5nU2hhcmRzOiBuZXcgQ29sbGVjdGlvbigpLFxuICAgICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnW1Jlc2hhcmRpbmddIHdhcyBlbmFibGVkIGJ1dCBubyBnZXRTZXNzaW9uSW5mbyBoYW5kbGVyIHdhcyBwcm92aWRlZC4gUGxlYXNlIHNldCBhIGhhbmRsZXIgbGlrZTogZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvID0gYXN5bmMgKCkgPT4geyAvLyBpbnNlcnQgY29kZSBoZXJlIHRvIGZldGNoIGdldFNlc3Npb25JbmZvIGZyb20gcmVzdCBwcm9jZXNzLiB9JyxcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNoZWNrSWZSZXNoYXJkaW5nSXNOZWVkZWQoKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLndhcm4oYFtSZXNoYXJkaW5nXSBDaGVja2luZyBpZiByZXNoYXJkaW5nIGlzIG5lZWRlZC5gKVxuICAgICAgICAvLyBSZXNoYXJkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgICBpZiAoIWdhdGV3YXkucmVzaGFyZGluZy5lbmFibGVkKSByZXR1cm4geyBuZWVkZWQ6IGZhbHNlIH1cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgZW5hYmxlZC5gKVxuXG4gICAgICAgIGNvbnN0IHNlc3Npb25JbmZvID0gYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLmdldFNlc3Npb25JbmZvKClcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFNlc3Npb24gaW5mbyByZXRyaWV2ZWQuYClcbiAgICAgICAgLy8gRG9uJ3QgaGF2ZSBlbm91Z2ggaWRlbnRpZnkgbGltaXRzIHRvIHRyeSByZXNoYXJkaW5nXG4gICAgICAgIGlmIChzZXNzaW9uSW5mby5zZXNzaW9uU3RhcnRMaW1pdC5yZW1haW5pbmcgPCBzZXNzaW9uSW5mby5zaGFyZHMpIHJldHVybiB7IG5lZWRlZDogZmFsc2UsIGluZm86IHNlc3Npb25JbmZvIH1cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIEFibGUgdG8gcmVzaGFyZCwgY2hlY2tpbmcgd2hldGhlciBuZWNlc3Nhcnkgbm93LmApXG5cbiAgICAgICAgLy8gMjUwMCBpcyB0aGUgbWF4IGFtb3VudCBvZiBndWlsZHMgYSBzaW5nbGUgc2hhcmQgY2FuIGhhbmRsZVxuICAgICAgICAvLyAxMDAwIGlzIHRoZSBhbW91bnQgb2YgZ3VpbGRzIGRpc2NvcmQgdXNlcyB0byBkZXRlcm1pbmUgaG93IG1hbnkgc2hhcmRzIHRvIHJlY29tbWVuZC5cbiAgICAgICAgLy8gVGhpcyBhbGdvIGhlbHBzIGNoZWNrIGlmIHlvdXIgYm90IGhhcyBncm93biBlbm91Z2ggdG8gcmVzaGFyZC5cbiAgICAgICAgY29uc3QgcGVyY2VudGFnZSA9ICgoMjUwMCAqIHNlc3Npb25JbmZvLnNoYXJkcykgLyAoZ2F0ZXdheS50b3RhbFNoYXJkcyAqIDEwMDApKSAqIDEwMFxuICAgICAgICAvLyBMZXNzIHRoYW4gbmVjZXNzYXJ5JSBiZWluZyB1c2VkIHNvIGRvIG5vdGhpbmdcbiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPCBnYXRld2F5LnJlc2hhcmRpbmcuc2hhcmRzRnVsbFBlcmNlbnRhZ2UpIHJldHVybiB7IG5lZWRlZDogZmFsc2UsIGluZm86IHNlc3Npb25JbmZvIH1cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFJlc2hhcmRpbmcgaXMgbmVlZGVkLmApXG5cbiAgICAgICAgcmV0dXJuIHsgbmVlZGVkOiB0cnVlLCBpbmZvOiBzZXNzaW9uSW5mbyB9XG4gICAgICB9LFxuICAgICAgYXN5bmMgcmVzaGFyZChpbmZvKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLndhcm4oYFtSZXNoYXJkaW5nXSBTdGFydGluZyB0aGUgcmVzaGFyZCBwcm9jZXNzLiBQcmV2aW91cyB0b3RhbCBzaGFyZHMuICR7Z2F0ZXdheS50b3RhbFNoYXJkc31gKVxuICAgICAgICAvLyBTZXQgdmFsdWVzIG9uIGdhdGV3YXlcbiAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyA9IGluZm8uc2hhcmRzXG4gICAgICAgIC8vIEhhbmRsZXMgcHJlcGFyaW5nIG1pZCBzaXplZCBib3RzIGZvciBMQlNcbiAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyA9IGdhdGV3YXkuY2FsY3VsYXRlVG90YWxTaGFyZHMoKVxuICAgICAgICAvLyBTZXQgZmlyc3Qgc2hhcmQgaWQgaWYgcHJvdmlkZWQgaW4gaW5mb1xuICAgICAgICBpZiAodHlwZW9mIGluZm8uZmlyc3RTaGFyZElkID09PSAnbnVtYmVyJykgZ2F0ZXdheS5maXJzdFNoYXJkSWQgPSBpbmZvLmZpcnN0U2hhcmRJZFxuICAgICAgICAvLyBTZXQgbGFzdCBzaGFyZCBpZCBpZiBwcm92aWRlZCBpbiBpbmZvXG4gICAgICAgIGlmICh0eXBlb2YgaW5mby5sYXN0U2hhcmRJZCA9PT0gJ251bWJlcicpIGdhdGV3YXkubGFzdFNoYXJkSWQgPSBpbmZvLmxhc3RTaGFyZElkXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLndhcm4oYFtSZXNoYXJkaW5nXSBTdGFydGluZyB0aGUgcmVzaGFyZCBwcm9jZXNzLiBOZXcgVG90YWwgU2hhcmRzLiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcblxuICAgICAgICAvLyBSZXNldHRpbmcgYnVja2V0c1xuICAgICAgICBnYXRld2F5LmJ1Y2tldHMuY2xlYXIoKVxuICAgICAgICAvLyBSZWZpbGxpbmcgYnVja2V0cyB3aXRoIG5ldyB2YWx1ZXNcbiAgICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgICAgLy8gU1BSRUFEIFRISVMgT1VUIFRPIERJRkZFUkVOVCBXT1JLRVJTIFRPIEJFR0lOIFNUQVJUSU5HIFVQXG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5mb3JFYWNoKGFzeW5jIChidWNrZXQsIGJ1Y2tldElkKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB3b3JrZXIgb2YgYnVja2V0LndvcmtlcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2hhcmRJZCBvZiB3b3JrZXIucXVldWUpIHtcbiAgICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnRlbGxXb3JrZXJUb1ByZXBhcmUod29ya2VyLmlkLCBzaGFyZElkLCBidWNrZXRJZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgYXN5bmMgdGVsbFdvcmtlclRvUHJlcGFyZSh3b3JrZXJJZCwgc2hhcmRJZCwgYnVja2V0SWQpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFRlbGxpbmcgd29ya2VyIHRvIHByZXBhcmUuIFdvcmtlcjogJHt3b3JrZXJJZH0gfCBTaGFyZDogJHtzaGFyZElkfSB8IEJ1Y2tldDogJHtidWNrZXRJZH1gKVxuICAgICAgICBjb25zdCBzaGFyZCA9IG5ldyBTaGFyZCh7XG4gICAgICAgICAgaWQ6IHNoYXJkSWQsXG4gICAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgICAgY29tcHJlc3M6IGdhdGV3YXkuY29tcHJlc3MsXG4gICAgICAgICAgICBpbnRlbnRzOiBnYXRld2F5LmludGVudHMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBnYXRld2F5LnByb3BlcnRpZXMsXG4gICAgICAgICAgICB0b2tlbjogZ2F0ZXdheS50b2tlbixcbiAgICAgICAgICAgIHRvdGFsU2hhcmRzOiBnYXRld2F5LnRvdGFsU2hhcmRzLFxuICAgICAgICAgICAgdXJsOiBnYXRld2F5LnVybCxcbiAgICAgICAgICAgIHZlcnNpb246IGdhdGV3YXkudmVyc2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIElnbm9yZSBldmVudHMgdW50aWwgd2UgYXJlIHJlYWR5XG4gICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICBhc3luYyBtZXNzYWdlKF9zaGFyZCwgcGF5bG9hZCkge1xuICAgICAgICAgICAgICBpZiAocGF5bG9hZC50ID09PSAnUkVBRFknKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnVwZGF0ZUd1aWxkc1NoYXJkSWQoXG4gICAgICAgICAgICAgICAgICAocGF5bG9hZC5kIGFzIERpc2NvcmRSZWFkeSkuZ3VpbGRzLm1hcCgoZykgPT4gZy5pZCksXG4gICAgICAgICAgICAgICAgICBzaGFyZElkLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVlc3RJZGVudGlmeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5pZGVudGlmeShzaGFyZElkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hhcmRJc1JlYWR5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHtzaGFyZElkfSBpcyByZWFkeWApXG4gICAgICAgICAgICBhd2FpdCBkZWxheShnYXRld2F5LnNwYXduU2hhcmREZWxheSlcbiAgICAgICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc29sdmluZyBzaGFyZCBpZGVudGlmeSByZXF1ZXN0YClcbiAgICAgICAgICAgIGdhdGV3YXkuYnVja2V0cy5nZXQoc2hhcmRJZCAlIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSkhLmlkZW50aWZ5UmVxdWVzdHMuc2hpZnQoKT8uKClcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChnYXRld2F5LnByZWZlclNuYWtlQ2FzZSkge1xuICAgICAgICAgIHNoYXJkLmZvcndhcmRUb0JvdCA9IGFzeW5jIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBzaGFyZC5ldmVudHM/Lm1lc3NhZ2U/LihzaGFyZCwgcGF5bG9hZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnYXRld2F5LnJlc2hhcmRpbmcuc2hhcmRzLnNldChzaGFyZElkLCBzaGFyZClcblxuICAgICAgICBjb25zdCBidWNrZXQgPSBnYXRld2F5LmJ1Y2tldHMuZ2V0KHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICAgIGlmICghYnVja2V0KSByZXR1cm5cblxuICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAvLyBNYXJrIHRoYXQgd2UgYXJlIG1ha2luZyBhbiBpZGVudGlmeSByZXF1ZXN0IHNvIGFub3RoZXIgaXMgbm90IG1hZGUuXG4gICAgICAgICAgYnVja2V0LmlkZW50aWZ5UmVxdWVzdHMucHVzaChyZXNvbHZlKVxuICAgICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gaWRlbnRpZnlpbmcgc2hhcmQgIygke3NoYXJkSWR9KS5gKVxuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGlkZW50aWZ5IGFuZCB3aGVuIFJFQURZIGlzIHJlY2VpdmVkIGl0IHdpbGwgcmVzb2x2ZSB0aGUgYWJvdmUgcmVxdWVzdC5cbiAgICAgICAgICBzaGFyZD8uaWRlbnRpZnkoKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIG1hbmFnZXIgdGhhdCB0aGlzIHNoYXJkIGlzIG9ubGluZVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZElzUGVuZGluZyhzaGFyZClcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHVwZGF0ZUd1aWxkc1NoYXJkSWQoZ3VpbGRJZHMsIHNoYXJkSWQpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFtSZXNoYXJkaW5nXSBVcGRhdGluZyB0aGUgZm9sbG93aW5nIGd1aWxkIGlkcyBzaGFyZCB0byAjJHtzaGFyZElkfTogJHtndWlsZElkcy5qb2luKCcsICcpfS4gT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byB1cGRhdGUgeW91ciBjYWNoZSBpZiB5b3UgbmVlZCB0by5gLFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgYXN5bmMgc2hhcmRJc1BlbmRpbmcoc2hhcmQpIHtcbiAgICAgICAgLy8gU2F2ZSB0aGlzIGluIHBlbmRpbmcgYXQgdGhlIG1vbWVudCwgdW50aWwgYWxsIHNoYXJkcyBhcmUgb25saW5lXG4gICAgICAgIGdhdGV3YXkucmVzaGFyZGluZy5wZW5kaW5nU2hhcmRzLnNldChzaGFyZC5pZCwgc2hhcmQpXG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLndhcm4oYFtSZXNoYXJkaW5nXSBTaGFyZCAjJHtzaGFyZC5pZH0gaXMgbm93IHBlbmRpbmdgKVxuICAgICAgICAvLyBDaGVjayBpZiBhbGwgc2hhcmRzIGFyZSBub3cgb25saW5lLlxuICAgICAgICBpZiAoZ2F0ZXdheS5sYXN0U2hhcmRJZCAtIGdhdGV3YXkuZmlyc3RTaGFyZElkICsgMSA+IGdhdGV3YXkucmVzaGFyZGluZy5wZW5kaW5nU2hhcmRzLnNpemUpIHJldHVyblxuICAgICAgICBnYXRld2F5LmxvZ2dlci53YXJuKGBbUmVzaGFyZGluZ10gQWxsIHNoYXJkcyBhcmUgbm93IG9ubGluZS5gKVxuXG4gICAgICAgIC8vIE5ldyBzaGFyZHMgc3RhcnQgcHJvY2Vzc2luZyBldmVudHNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnJlc2hhcmRpbmcucGVuZGluZ1NoYXJkcy52YWx1ZXMoKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgaW4gb3B0aW9ucy5ldmVudHMpIHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4aW5nIHRoaXMgc2VlbXMgY29tcGxleCBhbmQgZG9lc250IHNlZW0gd29ydGggaXQsIGZlZWwgZnJlZSB0byBmaXggaWYgeW91IHdpc2hcbiAgICAgICAgICAgIHNoYXJkLmV2ZW50c1tldmVudF0gPSBvcHRpb25zLmV2ZW50c1tldmVudF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbGQgc2hhcmRzIHN0b3AgcHJvY2Vzc2luZyBldmVudHNcbiAgICAgICAgZm9yIChjb25zdCBzaGFyZCBvZiBnYXRld2F5LnNoYXJkcy52YWx1ZXMoKSkge1xuICAgICAgICAgIGNvbnN0IG9sZEhhbmRsZXIgPSBzaGFyZC5ldmVudHMubWVzc2FnZVxuXG4gICAgICAgICAgLy8gQ2hhbmdlIHdpdGggc3ByZWFkIG9wZXJhdG9yIHRvIG5vdCBhZmZlY3QgbmV3IHNoYXJkcywgYXMgY2hhbmdpbmcgYW55dGhpbmcgb24gc2hhcmQuZXZlbnRzIHdpbGwgZGlyZWN0bHkgY2hhbmdlIG9wdGlvbnMuZXZlbnRzLCB3aGljaCBjaGFuZ2VzIG5ldyBzaGFyZHMnIGV2ZW50c1xuICAgICAgICAgIHNoYXJkLmV2ZW50cyA9IHtcbiAgICAgICAgICAgIC4uLnNoYXJkLmV2ZW50cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFzeW5jIGZ1bmN0aW9uIChfLCBtZXNzYWdlKSB7XG4gICAgICAgICAgICAgIC8vIE1lbWJlciBjaGVja3MgbmVlZCB0byBjb250aW51ZSBidXQgb3RoZXJzIGNhbiBzdG9wXG4gICAgICAgICAgICAgIGlmIChtZXNzYWdlLnQgIT09ICdHVUlMRF9NRU1CRVJTX0NIVU5LJykgcmV0dXJuXG4gICAgICAgICAgICAgIC8vIFByb2Nlc3Mgb25seSB0aGUgY2h1bmtpbmcgZXZlbnRzXG4gICAgICAgICAgICAgIG9sZEhhbmRsZXI/LihzaGFyZCwgbWVzc2FnZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIFNodXR0aW5nIGRvd24gb2xkIHNoYXJkcy5gKVxuICAgICAgICAvLyBDbG9zZSBvbGQgc2hhcmRzXG4gICAgICAgIGF3YWl0IGdhdGV3YXkuc2h1dGRvd24oU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlc2hhcmRlZCwgJ1Jlc2hhcmRlZCEnLCBmYWxzZSlcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIud2FybihgW1Jlc2hhcmRpbmddIENvbXBsZXRlZC5gKVxuXG4gICAgICAgIC8vIFJlcGxhY2Ugb2xkIHNoYXJkc1xuICAgICAgICBnYXRld2F5LnNoYXJkcyA9IGdhdGV3YXkucmVzaGFyZGluZy5zaGFyZHNcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNhbGN1bGF0ZVRvdGFsU2hhcmRzKCkge1xuICAgICAgLy8gQm90cyB1bmRlciAxMDBrIHNlcnZlcnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIExCUy5cbiAgICAgIGlmIChnYXRld2F5LnRvdGFsU2hhcmRzIDwgMTAwKSB7XG4gICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gQ2FsY3VsYXRpbmcgdG90YWwgc2hhcmRzOiAke2dhdGV3YXkudG90YWxTaGFyZHN9YClcbiAgICAgICAgcmV0dXJuIGdhdGV3YXkudG90YWxTaGFyZHNcbiAgICAgIH1cblxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBDYWxjdWxhdGluZyB0b3RhbCBzaGFyZHNgLCBnYXRld2F5LnRvdGFsU2hhcmRzLCBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICAvLyBDYWxjdWxhdGUgYSBtdWx0aXBsZSBvZiBgbWF4Q29uY3VycmVuY3lgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgZ2F0ZXdheS50b3RhbFNoYXJkcyAvXG4gICAgICAgICAgICAvLyBJZiBgbWF4Q29uY3VycmVuY3lgIGlzIDEsIHdlIGNhbiBzYWZlbHkgdXNlIDE2IHRvIGdldCBgdG90YWxTaGFyZHNgIHRvIGJlIGluIGEgbXVsdGlwbGUgb2YgMTYgc28gdGhhdCB3ZSBjYW4gcHJlcGFyZSBib3RzIHdpdGggMTAwayBzZXJ2ZXJzIGZvciBMQlMuXG4gICAgICAgICAgICAoZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5ID09PSAxID8gMTYgOiBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpLFxuICAgICAgICApICogKGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSA9PT0gMSA/IDE2IDogZ2F0ZXdheS5jb25uZWN0aW9uLnNlc3Npb25TdGFydExpbWl0Lm1heENvbmN1cnJlbmN5KVxuICAgICAgKVxuICAgIH0sXG4gICAgY2FsY3VsYXRlV29ya2VySWQoc2hhcmRJZCkge1xuICAgICAgY29uc3Qgd29ya2VySWQgPSBNYXRoLm1pbihzaGFyZElkICUgZ2F0ZXdheS5zaGFyZHNQZXJXb3JrZXIsIGdhdGV3YXkudG90YWxXb3JrZXJzIC0gMSlcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgW0dhdGV3YXldIENhbGN1bGF0aW5nIHdvcmtlcklkOiBTaGFyZDogJHtzaGFyZElkfSAtPiBXb3JrZXI6ICR7d29ya2VySWR9IC0+IFBlciBXb3JrZXI6ICR7Z2F0ZXdheS5zaGFyZHNQZXJXb3JrZXJ9IC0+IFRvdGFsOiAke2dhdGV3YXkudG90YWxXb3JrZXJzfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gd29ya2VySWRcbiAgICB9LFxuICAgIHByZXBhcmVCdWNrZXRzKCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3k7ICsraSkge1xuICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIFByZXBhcmluZyBidWNrZXRzIGZvciBjb25jdXJyZW5jeTogJHtpfWApXG4gICAgICAgIGdhdGV3YXkuYnVja2V0cy5zZXQoaSwge1xuICAgICAgICAgIHdvcmtlcnM6IFtdLFxuICAgICAgICAgIGlkZW50aWZ5UmVxdWVzdHM6IFtdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBPUkdBTklaRSBBTEwgU0hBUkRTIElOVE8gVEhFSVIgT1dOIEJVQ0tFVFNcbiAgICAgIGZvciAobGV0IHNoYXJkSWQgPSBnYXRld2F5LmZpcnN0U2hhcmRJZDsgc2hhcmRJZCA8PSBnYXRld2F5Lmxhc3RTaGFyZElkOyArK3NoYXJkSWQpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBQcmVwYXJpbmcgYnVja2V0cyBmb3Igc2hhcmQ6ICR7c2hhcmRJZH1gKVxuICAgICAgICBpZiAoc2hhcmRJZCA+PSBnYXRld2F5LnRvdGFsU2hhcmRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTaGFyZCAoaWQ6ICR7c2hhcmRJZH0pIGlzIGJpZ2dlciBvciBlcXVhbCB0byB0aGUgdXNlZCBhbW91bnQgb2YgdXNlZCBzaGFyZHMgd2hpY2ggaXMgJHtnYXRld2F5LnRvdGFsU2hhcmRzfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWNrZXRJZCA9IHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3lcbiAgICAgICAgY29uc3QgYnVja2V0ID0gZ2F0ZXdheS5idWNrZXRzLmdldChidWNrZXRJZClcbiAgICAgICAgaWYgKCFidWNrZXQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU2hhcmQgKGlkOiAke3NoYXJkSWR9KSBnb3QgYXNzaWduZWQgdG8gYW4gaWxsZWdhbCBidWNrZXQgaWQ6ICR7YnVja2V0SWR9LCBleHBlY3RlZCBhIGJ1Y2tldCBpZCBiZXR3ZWVuIDAgYW5kICR7XG4gICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSAtIDFcbiAgICAgICAgICAgIH1gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZJTkQgQSBRVUVVRSBJTiBUSElTIEJVQ0tFVCBUSEFUIEhBUyBTUEFDRVxuICAgICAgICAvLyBjb25zdCB3b3JrZXIgPSBidWNrZXQud29ya2Vycy5maW5kKCh3KSA9PiB3LnF1ZXVlLmxlbmd0aCA8IGdhdGV3YXkuc2hhcmRzUGVyV29ya2VyKTtcbiAgICAgICAgY29uc3Qgd29ya2VySWQgPSBnYXRld2F5LmNhbGN1bGF0ZVdvcmtlcklkKHNoYXJkSWQpXG4gICAgICAgIGNvbnN0IHdvcmtlciA9IGJ1Y2tldC53b3JrZXJzLmZpbmQoKHcpID0+IHcuaWQgPT09IHdvcmtlcklkKVxuICAgICAgICBpZiAod29ya2VyKSB7XG4gICAgICAgICAgLy8gSUYgVEhFIFFVRVVFIEhBUyBTUEFDRSBKVVNUIEFERCBJVCBUTyBUSElTIFFVRVVFXG4gICAgICAgICAgd29ya2VyLnF1ZXVlLnB1c2goc2hhcmRJZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWNrZXQud29ya2Vycy5wdXNoKHsgaWQ6IHdvcmtlcklkLCBxdWV1ZTogW3NoYXJkSWRdIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBidWNrZXQgb2YgZ2F0ZXdheS5idWNrZXRzLnZhbHVlcygpKSB7XG4gICAgICAgIGZvciAoY29uc3Qgd29ya2VyIG9mIGJ1Y2tldC53b3JrZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgd29ya2VyLnF1ZXVlID0gd29ya2VyLnF1ZXVlLnNvcnQoKGEsIGIpID0+IGEgLSBiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzcGF3blNoYXJkcygpIHtcbiAgICAgIC8vIFBSRVBBUkVTIEFMTCBTSEFSRFMgSU4gU1BFQ0lGSUMgQlVDS0VUU1xuICAgICAgZ2F0ZXdheS5wcmVwYXJlQnVja2V0cygpXG5cbiAgICAgIC8vIFByZWZlciBjb25jdXJyZW5jeSBvZiBmb3JFYWNoIGluc3RlYWQgb2YgZm9yb2ZcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBbLi4uZ2F0ZXdheS5idWNrZXRzLmVudHJpZXMoKV0ubWFwKGFzeW5jIChbYnVja2V0SWQsIGJ1Y2tldF0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmtlciBvZiBidWNrZXQud29ya2Vycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzaGFyZElkIG9mIHdvcmtlci5xdWV1ZSkge1xuICAgICAgICAgICAgICBhd2FpdCBnYXRld2F5LnRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlci5pZCwgc2hhcmRJZCwgYnVja2V0SWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgLy8gQ2hlY2sgYW5kIHJlc2hhcmQgYXV0b21hdGljYWxseSBpZiBhdXRvIHJlc2hhcmRpbmcgaXMgZW5hYmxlZC5cbiAgICAgIGlmIChnYXRld2F5LnJlc2hhcmRpbmcuZW5hYmxlZCAmJiBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbCAhPT0gLTEpIHtcbiAgICAgICAgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXNoYXJkaW5nSW5mbyA9IGF3YWl0IGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkKClcblxuICAgICAgICAgIGlmIChyZXNoYXJkaW5nSW5mby5uZWVkZWQgJiYgcmVzaGFyZGluZ0luZm8uaW5mbykgYXdhaXQgZ2F0ZXdheS5yZXNoYXJkaW5nLnJlc2hhcmQocmVzaGFyZGluZ0luZm8uaW5mbylcbiAgICAgICAgfSwgZ2F0ZXdheS5yZXNoYXJkaW5nLmNoZWNrSW50ZXJ2YWwpXG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBzaHV0ZG93bihjb2RlLCByZWFzb24sIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsID0gdHJ1ZSkge1xuICAgICAgZ2F0ZXdheS5zaGFyZHMuZm9yRWFjaCgoc2hhcmQpID0+IHNoYXJkLmNsb3NlKGNvZGUsIHJlYXNvbikpXG5cbiAgICAgIGlmIChjbGVhclJlc2hhcmRpbmdJbnRlcnZhbCAmJiBnYXRld2F5LnJlc2hhcmRpbmcuY2hlY2tJbnRlcnZhbElkKSBjbGVhckludGVydmFsKGdhdGV3YXkucmVzaGFyZGluZy5jaGVja0ludGVydmFsSWQpXG5cbiAgICAgIGF3YWl0IGRlbGF5KDUwMDApXG4gICAgfSxcbiAgICBhc3luYyBzZW5kUGF5bG9hZChzaGFyZElkLCBwYXlsb2FkKSB7XG4gICAgICBjb25zdCBzaGFyZCA9IGdhdGV3YXkuc2hhcmRzLmdldChzaGFyZElkKVxuXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmQgKGlkOiAke3NoYXJkSWR9IG5vdCBmb3VuZGApXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNoYXJkLnNlbmQocGF5bG9hZClcbiAgICB9LFxuICAgIGFzeW5jIHRlbGxXb3JrZXJUb0lkZW50aWZ5KHdvcmtlcklkLCBzaGFyZElkLCBidWNrZXRJZCkge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSB0ZWxsIHdvcmtlciB0byBpZGVudGlmeSAoJHt3b3JrZXJJZH0sICR7c2hhcmRJZH0sICR7YnVja2V0SWR9KWApXG4gICAgICBhd2FpdCBnYXRld2F5LmlkZW50aWZ5KHNoYXJkSWQpXG4gICAgfSxcbiAgICBhc3luYyBpZGVudGlmeShzaGFyZElkOiBudW1iZXIpIHtcbiAgICAgIGxldCBzaGFyZCA9IHRoaXMuc2hhcmRzLmdldChzaGFyZElkKVxuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBpZGVudGlmeWluZyAke3NoYXJkID8gJ2V4aXN0aW5nJyA6ICduZXcnfSBzaGFyZCAoJHtzaGFyZElkfSlgKVxuXG4gICAgICBpZiAoIXNoYXJkKSB7XG4gICAgICAgIHNoYXJkID0gbmV3IFNoYXJkKHtcbiAgICAgICAgICBpZDogc2hhcmRJZCxcbiAgICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgICBjb21wcmVzczogdGhpcy5jb21wcmVzcyxcbiAgICAgICAgICAgIGludGVudHM6IHRoaXMuaW50ZW50cyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICAgIHRva2VuOiB0aGlzLnRva2VuLFxuICAgICAgICAgICAgdG90YWxTaGFyZHM6IHRoaXMudG90YWxTaGFyZHMsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXZlbnRzOiBvcHRpb25zLmV2ZW50cyA/PyB7fSxcbiAgICAgICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgICAgICAgIHJlcXVlc3RJZGVudGlmeTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgZ2F0ZXdheS5pZGVudGlmeShzaGFyZElkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2hhcmRJc1JlYWR5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHtzaGFyZElkfSBpcyByZWFkeWApXG4gICAgICAgICAgICBhd2FpdCBkZWxheShnYXRld2F5LnNwYXduU2hhcmREZWxheSlcbiAgICAgICAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc29sdmluZyBzaGFyZCBpZGVudGlmeSByZXF1ZXN0YClcbiAgICAgICAgICAgIGdhdGV3YXkuYnVja2V0cy5nZXQoc2hhcmRJZCAlIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSkhLmlkZW50aWZ5UmVxdWVzdHMuc2hpZnQoKT8uKClcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0aGlzLnByZWZlclNuYWtlQ2FzZSkge1xuICAgICAgICAgIHNoYXJkLmZvcndhcmRUb0JvdCA9IGFzeW5jIChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBzaGFyZCEuZXZlbnRzLm1lc3NhZ2U/LihzaGFyZCEsIHBheWxvYWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaGFyZHMuc2V0KHNoYXJkSWQsIHNoYXJkKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBidWNrZXQgPSBnYXRld2F5LmJ1Y2tldHMuZ2V0KHNoYXJkSWQgJSBnYXRld2F5LmNvbm5lY3Rpb24uc2Vzc2lvblN0YXJ0TGltaXQubWF4Q29uY3VycmVuY3kpXG4gICAgICBpZiAoIWJ1Y2tldCkgcmV0dXJuXG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBNYXJrIHRoYXQgd2UgYXJlIG1ha2luZyBhbiBpZGVudGlmeSByZXF1ZXN0IHNvIGFub3RoZXIgaXMgbm90IG1hZGUuXG4gICAgICAgIGJ1Y2tldC5pZGVudGlmeVJlcXVlc3RzLnB1c2gocmVzb2x2ZSlcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBpZGVudGlmeWluZyBzaGFyZCAjKCR7c2hhcmRJZH0pLmApXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGlkZW50aWZ5IGFuZCB3aGVuIFJFQURZIGlzIHJlY2VpdmVkIGl0IHdpbGwgcmVzb2x2ZSB0aGUgYWJvdmUgcmVxdWVzdC5cbiAgICAgICAgc2hhcmQ/LmlkZW50aWZ5KClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBhc3luYyBraWxsKHNoYXJkSWQ6IG51bWJlcikge1xuICAgICAgY29uc3Qgc2hhcmQgPSB0aGlzLnNoYXJkcy5nZXQoc2hhcmRJZClcbiAgICAgIGlmICghc2hhcmQpIHtcbiAgICAgICAgcmV0dXJuIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0ga2lsbCBzaGFyZCBidXQgbm90IGZvdW5kICgke3NoYXJkSWR9KWApXG4gICAgICB9XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0ga2lsbCBzaGFyZCAoJHtzaGFyZElkfSlgKVxuICAgICAgdGhpcy5zaGFyZHMuZGVsZXRlKHNoYXJkSWQpXG4gICAgICBhd2FpdCBzaGFyZC5zaHV0ZG93bigpXG4gICAgfSxcbiAgICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoX3NoYXJkSWQ6IG51bWJlcikge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSByZXF1ZXN0aW5nIGlkZW50aWZ5YClcbiAgICAgIC8vIGNvbnN0IGJ1Y2tldCA9IGdhdGV3YXkuYnVja2V0cy5nZXQoc2hhcmRJZCAlIGdhdGV3YXkuY29ubmVjdGlvbi5zZXNzaW9uU3RhcnRMaW1pdC5tYXhDb25jdXJyZW5jeSlcbiAgICAgIC8vIGlmICghYnVja2V0KSByZXR1cm5cblxuICAgICAgLy8gcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyAgIGJ1Y2tldC5pZGVudGlmeVJlcXVlc3RzLnB1c2gocmVzb2x2ZSlcbiAgICAgIC8vIH0pXG4gICAgfSxcblxuICAgIC8vIEhlbHBlcnMgbWV0aG9kcyBiZWxvdyB0aGlzXG5cbiAgICBjYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQsIHRvdGFsU2hhcmRzKSB7XG4gICAgICAvLyBJZiBub25lIGlzIHByb3ZpZGVkLCB1c2UgdGhlIHRvdGFsIHNoYXJkcyBudW1iZXIgZnJvbSBnYXRld2F5IG9iamVjdC5cbiAgICAgIGlmICghdG90YWxTaGFyZHMpIHRvdGFsU2hhcmRzID0gZ2F0ZXdheS50b3RhbFNoYXJkc1xuICAgICAgLy8gSWYgaXQgaXMgb25seSAxIHNoYXJkLCBpdCB3aWxsIGFsd2F5cyBiZSBzaGFyZCBpZCAwXG4gICAgICBpZiAodG90YWxTaGFyZHMgPT09IDEpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBjYWxjdWxhdGVTaGFyZElkICgxIHNoYXJkKWApXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gY2FsY3VsYXRlU2hhcmRJZCAoZ3VpbGRJZDogJHtndWlsZElkfSwgdG90YWxTaGFyZHM6ICR7dG90YWxTaGFyZHN9KWApXG4gICAgICByZXR1cm4gTnVtYmVyKChCaWdJbnQoZ3VpbGRJZCkgPj4gMjJuKSAlIEJpZ0ludCh0b3RhbFNoYXJkcykpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5Wb2ljZUNoYW5uZWwoZ3VpbGRJZCwgY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBzaGFyZElkID0gZ2F0ZXdheS5jYWxjdWxhdGVTaGFyZElkKGd1aWxkSWQpXG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gam9pblZvaWNlQ2hhbm5lbCBndWlsZElkOiAke2d1aWxkSWR9IGNoYW5uZWxJZDogJHtjaGFubmVsSWR9YClcblxuICAgICAgYXdhaXQgZ2F0ZXdheS5zZW5kUGF5bG9hZChzaGFyZElkLCB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5Wb2ljZVN0YXRlVXBkYXRlLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgZ3VpbGRfaWQ6IGd1aWxkSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGFubmVsX2lkOiBjaGFubmVsSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBzZWxmX211dGU6IG9wdGlvbnM/LnNlbGZNdXRlID8/IGZhbHNlLFxuICAgICAgICAgIHNlbGZfZGVhZjogb3B0aW9ucz8uc2VsZkRlYWYgPz8gdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RTdGF0dXMoZGF0YSkge1xuICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSBlZGl0Qm90U3RhdHVzIGRhdGE6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YClcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIFsuLi5nYXRld2F5LnNoYXJkcy52YWx1ZXMoKV0ubWFwKGFzeW5jIChzaGFyZCkgPT4ge1xuICAgICAgICAgIGdhdGV3YXkuZWRpdFNoYXJkU3RhdHVzKHNoYXJkLmlkLCBkYXRhKVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNoYXJkU3RhdHVzKHNoYXJkSWQsIGRhdGEpIHtcbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gZWRpdFNoYXJkU3RhdHVzIHNoYXJkSWQ6ICR7c2hhcmRJZH0gLT4gZGF0YTogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKVxuXG4gICAgICBhd2FpdCBnYXRld2F5LnNlbmRQYXlsb2FkKHNoYXJkSWQsIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlByZXNlbmNlVXBkYXRlLFxuICAgICAgICBkOiB7XG4gICAgICAgICAgc2luY2U6IG51bGwsXG4gICAgICAgICAgYWZrOiBmYWxzZSxcbiAgICAgICAgICBhY3Rpdml0aWVzOiBkYXRhLmFjdGl2aXRpZXMsXG4gICAgICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlcXVlc3RNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHNoYXJkSWQgPSBnYXRld2F5LmNhbGN1bGF0ZVNoYXJkSWQoZ3VpbGRJZClcblxuICAgICAgaWYgKGdhdGV3YXkuaW50ZW50cyAmJiAoIW9wdGlvbnM/LmxpbWl0IHx8IG9wdGlvbnMubGltaXQgPiAxKSAmJiAhKGdhdGV3YXkuaW50ZW50cyAmIEdhdGV3YXlJbnRlbnRzLkd1aWxkTWVtYmVycykpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZldGNoIG1vcmUgdGhlbiAxIG1lbWJlciB3aXRob3V0IHRoZSBHVUlMRF9NRU1CRVJTIGludGVudCcpXG5cbiAgICAgIGdhdGV3YXkubG9nZ2VyLmRlYnVnKGBbR2F0ZXdheV0gcmVxdWVzdE1lbWJlcnMgZ3VpbGRJZDogJHtndWlsZElkfSAtPiBkYXRhOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG5cbiAgICAgIGlmIChvcHRpb25zPy51c2VySWRzPy5sZW5ndGgpIHtcbiAgICAgICAgZ2F0ZXdheS5sb2dnZXIuZGVidWcoYFtHYXRld2F5XSByZXF1ZXN0TWVtYmVycyBndWlsZElkOiAke2d1aWxkSWR9IC0+IHNldHRpbmcgdXNlciBsaW1pdCBiYXNlZCBvbiB1c2VySWRzIGxlbmd0aDogJHtvcHRpb25zLnVzZXJJZHMubGVuZ3RofWApXG5cbiAgICAgICAgb3B0aW9ucy5saW1pdCA9IG9wdGlvbnMudXNlcklkcy5sZW5ndGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVtYmVycyA9XG4gICAgICAgICFnYXRld2F5LmNhY2hlLnJlcXVlc3RNZW1iZXJzLmVuYWJsZWQgfHwgIW9wdGlvbnM/Lm5vbmNlXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogbmV3IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgICAgICAgIGlmICghZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5lbmFibGVkIHx8ICFvcHRpb25zPy5ub25jZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJDYW4ndCByZXF1ZXN0IHRoZSBtZW1iZXJzIHdpdGhvdXQgdGhlIG5vbmNlIG9yIHdpdGggdGhlIGZlYXR1cmUgZGlzYWJsZWQuXCIpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5jYWNoZS5yZXF1ZXN0TWVtYmVycy5wZW5kaW5nLnNldChvcHRpb25zLm5vbmNlLCB7XG4gICAgICAgICAgICAgICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICBtZW1iZXJzOiBbXSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuUmVxdWVzdEd1aWxkTWVtYmVycyxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgLy8gSWYgYSBxdWVyeSBpcyBwcm92aWRlZCB1c2UgaXQsIE9SIGlmIGEgbGltaXQgaXMgTk9UIHByb3ZpZGVkIHVzZSBcIlwiXG4gICAgICAgICAgcXVlcnk6IG9wdGlvbnM/LnF1ZXJ5ID8/IChvcHRpb25zPy5saW1pdCA/IHVuZGVmaW5lZCA6ICcnKSxcbiAgICAgICAgICBsaW1pdDogb3B0aW9ucz8ubGltaXQgPz8gMCxcbiAgICAgICAgICBwcmVzZW5jZXM6IG9wdGlvbnM/LnByZXNlbmNlcyA/PyBmYWxzZSxcbiAgICAgICAgICB1c2VyX2lkczogb3B0aW9ucz8udXNlcklkcz8ubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgICAgbm9uY2U6IG9wdGlvbnM/Lm5vbmNlLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGF3YWl0IG1lbWJlcnNcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVWb2ljZUNoYW5uZWwoZ3VpbGRJZCkge1xuICAgICAgY29uc3Qgc2hhcmRJZCA9IGdhdGV3YXkuY2FsY3VsYXRlU2hhcmRJZChndWlsZElkKVxuXG4gICAgICBnYXRld2F5LmxvZ2dlci5kZWJ1ZyhgW0dhdGV3YXldIGxlYXZlVm9pY2VDaGFubmVsIGd1aWxkSWQ6ICR7Z3VpbGRJZH0gU2hhcmQgJHtzaGFyZElkfWApXG5cbiAgICAgIGF3YWl0IGdhdGV3YXkuc2VuZFBheWxvYWQoc2hhcmRJZCwge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuVm9pY2VTdGF0ZVVwZGF0ZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIGd1aWxkX2lkOiBndWlsZElkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhbm5lbF9pZDogbnVsbCxcbiAgICAgICAgICBzZWxmX211dGU6IGZhbHNlLFxuICAgICAgICAgIHNlbGZfZGVhZjogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gZ2F0ZXdheVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUdhdGV3YXlNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgZmlyc3QgU2hhcmQgd2hpY2ggc2hvdWxkIGdldCBjb250cm9sbGVkIGJ5IHRoaXMgbWFuYWdlci5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgZmlyc3RTaGFyZElkPzogbnVtYmVyXG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgbGFzdCBTaGFyZCB3aGljaCBzaG91bGQgZ2V0IGNvbnRyb2xsZWQgYnkgdGhpcyBtYW5hZ2VyLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBsYXN0U2hhcmRJZD86IG51bWJlclxuICAvKipcbiAgICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHNwYXduaW5nIG5leHQgc2hhcmQuIE9QVElNQUwgSVMgQUJPVkUgNTEwMC4gWU9VIERPTidUIFdBTlQgVE8gSElUIFRIRSBSQVRFIExJTUlUISEhXG4gICAqIEBkZWZhdWx0IDUzMDBcbiAgICovXG4gIHNwYXduU2hhcmREZWxheT86IG51bWJlclxuICAvKipcbiAgICogV2hldGhlciB0byBzZW5kIHRoZSBkaXNjb3JkIHBhY2tldHMgaW4gc25ha2UgY2FzZSBmb3JtLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJlZmVyU25ha2VDYXNlPzogYm9vbGVhblxuICAvKipcbiAgICogVG90YWwgYW1vdW50IG9mIHNoYXJkcyB5b3VyIGJvdCB1c2VzLiBVc2VmdWwgZm9yIHplcm8tZG93bnRpbWUgdXBkYXRlcyBvciByZXNoYXJkaW5nLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkcz86IG51bWJlclxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiBzaGFyZHMgdG8gbG9hZCBwZXIgd29ya2VyLlxuICAgKiBAZGVmYXVsdCAyNVxuICAgKi9cbiAgc2hhcmRzUGVyV29ya2VyPzogbnVtYmVyXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgYW1vdW50IG9mIHdvcmtlcnMgdG8gdXNlIGZvciB5b3VyIGJvdC5cbiAgICogQGRlZmF1bHQgNFxuICAgKi9cbiAgdG90YWxXb3JrZXJzPzogbnVtYmVyXG4gIC8qKiBJbXBvcnRhbnQgZGF0YSB3aGljaCBpcyB1c2VkIGJ5IHRoZSBtYW5hZ2VyIHRvIGNvbm5lY3Qgc2hhcmRzIHRvIHRoZSBnYXRld2F5LiAqL1xuICBjb25uZWN0aW9uPzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+XG4gIC8qKiBXaGV0aGVyIGluY29taW5nIHBheWxvYWRzIGFyZSBjb21wcmVzc2VkIHVzaW5nIHpsaWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb21wcmVzcz86IGJvb2xlYW5cbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50cz86IG51bWJlclxuICAvKiogSWRlbnRpZnkgcHJvcGVydGllcyB0byB1c2UgKi9cbiAgcHJvcGVydGllcz86IHtcbiAgICAvKiogT3BlcmF0aW5nIHN5c3RlbSB0aGUgc2hhcmQgcnVucyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZGFyd2luXCIgfCBcImxpbnV4XCIgfCBcIndpbmRvd3NcIlxuICAgICAqL1xuICAgIG9zOiBzdHJpbmdcbiAgICAvKiogVGhlIFwiYnJvd3NlclwiIHdoZXJlIHRoaXMgc2hhcmQgaXMgcnVubmluZyBvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgYnJvd3Nlcjogc3RyaW5nXG4gICAgLyoqIFRoZSBkZXZpY2Ugb24gd2hpY2ggdGhlIHNoYXJkIGlzIHJ1bm5pbmcuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGRldmljZTogc3RyaW5nXG4gIH1cbiAgLyoqIEJvdCB0b2tlbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZCAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKiBUaGUgVVJMIG9mIHRoZSBnYXRld2F5IHdoaWNoIHNob3VsZCBiZSBjb25uZWN0ZWQgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwid3NzOi8vZ2F0ZXdheS5kaXNjb3JkLmdnXCJcbiAgICovXG4gIHVybD86IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb24/OiBudW1iZXJcbiAgLyoqIFRoZSBldmVudHMgaGFuZGxlcnMgKi9cbiAgZXZlbnRzPzogU2hhcmRFdmVudHNcbiAgLyoqIFRoaXMgbWFuYWdlcnMgY2FjaGUgcmVsYXRlZCBzZXR0aW5ncy4gKi9cbiAgY2FjaGU/OiB7XG4gICAgcmVxdWVzdE1lbWJlcnM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHJlcXVlc3QgbWVtYmVyIHJlcXVlc3RzIHNob3VsZCBiZSBjYWNoZWQuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICBlbmFibGVkPzogYm9vbGVhblxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGxvZ2dlciB0aGF0IHRoZSBnYXRld2F5IG1hbmFnZXIgd2lsbCB1c2VcbiAgICogQGRlZmF1bHQgbG9nZ2VyIC8vIFRoZSBsb2dnZXIgZXhwb3J0ZWQgYnkgYEBkaXNjb3JkZW5vL3V0aWxzYFxuICAgKi9cbiAgbG9nZ2VyPzogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheU1hbmFnZXIgZXh0ZW5kcyBSZXF1aXJlZDxDcmVhdGVHYXRld2F5TWFuYWdlck9wdGlvbnM+IHtcbiAgLyoqIFRoZSBtYXggY29uY3VycmVuY3kgYnVja2V0cy4gVGhvc2Ugd2lsbCBiZSBjcmVhdGVkIHdoZW4gdGhlIGBzcGF3blNoYXJkc2AgKHdoaWNoIGNhbGxzIGBwcmVwYXJlQnVja2V0c2AgdW5kZXIgdGhlIGhvb2QpIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiAqL1xuICBidWNrZXRzOiBNYXA8XG4gICAgbnVtYmVyLFxuICAgIHtcbiAgICAgIHdvcmtlcnM6IEFycmF5PHsgaWQ6IG51bWJlcjsgcXVldWU6IG51bWJlcltdIH0+XG4gICAgICAvKiogUmVxdWVzdHMgdG8gaWRlbnRpZnkgc2hhcmRzIGFyZSBtYWRlIGJhc2VkIG9uIHdoZXRoZXIgaXQgaXMgYXZhaWxhYmxlIHRvIGJlIG1hZGUuICovXG4gICAgICBpZGVudGlmeVJlcXVlc3RzOiBBcnJheTwodmFsdWU6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPikgPT4gdm9pZD5cbiAgICB9XG4gID5cbiAgLyoqIFRoZSBzaGFyZHMgdGhhdCBhcmUgY3JlYXRlZC4gKi9cbiAgc2hhcmRzOiBNYXA8bnVtYmVyLCBTaGFyZD5cbiAgLyoqIFRoZSBsb2dnZXIgZm9yIHRoZSBnYXRld2F5IG1hbmFnZXIgKi9cbiAgbG9nZ2VyOiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIEV2ZXJ5dGhpbmcgcmVsYXRlZCB0byByZXNoYXJkaW5nLiAqL1xuICByZXNoYXJkaW5nOiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgYXV0b21hdGVkIHJlc2hhcmRpbmcgc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgJSBvZiBob3cgZnVsbCBhIHNoYXJkIGlzIHdoZW4gcmVzaGFyZGluZyBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuICAgICAqIEBkZWZhdWx0IDgwIGFzIGluIDgwJVxuICAgICAqL1xuICAgIHNoYXJkc0Z1bGxQZXJjZW50YWdlOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLCBvZiBob3cgb2Z0ZW4gdG8gY2hlY2sgd2hldGhlciByZXNoYXJkaW5nIGlzIG5lZWRlZCBhbmQgcmVzaGFyZCBhdXRvbWF0aWNhbGx5LiBTZXQgdG8gLTEgdG8gZGlzYWJsZSBhdXRvIHJlc2hhcmRpbmcuXG4gICAgICogQGRlZmF1bHQgMjg4MDAwMDAgKDggaG91cnMpXG4gICAgICovXG4gICAgY2hlY2tJbnRlcnZhbDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIGludGVydmFsIGlkIG9mIHRoZSBjaGVjayBpbnRlcnZhbC4gVGhpcyBpcyB1c2VkIHRvIGNsZWFyIHRoZSBpbnRlcnZhbCB3aGVuIHRoZSBtYW5hZ2VyIGlzIHNodXRkb3duLlxuICAgICAqL1xuICAgIGNoZWNrSW50ZXJ2YWxJZD86IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkXG4gICAgLyoqIEhvbGRzIHRoZSBzaGFyZHMgdGhhdCByZXNoYXJkaW5nIGhhcyBjcmVhdGVkLiBPbmNlIHJlc2hhcmRpbmcgaXMgZG9uZSwgdGhpcyByZXBsYWNlcyB0aGUgZ2F0ZXdheS5zaGFyZHMgKi9cbiAgICBzaGFyZHM6IENvbGxlY3Rpb248bnVtYmVyLCBTaGFyZD5cbiAgICAvKiogSG9sZHMgdGhlIHBlbmRpbmcgc2hhcmRzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgYW5kIGFyZSBwZW5kaW5nIGFsbCBzaGFyZHMgZmluaXNoIGxvYWRpbmcuICovXG4gICAgcGVuZGluZ1NoYXJkczogQ29sbGVjdGlvbjxudW1iZXIsIFNoYXJkPlxuICAgIC8qKiBIYW5kbGVyIHRvIGdldCBzaGFyZCBjb3VudCBhbmQgb3RoZXIgc2Vzc2lvbiBpbmZvLiAqL1xuICAgIGdldFNlc3Npb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90Pj5cbiAgICAvKiogSGFuZGxlciB0byBlZGl0IHRoZSBzaGFyZCBpZCBvbiBhbnkgY2FjaGVkIGd1aWxkcy4gKi9cbiAgICB1cGRhdGVHdWlsZHNTaGFyZElkOiAoZ3VpbGRJZHM6IHN0cmluZ1tdLCBzaGFyZElkOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD5cbiAgICAvKiogSGFuZGxlciB0byBjaGVjayBpZiByZXNoYXJkaW5nIGlzIG5lY2Vzc2FyeS4gKi9cbiAgICBjaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkOiAoKSA9PiBQcm9taXNlPHsgbmVlZGVkOiBib29sZWFuOyBpbmZvPzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+IH0+XG4gICAgLyoqIEhhbmRsZXIgdG8gYmVnaW4gcmVzaGFyZGluZy4gKi9cbiAgICByZXNoYXJkOiAoaW5mbzogQ2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+ICYgeyBmaXJzdFNoYXJkSWQ/OiBudW1iZXI7IGxhc3RTaGFyZElkPzogbnVtYmVyIH0pID0+IFByb21pc2U8dm9pZD5cbiAgICAvKiogSGFuZGxlciB0byBjb21tdW5pY2F0ZSB0byBhIHdvcmtlciB0aGF0IGEgc2hhcmQgbmVlZHMgdG8gYmUgY3JlYXRlZC4gKi9cbiAgICB0ZWxsV29ya2VyVG9QcmVwYXJlOiAod29ya2VySWQ6IG51bWJlciwgc2hhcmRJZDogbnVtYmVyLCBidWNrZXRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gICAgLyoqIEhhbmRsZXIgdG8gYWxlcnQgdGhlIGdhdGV3YXkgdGhhdCBhIHNoYXJkKHJlc2hhcmRlZCkgaXMgb25saW5lLiBJdCBzaG91bGQgbm93IHdhaXQgZm9yIGFsbCBzaGFyZHMgdG8gYmUgcGVuZGluZyBiZWZvcmUgc2h1dHRpbmcgb2ZmIG9sZCBzaGFyZHMuICovXG4gICAgc2hhcmRJc1BlbmRpbmc6IChzaGFyZDogU2hhcmQpID0+IFByb21pc2U8dm9pZD5cbiAgfVxuICAvKiogRGV0ZXJtaW5lIG1heCBudW1iZXIgb2Ygc2hhcmRzIHRvIHVzZSBiYXNlZCB1cG9uIHRoZSBtYXggY29uY3VycmVuY3kuICovXG4gIGNhbGN1bGF0ZVRvdGFsU2hhcmRzOiAoKSA9PiBudW1iZXJcbiAgLyoqIERldGVybWluZSB0aGUgaWQgb2YgdGhlIHdvcmtlciB3aGljaCBpcyBoYW5kbGluZyBhIHNoYXJkLiAqL1xuICBjYWxjdWxhdGVXb3JrZXJJZDogKHNoYXJkSWQ6IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKiBQcmVwYXJlcyBhbGwgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciBpZGVudGlmeWluZyB0aGUgc2hhcmRzLiAqL1xuICBwcmVwYXJlQnVja2V0czogKCkgPT4gdm9pZFxuICAvKiogU3RhcnQgaWRlbnRpZnlpbmcgYWxsIHRoZSBzaGFyZHMuICovXG4gIHNwYXduU2hhcmRzOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTaHV0ZG93biBhbGwgc2hhcmRzLiAqL1xuICBzaHV0ZG93bjogKGNvZGU6IG51bWJlciwgcmVhc29uOiBzdHJpbmcsIGNsZWFyUmVzaGFyZGluZ0ludGVydmFsPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPlxuICBzZW5kUGF5bG9hZDogKHNoYXJkSWQ6IG51bWJlciwgcGF5bG9hZDogU2hhcmRTb2NrZXRSZXF1ZXN0KSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBBbGxvd3MgdXNlcnMgdG8gaG9vayBpbiBhbmQgY2hhbmdlIHRvIGNvbW11bmljYXRlIHRvIGRpZmZlcmVudCB3b3JrZXJzIGFjcm9zcyBkaWZmZXJlbnQgc2VydmVycyBvciBhbnl0aGluZyB0aGV5IGxpa2UuIEZvciBleGFtcGxlIHVzaW5nIHJlZGlzIHB1YnN1YiB0byB0YWxrIHRvIG90aGVyIHNlcnZlcnMuICovXG4gIHRlbGxXb3JrZXJUb0lkZW50aWZ5OiAod29ya2VySWQ6IG51bWJlciwgc2hhcmRJZDogbnVtYmVyLCBidWNrZXRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBUZWxsIHRoZSBtYW5hZ2VyIHRvIGlkZW50aWZ5IGEgU2hhcmQuIElmIHRoaXMgU2hhcmQgaXMgbm90IGFscmVhZHkgbWFuYWdlZCB0aGlzIHdpbGwgYWxzbyBhZGQgdGhlIFNoYXJkIHRvIHRoZSBtYW5hZ2VyLiAqL1xuICBpZGVudGlmeTogKHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogS2lsbCBhIHNoYXJkLiBDbG9zZSBhIHNoYXJkcyBjb25uZWN0aW9uIHRvIERpc2NvcmQncyBnYXRld2F5IChpZiBhbnkpIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgbWFuYWdlci4gKi9cbiAga2lsbDogKHNoYXJkSWQ6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgdGhlIGJ1Y2tldCBpcyBhbGxvd2VkIHRvIG1ha2UgdGhlIG5leHQgaWRlbnRpZnkgcmVxdWVzdC4gKi9cbiAgcmVxdWVzdElkZW50aWZ5OiAoc2hhcmRJZDogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2Ygc2hhcmRzIGJhc2VkIG9uIHRoZSBndWlsZCBpZCBhbmQgdG90YWwgc2hhcmRzLiAqL1xuICBjYWxjdWxhdGVTaGFyZElkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0b3RhbFNoYXJkcz86IG51bWJlcikgPT4gbnVtYmVyXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0aGUgYm90IHVzZXIgdG8gYSB2b2ljZSBvciBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBfVXBkYXRlIFZvaWNlIFN0YXRlXyBnYXRld2F5IGNvbW1hbmQgb3ZlciB0aGUgZ2F0ZXdheSBiZWhpbmQgdGhlIHNjZW5lcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSB2b2ljZSBjaGFubmVsIHRvIGxlYXZlIGlzIGluLlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHlvdSB3YW50IHRvIGpvaW4uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ09OTkVDVGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfVm9pY2UgU3RhdGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGV9XG4gICAqL1xuICBqb2luVm9pY2VDaGFubmVsOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEF0TGVhc3RPbmU8T21pdDxVcGRhdGVWb2ljZVN0YXRlLCAnZ3VpbGRJZCcgfCAnY2hhbm5lbElkJz4+KSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgYm90IHN0YXR1cyBpbiBhbGwgc2hhcmRzIHRoYXQgdGhpcyBnYXRld2F5IG1hbmFnZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdGF0dXMgZGF0YSB0byBzZXQgdGhlIGJvdHMgc3RhdHVzIHRvLlxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBlZGl0Qm90U3RhdHVzOiAoZGF0YTogU3RhdHVzVXBkYXRlKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgYm90J3Mgc3RhdHVzIG9uIG9uZSBzaGFyZC5cbiAgICpcbiAgICogQHBhcmFtIHNoYXJkSWQgVGhlIHNoYXJkIGlkIHRvIGVkaXQgdGhlIHN0YXR1cyBmb3IuXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBzdGF0dXMgZGF0YSB0byBzZXQgdGhlIGJvdHMgc3RhdHVzIHRvLlxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBlZGl0U2hhcmRTdGF0dXM6IChzaGFyZElkOiBudW1iZXIsIGRhdGE6IFN0YXR1c1VwZGF0ZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvciBhIGd1aWxkIG92ZXIgdGhlIGdhdGV3YXkuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVtYmVycy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgcmVxdWVzdGluZyB0aGUgZW50aXJlIG1lbWJlciBsaXN0OlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIHByZXNlbmNlcyAoe0BsaW5rIFJlcXVlc3RHdWlsZE1lbWJlcnMucHJlc2VuY2VzIHwgcHJlc2VuY2VzfSBzZXQgdG8gYHRydWVgKTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEdVSUxEX1BSRVNFTkNFU2AgaW50ZW50LlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIGEgcHJlZml4ICh7QGxpbmsgUmVxdWVzdEd1aWxkTWVtYmVycy5xdWVyeSB8IHF1ZXJ5fSBub24tYHVuZGVmaW5lZGApOlxuICAgKiAtIFJldHVybnMgYSBtYXhpbXVtIG9mIDEwMCBtZW1iZXJzLlxuICAgKlxuICAgKiBJZiByZXF1ZXN0aW5nIGEgdXNlcnMgYnkgSUQgKHtAbGluayBSZXF1ZXN0R3VpbGRNZW1iZXJzLnVzZXJJZHMgfCB1c2VySWRzfSBub24tYHVuZGVmaW5lZGApOlxuICAgKiAtIFJldHVybnMgYSBtYXhpbXVtIG9mIDEwMCBtZW1iZXJzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXJzIENodW5rXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSAxMDAwIG1lbWJlcnMgZmV0Y2hlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgKi9cbiAgcmVxdWVzdE1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFJlcXVlc3RHdWlsZE1lbWJlcnMsICdndWlsZElkJz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+PlxuICAvKipcbiAgICogTGVhdmVzIHRoZSB2b2ljZSBjaGFubmVsIHRoZSBib3QgdXNlciBpcyBjdXJyZW50bHkgaW4uXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIF9VcGRhdGUgVm9pY2UgU3RhdGVfIGdhdGV3YXkgY29tbWFuZCBvdmVyIHRoZSBnYXRld2F5IGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIHZvaWNlIGNoYW5uZWwgdG8gbGVhdmUgaXMgaW4uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1ZvaWNlIFN0YXRlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgbGVhdmVWb2ljZUNoYW5uZWw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFRoaXMgbWFuYWdlcnMgY2FjaGUgcmVsYXRlZCBzZXR0aW5ncy4gKi9cbiAgY2FjaGU6IHtcbiAgICByZXF1ZXN0TWVtYmVyczoge1xuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIG9yIG5vdCByZXF1ZXN0IG1lbWJlciByZXF1ZXN0cyBzaG91bGQgYmUgY2FjaGVkLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZDogYm9vbGVhblxuICAgICAgLyoqIFRoZSBwZW5kaW5nIHJlcXVlc3RzLiAqL1xuICAgICAgcGVuZGluZzogQ29sbGVjdGlvbjxzdHJpbmcsIFJlcXVlc3RNZW1iZXJSZXF1ZXN0PlxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RNZW1iZXJSZXF1ZXN0IHtcbiAgLyoqIFRoZSB1bmlxdWUgbm9uY2UgZm9yIHRoaXMgcmVxdWVzdC4gKi9cbiAgbm9uY2U6IHN0cmluZ1xuICAvKiogVGhlIHJlc29sdmVyIGhhbmRsZXIgdG8gcnVuIHdoZW4gYWxsIG1lbWJlcnMgYXJyaXZlLiAqL1xuICByZXNvbHZlOiAodmFsdWU6IENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPiB8IFByb21pc2VMaWtlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj4pID0+IHZvaWRcbiAgLyoqIFRoZSBtZW1iZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGFycml2ZWQgZm9yIHRoaXMgcmVxdWVzdC4gKi9cbiAgbWVtYmVyczogRGlzY29yZE1lbWJlcldpdGhVc2VyW11cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVHYXRld2F5TWFuYWdlciIsIm9wdGlvbnMiLCJjb25uZWN0aW9uT3B0aW9ucyIsImNvbm5lY3Rpb24iLCJ1cmwiLCJzaGFyZHMiLCJzZXNzaW9uU3RhcnRMaW1pdCIsIm1heENvbmN1cnJlbmN5IiwicmVtYWluaW5nIiwidG90YWwiLCJyZXNldEFmdGVyIiwiZ2F0ZXdheSIsImV2ZW50cyIsImNvbXByZXNzIiwiaW50ZW50cyIsInByb3BlcnRpZXMiLCJvcyIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImJyb3dzZXIiLCJkZXZpY2UiLCJ0b2tlbiIsInZlcnNpb24iLCJ0b3RhbFNoYXJkcyIsImxhc3RTaGFyZElkIiwiZmlyc3RTaGFyZElkIiwidG90YWxXb3JrZXJzIiwic2hhcmRzUGVyV29ya2VyIiwic3Bhd25TaGFyZERlbGF5IiwicHJlZmVyU25ha2VDYXNlIiwiTWFwIiwiYnVja2V0cyIsImNhY2hlIiwicmVxdWVzdE1lbWJlcnMiLCJlbmFibGVkIiwicGVuZGluZyIsIkNvbGxlY3Rpb24iLCJsb2dnZXIiLCJyZXNoYXJkaW5nIiwic2hhcmRzRnVsbFBlcmNlbnRhZ2UiLCJjaGVja0ludGVydmFsIiwicGVuZGluZ1NoYXJkcyIsImdldFNlc3Npb25JbmZvIiwiRXJyb3IiLCJjaGVja0lmUmVzaGFyZGluZ0lzTmVlZGVkIiwid2FybiIsIm5lZWRlZCIsInNlc3Npb25JbmZvIiwiaW5mbyIsInBlcmNlbnRhZ2UiLCJyZXNoYXJkIiwiY2FsY3VsYXRlVG90YWxTaGFyZHMiLCJjbGVhciIsInByZXBhcmVCdWNrZXRzIiwiZm9yRWFjaCIsImJ1Y2tldCIsImJ1Y2tldElkIiwid29ya2VyIiwid29ya2VycyIsInNoYXJkSWQiLCJxdWV1ZSIsInRlbGxXb3JrZXJUb1ByZXBhcmUiLCJpZCIsIndvcmtlcklkIiwic2hhcmQiLCJTaGFyZCIsIm1lc3NhZ2UiLCJfc2hhcmQiLCJwYXlsb2FkIiwidCIsInVwZGF0ZUd1aWxkc1NoYXJkSWQiLCJkIiwiZ3VpbGRzIiwibWFwIiwiZyIsInJlcXVlc3RJZGVudGlmeSIsImlkZW50aWZ5Iiwic2hhcmRJc1JlYWR5IiwiZGVidWciLCJkZWxheSIsImdldCIsImlkZW50aWZ5UmVxdWVzdHMiLCJzaGlmdCIsImZvcndhcmRUb0JvdCIsInNldCIsIlByb21pc2UiLCJyZXNvbHZlIiwicHVzaCIsInRoZW4iLCJzaGFyZElzUGVuZGluZyIsImd1aWxkSWRzIiwiam9pbiIsInNpemUiLCJ2YWx1ZXMiLCJldmVudCIsIm9sZEhhbmRsZXIiLCJfIiwic2h1dGRvd24iLCJTaGFyZFNvY2tldENsb3NlQ29kZXMiLCJSZXNoYXJkZWQiLCJNYXRoIiwiY2VpbCIsImNhbGN1bGF0ZVdvcmtlcklkIiwibWluIiwiaSIsImZpbmQiLCJ3Iiwic29ydCIsImEiLCJiIiwic3Bhd25TaGFyZHMiLCJhbGwiLCJlbnRyaWVzIiwidGVsbFdvcmtlclRvSWRlbnRpZnkiLCJjaGVja0ludGVydmFsSWQiLCJzZXRJbnRlcnZhbCIsInJlc2hhcmRpbmdJbmZvIiwiY29kZSIsInJlYXNvbiIsImNsZWFyUmVzaGFyZGluZ0ludGVydmFsIiwiY2xvc2UiLCJjbGVhckludGVydmFsIiwic2VuZFBheWxvYWQiLCJzZW5kIiwia2lsbCIsImRlbGV0ZSIsIl9zaGFyZElkIiwiY2FsY3VsYXRlU2hhcmRJZCIsImd1aWxkSWQiLCJOdW1iZXIiLCJCaWdJbnQiLCJqb2luVm9pY2VDaGFubmVsIiwiY2hhbm5lbElkIiwib3AiLCJHYXRld2F5T3Bjb2RlcyIsIlZvaWNlU3RhdGVVcGRhdGUiLCJndWlsZF9pZCIsInRvU3RyaW5nIiwiY2hhbm5lbF9pZCIsInNlbGZfbXV0ZSIsInNlbGZNdXRlIiwic2VsZl9kZWFmIiwic2VsZkRlYWYiLCJlZGl0Qm90U3RhdHVzIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJlZGl0U2hhcmRTdGF0dXMiLCJQcmVzZW5jZVVwZGF0ZSIsInNpbmNlIiwiYWZrIiwiYWN0aXZpdGllcyIsInN0YXR1cyIsImxpbWl0IiwiR2F0ZXdheUludGVudHMiLCJHdWlsZE1lbWJlcnMiLCJ1c2VySWRzIiwibGVuZ3RoIiwibWVtYmVycyIsIm5vbmNlIiwicmVqZWN0IiwiUmVxdWVzdEd1aWxkTWVtYmVycyIsInF1ZXJ5IiwidW5kZWZpbmVkIiwicHJlc2VuY2VzIiwidXNlcl9pZHMiLCJsZWF2ZVZvaWNlQ2hhbm5lbCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFlZ0JBOzs7ZUFBQUE7Ozt1QkFMVDt1QkFDbUM7OERBQ3hCO3dCQUN5Rzs7Ozs7O0FBRXBILFNBQVNBLHFCQUFxQkMsT0FBb0M7SUFDdkUsTUFBTUMsb0JBQW9CRCxRQUFRRSxVQUFVLElBQUk7UUFDOUNDLEtBQUs7UUFDTEMsUUFBUTtRQUNSQyxtQkFBbUI7WUFDakJDLGdCQUFn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
@@ -38,4 +38,4 @@ var ShardSocketCloseCodes;
38
38
  /** Shard is re-identifying therefore the old connection needs to be closed. */ ShardSocketCloseCodes[ShardSocketCloseCodes["ReIdentifying"] = 3066] = "ReIdentifying";
39
39
  })(ShardSocketCloseCodes || (ShardSocketCloseCodes = {}));
40
40
 
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGl2aXR5VHlwZXMsIENhbWVsaXplLCBEaXNjb3JkQWN0aXZpdHksIERpc2NvcmRHYXRld2F5UGF5bG9hZCwgR2F0ZXdheU9wY29kZXMsIFByZXNlbmNlU3RhdHVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM6IG51bWJlclxuICAvKiogSWRlbnRpZnkgcHJvcGVydGllcyB0byB1c2UgKi9cbiAgcHJvcGVydGllczoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsOiBzdHJpbmdcbiAgLyoqIFRoZSBnYXRld2F5IHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uOiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygc2hhcmRzIHRvIGNvbm5lY3QgdG8gYWNyb3NzIHRoZSBlbnRpcmUgYm90LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkczogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRIZWFydCB7XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGVhcnRiZWF0IHdhcyBhY2tub3dsZWRnZWQgYnkgRGlzY29yZCBpbiB0aW1lLiAqL1xuICBhY2tub3dsZWRnZWQ6IGJvb2xlYW5cbiAgLyoqIEludGVydmFsIGJldHdlZW4gaGVhcnRiZWF0cyByZXF1ZXN0ZWQgYnkgRGlzY29yZC4gKi9cbiAgaW50ZXJ2YWw6IG51bWJlclxuICAvKiogSWQgb2YgdGhlIGludGVydmFsLCB3aGljaCBpcyB1c2VkIGZvciBzZW5kaW5nIHRoZSBoZWFydGJlYXRzLiAqL1xuICBpbnRlcnZhbElkPzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqIFVuaXggKGluIG1pbGxpc2Vjb25kcykgdGltZXN0YW1wIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IEFDSyB3YXMgcmVjZWl2ZWQgZnJvbSBEaXNjb3JkLiAqL1xuICBsYXN0QWNrPzogbnVtYmVyXG4gIC8qKiBVbml4IHRpbWVzdGFtcCAoaW4gbWlsbGlzZWNvbmRzKSB3aGVuIHRoZSBsYXN0IGhlYXJ0YmVhdCB3YXMgc2VudC4gKi9cbiAgbGFzdEJlYXQ/OiBudW1iZXJcbiAgLyoqIFJvdW5kIHRyaXAgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSBmcm9tIFNoYXJkIHRvIERpc2NvcmQgYW5kIGJhY2suXG4gICAqIENhbGN1bGF0ZWQgdXNpbmcgdGhlIGhlYXJ0YmVhdCBzeXN0ZW0uXG4gICAqIE5vdGU6IHRoaXMgdmFsdWUgaXMgdW5kZWZpbmVkIHVudGlsIHRoZSBmaXJzdCBoZWFydGJlYXQgdG8gRGlzY29yZCBoYXMgaGFwcGVuZWQuXG4gICAqL1xuICBydHQ/OiBudW1iZXJcbiAgLyoqIElkIG9mIHRoZSB0aW1lb3V0IHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIHNpbmNlIGl0J3MgXCJzcGVjaWFsXCIuICovXG4gIHRpbWVvdXRJZD86IE5vZGVKUy5UaW1lb3V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRFdmVudHMge1xuICAvKiogQSBoZWFydGJlYXQgaGFzIGJlZW4gc2VuZC4gKi9cbiAgaGVhcnRiZWF0PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogQSBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZC4gKi9cbiAgaGVhcnRiZWF0QWNrPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogU2hhcmQgaGFzIHJlY2VpdmVkIGEgSGVsbG8gcGF5bG9hZC4gKi9cbiAgaGVsbG8/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgU2hhcmRzIHNlc3Npb24gaGFzIGJlZW4gaW52YWxpZGF0ZWQuICovXG4gIGludmFsaWRTZXNzaW9uPzogKHNoYXJkOiBTaGFyZCwgcmVzdW1hYmxlOiBib29sZWFuKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN0YXJ0ZWQgYSByZXN1bWUgYWN0aW9uLiAqL1xuICByZXN1bWluZz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3VjY2Vzc2Z1bGx5IHJlc3VtZWQgYW4gb2xkIHNlc3Npb24uICovXG4gIHJlc3VtZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBEaXNjb3JkIGhhcyByZXF1ZXN0ZWQgdGhlIFNoYXJkIHRvIHJlY29ubmVjdC4gKi9cbiAgcmVxdWVzdGVkUmVjb25uZWN0PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIHN0YXJ0ZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgY29ubmVjdGluZz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBpcyBjb25uZWN0ZWQgd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgY29ubmVjdGVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBmcm9tIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBkaXNjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN0YXJ0ZWQgdG8gaWRlbnRpZnkgaXRzZWxmIHRvIERpc2NvcmQuICovXG4gIGlkZW50aWZ5aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBpZGVudGlmaWVkIGl0c2VsZiB3aXRoIERpc2NvcmQuICovXG4gIGlkZW50aWZpZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHJlY2VpdmVkIGEgbWVzc2FnZSBmcm9tIERpc2NvcmQuICovXG4gIG1lc3NhZ2U/OiAoc2hhcmQ6IFNoYXJkLCBwYXlsb2FkOiBDYW1lbGl6ZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQ+KSA9PiB1bmtub3duXG59XG5cbmV4cG9ydCBlbnVtIFNoYXJkU29ja2V0Q2xvc2VDb2RlcyB7XG4gIC8qKiBBIHJlZ3VsYXIgU2hhcmQgc2h1dGRvd24uICovXG4gIFNodXRkb3duID0gMzAwMCxcbiAgLyoqIEEgcmVzdW1lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlcmVmb3JlIHRoZSBvbGQgY29ubmVjdGlvbiBuZWVkcyB0byBiZSBjbG9zZWQuICovXG4gIFJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uID0gMzAyNCxcbiAgLyoqIERpZCBub3QgcmVjZWl2ZSBhIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS5cbiAgICogQ2xvc2luZyB0aGUgc2hhcmQgYW5kIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24uXG4gICAqL1xuICBab21iaWVkQ29ubmVjdGlvbiA9IDMwMTAsXG4gIC8qKiBEaXNjb3JkZW5vJ3MgZ2F0ZXdheSB0ZXN0cyBoYWUgYmVlbiBmaW5pc2hlZCwgdGhlcmVmb3JlIHRoZSBTaGFyZCBjYW4gYmUgdHVybmVkIG9mZi4gKi9cbiAgVGVzdGluZ0ZpbmlzaGVkID0gMzA2NCxcbiAgLyoqIFNwZWNpYWwgY2xvc2UgY29kZSByZXNlcnZlZCBmb3IgRGlzY29yZGVubydzIHplcm8tZG93bnRpbWUgcmVzaGFyZGluZyBzeXN0ZW0uICovXG4gIFJlc2hhcmRlZCA9IDMwNjUsXG4gIC8qKiBTaGFyZCBpcyByZS1pZGVudGlmeWluZyB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVJZGVudGlmeWluZyA9IDMwNjYsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRTb2NrZXRSZXF1ZXN0IHtcbiAgLyoqIFRoZSBPUC1Db2RlIGZvciB0aGUgcGF5bG9hZCB0byBzZW5kLiAqL1xuICBvcDogR2F0ZXdheU9wY29kZXNcbiAgLyoqIFBheWxvYWQgZGF0YS4gKi9cbiAgZDogdW5rbm93blxufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXktZXZlbnRzI3VwZGF0ZS1wcmVzZW5jZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCb3RTdGF0dXNVcGRhdGUge1xuICAvLyAvKiogVW5peCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIG9mIHdoZW4gdGhlIGNsaWVudCB3ZW50IGlkbGUsIG9yIG51bGwgaWYgdGhlIGNsaWVudCBpcyBub3QgaWRsZSAqL1xuICBzaW5jZTogbnVtYmVyIHwgbnVsbFxuICAvKiogVGhlIHVzZXIncyBhY3Rpdml0aWVzICovXG4gIGFjdGl2aXRpZXM6IEJvdEFjdGl2aXR5W11cbiAgLyoqIFRoZSB1c2VyJ3MgbmV3IHN0YXR1cyAqL1xuICBzdGF0dXM6IGtleW9mIHR5cGVvZiBQcmVzZW5jZVN0YXR1c1xufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXktZXZlbnRzI2FjdGl2aXR5LW9iamVjdCAqL1xuZXhwb3J0IGludGVyZmFjZSBCb3RBY3Rpdml0eSB7XG4gIG5hbWU6IHN0cmluZ1xuICB0eXBlOiBBY3Rpdml0eVR5cGVzXG4gIHVybD86IHN0cmluZ1xufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVZvaWNlU3RhdGUge1xuICAvKiogaWQgb2YgdGhlIGd1aWxkICovXG4gIGd1aWxkSWQ6IHN0cmluZ1xuICAvKiogaWQgb2YgdGhlIHZvaWNlIGNoYW5uZWwgY2xpZW50IHdhbnRzIHRvIGpvaW4gKG51bGwgaWYgZGlzY29ubmVjdGluZykgKi9cbiAgY2hhbm5lbElkOiBzdHJpbmcgfCBudWxsXG4gIC8qKiBJcyB0aGUgY2xpZW50IG11dGVkICovXG4gIHNlbGZNdXRlOiBib29sZWFuXG4gIC8qKiBJcyB0aGUgY2xpZW50IGRlYWZlbmVkICovXG4gIHNlbGZEZWFmOiBib29sZWFuXG59XG5cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheS1ldmVudHMjdXBkYXRlLXByZXNlbmNlICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c1VwZGF0ZSB7XG4gIC8vIC8qKiBVbml4IHRpbWUgKGluIG1pbGxpc2Vjb25kcykgb2Ygd2hlbiB0aGUgY2xpZW50IHdlbnQgaWRsZSwgb3IgbnVsbCBpZiB0aGUgY2xpZW50IGlzIG5vdCBpZGxlICovXG4gIC8vIHNpbmNlOiBudW1iZXIgfCBudWxsO1xuICAvKiogVGhlIHVzZXIncyBhY3Rpdml0aWVzICovXG4gIGFjdGl2aXRpZXM/OiBDYW1lbGl6ZTxBcnJheTxPbWl0PERpc2NvcmRBY3Rpdml0eSwgJ2NyZWF0ZWRfYXQnPj4+XG4gIC8qKiBUaGUgdXNlcidzIG5ldyBzdGF0dXMgKi9cbiAgc3RhdHVzOiBrZXlvZiB0eXBlb2YgUHJlc2VuY2VTdGF0dXNcbiAgLy8gLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBjbGllbnQgaXMgYWZrICovXG4gIC8vIGFmazogYm9vbGVhbjtcbn1cbiJdLCJuYW1lcyI6WyJTaGFyZFN0YXRlIiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O1VBR1lBO0lBQ1YsK0VBQStFO0lBRS9FLDJIQUEySDtJQUUzSCx1RUFBdUU7SUFFdkUsK0hBQStIO0lBRS9ILDBFQUEwRTtJQUUxRSwwREFBMEQ7SUFFMUQsa0hBQWtIO0dBYnhHQSxlQUFBQTs7VUFrSEFDO0lBQ1YsOEJBQThCO0lBRTlCLHFGQUFxRjtJQUVyRjs7R0FFQztJQUVELHlGQUF5RjtJQUV6RixrRkFBa0Y7SUFFbEYsNkVBQTZFO0dBYm5FQSwwQkFBQUEifQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGl2aXR5VHlwZXMsIENhbWVsaXplLCBEaXNjb3JkQWN0aXZpdHksIERpc2NvcmRHYXRld2F5UGF5bG9hZCwgR2F0ZXdheU9wY29kZXMsIFByZXNlbmNlU3RhdHVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgaW5jb21pbmcgcGF5bG9hZHMgYXJlIGNvbXByZXNzZWQgdXNpbmcgemxpYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKiBUaGUgY2FsY3VsYXRlZCBpbnRlbnQgdmFsdWUgb2YgdGhlIGV2ZW50cyB3aGljaCB0aGUgc2hhcmQgc2hvdWxkIHJlY2VpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGludGVudHM6IG51bWJlclxuICAvKiogSWRlbnRpZnkgcHJvcGVydGllcyB0byB1c2UgKi9cbiAgcHJvcGVydGllczoge1xuICAgIC8qKiBPcGVyYXRpbmcgc3lzdGVtIHRoZSBzaGFyZCBydW5zIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJkYXJ3aW5cIiB8IFwibGludXhcIiB8IFwid2luZG93c1wiXG4gICAgICovXG4gICAgb3M6IHN0cmluZ1xuICAgIC8qKiBUaGUgXCJicm93c2VyXCIgd2hlcmUgdGhpcyBzaGFyZCBpcyBydW5uaW5nIG9uLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBicm93c2VyOiBzdHJpbmdcbiAgICAvKiogVGhlIGRldmljZSBvbiB3aGljaCB0aGUgc2hhcmQgaXMgcnVubmluZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiRGlzY29yZGVub1wiXG4gICAgICovXG4gICAgZGV2aWNlOiBzdHJpbmdcbiAgfVxuICAvKiogQm90IHRva2VuIHdoaWNoIGlzIHVzZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBVUkwgb2YgdGhlIGdhdGV3YXkgd2hpY2ggc2hvdWxkIGJlIGNvbm5lY3RlZCB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ3c3M6Ly9nYXRld2F5LmRpc2NvcmQuZ2dcIlxuICAgKi9cbiAgdXJsOiBzdHJpbmdcbiAgLyoqIFRoZSBnYXRld2F5IHZlcnNpb24gd2hpY2ggc2hvdWxkIGJlIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uOiBudW1iZXJcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygc2hhcmRzIHRvIGNvbm5lY3QgdG8gYWNyb3NzIHRoZSBlbnRpcmUgYm90LlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB0b3RhbFNoYXJkczogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRIZWFydCB7XG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgaGVhcnRiZWF0IHdhcyBhY2tub3dsZWRnZWQgYnkgRGlzY29yZCBpbiB0aW1lLiAqL1xuICBhY2tub3dsZWRnZWQ6IGJvb2xlYW5cbiAgLyoqIEludGVydmFsIGJldHdlZW4gaGVhcnRiZWF0cyByZXF1ZXN0ZWQgYnkgRGlzY29yZC4gKi9cbiAgaW50ZXJ2YWw6IG51bWJlclxuICAvKiogSWQgb2YgdGhlIGludGVydmFsLCB3aGljaCBpcyB1c2VkIGZvciBzZW5kaW5nIHRoZSBoZWFydGJlYXRzLiAqL1xuICBpbnRlcnZhbElkPzogTm9kZUpTLlRpbWVvdXRcbiAgLyoqIFVuaXggKGluIG1pbGxpc2Vjb25kcykgdGltZXN0YW1wIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IEFDSyB3YXMgcmVjZWl2ZWQgZnJvbSBEaXNjb3JkLiAqL1xuICBsYXN0QWNrPzogbnVtYmVyXG4gIC8qKiBVbml4IHRpbWVzdGFtcCAoaW4gbWlsbGlzZWNvbmRzKSB3aGVuIHRoZSBsYXN0IGhlYXJ0YmVhdCB3YXMgc2VudC4gKi9cbiAgbGFzdEJlYXQ/OiBudW1iZXJcbiAgLyoqIFJvdW5kIHRyaXAgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSBmcm9tIFNoYXJkIHRvIERpc2NvcmQgYW5kIGJhY2suXG4gICAqIENhbGN1bGF0ZWQgdXNpbmcgdGhlIGhlYXJ0YmVhdCBzeXN0ZW0uXG4gICAqIE5vdGU6IHRoaXMgdmFsdWUgaXMgdW5kZWZpbmVkIHVudGlsIHRoZSBmaXJzdCBoZWFydGJlYXQgdG8gRGlzY29yZCBoYXMgaGFwcGVuZWQuXG4gICAqL1xuICBydHQ/OiBudW1iZXJcbiAgLyoqIElkIG9mIHRoZSB0aW1lb3V0IHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIHNpbmNlIGl0J3MgXCJzcGVjaWFsXCIuICovXG4gIHRpbWVvdXRJZD86IE5vZGVKUy5UaW1lb3V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRFdmVudHMge1xuICAvKiogQSBoZWFydGJlYXQgaGFzIGJlZW4gc2VuZC4gKi9cbiAgaGVhcnRiZWF0PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogQSBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZC4gKi9cbiAgaGVhcnRiZWF0QWNrPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogU2hhcmQgaGFzIHJlY2VpdmVkIGEgSGVsbG8gcGF5bG9hZC4gKi9cbiAgaGVsbG8/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgU2hhcmRzIHNlc3Npb24gaGFzIGJlZW4gaW52YWxpZGF0ZWQuICovXG4gIGludmFsaWRTZXNzaW9uPzogKHNoYXJkOiBTaGFyZCwgcmVzdW1hYmxlOiBib29sZWFuKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN0YXJ0ZWQgYSByZXN1bWUgYWN0aW9uLiAqL1xuICByZXN1bWluZz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3VjY2Vzc2Z1bGx5IHJlc3VtZWQgYW4gb2xkIHNlc3Npb24uICovXG4gIHJlc3VtZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBEaXNjb3JkIGhhcyByZXF1ZXN0ZWQgdGhlIFNoYXJkIHRvIHJlY29ubmVjdC4gKi9cbiAgcmVxdWVzdGVkUmVjb25uZWN0PzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIHN0YXJ0ZWQgdG8gY29ubmVjdCB0byBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgY29ubmVjdGluZz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBpcyBjb25uZWN0ZWQgd2l0aCBEaXNjb3JkJ3MgZ2F0ZXdheS4gKi9cbiAgY29ubmVjdGVkPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBmcm9tIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBkaXNjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN0YXJ0ZWQgdG8gaWRlbnRpZnkgaXRzZWxmIHRvIERpc2NvcmQuICovXG4gIGlkZW50aWZ5aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgYmVlbiBpZGVudGlmaWVkIGl0c2VsZiB3aXRoIERpc2NvcmQuICovXG4gIGlkZW50aWZpZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHJlY2VpdmVkIGEgbWVzc2FnZSBmcm9tIERpc2NvcmQuICovXG4gIG1lc3NhZ2U/OiAoc2hhcmQ6IFNoYXJkLCBwYXlsb2FkOiBDYW1lbGl6ZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQ+KSA9PiB1bmtub3duXG59XG5cbmV4cG9ydCBlbnVtIFNoYXJkU29ja2V0Q2xvc2VDb2RlcyB7XG4gIC8qKiBBIHJlZ3VsYXIgU2hhcmQgc2h1dGRvd24uICovXG4gIFNodXRkb3duID0gMzAwMCxcbiAgLyoqIEEgcmVzdW1lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlcmVmb3JlIHRoZSBvbGQgY29ubmVjdGlvbiBuZWVkcyB0byBiZSBjbG9zZWQuICovXG4gIFJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uID0gMzAyNCxcbiAgLyoqIERpZCBub3QgcmVjZWl2ZSBhIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS5cbiAgICogQ2xvc2luZyB0aGUgc2hhcmQgYW5kIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24uXG4gICAqL1xuICBab21iaWVkQ29ubmVjdGlvbiA9IDMwMTAsXG4gIC8qKiBEaXNjb3JkZW5vJ3MgZ2F0ZXdheSB0ZXN0cyBoYWUgYmVlbiBmaW5pc2hlZCwgdGhlcmVmb3JlIHRoZSBTaGFyZCBjYW4gYmUgdHVybmVkIG9mZi4gKi9cbiAgVGVzdGluZ0ZpbmlzaGVkID0gMzA2NCxcbiAgLyoqIFNwZWNpYWwgY2xvc2UgY29kZSByZXNlcnZlZCBmb3IgRGlzY29yZGVubydzIHplcm8tZG93bnRpbWUgcmVzaGFyZGluZyBzeXN0ZW0uICovXG4gIFJlc2hhcmRlZCA9IDMwNjUsXG4gIC8qKiBTaGFyZCBpcyByZS1pZGVudGlmeWluZyB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVJZGVudGlmeWluZyA9IDMwNjYsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRTb2NrZXRSZXF1ZXN0IHtcbiAgLyoqIFRoZSBPUC1Db2RlIGZvciB0aGUgcGF5bG9hZCB0byBzZW5kLiAqL1xuICBvcDogR2F0ZXdheU9wY29kZXNcbiAgLyoqIFBheWxvYWQgZGF0YS4gKi9cbiAgZDogdW5rbm93blxufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXktZXZlbnRzI3VwZGF0ZS1wcmVzZW5jZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCb3RTdGF0dXNVcGRhdGUge1xuICAvLyAvKiogVW5peCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIG9mIHdoZW4gdGhlIGNsaWVudCB3ZW50IGlkbGUsIG9yIG51bGwgaWYgdGhlIGNsaWVudCBpcyBub3QgaWRsZSAqL1xuICBzaW5jZTogbnVtYmVyIHwgbnVsbFxuICAvKiogVGhlIHVzZXIncyBhY3Rpdml0aWVzICovXG4gIGFjdGl2aXRpZXM6IEJvdEFjdGl2aXR5W11cbiAgLyoqIFRoZSB1c2VyJ3MgbmV3IHN0YXR1cyAqL1xuICBzdGF0dXM6IGtleW9mIHR5cGVvZiBQcmVzZW5jZVN0YXR1c1xufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXktZXZlbnRzI2FjdGl2aXR5LW9iamVjdCAqL1xuZXhwb3J0IGludGVyZmFjZSBCb3RBY3Rpdml0eSB7XG4gIG5hbWU6IHN0cmluZ1xuICB0eXBlOiBBY3Rpdml0eVR5cGVzXG4gIHVybD86IHN0cmluZ1xufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVZvaWNlU3RhdGUge1xuICAvKiogaWQgb2YgdGhlIGd1aWxkICovXG4gIGd1aWxkSWQ6IHN0cmluZ1xuICAvKiogaWQgb2YgdGhlIHZvaWNlIGNoYW5uZWwgY2xpZW50IHdhbnRzIHRvIGpvaW4gKG51bGwgaWYgZGlzY29ubmVjdGluZykgKi9cbiAgY2hhbm5lbElkOiBzdHJpbmcgfCBudWxsXG4gIC8qKiBJcyB0aGUgY2xpZW50IG11dGVkICovXG4gIHNlbGZNdXRlOiBib29sZWFuXG4gIC8qKiBJcyB0aGUgY2xpZW50IGRlYWZlbmVkICovXG4gIHNlbGZEZWFmOiBib29sZWFuXG59XG5cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheS1ldmVudHMjdXBkYXRlLXByZXNlbmNlICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c1VwZGF0ZSB7XG4gIC8vIC8qKiBVbml4IHRpbWUgKGluIG1pbGxpc2Vjb25kcykgb2Ygd2hlbiB0aGUgY2xpZW50IHdlbnQgaWRsZSwgb3IgbnVsbCBpZiB0aGUgY2xpZW50IGlzIG5vdCBpZGxlICovXG4gIC8vIHNpbmNlOiBudW1iZXIgfCBudWxsO1xuICAvKiogVGhlIHVzZXIncyBhY3Rpdml0aWVzICovXG4gIGFjdGl2aXRpZXM/OiBDYW1lbGl6ZTxPbWl0PERpc2NvcmRBY3Rpdml0eSwgJ2NyZWF0ZWRfYXQnPltdPlxuICAvKiogVGhlIHVzZXIncyBuZXcgc3RhdHVzICovXG4gIHN0YXR1czoga2V5b2YgdHlwZW9mIFByZXNlbmNlU3RhdHVzXG4gIC8vIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2xpZW50IGlzIGFmayAqL1xuICAvLyBhZms6IGJvb2xlYW47XG59XG4iXSwibmFtZXMiOlsiU2hhcmRTdGF0ZSIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztVQUdZQTtJQUNWLCtFQUErRTtJQUUvRSwySEFBMkg7SUFFM0gsdUVBQXVFO0lBRXZFLCtIQUErSDtJQUUvSCwwRUFBMEU7SUFFMUUsMERBQTBEO0lBRTFELGtIQUFrSDtHQWJ4R0EsZUFBQUE7O1VBa0hBQztJQUNWLDhCQUE4QjtJQUU5QixxRkFBcUY7SUFFckY7O0dBRUM7SUFFRCx5RkFBeUY7SUFFekYsa0ZBQWtGO0lBRWxGLDZFQUE2RTtHQWJuRUEsMEJBQUFBIn0=