botframework-directlinejs 0.15.6 → 0.15.7-master.8adbe6f

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.
@@ -261,6 +261,7 @@ export interface User {
261
261
  iconUrl?: string;
262
262
  role?: UserRole;
263
263
  }
264
+ export type DeliveryMode = "normal" | "stream";
264
265
  export interface IActivity {
265
266
  type: string;
266
267
  channelData?: any;
@@ -272,6 +273,7 @@ export interface IActivity {
272
273
  from: User;
273
274
  id?: string;
274
275
  timestamp?: string;
276
+ deliveryMode?: DeliveryMode;
275
277
  }
276
278
  export type AttachmentLayout = "list" | "carousel";
277
279
  export interface Message extends IActivity {
@@ -323,6 +325,12 @@ export interface DirectLineOptions {
323
325
  timeout?: number;
324
326
  botAgent?: string;
325
327
  conversationStartProperties?: any;
328
+ /**
329
+ * Per-conversation switch for streaming delivery mode.
330
+ * If true, every outgoing activity will include deliveryMode: 'stream'.
331
+ * If false/omitted, deliveryMode is not sent (defaults to 'normal' in ABS).
332
+ */
333
+ streaming?: boolean;
326
334
  }
327
335
  export interface Services {
328
336
  scheduler: IScheduler;
@@ -359,6 +367,7 @@ export declare class DirectLine implements IBotConnection {
359
367
  private userIdOnStartConversation;
360
368
  private pollingInterval;
361
369
  private tokenRefreshSubscription;
370
+ private streaming;
362
371
  constructor(options: DirectLineOptions & Partial<Services>);
363
372
  private checkConnection;
364
373
  setConnectionStatusFallback(connectionStatusFrom: ConnectionStatus, connectionStatusTo: ConnectionStatus, maxAttempts?: number): (status: ConnectionStatus) => ConnectionStatus;
package/lib/directLine.js CHANGED
@@ -144,6 +144,9 @@ var DirectLine = /*#__PURE__*/function () {
144
144
  this.secret = options.secret;
145
145
  this.token = options.secret || options.token;
146
146
  this.webSocket = (options.webSocket === undefined ? true : options.webSocket) && typeof WebSocket !== 'undefined' && WebSocket !== undefined;
147
+ if (options.streaming) {
148
+ this.streaming = options.streaming;
149
+ }
147
150
  if (options.conversationStartProperties && options.conversationStartProperties.locale) {
148
151
  if (Object.prototype.toString.call(options.conversationStartProperties.locale) === '[object String]') {
149
152
  this.localeOnStartConversation = options.conversationStartProperties.locale;
@@ -384,6 +387,12 @@ var DirectLine = /*#__PURE__*/function () {
384
387
  key: "postActivity",
385
388
  value: function postActivity(activity) {
386
389
  var _this6 = this;
390
+ // If streaming is enabled for this DirectLine instance, always set deliveryMode to 'stream'
391
+ // default would be 'normal' and not passing anything meaning 'normal' as well on ABS side
392
+ if (this.streaming) {
393
+ activity.deliveryMode = 'stream';
394
+ }
395
+
387
396
  // If user id is set, check if it match activity.from.id and always override it in activity
388
397
  if (this.userIdOnStartConversation && activity.from && activity.from.id !== this.userIdOnStartConversation) {
389
398
  console.warn('DirectLineJS: Activity.from.id does not match with user id, ignoring activity.from.id');
@@ -682,7 +691,7 @@ var DirectLine = /*#__PURE__*/function () {
682
691
  if (customAgent) {
683
692
  clientAgent += "; ".concat(customAgent);
684
693
  }
685
- return "".concat(DIRECT_LINE_VERSION, " (").concat(clientAgent, " ").concat("0.15.6", ")");
694
+ return "".concat(DIRECT_LINE_VERSION, " (").concat(clientAgent, " ").concat("0.15.7-master.8adbe6f", ")");
686
695
  }
687
696
  }, {
688
697
  key: "setUserId",
@@ -716,4 +725,4 @@ var DirectLine = /*#__PURE__*/function () {
716
725
  return DirectLine;
717
726
  }();
718
727
  exports.DirectLine = DirectLine;
719
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwiX0JlaGF2aW9yU3ViamVjdCIsIl9PYnNlcnZhYmxlIiwiX2FzeW5jIiwiX2p3dERlY29kZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2RlZHVwZUZpbGVuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZGlyZWN0TGluZVN0cmVhbWluZyIsIl9leGNsdWRlZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJESVJFQ1RfTElORV9WRVJTSU9OIiwiQ29ubmVjdGlvblN0YXR1cyIsImV4cG9ydHMiLCJ3cmFwQWpheFdpdGhSZXRyeSIsInNjaGVkdWxlciIsIm5vdEltcGxlbWVudGVkIiwiRXJyb3IiLCJpbm5lciIsInJlc3BvbnNlJCIsImVyciIsInN0YXR1cyIsInJldHJ5QWZ0ZXJWYWx1ZSIsInhociIsImdldFJlc3BvbnNlSGVhZGVyIiwicmV0cnlBZnRlciIsIk51bWJlciIsImlzTmFOIiwiT2JzZXJ2YWJsZSIsInRpbWVyIiwiZmxhdE1hcCIsIl8iLCJvdXRlciIsInVybE9yUmVxdWVzdCIsImFzc2lnbiIsInVybCIsImhlYWRlcnMiLCJwb3N0IiwiYm9keSIsInB1dCIsInBhdGNoIiwiX2RlbGV0ZSIsImdldEpTT04iLCJtYWtlU2VydmljZXMiLCJzZXJ2aWNlcyIsIkFzeW5jU2NoZWR1bGVyIiwiYWpheCIsIldlYlNvY2tldCIsInJhbmRvbSIsIk1hdGgiLCJsaWZldGltZVJlZnJlc2hUb2tlbiIsImludGVydmFsUmVmcmVzaFRva2VuIiwiUE9MTElOR19JTlRFUlZBTF9MT1dFUl9CT1VORCIsImVycm9yRXhwaXJlZFRva2VuIiwiZXJyb3JDb252ZXJzYXRpb25FbmRlZCIsImVycm9yRmFpbGVkVG9Db25uZWN0Iiwia29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJfY29uc29sZSIsIl9sZW4iLCJvcHRpb25hbFBhcmFtcyIsIkFycmF5IiwiX2tleSIsIndpbmRvdyIsImNvbnNvbGUiLCJjb25jYXQiLCJEaXJlY3RMaW5lIiwib3B0aW9ucyIsIl9jbGFzc0NhbGxDaGVjazIiLCJCZWhhdmlvclN1YmplY3QiLCJVbmluaXRpYWxpemVkIiwic2VjcmV0IiwidG9rZW4iLCJ3ZWJTb2NrZXQiLCJ1bmRlZmluZWQiLCJjb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMiLCJsb2NhbGUiLCJ0b1N0cmluZyIsImxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb24iLCJ3YXJuIiwiZG9tYWluIiwiY29udmVyc2F0aW9uSWQiLCJ3YXRlcm1hcmsiLCJzdHJlYW1VcmwiLCJ0aW1lb3V0IiwicmV0cmllcyIsIl9ib3RBZ2VudCIsImdldEJvdEFnZW50IiwiYm90QWdlbnQiLCJwYXJzZWRQb2xsaW5nSW50ZXJ2YWwiLCJwb2xsaW5nSW50ZXJ2YWwiLCJleHBpcmVkVG9rZW5FeGhhdXN0aW9uIiwic2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrIiwiRXhwaXJlZFRva2VuIiwiRmFpbGVkVG9Db25uZWN0IiwiYWN0aXZpdHkkIiwid2ViU29ja2V0QWN0aXZpdHkkIiwicG9sbGluZ0dldEFjdGl2aXR5JCIsInNoYXJlIiwiX2NyZWF0ZUNsYXNzMiIsInZhbHVlIiwiY2hlY2tDb25uZWN0aW9uIiwiX3RoaXMiLCJvbmNlIiwib2JzIiwiY29ubmVjdGlvblN0YXR1cyQiLCJjb25uZWN0aW9uU3RhdHVzIiwibmV4dCIsIkNvbm5lY3RpbmciLCJPbmxpbmUiLCJvZiIsInN0YXJ0Q29udmVyc2F0aW9uIiwiY29udmVyc2F0aW9uIiwicmVmZXJlbmNlR3JhbW1hcklkIiwicmVmcmVzaFRva2VuTG9vcCIsImVycm9yIiwibWFwIiwiRW5kZWQiLCJ0YWtlIiwiY29ubmVjdGlvblN0YXR1c0Zyb20iLCJjb25uZWN0aW9uU3RhdHVzVG8iLCJtYXhBdHRlbXB0cyIsImF0dGVtcHRzIiwiY3VyclN0YXR1cyIsImV4cGlyZWRUb2tlbiIsImdldFZhbHVlIiwicHJvdGVjdGVkQ29ubmVjdGlvblN0YXR1cyIsIl90aGlzMiIsIm1ldGhvZCIsInVzZXIiLCJpZCIsInVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24iLCJjb21tb25IZWFkZXJzIiwiYWpheFJlc3BvbnNlIiwicmVzcG9uc2UiLCJyZXRyeVdoZW4iLCJlcnJvciQiLCJtZXJnZU1hcCIsImRlbGF5IiwiX3RoaXMzIiwidG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uIiwiaW50ZXJ2YWwiLCJyZWZyZXNoVG9rZW4iLCJzdWJzY3JpYmUiLCJEYXRlIiwiX3RoaXM0IiwicmVjb25uZWN0IiwiZW5kIiwidW5zdWJzY3JpYmUiLCJlIiwiZ2V0U2Vzc2lvbklkIiwiX3RoaXM1Iiwid2l0aENyZWRlbnRpYWxzIiwic2Vzc2lvbklkIiwiY2F0Y2hFeHBpcmVkVG9rZW4iLCJwb3N0QWN0aXZpdHkiLCJhY3Rpdml0eSIsIl90aGlzNiIsImZyb20iLCJ0eXBlIiwiYXR0YWNobWVudHMiLCJwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyIsImNhdGNoUG9zdEVycm9yIiwiX3RoaXM3IiwiYXR0YWNobWVudE5hbWVzIiwiZGVkdXBlRmlsZW5hbWVzIiwibWVkaWEiLCJuYW1lIiwiY2xlYW5zZWRBdHRhY2htZW50cyIsImF0dGFjaG1lbnQiLCJpbmRleCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJCbG9iIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9yZWYiLCJzdHJpbmciLCJjb250ZW50VXJsIiwib3RoZXJzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInJlc3BvbnNlVHlwZSIsImNvbnRlbnRUeXBlIiwiY291bnQiLCJfdGhpczgiLCJwb2xsZXIkIiwiY3JlYXRlIiwic3Vic2NyaWJlciIsInRyaWdnZXIkIiwic3RhcnRUaW1lc3RhbXAiLCJub3ciLCJBY2NlcHQiLCJyZXN1bHQiLCJzZXRUaW1lb3V0IiwibWF4IiwiZW1wdHkiLCJhY3Rpdml0eUdyb3VwIiwib2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwIiwiYWN0aXZpdGllcyIsIl90aGlzOSIsIm9ic2VydmFibGVXZWJTb2NrZXQiLCJnZXRSZXRyeURlbGF5IiwicmVjb25uZWN0VG9Db252ZXJzYXRpb24iLCJmbG9vciIsIl90aGlzMTAiLCJ3cyIsInN1YiIsImNsb3NlZCIsIm9ub3BlbiIsIm9wZW4iLCJzZW5kIiwib25jbG9zZSIsImNsb3NlIiwib25lcnJvciIsIm9ubWVzc2FnZSIsImRhdGEiLCJwYXJzZSIsInJlYWR5U3RhdGUiLCJfdGhpczExIiwiY3VzdG9tQWdlbnQiLCJjbGllbnRBZ2VudCIsInNldFVzZXJJZCIsInVzZXJJZCIsInVzZXJJZEZyb21Ub2tlbiIsInBhcnNlVG9rZW4iLCJ0ZXN0IiwiX3JlZjIiLCJqd3REZWNvZGUiLCJJbnZhbGlkVG9rZW5FcnJvciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RMaW5lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEluIG9yZGVyIHRvIGtlZXAgZmlsZSBzaXplIGRvd24sIG9ubHkgaW1wb3J0IHRoZSBwYXJ0cyBvZiByeGpzIHRoYXQgd2UgdXNlXG5cbmltcG9ydCAnY29yZS1qcy9mZWF0dXJlcy9wcm9taXNlJztcbmltcG9ydCAndXJsLXNlYXJjaC1wYXJhbXMtcG9seWZpbGwnO1xuaW1wb3J0IHsgQWpheFJlc3BvbnNlLCBBamF4Q3JlYXRpb25NZXRob2QsIEFqYXhSZXF1ZXN0LCBBamF4RXJyb3IgfSBmcm9tICdyeGpzL29ic2VydmFibGUvZG9tL0FqYXhPYnNlcnZhYmxlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgSVNjaGVkdWxlciB9IGZyb20gJ3J4anMvU2NoZWR1bGVyJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICdyeGpzL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgYXN5bmMgYXMgQXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgand0RGVjb2RlLCB7IEp3dFBheWxvYWQsIEludmFsaWRUb2tlbkVycm9yIH0gZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY2F0Y2gnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY291bnQnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9kZWxheSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2RvJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvZmlsdGVyJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWFwJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb25jYXRNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9yZXRyeVdoZW4nO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9zaGFyZSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3Rha2UnO1xuXG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvZG9tL2FqYXgnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2VtcHR5JztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9pbnRlcnZhbCc7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvb2YnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL3Rocm93JztcblxuaW1wb3J0IGRlZHVwZUZpbGVuYW1lcyBmcm9tICcuL2RlZHVwZUZpbGVuYW1lcyc7XG5pbXBvcnQgeyBvYmplY3RFeHByZXNzaW9uIH0gZnJvbSAnQGJhYmVsL3R5cGVzJztcblxuaW1wb3J0IHsgRGlyZWN0TGluZVN0cmVhbWluZyB9IGZyb20gJy4vZGlyZWN0TGluZVN0cmVhbWluZyc7XG5leHBvcnQgeyBEaXJlY3RMaW5lU3RyZWFtaW5nIH07XG5cbmNvbnN0IERJUkVDVF9MSU5FX1ZFUlNJT04gPSAnRGlyZWN0TGluZS8zLjAnO1xuXG5kZWNsYXJlIHZhciBwcm9jZXNzOiB7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIGVudjoge1xuICAgICAgICBWRVJTSU9OOiBzdHJpbmc7XG4gICAgICAgIG5wbV9wYWNrYWdlX3ZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgcmVsZWFzZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbn07XG5cbi8vIERpcmVjdCBMaW5lIDMuMCB0eXBlc1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbiB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGVUYWc/OiBzdHJpbmcsXG4gICAgc3RyZWFtVXJsPzogc3RyaW5nLFxuICAgIHJlZmVyZW5jZUdyYW1tYXJJZD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBNZWRpYVR5cGUgPSBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS9naWZcIiB8IFwiaW1hZ2Uvc3ZnK3htbFwiIHwgXCJhdWRpby9tcGVnXCIgfCBcImF1ZGlvL21wNFwiIHwgXCJ2aWRlby9tcDRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYSB7XG4gICAgY29udGVudFR5cGU6IE1lZGlhVHlwZSxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmtub3duTWVkaWF7XG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ2FyZEFjdGlvblR5cGVzID0gXCJjYWxsXCIgfCBcImRvd25sb2FkRmlsZVwifCBcImltQmFja1wiIHwgXCJtZXNzYWdlQmFja1wiIHwgXCJvcGVuVXJsXCIgfCBcInBsYXlBdWRpb1wiIHwgXCJwbGF5VmlkZW9cIiB8IFwicG9zdEJhY2tcIiB8IFwic2lnbmluXCIgfCBcInNob3dJbWFnZVwiO1xuXG5leHBvcnQgdHlwZSBDYXJkQWN0aW9uID0gQ2FsbENhcmRBY3Rpb24gfCBEb3dubG9hZEZpbGVDYXJkQWN0aW9uIHwgSU1CYWNrQ2FyZEFjdGlvbiB8IE1lc3NhZ2VCYWNrQ2FyZEFjdGlvbiB8IE9wZW5VUkxDYXJkQWN0aW9uIHwgUGxheUF1ZGlvQ2FyZEFjdGlvbiB8IFBsYXlWaWRlb0NhcmRBY3Rpb24gfCBQb3N0QmFja0NhcmRBY3Rpb24gfCBTaWduSW5DYXJkQWN0aW9uIHwgU2hvd0ltYWdlQ2FyZEFjdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWxsQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImNhbGxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxvYWRGaWxlQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImRvd25sb2FkRmlsZVwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTUJhY2tDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZT86IHN0cmluZyxcbiAgICB0eXBlOiBcImltQmFja1wiLFxuICAgIHZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZUJhY2tDYXJkQWN0aW9uID0gTWVzc2FnZUJhY2tXaXRoSW1hZ2UgfCBNZXNzYWdlQmFja1dpdGhUaXRsZVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VCYWNrV2l0aEltYWdlIHtcbiAgICBkaXNwbGF5VGV4dD86IHN0cmluZyxcbiAgICBpbWFnZTogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJtZXNzYWdlQmFja1wiLFxuICAgIHZhbHVlPzogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUJhY2tXaXRoVGl0bGUge1xuICAgIGRpc3BsYXlUZXh0Pzogc3RyaW5nLFxuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm1lc3NhZ2VCYWNrXCIsXG4gICAgdmFsdWU/OiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuVVJMQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm9wZW5VcmxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheUF1ZGlvQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcInBsYXlBdWRpb1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF5VmlkZW9DYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwicGxheVZpZGVvXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RCYWNrQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJwb3N0QmFja1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaG93SW1hZ2VDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwic2hvd0ltYWdlXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JbkNhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJzaWduaW5cIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZEltYWdlIHtcbiAgICBhbHQ/OiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlcm9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuaGVyb1wiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBpbWFnZXM/OiBDYXJkSW1hZ2VbXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgdGFwPzogQ2FyZEFjdGlvblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHVtYm5haWwge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC50aHVtYm5haWxcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgaW1hZ2VzPzogQ2FyZEltYWdlW10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIHRhcD86IENhcmRBY3Rpb25cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuc2lnbmluXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQub2F1dGhcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGNvbm5lY3Rpb25uYW1lOiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjZWlwdEl0ZW0ge1xuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgaW1hZ2U/OiBDYXJkSW1hZ2UsXG4gICAgcHJpY2U/OiBzdHJpbmcsXG4gICAgcXVhbnRpdHk/OiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VpcHQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5yZWNlaXB0XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgZmFjdHM/OiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSxcbiAgICAgICAgaXRlbXM/OiBSZWNlaXB0SXRlbVtdLFxuICAgICAgICB0YXA/OiBDYXJkQWN0aW9uLFxuICAgICAgICB0YXg/OiBzdHJpbmcsXG4gICAgICAgIHZhdD86IHN0cmluZyxcbiAgICAgICAgdG90YWw/OiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbi8vIERlcHJlY2F0ZWQgZm9ybWF0IGZvciBTa3lwZSBjaGFubmVscy4gRm9yIHRlc3RpbmcgbGVnYWN5IGJvdHMgaW4gRW11bGF0b3Igb25seS5cbmV4cG9ydCBpbnRlcmZhY2UgRmxleENhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5mbGV4XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGltYWdlcz86IENhcmRJbWFnZVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICBhc3BlY3Q/OiBzdHJpbmdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYXVkaW9cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgbWVkaWE/OiB7IHVybDogc3RyaW5nLCBwcm9maWxlPzogc3RyaW5nIH1bXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgYXV0b2xvb3A/OiBib29sZWFuLFxuICAgICAgICBhdXRvc3RhcnQ/OiBib29sZWFuXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLnZpZGVvXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGl2ZUNhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLFxuICAgIGNvbnRlbnQ6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYW5pbWF0aW9uXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgS25vd25NZWRpYSA9IE1lZGlhIHwgSGVyb0NhcmQgfCBUaHVtYm5haWwgfCBTaWduaW4gfCBPQXV0aCB8IFJlY2VpcHQgfCBBdWRpb0NhcmQgfCBWaWRlb0NhcmQgfCBBbmltYXRpb25DYXJkIHwgRmxleENhcmQgfCBBZGFwdGl2ZUNhcmQ7XG5leHBvcnQgdHlwZSBBdHRhY2htZW50ID0gS25vd25NZWRpYSB8IFVua25vd25NZWRpYTtcblxuZXhwb3J0IHR5cGUgVXNlclJvbGUgPSBcImJvdFwiIHwgXCJjaGFubmVsXCIgfCBcInVzZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgaWNvblVybD86IHN0cmluZyxcbiAgICByb2xlPzogVXNlclJvbGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZpdHkge1xuICAgIHR5cGU6IHN0cmluZyxcbiAgICBjaGFubmVsRGF0YT86IGFueSxcbiAgICBjaGFubmVsSWQ/OiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uPzogeyBpZDogc3RyaW5nIH0sXG4gICAgZVRhZz86IHN0cmluZyxcbiAgICBmcm9tOiBVc2VyLFxuICAgIGlkPzogc3RyaW5nLFxuICAgIHRpbWVzdGFtcD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBBdHRhY2htZW50TGF5b3V0ID0gXCJsaXN0XCIgfCBcImNhcm91c2VsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSBleHRlbmRzIElBY3Rpdml0eSB7XG4gICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgdGV4dD86IHN0cmluZyxcbiAgICBsb2NhbGU/OiBzdHJpbmcsXG4gICAgdGV4dEZvcm1hdD86IFwicGxhaW5cIiB8IFwibWFya2Rvd25cIiB8IFwieG1sXCIsXG4gICAgYXR0YWNobWVudExheW91dD86IEF0dGFjaG1lbnRMYXlvdXQsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50W10sXG4gICAgZW50aXRpZXM/OiBhbnlbXSxcbiAgICBzdWdnZXN0ZWRBY3Rpb25zPzogeyBhY3Rpb25zOiBDYXJkQWN0aW9uW10sIHRvPzogc3RyaW5nW10gfSxcbiAgICBzcGVhaz86IHN0cmluZyxcbiAgICBpbnB1dEhpbnQ/OiBzdHJpbmcsXG4gICAgdmFsdWU/OiBvYmplY3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBpbmcgZXh0ZW5kcyBJQWN0aXZpdHkge1xuICAgIHR5cGU6IFwidHlwaW5nXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEFjdGl2aXR5IGV4dGVuZHMgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBcImV2ZW50XCIsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgQWN0aXZpdHkgPSBNZXNzYWdlIHwgVHlwaW5nIHwgRXZlbnRBY3Rpdml0eTtcblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpdml0eUdyb3VwIHtcbiAgICBhY3Rpdml0aWVzOiBBY3Rpdml0eVtdLFxuICAgIHdhdGVybWFyazogc3RyaW5nXG59XG5cbi8vIFRoZXNlIHR5cGVzIGFyZSBzcGVjaWZpYyB0byB0aGlzIGNsaWVudCBsaWJyYXJ5LCBub3QgdG8gRGlyZWN0IExpbmUgMy4wXG5cbmV4cG9ydCBlbnVtIENvbm5lY3Rpb25TdGF0dXMge1xuICAgIFVuaW5pdGlhbGl6ZWQsICAgICAgICAgICAgICAvLyB0aGUgc3RhdHVzIHdoZW4gdGhlIERpcmVjdExpbmUgb2JqZWN0IGlzIGZpcnN0IGNyZWF0ZWQvY29uc3RydWN0ZWRcbiAgICBDb25uZWN0aW5nLCAgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IHRyeWluZyB0byBjb25uZWN0IHRvIHRoZSBjb252ZXJzYXRpb25cbiAgICBPbmxpbmUsICAgICAgICAgICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byB0aGUgY29udmVyc2F0aW9uLiBDb25uZWN0aW9uIGlzIGhlYWx0aHkgc28gZmFyIGFzIHdlIGtub3cuXG4gICAgRXhwaXJlZFRva2VuLCAgICAgICAgICAgICAgIC8vIGxhc3Qgb3BlcmF0aW9uIGVycm9yZWQgb3V0IHdpdGggYW4gZXhwaXJlZCB0b2tlbi4gUG9zc2libHkgd2FpdGluZyBmb3Igc29tZW9uZSB0byBzdXBwbHkgYSBuZXcgb25lLlxuICAgIEZhaWxlZFRvQ29ubmVjdCwgICAgICAgICAgICAvLyB0aGUgaW5pdGlhbCBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIGNvbnZlcnNhdGlvbiBmYWlsZWQuIE5vIHJlY292ZXJ5IHBvc3NpYmxlLlxuICAgIEVuZGVkICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYm90IGVuZGVkIHRoZSBjb252ZXJzYXRpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RMaW5lT3B0aW9ucyB7XG4gICAgc2VjcmV0Pzogc3RyaW5nLFxuICAgIHRva2VuPzogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvbklkPzogc3RyaW5nLFxuICAgIHdhdGVybWFyaz86IHN0cmluZyxcbiAgICBkb21haW4/OiBzdHJpbmcsXG4gICAgd2ViU29ja2V0PzogYm9vbGVhbixcbiAgICBwb2xsaW5nSW50ZXJ2YWw/OiBudW1iZXIsXG4gICAgc3RyZWFtVXJsPzogc3RyaW5nLFxuICAgIHRpbWVvdXQ/OiBudW1iZXIsXG4gICAgLy8gQXR0YWNoZWQgdG8gYWxsIHJlcXVlc3RzIHRvIGlkZW50aWZ5IHJlcXVlc3RpbmcgYWdlbnQuXG4gICAgYm90QWdlbnQ/OiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzPzogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZXMge1xuICAgIHNjaGVkdWxlcjogSVNjaGVkdWxlcjtcbiAgICBXZWJTb2NrZXQ6IHR5cGVvZiBXZWJTb2NrZXQ7XG4gICAgYWpheDogQWpheENyZWF0aW9uTWV0aG9kO1xuICAgIHJhbmRvbTogKCkgPT4gbnVtYmVyO1xufVxuXG5jb25zdCB3cmFwQWpheFdpdGhSZXRyeSA9IChzb3VyY2U6IEFqYXhDcmVhdGlvbk1ldGhvZCwgc2NoZWR1bGVyOiBJU2NoZWR1bGVyKTogQWpheENyZWF0aW9uTWV0aG9kID0+e1xuXG4gICAgY29uc3Qgbm90SW1wbGVtZW50ZWQgPSAoKTogbmV2ZXIgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpOyB9O1xuXG4gICAgY29uc3QgaW5uZXIgPSAocmVzcG9uc2UkIDogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZSRcbiAgICAgICAgLmNhdGNoPEFqYXhSZXNwb25zZSwgQWpheFJlc3BvbnNlPigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZihlcnIuc3RhdHVzID09PSA0Mjkpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJWYWx1ZSA9IGVyci54aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihyZXRyeUFmdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmKCFpc05hTihyZXRyeUFmdGVyKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRpbWVyKHJldHJ5QWZ0ZXIsIHNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoXyA9PiBPYnNlcnZhYmxlLnRocm93KGVyciwgc2NoZWR1bGVyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnIsIHNjaGVkdWxlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRlciA9ICh1cmxPclJlcXVlc3Q6IHN0cmluZ3wgQWpheFJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGlubmVyKHNvdXJjZSh1cmxPclJlcXVlc3QpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob3V0ZXIsIHtcbiAgICAgICAgZ2V0OiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgcG9zdDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHB1dDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHBhdGNoOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZ2V0SlNPTjogPFQ+KHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxUPiA9PiBub3RJbXBsZW1lbnRlZCgpXG4gICAgfSk7XG59XG5cbmNvbnN0IG1ha2VTZXJ2aWNlcyA9IChzZXJ2aWNlczogUGFydGlhbDxTZXJ2aWNlcz4pOiBTZXJ2aWNlcyA9PiB7XG4gICAgY29uc3Qgc2NoZWR1bGVyID0gc2VydmljZXMuc2NoZWR1bGVyIHx8IEFzeW5jU2NoZWR1bGVyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVkdWxlcixcbiAgICAgICAgYWpheDogd3JhcEFqYXhXaXRoUmV0cnkoc2VydmljZXMuYWpheCB8fCBPYnNlcnZhYmxlLmFqYXgsIHNjaGVkdWxlciksXG4gICAgICAgIFdlYlNvY2tldDogc2VydmljZXMuV2ViU29ja2V0IHx8IFdlYlNvY2tldCxcbiAgICAgICAgcmFuZG9tOiBzZXJ2aWNlcy5yYW5kb20gfHwgTWF0aC5yYW5kb20sXG4gICAgfVxufVxuXG5jb25zdCBsaWZldGltZVJlZnJlc2hUb2tlbiA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgaW50ZXJ2YWxSZWZyZXNoVG9rZW4gPSBsaWZldGltZVJlZnJlc2hUb2tlbiAvIDI7XG5cbmNvbnN0IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQ6IG51bWJlciA9IDIwMDsgLy9tc1xuXG5jb25zdCBlcnJvckV4cGlyZWRUb2tlbiA9IG5ldyBFcnJvcihcImV4cGlyZWQgdG9rZW5cIik7XG5jb25zdCBlcnJvckNvbnZlcnNhdGlvbkVuZGVkID0gbmV3IEVycm9yKFwiY29udmVyc2F0aW9uIGVuZGVkXCIpO1xuY29uc3QgZXJyb3JGYWlsZWRUb0Nvbm5lY3QgPSBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gY29ubmVjdFwiKTtcblxuY29uc3Qga29uc29sZSA9IHtcbiAgICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi4gb3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSlbXCJib3RjaGF0RGVidWdcIl0gJiYgbWVzc2FnZSlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLiBvcHRpb25hbFBhcmFtcyk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCb3RDb25uZWN0aW9uIHtcbiAgICBjb25uZWN0aW9uU3RhdHVzJDogQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25TdGF0dXM+LFxuICAgIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT4sXG4gICAgZW5kKCk6IHZvaWQsXG4gICAgcmVmZXJlbmNlR3JhbW1hcklkPzogc3RyaW5nLFxuICAgIHBvc3RBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpOiBPYnNlcnZhYmxlPHN0cmluZz4sXG4gICAgZ2V0U2Vzc2lvbklkPyA6ICgpID0+IE9ic2VydmFibGU8c3RyaW5nPlxufVxuXG5leHBvcnQgY2xhc3MgRGlyZWN0TGluZSBpbXBsZW1lbnRzIElCb3RDb25uZWN0aW9uIHtcbiAgICBwdWJsaWMgY29ubmVjdGlvblN0YXR1cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KENvbm5lY3Rpb25TdGF0dXMuVW5pbml0aWFsaXplZCk7XG4gICAgcHVibGljIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT47XG5cbiAgICBwcml2YXRlIGRvbWFpbiA9IFwiaHR0cHM6Ly9kaXJlY3RsaW5lLmJvdGZyYW1ld29yay5jb20vdjMvZGlyZWN0bGluZVwiO1xuICAgIHByaXZhdGUgd2ViU29ja2V0OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwaXJlZFRva2VuRXhoYXVzdGlvbjogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBzZWNyZXQ6IHN0cmluZztcbiAgICBwcml2YXRlIHRva2VuOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB3YXRlcm1hcmsgPSAnJztcbiAgICBwcml2YXRlIHN0cmVhbVVybDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2JvdEFnZW50ID0gJyc7XG4gICAgcHJpdmF0ZSBzZXJ2aWNlczogU2VydmljZXM7XG4gICAgcHJpdmF0ZSBfdXNlckFnZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHJlZmVyZW5jZUdyYW1tYXJJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgdGltZW91dCA9IDIwICogMTAwMDtcbiAgICBwcml2YXRlIHJldHJpZXM6IG51bWJlcjtcblxuICAgIHByaXZhdGUgbG9jYWxlT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgdXNlcklkT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBwb2xsaW5nSW50ZXJ2YWw6IG51bWJlciA9IDEwMDA7IC8vbXNcblxuICAgIHByaXZhdGUgdG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEaXJlY3RMaW5lT3B0aW9ucyAmIFBhcnRpYWw8U2VydmljZXM+KSB7XG4gICAgICAgIHRoaXMuc2VjcmV0ID0gb3B0aW9ucy5zZWNyZXQ7XG4gICAgICAgIHRoaXMudG9rZW4gPSBvcHRpb25zLnNlY3JldCB8fCBvcHRpb25zLnRva2VuO1xuICAgICAgICB0aGlzLndlYlNvY2tldCA9IChvcHRpb25zLndlYlNvY2tldCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMud2ViU29ja2V0KSAmJiB0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJyAmJiBXZWJTb2NrZXQgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMgJiYgb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbnMuY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uID0gb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSB3YXMgaWdub3JlZDogdGhlIGxvY2FsZSBuYW1lIG1heSBiZSBhIEJDUCA0NyBsYW5ndWFnZSB0YWcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmRvbWFpbikge1xuICAgICAgICAgICAgdGhpcy5kb21haW4gPSBvcHRpb25zLmRvbWFpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gb3B0aW9ucy5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLndhdGVybWFyaykge1xuICAgICAgICAgICAgdGhpcy53YXRlcm1hcmsgPSAgb3B0aW9ucy53YXRlcm1hcms7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlYW1VcmwpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRva2VuICYmIG9wdGlvbnMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IG9wdGlvbnMuc3RyZWFtVXJsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogc3RyZWFtVXJsIHdhcyBpZ25vcmVkOiB5b3UgbmVlZCB0byBwcm92aWRlIGEgdG9rZW4gYW5kIGEgY29udmVyc2F0aW9uaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXRyaWVzID0gKGxpZmV0aW1lUmVmcmVzaFRva2VuIC0gaW50ZXJ2YWxSZWZyZXNoVG9rZW4pIC8gdGhpcy50aW1lb3V0O1xuXG4gICAgICAgIHRoaXMuX2JvdEFnZW50ID0gdGhpcy5nZXRCb3RBZ2VudChvcHRpb25zLmJvdEFnZW50KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VzID0gbWFrZVNlcnZpY2VzKG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA9IH5+b3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWw7XG5cbiAgICAgICAgaWYgKHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA8IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEaXJlY3RMaW5lSlM6IHByb3ZpZGVkIHBvbGxpbmdJbnRlcnZhbCAoJHsgb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgfSkgaXMgdW5kZXIgbG93ZXIgYm91bmQgKDIwMG1zKSwgdXNpbmcgZGVmYXVsdCBvZiAxMDAwbXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9sbGluZ0ludGVydmFsID0gcGFyc2VkUG9sbGluZ0ludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uID0gdGhpcy5zZXRDb25uZWN0aW9uU3RhdHVzRmFsbGJhY2soXG4gICAgICAgICAgICBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbixcbiAgICAgICAgICAgIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0LFxuICAgICAgICAgICAgNVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWN0aXZpdHkkID0gKHRoaXMud2ViU29ja2V0XG4gICAgICAgICAgICA/IHRoaXMud2ViU29ja2V0QWN0aXZpdHkkKClcbiAgICAgICAgICAgIDogdGhpcy5wb2xsaW5nR2V0QWN0aXZpdHkkKClcbiAgICAgICAgKS5zaGFyZSgpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IHRpbWUgd2UncmUgYWJvdXQgdG8gbWFrZSBhIERpcmVjdCBMaW5lIFJFU1QgY2FsbCwgd2UgY2FsbCB0aGlzIGZpcnN0IHRvIHNlZSBjaGVjayB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXR1cy5cbiAgICAvLyBFaXRoZXIgdGhyb3dzIGFuIGVycm9yIChpbmRpY2F0aW5nIGFuIGVycm9yIHN0YXRlKSBvciBlbWl0cyBhIG51bGwsIGluZGljYXRpbmcgYSAocHJlc3VtYWJseSkgaGVhbHRoeSBjb25uZWN0aW9uXG4gICAgcHJpdmF0ZSBjaGVja0Nvbm5lY3Rpb24ob25jZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBvYnMgPSAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJFxuICAgICAgICAuZmxhdE1hcChjb25uZWN0aW9uU3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5Db25uZWN0aW5nKTtcblxuICAgICAgICAgICAgICAgIC8vaWYgdG9rZW4gYW5kIHN0cmVhbVVybCBhcmUgZGVmaW5lZCBpdCBtZWFucyByZWNvbm5lY3QgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBTa2lwcGluZyBpdC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50b2tlbiAmJiB0aGlzLnN0cmVhbVVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb25uZWN0aW9uU3RhdHVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRDb252ZXJzYXRpb24oKS5kbyhjb252ZXJzYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0aGlzLnNlY3JldCB8fCBjb252ZXJzYXRpb24udG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IGNvbnZlcnNhdGlvbi5zdHJlYW1Vcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUdyYW1tYXJJZCA9IGNvbnZlcnNhdGlvbi5yZWZlcmVuY2VHcmFtbWFySWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuTG9vcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKF8gPT4gY29ubmVjdGlvblN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb25TdGF0dXMgPT4gY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQgJiYgY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RpbmcpXG4gICAgICAgIC5mbGF0TWFwKGNvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChjb25uZWN0aW9uU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkVuZGVkOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckNvbnZlcnNhdGlvbkVuZGVkLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG5cbiAgICAgICAgICAgICAgICBjYXNlIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckZhaWxlZFRvQ29ubmVjdCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBvbmNlID8gb2JzLnRha2UoMSkgOiBvYnM7XG4gICAgfVxuXG4gICAgc2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrKFxuICAgICAgICBjb25uZWN0aW9uU3RhdHVzRnJvbTogQ29ubmVjdGlvblN0YXR1cyxcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c1RvOiBDb25uZWN0aW9uU3RhdHVzLFxuICAgICAgICBtYXhBdHRlbXB0cyA9IDVcbiAgICApIHtcbiAgICAgICAgbWF4QXR0ZW1wdHMtLTtcbiAgICAgICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICAgICAgbGV0IGN1cnJTdGF0dXMgPSBudWxsO1xuICAgICAgICByZXR1cm4gKHN0YXR1czogQ29ubmVjdGlvblN0YXR1cyk6IENvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gY29ubmVjdGlvblN0YXR1c0Zyb20gJiYgY3VyclN0YXR1cyA9PT0gc3RhdHVzICYmIGF0dGVtcHRzID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMgPSAwXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25TdGF0dXNUbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgICAgICBjdXJyU3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGlyZWRUb2tlbigpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1cyA9IHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMgIT0gQ29ubmVjdGlvblN0YXR1cy5FbmRlZCAmJiBjb25uZWN0aW9uU3RhdHVzICE9IENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0KVxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcblxuICAgICAgICBjb25zdCBwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0Q29udmVyc2F0aW9uKCkge1xuICAgICAgICAvL2lmIGNvbnZlcnNhdGlvbmlkIGlzIHNldCBoZXJlLCBpdCBtZWFucyB3ZSBuZWVkIHRvIGNhbGwgdGhlIHJlY29ubmVjdCBhcGksIGVsc2UgaXQgaXMgYSBuZXcgY29udmVyc2F0aW9uXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT93YXRlcm1hcms9JHt0aGlzLndhdGVybWFya31gXG4gICAgICAgICAgICA6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zYDtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5jb252ZXJzYXRpb25JZCA/IFwiR0VUXCIgOiBcIlBPU1RcIjtcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uXG4gICAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuLy8gICAgICAuZG8oYWpheFJlc3BvbnNlID0+IGtvbnNvbGUubG9nKFwiY29udmVyc2F0aW9uIGFqYXhSZXNwb25zZVwiLCBhamF4UmVzcG9uc2UucmVzcG9uc2UpKVxuICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UgYXMgQ29udmVyc2F0aW9uKVxuICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PlxuICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkZWVtIDR4eCBhbmQgNXh4IGVycm9ycyBhcyB1bnJlY292ZXJhYmxlXG4gICAgICAgICAgICAvLyBmb3IgZXZlcnl0aGluZyBlbHNlICh0aW1lb3V0cyksIHJldHJ5IGZvciBhIHdoaWxlXG4gICAgICAgICAgICBlcnJvciQubWVyZ2VNYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgZXJyb3Iuc3RhdHVzIDwgNjAwXG4gICAgICAgICAgICAgICAgPyBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICA6IE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgLnRha2UodGhpcy5yZXRyaWVzKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoVG9rZW5Mb29wKCkge1xuICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbiA9IE9ic2VydmFibGUuaW50ZXJ2YWwoaW50ZXJ2YWxSZWZyZXNoVG9rZW4sIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAuZmxhdE1hcChfID0+IHRoaXMucmVmcmVzaFRva2VuKCkpXG4gICAgICAgIC5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICAgICAga29uc29sZS5sb2coXCJyZWZyZXNoaW5nIHRva2VuXCIsIHRva2VuLCBcImF0XCIsIG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS90b2tlbnMvcmVmcmVzaGAsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnRva2VuIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJFxuICAgICAgICAgICAgICAgIC5tZXJnZU1hcChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRva2VuIGlzIGV4cGlyZWQgdGhlcmUncyBubyByZWFzb24gdG8ga2VlcCB0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYm90IGlzIGdvbmUsIHdlIHNob3VsZCBzdG9wIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgIC50YWtlKHRoaXMucmV0cmllcylcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHB1YmxpYyByZWNvbm5lY3QoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IGNvbnZlcnNhdGlvbi50b2tlbjtcbiAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSBjb252ZXJzYXRpb24uc3RyZWFtVXJsO1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbilcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG4gICAgfVxuXG4gICAgZW5kKCkge1xuICAgICAgICBpZiAodGhpcy50b2tlblJlZnJlc2hTdWJzY3JpcHRpb24pXG4gICAgICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSA9PT0gZXJyb3JDb252ZXJzYXRpb25FbmRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aHJvdyhlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlc3Npb25JZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICBrb25zb2xlLmxvZyhcImdldFNlc3Npb25JZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9zZXNzaW9uL2dldHNlc3Npb25pZGAsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhSZXNwb25zZSAmJiBhamF4UmVzcG9uc2UucmVzcG9uc2UgJiYgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgcmVzcG9uc2U6IFwiICsgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgZXJyb3I6IFwiICsgZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoJycsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwb3N0QWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KSB7XG4gICAgICAgIC8vIElmIHVzZXIgaWQgaXMgc2V0LCBjaGVjayBpZiBpdCBtYXRjaCBhY3Rpdml0eS5mcm9tLmlkIGFuZCBhbHdheXMgb3ZlcnJpZGUgaXQgaW4gYWN0aXZpdHlcbiAgICAgICAgaWYgKHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbiAmJiBhY3Rpdml0eS5mcm9tICYmIGFjdGl2aXR5LmZyb20uaWQgIT09IHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IEFjdGl2aXR5LmZyb20uaWQgZG9lcyBub3QgbWF0Y2ggd2l0aCB1c2VyIGlkLCBpZ25vcmluZyBhY3Rpdml0eS5mcm9tLmlkJyk7XG4gICAgICAgICAgICBhY3Rpdml0eS5mcm9tLmlkID0gdGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVzZSBwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyBmb3IgbWVzc2FnZXMgd2l0aCBhdHRhY2htZW50cyB0aGF0IGFyZSBsb2NhbCBmaWxlcyAoZS5nLiBhbiBpbWFnZSB0byB1cGxvYWQpXG4gICAgICAgIC8vIFRlY2huaWNhbGx5IHdlIGNvdWxkIHVzZSBpdCBmb3IgKmFsbCogYWN0aXZpdGllcywgYnV0IHBvc3RBY3Rpdml0eSBpcyBtdWNoIGxpZ2h0ZXIgd2VpZ2h0XG4gICAgICAgIC8vIFNvLCBzaW5jZSBXZWJDaGF0IGlzIHBhcnRpYWxseSBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBEaXJlY3QgTGluZSwgd2UgaW1wbGVtZW50IGJvdGguXG4gICAgICAgIGlmIChhY3Rpdml0eS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiBhY3Rpdml0eS5hdHRhY2htZW50cyAmJiBhY3Rpdml0eS5hdHRhY2htZW50cy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdE1lc3NhZ2VXaXRoQXR0YWNobWVudHMoYWN0aXZpdHkpO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGJvdCwgZ2V0IGNvbm5lY3RlZFxuICAgICAgICAvLyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHdlIGFyZSBub3QgY29ubmVjdGVkXG4gICAgICAgIGtvbnNvbGUubG9nKFwicG9zdEFjdGl2aXR5XCIsIGFjdGl2aXR5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0vYWN0aXZpdGllc2AsXG4gICAgICAgICAgICAgICAgYm9keTogYWN0aXZpdHksXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UuaWQgYXMgc3RyaW5nKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hQb3N0RXJyb3IoZXJyb3IpKVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoRXhwaXJlZFRva2VuKGVycm9yKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyhtZXNzYWdlOiBNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMgfSA9IG1lc3NhZ2U7XG4gICAgICAgIC8vIFdlIGNsZWFuIHRoZSBhdHRhY2htZW50cyBidXQgbWFraW5nIHN1cmUgZXZlcnkgYXR0YWNobWVudCBoYXMgdW5pcXVlIG5hbWUuXG4gICAgICAgIC8vIElmIHRoZSBmaWxlIGRvIG5vdCBoYXZlIGEgbmFtZSwgQ2hyb21lIHdpbGwgYXNzaWduIFwiYmxvYlwiIHdoZW4gaXQgaXMgYXBwZW5kZWQgdG8gRm9ybURhdGEuXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lczogc3RyaW5nW10gPSBkZWR1cGVGaWxlbmFtZXMoYXR0YWNobWVudHMubWFwKChtZWRpYTogTWVkaWEpID0+IG1lZGlhLm5hbWUgfHwgJ2Jsb2InKSk7XG4gICAgICAgIGNvbnN0IGNsZWFuc2VkQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQ6IE1lZGlhLCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICAgICAgLi4uYXR0YWNobWVudCxcbiAgICAgICAgICAgIG5hbWU6IGF0dGFjaG1lbnROYW1lc1tpbmRleF1cbiAgICAgICAgfSkpO1xuICAgICAgICBsZXQgZm9ybURhdGE6IEZvcm1EYXRhO1xuXG4gICAgICAgIC8vIElmIHdlJ3JlIG5vdCBjb25uZWN0ZWQgdG8gdGhlIGJvdCwgZ2V0IGNvbm5lY3RlZFxuICAgICAgICAvLyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHdlIGFyZSBub3QgY29ubmVjdGVkXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAuZmxhdE1hcChfID0+IHtcbiAgICAgICAgICAgIC8vIFRvIHNlbmQgdGhpcyBtZXNzYWdlIHRvIERpcmVjdExpbmUgd2UgbmVlZCB0byBkZWNvbnN0cnVjdCBpdCBpbnRvIGEgXCJ0ZW1wbGF0ZVwiIGFjdGl2aXR5XG4gICAgICAgICAgICAvLyBhbmQgb25lIGJsb2IgZm9yIGVhY2ggYXR0YWNobWVudC5cbiAgICAgICAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2FjdGl2aXR5JywgbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIGNvbnRlbnRVcmwgZnJvbSBhdHRhY2htZW50LCB3ZSB3aWxsIHNlbmQgaXQgdmlhIG11bHRpcGFydFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBjbGVhbnNlZEF0dGFjaG1lbnRzLm1hcCgoeyBjb250ZW50VXJsOiBzdHJpbmcsIC4uLm90aGVycyB9KSA9PiAoeyAuLi5vdGhlcnMgfSkpXG4gICAgICAgICAgICB9KV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuYWN0aXZpdHknIH0pKTtcblxuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuZnJvbShjbGVhbnNlZEF0dGFjaG1lbnRzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgIC5mbGF0TWFwKChtZWRpYTogTWVkaWEpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhLmNvbnRlbnRVcmwsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmRvKGFqYXhSZXNwb25zZSA9PlxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBuZXcgQmxvYihbYWpheFJlc3BvbnNlLnJlc3BvbnNlXSwgeyB0eXBlOiBtZWRpYS5jb250ZW50VHlwZSB9KSwgbWVkaWEubmFtZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuY291bnQoKVxuICAgICAgICB9KVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uSWR9L3VwbG9hZD91c2VySWQ9JHttZXNzYWdlLmZyb20uaWR9YCxcbiAgICAgICAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UuaWQgYXMgc3RyaW5nKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hQb3N0RXJyb3IoZXJyb3IpKVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB0aGlzLmNhdGNoUG9zdEVycm9yKGVycm9yKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXRjaFBvc3RFcnJvcihlcnJvcjogYW55KSB7XG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMylcbiAgICAgICAgICAgIC8vIHRva2VuIGhhcyBleHBpcmVkICh3aWxsIGZhbGwgdGhyb3VnaCB0byByZXR1cm4gXCJyZXRyeVwiKVxuICAgICAgICAgICAgdGhpcy5leHBpcmVkVG9rZW4oKTtcbiAgICAgICAgZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID49IDQwMCAmJiBlcnJvci5zdGF0dXMgPCA1MDApXG4gICAgICAgICAgICAvLyBtb3JlIHVucmVjb3ZlcmFibGUgZXJyb3JzXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihcInJldHJ5XCIsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhdGNoRXhwaXJlZFRva2VuKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yID09PSBlcnJvckV4cGlyZWRUb2tlblxuICAgICAgICA/IE9ic2VydmFibGUub2YoXCJyZXRyeVwiLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgOiBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb2xsaW5nR2V0QWN0aXZpdHkkKCkge1xuICAgICAgICBjb25zdCBwb2xsZXIkOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPSBPYnNlcnZhYmxlLmNyZWF0ZSgoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxhbnk+KSA9PiB7XG4gICAgICAgICAgICAvLyBBIEJlaGF2aW9yU3ViamVjdCB0byB0cmlnZ2VyIHBvbGxpbmcuIFNpbmNlIGl0IGlzIGEgQmVoYXZpb3JTdWJqZWN0XG4gICAgICAgICAgICAvLyB0aGUgZmlyc3QgZXZlbnQgaXMgcHJvZHVjZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSBEYXRlLm5vdywgdXNlIHJlYWN0aXZlIGludGVydmFsIHRvIHNwYWNlIG91dCBldmVyeSByZXF1ZXN0XG5cbiAgICAgICAgICAgIHRyaWdnZXIkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSA9PT0gQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBgJHsgdGhpcy5kb21haW4gfS9jb252ZXJzYXRpb25zLyR7IHRoaXMuY29udmVyc2F0aW9uSWQgfS9hY3Rpdml0aWVzP3dhdGVybWFyaz0keyB0aGlzLndhdGVybWFyayB9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dFxuICAgICAgICAgICAgICAgICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0OiBBamF4UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRyaWdnZXIkLm5leHQobnVsbCksIE1hdGgubWF4KDAsIHRoaXMucG9sbGluZ0ludGVydmFsIC0gRGF0ZS5ub3coKSArIHN0YXJ0VGltZXN0YW1wKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVycm9yLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRyaWdnZXIkLm5leHQobnVsbCksIHRoaXMucG9sbGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb3BhZ2F0ZSB0aGUgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24oKVxuICAgICAgICAuZmxhdE1hcChfID0+IHBvbGxlciRcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBPYnNlcnZhYmxlLmVtcHR5PEFqYXhSZXNwb25zZT4oKSlcbiAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZSBhcyBBY3Rpdml0eUdyb3VwKVxuICAgICAgICAgICAgLmZsYXRNYXAoYWN0aXZpdHlHcm91cCA9PiB0aGlzLm9ic2VydmFibGVGcm9tQWN0aXZpdHlHcm91cChhY3Rpdml0eUdyb3VwKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwKGFjdGl2aXR5R3JvdXA6IEFjdGl2aXR5R3JvdXApIHtcbiAgICAgICAgaWYgKGFjdGl2aXR5R3JvdXAud2F0ZXJtYXJrKVxuICAgICAgICAgICAgdGhpcy53YXRlcm1hcmsgPSBhY3Rpdml0eUdyb3VwLndhdGVybWFyaztcbiAgICAgICAgcmV0dXJuIE9ic2VydmFibGUuZnJvbShhY3Rpdml0eUdyb3VwLmFjdGl2aXRpZXMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHdlYlNvY2tldEFjdGl2aXR5JCgpOiBPYnNlcnZhYmxlPEFjdGl2aXR5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbigpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZVdlYlNvY2tldDxBY3Rpdml0eUdyb3VwPigpXG4gICAgICAgICAgICAvLyBXZWJTb2NrZXRzIGNhbiBiZSBjbG9zZWQgYnkgdGhlIHNlcnZlciBvciB0aGUgYnJvd3Nlci4gSW4gdGhlIGZvcm1lciBjYXNlIHdlIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIHJldHJpZXZlIGEgbmV3IHN0cmVhbVVybC4gSW4gdGhlIGxhdHRlciBjYXNlIHdlIGNvdWxkIGZpcnN0IHJldHJ5IHdpdGggdGhlIGN1cnJlbnQgc3RyZWFtVXJsLFxuICAgICAgICAgICAgLy8gYnV0IGl0J3Mgc2ltcGxlciBqdXN0IHRvIGFsd2F5cyBmZXRjaCBhIG5ldyBvbmUuXG4gICAgICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PiBlcnJvciQuZGVsYXkodGhpcy5nZXRSZXRyeURlbGF5KCksIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKS5tZXJnZU1hcChlcnJvciA9PiB0aGlzLnJlY29ubmVjdFRvQ29udmVyc2F0aW9uKCkpKVxuICAgICAgICApXG4gICAgICAgIC5mbGF0TWFwKGFjdGl2aXR5R3JvdXAgPT4gdGhpcy5vYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAoYWN0aXZpdHlHcm91cCkpXG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGVsYXkgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gICAgcHJpdmF0ZSBnZXRSZXRyeURlbGF5KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigzMDAwICsgdGhpcy5zZXJ2aWNlcy5yYW5kb20oKSAqIDEyMDAwKTtcbiAgICB9XG5cbiAgICAvLyBPcmlnaW5hbGx5IHdlIHVzZWQgT2JzZXJ2YWJsZS53ZWJTb2NrZXQsIGJ1dCBpdCdzIGZhaXJseSBvcGluaW9uYXRlZCBhbmQgSSBlbmRlZCB1cCB3cml0aW5nXG4gICAgLy8gYSBsb3Qgb2YgY29kZSB0byB3b3JrIGFyb3VuZCB0aGVpciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBTaW5jZSBXZWJDaGF0IGlzIG1lYW50IHRvIGJlIGEgcmVmZXJlbmNlXG4gICAgLy8gaW1wbGVtZW50YXRpb24sIEkgZGVjaWRlZCByb2xsIHRoZSBiZWxvdywgd2hlcmUgdGhlIGxvZ2ljIGlzIG1vcmUgcHVycG9zZWZ1bC4gLSBAYmlsbGJhXG4gICAgcHJpdmF0ZSBvYnNlcnZhYmxlV2ViU29ja2V0PFQ+KCkge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8VD4pID0+IHtcbiAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiY3JlYXRpbmcgV2ViU29ja2V0XCIsIHRoaXMuc3RyZWFtVXJsKTtcbiAgICAgICAgICAgIGNvbnN0IHdzID0gbmV3IHRoaXMuc2VydmljZXMuV2ViU29ja2V0KHRoaXMuc3RyZWFtVXJsKTtcbiAgICAgICAgICAgIGxldCBzdWI6IFN1YnNjcmlwdGlvbjtcbiAgICAgICAgICAgIGxldCBjbG9zZWQ6IGJvb2xlYW47XG5cbiAgICAgICAgICAgIHdzLm9ub3BlbiA9IG9wZW4gPT4ge1xuICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiV2ViU29ja2V0IG9wZW5cIiwgb3Blbik7XG4gICAgICAgICAgICAgICAgLy8gQ2hyb21lIGlzIHByZXR0eSBiYWQgYXQgbm90aWNpbmcgd2hlbiBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGJyb2tlbi5cbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBwZXJpb2RpY2FsbHkgcGluZyB0aGUgc2VydmVyIHdpdGggZW1wdHkgbWVzc2FnZXMsIGl0IGhlbHBzIENocm9tZVxuICAgICAgICAgICAgICAgIC8vIHJlYWxpemUgd2hlbiBjb25uZWN0aW9uIGJyZWFrcywgYW5kIGNsb3NlIHRoZSBzb2NrZXQuIFdlIHRoZW4gdGhyb3cgYW5cbiAgICAgICAgICAgICAgICAvLyBlcnJvciwgYW5kIHRoYXQgZ2l2ZSB1cyB0aGUgb3Bwb3J0dW5pdHkgdG8gYXR0ZW1wdCB0byByZWNvbm5lY3QuXG4gICAgICAgICAgICAgICAgc3ViID0gT2JzZXJ2YWJsZS5pbnRlcnZhbCh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cy5zZW5kKFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJQaW5nIGVycm9yXCIsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdzLm9uY2xvc2UgPSBjbG9zZSA9PiB7XG4gICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJXZWJTb2NrZXQgY2xvc2VcIiwgY2xvc2UpO1xuICAgICAgICAgICAgICAgIGlmIChzdWIpIHN1Yi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUnhKUy5yZXRyeVdoZW4gaGFzIGEgYnVnIHRoYXQgd291bGQgY2F1c2UgXCJlcnJvclwiIHNpZ25hbCB0byBiZSBzZW50IGFmdGVyIHRoZSBvYnNlcnZhYmxlIGlzIGNvbXBsZXRlZC9lcnJvcmVkLlxuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBleHRyYW5lb3VzIFwiZXJyb3JcIiBzaWduYWwgdG8gd29ya2Fyb3VuZCB0aGUgYnVnLlxuICAgICAgICAgICAgICAgIGNsb3NlZCB8fCBzdWJzY3JpYmVyLmVycm9yKGNsb3NlKTtcbiAgICAgICAgICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3cy5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGtvbnNvbGUubG9nKFwiV2ViU29ja2V0IGVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAoc3ViKSBzdWIudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgICAgIC8vIFJ4SlMucmV0cnlXaGVuIGhhcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIFwiZXJyb3JcIiBzaWduYWwgdG8gYmUgc2VudCBhZnRlciB0aGUgb2JzZXJ2YWJsZSBpcyBjb21wbGV0ZWQvZXJyb3JlZC5cbiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgZXh0cmFuZW91cyBcImVycm9yXCIgc2lnbmFsIHRvIHdvcmthcm91bmQgdGhlIGJ1Zy5cbiAgICAgICAgICAgICAgICBjbG9zZWQgfHwgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd3Mub25tZXNzYWdlID0gbWVzc2FnZSA9PiBtZXNzYWdlLmRhdGEgJiYgc3Vic2NyaWJlci5uZXh0KEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKSk7XG5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlICd1bnN1YnNjcmliZScgbWV0aG9kLCB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGlzIG9ic2VydmFibGUgaXMgZGlzcG9zZWQuXG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBXZWJTb2NrZXQgY2xvc2VzIGl0c2VsZiwgd2UgdGhyb3cgYW4gZXJyb3IsIGFuZCB0aGlzIGZ1bmN0aW9uIGlzIGV2ZW50dWFsbHkgY2FsbGVkLlxuICAgICAgICAgICAgLy8gV2hlbiB0aGUgb2JzZXJ2YWJsZSBpcyBjbG9zZWQgZmlyc3QgKGUuZy4gd2hlbiB0ZWFyaW5nIGRvd24gYSBXZWJDaGF0IGluc3RhbmNlKSB0aGVuXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIG1hbnVhbGx5IGNsb3NlIHRoZSBXZWJTb2NrZXQuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3cy5yZWFkeVN0YXRlID09PSAwIHx8IHdzLnJlYWR5U3RhdGUgPT09IDEpIHdzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pIGFzIE9ic2VydmFibGU8VD5cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29ubmVjdFRvQ29udmVyc2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHt0aGlzLmRvbWFpbn0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uSWR9P3dhdGVybWFyaz0ke3RoaXMud2F0ZXJtYXJrfWAsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kbyhyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWNyZXQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSByZXN1bHQucmVzcG9uc2UudG9rZW47XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSByZXN1bHQucmVzcG9uc2Uuc3RyZWFtVXJsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoXyA9PiBudWxsKVxuICAgICAgICAgICAgLnJldHJ5V2hlbihlcnJvciQgPT4gZXJyb3IkXG4gICAgICAgICAgICAgICAgLm1lcmdlTWFwKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0b2tlbiBoYXMgZXhwaXJlZC4gV2UgY2FuJ3QgcmVjb3ZlciBmcm9tIHRoaXMgaGVyZSwgYnV0IHRoZSBlbWJlZGRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlYnNpdGUgbWlnaHQgZXZlbnR1YWxseSBjYWxsIHJlY29ubmVjdCgpIHdpdGggYSBuZXcgdG9rZW4gYW5kIHN0cmVhbVVybC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yQ29udmVyc2F0aW9uRW5kZWQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZGVsYXkodGhpcy50aW1lb3V0LCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICAudGFrZSh0aGlzLnJldHJpZXMpXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbW1vbkhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICAgIFwieC1tcy1ib3QtYWdlbnRcIjogdGhpcy5fYm90QWdlbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJvdEFnZW50KGN1c3RvbUFnZW50OiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBjbGllbnRBZ2VudCA9ICdkaXJlY3RsaW5lanMnXG5cbiAgICAgICAgaWYgKGN1c3RvbUFnZW50KSB7XG4gICAgICAgICAgICBjbGllbnRBZ2VudCArPSBgOyAke2N1c3RvbUFnZW50fWBcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHtESVJFQ1RfTElORV9WRVJTSU9OfSAoJHtjbGllbnRBZ2VudH0gJHtwcm9jZXNzLmVudi5ucG1fcGFja2FnZV92ZXJzaW9ufSlgO1xuICAgIH1cblxuICAgIHNldFVzZXJJZCh1c2VySWQ6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLk9ubGluZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXJlY3RMaW5lSlM6IEl0IGlzIGNvbm5lY3RlZCwgd2UgY2Fubm90IHNldCB1c2VyIGlkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlcklkRnJvbVRva2VuID0gdGhpcy5wYXJzZVRva2VuKHRoaXMudG9rZW4pO1xuICAgICAgICBpZiAodXNlcklkRnJvbVRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IHVzZXIgaWQgaXMgYWxyZWFkeSBzZXQgaW4gdG9rZW4sIHdpbGwgaWdub3JlIHRoaXMgdXNlciBpZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgvXmRsXy91LnRlc3QodXNlcklkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUud2FybignRGlyZWN0TGluZUpTOiB1c2VyIGlkIHByZWZpeGVkIHdpdGggXCJkbF9cIiBpcyByZXNlcnZlZCBhbmQgbXVzdCBiZSBlbWJlZGRlZCBpbnRvIHRoZSBEaXJlY3QgTGluZSB0b2tlbiB0byBwcmV2ZW50IGZvcmdlcnkuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24gPSB1c2VySWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVRva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdXNlciB9ID0gand0RGVjb2RlPEp3dFBheWxvYWQ+KHRva2VuKSBhcyB7IFtrZXk6IHN0cmluZ106IGFueTsgfTtcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEludmFsaWRUb2tlbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQUEsT0FBQTtBQUNBQSxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUlBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFVBQUEsR0FBQUMsdUJBQUEsQ0FBQUwsT0FBQTtBQUVBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUVBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUVBLElBQUFNLGdCQUFBLEdBQUFDLHNCQUFBLENBQUFQLE9BQUE7QUFHQSxJQUFBUSxvQkFBQSxHQUFBUixPQUFBO0FBQTRELElBQUFTLFNBQUE7QUFBQSxTQUFBQyx5QkFBQUMsV0FBQSxlQUFB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QUFJLENBQUNPLEtBQUssQ0FBRTtRQUN2QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUNjO01BQzNCLENBQUM7SUFDTDtFQUFDO0lBQUF2RyxHQUFBO0lBQUFxSCxLQUFBLEVBRUQsU0FBQWIsWUFBQSxFQUFzRDtNQUFBLElBQWxDcUksV0FBbUIsR0FBQXpOLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF1RSxTQUFBLEdBQUF2RSxTQUFBLE1BQUcsRUFBRTtNQUN4QyxJQUFJME4sV0FBVyxHQUFHLGNBQWM7TUFFaEMsSUFBSUQsV0FBVyxFQUFFO1FBQ2JDLFdBQVcsU0FBQTVKLE1BQUEsQ0FBUzJKLFdBQVcsQ0FBRTtNQUNyQztNQUVBLFVBQUEzSixNQUFBLENBQVV2RCxtQkFBbUIsUUFBQXVELE1BQUEsQ0FBSzRKLFdBQVcsT0FBQTVKLE1BQUE7SUFDakQ7RUFBQztJQUFBbEYsR0FBQTtJQUFBcUgsS0FBQSxFQUVELFNBQUEwSCxVQUFVQyxNQUFjLEVBQUU7TUFDdEIsSUFBSSxJQUFJLENBQUN0SCxpQkFBaUIsQ0FBQ29CLFFBQVEsQ0FBQyxDQUFDLEtBQUtsSCxnQkFBZ0IsQ0FBQ2tHLE1BQU0sRUFBRTtRQUMvRCxNQUFNLElBQUk3RixLQUFLLENBQUMsdURBQXVELENBQUM7TUFDNUU7TUFFQSxJQUFNZ04sZUFBZSxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDLElBQUksQ0FBQ3pKLEtBQUssQ0FBQztNQUNuRCxJQUFJd0osZUFBZSxFQUFFO1FBQ2pCLE9BQU9oSyxPQUFPLENBQUNlLElBQUksQ0FBQywwRUFBMEUsQ0FBQztNQUNuRztNQUVBLElBQUksTUFBTyxDQUFDbUosSUFBSSxDQUFDSCxNQUFNLENBQUMsRUFBRTtRQUN0QixPQUFPL0osT0FBTyxDQUFDZSxJQUFJLENBQUMsMkhBQTJILENBQUM7TUFDcEo7TUFFQSxJQUFJLENBQUNvRCx5QkFBeUIsR0FBRzRGLE1BQU07SUFDM0M7RUFBQztJQUFBaFAsR0FBQTtJQUFBcUgsS0FBQSxFQUVELFNBQUE2SCxXQUFtQnpKLEtBQWEsRUFBRTtNQUM5QixJQUFJO1FBQ0EsSUFBQTJKLEtBQUEsR0FBaUIsSUFBQUMscUJBQVMsRUFBYTVKLEtBQUssQ0FBQztVQUFyQ3lELElBQUksR0FBQWtHLEtBQUEsQ0FBSmxHLElBQUk7UUFDWixPQUFPQSxJQUFJO01BQ2YsQ0FBQyxDQUFDLE9BQU9vQixDQUFDLEVBQUU7UUFDUixJQUFJQSxDQUFDLFlBQVlnRiw0QkFBaUIsRUFBRTtVQUNoQyxPQUFPM0osU0FBUztRQUNwQjtNQUNKO0lBQ0o7RUFBQztFQUFBLE9BQUFSLFVBQUE7QUFBQTtBQUFBdEQsT0FBQSxDQUFBc0QsVUFBQSxHQUFBQSxVQUFBIiwiaWdub3JlTGlzdCI6W119
728
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwiX0JlaGF2aW9yU3ViamVjdCIsIl9PYnNlcnZhYmxlIiwiX2FzeW5jIiwiX2p3dERlY29kZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2RlZHVwZUZpbGVuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZGlyZWN0TGluZVN0cmVhbWluZyIsIl9leGNsdWRlZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJESVJFQ1RfTElORV9WRVJTSU9OIiwiQ29ubmVjdGlvblN0YXR1cyIsImV4cG9ydHMiLCJ3cmFwQWpheFdpdGhSZXRyeSIsInNjaGVkdWxlciIsIm5vdEltcGxlbWVudGVkIiwiRXJyb3IiLCJpbm5lciIsInJlc3BvbnNlJCIsImVyciIsInN0YXR1cyIsInJldHJ5QWZ0ZXJWYWx1ZSIsInhociIsImdldFJlc3BvbnNlSGVhZGVyIiwicmV0cnlBZnRlciIsIk51bWJlciIsImlzTmFOIiwiT2JzZXJ2YWJsZSIsInRpbWVyIiwiZmxhdE1hcCIsIl8iLCJvdXRlciIsInVybE9yUmVxdWVzdCIsImFzc2lnbiIsInVybCIsImhlYWRlcnMiLCJwb3N0IiwiYm9keSIsInB1dCIsInBhdGNoIiwiX2RlbGV0ZSIsImdldEpTT04iLCJtYWtlU2VydmljZXMiLCJzZXJ2aWNlcyIsIkFzeW5jU2NoZWR1bGVyIiwiYWpheCIsIldlYlNvY2tldCIsInJhbmRvbSIsIk1hdGgiLCJsaWZldGltZVJlZnJlc2hUb2tlbiIsImludGVydmFsUmVmcmVzaFRva2VuIiwiUE9MTElOR19JTlRFUlZBTF9MT1dFUl9CT1VORCIsImVycm9yRXhwaXJlZFRva2VuIiwiZXJyb3JDb252ZXJzYXRpb25FbmRlZCIsImVycm9yRmFpbGVkVG9Db25uZWN0Iiwia29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJfY29uc29sZSIsIl9sZW4iLCJvcHRpb25hbFBhcmFtcyIsIkFycmF5IiwiX2tleSIsIndpbmRvdyIsImNvbnNvbGUiLCJjb25jYXQiLCJEaXJlY3RMaW5lIiwib3B0aW9ucyIsIl9jbGFzc0NhbGxDaGVjazIiLCJCZWhhdmlvclN1YmplY3QiLCJVbmluaXRpYWxpemVkIiwic2VjcmV0IiwidG9rZW4iLCJ3ZWJTb2NrZXQiLCJ1bmRlZmluZWQiLCJzdHJlYW1pbmciLCJjb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMiLCJsb2NhbGUiLCJ0b1N0cmluZyIsImxvY2FsZU9uU3RhcnRDb252ZXJzYXRpb24iLCJ3YXJuIiwiZG9tYWluIiwiY29udmVyc2F0aW9uSWQiLCJ3YXRlcm1hcmsiLCJzdHJlYW1VcmwiLCJ0aW1lb3V0IiwicmV0cmllcyIsIl9ib3RBZ2VudCIsImdldEJvdEFnZW50IiwiYm90QWdlbnQiLCJwYXJzZWRQb2xsaW5nSW50ZXJ2YWwiLCJwb2xsaW5nSW50ZXJ2YWwiLCJleHBpcmVkVG9rZW5FeGhhdXN0aW9uIiwic2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrIiwiRXhwaXJlZFRva2VuIiwiRmFpbGVkVG9Db25uZWN0IiwiYWN0aXZpdHkkIiwid2ViU29ja2V0QWN0aXZpdHkkIiwicG9sbGluZ0dldEFjdGl2aXR5JCIsInNoYXJlIiwiX2NyZWF0ZUNsYXNzMiIsInZhbHVlIiwiY2hlY2tDb25uZWN0aW9uIiwiX3RoaXMiLCJvbmNlIiwib2JzIiwiY29ubmVjdGlvblN0YXR1cyQiLCJjb25uZWN0aW9uU3RhdHVzIiwibmV4dCIsIkNvbm5lY3RpbmciLCJPbmxpbmUiLCJvZiIsInN0YXJ0Q29udmVyc2F0aW9uIiwiY29udmVyc2F0aW9uIiwicmVmZXJlbmNlR3JhbW1hcklkIiwicmVmcmVzaFRva2VuTG9vcCIsImVycm9yIiwibWFwIiwiRW5kZWQiLCJ0YWtlIiwiY29ubmVjdGlvblN0YXR1c0Zyb20iLCJjb25uZWN0aW9uU3RhdHVzVG8iLCJtYXhBdHRlbXB0cyIsImF0dGVtcHRzIiwiY3VyclN0YXR1cyIsImV4cGlyZWRUb2tlbiIsImdldFZhbHVlIiwicHJvdGVjdGVkQ29ubmVjdGlvblN0YXR1cyIsIl90aGlzMiIsIm1ldGhvZCIsInVzZXIiLCJpZCIsInVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb24iLCJjb21tb25IZWFkZXJzIiwiYWpheFJlc3BvbnNlIiwicmVzcG9uc2UiLCJyZXRyeVdoZW4iLCJlcnJvciQiLCJtZXJnZU1hcCIsImRlbGF5IiwiX3RoaXMzIiwidG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uIiwiaW50ZXJ2YWwiLCJyZWZyZXNoVG9rZW4iLCJzdWJzY3JpYmUiLCJEYXRlIiwiX3RoaXM0IiwicmVjb25uZWN0IiwiZW5kIiwidW5zdWJzY3JpYmUiLCJlIiwiZ2V0U2Vzc2lvbklkIiwiX3RoaXM1Iiwid2l0aENyZWRlbnRpYWxzIiwic2Vzc2lvbklkIiwiY2F0Y2hFeHBpcmVkVG9rZW4iLCJwb3N0QWN0aXZpdHkiLCJhY3Rpdml0eSIsIl90aGlzNiIsImRlbGl2ZXJ5TW9kZSIsImZyb20iLCJ0eXBlIiwiYXR0YWNobWVudHMiLCJwb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyIsImNhdGNoUG9zdEVycm9yIiwiX3RoaXM3IiwiYXR0YWNobWVudE5hbWVzIiwiZGVkdXBlRmlsZW5hbWVzIiwibWVkaWEiLCJuYW1lIiwiY2xlYW5zZWRBdHRhY2htZW50cyIsImF0dGFjaG1lbnQiLCJpbmRleCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJCbG9iIiwiSlNPTiIsInN0cmluZ2lmeSIsIl9yZWYiLCJzdHJpbmciLCJjb250ZW50VXJsIiwib3RoZXJzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInJlc3BvbnNlVHlwZSIsImNvbnRlbnRUeXBlIiwiY291bnQiLCJfdGhpczgiLCJwb2xsZXIkIiwiY3JlYXRlIiwic3Vic2NyaWJlciIsInRyaWdnZXIkIiwic3RhcnRUaW1lc3RhbXAiLCJub3ciLCJBY2NlcHQiLCJyZXN1bHQiLCJzZXRUaW1lb3V0IiwibWF4IiwiZW1wdHkiLCJhY3Rpdml0eUdyb3VwIiwib2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwIiwiYWN0aXZpdGllcyIsIl90aGlzOSIsIm9ic2VydmFibGVXZWJTb2NrZXQiLCJnZXRSZXRyeURlbGF5IiwicmVjb25uZWN0VG9Db252ZXJzYXRpb24iLCJmbG9vciIsIl90aGlzMTAiLCJ3cyIsInN1YiIsImNsb3NlZCIsIm9ub3BlbiIsIm9wZW4iLCJzZW5kIiwib25jbG9zZSIsImNsb3NlIiwib25lcnJvciIsIm9ubWVzc2FnZSIsImRhdGEiLCJwYXJzZSIsInJlYWR5U3RhdGUiLCJfdGhpczExIiwiY3VzdG9tQWdlbnQiLCJjbGllbnRBZ2VudCIsInNldFVzZXJJZCIsInVzZXJJZCIsInVzZXJJZEZyb21Ub2tlbiIsInBhcnNlVG9rZW4iLCJ0ZXN0IiwiX3JlZjIiLCJqd3REZWNvZGUiLCJJbnZhbGlkVG9rZW5FcnJvciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RMaW5lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEluIG9yZGVyIHRvIGtlZXAgZmlsZSBzaXplIGRvd24sIG9ubHkgaW1wb3J0IHRoZSBwYXJ0cyBvZiByeGpzIHRoYXQgd2UgdXNlXG5cbmltcG9ydCAnY29yZS1qcy9mZWF0dXJlcy9wcm9taXNlJztcbmltcG9ydCAndXJsLXNlYXJjaC1wYXJhbXMtcG9seWZpbGwnO1xuaW1wb3J0IHsgQWpheFJlc3BvbnNlLCBBamF4Q3JlYXRpb25NZXRob2QsIEFqYXhSZXF1ZXN0LCBBamF4RXJyb3IgfSBmcm9tICdyeGpzL29ic2VydmFibGUvZG9tL0FqYXhPYnNlcnZhYmxlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzL09ic2VydmFibGUnO1xuaW1wb3J0IHsgSVNjaGVkdWxlciB9IGZyb20gJ3J4anMvU2NoZWR1bGVyJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICdyeGpzL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcy9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgYXN5bmMgYXMgQXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgand0RGVjb2RlLCB7IEp3dFBheWxvYWQsIEludmFsaWRUb2tlbkVycm9yIH0gZnJvbSAnand0LWRlY29kZSc7XG5cbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY2F0Y2gnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvY291bnQnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9kZWxheSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL2RvJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvZmlsdGVyJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWFwJztcbmltcG9ydCAncnhqcy9hZGQvb3BlcmF0b3IvbWVyZ2VNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9jb25jYXRNYXAnO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9yZXRyeVdoZW4nO1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9zaGFyZSc7XG5pbXBvcnQgJ3J4anMvYWRkL29wZXJhdG9yL3Rha2UnO1xuXG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvZG9tL2FqYXgnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL2VtcHR5JztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9mcm9tJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9pbnRlcnZhbCc7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvb2YnO1xuaW1wb3J0ICdyeGpzL2FkZC9vYnNlcnZhYmxlL3Rocm93JztcblxuaW1wb3J0IGRlZHVwZUZpbGVuYW1lcyBmcm9tICcuL2RlZHVwZUZpbGVuYW1lcyc7XG5pbXBvcnQgeyBvYmplY3RFeHByZXNzaW9uIH0gZnJvbSAnQGJhYmVsL3R5cGVzJztcblxuaW1wb3J0IHsgRGlyZWN0TGluZVN0cmVhbWluZyB9IGZyb20gJy4vZGlyZWN0TGluZVN0cmVhbWluZyc7XG5leHBvcnQgeyBEaXJlY3RMaW5lU3RyZWFtaW5nIH07XG5cbmNvbnN0IERJUkVDVF9MSU5FX1ZFUlNJT04gPSAnRGlyZWN0TGluZS8zLjAnO1xuXG5kZWNsYXJlIHZhciBwcm9jZXNzOiB7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIGVudjoge1xuICAgICAgICBWRVJTSU9OOiBzdHJpbmc7XG4gICAgICAgIG5wbV9wYWNrYWdlX3ZlcnNpb246IHN0cmluZztcbiAgICB9O1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgcmVsZWFzZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbn07XG5cbi8vIERpcmVjdCBMaW5lIDMuMCB0eXBlc1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnZlcnNhdGlvbiB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGVUYWc/OiBzdHJpbmcsXG4gICAgc3RyZWFtVXJsPzogc3RyaW5nLFxuICAgIHJlZmVyZW5jZUdyYW1tYXJJZD86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBNZWRpYVR5cGUgPSBcImltYWdlL3BuZ1wiIHwgXCJpbWFnZS9qcGdcIiB8IFwiaW1hZ2UvanBlZ1wiIHwgXCJpbWFnZS9naWZcIiB8IFwiaW1hZ2Uvc3ZnK3htbFwiIHwgXCJhdWRpby9tcGVnXCIgfCBcImF1ZGlvL21wNFwiIHwgXCJ2aWRlby9tcDRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZWRpYSB7XG4gICAgY29udGVudFR5cGU6IE1lZGlhVHlwZSxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmtub3duTWVkaWF7XG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgICBjb250ZW50VXJsOiBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICB0aHVtYm5haWxVcmw/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ2FyZEFjdGlvblR5cGVzID0gXCJjYWxsXCIgfCBcImRvd25sb2FkRmlsZVwifCBcImltQmFja1wiIHwgXCJtZXNzYWdlQmFja1wiIHwgXCJvcGVuVXJsXCIgfCBcInBsYXlBdWRpb1wiIHwgXCJwbGF5VmlkZW9cIiB8IFwicG9zdEJhY2tcIiB8IFwic2lnbmluXCIgfCBcInNob3dJbWFnZVwiO1xuXG5leHBvcnQgdHlwZSBDYXJkQWN0aW9uID0gQ2FsbENhcmRBY3Rpb24gfCBEb3dubG9hZEZpbGVDYXJkQWN0aW9uIHwgSU1CYWNrQ2FyZEFjdGlvbiB8IE1lc3NhZ2VCYWNrQ2FyZEFjdGlvbiB8IE9wZW5VUkxDYXJkQWN0aW9uIHwgUGxheUF1ZGlvQ2FyZEFjdGlvbiB8IFBsYXlWaWRlb0NhcmRBY3Rpb24gfCBQb3N0QmFja0NhcmRBY3Rpb24gfCBTaWduSW5DYXJkQWN0aW9uIHwgU2hvd0ltYWdlQ2FyZEFjdGlvbjtcblxuZXhwb3J0IGludGVyZmFjZSBDYWxsQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImNhbGxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxvYWRGaWxlQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcImRvd25sb2FkRmlsZVwiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTUJhY2tDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZT86IHN0cmluZyxcbiAgICB0eXBlOiBcImltQmFja1wiLFxuICAgIHZhbHVlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTWVzc2FnZUJhY2tDYXJkQWN0aW9uID0gTWVzc2FnZUJhY2tXaXRoSW1hZ2UgfCBNZXNzYWdlQmFja1dpdGhUaXRsZVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VCYWNrV2l0aEltYWdlIHtcbiAgICBkaXNwbGF5VGV4dD86IHN0cmluZyxcbiAgICBpbWFnZTogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJtZXNzYWdlQmFja1wiLFxuICAgIHZhbHVlPzogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUJhY2tXaXRoVGl0bGUge1xuICAgIGRpc3BsYXlUZXh0Pzogc3RyaW5nLFxuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm1lc3NhZ2VCYWNrXCIsXG4gICAgdmFsdWU/OiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuVVJMQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcIm9wZW5VcmxcIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxheUF1ZGlvQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0eXBlOiBcInBsYXlBdWRpb1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQbGF5VmlkZW9DYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwicGxheVZpZGVvXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RCYWNrQ2FyZEFjdGlvbiB7XG4gICAgaW1hZ2U/OiBzdHJpbmcsXG4gICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgdHlwZTogXCJwb3N0QmFja1wiLFxuICAgIHZhbHVlOiBhbnlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaG93SW1hZ2VDYXJkQWN0aW9uIHtcbiAgICBpbWFnZT86IHN0cmluZyxcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIHR5cGU6IFwic2hvd0ltYWdlXCIsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JbkNhcmRBY3Rpb24ge1xuICAgIGltYWdlPzogc3RyaW5nLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdHlwZTogXCJzaWduaW5cIixcbiAgICB2YWx1ZTogYW55XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZEltYWdlIHtcbiAgICBhbHQ/OiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhlcm9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuaGVyb1wiLFxuICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBpbWFnZXM/OiBDYXJkSW1hZ2VbXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgdGFwPzogQ2FyZEFjdGlvblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaHVtYm5haWwge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC50aHVtYm5haWxcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgaW1hZ2VzPzogQ2FyZEltYWdlW10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIHRhcD86IENhcmRBY3Rpb25cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuc2lnbmluXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0ZXh0Pzogc3RyaW5nLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQub2F1dGhcIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGNvbm5lY3Rpb25uYW1lOiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjZWlwdEl0ZW0ge1xuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIHN1YnRpdGxlPzogc3RyaW5nLFxuICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgaW1hZ2U/OiBDYXJkSW1hZ2UsXG4gICAgcHJpY2U/OiBzdHJpbmcsXG4gICAgcXVhbnRpdHk/OiBzdHJpbmcsXG4gICAgdGFwPzogQ2FyZEFjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY2VpcHQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5yZWNlaXB0XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgZmFjdHM/OiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSxcbiAgICAgICAgaXRlbXM/OiBSZWNlaXB0SXRlbVtdLFxuICAgICAgICB0YXA/OiBDYXJkQWN0aW9uLFxuICAgICAgICB0YXg/OiBzdHJpbmcsXG4gICAgICAgIHZhdD86IHN0cmluZyxcbiAgICAgICAgdG90YWw/OiBzdHJpbmcsXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW11cbiAgICB9XG59XG5cbi8vIERlcHJlY2F0ZWQgZm9ybWF0IGZvciBTa3lwZSBjaGFubmVscy4gRm9yIHRlc3RpbmcgbGVnYWN5IGJvdHMgaW4gRW11bGF0b3Igb25seS5cbmV4cG9ydCBpbnRlcmZhY2UgRmxleENhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5mbGV4XCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIGltYWdlcz86IENhcmRJbWFnZVtdLFxuICAgICAgICBidXR0b25zPzogQ2FyZEFjdGlvbltdLFxuICAgICAgICBhc3BlY3Q/OiBzdHJpbmdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYXVkaW9cIixcbiAgICBjb250ZW50OiB7XG4gICAgICAgIHRpdGxlPzogc3RyaW5nLFxuICAgICAgICBzdWJ0aXRsZT86IHN0cmluZyxcbiAgICAgICAgdGV4dD86IHN0cmluZyxcbiAgICAgICAgbWVkaWE/OiB7IHVybDogc3RyaW5nLCBwcm9maWxlPzogc3RyaW5nIH1bXSxcbiAgICAgICAgYnV0dG9ucz86IENhcmRBY3Rpb25bXSxcbiAgICAgICAgYXV0b2xvb3A/OiBib29sZWFuLFxuICAgICAgICBhdXRvc3RhcnQ/OiBib29sZWFuXG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvQ2FyZCB7XG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5jYXJkLnZpZGVvXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGl2ZUNhcmQge1xuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLFxuICAgIGNvbnRlbnQ6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25DYXJkIHtcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi92bmQubWljcm9zb2Z0LmNhcmQuYW5pbWF0aW9uXCIsXG4gICAgY29udGVudDoge1xuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgc3VidGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHRleHQ/OiBzdHJpbmcsXG4gICAgICAgIG1lZGlhPzogeyB1cmw6IHN0cmluZywgcHJvZmlsZT86IHN0cmluZyB9W10sXG4gICAgICAgIGJ1dHRvbnM/OiBDYXJkQWN0aW9uW10sXG4gICAgICAgIGltYWdlPzogeyB1cmw6IHN0cmluZywgYWx0Pzogc3RyaW5nIH0sXG4gICAgICAgIGF1dG9sb29wPzogYm9vbGVhbixcbiAgICAgICAgYXV0b3N0YXJ0PzogYm9vbGVhblxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgS25vd25NZWRpYSA9IE1lZGlhIHwgSGVyb0NhcmQgfCBUaHVtYm5haWwgfCBTaWduaW4gfCBPQXV0aCB8IFJlY2VpcHQgfCBBdWRpb0NhcmQgfCBWaWRlb0NhcmQgfCBBbmltYXRpb25DYXJkIHwgRmxleENhcmQgfCBBZGFwdGl2ZUNhcmQ7XG5leHBvcnQgdHlwZSBBdHRhY2htZW50ID0gS25vd25NZWRpYSB8IFVua25vd25NZWRpYTtcblxuZXhwb3J0IHR5cGUgVXNlclJvbGUgPSBcImJvdFwiIHwgXCJjaGFubmVsXCIgfCBcInVzZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgaWNvblVybD86IHN0cmluZyxcbiAgICByb2xlPzogVXNlclJvbGVcbn1cblxuZXhwb3J0IHR5cGUgRGVsaXZlcnlNb2RlID0gXCJub3JtYWxcIiB8IFwic3RyZWFtXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgY2hhbm5lbERhdGE/OiBhbnksXG4gICAgY2hhbm5lbElkPzogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvbj86IHsgaWQ6IHN0cmluZyB9LFxuICAgIGVUYWc/OiBzdHJpbmcsXG4gICAgZnJvbTogVXNlcixcbiAgICBpZD86IHN0cmluZyxcbiAgICB0aW1lc3RhbXA/OiBzdHJpbmcsXG4gICAgZGVsaXZlcnlNb2RlPzogRGVsaXZlcnlNb2RlXG59XG5cbmV4cG9ydCB0eXBlIEF0dGFjaG1lbnRMYXlvdXQgPSBcImxpc3RcIiB8IFwiY2Fyb3VzZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlIGV4dGVuZHMgSUFjdGl2aXR5IHtcbiAgICB0eXBlOiBcIm1lc3NhZ2VcIixcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZyxcbiAgICB0ZXh0Rm9ybWF0PzogXCJwbGFpblwiIHwgXCJtYXJrZG93blwiIHwgXCJ4bWxcIixcbiAgICBhdHRhY2htZW50TGF5b3V0PzogQXR0YWNobWVudExheW91dCxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXSxcbiAgICBlbnRpdGllcz86IGFueVtdLFxuICAgIHN1Z2dlc3RlZEFjdGlvbnM/OiB7IGFjdGlvbnM6IENhcmRBY3Rpb25bXSwgdG8/OiBzdHJpbmdbXSB9LFxuICAgIHNwZWFrPzogc3RyaW5nLFxuICAgIGlucHV0SGludD86IHN0cmluZyxcbiAgICB2YWx1ZT86IG9iamVjdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGluZyBleHRlbmRzIElBY3Rpdml0eSB7XG4gICAgdHlwZTogXCJ0eXBpbmdcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50QWN0aXZpdHkgZXh0ZW5kcyBJQWN0aXZpdHkge1xuICAgIHR5cGU6IFwiZXZlbnRcIixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxufVxuXG5leHBvcnQgdHlwZSBBY3Rpdml0eSA9IE1lc3NhZ2UgfCBUeXBpbmcgfCBFdmVudEFjdGl2aXR5O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5R3JvdXAge1xuICAgIGFjdGl2aXRpZXM6IEFjdGl2aXR5W10sXG4gICAgd2F0ZXJtYXJrOiBzdHJpbmdcbn1cblxuLy8gVGhlc2UgdHlwZXMgYXJlIHNwZWNpZmljIHRvIHRoaXMgY2xpZW50IGxpYnJhcnksIG5vdCB0byBEaXJlY3QgTGluZSAzLjBcblxuZXhwb3J0IGVudW0gQ29ubmVjdGlvblN0YXR1cyB7XG4gICAgVW5pbml0aWFsaXplZCwgICAgICAgICAgICAgIC8vIHRoZSBzdGF0dXMgd2hlbiB0aGUgRGlyZWN0TGluZSBvYmplY3QgaXMgZmlyc3QgY3JlYXRlZC9jb25zdHJ1Y3RlZFxuICAgIENvbm5lY3RpbmcsICAgICAgICAgICAgICAgICAvLyBjdXJyZW50bHkgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdGhlIGNvbnZlcnNhdGlvblxuICAgIE9ubGluZSwgICAgICAgICAgICAgICAgICAgICAvLyBzdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIHRoZSBjb252ZXJzYXRpb24uIENvbm5lY3Rpb24gaXMgaGVhbHRoeSBzbyBmYXIgYXMgd2Uga25vdy5cbiAgICBFeHBpcmVkVG9rZW4sICAgICAgICAgICAgICAgLy8gbGFzdCBvcGVyYXRpb24gZXJyb3JlZCBvdXQgd2l0aCBhbiBleHBpcmVkIHRva2VuLiBQb3NzaWJseSB3YWl0aW5nIGZvciBzb21lb25lIHRvIHN1cHBseSBhIG5ldyBvbmUuXG4gICAgRmFpbGVkVG9Db25uZWN0LCAgICAgICAgICAgIC8vIHRoZSBpbml0aWFsIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGUgY29udmVyc2F0aW9uIGZhaWxlZC4gTm8gcmVjb3ZlcnkgcG9zc2libGUuXG4gICAgRW5kZWQgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBib3QgZW5kZWQgdGhlIGNvbnZlcnNhdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdExpbmVPcHRpb25zIHtcbiAgICBzZWNyZXQ/OiBzdHJpbmcsXG4gICAgdG9rZW4/OiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmcsXG4gICAgd2F0ZXJtYXJrPzogc3RyaW5nLFxuICAgIGRvbWFpbj86IHN0cmluZyxcbiAgICB3ZWJTb2NrZXQ/OiBib29sZWFuLFxuICAgIHBvbGxpbmdJbnRlcnZhbD86IG51bWJlcixcbiAgICBzdHJlYW1Vcmw/OiBzdHJpbmcsXG4gICAgdGltZW91dD86IG51bWJlcixcbiAgICAvLyBBdHRhY2hlZCB0byBhbGwgcmVxdWVzdHMgdG8gaWRlbnRpZnkgcmVxdWVzdGluZyBhZ2VudC5cbiAgICBib3RBZ2VudD86IHN0cmluZyxcbiAgICBjb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXM/OiBhbnksXG4gICAgLyoqXG4gICAgICogUGVyLWNvbnZlcnNhdGlvbiBzd2l0Y2ggZm9yIHN0cmVhbWluZyBkZWxpdmVyeSBtb2RlLlxuICAgICAqIElmIHRydWUsIGV2ZXJ5IG91dGdvaW5nIGFjdGl2aXR5IHdpbGwgaW5jbHVkZSBkZWxpdmVyeU1vZGU6ICdzdHJlYW0nLlxuICAgICAqIElmIGZhbHNlL29taXR0ZWQsIGRlbGl2ZXJ5TW9kZSBpcyBub3Qgc2VudCAoZGVmYXVsdHMgdG8gJ25vcm1hbCcgaW4gQUJTKS5cbiAgICAgKi9cbiAgICBzdHJlYW1pbmc/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZXMge1xuICAgIHNjaGVkdWxlcjogSVNjaGVkdWxlcjtcbiAgICBXZWJTb2NrZXQ6IHR5cGVvZiBXZWJTb2NrZXQ7XG4gICAgYWpheDogQWpheENyZWF0aW9uTWV0aG9kO1xuICAgIHJhbmRvbTogKCkgPT4gbnVtYmVyO1xufVxuXG5jb25zdCB3cmFwQWpheFdpdGhSZXRyeSA9IChzb3VyY2U6IEFqYXhDcmVhdGlvbk1ldGhvZCwgc2NoZWR1bGVyOiBJU2NoZWR1bGVyKTogQWpheENyZWF0aW9uTWV0aG9kID0+e1xuXG4gICAgY29uc3Qgbm90SW1wbGVtZW50ZWQgPSAoKTogbmV2ZXIgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpOyB9O1xuXG4gICAgY29uc3QgaW5uZXIgPSAocmVzcG9uc2UkIDogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+KSA9PiB7XG4gICAgICAgIHJldHVybiByZXNwb25zZSRcbiAgICAgICAgLmNhdGNoPEFqYXhSZXNwb25zZSwgQWpheFJlc3BvbnNlPigoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZihlcnIuc3RhdHVzID09PSA0Mjkpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJWYWx1ZSA9IGVyci54aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihyZXRyeUFmdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmKCFpc05hTihyZXRyeUFmdGVyKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRpbWVyKHJldHJ5QWZ0ZXIsIHNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoXyA9PiBPYnNlcnZhYmxlLnRocm93KGVyciwgc2NoZWR1bGVyKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnIsIHNjaGVkdWxlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRlciA9ICh1cmxPclJlcXVlc3Q6IHN0cmluZ3wgQWpheFJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGlubmVyKHNvdXJjZSh1cmxPclJlcXVlc3QpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob3V0ZXIsIHtcbiAgICAgICAgZ2V0OiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgcG9zdDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHB1dDogKHVybDogc3RyaW5nLCBib2R5PzogYW55LCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxBamF4UmVzcG9uc2U+ID0+IG5vdEltcGxlbWVudGVkKCksXG4gICAgICAgIHBhdGNoOiAodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIGhlYWRlcnM/OiBPYmplY3QpOiBPYnNlcnZhYmxlPEFqYXhSZXNwb25zZT4gPT4gbm90SW1wbGVtZW50ZWQoKSxcbiAgICAgICAgZ2V0SlNPTjogPFQ+KHVybDogc3RyaW5nLCBoZWFkZXJzPzogT2JqZWN0KTogT2JzZXJ2YWJsZTxUPiA9PiBub3RJbXBsZW1lbnRlZCgpXG4gICAgfSk7XG59XG5cbmNvbnN0IG1ha2VTZXJ2aWNlcyA9IChzZXJ2aWNlczogUGFydGlhbDxTZXJ2aWNlcz4pOiBTZXJ2aWNlcyA9PiB7XG4gICAgY29uc3Qgc2NoZWR1bGVyID0gc2VydmljZXMuc2NoZWR1bGVyIHx8IEFzeW5jU2NoZWR1bGVyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjaGVkdWxlcixcbiAgICAgICAgYWpheDogd3JhcEFqYXhXaXRoUmV0cnkoc2VydmljZXMuYWpheCB8fCBPYnNlcnZhYmxlLmFqYXgsIHNjaGVkdWxlciksXG4gICAgICAgIFdlYlNvY2tldDogc2VydmljZXMuV2ViU29ja2V0IHx8IFdlYlNvY2tldCxcbiAgICAgICAgcmFuZG9tOiBzZXJ2aWNlcy5yYW5kb20gfHwgTWF0aC5yYW5kb20sXG4gICAgfVxufVxuXG5jb25zdCBsaWZldGltZVJlZnJlc2hUb2tlbiA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgaW50ZXJ2YWxSZWZyZXNoVG9rZW4gPSBsaWZldGltZVJlZnJlc2hUb2tlbiAvIDI7XG5cbmNvbnN0IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQ6IG51bWJlciA9IDIwMDsgLy9tc1xuXG5jb25zdCBlcnJvckV4cGlyZWRUb2tlbiA9IG5ldyBFcnJvcihcImV4cGlyZWQgdG9rZW5cIik7XG5jb25zdCBlcnJvckNvbnZlcnNhdGlvbkVuZGVkID0gbmV3IEVycm9yKFwiY29udmVyc2F0aW9uIGVuZGVkXCIpO1xuY29uc3QgZXJyb3JGYWlsZWRUb0Nvbm5lY3QgPSBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gY29ubmVjdFwiKTtcblxuY29uc3Qga29uc29sZSA9IHtcbiAgICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi4gb3B0aW9uYWxQYXJhbXM6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAod2luZG93IGFzIGFueSlbXCJib3RjaGF0RGVidWdcIl0gJiYgbWVzc2FnZSlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLiBvcHRpb25hbFBhcmFtcyk7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCb3RDb25uZWN0aW9uIHtcbiAgICBjb25uZWN0aW9uU3RhdHVzJDogQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25TdGF0dXM+LFxuICAgIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT4sXG4gICAgZW5kKCk6IHZvaWQsXG4gICAgcmVmZXJlbmNlR3JhbW1hcklkPzogc3RyaW5nLFxuICAgIHBvc3RBY3Rpdml0eShhY3Rpdml0eTogQWN0aXZpdHkpOiBPYnNlcnZhYmxlPHN0cmluZz4sXG4gICAgZ2V0U2Vzc2lvbklkPyA6ICgpID0+IE9ic2VydmFibGU8c3RyaW5nPlxufVxuXG5leHBvcnQgY2xhc3MgRGlyZWN0TGluZSBpbXBsZW1lbnRzIElCb3RDb25uZWN0aW9uIHtcbiAgICBwdWJsaWMgY29ubmVjdGlvblN0YXR1cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KENvbm5lY3Rpb25TdGF0dXMuVW5pbml0aWFsaXplZCk7XG4gICAgcHVibGljIGFjdGl2aXR5JDogT2JzZXJ2YWJsZTxBY3Rpdml0eT47XG5cbiAgICBwcml2YXRlIGRvbWFpbiA9IFwiaHR0cHM6Ly9kaXJlY3RsaW5lLmJvdGZyYW1ld29yay5jb20vdjMvZGlyZWN0bGluZVwiO1xuICAgIHByaXZhdGUgd2ViU29ja2V0OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIHByaXZhdGUgZXhwaXJlZFRva2VuRXhoYXVzdGlvbjogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBzZWNyZXQ6IHN0cmluZztcbiAgICBwcml2YXRlIHRva2VuOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB3YXRlcm1hcmsgPSAnJztcbiAgICBwcml2YXRlIHN0cmVhbVVybDogc3RyaW5nO1xuICAgIHByaXZhdGUgX2JvdEFnZW50ID0gJyc7XG4gICAgcHJpdmF0ZSBzZXJ2aWNlczogU2VydmljZXM7XG4gICAgcHJpdmF0ZSBfdXNlckFnZW50OiBzdHJpbmc7XG4gICAgcHVibGljIHJlZmVyZW5jZUdyYW1tYXJJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgdGltZW91dCA9IDIwICogMTAwMDtcbiAgICBwcml2YXRlIHJldHJpZXM6IG51bWJlcjtcblxuICAgIHByaXZhdGUgbG9jYWxlT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgdXNlcklkT25TdGFydENvbnZlcnNhdGlvbjogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBwb2xsaW5nSW50ZXJ2YWw6IG51bWJlciA9IDEwMDA7IC8vbXNcblxuICAgIHByaXZhdGUgdG9rZW5SZWZyZXNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBzdHJlYW1pbmc6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEaXJlY3RMaW5lT3B0aW9ucyAmIFBhcnRpYWw8U2VydmljZXM+KSB7XG4gICAgICAgIHRoaXMuc2VjcmV0ID0gb3B0aW9ucy5zZWNyZXQ7XG4gICAgICAgIHRoaXMudG9rZW4gPSBvcHRpb25zLnNlY3JldCB8fCBvcHRpb25zLnRva2VuO1xuICAgICAgICB0aGlzLndlYlNvY2tldCA9IChvcHRpb25zLndlYlNvY2tldCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbnMud2ViU29ja2V0KSAmJiB0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJyAmJiBXZWJTb2NrZXQgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlYW1pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RyZWFtaW5nID0gb3B0aW9ucy5zdHJlYW1pbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMgJiYgb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbnMuY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uID0gb3B0aW9ucy5jb252ZXJzYXRpb25TdGFydFByb3BlcnRpZXMubG9jYWxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogY29udmVyc2F0aW9uU3RhcnRQcm9wZXJ0aWVzLmxvY2FsZSB3YXMgaWdub3JlZDogdGhlIGxvY2FsZSBuYW1lIG1heSBiZSBhIEJDUCA0NyBsYW5ndWFnZSB0YWcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmRvbWFpbikge1xuICAgICAgICAgICAgdGhpcy5kb21haW4gPSBvcHRpb25zLmRvbWFpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gb3B0aW9ucy5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLndhdGVybWFyaykge1xuICAgICAgICAgICAgdGhpcy53YXRlcm1hcmsgPSAgb3B0aW9ucy53YXRlcm1hcms7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zdHJlYW1VcmwpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRva2VuICYmIG9wdGlvbnMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IG9wdGlvbnMuc3RyZWFtVXJsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogc3RyZWFtVXJsIHdhcyBpZ25vcmVkOiB5b3UgbmVlZCB0byBwcm92aWRlIGEgdG9rZW4gYW5kIGEgY29udmVyc2F0aW9uaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXRyaWVzID0gKGxpZmV0aW1lUmVmcmVzaFRva2VuIC0gaW50ZXJ2YWxSZWZyZXNoVG9rZW4pIC8gdGhpcy50aW1lb3V0O1xuXG4gICAgICAgIHRoaXMuX2JvdEFnZW50ID0gdGhpcy5nZXRCb3RBZ2VudChvcHRpb25zLmJvdEFnZW50KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VzID0gbWFrZVNlcnZpY2VzKG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA9IH5+b3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWw7XG5cbiAgICAgICAgaWYgKHBhcnNlZFBvbGxpbmdJbnRlcnZhbCA8IFBPTExJTkdfSU5URVJWQUxfTE9XRVJfQk9VTkQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBEaXJlY3RMaW5lSlM6IHByb3ZpZGVkIHBvbGxpbmdJbnRlcnZhbCAoJHsgb3B0aW9ucy5wb2xsaW5nSW50ZXJ2YWwgfSkgaXMgdW5kZXIgbG93ZXIgYm91bmQgKDIwMG1zKSwgdXNpbmcgZGVmYXVsdCBvZiAxMDAwbXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9sbGluZ0ludGVydmFsID0gcGFyc2VkUG9sbGluZ0ludGVydmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uID0gdGhpcy5zZXRDb25uZWN0aW9uU3RhdHVzRmFsbGJhY2soXG4gICAgICAgICAgICBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbixcbiAgICAgICAgICAgIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0LFxuICAgICAgICAgICAgNVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYWN0aXZpdHkkID0gKHRoaXMud2ViU29ja2V0XG4gICAgICAgICAgICA/IHRoaXMud2ViU29ja2V0QWN0aXZpdHkkKClcbiAgICAgICAgICAgIDogdGhpcy5wb2xsaW5nR2V0QWN0aXZpdHkkKClcbiAgICAgICAgKS5zaGFyZSgpO1xuICAgIH1cblxuICAgIC8vIEV2ZXJ5IHRpbWUgd2UncmUgYWJvdXQgdG8gbWFrZSBhIERpcmVjdCBMaW5lIFJFU1QgY2FsbCwgd2UgY2FsbCB0aGlzIGZpcnN0IHRvIHNlZSBjaGVjayB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXR1cy5cbiAgICAvLyBFaXRoZXIgdGhyb3dzIGFuIGVycm9yIChpbmRpY2F0aW5nIGFuIGVycm9yIHN0YXRlKSBvciBlbWl0cyBhIG51bGwsIGluZGljYXRpbmcgYSAocHJlc3VtYWJseSkgaGVhbHRoeSBjb25uZWN0aW9uXG4gICAgcHJpdmF0ZSBjaGVja0Nvbm5lY3Rpb24ob25jZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBvYnMgPSAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJFxuICAgICAgICAuZmxhdE1hcChjb25uZWN0aW9uU3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5Db25uZWN0aW5nKTtcblxuICAgICAgICAgICAgICAgIC8vaWYgdG9rZW4gYW5kIHN0cmVhbVVybCBhcmUgZGVmaW5lZCBpdCBtZWFucyByZWNvbm5lY3QgaGFzIGFscmVhZHkgYmVlbiBkb25lLiBTa2lwcGluZyBpdC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50b2tlbiAmJiB0aGlzLnN0cmVhbVVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5vZihjb25uZWN0aW9uU3RhdHVzLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRDb252ZXJzYXRpb24oKS5kbyhjb252ZXJzYXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0aGlzLnNlY3JldCB8fCBjb252ZXJzYXRpb24udG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IGNvbnZlcnNhdGlvbi5zdHJlYW1Vcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUdyYW1tYXJJZCA9IGNvbnZlcnNhdGlvbi5yZWZlcmVuY2VHcmFtbWFySWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VjcmV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRva2VuTG9vcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5PbmxpbmUpO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5GYWlsZWRUb0Nvbm5lY3QpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKF8gPT4gY29ubmVjdGlvblN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKGNvbm5lY3Rpb25TdGF0dXMgPT4gY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLlVuaW5pdGlhbGl6ZWQgJiYgY29ubmVjdGlvblN0YXR1cyAhPSBDb25uZWN0aW9uU3RhdHVzLkNvbm5lY3RpbmcpXG4gICAgICAgIC5mbGF0TWFwKGNvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChjb25uZWN0aW9uU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkVuZGVkOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckNvbnZlcnNhdGlvbkVuZGVkLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG5cbiAgICAgICAgICAgICAgICBjYXNlIENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvckZhaWxlZFRvQ29ubmVjdCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoY29ubmVjdGlvblN0YXR1cywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBvbmNlID8gb2JzLnRha2UoMSkgOiBvYnM7XG4gICAgfVxuXG4gICAgc2V0Q29ubmVjdGlvblN0YXR1c0ZhbGxiYWNrKFxuICAgICAgICBjb25uZWN0aW9uU3RhdHVzRnJvbTogQ29ubmVjdGlvblN0YXR1cyxcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c1RvOiBDb25uZWN0aW9uU3RhdHVzLFxuICAgICAgICBtYXhBdHRlbXB0cyA9IDVcbiAgICApIHtcbiAgICAgICAgbWF4QXR0ZW1wdHMtLTtcbiAgICAgICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICAgICAgbGV0IGN1cnJTdGF0dXMgPSBudWxsO1xuICAgICAgICByZXR1cm4gKHN0YXR1czogQ29ubmVjdGlvblN0YXR1cyk6IENvbm5lY3Rpb25TdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gY29ubmVjdGlvblN0YXR1c0Zyb20gJiYgY3VyclN0YXR1cyA9PT0gc3RhdHVzICYmIGF0dGVtcHRzID49IG1heEF0dGVtcHRzKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdHMgPSAwXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25TdGF0dXNUbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgICAgICBjdXJyU3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGlyZWRUb2tlbigpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1cyA9IHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25TdGF0dXMgIT0gQ29ubmVjdGlvblN0YXR1cy5FbmRlZCAmJiBjb25uZWN0aW9uU3RhdHVzICE9IENvbm5lY3Rpb25TdGF0dXMuRmFpbGVkVG9Db25uZWN0KVxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcblxuICAgICAgICBjb25zdCBwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5leHBpcmVkVG9rZW5FeGhhdXN0aW9uKHRoaXMuY29ubmVjdGlvblN0YXR1cyQuZ2V0VmFsdWUoKSk7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChwcm90ZWN0ZWRDb25uZWN0aW9uU3RhdHVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0Q29udmVyc2F0aW9uKCkge1xuICAgICAgICAvL2lmIGNvbnZlcnNhdGlvbmlkIGlzIHNldCBoZXJlLCBpdCBtZWFucyB3ZSBuZWVkIHRvIGNhbGwgdGhlIHJlY29ubmVjdCBhcGksIGVsc2UgaXQgaXMgYSBuZXcgY29udmVyc2F0aW9uXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT93YXRlcm1hcms9JHt0aGlzLndhdGVybWFya31gXG4gICAgICAgICAgICA6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zYDtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5jb252ZXJzYXRpb25JZCA/IFwiR0VUXCIgOiBcIlBPU1RcIjtcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGVPblN0YXJ0Q29udmVyc2F0aW9uXG4gICAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuLy8gICAgICAuZG8oYWpheFJlc3BvbnNlID0+IGtvbnNvbGUubG9nKFwiY29udmVyc2F0aW9uIGFqYXhSZXNwb25zZVwiLCBhamF4UmVzcG9uc2UucmVzcG9uc2UpKVxuICAgICAgICAubWFwKGFqYXhSZXNwb25zZSA9PiBhamF4UmVzcG9uc2UucmVzcG9uc2UgYXMgQ29udmVyc2F0aW9uKVxuICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PlxuICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkZWVtIDR4eCBhbmQgNXh4IGVycm9ycyBhcyB1bnJlY292ZXJhYmxlXG4gICAgICAgICAgICAvLyBmb3IgZXZlcnl0aGluZyBlbHNlICh0aW1lb3V0cyksIHJldHJ5IGZvciBhIHdoaWxlXG4gICAgICAgICAgICBlcnJvciQubWVyZ2VNYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgZXJyb3Iuc3RhdHVzIDwgNjAwXG4gICAgICAgICAgICAgICAgPyBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcilcbiAgICAgICAgICAgICAgICA6IE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgLnRha2UodGhpcy5yZXRyaWVzKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWZyZXNoVG9rZW5Mb29wKCkge1xuICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbiA9IE9ic2VydmFibGUuaW50ZXJ2YWwoaW50ZXJ2YWxSZWZyZXNoVG9rZW4sIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAuZmxhdE1hcChfID0+IHRoaXMucmVmcmVzaFRva2VuKCkpXG4gICAgICAgIC5zdWJzY3JpYmUodG9rZW4gPT4ge1xuICAgICAgICAgICAga29uc29sZS5sb2coXCJyZWZyZXNoaW5nIHRva2VuXCIsIHRva2VuLCBcImF0XCIsIG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS90b2tlbnMvcmVmcmVzaGAsXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnRva2VuIGFzIHN0cmluZylcbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJFxuICAgICAgICAgICAgICAgIC5tZXJnZU1hcChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRva2VuIGlzIGV4cGlyZWQgdGhlcmUncyBubyByZWFzb24gdG8ga2VlcCB0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYm90IGlzIGdvbmUsIHdlIHNob3VsZCBzdG9wIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdyhlcnJvciwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgIC50YWtlKHRoaXMucmV0cmllcylcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHB1YmxpYyByZWNvbm5lY3QoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb24pIHtcbiAgICAgICAgdGhpcy50b2tlbiA9IGNvbnZlcnNhdGlvbi50b2tlbjtcbiAgICAgICAgdGhpcy5zdHJlYW1VcmwgPSBjb252ZXJzYXRpb24uc3RyZWFtVXJsO1xuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLkV4cGlyZWRUb2tlbilcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyQubmV4dChDb25uZWN0aW9uU3RhdHVzLk9ubGluZSk7XG4gICAgfVxuXG4gICAgZW5kKCkge1xuICAgICAgICBpZiAodGhpcy50b2tlblJlZnJlc2hTdWJzY3JpcHRpb24pXG4gICAgICAgICAgICB0aGlzLnRva2VuUmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRW5kZWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSA9PT0gZXJyb3JDb252ZXJzYXRpb25FbmRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aHJvdyhlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFNlc3Npb25JZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgY29ubmVjdGVkIHRvIHRoZSBib3QsIGdldCBjb25uZWN0ZWRcbiAgICAgICAgLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB3ZSBhcmUgbm90IGNvbm5lY3RlZFxuICAgICAgICBrb25zb2xlLmxvZyhcImdldFNlc3Npb25JZFwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9zZXNzaW9uL2dldHNlc3Npb25pZGAsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhSZXNwb25zZSAmJiBhamF4UmVzcG9uc2UucmVzcG9uc2UgJiYgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgcmVzcG9uc2U6IFwiICsgYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWpheFJlc3BvbnNlLnJlc3BvbnNlLnNlc3Npb25JZCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJnZXRTZXNzaW9uSWQgZXJyb3I6IFwiICsgZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoJycsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwb3N0QWN0aXZpdHkoYWN0aXZpdHk6IEFjdGl2aXR5KSB7XG4gICAgICAgIC8vIElmIHN0cmVhbWluZyBpcyBlbmFibGVkIGZvciB0aGlzIERpcmVjdExpbmUgaW5zdGFuY2UsIGFsd2F5cyBzZXQgZGVsaXZlcnlNb2RlIHRvICdzdHJlYW0nXG4gICAgICAgIC8vIGRlZmF1bHQgd291bGQgYmUgJ25vcm1hbCcgYW5kIG5vdCBwYXNzaW5nIGFueXRoaW5nIG1lYW5pbmcgJ25vcm1hbCcgYXMgd2VsbCBvbiBBQlMgc2lkZVxuICAgICAgICBpZiAodGhpcy5zdHJlYW1pbmcpIHtcbiAgICAgICAgICAgIGFjdGl2aXR5LmRlbGl2ZXJ5TW9kZSA9ICdzdHJlYW0nO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdXNlciBpZCBpcyBzZXQsIGNoZWNrIGlmIGl0IG1hdGNoIGFjdGl2aXR5LmZyb20uaWQgYW5kIGFsd2F5cyBvdmVycmlkZSBpdCBpbiBhY3Rpdml0eVxuICAgICAgICBpZiAodGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uICYmIGFjdGl2aXR5LmZyb20gJiYgYWN0aXZpdHkuZnJvbS5pZCAhPT0gdGhpcy51c2VySWRPblN0YXJ0Q29udmVyc2F0aW9uKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogQWN0aXZpdHkuZnJvbS5pZCBkb2VzIG5vdCBtYXRjaCB3aXRoIHVzZXIgaWQsIGlnbm9yaW5nIGFjdGl2aXR5LmZyb20uaWQnKTtcbiAgICAgICAgICAgIGFjdGl2aXR5LmZyb20uaWQgPSB0aGlzLnVzZXJJZE9uU3RhcnRDb252ZXJzYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXNlIHBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzIGZvciBtZXNzYWdlcyB3aXRoIGF0dGFjaG1lbnRzIHRoYXQgYXJlIGxvY2FsIGZpbGVzIChlLmcuIGFuIGltYWdlIHRvIHVwbG9hZClcbiAgICAgICAgLy8gVGVjaG5pY2FsbHkgd2UgY291bGQgdXNlIGl0IGZvciAqYWxsKiBhY3Rpdml0aWVzLCBidXQgcG9zdEFjdGl2aXR5IGlzIG11Y2ggbGlnaHRlciB3ZWlnaHRcbiAgICAgICAgLy8gU28sIHNpbmNlIFdlYkNoYXQgaXMgcGFydGlhbGx5IGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIERpcmVjdCBMaW5lLCB3ZSBpbXBsZW1lbnQgYm90aC5cbiAgICAgICAgaWYgKGFjdGl2aXR5LnR5cGUgPT09IFwibWVzc2FnZVwiICYmIGFjdGl2aXR5LmF0dGFjaG1lbnRzICYmIGFjdGl2aXR5LmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0TWVzc2FnZVdpdGhBdHRhY2htZW50cyhhY3Rpdml0eSk7XG5cbiAgICAgICAgLy8gSWYgd2UncmUgbm90IGNvbm5lY3RlZCB0byB0aGUgYm90LCBnZXQgY29ubmVjdGVkXG4gICAgICAgIC8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgd2UgYXJlIG5vdCBjb25uZWN0ZWRcbiAgICAgICAga29uc29sZS5sb2coXCJwb3N0QWN0aXZpdHlcIiwgYWN0aXZpdHkpO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0Nvbm5lY3Rpb24odHJ1ZSlcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIHVybDogYCR7dGhpcy5kb21haW59L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbklkfS9hY3Rpdml0aWVzYCxcbiAgICAgICAgICAgICAgICBib2R5OiBhY3Rpdml0eSxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZS5pZCBhcyBzdHJpbmcpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaFBvc3RFcnJvcihlcnJvcikpXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc3RNZXNzYWdlV2l0aEF0dGFjaG1lbnRzKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgeyBhdHRhY2htZW50cyB9ID0gbWVzc2FnZTtcbiAgICAgICAgLy8gV2UgY2xlYW4gdGhlIGF0dGFjaG1lbnRzIGJ1dCBtYWtpbmcgc3VyZSBldmVyeSBhdHRhY2htZW50IGhhcyB1bmlxdWUgbmFtZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZG8gbm90IGhhdmUgYSBuYW1lLCBDaHJvbWUgd2lsbCBhc3NpZ24gXCJibG9iXCIgd2hlbiBpdCBpcyBhcHBlbmRlZCB0byBGb3JtRGF0YS5cbiAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWVzOiBzdHJpbmdbXSA9IGRlZHVwZUZpbGVuYW1lcyhhdHRhY2htZW50cy5tYXAoKG1lZGlhOiBNZWRpYSkgPT4gbWVkaWEubmFtZSB8fCAnYmxvYicpKTtcbiAgICAgICAgY29uc3QgY2xlYW5zZWRBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudDogTWVkaWEsIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgICAgICAuLi5hdHRhY2htZW50LFxuICAgICAgICAgICAgbmFtZTogYXR0YWNobWVudE5hbWVzW2luZGV4XVxuICAgICAgICB9KSk7XG4gICAgICAgIGxldCBmb3JtRGF0YTogRm9ybURhdGE7XG5cbiAgICAgICAgLy8gSWYgd2UncmUgbm90IGNvbm5lY3RlZCB0byB0aGUgYm90LCBnZXQgY29ubmVjdGVkXG4gICAgICAgIC8vIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgd2UgYXJlIG5vdCBjb25uZWN0ZWRcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKHRydWUpXG4gICAgICAgIC5mbGF0TWFwKF8gPT4ge1xuICAgICAgICAgICAgLy8gVG8gc2VuZCB0aGlzIG1lc3NhZ2UgdG8gRGlyZWN0TGluZSB3ZSBuZWVkIHRvIGRlY29uc3RydWN0IGl0IGludG8gYSBcInRlbXBsYXRlXCIgYWN0aXZpdHlcbiAgICAgICAgICAgIC8vIGFuZCBvbmUgYmxvYiBmb3IgZWFjaCBhdHRhY2htZW50LlxuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnYWN0aXZpdHknLCBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgY29udGVudFVybCBmcm9tIGF0dGFjaG1lbnQsIHdlIHdpbGwgc2VuZCBpdCB2aWEgbXVsdGlwYXJ0XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IGNsZWFuc2VkQXR0YWNobWVudHMubWFwKCh7IGNvbnRlbnRVcmw6IHN0cmluZywgLi4ub3RoZXJzIH0pID0+ICh7IC4uLm90aGVycyB9KSlcbiAgICAgICAgICAgIH0pXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5hY3Rpdml0eScgfSkpO1xuXG4gICAgICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5mcm9tKGNsZWFuc2VkQXR0YWNobWVudHMsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgLmZsYXRNYXAoKG1lZGlhOiBNZWRpYSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWEuY29udGVudFVybCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZG8oYWpheFJlc3BvbnNlID0+XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIG5ldyBCbG9iKFthamF4UmVzcG9uc2UucmVzcG9uc2VdLCB7IHR5cGU6IG1lZGlhLmNvbnRlbnRUeXBlIH0pLCBtZWRpYS5uYW1lKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5jb3VudCgpXG4gICAgICAgIH0pXG4gICAgICAgIC5mbGF0TWFwKF8gPT5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZXMuYWpheCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0vdXBsb2FkP3VzZXJJZD0ke21lc3NhZ2UuZnJvbS5pZH1gLFxuICAgICAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29tbW9uSGVhZGVycygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoYWpheFJlc3BvbnNlID0+IGFqYXhSZXNwb25zZS5yZXNwb25zZS5pZCBhcyBzdHJpbmcpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gdGhpcy5jYXRjaFBvc3RFcnJvcihlcnJvcikpXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHRoaXMuY2F0Y2hQb3N0RXJyb3IoZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhdGNoUG9zdEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKVxuICAgICAgICAgICAgLy8gdG9rZW4gaGFzIGV4cGlyZWQgKHdpbGwgZmFsbCB0aHJvdWdoIHRvIHJldHVybiBcInJldHJ5XCIpXG4gICAgICAgICAgICB0aGlzLmV4cGlyZWRUb2tlbigpO1xuICAgICAgICBlbHNlIGlmIChlcnJvci5zdGF0dXMgPj0gNDAwICYmIGVycm9yLnN0YXR1cyA8IDUwMClcbiAgICAgICAgICAgIC8vIG1vcmUgdW5yZWNvdmVyYWJsZSBlcnJvcnNcbiAgICAgICAgICAgIHJldHVybiBPYnNlcnZhYmxlLnRocm93KGVycm9yLCB0aGlzLnNlcnZpY2VzLnNjaGVkdWxlcik7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLm9mKFwicmV0cnlcIiwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2F0Y2hFeHBpcmVkVG9rZW4oZXJyb3I6IGFueSkge1xuICAgICAgICByZXR1cm4gZXJyb3IgPT09IGVycm9yRXhwaXJlZFRva2VuXG4gICAgICAgID8gT2JzZXJ2YWJsZS5vZihcInJldHJ5XCIsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICA6IE9ic2VydmFibGUudGhyb3coZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvbGxpbmdHZXRBY3Rpdml0eSQoKSB7XG4gICAgICAgIGNvbnN0IHBvbGxlciQ6IE9ic2VydmFibGU8QWpheFJlc3BvbnNlPiA9IE9ic2VydmFibGUuY3JlYXRlKChzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPGFueT4pID0+IHtcbiAgICAgICAgICAgIC8vIEEgQmVoYXZpb3JTdWJqZWN0IHRvIHRyaWdnZXIgcG9sbGluZy4gU2luY2UgaXQgaXMgYSBCZWhhdmlvclN1YmplY3RcbiAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBldmVudCBpcyBwcm9kdWNlZCBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcblxuICAgICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIERhdGUubm93LCB1c2UgcmVhY3RpdmUgaW50ZXJ2YWwgdG8gc3BhY2Ugb3V0IGV2ZXJ5IHJlcXVlc3RcblxuICAgICAgICAgICAgdHJpZ2dlciQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzJC5nZXRWYWx1ZSgpID09PSBDb25uZWN0aW9uU3RhdHVzLk9ubGluZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcy5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmNvbW1vbkhlYWRlcnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGAkeyB0aGlzLmRvbWFpbiB9L2NvbnZlcnNhdGlvbnMvJHsgdGhpcy5jb252ZXJzYXRpb25JZCB9L2FjdGl2aXRpZXM/d2F0ZXJtYXJrPSR7IHRoaXMud2F0ZXJtYXJrIH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0XG4gICAgICAgICAgICAgICAgICAgIH0pLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQ6IEFqYXhSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdHJpZ2dlciQubmV4dChudWxsKSwgTWF0aC5tYXgoMCwgdGhpcy5wb2xsaW5nSW50ZXJ2YWwgLSBEYXRlLm5vdygpICsgc3RhcnRUaW1lc3RhbXApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzJC5uZXh0KENvbm5lY3Rpb25TdGF0dXMuRXhwaXJlZFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdHJpZ2dlciQubmV4dChudWxsKSwgdGhpcy5wb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLm5leHQoQ29ubmVjdGlvblN0YXR1cy5FbmRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbigpXG4gICAgICAgIC5mbGF0TWFwKF8gPT4gcG9sbGVyJFxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IE9ic2VydmFibGUuZW1wdHk8QWpheFJlc3BvbnNlPigpKVxuICAgICAgICAgICAgLm1hcChhamF4UmVzcG9uc2UgPT4gYWpheFJlc3BvbnNlLnJlc3BvbnNlIGFzIEFjdGl2aXR5R3JvdXApXG4gICAgICAgICAgICAuZmxhdE1hcChhY3Rpdml0eUdyb3VwID0+IHRoaXMub2JzZXJ2YWJsZUZyb21BY3Rpdml0eUdyb3VwKGFjdGl2aXR5R3JvdXApKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZhYmxlRnJvbUFjdGl2aXR5R3JvdXAoYWN0aXZpdHlHcm91cDogQWN0aXZpdHlHcm91cCkge1xuICAgICAgICBpZiAoYWN0aXZpdHlHcm91cC53YXRlcm1hcmspXG4gICAgICAgICAgICB0aGlzLndhdGVybWFyayA9IGFjdGl2aXR5R3JvdXAud2F0ZXJtYXJrO1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5mcm9tKGFjdGl2aXR5R3JvdXAuYWN0aXZpdGllcywgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2ViU29ja2V0QWN0aXZpdHkkKCk6IE9ic2VydmFibGU8QWN0aXZpdHk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tDb25uZWN0aW9uKClcbiAgICAgICAgLmZsYXRNYXAoXyA9PlxuICAgICAgICAgICAgdGhpcy5vYnNlcnZhYmxlV2ViU29ja2V0PEFjdGl2aXR5R3JvdXA+KClcbiAgICAgICAgICAgIC8vIFdlYlNvY2tldHMgY2FuIGJlIGNsb3NlZCBieSB0aGUgc2VydmVyIG9yIHRoZSBicm93c2VyLiBJbiB0aGUgZm9ybWVyIGNhc2Ugd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gcmV0cmlldmUgYSBuZXcgc3RyZWFtVXJsLiBJbiB0aGUgbGF0dGVyIGNhc2Ugd2UgY291bGQgZmlyc3QgcmV0cnkgd2l0aCB0aGUgY3VycmVudCBzdHJlYW1VcmwsXG4gICAgICAgICAgICAvLyBidXQgaXQncyBzaW1wbGVyIGp1c3QgdG8gYWx3YXlzIGZldGNoIGEgbmV3IG9uZS5cbiAgICAgICAgICAgIC5yZXRyeVdoZW4oZXJyb3IkID0+IGVycm9yJC5kZWxheSh0aGlzLmdldFJldHJ5RGVsYXkoKSwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpLm1lcmdlTWFwKGVycm9yID0+IHRoaXMucmVjb25uZWN0VG9Db252ZXJzYXRpb24oKSkpXG4gICAgICAgIClcbiAgICAgICAgLmZsYXRNYXAoYWN0aXZpdHlHcm91cCA9PiB0aGlzLm9ic2VydmFibGVGcm9tQWN0aXZpdHlHcm91cChhY3Rpdml0eUdyb3VwKSlcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIHRoZSBkZWxheSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHNcbiAgICBwcml2YXRlIGdldFJldHJ5RGVsYXkoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKDMwMDAgKyB0aGlzLnNlcnZpY2VzLnJhbmRvbSgpICogMTIwMDApO1xuICAgIH1cblxuICAgIC8vIE9yaWdpbmFsbHkgd2UgdXNlZCBPYnNlcnZhYmxlLndlYlNvY2tldCwgYnV0IGl0J3MgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBJIGVuZGVkIHVwIHdyaXRpbmdcbiAgICAvLyBhIGxvdCBvZiBjb2RlIHRvIHdvcmsgYXJvdW5kIHRoZWlyIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFNpbmNlIFdlYkNoYXQgaXMgbWVhbnQgdG8gYmUgYSByZWZlcmVuY2VcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiwgSSBkZWNpZGVkIHJvbGwgdGhlIGJlbG93LCB3aGVyZSB0aGUgbG9naWMgaXMgbW9yZSBwdXJwb3NlZnVsLiAtIEBiaWxsYmFcbiAgICBwcml2YXRlIG9ic2VydmFibGVXZWJTb2NrZXQ8VD4oKSB7XG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgoc3Vic2NyaWJlcjogU3Vic2NyaWJlcjxUPikgPT4ge1xuICAgICAgICAgICAga29uc29sZS5sb2coXCJjcmVhdGluZyBXZWJTb2NrZXRcIiwgdGhpcy5zdHJlYW1VcmwpO1xuICAgICAgICAgICAgY29uc3Qgd3MgPSBuZXcgdGhpcy5zZXJ2aWNlcy5XZWJTb2NrZXQodGhpcy5zdHJlYW1VcmwpO1xuICAgICAgICAgICAgbGV0IHN1YjogU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgbGV0IGNsb3NlZDogYm9vbGVhbjtcblxuICAgICAgICAgICAgd3Mub25vcGVuID0gb3BlbiA9PiB7XG4gICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJXZWJTb2NrZXQgb3BlblwiLCBvcGVuKTtcbiAgICAgICAgICAgICAgICAvLyBDaHJvbWUgaXMgcHJldHR5IGJhZCBhdCBub3RpY2luZyB3aGVuIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgYnJva2VuLlxuICAgICAgICAgICAgICAgIC8vIElmIHdlIHBlcmlvZGljYWxseSBwaW5nIHRoZSBzZXJ2ZXIgd2l0aCBlbXB0eSBtZXNzYWdlcywgaXQgaGVscHMgQ2hyb21lXG4gICAgICAgICAgICAgICAgLy8gcmVhbGl6ZSB3aGVuIGNvbm5lY3Rpb24gYnJlYWtzLCBhbmQgY2xvc2UgdGhlIHNvY2tldC4gV2UgdGhlbiB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGVycm9yLCBhbmQgdGhhdCBnaXZlIHVzIHRoZSBvcHBvcnR1bml0eSB0byBhdHRlbXB0IHRvIHJlY29ubmVjdC5cbiAgICAgICAgICAgICAgICBzdWIgPSBPYnNlcnZhYmxlLmludGVydmFsKHRoaXMudGltZW91dCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdzLnNlbmQoXCJcIilcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIlBpbmcgZXJyb3JcIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd3Mub25jbG9zZSA9IGNsb3NlID0+IHtcbiAgICAgICAgICAgICAgICBrb25zb2xlLmxvZyhcIldlYlNvY2tldCBjbG9zZVwiLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBSeEpTLnJldHJ5V2hlbiBoYXMgYSBidWcgdGhhdCB3b3VsZCBjYXVzZSBcImVycm9yXCIgc2lnbmFsIHRvIGJlIHNlbnQgYWZ0ZXIgdGhlIG9ic2VydmFibGUgaXMgY29tcGxldGVkL2Vycm9yZWQuXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0IGV4dHJhbmVvdXMgXCJlcnJvclwiIHNpZ25hbCB0byB3b3JrYXJvdW5kIHRoZSBidWcuXG4gICAgICAgICAgICAgICAgY2xvc2VkIHx8IHN1YnNjcmliZXIuZXJyb3IoY2xvc2UpO1xuICAgICAgICAgICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdzLm9uZXJyb3IgPSBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAga29uc29sZS5sb2coXCJXZWJTb2NrZXQgZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChzdWIpIHN1Yi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gUnhKUy5yZXRyeVdoZW4gaGFzIGEgYnVnIHRoYXQgd291bGQgY2F1c2UgXCJlcnJvclwiIHNpZ25hbCB0byBiZSBzZW50IGFmdGVyIHRoZSBvYnNlcnZhYmxlIGlzIGNvbXBsZXRlZC9lcnJvcmVkLlxuICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCBleHRyYW5lb3VzIFwiZXJyb3JcIiBzaWduYWwgdG8gd29ya2Fyb3VuZCB0aGUgYnVnLlxuICAgICAgICAgICAgICAgIGNsb3NlZCB8fCBzdWJzY3JpYmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3cy5vbm1lc3NhZ2UgPSBtZXNzYWdlID0+IG1lc3NhZ2UuZGF0YSAmJiBzdWJzY3JpYmVyLm5leHQoSlNPTi5wYXJzZShtZXNzYWdlLmRhdGEpKTtcblxuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgJ3Vuc3Vic2NyaWJlJyBtZXRob2QsIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoaXMgb2JzZXJ2YWJsZSBpcyBkaXNwb3NlZC5cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIFdlYlNvY2tldCBjbG9zZXMgaXRzZWxmLCB3ZSB0aHJvdyBhbiBlcnJvciwgYW5kIHRoaXMgZnVuY3Rpb24gaXMgZXZlbnR1YWxseSBjYWxsZWQuXG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBvYnNlcnZhYmxlIGlzIGNsb3NlZCBmaXJzdCAoZS5nLiB3aGVuIHRlYXJpbmcgZG93biBhIFdlYkNoYXQgaW5zdGFuY2UpIHRoZW5cbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gbWFudWFsbHkgY2xvc2UgdGhlIFdlYlNvY2tldC5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdzLnJlYWR5U3RhdGUgPT09IDAgfHwgd3MucmVhZHlTdGF0ZSA9PT0gMSkgd3MuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkgYXMgT2JzZXJ2YWJsZTxUPlxuICAgIH1cblxuICAgIHByaXZhdGUgcmVjb25uZWN0VG9Db252ZXJzYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrQ29ubmVjdGlvbih0cnVlKVxuICAgICAgICAuZmxhdE1hcChfID0+XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzLmFqYXgoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgICAgICB1cmw6IGAke3RoaXMuZG9tYWlufS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25JZH0/d2F0ZXJtYXJrPSR7dGhpcy53YXRlcm1hcmt9YCxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jb21tb25IZWFkZXJzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmRvKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlY3JldClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2tlbiA9IHJlc3VsdC5yZXNwb25zZS50b2tlbjtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVVybCA9IHJlc3VsdC5yZXNwb25zZS5zdHJlYW1Vcmw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChfID0+IG51bGwpXG4gICAgICAgICAgICAucmV0cnlXaGVuKGVycm9yJCA9PiBlcnJvciRcbiAgICAgICAgICAgICAgICAubWVyZ2VNYXAoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRva2VuIGhhcyBleHBpcmVkLiBXZSBjYW4ndCByZWNvdmVyIGZyb20gdGhpcyBoZXJlLCBidXQgdGhlIGVtYmVkZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Vic2l0ZSBtaWdodCBldmVudHVhbGx5IGNhbGwgcmVjb25uZWN0KCkgd2l0aCBhIG5ldyB0b2tlbiBhbmQgc3RyZWFtVXJsLlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBpcmVkVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUudGhyb3coZXJyb3JDb252ZXJzYXRpb25FbmRlZCwgdGhpcy5zZXJ2aWNlcy5zY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9ic2VydmFibGUub2YoZXJyb3IsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5kZWxheSh0aGlzLnRpbWVvdXQsIHRoaXMuc2VydmljZXMuc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgIC50YWtlKHRoaXMucmV0cmllcylcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgY29tbW9uSGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiBgQmVhcmVyICR7dGhpcy50b2tlbn1gLFxuICAgICAgICAgICAgXCJ4LW1zLWJvdC1hZ2VudFwiOiB0aGlzLl9ib3RBZ2VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Qm90QWdlbnQoY3VzdG9tQWdlbnQ6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGNsaWVudEFnZW50ID0gJ2RpcmVjdGxpbmVqcydcblxuICAgICAgICBpZiAoY3VzdG9tQWdlbnQpIHtcbiAgICAgICAgICAgIGNsaWVudEFnZW50ICs9IGA7ICR7Y3VzdG9tQWdlbnR9YFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke0RJUkVDVF9MSU5FX1ZFUlNJT059ICgke2NsaWVudEFnZW50fSAke3Byb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX3ZlcnNpb259KWA7XG4gICAgfVxuXG4gICAgc2V0VXNlcklkKHVzZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMkLmdldFZhbHVlKCkgPT09IENvbm5lY3Rpb25TdGF0dXMuT25saW5lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpcmVjdExpbmVKUzogSXQgaXMgY29ubmVjdGVkLCB3ZSBjYW5ub3Qgc2V0IHVzZXIgaWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VySWRGcm9tVG9rZW4gPSB0aGlzLnBhcnNlVG9rZW4odGhpcy50b2tlbik7XG4gICAgICAgIGlmICh1c2VySWRGcm9tVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oJ0RpcmVjdExpbmVKUzogdXNlciBpZCBpcyBhbHJlYWR5IHNldCBpbiB0b2tlbiwgd2lsbCBpZ25vcmUgdGhpcyB1c2VyIGlkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKC9eZGxfL3UudGVzdCh1c2VySWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc29sZS53YXJuKCdEaXJlY3RMaW5lSlM6IHVzZXIgaWQgcHJlZml4ZWQgd2l0aCBcImRsX1wiIGlzIHJlc2VydmVkIGFuZCBtdXN0IGJlIGVtYmVkZGVkIGludG8gdGhlIERpcmVjdCBMaW5lIHRva2VuIHRvIHByZXZlbnQgZm9yZ2VyeS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXNlcklkT25TdGFydENvbnZlcnNhdGlvbiA9IHVzZXJJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyB1c2VyIH0gPSBqd3REZWNvZGU8Snd0UGF5bG9hZD4odG9rZW4pIGFzIHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSW52YWxpZFRva2VuRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBQSxPQUFBO0FBQ0FBLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBSUEsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBRUFBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBRUFBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0FBLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBRUEsSUFBQU0sZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQVAsT0FBQTtBQUdBLElBQUFRLG9CQUFBLEdBQUFSLE9BQUE7QUFBNEQsSUFBQVMsU0FBQTtBQUFBLFNBQUFDLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsV0FBQSxXQUFBQSxXQUFBLEdB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "botframework-directlinejs",
3
- "version": "0.15.6",
3
+ "version": "0.15.7-master.8adbe6f",
4
4
  "description": "Client library for the Microsoft Bot Framework Direct Line 3.0 protocol",
5
5
  "files": [
6
6
  "dist/**/*",
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "repository": {
23
23
  "type": "git",
24
- "url": "git+https://github.com/Microsoft/BotFramework-DirectLineJS.git"
24
+ "url": "https://github.com/microsoft/BotFramework-DirectLineJS.git"
25
25
  },
26
26
  "author": "Microsoft Corporation",
27
27
  "license": "MIT",