@cometchat/chat-uikit-angular 4.0.2 → 4.1.0

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.
Files changed (107) hide show
  1. package/AI/AIAssistBot/AIAssistBot.d.ts +7 -0
  2. package/AI/AIAssistBot/AIAssistBotDecorator.d.ts +11 -0
  3. package/AI/AIConversationStarter/AIConversationStarter.d.ts +2 -2
  4. package/AI/AIConversationStarter/AIConversationStarterDecorator.d.ts +3 -0
  5. package/AI/AIConversationSummary/AIConversationSummary.d.ts +7 -0
  6. package/AI/AIConversationSummary/AIConversationSummaryDecorator.d.ts +10 -0
  7. package/AI/AISmartReplies/AISmartReplies.d.ts +2 -2
  8. package/AI/AISmartReplies/AISmartRepliesDecorator.d.ts +3 -0
  9. package/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.d.ts +119 -0
  10. package/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.d.ts +14 -0
  11. package/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.d.ts +111 -0
  12. package/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.d.ts +10 -0
  13. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.d.ts +76 -0
  14. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.d.ts +10 -0
  15. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.d.ts +90 -0
  16. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.d.ts +10 -0
  17. package/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.d.ts +133 -0
  18. package/Calls/CometChatCallLogs/cometchat-call-logs.module.d.ts +12 -0
  19. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.d.ts +54 -0
  20. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.d.ts +12 -0
  21. package/CometChatList/cometchat-list.component.d.ts +12 -9
  22. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +64 -28
  23. package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +3 -3
  24. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +72 -48
  25. package/CometChatMessageList/cometchat-message-list.module.d.ts +1 -1
  26. package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +19 -16
  27. package/CometChatMessages/cometchat-messages.module.d.ts +3 -2
  28. package/Shared/CometChatUIkit/CometChatUIKit.d.ts +4 -2
  29. package/Shared/Framework/AIExtensionDataSource.d.ts +5 -0
  30. package/Shared/Framework/DataSource.d.ts +3 -3
  31. package/Shared/Framework/DataSourceDecorator.d.ts +4 -4
  32. package/Shared/Utils/CallDetailUtils.d.ts +8 -0
  33. package/Shared/Utils/CallLogUtils.d.ts +8 -0
  34. package/Shared/Utils/MessageUtils.d.ts +2 -3
  35. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.d.ts +71 -0
  36. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.d.ts +11 -0
  37. package/assets/InfoIcon.svg +13 -0
  38. package/assets/greaterThanIcon.svg +3 -0
  39. package/assets/incomingAudioCallIconUrl.svg +5 -0
  40. package/assets/incomingVideoCallIconUrl.svg +6 -0
  41. package/assets/missedAudioCallIconUrl.svg +5 -0
  42. package/assets/missedVideoCallIconUrl.svg +6 -0
  43. package/assets/outgoingAudioCallIconUrl.svg +5 -0
  44. package/assets/outgoingVideoCallIconUrl.svg +6 -0
  45. package/esm2020/AI/AIAssistBot/AIAssistBot.mjs +21 -0
  46. package/esm2020/AI/AIAssistBot/AIAssistBotDecorator.mjs +68 -0
  47. package/esm2020/AI/AIConversationStarter/AIConversationStarter.mjs +7 -4
  48. package/esm2020/AI/AIConversationStarter/AIConversationStarterDecorator.mjs +22 -1
  49. package/esm2020/AI/AIConversationSummary/AIConversationSummary.mjs +21 -0
  50. package/esm2020/AI/AIConversationSummary/AIConversationSummaryDecorator.mjs +32 -0
  51. package/esm2020/AI/AISmartReplies/AISmartReplies.mjs +7 -4
  52. package/esm2020/AI/AISmartReplies/AISmartRepliesDecorator.mjs +22 -1
  53. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +3 -3
  54. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.mjs +351 -0
  55. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.mjs +47 -0
  56. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.mjs +352 -0
  57. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.mjs +21 -0
  58. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.mjs +189 -0
  59. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.mjs +21 -0
  60. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.mjs +246 -0
  61. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.mjs +21 -0
  62. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.mjs +585 -0
  63. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs.module.mjs +36 -0
  64. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.mjs +193 -0
  65. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.mjs +39 -0
  66. package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +1 -1
  67. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +1 -1
  68. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +3 -3
  69. package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +1 -1
  70. package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +1 -1
  71. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +3 -3
  72. package/esm2020/CometChatList/cometchat-list.component.mjs +44 -28
  73. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +303 -98
  74. package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +7 -14
  75. package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +1 -1
  76. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +654 -301
  77. package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +5 -5
  78. package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +72 -51
  79. package/esm2020/CometChatMessages/cometchat-messages.module.mjs +10 -6
  80. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +1 -1
  81. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +1 -1
  82. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +3 -3
  83. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +20 -9
  84. package/esm2020/Shared/Framework/AIExtensionDataSource.mjs +3 -0
  85. package/esm2020/Shared/Framework/ChatConfigurator.mjs +2 -2
  86. package/esm2020/Shared/Framework/DataSource.mjs +1 -1
  87. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +5 -8
  88. package/esm2020/Shared/Utils/CallDetailUtils.mjs +72 -0
  89. package/esm2020/Shared/Utils/CallLogUtils.mjs +122 -0
  90. package/esm2020/Shared/Utils/MessageUtils.mjs +28 -46
  91. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.mjs +289 -0
  92. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.mjs +22 -0
  93. package/esm2020/public-api.mjs +106 -91
  94. package/fesm2015/cometchat-chat-uikit-angular.mjs +3803 -787
  95. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
  96. package/fesm2020/cometchat-chat-uikit-angular.mjs +3831 -806
  97. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
  98. package/package.json +6 -6
  99. package/public-api.d.ts +105 -90
  100. package/AI/AIEnabler.d.ts +0 -8
  101. package/AI/AIEnablerDecorator.d.ts +0 -7
  102. package/Shared/Views/CometChatCardView/cometchat-card-view/cometchat-card-view.component.d.ts +0 -71
  103. package/Shared/Views/CometChatCardView/cometchat-card-view.module.d.ts +0 -8
  104. package/esm2020/AI/AIEnabler.mjs +0 -70
  105. package/esm2020/AI/AIEnablerDecorator.mjs +0 -10
  106. package/esm2020/Shared/Views/CometChatCardView/cometchat-card-view/cometchat-card-view.component.mjs +0 -117
  107. package/esm2020/Shared/Views/CometChatCardView/cometchat-card-view.module.mjs +0 -23
@@ -1,7 +1,7 @@
1
- import { CometChatMessageComposerAction, CometChatMessageOption, CometChatMessageTemplate, CometChatUIKitConstants, fontHelper, localize } from "@cometchat/uikit-resources";
2
- import { ChatConfigurator } from "../Framework/ChatConfigurator";
3
- import { CometChat } from "@cometchat/chat-sdk-javascript";
1
+ import { CometChatMessageOption, CometChatMessageTemplate, CometChatMessageComposerAction, localize, CometChatUIKitConstants, fontHelper, } from "@cometchat/uikit-resources";
4
2
  import { ConversationUtils } from "@cometchat/uikit-shared";
3
+ import { CometChat } from "@cometchat/chat-sdk-javascript";
4
+ import { ChatConfigurator } from "../Framework/ChatConfigurator";
5
5
  export class MessageUtils {
6
6
  getEditOption(theme) {
7
7
  return new CometChatMessageOption({
@@ -12,7 +12,7 @@ export class MessageUtils {
12
12
  iconTint: theme.palette.getAccent600(),
13
13
  backgroundColor: "transparent",
14
14
  titleFont: fontHelper(theme.typography.subtitle1),
15
- titleColor: theme.palette.getAccent600()
15
+ titleColor: theme.palette.getAccent600(),
16
16
  });
17
17
  }
18
18
  getMessageInfoOption(theme) {
@@ -24,7 +24,7 @@ export class MessageUtils {
24
24
  iconTint: theme.palette.getAccent600(),
25
25
  backgroundColor: "transparent",
26
26
  titleFont: fontHelper(theme.typography.subtitle1),
27
- titleColor: theme.palette.getAccent600()
27
+ titleColor: theme.palette.getAccent600(),
28
28
  });
29
29
  }
30
30
  getMessagePrivatelyOption(theme) {
@@ -36,7 +36,7 @@ export class MessageUtils {
36
36
  iconTint: theme.palette.getAccent600(),
37
37
  backgroundColor: "transparent",
38
38
  titleFont: fontHelper(theme.typography.subtitle1),
39
- titleColor: theme.palette.getAccent600()
39
+ titleColor: theme.palette.getAccent600(),
40
40
  });
41
41
  }
42
42
  getDeleteOption(theme) {
@@ -48,7 +48,7 @@ export class MessageUtils {
48
48
  iconTint: theme.palette.getAccent600(),
49
49
  backgroundColor: "transparent",
50
50
  titleFont: fontHelper(theme.typography.subtitle1),
51
- titleColor: theme.palette.getAccent600()
51
+ titleColor: theme.palette.getAccent600(),
52
52
  });
53
53
  }
54
54
  getReplyInThreadOption(theme) {
@@ -60,7 +60,7 @@ export class MessageUtils {
60
60
  iconTint: theme.palette.getAccent600(),
61
61
  backgroundColor: "transparent",
62
62
  titleFont: fontHelper(theme.typography.subtitle1),
63
- titleColor: theme.palette.getAccent600()
63
+ titleColor: theme.palette.getAccent600(),
64
64
  });
65
65
  }
66
66
  getCopyOption(theme) {
@@ -72,7 +72,7 @@ export class MessageUtils {
72
72
  iconTint: theme.palette.getAccent600(),
73
73
  backgroundColor: "transparent",
74
74
  titleFont: fontHelper(theme.typography.subtitle1),
75
- titleColor: theme.palette.getAccent600()
75
+ titleColor: theme.palette.getAccent600(),
76
76
  });
77
77
  }
78
78
  isSentByMe(loggedInUser, message) {
@@ -156,20 +156,6 @@ export class MessageUtils {
156
156
  options: ChatConfigurator.getDataSource().getMessageOptions,
157
157
  });
158
158
  }
159
- getFormMessageTemplate() {
160
- return new CometChatMessageTemplate({
161
- type: CometChatUIKitConstants.MessageTypes.form,
162
- category: CometChatUIKitConstants.MessageCategory.interactive,
163
- options: ChatConfigurator.getDataSource().getMessageOptions,
164
- });
165
- }
166
- getCardMessageTemplate() {
167
- return new CometChatMessageTemplate({
168
- type: CometChatUIKitConstants.MessageTypes.card,
169
- category: CometChatUIKitConstants.MessageCategory.interactive,
170
- options: ChatConfigurator.getDataSource().getMessageOptions,
171
- });
172
- }
173
159
  getAllMessageTemplates() {
174
160
  return [
175
161
  ChatConfigurator.getDataSource().getTextMessageTemplate(),
@@ -178,8 +164,6 @@ export class MessageUtils {
178
164
  ChatConfigurator.getDataSource().getAudioMessageTemplate(),
179
165
  ChatConfigurator.getDataSource().getFileMessageTemplate(),
180
166
  ChatConfigurator.getDataSource().getGroupActionTemplate(),
181
- ChatConfigurator.getDataSource().getFormMessageTemplate(),
182
- ChatConfigurator.getDataSource().getCardMessageTemplate()
183
167
  ];
184
168
  }
185
169
  getMessageTemplate(messageType, messageCategory) {
@@ -190,10 +174,12 @@ export class MessageUtils {
190
174
  _template = ChatConfigurator.getDataSource().getTextMessageTemplate();
191
175
  break;
192
176
  case CometChatUIKitConstants.MessageTypes.image:
193
- _template = ChatConfigurator.getDataSource().getImageMessageTemplate();
177
+ _template =
178
+ ChatConfigurator.getDataSource().getImageMessageTemplate();
194
179
  break;
195
180
  case CometChatUIKitConstants.MessageTypes.video:
196
- _template = ChatConfigurator.getDataSource().getVideoMessageTemplate();
181
+ _template =
182
+ ChatConfigurator.getDataSource().getVideoMessageTemplate();
197
183
  break;
198
184
  case CometChatUIKitConstants.MessageTypes.groupMember:
199
185
  _template = ChatConfigurator.getDataSource().getGroupActionTemplate();
@@ -202,13 +188,8 @@ export class MessageUtils {
202
188
  _template = ChatConfigurator.getDataSource().getFileMessageTemplate();
203
189
  break;
204
190
  case CometChatUIKitConstants.MessageTypes.audio:
205
- _template = ChatConfigurator.getDataSource().getAudioMessageTemplate();
206
- break;
207
- case CometChatUIKitConstants.MessageTypes.form:
208
- _template = ChatConfigurator.getDataSource().getFormMessageTemplate();
209
- break;
210
- case CometChatUIKitConstants.MessageTypes.card:
211
- _template = ChatConfigurator.getDataSource().getCardMessageTemplate();
191
+ _template =
192
+ ChatConfigurator.getDataSource().getAudioMessageTemplate();
212
193
  break;
213
194
  }
214
195
  }
@@ -220,7 +201,8 @@ export class MessageUtils {
220
201
  if (loggedInUser.getUid() == messageObject.getSender()?.getUid()) {
221
202
  _isSentByMe = true;
222
203
  }
223
- if (messageObject.getCategory() == CometChatUIKitConstants.MessageCategory.message) {
204
+ if (messageObject.getCategory() ==
205
+ CometChatUIKitConstants.MessageCategory.message) {
224
206
  switch (messageObject.getType()) {
225
207
  case CometChatUIKitConstants.MessageTypes.text:
226
208
  _optionList = ChatConfigurator.getDataSource().getTextMessageOptions(loggedInUser, messageObject, theme, group);
@@ -242,8 +224,8 @@ export class MessageUtils {
242
224
  break;
243
225
  }
244
226
  }
245
- else if ((messageObject.getCategory() == CometChatUIKitConstants.MessageCategory.custom) ||
246
- (messageObject.getCategory() == CometChatUIKitConstants.MessageCategory.interactive)) {
227
+ else if (messageObject.getCategory() ==
228
+ CometChatUIKitConstants.MessageCategory.custom) {
247
229
  _optionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
248
230
  }
249
231
  return _optionList;
@@ -275,8 +257,6 @@ export class MessageUtils {
275
257
  CometChatUIKitConstants.MessageTypes.video,
276
258
  CometChatUIKitConstants.MessageTypes.file,
277
259
  CometChatUIKitConstants.MessageTypes.groupMember,
278
- CometChatUIKitConstants.MessageTypes.form,
279
- CometChatUIKitConstants.MessageTypes.card
280
260
  ];
281
261
  }
282
262
  addList() {
@@ -286,7 +266,6 @@ export class MessageUtils {
286
266
  return [
287
267
  CometChatUIKitConstants.MessageCategory.message,
288
268
  CometChatUIKitConstants.MessageCategory.action,
289
- CometChatUIKitConstants.MessageCategory.interactive
290
269
  ];
291
270
  }
292
271
  getAuxiliaryOptions(id, user, group) {
@@ -343,7 +322,7 @@ export class MessageUtils {
343
322
  titleFont: fontHelper(theme.typography.subtitle1),
344
323
  titleColor: theme.palette.getAccent700(),
345
324
  borderRadius: "8px",
346
- background: theme.palette.getAccent100()
325
+ background: theme.palette.getAccent100(),
347
326
  });
348
327
  }
349
328
  videoAttachmentOption(theme) {
@@ -356,7 +335,7 @@ export class MessageUtils {
356
335
  titleFont: fontHelper(theme.typography.subtitle1),
357
336
  titleColor: theme.palette.getAccent700(),
358
337
  borderRadius: "8px",
359
- background: theme.palette.getAccent100()
338
+ background: theme.palette.getAccent100(),
360
339
  });
361
340
  }
362
341
  audioAttachmentOption(theme) {
@@ -369,7 +348,7 @@ export class MessageUtils {
369
348
  titleFont: fontHelper(theme.typography.subtitle1),
370
349
  titleColor: theme.palette.getAccent700(),
371
350
  borderRadius: "8px",
372
- background: theme.palette.getAccent100()
351
+ background: theme.palette.getAccent100(),
373
352
  });
374
353
  }
375
354
  fileAttachmentOption(theme) {
@@ -382,7 +361,7 @@ export class MessageUtils {
382
361
  titleFont: fontHelper(theme.typography.subtitle1),
383
362
  titleColor: theme.palette.getAccent700(),
384
363
  borderRadius: "8px",
385
- background: theme.palette.getAccent100()
364
+ background: theme.palette.getAccent100(),
386
365
  });
387
366
  }
388
367
  getAttachmentOptions(theme, user, group, id) {
@@ -390,12 +369,15 @@ export class MessageUtils {
390
369
  this.imageAttachmentOption(theme),
391
370
  this.videoAttachmentOption(theme),
392
371
  this.audioAttachmentOption(theme),
393
- this.fileAttachmentOption(theme)
372
+ this.fileAttachmentOption(theme),
394
373
  ];
395
374
  return actions;
396
375
  }
397
376
  getLastConversationMessage(conversation, loggedInUser) {
398
377
  return ConversationUtils.getLastConversationMessage(conversation, loggedInUser);
399
378
  }
379
+ getAIOptions(theme, id) {
380
+ return [];
381
+ }
400
382
  }
401
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9TaGFyZWQvVXRpbHMvTWVzc2FnZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBa0IsdUJBQXVCLEVBQTBCLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVyTixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHNUQsTUFBTSxPQUFPLFlBQVk7SUFDckIsYUFBYSxDQUFDLEtBQXFCO1FBQy9CLE9BQU8sSUFBSSxzQkFBc0IsQ0FBQztZQUM5QixFQUFFLEVBQUUsdUJBQXVCLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDckQsS0FBSyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDL0IsT0FBTyxFQUFFLHFCQUFxQjtZQUM5QixPQUFPLEVBQUUsSUFBSTtZQUNiLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN0QyxlQUFlLEVBQUUsYUFBYTtZQUM5QixTQUFTLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ2pELFVBQVUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtTQUMzQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsS0FBcUI7UUFDdEMsT0FBTyxJQUFJLHNCQUFzQixDQUFDO1lBQzlCLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsa0JBQWtCO1lBQzVELEtBQUssRUFB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QUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiwgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiwgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLCBDb21ldENoYXRUaGVtZSwgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsIE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQsIGZvbnRIZWxwZXIsIGxvY2FsaXplIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzXCI7XG5cbmltcG9ydCB7IENoYXRDb25maWd1cmF0b3IgfSBmcm9tIFwiLi4vRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7IENvbnZlcnNhdGlvblV0aWxzIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtc2hhcmVkXCI7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4uL0ZyYW1ld29yay9EYXRhU291cmNlXCI7XG5cbmV4cG9ydCBjbGFzcyBNZXNzYWdlVXRpbHMgaW1wbGVtZW50cyBEYXRhU291cmNlIHtcbiAgICBnZXRFZGl0T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uZWRpdE1lc3NhZ2UsXG4gICAgICAgICAgICB0aXRsZTogbG9jYWxpemUoXCJFRElUX01FU1NBR0VcIiksXG4gICAgICAgICAgICBpY29uVVJMOiBcImFzc2V0cy9lZGl0aWNvbi5zdmdcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICAgICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgICAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldE1lc3NhZ2VJbmZvT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24ubWVzc2FnZUluZm9ybWF0aW9uLFxuICAgICAgICAgICAgdGl0bGU6IGxvY2FsaXplKFwiTUVTU0FHRV9JTkZPUk1BVElPTlwiKSxcbiAgICAgICAgICAgIGljb25VUkw6IFwiYXNzZXRzL0luZm8uc3ZnXCIsXG4gICAgICAgICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICAgICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRNZXNzYWdlUHJpdmF0ZWx5T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uc2VuZE1lc3NhZ2VQcml2YXRlbHksXG4gICAgICAgICAgICB0aXRsZTogbG9jYWxpemUoXCJTRU5EX01FU1NBR0VfSU5fUFJJVkFURVwiKSxcbiAgICAgICAgICAgIGljb25VUkw6IFwiYXNzZXRzL21lc3NhZ2UtcHJpdmF0ZWx5LnN2Z1wiLFxuICAgICAgICAgICAgb25DbGljazogbnVsbCxcbiAgICAgICAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0RGVsZXRlT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uZGVsZXRlTWVzc2FnZSxcbiAgICAgICAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkRFTEVURVwiKSxcbiAgICAgICAgICAgIGljb25VUkw6IFwiYXNzZXRzL2RlbGV0ZWljb24uc3ZnXCIsXG4gICAgICAgICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICAgICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRSZXBseUluVGhyZWFkT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24ucmVwbHlJblRocmVhZCxcbiAgICAgICAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIlJFUExZX0lOX1RIUkVBRFwiKSxcbiAgICAgICAgICAgIGljb25VUkw6IFwiYXNzZXRzL3RocmVhZGljb24uc3ZnXCIsXG4gICAgICAgICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICAgICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRDb3B5T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uY29weU1lc3NhZ2UsXG4gICAgICAgICAgICB0aXRsZTogbG9jYWxpemUoXCJDT1BZX01FU1NBR0VcIiksXG4gICAgICAgICAgICBpY29uVVJMOiBcImFzc2V0cy9Db3B5LnN2Z1wiLFxuICAgICAgICAgICAgb25DbGljazogbnVsbCxcbiAgICAgICAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICAgICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNTZW50QnlNZShsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLCBtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGxvZ2dlZEluVXNlci5nZXRVaWQoKSA9PT0gbWVzc2FnZS5nZXRTZW5kZXIoKS5nZXRVaWQoKTtcbiAgICB9XG4gICAgZ2V0VGV4dE1lc3NhZ2VPcHRpb25zKGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSwgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLCBncm91cD86IENvbWV0Q2hhdC5Hcm91cCk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICAgICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gdGhpcy5pc1NlbnRCeU1lKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCk7XG4gICAgICAgIGxldCBfaXNNb2RlcmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUubW9kZXJhdG9yKSB7XG4gICAgICAgICAgICBfaXNNb2RlcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4gPSBbXTtcbiAgICAgICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCwgdGhlbWUsIGdyb3VwKTtcbiAgICAgICAgaWYgKF9pc1NlbnRCeU1lKSB7XG4gICAgICAgICAgICBtZXNzYWdlT3B0aW9uTGlzdC51bnNoaWZ0KHRoaXMuZ2V0RWRpdE9wdGlvbih0aGVtZSkpO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnVuc2hpZnQodGhpcy5nZXRDb3B5T3B0aW9uKHRoZW1lKSk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgICB9XG4gICAgZ2V0SW1hZ2VNZXNzYWdlT3B0aW9ucyhsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLCBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsIHRoZW1lOiBDb21ldENoYXRUaGVtZSwgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgICAgIG1lc3NhZ2VPcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QsIHRoZW1lLCBncm91cCk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgICB9XG4gICAgZ2V0VmlkZW9NZXNzYWdlT3B0aW9ucyhsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLCBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsIHRoZW1lOiBDb21ldENoYXRUaGVtZSwgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgICAgIG1lc3NhZ2VPcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QsIHRoZW1lLCBncm91cCk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgICB9XG4gICAgZ2V0QXVkaW9NZXNzYWdlT3B0aW9ucyhsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLCBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsIHRoZW1lOiBDb21ldENoYXRUaGVtZSwgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgICAgIG1lc3NhZ2VPcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QsIHRoZW1lLCBncm91cCk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgICB9XG4gICAgZ2V0RmlsZU1lc3NhZ2VPcHRpb25zKGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSwgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLCBncm91cD86IENvbWV0Q2hhdC5Hcm91cCk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICAgICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICAgICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCwgdGhlbWUsIGdyb3VwKTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICAgIH1cbiAgICBnZXRCb3R0b21WaWV3KF9tZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsIF9hbGlnbm1lbnQ6IE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGdldFRleHRNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQsXG4gICAgICAgICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICAgICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgICAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5hdWRpbyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0VmlkZW9NZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnZpZGVvLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRJbWFnZU1lc3NhZ2VUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICAgICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2UsXG4gICAgICAgICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICAgICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5hY3Rpb24sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgICAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEZvcm1NZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZvcm0sXG4gICAgICAgICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldENhcmRNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQsXG4gICAgICAgICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFsbE1lc3NhZ2VUZW1wbGF0ZXMoKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlPiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRUZXh0TWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRJbWFnZU1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VmlkZW9NZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRHcm91cEFjdGlvblRlbXBsYXRlKCksXG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGb3JtTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDYXJkTWVzc2FnZVRlbXBsYXRlKClcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZ2V0TWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUeXBlOiBzdHJpbmcsIG1lc3NhZ2VDYXRlZ29yeTogc3RyaW5nKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHwgbnVsbCB7XG4gICAgICAgIGxldCBfdGVtcGxhdGU6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAobWVzc2FnZUNhdGVnb3J5ICE9IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5jYWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2VUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dDpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VGV4dE1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZTpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW86XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFZpZGVvTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRHcm91cEFjdGlvblRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGU6XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZpbGVNZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW86XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZvcm06XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZvcm1NZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuY2FyZDpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q2FyZE1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RlbXBsYXRlO1xuICAgIH1cbiAgICBnZXRNZXNzYWdlT3B0aW9ucyhsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLCBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsIHRoZW1lOiBDb21ldENoYXRUaGVtZSwgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgICAgIGxldCBfb3B0aW9uTGlzdDogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4gPSBbXTtcbiAgICAgICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGlmIChsb2dnZWRJblVzZXIuZ2V0VWlkKCkgPT0gbWVzc2FnZU9iamVjdC5nZXRTZW5kZXIoKT8uZ2V0VWlkKCkpIHtcbiAgICAgICAgICAgIF9pc1NlbnRCeU1lID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5nZXRDYXRlZ29yeSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2VPYmplY3QuZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dDpcbiAgICAgICAgICAgICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRUZXh0TWVzc2FnZU9wdGlvbnMobG9nZ2VkSW5Vc2VyLCBtZXNzYWdlT2JqZWN0LCB0aGVtZSwgZ3JvdXApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZTpcbiAgICAgICAgICAgICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRJbWFnZU1lc3NhZ2VPcHRpb25zKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCwgdGhlbWUsIGdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW86XG4gICAgICAgICAgICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VmlkZW9NZXNzYWdlT3B0aW9ucyhsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QsIHRoZW1lLCBncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyOlxuICAgICAgICAgICAgICAgICAgICBfb3B0aW9uTGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlOlxuICAgICAgICAgICAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZpbGVNZXNzYWdlT3B0aW9ucyhsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QsIHRoZW1lLCBncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvOlxuICAgICAgICAgICAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEF1ZGlvTWVzc2FnZU9wdGlvbnMobG9nZ2VkSW5Vc2VyLCBtZXNzYWdlT2JqZWN0LCB0aGVtZSwgZ3JvdXApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWVzc2FnZU9iamVjdC5nZXRDYXRlZ29yeSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5jdXN0b20pIHx8IFxuICAgICAgICAgICAgICAgICAgICAobWVzc2FnZU9iamVjdC5nZXRDYXRlZ29yeSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5pbnRlcmFjdGl2ZSkpIHtcbiAgICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QsIHRoZW1lLCBncm91cCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9vcHRpb25MaXN0O1xuICAgIH1cbiAgICBnZXRDb21tb25PcHRpb25zKGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSwgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLCBncm91cD86IENvbWV0Q2hhdC5Hcm91cCk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICAgICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gdGhpcy5pc1NlbnRCeU1lKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCk7XG4gICAgICAgIGxldCBfaXNNb2RlcmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUubW9kZXJhdG9yKSBfaXNNb2RlcmF0b3IgPSB0cnVlO1xuICAgICAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgICAgIGlmICghbWVzc2FnZU9iamVjdC5nZXRQYXJlbnRNZXNzYWdlSWQoKSkge1xuICAgICAgICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldFJlcGx5SW5UaHJlYWRPcHRpb24odGhlbWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZihfaXNTZW50QnlNZSl7XG4gICAgICAgICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0TWVzc2FnZUluZm9PcHRpb24odGhlbWUpKVxuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cCAmJiAhX2lzU2VudEJ5TWUpe1xuICAgICAgICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldE1lc3NhZ2VQcml2YXRlbHlPcHRpb24odGhlbWUpKVxuICAgICAgICB9XG4gICAgICAgIGlmIChfaXNTZW50QnlNZSA9PSB0cnVlIHx8IF9pc01vZGVyYXRvciA9PSB0cnVlKVxuICAgICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0RGVsZXRlT3B0aW9uKHRoZW1lKSk7XG4gICAgXG4gICAgICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgICB9XG4gICAgZ2V0QWxsTWVzc2FnZVR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQsXG4gICAgICAgICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2UsXG4gICAgICAgICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICAgICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICAgICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZSxcbiAgICAgICAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcixcbiAgICAgICAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5mb3JtLFxuICAgICAgICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYWRkTGlzdCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCI8TWVzc2FnZSBVdGlscz5cIjtcbiAgICB9XG4gICAgZ2V0QWxsTWVzc2FnZUNhdGVnb3JpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSwgXG4gICAgICAgICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuYWN0aW9uLFxuICAgICAgICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlXG4gICAgICAgIF07XG4gICAgfVxuICAgIGdldEF1eGlsaWFyeU9wdGlvbnMoaWQ6Q29tcG9zZXJJZCwgdXNlcj86IENvbWV0Q2hhdC5Vc2VyLCBncm91cD86IENvbWV0Q2hhdC5Hcm91cCk6IGFueSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBnZXRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJtZXNzYWdlVXRpbHNcIjtcbiAgICB9XG4gICAgZ2V0QWN0aW9uTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQWN0aW9uKTpzdHJpbmcgIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgQ29tZXRDaGF0LkFjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IG1lc3NhZ2UuZ2V0QWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uQnkgPSBtZXNzYWdlLmdldEFjdGlvbkJ5KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uT24gPSBtZXNzYWdlLmdldEFjdGlvbk9uKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBieVN0cmluZyA9IChhY3Rpb25CeSBhcyBDb21ldENoYXQuVXNlcikuZ2V0TmFtZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvclN0cmluZyA9XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uSk9JTkVEIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkxFRlRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoYWN0aW9uT24gYXMgQ29tZXRDaGF0LlVzZXIpLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uQURERUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJBRERFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5KT0lORUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJKT0lORURcIil9YDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5MRUZUOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFwiTEVGVFwiKX1gO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLktJQ0tFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIktJQ0tFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5CQU5ORUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJCQU5ORURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uVU5CQU5ORUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJVTkJBTk5FRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5TQ09QRV9DSEFOR0U6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJNQURFXCIpfSAke2ZvclN0cmluZ30gJHttZXNzYWdlLmdldE5ld1Njb3BlKCl9YDtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgcmV0dXJuICBcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbWFnZUF0dGFjaG1lbnRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oe1xuICAgICAgICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZSxcbiAgICAgICAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkFUVEFDSF9JTUFHRVwiKSxcbiAgICAgICAgICAgIGljb25VUkw6IFwiYXNzZXRzL3Bob3RvbGlicmFyeS5zdmdcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6bnVsbCxcbiAgICAgICAgICAgIGljb25UaW50OnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICAgICAgICB0aXRsZUZvbnQ6Zm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICAgICAgICB0aXRsZUNvbG9yOnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6XCI4cHhcIixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6dGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmlkZW9BdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgICAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICAgICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfVklERU9cIiksXG4gICAgICAgICAgICBpY29uVVJMOiBcImFzc2V0cy92aWRlby5zdmdcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6bnVsbCxcbiAgICAgICAgICAgIGljb25UaW50OnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICAgICAgICB0aXRsZUZvbnQ6Zm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICAgICAgICB0aXRsZUNvbG9yOnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6XCI4cHhcIixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6dGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXVkaW9BdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgICAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICAgICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfQVVESU9cIiksXG4gICAgICAgICAgICBpY29uVVJMOiBcImFzc2V0cy9hdWRpby1maWxlLnN2Z1wiLFxuICAgICAgICAgICAgb25DbGljazpudWxsLFxuICAgICAgICAgICAgaWNvblRpbnQ6dGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgICAgICAgIHRpdGxlRm9udDpmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgICAgICAgIHRpdGxlQ29sb3I6dGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czpcIjhweFwiLFxuICAgICAgICAgICAgYmFja2dyb3VuZDp0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmaWxlQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgICAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbih7XG4gICAgICAgICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICAgICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfRklMRVwiKSxcbiAgICAgICAgICAgIGljb25VUkw6IFwiYXNzZXRzL2F0dGFjaG1lbnQtZmlsZS5zdmdcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6bnVsbCxcbiAgICAgICAgICAgIGljb25UaW50OnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICAgICAgICB0aXRsZUZvbnQ6Zm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICAgICAgICB0aXRsZUNvbG9yOnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6XCI4cHhcIixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6dGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0QXR0YWNobWVudE9wdGlvbnModGhlbWU6IENvbWV0Q2hhdFRoZW1lLHVzZXI/OkNvbWV0Q2hhdC5Vc2VyLGdyb3VwPzpDb21ldENoYXQuR3JvdXAsIGlkPzogQ29tcG9zZXJJZCk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbltdIHtcbiAgICAgICAgbGV0IGFjdGlvbnM6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbj4gPSBbXG4gICAgICAgICAgICB0aGlzLmltYWdlQXR0YWNobWVudE9wdGlvbih0aGVtZSksXG4gICAgICAgICAgICB0aGlzLnZpZGVvQXR0YWNobWVudE9wdGlvbih0aGVtZSksXG4gICAgICAgICAgICB0aGlzLmF1ZGlvQXR0YWNobWVudE9wdGlvbih0aGVtZSksXG4gICAgICAgICAgICB0aGlzLmZpbGVBdHRhY2htZW50T3B0aW9uKHRoZW1lKVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9XG4gICAgZ2V0TGFzdENvbnZlcnNhdGlvbk1lc3NhZ2UoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uLCBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENvbnZlcnNhdGlvblV0aWxzLmdldExhc3RDb252ZXJzYXRpb25NZXNzYWdlKGNvbnZlcnNhdGlvbiwgbG9nZ2VkSW5Vc2VyKTtcbiAgICB9XG59XG5leHBvcnQgdHlwZSBDb21wb3NlcklkID0ge3BhcmVudE1lc3NhZ2VJZCA6IG51bWJlciB8IG51bGwsIHVzZXIgOiBzdHJpbmcgfCBudWxsLCBncm91cCA6IHN0cmluZyB8IG51bGx9OyJdfQ==
383
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9TaGFyZWQvVXRpbHMvTWVzc2FnZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUU5QixRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLFVBQVUsR0FFWCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxNQUFNLE9BQU8sWUFBWTtJQUN2QixhQUFhLENBQUMsS0FBcUI7UUFDakMsT0FBTyxJQUFJLHNCQUFzQixDQUFDO1lBQ2hDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsV0FBVztZQUNyRCxLQUFLLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMvQixPQUFPLEVBQUUscUJBQXFCO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3RDLGVBQWUsRUFBRSxhQUFhO1lBQzlCLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDakQsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFxQjtRQUN4QyxPQUFPLElBQUksc0JBQXNCLENBQUM7WUFDaEMsRUFBRSxFQUFFLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxrQkFBa0I7WUFDNUQsS0FBSyxF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LFlBQW9DLEVBQ3BDLFlBQTRCO1FBRTVCLE9BQU8saUJBQWlCLENBQUMsMEJBQTBCLENBQ2pELFlBQVksRUFDWixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQ1YsS0FBcUIsRUFDckIsRUFBcUI7UUFFckIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21ldENoYXRNZXNzYWdlT3B0aW9uLFxuICBNZXNzYWdlQnViYmxlQWxpZ25tZW50LFxuICBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUsXG4gIENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbixcbiAgQ29tZXRDaGF0VGhlbWUsXG4gIGxvY2FsaXplLFxuICBDb21ldENoYXRVSUtpdENvbnN0YW50cyxcbiAgZm9udEhlbHBlcixcbiAgQ29tZXRDaGF0QWN0aW9uc1ZpZXcsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uVXRpbHMgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vRnJhbWV3b3JrL0RhdGFTb3VyY2VcIjtcbmltcG9ydCB7IENoYXRDb25maWd1cmF0b3IgfSBmcm9tIFwiLi4vRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmV4cG9ydCBjbGFzcyBNZXNzYWdlVXRpbHMgaW1wbGVtZW50cyBEYXRhU291cmNlIHtcbiAgZ2V0RWRpdE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uZWRpdE1lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJFRElUX01FU1NBR0VcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9lZGl0aWNvbi5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgZ2V0TWVzc2FnZUluZm9PcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbixcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIk1FU1NBR0VfSU5GT1JNQVRJT05cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9JbmZvLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICBnZXRNZXNzYWdlUHJpdmF0ZWx5T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5zZW5kTWVzc2FnZVByaXZhdGVseSxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIlNFTkRfTUVTU0FHRV9JTl9QUklWQVRFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvbWVzc2FnZS1wcml2YXRlbHkuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIGdldERlbGV0ZU9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uZGVsZXRlTWVzc2FnZSxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkRFTEVURVwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL2RlbGV0ZWljb24uc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIGdldFJlcGx5SW5UaHJlYWRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLnJlcGx5SW5UaHJlYWQsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJSRVBMWV9JTl9USFJFQURcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy90aHJlYWRpY29uLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICBnZXRDb3B5T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5jb3B5TWVzc2FnZSxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkNPUFlfTUVTU0FHRVwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL0NvcHkuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIGlzU2VudEJ5TWUoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2VcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxvZ2dlZEluVXNlci5nZXRVaWQoKSA9PT0gbWVzc2FnZS5nZXRTZW5kZXIoKS5nZXRVaWQoKTtcbiAgfVxuICBnZXRUZXh0TWVzc2FnZU9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgX2lzU2VudEJ5TWU6IGJvb2xlYW4gPSB0aGlzLmlzU2VudEJ5TWUobG9nZ2VkSW5Vc2VyLCBtZXNzYWdlT2JqZWN0KTtcbiAgICBsZXQgX2lzTW9kZXJhdG9yOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgZ3JvdXA/LmdldFNjb3BlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJTY29wZS5tb2RlcmF0b3JcbiAgICApIHtcbiAgICAgIF9pc01vZGVyYXRvciA9IHRydWU7XG4gICAgfVxuICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgaWYgKF9pc1NlbnRCeU1lKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC51bnNoaWZ0KHRoaXMuZ2V0RWRpdE9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBtZXNzYWdlT3B0aW9uTGlzdC51bnNoaWZ0KHRoaXMuZ2V0Q29weU9wdGlvbih0aGVtZSkpO1xuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRJbWFnZU1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIGdldFZpZGVvTWVzc2FnZU9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb25bXSA9IFtdO1xuICAgIG1lc3NhZ2VPcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhcbiAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICB0aGVtZSxcbiAgICAgIGdyb3VwXG4gICAgKTtcbiAgICByZXR1cm4gbWVzc2FnZU9wdGlvbkxpc3Q7XG4gIH1cbiAgZ2V0QXVkaW9NZXNzYWdlT3B0aW9ucyhcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4ge1xuICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgIHRoZW1lLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRGaWxlTWVzc2FnZU9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb25bXSA9IFtdO1xuICAgIG1lc3NhZ2VPcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhcbiAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICB0aGVtZSxcbiAgICAgIGdyb3VwXG4gICAgKTtcbiAgICByZXR1cm4gbWVzc2FnZU9wdGlvbkxpc3Q7XG4gIH1cbiAgZ2V0Qm90dG9tVmlldyhcbiAgICBfbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIF9hbGlnbm1lbnQ6IE1lc3NhZ2VCdWJibGVBbGlnbm1lbnRcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0VGV4dE1lc3NhZ2VUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy50ZXh0LFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0QXVkaW9NZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRWaWRlb01lc3NhZ2VUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy52aWRlbyxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEltYWdlTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0R3JvdXBBY3Rpb25UZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcixcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuYWN0aW9uLFxuICAgIH0pO1xuICB9XG4gIGdldEZpbGVNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZSxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEFsbE1lc3NhZ2VUZW1wbGF0ZXMoKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFRleHRNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEltYWdlTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QXVkaW9NZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZpbGVNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKSxcbiAgICBdO1xuICB9XG4gIGdldE1lc3NhZ2VUZW1wbGF0ZShcbiAgICBtZXNzYWdlVHlwZTogc3RyaW5nLFxuICAgIG1lc3NhZ2VDYXRlZ29yeTogc3RyaW5nXG4gICk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB8IG51bGwge1xuICAgIGxldCBfdGVtcGxhdGU6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChtZXNzYWdlQ2F0ZWdvcnkgIT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmNhbGwpIHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZVR5cGUpIHtcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dDpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRUZXh0TWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9XG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRJbWFnZU1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy52aWRlbzpcbiAgICAgICAgICBfdGVtcGxhdGUgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VmlkZW9NZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXI6XG4gICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0R3JvdXBBY3Rpb25UZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZpbGVNZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW86XG4gICAgICAgICAgX3RlbXBsYXRlID1cbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfdGVtcGxhdGU7XG4gIH1cbiAgZ2V0TWVzc2FnZU9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgX29wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGxvZ2dlZEluVXNlci5nZXRVaWQoKSA9PSBtZXNzYWdlT2JqZWN0LmdldFNlbmRlcigpPy5nZXRVaWQoKSkge1xuICAgICAgX2lzU2VudEJ5TWUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBtZXNzYWdlT2JqZWN0LmdldENhdGVnb3J5KCkgPT1cbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2VPYmplY3QuZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQ6XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRUZXh0TWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlT3B0aW9ucyhcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW86XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcjpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0RmlsZU1lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5hdWRpbzpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEF1ZGlvTWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG1lc3NhZ2VPYmplY3QuZ2V0Q2F0ZWdvcnkoKSA9PVxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmN1c3RvbVxuICAgICkge1xuICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBncm91cFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIF9vcHRpb25MaXN0O1xuICB9XG4gIGdldENvbW1vbk9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgX2lzU2VudEJ5TWU6IGJvb2xlYW4gPSB0aGlzLmlzU2VudEJ5TWUobG9nZ2VkSW5Vc2VyLCBtZXNzYWdlT2JqZWN0KTtcbiAgICBsZXQgX2lzTW9kZXJhdG9yOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUubW9kZXJhdG9yKVxuICAgICAgX2lzTW9kZXJhdG9yID0gdHJ1ZTtcbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgaWYgKCFtZXNzYWdlT2JqZWN0LmdldFBhcmVudE1lc3NhZ2VJZCgpKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0UmVwbHlJblRocmVhZE9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoX2lzU2VudEJ5TWUpIHtcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRNZXNzYWdlSW5mb09wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoZ3JvdXAgJiYgIV9pc1NlbnRCeU1lKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0TWVzc2FnZVByaXZhdGVseU9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoX2lzU2VudEJ5TWUgPT0gdHJ1ZSB8fCBfaXNNb2RlcmF0b3IgPT0gdHJ1ZSlcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXREZWxldGVPcHRpb24odGhlbWUpKTtcblxuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRBbGxNZXNzYWdlVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy50ZXh0LFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnZpZGVvLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXIsXG4gICAgXTtcbiAgfVxuICBhZGRMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPE1lc3NhZ2UgVXRpbHM+XCI7XG4gIH1cbiAgZ2V0QWxsTWVzc2FnZUNhdGVnb3JpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbixcbiAgICBdO1xuICB9XG4gIGdldEF1eGlsaWFyeU9wdGlvbnMoXG4gICAgaWQ6IENvbXBvc2VySWQsXG4gICAgdXNlcj86IENvbWV0Q2hhdC5Vc2VyLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtZXNzYWdlVXRpbHNcIjtcbiAgfVxuICBnZXRBY3Rpb25NZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5BY3Rpb24pOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIENvbWV0Q2hhdC5BY3Rpb24pIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gbWVzc2FnZS5nZXRBY3Rpb24oKTtcbiAgICAgICAgY29uc3QgYWN0aW9uQnkgPSBtZXNzYWdlLmdldEFjdGlvbkJ5KCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbk9uID0gbWVzc2FnZS5nZXRBY3Rpb25PbigpO1xuXG4gICAgICAgIGNvbnN0IGJ5U3RyaW5nID0gKGFjdGlvbkJ5IGFzIENvbWV0Q2hhdC5Vc2VyKS5nZXROYW1lKCk7XG4gICAgICAgIGNvbnN0IGZvclN0cmluZyA9XG4gICAgICAgICAgYWN0aW9uID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5KT0lORUQgfHxcbiAgICAgICAgICBhY3Rpb24gPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkxFRlRcbiAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgOiAoYWN0aW9uT24gYXMgQ29tZXRDaGF0LlVzZXIpLmdldE5hbWUoKTtcblxuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uQURERUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJBRERFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkpPSU5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkpPSU5FRFwiKX1gO1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uTEVGVDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkxFRlRcIil9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLktJQ0tFRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIktJQ0tFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkJBTk5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkJBTk5FRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLlVOQkFOTkVEOlxuICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFwiVU5CQU5ORURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5TQ09QRV9DSEFOR0U6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXG4gICAgICAgICAgICAgIFwiTUFERVwiXG4gICAgICAgICAgICApfSAke2ZvclN0cmluZ30gJHttZXNzYWdlLmdldE5ld1Njb3BlKCl9YDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGltYWdlQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfSU1BR0VcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9waG90b2xpYnJhcnkuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgfSk7XG4gIH1cbiAgdmlkZW9BdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy52aWRlbyxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkFUVEFDSF9WSURFT1wiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL3ZpZGVvLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGF1ZGlvQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfQVVESU9cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9hdWRpby1maWxlLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGZpbGVBdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQVRUQUNIX0ZJTEVcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9hdHRhY2htZW50LWZpbGUuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgfSk7XG4gIH1cbiAgZ2V0QXR0YWNobWVudE9wdGlvbnMoXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIHVzZXI/OiBDb21ldENoYXQuVXNlcixcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cCxcbiAgICBpZD86IENvbXBvc2VySWRcbiAgKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uW10ge1xuICAgIGxldCBhY3Rpb25zOiBBcnJheTxDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24+ID0gW1xuICAgICAgdGhpcy5pbWFnZUF0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy52aWRlb0F0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy5hdWRpb0F0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy5maWxlQXR0YWNobWVudE9wdGlvbih0aGVtZSksXG4gICAgXTtcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuICBnZXRMYXN0Q29udmVyc2F0aW9uTWVzc2FnZShcbiAgICBjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24sXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlclxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBDb252ZXJzYXRpb25VdGlscy5nZXRMYXN0Q29udmVyc2F0aW9uTWVzc2FnZShcbiAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgIGxvZ2dlZEluVXNlclxuICAgICk7XG4gIH1cblxuICBnZXRBSU9wdGlvbnMoXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGlkPzogTWFwPFN0cmluZywgYW55PlxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24gfCBDb21ldENoYXRBY3Rpb25zVmlldz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuZXhwb3J0IHR5cGUgQ29tcG9zZXJJZCA9IHtcbiAgcGFyZW50TWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xuICB1c2VyOiBzdHJpbmcgfCBudWxsO1xuICBncm91cDogc3RyaW5nIHwgbnVsbDtcbn07XG4iXX0=