@projectcor/maia-components 2.11.36-7 → 2.11.36

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 (105) hide show
  1. package/lib/App.js +11 -24
  2. package/lib/components/atoms/MAIAInput/MAIAInput.js +191 -61
  3. package/lib/components/atoms/icons/index.js +1 -3
  4. package/lib/components/index.js +1 -2
  5. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  6. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
  7. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  8. package/lib/components/molecules/AbmSection/index.js +1 -2
  9. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +1 -13
  10. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +4 -8
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -21
  12. package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +89 -91
  14. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -2
  15. package/lib/components/molecules/ChatAIModal/constants.js +2 -10
  16. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -5
  17. package/lib/components/molecules/Sidebar/Sidebar.js +31 -68
  18. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -6
  19. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +50 -247
  20. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  21. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +3 -13
  22. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -6
  23. package/lib/dev/Providers.js +6 -11
  24. package/lib/hooks/useAgentModel/useCreateAgent.js +10 -11
  25. package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -12
  26. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  27. package/lib/hooks/useChatManager/useChatManager.js +11 -21
  28. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  29. package/lib/hooks/useChatMessages/useChatMessages.js +14 -30
  30. package/lib/hooks/useEvent.js +1 -5
  31. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
  32. package/lib/lang/br/index.js +1 -266
  33. package/lib/lang/en/index.js +1 -266
  34. package/lib/lang/es/index.js +1 -266
  35. package/lib/lang/fr/index.js +2 -268
  36. package/lib/services/maia/Agents/createAgent.js +1 -1
  37. package/lib/services/maia/Agents/getAgentById.js +2 -3
  38. package/lib/services/maia/Agents/updateAgent.js +1 -1
  39. package/lib/services/maia/Chats/getChatMessages.js +4 -29
  40. package/lib/services/maia/Orchestrator/orchestrator.js +9 -11
  41. package/lib/services/maia/RecentProjects/getRecentProjects.js +4 -12
  42. package/lib/services/utils/mapChatMessages.js +5 -12
  43. package/lib/types/Chat.js +1 -1
  44. package/lib/types/agent.js +1 -1
  45. package/lib/types/agentModal.js +1 -1
  46. package/package.json +1 -1
  47. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -28
  48. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -84
  49. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -123
  50. package/lib/components/atoms/ContextMentionChip/index.js +0 -4
  51. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -85
  52. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -6
  53. package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
  54. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -188
  55. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -98
  56. package/lib/components/atoms/ContextMentionItem/index.js +0 -2
  57. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -131
  58. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -63
  59. package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
  60. package/lib/components/atoms/icons/NotionIcon.js +0 -36
  61. package/lib/components/atoms/icons/RocketIcon.js +0 -31
  62. package/lib/components/atoms/icons/WrenchIcon.js +0 -42
  63. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +0 -510
  64. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +0 -234
  65. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +0 -437
  66. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +0 -3
  67. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +0 -80
  68. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +0 -2
  69. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +0 -722
  70. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +0 -165
  71. package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +0 -2
  72. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -55
  73. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
  74. package/lib/components/molecules/ContextMentionInput/index.js +0 -2
  75. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +0 -610
  76. package/lib/components/molecules/SchedulesPage/index.js +0 -2
  77. package/lib/components/molecules/SkillsPage/SkillsPage.js +0 -708
  78. package/lib/components/molecules/SkillsPage/index.js +0 -2
  79. package/lib/components/molecules/maiaSectionModalStyles.js +0 -91
  80. package/lib/components/molecules/maiaSectionUiTokens.js +0 -31
  81. package/lib/constants/taskLinkIcon.js +0 -6
  82. package/lib/dev/DevAbmAgentModal.js +0 -114
  83. package/lib/dev/DevContextMentionInput.js +0 -65
  84. package/lib/dev/mocks/abmModalMocks.js +0 -193
  85. package/lib/hooks/useCaretPosition.js +0 -35
  86. package/lib/hooks/useContextMentions.js +0 -204
  87. package/lib/hooks/useEntitySearch.js +0 -405
  88. package/lib/hooks/useMentionAllowedTypes.js +0 -86
  89. package/lib/hooks/useMentionPopover.js +0 -284
  90. package/lib/services/maia/Agents/connectors.js +0 -110
  91. package/lib/services/maia/Agents/skills.js +0 -164
  92. package/lib/services/maia/Schedules/createSchedule.js +0 -39
  93. package/lib/services/maia/Schedules/deleteSchedule.js +0 -36
  94. package/lib/services/maia/Schedules/getMySchedules.js +0 -55
  95. package/lib/services/maia/Schedules/getSchedules.js +0 -58
  96. package/lib/services/maia/Schedules/index.js +0 -5
  97. package/lib/services/query/entitySearchQuery.js +0 -16
  98. package/lib/services/query/usersDirectoryQuery.js +0 -19
  99. package/lib/types/agentSkill.js +0 -2
  100. package/lib/types/attachment.js +0 -2
  101. package/lib/types/contextMention.js +0 -37
  102. package/lib/utils/contextMentionIcons.js +0 -115
  103. package/lib/utils/contextMentionLabel.js +0 -4
  104. package/lib/utils/contextMentionTypeLabel.js +0 -17
  105. package/lib/utils/renderContextMentions.js +0 -216
@@ -32,7 +32,7 @@ import { useUser } from '../../../context/cor-user';
32
32
  import { AccessibilityIcon, BrainIcon } from '../../atoms/icons';
33
33
  import { useAgentModel } from '../../../hooks/useAgentModel/useAgentModel';
34
34
  import { useGetAgentById } from '../../../services/maia/Agents/getAgentById';
35
- import { AbmActionsSectionV2, AbmGeneralSection, AbmKnowledgeSection } from '../../molecules/AbmSection';
35
+ import { AbmGeneralSection, AbmKnowledgeSection } from '../../molecules/AbmSection';
36
36
  import { SCAAMContent, SCAAMFooter, SCAAMHeader, SCAAMHeaderTitle, SCAAMHeaderLeft, SCAAMHeaderFavorite, SCAAMHeaderCloseButton, SCAAMSidebar, SCAAMWrapper, SCAAMSidebarItem, SCAAMSidebarItemTitle, SCAAMDeleteButton, SCAAMSaveButton, SCAAMWrapperSpinner, SCAAMWrapperSpinnerContent, SCAAMSidebarItemError } from './AbmAgentModal.styles';
37
37
  import { useCreateAgent } from '../../../hooks/useAgentModel/useCreateAgent';
38
38
  import { useDeleteAgent } from '../../../hooks/useAgentModel/useDeleteAgent';
@@ -46,8 +46,6 @@ import { EVENTS, useEvent } from '../../../hooks/useEvent';
46
46
  import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal';
47
47
  import { useAccessClient } from '../../../hooks/useAccessClient/useAccessClient';
48
48
  import { useToggleFavorite } from '../../../hooks';
49
- import { createSchedule } from '../../../services/maia/Schedules';
50
- import { getAgentConnectors, openConnectorAuthorizationWindows, saveAgentConnectors } from '../../../services/maia/Agents/connectors';
51
49
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
52
50
  var initialValues = Object.freeze({
53
51
  isEditing: false,
@@ -67,11 +65,6 @@ var initialValues = Object.freeze({
67
65
  accessibility: {
68
66
  accessType: 'company',
69
67
  clients: null
70
- },
71
- actions: {
72
- selectedToolGroups: [],
73
- selectedConnectors: [],
74
- connectorStates: []
75
68
  }
76
69
  });
77
70
  export var SectionByKey = {
@@ -83,9 +76,6 @@ export var SectionByKey = {
83
76
  },
84
77
  accessibility: function accessibility(props) {
85
78
  return /*#__PURE__*/_jsx(AbmAccessibilitySection, _objectSpread({}, props));
86
- },
87
- actions: function actions(props) {
88
- return /*#__PURE__*/_jsx(AbmActionsSectionV2, _objectSpread({}, props));
89
79
  }
90
80
  };
91
81
  var validateFieldValues = function validateFieldValues(valueToValidate) {
@@ -139,11 +129,6 @@ function buildEditingModalValuesFromAgentDetail(agentById, agentModels, prev) {
139
129
  is_deleted: (_client$is_deleted = client.is_deleted) !== null && _client$is_deleted !== void 0 ? _client$is_deleted : false
140
130
  };
141
131
  })) || null
142
- },
143
- actions: {
144
- selectedToolGroups: agentById.toolGroupSlugs || [],
145
- selectedConnectors: [],
146
- connectorStates: []
147
132
  }
148
133
  });
149
134
  }
@@ -170,7 +155,6 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
170
155
  isSubscribed = _useState2[0],
171
156
  setIsSubscribed = _useState2[1];
172
157
  var modalRef = useRef(null);
173
- var connectorAuthPopupRef = useRef(null);
174
158
  var hasPendingFilesRef = useRef(false);
175
159
  var actionsToFiles = useRef({
176
160
  toDelete: [],
@@ -186,7 +170,6 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
186
170
  var accessHandledRef = useRef(false);
187
171
  var agentCreatedRef = useRef(null);
188
172
  var pendingInitialSectionRef = useRef(null);
189
- var pendingTriggerRef = useRef(null);
190
173
  var prefetchedAgentByIdRef = useRef(null);
191
174
  var filesFinishedRef = useRef(false);
192
175
  // Marca cuando cerramos el loader por el timeout de seguridad de archivos.
@@ -288,55 +271,13 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
288
271
  var clientsSame = areClientsArraysEqual(modalValues.accessibility.clients, firstValueAgent.current.accessibility.clients);
289
272
  return !accessTypeSame || !clientsSame;
290
273
  };
291
- var hasActionsChanged = function hasActionsChanged() {
292
- var _modalValues$actions, _firstValueAgent$curr2;
293
- var currentActions = _toConsumableArray(((_modalValues$actions = modalValues.actions) === null || _modalValues$actions === void 0 ? void 0 : _modalValues$actions.selectedToolGroups) || []).sort();
294
- var originalActions = _toConsumableArray(((_firstValueAgent$curr2 = firstValueAgent.current) === null || _firstValueAgent$curr2 === void 0 || (_firstValueAgent$curr2 = _firstValueAgent$curr2.actions) === null || _firstValueAgent$curr2 === void 0 ? void 0 : _firstValueAgent$curr2.selectedToolGroups) || []).sort();
295
- if (currentActions.length !== originalActions.length) return true;
296
- return currentActions.some(function (slug, index) {
297
- return slug !== originalActions[index];
298
- });
299
- };
300
- var hasConnectorChanges = function hasConnectorChanges() {
301
- var _modalValues$actions2, _firstValueAgent$curr3;
302
- var currentConnectors = _toConsumableArray(((_modalValues$actions2 = modalValues.actions) === null || _modalValues$actions2 === void 0 ? void 0 : _modalValues$actions2.selectedConnectors) || []).sort();
303
- var originalConnectors = _toConsumableArray(((_firstValueAgent$curr3 = firstValueAgent.current) === null || _firstValueAgent$curr3 === void 0 || (_firstValueAgent$curr3 = _firstValueAgent$curr3.actions) === null || _firstValueAgent$curr3 === void 0 ? void 0 : _firstValueAgent$curr3.selectedConnectors) || []).sort();
304
- if (currentConnectors.length !== originalConnectors.length) return true;
305
- return currentConnectors.some(function (slug, index) {
306
- return slug !== originalConnectors[index];
307
- });
308
- };
309
- var persistAgentConnectors = useCallback(/*#__PURE__*/function () {
310
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(agentId, connectorSlugs, popupWindow) {
311
- var response, pendingAuthorizations;
312
- return _regeneratorRuntime.wrap(function (_context) {
313
- while (1) switch (_context.prev = _context.next) {
314
- case 0:
315
- _context.next = 1;
316
- return saveAgentConnectors(agentId, connectorSlugs);
317
- case 1:
318
- response = _context.sent;
319
- pendingAuthorizations = response.requires_auth || [];
320
- openConnectorAuthorizationWindows(pendingAuthorizations, popupWindow);
321
- connectorAuthPopupRef.current = null;
322
- return _context.abrupt("return", response);
323
- case 2:
324
- case "end":
325
- return _context.stop();
326
- }
327
- }, _callee);
328
- }));
329
- return function (_x, _x2, _x3) {
330
- return _ref2.apply(this, arguments);
331
- };
332
- }(), []);
333
274
  var validateAgentValuesIsSame = function validateAgentValuesIsSame() {
334
- var _firstValueAgent$curr4, _modalValues$general$, _firstValueAgent$curr5, _modalValues$knowledg, _firstValueAgent$curr6, _modalValues$knowledg2, _firstValueAgent$curr7, _actionsToFiles$curre, _actionsToFiles$curre2;
335
- if (!((_firstValueAgent$curr4 = firstValueAgent.current) !== null && _firstValueAgent$curr4 !== void 0 && _firstValueAgent$curr4.general) || !(modalValues !== null && modalValues !== void 0 && modalValues.general)) return false;
336
- return modalValues.general.name === firstValueAgent.current.general.name && modalValues.general.emoji === firstValueAgent.current.general.emoji && modalValues.general.introduction === firstValueAgent.current.general.introduction && modalValues.general.inputPlaceholder === firstValueAgent.current.general.inputPlaceholder && ((_modalValues$general$ = modalValues.general.aiModel) === null || _modalValues$general$ === void 0 ? void 0 : _modalValues$general$.id) === ((_firstValueAgent$curr5 = firstValueAgent.current.general.aiModel) === null || _firstValueAgent$curr5 === void 0 ? void 0 : _firstValueAgent$curr5.id) && modalValues.general.userPrompt === firstValueAgent.current.general.userPrompt && !hasActionsChanged() && !hasConnectorChanges() && (((_modalValues$knowledg = modalValues.knowledge) === null || _modalValues$knowledg === void 0 ? void 0 : _modalValues$knowledg.length) === ((_firstValueAgent$curr6 = firstValueAgent.current) === null || _firstValueAgent$curr6 === void 0 || (_firstValueAgent$curr6 = _firstValueAgent$curr6.knowledge) === null || _firstValueAgent$curr6 === void 0 ? void 0 : _firstValueAgent$curr6.length) || !((_modalValues$knowledg2 = modalValues.knowledge) !== null && _modalValues$knowledg2 !== void 0 && _modalValues$knowledg2.length) && !((_firstValueAgent$curr7 = firstValueAgent.current) !== null && _firstValueAgent$curr7 !== void 0 && (_firstValueAgent$curr7 = _firstValueAgent$curr7.knowledge) !== null && _firstValueAgent$curr7 !== void 0 && _firstValueAgent$curr7.length)) && !((_actionsToFiles$curre = actionsToFiles.current.toUpdate) !== null && _actionsToFiles$curre !== void 0 && _actionsToFiles$curre.length) && !((_actionsToFiles$curre2 = actionsToFiles.current.toDelete) !== null && _actionsToFiles$curre2 !== void 0 && _actionsToFiles$curre2.length) && !hasAccessibilityChanged();
275
+ var _firstValueAgent$curr2, _modalValues$general$, _firstValueAgent$curr3, _modalValues$knowledg, _firstValueAgent$curr4, _modalValues$knowledg2, _firstValueAgent$curr5, _actionsToFiles$curre, _actionsToFiles$curre2;
276
+ if (!((_firstValueAgent$curr2 = firstValueAgent.current) !== null && _firstValueAgent$curr2 !== void 0 && _firstValueAgent$curr2.general) || !(modalValues !== null && modalValues !== void 0 && modalValues.general)) return false;
277
+ return modalValues.general.name === firstValueAgent.current.general.name && modalValues.general.emoji === firstValueAgent.current.general.emoji && modalValues.general.introduction === firstValueAgent.current.general.introduction && modalValues.general.inputPlaceholder === firstValueAgent.current.general.inputPlaceholder && ((_modalValues$general$ = modalValues.general.aiModel) === null || _modalValues$general$ === void 0 ? void 0 : _modalValues$general$.id) === ((_firstValueAgent$curr3 = firstValueAgent.current.general.aiModel) === null || _firstValueAgent$curr3 === void 0 ? void 0 : _firstValueAgent$curr3.id) && modalValues.general.userPrompt === firstValueAgent.current.general.userPrompt && (((_modalValues$knowledg = modalValues.knowledge) === null || _modalValues$knowledg === void 0 ? void 0 : _modalValues$knowledg.length) === ((_firstValueAgent$curr4 = firstValueAgent.current) === null || _firstValueAgent$curr4 === void 0 || (_firstValueAgent$curr4 = _firstValueAgent$curr4.knowledge) === null || _firstValueAgent$curr4 === void 0 ? void 0 : _firstValueAgent$curr4.length) || !((_modalValues$knowledg2 = modalValues.knowledge) !== null && _modalValues$knowledg2 !== void 0 && _modalValues$knowledg2.length) && !((_firstValueAgent$curr5 = firstValueAgent.current) !== null && _firstValueAgent$curr5 !== void 0 && (_firstValueAgent$curr5 = _firstValueAgent$curr5.knowledge) !== null && _firstValueAgent$curr5 !== void 0 && _firstValueAgent$curr5.length)) && !((_actionsToFiles$curre = actionsToFiles.current.toUpdate) !== null && _actionsToFiles$curre !== void 0 && _actionsToFiles$curre.length) && !((_actionsToFiles$curre2 = actionsToFiles.current.toDelete) !== null && _actionsToFiles$curre2 !== void 0 && _actionsToFiles$curre2.length) && !hasAccessibilityChanged();
337
278
  };
338
279
  var hasAnyValueForCreation = function hasAnyValueForCreation() {
339
- var _modalValues$general$2, _agentModels$, _modalValues$general$3, _modalValues$actions3, _modalValues$actions4;
280
+ var _modalValues$general$2, _agentModels$, _modalValues$general$3;
340
281
  if (modalValues.isEditing) return false;
341
282
  var isDefaultAiModel = !!agentModels.length && ((_modalValues$general$2 = modalValues.general.aiModel) === null || _modalValues$general$2 === void 0 ? void 0 : _modalValues$general$2.id) === ((_agentModels$ = agentModels[0]) === null || _agentModels$ === void 0 ? void 0 : _agentModels$.id);
342
283
  var defaultInputPlaceholder = t('generalSection.inputPlaceholder');
@@ -351,9 +292,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
351
292
  var hasKnowledge = !!modalValues.knowledge.length;
352
293
  var hasCustomAiModel = modalValues.general.aiModel && !isDefaultAiModel;
353
294
  var hasAccessibility = modalValues.accessibility.accessType !== 'company';
354
- var hasActions = !!((_modalValues$actions3 = modalValues.actions) !== null && _modalValues$actions3 !== void 0 && (_modalValues$actions3 = _modalValues$actions3.selectedToolGroups) !== null && _modalValues$actions3 !== void 0 && _modalValues$actions3.length);
355
- var hasConnectors = !!((_modalValues$actions4 = modalValues.actions) !== null && _modalValues$actions4 !== void 0 && (_modalValues$actions4 = _modalValues$actions4.selectedConnectors) !== null && _modalValues$actions4 !== void 0 && _modalValues$actions4.length);
356
- return hasName || hasEmoji || hasIntroduction || hasInputPlaceholder || hasUserPrompt || hasKnowledge || hasCustomAiModel || hasAccessibility || hasActions || hasConnectors;
295
+ return hasName || hasEmoji || hasIntroduction || hasInputPlaceholder || hasUserPrompt || hasKnowledge || hasCustomAiModel || hasAccessibility;
357
296
  };
358
297
  var hasChangesForEditing = function hasChangesForEditing() {
359
298
  if (!modalValues.isEditing) return false;
@@ -378,8 +317,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
378
317
  }, agent.is_favorite);
379
318
  }, [toggleFavorite, updateAgentFavorite]);
380
319
  var handleClose = function handleClose() {
381
- var skipConfirmation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
382
- if (!skipConfirmation && hasPendingChanges() && !successCreate && !successUpdate && !successDelete) {
320
+ if (hasPendingChanges() && !successCreate && !successUpdate && !successDelete) {
383
321
  var confirmMessage = modalValues.isEditing ? t('confirmCloseEditAgent') : t('confirmCloseCreateAgent');
384
322
  if (!window.confirm(confirmMessage)) {
385
323
  return;
@@ -410,9 +348,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
410
348
  setSection('general');
411
349
  setIsOpen(false);
412
350
  agentCreatedRef.current = null;
413
- connectorAuthPopupRef.current = null;
414
351
  pendingInitialSectionRef.current = null;
415
- pendingTriggerRef.current = null;
416
352
  prefetchedAgentByIdRef.current = null;
417
353
  };
418
354
  var handleBackdropClick = function handleBackdropClick(event) {
@@ -426,24 +362,23 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
426
362
  });
427
363
  setSection(newSection);
428
364
  };
429
- var handleSetAgentValuesByKeys = function handleSetAgentValuesByKeys(_ref3) {
430
- var key = _ref3.key,
431
- value = _ref3.value,
432
- deleteKnowledge = _ref3.deleteKnowledge;
365
+ var handleSetAgentValuesByKeys = function handleSetAgentValuesByKeys(_ref2) {
366
+ var key = _ref2.key,
367
+ value = _ref2.value,
368
+ deleteKnowledge = _ref2.deleteKnowledge;
433
369
  if (key === 'knowledge') {
434
- var nextKnowledge = value || [];
435
370
  if (!deleteKnowledge) {
436
371
  var _actionsToFiles$curre3;
437
- (_actionsToFiles$curre3 = actionsToFiles.current.toUpload).push.apply(_actionsToFiles$curre3, _toConsumableArray(nextKnowledge));
372
+ (_actionsToFiles$curre3 = actionsToFiles.current.toUpload).push.apply(_actionsToFiles$curre3, _toConsumableArray(value || []));
438
373
  } else {
439
- var filesPrevIds = nextKnowledge.length ? new Set(nextKnowledge.map(function (file) {
374
+ var filesPrevIds = value.length ? new Set(value.map(function (file) {
440
375
  return file.id;
441
376
  })) : new Set();
442
377
  var newFiles = modalValues.knowledge.filter(function (file) {
443
378
  return !filesPrevIds.has(file.id) && file.status !== 'started';
444
379
  });
445
380
  if (!newFiles.length && actionsToFiles.current.toUpload.length) {
446
- var valueIds = new Set(nextKnowledge.map(function (file) {
381
+ var valueIds = new Set(value.map(function (file) {
447
382
  return file.id;
448
383
  }));
449
384
  actionsToFiles.current.toUpload = actionsToFiles.current.toUpload.filter(function (file) {
@@ -459,107 +394,60 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
459
394
  knowledge: knowledgeFiles
460
395
  } : key === 'accessibility' ? {
461
396
  accessibility: value
462
- } : key === 'actions' ? {
463
- actions: value
464
397
  } : {
465
398
  general: _objectSpread(_objectSpread({}, prev.general), {}, _defineProperty({}, key, value))
466
399
  });
467
400
  });
468
401
  };
469
402
  var _handleConfirmAction = /*#__PURE__*/function () {
470
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(chat, action) {
471
- var _modalValues$actions5;
472
- var connectorChanges, _modalValues$actions6, _firstValueAgent$curr8, _modalValues$actions7, _t;
473
- return _regeneratorRuntime.wrap(function (_context2) {
474
- while (1) switch (_context2.prev = _context2.next) {
403
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat, action) {
404
+ return _regeneratorRuntime.wrap(function (_context) {
405
+ while (1) switch (_context.prev = _context.next) {
475
406
  case 0:
476
407
  if (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
477
- _context2.next = 1;
408
+ _context.next = 1;
478
409
  break;
479
410
  }
480
- return _context2.abrupt("return");
411
+ return _context.abrupt("return");
481
412
  case 1:
482
413
  if (!(action === 'delete')) {
483
- _context2.next = 2;
414
+ _context.next = 2;
484
415
  break;
485
416
  }
486
417
  eventAmplitude(EVENTS["delete"]);
487
418
  handleDeleteAgent(chat.id);
488
- return _context2.abrupt("return");
419
+ return _context.abrupt("return");
489
420
  case 2:
490
421
  eventAmplitude(EVENTS.confirmAction, {
491
422
  option: modalValues.isEditing ? 'edite' : 'create'
492
423
  });
493
- if ((_modalValues$actions5 = modalValues.actions) !== null && _modalValues$actions5 !== void 0 && (_modalValues$actions5 = _modalValues$actions5.selectedConnectors) !== null && _modalValues$actions5 !== void 0 && _modalValues$actions5.length) {
494
- connectorAuthPopupRef.current = window.open('', '_blank', 'popup=yes,width=560,height=760');
495
- }
496
424
  // Al reintentar guardar, liberar el freno del timeout previo para que los
497
425
  // useEffect de post-guardado vuelvan a poder disparar snackbars y cerrar.
498
426
  processFilesTimedOutRef.current = false;
499
427
  if (!modalValues.isEditing) {
500
- _context2.next = 11;
501
- break;
502
- }
503
- connectorChanges = hasConnectorChanges();
504
- if (!(modalValues.general.id && connectorChanges)) {
505
- _context2.next = 7;
428
+ _context.next = 4;
506
429
  break;
507
430
  }
508
- _context2.prev = 3;
509
- _context2.next = 4;
510
- return persistAgentConnectors(modalValues.general.id.toString(), ((_modalValues$actions6 = modalValues.actions) === null || _modalValues$actions6 === void 0 ? void 0 : _modalValues$actions6.selectedConnectors) || [], connectorAuthPopupRef.current);
511
- case 4:
512
- firstValueAgent.current = _objectSpread(_objectSpread({}, firstValueAgent.current), {}, {
513
- actions: _objectSpread(_objectSpread({}, (_firstValueAgent$curr8 = firstValueAgent.current) === null || _firstValueAgent$curr8 === void 0 ? void 0 : _firstValueAgent$curr8.actions), {}, {
514
- selectedConnectors: _toConsumableArray(((_modalValues$actions7 = modalValues.actions) === null || _modalValues$actions7 === void 0 ? void 0 : _modalValues$actions7.selectedConnectors) || [])
515
- })
516
- });
517
- _context2.next = 6;
518
- break;
519
- case 5:
520
- _context2.prev = 5;
521
- _t = _context2["catch"](3);
522
- handleSnackbarError(t('errorAgentCreated'));
523
- if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
524
- connectorAuthPopupRef.current.close();
525
- }
526
- connectorAuthPopupRef.current = null;
527
- return _context2.abrupt("return");
528
- case 6:
529
- _context2.next = 8;
530
- break;
531
- case 7:
532
- if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
533
- connectorAuthPopupRef.current.close();
534
- connectorAuthPopupRef.current = null;
535
- }
536
- case 8:
537
431
  if (validateAgentValuesIsSame()) {
538
- _context2.next = 10;
432
+ _context.next = 3;
539
433
  break;
540
434
  }
541
- _context2.next = 9;
435
+ _context.next = 3;
542
436
  return handleUpdateAgent(modalValues);
543
- case 9:
544
- return _context2.abrupt("return");
545
- case 10:
546
- if (connectorChanges) {
547
- handleSnackbarSuccess(t('confirmAgentUpdated'));
548
- handleClose();
549
- }
550
- _context2.next = 12;
437
+ case 3:
438
+ _context.next = 5;
551
439
  break;
552
- case 11:
553
- _context2.next = 12;
440
+ case 4:
441
+ _context.next = 5;
554
442
  return handleCreateAgent(modalValues);
555
- case 12:
443
+ case 5:
556
444
  case "end":
557
- return _context2.stop();
445
+ return _context.stop();
558
446
  }
559
- }, _callee2, null, [[3, 5]]);
447
+ }, _callee);
560
448
  }));
561
- return function handleConfirmAction(_x4, _x5) {
562
- return _ref4.apply(this, arguments);
449
+ return function handleConfirmAction(_x, _x2) {
450
+ return _ref3.apply(this, arguments);
563
451
  };
564
452
  }();
565
453
  useEffect(function () {
@@ -567,7 +455,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
567
455
  var _agentValues$values, _agentValues$values3;
568
456
  var agentValues = event.detail.agentValues;
569
457
  var initialSection = agentValues === null || agentValues === void 0 ? void 0 : agentValues.initialSection;
570
- pendingInitialSectionRef.current = initialSection && ['general', 'knowledge', 'accessibility', 'actions'].includes(initialSection) ? initialSection : null;
458
+ pendingInitialSectionRef.current = initialSection && ['general', 'knowledge', 'accessibility'].includes(initialSection) ? initialSection : null;
571
459
  getAllAgentModels();
572
460
  setIsOpen(true);
573
461
  setIsLoading(true);
@@ -601,7 +489,6 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
601
489
  var nextValues = _objectSpread(_objectSpread(_objectSpread({}, initialValues), agentValues.values), {}, {
602
490
  general: _objectSpread(_objectSpread({}, initialValues.general), agentValues.values.general || {}),
603
491
  accessibility: _objectSpread(_objectSpread({}, initialValues.accessibility), agentValues.values.accessibility || {}),
604
- actions: _objectSpread(_objectSpread({}, initialValues.actions), agentValues.values.actions || {}),
605
492
  knowledge: agentValues.values.knowledge || []
606
493
  });
607
494
  firstValueAgent.current = nextValues;
@@ -667,29 +554,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
667
554
  useEffect(function () {
668
555
  // Evitar ejecución múltiple del efecto
669
556
  if (successCreate && !isLoadingCreate && agentCreatedRef.current !== successCreate.id) {
670
- var _modalValues$actions8;
671
557
  agentCreatedRef.current = successCreate.id;
672
- if ((_modalValues$actions8 = modalValues.actions) !== null && _modalValues$actions8 !== void 0 && (_modalValues$actions8 = _modalValues$actions8.selectedConnectors) !== null && _modalValues$actions8 !== void 0 && _modalValues$actions8.length) {
673
- persistAgentConnectors(successCreate.id.toString(), modalValues.actions.selectedConnectors, connectorAuthPopupRef.current)["catch"](function (error) {
674
- console.error('Error saving agent connectors after create:', error);
675
- handleSnackbarError(t('errorAgentCreated'));
676
- if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
677
- connectorAuthPopupRef.current.close();
678
- }
679
- connectorAuthPopupRef.current = null;
680
- });
681
- } else if (connectorAuthPopupRef.current && !connectorAuthPopupRef.current.closed) {
682
- connectorAuthPopupRef.current.close();
683
- connectorAuthPopupRef.current = null;
684
- }
685
- if (pendingTriggerRef.current) {
686
- createSchedule(_objectSpread(_objectSpread({}, pendingTriggerRef.current), {}, {
687
- agent_external_id: successCreate.id.toString()
688
- }))["catch"](function (err) {
689
- return console.error('Error creating pending trigger:', err);
690
- });
691
- pendingTriggerRef.current = null;
692
- }
693
558
  if (actionsToFiles.current.toDelete.length && actionsToFiles.current.toUpload.length) {
694
559
  if (modalValues.accessibility.accessType !== 'company') {
695
560
  accessUpdateContext.current = {
@@ -1047,8 +912,8 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1047
912
  resetSuccessUpdateAccess();
1048
913
  handleClose();
1049
914
  }, [isShowProcessFiles, modalValues.isEditing, successUpdate, successCreate, updateAgent, currentSelectedAgent === null || currentSelectedAgent === void 0 ? void 0 : currentSelectedAgent.id, selectAgent, handleSnackbarSuccess, t, resetSuccessUpdate, resetSuccessCreate, handleResetSuccessSave, handleResetSuccessDelete, resetSuccessUpdateAccess, handleClose]);
1050
- var webSocketFunction = function webSocketFunction(_ref5) {
1051
- var modelData = _ref5.model_data;
915
+ var webSocketFunction = function webSocketFunction(_ref4) {
916
+ var modelData = _ref4.model_data;
1052
917
  var fileStatus = modelData;
1053
918
  if (fileStatus.status === 'done' || fileStatus.status === 'failed') {
1054
919
  setModalValues(function (prev) {
@@ -1280,61 +1145,16 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1280
1145
  }, 3000);
1281
1146
  return false;
1282
1147
  }
1283
- ;
1284
- _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1285
- var selectedConnectors, connectorStates, connectors, _t2;
1286
- return _regeneratorRuntime.wrap(function (_context3) {
1287
- while (1) switch (_context3.prev = _context3.next) {
1288
- case 0:
1289
- selectedConnectors = [];
1290
- connectorStates = [];
1291
- _context3.prev = 1;
1292
- _context3.next = 2;
1293
- return getAgentConnectors(source.id.toString());
1294
- case 2:
1295
- connectors = _context3.sent;
1296
- selectedConnectors = connectors.filter(function (connector) {
1297
- return connector.enabled_for_agent;
1298
- }).map(function (connector) {
1299
- return connector.slug;
1300
- });
1301
- connectorStates = connectors.map(function (connector) {
1302
- return {
1303
- slug: connector.slug,
1304
- user_authorized: connector.user_authorized,
1305
- requires_auth: connector.requires_auth,
1306
- enabled_for_agent: connector.enabled_for_agent
1307
- };
1308
- });
1309
- _context3.next = 4;
1310
- break;
1311
- case 3:
1312
- _context3.prev = 3;
1313
- _t2 = _context3["catch"](1);
1314
- console.error('Error fetching agent connectors:', _t2);
1315
- case 4:
1316
- setModalValues(function (prev) {
1317
- var agentValuesToSet = buildEditingModalValuesFromAgentDetail(source, agentModels, prev);
1318
- var nextValues = _objectSpread(_objectSpread({}, agentValuesToSet), {}, {
1319
- actions: _objectSpread(_objectSpread({}, agentValuesToSet.actions), {}, {
1320
- selectedConnectors: selectedConnectors,
1321
- connectorStates: connectorStates
1322
- })
1323
- });
1324
- firstValueAgent.current = nextValues;
1325
- return nextValues;
1326
- });
1327
- setIsLoading(false);
1328
- if (pendingInitialSectionRef.current) {
1329
- setSection(pendingInitialSectionRef.current);
1330
- pendingInitialSectionRef.current = null;
1331
- }
1332
- case 5:
1333
- case "end":
1334
- return _context3.stop();
1335
- }
1336
- }, _callee3, null, [[1, 3]]);
1337
- }))();
1148
+ setModalValues(function (prev) {
1149
+ var agentValuesToSet = buildEditingModalValuesFromAgentDetail(source, agentModels, prev);
1150
+ firstValueAgent.current = agentValuesToSet;
1151
+ return agentValuesToSet;
1152
+ });
1153
+ setIsLoading(false);
1154
+ if (pendingInitialSectionRef.current) {
1155
+ setSection(pendingInitialSectionRef.current);
1156
+ pendingInitialSectionRef.current = null;
1157
+ }
1338
1158
  return true;
1339
1159
  };
1340
1160
  var prefetched = prefetchedAgentByIdRef.current;
@@ -1356,9 +1176,7 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1356
1176
  });
1357
1177
  });
1358
1178
  }
1359
- // No incluir `isLoading` en deps: al terminar getAgentConnectors se hace setIsLoading(false) y
1360
- // se re-ejecutaría el efecto con el mismo agentById, duplicando la query de connectors.
1361
- }, [agentById, isOpen, agentLoading, agentModels === null || agentModels === void 0 ? void 0 : agentModels.length, modalValues.isEditing, t]);
1179
+ }, [agentById, isOpen, isLoading, agentLoading, agentModels === null || agentModels === void 0 ? void 0 : agentModels.length, modalValues.isEditing, t]);
1362
1180
  useEffect(function () {
1363
1181
  if (errorGetAgentById) {
1364
1182
  if (errorGetAgentById === "Access denied: You don't have permission to access this agent") {
@@ -1383,7 +1201,6 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1383
1201
  return client.is_active === false || client.is_deleted === true;
1384
1202
  });
1385
1203
  }, [modalValues === null || modalValues === void 0 || (_modalValues$accessib2 = modalValues.accessibility) === null || _modalValues$accessib2 === void 0 ? void 0 : _modalValues$accessib2.clients]);
1386
- var isSaveButtonDisabled = !validateFieldValues(modalValues) || validateAgentValuesIsSame() || isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess || shouldDisableSaveForClients || hasFileErrors;
1387
1204
  var handleToggleFavorite = function handleToggleFavorite() {
1388
1205
  var _modalValues$general;
1389
1206
  if (modalValues !== null && modalValues !== void 0 && (_modalValues$general = modalValues.general) !== null && _modalValues$general !== void 0 && _modalValues$general.id) {
@@ -1495,20 +1312,6 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1495
1312
  isActive: section === 'knowledge',
1496
1313
  children: t('knowledgeSection.title')
1497
1314
  })]
1498
- }), /*#__PURE__*/_jsxs(SCAAMSidebarItem, {
1499
- isActive: section === 'actions',
1500
- onClick: function onClick() {
1501
- return handleSectionChange('actions');
1502
- },
1503
- id: "abm-agent-modal-actions",
1504
- children: [/*#__PURE__*/_jsx(Category, {
1505
- color: "".concat(section === 'actions' ? 'rgba(63, 63, 63, 1)' : 'rgba(166, 166, 166, 1)'),
1506
- width: 18,
1507
- height: 18
1508
- }), /*#__PURE__*/_jsx(SCAAMSidebarItemTitle, {
1509
- isActive: section === 'actions',
1510
- children: t('actionsSection.title')
1511
- })]
1512
1315
  }), /*#__PURE__*/_jsxs(SCAAMSidebarItem, {
1513
1316
  isActive: section === 'accessibility',
1514
1317
  onClick: function onClick() {
@@ -1569,14 +1372,14 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1569
1372
  gap: '24px'
1570
1373
  },
1571
1374
  children: /*#__PURE__*/_jsx(SCAAMSaveButton, {
1572
- isDisabled: isSaveButtonDisabled,
1375
+ isDisabled: !validateFieldValues(modalValues) || validateAgentValuesIsSame() || isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess || shouldDisableSaveForClients || hasFileErrors,
1573
1376
  children: /*#__PURE__*/_jsx(CUButton, {
1574
1377
  variant: "contained",
1575
1378
  size: "medium",
1576
1379
  onClick: function onClick() {
1577
1380
  _handleConfirmAction(null, 'create');
1578
1381
  },
1579
- disabled: isSaveButtonDisabled,
1382
+ disabled: !validateFieldValues(modalValues) || validateAgentValuesIsSame() || isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess || shouldDisableSaveForClients || hasFileErrors,
1580
1383
  children: modalValues.isEditing ? t('saveChanges') : t('createAgentLabelButton')
1581
1384
  })
1582
1385
  })
@@ -1601,4 +1404,4 @@ export var AbmAgentModal = function AbmAgentModal(_ref) {
1601
1404
  })]
1602
1405
  }), selector);
1603
1406
  };
1604
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtQWN0aW9uc1NlY3Rpb25WMiIsIkFibUdlbmVyYWxTZWN0aW9uIiwiQWJtS25vd2xlZGdlU2VjdGlvbiIsIlNDQUFNQ29udGVudCIsIlNDQUFNRm9vdGVyIiwiU0NBQU1IZWFkZXIiLCJTQ0FBTUhlYWRlclRpdGxlIiwiU0NBQU1IZWFkZXJMZWZ0IiwiU0NBQU1IZWFkZXJGYXZvcml0ZSIsIlNDQUFNSGVhZGVyQ2xvc2VCdXR0b24iLCJTQ0FBTVNpZGViYXIiLCJTQ0FBTVdyYXBwZXIiLCJTQ0FBTVNpZGViYXJJdGVtIiwiU0NBQU1TaWRlYmFySXRlbVRpdGxlIiwiU0NBQU1EZWxldGVCdXR0b24iLCJTQ0FBTVNhdmVCdXR0b24iLCJTQ0FBTVdyYXBwZXJTcGlubmVyIiwiU0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQiLCJTQ0FBTVNpZGViYXJJdGVtRXJyb3IiLCJ1c2VDcmVhdGVBZ2VudCIsInVzZURlbGV0ZUFnZW50IiwidXNlU25hY2tCYXJNYW5hZ2VyIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVwZGF0ZUFnZW50IiwidXNlS25vd2xlZGdlT3BlcmF0aW9ucyIsIkFibUxvYWRlckZpbGVzIiwiV3JhcHBlckNlbnRlckljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJ1c2VBY2Nlc3NDbGllbnQiLCJ1c2VUb2dnbGVGYXZvcml0ZSIsImNyZWF0ZVNjaGVkdWxlIiwiZ2V0QWdlbnRDb25uZWN0b3JzIiwib3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzIiwic2F2ZUFnZW50Q29ubmVjdG9ycyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImluaXRpYWxWYWx1ZXMiLCJPYmplY3QiLCJmcmVlemUiLCJpc0VkaXRpbmciLCJrbm93bGVkZ2UiLCJnZW5lcmFsIiwibmFtZSIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRQbGFjZWhvbGRlciIsImlzQWN0aXZlIiwiYWlNb2RlbCIsImlkIiwidXNlclByb21wdCIsImtub3dsZWRnZUJhc2VzIiwiaXNfZmF2b3JpdGUiLCJhY2Nlc3NpYmlsaXR5IiwiYWNjZXNzVHlwZSIsImNsaWVudHMiLCJhY3Rpb25zIiwic2VsZWN0ZWRUb29sR3JvdXBzIiwic2VsZWN0ZWRDb25uZWN0b3JzIiwiY29ubmVjdG9yU3RhdGVzIiwiU2VjdGlvbkJ5S2V5IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwidmFsaWRhdGVGaWVsZFZhbHVlcyIsInZhbHVlVG9WYWxpZGF0ZSIsImJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsIiwiYWdlbnRCeUlkIiwiYWdlbnRNb2RlbHMiLCJwcmV2IiwiX2FnZW50QnlJZCRrbm93bGVkZ2VCIiwiX2FnZW50QnlJZCRjbGllbnRzIiwiYWdlbnRNb2RlbCIsImZpbmQiLCJtb2RlbCIsIm1vZGVsQWlJZCIsImNyZWF0ZWRfYnkiLCJjcmVhdGVkQnkiLCJtYXAiLCJrIiwiZmlsZSIsIkZpbGUiLCJmaWxlbmFtZSIsInRvU3RyaW5nIiwic2l6ZSIsImZpbGVfc2l6ZV9ieXRlcyIsInR5cGUiLCJvcmlnaW5hbF9maWxlX3R5cGUiLCJzdGF0dXMiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwiYWNjZXNzIiwiY2xpZW50IiwiX2NsaWVudCRpZCIsIl9jbGllbnQkaXNfYWN0aXZlIiwiX2NsaWVudCRpc19kZWxldGVkIiwiaXNfYWN0aXZlIiwiaXNfZGVsZXRlZCIsInRvb2xHcm91cFNsdWdzIiwiQWJtQWdlbnRNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl9tb2RhbFZhbHVlcyRhY2Nlc3NpYjIiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDMiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDQiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDUiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDYiLCJhZGRBZ2VudCIsInVwZGF0ZUFnZW50IiwicmVtb3ZlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInVzZXIiLCJldmVudEFtcGxpdHVkZSIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImN1cnJlbnRTZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsIl91c2VUb2dnbGVGYXZvcml0ZSIsInRvZ2dsZUZhdm9yaXRlIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNTdWJzY3JpYmVkIiwic2V0SXNTdWJzY3JpYmVkIiwibW9kYWxSZWYiLCJjb25uZWN0b3JBdXRoUG9wdXBSZWYiLCJoYXNQZW5kaW5nRmlsZXNSZWYiLCJhY3Rpb25zVG9GaWxlcyIsInRvRGVsZXRlIiwidG9VcGxvYWQiLCJhY2Nlc3NVcGRhdGVDb250ZXh0IiwiaXNGcm9tQ3JlYXRpb24iLCJpc0Zyb21FZGl0aW5nIiwiaGFzQWN0aW9uRmlsZXMiLCJvcGVyYXRpb25UeXBlIiwiaGFzQmVlbkNhbGxlZCIsImFjY2Vzc0hhbmRsZWRSZWYiLCJhZ2VudENyZWF0ZWRSZWYiLCJwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYiLCJwZW5kaW5nVHJpZ2dlclJlZiIsInByZWZldGNoZWRBZ2VudEJ5SWRSZWYiLCJmaWxlc0ZpbmlzaGVkUmVmIiwicHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImZpbGVzUHJvY2Vzc2VkIiwic2V0RmlsZXNQcm9jZXNzZWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd01vZGFsRGVsZXRlIiwic2V0U2hvd01vZGFsRGVsZXRlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZWN0aW9uIiwic2V0U2VjdGlvbiIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJtb2RhbFZhbHVlcyIsInNldE1vZGFsVmFsdWVzIiwiX3VzZUdldEFnZW50QnlJZCIsImFnZW50TG9hZGluZyIsImxvYWRpbmciLCJoYW5kbGVHZXRBZ2VudEJ5SWQiLCJoYW5kbGVDbGVhbkFnZW50IiwiZXJyb3JHZXRBZ2VudEJ5SWQiLCJlcnJvciIsIl91c2VBZ2VudE1vZGVsIiwiZ2V0QWxsQWdlbnRNb2RlbHMiLCJmaXJzdFZhbHVlQWdlbnQiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNTaG93UHJvY2Vzc0ZpbGVzIiwic2V0SXNTaG93UHJvY2Vzc0ZpbGVzIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImhhc0ZpbGVFcnJvcnMiLCJzZXRIYXNGaWxlRXJyb3JzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJfdXNlRGVsZXRlQWdlbnQiLCJoYW5kbGVEZWxldGVBZ2VudCIsInN1Y2Nlc3NEZWxldGUiLCJzdWNjZXNzIiwicmVzZXRTdWNjZXNzIiwiX3VzZVVwZGF0ZUFnZW50IiwiaGFuZGxlVXBkYXRlQWdlbnQiLCJzdWNjZXNzVXBkYXRlIiwicmVzZXRTdWNjZXNzVXBkYXRlIiwiX3VzZUNyZWF0ZUFnZW50IiwiaGFuZGxlQ3JlYXRlQWdlbnQiLCJpc0xvYWRpbmdDcmVhdGUiLCJzdWNjZXNzQ3JlYXRlIiwicmVzZXRTdWNjZXNzQ3JlYXRlIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlS25vd2xlZGdlT3BlcmF0aW8iLCJoYW5kbGVDcmVhdGVLbm93bGVkZ2VzIiwiaGFuZGxlRGVsZXRlS25vd2xlZGdlcyIsImhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMiLCJpc0xvYWRpbmdLbm93bGVkZ2UiLCJlcnJvcktub3dsZWRnZSIsInN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUiLCJoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlIiwiaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlIiwiX3VzZUFjY2Vzc0NsaWVudCIsImhhbmRsZUFjY2Vzc0NsaWVudCIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJpc0xvYWRpbmdVcGRhdGVBY2Nlc3MiLCJyZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJoYW5kbGVSZXNldFN1Y2Nlc3MiLCJhcmVDbGllbnRzQXJyYXlzRXF1YWwiLCJjbGllbnRzMSIsImNsaWVudHMyIiwibGVuZ3RoIiwiY2xpZW50czFJZHMiLCJjIiwiY2xpZW50SWQiLCJzb3J0IiwiY2xpZW50czJJZHMiLCJldmVyeSIsImluZGV4IiwiaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIiLCJjdXJyZW50IiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsImhhc0FjdGlvbnNDaGFuZ2VkIiwiX21vZGFsVmFsdWVzJGFjdGlvbnMiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIyIiwiY3VycmVudEFjdGlvbnMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJvcmlnaW5hbEFjdGlvbnMiLCJzb21lIiwic2x1ZyIsImhhc0Nvbm5lY3RvckNoYW5nZXMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczIiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIzIiwiY3VycmVudENvbm5lY3RvcnMiLCJvcmlnaW5hbENvbm5lY3RvcnMiLCJwZXJzaXN0QWdlbnRDb25uZWN0b3JzIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImFnZW50SWQiLCJjb25uZWN0b3JTbHVncyIsInBvcHVwV2luZG93IiwicmVzcG9uc2UiLCJwZW5kaW5nQXV0aG9yaXphdGlvbnMiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0Iiwic2VudCIsInJlcXVpcmVzX2F1dGgiLCJhYnJ1cHQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI0IiwiX21vZGFsVmFsdWVzJGdlbmVyYWwkIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNSIsIl9tb2RhbFZhbHVlcyRrbm93bGVkZyIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjYiLCJfbW9kYWxWYWx1ZXMka25vd2xlZGcyIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNyIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZSIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZTIiLCJ0b1VwZGF0ZSIsImhhc0FueVZhbHVlRm9yQ3JlYXRpb24iLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCQyIiwiX2FnZW50TW9kZWxzJCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsJDMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczQiLCJpc0RlZmF1bHRBaU1vZGVsIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImlzRGVmYXVsdFVzZXJQcm9tcHQiLCJoYXNOYW1lIiwidHJpbSIsImhhc0Vtb2ppIiwiaGFzSW50cm9kdWN0aW9uIiwiaGFzSW5wdXRQbGFjZWhvbGRlciIsImhhc1VzZXJQcm9tcHQiLCJoYXNLbm93bGVkZ2UiLCJoYXNDdXN0b21BaU1vZGVsIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0FjdGlvbnMiLCJoYXNDb25uZWN0b3JzIiwiaGFzQ2hhbmdlc0ZvckVkaXRpbmciLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwidXBkYXRlZEFnZW50IiwiaGFuZGxlQ2xvc2UiLCJza2lwQ29uZmlybWF0aW9uIiwiY29uZmlybU1lc3NhZ2UiLCJ3aW5kb3ciLCJjb25maXJtIiwiaGFuZGxlQmFja2Ryb3BDbGljayIsImV2ZW50IiwidGFyZ2V0IiwiY3VycmVudFRhcmdldCIsImhhbmRsZVNlY3Rpb25DaGFuZ2UiLCJuZXdTZWN0aW9uIiwidGFiU2VjdGlvbiIsIm9wdGlvbiIsImhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzIiwiX3JlZjMiLCJrZXkiLCJ2YWx1ZSIsImRlbGV0ZUtub3dsZWRnZSIsIm5leHRLbm93bGVkZ2UiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUzIiwicHVzaCIsImZpbGVzUHJldklkcyIsIlNldCIsIm5ld0ZpbGVzIiwiZmlsdGVyIiwiaGFzIiwidmFsdWVJZHMiLCJjb25jYXQiLCJrbm93bGVkZ2VGaWxlcyIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJfcmVmNCIsIl9jYWxsZWUyIiwiY2hhdCIsImFjdGlvbiIsIl9tb2RhbFZhbHVlcyRhY3Rpb25zNSIsImNvbm5lY3RvckNoYW5nZXMiLCJfbW9kYWxWYWx1ZXMkYWN0aW9uczYiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnI4IiwiX21vZGFsVmFsdWVzJGFjdGlvbnM3IiwiX3QiLCJfY29udGV4dDIiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiY29uZmlybUFjdGlvbiIsIm9wZW4iLCJjbG9zZWQiLCJjbG9zZSIsIl94NCIsIl94NSIsImhhbmRsZVNldEFnZW50VmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlcyIsIl9hZ2VudFZhbHVlcyR2YWx1ZXMzIiwiYWdlbnRWYWx1ZXMiLCJkZXRhaWwiLCJpbml0aWFsU2VjdGlvbiIsImluY2x1ZGVzIiwidmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlczIiLCJwcmVmZXRjaGVkQWdlbnRCeUlkIiwibmV4dFZhbHVlcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2RvY3VtZW50IiwiYm9keSIsIm9yaWdpbmFsT3ZlcmZsb3ciLCJzdHlsZSIsIm92ZXJmbG93IiwiaGFuZGxlQmVmb3JlVW5sb2FkIiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsIl9tb2RhbFZhbHVlcyRhY3Rpb25zOCIsImNvbnNvbGUiLCJhZ2VudF9leHRlcm5hbF9pZCIsImVyciIsInByb21pc2VzIiwiZmlsZXNUb0RlbGV0ZSIsImZpbGVzVG9DcmVhdGUiLCJhZ2VudFdpdGhGYXZvcml0ZSIsImFnZW50Rm9yVG9nZ2xlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJhbGwiLCJmaWxlcyIsImFpQ2hhdEZhdm9yaXRlIiwiZmlsZXNUb1VwbG9hZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImhhbmRsZVByb2Nlc3NGaWxlc1RpbWVvdXQiLCJ3ZWJTb2NrZXRGdW5jdGlvbiIsIl9yZWY1IiwibW9kZWxEYXRhIiwibW9kZWxfZGF0YSIsImZpbGVTdGF0dXMiLCJ1cGRhdGVkS25vd2xlZGdlIiwia25vd2xlZGdlX2Jhc2VfaWQiLCJoYXNQZW5kaW5nRmlsZXMiLCJoYXNFcnJvckZpbGVzIiwicHJldkNvdW50IiwiY29udGV4dCIsImFnZW50VG9BZGQiLCJfc3VjY2Vzc0NyZWF0ZSRpZCIsImNoYW5uZWwiLCIkX3NjIiwiXyRfc2MiLCJzdWJzY3JpYmVIYW5kbGVyIiwiXyRfc2MyIiwiXyRfc2MzIiwiXyRfc2MkY2hhbm5lbFR5cGUiLCJtb2RlbF9oYXNoIiwiYWN0aW9uVHlwZSIsIlNVQlNDUklCRSIsInVwZGF0ZUNvbm5lY3Rpb25Nb2RlbCIsImNoYW5uZWxUeXBlIiwiTU9ERUxfQ0hBTk5FTCIsImFwcGx5RWRpdGluZ0FnZW50Iiwic291cmNlIiwic2V0VGltZW91dCIsIl9jYWxsZWUzIiwiY29ubmVjdG9ycyIsIl90MiIsIl9jb250ZXh0MyIsImNvbm5lY3RvciIsImVuYWJsZWRfZm9yX2FnZW50IiwidXNlcl9hdXRob3JpemVkIiwiYWdlbnRWYWx1ZXNUb1NldCIsInByZWZldGNoZWQiLCJzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMiLCJfbW9kYWxWYWx1ZXMkYWNjZXNzaWIiLCJpc1NhdmVCdXR0b25EaXNhYmxlZCIsImhhbmRsZVRvZ2dsZUZhdm9yaXRlIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbDIiLCJjcmVhdGUiLCJlZGl0IiwiekluZGV4Iiwib25DbGljayIsImNoaWxkcmVuIiwicmVmIiwidGFiSW5kZXgiLCJjb2xvciIsImF0dGFjaG1lbnRzIiwibGFiZWwiLCJvblRpbWVvdXQiLCJ0aXRsZSIsIndpZHRoIiwiaGVpZ2h0IiwiZmlsbCIsInZhcmlhbnQiLCJjbGFzc05hbWUiLCJjYW5jZWxNb2RhbCIsImRpc2FibGVkIiwiaGFzU2Nyb2xsIiwiZXhpc3RpbmdLbm93bGVkZ2UiLCJuZXdLbm93bGVkZ2UiLCJvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlIiwib25SZW1vdmVOZXdLbm93bGVkZ2UiLCJvbkZpbGVFcnJvckNoYW5nZSIsImNoaWxkcmVuV2l0aEljb24iLCJkaXNwbGF5IiwiZ2FwIiwiaXNEaXNhYmxlZCIsIm9uQ2xvc2UiLCJoYW5kbGVycyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWFsZXJ0ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tY3ljbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5cbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DYXRlZ29yeSdcbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQWxlcnQnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuaW1wb3J0IHsgU3RhciB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1N0YXInXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgU3Bpbm5lckxvdHRpZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2Nvci1jb21tb25zL2xpYi9jb21wb25lbnRzL3NwaW5uZXItbG90dGllJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgQWJtQWNjZXNzaWJpbGl0eVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbi9BYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbidcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vLi4vYXRvbXMvQmFja2Ryb3AnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFjY2Vzc2liaWxpdHlJY29uLCBCcmFpbkljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IHVzZUFnZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBZ2VudE1vZGVsL3VzZUFnZW50TW9kZWwnXG5pbXBvcnQgeyBBZ2VudCwgQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRCeUlkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRCeUlkJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQWJtQWN0aW9uc1NlY3Rpb25WMiwgQWJtR2VuZXJhbFNlY3Rpb24sIEFibUtub3dsZWRnZVNlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvQWJtU2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQWdlbnRDb25uZWN0b3JTbmFwc2hvdCwgTW9kYWxWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudE1vZGFsJ1xuaW1wb3J0IHtcbiAgU0NBQU1Db250ZW50LFxuICBTQ0FBTUZvb3RlcixcbiAgU0NBQU1IZWFkZXIsXG4gIFNDQUFNSGVhZGVyVGl0bGUsXG4gIFNDQUFNSGVhZGVyTGVmdCxcbiAgU0NBQU1IZWFkZXJGYXZvcml0ZSxcbiAgU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbixcbiAgU0NBQU1TaWRlYmFyLFxuICBTQ0FBTVdyYXBwZXIsXG4gIFNDQUFNU2lkZWJhckl0ZW0sXG4gIFNDQUFNU2lkZWJhckl0ZW1UaXRsZSxcbiAgU0NBQU1EZWxldGVCdXR0b24sXG4gIFNDQUFNU2F2ZUJ1dHRvbixcbiAgU0NBQU1XcmFwcGVyU3Bpbm5lcixcbiAgU0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQsXG4gIFNDQUFNU2lkZWJhckl0ZW1FcnJvcixcbn0gZnJvbSAnLi9BYm1BZ2VudE1vZGFsLnN0eWxlcydcbmltcG9ydCB7IHVzZUNyZWF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VDcmVhdGVBZ2VudCdcbmltcG9ydCB7IHVzZURlbGV0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VEZWxldGVBZ2VudCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVwZGF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VVcGRhdGVBZ2VudCdcbmltcG9ydCB7IHVzZUtub3dsZWRnZU9wZXJhdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VLbm93bGVkZ2UnXG5pbXBvcnQgeyBBYm1Mb2FkZXJGaWxlcyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibUxvYWRlckZpbGVzJ1xuaW1wb3J0IHsgV3JhcHBlckNlbnRlckljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9XcmFwcGVyQ2VudGVySWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyB1c2VBY2Nlc3NDbGllbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBY2Nlc3NDbGllbnQvdXNlQWNjZXNzQ2xpZW50J1xuaW1wb3J0IHsgdXNlVG9nZ2xlRmF2b3JpdGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcydcbmltcG9ydCB7IGNyZWF0ZVNjaGVkdWxlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9TY2hlZHVsZXMnXG5pbXBvcnQge1xuICBnZXRBZ2VudENvbm5lY3RvcnMsXG4gIG9wZW5Db25uZWN0b3JBdXRob3JpemF0aW9uV2luZG93cyxcbiAgc2F2ZUFnZW50Q29ubmVjdG9ycyxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvY29ubmVjdG9ycydcbmltcG9ydCB0eXBlIHsgUGVuZGluZ1RyaWdnZXJQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0FibVNlY3Rpb24vQWJtVHJpZ2dlcnNTZWN0aW9uL0FibVRyaWdnZXJzU2VjdGlvbi5pbnRlcmZhY2UnXG5cbmNvbnN0IGluaXRpYWxWYWx1ZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAga25vd2xlZGdlOiBbXSxcbiAgZ2VuZXJhbDoge1xuICAgIG5hbWU6ICcnLFxuICAgIGVtb2ppOiAnJyxcbiAgICBpbnRyb2R1Y3Rpb246ICcnLFxuICAgIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICBhaU1vZGVsOiBudWxsLFxuICAgIGlkOiBudWxsLFxuICAgIHVzZXJQcm9tcHQ6IG51bGwsXG4gICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgfSxcbiAgYWNjZXNzaWJpbGl0eToge1xuICAgIGFjY2Vzc1R5cGU6ICdjb21wYW55JyxcbiAgICBjbGllbnRzOiBudWxsLFxuICB9LFxuICBhY3Rpb25zOiB7XG4gICAgc2VsZWN0ZWRUb29sR3JvdXBzOiBbXSxcbiAgICBzZWxlY3RlZENvbm5lY3RvcnM6IFtdLFxuICAgIGNvbm5lY3RvclN0YXRlczogW10sXG4gIH0sXG59KVxuXG50eXBlIEFibVNlY3Rpb24gPSAnZ2VuZXJhbCcgfCAna25vd2xlZGdlJyB8ICd0cmFpbmluZycgfCAndGVzdGluZycgfCAnYWNjZXNzaWJpbGl0eScgfCAnYWN0aW9ucydcblxuZXhwb3J0IGNvbnN0IFNlY3Rpb25CeUtleSA9IHtcbiAgZ2VuZXJhbDogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoe1xuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBkZWxldGVLbm93bGVkZ2UsXG4gICAgfToge1xuICAgICAga2V5OiBzdHJpbmdcbiAgICAgIHZhbHVlOiB1bmtub3duXG4gICAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gICAgfSkgPT4gdm9pZFxuICAgIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW11cbiAgICBsb2FkaW5nOiBib29sZWFuXG4gIH0pID0+IDxBYm1HZW5lcmFsU2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxuICBrbm93bGVkZ2U6IChwcm9wczoge1xuICAgIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG4gICAgZXhpc3RpbmdLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBuZXdLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlOiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvblJlbW92ZU5ld0tub3dsZWRnZTogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25GaWxlRXJyb3JDaGFuZ2U6IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgfSkgPT4gPEFibUtub3dsZWRnZVNlY3Rpb24gey4uLnByb3BzfSAvPixcbiAgYWNjZXNzaWJpbGl0eTogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgfSkgPT4gPEFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG4gIGFjdGlvbnM6IChwcm9wczoge1xuICAgIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG4gIH0pID0+IDxBYm1BY3Rpb25zU2VjdGlvblYyIHsuLi5wcm9wc30gLz4sXG59XG5cbnR5cGUgQWJtQWdlbnRNb2RhbFByb3BzID0ge1xuICBhZGRBZ2VudDogKG5ld0FnZW50OiBBZ2VudCwgb3B0aW9ucz86IHsgbmF2aWdhdGVIb21lPzogYm9vbGVhbiB9KSA9PiB2b2lkXG4gIHJlbW92ZUFnZW50OiAoYWdlbnRJZDogbnVtYmVyIHwgc3RyaW5nKSA9PiB2b2lkXG4gIHVwZGF0ZUFnZW50OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICB1cGRhdGVBZ2VudEZhdm9yaXRlOiAodXBkYXRlZEFnZW50OiBBZ2VudCwgc2hvdWxkU29ydD86IGJvb2xlYW4pID0+IHZvaWRcbiAgc2VsZWN0Rmlyc3RBZ2VudDogKGFnZW50SWQ6IHN0cmluZykgPT4gdm9pZFxufVxuXG5jb25zdCB2YWxpZGF0ZUZpZWxkVmFsdWVzID0gKHZhbHVlVG9WYWxpZGF0ZTogTW9kYWxWYWx1ZXMpID0+IHtcbiAgaWYgKCF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC5uYW1lIHx8ICF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC51c2VyUHJvbXB0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqIE1pc21hIGVzdHJ1Y3R1cmEgcXVlIGVsIGVmZWN0byBxdWUgaGlkcmF0YSBkZXNkZSB1c2VHZXRBZ2VudEJ5SWQgKHRvZGFzIGxhcyBwZXN0YcOxYXMgZGVsIEFCTSkuICovXG5mdW5jdGlvbiBidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbChcbiAgYWdlbnRCeUlkOiBhbnksXG4gIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW10sXG4gIHByZXY6IE1vZGFsVmFsdWVzXG4pOiBNb2RhbFZhbHVlcyB7XG4gIGNvbnN0IGFnZW50TW9kZWwgPSBhZ2VudE1vZGVscy5maW5kKG1vZGVsID0+IG1vZGVsLmlkID09PSBhZ2VudEJ5SWQubW9kZWxBaUlkKVxuICByZXR1cm4ge1xuICAgIC4uLnByZXYsXG4gICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgIGdlbmVyYWw6IHtcbiAgICAgIGVtb2ppOiBhZ2VudEJ5SWQuZW1vamksXG4gICAgICBuYW1lOiBhZ2VudEJ5SWQubmFtZSxcbiAgICAgIGludHJvZHVjdGlvbjogYWdlbnRCeUlkLmludHJvZHVjdGlvbixcbiAgICAgIGlucHV0UGxhY2Vob2xkZXI6IGFnZW50QnlJZC5pbnB1dFBsYWNlaG9sZGVyLFxuICAgICAgaXNBY3RpdmU6IGFnZW50QnlJZC5pc0FjdGl2ZSxcbiAgICAgIGFpTW9kZWw6IGFnZW50TW9kZWwgfHwgbnVsbCxcbiAgICAgIGlkOiBhZ2VudEJ5SWQuaWQsXG4gICAgICB1c2VyUHJvbXB0OiBhZ2VudEJ5SWQudXNlclByb21wdCxcbiAgICAgIGtub3dsZWRnZUJhc2VzOiBbXSxcbiAgICAgIGlzX2Zhdm9yaXRlOiBhZ2VudEJ5SWQuaXNfZmF2b3JpdGUsXG4gICAgICBjcmVhdGVkX2J5OiBhZ2VudEJ5SWQuY3JlYXRlZEJ5LFxuICAgIH0sXG4gICAga25vd2xlZGdlOlxuICAgICAgYWdlbnRCeUlkLmtub3dsZWRnZUJhc2VzPy5tYXAoKGs6IGFueSkgPT4gKHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGsuZmlsZW5hbWUpLFxuICAgICAgICBpZDogay5pZC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBrLmZpbGVuYW1lLFxuICAgICAgICBzaXplOiBrLmZpbGVfc2l6ZV9ieXRlcyB8fCAwLFxuICAgICAgICB0eXBlOiBrLm9yaWdpbmFsX2ZpbGVfdHlwZSxcbiAgICAgICAgc3RhdHVzOiBrLnN0YXR1cyxcbiAgICAgICAgdXJsX29yaWdpbmFsOiBrLnVybF9vcmlnaW5hbCB8fCB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IGsudXJsX3RodW1ibmFpbCB8fCB1bmRlZmluZWQsXG4gICAgICB9KSkgfHwgW10sXG4gICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgYWNjZXNzVHlwZTogYWdlbnRCeUlkLmFjY2VzcyxcbiAgICAgIGNsaWVudHM6XG4gICAgICAgIGFnZW50QnlJZC5jbGllbnRzPy5tYXAoKGNsaWVudDogYW55KSA9PiAoe1xuICAgICAgICAgIGlkOiBjbGllbnQuaWQ/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgbmFtZTogY2xpZW50Lm5hbWUsXG4gICAgICAgICAgaXNfYWN0aXZlOiBjbGllbnQuaXNfYWN0aXZlID8/IGZhbHNlLFxuICAgICAgICAgIGlzX2RlbGV0ZWQ6IGNsaWVudC5pc19kZWxldGVkID8/IGZhbHNlLFxuICAgICAgICB9KSkgfHwgbnVsbCxcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHNlbGVjdGVkVG9vbEdyb3VwczogYWdlbnRCeUlkLnRvb2xHcm91cFNsdWdzIHx8IFtdLFxuICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBbXSxcbiAgICAgIGNvbm5lY3RvclN0YXRlczogW10sXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQWJtQWdlbnRNb2RhbCA9ICh7XG4gIGFkZEFnZW50LFxuICB1cGRhdGVBZ2VudCxcbiAgcmVtb3ZlQWdlbnQsXG4gIHVwZGF0ZUFnZW50RmF2b3JpdGUsXG4gIHNlbGVjdEZpcnN0QWdlbnQsXG59OiBBYm1BZ2VudE1vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbignYWJtX2FnZW50X3NlY3Rpb24nKVxuICAvLyBjb25zdCAkX3NjOiBhbnkgPSBudWxsXG4gIGNvbnN0IHsgYWdlbnQ6IGN1cnJlbnRTZWxlY3RlZEFnZW50LCBzZWxlY3RBZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHsgdG9nZ2xlRmF2b3JpdGUgfSA9IHVzZVRvZ2dsZUZhdm9yaXRlKClcbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWJtLWFnZW50LW1vZGFsJylcbiAgY29uc3QgW2lzU3Vic2NyaWJlZCwgc2V0SXNTdWJzY3JpYmVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBtb2RhbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY29ubmVjdG9yQXV0aFBvcHVwUmVmID0gdXNlUmVmPFdpbmRvdyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGhhc1BlbmRpbmdGaWxlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgYWN0aW9uc1RvRmlsZXMgPSB1c2VSZWY8YW55Pih7XG4gICAgdG9EZWxldGU6IFtdLFxuICAgIHRvVXBsb2FkOiBbXSxcbiAgfSlcbiAgY29uc3QgYWNjZXNzVXBkYXRlQ29udGV4dCA9IHVzZVJlZjx7XG4gICAgaXNGcm9tQ3JlYXRpb246IGJvb2xlYW5cbiAgICBpc0Zyb21FZGl0aW5nOiBib29sZWFuXG4gICAgaGFzQWN0aW9uRmlsZXM6IGJvb2xlYW5cbiAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgbnVsbFxuICAgIGhhc0JlZW5DYWxsZWQ/OiBib29sZWFuXG4gIH0+KHtcbiAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc0hhbmRsZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFnZW50Q3JlYXRlZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYgPSB1c2VSZWY8QWJtU2VjdGlvbiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHBlbmRpbmdUcmlnZ2VyUmVmID0gdXNlUmVmPFBlbmRpbmdUcmlnZ2VyUGF5bG9hZCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHByZWZldGNoZWRBZ2VudEJ5SWRSZWYgPSB1c2VSZWY8YW55PihudWxsKVxuICBjb25zdCBmaWxlc0ZpbmlzaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvLyBNYXJjYSBjdWFuZG8gY2VycmFtb3MgZWwgbG9hZGVyIHBvciBlbCB0aW1lb3V0IGRlIHNlZ3VyaWRhZCBkZSBhcmNoaXZvcy5cbiAgLy8gTWllbnRyYXMgZXN0w6kgYWN0aXZvLCBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gTk8gZGViZW4gZGlzcGFyYXJcbiAgLy8gc25hY2tiYXJzIGRlIMOpeGl0byBuaSBhdXRvLWNlcnJhciBlbCBtb2RhbC5cbiAgY29uc3QgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtmaWxlc1Byb2Nlc3NlZCwgc2V0RmlsZXNQcm9jZXNzZWRdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGFsRGVsZXRlLCBzZXRTaG93TW9kYWxEZWxldGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWN0aW9uLCBzZXRTZWN0aW9uXSA9IHVzZVN0YXRlPEFibVNlY3Rpb24+KCdnZW5lcmFsJylcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxWYWx1ZXMsIHNldE1vZGFsVmFsdWVzXSA9IHVzZVN0YXRlPHtcbiAgICBnZW5lcmFsOiBhbnlcbiAgICBrbm93bGVkZ2U6IGFueVxuICAgIGlzRWRpdGluZzogYm9vbGVhblxuICAgIGFjY2Vzc2liaWxpdHk6IGFueVxuICAgIGFjdGlvbnM6IGFueVxuICB9Pihpbml0aWFsVmFsdWVzKVxuICBjb25zdCB7XG4gICAgbG9hZGluZzogYWdlbnRMb2FkaW5nLFxuICAgIGhhbmRsZUdldEFnZW50QnlJZCxcbiAgICBhZ2VudDogYWdlbnRCeUlkLFxuICAgIGhhbmRsZUNsZWFuQWdlbnQsXG4gICAgZXJyb3I6IGVycm9yR2V0QWdlbnRCeUlkLFxuICB9ID0gdXNlR2V0QWdlbnRCeUlkKClcbiAgY29uc3QgeyBhZ2VudE1vZGVscywgZ2V0QWxsQWdlbnRNb2RlbHMgfSA9IHVzZUFnZW50TW9kZWwoKVxuICBjb25zdCBmaXJzdFZhbHVlQWdlbnQgPSB1c2VSZWY8YW55PihudWxsKVxuICBjb25zdCBbaXNTaG93UHJvY2Vzc0ZpbGVzLCBzZXRJc1Nob3dQcm9jZXNzRmlsZXNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtoYXNGaWxlRXJyb3JzLCBzZXRIYXNGaWxlRXJyb3JzXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcblxuICBjb25zdCB7IGhhbmRsZURlbGV0ZUFnZW50LCBzdWNjZXNzOiBzdWNjZXNzRGVsZXRlLCByZXNldFN1Y2Nlc3MgfSA9IHVzZURlbGV0ZUFnZW50KClcbiAgY29uc3QgeyBoYW5kbGVVcGRhdGVBZ2VudCwgc3VjY2Vzczogc3VjY2Vzc1VwZGF0ZSwgcmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NVcGRhdGUgfSA9IHVzZVVwZGF0ZUFnZW50KClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQ3JlYXRlQWdlbnQsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdDcmVhdGUsXG4gICAgc3VjY2Vzczogc3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3M6IHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgfSA9IHVzZUNyZWF0ZUFnZW50KClcblxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdLbm93bGVkZ2UsXG4gICAgZXJyb3I6IGVycm9yS25vd2xlZGdlLFxuICAgIHN1Y2Nlc3NEZWxldGU6IHN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzU2F2ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUsXG4gIH0gPSB1c2VLbm93bGVkZ2VPcGVyYXRpb25zKClcblxuICBjb25zdCB7XG4gICAgaGFuZGxlQWNjZXNzQ2xpZW50LFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gIH0gPSB1c2VBY2Nlc3NDbGllbnQoKVxuXG4gIGlmICghc2VsZWN0b3IpIHJldHVybiBudWxsXG5cbiAgY29uc3QgYXJlQ2xpZW50c0FycmF5c0VxdWFsID0gKGNsaWVudHMxOiBhbnlbXSB8IG51bGwsIGNsaWVudHMyOiBhbnlbXSB8IG51bGwpID0+IHtcbiAgICBpZiAoIWNsaWVudHMxICYmICFjbGllbnRzMikgcmV0dXJuIHRydWVcbiAgICBpZiAoIWNsaWVudHMxIHx8ICFjbGllbnRzMikgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGNsaWVudHMxLmxlbmd0aCAhPT0gY2xpZW50czIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGNsaWVudHMxSWRzID0gY2xpZW50czEubWFwKGMgPT4gYy5jbGllbnRJZCkuc29ydCgpXG4gICAgY29uc3QgY2xpZW50czJJZHMgPSBjbGllbnRzMi5tYXAoYyA9PiBjLmNsaWVudElkKS5zb3J0KClcblxuICAgIHJldHVybiBjbGllbnRzMUlkcy5ldmVyeSgoaWQsIGluZGV4KSA9PiBpZCA9PT0gY2xpZW50czJJZHNbaW5kZXhdKVxuICB9XG5cbiAgY29uc3QgaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8uYWNjZXNzaWJpbGl0eSB8fCAhbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHkpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBhY2Nlc3NUeXBlU2FtZSA9IG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlXG4gICAgY29uc3QgY2xpZW50c1NhbWUgPSBhcmVDbGllbnRzQXJyYXlzRXF1YWwoXG4gICAgICBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMsXG4gICAgICBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5hY2Nlc3NpYmlsaXR5LmNsaWVudHNcbiAgICApXG5cbiAgICByZXR1cm4gIWFjY2Vzc1R5cGVTYW1lIHx8ICFjbGllbnRzU2FtZVxuICB9XG5cbiAgY29uc3QgaGFzQWN0aW9uc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEFjdGlvbnMgPSBbLi4uKG1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkVG9vbEdyb3VwcyB8fCBbXSldLnNvcnQoKVxuICAgIGNvbnN0IG9yaWdpbmFsQWN0aW9ucyA9IFsuLi4oZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjdGlvbnM/LnNlbGVjdGVkVG9vbEdyb3VwcyB8fCBbXSldLnNvcnQoKVxuXG4gICAgaWYgKGN1cnJlbnRBY3Rpb25zLmxlbmd0aCAhPT0gb3JpZ2luYWxBY3Rpb25zLmxlbmd0aCkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBjdXJyZW50QWN0aW9ucy5zb21lKChzbHVnLCBpbmRleCkgPT4gc2x1ZyAhPT0gb3JpZ2luYWxBY3Rpb25zW2luZGV4XSlcbiAgfVxuXG4gIGNvbnN0IGhhc0Nvbm5lY3RvckNoYW5nZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudENvbm5lY3RvcnMgPSBbLi4uKG1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkQ29ubmVjdG9ycyB8fCBbXSldLnNvcnQoKVxuICAgIGNvbnN0IG9yaWdpbmFsQ29ubmVjdG9ycyA9IFsuLi4oZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjdGlvbnM/LnNlbGVjdGVkQ29ubmVjdG9ycyB8fCBbXSldLnNvcnQoKVxuXG4gICAgaWYgKGN1cnJlbnRDb25uZWN0b3JzLmxlbmd0aCAhPT0gb3JpZ2luYWxDb25uZWN0b3JzLmxlbmd0aCkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBjdXJyZW50Q29ubmVjdG9ycy5zb21lKChzbHVnLCBpbmRleCkgPT4gc2x1ZyAhPT0gb3JpZ2luYWxDb25uZWN0b3JzW2luZGV4XSlcbiAgfVxuXG4gIGNvbnN0IHBlcnNpc3RBZ2VudENvbm5lY3RvcnMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoYWdlbnRJZDogc3RyaW5nLCBjb25uZWN0b3JTbHVnczogc3RyaW5nW10sIHBvcHVwV2luZG93PzogV2luZG93IHwgbnVsbCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzYXZlQWdlbnRDb25uZWN0b3JzKGFnZW50SWQsIGNvbm5lY3RvclNsdWdzKVxuICAgICAgY29uc3QgcGVuZGluZ0F1dGhvcml6YXRpb25zID0gcmVzcG9uc2UucmVxdWlyZXNfYXV0aCB8fCBbXVxuXG4gICAgICBvcGVuQ29ubmVjdG9yQXV0aG9yaXphdGlvbldpbmRvd3MocGVuZGluZ0F1dGhvcml6YXRpb25zLCBwb3B1cFdpbmRvdylcbiAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuICAgIFtdXG4gIClcblxuICBjb25zdCB2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lID0gKCkgPT4ge1xuICAgIGlmICghZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmdlbmVyYWwgfHwgIW1vZGFsVmFsdWVzPy5nZW5lcmFsKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiAoXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwubmFtZSAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5lbW9qaSA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5lbW9qaSAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24gPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuaW50cm9kdWN0aW9uICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5haU1vZGVsPy5pZCA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5haU1vZGVsPy5pZCAmJlxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLnVzZXJQcm9tcHQgJiZcbiAgICAgICFoYXNBY3Rpb25zQ2hhbmdlZCgpICYmXG4gICAgICAhaGFzQ29ubmVjdG9yQ2hhbmdlcygpICYmXG4gICAgICAobW9kYWxWYWx1ZXMua25vd2xlZGdlPy5sZW5ndGggPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50Py5rbm93bGVkZ2U/Lmxlbmd0aCB8fFxuICAgICAgICAoIW1vZGFsVmFsdWVzLmtub3dsZWRnZT8ubGVuZ3RoICYmICFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8ua25vd2xlZGdlPy5sZW5ndGgpKSAmJlxuICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGRhdGU/Lmxlbmd0aCAmJlxuICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGU/Lmxlbmd0aCAmJlxuICAgICAgIWhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKClcbiAgICApXG4gIH1cblxuICBjb25zdCBoYXNBbnlWYWx1ZUZvckNyZWF0aW9uID0gKCkgPT4ge1xuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgaXNEZWZhdWx0QWlNb2RlbCA9ICEhYWdlbnRNb2RlbHMubGVuZ3RoICYmIG1vZGFsVmFsdWVzLmdlbmVyYWwuYWlNb2RlbD8uaWQgPT09IGFnZW50TW9kZWxzWzBdPy5pZFxuXG4gICAgY29uc3QgZGVmYXVsdElucHV0UGxhY2Vob2xkZXIgPSB0KCdnZW5lcmFsU2VjdGlvbi5pbnB1dFBsYWNlaG9sZGVyJylcbiAgICBjb25zdCBpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyID09PSBkZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuXG4gICAgY29uc3QgZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciA9IHQoJ2dlbmVyYWxTZWN0aW9uLmluaXRpYWxQcm9tcHRQbGFjZWhvbGRlcicpXG4gICAgY29uc3QgaXNEZWZhdWx0VXNlclByb21wdCA9XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IGRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIgfHxcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gJycgfHxcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gbnVsbFxuXG4gICAgY29uc3QgaGFzTmFtZSA9IG1vZGFsVmFsdWVzLmdlbmVyYWwubmFtZS50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzRW1vamkgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmVtb2ppLnRyaW0oKSAhPT0gJydcbiAgICBjb25zdCBoYXNJbnRyb2R1Y3Rpb24gPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbi50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzSW5wdXRQbGFjZWhvbGRlciA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlci50cmltKCkgIT09ICcnICYmICFpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyXG4gICAgY29uc3QgaGFzVXNlclByb21wdCA9IG1vZGFsVmFsdWVzLmdlbmVyYWwudXNlclByb21wdD8udHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0VXNlclByb21wdFxuICAgIGNvbnN0IGhhc0tub3dsZWRnZSA9ICEhbW9kYWxWYWx1ZXMua25vd2xlZGdlLmxlbmd0aFxuICAgIGNvbnN0IGhhc0N1c3RvbUFpTW9kZWwgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWwgJiYgIWlzRGVmYXVsdEFpTW9kZWxcbiAgICBjb25zdCBoYXNBY2Nlc3NpYmlsaXR5ID0gbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueSdcbiAgICBjb25zdCBoYXNBY3Rpb25zID0gISFtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZFRvb2xHcm91cHM/Lmxlbmd0aFxuICAgIGNvbnN0IGhhc0Nvbm5lY3RvcnMgPSAhIW1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkQ29ubmVjdG9ycz8ubGVuZ3RoXG5cbiAgICByZXR1cm4gKFxuICAgICAgaGFzTmFtZSB8fFxuICAgICAgaGFzRW1vamkgfHxcbiAgICAgIGhhc0ludHJvZHVjdGlvbiB8fFxuICAgICAgaGFzSW5wdXRQbGFjZWhvbGRlciB8fFxuICAgICAgaGFzVXNlclByb21wdCB8fFxuICAgICAgaGFzS25vd2xlZGdlIHx8XG4gICAgICBoYXNDdXN0b21BaU1vZGVsIHx8XG4gICAgICBoYXNBY2Nlc3NpYmlsaXR5IHx8XG4gICAgICBoYXNBY3Rpb25zIHx8XG4gICAgICBoYXNDb25uZWN0b3JzXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzQ2hhbmdlc0ZvckVkaXRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKCFtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIChcbiAgICAgICF2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lKCkgfHxcbiAgICAgICEhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggfHxcbiAgICAgICEhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGhcbiAgICApXG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQ2hhbmdlcyA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFzQW55VmFsdWVGb3JDcmVhdGlvbigpIHx8IGhhc0NoYW5nZXNGb3JFZGl0aW5nKClcbiAgfVxuXG4gIC8vIEhlbHBlciBwYXJhIG1hbmVqYXIgZWwgdG9nZ2xlIGRlIGZhdm9yaXRvIHkgYWN0dWFsaXphciBlbCBlc3RhZG8gY29uIG9yZGVuYW1pZW50b1xuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZywgYWdlbnQ6IEFnZW50LCBvblN1Y2Nlc3M/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZCwgb25FcnJvcj86ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHRvZ2dsZUZhdm9yaXRlKFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgIC8vIEFjdHVhbGl6YXIgZWwgZXN0YWRvIGRlIGFnZW50ZXMgY29uIGVsIHJlc3VsdGFkbyBkZWwgc2Vydmlkb3IgeSBvcmRlbmFyXG4gICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZSh1cGRhdGVkQWdlbnQsIHRydWUpXG4gICAgICAgICAgaWYgKG9uU3VjY2Vzcykge1xuICAgICAgICAgICAgb25TdWNjZXNzKHVwZGF0ZWRBZ2VudClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgb25FcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZ2VudC5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0sXG4gICAgW3RvZ2dsZUZhdm9yaXRlLCB1cGRhdGVBZ2VudEZhdm9yaXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoc2tpcENvbmZpcm1hdGlvbiA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKCFza2lwQ29uZmlybWF0aW9uICYmIGhhc1BlbmRpbmdDaGFuZ2VzKCkgJiYgIXN1Y2Nlc3NDcmVhdGUgJiYgIXN1Y2Nlc3NVcGRhdGUgJiYgIXN1Y2Nlc3NEZWxldGUpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUNsb3NlRWRpdEFnZW50JykgOiB0KCdjb25maXJtQ2xvc2VDcmVhdGVBZ2VudCcpXG5cbiAgICAgIGlmICghd2luZG93LmNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIHNldE1vZGFsVmFsdWVzKGluaXRpYWxWYWx1ZXMpXG4gICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzU2F2ZSgpXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQgPSB7XG4gICAgICB0b0RlbGV0ZTogW10sXG4gICAgICB0b1VwbG9hZDogW10sXG4gICAgfVxuICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgIH1cbiAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG4gICAgc2V0SXNTdWJzY3JpYmVkKGZhbHNlKVxuICAgIHNldEZpbGVzUHJvY2Vzc2VkKDApXG4gICAgc2V0U2VjdGlvbignZ2VuZXJhbCcpXG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHBlbmRpbmdUcmlnZ2VyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IChldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykge1xuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNlY3Rpb25DaGFuZ2UgPSAobmV3U2VjdGlvbjogQWJtU2VjdGlvbikgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy50YWJTZWN0aW9uLCB7IG9wdGlvbjogbmV3U2VjdGlvbiB9KVxuICAgIHNldFNlY3Rpb24obmV3U2VjdGlvbilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzQnlLZXlzID0gKHtcbiAgICBrZXksXG4gICAgdmFsdWUsXG4gICAgZGVsZXRlS25vd2xlZGdlLFxuICB9OiB7XG4gICAga2V5OiBzdHJpbmdcbiAgICB2YWx1ZTogdW5rbm93blxuICAgIGRlbGV0ZUtub3dsZWRnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIGlmIChrZXkgPT09ICdrbm93bGVkZ2UnKSB7XG4gICAgICBjb25zdCBuZXh0S25vd2xlZGdlID0gKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10gfCB1bmRlZmluZWQpIHx8IFtdXG4gICAgICBpZiAoIWRlbGV0ZUtub3dsZWRnZSkge1xuICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLnB1c2goLi4ubmV4dEtub3dsZWRnZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbGVzUHJldklkcyA9IG5leHRLbm93bGVkZ2UubGVuZ3RoID8gbmV3IFNldChuZXh0S25vd2xlZGdlLm1hcChmaWxlID0+IGZpbGUuaWQpKSA6IG5ldyBTZXQoKVxuICAgICAgICBjb25zdCBuZXdGaWxlcyA9IG1vZGFsVmFsdWVzLmtub3dsZWRnZS5maWx0ZXIoZmlsZSA9PiAhZmlsZXNQcmV2SWRzLmhhcyhmaWxlLmlkKSAmJiBmaWxlLnN0YXR1cyAhPT0gJ3N0YXJ0ZWQnKVxuICAgICAgICBpZiAoIW5ld0ZpbGVzLmxlbmd0aCAmJiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlSWRzID0gbmV3IFNldChuZXh0S25vd2xlZGdlLm1hcChmaWxlID0+IGZpbGUuaWQpKVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQgPSBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmZpbHRlcihmaWxlID0+IHZhbHVlSWRzLmhhcyhmaWxlLmlkKSlcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gWy4uLihhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlIHx8IFtdKSwgLi4ubmV3RmlsZXNdXG4gICAgICB9XG4gICAgfVxuICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgY29uc3Qga25vd2xlZGdlRmlsZXMgPVxuICAgICAgICBrZXkgPT09ICdrbm93bGVkZ2UnXG4gICAgICAgICAgPyBkZWxldGVLbm93bGVkZ2VcbiAgICAgICAgICAgID8gKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pXG4gICAgICAgICAgICA6IFsuLi4ocHJldi5rbm93bGVkZ2UgfHwgW10pLCAuLi4oKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pIHx8IFtdKV1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgPT09ICdrbm93bGVkZ2UnXG4gICAgICAgICAgPyB7IGtub3dsZWRnZToga25vd2xlZGdlRmlsZXMgfVxuICAgICAgICAgIDoga2V5ID09PSAnYWNjZXNzaWJpbGl0eSdcbiAgICAgICAgICAgID8geyBhY2Nlc3NpYmlsaXR5OiB2YWx1ZSB9XG4gICAgICAgICAgICA6IGtleSA9PT0gJ2FjdGlvbnMnXG4gICAgICAgICAgICAgID8geyBhY3Rpb25zOiB2YWx1ZSB9XG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgICAgICAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1BY3Rpb24gPSBhc3luYyAoY2hhdDogYW55LCBhY3Rpb246ICdkZWxldGUnIHwgJ3VwZGF0ZScgfCAnY3JlYXRlJykgPT4ge1xuICAgIC8vIFNvbG8gcGVybWl0aXIgb3BlcmFjaW9uZXMgZGUgYWdlbnRlcyBjdXN0b20gc2kgbGEgZmVhdHVyZSBmbGFnIGVzdMOhIGhhYmlsaXRhZGFcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmRlbGV0ZSlcbiAgICAgIGhhbmRsZURlbGV0ZUFnZW50KGNoYXQuaWQgYXMgdW5rbm93biBhcyBzdHJpbmcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNvbmZpcm1BY3Rpb24sIHsgb3B0aW9uOiBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyAnZWRpdGUnIDogJ2NyZWF0ZScgfSlcbiAgICBpZiAobW9kYWxWYWx1ZXMuYWN0aW9ucz8uc2VsZWN0ZWRDb25uZWN0b3JzPy5sZW5ndGgpIHtcbiAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAncG9wdXA9eWVzLHdpZHRoPTU2MCxoZWlnaHQ9NzYwJylcbiAgICB9XG4gICAgLy8gQWwgcmVpbnRlbnRhciBndWFyZGFyLCBsaWJlcmFyIGVsIGZyZW5vIGRlbCB0aW1lb3V0IHByZXZpbyBwYXJhIHF1ZSBsb3NcbiAgICAvLyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyB2dWVsdmFuIGEgcG9kZXIgZGlzcGFyYXIgc25hY2tiYXJzIHkgY2VycmFyLlxuICAgIHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3RvckNoYW5nZXMgPSBoYXNDb25uZWN0b3JDaGFuZ2VzKClcblxuICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQgJiYgY29ubmVjdG9yQ2hhbmdlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHBlcnNpc3RBZ2VudENvbm5lY3RvcnMoXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5hY3Rpb25zPy5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW10sXG4gICAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudFxuICAgICAgICAgIClcbiAgICAgICAgICBmaXJzdFZhbHVlQWdlbnQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIC4uLmZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAuLi5maXJzdFZhbHVlQWdlbnQuY3VycmVudD8uYWN0aW9ucyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzOiBbLi4uKG1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkQ29ubmVjdG9ycyB8fCBbXSldLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFnZW50Q3JlYXRlZCcpKVxuICAgICAgICAgIGlmIChjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCAmJiAhY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudC5jbG9zZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ICYmICFjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudC5jbG9zZWQpIHtcbiAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2UoKVxuICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lKCkpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlVXBkYXRlQWdlbnQobW9kYWxWYWx1ZXMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoY29ubmVjdG9yQ2hhbmdlcykge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGhhbmRsZUNyZWF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudFZhbHVlcyB9ID0gZXZlbnQuZGV0YWlsXG4gICAgICBjb25zdCBpbml0aWFsU2VjdGlvbiA9IGFnZW50VmFsdWVzPy5pbml0aWFsU2VjdGlvbiBhcyBBYm1TZWN0aW9uIHwgdW5kZWZpbmVkXG4gICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9XG4gICAgICAgIGluaXRpYWxTZWN0aW9uICYmIFsnZ2VuZXJhbCcsICdrbm93bGVkZ2UnLCAnYWNjZXNzaWJpbGl0eScsICdhY3Rpb25zJ10uaW5jbHVkZXMoaW5pdGlhbFNlY3Rpb24pXG4gICAgICAgICAgPyBpbml0aWFsU2VjdGlvblxuICAgICAgICAgIDogbnVsbFxuXG4gICAgICBnZXRBbGxBZ2VudE1vZGVscygpXG4gICAgICBzZXRJc09wZW4odHJ1ZSlcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKVxuXG4gICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2VudFZhbHVlcy52YWx1ZXM/LmlzRWRpdGluZykge1xuICAgICAgICAvLyBWYWxpZGFyIHF1ZSBsYSBmZWF0dXJlIGZsYWcgZXN0w6kgaGFiaWxpdGFkYSBhbnRlcyBkZSBjYXJnYXIgZWwgYWdlbnRlIHBhcmEgZWRpdGFyXG4gICAgICAgIGlmICghd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFnZW50VmFsdWVzLnByZWZldGNoZWRBZ2VudEJ5SWQpIHtcbiAgICAgICAgICBoYW5kbGVDbGVhbkFnZW50KClcbiAgICAgICAgICBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnQgPSBhZ2VudFZhbHVlcy5wcmVmZXRjaGVkQWdlbnRCeUlkXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlR2V0QWdlbnRCeUlkKGFnZW50VmFsdWVzPy52YWx1ZXM/LmdlbmVyYWw/LmlkIGFzIHVua25vd24gYXMgc3RyaW5nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGFnZW50VmFsdWVzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBuZXh0VmFsdWVzID0ge1xuICAgICAgICAgIC4uLmluaXRpYWxWYWx1ZXMsXG4gICAgICAgICAgLi4uYWdlbnRWYWx1ZXMudmFsdWVzLFxuICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuZ2VuZXJhbCxcbiAgICAgICAgICAgIC4uLihhZ2VudFZhbHVlcy52YWx1ZXMuZ2VuZXJhbCB8fCB7fSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhY2Nlc3NpYmlsaXR5OiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmFjY2Vzc2liaWxpdHksXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmFjY2Vzc2liaWxpdHkgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY3Rpb25zLFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5hY3Rpb25zIHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtub3dsZWRnZTogYWdlbnRWYWx1ZXMudmFsdWVzLmtub3dsZWRnZSB8fCBbXSxcbiAgICAgICAgfVxuXG4gICAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gbmV4dFZhbHVlc1xuICAgICAgICBzZXRNb2RhbFZhbHVlcyhuZXh0VmFsdWVzKVxuICAgICAgfVxuXG4gICAgICBpZiAocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgJiYgIWFnZW50VmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nKSB7XG4gICAgICAgIHNldFNlY3Rpb24ocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpXG4gICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgYXMgRXZlbnRMaXN0ZW5lcilcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIHVzZUVmZmVjdCB0byBoYW5kbGUgdGhlIG92ZXJmbG93IG9mIHRoZSBib2R5IHdoZW4gdGhlIG1vZGFsIGlzIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE92ZXJmbG93ID0gYm9keS5zdHlsZS5vdmVyZmxvd1xuICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbE92ZXJmbG93XG4gICAgfVxuICB9LCBbaXNPcGVuXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUJlZm9yZVVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgICAgIGlmIChoYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgICByZXR1cm4gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuICB9LCBbaXNPcGVuLCBoYXNQZW5kaW5nQ2hhbmdlcywgdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3VjY2Vzc0RlbGV0ZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudERlbGV0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2VzcygpXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkIGFzIHN0cmluZylcbiAgICAgIH1cbiAgICAgIHJlbW92ZUFnZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpXG4gICAgICBzZXRTaG93TW9kYWxEZWxldGUoZmFsc2UpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICB9LCBbc3VjY2Vzc0RlbGV0ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBFdml0YXIgZWplY3VjacOzbiBtw7psdGlwbGUgZGVsIGVmZWN0b1xuICAgIGlmIChzdWNjZXNzQ3JlYXRlICYmICFpc0xvYWRpbmdDcmVhdGUgJiYgYWdlbnRDcmVhdGVkUmVmLmN1cnJlbnQgIT09IHN1Y2Nlc3NDcmVhdGUuaWQpIHtcbiAgICAgIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ID0gc3VjY2Vzc0NyZWF0ZS5pZFxuICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjdGlvbnM/LnNlbGVjdGVkQ29ubmVjdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgIHBlcnNpc3RBZ2VudENvbm5lY3RvcnMoXG4gICAgICAgICAgc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgIG1vZGFsVmFsdWVzLmFjdGlvbnMuc2VsZWN0ZWRDb25uZWN0b3JzLFxuICAgICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50XG4gICAgICAgICkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBhZ2VudCBjb25uZWN0b3JzIGFmdGVyIGNyZWF0ZTonLCBlcnJvcilcbiAgICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWdlbnRDcmVhdGVkJykpXG4gICAgICAgICAgaWYgKGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ICYmICFjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudC5jbG9zZWQpIHtcbiAgICAgICAgICAgIGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50LmNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbm5lY3RvckF1dGhQb3B1cFJlZi5jdXJyZW50ICYmICFjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudC5jbG9zZWQpIHtcbiAgICAgICAgY29ubmVjdG9yQXV0aFBvcHVwUmVmLmN1cnJlbnQuY2xvc2UoKVxuICAgICAgICBjb25uZWN0b3JBdXRoUG9wdXBSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICAgIGlmIChwZW5kaW5nVHJpZ2dlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNyZWF0ZVNjaGVkdWxlKHsgLi4ucGVuZGluZ1RyaWdnZXJSZWYuY3VycmVudCwgYWdlbnRfZXh0ZXJuYWxfaWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KS5jYXRjaChlcnIgPT5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyBwZW5kaW5nIHRyaWdnZXI6JywgZXJyKVxuICAgICAgICApXG4gICAgICAgIHBlbmRpbmdUcmlnZ2VyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzKHtcbiAgICAgICAgICAgIGZpbGVzVG9EZWxldGU6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsXG4gICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLFxuICAgICAgICAgICAgYWdlbnRJZDogc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdXG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgICBhZGRBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAgIC8vIEVudG9uY2VzIGN1cnJlbnRJc0Zhdm9yaXRlIGRlYmUgc2VyIGZhbHNlIHBhcmEgcXVlIGVsIHRvZ2dsZSBsbyBtYXJxdWUgY29tbyB0cnVlXG4gICAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQoXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGFnZW50Rm9yVG9nZ2xlLFxuICAgICAgICAgICAgICAgICgpID0+IHJlc29sdmUoKSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZWplY3QoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLmxlbmd0aCkge1xuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaSBubyBoYXkgYWNjZXNpYmlsaWRhZCBwZXJvIGhheSBhcmNoaXZvcywgZXN0YWJsZWNlciBlbCBjb250ZXh0byBwYXJhIGNyZWFjacOzblxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICAgIGhhbmRsZURlbGV0ZUtub3dsZWRnZXMoeyBmaWxlczogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSwgYWdlbnRJZDogc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpIH0pLFxuICAgICAgICBdXG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgICBhZGRBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAgIC8vIEVudG9uY2VzIGN1cnJlbnRJc0Zhdm9yaXRlIGRlYmUgc2VyIGZhbHNlIHBhcmEgcXVlIGVsIHRvZ2dsZSBsbyBtYXJxdWUgY29tbyB0cnVlXG4gICAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQoXG4gICAgICAgICAgICAgICAgc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGFnZW50Rm9yVG9nZ2xlLFxuICAgICAgICAgICAgICAgICgpID0+IHJlc29sdmUoKSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZWplY3QoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgIGhhbmRsZURlbGV0ZUtub3dsZWRnZXMoeyBmaWxlczogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSwgYWdlbnRJZDogc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpIH0pXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgIC8vIFNvbG8gcmVzZXRlYXIgZWwgY29udGV4dG8gc2kgTk8gc2UgaGEgbGxhbWFkbyB0b2RhdsOtYVxuICAgICAgICBpZiAoIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkKSB7XG4gICAgICAgICAgY29uc3QgeyBoYXNBY3Rpb25GaWxlcyB9ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBoYXNBY3Rpb25GaWxlcyB8fCBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb2xvIGVqZWN1dGFyIGhhbmRsZUFjY2Vzc0NsaWVudCwgZWwgYWdlbnRlIHNlIGFncmVnYXLDoSB5IGVsIHRvZ2dsZSBzZSBoYXLDoSBlbiBzdWNjZXNzVXBkYXRlQWNjZXNzXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZmF2b3JpdGUgaWYgaXQgd2FzIG1hcmtlZCBkdXJpbmcgY3JlYXRpb25cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgIC8vIFByaW1lcm8gYWdyZWdhciBlbCBhZ2VudGUgYSBsYSBsaXN0YSAoYWRkQWdlbnQgeWEgb3JkZW5hKVxuICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICBhZGRBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcblxuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgIC8vIEx1ZWdvIGhhY2VyIGVsIHRvZ2dsZSBkZSBmYXZvcml0byBlbiBlbCBzZXJ2aWRvciB5IGFjdHVhbGl6YXIgZWwgZXN0YWRvXG4gICAgICAgIGhhbmRsZVRvZ2dsZUZhdm9yaXRlRm9yQWdlbnQoXG4gICAgICAgICAgc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGFnZW50Rm9yVG9nZ2xlLFxuICAgICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHsgb3B0aW9uOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgPyAnYWRkJyA6ICdyZW1vdmUnIH0pXG4gICAgICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICAgICAgc2VsZWN0QWdlbnQoeyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IHVwZGF0ZWRBZ2VudC5pc19mYXZvcml0ZSB9KVxuICAgICAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHsgb3B0aW9uOiAnYWRkJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICBhZGRBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzQ3JlYXRlKVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXG4gICAgaXNMb2FkaW5nQ3JlYXRlLFxuICAgIHN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgYWRkQWdlbnQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICBdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3NVcGRhdGUpIHtcbiAgICAgIGlmIChhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLmxlbmd0aCAmJiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKSkge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICBjb25zdCBmaWxlc1RvRGVsZXRlID0gWy4uLmFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGVdXG4gICAgICAgICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUsXG4gICAgICAgICAgICAgIGZpbGVzVG9DcmVhdGU6IGZpbGVzVG9VcGxvYWQsXG4gICAgICAgICAgICAgIGFnZW50SWQ6IG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKClcbiAgICAgICAgICAgICAgPyBbaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSldXG4gICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgIF0pXG4gICAgICAgIH1cbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLmxlbmd0aCkge1xuICAgICAgICBpZiAoaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKSkge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IHRydWUsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICBjb25zdCBmaWxlc1RvRGVsZXRlID0gWy4uLmFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGVdXG4gICAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZSA9IFtdXG5cbiAgICAgICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHtcbiAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzVG9EZWxldGUsXG4gICAgICAgICAgICAgIGFnZW50SWQ6IG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKClcbiAgICAgICAgICAgICAgPyBbaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSldXG4gICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgIF0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKSkge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWEgeSBOTyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlc1xuICAgICAgICBpZiAoIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkICYmICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIC8vIExsYW1hciBhIGhhbmRsZUFjY2Vzc0NsaWVudCBzb2xvIHVuYSB2ZXpcbiAgICAgICAgICBpZiAoIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBubyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MgbmkgYWNjZXNzIHBlbmRpZW50ZVxuICAgICAgaWYgKFxuICAgICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlcyAmJlxuICAgICAgICAhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGggJiZcbiAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAhc3VjY2Vzc1VwZGF0ZUFjY2VzcyAmJlxuICAgICAgICAhcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudFxuICAgICAgKSB7XG4gICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICAgIHVwZGF0ZUFnZW50KHN1Y2Nlc3NVcGRhdGUpXG4gICAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSgpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCxcbiAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZURlbGV0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsXG4gICAgdCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIGhhbmRsZUNsb3NlLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVByb2Nlc3NGaWxlc1RpbWVvdXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJiAhaXNTaG93UHJvY2Vzc0ZpbGVzKSByZXR1cm5cblxuICAgIC8vIEFsIGN1bXBsaXJzZSBlbCB0aW1lb3V0IGFzdW1pbW9zIHF1ZSBlbCBndWFyZGFkbyBkZWwgYWdlbnRlIGZ1ZSBleGl0b3NvXG4gICAgLy8gKGVsIHNlcnZlciByZXNwb25kacOzIE9LKSB5IHF1ZSBsb3MgYXJjaGl2b3Mgc2UgZW52aWFyb24gY29ycmVjdGFtZW50ZS5cbiAgICAvLyBTb2xvIHBlcmRpbW9zIGxhIGNvbmZpcm1hY2nDs24gYXNpbmNyw7NuaWNhIGRlbCBXZWJTb2NrZXQgc29icmUgc3VcbiAgICAvLyBwcm9jZXNhbWllbnRvLiBDZXJyYW1vcyB0b2RvIG1vc3RyYW5kbyBlbCBzbmFja2JhciBkZSDDqXhpdG8gcXVlIGh1Ymllc2VcbiAgICAvLyBkaXNwYXJhZG8gZWwgZmx1am8gbm9ybWFsIGRlIMOpeGl0by5cblxuICAgIC8vIEZyZW5vIHBhcmEgcXVlIGxvcyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyBubyByZS1kaXNwYXJlbiBzbmFja2JhcnNcbiAgICAvLyBvIGNpZXJyZXMgZHVwbGljYWRvcyBjdWFuZG8gc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKSBsb3MgZ2F0aWxsZS5cbiAgICBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgaWYgKG1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzVXBkYXRlKSB7XG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSgpXG4gICAgfSBlbHNlIGlmICghbW9kYWxWYWx1ZXMuaXNFZGl0aW5nICYmIHN1Y2Nlc3NDcmVhdGUpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgIH1cblxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUoKVxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcblxuICAgIGhhbmRsZUNsb3NlKClcbiAgfSwgW1xuICAgIGlzU2hvd1Byb2Nlc3NGaWxlcyxcbiAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcsXG4gICAgc3VjY2Vzc1VwZGF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHVwZGF0ZUFnZW50LFxuICAgIGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsXG4gICAgdCxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGUsXG4gICAgcmVzZXRTdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCB3ZWJTb2NrZXRGdW5jdGlvbiA9ICh7IG1vZGVsX2RhdGE6IG1vZGVsRGF0YSB9OiB7IG1vZGVsX2RhdGE6IGFueSB9KSA9PiB7XG4gICAgY29uc3QgZmlsZVN0YXR1cyA9IG1vZGVsRGF0YVxuICAgIGlmIChmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2RvbmUnIHx8IGZpbGVTdGF0dXMuc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRLbm93bGVkZ2UgPSBwcmV2Lmtub3dsZWRnZS5tYXAoZmlsZSA9PiB7XG4gICAgICAgICAgaWYgKGZpbGUubmFtZSA9PT0gZmlsZVN0YXR1cy5maWxlbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZmlsZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiBmaWxlU3RhdHVzLnN0YXR1cyxcbiAgICAgICAgICAgICAgaWQ6IGZpbGVTdGF0dXMua25vd2xlZGdlX2Jhc2VfaWQgfHwgZmlsZS5pZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpbGVcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgaGFzUGVuZGluZ0ZpbGVzID0gdXBkYXRlZEtub3dsZWRnZS5zb21lKGZpbGUgPT4gZmlsZS5zdGF0dXMgPT09ICdwZW5kaW5nJylcbiAgICAgICAgY29uc3QgaGFzRXJyb3JGaWxlcyA9IHVwZGF0ZWRLbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAnZmFpbGVkJylcbiAgICAgICAgaWYgKGhhc0Vycm9yRmlsZXMgJiYgIWhhc1BlbmRpbmdGaWxlcykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgICAgIG1vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWRXaXRoRmlsZXNFcnJvcicpIDogdCgnY29uZmlybUFnZW50V2l0aEZpbGVzRXJyb3InKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIGlmICghaGFzUGVuZGluZ0ZpbGVzICYmICFoYXNFcnJvckZpbGVzKSB7XG4gICAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSlcblxuICAgICAgICAgIC8vIFNpIGhhYsOtYSBhY2Nlc3MgcGVuZGllbnRlIHkgeWEgZXN0YWJhIG1hbmVqYWRvLCBmb3J6YXIgcXVlIGVsIHVzZUVmZmVjdCBkZSBhY2Nlc3Mgc2UgZWplY3V0ZSBkZSBudWV2b1xuICAgICAgICAgIGlmIChhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiYgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lm9wZXJhdGlvblR5cGUgPT09ICdjcmVhdGUnICYmXG4gICAgICAgICAgICAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICAgICAgICAhZmlsZXNGaW5pc2hlZFJlZi5jdXJyZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTaSBlcyBjcmVhY2nDs24gc2luIGFjY2VzaWJpbGlkYWQsIG1hcmNhciBxdWUgbG9zIGFyY2hpdm9zIHRlcm1pbmFyb25cbiAgICAgICAgICAgIGZpbGVzRmluaXNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgICAgIHNldEZpbGVzUHJvY2Vzc2VkKHByZXZDb3VudCA9PiBwcmV2Q291bnQgKyAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAga25vd2xlZGdlOiB1cGRhdGVkS25vd2xlZGdlLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUgJiYgIWlzTG9hZGluZ0tub3dsZWRnZSAmJiAhZXJyb3JLbm93bGVkZ2UpIHtcbiAgICAgIC8vIFNvbG8gY2VycmFyIHNpIE5PIGhheSBhcmNoaXZvcyBzaWVuZG8gcHJvY2VzYWRvc1xuICAgICAgaWYgKGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50IHx8IGlzU2hvd1Byb2Nlc3NGaWxlcyB8fCBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIFNpIGVsIGxvYWRlciBzZSBjZXJyw7MgcG9yIHRpbWVvdXQsIG5vIG1vc3RyYXIgc25hY2tiYXIgZGUgw6l4aXRvIG5pIGNlcnJhclxuICAgICAgaWYgKHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gICAgaWYgKGVycm9yS25vd2xlZGdlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKFxuICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgIClcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgfVxuICB9LCBbc3VjY2Vzc0tub3dsZWRnZURlbGV0ZSwgaXNMb2FkaW5nS25vd2xlZGdlLCBlcnJvcktub3dsZWRnZSwgaXNTaG93UHJvY2Vzc0ZpbGVzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnRcblxuICAgIC8vIFNpIGhheSBhcmNoaXZvcyBzaWVuZG8gcHJvY2VzYWRvcywgZXNwZXJhciBhIHF1ZSB0ZXJtaW5lblxuICAgIGlmIChjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMpKSB7XG4gICAgICAvLyBTaSBzdWNjZXNzVXBkYXRlQWNjZXNzIGVzdMOhIGFjdGl2bywgbWFyY2FyIGNvbW8gbWFuZWphZG8gcGVybyBOTyByZXNldGVhciBoYXN0YSBxdWUgdGVybWluZW4gbG9zIGFyY2hpdm9zXG4gICAgICBpZiAoc3VjY2Vzc1VwZGF0ZUFjY2VzcyAmJiAhYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNpIHlhIGZ1ZSBtYW5lamFkbyB5IG5vIGhheSBhcmNoaXZvcyBwZW5kaWVudGVzLCBlamVjdXRhciBlbCBjaWVycmVcbiAgICBpZiAoYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmIGNvbnRleHQuaGFzQWN0aW9uRmlsZXMgJiYgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJykge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBpZiAoc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuICAgICAgfVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzdWNjZXNzVXBkYXRlQWNjZXNzKSB7XG4gICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBpZiAoY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJykge1xuICAgICAgLy8gU2kgaGF5IGFyY2hpdm9zLCBlbCBhZ2VudGUgeWEgZnVlIGFncmVnYWRvIHkgZWwgdG9nZ2xlIHlhIHNlIGhpem8gZW4gc3VjY2Vzc0NyZWF0ZVxuICAgICAgLy8gU29sbyBuZWNlc2l0YW1vcyBjZXJyYXIgZWwgbW9kYWxcbiAgICAgIGlmIChjb250ZXh0Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBmdWUgY3JlYWRvIGNvbiBmYXZvcml0bywgbmVjZXNpdGFtb3Mgb3JkZW5hciBkZXNwdcOpcyBkZSBhZ3JlZ2FybG9cbiAgICAgIGNvbnN0IGFnZW50VG9BZGQgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlID8geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9IDogc3VjY2Vzc0NyZWF0ZVxuXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgYWRkQWdlbnQoYWdlbnRUb0FkZClcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50VG9BZGQpXG5cbiAgICAgIC8vIFNpIHRpZW5lIGZhdm9yaXRvLCBoYWNlciB0b2dnbGUgeSBhY3R1YWxpemFyIGVzdGFkbyBhbnRlcyBkZSBjZXJyYXJcbiAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlzX2Zhdm9yaXRlKSB7XG4gICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgIC8vIEVudG9uY2VzIGN1cnJlbnRJc0Zhdm9yaXRlIGRlYmUgc2VyIGZhbHNlIHBhcmEgcXVlIGVsIHRvZ2dsZSBsbyBtYXJxdWUgY29tbyB0cnVlXG4gICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFRvQWRkLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDZXJyYXIgZGVzcHXDqXMgZGUgcXVlIGVsIHRvZ2dsZSBjb21wbGV0ZSB5IGFjdHVhbGljZSBlbCBlc3RhZG9cbiAgICAgICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAndXBkYXRlJykge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIHVwZGF0ZUFnZW50KHN1Y2Nlc3NVcGRhdGUpXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHN1Y2Nlc3NVcGRhdGUpXG4gICAgICB9XG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH1cblxuICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NVcGRhdGVBY2Nlc3MsIGZpbGVzUHJvY2Vzc2VkXSlcblxuICAvLyB1c2VFZmZlY3QgcGFyYSBtYW5lamFyIGVsIGNpZXJyZSBkZWwgbW9kYWwgY3VhbmRvIHRlcm1pbmFuIGxvcyBhcmNoaXZvcyBlbiBjcmVhY2nDs24gc2luIGFjY2VzaWJpbGlkYWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTb2xvIHByb2Nlc2FyIHNpOlxuICAgIC8vIC0gRXMgdW5hIG9wZXJhY2nDs24gZGUgY3JlYWNpw7NuXG4gICAgLy8gLSBObyBoYXkgYWNjZXNpYmlsaWRhZCBwZW5kaWVudGVcbiAgICAvLyAtIExvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uIGRlIHByb2Nlc2Fyc2VcbiAgICAvLyAtIEVsIGFnZW50ZSBmdWUgY3JlYWRvIGV4aXRvc2FtZW50ZVxuICAgIC8vIC0gQcO6biBubyBzZSBoYSBjZXJyYWRvIGVsIG1vZGFsXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgIWNvbnRleHQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgIGZpbGVzRmluaXNoZWRSZWYuY3VycmVudCAmJlxuICAgICAgc3VjY2Vzc0NyZWF0ZSAmJlxuICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAhaXNTaG93UHJvY2Vzc0ZpbGVzXG4gICAgKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGZpbGVzRmluaXNoZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGFtYmnDqW4gbWFuZWphciBlbCBjYXNvIGN1YW5kbyBoYXkgYWNjZXNpYmlsaWRhZCB5IGFyY2hpdm9zIHRlcm1pbmFyb25cbiAgICBpZiAoXG4gICAgICBjb250ZXh0Lm9wZXJhdGlvblR5cGUgPT09ICdjcmVhdGUnICYmXG4gICAgICBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBpZiAoc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuICAgICAgfVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGZpbGVzUHJvY2Vzc2VkLFxuICAgIHN1Y2Nlc3NDcmVhdGUsXG4gICAgc3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzQ3JlYXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcyxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc1Nob3dQcm9jZXNzRmlsZXMpIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBga25vd2xlZGdlLWJhc2Uuc3RhdHVzOiR7YWdlbnRCeUlkID8gYWdlbnRCeUlkPy5pZCA6IHN1Y2Nlc3NDcmVhdGU/LmlkPy50b1N0cmluZygpfWBcbiAgICAgIGlmICgkX3NjKSB7XG4gICAgICAgIGlmIChpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgICAkX3NjPy5zdWJzY3JpYmVIYW5kbGVyKGNoYW5uZWwsIHdlYlNvY2tldEZ1bmN0aW9uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG1vZGVsRGF0YSA9IHtcbiAgICAgICAgICAgIG1vZGVsX2hhc2g6IGNoYW5uZWwsXG4gICAgICAgICAgICBhY3Rpb246ICRfc2M/LmFjdGlvblR5cGU/LlNVQlNDUklCRSxcbiAgICAgICAgICB9XG4gICAgICAgICAgJF9zYz8udXBkYXRlQ29ubmVjdGlvbk1vZGVsKG1vZGVsRGF0YSwgY2hhbm5lbCwgdXNlciwgdXNlciwgJF9zYy5jaGFubmVsVHlwZT8uTU9ERUxfQ0hBTk5FTClcbiAgICAgICAgICBzZXRJc1N1YnNjcmliZWQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzU2hvd1Byb2Nlc3NGaWxlcywgaXNTdWJzY3JpYmVkLCAkX3NjLCBhZ2VudEJ5SWQsIHN1Y2Nlc3NDcmVhdGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIWFnZW50TW9kZWxzLmxlbmd0aCkgcmV0dXJuXG4gICAgaWYgKGFnZW50TG9hZGluZyAmJiAhcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50KSByZXR1cm5cblxuICAgIGNvbnN0IGFwcGx5RWRpdGluZ0FnZW50ID0gKHNvdXJjZTogYW55KSA9PiB7XG4gICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdjdXN0b20nIHx8ICF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICB9LCAzMDAwKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgc2VsZWN0ZWRDb25uZWN0b3JzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgIGxldCBjb25uZWN0b3JTdGF0ZXM6IEFnZW50Q29ubmVjdG9yU25hcHNob3RbXSA9IFtdXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjb25uZWN0b3JzID0gYXdhaXQgZ2V0QWdlbnRDb25uZWN0b3JzKHNvdXJjZS5pZC50b1N0cmluZygpKVxuICAgICAgICAgIHNlbGVjdGVkQ29ubmVjdG9ycyA9IGNvbm5lY3RvcnNcbiAgICAgICAgICAgIC5maWx0ZXIoY29ubmVjdG9yID0+IGNvbm5lY3Rvci5lbmFibGVkX2Zvcl9hZ2VudClcbiAgICAgICAgICAgIC5tYXAoY29ubmVjdG9yID0+IGNvbm5lY3Rvci5zbHVnKVxuICAgICAgICAgIGNvbm5lY3RvclN0YXRlcyA9IGNvbm5lY3RvcnMubWFwKGNvbm5lY3RvciA9PiAoe1xuICAgICAgICAgICAgc2x1ZzogY29ubmVjdG9yLnNsdWcsXG4gICAgICAgICAgICB1c2VyX2F1dGhvcml6ZWQ6IGNvbm5lY3Rvci51c2VyX2F1dGhvcml6ZWQsXG4gICAgICAgICAgICByZXF1aXJlc19hdXRoOiBjb25uZWN0b3IucmVxdWlyZXNfYXV0aCxcbiAgICAgICAgICAgIGVuYWJsZWRfZm9yX2FnZW50OiBjb25uZWN0b3IuZW5hYmxlZF9mb3JfYWdlbnQsXG4gICAgICAgICAgfSkpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgYWdlbnQgY29ubmVjdG9yczonLCBlcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IGFnZW50VmFsdWVzVG9TZXQgPSBidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbChzb3VyY2UsIGFnZW50TW9kZWxzLCBwcmV2KVxuICAgICAgICAgIGNvbnN0IG5leHRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAuLi5hZ2VudFZhbHVlc1RvU2V0LFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAuLi5hZ2VudFZhbHVlc1RvU2V0LmFjdGlvbnMsXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29ubmVjdG9ycyxcbiAgICAgICAgICAgICAgY29ubmVjdG9yU3RhdGVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQgPSBuZXh0VmFsdWVzXG4gICAgICAgICAgcmV0dXJuIG5leHRWYWx1ZXNcbiAgICAgICAgfSlcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICBpZiAocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9KSgpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHByZWZldGNoZWQgPSBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnRcbiAgICBpZiAocHJlZmV0Y2hlZCkge1xuICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYXBwbHlFZGl0aW5nQWdlbnQocHJlZmV0Y2hlZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhZ2VudEJ5SWQgJiYgIWFnZW50TG9hZGluZyAmJiBhZ2VudE1vZGVscy5sZW5ndGgpIHtcbiAgICAgIGFwcGx5RWRpdGluZ0FnZW50KGFnZW50QnlJZClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNMb2FkaW5nICYmICFhZ2VudExvYWRpbmcgJiYgIWFnZW50QnlJZCAmJiAhbW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSB7XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgYWlNb2RlbDogYWdlbnRNb2RlbHNbMF0sXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gICAgLy8gTm8gaW5jbHVpciBgaXNMb2FkaW5nYCBlbiBkZXBzOiBhbCB0ZXJtaW5hciBnZXRBZ2VudENvbm5lY3RvcnMgc2UgaGFjZSBzZXRJc0xvYWRpbmcoZmFsc2UpIHlcbiAgICAvLyBzZSByZS1lamVjdXRhcsOtYSBlbCBlZmVjdG8gY29uIGVsIG1pc21vIGFnZW50QnlJZCwgZHVwbGljYW5kbyBsYSBxdWVyeSBkZSBjb25uZWN0b3JzLlxuICB9LCBbYWdlbnRCeUlkLCBpc09wZW4sIGFnZW50TG9hZGluZywgYWdlbnRNb2RlbHM/Lmxlbmd0aCwgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlcnJvckdldEFnZW50QnlJZCkge1xuICAgICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIikge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKGVycm9yR2V0QWdlbnRCeUlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH0sIDMwMDApXG4gICAgfVxuICB9LCBbZXJyb3JHZXRBZ2VudEJ5SWRdKVxuXG4gIGNvbnN0IHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHk/LmNsaWVudHMgfHwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMuc29tZShjbGllbnQgPT4gY2xpZW50LmlzX2FjdGl2ZSA9PT0gZmFsc2UgfHwgY2xpZW50LmlzX2RlbGV0ZWQgPT09IHRydWUpXG4gIH0sIFttb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50c10pXG5cbiAgY29uc3QgaXNTYXZlQnV0dG9uRGlzYWJsZWQgPVxuICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKG1vZGFsVmFsdWVzKSB8fFxuICAgIHZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUoKSB8fFxuICAgIGlzTG9hZGluZyB8fFxuICAgIGlzTG9hZGluZ0tub3dsZWRnZSB8fFxuICAgIGlzTG9hZGluZ0NyZWF0ZSB8fFxuICAgIGlzTG9hZGluZ1VwZGF0ZUFjY2VzcyB8fFxuICAgIHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyB8fFxuICAgIGhhc0ZpbGVFcnJvcnNcblxuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZSA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlkKSB7XG4gICAgICAvLyBFeGlzdGluZyBhZ2VudFxuICAgICAgdG9nZ2xlRmF2b3JpdGUoXG4gICAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgICAgIHVwZGF0ZWRBZ2VudCA9PiB7XG4gICAgICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICBpc19mYXZvcml0ZTogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAvLyBBY3R1YWxpemFyIGVsIGVzdGFkbyBkZSBhZ2VudGVzIHkgb3JkZW5hciBjdWFuZG8gc2UgaGFjZSBkZXNkZSBlbCBtb2RhbCBBQk1cbiAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlKHVwZGF0ZWRBZ2VudCwgdHJ1ZSlcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0RmF2b3JpdGUsIHtcbiAgICAgICAgICAgIG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IGFnZW50XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgICAgaXNfZmF2b3JpdGU6ICFwcmV2LmdlbmVyYWwuaXNfZmF2b3JpdGUsXG4gICAgICAgIH0sXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3BlbiB8fCAoIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlKSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQUFNV3JhcHBlciByZWY9e21vZGFsUmVmfSB0YWJJbmRleD17LTF9PlxuICAgICAgICB7aXNMb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ0FBTVdyYXBwZXJTcGlubmVyPlxuICAgICAgICAgICAgPFNDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgICAgICA8U3Bpbm5lckxvdHRpZSBzaXplPVwiODBweFwiIGNvbG9yPVwicHJpbWFyeVwiIC8+XG4gICAgICAgICAgICA8L1NDQUFNV3JhcHBlclNwaW5uZXJDb250ZW50PlxuICAgICAgICAgIDwvU0NBQU1XcmFwcGVyU3Bpbm5lcj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2lzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA/IChcbiAgICAgICAgICAgICAgPEFibUxvYWRlckZpbGVzXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM9e21vZGFsVmFsdWVzLmtub3dsZWRnZX1cbiAgICAgICAgICAgICAgICBsYWJlbD17dChgcHJvY2Vzc2luZ0tub3dsZWRnZS4ke21vZGFsVmFsdWVzLmlzRWRpdGluZyA/ICdkZXNjcmlwdGlvblVwZGF0ZScgOiAnZGVzY3JpcHRpb25DcmVhdGUnfWApfVxuICAgICAgICAgICAgICAgIG9uVGltZW91dD17aGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0KCdnZW5lcmFsU2VjdGlvbi5yZW1vdmVGYXZvcml0ZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogdCgnZ2VuZXJhbFNlY3Rpb24uYWRkRmF2b3JpdGUnKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckZhdm9yaXRlIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUZhdm9yaXRlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICcjYTZhNmE2J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD17bW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlID8gJyNGRkM2MjQnIDogJ25vbmUnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29saWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcnIDogJ3N0YXItZmF2b3JpdGUtaWNvbid9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJGYXZvcml0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJUaXRsZT57bW9kYWxWYWx1ZXM/LmlzRWRpdGluZyA/IHQoJ2VkaXRBZ2VudCcpIDogdCgnbmV3QWdlbnQnKX08L1NDQUFNSGVhZGVyVGl0bGU+XG4gICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyTGVmdD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckNsb3NlQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuY2FuY2VsTW9kYWwpXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzTG9hZGluZ0tub3dsZWRnZSB8fCBpc0xvYWRpbmdDcmVhdGUgfHwgaXNMb2FkaW5nVXBkYXRlQWNjZXNzfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjYTZhNmE2XCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckNsb3NlQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFNDQUFNQ29udGVudCBoYXNTY3JvbGw9e3NlY3Rpb24gIT09ICdrbm93bGVkZ2UnfT5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdnZW5lcmFsJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdnZW5lcmFsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtZ2VuZXJhbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnZ2VuZXJhbCcgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnZ2VuZXJhbCd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2dlbmVyYWxTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAna25vd2xlZGdlJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdrbm93bGVkZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImFibS1hZ2VudC1tb2RhbC1rbm93bGVkZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEJyYWluSWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2Ake3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2tub3dsZWRnZSd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2tub3dsZWRnZVNlY3Rpb24udGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW1UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdhY3Rpb25zJ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWN0aW9uQ2hhbmdlKCdhY3Rpb25zJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwtYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2F0ZWdvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAnYWN0aW9ucycgPyAncmdiYSg2MywgNjMsIDYzLCAxKScgOiAncmdiYSgxNjYsIDE2NiwgMTY2LCAxKSd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVRpdGxlIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWN0aW9ucyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2FjdGlvbnNTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWNjZXNzaWJpbGl0eSd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnYWNjZXNzaWJpbGl0eScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2liaWxpdHlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVRhYicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudHNFcnJvcicpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1FcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWxlcnQgY29sb3I9XCIjQzcwNTA1XCIgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFyPlxuICAgICAgICAgICAgICAgICAge1NlY3Rpb25CeUtleVtzZWN0aW9uXSh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogbW9kYWxWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRNb2RlbHMsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG5ld0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2U6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICBvblJlbW92ZU5ld0tub3dsZWRnZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlOiBzZXRIYXNGaWxlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9TQ0FBTUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQUFNRm9vdGVyIGlzRWRpdGluZz17ISFtb2RhbFZhbHVlcz8uaXNFZGl0aW5nICYmICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGV9PlxuICAgICAgICAgICAgICAgICAgeyEhbW9kYWxWYWx1ZXM/LmlzRWRpdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbldpdGhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TW9kYWxEZWxldGUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc31cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFdyYXBwZXJDZW50ZXJJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaCBjb2xvcj1cIiMwOGNcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZUFnZW50Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvV3JhcHBlckNlbnRlckljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMjRweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNhdmVCdXR0b24gaXNEaXNhYmxlZD17aXNTYXZlQnV0dG9uRGlzYWJsZWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbihudWxsLCAnY3JlYXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTYXZlQnV0dG9uRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ3NhdmVDaGFuZ2VzJykgOiB0KCdjcmVhdGVBZ2VudExhYmVsQnV0dG9uJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9DVUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNhdmVCdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1NDQUFNRm9vdGVyPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDQUFNV3JhcHBlcj5cbiAgICAgIHtzaG93TW9kYWxEZWxldGUgJiYgKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RhbERlbGV0ZShmYWxzZSl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IChwcm9wczogYW55KSA9PiBoYW5kbGVDb25maXJtQWN0aW9uKHByb3BzLCAnZGVsZXRlJyksXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXt7IHRpdGxlOiBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUsIGlkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkIH19XG4gICAgICAgICAgYWN0aW9uPVwiYWdlbnRcIlxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBzZWxlY3RvclxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDekUsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFTQyxRQUFRLFFBQVEsMkNBQTJDO0FBQ3BFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsYUFBYSxRQUFRLHVEQUF1RDtBQUNyRixTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLFNBQVNDLHVCQUF1QixRQUFRLDRFQUE0RTtBQUNw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TTtvQkFBQ0ssS0FBSyxFQUFFLEVBQUc7b0JBQUNDLE1BQU0sRUFBRTtrQkFBRyxDQUFFLENBQUMsRUFDNUM1VixDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUFBLENBQ0E7Y0FBQyxDQUNaO1lBQUMsQ0FDTSxDQUNwQixlQUNIbkYsSUFBQTtjQUFLOFYsS0FBSyxFQUFFO2dCQUFFOEYsT0FBTyxFQUFFLE1BQU07Z0JBQUVDLEdBQUcsRUFBRTtjQUFPLENBQUU7Y0FBQXZCLFFBQUEsZUFDM0N0YSxJQUFBLENBQUN0QixlQUFlO2dCQUFDb2QsVUFBVSxFQUFFaEMsb0JBQXFCO2dCQUFBUSxRQUFBLGVBQ2hEdGEsSUFBQSxDQUFDcEQsUUFBUTtrQkFDUHFlLE9BQU8sRUFBQyxXQUFXO2tCQUNuQjlYLElBQUksRUFBQyxRQUFRO2tCQUNia1gsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtvQkFDYjFHLG9CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7a0JBQ3JDLENBQUU7a0JBQ0Z5SCxRQUFRLEVBQUV0QixvQkFBcUI7a0JBQUFRLFFBQUEsRUFFOUIzUixXQUFXLENBQUNuSSxTQUFTLEdBQUcyRSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUdBLENBQUMsQ0FBQyx3QkFBd0I7Z0JBQUMsQ0FDL0Q7Y0FBQyxDQUNJO1lBQUMsQ0FDZixDQUFDO1VBQUEsQ0FDSyxDQUFDO1FBQUEsQ0FDZDtNQUNILENBQ0Q7SUFDSCxDQUNXLENBQUMsRUFDZDRDLGVBQWUsaUJBQ2QvSCxJQUFBLENBQUNSLG1CQUFtQjtNQUNsQnVjLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUS9ULGtCQUFrQixDQUFDLEtBQUssQ0FBQztNQUFBLENBQUM7TUFDekNnVSxRQUFRLEVBQUU7UUFDUnJJLG1CQUFtQixFQUFFLFNBQXJCQSxtQkFBbUJBLENBQUc5UixLQUFVO1VBQUEsT0FBSzhSLG9CQUFtQixDQUFDOVIsS0FBSyxFQUFFLFFBQVEsQ0FBQztRQUFBO01BQzNFLENBQUU7TUFDRmlTLElBQUksRUFBRTtRQUFFK0csS0FBSyxFQUFFbFMsV0FBVyxDQUFDakksT0FBTyxDQUFDQyxJQUFJO1FBQUVNLEVBQUUsRUFBRTBILFdBQVcsQ0FBQ2pJLE9BQU8sQ0FBQ087TUFBRyxDQUFFO01BQ3RFOFMsTUFBTSxFQUFDO0lBQU8sQ0FDZixDQUNGO0VBQUEsQ0FDTyxDQUFDLEVBQ1hyTyxRQUNGLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119
1407
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VDYWxsYmFjayIsImNyZWF0ZVBvcnRhbCIsInVzZVRyYW5zbGF0aW9uIiwiQ1VCdXR0b24iLCJDYXRlZ29yeSIsIkFsZXJ0IiwiVHJhc2giLCJTdGFyIiwiQ3Jvc3MiLCJTcGlubmVyTG90dGllIiwiVG9vbHRpcCIsIkFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIiwiQmFja2Ryb3AiLCJ1c2VVc2VyIiwiQWNjZXNzaWJpbGl0eUljb24iLCJCcmFpbkljb24iLCJ1c2VBZ2VudE1vZGVsIiwidXNlR2V0QWdlbnRCeUlkIiwiQWJtR2VuZXJhbFNlY3Rpb24iLCJBYm1Lbm93bGVkZ2VTZWN0aW9uIiwiU0NBQU1Db250ZW50IiwiU0NBQU1Gb290ZXIiLCJTQ0FBTUhlYWRlciIsIlNDQUFNSGVhZGVyVGl0bGUiLCJTQ0FBTUhlYWRlckxlZnQiLCJTQ0FBTUhlYWRlckZhdm9yaXRlIiwiU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbiIsIlNDQUFNU2lkZWJhciIsIlNDQUFNV3JhcHBlciIsIlNDQUFNU2lkZWJhckl0ZW0iLCJTQ0FBTVNpZGViYXJJdGVtVGl0bGUiLCJTQ0FBTURlbGV0ZUJ1dHRvbiIsIlNDQUFNU2F2ZUJ1dHRvbiIsIlNDQUFNV3JhcHBlclNwaW5uZXIiLCJTQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudCIsIlNDQUFNU2lkZWJhckl0ZW1FcnJvciIsInVzZUNyZWF0ZUFnZW50IiwidXNlRGVsZXRlQWdlbnQiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlVXBkYXRlQWdlbnQiLCJ1c2VLbm93bGVkZ2VPcGVyYXRpb25zIiwiQWJtTG9hZGVyRmlsZXMiLCJXcmFwcGVyQ2VudGVySWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsInVzZUFjY2Vzc0NsaWVudCIsInVzZVRvZ2dsZUZhdm9yaXRlIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiaW5pdGlhbFZhbHVlcyIsIk9iamVjdCIsImZyZWV6ZSIsImlzRWRpdGluZyIsImtub3dsZWRnZSIsImdlbmVyYWwiLCJuYW1lIiwiZW1vamkiLCJpbnRyb2R1Y3Rpb24iLCJpbnB1dFBsYWNlaG9sZGVyIiwiaXNBY3RpdmUiLCJhaU1vZGVsIiwiaWQiLCJ1c2VyUHJvbXB0Iiwia25vd2xlZGdlQmFzZXMiLCJpc19mYXZvcml0ZSIsImFjY2Vzc2liaWxpdHkiLCJhY2Nlc3NUeXBlIiwiY2xpZW50cyIsIlNlY3Rpb25CeUtleSIsInByb3BzIiwiX29iamVjdFNwcmVhZCIsInZhbGlkYXRlRmllbGRWYWx1ZXMiLCJ2YWx1ZVRvVmFsaWRhdGUiLCJidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbCIsImFnZW50QnlJZCIsImFnZW50TW9kZWxzIiwicHJldiIsIl9hZ2VudEJ5SWQka25vd2xlZGdlQiIsIl9hZ2VudEJ5SWQkY2xpZW50cyIsImFnZW50TW9kZWwiLCJmaW5kIiwibW9kZWwiLCJtb2RlbEFpSWQiLCJjcmVhdGVkX2J5IiwiY3JlYXRlZEJ5IiwibWFwIiwiayIsImZpbGUiLCJGaWxlIiwiZmlsZW5hbWUiLCJ0b1N0cmluZyIsInNpemUiLCJmaWxlX3NpemVfYnl0ZXMiLCJ0eXBlIiwib3JpZ2luYWxfZmlsZV90eXBlIiwic3RhdHVzIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsImFjY2VzcyIsImNsaWVudCIsIl9jbGllbnQkaWQiLCJfY2xpZW50JGlzX2FjdGl2ZSIsIl9jbGllbnQkaXNfZGVsZXRlZCIsImlzX2FjdGl2ZSIsImlzX2RlbGV0ZWQiLCJBYm1BZ2VudE1vZGFsIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX21vZGFsVmFsdWVzJGFjY2Vzc2liMiIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsMyIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsNCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsNSIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsNiIsImFkZEFnZW50IiwidXBkYXRlQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50RmF2b3JpdGUiLCJzZWxlY3RGaXJzdEFnZW50IiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiY3VycmVudFNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50IiwiX3VzZVRvZ2dsZUZhdm9yaXRlIiwidG9nZ2xlRmF2b3JpdGUiLCJzZWxlY3RvciIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc1N1YnNjcmliZWQiLCJzZXRJc1N1YnNjcmliZWQiLCJtb2RhbFJlZiIsImhhc1BlbmRpbmdGaWxlc1JlZiIsImFjdGlvbnNUb0ZpbGVzIiwidG9EZWxldGUiLCJ0b1VwbG9hZCIsImFjY2Vzc1VwZGF0ZUNvbnRleHQiLCJpc0Zyb21DcmVhdGlvbiIsImlzRnJvbUVkaXRpbmciLCJoYXNBY3Rpb25GaWxlcyIsIm9wZXJhdGlvblR5cGUiLCJoYXNCZWVuQ2FsbGVkIiwiYWNjZXNzSGFuZGxlZFJlZiIsImFnZW50Q3JlYXRlZFJlZiIsInBlbmRpbmdJbml0aWFsU2VjdGlvblJlZiIsInByZWZldGNoZWRBZ2VudEJ5SWRSZWYiLCJmaWxlc0ZpbmlzaGVkUmVmIiwicHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImZpbGVzUHJvY2Vzc2VkIiwic2V0RmlsZXNQcm9jZXNzZWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd01vZGFsRGVsZXRlIiwic2V0U2hvd01vZGFsRGVsZXRlIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZWN0aW9uIiwic2V0U2VjdGlvbiIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJtb2RhbFZhbHVlcyIsInNldE1vZGFsVmFsdWVzIiwiX3VzZUdldEFnZW50QnlJZCIsImFnZW50TG9hZGluZyIsImxvYWRpbmciLCJoYW5kbGVHZXRBZ2VudEJ5SWQiLCJoYW5kbGVDbGVhbkFnZW50IiwiZXJyb3JHZXRBZ2VudEJ5SWQiLCJlcnJvciIsIl91c2VBZ2VudE1vZGVsIiwiZ2V0QWxsQWdlbnRNb2RlbHMiLCJmaXJzdFZhbHVlQWdlbnQiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNTaG93UHJvY2Vzc0ZpbGVzIiwic2V0SXNTaG93UHJvY2Vzc0ZpbGVzIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImhhc0ZpbGVFcnJvcnMiLCJzZXRIYXNGaWxlRXJyb3JzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJfdXNlRGVsZXRlQWdlbnQiLCJoYW5kbGVEZWxldGVBZ2VudCIsInN1Y2Nlc3NEZWxldGUiLCJzdWNjZXNzIiwicmVzZXRTdWNjZXNzIiwiX3VzZVVwZGF0ZUFnZW50IiwiaGFuZGxlVXBkYXRlQWdlbnQiLCJzdWNjZXNzVXBkYXRlIiwicmVzZXRTdWNjZXNzVXBkYXRlIiwiX3VzZUNyZWF0ZUFnZW50IiwiaGFuZGxlQ3JlYXRlQWdlbnQiLCJpc0xvYWRpbmdDcmVhdGUiLCJzdWNjZXNzQ3JlYXRlIiwicmVzZXRTdWNjZXNzQ3JlYXRlIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlS25vd2xlZGdlT3BlcmF0aW8iLCJoYW5kbGVDcmVhdGVLbm93bGVkZ2VzIiwiaGFuZGxlRGVsZXRlS25vd2xlZGdlcyIsImhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMiLCJpc0xvYWRpbmdLbm93bGVkZ2UiLCJlcnJvcktub3dsZWRnZSIsInN1Y2Nlc3NLbm93bGVkZ2VEZWxldGUiLCJoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlIiwiaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlIiwiX3VzZUFjY2Vzc0NsaWVudCIsImhhbmRsZUFjY2Vzc0NsaWVudCIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJpc0xvYWRpbmdVcGRhdGVBY2Nlc3MiLCJyZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJoYW5kbGVSZXNldFN1Y2Nlc3MiLCJhcmVDbGllbnRzQXJyYXlzRXF1YWwiLCJjbGllbnRzMSIsImNsaWVudHMyIiwibGVuZ3RoIiwiY2xpZW50czFJZHMiLCJjIiwiY2xpZW50SWQiLCJzb3J0IiwiY2xpZW50czJJZHMiLCJldmVyeSIsImluZGV4IiwiaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIiLCJjdXJyZW50IiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsInZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUiLCJfZmlyc3RWYWx1ZUFnZW50JGN1cnIyIiwiX21vZGFsVmFsdWVzJGdlbmVyYWwkIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyMyIsIl9tb2RhbFZhbHVlcyRrbm93bGVkZyIsIl9maXJzdFZhbHVlQWdlbnQkY3VycjQiLCJfbW9kYWxWYWx1ZXMka25vd2xlZGcyIiwiX2ZpcnN0VmFsdWVBZ2VudCRjdXJyNSIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZSIsIl9hY3Rpb25zVG9GaWxlcyRjdXJyZTIiLCJ0b1VwZGF0ZSIsImhhc0FueVZhbHVlRm9yQ3JlYXRpb24iLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCQyIiwiX2FnZW50TW9kZWxzJCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsJDMiLCJpc0RlZmF1bHRBaU1vZGVsIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImlzRGVmYXVsdFVzZXJQcm9tcHQiLCJoYXNOYW1lIiwidHJpbSIsImhhc0Vtb2ppIiwiaGFzSW50cm9kdWN0aW9uIiwiaGFzSW5wdXRQbGFjZWhvbGRlciIsImhhc1VzZXJQcm9tcHQiLCJoYXNLbm93bGVkZ2UiLCJoYXNDdXN0b21BaU1vZGVsIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0NoYW5nZXNGb3JFZGl0aW5nIiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50IiwiYWdlbnRJZCIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJ1cGRhdGVkQWdlbnQiLCJoYW5kbGVDbG9zZSIsImNvbmZpcm1NZXNzYWdlIiwid2luZG93IiwiY29uZmlybSIsImhhbmRsZUJhY2tkcm9wQ2xpY2siLCJldmVudCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVTZWN0aW9uQ2hhbmdlIiwibmV3U2VjdGlvbiIsInRhYlNlY3Rpb24iLCJvcHRpb24iLCJoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyIsIl9yZWYyIiwia2V5IiwidmFsdWUiLCJkZWxldGVLbm93bGVkZ2UiLCJfYWN0aW9uc1RvRmlsZXMkY3VycmUzIiwicHVzaCIsImFwcGx5IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZmlsZXNQcmV2SWRzIiwiU2V0IiwibmV3RmlsZXMiLCJmaWx0ZXIiLCJoYXMiLCJ2YWx1ZUlkcyIsImNvbmNhdCIsImtub3dsZWRnZUZpbGVzIiwiX2RlZmluZVByb3BlcnR5IiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsIl9yZWYzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0IiwiYWN0aW9uIiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhYnJ1cHQiLCJjb25maXJtQWN0aW9uIiwic3RvcCIsIl94IiwiX3gyIiwiYXJndW1lbnRzIiwiaGFuZGxlU2V0QWdlbnRWYWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzIiwiX2FnZW50VmFsdWVzJHZhbHVlczMiLCJhZ2VudFZhbHVlcyIsImRldGFpbCIsImluaXRpYWxTZWN0aW9uIiwiaW5jbHVkZXMiLCJ2YWx1ZXMiLCJfYWdlbnRWYWx1ZXMkdmFsdWVzMiIsInByZWZldGNoZWRBZ2VudEJ5SWQiLCJuZXh0VmFsdWVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfZG9jdW1lbnQiLCJib2R5Iiwib3JpZ2luYWxPdmVyZmxvdyIsInN0eWxlIiwib3ZlcmZsb3ciLCJoYW5kbGVCZWZvcmVVbmxvYWQiLCJwcmV2ZW50RGVmYXVsdCIsInJldHVyblZhbHVlIiwicHJvbWlzZXMiLCJmaWxlc1RvRGVsZXRlIiwiZmlsZXNUb0NyZWF0ZSIsImFnZW50V2l0aEZhdm9yaXRlIiwiYWdlbnRGb3JUb2dnbGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFsbCIsImZpbGVzIiwiYWlDaGF0RmF2b3JpdGUiLCJmaWxlc1RvVXBsb2FkIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlUHJvY2Vzc0ZpbGVzVGltZW91dCIsIndlYlNvY2tldEZ1bmN0aW9uIiwiX3JlZjQiLCJtb2RlbERhdGEiLCJtb2RlbF9kYXRhIiwiZmlsZVN0YXR1cyIsInVwZGF0ZWRLbm93bGVkZ2UiLCJrbm93bGVkZ2VfYmFzZV9pZCIsImhhc1BlbmRpbmdGaWxlcyIsInNvbWUiLCJoYXNFcnJvckZpbGVzIiwicHJldkNvdW50IiwiY29udGV4dCIsImFnZW50VG9BZGQiLCJfc3VjY2Vzc0NyZWF0ZSRpZCIsImNoYW5uZWwiLCIkX3NjIiwiXyRfc2MiLCJzdWJzY3JpYmVIYW5kbGVyIiwiXyRfc2MyIiwiXyRfc2MzIiwiXyRfc2MkY2hhbm5lbFR5cGUiLCJtb2RlbF9oYXNoIiwiYWN0aW9uVHlwZSIsIlNVQlNDUklCRSIsInVwZGF0ZUNvbm5lY3Rpb25Nb2RlbCIsImNoYW5uZWxUeXBlIiwiTU9ERUxfQ0hBTk5FTCIsImFwcGx5RWRpdGluZ0FnZW50Iiwic291cmNlIiwic2V0VGltZW91dCIsImFnZW50VmFsdWVzVG9TZXQiLCJwcmVmZXRjaGVkIiwic2hvdWxkRGlzYWJsZVNhdmVGb3JDbGllbnRzIiwiX21vZGFsVmFsdWVzJGFjY2Vzc2liIiwiaGFuZGxlVG9nZ2xlRmF2b3JpdGUiLCJfbW9kYWxWYWx1ZXMkZ2VuZXJhbCIsIl9tb2RhbFZhbHVlcyRnZW5lcmFsMiIsImNyZWF0ZSIsImVkaXQiLCJ6SW5kZXgiLCJvbkNsaWNrIiwiY2hpbGRyZW4iLCJyZWYiLCJ0YWJJbmRleCIsImNvbG9yIiwiYXR0YWNobWVudHMiLCJsYWJlbCIsIm9uVGltZW91dCIsInRpdGxlIiwid2lkdGgiLCJoZWlnaHQiLCJmaWxsIiwidmFyaWFudCIsImNsYXNzTmFtZSIsImNhbmNlbE1vZGFsIiwiZGlzYWJsZWQiLCJoYXNTY3JvbGwiLCJleGlzdGluZ0tub3dsZWRnZSIsIm5ld0tub3dsZWRnZSIsIm9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2UiLCJvblJlbW92ZU5ld0tub3dsZWRnZSIsIm9uRmlsZUVycm9yQ2hhbmdlIiwiY2hpbGRyZW5XaXRoSWNvbiIsImRpc3BsYXkiLCJnYXAiLCJpc0Rpc2FibGVkIiwib25DbG9zZSIsImhhbmRsZXJzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvb3JnYW5pc21zL0FibUFnZW50TW9kYWwvQWJtQWdlbnRNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYWxlcnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1jeWNsZSAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcblxuaW1wb3J0IHsgQ1VCdXR0b24gfSBmcm9tICdAcHJvamVjdGNvci9idXR0b24vbGliL2NvbXBvbmVudHMvQ1VCdXR0b24nXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NhdGVnb3J5J1xuaW1wb3J0IHsgQWxlcnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BbGVydCdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5pbXBvcnQgeyBTdGFyIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU3RhcidcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBTcGlubmVyTG90dGllIH0gZnJvbSAnQHByb2plY3Rjb3IvY29yLWNvbW1vbnMvbGliL2NvbXBvbmVudHMvc3Bpbm5lci1sb3R0aWUnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBBYm1BY2Nlc3NpYmlsaXR5U2VjdGlvbiB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibUFjY2Vzc2liaWxpdHlTZWN0aW9uL0FibUFjY2Vzc2liaWxpdHlTZWN0aW9uJ1xuaW1wb3J0IHsgQmFja2Ryb3AgfSBmcm9tICcuLi8uLi9hdG9tcy9CYWNrZHJvcCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgQWNjZXNzaWJpbGl0eUljb24sIEJyYWluSWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgdXNlQWdlbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlQWdlbnRNb2RlbCdcbmltcG9ydCB7IEFnZW50LCBBZ2VudE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyB1c2VHZXRBZ2VudEJ5SWQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudEJ5SWQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBBYm1HZW5lcmFsU2VjdGlvbiwgQWJtS25vd2xlZGdlU2VjdGlvbiB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uJ1xuaW1wb3J0IHsgTW9kYWxWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudE1vZGFsJ1xuaW1wb3J0IHtcbiAgU0NBQU1Db250ZW50LFxuICBTQ0FBTUZvb3RlcixcbiAgU0NBQU1IZWFkZXIsXG4gIFNDQUFNSGVhZGVyVGl0bGUsXG4gIFNDQUFNSGVhZGVyTGVmdCxcbiAgU0NBQU1IZWFkZXJGYXZvcml0ZSxcbiAgU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbixcbiAgU0NBQU1TaWRlYmFyLFxuICBTQ0FBTVdyYXBwZXIsXG4gIFNDQUFNU2lkZWJhckl0ZW0sXG4gIFNDQUFNU2lkZWJhckl0ZW1UaXRsZSxcbiAgU0NBQU1EZWxldGVCdXR0b24sXG4gIFNDQUFNU2F2ZUJ1dHRvbixcbiAgU0NBQU1XcmFwcGVyU3Bpbm5lcixcbiAgU0NBQU1XcmFwcGVyU3Bpbm5lckNvbnRlbnQsXG4gIFNDQUFNU2lkZWJhckl0ZW1FcnJvcixcbn0gZnJvbSAnLi9BYm1BZ2VudE1vZGFsLnN0eWxlcydcbmltcG9ydCB7IHVzZUNyZWF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VDcmVhdGVBZ2VudCdcbmltcG9ydCB7IHVzZURlbGV0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VEZWxldGVBZ2VudCdcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVwZGF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQWdlbnRNb2RlbC91c2VVcGRhdGVBZ2VudCdcbmltcG9ydCB7IHVzZUtub3dsZWRnZU9wZXJhdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VLbm93bGVkZ2UnXG5pbXBvcnQgeyBBYm1Mb2FkZXJGaWxlcyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9BYm1TZWN0aW9uL0FibUxvYWRlckZpbGVzJ1xuaW1wb3J0IHsgV3JhcHBlckNlbnRlckljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9XcmFwcGVyQ2VudGVySWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyB1c2VBY2Nlc3NDbGllbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VBY2Nlc3NDbGllbnQvdXNlQWNjZXNzQ2xpZW50J1xuaW1wb3J0IHsgdXNlVG9nZ2xlRmF2b3JpdGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcydcblxuY29uc3QgaW5pdGlhbFZhbHVlcyA9IE9iamVjdC5mcmVlemUoe1xuICBpc0VkaXRpbmc6IGZhbHNlLFxuICBrbm93bGVkZ2U6IFtdLFxuICBnZW5lcmFsOiB7XG4gICAgbmFtZTogJycsXG4gICAgZW1vamk6ICcnLFxuICAgIGludHJvZHVjdGlvbjogJycsXG4gICAgaW5wdXRQbGFjZWhvbGRlcjogJycsXG4gICAgaXNBY3RpdmU6IGZhbHNlLFxuICAgIGFpTW9kZWw6IG51bGwsXG4gICAgaWQ6IG51bGwsXG4gICAgdXNlclByb21wdDogbnVsbCxcbiAgICBrbm93bGVkZ2VCYXNlczogW10sXG4gICAgaXNfZmF2b3JpdGU6IGZhbHNlLFxuICB9LFxuICBhY2Nlc3NpYmlsaXR5OiB7XG4gICAgYWNjZXNzVHlwZTogJ2NvbXBhbnknLFxuICAgIGNsaWVudHM6IG51bGwsXG4gIH0sXG59KVxuXG50eXBlIEFibVNlY3Rpb24gPSAnZ2VuZXJhbCcgfCAna25vd2xlZGdlJyB8ICd0cmFpbmluZycgfCAndGVzdGluZycgfCAnYWNjZXNzaWJpbGl0eSdcblxuZXhwb3J0IGNvbnN0IFNlY3Rpb25CeUtleSA9IHtcbiAgZ2VuZXJhbDogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoe1xuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBkZWxldGVLbm93bGVkZ2UsXG4gICAgfToge1xuICAgICAga2V5OiBzdHJpbmdcbiAgICAgIHZhbHVlOiB1bmtub3duXG4gICAgICBkZWxldGVLbm93bGVkZ2U/OiBib29sZWFuXG4gICAgfSkgPT4gdm9pZFxuICAgIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW11cbiAgICBsb2FkaW5nOiBib29sZWFuXG4gIH0pID0+IDxBYm1HZW5lcmFsU2VjdGlvbiB7Li4ucHJvcHN9IC8+LFxuICBrbm93bGVkZ2U6IChwcm9wczoge1xuICAgIHZhbHVlczogTW9kYWxWYWx1ZXNcbiAgICBoYW5kbGVTZXRBZ2VudFZhbHVlczogKHsga2V5LCB2YWx1ZSB9OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9KSA9PiB2b2lkXG4gICAgZXhpc3RpbmdLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBuZXdLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBvblJlbW92ZUV4aXN0aW5nS25vd2xlZGdlOiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvblJlbW92ZU5ld0tub3dsZWRnZTogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25GaWxlRXJyb3JDaGFuZ2U6IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgfSkgPT4gPEFibUtub3dsZWRnZVNlY3Rpb24gey4uLnByb3BzfSAvPixcbiAgYWNjZXNzaWJpbGl0eTogKHByb3BzOiB7XG4gICAgdmFsdWVzOiBNb2RhbFZhbHVlc1xuICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiAoeyBrZXksIHZhbHVlIH06IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pID0+IHZvaWRcbiAgfSkgPT4gPEFibUFjY2Vzc2liaWxpdHlTZWN0aW9uIHsuLi5wcm9wc30gLz4sXG59XG5cbnR5cGUgQWJtQWdlbnRNb2RhbFByb3BzID0ge1xuICBhZGRBZ2VudDogKG5ld0FnZW50OiBBZ2VudCwgb3B0aW9ucz86IHsgbmF2aWdhdGVIb21lPzogYm9vbGVhbiB9KSA9PiB2b2lkXG4gIHJlbW92ZUFnZW50OiAoYWdlbnRJZDogbnVtYmVyIHwgc3RyaW5nKSA9PiB2b2lkXG4gIHVwZGF0ZUFnZW50OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICB1cGRhdGVBZ2VudEZhdm9yaXRlOiAodXBkYXRlZEFnZW50OiBBZ2VudCwgc2hvdWxkU29ydD86IGJvb2xlYW4pID0+IHZvaWRcbiAgc2VsZWN0Rmlyc3RBZ2VudDogKGFnZW50SWQ6IHN0cmluZykgPT4gdm9pZFxufVxuXG5jb25zdCB2YWxpZGF0ZUZpZWxkVmFsdWVzID0gKHZhbHVlVG9WYWxpZGF0ZTogTW9kYWxWYWx1ZXMpID0+IHtcbiAgaWYgKCF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC5uYW1lIHx8ICF2YWx1ZVRvVmFsaWRhdGUuZ2VuZXJhbC51c2VyUHJvbXB0KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqIE1pc21hIGVzdHJ1Y3R1cmEgcXVlIGVsIGVmZWN0byBxdWUgaGlkcmF0YSBkZXNkZSB1c2VHZXRBZ2VudEJ5SWQgKHRvZGFzIGxhcyBwZXN0YcOxYXMgZGVsIEFCTSkuICovXG5mdW5jdGlvbiBidWlsZEVkaXRpbmdNb2RhbFZhbHVlc0Zyb21BZ2VudERldGFpbChcbiAgYWdlbnRCeUlkOiBhbnksXG4gIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW10sXG4gIHByZXY6IE1vZGFsVmFsdWVzXG4pOiBNb2RhbFZhbHVlcyB7XG4gIGNvbnN0IGFnZW50TW9kZWwgPSBhZ2VudE1vZGVscy5maW5kKG1vZGVsID0+IG1vZGVsLmlkID09PSBhZ2VudEJ5SWQubW9kZWxBaUlkKVxuICByZXR1cm4ge1xuICAgIC4uLnByZXYsXG4gICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgIGdlbmVyYWw6IHtcbiAgICAgIGVtb2ppOiBhZ2VudEJ5SWQuZW1vamksXG4gICAgICBuYW1lOiBhZ2VudEJ5SWQubmFtZSxcbiAgICAgIGludHJvZHVjdGlvbjogYWdlbnRCeUlkLmludHJvZHVjdGlvbixcbiAgICAgIGlucHV0UGxhY2Vob2xkZXI6IGFnZW50QnlJZC5pbnB1dFBsYWNlaG9sZGVyLFxuICAgICAgaXNBY3RpdmU6IGFnZW50QnlJZC5pc0FjdGl2ZSxcbiAgICAgIGFpTW9kZWw6IGFnZW50TW9kZWwgfHwgbnVsbCxcbiAgICAgIGlkOiBhZ2VudEJ5SWQuaWQsXG4gICAgICB1c2VyUHJvbXB0OiBhZ2VudEJ5SWQudXNlclByb21wdCxcbiAgICAgIGtub3dsZWRnZUJhc2VzOiBbXSxcbiAgICAgIGlzX2Zhdm9yaXRlOiBhZ2VudEJ5SWQuaXNfZmF2b3JpdGUsXG4gICAgICBjcmVhdGVkX2J5OiBhZ2VudEJ5SWQuY3JlYXRlZEJ5LFxuICAgIH0sXG4gICAga25vd2xlZGdlOlxuICAgICAgYWdlbnRCeUlkLmtub3dsZWRnZUJhc2VzPy5tYXAoKGs6IGFueSkgPT4gKHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGsuZmlsZW5hbWUpLFxuICAgICAgICBpZDogay5pZC50b1N0cmluZygpLFxuICAgICAgICBuYW1lOiBrLmZpbGVuYW1lLFxuICAgICAgICBzaXplOiBrLmZpbGVfc2l6ZV9ieXRlcyB8fCAwLFxuICAgICAgICB0eXBlOiBrLm9yaWdpbmFsX2ZpbGVfdHlwZSxcbiAgICAgICAgc3RhdHVzOiBrLnN0YXR1cyxcbiAgICAgICAgdXJsX29yaWdpbmFsOiBrLnVybF9vcmlnaW5hbCB8fCB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IGsudXJsX3RodW1ibmFpbCB8fCB1bmRlZmluZWQsXG4gICAgICB9KSkgfHwgW10sXG4gICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgYWNjZXNzVHlwZTogYWdlbnRCeUlkLmFjY2VzcyxcbiAgICAgIGNsaWVudHM6XG4gICAgICAgIGFnZW50QnlJZC5jbGllbnRzPy5tYXAoKGNsaWVudDogYW55KSA9PiAoe1xuICAgICAgICAgIGlkOiBjbGllbnQuaWQ/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgbmFtZTogY2xpZW50Lm5hbWUsXG4gICAgICAgICAgaXNfYWN0aXZlOiBjbGllbnQuaXNfYWN0aXZlID8/IGZhbHNlLFxuICAgICAgICAgIGlzX2RlbGV0ZWQ6IGNsaWVudC5pc19kZWxldGVkID8/IGZhbHNlLFxuICAgICAgICB9KSkgfHwgbnVsbCxcbiAgICB9LFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBYm1BZ2VudE1vZGFsID0gKHtcbiAgYWRkQWdlbnQsXG4gIHVwZGF0ZUFnZW50LFxuICByZW1vdmVBZ2VudCxcbiAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgc2VsZWN0Rmlyc3RBZ2VudCxcbn06IEFibUFnZW50TW9kYWxQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIC8vIGNvbnN0ICRfc2M6IGFueSA9IG51bGxcbiAgY29uc3QgeyBhZ2VudDogY3VycmVudFNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgeyB0b2dnbGVGYXZvcml0ZSB9ID0gdXNlVG9nZ2xlRmF2b3JpdGUoKVxuICBjb25zdCBzZWxlY3RvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhYm0tYWdlbnQtbW9kYWwnKVxuICBjb25zdCBbaXNTdWJzY3JpYmVkLCBzZXRJc1N1YnNjcmliZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IG1vZGFsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBoYXNQZW5kaW5nRmlsZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFjdGlvbnNUb0ZpbGVzID0gdXNlUmVmPGFueT4oe1xuICAgIHRvRGVsZXRlOiBbXSxcbiAgICB0b1VwbG9hZDogW10sXG4gIH0pXG4gIGNvbnN0IGFjY2Vzc1VwZGF0ZUNvbnRleHQgPSB1c2VSZWY8e1xuICAgIGlzRnJvbUNyZWF0aW9uOiBib29sZWFuXG4gICAgaXNGcm9tRWRpdGluZzogYm9vbGVhblxuICAgIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScgfCAndXBkYXRlJyB8IG51bGxcbiAgICBoYXNCZWVuQ2FsbGVkPzogYm9vbGVhblxuICB9Pih7XG4gICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICB9KVxuICBjb25zdCBhY2Nlc3NIYW5kbGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBhZ2VudENyZWF0ZWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmID0gdXNlUmVmPEFibVNlY3Rpb24gfCBudWxsPihudWxsKVxuICBjb25zdCBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgZmlsZXNGaW5pc2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLy8gTWFyY2EgY3VhbmRvIGNlcnJhbW9zIGVsIGxvYWRlciBwb3IgZWwgdGltZW91dCBkZSBzZWd1cmlkYWQgZGUgYXJjaGl2b3MuXG4gIC8vIE1pZW50cmFzIGVzdMOpIGFjdGl2bywgbG9zIHVzZUVmZmVjdCBkZSBwb3N0LWd1YXJkYWRvIE5PIGRlYmVuIGRpc3BhcmFyXG4gIC8vIHNuYWNrYmFycyBkZSDDqXhpdG8gbmkgYXV0by1jZXJyYXIgZWwgbW9kYWwuXG4gIGNvbnN0IHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbZmlsZXNQcm9jZXNzZWQsIHNldEZpbGVzUHJvY2Vzc2VkXSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dNb2RhbERlbGV0ZSwgc2V0U2hvd01vZGFsRGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VjdGlvbiwgc2V0U2VjdGlvbl0gPSB1c2VTdGF0ZTxBYm1TZWN0aW9uPignZ2VuZXJhbCcpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsVmFsdWVzLCBzZXRNb2RhbFZhbHVlc10gPSB1c2VTdGF0ZTx7XG4gICAgZ2VuZXJhbDogYW55XG4gICAga25vd2xlZGdlOiBhbnlcbiAgICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgICBhY2Nlc3NpYmlsaXR5OiBhbnlcbiAgfT4oaW5pdGlhbFZhbHVlcylcbiAgY29uc3Qge1xuICAgIGxvYWRpbmc6IGFnZW50TG9hZGluZyxcbiAgICBoYW5kbGVHZXRBZ2VudEJ5SWQsXG4gICAgYWdlbnQ6IGFnZW50QnlJZCxcbiAgICBoYW5kbGVDbGVhbkFnZW50LFxuICAgIGVycm9yOiBlcnJvckdldEFnZW50QnlJZCxcbiAgfSA9IHVzZUdldEFnZW50QnlJZCgpXG4gIGNvbnN0IHsgYWdlbnRNb2RlbHMsIGdldEFsbEFnZW50TW9kZWxzIH0gPSB1c2VBZ2VudE1vZGVsKClcbiAgY29uc3QgZmlyc3RWYWx1ZUFnZW50ID0gdXNlUmVmPGFueT4obnVsbClcbiAgY29uc3QgW2lzU2hvd1Byb2Nlc3NGaWxlcywgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzRmlsZUVycm9ycywgc2V0SGFzRmlsZUVycm9yc10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG5cbiAgY29uc3QgeyBoYW5kbGVEZWxldGVBZ2VudCwgc3VjY2Vzczogc3VjY2Vzc0RlbGV0ZSwgcmVzZXRTdWNjZXNzIH0gPSB1c2VEZWxldGVBZ2VudCgpXG4gIGNvbnN0IHsgaGFuZGxlVXBkYXRlQWdlbnQsIHN1Y2Nlc3M6IHN1Y2Nlc3NVcGRhdGUsIHJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlIH0gPSB1c2VVcGRhdGVBZ2VudCgpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUFnZW50LFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nQ3JlYXRlLFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NDcmVhdGUsXG4gICAgcmVzZXRTdWNjZXNzOiByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gIH0gPSB1c2VDcmVhdGVBZ2VudCgpXG5cbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVBbmRDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nS25vd2xlZGdlLFxuICAgIGVycm9yOiBlcnJvcktub3dsZWRnZSxcbiAgICBzdWNjZXNzRGVsZXRlOiBzdWNjZXNzS25vd2xlZGdlRGVsZXRlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc1NhdmUsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICB9ID0gdXNlS25vd2xlZGdlT3BlcmF0aW9ucygpXG5cbiAgY29uc3Qge1xuICAgIGhhbmRsZUFjY2Vzc0NsaWVudCxcbiAgICBzdWNjZXNzOiBzdWNjZXNzVXBkYXRlQWNjZXNzLFxuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nVXBkYXRlQWNjZXNzLFxuICAgIGhhbmRsZVJlc2V0U3VjY2VzczogcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzLFxuICB9ID0gdXNlQWNjZXNzQ2xpZW50KClcblxuICBpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGFyZUNsaWVudHNBcnJheXNFcXVhbCA9IChjbGllbnRzMTogYW55W10gfCBudWxsLCBjbGllbnRzMjogYW55W10gfCBudWxsKSA9PiB7XG4gICAgaWYgKCFjbGllbnRzMSAmJiAhY2xpZW50czIpIHJldHVybiB0cnVlXG4gICAgaWYgKCFjbGllbnRzMSB8fCAhY2xpZW50czIpIHJldHVybiBmYWxzZVxuICAgIGlmIChjbGllbnRzMS5sZW5ndGggIT09IGNsaWVudHMyLmxlbmd0aCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBjbGllbnRzMUlkcyA9IGNsaWVudHMxLm1hcChjID0+IGMuY2xpZW50SWQpLnNvcnQoKVxuICAgIGNvbnN0IGNsaWVudHMySWRzID0gY2xpZW50czIubWFwKGMgPT4gYy5jbGllbnRJZCkuc29ydCgpXG5cbiAgICByZXR1cm4gY2xpZW50czFJZHMuZXZlcnkoKGlkLCBpbmRleCkgPT4gaWQgPT09IGNsaWVudHMySWRzW2luZGV4XSlcbiAgfVxuXG4gIGNvbnN0IGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkID0gKCkgPT4ge1xuICAgIGlmICghZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/LmFjY2Vzc2liaWxpdHkgfHwgIW1vZGFsVmFsdWVzPy5hY2Nlc3NpYmlsaXR5KSByZXR1cm4gdHJ1ZVxuXG4gICAgY29uc3QgYWNjZXNzVHlwZVNhbWUgPSBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZVxuICAgIGNvbnN0IGNsaWVudHNTYW1lID0gYXJlQ2xpZW50c0FycmF5c0VxdWFsKFxuICAgICAgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLFxuICAgICAgZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuYWNjZXNzaWJpbGl0eS5jbGllbnRzXG4gICAgKVxuXG4gICAgcmV0dXJuICFhY2Nlc3NUeXBlU2FtZSB8fCAhY2xpZW50c1NhbWVcbiAgfVxuXG4gIGNvbnN0IHZhbGlkYXRlQWdlbnRWYWx1ZXNJc1NhbWUgPSAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8uZ2VuZXJhbCB8fCAhbW9kYWxWYWx1ZXM/LmdlbmVyYWwpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIChcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwubmFtZSA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5uYW1lICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmVtb2ppID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmVtb2ppICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbiA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24gJiZcbiAgICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudC5nZW5lcmFsLmFpTW9kZWw/LmlkICYmXG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50LmdlbmVyYWwudXNlclByb21wdCAmJlxuICAgICAgKG1vZGFsVmFsdWVzLmtub3dsZWRnZT8ubGVuZ3RoID09PSBmaXJzdFZhbHVlQWdlbnQuY3VycmVudD8ua25vd2xlZGdlPy5sZW5ndGggfHxcbiAgICAgICAgKCFtb2RhbFZhbHVlcy5rbm93bGVkZ2U/Lmxlbmd0aCAmJiAhZmlyc3RWYWx1ZUFnZW50LmN1cnJlbnQ/Lmtub3dsZWRnZT8ubGVuZ3RoKSkgJiZcbiAgICAgICFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBkYXRlPy5sZW5ndGggJiZcbiAgICAgICFhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlPy5sZW5ndGggJiZcbiAgICAgICFoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzQW55VmFsdWVGb3JDcmVhdGlvbiA9ICgpID0+IHtcbiAgICBpZiAobW9kYWxWYWx1ZXMuaXNFZGl0aW5nKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGlzRGVmYXVsdEFpTW9kZWwgPSAhIWFnZW50TW9kZWxzLmxlbmd0aCAmJiBtb2RhbFZhbHVlcy5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBhZ2VudE1vZGVsc1swXT8uaWRcblxuICAgIGNvbnN0IGRlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gdCgnZ2VuZXJhbFNlY3Rpb24uaW5wdXRQbGFjZWhvbGRlcicpXG4gICAgY29uc3QgaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlciA9IG1vZGFsVmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gZGVmYXVsdElucHV0UGxhY2Vob2xkZXJcblxuICAgIGNvbnN0IGRlZmF1bHRVc2VyUHJvbXB0UGxhY2Vob2xkZXIgPSB0KCdnZW5lcmFsU2VjdGlvbi5pbml0aWFsUHJvbXB0UGxhY2Vob2xkZXInKVxuICAgIGNvbnN0IGlzRGVmYXVsdFVzZXJQcm9tcHQgPVxuICAgICAgbW9kYWxWYWx1ZXMuZ2VuZXJhbC51c2VyUHJvbXB0ID09PSBkZWZhdWx0VXNlclByb21wdFBsYWNlaG9sZGVyIHx8XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09ICcnIHx8XG4gICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09IG51bGxcblxuICAgIGNvbnN0IGhhc05hbWUgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUudHJpbSgpICE9PSAnJ1xuICAgIGNvbnN0IGhhc0Vtb2ppID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5lbW9qaS50cmltKCkgIT09ICcnXG4gICAgY29uc3QgaGFzSW50cm9kdWN0aW9uID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pbnRyb2R1Y3Rpb24udHJpbSgpICE9PSAnJ1xuICAgIGNvbnN0IGhhc0lucHV0UGxhY2Vob2xkZXIgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIudHJpbSgpICE9PSAnJyAmJiAhaXNEZWZhdWx0SW5wdXRQbGFjZWhvbGRlclxuICAgIGNvbnN0IGhhc1VzZXJQcm9tcHQgPSBtb2RhbFZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQ/LnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdFVzZXJQcm9tcHRcbiAgICBjb25zdCBoYXNLbm93bGVkZ2UgPSAhIW1vZGFsVmFsdWVzLmtub3dsZWRnZS5sZW5ndGhcbiAgICBjb25zdCBoYXNDdXN0b21BaU1vZGVsID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5haU1vZGVsICYmICFpc0RlZmF1bHRBaU1vZGVsXG4gICAgY29uc3QgaGFzQWNjZXNzaWJpbGl0eSA9IG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknXG5cbiAgICByZXR1cm4gKFxuICAgICAgaGFzTmFtZSB8fFxuICAgICAgaGFzRW1vamkgfHxcbiAgICAgIGhhc0ludHJvZHVjdGlvbiB8fFxuICAgICAgaGFzSW5wdXRQbGFjZWhvbGRlciB8fFxuICAgICAgaGFzVXNlclByb21wdCB8fFxuICAgICAgaGFzS25vd2xlZGdlIHx8XG4gICAgICBoYXNDdXN0b21BaU1vZGVsIHx8XG4gICAgICBoYXNBY2Nlc3NpYmlsaXR5XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFzQ2hhbmdlc0ZvckVkaXRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKCFtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIChcbiAgICAgICF2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lKCkgfHxcbiAgICAgICEhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggfHxcbiAgICAgICEhYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGhcbiAgICApXG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQ2hhbmdlcyA9ICgpID0+IHtcbiAgICByZXR1cm4gaGFzQW55VmFsdWVGb3JDcmVhdGlvbigpIHx8IGhhc0NoYW5nZXNGb3JFZGl0aW5nKClcbiAgfVxuXG4gIC8vIEhlbHBlciBwYXJhIG1hbmVqYXIgZWwgdG9nZ2xlIGRlIGZhdm9yaXRvIHkgYWN0dWFsaXphciBlbCBlc3RhZG8gY29uIG9yZGVuYW1pZW50b1xuICBjb25zdCBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ6IHN0cmluZywgYWdlbnQ6IEFnZW50LCBvblN1Y2Nlc3M/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZCwgb25FcnJvcj86ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHRvZ2dsZUZhdm9yaXRlKFxuICAgICAgICBhZ2VudElkLFxuICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgIC8vIEFjdHVhbGl6YXIgZWwgZXN0YWRvIGRlIGFnZW50ZXMgY29uIGVsIHJlc3VsdGFkbyBkZWwgc2Vydmlkb3IgeSBvcmRlbmFyXG4gICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZSh1cGRhdGVkQWdlbnQsIHRydWUpXG4gICAgICAgICAgaWYgKG9uU3VjY2Vzcykge1xuICAgICAgICAgICAgb25TdWNjZXNzKHVwZGF0ZWRBZ2VudClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAob25FcnJvcikge1xuICAgICAgICAgICAgb25FcnJvcigpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZ2VudC5pc19mYXZvcml0ZVxuICAgICAgKVxuICAgIH0sXG4gICAgW3RvZ2dsZUZhdm9yaXRlLCB1cGRhdGVBZ2VudEZhdm9yaXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKGhhc1BlbmRpbmdDaGFuZ2VzKCkgJiYgIXN1Y2Nlc3NDcmVhdGUgJiYgIXN1Y2Nlc3NVcGRhdGUgJiYgIXN1Y2Nlc3NEZWxldGUpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUNsb3NlRWRpdEFnZW50JykgOiB0KCdjb25maXJtQ2xvc2VDcmVhdGVBZ2VudCcpXG5cbiAgICAgIGlmICghd2luZG93LmNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIHNldE1vZGFsVmFsdWVzKGluaXRpYWxWYWx1ZXMpXG4gICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzU2F2ZSgpXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQgPSB7XG4gICAgICB0b0RlbGV0ZTogW10sXG4gICAgICB0b1VwbG9hZDogW10sXG4gICAgfVxuICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgIGlzRnJvbUNyZWF0aW9uOiBmYWxzZSxcbiAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogbnVsbCxcbiAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgIH1cbiAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG4gICAgc2V0SXNTdWJzY3JpYmVkKGZhbHNlKVxuICAgIHNldEZpbGVzUHJvY2Vzc2VkKDApXG4gICAgc2V0U2VjdGlvbignZ2VuZXJhbCcpXG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmICFpc1Nob3dQcm9jZXNzRmlsZXMpIHtcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWN0aW9uQ2hhbmdlID0gKG5ld1NlY3Rpb246IEFibVNlY3Rpb24pID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMudGFiU2VjdGlvbiwgeyBvcHRpb246IG5ld1NlY3Rpb24gfSlcbiAgICBzZXRTZWN0aW9uKG5ld1NlY3Rpb24pXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyA9ICh7XG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgIGRlbGV0ZUtub3dsZWRnZSxcbiAgfToge1xuICAgIGtleTogc3RyaW5nXG4gICAgdmFsdWU6IGFueVxuICAgIGRlbGV0ZUtub3dsZWRnZTogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2tub3dsZWRnZScpIHtcbiAgICAgIGlmICghZGVsZXRlS25vd2xlZGdlKSB7XG4gICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQucHVzaCguLi4odmFsdWUgfHwgW10pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsZXNQcmV2SWRzID0gdmFsdWUubGVuZ3RoID8gbmV3IFNldCh2YWx1ZS5tYXAoZmlsZSA9PiBmaWxlLmlkKSkgOiBuZXcgU2V0KClcbiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSBtb2RhbFZhbHVlcy5rbm93bGVkZ2UuZmlsdGVyKGZpbGUgPT4gIWZpbGVzUHJldklkcy5oYXMoZmlsZS5pZCkgJiYgZmlsZS5zdGF0dXMgIT09ICdzdGFydGVkJylcbiAgICAgICAgaWYgKCFuZXdGaWxlcy5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUlkcyA9IG5ldyBTZXQodmFsdWUubWFwKGZpbGUgPT4gZmlsZS5pZCkpXG4gICAgICAgICAgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZCA9IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQuZmlsdGVyKGZpbGUgPT4gdmFsdWVJZHMuaGFzKGZpbGUuaWQpKVxuICAgICAgICB9XG4gICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbLi4uKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgfHwgW10pLCAuLi5uZXdGaWxlc11cbiAgICAgIH1cbiAgICB9XG4gICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiB7XG4gICAgICBjb25zdCBrbm93bGVkZ2VGaWxlcyA9XG4gICAgICAgIGtleSA9PT0gJ2tub3dsZWRnZSdcbiAgICAgICAgICA/IGRlbGV0ZUtub3dsZWRnZVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBbLi4uKHByZXYua25vd2xlZGdlIHx8IFtdKSwgLi4uKCh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKSB8fCBbXSldXG4gICAgICAgICAgOiBudWxsXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICAuLi4oa2V5ID09PSAna25vd2xlZGdlJ1xuICAgICAgICAgID8geyBrbm93bGVkZ2U6IGtub3dsZWRnZUZpbGVzIH1cbiAgICAgICAgICA6IGtleSA9PT0gJ2FjY2Vzc2liaWxpdHknXG4gICAgICAgICAgICA/IHsgYWNjZXNzaWJpbGl0eTogdmFsdWUgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgICAgICAgICAgW2tleV06IHZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gYXN5bmMgKGNoYXQ6IGFueSwgYWN0aW9uOiAnZGVsZXRlJyB8ICd1cGRhdGUnIHwgJ2NyZWF0ZScpID0+IHtcbiAgICAvLyBTb2xvIHBlcm1pdGlyIG9wZXJhY2lvbmVzIGRlIGFnZW50ZXMgY3VzdG9tIHNpIGxhIGZlYXR1cmUgZmxhZyBlc3TDoSBoYWJpbGl0YWRhXG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5kZWxldGUpXG4gICAgICBoYW5kbGVEZWxldGVBZ2VudChjaGF0LmlkIGFzIHVua25vd24gYXMgc3RyaW5nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5jb25maXJtQWN0aW9uLCB7IG9wdGlvbjogbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gJ2VkaXRlJyA6ICdjcmVhdGUnIH0pXG4gICAgLy8gQWwgcmVpbnRlbnRhciBndWFyZGFyLCBsaWJlcmFyIGVsIGZyZW5vIGRlbCB0aW1lb3V0IHByZXZpbyBwYXJhIHF1ZSBsb3NcbiAgICAvLyB1c2VFZmZlY3QgZGUgcG9zdC1ndWFyZGFkbyB2dWVsdmFuIGEgcG9kZXIgZGlzcGFyYXIgc25hY2tiYXJzIHkgY2VycmFyLlxuICAgIHByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIGlmICghdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVVwZGF0ZUFnZW50KG1vZGFsVmFsdWVzKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBoYW5kbGVDcmVhdGVBZ2VudChtb2RhbFZhbHVlcylcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldEFnZW50VmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnRWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbFxuICAgICAgY29uc3QgaW5pdGlhbFNlY3Rpb24gPSBhZ2VudFZhbHVlcz8uaW5pdGlhbFNlY3Rpb24gYXMgQWJtU2VjdGlvbiB8IHVuZGVmaW5lZFxuICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPVxuICAgICAgICBpbml0aWFsU2VjdGlvbiAmJiBbJ2dlbmVyYWwnLCAna25vd2xlZGdlJywgJ2FjY2Vzc2liaWxpdHknXS5pbmNsdWRlcyhpbml0aWFsU2VjdGlvbikgPyBpbml0aWFsU2VjdGlvbiA6IG51bGxcblxuICAgICAgZ2V0QWxsQWdlbnRNb2RlbHMoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYWdlbnRWYWx1ZXMudmFsdWVzPy5pc0VkaXRpbmcpIHtcbiAgICAgICAgLy8gVmFsaWRhciBxdWUgbGEgZmVhdHVyZSBmbGFnIGVzdMOpIGhhYmlsaXRhZGEgYW50ZXMgZGUgY2FyZ2FyIGVsIGFnZW50ZSBwYXJhIGVkaXRhclxuICAgICAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgcGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChhZ2VudFZhbHVlcy5wcmVmZXRjaGVkQWdlbnRCeUlkKSB7XG4gICAgICAgICAgaGFuZGxlQ2xlYW5BZ2VudCgpXG4gICAgICAgICAgcHJlZmV0Y2hlZEFnZW50QnlJZFJlZi5jdXJyZW50ID0gYWdlbnRWYWx1ZXMucHJlZmV0Y2hlZEFnZW50QnlJZFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUdldEFnZW50QnlJZChhZ2VudFZhbHVlcz8udmFsdWVzPy5nZW5lcmFsPy5pZCBhcyB1bmtub3duIGFzIHN0cmluZylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChhZ2VudFZhbHVlcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IHtcbiAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAgIC4uLmFnZW50VmFsdWVzLnZhbHVlcyxcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAuLi5pbml0aWFsVmFsdWVzLmdlbmVyYWwsXG4gICAgICAgICAgICAuLi4oYWdlbnRWYWx1ZXMudmFsdWVzLmdlbmVyYWwgfHwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgICAgICAgLi4uKGFnZW50VmFsdWVzLnZhbHVlcy5hY2Nlc3NpYmlsaXR5IHx8IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtub3dsZWRnZTogYWdlbnRWYWx1ZXMudmFsdWVzLmtub3dsZWRnZSB8fCBbXSxcbiAgICAgICAgfVxuXG4gICAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gbmV4dFZhbHVlc1xuICAgICAgICBzZXRNb2RhbFZhbHVlcyhuZXh0VmFsdWVzKVxuICAgICAgfVxuXG4gICAgICBpZiAocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQgJiYgIWFnZW50VmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nKSB7XG4gICAgICAgIHNldFNlY3Rpb24ocGVuZGluZ0luaXRpYWxTZWN0aW9uUmVmLmN1cnJlbnQpXG4gICAgICAgIHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0QWdlbnRWYWx1ZXMgYXMgRXZlbnRMaXN0ZW5lcilcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIHVzZUVmZmVjdCB0byBoYW5kbGUgdGhlIG92ZXJmbG93IG9mIHRoZSBib2R5IHdoZW4gdGhlIG1vZGFsIGlzIG9wZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE92ZXJmbG93ID0gYm9keS5zdHlsZS5vdmVyZmxvd1xuICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbE92ZXJmbG93XG4gICAgfVxuICB9LCBbaXNPcGVuXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUJlZm9yZVVubG9hZCA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgICAgIGlmIChoYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgICByZXR1cm4gdCgnY29uZmlybVJlbG9hZEJyb3dzZXInKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBoYW5kbGVCZWZvcmVVbmxvYWQpXG4gICAgfVxuICB9LCBbaXNPcGVuLCBoYXNQZW5kaW5nQ2hhbmdlcywgdF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc3VjY2Vzc0RlbGV0ZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudERlbGV0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2VzcygpXG4gICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgIHNlbGVjdEZpcnN0QWdlbnQoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkIGFzIHN0cmluZylcbiAgICAgIH1cbiAgICAgIHJlbW92ZUFnZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpXG4gICAgICBzZXRTaG93TW9kYWxEZWxldGUoZmFsc2UpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICB9LCBbc3VjY2Vzc0RlbGV0ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBFdml0YXIgZWplY3VjacOzbiBtw7psdGlwbGUgZGVsIGVmZWN0b1xuICAgIGlmIChzdWNjZXNzQ3JlYXRlICYmICFpc0xvYWRpbmdDcmVhdGUgJiYgYWdlbnRDcmVhdGVkUmVmLmN1cnJlbnQgIT09IHN1Y2Nlc3NDcmVhdGUuaWQpIHtcbiAgICAgIGFnZW50Q3JlYXRlZFJlZi5jdXJyZW50ID0gc3VjY2Vzc0NyZWF0ZS5pZFxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUubGVuZ3RoICYmIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICBmaWxlc1RvRGVsZXRlOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlLFxuICAgICAgICAgICAgZmlsZXNUb0NyZWF0ZTogYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZCxcbiAgICAgICAgICAgIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVybyBoYXkgYXJjaGl2b3MsIGVzdGFibGVjZXIgZWwgY29udGV4dG8gcGFyYSBjcmVhY2nDs25cbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtcbiAgICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KSxcbiAgICAgICAgXVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goaGFuZGxlQWNjZXNzQ2xpZW50KHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAgIGNvbnN0IGFnZW50V2l0aEZhdm9yaXRlID0geyAuLi5zdWNjZXNzQ3JlYXRlLCBpc19mYXZvcml0ZTogdHJ1ZSB9XG4gICAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG4gICAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICAgIGNvbnN0IGFnZW50Rm9yVG9nZ2xlID0geyAuLi5hZ2VudFdpdGhGYXZvcml0ZSwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICAgICAgICAoKSA9PiByZXNvbHZlKCksXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVqZWN0KClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzKHsgZmlsZXM6IGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUsIGFnZW50SWQ6IHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSB9KVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBhY2Nlc2liaWxpZGFkIHBlcm8gaGF5IGFyY2hpdm9zLCBlc3RhYmxlY2VyIGVsIGNvbnRleHRvIHBhcmEgY3JlYWNpw7NuXG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgaGFuZGxlQ3JlYXRlS25vd2xlZGdlcyh7IGZpbGVzOiBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkLCBhZ2VudElkOiBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCkgfSksXG4gICAgICAgIF1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5hY2Nlc3NUeXBlICE9PSAnY29tcGFueScpIHtcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKGhhbmRsZUFjY2Vzc0NsaWVudChzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaXNfZmF2b3JpdGUpIHtcbiAgICAgICAgICBjb25zdCBhZ2VudFdpdGhGYXZvcml0ZSA9IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfVxuICAgICAgICAgIGFkZEFnZW50KGFnZW50V2l0aEZhdm9yaXRlKVxuICAgICAgICAgIC8vIEN1YW5kbyBzZSBjcmVhIHVuIGFnZW50ZSBudWV2bywgZWwgc2Vydmlkb3Igbm8gdGllbmUgZWwgZmF2b3JpdG8gbWFyY2FkbyBhw7puXG4gICAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgICAgICAgKCkgPT4gcmVzb2x2ZSgpLFxuICAgICAgICAgICAgICAgICgpID0+IHJlamVjdCgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZEFnZW50KHN1Y2Nlc3NDcmVhdGUpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzU2hvd1Byb2Nlc3NGaWxlcyh0cnVlKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmFjY2Vzc1R5cGUgIT09ICdjb21wYW55Jykge1xuICAgICAgICAvLyBTb2xvIHJlc2V0ZWFyIGVsIGNvbnRleHRvIHNpIE5PIHNlIGhhIGxsYW1hZG8gdG9kYXbDrWFcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgIGNvbnN0IHsgaGFzQWN0aW9uRmlsZXMgfSA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgICAgIGlzRnJvbUNyZWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICBoYXNBY3Rpb25GaWxlczogaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0JlZW5DYWxsZWQpIHtcbiAgICAgICAgICBoYW5kbGVBY2Nlc3NDbGllbnQoc3VjY2Vzc0NyZWF0ZS5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KVxuICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBoYW5kbGVBY2Nlc3NDbGllbnQsIGVsIGFnZW50ZSBzZSBhZ3JlZ2Fyw6EgeSBlbCB0b2dnbGUgc2UgaGFyw6EgZW4gc3VjY2Vzc1VwZGF0ZUFjY2Vzc1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGZhdm9yaXRlIGlmIGl0IHdhcyBtYXJrZWQgZHVyaW5nIGNyZWF0aW9uXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBQcmltZXJvIGFncmVnYXIgZWwgYWdlbnRlIGEgbGEgbGlzdGEgKGFkZEFnZW50IHlhIG9yZGVuYSlcbiAgICAgICAgY29uc3QgYWdlbnRXaXRoRmF2b3JpdGUgPSB7IC4uLnN1Y2Nlc3NDcmVhdGUsIGlzX2Zhdm9yaXRlOiB0cnVlIH1cbiAgICAgICAgYWRkQWdlbnQoYWdlbnRXaXRoRmF2b3JpdGUpXG5cbiAgICAgICAgLy8gQ3VhbmRvIHNlIGNyZWEgdW4gYWdlbnRlIG51ZXZvLCBlbCBzZXJ2aWRvciBubyB0aWVuZSBlbCBmYXZvcml0byBtYXJjYWRvIGHDum5cbiAgICAgICAgLy8gRW50b25jZXMgY3VycmVudElzRmF2b3JpdGUgZGViZSBzZXIgZmFsc2UgcGFyYSBxdWUgZWwgdG9nZ2xlIGxvIG1hcnF1ZSBjb21vIHRydWVcbiAgICAgICAgY29uc3QgYWdlbnRGb3JUb2dnbGUgPSB7IC4uLmFnZW50V2l0aEZhdm9yaXRlLCBpc19mYXZvcml0ZTogZmFsc2UgfVxuICAgICAgICAvLyBMdWVnbyBoYWNlciBlbCB0b2dnbGUgZGUgZmF2b3JpdG8gZW4gZWwgc2Vydmlkb3IgeSBhY3R1YWxpemFyIGVsIGVzdGFkb1xuICAgICAgICBoYW5kbGVUb2dnbGVGYXZvcml0ZUZvckFnZW50KFxuICAgICAgICAgIHN1Y2Nlc3NDcmVhdGUuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBhZ2VudEZvclRvZ2dsZSxcbiAgICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogdXBkYXRlZEFnZW50LmlzX2Zhdm9yaXRlID8gJ2FkZCcgOiAncmVtb3ZlJyB9KVxuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgICAgIHNlbGVjdEFnZW50KHsgLi4uYWdlbnRXaXRoRmF2b3JpdGUsIGlzX2Zhdm9yaXRlOiB1cGRhdGVkQWdlbnQuaXNfZmF2b3JpdGUgfSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7IG9wdGlvbjogJ2FkZCcgfSlcbiAgICAgICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFdpdGhGYXZvcml0ZSlcbiAgICAgICAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgICAgYWRkQWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc0NyZWF0ZSlcbiAgICAgICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlKClcbiAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW1xuICAgIGlzTG9hZGluZ0NyZWF0ZSxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVDcmVhdGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIGFkZEFnZW50LFxuICAgIHNlbGVjdEFnZW50LFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NDcmVhdGUsXG4gICAgaGFuZGxlQ2xvc2UsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzVXBkYXRlKSB7XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGggJiYgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlID0gW11cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZURlbGV0ZUFuZENyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBmaWxlc1RvQ3JlYXRlOiBmaWxlc1RvVXBsb2FkLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXModHJ1ZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b0RlbGV0ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICAgICAgICAgICAgaGFzQWN0aW9uRmlsZXM6IHRydWUsXG4gICAgICAgICAgICBvcGVyYXRpb25UeXBlOiAndXBkYXRlJyxcbiAgICAgICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IFsuLi5hY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvRGVsZXRlXVxuICAgICAgICAgIGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9EZWxldGUgPSBbXVxuXG4gICAgICAgICAgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgaGFuZGxlRGVsZXRlS25vd2xlZGdlcyh7XG4gICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1RvRGVsZXRlLFxuICAgICAgICAgICAgICBhZ2VudElkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpXG4gICAgICAgICAgICAgID8gW2hhbmRsZUFjY2Vzc0NsaWVudChtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLnRvU3RyaW5nKCksIG1vZGFsVmFsdWVzLmFjY2Vzc2liaWxpdHkpXVxuICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICBdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoKSB7XG4gICAgICAgIGlmIChoYXNBY2Nlc3NpYmlsaXR5Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiB0cnVlLFxuICAgICAgICAgICAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gICAgICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBbLi4uYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZF1cbiAgICAgICAgICBhY3Rpb25zVG9GaWxlcy5jdXJyZW50LnRvVXBsb2FkID0gW11cblxuICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMoe1xuICAgICAgICAgICAgICBmaWxlczogZmlsZXNUb1VwbG9hZCxcbiAgICAgICAgICAgICAgYWdlbnRJZDogbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4oaGFzQWNjZXNzaWJpbGl0eUNoYW5nZWQoKVxuICAgICAgICAgICAgICA/IFtoYW5kbGVBY2Nlc3NDbGllbnQobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pZC50b1N0cmluZygpLCBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5KV1cbiAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgXSlcbiAgICAgICAgfVxuICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKHRydWUpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGhhc0FjY2Vzc2liaWxpdHlDaGFuZ2VkKCkpIHtcbiAgICAgICAgLy8gU29sbyByZXNldGVhciBlbCBjb250ZXh0byBzaSBOTyBzZSBoYSBsbGFtYWRvIHRvZGF2w61hIHkgTk8gaGF5IGFyY2hpdm9zIHBlbmRpZW50ZXNcbiAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCAmJiAhYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaXNGcm9tRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgICAgICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQpIHtcbiAgICAgICAgICAvLyBMbGFtYXIgYSBoYW5kbGVBY2Nlc3NDbGllbnQgc29sbyB1bmEgdmV6XG4gICAgICAgICAgaWYgKCFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgICAgICAgICAgaGFuZGxlQWNjZXNzQ2xpZW50KG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQudG9TdHJpbmcoKSwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eSlcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNCZWVuQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBjZXJyYXIgc2kgbm8gaGF5IGFyY2hpdm9zIHNpZW5kbyBwcm9jZXNhZG9zIG5pIGFjY2VzcyBwZW5kaWVudGVcbiAgICAgIGlmIChcbiAgICAgICAgIWhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ICYmXG4gICAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgICAgICAgIWFjdGlvbnNUb0ZpbGVzLmN1cnJlbnQudG9VcGxvYWQubGVuZ3RoICYmXG4gICAgICAgICFhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgICAgICAgIXN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgICAgICAgIXByb2Nlc3NGaWxlc1RpbWVkT3V0UmVmLmN1cnJlbnRcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50VXBkYXRlZCcpKVxuICAgICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgICBpZiAoY3VycmVudFNlbGVjdGVkQWdlbnQ/LmlkID09PSBzdWNjZXNzVXBkYXRlLmlkKSB7XG4gICAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJykpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBzdWNjZXNzVXBkYXRlLFxuICAgIG1vZGFsVmFsdWVzLmdlbmVyYWwuaWQsXG4gICAgaGFuZGxlRGVsZXRlQW5kQ3JlYXRlS25vd2xlZGdlcyxcbiAgICBoYW5kbGVEZWxldGVLbm93bGVkZ2VzLFxuICAgIGhhbmRsZUNyZWF0ZUtub3dsZWRnZXMsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgaGFuZGxlUmVzZXRTdWNjZXNzRGVsZXRlLFxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZSxcbiAgICBoYW5kbGVDbG9zZSxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVQcm9jZXNzRmlsZXNUaW1lb3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiYgIWlzU2hvd1Byb2Nlc3NGaWxlcykgcmV0dXJuXG5cbiAgICAvLyBBbCBjdW1wbGlyc2UgZWwgdGltZW91dCBhc3VtaW1vcyBxdWUgZWwgZ3VhcmRhZG8gZGVsIGFnZW50ZSBmdWUgZXhpdG9zb1xuICAgIC8vIChlbCBzZXJ2ZXIgcmVzcG9uZGnDsyBPSykgeSBxdWUgbG9zIGFyY2hpdm9zIHNlIGVudmlhcm9uIGNvcnJlY3RhbWVudGUuXG4gICAgLy8gU29sbyBwZXJkaW1vcyBsYSBjb25maXJtYWNpw7NuIGFzaW5jcsOzbmljYSBkZWwgV2ViU29ja2V0IHNvYnJlIHN1XG4gICAgLy8gcHJvY2VzYW1pZW50by4gQ2VycmFtb3MgdG9kbyBtb3N0cmFuZG8gZWwgc25hY2tiYXIgZGUgw6l4aXRvIHF1ZSBodWJpZXNlXG4gICAgLy8gZGlzcGFyYWRvIGVsIGZsdWpvIG5vcm1hbCBkZSDDqXhpdG8uXG5cbiAgICAvLyBGcmVubyBwYXJhIHF1ZSBsb3MgdXNlRWZmZWN0IGRlIHBvc3QtZ3VhcmRhZG8gbm8gcmUtZGlzcGFyZW4gc25hY2tiYXJzXG4gICAgLy8gbyBjaWVycmVzIGR1cGxpY2Fkb3MgY3VhbmRvIHNldElzU2hvd1Byb2Nlc3NGaWxlcyhmYWxzZSkgbG9zIGdhdGlsbGUuXG4gICAgcHJvY2Vzc0ZpbGVzVGltZWRPdXRSZWYuY3VycmVudCA9IHRydWVcblxuICAgIGlmIChtb2RhbFZhbHVlcy5pc0VkaXRpbmcgJiYgc3VjY2Vzc1VwZGF0ZSkge1xuICAgICAgdXBkYXRlQWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQgPT09IHN1Y2Nlc3NVcGRhdGUuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc3VjY2Vzc1VwZGF0ZSlcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NVcGRhdGUoKVxuICAgIH0gZWxzZSBpZiAoIW1vZGFsVmFsdWVzLmlzRWRpdGluZyAmJiBzdWNjZXNzQ3JlYXRlKSB7XG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlKClcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIHJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2VzcygpXG5cbiAgICBoYW5kbGVDbG9zZSgpXG4gIH0sIFtcbiAgICBpc1Nob3dQcm9jZXNzRmlsZXMsXG4gICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLFxuICAgIHN1Y2Nlc3NVcGRhdGUsXG4gICAgc3VjY2Vzc0NyZWF0ZSxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICBjdXJyZW50U2VsZWN0ZWRBZ2VudD8uaWQsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzLFxuICAgIHQsXG4gICAgcmVzZXRTdWNjZXNzVXBkYXRlLFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICBoYW5kbGVSZXNldFN1Y2Nlc3NTYXZlLFxuICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgY29uc3Qgd2ViU29ja2V0RnVuY3Rpb24gPSAoeyBtb2RlbF9kYXRhOiBtb2RlbERhdGEgfTogeyBtb2RlbF9kYXRhOiBhbnkgfSkgPT4ge1xuICAgIGNvbnN0IGZpbGVTdGF0dXMgPSBtb2RlbERhdGFcbiAgICBpZiAoZmlsZVN0YXR1cy5zdGF0dXMgPT09ICdkb25lJyB8fCBmaWxlU3RhdHVzLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkS25vd2xlZGdlID0gcHJldi5rbm93bGVkZ2UubWFwKGZpbGUgPT4ge1xuICAgICAgICAgIGlmIChmaWxlLm5hbWUgPT09IGZpbGVTdGF0dXMuZmlsZW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmZpbGUsXG4gICAgICAgICAgICAgIHN0YXR1czogZmlsZVN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgICAgIGlkOiBmaWxlU3RhdHVzLmtub3dsZWRnZV9iYXNlX2lkIHx8IGZpbGUuaWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaWxlXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGhhc1BlbmRpbmdGaWxlcyA9IHVwZGF0ZWRLbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAncGVuZGluZycpXG4gICAgICAgIGNvbnN0IGhhc0Vycm9yRmlsZXMgPSB1cGRhdGVkS25vd2xlZGdlLnNvbWUoZmlsZSA9PiBmaWxlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpXG4gICAgICAgIGlmIChoYXNFcnJvckZpbGVzICYmICFoYXNQZW5kaW5nRmlsZXMpIHtcbiAgICAgICAgICBoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgc2V0SXNTaG93UHJvY2Vzc0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IoXG4gICAgICAgICAgICBtb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyB0KCdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InKSA6IHQoJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc1BlbmRpbmdGaWxlcyAmJiAhaGFzRXJyb3JGaWxlcykge1xuICAgICAgICAgIGhhc1BlbmRpbmdGaWxlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBzZXRJc1Nob3dQcm9jZXNzRmlsZXMoZmFsc2UpXG5cbiAgICAgICAgICAvLyBTaSBoYWLDrWEgYWNjZXNzIHBlbmRpZW50ZSB5IHlhIGVzdGFiYSBtYW5lamFkbywgZm9yemFyIHF1ZSBlbCB1c2VFZmZlY3QgZGUgYWNjZXNzIHNlIGVqZWN1dGUgZGUgbnVldm9cbiAgICAgICAgICBpZiAoYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50Lmhhc0FjdGlvbkZpbGVzICYmIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgc2V0RmlsZXNQcm9jZXNzZWQocHJldkNvdW50ID0+IHByZXZDb3VudCArIDEpXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgICAgICAgIWFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgICAgICAgIWZpbGVzRmluaXNoZWRSZWYuY3VycmVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gU2kgZXMgY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkLCBtYXJjYXIgcXVlIGxvcyBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgICAgICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgICAgICBzZXRGaWxlc1Byb2Nlc3NlZChwcmV2Q291bnQgPT4gcHJldkNvdW50ICsgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGtub3dsZWRnZTogdXBkYXRlZEtub3dsZWRnZSxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdWNjZXNzS25vd2xlZGdlRGVsZXRlICYmICFpc0xvYWRpbmdLbm93bGVkZ2UgJiYgIWVycm9yS25vd2xlZGdlKSB7XG4gICAgICAvLyBTb2xvIGNlcnJhciBzaSBOTyBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3NcbiAgICAgIGlmIChoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCB8fCBpc1Nob3dQcm9jZXNzRmlsZXMgfHwgYWN0aW9uc1RvRmlsZXMuY3VycmVudC50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBTaSBlbCBsb2FkZXIgc2UgY2VycsOzIHBvciB0aW1lb3V0LCBubyBtb3N0cmFyIHNuYWNrYmFyIGRlIMOpeGl0byBuaSBjZXJyYXJcbiAgICAgIGlmIChwcm9jZXNzRmlsZXNUaW1lZE91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudFVwZGF0ZWQnKSlcbiAgICAgIGhhbmRsZVJlc2V0U3VjY2Vzc0RlbGV0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfVxuICAgIGlmIChlcnJvcktub3dsZWRnZSkge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nID8gdCgnY29uZmlybUFnZW50VXBkYXRlZFdpdGhGaWxlc0Vycm9yJykgOiB0KCdjb25maXJtQWdlbnRXaXRoRmlsZXNFcnJvcicpXG4gICAgICApXG4gICAgICBoYW5kbGVSZXNldFN1Y2Nlc3NEZWxldGUoKVxuICAgIH1cbiAgfSwgW3N1Y2Nlc3NLbm93bGVkZ2VEZWxldGUsIGlzTG9hZGluZ0tub3dsZWRnZSwgZXJyb3JLbm93bGVkZ2UsIGlzU2hvd1Byb2Nlc3NGaWxlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50XG5cbiAgICAvLyBTaSBoYXkgYXJjaGl2b3Mgc2llbmRvIHByb2Nlc2Fkb3MsIGVzcGVyYXIgYSBxdWUgdGVybWluZW5cbiAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAoaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKSkge1xuICAgICAgLy8gU2kgc3VjY2Vzc1VwZGF0ZUFjY2VzcyBlc3TDoSBhY3Rpdm8sIG1hcmNhciBjb21vIG1hbmVqYWRvIHBlcm8gTk8gcmVzZXRlYXIgaGFzdGEgcXVlIHRlcm1pbmVuIGxvcyBhcmNoaXZvc1xuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiYgIWFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTaSB5YSBmdWUgbWFuZWphZG8geSBubyBoYXkgYXJjaGl2b3MgcGVuZGllbnRlcywgZWplY3V0YXIgZWwgY2llcnJlXG4gICAgaWYgKGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCAmJiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3VjY2Vzc1VwZGF0ZUFjY2Vzcykge1xuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY2Nlc3NIYW5kbGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjY2Vzc0hhbmRsZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MoKVxuXG4gICAgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIC8vIFNpIGhheSBhcmNoaXZvcywgZWwgYWdlbnRlIHlhIGZ1ZSBhZ3JlZ2FkbyB5IGVsIHRvZ2dsZSB5YSBzZSBoaXpvIGVuIHN1Y2Nlc3NDcmVhdGVcbiAgICAgIC8vIFNvbG8gbmVjZXNpdGFtb3MgY2VycmFyIGVsIG1vZGFsXG4gICAgICBpZiAoY29udGV4dC5oYXNBY3Rpb25GaWxlcykge1xuICAgICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnY29uZmlybUFnZW50Q3JlYXRlZCcpKVxuICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZnVlIGNyZWFkbyBjb24gZmF2b3JpdG8sIG5lY2VzaXRhbW9zIG9yZGVuYXIgZGVzcHXDqXMgZGUgYWdyZWdhcmxvXG4gICAgICBjb25zdCBhZ2VudFRvQWRkID0gbW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSA/IHsgLi4uc3VjY2Vzc0NyZWF0ZSwgaXNfZmF2b3JpdGU6IHRydWUgfSA6IHN1Y2Nlc3NDcmVhdGVcblxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIGFkZEFnZW50KGFnZW50VG9BZGQpXG4gICAgICBzZWxlY3RBZ2VudChhZ2VudFRvQWRkKVxuXG4gICAgICAvLyBTaSB0aWVuZSBmYXZvcml0bywgaGFjZXIgdG9nZ2xlIHkgYWN0dWFsaXphciBlc3RhZG8gYW50ZXMgZGUgY2VycmFyXG4gICAgICBpZiAobW9kYWxWYWx1ZXMuZ2VuZXJhbC5pc19mYXZvcml0ZSkge1xuICAgICAgICAvLyBDdWFuZG8gc2UgY3JlYSB1biBhZ2VudGUgbnVldm8sIGVsIHNlcnZpZG9yIG5vIHRpZW5lIGVsIGZhdm9yaXRvIG1hcmNhZG8gYcO6blxuICAgICAgICAvLyBFbnRvbmNlcyBjdXJyZW50SXNGYXZvcml0ZSBkZWJlIHNlciBmYWxzZSBwYXJhIHF1ZSBlbCB0b2dnbGUgbG8gbWFycXVlIGNvbW8gdHJ1ZVxuICAgICAgICBjb25zdCBhZ2VudEZvclRvZ2dsZSA9IHsgLi4uYWdlbnRUb0FkZCwgaXNfZmF2b3JpdGU6IGZhbHNlIH1cbiAgICAgICAgaGFuZGxlVG9nZ2xlRmF2b3JpdGVGb3JBZ2VudChcbiAgICAgICAgICBzdWNjZXNzQ3JlYXRlLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgYWdlbnRGb3JUb2dnbGUsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2VycmFyIGRlc3B1w6lzIGRlIHF1ZSBlbCB0b2dnbGUgY29tcGxldGUgeSBhY3R1YWxpY2UgZWwgZXN0YWRvXG4gICAgICAgICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRTdWNjZXNzQ3JlYXRlKClcbiAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRVcGRhdGVkJykpXG4gICAgICB1cGRhdGVBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZEFnZW50Py5pZCA9PT0gc3VjY2Vzc1VwZGF0ZS5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzdWNjZXNzVXBkYXRlKVxuICAgICAgfVxuICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlKClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9XG5cbiAgICBhY2Nlc3NVcGRhdGVDb250ZXh0LmN1cnJlbnQgPSB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgIGhhc0FjdGlvbkZpbGVzOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICB9XG4gIH0sIFtzdWNjZXNzVXBkYXRlQWNjZXNzLCBmaWxlc1Byb2Nlc3NlZF0pXG5cbiAgLy8gdXNlRWZmZWN0IHBhcmEgbWFuZWphciBlbCBjaWVycmUgZGVsIG1vZGFsIGN1YW5kbyB0ZXJtaW5hbiBsb3MgYXJjaGl2b3MgZW4gY3JlYWNpw7NuIHNpbiBhY2Nlc2liaWxpZGFkXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudFxuXG4gICAgLy8gU29sbyBwcm9jZXNhciBzaTpcbiAgICAvLyAtIEVzIHVuYSBvcGVyYWNpw7NuIGRlIGNyZWFjacOzblxuICAgIC8vIC0gTm8gaGF5IGFjY2VzaWJpbGlkYWQgcGVuZGllbnRlXG4gICAgLy8gLSBMb3MgYXJjaGl2b3MgdGVybWluYXJvbiBkZSBwcm9jZXNhcnNlXG4gICAgLy8gLSBFbCBhZ2VudGUgZnVlIGNyZWFkbyBleGl0b3NhbWVudGVcbiAgICAvLyAtIEHDum4gbm8gc2UgaGEgY2VycmFkbyBlbCBtb2RhbFxuICAgIGlmIChcbiAgICAgIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiZcbiAgICAgICFjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgJiZcbiAgICAgIHN1Y2Nlc3NDcmVhdGUgJiZcbiAgICAgICFoYXNQZW5kaW5nRmlsZXNSZWYuY3VycmVudCAmJlxuICAgICAgIWlzU2hvd1Byb2Nlc3NGaWxlc1xuICAgICkge1xuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ2NvbmZpcm1BZ2VudENyZWF0ZWQnKSlcbiAgICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSgpXG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICBmaWxlc0ZpbmlzaGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgYWNjZXNzVXBkYXRlQ29udGV4dC5jdXJyZW50ID0ge1xuICAgICAgICBpc0Zyb21DcmVhdGlvbjogZmFsc2UsXG4gICAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgICBoYXNBY3Rpb25GaWxlczogZmFsc2UsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6IG51bGwsXG4gICAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRhbWJpw6luIG1hbmVqYXIgZWwgY2FzbyBjdWFuZG8gaGF5IGFjY2VzaWJpbGlkYWQgeSBhcmNoaXZvcyB0ZXJtaW5hcm9uXG4gICAgaWYgKFxuICAgICAgY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAgICAgY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJlxuICAgICAgYWNjZXNzSGFuZGxlZFJlZi5jdXJyZW50ICYmXG4gICAgICBzdWNjZXNzQ3JlYXRlICYmXG4gICAgICAhaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgJiZcbiAgICAgICFpc1Nob3dQcm9jZXNzRmlsZXNcbiAgICApIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdjb25maXJtQWdlbnRDcmVhdGVkJykpXG4gICAgICByZXNldFN1Y2Nlc3NDcmVhdGUoKVxuICAgICAgaWYgKHN1Y2Nlc3NVcGRhdGVBY2Nlc3MpIHtcbiAgICAgICAgcmVzZXRTdWNjZXNzVXBkYXRlQWNjZXNzKClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIGFjY2Vzc1VwZGF0ZUNvbnRleHQuY3VycmVudCA9IHtcbiAgICAgICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgICAgICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICAgICAgICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBmaWxlc1Byb2Nlc3NlZCxcbiAgICBzdWNjZXNzQ3JlYXRlLFxuICAgIHN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaXNTaG93UHJvY2Vzc0ZpbGVzLFxuICAgIGhhbmRsZVNuYWNrYmFyU3VjY2VzcyxcbiAgICB0LFxuICAgIHJlc2V0U3VjY2Vzc0NyZWF0ZSxcbiAgICByZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3MsXG4gICAgaGFuZGxlQ2xvc2UsXG4gIF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNTaG93UHJvY2Vzc0ZpbGVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gYGtub3dsZWRnZS1iYXNlLnN0YXR1czoke2FnZW50QnlJZCA/IGFnZW50QnlJZD8uaWQgOiBzdWNjZXNzQ3JlYXRlPy5pZD8udG9TdHJpbmcoKX1gXG4gICAgICBpZiAoJF9zYykge1xuICAgICAgICBpZiAoaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgJF9zYz8uc3Vic2NyaWJlSGFuZGxlcihjaGFubmVsLCB3ZWJTb2NrZXRGdW5jdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtb2RlbERhdGEgPSB7XG4gICAgICAgICAgICBtb2RlbF9oYXNoOiBjaGFubmVsLFxuICAgICAgICAgICAgYWN0aW9uOiAkX3NjPy5hY3Rpb25UeXBlPy5TVUJTQ1JJQkUsXG4gICAgICAgICAgfVxuICAgICAgICAgICRfc2M/LnVwZGF0ZUNvbm5lY3Rpb25Nb2RlbChtb2RlbERhdGEsIGNoYW5uZWwsIHVzZXIsIHVzZXIsICRfc2MuY2hhbm5lbFR5cGU/Lk1PREVMX0NIQU5ORUwpXG4gICAgICAgICAgc2V0SXNTdWJzY3JpYmVkKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc1Nob3dQcm9jZXNzRmlsZXMsIGlzU3Vic2NyaWJlZCwgJF9zYywgYWdlbnRCeUlkLCBzdWNjZXNzQ3JlYXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhZ2VudE1vZGVscy5sZW5ndGgpIHJldHVyblxuICAgIGlmIChhZ2VudExvYWRpbmcgJiYgIXByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBhcHBseUVkaXRpbmdBZ2VudCA9IChzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZS50eXBlICE9PSAnY3VzdG9tJyB8fCAhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFjY2Vzc0RlbmllZCcpKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBzZXRNb2RhbFZhbHVlcyhwcmV2ID0+IHtcbiAgICAgICAgY29uc3QgYWdlbnRWYWx1ZXNUb1NldCA9IGJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsKHNvdXJjZSwgYWdlbnRNb2RlbHMsIHByZXYpXG4gICAgICAgIGZpcnN0VmFsdWVBZ2VudC5jdXJyZW50ID0gYWdlbnRWYWx1ZXNUb1NldFxuICAgICAgICByZXR1cm4gYWdlbnRWYWx1ZXNUb1NldFxuICAgICAgfSlcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlmIChwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgICBzZXRTZWN0aW9uKHBlbmRpbmdJbml0aWFsU2VjdGlvblJlZi5jdXJyZW50KVxuICAgICAgICBwZW5kaW5nSW5pdGlhbFNlY3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgcHJlZmV0Y2hlZCA9IHByZWZldGNoZWRBZ2VudEJ5SWRSZWYuY3VycmVudFxuICAgIGlmIChwcmVmZXRjaGVkKSB7XG4gICAgICBwcmVmZXRjaGVkQWdlbnRCeUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhcHBseUVkaXRpbmdBZ2VudChwcmVmZXRjaGVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGFnZW50QnlJZCAmJiAhYWdlbnRMb2FkaW5nICYmIGFnZW50TW9kZWxzLmxlbmd0aCkge1xuICAgICAgYXBwbHlFZGl0aW5nQWdlbnQoYWdlbnRCeUlkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFpc0xvYWRpbmcgJiYgIWFnZW50TG9hZGluZyAmJiAhYWdlbnRCeUlkICYmICFtb2RhbFZhbHVlcy5pc0VkaXRpbmcpIHtcbiAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBhaU1vZGVsOiBhZ2VudE1vZGVsc1swXSxcbiAgICAgICAgfSxcbiAgICAgIH0pKVxuICAgIH1cbiAgfSwgW2FnZW50QnlJZCwgaXNPcGVuLCBpc0xvYWRpbmcsIGFnZW50TG9hZGluZywgYWdlbnRNb2RlbHM/Lmxlbmd0aCwgbW9kYWxWYWx1ZXMuaXNFZGl0aW5nLCB0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlcnJvckdldEFnZW50QnlJZCkge1xuICAgICAgaWYgKGVycm9yR2V0QWdlbnRCeUlkID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIikge1xuICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2Vycm9yQWNjZXNzRGVuaWVkJykpXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgfSwgMzAwMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKGVycm9yR2V0QWdlbnRCeUlkKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgIH0sIDMwMDApXG4gICAgfVxuICB9LCBbZXJyb3JHZXRBZ2VudEJ5SWRdKVxuXG4gIGNvbnN0IHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghbW9kYWxWYWx1ZXM/LmFjY2Vzc2liaWxpdHk/LmNsaWVudHMgfHwgbW9kYWxWYWx1ZXMuYWNjZXNzaWJpbGl0eS5jbGllbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtb2RhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LmNsaWVudHMuc29tZShjbGllbnQgPT4gY2xpZW50LmlzX2FjdGl2ZSA9PT0gZmFsc2UgfHwgY2xpZW50LmlzX2RlbGV0ZWQgPT09IHRydWUpXG4gIH0sIFttb2RhbFZhbHVlcz8uYWNjZXNzaWJpbGl0eT8uY2xpZW50c10pXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRmF2b3JpdGUgPSAoKSA9PiB7XG4gICAgaWYgKG1vZGFsVmFsdWVzPy5nZW5lcmFsPy5pZCkge1xuICAgICAgLy8gRXhpc3RpbmcgYWdlbnRcbiAgICAgIHRvZ2dsZUZhdm9yaXRlKFxuICAgICAgICBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkLFxuICAgICAgICB1cGRhdGVkQWdlbnQgPT4ge1xuICAgICAgICAgIHNldE1vZGFsVmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICAgICAgaXNfZmF2b3JpdGU6IHVwZGF0ZWRBZ2VudC5pc19mYXZvcml0ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkpXG4gICAgICAgICAgLy8gQWN0dWFsaXphciBlbCBlc3RhZG8gZGUgYWdlbnRlcyB5IG9yZGVuYXIgY3VhbmRvIHNlIGhhY2UgZGVzZGUgZWwgbW9kYWwgQUJNXG4gICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZSh1cGRhdGVkQWdlbnQsIHRydWUpXG4gICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdEZhdm9yaXRlLCB7XG4gICAgICAgICAgICBvcHRpb246IHVwZGF0ZWRBZ2VudC5pc19mYXZvcml0ZSA/ICdhZGQnIDogJ3JlbW92ZScsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBtb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGVcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIG5ldyBhZ2VudFxuICAgICAgc2V0TW9kYWxWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4ucHJldi5nZW5lcmFsLFxuICAgICAgICAgIGlzX2Zhdm9yaXRlOiAhcHJldi5nZW5lcmFsLmlzX2Zhdm9yaXRlLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc09wZW4gfHwgKCF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZSAmJiAhdXNlclBlcm1pc3Npb25zPy5lZGl0ICYmICF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZSkpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICA8QmFja2Ryb3AgekluZGV4PXsxMTEyfSBvbkNsaWNrPXtoYW5kbGVCYWNrZHJvcENsaWNrfT5cbiAgICAgIDxTQ0FBTVdyYXBwZXIgcmVmPXttb2RhbFJlZn0gdGFiSW5kZXg9ey0xfT5cbiAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICA8U0NBQU1XcmFwcGVyU3Bpbm5lcj5cbiAgICAgICAgICAgIDxTQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudD5cbiAgICAgICAgICAgICAgPFNwaW5uZXJMb3R0aWUgc2l6ZT1cIjgwcHhcIiBjb2xvcj1cInByaW1hcnlcIiAvPlxuICAgICAgICAgICAgPC9TQ0FBTVdyYXBwZXJTcGlubmVyQ29udGVudD5cbiAgICAgICAgICA8L1NDQUFNV3JhcHBlclNwaW5uZXI+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIHtpc1Nob3dQcm9jZXNzRmlsZXMgJiYgaGFzUGVuZGluZ0ZpbGVzUmVmLmN1cnJlbnQgPyAoXG4gICAgICAgICAgICAgIDxBYm1Mb2FkZXJGaWxlc1xuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzPXttb2RhbFZhbHVlcy5rbm93bGVkZ2V9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3QoYHByb2Nlc3NpbmdLbm93bGVkZ2UuJHttb2RhbFZhbHVlcy5pc0VkaXRpbmcgPyAnZGVzY3JpcHRpb25VcGRhdGUnIDogJ2Rlc2NyaXB0aW9uQ3JlYXRlJ31gKX1cbiAgICAgICAgICAgICAgICBvblRpbWVvdXQ9e2hhbmRsZVByb2Nlc3NGaWxlc1RpbWVvdXR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxTQ0FBTUhlYWRlckxlZnQ+XG4gICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxWYWx1ZXM/LmdlbmVyYWw/LmlzX2Zhdm9yaXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnZ2VuZXJhbFNlY3Rpb24ucmVtb3ZlRmF2b3JpdGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2dlbmVyYWxTZWN0aW9uLmFkZEZhdm9yaXRlJylcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJGYXZvcml0ZSBvbkNsaWNrPXtoYW5kbGVUb2dnbGVGYXZvcml0ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXttb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGUgPyAnI0ZGQzYyNCcgOiAnI2E2YTZhNid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9e21vZGFsVmFsdWVzPy5nZW5lcmFsPy5pc19mYXZvcml0ZSA/ICcjRkZDNjI0JyA6ICdub25lJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInNvbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXttb2RhbFZhbHVlcz8uZ2VuZXJhbD8uaXNfZmF2b3JpdGUgPyAnJyA6ICdzdGFyLWZhdm9yaXRlLWljb24nfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyRmF2b3JpdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNSGVhZGVyVGl0bGU+e21vZGFsVmFsdWVzPy5pc0VkaXRpbmcgPyB0KCdlZGl0QWdlbnQnKSA6IHQoJ25ld0FnZW50Jyl9PC9TQ0FBTUhlYWRlclRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9TQ0FBTUhlYWRlckxlZnQ+XG4gICAgICAgICAgICAgICAgICA8U0NBQU1IZWFkZXJDbG9zZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmNhbmNlbE1vZGFsKVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsb3NlKClcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiI2E2YTZhNlwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1IZWFkZXJDbG9zZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1NDQUFNSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxTQ0FBTUNvbnRlbnQgaGFzU2Nyb2xsPXtzZWN0aW9uICE9PSAna25vd2xlZGdlJ30+XG4gICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFyPlxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnZ2VuZXJhbCd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnZ2VuZXJhbCcpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWdlbmVyYWxcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPENhdGVnb3J5XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2dlbmVyYWwnID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2dlbmVyYWwnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdnZW5lcmFsU2VjdGlvbi50aXRsZScpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQUFNU2lkZWJhckl0ZW0+XG5cbiAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2tub3dsZWRnZSd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgna25vd2xlZGdlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhYm0tYWdlbnQtbW9kYWwta25vd2xlZGdlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxCcmFpbkljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtgJHtzZWN0aW9uID09PSAna25vd2xlZGdlJyA/ICdyZ2JhKDYzLCA2MywgNjMsIDEpJyA6ICdyZ2JhKDE2NiwgMTY2LCAxNjYsIDEpJ31gfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxOH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNpZGViYXJJdGVtVGl0bGUgaXNBY3RpdmU9e3NlY3Rpb24gPT09ICdrbm93bGVkZ2UnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdrbm93bGVkZ2VTZWN0aW9uLnRpdGxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNpZGViYXJJdGVtVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cblxuICAgICAgICAgICAgICAgICAgICA8U0NBQU1TaWRlYmFySXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtzZWN0aW9uID09PSAnYWNjZXNzaWJpbGl0eSd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VjdGlvbkNoYW5nZSgnYWNjZXNzaWJpbGl0eScpfVxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWJtLWFnZW50LW1vZGFsLWFjY2Vzc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2liaWxpdHlJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17YCR7c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknID8gJ3JnYmEoNjMsIDYzLCA2MywgMSknIDogJ3JnYmEoMTY2LCAxNjYsIDE2NiwgMSknfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1UaXRsZSBpc0FjdGl2ZT17c2VjdGlvbiA9PT0gJ2FjY2Vzc2liaWxpdHknfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi50aXRsZVRhYicpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG91bGREaXNhYmxlU2F2ZUZvckNsaWVudHMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNsaWVudHNFcnJvcicpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDQUFNU2lkZWJhckl0ZW1FcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWxlcnQgY29sb3I9XCIjQzcwNTA1XCIgd2lkdGg9XCIxNnB4XCIgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbUVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFySXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU0NBQU1TaWRlYmFyPlxuICAgICAgICAgICAgICAgICAge1NlY3Rpb25CeUtleVtzZWN0aW9uXSh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogbW9kYWxWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNldEFnZW50VmFsdWVzOiBoYW5kbGVTZXRBZ2VudFZhbHVlc0J5S2V5cyxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnRNb2RlbHMsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG5ld0tub3dsZWRnZTogW10sXG4gICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlRXhpc3RpbmdLbm93bGVkZ2U6ICgpID0+IHt9LFxuICAgICAgICAgICAgICAgICAgICBvblJlbW92ZU5ld0tub3dsZWRnZTogKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgICAgIG9uRmlsZUVycm9yQ2hhbmdlOiBzZXRIYXNGaWxlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9TQ0FBTUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQUFNRm9vdGVyIGlzRWRpdGluZz17ISFtb2RhbFZhbHVlcz8uaXNFZGl0aW5nICYmICEhdXNlclBlcm1pc3Npb25zPy5kZWxldGV9PlxuICAgICAgICAgICAgICAgICAgeyEhbW9kYWxWYWx1ZXM/LmlzRWRpdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8U0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbldpdGhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TW9kYWxEZWxldGUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc31cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFdyYXBwZXJDZW50ZXJJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaCBjb2xvcj1cIiMwOGNcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZUFnZW50Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvV3JhcHBlckNlbnRlckljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NBQU1EZWxldGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMjRweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0FBTVNhdmVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKG1vZGFsVmFsdWVzKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBZ2VudFZhbHVlc0lzU2FtZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZ0tub3dsZWRnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nQ3JlYXRlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRmlsZUVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxDVUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbihudWxsLCAnY3JlYXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKG1vZGFsVmFsdWVzKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFnZW50VmFsdWVzSXNTYW1lKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZ0tub3dsZWRnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmdDcmVhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nVXBkYXRlQWNjZXNzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZERpc2FibGVTYXZlRm9yQ2xpZW50cyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNGaWxlRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge21vZGFsVmFsdWVzLmlzRWRpdGluZyA/IHQoJ3NhdmVDaGFuZ2VzJykgOiB0KCdjcmVhdGVBZ2VudExhYmVsQnV0dG9uJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9DVUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0FBTVNhdmVCdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1NDQUFNRm9vdGVyPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDQUFNV3JhcHBlcj5cbiAgICAgIHtzaG93TW9kYWxEZWxldGUgJiYgKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RhbERlbGV0ZShmYWxzZSl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IChwcm9wczogYW55KSA9PiBoYW5kbGVDb25maXJtQWN0aW9uKHByb3BzLCAnZGVsZXRlJyksXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXt7IHRpdGxlOiBtb2RhbFZhbHVlcy5nZW5lcmFsLm5hbWUsIGlkOiBtb2RhbFZhbHVlcy5nZW5lcmFsLmlkIH19XG4gICAgICAgICAgYWN0aW9uPVwiYWdlbnRcIlxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBzZWxlY3RvclxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxRQUFRLE9BQU87QUFDekUsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsU0FBU0MsUUFBUSxRQUFRLDRDQUE0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