@projectcor/maia-components 2.11.36-7 → 2.11.37-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/lib/App.js +11 -24
  2. package/lib/components/atoms/Chip/Chip.js +35 -31
  3. package/lib/components/atoms/MAIAInput/MAIAInput.js +436 -126
  4. package/lib/components/atoms/MAIAInput/styles.js +61 -43
  5. package/lib/components/atoms/icons/index.js +1 -3
  6. package/lib/components/index.js +1 -2
  7. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.styles.js +2 -2
  8. package/lib/components/molecules/AbmSection/AbmGeneralSection.styles.js +3 -3
  9. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.styles.js +2 -2
  10. package/lib/components/molecules/AbmSection/index.js +1 -2
  11. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +1 -13
  12. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +4 -8
  13. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -21
  14. package/lib/components/molecules/ChatAIMessages/newStyles.js +2 -2
  15. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +89 -91
  16. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -2
  17. package/lib/components/molecules/ChatAIModal/constants.js +2 -10
  18. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -6
  19. package/lib/components/molecules/Sidebar/Sidebar.js +31 -68
  20. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -6
  21. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +50 -247
  22. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.styles.js +4 -4
  23. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +3 -13
  24. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +3 -6
  25. package/lib/dev/Providers.js +6 -11
  26. package/lib/hooks/useAgentModel/useCreateAgent.js +10 -11
  27. package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -12
  28. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  29. package/lib/hooks/useChatManager/useChatManager.js +11 -21
  30. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  31. package/lib/hooks/useChatMessages/useChatMessages.js +14 -30
  32. package/lib/hooks/useEvent.js +2 -5
  33. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
  34. package/lib/lang/br/index.js +5 -266
  35. package/lib/lang/en/index.js +5 -266
  36. package/lib/lang/es/index.js +5 -266
  37. package/lib/lang/fr/index.js +6 -268
  38. package/lib/services/maia/Agents/createAgent.js +1 -1
  39. package/lib/services/maia/Agents/getAgentById.js +2 -3
  40. package/lib/services/maia/Agents/updateAgent.js +1 -1
  41. package/lib/services/maia/Chats/getChatMessages.js +4 -29
  42. package/lib/services/maia/Orchestrator/orchestrator.js +9 -11
  43. package/lib/services/maia/RecentProjects/getRecentProjects.js +4 -12
  44. package/lib/services/utils/mapChatMessages.js +5 -12
  45. package/lib/types/Chat.js +1 -1
  46. package/lib/types/agent.js +1 -1
  47. package/lib/types/agentModal.js +1 -1
  48. package/lib/utils/hitlAnalytics.js +6 -1
  49. package/package.json +1 -1
  50. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +0 -28
  51. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +0 -84
  52. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +0 -123
  53. package/lib/components/atoms/ContextMentionChip/index.js +0 -4
  54. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +0 -85
  55. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +0 -6
  56. package/lib/components/atoms/ContextMentionEditor/index.js +0 -2
  57. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +0 -188
  58. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +0 -98
  59. package/lib/components/atoms/ContextMentionItem/index.js +0 -2
  60. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +0 -131
  61. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +0 -63
  62. package/lib/components/atoms/ContextMentionPopover/index.js +0 -3
  63. package/lib/components/atoms/icons/NotionIcon.js +0 -36
  64. package/lib/components/atoms/icons/RocketIcon.js +0 -31
  65. package/lib/components/atoms/icons/WrenchIcon.js +0 -42
  66. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.js +0 -510
  67. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/AbmActionsSectionV2.styles.js +0 -234
  68. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/catalog.js +0 -437
  69. package/lib/components/molecules/AbmSection/AbmActionsSectionV2/index.js +0 -3
  70. package/lib/components/molecules/AbmSection/AbmSkillsSection.styles.js +0 -80
  71. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.interface.js +0 -2
  72. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.js +0 -722
  73. package/lib/components/molecules/AbmSection/AbmTriggersSection/AbmTriggersSection.styles.js +0 -165
  74. package/lib/components/molecules/AbmSection/AbmTriggersSection/index.js +0 -2
  75. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +0 -55
  76. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +0 -6
  77. package/lib/components/molecules/ContextMentionInput/index.js +0 -2
  78. package/lib/components/molecules/SchedulesPage/SchedulesPage.js +0 -610
  79. package/lib/components/molecules/SchedulesPage/index.js +0 -2
  80. package/lib/components/molecules/SkillsPage/SkillsPage.js +0 -708
  81. package/lib/components/molecules/SkillsPage/index.js +0 -2
  82. package/lib/components/molecules/maiaSectionModalStyles.js +0 -91
  83. package/lib/components/molecules/maiaSectionUiTokens.js +0 -31
  84. package/lib/constants/taskLinkIcon.js +0 -6
  85. package/lib/dev/DevAbmAgentModal.js +0 -114
  86. package/lib/dev/DevContextMentionInput.js +0 -65
  87. package/lib/dev/mocks/abmModalMocks.js +0 -193
  88. package/lib/hooks/useCaretPosition.js +0 -35
  89. package/lib/hooks/useContextMentions.js +0 -204
  90. package/lib/hooks/useEntitySearch.js +0 -405
  91. package/lib/hooks/useMentionAllowedTypes.js +0 -86
  92. package/lib/hooks/useMentionPopover.js +0 -284
  93. package/lib/services/maia/Agents/connectors.js +0 -110
  94. package/lib/services/maia/Agents/skills.js +0 -164
  95. package/lib/services/maia/Schedules/createSchedule.js +0 -39
  96. package/lib/services/maia/Schedules/deleteSchedule.js +0 -36
  97. package/lib/services/maia/Schedules/getMySchedules.js +0 -55
  98. package/lib/services/maia/Schedules/getSchedules.js +0 -58
  99. package/lib/services/maia/Schedules/index.js +0 -5
  100. package/lib/services/query/entitySearchQuery.js +0 -16
  101. package/lib/services/query/usersDirectoryQuery.js +0 -19
  102. package/lib/types/agentSkill.js +0 -2
  103. package/lib/types/attachment.js +0 -2
  104. package/lib/types/contextMention.js +0 -37
  105. package/lib/utils/contextMentionIcons.js +0 -115
  106. package/lib/utils/contextMentionLabel.js +0 -4
  107. package/lib/utils/contextMentionTypeLabel.js +0 -17
  108. package/lib/utils/renderContextMentions.js +0 -216
@@ -1,4 +1,10 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
5
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
6
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
2
8
  /* eslint-disable no-restricted-syntax */
3
9
  /* eslint-disable no-continue */
4
10
  /* eslint-disable no-void */
@@ -9,26 +15,28 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
9
15
  /* eslint-disable jsx-a11y/click-events-have-key-events */
10
16
  /* eslint-disable no-console */
11
17
  /* eslint-disable jsx-a11y/no-static-element-interactions */
12
- import { useCallback, useEffect, useRef, useState } from 'react';
13
- import { createPortal } from 'react-dom';
18
+ import { useEffect, useRef, useState } from 'react';
19
+ import { Popover } from '@mui/material';
14
20
  import { PaperPlane } from '@projectcor/icons/lib/components/PaperPlane';
15
21
  import { Attach } from '@projectcor/icons/lib/components/Attach';
16
22
  import { Globe } from '@projectcor/icons/lib/components/Globe';
17
23
  import { Trash } from '@projectcor/icons/lib/components/Trash';
24
+ import { Plus } from '@projectcor/icons/lib/components/Plus';
25
+ import { Check } from '@projectcor/icons/lib/components/Check';
26
+ import { Cross } from '@projectcor/icons/lib/components/Cross';
18
27
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
19
- import { SCMIAttachment, SCMIAttachmentDeleteIcon, SCMIWrapperAttachmentButton, SCMIWrapperWebSearchButton, SCMIWrapperDeepSearchButton, StyledMAIAInputButtons, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
28
+ import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCMIAttachment, SCMIAttachmentDeleteIcon, StyledMAIAInput, StyledMAIAInputButtons, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
20
29
  import { useGlobalContext } from '../../../context/global-context';
21
30
  import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
22
31
  import { useT } from '../../../hooks/useT';
23
32
  import { TelescopeIcon } from '../icons/TelescopeIcon';
24
33
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
34
+ import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
25
35
  import { allowedFileTypes, fileTypes, MAX_FILE_SIZE_MB_MAIA_VISION, MAX_FILE_SIZE_MB_OLD, MAX_FILE_SIZE_MB_AUDIO } from '../../../constants/formatExtensions';
26
- import { BLUE_IA_COLORS } from '../../../styles/config';
27
- import { ContextMentionEditor } from '../ContextMentionEditor';
28
- // eslint-disable-next-line import/no-cycle
29
- import { useMentionPopover } from '../../../hooks/useMentionPopover';
30
36
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
37
+ var TOOL_CHIP_EXIT_MS = 220;
31
38
  export var MAIAInput = function MAIAInput(_ref) {
39
+ var _agent$entity;
32
40
  var onSendMessage = _ref.onSendMessage,
33
41
  className = _ref.className,
34
42
  disabled = _ref.disabled,
@@ -47,13 +55,13 @@ export var MAIAInput = function MAIAInput(_ref) {
47
55
  newChatKey = _ref.newChatKey;
48
56
  var _useT = useT(),
49
57
  t = _useT.t;
50
- var editorRef = useRef(null);
58
+ var inputRef = useRef(null);
51
59
  var fileInputRef = useRef(null);
52
60
  var wrapperRef = useRef(null);
53
61
  var _useState = useState(''),
54
62
  _useState2 = _slicedToArray(_useState, 2),
55
- valueText = _useState2[0],
56
- setValueText = _useState2[1];
63
+ valueTextarea = _useState2[0],
64
+ setValueTextarea = _useState2[1];
57
65
  var _useState3 = useState(true),
58
66
  _useState4 = _slicedToArray(_useState3, 2),
59
67
  isDisabled = _useState4[0],
@@ -78,63 +86,256 @@ export var MAIAInput = function MAIAInput(_ref) {
78
86
  toggleDeepSearch = _useGlobalContext.toggleDeepSearch,
79
87
  isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
80
88
  agent = _useGlobalContext.agent;
81
- var _useMentionPopover = useMentionPopover({
82
- editorRef: editorRef
83
- }),
84
- popoverOpen = _useMentionPopover.popoverOpen,
85
- handleTrigger = _useMentionPopover.handleTrigger,
86
- handlePopoverKeyDown = _useMentionPopover.handleKeyDown,
87
- popoverNode = _useMentionPopover.popoverNode;
88
-
89
- // Inicializar las referencias como undefined para detectar el primer cambio correctamente
90
- var previousAgentIdRef = useRef(undefined);
91
- var previousChatIdRef = useRef(undefined);
92
- var previousNewChatKeyRef = useRef(undefined);
93
- var handleWebSearchToggle = function handleWebSearchToggle() {
89
+ var _useState9 = useState(null),
90
+ _useState0 = _slicedToArray(_useState9, 2),
91
+ plusMenuAnchor = _useState0[0],
92
+ setPlusMenuAnchor = _useState0[1];
93
+ var _useState1 = useState(false),
94
+ _useState10 = _slicedToArray(_useState1, 2),
95
+ activeToolChipHovered = _useState10[0],
96
+ setActiveToolChipHovered = _useState10[1];
97
+ var _useState11 = useState(false),
98
+ _useState12 = _slicedToArray(_useState11, 2),
99
+ toolChipExiting = _useState12[0],
100
+ setToolChipExiting = _useState12[1];
101
+ var toolChipExitTimerRef = useRef(null);
102
+ var searchModeActiveRef = useRef({
103
+ web: false,
104
+ deep: false
105
+ });
106
+ var plusMenuOpen = Boolean(plusMenuAnchor);
107
+ searchModeActiveRef.current = {
108
+ web: isWebSearchActive,
109
+ deep: isDeepSearchActive
110
+ };
111
+ var analyticsAgentType = getChatToolsMenuAgentType(agent);
112
+ var analyticsCloneEntityPayload = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' ? {
113
+ entity: (_agent$entity = agent.entity) !== null && _agent$entity !== void 0 ? _agent$entity : null
114
+ } : {};
115
+ var closePlusMenu = function closePlusMenu() {
116
+ setPlusMenuAnchor(null);
117
+ };
118
+ var handlePlusButtonClick = function handlePlusButtonClick(e) {
119
+ e.stopPropagation();
120
+ if (plusMenuAnchor) {
121
+ closePlusMenu();
122
+ return;
123
+ }
124
+ setPlusMenuAnchor(e.currentTarget);
125
+ eventAmplitude(EVENTS.aiChatPlusOpen, _objectSpread({
126
+ agent_type: analyticsAgentType
127
+ }, analyticsCloneEntityPayload));
128
+ };
129
+ var handlePlusMenuAttach = function handlePlusMenuAttach() {
130
+ var _fileInputRef$current;
131
+ closePlusMenu();
132
+ eventAmplitude(EVENTS.aiChatTools, _objectSpread({
133
+ agent_type: analyticsAgentType,
134
+ option: 'files'
135
+ }, analyticsCloneEntityPayload));
136
+ if (attachments.length >= 5) return;
137
+ (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
138
+ };
139
+ var beginToolChipExit = function beginToolChipExit() {
140
+ if (toolChipExitTimerRef.current !== null) {
141
+ return;
142
+ }
143
+ var wasWeb = isWebSearchActive;
144
+ var wasDeep = isDeepSearchActive;
145
+ if (!wasWeb && !wasDeep) {
146
+ return;
147
+ }
148
+ setToolChipExiting(true);
149
+ toolChipExitTimerRef.current = setTimeout(function () {
150
+ toolChipExitTimerRef.current = null;
151
+ var _searchModeActiveRef$ = searchModeActiveRef.current,
152
+ web = _searchModeActiveRef$.web,
153
+ deep = _searchModeActiveRef$.deep;
154
+ if (wasWeb && web) {
155
+ toggleWebSearch();
156
+ } else if (wasDeep && deep) {
157
+ toggleDeepSearch();
158
+ }
159
+ setToolChipExiting(false);
160
+ }, TOOL_CHIP_EXIT_MS);
161
+ };
162
+ var handlePlusMenuWebSearch = function handlePlusMenuWebSearch() {
163
+ closePlusMenu();
164
+ if (isWebSearchActive) {
165
+ beginToolChipExit();
166
+ return;
167
+ }
94
168
  if (isDeepSearchActive) {
95
169
  toggleDeepSearch();
96
170
  }
97
171
  toggleWebSearch();
98
- if (!isWebSearchActive) {
99
- eventAmplitude(EVENTS.aiChatTools, {
100
- option: 'search'
101
- });
102
- }
172
+ eventAmplitude(EVENTS.aiChatTools, _objectSpread({
173
+ agent_type: analyticsAgentType,
174
+ option: 'search'
175
+ }, analyticsCloneEntityPayload));
103
176
  };
104
- var handleDeepSearchToggle = function handleDeepSearchToggle() {
177
+ var handlePlusMenuDeepSearch = function handlePlusMenuDeepSearch() {
178
+ closePlusMenu();
179
+ if (isDeepSearchActive) {
180
+ beginToolChipExit();
181
+ return;
182
+ }
105
183
  if (isWebSearchActive) {
106
184
  toggleWebSearch();
107
185
  }
108
186
  toggleDeepSearch();
109
- if (!isDeepSearchActive) {
110
- eventAmplitude(EVENTS.aiChatTools, {
111
- option: 'deep_search'
112
- });
187
+ eventAmplitude(EVENTS.aiChatTools, _objectSpread({
188
+ agent_type: analyticsAgentType,
189
+ option: 'deep_search'
190
+ }, analyticsCloneEntityPayload));
191
+ };
192
+
193
+ // Inicializar las referencias como undefined para detectar el primer cambio correctamente
194
+ var previousAgentIdRef = useRef(undefined);
195
+ var previousChatIdRef = useRef(undefined);
196
+ var previousNewChatKeyRef = useRef(undefined);
197
+ var handleResize = function handleResize() {
198
+ var textarea = inputRef.current;
199
+ if (!textarea) {
200
+ return;
201
+ }
202
+
203
+ // Altura mínima equivalente a una línea
204
+ var minHeight = 22.1;
205
+ var maxHeight = 122.1;
206
+
207
+ // Para medir correctamente el scrollHeight, necesitamos quitar temporalmente las restricciones
208
+ var previousMinHeight = textarea.style.minHeight;
209
+ var previousMaxHeight = textarea.style.maxHeight;
210
+
211
+ // Establecer altura a 'auto' y quitar temporalmente min-height y max-height para medir correctamente
212
+ textarea.style.height = 'auto';
213
+ textarea.style.minHeight = '0px';
214
+ textarea.style.maxHeight = 'none';
215
+
216
+ // Forzar reflow para que el navegador recalcule
217
+ void textarea.offsetHeight;
218
+
219
+ // Ahora medir el scrollHeight real sin restricciones
220
+ var scrollHeight = textarea.scrollHeight;
221
+
222
+ // Calcular la altura de una línea usando los estilos computados
223
+ var computedStyle = window.getComputedStyle(textarea);
224
+ var lineHeight = parseFloat(computedStyle.lineHeight) || 20; // Fallback a 20px si no está definido
225
+ var paddingTop = parseFloat(computedStyle.paddingTop) || 0;
226
+ var paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;
227
+ var borderTop = parseFloat(computedStyle.borderTopWidth) || 0;
228
+ var borderBottom = parseFloat(computedStyle.borderBottomWidth) || 0;
229
+
230
+ // Altura de una línea completa (line-height + padding + border)
231
+ var singleLineHeight = lineHeight + paddingTop + paddingBottom + borderTop + borderBottom;
232
+ var isEmpty = textarea.value.trim() === '';
233
+
234
+ // Medir el ancho del texto usando Canvas para determinar si se envuelve a múltiples líneas
235
+ var hasMultipleVisualLines = false;
236
+ var canvas = document.createElement('canvas');
237
+ var context = canvas.getContext('2d');
238
+ if (!context) {
239
+ // Fallback si Canvas no está disponible: usar scrollHeight
240
+ hasMultipleVisualLines = scrollHeight > singleLineHeight * 1.5;
241
+ } else {
242
+ var textareaStyles = window.getComputedStyle(textarea);
243
+ context.font = "".concat(textareaStyles.fontWeight, " ").concat(textareaStyles.fontSize, " ").concat(textareaStyles.fontFamily);
244
+
245
+ // Calcular el ancho disponible (ancho total menos padding izquierdo/derecho y border izquierdo/derecho)
246
+ var paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
247
+ var paddingRight = parseFloat(computedStyle.paddingRight) || 0;
248
+ var borderLeft = parseFloat(computedStyle.borderLeftWidth) || 0;
249
+ var borderRight = parseFloat(computedStyle.borderRightWidth) || 0;
250
+ var textareaWidth = textarea.offsetWidth - paddingLeft - paddingRight - borderLeft - borderRight;
251
+ var text = textarea.value || '';
252
+ var lines = text.split('\n');
253
+
254
+ // Si hay múltiples líneas por saltos de línea explícitos
255
+ if (lines.length > 1) {
256
+ hasMultipleVisualLines = true;
257
+ } else {
258
+ // Verificar si el texto se envuelve midiendo el ancho de cada línea
259
+ var _iterator = _createForOfIteratorHelper(lines),
260
+ _step;
261
+ try {
262
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
263
+ var line = _step.value;
264
+ if (line.trim() === '') continue;
265
+ var textWidth = context.measureText(line).width;
266
+ // Si alguna línea es más ancha que el textarea disponible, se envuelve
267
+ if (textWidth > textareaWidth) {
268
+ hasMultipleVisualLines = true;
269
+ break;
270
+ }
271
+ }
272
+ } catch (err) {
273
+ _iterator.e(err);
274
+ } finally {
275
+ _iterator.f();
276
+ }
277
+ }
113
278
  }
279
+ var newHeight;
280
+ if (isEmpty) {
281
+ // Cuando está vacío, usar altura mínima
282
+ newHeight = minHeight;
283
+ } else if (!hasMultipleVisualLines) {
284
+ // Cuando hay contenido pero solo una línea visual, usar altura mínima
285
+ newHeight = minHeight;
286
+ } else {
287
+ // Para múltiples líneas visuales, usar el scrollHeight
288
+ newHeight = Math.min(Math.max(scrollHeight, minHeight), maxHeight);
289
+ }
290
+
291
+ // Restaurar estilos antes de aplicar la nueva altura
292
+ textarea.style.minHeight = previousMinHeight || '22.1px';
293
+ textarea.style.maxHeight = previousMaxHeight || '122.1px';
294
+ textarea.style.height = "".concat(newHeight, "px");
114
295
  };
115
296
  useEffect(function () {
116
- if (!disabled) {
117
- var _editorRef$current;
118
- (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || _editorRef$current.focus();
297
+ if (inputRef.current && !disabled) {
298
+ inputRef.current.focus();
299
+ handleResize();
119
300
  }
120
301
  }, [disabled]);
302
+ useEffect(function () {
303
+ return function () {
304
+ if (toolChipExitTimerRef.current !== null) {
305
+ clearTimeout(toolChipExitTimerRef.current);
306
+ }
307
+ };
308
+ }, []);
309
+ useEffect(function () {
310
+ if (!isWebSearchActive && !isDeepSearchActive) {
311
+ setActiveToolChipHovered(false);
312
+ }
313
+ }, [isWebSearchActive, isDeepSearchActive]);
121
314
 
122
315
  // Auto-focus cuando cambia el agente o la conversación, o al montar el componente
123
316
  useEffect(function () {
317
+ // Comparación que maneja correctamente undefined/null
124
318
  var agentChanged = previousAgentIdRef.current !== (agent === null || agent === void 0 ? void 0 : agent.id);
319
+ // Comparación estricta que detecta cambios incluso cuando uno es undefined
125
320
  var previousChatId = previousChatIdRef.current;
126
321
  var currentChatId = chatId;
127
322
  var chatChanged = previousChatId !== currentChatId;
323
+ // Detectar cambio específico de undefined/null a un valor (nuevo chat -> conversación vieja)
128
324
  var changedFromNewChatToOldChat = (previousChatId === undefined || previousChatId === null) && currentChatId !== undefined && currentChatId !== null;
129
325
  var newChatStarted = previousNewChatKeyRef.current !== newChatKey;
130
326
  var isInitialMount = previousAgentIdRef.current === undefined && previousChatIdRef.current === undefined;
131
- if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
327
+ if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && inputRef.current && !disabled) {
328
+ // Usar setTimeout para asegurar que el DOM esté listo
329
+ // Aumentar el delay para casos donde el componente se está montando
132
330
  var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
133
331
  setTimeout(function () {
134
- var _editorRef$current2;
135
- if (!disabled) (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.focus();
332
+ if (inputRef.current && !disabled) {
333
+ inputRef.current.focus();
334
+ }
136
335
  }, delay);
137
336
  }
337
+
338
+ // Actualizar las referencias DESPUÉS de la comparación
138
339
  previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
139
340
  previousChatIdRef.current = chatId;
140
341
  previousNewChatKeyRef.current = newChatKey;
@@ -143,46 +344,72 @@ export var MAIAInput = function MAIAInput(_ref) {
143
344
  // Clear input when session changes (user switches to a different chat)
144
345
  useEffect(function () {
145
346
  var handleSessionChange = function handleSessionChange() {
146
- var _editorRef$current3;
147
- (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.clear();
148
- setValueText('');
347
+ setValueTextarea('');
149
348
  setIsDisabled(true);
349
+ if (inputRef.current) {
350
+ inputRef.current.value = '';
351
+ }
352
+ handleResize();
150
353
  };
151
354
  document.addEventListener('chat-session-changed', handleSessionChange);
152
355
  return function () {
153
- return document.removeEventListener('chat-session-changed', handleSessionChange);
356
+ document.removeEventListener('chat-session-changed', handleSessionChange);
154
357
  };
155
358
  }, []);
156
359
  useEffect(function () {
157
- var hasText = valueText.trim().length > 0;
360
+ var animationFrameId = requestAnimationFrame(function () {
361
+ handleResize();
362
+ });
363
+ return function () {
364
+ return cancelAnimationFrame(animationFrameId);
365
+ };
366
+ }, [valueTextarea]);
367
+ useEffect(function () {
368
+ var hasText = valueTextarea.trim().length > 0;
158
369
  var hasAttachments = attachments.length > 0;
159
370
  setIsDisabled(!hasText && !hasAttachments);
160
- }, [attachments, valueText]);
161
- var handleSendMessage = useCallback(function () {
162
- var _editorRef$current4, _state$text, _state$mentions, _editorRef$current5;
163
- var state = (_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 ? void 0 : _editorRef$current4.serialize();
164
- var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
165
- if (!text.trim() && !attachments.length) return;
166
- onSendMessage(text, attachments, (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : []);
167
- (_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.clear();
168
- setValueText('');
169
- setIsDisabled(true);
170
- }, [attachments, onSendMessage]);
171
- var handleEditorInput = useCallback(function (_ref2) {
172
- var text = _ref2.text,
173
- trigger = _ref2.trigger;
174
- setValueText(text);
175
- setIsDisabled(!text.trim() && !attachments.length);
176
- onChange === null || onChange === void 0 || onChange();
177
- handleTrigger(trigger);
178
- }, [attachments.length, onChange, handleTrigger]);
179
- var handleKeyDown = useCallback(function (e) {
180
- if (handlePopoverKeyDown(e)) return;
181
- if (e.key === 'Enter' && !e.shiftKey && !popoverOpen) {
371
+ }, [attachments, valueTextarea]);
372
+ var handleSendMessage = function handleSendMessage() {
373
+ if (inputRef.current) {
374
+ onSendMessage(inputRef.current.value, attachments);
375
+ inputRef.current.value = '';
376
+ setValueTextarea('');
377
+ setIsDisabled(true);
378
+ handleResize();
379
+ return;
380
+ }
381
+ if (attachments.length) {
382
+ onSendMessage('', attachments);
383
+ setValueTextarea('');
384
+ setIsDisabled(true);
385
+ }
386
+ };
387
+ var handleKeyDown = function handleKeyDown(e) {
388
+ if (e.key === 'Enter' && !e.shiftKey) {
182
389
  e.preventDefault();
183
- if (!isDisabled && !disabled) handleSendMessage();
390
+ if (!isDisabled && !disabled) {
391
+ handleSendMessage();
392
+ }
184
393
  }
185
- }, [handlePopoverKeyDown, popoverOpen, isDisabled, disabled, handleSendMessage]);
394
+ };
395
+ var handleChange = function handleChange(e) {
396
+ var hasText = e.target.value.trim().length > 0;
397
+ var hasAttachments = attachments.length > 0;
398
+ setIsDisabled(!hasText && !hasAttachments);
399
+ setValueTextarea(e.target.value);
400
+ onChange === null || onChange === void 0 || onChange();
401
+ };
402
+ var handlePaste = function handlePaste() {
403
+ setTimeout(function () {
404
+ var _inputRef$current$val, _inputRef$current;
405
+ handleResize();
406
+ var currentValue = (_inputRef$current$val = (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.value) !== null && _inputRef$current$val !== void 0 ? _inputRef$current$val : '';
407
+ var hasText = currentValue.trim().length > 0;
408
+ var hasAttachments = attachments.length > 0;
409
+ setValueTextarea(currentValue);
410
+ setIsDisabled(!hasText && !hasAttachments);
411
+ }, 10);
412
+ };
186
413
  var handleFileSelect = function handleFileSelect(e) {
187
414
  var files = e.target.files;
188
415
  if (!files) return;
@@ -265,17 +492,14 @@ export var MAIAInput = function MAIAInput(_ref) {
265
492
  fileInputRef.current.value = '';
266
493
  }
267
494
  };
268
- var handleAttachClick = function handleAttachClick() {
269
- var _fileInputRef$current;
270
- eventAmplitude(EVENTS.aiChatTools, {
271
- option: 'files'
272
- });
273
- if (attachments.length >= 5) return;
274
- (_fileInputRef$current = fileInputRef.current) === null || _fileInputRef$current === void 0 || _fileInputRef$current.click();
275
- };
276
495
  var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
277
496
  onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
278
497
  };
498
+ var handleBlur = function handleBlur() {
499
+ var hasText = valueTextarea.trim().length > 0;
500
+ var hasAttachments = attachments.length > 0;
501
+ setIsDisabled(!hasText && !hasAttachments);
502
+ };
279
503
  var handleWrapperFocus = function handleWrapperFocus() {
280
504
  return setIsFocused(true);
281
505
  };
@@ -291,7 +515,30 @@ export var MAIAInput = function MAIAInput(_ref) {
291
515
  eventAmplitude(EVENTS.aiChatStopResponse);
292
516
  onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
293
517
  };
294
- var iconColorInactive = isFocused ? '#666666' : '#999';
518
+ var plusIconColor = isFocused ? '#666666' : '#999';
519
+ var plusMenuIconColor = '#4d4d4d';
520
+ /** Alineado con `PlusMenuItemLabel` ($selected) y el check del menú */
521
+ var plusMenuSelectedColor = '#00578c';
522
+ var activeToolChipLeadingIcon;
523
+ if (activeToolChipHovered) {
524
+ activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
525
+ color: "#a4adb5",
526
+ width: 18,
527
+ height: 18
528
+ });
529
+ } else if (isWebSearchActive) {
530
+ activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Globe, {
531
+ color: plusMenuIconColor,
532
+ width: 18,
533
+ height: 18
534
+ });
535
+ } else {
536
+ activeToolChipLeadingIcon = /*#__PURE__*/_jsx(TelescopeIcon, {
537
+ color: plusMenuIconColor,
538
+ width: 18,
539
+ height: 18
540
+ });
541
+ }
295
542
  return /*#__PURE__*/_jsxs(_Fragment, {
296
543
  children: [/*#__PURE__*/_jsxs(StyledMAIAInputWrapper, {
297
544
  ref: wrapperRef,
@@ -330,57 +577,120 @@ export var MAIAInput = function MAIAInput(_ref) {
330
577
  })
331
578
  }, "".concat(index, "-").concat(attachment.name));
332
579
  })
333
- }), /*#__PURE__*/_jsx(ContextMentionEditor, {
334
- ref: editorRef,
580
+ }), /*#__PURE__*/_jsx(StyledMAIAInput, {
581
+ ref: inputRef,
335
582
  disabled: disabled,
336
- placeholder: placeholder,
337
- onInput: handleEditorInput,
583
+ onChange: handleChange,
338
584
  onKeyDown: handleKeyDown,
339
- onFocus: handleWrapperFocus,
340
- onBlur: handleWrapperBlur
585
+ onPaste: handlePaste,
586
+ placeholder: placeholder,
587
+ alignButtons: alignButtons,
588
+ onBlur: handleBlur
341
589
  }), /*#__PURE__*/_jsxs(StyledMAIAInputButtons, {
342
- children: [/*#__PURE__*/_jsxs("div", {
343
- style: {
344
- display: 'flex',
345
- gap: '10px'
346
- },
347
- children: [/*#__PURE__*/_jsx(Tooltip, {
348
- title: attachments.length >= 5 ? t('chat.limitFiles') : t('chat.attachFile'),
349
- children: /*#__PURE__*/_jsx(SCMIWrapperAttachmentButton, {
350
- hasAttachments: !!attachments.length,
351
- isMaximized: attachments.length >= 5,
352
- $isFocused: isFocused,
353
- onClick: handleAttachClick,
354
- children: /*#__PURE__*/_jsx(Attach, {
355
- color: !attachments.length ? iconColorInactive : "".concat(BLUE_IA_COLORS[500]),
356
- width: 18,
357
- height: 18
358
- })
590
+ children: [/*#__PURE__*/_jsxs(PlusMenuToolsRow, {
591
+ children: [/*#__PURE__*/_jsx(PlusToggleButton, {
592
+ type: "button",
593
+ $menuOpen: plusMenuOpen,
594
+ onClick: handlePlusButtonClick,
595
+ "aria-label": t('chat.openPlusMenuAria'),
596
+ "aria-haspopup": "true",
597
+ "aria-expanded": plusMenuOpen,
598
+ children: /*#__PURE__*/_jsx(Plus, {
599
+ color: plusIconColor,
600
+ width: 20,
601
+ height: 20
359
602
  })
360
- }), /*#__PURE__*/_jsx(Tooltip, {
361
- title: t('chat.searchWeb'),
362
- children: /*#__PURE__*/_jsx(SCMIWrapperWebSearchButton, {
363
- isActive: !!isWebSearchActive,
364
- $isFocused: isFocused,
365
- onClick: handleWebSearchToggle,
366
- children: /*#__PURE__*/_jsx(Globe, {
367
- color: isWebSearchActive ? "".concat(BLUE_IA_COLORS[500]) : iconColorInactive,
368
- width: 18,
369
- height: 18
370
- })
371
- })
372
- }), /*#__PURE__*/_jsx(Tooltip, {
373
- title: t('chat.deepSearch'),
374
- children: /*#__PURE__*/_jsx(SCMIWrapperDeepSearchButton, {
375
- isActive: !!isDeepSearchActive,
376
- $isFocused: isFocused,
377
- onClick: handleDeepSearchToggle,
378
- children: /*#__PURE__*/_jsx(TelescopeIcon, {
379
- color: isDeepSearchActive ? "".concat(BLUE_IA_COLORS[500]) : iconColorInactive,
380
- width: 18,
381
- height: 18
382
- })
603
+ }), /*#__PURE__*/_jsx(Popover, {
604
+ open: plusMenuOpen,
605
+ anchorEl: plusMenuAnchor,
606
+ onClose: closePlusMenu,
607
+ anchorOrigin: {
608
+ vertical: 'top',
609
+ horizontal: 'left'
610
+ },
611
+ transformOrigin: {
612
+ vertical: 'bottom',
613
+ horizontal: 'left'
614
+ },
615
+ slotProps: {
616
+ paper: {
617
+ elevation: 0,
618
+ sx: {
619
+ overflow: 'visible',
620
+ borderRadius: '4px',
621
+ boxShadow: 'none',
622
+ backgroundColor: 'transparent',
623
+ marginTop: '-4px'
624
+ }
625
+ }
626
+ },
627
+ children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
628
+ children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
629
+ children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
630
+ type: "button",
631
+ onClick: handlePlusMenuAttach,
632
+ children: [/*#__PURE__*/_jsx(Attach, {
633
+ color: plusMenuIconColor,
634
+ width: 20,
635
+ height: 20
636
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
637
+ $selected: false,
638
+ children: t('chat.plusMenuAttach')
639
+ })]
640
+ }), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
641
+ type: "button",
642
+ onClick: handlePlusMenuWebSearch,
643
+ children: [/*#__PURE__*/_jsx(Globe, {
644
+ color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
645
+ width: 20,
646
+ height: 20
647
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
648
+ $selected: !!isWebSearchActive,
649
+ children: t('chat.searchWeb')
650
+ }), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
651
+ color: plusMenuSelectedColor,
652
+ width: 16,
653
+ height: 16
654
+ }) : null]
655
+ })]
656
+ }), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
657
+ type: "button",
658
+ onClick: handlePlusMenuDeepSearch,
659
+ children: [/*#__PURE__*/_jsx(TelescopeIcon, {
660
+ color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
661
+ width: 20,
662
+ height: 20
663
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
664
+ $selected: !!isDeepSearchActive,
665
+ children: t('chat.plusMenuDeepInvestigation')
666
+ }), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
667
+ color: plusMenuSelectedColor,
668
+ width: 16,
669
+ height: 16
670
+ }) : null]
671
+ })]
383
672
  })
673
+ }), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
674
+ $hovered: activeToolChipHovered,
675
+ $exiting: toolChipExiting,
676
+ onMouseEnter: function onMouseEnter() {
677
+ return setActiveToolChipHovered(true);
678
+ },
679
+ onMouseLeave: function onMouseLeave() {
680
+ return setActiveToolChipHovered(false);
681
+ },
682
+ children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
683
+ type: "button",
684
+ $closeShown: activeToolChipHovered,
685
+ "aria-label": t('chat.removeActiveToolAria'),
686
+ onClick: function onClick(e) {
687
+ e.stopPropagation();
688
+ beginToolChipExit();
689
+ },
690
+ children: activeToolChipLeadingIcon
691
+ }), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
692
+ children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
693
+ })]
384
694
  })]
385
695
  }), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
386
696
  title: t('chat.stop'),
@@ -396,7 +706,7 @@ export var MAIAInput = function MAIAInput(_ref) {
396
706
  onClick: handleSendMessage,
397
707
  className: className,
398
708
  disabled: isDisabled || disabled,
399
- hasValues: !!valueText.length,
709
+ hasValues: !!valueTextarea.length,
400
710
  children: /*#__PURE__*/_jsx(PaperPlane, {
401
711
  color: "#BFBFBF",
402
712
  width: 18,
@@ -426,7 +736,7 @@ export var MAIAInput = function MAIAInput(_ref) {
426
736
  excludedFiles: modalProps.excludedFiles,
427
737
  exceededFiles: modalProps.exceededFiles,
428
738
  fileSizes: modalProps.fileSizes
429
- }), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)]
739
+ })]
430
740
  });
431
741
  };
432
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlUG9ydGFsIiwiUGFwZXJQbGFuZSIsIkF0dGFjaCIsIkdsb2JlIiwiVHJhc2giLCJUb29sdGlwIiwiU0NNSUF0dGFjaG1lbnQiLCJTQ01JQXR0YWNobWVudERlbGV0ZUljb24iLCJTQ01JV3JhcHBlckF0dGFjaG1lbnRCdXR0b24iLCJTQ01JV3JhcHBlcldlYlNlYXJjaEJ1dHRvbiIsIlNDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvbiIsIlN0eWxlZE1BSUFJbnB1dEJ1dHRvbnMiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZXMiLCJNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OIiwiTUFYX0ZJTEVfU0laRV9NQl9PTEQiLCJNQVhfRklMRV9TSVpFX01CX0FVRElPIiwiQkxVRV9JQV9DT0xPUlMiLCJDb250ZXh0TWVudGlvbkVkaXRvciIsInVzZU1lbnRpb25Qb3BvdmVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTUFJQUlucHV0IiwiX3JlZiIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJfdXNlVCIsInQiLCJlZGl0b3JSZWYiLCJmaWxlSW5wdXRSZWYiLCJ3cmFwcGVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidmFsdWVUZXh0Iiwic2V0VmFsdWVUZXh0IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0Rpc2FibGVkIiwic2V0SXNEaXNhYmxlZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNGb2N1c2VkIiwic2V0SXNGb2N1c2VkIiwiX3VzZVN0YXRlNyIsImlzT3BlbiIsImV4Y2x1ZGVkRmlsZXMiLCJleGNlZWRlZEZpbGVzIiwiZmlsZVNpemVzIiwiX3VzZVN0YXRlOCIsIm1vZGFsUHJvcHMiLCJzZXRNb2RhbFByb3BzIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwidG9nZ2xlRGVlcFNlYXJjaCIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiX3VzZU1lbnRpb25Qb3BvdmVyIiwicG9wb3Zlck9wZW4iLCJoYW5kbGVUcmlnZ2VyIiwiaGFuZGxlUG9wb3ZlcktleURvd24iLCJoYW5kbGVLZXlEb3duIiwicG9wb3Zlck5vZGUiLCJwcmV2aW91c0FnZW50SWRSZWYiLCJ1bmRlZmluZWQiLCJwcmV2aW91c0NoYXRJZFJlZiIsInByZXZpb3VzTmV3Q2hhdEtleVJlZiIsImhhbmRsZVdlYlNlYXJjaFRvZ2dsZSIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwiaGFuZGxlRGVlcFNlYXJjaFRvZ2dsZSIsIl9lZGl0b3JSZWYkY3VycmVudCIsImN1cnJlbnQiLCJmb2N1cyIsImFnZW50Q2hhbmdlZCIsImlkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJzZXRUaW1lb3V0IiwiX2VkaXRvclJlZiRjdXJyZW50MiIsImhhbmRsZVNlc3Npb25DaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwiY2xlYXIiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFzVGV4dCIsInRyaW0iLCJsZW5ndGgiLCJoYXNBdHRhY2htZW50cyIsImhhbmRsZVNlbmRNZXNzYWdlIiwiX2VkaXRvclJlZiRjdXJyZW50NCIsIl9zdGF0ZSR0ZXh0IiwiX3N0YXRlJG1lbnRpb25zIiwiX2VkaXRvclJlZiRjdXJyZW50NSIsInN0YXRlIiwic2VyaWFsaXplIiwidGV4dCIsIm1lbnRpb25zIiwiaGFuZGxlRWRpdG9ySW5wdXQiLCJfcmVmMiIsInRyaWdnZXIiLCJlIiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsImhhbmRsZUZpbGVTZWxlY3QiLCJmaWxlcyIsInRhcmdldCIsImZpbGVzSW5zZXJ0ZWQiLCJpc05ld0Zvcm1hdCIsImV4dGVuc2lvbiIsImluY2x1ZGVzIiwiaXNPbGRGb3JtYXQiLCJpc0F1ZGlvRm9ybWF0IiwiQXJyYXkiLCJmcm9tIiwiZm9yRWFjaCIsImZpbGUiLCJfZmlsZU5hbWVQYXJ0cyRwb3AiLCJleGNsdWRlZEZpbGUiLCJmaWxlTmFtZVBhcnRzIiwibmFtZSIsInNwbGl0IiwiZmlsZUV4dGVuc2lvbiIsImNvbmNhdCIsInBvcCIsInRvTG93ZXJDYXNlIiwic2l6ZSIsInB1c2giLCJ0eXBlRmlsZSIsInR5cGUiLCJwYXJzZWRGaWxlIiwiRmlsZSIsInZhbHVlIiwiaGFuZGxlQXR0YWNoQ2xpY2siLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQiLCJjbGljayIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVXcmFwcGVyRm9jdXMiLCJoYW5kbGVXcmFwcGVyQmx1ciIsIl93cmFwcGVyUmVmJGN1cnJlbnQiLCJjb250YWlucyIsImFjdGl2ZUVsZW1lbnQiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImFpQ2hhdFN0b3BSZXNwb25zZSIsImljb25Db2xvckluYWN0aXZlIiwiY2hpbGRyZW4iLCJyZWYiLCJvbkZvY3VzIiwib25CbHVyIiwic3R5bGUiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwidGl0bGUiLCJpY29uIiwib25DbGljayIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaXNNYXhpbWl6ZWQiLCIkaXNGb2N1c2VkIiwiaXNBY3RpdmUiLCJoYXNWYWx1ZXMiLCJtdWx0aXBsZSIsImFjY2VwdCIsIm9uQ2xvc2UiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWxvbmVseS1pZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgQ2hhbmdlRXZlbnQsIEtleWJvYXJkRXZlbnQsIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgUGFwZXJQbGFuZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BhcGVyUGxhbmUnXG5pbXBvcnQgeyBBdHRhY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BdHRhY2gnXG5pbXBvcnQgeyBHbG9iZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0dsb2JlJ1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHtcbiAgU0NNSUF0dGFjaG1lbnQsXG4gIFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbixcbiAgU0NNSVdyYXBwZXJBdHRhY2htZW50QnV0dG9uLFxuICBTQ01JV3JhcHBlcldlYlNlYXJjaEJ1dHRvbixcbiAgU0NNSVdyYXBwZXJEZWVwU2VhcmNoQnV0dG9uLFxuICBTdHlsZWRNQUlBSW5wdXRCdXR0b25zLFxuICBTdHlsZWRNQUlBSW5wdXRXcmFwcGVyLFxuICBTdHlsZWRNQUlBU2VuZEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wSWNvbixcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgVGVsZXNjb3BlSWNvbiB9IGZyb20gJy4uL2ljb25zL1RlbGVzY29wZUljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcbmltcG9ydCB7IEJMVUVfSUFfQ09MT1JTIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9yLCBDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZSB9IGZyb20gJy4uL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlTWVudGlvblBvcG92ZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbnR5cGUgQXR0YWNobWVudEZpbGUgPSB7XG4gIGZpbGU6IEZpbGVcbiAgb3JpZ2luYWxGaWxlPzogRmlsZVxuICBpZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn1cblxudHlwZSBNQUlBSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvblNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCkgPT4gdm9pZFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbdmFsdWVUZXh0LCBzZXRWYWx1ZVRleHRdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc0Rpc2FibGVkLCBzZXRJc0Rpc2FibGVkXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsUHJvcHMsIHNldE1vZGFsUHJvcHNdID0gdXNlU3RhdGUoe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXhjbHVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZXhjZWVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZmlsZVNpemVzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICB9KVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyB0b2dnbGVXZWJTZWFyY2gsIGlzV2ViU2VhcmNoQWN0aXZlLCB0b2dnbGVEZWVwU2VhcmNoLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICBjb25zdCB7XG4gICAgcG9wb3Zlck9wZW4sXG4gICAgaGFuZGxlVHJpZ2dlcixcbiAgICBoYW5kbGVLZXlEb3duOiBoYW5kbGVQb3BvdmVyS2V5RG93bixcbiAgICBwb3BvdmVyTm9kZSxcbiAgfSA9IHVzZU1lbnRpb25Qb3BvdmVyKHtcbiAgICBlZGl0b3JSZWYsXG4gIH0pXG5cbiAgLy8gSW5pY2lhbGl6YXIgbGFzIHJlZmVyZW5jaWFzIGNvbW8gdW5kZWZpbmVkIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGNhbWJpbyBjb3JyZWN0YW1lbnRlXG4gIGNvbnN0IHByZXZpb3VzQWdlbnRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTmV3Q2hhdEtleVJlZiA9IHVzZVJlZjxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBjb25zdCBoYW5kbGVXZWJTZWFyY2hUb2dnbGUgPSAoKSA9PiB7XG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7IG9wdGlvbjogJ3NlYXJjaCcgfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWVwU2VhcmNoVG9nZ2xlID0gKCkgPT4ge1xuICAgIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgaWYgKCFpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywgeyBvcHRpb246ICdkZWVwX3NlYXJjaCcgfSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIC8vIEF1dG8tZm9jdXMgY3VhbmRvIGNhbWJpYSBlbCBhZ2VudGUgbyBsYSBjb252ZXJzYWNpw7NuLCBvIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWdlbnRDaGFuZ2VkID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgIT09IGFnZW50Py5pZFxuICAgIGNvbnN0IHByZXZpb3VzQ2hhdElkID0gcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudFxuICAgIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSBjaGF0SWRcbiAgICBjb25zdCBjaGF0Q2hhbmdlZCA9IHByZXZpb3VzQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkXG4gICAgY29uc3QgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID1cbiAgICAgIChwcmV2aW91c0NoYXRJZCA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzQ2hhdElkID09PSBudWxsKSAmJiBjdXJyZW50Q2hhdElkICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENoYXRJZCAhPT0gbnVsbFxuICAgIGNvbnN0IG5ld0NoYXRTdGFydGVkID0gcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgIT09IG5ld0NoYXRLZXlcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgJiYgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkXG5cbiAgICBpZiAoKGFnZW50Q2hhbmdlZCB8fCBjaGF0Q2hhbmdlZCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgfHwgbmV3Q2hhdFN0YXJ0ZWQgfHwgaXNJbml0aWFsTW91bnQpICYmICFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGVsYXkgPSBpc0luaXRpYWxNb3VudCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPyAyMDAgOiAxMDBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWRpc2FibGVkKSBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgZGVsYXkpXG4gICAgfVxuXG4gICAgcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPSBhZ2VudD8uaWRcbiAgICBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID0gY2hhdElkXG4gICAgcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgPSBuZXdDaGF0S2V5XG4gIH0sIFthZ2VudD8uaWQsIGNoYXRJZCwgbmV3Q2hhdEtleSwgZGlzYWJsZWRdKVxuXG4gIC8vIENsZWFyIGlucHV0IHdoZW4gc2Vzc2lvbiBjaGFuZ2VzICh1c2VyIHN3aXRjaGVzIHRvIGEgZGlmZmVyZW50IGNoYXQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlU2Vzc2lvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICBzZXRWYWx1ZVRleHQoJycpXG4gICAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzVGV4dCA9IHZhbHVlVGV4dC50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9LCBbYXR0YWNobWVudHMsIHZhbHVlVGV4dF0pXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBlZGl0b3JSZWYuY3VycmVudD8uc2VyaWFsaXplKClcbiAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICBpZiAoIXRleHQudHJpbSgpICYmICFhdHRhY2htZW50cy5sZW5ndGgpIHJldHVyblxuICAgIG9uU2VuZE1lc3NhZ2UodGV4dCwgYXR0YWNobWVudHMsIHN0YXRlPy5tZW50aW9ucyA/PyBbXSlcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uY2xlYXIoKVxuICAgIHNldFZhbHVlVGV4dCgnJylcbiAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gIH0sIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZV0pXG5cbiAgY29uc3QgaGFuZGxlRWRpdG9ySW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAoeyB0ZXh0LCB0cmlnZ2VyIH06IHsgdGV4dDogc3RyaW5nOyBtZW50aW9uczogQ29udGV4dE1lbnRpb25bXTsgdHJpZ2dlcjogeyBhY3RpdmU6IGJvb2xlYW47IHF1ZXJ5OiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZVRleHQodGV4dClcbiAgICAgIHNldElzRGlzYWJsZWQoIXRleHQudHJpbSgpICYmICFhdHRhY2htZW50cy5sZW5ndGgpXG4gICAgICBvbkNoYW5nZT8uKClcbiAgICAgIGhhbmRsZVRyaWdnZXIodHJpZ2dlcilcbiAgICB9LFxuICAgIFthdHRhY2htZW50cy5sZW5ndGgsIG9uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyXVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGhhbmRsZVBvcG92ZXJLZXlEb3duKGUpKSByZXR1cm5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSAmJiAhcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGlmICghaXNEaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIGlzRGlzYWJsZWQsIGRpc2FibGVkLCBoYW5kbGVTZW5kTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG5cbiAgICBjb25zdCBleGNlZWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZXhjbHVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGZpbGVTaXplczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9XG4gICAgbGV0IGZpbGVzSW5zZXJ0ZWQgPSBhdHRhY2htZW50cy5sZW5ndGhcblxuICAgIC8vIERlZmluaXIgbMOtbWl0ZXMgcGFyYSBkaWZlcmVudGVzIHRpcG9zIGRlIGFyY2hpdm9zXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcueGxzeCcsICcueGxzJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuICAgIGNvbnN0IGlzQXVkaW9Gb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuXG4gICAgQXJyYXkuZnJvbShmaWxlcykuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIC8vIFZhbGlkYWNpb25lcyBlc3BlY8OtZmljYXMgc2Vnw7puIGVsIHRpcG8gZGUgYXJjaGl2b1xuICAgICAgaWYgKGlzTmV3Rm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgbnVldm9zIGZvcm1hdG9zOiBoYXN0YSA0Ljk5TUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2xkRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgZm9ybWF0b3MgYW50ZXJpb3JlczogaGFzdGEgMU1CIHBvciBhcmNoaXZvLCBoYXN0YSA1IGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX09MRCAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiA1KSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIGRlIGF1ZGlvOiBoYXN0YSAxME1CIHBvciBhcmNoaXZvLCBoYXN0YSA1IGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX0FVRElPICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IDUpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4Y2x1ZGVkRmlsZSkge1xuICAgICAgICBmaWxlc0luc2VydGVkICs9IDFcbiAgICAgICAgY29uc3QgdHlwZUZpbGUgPSBmaWxlLnR5cGUgfHwgZmlsZVR5cGVzW2ZpbGVFeHRlbnNpb25dXG4gICAgICAgIGNvbnN0IHBhcnNlZEZpbGUgPSBuZXcgRmlsZShbZmlsZV0sIGZpbGUubmFtZSwgeyB0eXBlOiB0eXBlRmlsZSB9KVxuICAgICAgICBvbkZpbGVBdHRhY2g/LihwYXJzZWRGaWxlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRJc0Rpc2FibGVkKGZhbHNlKVxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNoQ2xpY2sgPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7IG9wdGlvbjogJ2ZpbGVzJyB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gNSkgcmV0dXJuXG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQgPSAoZmlsZUlkOiBzdHJpbmcpID0+IHtcbiAgICBvbkRlbGV0ZUF0dGFjaG1lbnQ/LihmaWxlSWQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVXcmFwcGVyRm9jdXMgPSAoKSA9PiBzZXRJc0ZvY3VzZWQodHJ1ZSlcbiAgY29uc3QgaGFuZGxlV3JhcHBlckJsdXIgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXdyYXBwZXJSZWYuY3VycmVudD8uY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgc2V0SXNGb2N1c2VkKGZhbHNlKVxuICAgICAgfVxuICAgIH0sIDApXG4gIH1cblxuICBjb25zdCBoYW5kbGVTdG9wR2VuZXJhdGlvbiA9ICgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U3RvcFJlc3BvbnNlKVxuICAgIG9uU3RvcEdlbmVyYXRpb24/LigpXG4gIH1cblxuICBjb25zdCBpY29uQ29sb3JJbmFjdGl2ZSA9IGlzRm9jdXNlZCA/ICcjNjY2NjY2JyA6ICcjOTk5J1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdHlsZWRNQUlBSW5wdXRXcmFwcGVyXG4gICAgICAgIHJlZj17d3JhcHBlclJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgaGFzQXR0YWNobWVudHM9eyEhYXR0YWNobWVudHMubGVuZ3RofVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVXcmFwcGVyRm9jdXN9XG4gICAgICAgIG9uQmx1cj17aGFuZGxlV3JhcHBlckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHshIWF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEycHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lUGFydHMgPSBhdHRhY2htZW50Lm5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeUV4dGVuc2lvbiA9IFsnLnBuZycsICcuanBnJywgJy5qcGVnJ10uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbilcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5TWltZSA9IGF0dGFjaG1lbnQudHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZSA9IGlzSW1hZ2VCeU1pbWUgJiYgaXNJbWFnZUJ5RXh0ZW5zaW9uXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHtpbmRleH0tJHthdHRhY2htZW50Lm5hbWV9YH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQgaXNJbWFnZT17aXNJbWFnZX0+XG4gICAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50Lmljb259XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudERlbGV0ZUljb24gb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwicmdiYSgxOTEsIDE5MSwgMTkxLCAxKVwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudERlbGV0ZUljb24+XG4gICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50PlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxDb250ZXh0TWVudGlvbkVkaXRvclxuICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgb25JbnB1dD17aGFuZGxlRWRpdG9ySW5wdXR9XG4gICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZVdyYXBwZXJGb2N1c31cbiAgICAgICAgICBvbkJsdXI9e2hhbmRsZVdyYXBwZXJCbHVyfVxuICAgICAgICAvPlxuICAgICAgICA8U3R5bGVkTUFJQUlucHV0QnV0dG9ucz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTBweCcgfX0+XG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudHMubGVuZ3RoID49IDUgPyB0KCdjaGF0LmxpbWl0RmlsZXMnKSA6IHQoJ2NoYXQuYXR0YWNoRmlsZScpfT5cbiAgICAgICAgICAgICAgPFNDTUlXcmFwcGVyQXR0YWNobWVudEJ1dHRvblxuICAgICAgICAgICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICBpc01heGltaXplZD17YXR0YWNobWVudHMubGVuZ3RoID49IDV9XG4gICAgICAgICAgICAgICAgJGlzRm9jdXNlZD17aXNGb2N1c2VkfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUF0dGFjaENsaWNrfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEF0dGFjaFxuICAgICAgICAgICAgICAgICAgY29sb3I9eyFhdHRhY2htZW50cy5sZW5ndGggPyBpY29uQ29sb3JJbmFjdGl2ZSA6IGAke0JMVUVfSUFfQ09MT1JTWzUwMF19YH1cbiAgICAgICAgICAgICAgICAgIHdpZHRoPXsxOH1cbiAgICAgICAgICAgICAgICAgIGhlaWdodD17MTh9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ01JV3JhcHBlckF0dGFjaG1lbnRCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zZWFyY2hXZWInKX0+XG4gICAgICAgICAgICAgIDxTQ01JV3JhcHBlcldlYlNlYXJjaEJ1dHRvblxuICAgICAgICAgICAgICAgIGlzQWN0aXZlPXshIWlzV2ViU2VhcmNoQWN0aXZlfVxuICAgICAgICAgICAgICAgICRpc0ZvY3VzZWQ9e2lzRm9jdXNlZH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVXZWJTZWFyY2hUb2dnbGV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8R2xvYmVcbiAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1dlYlNlYXJjaEFjdGl2ZSA/IGAke0JMVUVfSUFfQ09MT1JTWzUwMF19YCA6IGljb25Db2xvckluYWN0aXZlfVxuICAgICAgICAgICAgICAgICAgd2lkdGg9ezE4fVxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsxOH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1NDTUlXcmFwcGVyV2ViU2VhcmNoQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuZGVlcFNlYXJjaCcpfT5cbiAgICAgICAgICAgICAgPFNDTUlXcmFwcGVyRGVlcFNlYXJjaEJ1dHRvblxuICAgICAgICAgICAgICAgIGlzQWN0aXZlPXshIWlzRGVlcFNlYXJjaEFjdGl2ZX1cbiAgICAgICAgICAgICAgICAkaXNGb2N1c2VkPXtpc0ZvY3VzZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVlcFNlYXJjaFRvZ2dsZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUZWxlc2NvcGVJY29uXG4gICAgICAgICAgICAgICAgICBjb2xvcj17aXNEZWVwU2VhcmNoQWN0aXZlID8gYCR7QkxVRV9JQV9DT0xPUlNbNTAwXX1gIDogaWNvbkNvbG9ySW5hY3RpdmV9XG4gICAgICAgICAgICAgICAgICB3aWR0aD17MTh9XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9ezE4fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NNSVdyYXBwZXJEZWVwU2VhcmNoQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAge2lzV3JpdGluZyA/IChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnN0b3AnKX0+XG4gICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEJ1dHRvbiBkaXNhYmxlZD17ZmFsc2V9IG9uQ2xpY2s9e2hhbmRsZVN0b3BHZW5lcmF0aW9ufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTdG9wQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17aXNTdHJlYW1pbmcgPyB0KCdjaGF0LnNlbmQnKSA6IHQoJ2NoYXQuc2VuZCcpfT5cbiAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTZW5kQnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgaGFzVmFsdWVzPXshIXZhbHVlVGV4dC5sZW5ndGh9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGFwZXJQbGFuZSBjb2xvcj1cIiNCRkJGQkZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdHlsZWRNQUlBSW5wdXRCdXR0b25zPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwb3BvdmVyTm9kZSAmJiBjcmVhdGVQb3J0YWwocG9wb3Zlck5vZGUsIGRvY3VtZW50LmJvZHkpfVxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdEQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN2RyxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFFdEUsU0FDRUMsY0FBYyxFQUNkQyx3QkFBd0IsRUFDeEJDLDJCQUEyQixFQUMzQkMsMEJBQTBCLEVBQzFCQywyQkFBMkIsRUFDM0JDLHNCQUFzQixFQUN0QkMsc0JBQXNCLEVBQ3RCQyxvQkFBb0IsRUFDcEJDLG9CQUFvQixFQUNwQkMsa0JBQWtCLFFBQ2IsVUFBVTtBQUNqQixTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFDbEUsU0FBU0MsZ0JBQWdCLFFBQVEsa0NBQWtDO0FBQ25FLFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsYUFBYSxRQUFRLHdCQUF3QjtBQUN0RCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FDRUMsZ0JBQWdCLEVBQ2hCQyxTQUFTLEVBQ1RDLDRCQUE0QixFQUM1QkMsb0JBQW9CLEVBQ3BCQyxzQkFBc0IsUUFDakIscUNBQXFDO0FBQzVDLFNBQVNDLGNBQWMsUUFBUSx3QkFBd0I7QUFDdkQsU0FBU0Msb0JBQW9CLFFBQW9DLHlCQUF5QjtBQUMxRjtBQUNBLFNBQVNDLGlCQUFpQixRQUFRLGtDQUFrQztBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBOEJwRSxPQUFPLElBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFTQSxDQUFBQyxJQUFBLEVBZUE7RUFBQSxJQWRwQkMsYUFBYSxHQUFBRCxJQUFBLENBQWJDLGFBQWE7SUFDYkMsU0FBUyxHQUFBRixJQUFBLENBQVRFLFNBQVM7SUFDVEMsUUFBUSxHQUFBSCxJQUFBLENBQVJHLFFBQVE7SUFDUkMsV0FBVyxHQUFBSixJQUFBLENBQVhJLFdBQVc7SUFDWEMsU0FBUyxHQUFBTCxJQUFBLENBQVRLLFNBQVM7SUFDVEMsZ0JBQWdCLEdBQUFOLElBQUEsQ0FBaEJNLGdCQUFnQjtJQUNoQkMsV0FBVyxHQUFBUCxJQUFBLENBQVhPLFdBQVc7SUFDWEMsUUFBUSxHQUFBUixJQUFBLENBQVJRLFFBQVE7SUFBQUMsaUJBQUEsR0FBQVQsSUFBQSxDQUNSVSxZQUFZO0lBQVpBLFlBQVksR0FBQUQsaUJBQUEsY0FBRyxVQUFVLEdBQUFBLGlCQUFBO0lBQ3pCRSxZQUFZLEdBQUFYLElBQUEsQ0FBWlcsWUFBWTtJQUNaQyxrQkFBa0IsR0FBQVosSUFBQSxDQUFsQlksa0JBQWtCO0lBQUFDLGdCQUFBLEdBQUFiLElBQUEsQ0FDbEJjLFdBQVc7SUFBWEEsV0FBVyxHQUFBRCxnQkFBQSxjQUFHLEVBQUUsR0FBQUEsZ0JBQUE7SUFDaEJFLE1BQU0sR0FBQWYsSUFBQSxDQUFOZSxNQUFNO0lBQ05DLFVBQVUsR0FBQWhCLElBQUEsQ0FBVmdCLFVBQVU7RUFFVixJQUFBQyxLQUFBLEdBQWNwQyxJQUFJLENBQUMsQ0FBQztJQUFacUMsQ0FBQyxHQUFBRCxLQUFBLENBQURDLENBQUM7RUFDVCxJQUFNQyxTQUFTLEdBQUcxRCxNQUFNLENBQTZCLElBQUksQ0FBQztFQUMxRCxJQUFNMkQsWUFBWSxHQUFHM0QsTUFBTSxDQUFtQixJQUFJLENBQUM7RUFDbkQsSUFBTTRELFVBQVUsR0FBRzVELE1BQU0sQ0FBaUIsSUFBSSxDQUFDO0VBQy9DLElBQUE2RCxTQUFBLEdBQWtDNUQsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUFBNkQsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBdkNHLFNBQVMsR0FBQUYsVUFBQTtJQUFFRyxZQUFZLEdBQUFILFVBQUE7RUFDOUIsSUFBQUksVUFBQSxHQUFvQ2pFLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFBQWtFLFVBQUEsR0FBQUosY0FBQSxDQUFBRyxVQUFBO0lBQTNDRSxVQUFVLEdBQUFELFVBQUE7SUFBRUUsYUFBYSxHQUFBRixVQUFBO0VBQ2hDLElBQUFHLFVBQUEsR0FBa0NyRSxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFzRSxVQUFBLEdBQUFSLGNBQUEsQ0FBQU8sVUFBQTtJQUExQ0UsU0FBUyxHQUFBRCxVQUFBO0lBQUVFLFlBQVksR0FBQUYsVUFBQTtFQUM5QixJQUFBRyxVQUFBLEdBQW9DekUsUUFBUSxDQUFDO01BQzNDMEUsTUFBTSxFQUFFLEtBQUs7TUFDYkMsYUFBYSxFQUFFLEVBQWM7TUFDN0JDLGFBQWEsRUFBRSxFQUFjO01BQzdCQyxTQUFTLEVBQUUsQ0FBQztJQUNkLENBQUMsQ0FBQztJQUFBQyxVQUFBLEdBQUFoQixjQUFBLENBQUFXLFVBQUE7SUFMS00sVUFBVSxHQUFBRCxVQUFBO0lBQUVFLGFBQWEsR0FBQUYsVUFBQTtFQU1oQyxJQUFNRyxjQUFjLEdBQUczRCxRQUFRLENBQUMsQ0FBQztFQUNqQyxJQUFBNEQsaUJBQUEsR0FBNEZqRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQXRHa0UsZUFBZSxHQUFBRCxpQkFBQSxDQUFmQyxlQUFlO0lBQUVDLGlCQUFpQixHQUFBRixpQkFBQSxDQUFqQkUsaUJBQWlCO0lBQUVDLGdCQUFnQixHQUFBSCxpQkFBQSxDQUFoQkcsZ0JBQWdCO0lBQUVDLGtCQUFrQixHQUFBSixpQkFBQSxDQUFsQkksa0JBQWtCO0lBQUVDLEtBQUssR0FBQUwsaUJBQUEsQ0FBTEssS0FBSztFQUV2RixJQUFBQyxrQkFBQSxHQUtJMUQsaUJBQWlCLENBQUM7TUFDcEIyQixTQUFTLEVBQVRBO0lBQ0YsQ0FBQyxDQUFDO0lBTkFnQyxXQUFXLEdBQUFELGtCQUFBLENBQVhDLFdBQVc7SUFDWEMsYUFBYSxHQUFBRixrQkFBQSxDQUFiRSxhQUFhO0lBQ0VDLG9CQUFvQixHQUFBSCxrQkFBQSxDQUFuQ0ksYUFBYTtJQUNiQyxXQUFXLEdBQUFMLGtCQUFBLENBQVhLLFdBQVc7O0VBS2I7RUFDQSxJQUFNQyxrQkFBa0IsR0FBRy9GLE1BQU0sQ0FBcUJnRyxTQUFTLENBQUM7RUFDaEUsSUFBTUMsaUJBQWlCLEdBQUdqRyxNQUFNLENBQXFCZ0csU0FBUyxDQUFDO0VBQy9ELElBQU1FLHFCQUFxQixHQUFHbEcsTUFBTSxDQUFxQmdHLFNBQVMsQ0FBQztFQUVuRSxJQUFNRyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFBLEVBQVM7SUFDbEMsSUFBSVosa0JBQWtCLEVBQUU7TUFDdEJELGdCQUFnQixDQUFDLENBQUM7SUFDcEI7SUFDQUYsZUFBZSxDQUFDLENBQUM7SUFDakIsSUFBSSxDQUFDQyxpQkFBaUIsRUFBRTtNQUN0QkgsY0FBYyxDQUFDNUQsTUFBTSxDQUFDOEUsV0FBVyxFQUFFO1FBQUVDLE1BQU0sRUFBRTtNQUFTLENBQUMsQ0FBQztJQUMxRDtFQUNGLENBQUM7RUFFRCxJQUFNQyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBLEVBQVM7SUFDbkMsSUFBSWpCLGlCQUFpQixFQUFFO01BQ3JCRCxlQUFlLENBQUMsQ0FBQztJQUNuQjtJQUNBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xCLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7TUFDdkJMLGNBQWMsQ0FBQzVELE1BQU0sQ0FBQzhFLFdBQVcsRUFBRTtRQUFFQyxNQUFNLEVBQUU7TUFBYyxDQUFDLENBQUM7SUFDL0Q7RUFDRixDQUFDO0VBRUR0RyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQzJDLFFBQVEsRUFBRTtNQUFBLElBQUE2RCxrQkFBQTtNQUNiLENBQUFBLGtCQUFBLEdBQUE3QyxTQUFTLENBQUM4QyxPQUFPLGNBQUFELGtCQUFBLGVBQWpCQSxrQkFBQSxDQUFtQkUsS0FBSyxDQUFDLENBQUM7SUFDNUI7RUFDRixDQUFDLEVBQUUsQ0FBQy9ELFFBQVEsQ0FBQyxDQUFDOztFQUVkO0VBQ0EzQyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU0yRyxZQUFZLEdBQUdYLGtCQUFrQixDQUFDUyxPQUFPLE1BQUtoQixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRW1CLEVBQUU7SUFDN0QsSUFBTUMsY0FBYyxHQUFHWCxpQkFBaUIsQ0FBQ08sT0FBTztJQUNoRCxJQUFNSyxhQUFhLEdBQUd2RCxNQUFNO0lBQzVCLElBQU13RCxXQUFXLEdBQUdGLGNBQWMsS0FBS0MsYUFBYTtJQUNwRCxJQUFNRSwyQkFBMkIsR0FDL0IsQ0FBQ0gsY0FBYyxLQUFLWixTQUFTLElBQUlZLGNBQWMsS0FBSyxJQUFJLEtBQUtDLGFBQWEsS0FBS2IsU0FBUyxJQUFJYSxhQUFhLEtBQUssSUFBSTtJQUNwSCxJQUFNRyxjQUFjLEdBQUdkLHFCQUFxQixDQUFDTSxPQUFPLEtBQUtqRCxVQUFVO0lBQ25FLElBQU0wRCxjQUFjLEdBQUdsQixrQkFBa0IsQ0FBQ1MsT0FBTyxLQUFLUixTQUFTLElBQUlDLGlCQUFpQixDQUFDTyxPQUFPLEtBQUtSLFNBQVM7SUFFMUcsSUFBSSxDQUFDVSxZQUFZLElBQUlJLFdBQVcsSUFBSUMsMkJBQTJCLElBQUlDLGNBQWMsSUFBSUMsY0FBYyxLQUFLLENBQUN2RSxRQUFRLEVBQUU7TUFDakgsSUFBTXdFLEtBQUssR0FBR0QsY0FBYyxJQUFJRiwyQkFBMkIsR0FBRyxHQUFHLEdBQUcsR0FBRztNQUN2RUksVUFBVSxDQUFDLFlBQU07UUFBQSxJQUFBQyxtQkFBQTtRQUNmLElBQUksQ0FBQzFFLFFBQVEsRUFBRSxDQUFBMEUsbUJBQUEsR0FBQTFELFNBQVMsQ0FBQzhDLE9BQU8sY0FBQVksbUJBQUEsZUFBakJBLG1CQUFBLENBQW1CWCxLQUFLLENBQUMsQ0FBQztNQUMzQyxDQUFDLEVBQUVTLEtBQUssQ0FBQztJQUNYO0lBRUFuQixrQkFBa0IsQ0FBQ1MsT0FBTyxHQUFHaEIsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVtQixFQUFFO0lBQ3RDVixpQkFBaUIsQ0FBQ08sT0FBTyxHQUFHbEQsTUFBTTtJQUNsQzRDLHFCQUFxQixDQUFDTSxPQUFPLEdBQUdqRCxVQUFVO0VBQzVDLENBQUMsRUFBRSxDQUFDaUMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVtQixFQUFFLEVBQUVyRCxNQUFNLEVBQUVDLFVBQVUsRUFBRWIsUUFBUSxDQUFDLENBQUM7O0VBRTdDO0VBQ0EzQyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU1zSCxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFBLEVBQVM7TUFBQSxJQUFBQyxtQkFBQTtNQUNoQyxDQUFBQSxtQkFBQSxHQUFBNUQsU0FBUyxDQUFDOEMsT0FBTyxjQUFBYyxtQkFBQSxlQUFqQkEsbUJBQUEsQ0FBbUJDLEtBQUssQ0FBQyxDQUFDO01BQzFCdEQsWUFBWSxDQUFDLEVBQUUsQ0FBQztNQUNoQkksYUFBYSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRURtRCxRQUFRLENBQUNDLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFSixtQkFBbUIsQ0FBQztJQUN0RSxPQUFPO01BQUEsT0FBTUcsUUFBUSxDQUFDRSxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRUwsbUJBQW1CLENBQUM7SUFBQTtFQUN4RixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU50SCxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU00SCxPQUFPLEdBQUczRCxTQUFTLENBQUM0RCxJQUFJLENBQUMsQ0FBQyxDQUFDQyxNQUFNLEdBQUcsQ0FBQztJQUMzQyxJQUFNQyxjQUFjLEdBQUd6RSxXQUFXLENBQUN3RSxNQUFNLEdBQUcsQ0FBQztJQUM3Q3hELGFBQWEsQ0FBQyxDQUFDc0QsT0FBTyxJQUFJLENBQUNHLGNBQWMsQ0FBQztFQUM1QyxDQUFDLEVBQUUsQ0FBQ3pFLFdBQVcsRUFBRVcsU0FBUyxDQUFDLENBQUM7RUFFNUIsSUFBTStELGlCQUFpQixHQUFHakksV0FBVyxDQUFDLFlBQU07SUFBQSxJQUFBa0ksbUJBQUEsRUFBQUMsV0FBQSxFQUFBQyxlQUFBLEVBQUFDLG1CQUFBO0lBQzFDLElBQU1DLEtBQUssSUFBQUosbUJBQUEsR0FBR3RFLFNBQVMsQ0FBQzhDLE9BQU8sY0FBQXdCLG1CQUFBLHVCQUFqQkEsbUJBQUEsQ0FBbUJLLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLElBQU1DLElBQUksSUFBQUwsV0FBQSxHQUFHRyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUUsSUFBSSxjQUFBTCxXQUFBLGNBQUFBLFdBQUEsR0FBSSxFQUFFO0lBQzlCLElBQUksQ0FBQ0ssSUFBSSxDQUFDVixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUN2RSxXQUFXLENBQUN3RSxNQUFNLEVBQUU7SUFDekNyRixhQUFhLENBQUM4RixJQUFJLEVBQUVqRixXQUFXLEdBQUE2RSxlQUFBLEdBQUVFLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRyxRQUFRLGNBQUFMLGVBQUEsY0FBQUEsZUFBQSxHQUFJLEVBQUUsQ0FBQztJQUN2RCxDQUFBQyxtQkFBQSxHQUFBekUsU0FBUyxDQUFDOEMsT0FBTyxjQUFBMkIsbUJBQUEsZUFBakJBLG1CQUFBLENBQW1CWixLQUFLLENBQUMsQ0FBQztJQUMxQnRELFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDaEJJLGFBQWEsQ0FBQyxJQUFJLENBQUM7RUFDckIsQ0FBQyxFQUFFLENBQUNoQixXQUFXLEVBQUViLGFBQWEsQ0FBQyxDQUFDO0VBRWhDLElBQU1nRyxpQkFBaUIsR0FBRzFJLFdBQVcsQ0FDbkMsVUFBQTJJLEtBQUEsRUFBa0g7SUFBQSxJQUEvR0gsSUFBSSxHQUFBRyxLQUFBLENBQUpILElBQUk7TUFBRUksT0FBTyxHQUFBRCxLQUFBLENBQVBDLE9BQU87SUFDZHpFLFlBQVksQ0FBQ3FFLElBQUksQ0FBQztJQUNsQmpFLGFBQWEsQ0FBQyxDQUFDaUUsSUFBSSxDQUFDVixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUN2RSxXQUFXLENBQUN3RSxNQUFNLENBQUM7SUFDbEQ5RSxRQUFRLGFBQVJBLFFBQVEsZUFBUkEsUUFBUSxDQUFHLENBQUM7SUFDWjRDLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQztFQUN4QixDQUFDLEVBQ0QsQ0FBQ3JGLFdBQVcsQ0FBQ3dFLE1BQU0sRUFBRTlFLFFBQVEsRUFBRTRDLGFBQWEsQ0FDOUMsQ0FBQztFQUVELElBQU1FLGFBQWEsR0FBRy9GLFdBQVcsQ0FDL0IsVUFBQzZJLENBQWdDLEVBQUs7SUFDcEMsSUFBSS9DLG9CQUFvQixDQUFDK0MsQ0FBQyxDQUFDLEVBQUU7SUFDN0IsSUFBSUEsQ0FBQyxDQUFDQyxHQUFHLEtBQUssT0FBTyxJQUFJLENBQUNELENBQUMsQ0FBQ0UsUUFBUSxJQUFJLENBQUNuRCxXQUFXLEVBQUU7TUFDcERpRCxDQUFDLENBQUNHLGNBQWMsQ0FBQyxDQUFDO01BQ2xCLElBQUksQ0FBQzFFLFVBQVUsSUFBSSxDQUFDMUIsUUFBUSxFQUFFcUYsaUJBQWlCLENBQUMsQ0FBQztJQUNuRDtFQUNGLENBQUMsRUFDRCxDQUFDbkMsb0JBQW9CLEVBQUVGLFdBQVcsRUFBRXRCLFVBQVUsRUFBRTFCLFFBQVEsRUFBRXFGLGlCQUFpQixDQUM3RSxDQUFDO0VBRUQsSUFBTWdCLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlKLENBQWdDLEVBQUs7SUFDN0QsSUFBTUssS0FBSyxHQUFHTCxDQUFDLENBQUNNLE1BQU0sQ0FBQ0QsS0FBSztJQUM1QixJQUFJLENBQUNBLEtBQUssRUFBRTtJQUVaLElBQU1uRSxhQUF1QixHQUFHLEVBQUU7SUFDbEMsSUFBTUQsYUFBdUIsR0FBRyxFQUFFO0lBQ2xDLElBQU1FLFNBQWlDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLElBQUlvRSxhQUFhLEdBQUc3RixXQUFXLENBQUN3RSxNQUFNOztJQUV0QztJQUNBLElBQU1zQixXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSUMsU0FBaUI7TUFBQSxPQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUNDLFFBQVEsQ0FBQ0QsU0FBUyxDQUFDO0lBQUE7SUFDaEcsSUFBTUUsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlGLFNBQWlCO01BQUEsT0FDcEMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQ0MsUUFBUSxDQUFDRCxTQUFTLENBQUM7SUFBQTtJQUMvRSxJQUFNRyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlILFNBQWlCO01BQUEsT0FDdEMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUNDLFFBQVEsQ0FBQ0QsU0FBUyxDQUFDO0lBQUE7SUFFeEZJLEtBQUssQ0FBQ0MsSUFBSSxDQUFDVCxLQUFLLENBQUMsQ0FBQ1UsT0FBTyxDQUFDLFVBQUFDLElBQUksRUFBSTtNQUFBLElBQUFDLGtCQUFBO01BQ2hDLElBQUlDLFlBQVksR0FBRyxLQUFLO01BQ3hCLElBQU1DLGFBQWEsR0FBR0gsSUFBSSxDQUFDSSxJQUFJLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDMUMsSUFBTUMsYUFBYSxHQUFHSCxhQUFhLENBQUNqQyxNQUFNLEdBQUcsQ0FBQyxPQUFBcUMsTUFBQSxFQUFBTixrQkFBQSxHQUFPRSxhQUFhLENBQUNLLEdBQUcsQ0FBQyxDQUFDLGNBQUFQLGtCQUFBLHVCQUFuQkEsa0JBQUEsQ0FBcUJRLFdBQVcsQ0FBQyxDQUFDLElBQUssRUFBRTtNQUU5RixJQUFJLEVBQUM1SSxnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUU2SCxRQUFRLENBQUNZLGFBQWEsQ0FBQyxHQUFFO1FBQzlDO01BQ0Y7TUFFQW5GLFNBQVMsQ0FBQzZFLElBQUksQ0FBQ0ksSUFBSSxDQUFDLEdBQUdKLElBQUksQ0FBQ1UsSUFBSTs7TUFFaEM7TUFDQSxJQUFJbEIsV0FBVyxDQUFDYyxhQUFhLENBQUMsRUFBRTtRQUM5QjtRQUNBLElBQUlOLElBQUksQ0FBQ1UsSUFBSSxHQUFHM0ksNEJBQTRCLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRTtVQUMxRG1ELGFBQWEsQ0FBQ3lGLElBQUksQ0FBQ1gsSUFBSSxDQUFDSSxJQUFJLENBQUM7VUFDN0JGLFlBQVksR0FBRyxJQUFJO1FBQ3JCO1FBRUEsSUFBSVgsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7VUFDekJ0RSxhQUFhLENBQUMwRixJQUFJLENBQUNYLElBQUksQ0FBQ0ksSUFBSSxDQUFDO1VBQzdCRixZQUFZLEdBQUcsSUFBSTtRQUNyQjtNQUNGLENBQUMsTUFBTSxJQUFJUCxXQUFXLENBQUNXLGFBQWEsQ0FBQyxFQUFFO1FBQ3JDO1FBQ0EsSUFBSU4sSUFBSSxDQUFDVSxJQUFJLEdBQUcxSSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFO1VBQ2xEa0QsYUFBYSxDQUFDeUYsSUFBSSxDQUFDWCxJQUFJLENBQUNJLElBQUksQ0FBQztVQUM3QkYsWUFBWSxHQUFHLElBQUk7UUFDckI7UUFFQSxJQUFJWCxhQUFhLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUN6QnRFLGFBQWEsQ0FBQzBGLElBQUksQ0FBQ1gsSUFBSSxDQUFDSSxJQUFJLENBQUM7VUFDN0JGLFlBQVksR0FBRyxJQUFJO1FBQ3JCO01BQ0YsQ0FBQyxNQUFNLElBQUlOLGFBQWEsQ0FBQ1UsYUFBYSxDQUFDLEVBQUU7UUFDdkM7UUFDQSxJQUFJTixJQUFJLENBQUNVLElBQUksR0FBR3pJLHNCQUFzQixHQUFHLElBQUksR0FBRyxJQUFJLEVBQUU7VUFDcERpRCxhQUFhLENBQUN5RixJQUFJLENBQUNYLElBQUksQ0FBQ0ksSUFBSSxDQUFDO1VBQzdCRixZQUFZLEdBQUcsSUFBSTtRQUNyQjtRQUVBLElBQUlYLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ3pCdEUsYUFBYSxDQUFDMEYsSUFBSSxDQUFDWCxJQUFJLENBQUNJLElBQUksQ0FBQztVQUM3QkYsWUFBWSxHQUFHLElBQUk7UUFDckI7TUFDRjtNQUVBLElBQUksQ0FBQ0EsWUFBWSxFQUFFO1FBQ2pCWCxhQUFhLElBQUksQ0FBQztRQUNsQixJQUFNcUIsUUFBUSxHQUFHWixJQUFJLENBQUNhLElBQUksSUFBSS9JLFNBQVMsQ0FBQ3dJLGFBQWEsQ0FBQztRQUN0RCxJQUFNUSxVQUFVLEdBQUcsSUFBSUMsSUFBSSxDQUFDLENBQUNmLElBQUksQ0FBQyxFQUFFQSxJQUFJLENBQUNJLElBQUksRUFBRTtVQUFFUyxJQUFJLEVBQUVEO1FBQVMsQ0FBQyxDQUFDO1FBQ2xFckgsWUFBWSxhQUFaQSxZQUFZLGVBQVpBLFlBQVksQ0FBR3VILFVBQVUsQ0FBQztNQUM1QjtJQUNGLENBQUMsQ0FBQztJQUVGcEcsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNwQixJQUFJTyxhQUFhLENBQUNpRCxNQUFNLElBQUloRCxhQUFhLENBQUNnRCxNQUFNLEVBQUU7TUFDaEQ1QyxhQUFhLENBQUM7UUFBRU4sTUFBTSxFQUFFLElBQUk7UUFBRUMsYUFBYSxFQUFiQSxhQUFhO1FBQUVDLGFBQWEsRUFBYkEsYUFBYTtRQUFFQyxTQUFTLEVBQVRBO01BQVUsQ0FBQyxDQUFDO0lBQzFFO0lBRUEsSUFBSW5CLFlBQVksQ0FBQzZDLE9BQU8sRUFBRTtNQUN4QjdDLFlBQVksQ0FBQzZDLE9BQU8sQ0FBQ21FLEtBQUssR0FBRyxFQUFFO0lBQ2pDO0VBQ0YsQ0FBQztFQUVELElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUEsRUFBUztJQUFBLElBQUFDLHFCQUFBO0lBQzlCM0YsY0FBYyxDQUFDNUQsTUFBTSxDQUFDOEUsV0FBVyxFQUFFO01BQUVDLE1BQU0sRUFBRTtJQUFRLENBQUMsQ0FBQztJQUN2RCxJQUFJaEQsV0FBVyxDQUFDd0UsTUFBTSxJQUFJLENBQUMsRUFBRTtJQUM3QixDQUFBZ0QscUJBQUEsR0FBQWxILFlBQVksQ0FBQzZDLE9BQU8sY0FBQXFFLHFCQUFBLGVBQXBCQSxxQkFBQSxDQUFzQkMsS0FBSyxDQUFDLENBQUM7RUFDL0IsQ0FBQztFQUVELElBQU1DLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLE1BQWMsRUFBSztJQUNqRDdILGtCQUFrQixhQUFsQkEsa0JBQWtCLGVBQWxCQSxrQkFBa0IsQ0FBRzZILE1BQU0sQ0FBQztFQUM5QixDQUFDO0VBRUQsSUFBTUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQTtJQUFBLE9BQVN4RyxZQUFZLENBQUMsSUFBSSxDQUFDO0VBQUE7RUFDbkQsSUFBTXlHLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUEsRUFBUztJQUM5Qi9ELFVBQVUsQ0FBQyxZQUFNO01BQUEsSUFBQWdFLG1CQUFBO01BQ2YsSUFBSSxHQUFBQSxtQkFBQSxHQUFDdkgsVUFBVSxDQUFDNEMsT0FBTyxjQUFBMkUsbUJBQUEsZUFBbEJBLG1CQUFBLENBQW9CQyxRQUFRLENBQUM1RCxRQUFRLENBQUM2RCxhQUFhLENBQUMsR0FBRTtRQUN6RDVHLFlBQVksQ0FBQyxLQUFLLENBQUM7TUFDckI7SUFDRixDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1AsQ0FBQztFQUVELElBQU02RyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFBLEVBQVM7SUFDakNwRyxjQUFjLENBQUM1RCxNQUFNLENBQUNpSyxrQkFBa0IsQ0FBQztJQUN6QzFJLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGVBQWhCQSxnQkFBZ0IsQ0FBRyxDQUFDO0VBQ3RCLENBQUM7RUFFRCxJQUFNMkksaUJBQWlCLEdBQUdoSCxTQUFTLEdBQUcsU0FBUyxHQUFHLE1BQU07RUFFeEQsb0JBQ0VyQyxLQUFBLENBQUFFLFNBQUE7SUFBQW9KLFFBQUEsZ0JBQ0V0SixLQUFBLENBQUNyQixzQkFBc0I7TUFDckI0SyxHQUFHLEVBQUU5SCxVQUFXO01BQ2hCbEIsUUFBUSxFQUFFLEtBQU07TUFDaEJPLFlBQVksRUFBRUEsWUFBYTtNQUMzQjZFLGNBQWMsRUFBRSxDQUFDLENBQUN6RSxXQUFXLENBQUN3RSxNQUFPO01BQ3JDOEQsT0FBTyxFQUFFVixrQkFBbUI7TUFDNUJXLE1BQU0sRUFBRVYsaUJBQWtCO01BQUFPLFFBQUEsR0FFekIsQ0FBQyxDQUFDcEksV0FBVyxDQUFDd0UsTUFBTSxpQkFDbkI1RixJQUFBO1FBQUs0SixLQUFLLEVBQUU7VUFBRUMsT0FBTyxFQUFFLE1BQU07VUFBRUMsR0FBRyxFQUFFLE1BQU07VUFBRUMsVUFBVSxFQUFFO1FBQVMsQ0FBRTtRQUFBUCxRQUFBLEVBQ2hFcEksV0FBVyxDQUFDNEksR0FBRyxDQUFDLFVBQUNDLFVBQVUsRUFBRUMsS0FBSyxFQUFLO1VBQUEsSUFBQUMsbUJBQUEsRUFBQUMsZ0JBQUE7VUFDdEMsSUFBTXZDLGFBQWEsR0FBR29DLFVBQVUsQ0FBQ25DLElBQUksQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQztVQUNoRCxJQUFNQyxhQUFhLEdBQUdILGFBQWEsQ0FBQ2pDLE1BQU0sR0FBRyxDQUFDLE9BQUFxQyxNQUFBLEVBQUFrQyxtQkFBQSxHQUFPdEMsYUFBYSxDQUFDSyxHQUFHLENBQUMsQ0FBQyxjQUFBaUMsbUJBQUEsdUJBQW5CQSxtQkFBQSxDQUFxQmhDLFdBQVcsQ0FBQyxDQUFDLElBQUssRUFBRTtVQUM5RixJQUFNa0Msa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDakQsUUFBUSxDQUFDWSxhQUFhLENBQUM7VUFDNUUsSUFBTXNDLGFBQWEsSUFBQUYsZ0JBQUEsR0FBR0gsVUFBVSxDQUFDMUIsSUFBSSxjQUFBNkIsZ0JBQUEsdUJBQWZBLGdCQUFBLENBQWlCRyxVQUFVLENBQUMsUUFBUSxDQUFDO1VBQzNELElBQU1DLE9BQU8sR0FBR0YsYUFBYSxJQUFJRCxrQkFBa0I7VUFDbkQsb0JBQ0VySyxJQUFBLENBQUMxQixPQUFPO1lBQUNtTSxLQUFLLEVBQUVSLFVBQVUsQ0FBQ25DLElBQUs7WUFBQTBCLFFBQUEsZUFDOUJ0SixLQUFBLENBQUMzQixjQUFjO2NBQUNpTSxPQUFPLEVBQUVBLE9BQVE7Y0FBQWhCLFFBQUEsR0FDOUJTLFVBQVUsQ0FBQ1MsSUFBSSxlQUNoQjFLLElBQUEsQ0FBQ3hCLHdCQUF3QjtnQkFBQ21NLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2tCQUFBLE9BQVE3QixzQkFBc0IsQ0FBQ21CLFVBQVUsQ0FBQ3ZGLEVBQUUsQ0FBQztnQkFBQSxDQUFDO2dCQUFBOEUsUUFBQSxlQUM3RXhKLElBQUEsQ0FBQzNCLEtBQUs7a0JBQUN1TSxLQUFLLEVBQUMsd0JBQXdCO2tCQUFDQyxLQUFLLEVBQUUsRUFBRztrQkFBQ0MsTUFBTSxFQUFFO2dCQUFHLENBQUU7Y0FBQyxDQUN2QyxDQUFDO1lBQUEsQ0FDYjtVQUFDLE1BQUE3QyxNQUFBLENBTnNCaUMsS0FBSyxPQUFBakMsTUFBQSxDQUFJZ0MsVUFBVSxDQUFDbkMsSUFBSSxDQU94RCxDQUFDO1FBRWQsQ0FBQztNQUFDLENBQ0MsQ0FDTixlQUNEOUgsSUFBQSxDQUFDSCxvQkFBb0I7UUFDbkI0SixHQUFHLEVBQUVoSSxTQUFVO1FBQ2ZoQixRQUFRLEVBQUVBLFFBQVM7UUFDbkJJLFdBQVcsRUFBRUEsV0FBWTtRQUN6QmtLLE9BQU8sRUFBRXhFLGlCQUFrQjtRQUMzQnlFLFNBQVMsRUFBRXBILGFBQWM7UUFDekI4RixPQUFPLEVBQUVWLGtCQUFtQjtRQUM1QlcsTUFBTSxFQUFFVjtNQUFrQixDQUMzQixDQUFDLGVBQ0YvSSxLQUFBLENBQUN0QixzQkFBc0I7UUFBQTRLLFFBQUEsZ0JBQ3JCdEosS0FBQTtVQUFLMEosS0FBSyxFQUFFO1lBQUVDLE9BQU8sRUFBRSxNQUFNO1lBQUVDLEdBQUcsRUFBRTtVQUFPLENBQUU7VUFBQU4sUUFBQSxnQkFDM0N4SixJQUFBLENBQUMxQixPQUFPO1lBQUNtTSxLQUFLLEVBQUVySixXQUFXLENBQUN3RSxNQUFNLElBQUksQ0FBQyxHQUFHcEUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUdBLENBQUMsQ0FBQyxpQkFBaUIsQ0FBRTtZQUFBZ0ksUUFBQSxlQUNwRnhKLElBQUEsQ0FBQ3ZCLDJCQUEyQjtjQUMxQm9ILGNBQWMsRUFBRSxDQUFDLENBQUN6RSxXQUFXLENBQUN3RSxNQUFPO2NBQ3JDcUYsV0FBVyxFQUFFN0osV0FBVyxDQUFDd0UsTUFBTSxJQUFJLENBQUU7Y0FDckNzRixVQUFVLEVBQUUzSSxTQUFVO2NBQ3RCb0ksT0FBTyxFQUFFaEMsaUJBQWtCO2NBQUFhLFFBQUEsZUFFM0J4SixJQUFBLENBQUM3QixNQUFNO2dCQUNMeU0sS0FBSyxFQUFFLENBQUN4SixXQUFXLENBQUN3RSxNQUFNLEdBQUcyRCxpQkFBaUIsTUFBQXRCLE1BQUEsQ0FBTXJJLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBRztnQkFDMUVpTCxLQUFLLEVBQUUsRUFBRztnQkFDVkMsTUFBTSxFQUFFO2NBQUcsQ0FDWjtZQUFDLENBQ3lCO1VBQUMsQ0FDdkIsQ0FBQyxlQUNWOUssSUFBQSxDQUFDMUIsT0FBTztZQUFDbU0sS0FBSyxFQUFFakosQ0FBQyxDQUFDLGdCQUFnQixDQUFFO1lBQUFnSSxRQUFBLGVBQ2xDeEosSUFBQSxDQUFDdEIsMEJBQTBCO2NBQ3pCeU0sUUFBUSxFQUFFLENBQUMsQ0FBQy9ILGlCQUFrQjtjQUM5QjhILFVBQVUsRUFBRTNJLFNBQVU7Y0FDdEJvSSxPQUFPLEVBQUV6RyxxQkFBc0I7Y0FBQXNGLFFBQUEsZUFFL0J4SixJQUFBLENBQUM1QixLQUFLO2dCQUNKd00sS0FBSyxFQUFFeEgsaUJBQWlCLE1BQUE2RSxNQUFBLENBQU1ySSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUsySixpQkFBa0I7Z0JBQ3hFc0IsS0FBSyxFQUFFLEVBQUc7Z0JBQ1ZDLE1BQU0sRUFBRTtjQUFHLENBQ1o7WUFBQyxDQUN3QjtVQUFDLENBQ3RCLENBQUMsZUFDVjlLLElBQUEsQ0FBQzFCLE9BQU87WUFBQ21NLEtBQUssRUFBRWpKLENBQUMsQ0FBQyxpQkFBaUIsQ0FBRTtZQUFBZ0ksUUFBQSxlQUNuQ3hKLElBQUEsQ0FBQ3JCLDJCQUEyQjtjQUMxQndNLFFBQVEsRUFBRSxDQUFDLENBQUM3SCxrQkFBbUI7Y0FDL0I0SCxVQUFVLEVBQUUzSSxTQUFVO2NBQ3RCb0ksT0FBTyxFQUFFdEcsc0JBQXVCO2NBQUFtRixRQUFBLGVBRWhDeEosSUFBQSxDQUFDWixhQUFhO2dCQUNad0wsS0FBSyxFQUFFdEgsa0JBQWtCLE1BQUEyRSxNQUFBLENBQU1ySSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUsySixpQkFBa0I7Z0JBQ3pFc0IsS0FBSyxFQUFFLEVBQUc7Z0JBQ1ZDLE1BQU0sRUFBRTtjQUFHLENBQ1o7WUFBQyxDQUN5QjtVQUFDLENBQ3ZCLENBQUM7UUFBQSxDQUNQLENBQUMsRUFFTG5LLFNBQVMsZ0JBQ1JYLElBQUEsQ0FBQzFCLE9BQU87VUFBQ21NLEtBQUssRUFBRWpKLENBQUMsQ0FBQyxXQUFXLENBQUU7VUFBQWdJLFFBQUEsZUFDN0J4SixJQUFBLENBQUNqQixvQkFBb0I7WUFBQzBCLFFBQVEsRUFBRSxLQUFNO1lBQUNrSyxPQUFPLEVBQUV0QixvQkFBcUI7WUFBQzdJLFNBQVMsRUFBRUEsU0FBVTtZQUFBZ0osUUFBQSxlQUN6RnhKLElBQUEsQ0FBQ2hCLGtCQUFrQixJQUFFO1VBQUMsQ0FDRjtRQUFDLENBQ2hCLENBQUMsZ0JBRVZnQixJQUFBLENBQUMxQixPQUFPO1VBQUNtTSxLQUFLLEVBQUUvSixXQUFXLEdBQUdjLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBR0EsQ0FBQyxDQUFDLFdBQVcsQ0FBRTtVQUFBZ0ksUUFBQSxlQUM1RHhKLElBQUEsQ0FBQ2xCLG9CQUFvQjtZQUNuQjZMLE9BQU8sRUFBRTdFLGlCQUFrQjtZQUMzQnRGLFNBQVMsRUFBRUEsU0FBVTtZQUNyQkMsUUFBUSxFQUFFMEIsVUFBVSxJQUFJMUIsUUFBUztZQUNqQzJLLFNBQVMsRUFBRSxDQUFDLENBQUNySixTQUFTLENBQUM2RCxNQUFPO1lBQUE0RCxRQUFBLGVBRTlCeEosSUFBQSxDQUFDOUIsVUFBVTtjQUFDME0sS0FBSyxFQUFDLFNBQVM7Y0FBQ0MsS0FBSyxFQUFFLEVBQUc7Y0FBQ0MsTUFBTSxFQUFFO1lBQUcsQ0FBRTtVQUFDLENBQ2pDO1FBQUMsQ0FDaEIsQ0FDVjtNQUFBLENBQ3FCLENBQUMsZUFDekI5SyxJQUFBO1FBQ0V5SixHQUFHLEVBQUUvSCxZQUFhO1FBQ2xCNkcsSUFBSSxFQUFDLE1BQU07UUFDWDhDLFFBQVE7UUFDUkMsTUFBTSxFQUFDLG9HQUFvRztRQUMzR3hLLFFBQVEsRUFBRWdHLGdCQUFpQjtRQUMzQjhDLEtBQUssRUFBRTtVQUFFQyxPQUFPLEVBQUU7UUFBTztNQUFFLENBQzVCLENBQUM7SUFBQSxDQUNvQixDQUFDLEVBQ3hCOUcsVUFBVSxDQUFDTCxNQUFNLGlCQUNoQjFDLElBQUEsQ0FBQ2QsZ0JBQWdCO01BQ2ZxTSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVF2SSxhQUFhLENBQUM7VUFBRU4sTUFBTSxFQUFFLEtBQUs7VUFBRUMsYUFBYSxFQUFFLEVBQUU7VUFBRUMsYUFBYSxFQUFFLEVBQUU7VUFBRUMsU0FBUyxFQUFFLENBQUM7UUFBRSxDQUFDLENBQUM7TUFBQSxDQUFDO01BQ3JHRixhQUFhLEVBQUVJLFVBQVUsQ0FBQ0osYUFBYztNQUN4Q0MsYUFBYSxFQUFFRyxVQUFVLENBQUNILGFBQWM7TUFDeENDLFNBQVMsRUFBRUUsVUFBVSxDQUFDRjtJQUFVLENBQ2pDLENBQ0YsRUFDQWdCLFdBQVcsaUJBQUk1RixZQUFZLENBQUM0RixXQUFXLEVBQUUwQixRQUFRLENBQUNpRyxJQUFJLENBQUM7RUFBQSxDQUN4RCxDQUFDO0FBRVAsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
742
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dCIsIlN0eWxlZE1BSUFJbnB1dEJ1dHRvbnMiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldENoYXRUb29sc01lbnVBZ2VudFR5cGUiLCJhbGxvd2VkRmlsZVR5cGVzIiwiZmlsZVR5cGVzIiwiTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiIsIk1BWF9GSUxFX1NJWkVfTUJfT0xEIiwiTUFYX0ZJTEVfU0laRV9NQl9BVURJTyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIlRPT0xfQ0hJUF9FWElUX01TIiwiTUFJQUlucHV0IiwiX3JlZiIsIl9hZ2VudCRlbnRpdHkiLCJvblNlbmRNZXNzYWdlIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJpc1N0cmVhbWluZyIsImlzV3JpdGluZyIsIm9uU3RvcEdlbmVyYXRpb24iLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiX3JlZiRhbGlnbkJ1dHRvbnMiLCJhbGlnbkJ1dHRvbnMiLCJvbkZpbGVBdHRhY2giLCJvbkRlbGV0ZUF0dGFjaG1lbnQiLCJfcmVmJGF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJjaGF0SWQiLCJuZXdDaGF0S2V5IiwiX3VzZVQiLCJ0IiwiaW5wdXRSZWYiLCJmaWxlSW5wdXRSZWYiLCJ3cmFwcGVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidmFsdWVUZXh0YXJlYSIsInNldFZhbHVlVGV4dGFyZWEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzRGlzYWJsZWQiLCJzZXRJc0Rpc2FibGVkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0ZvY3VzZWQiLCJzZXRJc0ZvY3VzZWQiLCJfdXNlU3RhdGU3IiwiaXNPcGVuIiwiZXhjbHVkZWRGaWxlcyIsImV4Y2VlZGVkRmlsZXMiLCJmaWxlU2l6ZXMiLCJfdXNlU3RhdGU4IiwibW9kYWxQcm9wcyIsInNldE1vZGFsUHJvcHMiLCJldmVudEFtcGxpdHVkZSIsIl91c2VHbG9iYWxDb250ZXh0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJ0b2dnbGVEZWVwU2VhcmNoIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiYWdlbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInBsdXNNZW51QW5jaG9yIiwic2V0UGx1c01lbnVBbmNob3IiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJhY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwidG9vbENoaXBFeGl0aW5nIiwic2V0VG9vbENoaXBFeGl0aW5nIiwidG9vbENoaXBFeGl0VGltZXJSZWYiLCJzZWFyY2hNb2RlQWN0aXZlUmVmIiwid2ViIiwiZGVlcCIsInBsdXNNZW51T3BlbiIsIkJvb2xlYW4iLCJjdXJyZW50IiwiYW5hbHl0aWNzQWdlbnRUeXBlIiwiYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIiwidHlwZSIsImVudGl0eSIsImNsb3NlUGx1c01lbnUiLCJoYW5kbGVQbHVzQnV0dG9uQ2xpY2siLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRhcmdldCIsImFpQ2hhdFBsdXNPcGVuIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJoYW5kbGVQbHVzTWVudUF0dGFjaCIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwibGVuZ3RoIiwiY2xpY2siLCJiZWdpblRvb2xDaGlwRXhpdCIsIndhc1dlYiIsIndhc0RlZXAiLCJzZXRUaW1lb3V0IiwiX3NlYXJjaE1vZGVBY3RpdmVSZWYkIiwiaGFuZGxlUGx1c01lbnVXZWJTZWFyY2giLCJoYW5kbGVQbHVzTWVudURlZXBTZWFyY2giLCJwcmV2aW91c0FnZW50SWRSZWYiLCJ1bmRlZmluZWQiLCJwcmV2aW91c0NoYXRJZFJlZiIsInByZXZpb3VzTmV3Q2hhdEtleVJlZiIsImhhbmRsZVJlc2l6ZSIsInRleHRhcmVhIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwicHJldmlvdXNNaW5IZWlnaHQiLCJzdHlsZSIsInByZXZpb3VzTWF4SGVpZ2h0IiwiaGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0IiwiY29tcHV0ZWRTdHlsZSIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJsaW5lSGVpZ2h0IiwicGFyc2VGbG9hdCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiYm9yZGVyVG9wIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21XaWR0aCIsInNpbmdsZUxpbmVIZWlnaHQiLCJpc0VtcHR5IiwidmFsdWUiLCJ0cmltIiwiaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyIsImNhbnZhcyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwidGV4dGFyZWFTdHlsZXMiLCJmb250IiwiY29uY2F0IiwiZm9udFdlaWdodCIsImZvbnRTaXplIiwiZm9udEZhbWlseSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiYm9yZGVyTGVmdCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyUmlnaHRXaWR0aCIsInRleHRhcmVhV2lkdGgiLCJvZmZzZXRXaWR0aCIsInRleHQiLCJsaW5lcyIsInNwbGl0IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsImxpbmUiLCJ0ZXh0V2lkdGgiLCJtZWFzdXJlVGV4dCIsIndpZHRoIiwiZXJyIiwiZiIsIm5ld0hlaWdodCIsIk1hdGgiLCJtaW4iLCJtYXgiLCJmb2N1cyIsImNsZWFyVGltZW91dCIsImFnZW50Q2hhbmdlZCIsImlkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJoYW5kbGVTZXNzaW9uQ2hhbmdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhbmltYXRpb25GcmFtZUlkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJoYXNUZXh0IiwiaGFzQXR0YWNobWVudHMiLCJoYW5kbGVTZW5kTWVzc2FnZSIsImhhbmRsZUtleURvd24iLCJrZXkiLCJzaGlmdEtleSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlQ2hhbmdlIiwidGFyZ2V0IiwiaGFuZGxlUGFzdGUiLCJfaW5wdXRSZWYkY3VycmVudCR2YWwiLCJfaW5wdXRSZWYkY3VycmVudCIsImN1cnJlbnRWYWx1ZSIsImhhbmRsZUZpbGVTZWxlY3QiLCJmaWxlcyIsImZpbGVzSW5zZXJ0ZWQiLCJpc05ld0Zvcm1hdCIsImV4dGVuc2lvbiIsImluY2x1ZGVzIiwiaXNPbGRGb3JtYXQiLCJpc0F1ZGlvRm9ybWF0IiwiQXJyYXkiLCJmcm9tIiwiZm9yRWFjaCIsImZpbGUiLCJfZmlsZU5hbWVQYXJ0cyRwb3AiLCJleGNsdWRlZEZpbGUiLCJmaWxlTmFtZVBhcnRzIiwibmFtZSIsImZpbGVFeHRlbnNpb24iLCJwb3AiLCJ0b0xvd2VyQ2FzZSIsInNpemUiLCJwdXNoIiwidHlwZUZpbGUiLCJwYXJzZWRGaWxlIiwiRmlsZSIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVCbHVyIiwiaGFuZGxlV3JhcHBlckZvY3VzIiwiaGFuZGxlV3JhcHBlckJsdXIiLCJfd3JhcHBlclJlZiRjdXJyZW50IiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJhaUNoYXRTdG9wUmVzcG9uc2UiLCJwbHVzSWNvbkNvbG9yIiwicGx1c01lbnVJY29uQ29sb3IiLCJwbHVzTWVudVNlbGVjdGVkQ29sb3IiLCJhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uIiwiY29sb3IiLCJjaGlsZHJlbiIsInJlZiIsIm9uRm9jdXMiLCJvbkJsdXIiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwidGl0bGUiLCJpY29uIiwib25DbGljayIsIm9uS2V5RG93biIsIm9uUGFzdGUiLCIkbWVudU9wZW4iLCJvcGVuIiwiYW5jaG9yRWwiLCJvbkNsb3NlIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwic2xvdFByb3BzIiwicGFwZXIiLCJlbGV2YXRpb24iLCJzeCIsIm92ZXJmbG93IiwiYm9yZGVyUmFkaXVzIiwiYm94U2hhZG93IiwiYmFja2dyb3VuZENvbG9yIiwibWFyZ2luVG9wIiwiJHNlbGVjdGVkIiwiJGhvdmVyZWQiLCIkZXhpdGluZyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIiRjbG9zZVNob3duIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgTW91c2VFdmVudCwgUmVhY3ROb2RlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBvcG92ZXIgfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUGFwZXJQbGFuZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BhcGVyUGxhbmUnXG5pbXBvcnQgeyBBdHRhY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BdHRhY2gnXG5pbXBvcnQgeyBHbG9iZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0dsb2JlJ1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFBsdXMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QbHVzJ1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGVjaydcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7XG4gIEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbixcbiAgQWN0aXZlVG9vbENoaXBMYWJlbCxcbiAgQWN0aXZlVG9vbENoaXBSb290LFxuICBQbHVzTWVudURpdmlkZXIsXG4gIFBsdXNNZW51SW5uZXJDb2x1bW4sXG4gIFBsdXNNZW51SXRlbUJ1dHRvbixcbiAgUGx1c01lbnVJdGVtTGFiZWwsXG4gIFBsdXNNZW51UGFwZXIsXG4gIFBsdXNNZW51VG9vbHNSb3csXG4gIFBsdXNUb2dnbGVCdXR0b24sXG4gIFNDTUlBdHRhY2htZW50LFxuICBTQ01JQXR0YWNobWVudERlbGV0ZUljb24sXG4gIFN0eWxlZE1BSUFJbnB1dCxcbiAgU3R5bGVkTUFJQUlucHV0QnV0dG9ucyxcbiAgU3R5bGVkTUFJQUlucHV0V3JhcHBlcixcbiAgU3R5bGVkTUFJQVNlbmRCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wQnV0dG9uLFxuICBTdHlsZWRNQUlBU3RvcEljb24sXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBNb2RhbEZpbGVFeGNlZWRzIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL01vZGFsRmlsZUV4Y2VlZHMnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IFRlbGVzY29wZUljb24gfSBmcm9tICcuLi9pY29ucy9UZWxlc2NvcGVJY29uJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcblxuY29uc3QgVE9PTF9DSElQX0VYSVRfTVMgPSAyMjBcblxudHlwZSBBdHRhY2htZW50RmlsZSA9IHtcbiAgZmlsZTogRmlsZVxuICBvcmlnaW5hbEZpbGU/OiBGaWxlXG4gIGlkOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIHNpemU6IG51bWJlclxuICB0eXBlOiBzdHJpbmdcbiAgaWNvbj86IFJlYWN0Tm9kZVxufVxuXG50eXBlIE1BSUFJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2VuZE1lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcsIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCkgPT4gdm9pZFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3Qgd3JhcHBlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW3ZhbHVlVGV4dGFyZWEsIHNldFZhbHVlVGV4dGFyZWFdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFtpc0Rpc2FibGVkLCBzZXRJc0Rpc2FibGVkXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtpc0ZvY3VzZWQsIHNldElzRm9jdXNlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21vZGFsUHJvcHMsIHNldE1vZGFsUHJvcHNdID0gdXNlU3RhdGUoe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXhjbHVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZXhjZWVkZWRGaWxlczogW10gYXMgc3RyaW5nW10sXG4gICAgZmlsZVNpemVzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+LFxuICB9KVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyB0b2dnbGVXZWJTZWFyY2gsIGlzV2ViU2VhcmNoQWN0aXZlLCB0b2dnbGVEZWVwU2VhcmNoLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgW3BsdXNNZW51QW5jaG9yLCBzZXRQbHVzTWVudUFuY2hvcl0gPSB1c2VTdGF0ZTxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthY3RpdmVUb29sQ2hpcEhvdmVyZWQsIHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Rvb2xDaGlwRXhpdGluZywgc2V0VG9vbENoaXBFeGl0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0b29sQ2hpcEV4aXRUaW1lclJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIHNlYXJjaE1vZGVBY3RpdmVSZWYuY3VycmVudCA9IHsgd2ViOiBpc1dlYlNlYXJjaEFjdGl2ZSwgZGVlcDogaXNEZWVwU2VhcmNoQWN0aXZlIH1cblxuICBjb25zdCBhbmFseXRpY3NBZ2VudFR5cGUgPSBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlKGFnZW50KVxuICBjb25zdCBhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IHsgZW50aXR5OiBhZ2VudC5lbnRpdHkgPz8gbnVsbCB9IDoge31cblxuICBjb25zdCBjbG9zZVBsdXNNZW51ID0gKCkgPT4ge1xuICAgIHNldFBsdXNNZW51QW5jaG9yKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gNSkgcmV0dXJuXG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGJlZ2luVG9vbENoaXBFeGl0ID0gKCkgPT4ge1xuICAgIGlmICh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgd2FzV2ViID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBjb25zdCB3YXNEZWVwID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgaWYgKCF3YXNXZWIgJiYgIXdhc0RlZXApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRUb29sQ2hpcEV4aXRpbmcodHJ1ZSlcbiAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgY29uc3QgeyB3ZWIsIGRlZXAgfSA9IHNlYXJjaE1vZGVBY3RpdmVSZWYuY3VycmVudFxuICAgICAgaWYgKHdhc1dlYiAmJiB3ZWIpIHtcbiAgICAgICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICAgIH0gZWxzZSBpZiAod2FzRGVlcCAmJiBkZWVwKSB7XG4gICAgICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgICAgfVxuICAgICAgc2V0VG9vbENoaXBFeGl0aW5nKGZhbHNlKVxuICAgIH0sIFRPT0xfQ0hJUF9FWElUX01TKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVXZWJTZWFyY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdzZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudURlZXBTZWFyY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdkZWVwX3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgfVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHRleHRhcmVhID0gaW5wdXRSZWYuY3VycmVudFxuICAgIGlmICghdGV4dGFyZWEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIEFsdHVyYSBtw61uaW1hIGVxdWl2YWxlbnRlIGEgdW5hIGzDrW5lYVxuICAgIGNvbnN0IG1pbkhlaWdodCA9IDIyLjFcbiAgICBjb25zdCBtYXhIZWlnaHQgPSAxMjIuMVxuXG4gICAgLy8gUGFyYSBtZWRpciBjb3JyZWN0YW1lbnRlIGVsIHNjcm9sbEhlaWdodCwgbmVjZXNpdGFtb3MgcXVpdGFyIHRlbXBvcmFsbWVudGUgbGFzIHJlc3RyaWNjaW9uZXNcbiAgICBjb25zdCBwcmV2aW91c01pbkhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1pbkhlaWdodFxuICAgIGNvbnN0IHByZXZpb3VzTWF4SGVpZ2h0ID0gdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0XG5cbiAgICAvLyBFc3RhYmxlY2VyIGFsdHVyYSBhICdhdXRvJyB5IHF1aXRhciB0ZW1wb3JhbG1lbnRlIG1pbi1oZWlnaHQgeSBtYXgtaGVpZ2h0IHBhcmEgbWVkaXIgY29ycmVjdGFtZW50ZVxuICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJ1xuICAgIHRleHRhcmVhLnN0eWxlLm1pbkhlaWdodCA9ICcwcHgnXG4gICAgdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0ID0gJ25vbmUnXG5cbiAgICAvLyBGb3J6YXIgcmVmbG93IHBhcmEgcXVlIGVsIG5hdmVnYWRvciByZWNhbGN1bGVcbiAgICB2b2lkIHRleHRhcmVhLm9mZnNldEhlaWdodFxuXG4gICAgLy8gQWhvcmEgbWVkaXIgZWwgc2Nyb2xsSGVpZ2h0IHJlYWwgc2luIHJlc3RyaWNjaW9uZXNcbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSB0ZXh0YXJlYS5zY3JvbGxIZWlnaHRcblxuICAgIC8vIENhbGN1bGFyIGxhIGFsdHVyYSBkZSB1bmEgbMOtbmVhIHVzYW5kbyBsb3MgZXN0aWxvcyBjb21wdXRhZG9zXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRleHRhcmVhKVxuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUubGluZUhlaWdodCkgfHwgMjAgLy8gRmFsbGJhY2sgYSAyMHB4IHNpIG5vIGVzdMOhIGRlZmluaWRvXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nVG9wKSB8fCAwXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nQm90dG9tKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlclRvcFdpZHRoKSB8fCAwXG4gICAgY29uc3QgYm9yZGVyQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKSB8fCAwXG5cbiAgICAvLyBBbHR1cmEgZGUgdW5hIGzDrW5lYSBjb21wbGV0YSAobGluZS1oZWlnaHQgKyBwYWRkaW5nICsgYm9yZGVyKVxuICAgIGNvbnN0IHNpbmdsZUxpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJUb3AgKyBib3JkZXJCb3R0b21cblxuICAgIGNvbnN0IGlzRW1wdHkgPSB0ZXh0YXJlYS52YWx1ZS50cmltKCkgPT09ICcnXG5cbiAgICAvLyBNZWRpciBlbCBhbmNobyBkZWwgdGV4dG8gdXNhbmRvIENhbnZhcyBwYXJhIGRldGVybWluYXIgc2kgc2UgZW52dWVsdmUgYSBtw7psdGlwbGVzIGzDrW5lYXNcbiAgICBsZXQgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IGZhbHNlXG5cbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKVxuXG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAvLyBGYWxsYmFjayBzaSBDYW52YXMgbm8gZXN0w6EgZGlzcG9uaWJsZTogdXNhciBzY3JvbGxIZWlnaHRcbiAgICAgIGhhc011bHRpcGxlVmlzdWFsTGluZXMgPSBzY3JvbGxIZWlnaHQgPiBzaW5nbGVMaW5lSGVpZ2h0ICogMS41XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRleHRhcmVhU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGV4dGFyZWEpXG4gICAgICBjb250ZXh0LmZvbnQgPSBgJHt0ZXh0YXJlYVN0eWxlcy5mb250V2VpZ2h0fSAke3RleHRhcmVhU3R5bGVzLmZvbnRTaXplfSAke3RleHRhcmVhU3R5bGVzLmZvbnRGYW1pbHl9YFxuXG4gICAgICAvLyBDYWxjdWxhciBlbCBhbmNobyBkaXNwb25pYmxlIChhbmNobyB0b3RhbCBtZW5vcyBwYWRkaW5nIGl6cXVpZXJkby9kZXJlY2hvIHkgYm9yZGVyIGl6cXVpZXJkby9kZXJlY2hvKVxuICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQpIHx8IDBcbiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5wYWRkaW5nUmlnaHQpIHx8IDBcbiAgICAgIGNvbnN0IGJvcmRlckxlZnQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoKSB8fCAwXG4gICAgICBjb25zdCBib3JkZXJSaWdodCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJSaWdodFdpZHRoKSB8fCAwXG4gICAgICBjb25zdCB0ZXh0YXJlYVdpZHRoID0gdGV4dGFyZWEub2Zmc2V0V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodCAtIGJvcmRlckxlZnQgLSBib3JkZXJSaWdodFxuICAgICAgY29uc3QgdGV4dCA9IHRleHRhcmVhLnZhbHVlIHx8ICcnXG4gICAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpXG5cbiAgICAgIC8vIFNpIGhheSBtw7psdGlwbGVzIGzDrW5lYXMgcG9yIHNhbHRvcyBkZSBsw61uZWEgZXhwbMOtY2l0b3NcbiAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGhhc011bHRpcGxlVmlzdWFsTGluZXMgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBWZXJpZmljYXIgc2kgZWwgdGV4dG8gc2UgZW52dWVsdmUgbWlkaWVuZG8gZWwgYW5jaG8gZGUgY2FkYSBsw61uZWFcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcbiAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBjb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoXG4gICAgICAgICAgLy8gU2kgYWxndW5hIGzDrW5lYSBlcyBtw6FzIGFuY2hhIHF1ZSBlbCB0ZXh0YXJlYSBkaXNwb25pYmxlLCBzZSBlbnZ1ZWx2ZVxuICAgICAgICAgIGlmICh0ZXh0V2lkdGggPiB0ZXh0YXJlYVdpZHRoKSB7XG4gICAgICAgICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gdHJ1ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3SGVpZ2h0OiBudW1iZXJcbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgLy8gQ3VhbmRvIGVzdMOhIHZhY8OtbywgdXNhciBhbHR1cmEgbcOtbmltYVxuICAgICAgbmV3SGVpZ2h0ID0gbWluSGVpZ2h0XG4gICAgfSBlbHNlIGlmICghaGFzTXVsdGlwbGVWaXN1YWxMaW5lcykge1xuICAgICAgLy8gQ3VhbmRvIGhheSBjb250ZW5pZG8gcGVybyBzb2xvIHVuYSBsw61uZWEgdmlzdWFsLCB1c2FyIGFsdHVyYSBtw61uaW1hXG4gICAgICBuZXdIZWlnaHQgPSBtaW5IZWlnaHRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFyYSBtw7psdGlwbGVzIGzDrW5lYXMgdmlzdWFsZXMsIHVzYXIgZWwgc2Nyb2xsSGVpZ2h0XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChzY3JvbGxIZWlnaHQsIG1pbkhlaWdodCksIG1heEhlaWdodClcbiAgICB9XG5cbiAgICAvLyBSZXN0YXVyYXIgZXN0aWxvcyBhbnRlcyBkZSBhcGxpY2FyIGxhIG51ZXZhIGFsdHVyYVxuICAgIHRleHRhcmVhLnN0eWxlLm1pbkhlaWdodCA9IHByZXZpb3VzTWluSGVpZ2h0IHx8ICcyMi4xcHgnXG4gICAgdGV4dGFyZWEuc3R5bGUubWF4SGVpZ2h0ID0gcHJldmlvdXNNYXhIZWlnaHQgfHwgJzEyMi4xcHgnXG5cbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgaW5wdXRSZWYuY3VycmVudC5mb2N1cygpXG4gICAgICBoYW5kbGVSZXNpemUoKVxuICAgIH1cbiAgfSwgW2Rpc2FibGVkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBDb21wYXJhY2nDs24gcXVlIG1hbmVqYSBjb3JyZWN0YW1lbnRlIHVuZGVmaW5lZC9udWxsXG4gICAgY29uc3QgYWdlbnRDaGFuZ2VkID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgIT09IGFnZW50Py5pZFxuICAgIC8vIENvbXBhcmFjacOzbiBlc3RyaWN0YSBxdWUgZGV0ZWN0YSBjYW1iaW9zIGluY2x1c28gY3VhbmRvIHVubyBlcyB1bmRlZmluZWRcbiAgICBjb25zdCBwcmV2aW91c0NoYXRJZCA9IHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBjdXJyZW50Q2hhdElkID0gY2hhdElkXG4gICAgY29uc3QgY2hhdENoYW5nZWQgPSBwcmV2aW91c0NoYXRJZCAhPT0gY3VycmVudENoYXRJZFxuICAgIC8vIERldGVjdGFyIGNhbWJpbyBlc3BlY8OtZmljbyBkZSB1bmRlZmluZWQvbnVsbCBhIHVuIHZhbG9yIChudWV2byBjaGF0IC0+IGNvbnZlcnNhY2nDs24gdmllamEpXG4gICAgY29uc3QgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID1cbiAgICAgIChwcmV2aW91c0NoYXRJZCA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzQ2hhdElkID09PSBudWxsKSAmJiBjdXJyZW50Q2hhdElkICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENoYXRJZCAhPT0gbnVsbFxuICAgIGNvbnN0IG5ld0NoYXRTdGFydGVkID0gcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgIT09IG5ld0NoYXRLZXlcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgJiYgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkXG5cbiAgICBpZiAoXG4gICAgICAoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiZcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICFkaXNhYmxlZFxuICAgICkge1xuICAgICAgLy8gVXNhciBzZXRUaW1lb3V0IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIERPTSBlc3TDqSBsaXN0b1xuICAgICAgLy8gQXVtZW50YXIgZWwgZGVsYXkgcGFyYSBjYXNvcyBkb25kZSBlbCBjb21wb25lbnRlIHNlIGVzdMOhIG1vbnRhbmRvXG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgICAgICB9XG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICAvLyBBY3R1YWxpemFyIGxhcyByZWZlcmVuY2lhcyBERVNQVcOJUyBkZSBsYSBjb21wYXJhY2nDs25cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQ2xlYXIgaW5wdXQgd2hlbiBzZXNzaW9uIGNoYW5nZXMgKHVzZXIgc3dpdGNoZXMgdG8gYSBkaWZmZXJlbnQgY2hhdClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgc2V0VmFsdWVUZXh0YXJlYSgnJylcbiAgICAgIHNldElzRGlzYWJsZWQodHJ1ZSlcbiAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfSlcblxuICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZUlkKVxuICB9LCBbdmFsdWVUZXh0YXJlYV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNUZXh0ID0gdmFsdWVUZXh0YXJlYS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9LCBbYXR0YWNobWVudHMsIHZhbHVlVGV4dGFyZWFdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlKGlucHV0UmVmLmN1cnJlbnQudmFsdWUsIGF0dGFjaG1lbnRzKVxuICAgICAgaW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKCcnKVxuICAgICAgc2V0SXNEaXNhYmxlZCh0cnVlKVxuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICBvblNlbmRNZXNzYWdlKCcnLCBhdHRhY2htZW50cylcbiAgICAgIHNldFZhbHVlVGV4dGFyZWEoJycpXG4gICAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2UoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGhhc1RleHQgPSBlLnRhcmdldC52YWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICAgIHNldFZhbHVlVGV4dGFyZWEoZS50YXJnZXQudmFsdWUpXG4gICAgb25DaGFuZ2U/LigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQYXN0ZSA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpbnB1dFJlZi5jdXJyZW50Py52YWx1ZSA/PyAnJ1xuICAgICAgY29uc3QgaGFzVGV4dCA9IGN1cnJlbnRWYWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgICAgY29uc3QgaGFzQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKGN1cnJlbnRWYWx1ZSlcbiAgICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICAgIH0sIDEwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgLy8gRGVmaW5pciBsw61taXRlcyBwYXJhIGRpZmVyZW50ZXMgdGlwb3MgZGUgYXJjaGl2b3NcbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgLy8gVmFsaWRhY2lvbmVzIGVzcGVjw61maWNhcyBzZWfDum4gZWwgdGlwbyBkZSBhcmNoaXZvXG4gICAgICBpZiAoaXNOZXdGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBudWV2b3MgZm9ybWF0b3M6IGhhc3RhIDQuOTlNQiBwb3IgYXJjaGl2bywgaGFzdGEgNSBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiA1KSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPbGRGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBmb3JtYXRvcyBhbnRlcmlvcmVzOiBoYXN0YSAxTUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IDUpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0F1ZGlvRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgYXJjaGl2b3MgZGUgYXVkaW86IGhhc3RhIDEwTUIgcG9yIGFyY2hpdm8sIGhhc3RhIDUgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfQVVESU8gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gNSkge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldElzRGlzYWJsZWQoZmFsc2UpXG4gICAgaWYgKGV4Y2x1ZGVkRmlsZXMubGVuZ3RoIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiB0cnVlLCBleGNsdWRlZEZpbGVzLCBleGNlZWRlZEZpbGVzLCBmaWxlU2l6ZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBjb25zdCBoYXNUZXh0ID0gdmFsdWVUZXh0YXJlYS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV3JhcHBlckZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJCbHVyID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHNldElzRm9jdXNlZChmYWxzZSlcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3QgcGx1c0ljb25Db2xvciA9IGlzRm9jdXNlZCA/ICcjNjY2NjY2JyA6ICcjOTk5J1xuICBjb25zdCBwbHVzTWVudUljb25Db2xvciA9ICcjNGQ0ZDRkJ1xuICAvKiogQWxpbmVhZG8gY29uIGBQbHVzTWVudUl0ZW1MYWJlbGAgKCRzZWxlY3RlZCkgeSBlbCBjaGVjayBkZWwgbWVuw7ogKi9cbiAgY29uc3QgcGx1c01lbnVTZWxlY3RlZENvbG9yID0gJyMwMDU3OGMnXG5cbiAgbGV0IGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb246IFJlYWN0Tm9kZVxuICBpZiAoYWN0aXZlVG9vbENoaXBIb3ZlcmVkKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxDcm9zcyBjb2xvcj1cIiNhNGFkYjVcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPEdsb2JlIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8VGVsZXNjb3BlSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTdHlsZWRNQUlBSW5wdXRXcmFwcGVyXG4gICAgICAgIHJlZj17d3JhcHBlclJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICBhbGlnbkJ1dHRvbnM9e2FsaWduQnV0dG9uc31cbiAgICAgICAgaGFzQXR0YWNobWVudHM9eyEhYXR0YWNobWVudHMubGVuZ3RofVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVXcmFwcGVyRm9jdXN9XG4gICAgICAgIG9uQmx1cj17aGFuZGxlV3JhcHBlckJsdXJ9XG4gICAgICA+XG4gICAgICAgIHshIWF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzEycHgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lUGFydHMgPSBhdHRhY2htZW50Lm5hbWUuc3BsaXQoJy4nKVxuICAgICAgICAgICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeUV4dGVuc2lvbiA9IFsnLnBuZycsICcuanBnJywgJy5qcGVnJ10uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbilcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5TWltZSA9IGF0dGFjaG1lbnQudHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJylcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZSA9IGlzSW1hZ2VCeU1pbWUgJiYgaXNJbWFnZUJ5RXh0ZW5zaW9uXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0ga2V5PXtgJHtpbmRleH0tJHthdHRhY2htZW50Lm5hbWV9YH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQgaXNJbWFnZT17aXNJbWFnZX0+XG4gICAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50Lmljb259XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudERlbGV0ZUljb24gb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwicmdiYSgxOTEsIDE5MSwgMTkxLCAxKVwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudERlbGV0ZUljb24+XG4gICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50PlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRNQUlBSW5wdXRcbiAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICBvblBhc3RlPXtoYW5kbGVQYXN0ZX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgICAgb25CbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgICAvPlxuICAgICAgICA8U3R5bGVkTUFJQUlucHV0QnV0dG9ucz5cbiAgICAgICAgICA8UGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAkbWVudU9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGx1c0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0Lm9wZW5QbHVzTWVudUFyaWEnKX1cbiAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQbHVzIGNvbG9yPXtwbHVzSWNvbkNvbG9yfSB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICBvcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgIGFuY2hvckVsPXtwbHVzTWVudUFuY2hvcn1cbiAgICAgICAgICAgICAgb25DbG9zZT17Y2xvc2VQbHVzTWVudX1cbiAgICAgICAgICAgICAgYW5jaG9yT3JpZ2luPXt7IHZlcnRpY2FsOiAndG9wJywgaG9yaXpvbnRhbDogJ2xlZnQnIH19XG4gICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17eyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICBzbG90UHJvcHM9e3tcbiAgICAgICAgICAgICAgICBwYXBlcjoge1xuICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgc3g6IHtcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnLTRweCcsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxQbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICAgIDxQbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVBdHRhY2h9PlxuICAgICAgICAgICAgICAgICAgICA8QXR0YWNoIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXtmYWxzZX0+e3QoJ2NoYXQucGx1c01lbnVBdHRhY2gnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVdlYlNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgIDxHbG9iZVxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1dlYlNlYXJjaEFjdGl2ZSA/IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA6IHBsdXNNZW51SWNvbkNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXshIWlzV2ViU2VhcmNoQWN0aXZlfT57dCgnY2hhdC5zZWFyY2hXZWInKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7aXNXZWJTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51U2VsZWN0ZWRDb2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1BsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVEZWVwU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgIDxUZWxlc2NvcGVJY29uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc0RlZXBTZWFyY2hBY3RpdmUgPyBwbHVzTWVudVNlbGVjdGVkQ29sb3IgOiBwbHVzTWVudUljb25Db2xvcn1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezIwfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbCAkc2VsZWN0ZWQ9eyEhaXNEZWVwU2VhcmNoQWN0aXZlfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfVxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtpc0RlZXBTZWFyY2hBY3RpdmUgPyA8Q2hlY2sgY29sb3I9e3BsdXNNZW51U2VsZWN0ZWRDb2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgIDwvUGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgIHsoaXNXZWJTZWFyY2hBY3RpdmUgfHwgaXNEZWVwU2VhcmNoQWN0aXZlKSAmJiAoXG4gICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcFJvb3RcbiAgICAgICAgICAgICAgICAkaG92ZXJlZD17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICRleGl0aW5nPXt0b29sQ2hpcEV4aXRpbmd9XG4gICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAkY2xvc2VTaG93bj17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBY3RpdmVUb29sQXJpYScpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IHQoJ2NoYXQuc2VhcmNoV2ViJykgOiB0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBSb290PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1BsdXNNZW51VG9vbHNSb3c+XG5cbiAgICAgICAgICB7aXNXcml0aW5nID8gKFxuICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc3RvcCcpfT5cbiAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BJY29uIC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVN0b3BCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtpc1N0cmVhbWluZyA/IHQoJ2NoYXQuc2VuZCcpIDogdCgnY2hhdC5zZW5kJyl9PlxuICAgICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZCB8fCBkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICBoYXNWYWx1ZXM9eyEhdmFsdWVUZXh0YXJlYS5sZW5ndGh9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGFwZXJQbGFuZSBjb2xvcj1cIiNCRkJGQkZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdHlsZWRNQUlBSW5wdXRCdXR0b25zPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUE0REEsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3RHLFNB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