@projectcor/maia-components 2.11.32-0 → 2.11.32-2

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 (56) hide show
  1. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
  2. package/lib/components/atoms/icons/ChatConversation.js +40 -0
  3. package/lib/components/atoms/icons/index.js +2 -2
  4. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +41 -10
  5. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -4
  6. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +16 -3
  7. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +165 -178
  8. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +347 -253
  9. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +15 -28
  10. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +16 -81
  11. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +2 -17
  12. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +10 -9
  13. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +37 -6
  14. package/lib/components/molecules/Sidebar/Sidebar.js +269 -323
  15. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +17 -22
  16. package/lib/components/molecules/Sidebar/Sidebar.styles.js +54 -37
  17. package/lib/components/molecules/Sidebar/SidebarChats.styles.js +73 -0
  18. package/lib/components/molecules/Sidebar/SidebarChatsSection.js +69 -0
  19. package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +150 -0
  20. package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +238 -0
  21. package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +70 -0
  22. package/lib/components/molecules/Sidebar/sidebarChats.types.js +14 -0
  23. package/lib/dev/Providers.js +2 -2
  24. package/lib/dev/fixtures/devUser.js +173 -0
  25. package/lib/dev/fixtures/mockedUser.js +169 -0
  26. package/lib/hooks/useChatManager/useChatManager.js +59 -103
  27. package/lib/hooks/useChats/useChats.js +12 -4
  28. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +70 -139
  29. package/lib/lang/br/index.js +11 -6
  30. package/lib/lang/en/index.js +11 -6
  31. package/lib/lang/es/index.js +11 -6
  32. package/lib/lang/fr/index.js +11 -6
  33. package/lib/services/maia/Chats/getChatMessagesV2.js +114 -0
  34. package/lib/services/maia/Chats/getChatsByUserId.js +14 -8
  35. package/lib/services/maia/Chats/getSessionByAgent.js +66 -0
  36. package/lib/services/maia/Chats/getSessionsGroupedV2.js +70 -0
  37. package/lib/services/maia/Chats/index.js +7 -1
  38. package/lib/services/maia/client.js +44 -9
  39. package/lib/store/chatsStore.types.js +10 -2
  40. package/lib/store/useChatsStore.js +75 -37
  41. package/lib/types/Chat.js +3 -1
  42. package/package.json +1 -1
  43. package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +0 -33
  44. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +0 -16
  45. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +0 -12
  46. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +0 -13
  47. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +0 -3
  48. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +0 -57
  49. package/lib/components/molecules/ChatAIModal/layout.js +0 -35
  50. package/lib/hooks/useSmoothStreamText/index.js +0 -2
  51. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +0 -189
  52. package/lib/hooks/useStreamingMessage/index.js +0 -3
  53. package/lib/hooks/useStreamingMessage/streamingStore.js +0 -69
  54. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +0 -22
  55. package/lib/mocks/mockChats.js +0 -395
  56. package/lib/mocks/mockedUser.js +0 -169
@@ -1,32 +1,25 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
- import _regeneratorRuntime from "@babel/runtime/regenerator";
5
4
  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; }
6
5
  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; }
6
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
7
7
  /* eslint-disable no-param-reassign */
8
8
  /* eslint-disable @typescript-eslint/no-shadow */
9
9
  /* eslint-disable @typescript-eslint/no-explicit-any */
10
10
  /* eslint-disable no-nested-ternary */
11
11
  /* eslint-disable jsx-a11y/click-events-have-key-events */
12
12
  /* eslint-disable jsx-a11y/no-static-element-interactions */
13
- import { useEffect, useRef, useState } from 'react';
13
+ import { useEffect, useMemo, useRef, useState } from 'react';
14
+ import { AnimatePresence } from 'framer-motion';
14
15
  import { ChevronDoubleLeft } from '@projectcor/icons/lib/components/ChevronDoubleLeft';
15
- import { CUButton } from '@projectcor/button/lib/components/CUButton';
16
- import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
17
- import { Pencil } from '@projectcor/icons/lib/components/Pencil';
18
- import { Trash } from '@projectcor/icons/lib/components/Trash';
19
16
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
20
17
  import { EmptyHistoryIcon } from '../../atoms/icons/EmptyHistory';
21
- import { useResizeListener } from '../../../hooks/useResize';
22
18
  import { useChats } from '../../../hooks/useChats';
23
19
  import { Loader } from '../../atoms/Loader';
24
- import { ErrorState, MAIAIcon, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
20
+ import { ErrorState, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
25
21
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
26
22
  import { useT } from '../../../hooks/useT';
27
- import { OptionItem } from '../../atoms/CardMenu/CardMenu';
28
- import { EditQuestionModal } from '../../organisms/EditQuestionModal';
29
- import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal';
30
23
  import { ErrorIcon } from '../../atoms/icons/ErrorIcon';
31
24
  import { useUser } from '../../../context/cor-user';
32
25
  import { OnboardingModalButton } from '../../atoms/OnboardingModalButton';
@@ -34,190 +27,62 @@ import { FeedbackButton } from '../../atoms/FeedbackButton';
34
27
  import { useGlobalContext } from '../../../context/global-context';
35
28
  import { fetchMaia } from '../../../services/maia/client';
36
29
  import { mapCORLang } from '../../../lang/utils';
37
- import { SCLHCWrapper, SCLHCWrapperAgent, SCLHCWrapperAgentText, SCLHCWrapperButtonActions, SCLHCWrapperContent, SCLHCWrapperTitle, SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
38
- import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsHeading, SCSSidebarAgentsHeadingText, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarConversationsHeading, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
30
+ import { SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
31
+ import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
32
+ import { SCSSidebarSectionModalBackdropMotion } from './SidebarChats.styles';
33
+ import { SidebarChatsSection } from './SidebarChatsSection';
34
+ import { SidebarChatsSectionModal } from './SidebarChatsSectionModal';
35
+ import { buildSidebarSections, groupChatsBySidebarSection } from './sidebarChats.helpers';
36
+ import { SIDEBAR_SECTION_TRANSLATION_KEYS } from './sidebarChats.types';
37
+ import { getChatsStoreState } from '../../../store/useChatsStore';
38
+ import { SECTION_MODAL_SESSIONS_PAGE_LIMIT, SIDEBAR_SESSIONS_PAGE_LIMIT } from '../../../store/chatsStore.types';
39
39
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
40
- var actions = {
41
- edit: function edit(props) {
42
- return /*#__PURE__*/_jsx(EditQuestionModal, _objectSpread({}, props));
43
- },
44
- "delete": function _delete(props) {
45
- return /*#__PURE__*/_jsx(DeleteQuestionModal, _objectSpread({}, props));
46
- }
47
- };
48
-
49
- /** Abrevia "especialista"/"especialist" → "Esp." (ES/PT) y "specialist" → "Spec." (EN) en el nombre del agente. */
50
- function abbreviateSpecialistInAgentName(agentName) {
51
- if (!agentName || typeof agentName !== 'string') return agentName;
52
- return agentName.replace(/\b(especialista|especialist)\b/gi, 'Esp.').replace(/\bspecialist\b/gi, 'Spec.');
53
- }
54
- var ListHistoryChat = function ListHistoryChat(_ref) {
55
- var chat = _ref.chat,
56
- _onClick = _ref.onClick,
57
- isModalOpen = _ref.isModalOpen,
58
- onOpenModal = _ref.onOpenModal,
59
- onCloseModal = _ref.onCloseModal,
60
- handlers = _ref.handlers,
61
- isSelected = _ref.isSelected;
62
- var textRef = useRef(null);
63
- var agentRef = useRef(null);
64
- var _useResizeListener = useResizeListener(textRef, [chat.title]),
65
- showTooltip = _useResizeListener.showTooltip;
66
- var _useResizeListener2 = useResizeListener(agentRef, [chat.agent]),
67
- showTooltipAgent = _useResizeListener2.showTooltip;
68
- var _useT = useT(),
69
- t = _useT.t;
70
- var _useState = useState(null),
71
- _useState2 = _slicedToArray(_useState, 2),
72
- action = _useState2[0],
73
- setAction = _useState2[1];
74
- var menuItems = [{
75
- label: t('history.menu.rename'),
76
- onClickItem: function onClickItem(chatId) {
77
- setAction('edit');
78
- onOpenModal(chatId);
79
- },
80
- Icon: Pencil,
81
- eventKey: EVENTS.pmAiMenuEdit
82
- }, {
83
- label: t('history.menu.delete'),
84
- onClickItem: function onClickItem(chatId) {
85
- setAction('delete');
86
- onOpenModal(chatId);
87
- },
88
- Icon: Trash,
89
- eventKey: EVENTS.pmAiMenuDelete
90
- }];
91
- var handleConfirmAction = function handleConfirmAction(chatData) {
92
- if (action === 'edit') {
93
- handlers.handleUpdateChat(chatData);
94
- } else {
95
- handlers.handleDeleteChat(chatData);
96
- }
97
- setAction(null);
98
- onCloseModal();
99
- };
100
- return /*#__PURE__*/_jsxs(_Fragment, {
101
- children: [/*#__PURE__*/_jsxs(SCLHCWrapperContent, {
102
- onClick: function onClick(e) {
103
- e.stopPropagation();
104
- _onClick(chat);
105
- },
106
- isModalOpen: isModalOpen,
107
- isSelected: isSelected,
108
- children: [/*#__PURE__*/_jsxs(SCLHCWrapper, {
109
- children: [/*#__PURE__*/_jsx(Tooltip, {
110
- title: showTooltip ? chat.title : '',
111
- children: /*#__PURE__*/_jsx(SCLHCWrapperTitle, {
112
- ref: textRef,
113
- children: chat.title || t('conversations.emptyLabel')
114
- })
115
- }), /*#__PURE__*/_jsx(Tooltip, {
116
- title: showTooltipAgent ? chat.agent + (chat.projectName ? " - ".concat(chat.projectName) : '') : '',
117
- children: /*#__PURE__*/_jsxs(SCLHCWrapperAgent, {
118
- children: [chat.agentType === 'clone' ? /*#__PURE__*/_jsx(MAIAIcon, {
119
- width: 14,
120
- height: 14
121
- }) : /*#__PURE__*/_jsx("span", {
122
- style: {
123
- fontSize: '14px'
124
- },
125
- children: chat.emoji
126
- }), /*#__PURE__*/_jsxs(SCLHCWrapperAgentText, {
127
- ref: agentRef,
128
- children: [chat.agentType === 'clone' ? abbreviateSpecialistInAgentName(chat.agent) : chat.agent, chat.projectName && " - ".concat(chat.projectName)]
129
- })]
130
- })
131
- })]
132
- }), /*#__PURE__*/_jsxs(SCLHCWrapperButtonActions, {
133
- children: [/*#__PURE__*/_jsx(CUButton, {
134
- iconOnly: true,
135
- size: "small",
136
- variant: "text",
137
- onClick: function onClick(event) {
138
- event.stopPropagation();
139
- onOpenModal(chat.id);
140
- },
141
- children: /*#__PURE__*/_jsx(MenuDots, {
142
- width: 20,
143
- height: 20
144
- })
145
- }), isModalOpen && !action && /*#__PURE__*/_jsx("div", {
146
- "data-modal-container": true,
147
- style: {
148
- position: 'absolute',
149
- top: '32px',
150
- right: '16px',
151
- backgroundColor: 'white',
152
- zIndex: 1000,
153
- display: 'flex',
154
- flexDirection: 'column',
155
- borderRadius: '4px',
156
- border: '1px solid rgba(224, 224, 224, 1)',
157
- minWidth: '124px'
158
- },
159
- children: menuItems.map(function (_ref2) {
160
- var label = _ref2.label,
161
- onClickItem = _ref2.onClickItem,
162
- Icon = _ref2.Icon,
163
- eventKey = _ref2.eventKey;
164
- return /*#__PURE__*/_jsx(OptionItem, {
165
- label: label,
166
- onClick: function onClick() {
167
- return onClickItem(chat.id);
168
- },
169
- Icon: Icon,
170
- eventKey: eventKey
171
- }, label);
172
- })
173
- })]
174
- })]
175
- }, "conversation-".concat(chat.sessionExternalId)), !!action && actions[action]({
176
- onClose: function onClose() {
177
- onCloseModal();
178
- setAction(null);
179
- },
180
- chat: chat,
181
- handlers: {
182
- handleConfirmAction: handleConfirmAction,
183
- handleSetIsOpenModal: onCloseModal
184
- }
185
- })]
186
- });
187
- };
188
- export var Sidebar = function Sidebar(_ref3) {
40
+ export var Sidebar = function Sidebar(_ref) {
189
41
  var _user$permissions;
190
- var onGoToChat = _ref3.onGoToChat,
191
- _ref3$onError = _ref3.onError,
192
- onError = _ref3$onError === void 0 ? function () {
42
+ var onGoToChat = _ref.onGoToChat,
43
+ _ref$onError = _ref.onError,
44
+ onError = _ref$onError === void 0 ? function () {
193
45
  return null;
194
- } : _ref3$onError,
195
- handleGoToHome = _ref3.handleGoToHome,
196
- handleOpenMarketplace = _ref3.handleOpenMarketplace,
197
- showNewChat = _ref3.showNewChat,
198
- refetchChats = _ref3.refetchChats,
199
- handleSetRefetchChats = _ref3.handleSetRefetchChats,
200
- hasError = _ref3.hasError,
201
- resetSelectedChatRef = _ref3.resetSelectedChatRef,
202
- _ref3$agentsNavActive = _ref3.agentsNavActive,
203
- agentsNavActive = _ref3$agentsNavActive === void 0 ? null : _ref3$agentsNavActive;
204
- var _useT2 = useT(),
205
- t = _useT2.t,
206
- i18n = _useT2.i18n;
207
- var _useState3 = useState(true),
46
+ } : _ref$onError,
47
+ handleGoToHome = _ref.handleGoToHome,
48
+ handleOpenMarketplace = _ref.handleOpenMarketplace,
49
+ showNewChat = _ref.showNewChat,
50
+ refetchChats = _ref.refetchChats,
51
+ handleSetRefetchChats = _ref.handleSetRefetchChats,
52
+ hasError = _ref.hasError,
53
+ resetSelectedChatRef = _ref.resetSelectedChatRef,
54
+ _ref$agentsNavActive = _ref.agentsNavActive,
55
+ agentsNavActive = _ref$agentsNavActive === void 0 ? null : _ref$agentsNavActive,
56
+ onNewChat = _ref.onNewChat;
57
+ var _useT = useT(),
58
+ t = _useT.t,
59
+ i18n = _useT.i18n;
60
+ var _useState = useState(true),
61
+ _useState2 = _slicedToArray(_useState, 2),
62
+ isOpen = _useState2[0],
63
+ setIsOpen = _useState2[1];
64
+ var _useState3 = useState(null),
208
65
  _useState4 = _slicedToArray(_useState3, 2),
209
- isOpen = _useState4[0],
210
- setIsOpen = _useState4[1];
66
+ chatMenuState = _useState4[0],
67
+ setChatMenuState = _useState4[1];
211
68
  var _useState5 = useState(null),
212
69
  _useState6 = _slicedToArray(_useState5, 2),
213
- isOpenModal = _useState6[0],
214
- setIsOpenModal = _useState6[1];
215
- var _useState7 = useState(null),
70
+ expandedSectionModalKey = _useState6[0],
71
+ setExpandedSectionModalKey = _useState6[1];
72
+ var _useState7 = useState({
73
+ clients: false,
74
+ projects: false,
75
+ agentsByCompany: false
76
+ }),
216
77
  _useState8 = _slicedToArray(_useState7, 2),
217
- selectedChat = _useState8[0],
218
- setSelectedChat = _useState8[1];
78
+ collapsedSections = _useState8[0],
79
+ setCollapsedSections = _useState8[1];
80
+ var _useState9 = useState(null),
81
+ _useState0 = _slicedToArray(_useState9, 2),
82
+ selectedChat = _useState0[0],
83
+ setSelectedChat = _useState0[1];
219
84
  var chatsFetchedRef = useRef(false);
220
- var chatsContainerRef = useRef(null);
85
+ var sidebarScrollRef = useRef(null);
221
86
  var user = useUser();
222
87
  var eventAmplitude = useEvent();
223
88
  var _useGlobalContext = useGlobalContext(),
@@ -233,17 +98,32 @@ export var Sidebar = function Sidebar(_ref3) {
233
98
  deleteChat = _useChats.deleteChat,
234
99
  updateChat = _useChats.updateChat,
235
100
  fetchChats = _useChats.fetchChats,
236
- limit = _useChats.limit,
237
- offset = _useChats.offset,
238
101
  hasMoreChats = _useChats.hasMoreChats,
239
102
  loadMoreChats = _useChats.loadMoreChats,
240
- isLoadingMoreChats = _useChats.isLoadingMoreChats;
103
+ isLoadingMoreChats = _useChats.isLoadingMoreChats,
104
+ sessionsGroupHasMore = _useChats.sessionsGroupHasMore;
105
+ var showFullSidebarErrorColumn = hasError && !chats.length;
106
+ var showSidebarErrorFooterBanner = hasError && chats.length > 0;
241
107
  var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
242
108
  var canCreateAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
243
109
  var canViewAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.view);
244
110
  var showMarketplaceSidebarButton = !!canCreateAgents && !!window.MAIA_MARKETPLACE_MAIAKER;
245
111
  var agentNavButtonCount = (showMarketplaceSidebarButton ? 1 : 0) + (canViewAgents ? 1 : 0);
246
112
  var showAgentsNavBlock = showMarketplaceSidebarButton || canViewAgents;
113
+ var groupedChats = useMemo(function () {
114
+ return groupChatsBySidebarSection(chats);
115
+ }, [chats]);
116
+ var sidebarSections = useMemo(function () {
117
+ return buildSidebarSections(groupedChats, function (key) {
118
+ var _user$company;
119
+ return key === 'agentsByCompany' ? t(SIDEBAR_SECTION_TRANSLATION_KEYS[key], {
120
+ companyName: ((_user$company = user.company) === null || _user$company === void 0 ? void 0 : _user$company.trim()) || '—'
121
+ }) : t(SIDEBAR_SECTION_TRANSLATION_KEYS[key]);
122
+ }, sessionsGroupHasMore);
123
+ }, [groupedChats, t, user.company, sessionsGroupHasMore]);
124
+ var expandedSection = expandedSectionModalKey ? sidebarSections.find(function (section) {
125
+ return section.key === expandedSectionModalKey;
126
+ }) || null : null;
247
127
  useEffect(function () {
248
128
  if (resetSelectedChatRef) {
249
129
  resetSelectedChatRef.current = function () {
@@ -257,12 +137,12 @@ export var Sidebar = function Sidebar(_ref3) {
257
137
  };
258
138
  }, [resetSelectedChatRef]);
259
139
  var handleDeleteChat = /*#__PURE__*/function () {
260
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
140
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
261
141
  return _regeneratorRuntime.wrap(function (_context) {
262
142
  while (1) switch (_context.prev = _context.next) {
263
143
  case 0:
264
144
  deleteChat(chat.sessionExternalId);
265
- setIsOpenModal(null);
145
+ setChatMenuState(null);
266
146
  handleGoToHome();
267
147
  case 1:
268
148
  case "end":
@@ -271,69 +151,121 @@ export var Sidebar = function Sidebar(_ref3) {
271
151
  }, _callee);
272
152
  }));
273
153
  return function handleDeleteChat(_x) {
274
- return _ref4.apply(this, arguments);
154
+ return _ref2.apply(this, arguments);
275
155
  };
276
156
  }();
277
157
  var handleUpdateChat = function handleUpdateChat(chat) {
278
158
  updateChat(chat);
279
- setIsOpenModal(null);
159
+ setChatMenuState(null);
280
160
  };
281
- var handleOpenModal = function handleOpenModal(chatId) {
282
- if (isOpenModal && isOpenModal !== chatId) {
283
- setIsOpenModal(null);
284
- } else {
285
- setIsOpenModal(chatId);
286
- }
161
+ var handleOpenChatMenu = function handleOpenChatMenu(chatId, surface) {
162
+ setChatMenuState(function (prev) {
163
+ return (prev === null || prev === void 0 ? void 0 : prev.chatId) === chatId && (prev === null || prev === void 0 ? void 0 : prev.surface) === surface ? null : {
164
+ chatId: chatId,
165
+ surface: surface
166
+ };
167
+ });
168
+ };
169
+ var handleCloseChatMenu = function handleCloseChatMenu() {
170
+ setChatMenuState(null);
287
171
  };
288
- var handleCloseModal = function handleCloseModal() {
289
- setIsOpenModal(null);
172
+ var handleOpenSectionModal = /*#__PURE__*/function () {
173
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sectionKey) {
174
+ var _getChatsStoreState, storeLimit;
175
+ return _regeneratorRuntime.wrap(function (_context2) {
176
+ while (1) switch (_context2.prev = _context2.next) {
177
+ case 0:
178
+ setChatMenuState(null);
179
+ _getChatsStoreState = getChatsStoreState(), storeLimit = _getChatsStoreState.limit;
180
+ if (!(storeLimit === SIDEBAR_SESSIONS_PAGE_LIMIT)) {
181
+ _context2.next = 1;
182
+ break;
183
+ }
184
+ _context2.next = 1;
185
+ return fetchChats({
186
+ limit: SECTION_MODAL_SESSIONS_PAGE_LIMIT,
187
+ offset: 0,
188
+ showGlobalLoader: false
189
+ });
190
+ case 1:
191
+ setExpandedSectionModalKey(sectionKey);
192
+ case 2:
193
+ case "end":
194
+ return _context2.stop();
195
+ }
196
+ }, _callee2);
197
+ }));
198
+ return function handleOpenSectionModal(_x2) {
199
+ return _ref3.apply(this, arguments);
200
+ };
201
+ }();
202
+ var handleCloseSectionModal = function handleCloseSectionModal() {
203
+ setExpandedSectionModalKey(null);
204
+ setChatMenuState(null);
205
+ };
206
+ var handleToggleSectionCollapse = function handleToggleSectionCollapse(sectionKey) {
207
+ setCollapsedSections(function (prev) {
208
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, sectionKey, !prev[sectionKey]));
209
+ });
210
+ };
211
+ var handleSelectConversation = function handleSelectConversation(chatData) {
212
+ setSelectedChat(chatData.sessionExternalId);
213
+ onGoToChat(chatData);
290
214
  };
291
215
  useEffect(function () {
292
216
  var handleClickOutside = function handleClickOutside(event) {
293
- if (isOpenModal && !event.target.closest('[data-modal-container]')) {
294
- setIsOpenModal(null);
217
+ var target = event.target;
218
+ if (chatMenuState && !target.closest('[data-modal-container]')) {
219
+ setChatMenuState(null);
220
+ }
221
+ if (expandedSectionModalKey && !target.closest('[data-section-modal-container]')) {
222
+ setExpandedSectionModalKey(null);
223
+ setChatMenuState(null);
295
224
  }
296
225
  };
297
- if (isOpenModal) {
226
+ if (chatMenuState || expandedSectionModalKey) {
298
227
  document.addEventListener('mousedown', handleClickOutside);
299
228
  }
300
229
  return function () {
301
230
  document.removeEventListener('mousedown', handleClickOutside);
302
231
  };
303
- }, [isOpenModal]);
232
+ }, [chatMenuState, expandedSectionModalKey]);
304
233
  var handleToggleSidebar = function handleToggleSidebar() {
305
- if (isOpenModal) {
306
- setIsOpenModal(null);
234
+ if (chatMenuState) {
235
+ setChatMenuState(null);
236
+ }
237
+ if (expandedSectionModalKey) {
238
+ setExpandedSectionModalKey(null);
307
239
  }
308
240
  setIsOpen(function (prev) {
309
241
  return !prev;
310
242
  });
311
243
  };
312
244
  var handleOpenCreateAgent = /*#__PURE__*/function () {
313
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
245
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
314
246
  var response, data, maiakerAgent;
315
- return _regeneratorRuntime.wrap(function (_context2) {
316
- while (1) switch (_context2.prev = _context2.next) {
247
+ return _regeneratorRuntime.wrap(function (_context3) {
248
+ while (1) switch (_context3.prev = _context3.next) {
317
249
  case 0:
318
- _context2.next = 1;
250
+ _context3.next = 1;
319
251
  return fetchMaia({
320
252
  path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
321
253
  method: 'GET'
322
254
  });
323
255
  case 1:
324
- response = _context2.sent;
325
- _context2.next = 2;
256
+ response = _context3.sent;
257
+ _context3.next = 2;
326
258
  return response.json();
327
259
  case 2:
328
- data = _context2.sent;
260
+ data = _context3.sent;
329
261
  maiakerAgent = (data.data || []).find(function (agent) {
330
262
  return agent.type === 'clone' && agent.entity === 'global';
331
263
  });
332
264
  if (maiakerAgent) {
333
- _context2.next = 3;
265
+ _context3.next = 3;
334
266
  break;
335
267
  }
336
- return _context2.abrupt("return");
268
+ return _context3.abrupt("return");
337
269
  case 3:
338
270
  setProject(null);
339
271
  setClient === null || setClient === void 0 || setClient(null);
@@ -341,85 +273,74 @@ export var Sidebar = function Sidebar(_ref3) {
341
273
  handleGoToHome();
342
274
  case 4:
343
275
  case "end":
344
- return _context2.stop();
276
+ return _context3.stop();
345
277
  }
346
- }, _callee2);
278
+ }, _callee3);
347
279
  }));
348
280
  return function handleOpenCreateAgent() {
349
- return _ref5.apply(this, arguments);
281
+ return _ref4.apply(this, arguments);
350
282
  };
351
283
  }();
352
284
  useEffect(function () {
353
285
  if (isOpen && !chatsFetchedRef.current) {
354
286
  chatsFetchedRef.current = true;
355
287
  fetchChats({
356
- limit: limit,
357
- offset: offset
288
+ limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
289
+ offset: 0
358
290
  });
359
291
  return;
360
292
  }
361
293
  if (refetchChats) {
362
294
  fetchChats({
363
- limit: limit,
364
- offset: offset
295
+ limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
296
+ offset: 0
365
297
  });
366
298
  handleSetRefetchChats(false);
367
299
  }
368
- }, [isOpen, refetchChats, handleSetRefetchChats]);
369
- useEffect(function () {
370
- var handleScroll = function handleScroll() {
371
- if (!chatsContainerRef.current || !hasMoreChats || isLoadingMoreChats || hasError) {
372
- return;
373
- }
374
- var _chatsContainerRef$cu = chatsContainerRef.current,
375
- scrollTop = _chatsContainerRef$cu.scrollTop,
376
- scrollHeight = _chatsContainerRef$cu.scrollHeight,
377
- clientHeight = _chatsContainerRef$cu.clientHeight;
378
- var isAtBottom = scrollTop + clientHeight >= scrollHeight - 10;
379
- if (isAtBottom) {
380
- loadMoreChats();
381
- }
382
- };
383
- var container = chatsContainerRef.current;
384
- if (container) {
385
- container.addEventListener('scroll', handleScroll);
386
- }
387
- return function () {
388
- if (container) {
389
- container.removeEventListener('scroll', handleScroll);
390
- }
391
- };
392
- }, [hasMoreChats, isLoadingMoreChats, loadMoreChats, hasError]);
300
+ }, [isOpen, refetchChats, handleSetRefetchChats, fetchChats]);
301
+
302
+ /** El scroll infinito de sesiones vive solo en el modal de sección (`SidebarChatsSectionModal`). */
303
+
393
304
  var handleNewChat = /*#__PURE__*/function () {
394
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
395
- return _regeneratorRuntime.wrap(function (_context3) {
396
- while (1) switch (_context3.prev = _context3.next) {
305
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
306
+ return _regeneratorRuntime.wrap(function (_context4) {
307
+ while (1) switch (_context4.prev = _context4.next) {
397
308
  case 0:
398
- if (isOpenModal) {
399
- setIsOpenModal(null);
309
+ if (chatMenuState) {
310
+ setChatMenuState(null);
400
311
  }
401
312
  setSelectedChat(null);
402
- _context3.next = 1;
313
+ _context4.next = 1;
403
314
  return fetchChats({
404
- limit: limit,
315
+ limit: expandedSectionModalKey ? SECTION_MODAL_SESSIONS_PAGE_LIMIT : SIDEBAR_SESSIONS_PAGE_LIMIT,
405
316
  offset: 0
406
317
  });
407
318
  case 1:
408
- handleGoToHome();
319
+ if (!onNewChat) {
320
+ _context4.next = 3;
321
+ break;
322
+ }
323
+ _context4.next = 2;
324
+ return onNewChat();
409
325
  case 2:
326
+ _context4.next = 4;
327
+ break;
328
+ case 3:
329
+ handleGoToHome();
330
+ case 4:
410
331
  case "end":
411
- return _context3.stop();
332
+ return _context4.stop();
412
333
  }
413
- }, _callee3);
334
+ }, _callee4);
414
335
  }));
415
336
  return function handleNewChat() {
416
- return _ref6.apply(this, arguments);
337
+ return _ref5.apply(this, arguments);
417
338
  };
418
339
  }();
419
340
  useEffect(function () {
420
341
  var handleRefetchSession = function handleRefetchSession() {
421
342
  fetchChats({
422
- limit: 20,
343
+ limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
423
344
  offset: 0
424
345
  });
425
346
  };
@@ -427,7 +348,7 @@ export var Sidebar = function Sidebar(_ref3) {
427
348
  return function () {
428
349
  document.removeEventListener('refetch-session', handleRefetchSession);
429
350
  };
430
- }, []);
351
+ }, [fetchChats]);
431
352
  var showNewChatButton = !showNewChat && !hasError && !loadingChats && ((userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access) || !(userPermissions !== null && userPermissions !== void 0 && userPermissions.view) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) && !(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access));
432
353
  return /*#__PURE__*/_jsxs(SCSSidebarRoot, {
433
354
  $isOpen: isOpen,
@@ -439,9 +360,9 @@ export var Sidebar = function Sidebar(_ref3) {
439
360
  onClick: handleToggleSidebar,
440
361
  isOpen: isOpen,
441
362
  children: /*#__PURE__*/_jsx(ChevronDoubleLeft, {
442
- color: "rgba(102, 102, 102, 1)",
443
- width: 20,
444
- height: 20
363
+ color: "#4D4D4D",
364
+ width: 14,
365
+ height: 14
445
366
  })
446
367
  })
447
368
  }), showNewChatButton ? /*#__PURE__*/_jsx(Tooltip, {
@@ -449,53 +370,47 @@ export var Sidebar = function Sidebar(_ref3) {
449
370
  children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
450
371
  onClick: handleNewChat,
451
372
  children: /*#__PURE__*/_jsx(NewChat, {
452
- width: 20,
453
- height: 20
373
+ width: 14,
374
+ height: 14,
375
+ color: "#4D4D4D"
454
376
  })
455
377
  })
456
378
  }) : null]
457
379
  }), /*#__PURE__*/_jsxs(SCSSidebarBody, {
458
380
  $isOpen: isOpen,
459
381
  children: [isOpen ? /*#__PURE__*/_jsxs(SCSSidebarOpenPanel, {
460
- children: [/*#__PURE__*/_jsxs(SCSSidebarAgentsBlock, {
461
- children: [showAgentsNavBlock ? /*#__PURE__*/_jsxs(_Fragment, {
462
- children: [/*#__PURE__*/_jsx(SCSSidebarAgentsHeading, {
463
- children: /*#__PURE__*/_jsx(SCSSidebarAgentsHeadingText, {
464
- children: t('conversations.agentsSectionTitle')
465
- })
466
- }), /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
467
- children: [showMarketplaceSidebarButton ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
468
- type: "button",
469
- onClick: function onClick() {
470
- eventAmplitude(EVENTS.aiChatMpOpen);
471
- handleOpenCreateAgent();
472
- },
473
- $active: agentsNavActive === 'maiaker',
474
- children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
475
- size: 16
476
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
477
- children: t('conversations.maiakerNav')
478
- })]
479
- }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
480
- type: "button",
481
- onClick: handleOpenMarketplace,
482
- $active: agentsNavActive === 'myAgents',
483
- children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
484
- size: 16
485
- }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
486
- children: t('conversations.myAgentsNav')
487
- })]
488
- }) : null]
489
- })]
490
- }) : null, /*#__PURE__*/_jsx(SCSSidebarConversationsHeading, {
491
- children: t('conversations.title')
492
- })]
382
+ ref: sidebarScrollRef,
383
+ children: [/*#__PURE__*/_jsx(SCSSidebarAgentsBlock, {
384
+ children: showAgentsNavBlock ? /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
385
+ children: [showMarketplaceSidebarButton ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
386
+ type: "button",
387
+ onClick: function onClick() {
388
+ eventAmplitude(EVENTS.aiChatMpOpen);
389
+ handleOpenCreateAgent();
390
+ },
391
+ $active: agentsNavActive === 'maiaker',
392
+ children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
393
+ size: 16
394
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
395
+ children: t('conversations.maiakerNav')
396
+ })]
397
+ }) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
398
+ type: "button",
399
+ onClick: handleOpenMarketplace,
400
+ $active: agentsNavActive === 'myAgents',
401
+ children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
402
+ size: 16
403
+ }), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
404
+ children: t('conversations.myAgentsNav')
405
+ })]
406
+ }) : null]
407
+ }) : null
493
408
  }), /*#__PURE__*/_jsx(SCSSidebarChatsScroll, {
494
- ref: chatsContainerRef,
495
- $hasChats: chats.length > 0,
409
+ $hasChats: chats.length > 0 && !showFullSidebarErrorColumn,
496
410
  $offsetVariant: hasError ? 'error' : 'default',
497
411
  $agentNavButtonCount: agentNavButtonCount,
498
- children: hasError && !chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
412
+ $fillHeight: showFullSidebarErrorColumn,
413
+ children: showFullSidebarErrorColumn ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
499
414
  children: [/*#__PURE__*/_jsx(SCSSidebarErrorStateTop, {
500
415
  children: /*#__PURE__*/_jsx(ErrorState, {})
501
416
  }), /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
@@ -508,25 +423,24 @@ export var Sidebar = function Sidebar(_ref3) {
508
423
  }) : loadingChats ? /*#__PURE__*/_jsx(SCSSidebarLoadingArea, {
509
424
  children: /*#__PURE__*/_jsx(Loader, {})
510
425
  }) : chats.length ? /*#__PURE__*/_jsxs(_Fragment, {
511
- children: [chats.map(function (chat) {
512
- return /*#__PURE__*/_jsx(ListHistoryChat, {
513
- chat: chat,
514
- onClick: function onClick(chatData) {
515
- if (isOpenModal) {
516
- setIsOpenModal(null);
517
- }
518
- setSelectedChat(chatData.sessionExternalId);
519
- onGoToChat(chatData);
426
+ children: [sidebarSections.map(function (section) {
427
+ return /*#__PURE__*/_jsx(SidebarChatsSection, {
428
+ section: section,
429
+ collapsed: collapsedSections[section.key],
430
+ onToggleCollapse: function onToggleCollapse() {
431
+ return handleToggleSectionCollapse(section.key);
520
432
  },
521
- isModalOpen: isOpenModal === chat.id,
522
- onOpenModal: handleOpenModal,
523
- onCloseModal: handleCloseModal,
524
- handlers: {
525
- handleDeleteChat: handleDeleteChat,
526
- handleUpdateChat: handleUpdateChat
433
+ onOpenMore: function onOpenMore() {
434
+ return handleOpenSectionModal(section.key);
527
435
  },
528
- isSelected: selectedChat === chat.sessionExternalId
529
- }, chat.id);
436
+ chatMenuState: chatMenuState,
437
+ onOpenChatMenu: handleOpenChatMenu,
438
+ onCloseChatMenu: handleCloseChatMenu,
439
+ handleDeleteChat: handleDeleteChat,
440
+ handleUpdateChat: handleUpdateChat,
441
+ selectedChatSessionExternalId: selectedChat,
442
+ onGoToChat: handleSelectConversation
443
+ }, "chat-section-".concat(section.key));
530
444
  }), isLoadingMoreChats && /*#__PURE__*/_jsx(SCSSidebarLoadMoreRow, {
531
445
  children: /*#__PURE__*/_jsx(Loader, {})
532
446
  })]
@@ -536,7 +450,7 @@ export var Sidebar = function Sidebar(_ref3) {
536
450
  })]
537
451
  })
538
452
  }), /*#__PURE__*/_jsx(SCSSidebarChatsFooter, {
539
- children: hasError && chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
453
+ children: showSidebarErrorFooterBanner ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
540
454
  children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
541
455
  children: /*#__PURE__*/_jsx(ErrorIcon, {})
542
456
  }), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
@@ -552,7 +466,39 @@ export var Sidebar = function Sidebar(_ref3) {
552
466
  isOpen: isOpen
553
467
  }) : null, /*#__PURE__*/_jsx(OnboardingModalButton, {})]
554
468
  })]
469
+ }), /*#__PURE__*/_jsx(AnimatePresence, {
470
+ children: expandedSectionModalKey && expandedSection ? /*#__PURE__*/_jsxs(_Fragment, {
471
+ children: [/*#__PURE__*/_jsx(SCSSidebarSectionModalBackdropMotion, {
472
+ "aria-hidden": true,
473
+ initial: {
474
+ opacity: 0
475
+ },
476
+ animate: {
477
+ opacity: 1
478
+ },
479
+ exit: {
480
+ opacity: 0
481
+ },
482
+ transition: {
483
+ duration: 0.2,
484
+ ease: 'easeOut'
485
+ }
486
+ }, "sidebar-section-chat-backdrop"), /*#__PURE__*/_jsx(SidebarChatsSectionModal, {
487
+ section: expandedSection,
488
+ onClose: handleCloseSectionModal,
489
+ chatMenuState: chatMenuState,
490
+ onOpenChatMenu: handleOpenChatMenu,
491
+ onCloseChatMenu: handleCloseChatMenu,
492
+ handleDeleteChat: handleDeleteChat,
493
+ handleUpdateChat: handleUpdateChat,
494
+ selectedChatSessionExternalId: selectedChat,
495
+ onGoToChat: handleSelectConversation,
496
+ hasMoreChats: hasMoreChats,
497
+ loadMoreChats: loadMoreChats,
498
+ isLoadingMoreChats: isLoadingMoreChats
499
+ }, expandedSectionModalKey)]
500
+ }) : null
555
501
  })]
556
502
  });
557
503
  };
558
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNoZXZyb25Eb3VibGVMZWZ0IiwiQ1VCdXR0b24iLCJNZW51RG90cyIsIlBlbmNpbCIsIlRyYXNoIiwiVG9vbHRpcCIsIkVtcHR5SGlzdG9yeUljb24iLCJ1c2VSZXNpemVMaXN0ZW5lciIsInVzZUNoYXRzIiwiTG9hZGVyIiwiRXJyb3JTdGF0ZSIsIk1BSUFJY29uIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJPcHRpb25JdGVtIiwiRWRpdFF1ZXN0aW9uTW9kYWwiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiRXJyb3JJY29uIiwidXNlVXNlciIsIk9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIkZlZWRiYWNrQnV0dG9uIiwidXNlR2xvYmFsQ29udGV4dCIsImZldGNoTWFpYSIsIm1hcENPUkxhbmciLCJTQ0xIQ1dyYXBwZXIiLCJTQ0xIQ1dyYXBwZXJBZ2VudCIsIlNDTEhDV3JhcHBlckFnZW50VGV4dCIsIlNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMiLCJTQ0xIQ1dyYXBwZXJDb250ZW50IiwiU0NMSENXcmFwcGVyVGl0bGUiLCJTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIiwiU0NTV3JhcHBlck5ld0NoYXRJY29uIiwiU0NTU2lkZWJhclJvb3QiLCJTQ1NTaWRlYmFyVG9vbGJhciIsIlNDU1NpZGViYXJCb2R5IiwiU0NTU2lkZWJhck9wZW5QYW5lbCIsIlNDU1NpZGViYXJBZ2VudHNCbG9jayIsIlNDU1NpZGViYXJBZ2VudHNIZWFkaW5nIiwiU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0IiwiU0NTU2lkZWJhckFnZW50c0FjdGlvbnMiLCJTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbiIsIlNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWwiLCJTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmciLCJTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwiLCJTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbiIsIlNDU1NpZGViYXJFcnJvclN0YXRlVG9wIiwiU0NTU2lkZWJhckVycm9yQmFubmVyIiwiU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlIiwiU0NTU2lkZWJhckxvYWRpbmdBcmVhIiwiU0NTU2lkZWJhckxvYWRNb3JlUm93IiwiU0NTU2lkZWJhckVtcHR5Q2hhdHMiLCJTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQiLCJTQ1NTaWRlYmFyQ2hhdHNGb290ZXIiLCJTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImFjdGlvbnMiLCJlZGl0IiwicHJvcHMiLCJfb2JqZWN0U3ByZWFkIiwiZGVsZXRlIiwiYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZSIsImFnZW50TmFtZSIsInJlcGxhY2UiLCJMaXN0SGlzdG9yeUNoYXQiLCJfcmVmIiwiY2hhdCIsIm9uQ2xpY2siLCJpc01vZGFsT3BlbiIsIm9uT3Blbk1vZGFsIiwib25DbG9zZU1vZGFsIiwiaGFuZGxlcnMiLCJpc1NlbGVjdGVkIiwidGV4dFJlZiIsImFnZW50UmVmIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwidGl0bGUiLCJzaG93VG9vbHRpcCIsIl91c2VSZXNpemVMaXN0ZW5lcjIiLCJhZ2VudCIsInNob3dUb29sdGlwQWdlbnQiLCJfdXNlVCIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3Rpb24iLCJzZXRBY3Rpb24iLCJtZW51SXRlbXMiLCJsYWJlbCIsIm9uQ2xpY2tJdGVtIiwiY2hhdElkIiwiSWNvbiIsImV2ZW50S2V5IiwicG1BaU1lbnVFZGl0IiwicG1BaU1lbnVEZWxldGUiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiY2hhdERhdGEiLCJoYW5kbGVVcGRhdGVDaGF0IiwiaGFuZGxlRGVsZXRlQ2hhdCIsImNoaWxkcmVuIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsInJlZiIsInByb2plY3ROYW1lIiwiY29uY2F0IiwiYWdlbnRUeXBlIiwid2lkdGgiLCJoZWlnaHQiLCJzdHlsZSIsImZvbnRTaXplIiwiZW1vamkiLCJpY29uT25seSIsInNpemUiLCJ2YXJpYW50IiwiZXZlbnQiLCJpZCIsInBvc2l0aW9uIiwidG9wIiwicmlnaHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ6SW5kZXgiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImJvcmRlclJhZGl1cyIsImJvcmRlciIsIm1pbldpZHRoIiwibWFwIiwiX3JlZjIiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsIm9uQ2xvc2UiLCJoYW5kbGVTZXRJc09wZW5Nb2RhbCIsIlNpZGViYXIiLCJfcmVmMyIsIl91c2VyJHBlcm1pc3Npb25zIiwib25Hb1RvQ2hhdCIsIl9yZWYzJG9uRXJyb3IiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJzaG93TmV3Q2hhdCIsInJlZmV0Y2hDaGF0cyIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsImhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJfcmVmMyRhZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNOYXZBY3RpdmUiLCJfdXNlVDIiLCJpMThuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3Blbk1vZGFsIiwic2V0SXNPcGVuTW9kYWwiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsImNoYXRzQ29udGFpbmVyUmVmIiwidXNlciIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RlZEFnZW50Iiwic2VsZWN0QWdlbnQiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwiX3VzZUNoYXRzIiwibG9hZGluZ0NoYXRzIiwiY2hhdHMiLCJkZWxldGVDaGF0IiwidXBkYXRlQ2hhdCIsImZldGNoQ2hhdHMiLCJsaW1pdCIsIm9mZnNldCIsImhhc01vcmVDaGF0cyIsImxvYWRNb3JlQ2hhdHMiLCJpc0xvYWRpbmdNb3JlQ2hhdHMiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZUFnZW50cyIsImNyZWF0ZSIsImNhblZpZXdBZ2VudHMiLCJ2aWV3Iiwic2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiIsIndpbmRvdyIsIk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUiIsImFnZW50TmF2QnV0dG9uQ291bnQiLCJzaG93QWdlbnRzTmF2QmxvY2siLCJjdXJyZW50IiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVPcGVuTW9kYWwiLCJoYW5kbGVDbG9zZU1vZGFsIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwidGFyZ2V0IiwiY2xvc2VzdCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50IiwiX3JlZjUiLCJfY2FsbGVlMiIsInJlc3BvbnNlIiwiZGF0YSIsIm1haWFrZXJBZ2VudCIsIl9jb250ZXh0MiIsInBhdGgiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiZmluZCIsInR5cGUiLCJlbnRpdHkiLCJhYnJ1cHQiLCJoYW5kbGVTY3JvbGwiLCJfY2hhdHNDb250YWluZXJSZWYkY3UiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpc0F0Qm90dG9tIiwiY29udGFpbmVyIiwiaGFuZGxlTmV3Q2hhdCIsIl9yZWY2IiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJoYW5kbGVSZWZldGNoU2Vzc2lvbiIsInNob3dOZXdDaGF0QnV0dG9uIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsIiRpc09wZW4iLCJjb2xvciIsImFpQ2hhdE1wT3BlbiIsIiRhY3RpdmUiLCIkaGFzQ2hhdHMiLCJsZW5ndGgiLCIkb2Zmc2V0VmFyaWFudCIsIiRhZ2VudE5hdkJ1dHRvbkNvdW50IiwiJGp1c3RpZnlCZXR3ZWVuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL1NpZGViYXIvU2lkZWJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IE11dGFibGVSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvbkRvdWJsZUxlZnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uRG91YmxlTGVmdCdcbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgTWVudURvdHMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9NZW51RG90cydcbmltcG9ydCB7IFBlbmNpbCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BlbmNpbCdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHsgRW1wdHlIaXN0b3J5SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0VtcHR5SGlzdG9yeSdcbmltcG9ydCB7IHVzZVJlc2l6ZUxpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVzaXplJ1xuaW1wb3J0IHsgdXNlQ2hhdHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0cydcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IEVycm9yU3RhdGUsIE1BSUFJY29uLCBNYWlhU3RvcmVJY29uLCBNeUFnZW50c05hdkljb24sIE5ld0NoYXQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgT3B0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2F0b21zL0NhcmRNZW51L0NhcmRNZW51J1xuaW1wb3J0IHsgRWRpdFF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRWRpdFF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBFcnJvckljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FcnJvckljb24nXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IE9uYm9hcmRpbmdNb2RhbEJ1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL09uYm9hcmRpbmdNb2RhbEJ1dHRvbidcbmltcG9ydCB7IEZlZWRiYWNrQnV0dG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmVlZGJhY2tCdXR0b24nXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvY2xpZW50J1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQge1xuICBTQ0xIQ1dyYXBwZXIsXG4gIFNDTEhDV3JhcHBlckFnZW50LFxuICBTQ0xIQ1dyYXBwZXJBZ2VudFRleHQsXG4gIFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMsXG4gIFNDTEhDV3JhcHBlckNvbnRlbnQsXG4gIFNDTEhDV3JhcHBlclRpdGxlLFxuICBTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uLFxuICBTQ1NXcmFwcGVyTmV3Q2hhdEljb24sXG59IGZyb20gJy4vU2lkZWJhci5zdHlsZXMnXG5pbXBvcnQge1xuICBTQ1NTaWRlYmFyUm9vdCxcbiAgU0NTU2lkZWJhclRvb2xiYXIsXG4gIFNDU1NpZGViYXJCb2R5LFxuICBTQ1NTaWRlYmFyT3BlblBhbmVsLFxuICBTQ1NTaWRlYmFyQWdlbnRzQmxvY2ssXG4gIFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nLFxuICBTQ1NTaWRlYmFyQWdlbnRzSGVhZGluZ1RleHQsXG4gIFNDU1NpZGViYXJBZ2VudHNBY3Rpb25zLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbixcbiAgU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCxcbiAgU0NTU2lkZWJhckNvbnZlcnNhdGlvbnNIZWFkaW5nLFxuICBTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwsXG4gIFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyLFxuICBTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSxcbiAgU0NTU2lkZWJhckxvYWRpbmdBcmVhLFxuICBTQ1NTaWRlYmFyTG9hZE1vcmVSb3csXG4gIFNDU1NpZGViYXJFbXB0eUNoYXRzLFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQsXG4gIFNDU1NpZGViYXJDaGF0c0Zvb3RlcixcbiAgU0NTU2lkZWJhckZvb3RlckFjdGlvbnMsXG59IGZyb20gJy4vU2lkZWJhci5sYXlvdXQuc3R5bGVzJ1xuXG5jb25zdCBhY3Rpb25zID0ge1xuICBlZGl0OiAocHJvcHM6IGFueSkgPT4gPEVkaXRRdWVzdGlvbk1vZGFsIHsuLi5wcm9wc30gLz4sXG4gIGRlbGV0ZTogKHByb3BzOiBhbnkpID0+IDxEZWxldGVRdWVzdGlvbk1vZGFsIHsuLi5wcm9wc30gLz4sXG59XG5cbi8qKiBBYnJldmlhIFwiZXNwZWNpYWxpc3RhXCIvXCJlc3BlY2lhbGlzdFwiIOKGkiBcIkVzcC5cIiAoRVMvUFQpIHkgXCJzcGVjaWFsaXN0XCIg4oaSIFwiU3BlYy5cIiAoRU4pIGVuIGVsIG5vbWJyZSBkZWwgYWdlbnRlLiAqL1xuZnVuY3Rpb24gYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZShhZ2VudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghYWdlbnROYW1lIHx8IHR5cGVvZiBhZ2VudE5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gYWdlbnROYW1lXG4gIHJldHVybiBhZ2VudE5hbWUucmVwbGFjZSgvXFxiKGVzcGVjaWFsaXN0YXxlc3BlY2lhbGlzdClcXGIvZ2ksICdFc3AuJykucmVwbGFjZSgvXFxic3BlY2lhbGlzdFxcYi9naSwgJ1NwZWMuJylcbn1cblxuY29uc3QgTGlzdEhpc3RvcnlDaGF0ID0gKHtcbiAgY2hhdCxcbiAgb25DbGljayxcbiAgaXNNb2RhbE9wZW4sXG4gIG9uT3Blbk1vZGFsLFxuICBvbkNsb3NlTW9kYWwsXG4gIGhhbmRsZXJzLFxuICBpc1NlbGVjdGVkLFxufToge1xuICBjaGF0OiBhbnlcbiAgb25DbGljazogKGNoYXQ6IGFueSkgPT4gdm9pZFxuICBpc01vZGFsT3BlbjogYm9vbGVhblxuICBvbk9wZW5Nb2RhbDogKGNoYXRJZDogc3RyaW5nKSA9PiB2b2lkXG4gIG9uQ2xvc2VNb2RhbDogKCkgPT4gdm9pZFxuICBoYW5kbGVyczoge1xuICAgIGhhbmRsZURlbGV0ZUNoYXQ6IChjaGF0OiBhbnkpID0+IHZvaWRcbiAgICBoYW5kbGVVcGRhdGVDaGF0OiAoY2hhdDogYW55KSA9PiB2b2lkXG4gIH1cbiAgaXNTZWxlY3RlZDogYm9vbGVhblxufSkgPT4ge1xuICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBhZ2VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgeyBzaG93VG9vbHRpcCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZiwgW2NoYXQudGl0bGVdKVxuICBjb25zdCB7IHNob3dUb29sdGlwOiBzaG93VG9vbHRpcEFnZW50IH0gPSB1c2VSZXNpemVMaXN0ZW5lcihhZ2VudFJlZiwgW2NoYXQuYWdlbnRdKVxuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBbYWN0aW9uLCBzZXRBY3Rpb25dID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBtZW51SXRlbXMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5yZW5hbWUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdlZGl0JylcbiAgICAgICAgb25PcGVuTW9kYWwoY2hhdElkKVxuICAgICAgfSxcbiAgICAgIEljb246IFBlbmNpbCxcbiAgICAgIGV2ZW50S2V5OiBFVkVOVFMucG1BaU1lbnVFZGl0LFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IHQoJ2hpc3RvcnkubWVudS5kZWxldGUnKSxcbiAgICAgIG9uQ2xpY2tJdGVtOiAoY2hhdElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc2V0QWN0aW9uKCdkZWxldGUnKVxuICAgICAgICBvbk9wZW5Nb2RhbChjaGF0SWQpXG4gICAgICB9LFxuICAgICAgSWNvbjogVHJhc2gsXG4gICAgICBldmVudEtleTogRVZFTlRTLnBtQWlNZW51RGVsZXRlLFxuICAgIH0sXG4gIF1cblxuICBjb25zdCBoYW5kbGVDb25maXJtQWN0aW9uID0gKGNoYXREYXRhOiBhbnkpID0+IHtcbiAgICBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZVVwZGF0ZUNoYXQoY2hhdERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXJzLmhhbmRsZURlbGV0ZUNoYXQoY2hhdERhdGEpXG4gICAgfVxuICAgIHNldEFjdGlvbihudWxsKVxuICAgIG9uQ2xvc2VNb2RhbCgpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U0NMSENXcmFwcGVyQ29udGVudFxuICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgb25DbGljayhjaGF0KVxuICAgICAgICB9fVxuICAgICAgICBrZXk9e2Bjb252ZXJzYXRpb24tJHtjaGF0LnNlc3Npb25FeHRlcm5hbElkfWB9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc01vZGFsT3Blbn1cbiAgICAgICAgaXNTZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgID5cbiAgICAgICAgPFNDTEhDV3JhcHBlcj5cbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17c2hvd1Rvb2x0aXAgPyBjaGF0LnRpdGxlIDogJyd9PlxuICAgICAgICAgICAgPFNDTEhDV3JhcHBlclRpdGxlIHJlZj17dGV4dFJlZn0+e2NoYXQudGl0bGUgfHwgdCgnY29udmVyc2F0aW9ucy5lbXB0eUxhYmVsJyl9PC9TQ0xIQ1dyYXBwZXJUaXRsZT5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Nob3dUb29sdGlwQWdlbnQgPyBjaGF0LmFnZW50ICsgKGNoYXQucHJvamVjdE5hbWUgPyBgIC0gJHtjaGF0LnByb2plY3ROYW1lfWAgOiAnJykgOiAnJ30+XG4gICAgICAgICAgICA8U0NMSENXcmFwcGVyQWdlbnQ+XG4gICAgICAgICAgICAgIHtjaGF0LmFnZW50VHlwZSA9PT0gJ2Nsb25lJyA/IChcbiAgICAgICAgICAgICAgICA8TUFJQUljb24gd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcgfX0+e2NoYXQuZW1vaml9PC9zcGFuPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJBZ2VudFRleHQgcmVmPXthZ2VudFJlZn0+XG4gICAgICAgICAgICAgICAge2NoYXQuYWdlbnRUeXBlID09PSAnY2xvbmUnID8gYWJicmV2aWF0ZVNwZWNpYWxpc3RJbkFnZW50TmFtZShjaGF0LmFnZW50KSA6IGNoYXQuYWdlbnR9XG4gICAgICAgICAgICAgICAge2NoYXQucHJvamVjdE5hbWUgJiYgYCAtICR7Y2hhdC5wcm9qZWN0TmFtZX1gfVxuICAgICAgICAgICAgICA8L1NDTEhDV3JhcHBlckFnZW50VGV4dD5cbiAgICAgICAgICAgIDwvU0NMSENXcmFwcGVyQWdlbnQ+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICA8L1NDTEhDV3JhcHBlcj5cbiAgICAgICAgPFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnM+XG4gICAgICAgICAgPENVQnV0dG9uXG4gICAgICAgICAgICBpY29uT25seVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgb25PcGVuTW9kYWwoY2hhdC5pZClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1lbnVEb3RzIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgIHtpc01vZGFsT3BlbiAmJiAhYWN0aW9uICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS1tb2RhbC1jb250YWluZXJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICB0b3A6ICczMnB4JyxcbiAgICAgICAgICAgICAgICByaWdodDogJzE2cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDAsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjI0LCAyMjQsIDIyNCwgMSknLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTI0cHgnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVudUl0ZW1zLm1hcCgoeyBsYWJlbCwgb25DbGlja0l0ZW0sIEljb24sIGV2ZW50S2V5IH0pID0+IChcbiAgICAgICAgICAgICAgICA8T3B0aW9uSXRlbVxuICAgICAgICAgICAgICAgICAga2V5PXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xpY2tJdGVtKGNoYXQuaWQpfVxuICAgICAgICAgICAgICAgICAgSWNvbj17SWNvbn1cbiAgICAgICAgICAgICAgICAgIGV2ZW50S2V5PXtldmVudEtleX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucz5cbiAgICAgIDwvU0NMSENXcmFwcGVyQ29udGVudD5cbiAgICAgIHshIWFjdGlvbiAmJlxuICAgICAgICBhY3Rpb25zW2FjdGlvbl0oe1xuICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgIG9uQ2xvc2VNb2RhbCgpXG4gICAgICAgICAgICBzZXRBY3Rpb24obnVsbClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoYXQsXG4gICAgICAgICAgaGFuZGxlcnM6IHtcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb24sXG4gICAgICAgICAgICBoYW5kbGVTZXRJc09wZW5Nb2RhbDogb25DbG9zZU1vZGFsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pfVxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBTaWRlYmFyID0gKHtcbiAgb25Hb1RvQ2hhdCxcbiAgb25FcnJvciA9ICgpID0+IG51bGwsXG4gIGhhbmRsZUdvVG9Ib21lLFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gIHNob3dOZXdDaGF0LFxuICByZWZldGNoQ2hhdHMsXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyxcbiAgaGFzRXJyb3IsXG4gIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLFxuICBhZ2VudHNOYXZBY3RpdmUgPSBudWxsLFxufToge1xuICBvbkdvVG9DaGF0OiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBoYW5kbGVHb1RvSG9tZTogKCkgPT4gdm9pZFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2U6ICgpID0+IHZvaWRcbiAgc2hvd05ld0NoYXQ6IGJvb2xlYW5cbiAgcmVmZXRjaENoYXRzOiBib29sZWFuXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0czogKHJlZmV0Y2g6IGJvb2xlYW4pID0+IHZvaWRcbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgcmVzZXRTZWxlY3RlZENoYXRSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PCgoKSA9PiB2b2lkKSB8IG51bGw+XG4gIC8qKiBSZXNhbHRhIE1haWFrZXIgbyBNaXMgYWdlbnRlcyAqL1xuICBhZ2VudHNOYXZBY3RpdmU/OiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgbnVsbFxufSkgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUodHJ1ZSlcbiAgY29uc3QgW2lzT3Blbk1vZGFsLCBzZXRJc09wZW5Nb2RhbF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VsZWN0ZWRDaGF0LCBzZXRTZWxlY3RlZENoYXRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2hhdHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBjaGF0c0NvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBldmVudEFtcGxpdHVkZSA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nQ2hhdHMsXG4gICAgY2hhdHMsXG4gICAgZGVsZXRlQ2hhdCxcbiAgICB1cGRhdGVDaGF0LFxuICAgIGZldGNoQ2hhdHMsXG4gICAgbGltaXQsXG4gICAgb2Zmc2V0LFxuICAgIGhhc01vcmVDaGF0cyxcbiAgICBsb2FkTW9yZUNoYXRzLFxuICAgIGlzTG9hZGluZ01vcmVDaGF0cyxcbiAgfSA9IHVzZUNoYXRzKHtcbiAgICBvbkVycm9yLFxuICB9KVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZVxuICBjb25zdCBjYW5WaWV3QWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LnZpZXdcbiAgY29uc3Qgc2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiA9ICEhY2FuQ3JlYXRlQWdlbnRzICYmICEhd2luZG93Lk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUlxuICBjb25zdCBhZ2VudE5hdkJ1dHRvbkNvdW50ID0gKChzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uID8gMSA6IDApICsgKGNhblZpZXdBZ2VudHMgPyAxIDogMCkpIGFzIDAgfCAxIHwgMlxuICBjb25zdCBzaG93QWdlbnRzTmF2QmxvY2sgPSBzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uIHx8IGNhblZpZXdBZ2VudHNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlQ2hhdCA9IChjaGF0OiBhbnkpID0+IHtcbiAgICB1cGRhdGVDaGF0KGNoYXQpXG4gICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Nb2RhbCA9IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCAmJiBpc09wZW5Nb2RhbCAhPT0gY2hhdElkKSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChjaGF0SWQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChpc09wZW5Nb2RhbCAmJiAhKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzT3Blbk1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVUb2dnbGVTaWRlYmFyID0gKCkgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICB9XG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgIGNvbnN0IG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGFnZW50OiBhbnkpID0+IGFnZW50LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQuZW50aXR5ID09PSAnZ2xvYmFsJylcblxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmICFjaGF0c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBmZXRjaENoYXRzKHsgbGltaXQsIG9mZnNldCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZWZldGNoQ2hhdHMpIHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0IH0pXG4gICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHMoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNPcGVuLCByZWZldGNoQ2hhdHMsIGhhbmRsZVNldFJlZmV0Y2hDaGF0c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpZiAoIWNoYXRzQ29udGFpbmVyUmVmLmN1cnJlbnQgfHwgIWhhc01vcmVDaGF0cyB8fCBpc0xvYWRpbmdNb3JlQ2hhdHMgfHwgaGFzRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY2hhdHNDb250YWluZXJSZWYuY3VycmVudFxuICAgICAgY29uc3QgaXNBdEJvdHRvbSA9IHNjcm9sbFRvcCArIGNsaWVudEhlaWdodCA+PSBzY3JvbGxIZWlnaHQgLSAxMFxuXG4gICAgICBpZiAoaXNBdEJvdHRvbSkge1xuICAgICAgICBsb2FkTW9yZUNoYXRzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0c0NvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hhc01vcmVDaGF0cywgaXNMb2FkaW5nTW9yZUNoYXRzLCBsb2FkTW9yZUNoYXRzLCBoYXNFcnJvcl0pXG5cbiAgY29uc3QgaGFuZGxlTmV3Q2hhdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgfVxuICAgIHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIGF3YWl0IGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0OiAwIH0pXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZWZldGNoU2Vzc2lvbiA9ICgpID0+IHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogMjAsIG9mZnNldDogMCB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBzaG93TmV3Q2hhdEJ1dHRvbiA9XG4gICAgIXNob3dOZXdDaGF0ICYmXG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmdDaGF0cyAmJlxuICAgICgodXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcykgfHxcbiAgICAgICghdXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zICYmXG4gICAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcykpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NTU2lkZWJhclJvb3QgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgIDxTQ1NTaWRlYmFyVG9vbGJhciAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgICA8VG9vbHRpcCB0aXRsZT17aXNPcGVuID8gdCgnY29udmVyc2F0aW9ucy5jb2xsYXBzZScpIDogdCgnY29udmVyc2F0aW9ucy5leHBhbmQnKX0+XG4gICAgICAgICAgPFNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24gb25DbGljaz17aGFuZGxlVG9nZ2xlU2lkZWJhcn0gaXNPcGVuPXtpc09wZW59PlxuICAgICAgICAgICAgPENoZXZyb25Eb3VibGVMZWZ0IGNvbG9yPVwicmdiYSgxMDIsIDEwMiwgMTAyLCAxKVwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICA8L1NDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAge3Nob3dOZXdDaGF0QnV0dG9uID8gKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjb252ZXJzYXRpb25zLm5ld0NoYXQnKX0+XG4gICAgICAgICAgICA8U0NTV3JhcHBlck5ld0NoYXRJY29uIG9uQ2xpY2s9e2hhbmRsZU5ld0NoYXR9PlxuICAgICAgICAgICAgICA8TmV3Q2hhdCB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICA8L1NDU1dyYXBwZXJOZXdDaGF0SWNvbj5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ1NTaWRlYmFyVG9vbGJhcj5cbiAgICAgIDxTQ1NTaWRlYmFyQm9keSAkaXNPcGVuPXtpc09wZW59PlxuICAgICAgICB7aXNPcGVuID8gKFxuICAgICAgICAgIDxTQ1NTaWRlYmFyT3BlblBhbmVsPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgICAge3Nob3dBZ2VudHNOYXZCbG9jayA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0Pnt0KCdjb252ZXJzYXRpb25zLmFnZW50c1NlY3Rpb25UaXRsZScpfTwvU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0PlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAge3Nob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdE1wT3BlbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT3BlbkNyZWF0ZUFnZW50KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJ31cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYVN0b3JlSWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm1haWFrZXJOYXYnKX08L1NDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHtjYW5WaWV3QWdlbnRzID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdteUFnZW50cyd9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE15QWdlbnRzTmF2SWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm15QWdlbnRzTmF2Jyl9PC9TQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ29udmVyc2F0aW9uc0hlYWRpbmc+e3QoJ2NvbnZlcnNhdGlvbnMudGl0bGUnKX08L1NDU1NpZGViYXJDb252ZXJzYXRpb25zSGVhZGluZz5cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0Jsb2NrPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJDaGF0c1Njcm9sbFxuICAgICAgICAgICAgICByZWY9e2NoYXRzQ29udGFpbmVyUmVmfVxuICAgICAgICAgICAgICAkaGFzQ2hhdHM9e2NoYXRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICRvZmZzZXRWYXJpYW50PXtoYXNFcnJvciA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgICAgICAgICRhZ2VudE5hdkJ1dHRvbkNvdW50PXthZ2VudE5hdkJ1dHRvbkNvdW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgIWNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvclN0YXRlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlVG9wPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+e3QoJ2NvbnZlcnNhdGlvbnMuZXJyb3InKX08L1NDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICApIDogbG9hZGluZ0NoYXRzID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICkgOiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtjaGF0cy5tYXAoY2hhdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpc3RIaXN0b3J5Q2hhdFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjaGF0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhdD17Y2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2NoYXREYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT3Blbk1vZGFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZENoYXQoY2hhdERhdGEuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uR29Ub0NoYXQoY2hhdERhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNNb2RhbE9wZW49e2lzT3Blbk1vZGFsID09PSBjaGF0LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25PcGVuTW9kYWw9e2hhbmRsZU9wZW5Nb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2VNb2RhbD17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZURlbGV0ZUNoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVVwZGF0ZUNoYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRDaGF0ID09PSBjaGF0LnNlc3Npb25FeHRlcm5hbElkfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAge2lzTG9hZGluZ01vcmVDaGF0cyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZE1vcmVSb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPExvYWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICAgICAgPEVtcHR5SGlzdG9yeUljb24gLz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQ+e3QoJ2NvbnZlcnNhdGlvbnMuZW1wdHknKX08L1NDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFbXB0eUNoYXRzPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQ2hhdHNTY3JvbGw+XG4gICAgICAgICAgICA8U0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXI+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT57dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfTwvU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c0Zvb3Rlcj5cbiAgICAgICAgICA8L1NDU1NpZGViYXJPcGVuUGFuZWw+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8U0NTU2lkZWJhckZvb3RlckFjdGlvbnMgJGlzT3Blbj17aXNPcGVufSAkanVzdGlmeUJldHdlZW49eyEhc2VsZWN0ZWRBZ2VudH0+XG4gICAgICAgICAge3NlbGVjdGVkQWdlbnQgPyA8RmVlZGJhY2tCdXR0b24gc2VsZWN0ZWRBZ2VudD17c2VsZWN0ZWRBZ2VudH0gaXNPcGVuPXtpc09wZW59IC8+IDogbnVsbH1cbiAgICAgICAgICA8T25ib2FyZGluZ01vZGFsQnV0dG9uIC8+XG4gICAgICAgIDwvU0NTU2lkZWJhckZvb3RlckFjdGlvbnM+XG4gICAgICA8L1NDU1NpZGViYXJCb2R5PlxuICAgIDwvU0NTU2lkZWJhclJvb3Q+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBMkJBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNyRSxTQUFTQyxpQkFBaUIsUUFBUSxvREFBb0Q7QUFDdEYsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFTQyxRQUFRLFFBQVEsMkNBQTJDO0FBQ3BFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUU5RCxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBRXRFLFNBQVNDLGdCQUFnQixRQUFRLGdDQUFnQztBQUNqRSxTQUFTQyxpQkFBaUIsUUFBUSwwQkFBMEI7QUFDNUQsU0FBU0MsUUFBUSxRQUFRLHlCQUF5QjtBQUNsRCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLFVBQVUsRUFBRUMsUUFBUSxFQUFFQyxhQUFhLEVBQUVDLGVBQWUsRUFBRUMsT0FBTyxRQUFRLG1CQUFtQjtBQUNqRyxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxVQUFVLFFBQVEsK0JBQStCO0FBQzFELFNBQVNDLGlCQUFpQixRQUFRLG1DQUFtQztBQUNyRSxTQUFTQyxtQkFBbUIsUUFBUSxxQ0FBcUM7QUFDekUsU0FBU0MsU0FBUyxRQUFRLDZCQUE2QjtBQUN2RCxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBQ25ELFNBQVNDLHFCQUFxQixRQUFRLG1DQUFtQztBQUN6RSxTQUFTQyxjQUFjLFFBQVEsNEJBQTRCO0FBQzNELFNBQVNDLGdCQUFnQixRQUFRLGlDQUFpQztBQUNsRSxTQUFTQyxTQUFTLFFBQVEsK0JBQStCO0FBQ3pELFNBQVNDLFVBQVUsUUFBUSxxQkFBcUI7QUFDaEQsU0FDRUMsWUFBWSxFQUNaQyxpQkFBaUIsRUFDakJDLHFCQUFxQixFQUNyQkMseUJBQXlCLEVBQ3pCQyxtQkFBbUIsRUFDbkJDLGlCQUFpQixFQUNqQkMseUJBQXlCLEVBQ3pCQyxxQkFBcUIsUUFDaEIsa0JBQWtCO0FBQ3pCLFNBQ0VDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLG1CQUFtQixFQUNuQkMscUJBQXFCLEVBQ3JCQyx1QkFBdUIsRUFDdkJDLDJCQUEyQixFQUMzQkMsdUJBQXVCLEVBQ3ZCQywwQkFBMEIsRUFDMUJDLHlCQUF5QixFQUN6QkMsOEJBQThCLEVBQzlCQyxxQkFBcUIsRUFDckJDLDBCQUEwQixFQUMxQkMsdUJBQXVCLEVBQ3ZCQyxxQkFBcUIsRUFDckJDLDZCQUE2QixFQUM3QkMsNEJBQTRCLEVBQzVCQyxxQkFBcUIsRUFDckJDLHFCQUFxQixFQUNyQkMsb0JBQW9CLEVBQ3BCQyx3QkFBd0IsRUFDeEJDLHFCQUFxQixFQUNyQkMsdUJBQXVCLFFBQ2xCLHlCQUF5QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBRWhDLElBQU1DLE9BQU8sR0FBRztFQUNkQyxJQUFJLEVBQUUsU0FBTkEsSUFBSUEsQ0FBR0MsS0FBVTtJQUFBLG9CQUFLUCxJQUFBLENBQUN6QyxpQkFBaUIsRUFBQWlELGFBQUEsS0FBS0QsS0FBSyxDQUFHLENBQUM7RUFBQTtFQUN0RCxVQUFRLFNBQVJFLE9BQU1BLENBQUdGLEtBQVU7SUFBQSxvQkFBS1AsSUFBQSxDQUFDeEMsbUJBQW1CLEVBQUFnRCxhQUFBLEtBQUtELEtBQUssQ0FBRyxDQUFDO0VBQUE7QUFDNUQsQ0FBQzs7QUFFRDtBQUNBLFNBQVNHLCtCQUErQkEsQ0FBQ0MsU0FBaUIsRUFBVTtFQUNsRSxJQUFJLENBQUNBLFNBQVMsSUFBSSxPQUFPQSxTQUFTLEtBQUssUUFBUSxFQUFFLE9BQU9BLFNBQVM7RUFDakUsT0FBT0EsU0FBUyxDQUFDQyxPQUFPLENBQUMsa0NBQWtDLEVBQUUsTUFBTSxDQUFDLENBQUNBLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUM7QUFDM0c7QUFFQSxJQUFNQyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQUFDLElBQUEsRUFtQmY7RUFBQSxJQWxCSkMsSUFBSSxHQUFBRCxJQUFBLENBQUpDLElBQUk7SUFDSkMsUUFBTyxHQUFBRixJQUFBLENBQVBFLE9BQU87SUFDUEMsV0FBVyxHQUFBSCxJQUFBLENBQVhHLFdBQVc7SUFDWEMsV0FBVyxHQUFBSixJQUFBLENBQVhJLFdBQVc7SUFDWEMsWUFBWSxHQUFBTCxJQUFBLENBQVpLLFlBQVk7SUFDWkMsUUFBUSxHQUFBTixJQUFBLENBQVJNLFFBQVE7SUFDUkMsVUFBVSxHQUFBUCxJQUFBLENBQVZPLFVBQVU7RUFhVixJQUFNQyxPQUFPLEdBQUdwRixNQUFNLENBQWlCLElBQUksQ0FBQztFQUM1QyxJQUFNcUYsUUFBUSxHQUFHckYsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDN0MsSUFBQXNGLGtCQUFBLEdBQXdCN0UsaUJBQWlCLENBQUMyRSxPQUFPLEVBQUUsQ0FBQ1AsSUFBSSxDQUFDVSxLQUFLLENBQUMsQ0FBQztJQUF4REMsV0FBVyxHQUFBRixrQkFBQSxDQUFYRSxXQUFXO0VBQ25CLElBQUFDLG1CQUFBLEdBQTBDaEYsaUJBQWlCLENBQUM0RSxRQUFRLEVBQUUsQ0FBQ1IsSUFBSSxDQUFDYSxLQUFLLENBQUMsQ0FBQztJQUE5REMsZ0JBQWdCLEdBQUFGLG1CQUFBLENBQTdCRCxXQUFXO0VBQ25CLElBQUFJLEtBQUEsR0FBY3pFLElBQUksQ0FBQyxDQUFDO0lBQVowRSxDQUFDLEdBQUFELEtBQUEsQ0FBREMsQ0FBQztFQUNULElBQUFDLFNBQUEsR0FBNEI3RixRQUFRLENBQWdCLElBQUksQ0FBQztJQUFBOEYsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBbERHLE1BQU0sR0FBQUYsVUFBQTtJQUFFRyxTQUFTLEdBQUFILFVBQUE7RUFFeEIsSUFBTUksU0FBUyxHQUFHLENBQ2hCO0lBQ0VDLEtBQUssRUFBRVAsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQy9CUSxXQUFXLEVBQUUsU0FBYkEsV0FBV0EsQ0FBR0MsTUFBYyxFQUFLO01BQy9CSixTQUFTLENBQUMsTUFBTSxDQUFDO01BQ2pCbEIsV0FBVyxDQUFDc0IsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDREMsSUFBSSxFQUFFbEcsTUFBTTtJQUNabUcsUUFBUSxFQUFFdkYsTUFBTSxDQUFDd0Y7RUFDbkIsQ0FBQyxFQUNEO0lBQ0VMLEtBQUssRUFBRVAsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQy9CUSxXQUFXLEVBQUUsU0FBYkEsV0FBV0EsQ0FBR0MsTUFBYyxFQUFLO01BQy9CSixTQUFTLENBQUMsUUFBUSxDQUFDO01BQ25CbEIsV0FBVyxDQUFDc0IsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDREMsSUFBSSxFQUFFakcsS0FBSztJQUNYa0csUUFBUSxFQUFFdkYsTUFBTSxDQUFDeUY7RUFDbkIsQ0FBQyxDQUNGO0VBRUQsSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSUMsUUFBYSxFQUFLO0lBQzdDLElBQUlYLE1BQU0sS0FBSyxNQUFNLEVBQUU7TUFDckJmLFFBQVEsQ0FBQzJCLGdCQUFnQixDQUFDRCxRQUFRLENBQUM7SUFDckMsQ0FBQyxNQUFNO01BQ0wxQixRQUFRLENBQUM0QixnQkFBZ0IsQ0FBQ0YsUUFBUSxDQUFDO0lBQ3JDO0lBQ0FWLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDZmpCLFlBQVksQ0FBQyxDQUFDO0VBQ2hCLENBQUM7RUFFRCxvQkFDRWpCLEtBQUEsQ0FBQUUsU0FBQTtJQUFBNkMsUUFBQSxnQkFDRS9DLEtBQUEsQ0FBQzlCLG1CQUFtQjtNQUNsQjRDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFa0MsQ0FBQyxFQUFJO1FBQ1pBLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUM7UUFDbkJuQyxRQUFPLENBQUNELElBQUksQ0FBQztNQUNmLENBQUU7TUFFRkUsV0FBVyxFQUFFQSxXQUFZO01BQ3pCSSxVQUFVLEVBQUVBLFVBQVc7TUFBQTRCLFFBQUEsZ0JBRXZCL0MsS0FBQSxDQUFDbEMsWUFBWTtRQUFBaUYsUUFBQSxnQkFDWGpELElBQUEsQ0FBQ3ZELE9BQU87VUFBQ2dGLEtBQUssRUFBRUMsV0FBVyxHQUFHWCxJQUFJLENBQUNVLEtBQUssR0FBRyxFQUFHO1VBQUF3QixRQUFBLGVBQzVDakQsSUFBQSxDQUFDM0IsaUJBQWlCO1lBQUMrRSxHQUFHLEVBQUU5QixPQUFRO1lBQUEyQixRQUFBLEVBQUVsQyxJQUFJLENBQUNVLEtBQUssSUFBSU0sQ0FBQyxDQUFDLDBCQUEwQjtVQUFDLENBQW9CO1FBQUMsQ0FDM0YsQ0FBQyxlQUNWL0IsSUFBQSxDQUFDdkQsT0FBTztVQUFDZ0YsS0FBSyxFQUFFSSxnQkFBZ0IsR0FBR2QsSUFBSSxDQUFDYSxLQUFLLElBQUliLElBQUksQ0FBQ3NDLFdBQVcsU0FBQUMsTUFBQSxDQUFTdkMsSUFBSSxDQUFDc0MsV0FBVyxJQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUc7VUFBQUosUUFBQSxlQUN0Ry9DLEtBQUEsQ0FBQ2pDLGlCQUFpQjtZQUFBZ0YsUUFBQSxHQUNmbEMsSUFBSSxDQUFDd0MsU0FBUyxLQUFLLE9BQU8sZ0JBQ3pCdkQsSUFBQSxDQUFDakQsUUFBUTtjQUFDeUcsS0FBSyxFQUFFLEVBQUc7Y0FBQ0MsTUFBTSxFQUFFO1lBQUcsQ0FBRSxDQUFDLGdCQUVuQ3pELElBQUE7Y0FBTTBELEtBQUssRUFBRTtnQkFBRUMsUUFBUSxFQUFFO2NBQU8sQ0FBRTtjQUFBVixRQUFBLEVBQUVsQyxJQUFJLENBQUM2QztZQUFLLENBQU8sQ0FDdEQsZUFFRDFELEtBQUEsQ0FBQ2hDLHFCQUFxQjtjQUFDa0YsR0FBRyxFQUFFN0IsUUFBUztjQUFBMEIsUUFBQSxHQUNsQ2xDLElBQUksQ0FBQ3dDLFNBQVMsS0FBSyxPQUFPLEdBQUc3QywrQkFBK0IsQ0FBQ0ssSUFBSSxDQUFDYSxLQUFLLENBQUMsR0FBR2IsSUFBSSxDQUFDYSxLQUFLLEVBQ3JGYixJQUFJLENBQUNzQyxXQUFXLFVBQUFDLE1BQUEsQ0FBVXZDLElBQUksQ0FBQ3NDLFdBQVcsQ0FBRTtZQUFBLENBQ3hCLENBQUM7VUFBQSxDQUNQO1FBQUMsQ0FDYixDQUFDO01BQUEsQ0FDRSxDQUFDLGVBQ2ZuRCxLQUFBLENBQUMvQix5QkFBeUI7UUFBQThFLFFBQUEsZ0JBQ3hCakQsSUFBQSxDQUFDM0QsUUFBUTtVQUNQd0gsUUFBUTtVQUNSQyxJQUFJLEVBQUMsT0FBTztVQUNaQyxPQUFPLEVBQUMsTUFBTTtVQUNkL0MsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUVnRCxLQUFLLEVBQUk7WUFDaEJBLEtBQUssQ0FBQ2IsZUFBZSxDQUFDLENBQUM7WUFDdkJqQyxXQUFXLENBQUNILElBQUksQ0FBQ2tELEVBQUUsQ0FBQztVQUN0QixDQUFFO1VBQUFoQixRQUFBLGVBRUZqRCxJQUFBLENBQUMxRCxRQUFRO1lBQUNrSCxLQUFLLEVBQUUsRUFBRztZQUFDQyxNQUFNLEVBQUU7VUFBRyxDQUFFO1FBQUMsQ0FDM0IsQ0FBQyxFQUNWeEMsV0FBVyxJQUFJLENBQUNrQixNQUFNLGlCQUNyQm5DLElBQUE7VUFDRSw0QkFBb0I7VUFDcEIwRCxLQUFLLEVBQUU7WUFDTFEsUUFBUSxFQUFFLFVBQVU7WUFDcEJDLEdBQUcsRUFBRSxNQUFNO1lBQ1hDLEtBQUssRUFBRSxNQUFNO1lBQ2JDLGVBQWUsRUFBRSxPQUFPO1lBQ3hCQyxNQUFNLEVBQUUsSUFBSTtZQUNaQyxPQUFPLEVBQUUsTUFBTTtZQUNmQyxhQUFhLEVBQUUsUUFBUTtZQUN2QkMsWUFBWSxFQUFFLEtBQUs7WUFDbkJDLE1BQU0sRUFBRSxrQ0FBa0M7WUFDMUNDLFFBQVEsRUFBRTtVQUNaLENBQUU7VUFBQTFCLFFBQUEsRUFFRFosU0FBUyxDQUFDdUMsR0FBRyxDQUFDLFVBQUFDLEtBQUE7WUFBQSxJQUFHdkMsS0FBSyxHQUFBdUMsS0FBQSxDQUFMdkMsS0FBSztjQUFFQyxXQUFXLEdBQUFzQyxLQUFBLENBQVh0QyxXQUFXO2NBQUVFLElBQUksR0FBQW9DLEtBQUEsQ0FBSnBDLElBQUk7Y0FBRUMsUUFBUSxHQUFBbUMsS0FBQSxDQUFSbkMsUUFBUTtZQUFBLG9CQUNsRDFDLElBQUEsQ0FBQzFDLFVBQVU7Y0FFVGdGLEtBQUssRUFBRUEsS0FBTTtjQUNidEIsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7Z0JBQUEsT0FBUXVCLFdBQVcsQ0FBQ3hCLElBQUksQ0FBQ2tELEVBQUUsQ0FBQztjQUFBLENBQUM7Y0FDcEN4QixJQUFJLEVBQUVBLElBQUs7Y0FDWEMsUUFBUSxFQUFFQTtZQUFTLEdBSmRKLEtBS04sQ0FBQztVQUFBLENBQ0g7UUFBQyxDQUNDLENBQ047TUFBQSxDQUN3QixDQUFDO0lBQUEsbUJBQUFnQixNQUFBLENBOURQdkMsSUFBSSxDQUFDK0QsaUJBQWlCLENBK0R4QixDQUFDLEVBQ3JCLENBQUMsQ0FBQzNDLE1BQU0sSUFDUDlCLE9BQU8sQ0FBQzhCLE1BQU0sQ0FBQyxDQUFDO01BQ2Q0QyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1FBQ2I1RCxZQUFZLENBQUMsQ0FBQztRQUNkaUIsU0FBUyxDQUFDLElBQUksQ0FBQztNQUNqQixDQUFDO01BQ0RyQixJQUFJLEVBQUpBLElBQUk7TUFDSkssUUFBUSxFQUFFO1FBQ1J5QixtQkFBbUIsRUFBbkJBLG1CQUFtQjtRQUNuQm1DLG9CQUFvQixFQUFFN0Q7TUFDeEI7SUFDRixDQUFDLENBQUM7RUFBQSxDQUNKLENBQUM7QUFFUCxDQUFDO0FBRUQsT0FBTyxJQUFNOEQsT0FBTyxHQUFHLFNBQVZBLE9BQU9BLENBQUFDLEtBQUEsRUF1QmQ7RUFBQSxJQUFBQyxpQkFBQTtFQUFBLElBdEJKQyxVQUFVLEdBQUFGLEtBQUEsQ0FBVkUsVUFBVTtJQUFBQyxhQUFBLEdBQUFILEtBQUEsQ0FDVkksT0FBTztJQUFQQSxPQUFPLEdBQUFELGFBQUEsY0FBRztNQUFBLE9BQU0sSUFBSTtJQUFBLElBQUFBLGFBQUE7SUFDcEJFLGNBQWMsR0FBQUwsS0FBQSxDQUFkSyxjQUFjO0lBQ2RDLHFCQUFxQixHQUFBTixLQUFBLENBQXJCTSxxQkFBcUI7SUFDckJDLFdBQVcsR0FBQVAsS0FBQSxDQUFYTyxXQUFXO0lBQ1hDLFlBQVksR0FBQVIsS0FBQSxDQUFaUSxZQUFZO0lBQ1pDLHFCQUFxQixHQUFBVCxLQUFBLENBQXJCUyxxQkFBcUI7SUFDckJDLFFBQVEsR0FBQVYsS0FBQSxDQUFSVSxRQUFRO0lBQ1JDLG9CQUFvQixHQUFBWCxLQUFBLENBQXBCVyxvQkFBb0I7SUFBQUMscUJBQUEsR0FBQVosS0FBQSxDQUNwQmEsZUFBZTtJQUFmQSxlQUFlLEdBQUFELHFCQUFBLGNBQUcsSUFBSSxHQUFBQSxxQkFBQTtFQWN0QixJQUFBRSxNQUFBLEdBQW9CM0ksSUFBSSxDQUFDLENBQUM7SUFBbEIwRSxDQUFDLEdBQUFpRSxNQUFBLENBQURqRSxDQUFDO0lBQUVrRSxJQUFJLEdBQUFELE1BQUEsQ0FBSkMsSUFBSTtFQUNmLElBQUFDLFVBQUEsR0FBNEIvSixRQUFRLENBQUMsSUFBSSxDQUFDO0lBQUFnSyxVQUFBLEdBQUFqRSxjQUFBLENBQUFnRSxVQUFBO0lBQW5DRSxNQUFNLEdBQUFELFVBQUE7SUFBRUUsU0FBUyxHQUFBRixVQUFBO0VBQ3hCLElBQUFHLFVBQUEsR0FBc0NuSyxRQUFRLENBQWdCLElBQUksQ0FBQztJQUFBb0ssVUFBQSxHQUFBckUsY0FBQSxDQUFBb0UsVUFBQTtJQUE1REUsV0FBVyxHQUFBRCxVQUFBO0lBQUVFLGNBQWMsR0FBQUYsVUFBQTtFQUNsQyxJQUFBRyxVQUFBLEdBQXdDdkssUUFBUSxDQUFnQixJQUFJLENBQUM7SUFBQXdLLFVBQUEsR0FBQXpFLGNBQUEsQ0FBQXdFLFVBQUE7SUFBOURFLFlBQVksR0FBQUQsVUFBQTtJQUFFRSxlQUFlLEdBQUFGLFVBQUE7RUFDcEMsSUFBTUcsZUFBZSxHQUFHNUssTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFNNkssaUJBQWlCLEdBQUc3SyxNQUFNLENBQWlCLElBQUksQ0FBQztFQUN0RCxJQUFNOEssSUFBSSxHQUFHdEosT0FBTyxDQUFDLENBQUM7RUFDdEIsSUFBTXVKLGNBQWMsR0FBRzdKLFFBQVEsQ0FBQyxDQUFDO0VBQ2pDLElBQUE4SixpQkFBQSxHQUFxRXJKLGdCQUFnQixDQUFDLENBQUM7SUFBeEVzSixhQUFhLEdBQUFELGlCQUFBLENBQXBCdEYsS0FBSztJQUFpQndGLFdBQVcsR0FBQUYsaUJBQUEsQ0FBWEUsV0FBVztJQUFFQyxVQUFVLEdBQUFILGlCQUFBLENBQVZHLFVBQVU7SUFBRUMsU0FBUyxHQUFBSixpQkFBQSxDQUFUSSxTQUFTO0VBQ2hFLElBQUFDLFNBQUEsR0FXSTNLLFFBQVEsQ0FBQztNQUNYMEksT0FBTyxFQUFQQTtJQUNGLENBQUMsQ0FBQztJQVpBa0MsWUFBWSxHQUFBRCxTQUFBLENBQVpDLFlBQVk7SUFDWkMsS0FBSyxHQUFBRixTQUFBLENBQUxFLEtBQUs7SUFDTEMsVUFBVSxHQUFBSCxTQUFBLENBQVZHLFVBQVU7SUFDVkMsVUFBVSxHQUFBSixTQUFBLENBQVZJLFVBQVU7SUFDVkMsVUFBVSxHQUFBTCxTQUFBLENBQVZLLFVBQVU7SUFDVkMsS0FBSyxHQUFBTixTQUFBLENBQUxNLEtBQUs7SUFDTEMsTUFBTSxHQUFBUCxTQUFBLENBQU5PLE1BQU07SUFDTkMsWUFBWSxHQUFBUixTQUFBLENBQVpRLFlBQVk7SUFDWkMsYUFBYSxHQUFBVCxTQUFBLENBQWJTLGFBQWE7SUFDYkMsa0JBQWtCLEdBQUFWLFNBQUEsQ0FBbEJVLGtCQUFrQjtFQUtwQixJQUFNQyxlQUFlLEdBQUdsQixJQUFJLGFBQUpBLElBQUksZ0JBQUE3QixpQkFBQSxHQUFKNkIsSUFBSSxDQUFFbUIsV0FBVyxjQUFBaEQsaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQmlELFNBQVM7RUFDcEQsSUFBTUMsZUFBZSxHQUFHLENBQUMsRUFBQ0gsZUFBZSxhQUFmQSxlQUFlLGVBQWZBLGVBQWUsQ0FBRUksTUFBTTtFQUNqRCxJQUFNQyxhQUFhLEdBQUcsQ0FBQyxFQUFDTCxlQUFlLGFBQWZBLGVBQWUsZUFBZkEsZUFBZSxDQUFFTSxJQUFJO0VBQzdDLElBQU1DLDRCQUE0QixHQUFHLENBQUMsQ0FBQ0osZUFBZSxJQUFJLENBQUMsQ0FBQ0ssTUFBTSxDQUFDQyx3QkFBd0I7RUFDM0YsSUFBTUMsbUJBQW1CLEdBQUksQ0FBQ0gsNEJBQTRCLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBS0YsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQWU7RUFDM0csSUFBTU0sa0JBQWtCLEdBQUdKLDRCQUE0QixJQUFJRixhQUFhO0VBRXhFdE0sU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJNEosb0JBQW9CLEVBQUU7TUFDeEJBLG9CQUFvQixDQUFDaUQsT0FBTyxHQUFHO1FBQUEsT0FBTWpDLGVBQWUsQ0FBQyxJQUFJLENBQUM7TUFBQTtJQUM1RDtJQUNBLE9BQU8sWUFBTTtNQUNYLElBQUloQixvQkFBb0IsRUFBRTtRQUN4QkEsb0JBQW9CLENBQUNpRCxPQUFPLEdBQUcsSUFBSTtNQUNyQztJQUNGLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQ2pELG9CQUFvQixDQUFDLENBQUM7RUFFMUIsSUFBTTdDLGdCQUFnQjtJQUFBLElBQUErRixLQUFBLEdBQUFDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBQyxRQUFPcEksSUFBUztNQUFBLE9BQUFrSSxtQkFBQSxDQUFBRyxJQUFBLFdBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBQ3ZDN0IsVUFBVSxDQUFDM0csSUFBSSxDQUFDK0QsaUJBQWlCLENBQUM7WUFDbEMyQixjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3BCbEIsY0FBYyxDQUFDLENBQUM7VUFBQTtVQUFBO1lBQUEsT0FBQThELFFBQUEsQ0FBQUcsSUFBQTtRQUFBO01BQUEsR0FBQUwsT0FBQTtJQUFBLENBQ2pCO0lBQUEsZ0JBSktuRyxnQkFBZ0JBLENBQUF5RyxFQUFBO01BQUEsT0FBQVYsS0FBQSxDQUFBVyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEdBSXJCO0VBRUQsSUFBTTVHLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUloQyxJQUFTLEVBQUs7SUFDdEM0RyxVQUFVLENBQUM1RyxJQUFJLENBQUM7SUFDaEIwRixjQUFjLENBQUMsSUFBSSxDQUFDO0VBQ3RCLENBQUM7RUFFRCxJQUFNbUQsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJcEgsTUFBYyxFQUFLO0lBQzFDLElBQUlnRSxXQUFXLElBQUlBLFdBQVcsS0FBS2hFLE1BQU0sRUFBRTtNQUN6Q2lFLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDdEIsQ0FBQyxNQUFNO01BQ0xBLGNBQWMsQ0FBQ2pFLE1BQU0sQ0FBQztJQUN4QjtFQUNGLENBQUM7RUFFRCxJQUFNcUgsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBQSxFQUFTO0lBQzdCcEQsY0FBYyxDQUFDLElBQUksQ0FBQztFQUN0QixDQUFDO0VBRUR4SyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU02TixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJOUYsS0FBaUIsRUFBSztNQUNoRCxJQUFJd0MsV0FBVyxJQUFJLENBQUV4QyxLQUFLLENBQUMrRixNQUFNLENBQWFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1FBQy9FdkQsY0FBYyxDQUFDLElBQUksQ0FBQztNQUN0QjtJQUNGLENBQUM7SUFFRCxJQUFJRCxXQUFXLEVBQUU7TUFDZnlELFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsV0FBVyxFQUFFSixrQkFBa0IsQ0FBQztJQUM1RDtJQUVBLE9BQU8sWUFBTTtNQUNYRyxRQUFRLENBQUNFLG1CQUFtQixDQUFDLFdBQVcsRUFBRUwsa0JBQWtCLENBQUM7SUFDL0QsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDdEQsV0FBVyxDQUFDLENBQUM7RUFFakIsSUFBTTRELG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUEsRUFBUztJQUNoQyxJQUFJNUQsV0FBVyxFQUFFO01BQ2ZDLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDdEI7SUFDQUosU0FBUyxDQUFDLFVBQUFpRCxJQUFJO01BQUEsT0FBSSxDQUFDQSxJQUFJO0lBQUEsRUFBQztFQUMxQixDQUFDO0VBRUQsSUFBTWUscUJBQXFCO0lBQUEsSUFBQUMsS0FBQSxHQUFBdEIsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUFxQixTQUFBO01BQUEsSUFBQUMsUUFBQSxFQUFBQyxJQUFBLEVBQUFDLFlBQUE7TUFBQSxPQUFBekIsbUJBQUEsQ0FBQUcsSUFBQSxXQUFBdUIsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFyQixJQUFBLEdBQUFxQixTQUFBLENBQUFwQixJQUFBO1VBQUE7WUFBQW9CLFNBQUEsQ0FBQXBCLElBQUE7WUFBQSxPQUNMekwsU0FBUyxDQUFDO2NBQy9COE0sSUFBSSxrQ0FBQXRILE1BQUEsQ0FBa0N2RixVQUFVLENBQUNrSSxJQUFJLENBQUM0RSxRQUFRLENBQUMsQ0FBRTtjQUNqRUMsTUFBTSxFQUFFO1lBQ1YsQ0FBQyxDQUFDO1VBQUE7WUFISU4sUUFBUSxHQUFBRyxTQUFBLENBQUFJLElBQUE7WUFBQUosU0FBQSxDQUFBcEIsSUFBQTtZQUFBLE9BSUtpQixRQUFRLENBQUNRLElBQUksQ0FBQyxDQUFDO1VBQUE7WUFBNUJQLElBQUksR0FBQUUsU0FBQSxDQUFBSSxJQUFBO1lBQ0pMLFlBQVksR0FBRyxDQUFDRCxJQUFJLENBQUNBLElBQUksSUFBSSxFQUFFLEVBQUVRLElBQUksQ0FBQyxVQUFDckosS0FBVTtjQUFBLE9BQUtBLEtBQUssQ0FBQ3NKLElBQUksS0FBSyxPQUFPLElBQUl0SixLQUFLLENBQUN1SixNQUFNLEtBQUssUUFBUTtZQUFBLEVBQUM7WUFBQSxJQUUzR1QsWUFBWTtjQUFBQyxTQUFBLENBQUFwQixJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUFvQixTQUFBLENBQUFTLE1BQUE7VUFBQTtZQUlqQi9ELFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDaEJDLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO1lBQ2pCRixXQUFXLENBQUNzRCxZQUFZLENBQUM7WUFDekJuRixjQUFjLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBb0YsU0FBQSxDQUFBbkIsSUFBQTtRQUFBO01BQUEsR0FBQWUsUUFBQTtJQUFBLENBQ2pCO0lBQUEsZ0JBaEJLRixxQkFBcUJBLENBQUE7TUFBQSxPQUFBQyxLQUFBLENBQUFaLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsR0FnQjFCO0VBRUQxTixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUltSyxNQUFNLElBQUksQ0FBQ1UsZUFBZSxDQUFDZ0MsT0FBTyxFQUFFO01BQ3RDaEMsZUFBZSxDQUFDZ0MsT0FBTyxHQUFHLElBQUk7TUFDOUJsQixVQUFVLENBQUM7UUFBRUMsS0FBSyxFQUFMQSxLQUFLO1FBQUVDLE1BQU0sRUFBTkE7TUFBTyxDQUFDLENBQUM7TUFDN0I7SUFDRjtJQUNBLElBQUlwQyxZQUFZLEVBQUU7TUFDaEJrQyxVQUFVLENBQUM7UUFBRUMsS0FBSyxFQUFMQSxLQUFLO1FBQUVDLE1BQU0sRUFBTkE7TUFBTyxDQUFDLENBQUM7TUFDN0JuQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7SUFDOUI7RUFDRixDQUFDLEVBQUUsQ0FBQ1MsTUFBTSxFQUFFVixZQUFZLEVBQUVDLHFCQUFxQixDQUFDLENBQUM7RUFFakQxSixTQUFTLENBQUMsWUFBTTtJQUNkLElBQU1vUCxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBQSxFQUFTO01BQ3pCLElBQUksQ0FBQ3RFLGlCQUFpQixDQUFDK0IsT0FBTyxJQUFJLENBQUNmLFlBQVksSUFBSUUsa0JBQWtCLElBQUlyQyxRQUFRLEVBQUU7UUFDakY7TUFDRjtNQUVBLElBQUEwRixxQkFBQSxHQUFrRHZFLGlCQUFpQixDQUFDK0IsT0FBTztRQUFuRXlDLFNBQVMsR0FBQUQscUJBQUEsQ0FBVEMsU0FBUztRQUFFQyxZQUFZLEdBQUFGLHFCQUFBLENBQVpFLFlBQVk7UUFBRUMsWUFBWSxHQUFBSCxxQkFBQSxDQUFaRyxZQUFZO01BQzdDLElBQU1DLFVBQVUsR0FBR0gsU0FBUyxHQUFHRSxZQUFZLElBQUlELFlBQVksR0FBRyxFQUFFO01BRWhFLElBQUlFLFVBQVUsRUFBRTtRQUNkMUQsYUFBYSxDQUFDLENBQUM7TUFDakI7SUFDRixDQUFDO0lBRUQsSUFBTTJELFNBQVMsR0FBRzVFLGlCQUFpQixDQUFDK0IsT0FBTztJQUMzQyxJQUFJNkMsU0FBUyxFQUFFO01BQ2JBLFNBQVMsQ0FBQ3pCLGdCQUFnQixDQUFDLFFBQVEsRUFBRW1CLFlBQVksQ0FBQztJQUNwRDtJQUVBLE9BQU8sWUFBTTtNQUNYLElBQUlNLFNBQVMsRUFBRTtRQUNiQSxTQUFTLENBQUN4QixtQkFBbUIsQ0FBQyxRQUFRLEVBQUVrQixZQUFZLENBQUM7TUFDdkQ7SUFDRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUN0RCxZQUFZLEVBQUVFLGtCQUFrQixFQUFFRCxhQUFhLEVBQUVwQyxRQUFRLENBQUMsQ0FBQztFQUUvRCxJQUFNZ0csYUFBYTtJQUFBLElBQUFDLEtBQUEsR0FBQTdDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBNEMsU0FBQTtNQUFBLE9BQUE3QyxtQkFBQSxDQUFBRyxJQUFBLFdBQUEyQyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQXpDLElBQUEsR0FBQXlDLFNBQUEsQ0FBQXhDLElBQUE7VUFBQTtZQUNwQixJQUFJL0MsV0FBVyxFQUFFO2NBQ2ZDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDdEI7WUFDQUksZUFBZSxDQUFDLElBQUksQ0FBQztZQUFBa0YsU0FBQSxDQUFBeEMsSUFBQTtZQUFBLE9BQ2YzQixVQUFVLENBQUM7Y0FBRUMsS0FBSyxFQUFMQSxLQUFLO2NBQUVDLE1BQU0sRUFBRTtZQUFFLENBQUMsQ0FBQztVQUFBO1lBQ3RDdkMsY0FBYyxDQUFDLENBQUM7VUFBQTtVQUFBO1lBQUEsT0FBQXdHLFNBQUEsQ0FBQXZDLElBQUE7UUFBQTtNQUFBLEdBQUFzQyxRQUFBO0lBQUEsQ0FDakI7SUFBQSxnQkFQS0YsYUFBYUEsQ0FBQTtNQUFBLE9BQUFDLEtBQUEsQ0FBQW5DLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsR0FPbEI7RUFFRDFOLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTStQLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUEsRUFBUztNQUNqQ3BFLFVBQVUsQ0FBQztRQUFFQyxLQUFLLEVBQUUsRUFBRTtRQUFFQyxNQUFNLEVBQUU7TUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNEbUMsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRThCLG9CQUFvQixDQUFDO0lBQ2xFLE9BQU8sWUFBTTtNQUNYL0IsUUFBUSxDQUFDRSxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRTZCLG9CQUFvQixDQUFDO0lBQ3ZFLENBQUM7RUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTUMsaUJBQWlCLEdBQ3JCLENBQUN4RyxXQUFXLElBQ1osQ0FBQ0csUUFBUSxJQUNULENBQUM0QixZQUFZLEtBQ1gsQ0FBQVUsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUVNLElBQUksS0FDckIsRUFBQ3JCLGFBQWEsYUFBYkEsYUFBYSxlQUFiQSxhQUFhLENBQUUrRSxVQUFVLEtBQzFCLEVBQUMvRSxhQUFhLGFBQWJBLGFBQWEsZUFBYkEsYUFBYSxDQUFFZ0YsbUJBQW1CLEtBQ25DLEVBQUNoRixhQUFhLGFBQWJBLGFBQWEsZUFBYkEsYUFBYSxDQUFFaUYsY0FBYyxLQUM3QixFQUFDbEUsZUFBZSxhQUFmQSxlQUFlLGVBQWZBLGVBQWUsQ0FBRU0sSUFBSSxLQUNyQixFQUFDckIsYUFBYSxhQUFiQSxhQUFhLGVBQWJBLGFBQWEsQ0FBRStFLFVBQVUsS0FDMUIsRUFBQy9FLGFBQWEsYUFBYkEsYUFBYSxlQUFiQSxhQUFhLENBQUVnRixtQkFBbUIsS0FDbkMsRUFBQ2hGLGFBQWEsYUFBYkEsYUFBYSxlQUFiQSxhQUFhLENBQUVpRixjQUFjLENBQUMsQ0FBQztFQUV0QyxvQkFDRWxNLEtBQUEsQ0FBQzFCLGNBQWM7SUFBQzZOLE9BQU8sRUFBRWpHLE1BQU87SUFBQW5ELFFBQUEsZ0JBQzlCL0MsS0FBQSxDQUFDekIsaUJBQWlCO01BQUM0TixPQUFPLEVBQUVqRyxNQUFPO01BQUFuRCxRQUFBLGdCQUNqQ2pELElBQUEsQ0FBQ3ZELE9BQU87UUFBQ2dGLEtBQUssRUFBRTJFLE1BQU0sR0FBR3JFLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHQSxDQUFDLENBQUMsc0JBQXNCLENBQUU7UUFBQWtCLFFBQUEsZUFDL0VqRCxJQUFBLENBQUMxQix5QkFBeUI7VUFBQzBDLE9BQU8sRUFBRW9KLG1CQUFvQjtVQUFDaEUsTUFBTSxFQUFFQSxNQUFPO1VBQUFuRCxRQUFBLGVBQ3RFakQsSUFBQSxDQUFDNUQsaUJBQWlCO1lBQUNrUSxLQUFLLEVBQUMsd0JBQXdCO1lBQUM5SSxLQUFLLEVBQUUsRUFBRztZQUFDQyxNQUFNLEVBQUU7VUFBRyxDQUFFO1FBQUMsQ0FDbEQ7TUFBQyxDQUNyQixDQUFDLEVBQ1R3SSxpQkFBaUIsZ0JBQ2hCak0sSUFBQSxDQUFDdkQsT0FBTztRQUFDZ0YsS0FBSyxFQUFFTSxDQUFDLENBQUMsdUJBQXVCLENBQUU7UUFBQWtCLFFBQUEsZUFDekNqRCxJQUFBLENBQUN6QixxQkFBcUI7VUFBQ3lDLE9BQU8sRUFBRTRLLGFBQWM7VUFBQTNJLFFBQUEsZUFDNUNqRCxJQUFBLENBQUM5QyxPQUFPO1lBQUNzRyxLQUFLLEVBQUUsRUFBRztZQUFDQyxNQUFNLEVBQUU7VUFBRyxDQUFFO1FBQUMsQ0FDYjtNQUFDLENBQ2pCLENBQUMsR0FDUixJQUFJO0lBQUEsQ0FDUyxDQUFDLGVBQ3BCdkQsS0FBQSxDQUFDeEIsY0FBYztNQUFDMk4sT0FBTyxFQUFFakcsTUFBTztNQUFBbkQsUUFBQSxHQUM3Qm1ELE1BQU0sZ0JBQ0xsRyxLQUFBLENBQUN2QixtQkFBbUI7UUFBQXNFLFFBQUEsZ0JBQ2xCL0MsS0FBQSxDQUFDdEIscUJBQXFCO1VBQUFxRSxRQUFBLEdBQ25CNEYsa0JBQWtCLGdCQUNqQjNJLEtBQUEsQ0FBQUUsU0FBQTtZQUFBNkMsUUFBQSxnQkFDRWpELElBQUEsQ0FBQ25CLHVCQUF1QjtjQUFBb0UsUUFBQSxlQUN0QmpELElBQUEsQ0FBQ2xCLDJCQUEyQjtnQkFBQW1FLFFBQUEsRUFBRWxCLENBQUMsQ0FBQyxrQ0FBa0M7Y0FBQyxDQUE4QjtZQUFDLENBQzNFLENBQUMsZUFDMUI3QixLQUFBLENBQUNuQix1QkFBdUI7Y0FBQWtFLFFBQUEsR0FDckJ3Riw0QkFBNEIsZ0JBQzNCdkksS0FBQSxDQUFDbEIsMEJBQTBCO2dCQUN6QmtNLElBQUksRUFBQyxRQUFRO2dCQUNibEssT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtrQkFDYmlHLGNBQWMsQ0FBQzlKLE1BQU0sQ0FBQ29QLFlBQVksQ0FBQztrQkFDbkNsQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN6QixDQUFFO2dCQUNGbUMsT0FBTyxFQUFFekcsZUFBZSxLQUFLLFNBQVU7Z0JBQUE5QyxRQUFBLGdCQUV2Q2pELElBQUEsQ0FBQ2hELGFBQWE7a0JBQUM4RyxJQUFJLEVBQUU7Z0JBQUcsQ0FBRSxDQUFDLGVBQzNCOUQsSUFBQSxDQUFDZix5QkFBeUI7a0JBQUFnRSxRQUFBLEVBQUVsQixDQUFDLENBQUMsMEJBQTBCO2dCQUFDLENBQTRCLENBQUM7Y0FBQSxDQUM1RCxDQUFDLEdBQzNCLElBQUksRUFDUHdHLGFBQWEsZ0JBQ1pySSxLQUFBLENBQUNsQiwwQkFBMEI7Z0JBQ3pCa00sSUFBSSxFQUFDLFFBQVE7Z0JBQ2JsSyxPQUFPLEVBQUV3RSxxQkFBc0I7Z0JBQy9CZ0gsT0FBTyxFQUFFekcsZUFBZSxLQUFLLFVBQVc7Z0JBQUE5QyxRQUFBLGdCQUV4Q2pELElBQUEsQ0FBQy9DLGVBQWU7a0JBQUM2RyxJQUFJLEVBQUU7Z0JBQUcsQ0FBRSxDQUFDLGVBQzdCOUQsSUFBQSxDQUFDZix5QkFBeUI7a0JBQUFnRSxRQUFBLEVBQUVsQixDQUFDLENBQUMsMkJBQTJCO2dCQUFDLENBQTRCLENBQUM7Y0FBQSxDQUM3RCxDQUFDLEdBQzNCLElBQUk7WUFBQSxDQUNlLENBQUM7VUFBQSxDQUMxQixDQUFDLEdBQ0QsSUFBSSxlQUNSL0IsSUFBQSxDQUFDZCw4QkFBOEI7WUFBQStELFFBQUEsRUFBRWxCLENBQUMsQ0FBQyxxQkFBcUI7VUFBQyxDQUFpQyxDQUFDO1FBQUEsQ0FDdEUsQ0FBQyxlQUN4Qi9CLElBQUEsQ0FBQ2IscUJBQXFCO1VBQ3BCaUUsR0FBRyxFQUFFMkQsaUJBQWtCO1VBQ3ZCMEYsU0FBUyxFQUFFaEYsS0FBSyxDQUFDaUYsTUFBTSxHQUFHLENBQUU7VUFDNUJDLGNBQWMsRUFBRS9HLFFBQVEsR0FBRyxPQUFPLEdBQUcsU0FBVTtVQUMvQ2dILG9CQUFvQixFQUFFaEUsbUJBQW9CO1VBQUEzRixRQUFBLEVBRXpDMkMsUUFBUSxJQUFJLENBQUM2QixLQUFLLENBQUNpRixNQUFNLGdCQUN4QnhNLEtBQUEsQ0FBQ2QsMEJBQTBCO1lBQUE2RCxRQUFBLGdCQUN6QmpELElBQUEsQ0FBQ1gsdUJBQXVCO2NBQUE0RCxRQUFBLGVBQ3RCakQsSUFBQSxDQUFDbEQsVUFBVSxJQUFFO1lBQUMsQ0FDUyxDQUFDLGVBQzFCb0QsS0FBQSxDQUFDWixxQkFBcUI7Y0FBQTJELFFBQUEsZ0JBQ3BCakQsSUFBQSxDQUFDVCw2QkFBNkI7Z0JBQUEwRCxRQUFBLGVBQzVCakQsSUFBQSxDQUFDdkMsU0FBUyxJQUFFO2NBQUMsQ0FDZ0IsQ0FBQyxlQUNoQ3VDLElBQUEsQ0FBQ1IsNEJBQTRCO2dCQUFBeUQsUUFBQSxFQUFFbEIsQ0FBQyxDQUFDLHFCQUFxQjtjQUFDLENBQStCLENBQUM7WUFBQSxDQUNsRSxDQUFDO1VBQUEsQ0FDRSxDQUFDLEdBQzNCeUYsWUFBWSxnQkFDZHhILElBQUEsQ0FBQ1AscUJBQXFCO1lBQUF3RCxRQUFBLGVBQ3BCakQsSUFBQSxDQUFDbkQsTUFBTSxJQUFFO1VBQUMsQ0FDVyxDQUFDLEdBQ3RCNEssS0FBSyxDQUFDaUYsTUFBTSxnQkFDZHhNLEtBQUEsQ0FBQUUsU0FBQTtZQUFBNkMsUUFBQSxHQUNHd0UsS0FBSyxDQUFDN0MsR0FBRyxDQUFDLFVBQUE3RCxJQUFJLEVBQUk7Y0FDakIsb0JBQ0VmLElBQUEsQ0FBQ2EsZUFBZTtnQkFFZEUsSUFBSSxFQUFFQSxJQUFLO2dCQUNYQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRThCLFFBQVEsRUFBSTtrQkFDbkIsSUFBSTBELFdBQVcsRUFBRTtvQkFDZkMsY0FBYyxDQUFDLElBQUksQ0FBQztrQkFDdEI7a0JBQ0FJLGVBQWUsQ0FBQy9ELFFBQVEsQ0FBQ2dDLGlCQUFpQixDQUFDO2tCQUMzQ00sVUFBVSxDQUFDdEMsUUFBUSxDQUFDO2dCQUN0QixDQUFFO2dCQUNGN0IsV0FBVyxFQUFFdUYsV0FBVyxLQUFLekYsSUFBSSxDQUFDa0QsRUFBRztnQkFDckMvQyxXQUFXLEVBQUUwSSxlQUFnQjtnQkFDN0J6SSxZQUFZLEVBQUUwSSxnQkFBaUI7Z0JBQy9CekksUUFBUSxFQUFFO2tCQUNSNEIsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7a0JBQ2hCRCxnQkFBZ0IsRUFBaEJBO2dCQUNGLENBQUU7Z0JBQ0YxQixVQUFVLEVBQUV1RixZQUFZLEtBQUs3RixJQUFJLENBQUMrRDtjQUFrQixHQWhCL0MvRCxJQUFJLENBQUNrRCxFQWlCWCxDQUFDO1lBRU4sQ0FBQyxDQUFDLEVBQ0RnRSxrQkFBa0IsaUJBQ2pCakksSUFBQSxDQUFDTixxQkFBcUI7Y0FBQXVELFFBQUEsZUFDcEJqRCxJQUFBLENBQUNuRCxNQUFNLElBQUU7WUFBQyxDQUNXLENBQ3hCO1VBQUEsQ0FDRCxDQUFDLGdCQUVIcUQsS0FBQSxDQUFDUCxvQkFBb0I7WUFBQXNELFFBQUEsZ0JBQ25CakQsSUFBQSxDQUFDdEQsZ0JBQWdCLElBQUUsQ0FBQyxlQUNwQnNELElBQUEsQ0FBQ0osd0JBQXdCO2NBQUFxRCxRQUFBLEVBQUVsQixDQUFDLENBQUMscUJBQXFCO1lBQUMsQ0FBMkIsQ0FBQztVQUFBLENBQzNEO1FBQ3ZCLENBQ29CLENBQUMsZUFDeEIvQixJQUFBLENBQUNILHFCQUFxQjtVQUFBb0QsUUFBQSxFQUNuQjJDLFFBQVEsSUFBSTZCLEtBQUssQ0FBQ2lGLE1BQU0sZ0JBQ3ZCeE0sS0FBQSxDQUFDWixxQkFBcUI7WUFBQTJELFFBQUEsZ0JBQ3BCakQsSUFBQSxDQUFDVCw2QkFBNkI7Y0FBQTBELFFBQUEsZUFDNUJqRCxJQUFBLENBQUN2QyxTQUFTLElBQUU7WUFBQyxDQUNnQixDQUFDLGVBQ2hDdUMsSUFBQSxDQUFDUiw0QkFBNEI7Y0FBQXlELFFBQUEsRUFBRWxCLENBQUMsQ0FBQyxxQkFBcUI7WUFBQyxDQUErQixDQUFDO1VBQUEsQ0FDbEUsQ0FBQyxHQUN0QjtRQUFJLENBQ2EsQ0FBQztNQUFBLENBQ0wsQ0FBQyxHQUNwQixJQUFJLGVBQ1I3QixLQUFBLENBQUNKLHVCQUF1QjtRQUFDdU0sT0FBTyxFQUFFakcsTUFBTztRQUFDeUcsZUFBZSxFQUFFLENBQUMsQ0FBQzFGLGFBQWM7UUFBQWxFLFFBQUEsR0FDeEVrRSxhQUFhLGdCQUFHbkgsSUFBQSxDQUFDcEMsY0FBYztVQUFDdUosYUFBYSxFQUFFQSxhQUFjO1VBQUNmLE1BQU0sRUFBRUE7UUFBTyxDQUFFLENBQUMsR0FBRyxJQUFJLGVBQ3hGcEcsSUFBQSxDQUFDckMscUJBQXFCLElBQUUsQ0FBQztNQUFBLENBQ0YsQ0FBQztJQUFBLENBQ1osQ0FBQztFQUFBLENBQ0gsQ0FBQztBQUVyQixDQUFDIiwiaWdub3JlTGlzdCI6W119
504
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJBbmltYXRlUHJlc2VuY2UiLCJDaGV2cm9uRG91YmxlTGVmdCIsIlRvb2x0aXAiLCJFbXB0eUhpc3RvcnlJY29uIiwidXNlQ2hhdHMiLCJMb2FkZXIiLCJFcnJvclN0YXRlIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJFcnJvckljb24iLCJ1c2VVc2VyIiwiT25ib2FyZGluZ01vZGFsQnV0dG9uIiwiRmVlZGJhY2tCdXR0b24iLCJ1c2VHbG9iYWxDb250ZXh0IiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJTQ1NTaWRlYmFyUm9vdCIsIlNDU1NpZGViYXJUb29sYmFyIiwiU0NTU2lkZWJhckJvZHkiLCJTQ1NTaWRlYmFyT3BlblBhbmVsIiwiU0NTU2lkZWJhckFnZW50c0Jsb2NrIiwiU0NTU2lkZWJhckFnZW50c0FjdGlvbnMiLCJTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbiIsIlNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWwiLCJTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwiLCJTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbiIsIlNDU1NpZGViYXJFcnJvclN0YXRlVG9wIiwiU0NTU2lkZWJhckVycm9yQmFubmVyIiwiU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlIiwiU0NTU2lkZWJhckxvYWRpbmdBcmVhIiwiU0NTU2lkZWJhckxvYWRNb3JlUm93IiwiU0NTU2lkZWJhckVtcHR5Q2hhdHMiLCJTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQiLCJTQ1NTaWRlYmFyQ2hhdHNGb290ZXIiLCJTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyIsIlNDU1NpZGViYXJTZWN0aW9uTW9kYWxCYWNrZHJvcE1vdGlvbiIsIlNpZGViYXJDaGF0c1NlY3Rpb24iLCJTaWRlYmFyQ2hhdHNTZWN0aW9uTW9kYWwiLCJidWlsZFNpZGViYXJTZWN0aW9ucyIsImdyb3VwQ2hhdHNCeVNpZGViYXJTZWN0aW9uIiwiU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVMiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQiLCJTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJTaWRlYmFyIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25Hb1RvQ2hhdCIsIl9yZWYkb25FcnJvciIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsInNob3dOZXdDaGF0IiwicmVmZXRjaENoYXRzIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwiaGFzRXJyb3IiLCJyZXNldFNlbGVjdGVkQ2hhdFJlZiIsIl9yZWYkYWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzTmF2QWN0aXZlIiwib25OZXdDaGF0IiwiX3VzZVQiLCJ0IiwiaTE4biIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiY2hhdE1lbnVTdGF0ZSIsInNldENoYXRNZW51U3RhdGUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5Iiwic2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkiLCJfdXNlU3RhdGU3IiwiY2xpZW50cyIsInByb2plY3RzIiwiYWdlbnRzQnlDb21wYW55IiwiX3VzZVN0YXRlOCIsImNvbGxhcHNlZFNlY3Rpb25zIiwic2V0Q29sbGFwc2VkU2VjdGlvbnMiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsInNpZGViYXJTY3JvbGxSZWYiLCJ1c2VyIiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsIl91c2VDaGF0cyIsImxvYWRpbmdDaGF0cyIsImNoYXRzIiwiZGVsZXRlQ2hhdCIsInVwZGF0ZUNoYXQiLCJmZXRjaENoYXRzIiwiaGFzTW9yZUNoYXRzIiwibG9hZE1vcmVDaGF0cyIsImlzTG9hZGluZ01vcmVDaGF0cyIsInNlc3Npb25zR3JvdXBIYXNNb3JlIiwic2hvd0Z1bGxTaWRlYmFyRXJyb3JDb2x1bW4iLCJsZW5ndGgiLCJzaG93U2lkZWJhckVycm9yRm9vdGVyQmFubmVyIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGVBZ2VudHMiLCJjcmVhdGUiLCJjYW5WaWV3QWdlbnRzIiwidmlldyIsInNob3dNYXJrZXRwbGFjZVNpZGViYXJCdXR0b24iLCJ3aW5kb3ciLCJNQUlBX01BUktFVFBMQUNFX01BSUFLRVIiLCJhZ2VudE5hdkJ1dHRvbkNvdW50Iiwic2hvd0FnZW50c05hdkJsb2NrIiwiZ3JvdXBlZENoYXRzIiwic2lkZWJhclNlY3Rpb25zIiwia2V5IiwiX3VzZXIkY29tcGFueSIsImNvbXBhbnlOYW1lIiwiY29tcGFueSIsInRyaW0iLCJleHBhbmRlZFNlY3Rpb24iLCJmaW5kIiwic2VjdGlvbiIsImN1cnJlbnQiLCJoYW5kbGVEZWxldGVDaGF0IiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImNoYXQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInNlc3Npb25FeHRlcm5hbElkIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVVcGRhdGVDaGF0IiwiaGFuZGxlT3BlbkNoYXRNZW51IiwiY2hhdElkIiwic3VyZmFjZSIsImhhbmRsZUNsb3NlQ2hhdE1lbnUiLCJoYW5kbGVPcGVuU2VjdGlvbk1vZGFsIiwiX3JlZjMiLCJfY2FsbGVlMiIsInNlY3Rpb25LZXkiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwic3RvcmVMaW1pdCIsIl9jb250ZXh0MiIsImxpbWl0Iiwib2Zmc2V0Iiwic2hvd0dsb2JhbExvYWRlciIsIl94MiIsImhhbmRsZUNsb3NlU2VjdGlvbk1vZGFsIiwiaGFuZGxlVG9nZ2xlU2VjdGlvbkNvbGxhcHNlIiwiX29iamVjdFNwcmVhZCIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZVNlbGVjdENvbnZlcnNhdGlvbiIsImNoYXREYXRhIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiZXZlbnQiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVRvZ2dsZVNpZGViYXIiLCJoYW5kbGVPcGVuQ3JlYXRlQWdlbnQiLCJfcmVmNCIsIl9jYWxsZWUzIiwicmVzcG9uc2UiLCJkYXRhIiwibWFpYWtlckFnZW50IiwiX2NvbnRleHQzIiwicGF0aCIsImNvbmNhdCIsImxhbmd1YWdlIiwibWV0aG9kIiwic2VudCIsImpzb24iLCJ0eXBlIiwiZW50aXR5IiwiYWJydXB0IiwiaGFuZGxlTmV3Q2hhdCIsIl9yZWY1IiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJoYW5kbGVSZWZldGNoU2Vzc2lvbiIsInNob3dOZXdDaGF0QnV0dG9uIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsIiRpc09wZW4iLCJjaGlsZHJlbiIsInRpdGxlIiwib25DbGljayIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJyZWYiLCJhaUNoYXRNcE9wZW4iLCIkYWN0aXZlIiwic2l6ZSIsIiRoYXNDaGF0cyIsIiRvZmZzZXRWYXJpYW50IiwiJGFnZW50TmF2QnV0dG9uQ291bnQiLCIkZmlsbEhlaWdodCIsIm1hcCIsImNvbGxhcHNlZCIsIm9uVG9nZ2xlQ29sbGFwc2UiLCJvbk9wZW5Nb3JlIiwib25PcGVuQ2hhdE1lbnUiLCJvbkNsb3NlQ2hhdE1lbnUiLCJzZWxlY3RlZENoYXRTZXNzaW9uRXh0ZXJuYWxJZCIsIiRqdXN0aWZ5QmV0d2VlbiIsImluaXRpYWwiLCJvcGFjaXR5IiwiYW5pbWF0ZSIsImV4aXQiLCJ0cmFuc2l0aW9uIiwiZHVyYXRpb24iLCJlYXNlIiwib25DbG9zZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9TaWRlYmFyL1NpZGViYXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBNdXRhYmxlUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSB9IGZyb20gJ2ZyYW1lci1tb3Rpb24nXG5pbXBvcnQgeyBDaGV2cm9uRG91YmxlTGVmdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3VibGVMZWZ0J1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7IEVtcHR5SGlzdG9yeUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FbXB0eUhpc3RvcnknXG5pbXBvcnQgeyB1c2VDaGF0cyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRzJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRXJyb3JTdGF0ZSwgTWFpYVN0b3JlSWNvbiwgTXlBZ2VudHNOYXZJY29uLCBOZXdDaGF0IH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IEVycm9ySWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0Vycm9ySWNvbidcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgT25ib2FyZGluZ01vZGFsQnV0dG9uIH0gZnJvbSAnLi4vLi4vYXRvbXMvT25ib2FyZGluZ01vZGFsQnV0dG9uJ1xuaW1wb3J0IHsgRmVlZGJhY2tCdXR0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9GZWVkYmFja0J1dHRvbidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vLi4vbGFuZy91dGlscydcbmltcG9ydCB7IFNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24sIFNDU1dyYXBwZXJOZXdDaGF0SWNvbiB9IGZyb20gJy4vU2lkZWJhci5zdHlsZXMnXG5pbXBvcnQge1xuICBTQ1NTaWRlYmFyUm9vdCxcbiAgU0NTU2lkZWJhclRvb2xiYXIsXG4gIFNDU1NpZGViYXJCb2R5LFxuICBTQ1NTaWRlYmFyT3BlblBhbmVsLFxuICBTQ1NTaWRlYmFyQWdlbnRzQmxvY2ssXG4gIFNDU1NpZGViYXJBZ2VudHNBY3Rpb25zLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbixcbiAgU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCxcbiAgU0NTU2lkZWJhckNoYXRzU2Nyb2xsLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZUNvbHVtbixcbiAgU0NTU2lkZWJhckVycm9yU3RhdGVUb3AsXG4gIFNDU1NpZGViYXJFcnJvckJhbm5lcixcbiAgU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXAsXG4gIFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2UsXG4gIFNDU1NpZGViYXJMb2FkaW5nQXJlYSxcbiAgU0NTU2lkZWJhckxvYWRNb3JlUm93LFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0cyxcbiAgU0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0LFxuICBTQ1NTaWRlYmFyQ2hhdHNGb290ZXIsXG4gIFNDU1NpZGViYXJGb290ZXJBY3Rpb25zLFxufSBmcm9tICcuL1NpZGViYXIubGF5b3V0LnN0eWxlcydcbmltcG9ydCB7IFNDU1NpZGViYXJTZWN0aW9uTW9kYWxCYWNrZHJvcE1vdGlvbiB9IGZyb20gJy4vU2lkZWJhckNoYXRzLnN0eWxlcydcbmltcG9ydCB7IFNpZGViYXJDaGF0c1NlY3Rpb24gfSBmcm9tICcuL1NpZGViYXJDaGF0c1NlY3Rpb24nXG5pbXBvcnQgeyBTaWRlYmFyQ2hhdHNTZWN0aW9uTW9kYWwgfSBmcm9tICcuL1NpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbCdcbmltcG9ydCB7IGJ1aWxkU2lkZWJhclNlY3Rpb25zLCBncm91cENoYXRzQnlTaWRlYmFyU2VjdGlvbiB9IGZyb20gJy4vc2lkZWJhckNoYXRzLmhlbHBlcnMnXG5pbXBvcnQgdHlwZSB7IFNpZGViYXJDaGF0TWVudVN1cmZhY2UsIFNpZGViYXJDaGF0TWVudVN0YXRlLCBTaWRlYmFyU2VjdGlvbktleSB9IGZyb20gJy4vc2lkZWJhckNoYXRzLnR5cGVzJ1xuaW1wb3J0IHsgU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVMgfSBmcm9tICcuL3NpZGViYXJDaGF0cy50eXBlcydcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgeyBTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQsIFNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2NoYXRzU3RvcmUudHlwZXMnXG5cbmV4cG9ydCBjb25zdCBTaWRlYmFyID0gKHtcbiAgb25Hb1RvQ2hhdCxcbiAgb25FcnJvciA9ICgpID0+IG51bGwsXG4gIGhhbmRsZUdvVG9Ib21lLFxuICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gIHNob3dOZXdDaGF0LFxuICByZWZldGNoQ2hhdHMsXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyxcbiAgaGFzRXJyb3IsXG4gIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLFxuICBhZ2VudHNOYXZBY3RpdmUgPSBudWxsLFxuICBvbk5ld0NoYXQsXG59OiB7XG4gIG9uR29Ub0NoYXQ6IChjaGF0SWQ6IHN0cmluZykgPT4gdm9pZFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIGhhbmRsZUdvVG9Ib21lOiAoKSA9PiB2b2lkXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZTogKCkgPT4gdm9pZFxuICBzaG93TmV3Q2hhdDogYm9vbGVhblxuICByZWZldGNoQ2hhdHM6IGJvb2xlYW5cbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzOiAocmVmZXRjaDogYm9vbGVhbikgPT4gdm9pZFxuICBoYXNFcnJvcjogYm9vbGVhblxuICByZXNldFNlbGVjdGVkQ2hhdFJlZj86IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgbnVsbD5cbiAgLyoqIFJlc2FsdGEgTWFpYWtlciBvIE1pcyBhZ2VudGVzICovXG4gIGFnZW50c05hdkFjdGl2ZT86ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCBudWxsXG4gIC8qKlxuICAgKiBBY2Npw7NuIGRlbCBib3TDs24gXCJudWV2byBjaGF0XCIgZGVsIHRvb2xiYXIuIFNpIHNlIHByb3ZlZSwgc2UgaW52b2NhIGVuIGx1Z2FyXG4gICAqIGRlIGBoYW5kbGVHb1RvSG9tZWAgcGFyYSBwZXJtaXRpciBkZXN0aW5vcyBkaXN0aW50b3Mgc2Vnw7puIGVsIGFnZW50ZSBhY3R1YWxcbiAgICogKG15QWdlbnRzIHBhcmEgY3VzdG9tLCBzZWxlY3RvciBkZSBwcm95ZWN0by9jbGllbnRlIHBhcmEgY2xvbmUrZW50aXR5LCBldGMpLlxuICAgKi9cbiAgb25OZXdDaGF0PzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbn0pID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUKClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtjaGF0TWVudVN0YXRlLCBzZXRDaGF0TWVudVN0YXRlXSA9IHVzZVN0YXRlPFNpZGViYXJDaGF0TWVudVN0YXRlPihudWxsKVxuICBjb25zdCBbZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXksIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5XSA9IHVzZVN0YXRlPFNpZGViYXJTZWN0aW9uS2V5IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2NvbGxhcHNlZFNlY3Rpb25zLCBzZXRDb2xsYXBzZWRTZWN0aW9uc10gPSB1c2VTdGF0ZTxSZWNvcmQ8U2lkZWJhclNlY3Rpb25LZXksIGJvb2xlYW4+Pih7XG4gICAgY2xpZW50czogZmFsc2UsXG4gICAgcHJvamVjdHM6IGZhbHNlLFxuICAgIGFnZW50c0J5Q29tcGFueTogZmFsc2UsXG4gIH0pXG4gIGNvbnN0IFtzZWxlY3RlZENoYXQsIHNldFNlbGVjdGVkQ2hhdF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjaGF0c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNpZGViYXJTY3JvbGxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgYWdlbnQ6IHNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7XG4gICAgbG9hZGluZ0NoYXRzLFxuICAgIGNoYXRzLFxuICAgIGRlbGV0ZUNoYXQsXG4gICAgdXBkYXRlQ2hhdCxcbiAgICBmZXRjaENoYXRzLFxuICAgIGhhc01vcmVDaGF0cyxcbiAgICBsb2FkTW9yZUNoYXRzLFxuICAgIGlzTG9hZGluZ01vcmVDaGF0cyxcbiAgICBzZXNzaW9uc0dyb3VwSGFzTW9yZSxcbiAgfSA9IHVzZUNoYXRzKHtcbiAgICBvbkVycm9yLFxuICB9KVxuXG4gIGNvbnN0IHNob3dGdWxsU2lkZWJhckVycm9yQ29sdW1uID0gaGFzRXJyb3IgJiYgIWNoYXRzLmxlbmd0aFxuICBjb25zdCBzaG93U2lkZWJhckVycm9yRm9vdGVyQmFubmVyID0gaGFzRXJyb3IgJiYgY2hhdHMubGVuZ3RoID4gMFxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZVxuICBjb25zdCBjYW5WaWV3QWdlbnRzID0gISF1c2VyUGVybWlzc2lvbnM/LnZpZXdcbiAgY29uc3Qgc2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiA9ICEhY2FuQ3JlYXRlQWdlbnRzICYmICEhd2luZG93Lk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUlxuICBjb25zdCBhZ2VudE5hdkJ1dHRvbkNvdW50ID0gKChzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uID8gMSA6IDApICsgKGNhblZpZXdBZ2VudHMgPyAxIDogMCkpIGFzIDAgfCAxIHwgMlxuICBjb25zdCBzaG93QWdlbnRzTmF2QmxvY2sgPSBzaG93TWFya2V0cGxhY2VTaWRlYmFyQnV0dG9uIHx8IGNhblZpZXdBZ2VudHNcblxuICBjb25zdCBncm91cGVkQ2hhdHMgPSB1c2VNZW1vKCgpID0+IGdyb3VwQ2hhdHNCeVNpZGViYXJTZWN0aW9uKGNoYXRzKSwgW2NoYXRzXSlcblxuICBjb25zdCBzaWRlYmFyU2VjdGlvbnMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBidWlsZFNpZGViYXJTZWN0aW9ucyhcbiAgICAgICAgZ3JvdXBlZENoYXRzLFxuICAgICAgICBrZXkgPT5cbiAgICAgICAgICBrZXkgPT09ICdhZ2VudHNCeUNvbXBhbnknXG4gICAgICAgICAgICA/IHQoU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVNba2V5XSwgeyBjb21wYW55TmFtZTogdXNlci5jb21wYW55Py50cmltKCkgfHwgJ+KAlCcgfSlcbiAgICAgICAgICAgIDogdChTSURFQkFSX1NFQ1RJT05fVFJBTlNMQVRJT05fS0VZU1trZXldKSxcbiAgICAgICAgc2Vzc2lvbnNHcm91cEhhc01vcmVcbiAgICAgICksXG4gICAgW2dyb3VwZWRDaGF0cywgdCwgdXNlci5jb21wYW55LCBzZXNzaW9uc0dyb3VwSGFzTW9yZV1cbiAgKVxuXG4gIGNvbnN0IGV4cGFuZGVkU2VjdGlvbiA9IGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5XG4gICAgPyBzaWRlYmFyU2VjdGlvbnMuZmluZChzZWN0aW9uID0+IHNlY3Rpb24ua2V5ID09PSBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleSkgfHwgbnVsbFxuICAgIDogbnVsbFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICByZXNldFNlbGVjdGVkQ2hhdFJlZi5jdXJyZW50ID0gKCkgPT4gc2V0U2VsZWN0ZWRDaGF0KG51bGwpXG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYpIHtcbiAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtyZXNldFNlbGVjdGVkQ2hhdFJlZl0pXG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQ2hhdCA9IGFzeW5jIChjaGF0OiBhbnkpID0+IHtcbiAgICBkZWxldGVDaGF0KGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgIGhhbmRsZUdvVG9Ib21lKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVVwZGF0ZUNoYXQgPSAoY2hhdDogYW55KSA9PiB7XG4gICAgdXBkYXRlQ2hhdChjaGF0KVxuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5DaGF0TWVudSA9IChjaGF0SWQ6IHN0cmluZywgc3VyZmFjZTogU2lkZWJhckNoYXRNZW51U3VyZmFjZSkgPT4ge1xuICAgIHNldENoYXRNZW51U3RhdGUocHJldiA9PiAocHJldj8uY2hhdElkID09PSBjaGF0SWQgJiYgcHJldj8uc3VyZmFjZSA9PT0gc3VyZmFjZSA/IG51bGwgOiB7IGNoYXRJZCwgc3VyZmFjZSB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlQ2hhdE1lbnUgPSAoKSA9PiB7XG4gICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT3BlblNlY3Rpb25Nb2RhbCA9IGFzeW5jIChzZWN0aW9uS2V5OiBTaWRlYmFyU2VjdGlvbktleSkgPT4ge1xuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICBjb25zdCB7IGxpbWl0OiBzdG9yZUxpbWl0IH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgIGlmIChzdG9yZUxpbWl0ID09PSBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQpIHtcbiAgICAgIGF3YWl0IGZldGNoQ2hhdHMoe1xuICAgICAgICBsaW1pdDogU0VDVElPTl9NT0RBTF9TRVNTSU9OU19QQUdFX0xJTUlULFxuICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgIHNob3dHbG9iYWxMb2FkZXI6IGZhbHNlLFxuICAgICAgfSlcbiAgICB9XG4gICAgc2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkoc2VjdGlvbktleSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlU2VjdGlvbk1vZGFsID0gKCkgPT4ge1xuICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KG51bGwpXG4gICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlU2VjdGlvbkNvbGxhcHNlID0gKHNlY3Rpb25LZXk6IFNpZGViYXJTZWN0aW9uS2V5KSA9PiB7XG4gICAgc2V0Q29sbGFwc2VkU2VjdGlvbnMocHJldiA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIFtzZWN0aW9uS2V5XTogIXByZXZbc2VjdGlvbktleV0sXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVTZWxlY3RDb252ZXJzYXRpb24gPSAoY2hhdERhdGE6IGFueSkgPT4ge1xuICAgIHNldFNlbGVjdGVkQ2hhdChjaGF0RGF0YS5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICBvbkdvVG9DaGF0KGNoYXREYXRhKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBFbGVtZW50XG4gICAgICBpZiAoY2hhdE1lbnVTdGF0ZSAmJiAhdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLW1vZGFsLWNvbnRhaW5lcl0nKSkge1xuICAgICAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkgJiYgIXRhcmdldC5jbG9zZXN0KCdbZGF0YS1zZWN0aW9uLW1vZGFsLWNvbnRhaW5lcl0nKSkge1xuICAgICAgICBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleShudWxsKVxuICAgICAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYXRNZW51U3RhdGUgfHwgZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2NoYXRNZW51U3RhdGUsIGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5XSlcblxuICBjb25zdCBoYW5kbGVUb2dnbGVTaWRlYmFyID0gKCkgPT4ge1xuICAgIGlmIChjaGF0TWVudVN0YXRlKSB7XG4gICAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgfVxuICAgIGlmIChleHBhbmRlZFNlY3Rpb25Nb2RhbEtleSkge1xuICAgICAgc2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkobnVsbClcbiAgICB9XG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgIH0pXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgIGNvbnN0IG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGFnZW50OiBhbnkpID0+IGFnZW50LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQuZW50aXR5ID09PSAnZ2xvYmFsJylcblxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuICYmICFjaGF0c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBmZXRjaENoYXRzKHsgbGltaXQ6IFNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCwgb2Zmc2V0OiAwIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJlZmV0Y2hDaGF0cykge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgICAgaGFuZGxlU2V0UmVmZXRjaENoYXRzKGZhbHNlKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgcmVmZXRjaENoYXRzLCBoYW5kbGVTZXRSZWZldGNoQ2hhdHMsIGZldGNoQ2hhdHNdKVxuXG4gIC8qKiBFbCBzY3JvbGwgaW5maW5pdG8gZGUgc2VzaW9uZXMgdml2ZSBzb2xvIGVuIGVsIG1vZGFsIGRlIHNlY2Npw7NuIChgU2lkZWJhckNoYXRzU2VjdGlvbk1vZGFsYCkuICovXG5cbiAgY29uc3QgaGFuZGxlTmV3Q2hhdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoY2hhdE1lbnVTdGF0ZSkge1xuICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgIH1cbiAgICBzZXRTZWxlY3RlZENoYXQobnVsbClcbiAgICBhd2FpdCBmZXRjaENoYXRzKHtcbiAgICAgIGxpbWl0OiBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleSA/IFNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCA6IFNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCxcbiAgICAgIG9mZnNldDogMCxcbiAgICB9KVxuICAgIGlmIChvbk5ld0NoYXQpIHtcbiAgICAgIGF3YWl0IG9uTmV3Q2hhdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZUdvVG9Ib21lKClcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hTZXNzaW9uID0gKCkgPT4ge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbZmV0Y2hDaGF0c10pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXRCdXR0b24gPVxuICAgICFzaG93TmV3Q2hhdCAmJlxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nQ2hhdHMgJiZcbiAgICAoKHVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpIHx8XG4gICAgICAoIXVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpKVxuXG4gIHJldHVybiAoXG4gICAgPFNDU1NpZGViYXJSb290ICRpc09wZW49e2lzT3Blbn0+XG4gICAgICA8U0NTU2lkZWJhclRvb2xiYXIgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzT3BlbiA/IHQoJ2NvbnZlcnNhdGlvbnMuY29sbGFwc2UnKSA6IHQoJ2NvbnZlcnNhdGlvbnMuZXhwYW5kJyl9PlxuICAgICAgICAgIDxTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZVNpZGViYXJ9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG91YmxlTGVmdCBjb2xvcj1cIiM0RDRENERcIiB3aWR0aD17MTR9IGhlaWdodD17MTR9IC8+XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIHtzaG93TmV3Q2hhdEJ1dHRvbiA/IChcbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY29udmVyc2F0aW9ucy5uZXdDaGF0Jyl9PlxuICAgICAgICAgICAgPFNDU1dyYXBwZXJOZXdDaGF0SWNvbiBvbkNsaWNrPXtoYW5kbGVOZXdDaGF0fT5cbiAgICAgICAgICAgICAgPE5ld0NoYXQgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSBjb2xvcj1cIiM0RDRENERcIiAvPlxuICAgICAgICAgICAgPC9TQ1NXcmFwcGVyTmV3Q2hhdEljb24+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NTU2lkZWJhclRvb2xiYXI+XG4gICAgICA8U0NTU2lkZWJhckJvZHkgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2lzT3BlbiA/IChcbiAgICAgICAgICA8U0NTU2lkZWJhck9wZW5QYW5lbCByZWY9e3NpZGViYXJTY3JvbGxSZWZ9PlxuICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgICAge3Nob3dBZ2VudHNOYXZCbG9jayA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckFnZW50c0FjdGlvbnM+XG4gICAgICAgICAgICAgICAgICB7c2hvd01hcmtldHBsYWNlU2lkZWJhckJ1dHRvbiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdE1wT3BlbilcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9wZW5DcmVhdGVBZ2VudCgpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXthZ2VudHNOYXZBY3RpdmUgPT09ICdtYWlha2VyJ31cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxNYWlhU3RvcmVJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsPnt0KCdjb252ZXJzYXRpb25zLm1haWFrZXJOYXYnKX08L1NDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b24+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIHtjYW5WaWV3QWdlbnRzID8gKFxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZT17YWdlbnRzTmF2QWN0aXZlID09PSAnbXlBZ2VudHMnfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPE15QWdlbnRzTmF2SWNvbiBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD57dCgnY29udmVyc2F0aW9ucy5teUFnZW50c05hdicpfTwvU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0FjdGlvbnM+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzQmxvY2s+XG4gICAgICAgICAgICA8U0NTU2lkZWJhckNoYXRzU2Nyb2xsXG4gICAgICAgICAgICAgICRoYXNDaGF0cz17Y2hhdHMubGVuZ3RoID4gMCAmJiAhc2hvd0Z1bGxTaWRlYmFyRXJyb3JDb2x1bW59XG4gICAgICAgICAgICAgICRvZmZzZXRWYXJpYW50PXtoYXNFcnJvciA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgICAgICAgICRhZ2VudE5hdkJ1dHRvbkNvdW50PXthZ2VudE5hdkJ1dHRvbkNvdW50fVxuICAgICAgICAgICAgICAkZmlsbEhlaWdodD17c2hvd0Z1bGxTaWRlYmFyRXJyb3JDb2x1bW59XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtzaG93RnVsbFNpZGViYXJFcnJvckNvbHVtbiA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvclN0YXRlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlVG9wPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+e3QoJ2NvbnZlcnNhdGlvbnMuZXJyb3InKX08L1NDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICApIDogbG9hZGluZ0NoYXRzID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICkgOiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtzaWRlYmFyU2VjdGlvbnMubWFwKHNlY3Rpb24gPT4gKFxuICAgICAgICAgICAgICAgICAgICA8U2lkZWJhckNoYXRzU2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YGNoYXQtc2VjdGlvbi0ke3NlY3Rpb24ua2V5fWB9XG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbj17c2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ9e2NvbGxhcHNlZFNlY3Rpb25zW3NlY3Rpb24ua2V5XX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZ2dsZUNvbGxhcHNlPXsoKSA9PiBoYW5kbGVUb2dnbGVTZWN0aW9uQ29sbGFwc2Uoc2VjdGlvbi5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uT3Blbk1vcmU9eygpID0+IGhhbmRsZU9wZW5TZWN0aW9uTW9kYWwoc2VjdGlvbi5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNoYXRNZW51U3RhdGU9e2NoYXRNZW51U3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgb25PcGVuQ2hhdE1lbnU9e2hhbmRsZU9wZW5DaGF0TWVudX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlQ2hhdE1lbnU9e2hhbmRsZUNsb3NlQ2hhdE1lbnV9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdD17aGFuZGxlRGVsZXRlQ2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVVcGRhdGVDaGF0PXtoYW5kbGVVcGRhdGVDaGF0fVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hhdFNlc3Npb25FeHRlcm5hbElkPXtzZWxlY3RlZENoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgb25Hb1RvQ2hhdD17aGFuZGxlU2VsZWN0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nTW9yZUNoYXRzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckxvYWRNb3JlUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICAgICA8RW1wdHlIaXN0b3J5SWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD57dCgnY29udmVyc2F0aW9ucy5lbXB0eScpfTwvU0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0PlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c1Njcm9sbD5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ2hhdHNGb290ZXI+XG4gICAgICAgICAgICAgIHtzaG93U2lkZWJhckVycm9yRm9vdGVyQmFubmVyID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXI+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVySWNvbldyYXA+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT57dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfTwvU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c0Zvb3Rlcj5cbiAgICAgICAgICA8L1NDU1NpZGViYXJPcGVuUGFuZWw+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8U0NTU2lkZWJhckZvb3RlckFjdGlvbnMgJGlzT3Blbj17aXNPcGVufSAkanVzdGlmeUJldHdlZW49eyEhc2VsZWN0ZWRBZ2VudH0+XG4gICAgICAgICAge3NlbGVjdGVkQWdlbnQgPyA8RmVlZGJhY2tCdXR0b24gc2VsZWN0ZWRBZ2VudD17c2VsZWN0ZWRBZ2VudH0gaXNPcGVuPXtpc09wZW59IC8+IDogbnVsbH1cbiAgICAgICAgICA8T25ib2FyZGluZ01vZGFsQnV0dG9uIC8+XG4gICAgICAgIDwvU0NTU2lkZWJhckZvb3RlckFjdGlvbnM+XG4gICAgICA8L1NDU1NpZGViYXJCb2R5PlxuICAgICAgPEFuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAge2V4cGFuZGVkU2VjdGlvbk1vZGFsS2V5ICYmIGV4cGFuZGVkU2VjdGlvbiA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDU1NpZGViYXJTZWN0aW9uTW9kYWxCYWNrZHJvcE1vdGlvblxuICAgICAgICAgICAgICBrZXk9XCJzaWRlYmFyLXNlY3Rpb24tY2hhdC1iYWNrZHJvcFwiXG4gICAgICAgICAgICAgIGFyaWEtaGlkZGVuXG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxuICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEgfX1cbiAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMiwgZWFzZTogJ2Vhc2VPdXQnIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbFxuICAgICAgICAgICAgICBrZXk9e2V4cGFuZGVkU2VjdGlvbk1vZGFsS2V5fVxuICAgICAgICAgICAgICBzZWN0aW9uPXtleHBhbmRlZFNlY3Rpb259XG4gICAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlU2VjdGlvbk1vZGFsfVxuICAgICAgICAgICAgICBjaGF0TWVudVN0YXRlPXtjaGF0TWVudVN0YXRlfVxuICAgICAgICAgICAgICBvbk9wZW5DaGF0TWVudT17aGFuZGxlT3BlbkNoYXRNZW51fVxuICAgICAgICAgICAgICBvbkNsb3NlQ2hhdE1lbnU9e2hhbmRsZUNsb3NlQ2hhdE1lbnV9XG4gICAgICAgICAgICAgIGhhbmRsZURlbGV0ZUNoYXQ9e2hhbmRsZURlbGV0ZUNoYXR9XG4gICAgICAgICAgICAgIGhhbmRsZVVwZGF0ZUNoYXQ9e2hhbmRsZVVwZGF0ZUNoYXR9XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ2hhdFNlc3Npb25FeHRlcm5hbElkPXtzZWxlY3RlZENoYXR9XG4gICAgICAgICAgICAgIG9uR29Ub0NoYXQ9e2hhbmRsZVNlbGVjdENvbnZlcnNhdGlvbn1cbiAgICAgICAgICAgICAgaGFzTW9yZUNoYXRzPXtoYXNNb3JlQ2hhdHN9XG4gICAgICAgICAgICAgIGxvYWRNb3JlQ2hhdHM9e2xvYWRNb3JlQ2hhdHN9XG4gICAgICAgICAgICAgIGlzTG9hZGluZ01vcmVDaGF0cz17aXNMb2FkaW5nTW9yZUNoYXRzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICA8L1NDU1NpZGViYXJSb290PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQTJCQSxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUM5RSxTQUFTQyxlQUFlLFFBQVEsZUFBZTtBQUMvQyxTQUFTQyxpQkFBaUIsUUFBUSxvREFBb0Q7QUFFdEYsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUV0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