@projectcor/maia-components 2.51.1 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +95 -3
  2. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +108 -41
  3. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  4. package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoice.js +108 -0
  5. package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoice.styles.js +77 -0
  6. package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.js +62 -0
  7. package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.styles.js +26 -0
  8. package/lib/components/molecules/ChatAIMultipleChoice/index.js +3 -0
  9. package/lib/components/molecules/ChatFooter/ChatFooter.js +82 -2
  10. package/lib/hooks/useChatManager/useChatManager.helpers.js +6 -3
  11. package/lib/hooks/useChatManager/useChatManager.js +50 -33
  12. package/lib/hooks/useEvent.js +3 -1
  13. package/lib/hooks/useLatestRef.js +15 -0
  14. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +4 -2
  15. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  16. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +3 -3
  17. package/lib/lang/br/index.js +7 -1
  18. package/lib/lang/en/index.js +7 -1
  19. package/lib/lang/es/index.js +7 -1
  20. package/lib/lang/fr/index.js +7 -1
  21. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +11 -6
  22. package/lib/services/maia/Orchestrator/orchestrator.js +5 -4
  23. package/lib/services/utils/mapChatMessages.helpers.js +6 -3
  24. package/lib/store/sessions/sessionStreamManager.helpers.js +7 -1
  25. package/lib/store/sessions/sessions.types.js +1 -1
  26. package/lib/store/useMultipleChoiceStore.js +47 -0
  27. package/lib/types/Chat.js +3 -1
  28. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
3
  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; }
3
4
  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; }
4
5
  import { Feedback } from '../MessageFeedback/MessageFeedback';
@@ -143,14 +144,104 @@ export var shouldHideEmptyStreamingBody = function shouldHideEmptyStreamingBody(
143
144
  return !displayText && !isStreaming;
144
145
  };
145
146
  export var shouldRenderAssistantFeedback = function shouldRenderAssistantFeedback(params) {
146
- return params.isAssistant && !params.isError && !params.approval && !params.isStreaming && (!params.isFrontendCancelled || Boolean(params.onRetry));
147
+ return params.isAssistant && !params.isError && !params.approval && !params.multipleChoice && !params.isStreaming && (!params.isFrontendCancelled || Boolean(params.onRetry));
147
148
  };
148
149
  export var shouldRenderAssistantSuggestions = function shouldRenderAssistantSuggestions(params) {
149
- return params.isAssistant && !params.isFrontendCancelled && !params.approval && (!params.isError || params.suggestionsLength > 0);
150
+ return params.isAssistant && !params.isFrontendCancelled && !params.approval &&
151
+ // Una pregunta bloqueante (multipleChoice) manda: el backend nunca manda las dos, pero si llegaran
152
+ // juntas no se muestran sugerencias opcionales al lado de una decisión pendiente.
153
+ !params.multipleChoice && (!params.isError || params.suggestionsLength > 0);
150
154
  };
151
155
  export var shouldHideAssistantSuggestions = function shouldHideAssistantSuggestions(isStreaming, isLastMessage, suggestionsDisabled) {
152
156
  return Boolean(isStreaming || !isLastMessage || suggestionsDisabled);
153
157
  };
158
+ var MARKDOWN_DECORATION = /(\*\*|__|`|^#+\s*|^\s*(?:[-*]|\d+[.)])\s+)/gm;
159
+
160
+ /**
161
+ * La pregunta es la última línea del mensaje que termina en "?". El backend manda la prosa y las opciones
162
+ * por separado, sin marcar cuál es la pregunta; si no hay ninguna, el título cae al texto genérico.
163
+ */
164
+ export var extractMultipleChoiceQuestion = function extractMultipleChoiceQuestion(text) {
165
+ var lines = (text !== null && text !== void 0 ? text : '').split('\n').map(function (line) {
166
+ return line.replace(MARKDOWN_DECORATION, '').trim();
167
+ }).filter(Boolean);
168
+ var question = _toConsumableArray(lines).reverse().find(function (line) {
169
+ return line.endsWith('?');
170
+ });
171
+ return question !== null && question !== void 0 ? question : null;
172
+ };
173
+
174
+ /** La card vive sobre el input: solo aplica al último mensaje, cuando terminó de llegar y nadie la cerró. */
175
+ export var resolvePendingMultipleChoice = function resolvePendingMultipleChoice(params) {
176
+ var _last$multipleChoice;
177
+ if (params.isStreaming) return null;
178
+ var last = params.messages[params.messages.length - 1];
179
+ if (!last || !isAssistantChatMessage(last.role, last.user.id)) return null;
180
+ if (last.isError || last.isFrontendCancelled || last.approval) return null;
181
+ if (params.dismissedMessageIds[last.id]) return null;
182
+ var options = (_last$multipleChoice = last.multipleChoice) === null || _last$multipleChoice === void 0 ? void 0 : _last$multipleChoice.options;
183
+ if (!Array.isArray(options) || options.length < 2) return null;
184
+ return {
185
+ messageId: last.id,
186
+ question: extractMultipleChoiceQuestion(last.message),
187
+ options: options
188
+ };
189
+ };
190
+
191
+ /** Lo que eligió el usuario, tal como lo muestra la card resuelta. `number` es null si no eligió una opción. */
192
+
193
+ /**
194
+ * Una card queda resuelta cuando el mensaje siguiente es del usuario y viene marcado como su respuesta
195
+ * (lo marca el front al enviar y lo devuelve el historial). Esa respuesta se dibuja dentro de la card del
196
+ * asistente y la burbuja del usuario no se muestra.
197
+ */
198
+ export var resolveAnsweredMultipleChoices = function resolveAnsweredMultipleChoices(messages) {
199
+ var answers = {};
200
+ var hiddenMessageIds = {};
201
+ messages.forEach(function (message, index) {
202
+ var _message$multipleChoi, _reply$message$trim, _reply$message;
203
+ var options = (_message$multipleChoi = message.multipleChoice) === null || _message$multipleChoi === void 0 ? void 0 : _message$multipleChoi.options;
204
+ var reply = messages[index + 1];
205
+ if (!(options !== null && options !== void 0 && options.length) || !isAssistantChatMessage(message.role, message.user.id)) return;
206
+ if (!(reply !== null && reply !== void 0 && reply.multipleChoiceAnswer) || isAssistantChatMessage(reply.role, reply.user.id)) return;
207
+ var _reply$multipleChoice = reply.multipleChoiceAnswer,
208
+ key = _reply$multipleChoice.key,
209
+ skipped = _reply$multipleChoice.skipped;
210
+ var optionIndex = key == null ? -1 : options.findIndex(function (option) {
211
+ return option.key === key;
212
+ });
213
+ var option = options[optionIndex];
214
+ if (skipped) answers[message.id] = {
215
+ number: null,
216
+ text: '',
217
+ skipped: true
218
+ };else if (option) answers[message.id] = {
219
+ number: optionIndex + 1,
220
+ text: option.text,
221
+ description: option.description
222
+ };else answers[message.id] = {
223
+ number: null,
224
+ text: (_reply$message$trim = (_reply$message = reply.message) === null || _reply$message === void 0 ? void 0 : _reply$message.trim()) !== null && _reply$message$trim !== void 0 ? _reply$message$trim : ''
225
+ };
226
+ hiddenMessageIds[reply.id] = true;
227
+ });
228
+ return {
229
+ answers: answers,
230
+ hiddenMessageIds: hiddenMessageIds
231
+ };
232
+ };
233
+
234
+ /** Si la última pregunta es una respuesta de card (oculta), el turno se ancla en la card resuelta. */
235
+ export var resolveTurnAnchorId = function resolveTurnAnchorId(messages, questionId, hiddenMessageIds) {
236
+ if (!questionId || !hiddenMessageIds[questionId]) return questionId;
237
+ var index = messages.findIndex(function (message) {
238
+ return message.id === questionId;
239
+ });
240
+ return index > 0 ? messages[index - 1].id : questionId;
241
+ };
242
+ export var isSamePendingMultipleChoice = function isSamePendingMultipleChoice(a, b) {
243
+ return (a === null || a === void 0 ? void 0 : a.messageId) === (b === null || b === void 0 ? void 0 : b.messageId) && (a === null || a === void 0 ? void 0 : a.question) === (b === null || b === void 0 ? void 0 : b.question) && (a === null || a === void 0 ? void 0 : a.options) === (b === null || b === void 0 ? void 0 : b.options);
244
+ };
154
245
  export var shouldRenderCreateAgentActions = function shouldRenderCreateAgentActions(params) {
155
246
  return params.isAssistant && !params.isError && !params.isFrontendCancelled && !params.approval && Boolean(params.agentId);
156
247
  };
@@ -241,6 +332,7 @@ export var shouldSkipEmptyChatListMessage = function shouldSkipEmptyChatListMess
241
332
  if (params.messageText) return false;
242
333
  if (params.projectName) return false;
243
334
  if (params.hasApproval) return false;
335
+ if (params.hasMultipleChoice) return false;
244
336
  return true;
245
337
  };
246
338
  export var resolveDisableFeedbackFromWasHelpful = function resolveDisableFeedbackFromWasHelpful(wasHelpful) {
@@ -395,4 +487,4 @@ export var resolveReserveTurnSpacePlan = function resolveReserveTurnSpacePlan(pa
395
487
  export var resolveScrollToBottomTargetTop = function resolveScrollToBottomTargetTop(scrollHeight, clientHeight) {
396
488
  return scrollHeight - clientHeight;
397
489
  };
398
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zIiwiZGlzdGFuY2UiLCJhYnMiLCJjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tIiwic2Nyb2xsSGVpZ2h0Iiwic3BhY2VySGVpZ2h0Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwic2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tIiwiZGlzdGFuY2VGcm9tQm90dG9tIiwidGhyZXNob2xkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9ERUZBVUxUX1RIUkVTSE9MRCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9VUF9USFJFU0hPTEQiLCJTQ1JPTExfQVRfQk9UVE9NX1RPTEVSQU5DRV9QWCIsIlNQQUNFUl9IRUlHSFRfRVBTSUxPTl9QWCIsInNob3VsZFNob3dUb3BTY3JvbGxHcmFkaWVudCIsInNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCIsImlzU2Nyb2xsaW5nVXB3YXJkIiwibGFzdFNjcm9sbFRvcCIsImlzTmVhclNjcm9sbEJvdHRvbSIsInJlc29sdmVTY3JvbGxOZWFyQm90dG9tVGhyZXNob2xkIiwiY3VycmVudFRocmVzaG9sZCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiIsImVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MiLCJwcm9ncmVzcyIsInBvdyIsImNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wIiwicXVlc3Rpb25Ub3AiLCJvZmZzZXQiLCJtYXgiLCJzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24iLCJjdXJyZW50U2Nyb2xsVG9wIiwidGFyZ2V0U2Nyb2xsVG9wIiwic2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0IiwiY3VycmVudEhlaWdodCIsIm5leHRIZWlnaHQiLCJjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCIsInR1cm5IZWlnaHQiLCJjdXJyZW50U3BhY2VySGVpZ2h0IiwicmVzZXJ2ZWQiLCJzaG91bGREcmFpblR1cm5TcGFjZU9uU2Nyb2xsIiwiYW5jaG9yZWRUdXJuSWQiLCJzaG91bGRSZWxlYXNlVHVyblNwYWNlIiwiQm9vbGVhbiIsInNob3VsZFBlcnNpc3RNYWlhUGFuZWxTY3JvbGwiLCJpbml0aWFsQ2hhdElkIiwiaXNDb250YWluZXJBdFNjcm9sbEJvdHRvbSIsInRvbGVyYW5jZSIsImlzTmV3Q2hhdE1lc3NhZ2VFdmVudCIsImxhc3RJZCIsInByZXZJZCIsIm1lc3NhZ2VzTGVuZ3RoIiwicHJldkxlbmd0aCIsImhhc0luaXRpYWxVc2VyTWVzc2FnZUluTGlzdCIsIm1lc3NhZ2VzIiwic29tZSIsIm1zZyIsImlkIiwiaXNBcHByb3ZhbENoYXRNZXNzYWdlIiwibWVzc2FnZSIsIl9tZXNzYWdlJGlkIiwic3RhcnRzV2l0aCIsImFwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCIsIm1lc3NhZ2VJZCIsInNob3VsZEF1dG9TY3JvbGxPbk1lc3NhZ2VzQ2hhbmdlIiwicGFyYW1zIiwiaXNOZXdNZXNzYWdlIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiaXNBdEJvdHRvbSIsImlzQXBwcm92YWwiLCJoYXNJbml0aWFsTWVzc2FnZSIsInByZXZNZXNzYWdlc0xlbmd0aCIsInNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0IiwiaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yIiwibGFzdE1lc3NhZ2VJZCIsInNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwic3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJpc0N1cnJlbnRVc2VyTWVzc2FnZSIsInJvbGUiLCJ1c2VySWQiLCJhdXRoVXNlcklkIiwiVVNFUiIsImlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UiLCJBU1NJU1RBTlQiLCJpc0FjdGl2ZVN0cmVhbWluZ1N0YXRlIiwiaXNTdHJlYW1pbmciLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwic2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5IiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0Iiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInNob3VsZFNob3dTdHJlYW1BY3Rpdml0eUluZGljYXRvciIsImlzQXNzaXN0YW50Iiwic3RyZWFtQWN0aXZpdHkiLCJzaG91bGRSZW5kZXJDaGFuZ2VQcm9qZWN0TWVzc2FnZSIsImlzQ2hhbmdlUHJvamVjdCIsIm9wdGlvbnMiLCJzaG91bGRTaG93TWVzc2FnZUF0dGFjaG1lbnRzUm93IiwiYXR0YWNobWVudENvdW50Iiwic2hvdWxkUmVuZGVyTWVzc2FnZVRleHRCb2R5IiwibWVzc2FnZVRleHQiLCJzaG93U3RyZWFtaW5nQm9keSIsInNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMiLCJwZW5kaW5nX2FjdGlvbnMiLCJzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5IiwiZGlzcGxheVRleHQiLCJzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayIsImlzRXJyb3IiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwib25SZXRyeSIsInNob3VsZFJlbmRlckFzc2lzdGFudFN1Z2dlc3Rpb25zIiwic3VnZ2VzdGlvbnNMZW5ndGgiLCJzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMiLCJpc0xhc3RNZXNzYWdlIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsInNob3VsZFJlbmRlckNyZWF0ZUFnZW50QWN0aW9ucyIsImFnZW50SWQiLCJyZXNvbHZlQ2hhdExpc3RJdGVtU3RyZWFtaW5nRmxhZ3MiLCJjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsInNvdXJjZUNvdW50Iiwic291cmNlcyIsInNob3VsZElnbm9yZVN1Z2dlc3Rpb25DbGljayIsInN1Z2dlc3Rpb24iLCJhbHJlYWR5U2VsZWN0ZWQiLCJ0cmltIiwiaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24iLCJyZXRyeUxhYmVsIiwicmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UiLCJ1c2VyTWVzc2FnZSIsInNob3VsZE9wZW5NZXNzYWdlT3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5IiwiZmlsZVVybCIsImZpbGUiLCJGaWxlIiwiZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkIiwic3BsaXQiLCJmaWx0ZXIiLCJxdWVzdGlvbklkIiwiam9pbiIsIkFVRElPX0VYVEVOU0lPTlMiLCJBVURJT19UWVBFUyIsImlzQXVkaW9BdHRhY2htZW50IiwiYXR0YWNobWVudCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0eXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsIm5hbWUiLCJpbmNsdWRlcyIsImV4dCIsImVuZHNXaXRoIiwiY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3Iiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiZmluZExhc3RRdWVzdGlvbklkIiwiaW5kZXgiLCJfbWVzc2FnZXMkaW5kZXgiLCJjb21wdXRlUmVzZXJ2ZWRUdXJuU3BhY2UiLCJyZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzIiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEZpbGVOYW1lIiwiZXh0ZW5zaW9uIiwiY29uY2F0IiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCIsInNob3VsZFNraXBFbXB0eUNoYXRMaXN0TWVzc2FnZSIsInByb2plY3ROYW1lIiwiaGFzQXBwcm92YWwiLCJyZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwiLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2UiLCJoYXNVc2VyTWVzc2FnZUZvclJldHJ5IiwiaXNDYW5jZWxsZWQiLCJ0dXJuSWQiLCJjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlIiwicmVtb3ZhYmxlIiwicmVhZFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzIiwid2luZG93IiwiYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyIsImZsYWdzIiwiX29iamVjdFNwcmVhZCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsInJlc29sdmVTdHJlYW1pbmdSYXdUZXh0Iiwic3RyZWFtaW5nVGV4dCIsInNob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwicmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQiLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiaGFuZGxlRmVlZGJhY2siLCJyZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZCIsInNob3VsZEluaXRpYWxpemVDaGF0IiwiYWxyZWFkeUluaXRpYWxpemVkIiwic2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbiIsImxvYWRpbmdNZXNzYWdlcyIsInNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24iLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsYXN0UmVzZXJ2ZWRRdWVzdGlvbklkIiwic2hvdWxkU2tpcE1lc3NhZ2VzU2Nyb2xsRWZmZWN0IiwiaGFzQ29udGFpbmVyIiwiaXNMb2FkaW5nTW9yZVJlZiIsInJlc29sdmVDb250YWluZXJBdEJvdHRvbSIsImNvbnRhaW5lciIsInNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tIiwibGFzdFNjcm9sbGVkU2Vzc2lvbklkIiwiZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzIiwid2FzTG9hZGluZyIsInNob3VsZFNjcm9sbFRvQm90dG9tQWZ0ZXJMb2FkIiwianVzdEZpbmlzaGVkTG9hZGluZyIsInNob3VsZFVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzT25Mb2FkRW5kIiwic2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQiLCJyZXNvbHZlUGVuZGluZ1Njcm9sbFRvcEZyb21TZXNzaW9uIiwic2Vzc2lvbiIsInNjcm9sbFNlc3Npb25JZCIsInNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUiLCJwZW5kaW5nU2Nyb2xsVG9wIiwic2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UiLCJwcmV2aW91c0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJyZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5IiwicmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJmb2xsb3dVcCIsInJlc29sdmVTdHJlYW1pbmdUZXh0SG9va0lkIiwicmVzb2x2ZVJlYXNvbmluZ1RyYWNlSG9va0lkIiwicmVzb2x2ZVNjcm9sbE9uUGFyZW50TW9kZSIsInJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyIsInVzZXIiLCJ0b1N0cmluZyIsImF0IiwicmVzb2x2ZVN1Z2dlc3Rpb25BbmFseXRpY3NBZ2VudFR5cGUiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhZ2VudFR5cGUiLCJwcm9jZXNzQ2hhdE1lc3NhZ2VzU2Nyb2xsRnJhbWUiLCJpbnB1dCIsInNjcm9sbFRocmVzaG9sZCIsIm5leHRTY3JvbGxUaHJlc2hvbGQiLCJzaG91bGREcmFpblR1cm5TcGFjZSIsInNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCIsInNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tIiwiY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0IiwicXVlc3Rpb25TY3JvbGxUb3AiLCJjb250YWluZXJUb3AiLCJjb250ZW50Qm90dG9tU2Nyb2xsIiwiY29udGVudEJvdHRvbSIsInJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbiIsImtpbmQiLCJyZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdEhpc3RvcnlSb2xlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuXG5leHBvcnQgY29uc3QgdHVybkFuY2hvck9mZnNldCA9ICh2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IE1hdGgubWluKHZpZXdwb3J0SGVpZ2h0ICogMC4xOCwgMjAwKVxuXG5leHBvcnQgY29uc3QgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgPSA2MDBcbmV4cG9ydCBjb25zdCBUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMgPSA4MDBcbmV4cG9ydCBjb25zdCBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYID0gMTIwMFxuXG5leHBvcnQgY29uc3QgY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zID0gKGRpc3RhbmNlOiBudW1iZXIpOiBudW1iZXIgPT5cbiAgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgK1xuICAoVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TIC0gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpICpcbiAgICBNYXRoLm1pbigxLCBNYXRoLmFicyhkaXN0YW5jZSkgLyBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYKVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZURpc3RhbmNlRnJvbUJvdHRvbSA9IChcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIsXG4gIHNwYWNlckhlaWdodDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiBzY3JvbGxIZWlnaHQgLSBzcGFjZXJIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dTY3JvbGxUb0JvdHRvbSA9IChkaXN0YW5jZUZyb21Cb3R0b206IG51bWJlciwgdGhyZXNob2xkID0gNTApOiBib29sZWFuID0+XG4gIGRpc3RhbmNlRnJvbUJvdHRvbSA+IHRocmVzaG9sZFxuXG5leHBvcnQgY29uc3QgU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWCA9IDFcbmV4cG9ydCBjb25zdCBTQ1JPTExfTkVBUl9CT1RUT01fREVGQVVMVF9USFJFU0hPTEQgPSAzOVxuZXhwb3J0IGNvbnN0IFNDUk9MTF9ORUFSX0JPVFRPTV9VUF9USFJFU0hPTEQgPSAxNVxuZXhwb3J0IGNvbnN0IFNDUk9MTF9BVF9CT1RUT01fVE9MRVJBTkNFX1BYID0gMTAwXG5leHBvcnQgY29uc3QgU1BBQ0VSX0hFSUdIVF9FUFNJTE9OX1BYID0gMVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50ID0gKHNjcm9sbFRvcDogbnVtYmVyLCB0aHJlc2hvbGQgPSBTQ1JPTExfR1JBRElFTlRfVEhSRVNIT0xEX1BYKTogYm9vbGVhbiA9PlxuICBzY3JvbGxUb3AgPiB0aHJlc2hvbGRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCA9IChcbiAgZGlzdGFuY2VGcm9tQm90dG9tOiBudW1iZXIsXG4gIHRocmVzaG9sZCA9IFNDUk9MTF9HUkFESUVOVF9USFJFU0hPTERfUFhcbik6IGJvb2xlYW4gPT4gZGlzdGFuY2VGcm9tQm90dG9tID4gdGhyZXNob2xkXG5cbmV4cG9ydCBjb25zdCBpc1Njcm9sbGluZ1Vwd2FyZCA9IChzY3JvbGxUb3A6IG51bWJlciwgbGFzdFNjcm9sbFRvcDogbnVtYmVyKTogYm9vbGVhbiA9PiBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wXG5cbmV4cG9ydCBjb25zdCBpc05lYXJTY3JvbGxCb3R0b20gPSAoXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHRocmVzaG9sZDogbnVtYmVyXG4pOiBib29sZWFuID0+IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHRocmVzaG9sZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNjcm9sbE5lYXJCb3R0b21UaHJlc2hvbGQgPSAoXG4gIGN1cnJlbnRUaHJlc2hvbGQ6IG51bWJlcixcbiAgaXNTY3JvbGxpbmdVcDogYm9vbGVhbixcbiAgaXNOZWFyQm90dG9tOiBib29sZWFuXG4pOiBudW1iZXIgPT4ge1xuICBpZiAoaXNOZWFyQm90dG9tKSByZXR1cm4gU0NST0xMX05FQVJfQk9UVE9NX0RFRkFVTFRfVEhSRVNIT0xEXG4gIGlmIChpc1Njcm9sbGluZ1VwKSByZXR1cm4gU0NST0xMX05FQVJfQk9UVE9NX1VQX1RIUkVTSE9MRFxuICByZXR1cm4gY3VycmVudFRocmVzaG9sZFxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcFR1cm5TY3JvbGxBbmltYXRpb24gPSAoZGlzdGFuY2U6IG51bWJlcik6IGJvb2xlYW4gPT4gTWF0aC5hYnMoZGlzdGFuY2UpIDwgMVxuXG5leHBvcnQgY29uc3QgZWFzZU91dEV4cG9TY3JvbGxQcm9ncmVzcyA9IChwcm9ncmVzczogbnVtYmVyKTogbnVtYmVyID0+IChwcm9ncmVzcyA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEyICogcHJvZ3Jlc3MpKVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZVR1cm5TY3JvbGxUYXJnZXRUb3AgPSAocXVlc3Rpb25Ub3A6IG51bWJlciwgdmlld3BvcnRIZWlnaHQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQodmlld3BvcnRIZWlnaHQpXG4gIHJldHVybiBNYXRoLm1heCgwLCBxdWVzdGlvblRvcCAtIG9mZnNldClcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBUdXJuU3BhY2VSZXNlcnZhdGlvbiA9IChjdXJyZW50U2Nyb2xsVG9wOiBudW1iZXIsIHRhcmdldFNjcm9sbFRvcDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICB0YXJnZXRTY3JvbGxUb3AgPD0gY3VycmVudFNjcm9sbFRvcFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0ID0gKGN1cnJlbnRIZWlnaHQ6IG51bWJlciwgbmV4dEhlaWdodDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBNYXRoLmFicyhjdXJyZW50SGVpZ2h0IC0gbmV4dEhlaWdodCkgPj0gU1BBQ0VSX0hFSUdIVF9FUFNJTE9OX1BYXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCA9IChcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHR1cm5IZWlnaHQ6IG51bWJlcixcbiAgY3VycmVudFNwYWNlckhlaWdodDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KGNsaWVudEhlaWdodClcbiAgY29uc3QgcmVzZXJ2ZWQgPSBNYXRoLm1heCgwLCBjbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KVxuICByZXR1cm4gTWF0aC5taW4oY3VycmVudFNwYWNlckhlaWdodCwgcmVzZXJ2ZWQpXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGREcmFpblR1cm5TcGFjZU9uU2Nyb2xsID0gKGFuY2hvcmVkVHVybklkOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PiAhYW5jaG9yZWRUdXJuSWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbGVhc2VUdXJuU3BhY2UgPSAoYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGwsIHNwYWNlckhlaWdodDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGFuY2hvcmVkVHVybklkKSB8fCBzcGFjZXJIZWlnaHQgPiAwXG5cbmV4cG9ydCBjb25zdCBzaG91bGRQZXJzaXN0TWFpYVBhbmVsU2Nyb2xsID0gKGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHNjcm9sbFRvcDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGluaXRpYWxDaGF0SWQpICYmIHNjcm9sbFRvcCA+IDBcblxuZXhwb3J0IGNvbnN0IGlzQ29udGFpbmVyQXRTY3JvbGxCb3R0b20gPSAoXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHRvbGVyYW5jZSA9IFNDUk9MTF9BVF9CT1RUT01fVE9MRVJBTkNFX1BYXG4pOiBib29sZWFuID0+IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCA8PSBjbGllbnRIZWlnaHQgKyB0b2xlcmFuY2VcblxuZXhwb3J0IGNvbnN0IGlzTmV3Q2hhdE1lc3NhZ2VFdmVudCA9IChcbiAgbGFzdElkOiBzdHJpbmcgfCBudWxsLFxuICBwcmV2SWQ6IHN0cmluZyB8IG51bGwsXG4gIG1lc3NhZ2VzTGVuZ3RoOiBudW1iZXIsXG4gIHByZXZMZW5ndGg6IG51bWJlclxuKTogYm9vbGVhbiA9PiBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlc0xlbmd0aCAhPT0gcHJldkxlbmd0aFxuXG5leHBvcnQgY29uc3QgaGFzSW5pdGlhbFVzZXJNZXNzYWdlSW5MaXN0ID0gKG1lc3NhZ2VzOiBBcnJheTx7IGlkPzogc3RyaW5nIH0+KTogYm9vbGVhbiA9PlxuICBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG5cbmV4cG9ydCBjb25zdCBpc0FwcHJvdmFsQ2hhdE1lc3NhZ2UgPSAobWVzc2FnZTogeyBpZD86IHN0cmluZzsgYXBwcm92YWw/OiB1bmtub3duIH0gfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKG1lc3NhZ2UgJiYgKG1lc3NhZ2UuaWQ/LnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8IG1lc3NhZ2UuYXBwcm92YWwpKVxuXG5leHBvcnQgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCA9IChtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihtZXNzYWdlSWQ/LnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBtZXNzYWdlSWQ/LnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQXV0b1Njcm9sbE9uTWVzc2FnZXNDaGFuZ2UgPSAocGFyYW1zOiB7XG4gIGlzTmV3TWVzc2FnZTogYm9vbGVhblxuICBhbmNob3JlZFR1cm5JZDogc3RyaW5nIHwgbnVsbFxuICB3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW5cbiAgaXNXcml0aW5nOiBib29sZWFuXG4gIGlzQXRCb3R0b206IGJvb2xlYW5cbiAgaXNBbnN3ZXJPclF1ZXN0aW9uOiBib29sZWFuXG4gIGlzQXBwcm92YWw6IGJvb2xlYW5cbiAgaGFzSW5pdGlhbE1lc3NhZ2U6IGJvb2xlYW5cbiAgbWVzc2FnZXNMZW5ndGg6IG51bWJlclxuICBwcmV2TWVzc2FnZXNMZW5ndGg6IG51bWJlclxufSk6ICdzY3JvbGwnIHwgJ3N5bmMtdHVybicgfCAnYWZmb3JkYW5jZXMtb25seScgPT4ge1xuICBpZiAoIXBhcmFtcy5pc05ld01lc3NhZ2UpIHJldHVybiAnYWZmb3JkYW5jZXMtb25seSdcbiAgaWYgKHBhcmFtcy5hbmNob3JlZFR1cm5JZCkgcmV0dXJuICdzeW5jLXR1cm4nXG4gIGlmIChwYXJhbXMud2FpdGluZ1Jlc3BvbnNlIHx8IHBhcmFtcy5pc1dyaXRpbmcpIHJldHVybiAnYWZmb3JkYW5jZXMtb25seSdcbiAgaWYgKHBhcmFtcy5pc0Fuc3dlck9yUXVlc3Rpb24gJiYgcGFyYW1zLmlzQXRCb3R0b20pIHJldHVybiAnc2Nyb2xsJ1xuICBpZiAoXG4gICAgIXBhcmFtcy5pc0Fuc3dlck9yUXVlc3Rpb24gJiZcbiAgICAhcGFyYW1zLmlzQXBwcm92YWwgJiZcbiAgICAhcGFyYW1zLmhhc0luaXRpYWxNZXNzYWdlICYmXG4gICAgcGFyYW1zLm1lc3NhZ2VzTGVuZ3RoID4gcGFyYW1zLnByZXZNZXNzYWdlc0xlbmd0aFxuICApIHtcbiAgICByZXR1cm4gJ3Njcm9sbCdcbiAgfVxuICByZXR1cm4gJ2FmZm9yZGFuY2VzLW9ubHknXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRSdW5TdHJlYW1UdXJuU3luY0VmZmVjdCA9ICh3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW4sIGlzV3JpdGluZzogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgd2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZ1xuXG5leHBvcnQgY29uc3QgaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yID0gKFxuICBsYXN0TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhbixcbiAgaXNXcml0aW5nOiBib29sZWFuXG4pOiBib29sZWFuID0+IEJvb2xlYW4obGFzdE1lc3NhZ2VJZCAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGxhc3RNZXNzYWdlSWQpICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yID0gKFxuICBoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3I6IGJvb2xlYW4sXG4gIHN0cmVhbUxvYWRpbmdEaXNwbGF5OiB1bmtub3duXG4pOiBib29sZWFuID0+ICFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgQm9vbGVhbihzdHJlYW1Mb2FkaW5nRGlzcGxheSlcblxuZXhwb3J0IGNvbnN0IGlzQ3VycmVudFVzZXJNZXNzYWdlID0gKHJvbGU6IENoYXRIaXN0b3J5Um9sZSB8IHVuZGVmaW5lZCwgdXNlcklkOiBzdHJpbmcsIGF1dGhVc2VySWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlcklkID09PSBhdXRoVXNlcklkXG5cbmV4cG9ydCBjb25zdCBpc0Fzc2lzdGFudENoYXRNZXNzYWdlID0gKHJvbGU6IENoYXRIaXN0b3J5Um9sZSB8IHVuZGVmaW5lZCwgdXNlcklkOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlcklkID09PSAnYXNzaXN0YW50J1xuXG5leHBvcnQgY29uc3QgaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZSA9IChpc1N0cmVhbWluZzogYm9vbGVhbiB8IHVuZGVmaW5lZCwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcjogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihpc1N0cmVhbWluZykgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlclxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5ID0gKFxuICBpc0FjdGl2ZVN0cmVhbWluZzogYm9vbGVhbixcbiAgaGFzU3RyZWFtVGV4dDogYm9vbGVhbixcbiAgc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZTogYm9vbGVhblxuKTogYm9vbGVhbiA9PiBpc0FjdGl2ZVN0cmVhbWluZyAmJiBoYXNTdHJlYW1UZXh0ICYmICFzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IgPSAoXG4gIGlzQXNzaXN0YW50OiBib29sZWFuLFxuICBpc0FjdGl2ZVN0cmVhbWluZzogYm9vbGVhbixcbiAgc3RyZWFtQWN0aXZpdHk6IHVua25vd25cbik6IGJvb2xlYW4gPT4gaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgJiYgQm9vbGVhbihzdHJlYW1BY3Rpdml0eSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlID0gKFxuICBpc0NoYW5nZVByb2plY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IHVua25vd25bXSB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4gQm9vbGVhbihpc0NoYW5nZVByb2plY3QgJiYgb3B0aW9ucylcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dNZXNzYWdlQXR0YWNobWVudHNSb3cgPSAoYXR0YWNobWVudENvdW50OiBudW1iZXIpOiBib29sZWFuID0+IGF0dGFjaG1lbnRDb3VudCA+IDBcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlck1lc3NhZ2VUZXh0Qm9keSA9IChwYXJhbXM6IHtcbiAgbWVzc2FnZVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgc2hvd1N0cmVhbWluZ0JvZHk6IGJvb2xlYW5cbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgYXR0YWNobWVudENvdW50OiBudW1iZXJcbn0pOiBib29sZWFuID0+XG4gIEJvb2xlYW4ocGFyYW1zLm1lc3NhZ2VUZXh0IHx8IHBhcmFtcy5zaG93U3RyZWFtaW5nQm9keSkgJiYgIShwYXJhbXMuaXNBc3Npc3RhbnQgJiYgcGFyYW1zLmF0dGFjaG1lbnRDb3VudCA+IDApXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93QXBwcm92YWxBY3Rpb25zID0gKGFwcHJvdmFsOiB7IHBlbmRpbmdfYWN0aW9ucz86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIEJvb2xlYW4oYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucylcblxuZXhwb3J0IGNvbnN0IHNob3VsZEhpZGVFbXB0eVN0cmVhbWluZ0JvZHkgPSAoZGlzcGxheVRleHQ6IHN0cmluZywgaXNTdHJlYW1pbmc6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gICFkaXNwbGF5VGV4dCAmJiAhaXNTdHJlYW1pbmdcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckFzc2lzdGFudEZlZWRiYWNrID0gKHBhcmFtczoge1xuICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBhcHByb3ZhbD86IHVua25vd25cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgb25SZXRyeT86ICgpID0+IHZvaWRcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRXJyb3IgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAhcGFyYW1zLmlzU3RyZWFtaW5nICYmXG4gICghcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgQm9vbGVhbihwYXJhbXMub25SZXRyeSkpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZW5kZXJBc3Npc3RhbnRTdWdnZXN0aW9ucyA9IChwYXJhbXM6IHtcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgYXBwcm92YWw/OiB1bmtub3duXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIHN1Z2dlc3Rpb25zTGVuZ3RoOiBudW1iZXJcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAoIXBhcmFtcy5pc0Vycm9yIHx8IHBhcmFtcy5zdWdnZXN0aW9uc0xlbmd0aCA+IDApXG5cbmV4cG9ydCBjb25zdCBzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMgPSAoXG4gIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICBpc0xhc3RNZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBzdWdnZXN0aW9uc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaXNTdHJlYW1pbmcgfHwgIWlzTGFzdE1lc3NhZ2UgfHwgc3VnZ2VzdGlvbnNEaXNhYmxlZClcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckNyZWF0ZUFnZW50QWN0aW9ucyA9IChwYXJhbXM6IHtcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgYXBwcm92YWw/OiB1bmtub3duXG4gIGFnZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxufSk6IGJvb2xlYW4gPT5cbiAgcGFyYW1zLmlzQXNzaXN0YW50ICYmICFwYXJhbXMuaXNFcnJvciAmJiAhcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXBhcmFtcy5hcHByb3ZhbCAmJiBCb29sZWFuKHBhcmFtcy5hZ2VudElkKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzID0gKHBhcmFtczoge1xuICByb2xlOiBDaGF0SGlzdG9yeVJvbGUgfCB1bmRlZmluZWRcbiAgdXNlcklkOiBzdHJpbmdcbiAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgaXNMYXN0TWVzc2FnZTogYm9vbGVhblxuICB3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW5cbiAgaXNXcml0aW5nOiBib29sZWFuXG59KTogeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiBib29sZWFuOyBpc1N0cmVhbWluZzogYm9vbGVhbiB9ID0+IHtcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSBpc0Fzc2lzdGFudENoYXRNZXNzYWdlKHBhcmFtcy5yb2xlLCBwYXJhbXMudXNlcklkKVxuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID1cbiAgICBpc0Fzc2lzdGFudCAmJiBwYXJhbXMuaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHBhcmFtcy5tZXNzYWdlSWQpXG4gIHJldHVybiB7XG4gICAgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcixcbiAgICBpc1N0cmVhbWluZzogaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJiAocGFyYW1zLndhaXRpbmdSZXNwb25zZSB8fCBwYXJhbXMuaXNXcml0aW5nKSxcbiAgfVxufVxuXG50eXBlIFVzZXJNZXNzYWdlQXR0YWNobWVudHNTb3VyY2UgPSB7XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBzb3VyY2VzPzogdW5rbm93blxufVxuXG5leHBvcnQgY29uc3QgY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzID0gKG1lc3NhZ2U6IFVzZXJNZXNzYWdlQXR0YWNobWVudHNTb3VyY2UgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyID0+IHtcbiAgaWYgKCFtZXNzYWdlKSByZXR1cm4gMFxuICBjb25zdCBhdHRhY2htZW50Q291bnQgPSBBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0YWNobWVudHMpID8gbWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwXG4gIGNvbnN0IHNvdXJjZUNvdW50ID0gQXJyYXkuaXNBcnJheShtZXNzYWdlLnNvdXJjZXMpID8gbWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA6IDBcbiAgcmV0dXJuIGF0dGFjaG1lbnRDb3VudCB8fCBzb3VyY2VDb3VudFxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkSWdub3JlU3VnZ2VzdGlvbkNsaWNrID0gKHN1Z2dlc3Rpb246IHN0cmluZywgYWxyZWFkeVNlbGVjdGVkOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICAhc3VnZ2VzdGlvbj8udHJpbSgpIHx8IGFscmVhZHlTZWxlY3RlZFxuXG5leHBvcnQgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24gPSAoXG4gIGlzRXJyb3I6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIHN1Z2dlc3Rpb246IHN0cmluZyxcbiAgcmV0cnlMYWJlbDogc3RyaW5nXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSByZXRyeUxhYmVsKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UgPSAodXNlck1lc3NhZ2U6IHtcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIHNvdXJjZXM/OiB1bmtub3duXG59KTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKSkgcmV0dXJuIHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gIGlmIChBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLnNvdXJjZXMpKSByZXR1cm4gdXNlck1lc3NhZ2Uuc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdXG4gIHJldHVybiBbXVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkT3Blbk1lc3NhZ2VPcHRpb24gPSAoc2VsZWN0ZWRPcHRpb246IHVua25vd24pOiBib29sZWFuID0+ICFzZWxlY3RlZE9wdGlvblxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEJsb2JTdHJhdGVneSA9IChcbiAgZmlsZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBmaWxlOiB1bmtub3duXG4pOiAncmVtb3RlLXVybCcgfCAnbG9jYWwtZmlsZScgfCBudWxsID0+IHtcbiAgaWYgKGZpbGVVcmwpIHJldHVybiAncmVtb3RlLXVybCdcbiAgaWYgKGZpbGUgaW5zdGFuY2VvZiBGaWxlKSByZXR1cm4gJ2xvY2FsLWZpbGUnXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0RmVlZGJhY2tTZXNzaW9uSWQgPSAobWVzc2FnZUlkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgbWVzc2FnZUlkXG4gICAgLnNwbGl0KCctJylcbiAgICAuZmlsdGVyKHF1ZXN0aW9uSWQgPT4gcXVlc3Rpb25JZCAhPT0gJ2Fuc3dlcicpXG4gICAgLmpvaW4oJy0nKVxuXG5jb25zdCBBVURJT19FWFRFTlNJT05TID0gWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddIGFzIGNvbnN0XG5jb25zdCBBVURJT19UWVBFUyA9IFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9BdHRhY2htZW50ID0gKGF0dGFjaG1lbnQ6IFBpY2s8QXR0YWNobWVudEZpbGUsICd0eXBlJyB8ICduYW1lJz4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuXG4gIHJldHVybiAoXG4gICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICBBVURJT19UWVBFUy5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSBhcyAodHlwZW9mIEFVRElPX1RZUEVTKVtudW1iZXJdKSB8fFxuICAgIEFVRElPX0VYVEVOU0lPTlMuc29tZShleHQgPT4gYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KSlcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3ID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKTogYm9vbGVhbiA9PlxuICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICBCb29sZWFuKGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fCBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlKVxuXG5leHBvcnQgY29uc3QgZmluZExhc3RRdWVzdGlvbklkID0gKG1lc3NhZ2VzOiBBcnJheTx7IGlkPzogc3RyaW5nIH0+KTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGZvciAobGV0IGluZGV4ID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VzW2luZGV4XT8uaWRcbiAgICBpZiAobWVzc2FnZUlkPy5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VJZFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZVJlc2VydmVkVHVyblNwYWNlID0gKGNsaWVudEhlaWdodDogbnVtYmVyLCB0dXJuSGVpZ2h0OiBudW1iZXIsIHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KHZpZXdwb3J0SGVpZ2h0KVxuICByZXR1cm4gTWF0aC5tYXgoMCwgY2xpZW50SGVpZ2h0IC0gdHVybkhlaWdodCAtIG9mZnNldClcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMgPSAoXG4gIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdIHwgdW5kZWZpbmVkLFxuICBpc0Fzc2lzdGFudDogYm9vbGVhbixcbiAgc291cmNlczogdW5rbm93blxuKTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmIChhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGF0dGFjaG1lbnRzXG4gIH1cbiAgaWYgKCFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpKSB7XG4gICAgcmV0dXJuIHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEZpbGVOYW1lID0gKGF0dGFjaG1lbnQ6IFBpY2s8QXR0YWNobWVudEZpbGUsICduYW1lJyB8ICd0eXBlJz4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gIHJldHVybiBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCA9IChcbiAgYXR0YWNobWVudDogUGljazxBdHRhY2htZW50RmlsZSwgJ3VybF9vcmlnaW5hbCcgfCAndXJsX2ZpbGUnIHwgJ3VybF90aHVtYm5haWwnPlxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8IGF0dGFjaG1lbnQudXJsX2ZpbGUgfHwgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTa2lwRW1wdHlDaGF0TGlzdE1lc3NhZ2UgPSAocGFyYW1zOiB7XG4gIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXI6IGJvb2xlYW5cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgYXR0YWNobWVudENvdW50OiBudW1iZXJcbiAgc291cmNlQ291bnQ6IG51bWJlclxuICBtZXNzYWdlVGV4dDogc3RyaW5nXG4gIHByb2plY3ROYW1lPzogc3RyaW5nXG4gIGhhc0FwcHJvdmFsOiBib29sZWFuXG59KTogYm9vbGVhbiA9PiB7XG4gIGlmIChwYXJhbXMuaXNTdHJlYW1pbmdQbGFjZWhvbGRlciB8fCBwYXJhbXMuaXNTdHJlYW1pbmcpIHJldHVybiBmYWxzZVxuICBpZiAocGFyYW1zLmF0dGFjaG1lbnRDb3VudCA+IDAgfHwgcGFyYW1zLnNvdXJjZUNvdW50ID4gMCkgcmV0dXJuIGZhbHNlXG4gIGlmIChwYXJhbXMubWVzc2FnZVRleHQpIHJldHVybiBmYWxzZVxuICBpZiAocGFyYW1zLnByb2plY3ROYW1lKSByZXR1cm4gZmFsc2VcbiAgaWYgKHBhcmFtcy5oYXNBcHByb3ZhbCkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwgPSAod2FzSGVscGZ1bDogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBGZWVkYmFjayB8IG51bGwgPT4ge1xuICBpZiAod2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IHdhc0hlbHBmdWwgPT09IG51bGwpIHJldHVybiBudWxsXG4gIHJldHVybiB3YXNIZWxwZnVsID8gRmVlZGJhY2suVEhVTUJTX1VQIDogRmVlZGJhY2suVEhVTUJTX0RPV05cbn1cblxuZXhwb3J0IGNvbnN0IGNhblJldHJ5QXNzaXN0YW50TWVzc2FnZSA9IChwYXJhbXM6IHtcbiAgaGFzVXNlck1lc3NhZ2VGb3JSZXRyeTogYm9vbGVhblxuICBpc1N0cmVhbWluZzogYm9vbGVhblxuICBpc0Vycm9yOiBib29sZWFuXG4gIGhhc0FwcHJvdmFsOiBib29sZWFuXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gIGlzQ2FuY2VsbGVkPzogYm9vbGVhblxuICB0dXJuSWQ6IHN0cmluZyB8IG51bGxcbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFwYXJhbXMuaGFzVXNlck1lc3NhZ2VGb3JSZXRyeSB8fCBwYXJhbXMuaXNTdHJlYW1pbmcgfHwgcGFyYW1zLmlzRXJyb3IgfHwgcGFyYW1zLmhhc0FwcHJvdmFsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4ocGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgKCFwYXJhbXMuaXNDYW5jZWxsZWQgJiYgcGFyYW1zLnR1cm5JZCkpXG59XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlID0gKFxuICBzY3JvbGxIZWlnaHQ6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjdXJyZW50U3BhY2VySGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGlmIChjdXJyZW50U3BhY2VySGVpZ2h0IDw9IDApIHJldHVybiBjdXJyZW50U3BhY2VySGVpZ2h0XG4gIGNvbnN0IHJlbW92YWJsZSA9IE1hdGgubWF4KDAsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCAtIHNjcm9sbFRvcClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGN1cnJlbnRTcGFjZXJIZWlnaHQgLSByZW1vdmFibGUpXG59XG5cbmV4cG9ydCB0eXBlIFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzID0ge1xuICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCByZWFkU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPSAoKTogU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7fVxuICByZXR1cm4gd2luZG93IGFzIHVua25vd24gYXMgU21vb3RoU3RyZWFtV2luZG93RmxhZ3Ncbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMgPSAoXG4gIGZsYWdzOiBTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyxcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbik6IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICBtYXhDaGFyc1BlckZyYW1lOiBudW1iZXJcbiAgc25hcFRvV29yZEJvdW5kYXJ5OiBib29sZWFuXG4gIHRhcmdldExhZ01zPzogbnVtYmVyXG4gIGFkYXB0VG9CYWNrZW5kUmF0ZT86IGJvb2xlYW5cbiAgdGFyZ2V0QnVmZmVyTXM/OiBudW1iZXJcbiAgbWluQnVmZmVyQ2hhcnM/OiBudW1iZXJcbiAgd2FybXVwTXM/OiBudW1iZXJcbn0gPT4gKHtcbiAgZW5hYmxlZDogaXNTdHJlYW1pbmcsXG4gIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gIC4uLihmbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IGZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogZmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gIC4uLihmbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IGZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogZmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiBmbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbn0pXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCA9IChpc1N0cmVhbWluZzogYm9vbGVhbiwgc3RyZWFtaW5nVGV4dDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogbWVzc2FnZVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyTWVudGlvbklubGluZU5vZGVzID0gKGhhc01lbnRpb25zOiBib29sZWFuLCBtZW50aW9uTm9kZXM6IHVua25vd24pOiBib29sZWFuID0+XG4gIEJvb2xlYW4oaGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQgPSA8VFNvdXJjZXMsIFRIYW5kbGVyPihcbiAgaXNGcm9udGVuZENhbmNlbGxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgc291cmNlczogVFNvdXJjZXMsXG4gIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IFRIYW5kbGVyXG4pOiB7IHNvdXJjZXM6IFRTb3VyY2VzIHwgdW5kZWZpbmVkOyBoYW5kbGVGZWVkYmFjazogVEhhbmRsZXIgfCB1bmRlZmluZWQgfSA9PiAoe1xuICBzb3VyY2VzOiBpc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogc291cmNlcyxcbiAgaGFuZGxlRmVlZGJhY2s6IGlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBoYW5kbGVGZWVkYmFja0NsaWNrLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1pbmdNZXNzYWdlSG9va0lkID0gKGlzU3RyZWFtaW5nOiBib29sZWFuLCBtZXNzYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT5cbiAgaXNTdHJlYW1pbmcgPyBtZXNzYWdlSWQgOiBudWxsXG5cbmV4cG9ydCBjb25zdCBzaG91bGRJbml0aWFsaXplQ2hhdCA9IChhbHJlYWR5SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pOiBib29sZWFuID0+ICFhbHJlYWR5SW5pdGlhbGl6ZWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24gPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiBsb2FkaW5nTWVzc2FnZXNcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24gPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzOiBib29sZWFuLFxuICBxdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsLFxuICBsYXN0UmVzZXJ2ZWRRdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgIWlzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiBCb29sZWFuKHF1ZXN0aW9uSWQpICYmIHF1ZXN0aW9uSWQgIT09IGxhc3RSZXNlcnZlZFF1ZXN0aW9uSWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCA9IChcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuLFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGlzTG9hZGluZ01vcmVNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZVJlZjogYm9vbGVhblxuKTogYm9vbGVhbiA9PiAhaGFzQ29udGFpbmVyIHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZlxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tID0gKFxuICBjb250YWluZXI6IHsgc2Nyb2xsSGVpZ2h0OiBudW1iZXI7IHNjcm9sbFRvcDogbnVtYmVyOyBjbGllbnRIZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PlxuICBjb250YWluZXIgPyBpc0NvbnRhaW5lckF0U2Nyb2xsQm90dG9tKGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGNvbnRhaW5lci5zY3JvbGxUb3AsIGNvbnRhaW5lci5jbGllbnRIZWlnaHQpIDogZmFsc2VcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tID0gKFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1lc3NhZ2VzTGVuZ3RoOiBudW1iZXIsXG4gIGxhc3RTY3JvbGxlZFNlc3Npb25JZDogc3RyaW5nIHwgbnVsbFxuKTogYm9vbGVhbiA9PlxuICAhbG9hZGluZ01lc3NhZ2VzICYmIEJvb2xlYW4oaW5pdGlhbENoYXRJZCkgJiYgbWVzc2FnZXNMZW5ndGggPiAwICYmIGxhc3RTY3JvbGxlZFNlc3Npb25JZCAhPT0gaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzID0gKHdhc0xvYWRpbmc6IGJvb2xlYW4sIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgd2FzTG9hZGluZyAmJiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCA9IChqdXN0RmluaXNoZWRMb2FkaW5nOiBib29sZWFuLCBtZXNzYWdlc0xlbmd0aDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBqdXN0RmluaXNoZWRMb2FkaW5nICYmIG1lc3NhZ2VzTGVuZ3RoID4gMFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQgPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDbGVhclNjcm9sbFJlc3RvcmVXaXRob3V0Q2hhdCA9IChpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiAhaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiA9IChcbiAgc2Vzc2lvbjogeyBzY3JvbGxTZXNzaW9uSWQ/OiBzdHJpbmc7IHNjcm9sbFRvcD86IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGlmICghaW5pdGlhbENoYXRJZCB8fCAhc2Vzc2lvbikgcmV0dXJuIG51bGxcbiAgaWYgKHNlc3Npb24uc2Nyb2xsU2Vzc2lvbklkID09PSBpbml0aWFsQ2hhdElkICYmIHR5cGVvZiBzZXNzaW9uLnNjcm9sbFRvcCA9PT0gJ251bWJlcicgJiYgc2Vzc2lvbi5zY3JvbGxUb3AgPiAwKSB7XG4gICAgcmV0dXJuIHNlc3Npb24uc2Nyb2xsVG9wXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUgPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgcGVuZGluZ1Njcm9sbFRvcDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgcGVuZGluZ1Njcm9sbFRvcCAhPSBudWxsICYmIHBlbmRpbmdTY3JvbGxUb3AgPiAwICYmIGhhc0NvbnRhaW5lclxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UgPSAoXG4gIHByZXZpb3VzRXhwYW5kZWQ6IGJvb2xlYW4sXG4gIGV4cGFuZGVkOiBib29sZWFuLFxuICBoYXNDb250YWluZXI6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gcHJldmlvdXNFeHBhbmRlZCAhPT0gZXhwYW5kZWQgJiYgaGFzQ29udGFpbmVyXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5ID0gKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+XG4gIG1lc3NhZ2VJZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSAoXG4gIGZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IGZvbGxvd1VwPy5hZ2VudElkXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nVGV4dEhvb2tJZCA9IChcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXI6IGJvb2xlYW4sXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsID0+IChpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gbWVzc2FnZUlkIDogbnVsbClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCA9IChpc0Fzc2lzdGFudDogYm9vbGVhbiwgaXNBY3RpdmVTdHJlYW1pbmc6IGJvb2xlYW4sIGlkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgPyBpZCA6ICcnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlID0gKGV4cGFuZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiBCb29sZWFuKGV4cGFuZGVkKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUxhc3RVc2VyTWVzc2FnZUZvckF0dGFjaG1lbnRzID0gPFQgZXh0ZW5kcyB7IHJvbGU/OiBDaGF0SGlzdG9yeVJvbGU7IHVzZXI6IHsgaWQ6IHN0cmluZyB9IH0+KFxuICBtZXNzYWdlczogVFtdLFxuICBhdXRoVXNlcklkOiBzdHJpbmdcbik6IFQgfCB1bmRlZmluZWQgPT5cbiAgbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VySWQudG9TdHJpbmcoKSkuYXQoLTEpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSA9IChcbiAgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50OiBib29sZWFuLFxuICBhZ2VudFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IChpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnRUeXBlKVxuXG5leHBvcnQgdHlwZSBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0ID0ge1xuICBzY3JvbGxUb3A6IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXJcbiAgc2Nyb2xsVGhyZXNob2xkOiBudW1iZXJcbiAgYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgcHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lID0gKGlucHV0OiBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0KSA9PiB7XG4gIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBpc1Njcm9sbGluZ1Vwd2FyZChpbnB1dC5zY3JvbGxUb3AsIGlucHV0Lmxhc3RTY3JvbGxUb3ApXG4gIGNvbnN0IGlzTmVhckJvdHRvbSA9IGlzTmVhclNjcm9sbEJvdHRvbShcbiAgICBpbnB1dC5zY3JvbGxIZWlnaHQsXG4gICAgaW5wdXQuc2Nyb2xsVG9wLFxuICAgIGlucHV0LmNsaWVudEhlaWdodCxcbiAgICBpbnB1dC5zY3JvbGxUaHJlc2hvbGRcbiAgKVxuICBjb25zdCBuZXh0U2Nyb2xsVGhyZXNob2xkID0gcmVzb2x2ZVNjcm9sbE5lYXJCb3R0b21UaHJlc2hvbGQoaW5wdXQuc2Nyb2xsVGhyZXNob2xkLCBpc1Njcm9sbGluZ1VwLCBpc05lYXJCb3R0b20pXG5cbiAgcmV0dXJuIHtcbiAgICBuZXh0U2Nyb2xsVGhyZXNob2xkLFxuICAgIGxhc3RTY3JvbGxUb3A6IGlucHV0LnNjcm9sbFRvcCxcbiAgICBzaG91bGREcmFpblR1cm5TcGFjZTogc2hvdWxkRHJhaW5UdXJuU3BhY2VPblNjcm9sbChpbnB1dC5hbmNob3JlZFR1cm5JZCksXG4gICAgc2hvdWxkU2NoZWR1bGVTY3JvbGxQZXJzaXN0OiBzaG91bGRQZXJzaXN0TWFpYVBhbmVsU2Nyb2xsKGlucHV0LmluaXRpYWxDaGF0SWQsIGlucHV0LnNjcm9sbFRvcCksXG4gICAgc2hvdWxkTm90aWZ5U2Nyb2xsVG9Cb3R0b206IGlzTmVhckJvdHRvbSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0ID0gKHBhcmFtczoge1xuICBjb250YWluZXJUb3A6IG51bWJlclxuICBxdWVzdGlvblRvcDogbnVtYmVyXG4gIGNvbnRlbnRCb3R0b206IG51bWJlclxuICBzY3JvbGxUb3A6IG51bWJlclxufSk6IHsgcXVlc3Rpb25Ub3A6IG51bWJlcjsgdHVybkhlaWdodDogbnVtYmVyIH0gPT4ge1xuICBjb25zdCBxdWVzdGlvblNjcm9sbFRvcCA9IHBhcmFtcy5xdWVzdGlvblRvcCAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIGNvbnN0IGNvbnRlbnRCb3R0b21TY3JvbGwgPSBwYXJhbXMuY29udGVudEJvdHRvbSAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIHJldHVybiB7IHF1ZXN0aW9uVG9wOiBxdWVzdGlvblNjcm9sbFRvcCwgdHVybkhlaWdodDogY29udGVudEJvdHRvbVNjcm9sbCAtIHF1ZXN0aW9uU2Nyb2xsVG9wIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPVxuICB7IGtpbmQ6ICdza2lwLXJlc2VydmF0aW9uJyB9IHwgeyBraW5kOiAncmVzZXJ2ZSc7IHNwYWNlckhlaWdodDogbnVtYmVyOyB0YXJnZXRTY3JvbGxUb3A6IG51bWJlciB9XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPSAocGFyYW1zOiB7XG4gIGN1cnJlbnRTY3JvbGxUb3A6IG51bWJlclxuICB0YXJnZXRTY3JvbGxUb3A6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICB0dXJuSGVpZ2h0OiBudW1iZXJcbn0pOiBSZXNlcnZlVHVyblNwYWNlUGxhbiA9PiB7XG4gIGlmIChzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24ocGFyYW1zLmN1cnJlbnRTY3JvbGxUb3AsIHBhcmFtcy50YXJnZXRTY3JvbGxUb3ApKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ3NraXAtcmVzZXJ2YXRpb24nIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdyZXNlcnZlJyxcbiAgICBzcGFjZXJIZWlnaHQ6IGNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZShwYXJhbXMuY2xpZW50SGVpZ2h0LCBwYXJhbXMudHVybkhlaWdodCwgcGFyYW1zLmNsaWVudEhlaWdodCksXG4gICAgdGFyZ2V0U2Nyb2xsVG9wOiBwYXJhbXMudGFyZ2V0U2Nyb2xsVG9wLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AgPSAoc2Nyb2xsSGVpZ2h0OiBudW1iZXIsIGNsaWVu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
490
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zIiwiZGlzdGFuY2UiLCJhYnMiLCJjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tIiwic2Nyb2xsSGVpZ2h0Iiwic3BhY2VySGVpZ2h0Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwic2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tIiwiZGlzdGFuY2VGcm9tQm90dG9tIiwidGhyZXNob2xkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9ERUZBVUxUX1RIUkVTSE9MRCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9VUF9USFJFU0hPTEQiLCJTQ1JPTExfQVRfQk9UVE9NX1RPTEVSQU5DRV9QWCIsIlNQQUNFUl9IRUlHSFRfRVBTSUxPTl9QWCIsInNob3VsZFNob3dUb3BTY3JvbGxHcmFkaWVudCIsInNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCIsImlzU2Nyb2xsaW5nVXB3YXJkIiwibGFzdFNjcm9sbFRvcCIsImlzTmVhclNjcm9sbEJvdHRvbSIsInJlc29sdmVTY3JvbGxOZWFyQm90dG9tVGhyZXNob2xkIiwiY3VycmVudFRocmVzaG9sZCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiIsImVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MiLCJwcm9ncmVzcyIsInBvdyIsImNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wIiwicXVlc3Rpb25Ub3AiLCJvZmZzZXQiLCJtYXgiLCJzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24iLCJjdXJyZW50U2Nyb2xsVG9wIiwidGFyZ2V0U2Nyb2xsVG9wIiwic2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0IiwiY3VycmVudEhlaWdodCIsIm5leHRIZWlnaHQiLCJjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCIsInR1cm5IZWlnaHQiLCJjdXJyZW50U3BhY2VySGVpZ2h0IiwicmVzZXJ2ZWQiLCJzaG91bGREcmFpblR1cm5TcGFjZU9uU2Nyb2xsIiwiYW5jaG9yZWRUdXJuSWQiLCJzaG91bGRSZWxlYXNlVHVyblNwYWNlIiwiQm9vbGVhbiIsInNob3VsZFBlcnNpc3RNYWlhUGFuZWxTY3JvbGwiLCJpbml0aWFsQ2hhdElkIiwiaXNDb250YWluZXJBdFNjcm9sbEJvdHRvbSIsInRvbGVyYW5jZSIsImlzTmV3Q2hhdE1lc3NhZ2VFdmVudCIsImxhc3RJZCIsInByZXZJZCIsIm1lc3NhZ2VzTGVuZ3RoIiwicHJldkxlbmd0aCIsImhhc0luaXRpYWxVc2VyTWVzc2FnZUluTGlzdCIsIm1lc3NhZ2VzIiwic29tZSIsIm1zZyIsImlkIiwiaXNBcHByb3ZhbENoYXRNZXNzYWdlIiwibWVzc2FnZSIsIl9tZXNzYWdlJGlkIiwic3RhcnRzV2l0aCIsImFwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCIsIm1lc3NhZ2VJZCIsInNob3VsZEF1dG9TY3JvbGxPbk1lc3NhZ2VzQ2hhbmdlIiwicGFyYW1zIiwiaXNOZXdNZXNzYWdlIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiaXNBdEJvdHRvbSIsImlzQXBwcm92YWwiLCJoYXNJbml0aWFsTWVzc2FnZSIsInByZXZNZXNzYWdlc0xlbmd0aCIsInNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0IiwiaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yIiwibGFzdE1lc3NhZ2VJZCIsInNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwic3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJpc0N1cnJlbnRVc2VyTWVzc2FnZSIsInJvbGUiLCJ1c2VySWQiLCJhdXRoVXNlcklkIiwiVVNFUiIsImlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UiLCJBU1NJU1RBTlQiLCJpc0FjdGl2ZVN0cmVhbWluZ1N0YXRlIiwiaXNTdHJlYW1pbmciLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwic2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5IiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0Iiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInNob3VsZFNob3dTdHJlYW1BY3Rpdml0eUluZGljYXRvciIsImlzQXNzaXN0YW50Iiwic3RyZWFtQWN0aXZpdHkiLCJzaG91bGRSZW5kZXJDaGFuZ2VQcm9qZWN0TWVzc2FnZSIsImlzQ2hhbmdlUHJvamVjdCIsIm9wdGlvbnMiLCJzaG91bGRTaG93TWVzc2FnZUF0dGFjaG1lbnRzUm93IiwiYXR0YWNobWVudENvdW50Iiwic2hvdWxkUmVuZGVyTWVzc2FnZVRleHRCb2R5IiwibWVzc2FnZVRleHQiLCJzaG93U3RyZWFtaW5nQm9keSIsInNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMiLCJwZW5kaW5nX2FjdGlvbnMiLCJzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5IiwiZGlzcGxheVRleHQiLCJzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayIsImlzRXJyb3IiLCJtdWx0aXBsZUNob2ljZSIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJvblJldHJ5Iiwic2hvdWxkUmVuZGVyQXNzaXN0YW50U3VnZ2VzdGlvbnMiLCJzdWdnZXN0aW9uc0xlbmd0aCIsInNob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyIsImlzTGFzdE1lc3NhZ2UiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiTUFSS0RPV05fREVDT1JBVElPTiIsImV4dHJhY3RNdWx0aXBsZUNob2ljZVF1ZXN0aW9uIiwidGV4dCIsImxpbmVzIiwic3BsaXQiLCJtYXAiLCJsaW5lIiwicmVwbGFjZSIsInRyaW0iLCJmaWx0ZXIiLCJxdWVzdGlvbiIsIl90b0NvbnN1bWFibGVBcnJheSIsInJldmVyc2UiLCJmaW5kIiwiZW5kc1dpdGgiLCJyZXNvbHZlUGVuZGluZ011bHRpcGxlQ2hvaWNlIiwiX2xhc3QkbXVsdGlwbGVDaG9pY2UiLCJsYXN0IiwidXNlciIsImRpc21pc3NlZE1lc3NhZ2VJZHMiLCJBcnJheSIsImlzQXJyYXkiLCJyZXNvbHZlQW5zd2VyZWRNdWx0aXBsZUNob2ljZXMiLCJhbnN3ZXJzIiwiaGlkZGVuTWVzc2FnZUlkcyIsImZvckVhY2giLCJpbmRleCIsIl9tZXNzYWdlJG11bHRpcGxlQ2hvaSIsIl9yZXBseSRtZXNzYWdlJHRyaW0iLCJfcmVwbHkkbWVzc2FnZSIsInJlcGx5IiwibXVsdGlwbGVDaG9pY2VBbnN3ZXIiLCJfcmVwbHkkbXVsdGlwbGVDaG9pY2UiLCJrZXkiLCJza2lwcGVkIiwib3B0aW9uSW5kZXgiLCJmaW5kSW5kZXgiLCJvcHRpb24iLCJudW1iZXIiLCJkZXNjcmlwdGlvbiIsInJlc29sdmVUdXJuQW5jaG9ySWQiLCJxdWVzdGlvbklkIiwiaXNTYW1lUGVuZGluZ011bHRpcGxlQ2hvaWNlIiwiYSIsImIiLCJzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMiLCJhZ2VudElkIiwicmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzIiwiY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJzb3VyY2VDb3VudCIsInNvdXJjZXMiLCJzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2siLCJzdWdnZXN0aW9uIiwiYWxyZWFkeVNlbGVjdGVkIiwiaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24iLCJyZXRyeUxhYmVsIiwicmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UiLCJ1c2VyTWVzc2FnZSIsInNob3VsZE9wZW5NZXNzYWdlT3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5IiwiZmlsZVVybCIsImZpbGUiLCJGaWxlIiwiZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkIiwiam9pbiIsIkFVRElPX0VYVEVOU0lPTlMiLCJBVURJT19UWVBFUyIsImlzQXVkaW9BdHRhY2htZW50IiwiYXR0YWNobWVudCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0eXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsIm5hbWUiLCJpbmNsdWRlcyIsImV4dCIsImNhbk9wZW5BdHRhY2htZW50UHJldmlldyIsIm9yaWdpbmFsRmlsZSIsInVybF90aHVtYm5haWwiLCJ1cmxfb3JpZ2luYWwiLCJ1cmxfZmlsZSIsImZpbmRMYXN0UXVlc3Rpb25JZCIsIl9tZXNzYWdlcyRpbmRleCIsImNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZSIsInJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMiLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkRmlsZU5hbWUiLCJleHRlbnNpb24iLCJjb25jYXQiLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkVXJsIiwic2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlIiwicHJvamVjdE5hbWUiLCJoYXNBcHByb3ZhbCIsImhhc011bHRpcGxlQ2hvaWNlIiwicmVzb2x2ZURpc2FibGVGZWVkYmFja0Zyb21XYXNIZWxwZnVsIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwiY2FuUmV0cnlBc3Npc3RhbnRNZXNzYWdlIiwiaGFzVXNlck1lc3NhZ2VGb3JSZXRyeSIsImlzQ2FuY2VsbGVkIiwidHVybklkIiwiY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZSIsInJlbW92YWJsZSIsInJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyIsIndpbmRvdyIsImJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMiLCJmbGFncyIsIl9vYmplY3RTcHJlYWQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJyZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCIsInN0cmVhbWluZ1RleHQiLCJzaG91bGRSZW5kZXJNZW50aW9uSW5saW5lTm9kZXMiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsInJlc29sdmVGZWVkYmFja1Byb3BzRm9yQ2FuY2VsbGVkIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImhhbmRsZUZlZWRiYWNrIiwicmVzb2x2ZVN0cmVhbWluZ01lc3NhZ2VIb29rSWQiLCJzaG91bGRJbml0aWFsaXplQ2hhdCIsImFscmVhZHlJbml0aWFsaXplZCIsInNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24iLCJsb2FkaW5nTWVzc2FnZXMiLCJzaG91bGRTY2hlZHVsZVR1cm5TcGFjZVJlc2VydmF0aW9uIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibGFzdFJlc2VydmVkUXVlc3Rpb25JZCIsInNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCIsImhhc0NvbnRhaW5lciIsImlzTG9hZGluZ01vcmVSZWYiLCJyZXNvbHZlQ29udGFpbmVyQXRCb3R0b20iLCJjb250YWluZXIiLCJzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbSIsImxhc3RTY3JvbGxlZFNlc3Npb25JZCIsImRldGVjdEp1c3RGaW5pc2hlZExvYWRpbmdNZXNzYWdlcyIsIndhc0xvYWRpbmciLCJzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCIsImp1c3RGaW5pc2hlZExvYWRpbmciLCJzaG91bGRVcGRhdGVTY3JvbGxBZmZvcmRhbmNlc09uTG9hZEVuZCIsInNob3VsZENsZWFyU2Nyb2xsUmVzdG9yZVdpdGhvdXRDaGF0IiwicmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiIsInNlc3Npb24iLCJzY3JvbGxTZXNzaW9uSWQiLCJzaG91bGRBcHBseVBlbmRpbmdTY3JvbGxSZXN0b3JlIiwicGVuZGluZ1Njcm9sbFRvcCIsInNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlIiwicHJldmlvdXNFeHBhbmRlZCIsImV4cGFuZGVkIiwicmVzb2x2ZU1lc3NhZ2VMaXN0SXRlbUtleSIsInJlc29sdmVDcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiZm9sbG93VXAiLCJyZXNvbHZlU3RyZWFtaW5nVGV4dEhvb2tJZCIsInJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCIsInJlc29sdmVTY3JvbGxPblBhcmVudE1vZGUiLCJyZXNvbHZlTGFzdFVzZXJNZXNzYWdlRm9yQXR0YWNobWVudHMiLCJ0b1N0cmluZyIsImF0IiwicmVzb2x2ZVN1Z2dlc3Rpb25BbmFseXRpY3NBZ2VudFR5cGUiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhZ2VudFR5cGUiLCJwcm9jZXNzQ2hhdE1lc3NhZ2VzU2Nyb2xsRnJhbWUiLCJpbnB1dCIsInNjcm9sbFRocmVzaG9sZCIsIm5leHRTY3JvbGxUaHJlc2hvbGQiLCJzaG91bGREcmFpblR1cm5TcGFjZSIsInNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCIsInNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tIiwiY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0IiwicXVlc3Rpb25TY3JvbGxUb3AiLCJjb250YWluZXJUb3AiLCJjb250ZW50Qm90dG9tU2Nyb2xsIiwiY29udGVudEJvdHRvbSIsInJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbiIsImtpbmQiLCJyZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdEhpc3RvcnlSb2xlLCBNdWx0aXBsZUNob2ljZSwgTXVsdGlwbGVDaG9pY2VBbnN3ZXIgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHR5cGUgeyBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VNdWx0aXBsZUNob2ljZVN0b3JlJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5cbmV4cG9ydCBjb25zdCB0dXJuQW5jaG9yT2Zmc2V0ID0gKHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5taW4odmlld3BvcnRIZWlnaHQgKiAwLjE4LCAyMDApXG5cbmV4cG9ydCBjb25zdCBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyA9IDYwMFxuZXhwb3J0IGNvbnN0IFRVUk5fU0NST0xMX01BWF9EVVJBVElPTl9NUyA9IDgwMFxuZXhwb3J0IGNvbnN0IFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFggPSAxMjAwXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVHVyblNjcm9sbER1cmF0aW9uTXMgPSAoZGlzdGFuY2U6IG51bWJlcik6IG51bWJlciA9PlxuICBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyArXG4gIChUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMgLSBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUykgKlxuICAgIE1hdGgubWluKDEsIE1hdGguYWJzKGRpc3RhbmNlKSAvIFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFgpXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tID0gKFxuICBzY3JvbGxIZWlnaHQ6IG51bWJlcixcbiAgc3BhY2VySGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuKTogbnVtYmVyID0+IHNjcm9sbEhlaWdodCAtIHNwYWNlckhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tID0gKGRpc3RhbmNlRnJvbUJvdHRvbTogbnVtYmVyLCB0aHJlc2hvbGQgPSA1MCk6IGJvb2xlYW4gPT5cbiAgZGlzdGFuY2VGcm9tQm90dG9tID4gdGhyZXNob2xkXG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfR1JBRElFTlRfVEhSRVNIT0xEX1BYID0gMVxuZXhwb3J0IGNvbnN0IFNDUk9MTF9ORUFSX0JPVFRPTV9ERUZBVUxUX1RIUkVTSE9MRCA9IDM5XG5leHBvcnQgY29uc3QgU0NST0xMX05FQVJfQk9UVE9NX1VQX1RIUkVTSE9MRCA9IDE1XG5leHBvcnQgY29uc3QgU0NST0xMX0FUX0JPVFRPTV9UT0xFUkFOQ0VfUFggPSAxMDBcbmV4cG9ydCBjb25zdCBTUEFDRVJfSEVJR0hUX0VQU0lMT05fUFggPSAxXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93VG9wU2Nyb2xsR3JhZGllbnQgPSAoc2Nyb2xsVG9wOiBudW1iZXIsIHRocmVzaG9sZCA9IFNDUk9MTF9HUkFESUVOVF9USFJFU0hPTERfUFgpOiBib29sZWFuID0+XG4gIHNjcm9sbFRvcCA+IHRocmVzaG9sZFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50ID0gKFxuICBkaXN0YW5jZUZyb21Cb3R0b206IG51bWJlcixcbiAgdGhyZXNob2xkID0gU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWFxuKTogYm9vbGVhbiA9PiBkaXN0YW5jZUZyb21Cb3R0b20gPiB0aHJlc2hvbGRcblxuZXhwb3J0IGNvbnN0IGlzU2Nyb2xsaW5nVXB3YXJkID0gKHNjcm9sbFRvcDogbnVtYmVyLCBsYXN0U2Nyb2xsVG9wOiBudW1iZXIpOiBib29sZWFuID0+IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BcblxuZXhwb3J0IGNvbnN0IGlzTmVhclNjcm9sbEJvdHRvbSA9IChcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjbGllbnRIZWlnaHQ6IG51bWJlcixcbiAgdGhyZXNob2xkOiBudW1iZXJcbik6IGJvb2xlYW4gPT4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgdGhyZXNob2xkXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsTmVhckJvdHRvbVRocmVzaG9sZCA9IChcbiAgY3VycmVudFRocmVzaG9sZDogbnVtYmVyLFxuICBpc1Njcm9sbGluZ1VwOiBib29sZWFuLFxuICBpc05lYXJCb3R0b206IGJvb2xlYW5cbik6IG51bWJlciA9PiB7XG4gIGlmIChpc05lYXJCb3R0b20pIHJldHVybiBTQ1JPTExfTkVBUl9CT1RUT01fREVGQVVMVF9USFJFU0hPTERcbiAgaWYgKGlzU2Nyb2xsaW5nVXApIHJldHVybiBTQ1JPTExfTkVBUl9CT1RUT01fVVBfVEhSRVNIT0xEXG4gIHJldHVybiBjdXJyZW50VGhyZXNob2xkXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiA9IChkaXN0YW5jZTogbnVtYmVyKTogYm9vbGVhbiA9PiBNYXRoLmFicyhkaXN0YW5jZSkgPCAxXG5cbmV4cG9ydCBjb25zdCBlYXNlT3V0RXhwb1Njcm9sbFByb2dyZXNzID0gKHByb2dyZXNzOiBudW1iZXIpOiBudW1iZXIgPT4gKHByb2dyZXNzID09PSAxID8gMSA6IDEgLSAyICoqICgtMTIgKiBwcm9ncmVzcykpXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVHVyblNjcm9sbFRhcmdldFRvcCA9IChxdWVzdGlvblRvcDogbnVtYmVyLCB2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldCh2aWV3cG9ydEhlaWdodClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIHF1ZXN0aW9uVG9wIC0gb2Zmc2V0KVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcFR1cm5TcGFjZVJlc2VydmF0aW9uID0gKGN1cnJlbnRTY3JvbGxUb3A6IG51bWJlciwgdGFyZ2V0U2Nyb2xsVG9wOiBudW1iZXIpOiBib29sZWFuID0+XG4gIHRhcmdldFNjcm9sbFRvcCA8PSBjdXJyZW50U2Nyb2xsVG9wXG5cbmV4cG9ydCBjb25zdCBzaG91bGRVcGRhdGVTcGFjZXJIZWlnaHQgPSAoY3VycmVudEhlaWdodDogbnVtYmVyLCBuZXh0SGVpZ2h0OiBudW1iZXIpOiBib29sZWFuID0+XG4gIE1hdGguYWJzKGN1cnJlbnRIZWlnaHQgLSBuZXh0SGVpZ2h0KSA+PSBTUEFDRVJfSEVJR0hUX0VQU0lMT05fUFhcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVTeW5jZWRUdXJuU3BhY2VySGVpZ2h0ID0gKFxuICBjbGllbnRIZWlnaHQ6IG51bWJlcixcbiAgdHVybkhlaWdodDogbnVtYmVyLFxuICBjdXJyZW50U3BhY2VySGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQoY2xpZW50SGVpZ2h0KVxuICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIGNsaWVudEhlaWdodCAtIHR1cm5IZWlnaHQgLSBvZmZzZXQpXG4gIHJldHVybiBNYXRoLm1pbihjdXJyZW50U3BhY2VySGVpZ2h0LCByZXNlcnZlZClcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZERyYWluVHVyblNwYWNlT25TY3JvbGwgPSAoYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuID0+ICFhbmNob3JlZFR1cm5JZFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVsZWFzZVR1cm5TcGFjZSA9IChhbmNob3JlZFR1cm5JZDogc3RyaW5nIHwgbnVsbCwgc3BhY2VySGVpZ2h0OiBudW1iZXIpOiBib29sZWFuID0+XG4gIEJvb2xlYW4oYW5jaG9yZWRUdXJuSWQpIHx8IHNwYWNlckhlaWdodCA+IDBcblxuZXhwb3J0IGNvbnN0IHNob3VsZFBlcnNpc3RNYWlhUGFuZWxTY3JvbGwgPSAoaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgc2Nyb2xsVG9wOiBudW1iZXIpOiBib29sZWFuID0+XG4gIEJvb2xlYW4oaW5pdGlhbENoYXRJZCkgJiYgc2Nyb2xsVG9wID4gMFxuXG5leHBvcnQgY29uc3QgaXNDb250YWluZXJBdFNjcm9sbEJvdHRvbSA9IChcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjbGllbnRIZWlnaHQ6IG51bWJlcixcbiAgdG9sZXJhbmNlID0gU0NST0xMX0FUX0JPVFRPTV9UT0xFUkFOQ0VfUFhcbik6IGJvb2xlYW4gPT4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIDw9IGNsaWVudEhlaWdodCArIHRvbGVyYW5jZVxuXG5leHBvcnQgY29uc3QgaXNOZXdDaGF0TWVzc2FnZUV2ZW50ID0gKFxuICBsYXN0SWQ6IHN0cmluZyB8IG51bGwsXG4gIHByZXZJZDogc3RyaW5nIHwgbnVsbCxcbiAgbWVzc2FnZXNMZW5ndGg6IG51bWJlcixcbiAgcHJldkxlbmd0aDogbnVtYmVyXG4pOiBib29sZWFuID0+IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzTGVuZ3RoICE9PSBwcmV2TGVuZ3RoXG5cbmV4cG9ydCBjb25zdCBoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QgPSAobWVzc2FnZXM6IEFycmF5PHsgaWQ/OiBzdHJpbmcgfT4pOiBib29sZWFuID0+XG4gIG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcblxuZXhwb3J0IGNvbnN0IGlzQXBwcm92YWxDaGF0TWVzc2FnZSA9IChtZXNzYWdlOiB7IGlkPzogc3RyaW5nOyBhcHByb3ZhbD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIEJvb2xlYW4obWVzc2FnZSAmJiAobWVzc2FnZS5pZD8uc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgbWVzc2FnZS5hcHByb3ZhbCkpXG5cbmV4cG9ydCBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb25DaGF0TWVzc2FnZUlkID0gKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKG1lc3NhZ2VJZD8uc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IG1lc3NhZ2VJZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSA9IChwYXJhbXM6IHtcbiAgaXNOZXdNZXNzYWdlOiBib29sZWFuXG4gIGFuY2hvcmVkVHVybklkOiBzdHJpbmcgfCBudWxsXG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhblxuICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgaXNBdEJvdHRvbTogYm9vbGVhblxuICBpc0Fuc3dlck9yUXVlc3Rpb246IGJvb2xlYW5cbiAgaXNBcHByb3ZhbDogYm9vbGVhblxuICBoYXNJbml0aWFsTWVzc2FnZTogYm9vbGVhblxuICBtZXNzYWdlc0xlbmd0aDogbnVtYmVyXG4gIHByZXZNZXNzYWdlc0xlbmd0aDogbnVtYmVyXG59KTogJ3Njcm9sbCcgfCAnc3luYy10dXJuJyB8ICdhZmZvcmRhbmNlcy1vbmx5JyA9PiB7XG4gIGlmICghcGFyYW1zLmlzTmV3TWVzc2FnZSkgcmV0dXJuICdhZmZvcmRhbmNlcy1vbmx5J1xuICBpZiAocGFyYW1zLmFuY2hvcmVkVHVybklkKSByZXR1cm4gJ3N5bmMtdHVybidcbiAgaWYgKHBhcmFtcy53YWl0aW5nUmVzcG9uc2UgfHwgcGFyYW1zLmlzV3JpdGluZykgcmV0dXJuICdhZmZvcmRhbmNlcy1vbmx5J1xuICBpZiAocGFyYW1zLmlzQW5zd2VyT3JRdWVzdGlvbiAmJiBwYXJhbXMuaXNBdEJvdHRvbSkgcmV0dXJuICdzY3JvbGwnXG4gIGlmIChcbiAgICAhcGFyYW1zLmlzQW5zd2VyT3JRdWVzdGlvbiAmJlxuICAgICFwYXJhbXMuaXNBcHByb3ZhbCAmJlxuICAgICFwYXJhbXMuaGFzSW5pdGlhbE1lc3NhZ2UgJiZcbiAgICBwYXJhbXMubWVzc2FnZXNMZW5ndGggPiBwYXJhbXMucHJldk1lc3NhZ2VzTGVuZ3RoXG4gICkge1xuICAgIHJldHVybiAnc2Nyb2xsJ1xuICB9XG4gIHJldHVybiAnYWZmb3JkYW5jZXMtb25seSdcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0ID0gKHdhaXRpbmdSZXNwb25zZTogYm9vbGVhbiwgaXNXcml0aW5nOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICB3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nXG5cbmV4cG9ydCBjb25zdCBoYXNNZXNzYWdlTGV2ZWxTdHJlYW1JbmRpY2F0b3IgPSAoXG4gIGxhc3RNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuLFxuICBpc1dyaXRpbmc6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gQm9vbGVhbihsYXN0TWVzc2FnZUlkICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobGFzdE1lc3NhZ2VJZCkgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd0dsb2JhbFN0cmVhbUxvYWRpbmdJbmRpY2F0b3IgPSAoXG4gIGhhc01lc3NhZ2VMZXZlbEluZGljYXRvcjogYm9vbGVhbixcbiAgc3RyZWFtTG9hZGluZ0Rpc3BsYXk6IHVua25vd25cbik6IGJvb2xlYW4gPT4gIWhhc01lc3NhZ2VMZXZlbEluZGljYXRvciAmJiBCb29sZWFuKHN0cmVhbUxvYWRpbmdEaXNwbGF5KVxuXG5leHBvcnQgY29uc3QgaXNDdXJyZW50VXNlck1lc3NhZ2UgPSAocm9sZTogQ2hhdEhpc3RvcnlSb2xlIHwgdW5kZWZpbmVkLCB1c2VySWQ6IHN0cmluZywgYXV0aFVzZXJJZDogc3RyaW5nKTogYm9vbGVhbiA9PlxuICByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VySWQgPT09IGF1dGhVc2VySWRcblxuZXhwb3J0IGNvbnN0IGlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UgPSAocm9sZTogQ2hhdEhpc3RvcnlSb2xlIHwgdW5kZWZpbmVkLCB1c2VySWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VySWQgPT09ICdhc3Npc3RhbnQnXG5cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZ1N0YXRlID0gKGlzU3RyZWFtaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkLCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGlzU3RyZWFtaW5nKSB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93U3RyZWFtaW5nTWVzc2FnZUJvZHkgPSAoXG4gIGlzQWN0aXZlU3RyZWFtaW5nOiBib29sZWFuLFxuICBoYXNTdHJlYW1UZXh0OiBib29sZWFuLFxuICBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lOiBib29sZWFuXG4pOiBib29sZWFuID0+IGlzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHQgJiYgIXN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmVcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dTdHJlYW1BY3Rpdml0eUluZGljYXRvciA9IChcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW4sXG4gIGlzQWN0aXZlU3RyZWFtaW5nOiBib29sZWFuLFxuICBzdHJlYW1BY3Rpdml0eTogdW5rbm93blxuKTogYm9vbGVhbiA9PiBpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiBCb29sZWFuKHN0cmVhbUFjdGl2aXR5KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyQ2hhbmdlUHJvamVjdE1lc3NhZ2UgPSAoXG4gIGlzQ2hhbmdlUHJvamVjdDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogdW5rbm93bltdIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PiBCb29sZWFuKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyA9IChhdHRhY2htZW50Q291bnQ6IG51bWJlcik6IGJvb2xlYW4gPT4gYXR0YWNobWVudENvdW50ID4gMFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyTWVzc2FnZVRleHRCb2R5ID0gKHBhcmFtczoge1xuICBtZXNzYWdlVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBzaG93U3RyZWFtaW5nQm9keTogYm9vbGVhblxuICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICBhdHRhY2htZW50Q291bnQ6IG51bWJlclxufSk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihwYXJhbXMubWVzc2FnZVRleHQgfHwgcGFyYW1zLnNob3dTdHJlYW1pbmdCb2R5KSAmJiAhKHBhcmFtcy5pc0Fzc2lzdGFudCAmJiBwYXJhbXMuYXR0YWNobWVudENvdW50ID4gMClcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMgPSAoYXBwcm92YWw6IHsgcGVuZGluZ19hY3Rpb25zPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihhcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkSGlkZUVtcHR5U3RyZWFtaW5nQm9keSA9IChkaXNwbGF5VGV4dDogc3RyaW5nLCBpc1N0cmVhbWluZzogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgIWRpc3BsYXlUZXh0ICYmICFpc1N0cmVhbWluZ1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyQXNzaXN0YW50RmVlZGJhY2sgPSAocGFyYW1zOiB7XG4gIGlzQXNzaXN0YW50OiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGFwcHJvdmFsPzogdW5rbm93blxuICBtdWx0aXBsZUNob2ljZT86IHVua25vd25cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgb25SZXRyeT86ICgpID0+IHZvaWRcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRXJyb3IgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAhcGFyYW1zLm11bHRpcGxlQ2hvaWNlICYmXG4gICFwYXJhbXMuaXNTdHJlYW1pbmcgJiZcbiAgKCFwYXJhbXMuaXNGcm9udGVuZENhbmNlbGxlZCB8fCBCb29sZWFuKHBhcmFtcy5vblJldHJ5KSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckFzc2lzdGFudFN1Z2dlc3Rpb25zID0gKHBhcmFtczoge1xuICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICBhcHByb3ZhbD86IHVua25vd25cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgc3VnZ2VzdGlvbnNMZW5ndGg6IG51bWJlclxuICBtdWx0aXBsZUNob2ljZT86IHVua25vd25cbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAvLyBVbmEgcHJlZ3VudGEgYmxvcXVlYW50ZSAobXVsdGlwbGVDaG9pY2UpIG1hbmRhOiBlbCBiYWNrZW5kIG51bmNhIG1hbmRhIGxhcyBkb3MsIHBlcm8gc2kgbGxlZ2FyYW5cbiAgLy8ganVudGFzIG5vIHNlIG11ZXN0cmFuIHN1Z2VyZW5jaWFzIG9wY2lvbmFsZXMgYWwgbGFkbyBkZSB1bmEgZGVjaXNpw7NuIHBlbmRpZW50ZS5cbiAgIXBhcmFtcy5tdWx0aXBsZUNob2ljZSAmJlxuICAoIXBhcmFtcy5pc0Vycm9yIHx8IHBhcmFtcy5zdWdnZXN0aW9uc0xlbmd0aCA+IDApXG5cbmV4cG9ydCBjb25zdCBzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMgPSAoXG4gIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICBpc0xhc3RNZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBzdWdnZXN0aW9uc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaXNTdHJlYW1pbmcgfHwgIWlzTGFzdE1lc3NhZ2UgfHwgc3VnZ2VzdGlvbnNEaXNhYmxlZClcblxudHlwZSBQZW5kaW5nTXVsdGlwbGVDaG9pY2VNZXNzYWdlID0ge1xuICBpZDogc3RyaW5nXG4gIG1lc3NhZ2U/OiBzdHJpbmdcbiAgcm9sZT86IENoYXRIaXN0b3J5Um9sZVxuICB1c2VyOiB7IGlkOiBzdHJpbmcgfVxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICBhcHByb3ZhbD86IHVua25vd25cbiAgbXVsdGlwbGVDaG9pY2U/OiBNdWx0aXBsZUNob2ljZSB8IG51bGxcbn1cblxuY29uc3QgTUFSS0RPV05fREVDT1JBVElPTiA9IC8oXFwqXFwqfF9ffGB8XiMrXFxzKnxeXFxzKig/OlstKl18XFxkK1suKV0pXFxzKykvZ21cblxuLyoqXG4gKiBMYSBwcmVndW50YSBlcyBsYSDDumx0aW1hIGzDrW5lYSBkZWwgbWVuc2FqZSBxdWUgdGVybWluYSBlbiBcIj9cIi4gRWwgYmFja2VuZCBtYW5kYSBsYSBwcm9zYSB5IGxhcyBvcGNpb25lc1xuICogcG9yIHNlcGFyYWRvLCBzaW4gbWFyY2FyIGN1w6FsIGVzIGxhIHByZWd1bnRhOyBzaSBubyBoYXkgbmluZ3VuYSwgZWwgdMOtdHVsbyBjYWUgYWwgdGV4dG8gZ2Vuw6lyaWNvLlxuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdE11bHRpcGxlQ2hvaWNlUXVlc3Rpb24gPSAodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGxpbmVzID0gKHRleHQgPz8gJycpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoTUFSS0RPV05fREVDT1JBVElPTiwgJycpLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gIGNvbnN0IHF1ZXN0aW9uID0gWy4uLmxpbmVzXS5yZXZlcnNlKCkuZmluZChsaW5lID0+IGxpbmUuZW5kc1dpdGgoJz8nKSlcbiAgcmV0dXJuIHF1ZXN0aW9uID8/IG51bGxcbn1cblxuLyoqIExhIGNhcmQgdml2ZSBzb2JyZSBlbCBpbnB1dDogc29sbyBhcGxpY2EgYWwgw7psdGltbyBtZW5zYWplLCBjdWFuZG8gdGVybWluw7MgZGUgbGxlZ2FyIHkgbmFkaWUgbGEgY2VycsOzLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVQZW5kaW5nTXVsdGlwbGVDaG9pY2UgPSAocGFyYW1zOiB7XG4gIG1lc3NhZ2VzOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2VNZXNzYWdlW11cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgZGlzbWlzc2VkTWVzc2FnZUlkczogUmVjb3JkPHN0cmluZywgdHJ1ZT5cbn0pOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfCBudWxsID0+IHtcbiAgaWYgKHBhcmFtcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgY29uc3QgbGFzdCA9IHBhcmFtcy5tZXNzYWdlc1twYXJhbXMubWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgaWYgKCFsYXN0IHx8ICFpc0Fzc2lzdGFudENoYXRNZXNzYWdlKGxhc3Qucm9sZSwgbGFzdC51c2VyLmlkKSkgcmV0dXJuIG51bGxcbiAgaWYgKGxhc3QuaXNFcnJvciB8fCBsYXN0LmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgbGFzdC5hcHByb3ZhbCkgcmV0dXJuIG51bGxcbiAgaWYgKHBhcmFtcy5kaXNtaXNzZWRNZXNzYWdlSWRzW2xhc3QuaWRdKSByZXR1cm4gbnVsbFxuICBjb25zdCBvcHRpb25zID0gbGFzdC5tdWx0aXBsZUNob2ljZT8ub3B0aW9uc1xuICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbFxuICByZXR1cm4geyBtZXNzYWdlSWQ6IGxhc3QuaWQsIHF1ZXN0aW9uOiBleHRyYWN0TXVsdGlwbGVDaG9pY2VRdWVzdGlvbihsYXN0Lm1lc3NhZ2UpLCBvcHRpb25zIH1cbn1cblxuLyoqIExvIHF1ZSBlbGlnacOzIGVsIHVzdWFyaW8sIHRhbCBjb21vIGxvIG11ZXN0cmEgbGEgY2FyZCByZXN1ZWx0YS4gYG51bWJlcmAgZXMgbnVsbCBzaSBubyBlbGlnacOzIHVuYSBvcGNpw7NuLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlciA9IHtcbiAgbnVtYmVyOiBudW1iZXIgfCBudWxsXG4gIHRleHQ6IHN0cmluZ1xuICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGxcbiAgc2tpcHBlZD86IGJvb2xlYW5cbn1cblxudHlwZSBBbnN3ZXJlZE11bHRpcGxlQ2hvaWNlTWVzc2FnZSA9IFBlbmRpbmdNdWx0aXBsZUNob2ljZU1lc3NhZ2UgJiB7XG4gIG11bHRpcGxlQ2hvaWNlQW5zd2VyPzogTXVsdGlwbGVDaG9pY2VBbnN3ZXIgfCBudWxsXG59XG5cbi8qKlxuICogVW5hIGNhcmQgcXVlZGEgcmVzdWVsdGEgY3VhbmRvIGVsIG1lbnNhamUgc2lndWllbnRlIGVzIGRlbCB1c3VhcmlvIHkgdmllbmUgbWFyY2FkbyBjb21vIHN1IHJlc3B1ZXN0YVxuICogKGxvIG1hcmNhIGVsIGZyb250IGFsIGVudmlhciB5IGxvIGRldnVlbHZlIGVsIGhpc3RvcmlhbCkuIEVzYSByZXNwdWVzdGEgc2UgZGlidWphIGRlbnRybyBkZSBsYSBjYXJkIGRlbFxuICogYXNpc3RlbnRlIHkgbGEgYnVyYnVqYSBkZWwgdXN1YXJpbyBubyBzZSBtdWVzdHJhLlxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzID0gKFxuICBtZXNzYWdlczogQW5zd2VyZWRNdWx0aXBsZUNob2ljZU1lc3NhZ2VbXVxuKToge1xuICBhbnN3ZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyPlxuICBoaWRkZW5NZXNzYWdlSWRzOiBSZWNvcmQ8c3RyaW5nLCB0cnVlPlxufSA9PiB7XG4gIGNvbnN0IGFuc3dlcnM6IFJlY29yZDxzdHJpbmcsIFJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXI+ID0ge31cbiAgY29uc3QgaGlkZGVuTWVzc2FnZUlkczogUmVjb3JkPHN0cmluZywgdHJ1ZT4gPSB7fVxuICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXNzYWdlLm11bHRpcGxlQ2hvaWNlPy5vcHRpb25zXG4gICAgY29uc3QgcmVwbHkgPSBtZXNzYWdlc1tpbmRleCArIDFdXG4gICAgaWYgKCFvcHRpb25zPy5sZW5ndGggfHwgIWlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UobWVzc2FnZS5yb2xlLCBtZXNzYWdlLnVzZXIuaWQpKSByZXR1cm5cbiAgICBpZiAoIXJlcGx5Py5tdWx0aXBsZUNob2ljZUFuc3dlciB8fCBpc0Fzc2lzdGFudENoYXRNZXNzYWdlKHJlcGx5LnJvbGUsIHJlcGx5LnVzZXIuaWQpKSByZXR1cm5cbiAgICBjb25zdCB7IGtleSwgc2tpcHBlZCB9ID0gcmVwbHkubXVsdGlwbGVDaG9pY2VBbnN3ZXJcbiAgICBjb25zdCBvcHRpb25JbmRleCA9IGtleSA9PSBudWxsID8gLTEgOiBvcHRpb25zLmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLmtleSA9PT0ga2V5KVxuICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbb3B0aW9uSW5kZXhdXG4gICAgaWYgKHNraXBwZWQpIGFuc3dlcnNbbWVzc2FnZS5pZF0gPSB7IG51bWJlcjogbnVsbCwgdGV4dDogJycsIHNraXBwZWQ6IHRydWUgfVxuICAgIGVsc2UgaWYgKG9wdGlvbilcbiAgICAgIGFuc3dlcnNbbWVzc2FnZS5pZF0gPSB7IG51bWJlcjogb3B0aW9uSW5kZXggKyAxLCB0ZXh0OiBvcHRpb24udGV4dCwgZGVzY3JpcHRpb246IG9wdGlvbi5kZXNjcmlwdGlvbiB9XG4gICAgZWxzZSBhbnN3ZXJzW21lc3NhZ2UuaWRdID0geyBudW1iZXI6IG51bGwsIHRleHQ6IHJlcGx5Lm1lc3NhZ2U/LnRyaW0oKSA/PyAnJyB9XG4gICAgaGlkZGVuTWVzc2FnZUlkc1tyZXBseS5pZF0gPSB0cnVlXG4gIH0pXG4gIHJldHVybiB7IGFuc3dlcnMsIGhpZGRlbk1lc3NhZ2VJZHMgfVxufVxuXG4vKiogU2kgbGEgw7psdGltYSBwcmVndW50YSBlcyB1bmEgcmVzcHVlc3RhIGRlIGNhcmQgKG9jdWx0YSksIGVsIHR1cm5vIHNlIGFuY2xhIGVuIGxhIGNhcmQgcmVzdWVsdGEuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZVR1cm5BbmNob3JJZCA9IChcbiAgbWVzc2FnZXM6IHsgaWQ6IHN0cmluZyB9W10sXG4gIHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwsXG4gIGhpZGRlbk1lc3NhZ2VJZHM6IFJlY29yZDxzdHJpbmcsIHRydWU+XG4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCFxdWVzdGlvbklkIHx8ICFoaWRkZW5NZXNzYWdlSWRzW3F1ZXN0aW9uSWRdKSByZXR1cm4gcXVlc3Rpb25JZFxuICBjb25zdCBpbmRleCA9IG1lc3NhZ2VzLmZpbmRJbmRleChtZXNzYWdlID0+IG1lc3NhZ2UuaWQgPT09IHF1ZXN0aW9uSWQpXG4gIHJldHVybiBpbmRleCA+IDAgPyBtZXNzYWdlc1tpbmRleCAtIDFdLmlkIDogcXVlc3Rpb25JZFxufVxuXG5leHBvcnQgY29uc3QgaXNTYW1lUGVuZGluZ011bHRpcGxlQ2hvaWNlID0gKFxuICBhOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfCBudWxsLFxuICBiOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfCBudWxsXG4pOiBib29sZWFuID0+IGE/Lm1lc3NhZ2VJZCA9PT0gYj8ubWVzc2FnZUlkICYmIGE/LnF1ZXN0aW9uID09PSBiPy5xdWVzdGlvbiAmJiBhPy5vcHRpb25zID09PSBiPy5vcHRpb25zXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMgPSAocGFyYW1zOiB7XG4gIGlzQXNzaXN0YW50OiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gIGFwcHJvdmFsPzogdW5rbm93blxuICBhZ2VudElkOiBzdHJpbmcgfCB1bmRlZmluZWRcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJiAhcGFyYW1zLmlzRXJyb3IgJiYgIXBhcmFtcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwYXJhbXMuYXBwcm92YWwgJiYgQm9vbGVhbihwYXJhbXMuYWdlbnRJZClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVDaGF0TGlzdEl0ZW1TdHJlYW1pbmdGbGFncyA9IChwYXJhbXM6IHtcbiAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlIHwgdW5kZWZpbmVkXG4gIHVzZXJJZDogc3RyaW5nXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIGlzTGFzdE1lc3NhZ2U6IGJvb2xlYW5cbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuXG4gIGlzV3JpdGluZzogYm9vbGVhblxufSk6IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcjogYm9vbGVhbjsgaXNTdHJlYW1pbmc6IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gaXNBc3Npc3RhbnRDaGF0TWVzc2FnZShwYXJhbXMucm9sZSwgcGFyYW1zLnVzZXJJZClcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgaXNBc3Npc3RhbnQgJiYgcGFyYW1zLmlzTGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChwYXJhbXMubWVzc2FnZUlkKVxuICByZXR1cm4ge1xuICAgIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsXG4gICAgaXNTdHJlYW1pbmc6IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiYgKHBhcmFtcy53YWl0aW5nUmVzcG9uc2UgfHwgcGFyYW1zLmlzV3JpdGluZyksXG4gIH1cbn1cblxudHlwZSBVc2VyTWVzc2FnZUF0dGFjaG1lbnRzU291cmNlID0ge1xuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgc291cmNlcz86IHVua25vd25cbn1cblxuZXhwb3J0IGNvbnN0IGNvdW50VXNlck1lc3NhZ2VBdHRhY2htZW50cyA9IChtZXNzYWdlOiBVc2VyTWVzc2FnZUF0dGFjaG1lbnRzU291cmNlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciA9PiB7XG4gIGlmICghbWVzc2FnZSkgcmV0dXJuIDBcbiAgY29uc3QgYXR0YWNobWVudENvdW50ID0gQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dGFjaG1lbnRzKSA/IG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoIDogMFxuICBjb25zdCBzb3VyY2VDb3VudCA9IEFycmF5LmlzQXJyYXkobWVzc2FnZS5zb3VyY2VzKSA/IG1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwXG4gIHJldHVybiBhdHRhY2htZW50Q291bnQgfHwgc291cmNlQ291bnRcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZElnbm9yZVN1Z2dlc3Rpb25DbGljayA9IChzdWdnZXN0aW9uOiBzdHJpbmcsIGFscmVhZHlTZWxlY3RlZDogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgIXN1Z2dlc3Rpb24/LnRyaW0oKSB8fCBhbHJlYWR5U2VsZWN0ZWRcblxuZXhwb3J0IGNvbnN0IGlzUmV0cnlTdWdnZXN0aW9uU2VsZWN0aW9uID0gKFxuICBpc0Vycm9yOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBzdWdnZXN0aW9uOiBzdHJpbmcsXG4gIHJldHJ5TGFiZWw6IHN0cmluZ1xuKTogYm9vbGVhbiA9PiBCb29sZWFuKGlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gcmV0cnlMYWJlbClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlID0gKHVzZXJNZXNzYWdlOiB7XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBzb3VyY2VzPzogdW5rbm93blxufSk6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5hdHRhY2htZW50cykpIHJldHVybiB1c2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5zb3VyY2VzKSkgcmV0dXJuIHVzZXJNZXNzYWdlLnNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXVxuICByZXR1cm4gW11cbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZE9wZW5NZXNzYWdlT3B0aW9uID0gKHNlbGVjdGVkT3B0aW9uOiB1bmtub3duKTogYm9vbGVhbiA9PiAhc2VsZWN0ZWRPcHRpb25cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRCbG9iU3RyYXRlZ3kgPSAoXG4gIGZpbGVVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmlsZTogdW5rbm93blxuKTogJ3JlbW90ZS11cmwnIHwgJ2xvY2FsLWZpbGUnIHwgbnVsbCA9PiB7XG4gIGlmIChmaWxlVXJsKSByZXR1cm4gJ3JlbW90ZS11cmwnXG4gIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSkgcmV0dXJuICdsb2NhbC1maWxlJ1xuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkID0gKG1lc3NhZ2VJZDogc3RyaW5nKTogc3RyaW5nID0+XG4gIG1lc3NhZ2VJZFxuICAgIC5zcGxpdCgnLScpXG4gICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgIC5qb2luKCctJylcblxuY29uc3QgQVVESU9fRVhURU5TSU9OUyA9IFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXSBhcyBjb25zdFxuY29uc3QgQVVESU9fVFlQRVMgPSBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBpc0F1ZGlvQXR0YWNobWVudCA9IChhdHRhY2htZW50OiBQaWNrPEF0dGFjaG1lbnRGaWxlLCAndHlwZScgfCAnbmFtZSc+KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcblxuICByZXR1cm4gKFxuICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgQVVESU9fVFlQRVMuaW5jbHVkZXMoYXR0YWNobWVudFR5cGUgYXMgKHR5cGVvZiBBVURJT19UWVBFUylbbnVtYmVyXSkgfHxcbiAgICBBVURJT19FWFRFTlNJT05TLnNvbWUoZXh0ID0+IGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dCkpXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGNhbk9wZW5BdHRhY2htZW50UHJldmlldyA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSk6IGJvb2xlYW4gPT5cbiAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgQm9vbGVhbihhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHwgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSlcblxuZXhwb3J0IGNvbnN0IGZpbmRMYXN0UXVlc3Rpb25JZCA9IChtZXNzYWdlczogQXJyYXk8eyBpZD86IHN0cmluZyB9Pik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBmb3IgKGxldCBpbmRleCA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlc1tpbmRleF0/LmlkXG4gICAgaWYgKG1lc3NhZ2VJZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlSWRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZSA9IChjbGllbnRIZWlnaHQ6IG51bWJlciwgdHVybkhlaWdodDogbnVtYmVyLCB2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldCh2aWV3cG9ydEhlaWdodClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGNsaWVudEhlaWdodCAtIHR1cm5IZWlnaHQgLSBvZmZzZXQpXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzID0gKFxuICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXSB8IHVuZGVmaW5lZCxcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW4sXG4gIHNvdXJjZXM6IHVua25vd25cbik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBhdHRhY2htZW50c1xuICB9XG4gIGlmICghaXNBc3Npc3RhbnQgJiYgQXJyYXkuaXNBcnJheShzb3VyY2VzKSkge1xuICAgIHJldHVybiBzb3VyY2VzIGFzIEF0dGFjaG1lbnRGaWxlW11cbiAgfVxuICByZXR1cm4gW11cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZSA9IChhdHRhY2htZW50OiBQaWNrPEF0dGFjaG1lbnRGaWxlLCAnbmFtZScgfCAndHlwZSc+KTogc3RyaW5nID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICByZXR1cm4gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRVcmwgPSAoXG4gIGF0dGFjaG1lbnQ6IFBpY2s8QXR0YWNobWVudEZpbGUsICd1cmxfb3JpZ2luYWwnIHwgJ3VybF9maWxlJyB8ICd1cmxfdGh1bWJuYWlsJz5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlID0gKHBhcmFtczoge1xuICBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiBib29sZWFuXG4gIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gIGF0dGFjaG1lbnRDb3VudDogbnVtYmVyXG4gIHNvdXJjZUNvdW50OiBudW1iZXJcbiAgbWVzc2FnZVRleHQ6IHN0cmluZ1xuICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICBoYXNBcHByb3ZhbDogYm9vbGVhblxuICBoYXNNdWx0aXBsZUNob2ljZT86IGJvb2xlYW5cbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKHBhcmFtcy5pc1N0cmVhbWluZ1BsYWNlaG9sZGVyIHx8IHBhcmFtcy5pc1N0cmVhbWluZykgcmV0dXJuIGZhbHNlXG4gIGlmIChwYXJhbXMuYXR0YWNobWVudENvdW50ID4gMCB8fCBwYXJhbXMuc291cmNlQ291bnQgPiAwKSByZXR1cm4gZmFsc2VcbiAgaWYgKHBhcmFtcy5tZXNzYWdlVGV4dCkgcmV0dXJuIGZhbHNlXG4gIGlmIChwYXJhbXMucHJvamVjdE5hbWUpIHJldHVybiBmYWxzZVxuICBpZiAocGFyYW1zLmhhc0FwcHJvdmFsKSByZXR1cm4gZmFsc2VcbiAgaWYgKHBhcmFtcy5oYXNNdWx0aXBsZUNob2ljZSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwgPSAod2FzSGVscGZ1bDogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBGZWVkYmFjayB8IG51bGwgPT4ge1xuICBpZiAod2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IHdhc0hlbHBmdWwgPT09IG51bGwpIHJldHVybiBudWxsXG4gIHJldHVybiB3YXNIZWxwZnVsID8gRmVlZGJhY2suVEhVTUJTX1VQIDogRmVlZGJhY2suVEhVTUJTX0RPV05cbn1cblxuZXhwb3J0IGNvbnN0IGNhblJldHJ5QXNzaXN0YW50TWVzc2FnZSA9IChwYXJhbXM6IHtcbiAgaGFzVXNlck1lc3NhZ2VGb3JSZXRyeTogYm9vbGVhblxuICBpc1N0cmVhbWluZzogYm9vbGVhblxuICBpc0Vycm9yOiBib29sZWFuXG4gIGhhc0FwcHJvdmFsOiBib29sZWFuXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gIGlzQ2FuY2VsbGVkPzogYm9vbGVhblxuICB0dXJuSWQ6IHN0cmluZyB8IG51bGxcbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFwYXJhbXMuaGFzVXNlck1lc3NhZ2VGb3JSZXRyeSB8fCBwYXJhbXMuaXNTdHJlYW1pbmcgfHwgcGFyYW1zLmlzRXJyb3IgfHwgcGFyYW1zLmhhc0FwcHJvdmFsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4ocGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgKCFwYXJhbXMuaXNDYW5jZWxsZWQgJiYgcGFyYW1zLnR1cm5JZCkpXG59XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlID0gKFxuICBzY3JvbGxIZWlnaHQ6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjdXJyZW50U3BhY2VySGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGlmIChjdXJyZW50U3BhY2VySGVpZ2h0IDw9IDApIHJldHVybiBjdXJyZW50U3BhY2VySGVpZ2h0XG4gIGNvbnN0IHJlbW92YWJsZSA9IE1hdGgubWF4KDAsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCAtIHNjcm9sbFRvcClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGN1cnJlbnRTcGFjZXJIZWlnaHQgLSByZW1vdmFibGUpXG59XG5cbmV4cG9ydCB0eXBlIFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzID0ge1xuICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCByZWFkU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPSAoKTogU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7fVxuICByZXR1cm4gd2luZG93IGFzIHVua25vd24gYXMgU21vb3RoU3RyZWFtV2luZG93RmxhZ3Ncbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMgPSAoXG4gIGZsYWdzOiBTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyxcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbik6IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICBtYXhDaGFyc1BlckZyYW1lOiBudW1iZXJcbiAgc25hcFRvV29yZEJvdW5kYXJ5OiBib29sZWFuXG4gIHRhcmdldExhZ01zPzogbnVtYmVyXG4gIGFkYXB0VG9CYWNrZW5kUmF0ZT86IGJvb2xlYW5cbiAgdGFyZ2V0QnVmZmVyTXM/OiBudW1iZXJcbiAgbWluQnVmZmVyQ2hhcnM/OiBudW1iZXJcbiAgd2FybXVwTXM/OiBudW1iZXJcbn0gPT4gKHtcbiAgZW5hYmxlZDogaXNTdHJlYW1pbmcsXG4gIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gIC4uLihmbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IGZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogZmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gIC4uLihmbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IGZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogZmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiBmbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbn0pXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCA9IChpc1N0cmVhbWluZzogYm9vbGVhbiwgc3RyZWFtaW5nVGV4dDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogbWVzc2FnZVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyTWVudGlvbklubGluZU5vZGVzID0gKGhhc01lbnRpb25zOiBib29sZWFuLCBtZW50aW9uTm9kZXM6IHVua25vd24pOiBib29sZWFuID0+XG4gIEJvb2xlYW4oaGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQgPSA8VFNvdXJjZXMsIFRIYW5kbGVyPihcbiAgaXNGcm9udGVuZENhbmNlbGxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgc291cmNlczogVFNvdXJjZXMsXG4gIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IFRIYW5kbGVyXG4pOiB7IHNvdXJjZXM6IFRTb3VyY2VzIHwgdW5kZWZpbmVkOyBoYW5kbGVGZWVkYmFjazogVEhhbmRsZXIgfCB1bmRlZmluZWQgfSA9PiAoe1xuICBzb3VyY2VzOiBpc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogc291cmNlcyxcbiAgaGFuZGxlRmVlZGJhY2s6IGlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBoYW5kbGVGZWVkYmFja0NsaWNrLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1pbmdNZXNzYWdlSG9va0lkID0gKGlzU3RyZWFtaW5nOiBib29sZWFuLCBtZXNzYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT5cbiAgaXNTdHJlYW1pbmcgPyBtZXNzYWdlSWQgOiBudWxsXG5cbmV4cG9ydCBjb25zdCBzaG91bGRJbml0aWFsaXplQ2hhdCA9IChhbHJlYWR5SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pOiBib29sZWFuID0+ICFhbHJlYWR5SW5pdGlhbGl6ZWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24gPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiBsb2FkaW5nTWVzc2FnZXNcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24gPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzOiBib29sZWFuLFxuICBxdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsLFxuICBsYXN0UmVzZXJ2ZWRRdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgIWlzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiBCb29sZWFuKHF1ZXN0aW9uSWQpICYmIHF1ZXN0aW9uSWQgIT09IGxhc3RSZXNlcnZlZFF1ZXN0aW9uSWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCA9IChcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuLFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGlzTG9hZGluZ01vcmVNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZVJlZjogYm9vbGVhblxuKTogYm9vbGVhbiA9PiAhaGFzQ29udGFpbmVyIHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZlxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tID0gKFxuICBjb250YWluZXI6IHsgc2Nyb2xsSGVpZ2h0OiBudW1iZXI7IHNjcm9sbFRvcDogbnVtYmVyOyBjbGllbnRIZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PlxuICBjb250YWluZXIgPyBpc0NvbnRhaW5lckF0U2Nyb2xsQm90dG9tKGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGNvbnRhaW5lci5zY3JvbGxUb3AsIGNvbnRhaW5lci5jbGllbnRIZWlnaHQpIDogZmFsc2VcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tID0gKFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1lc3NhZ2VzTGVuZ3RoOiBudW1iZXIsXG4gIGxhc3RTY3JvbGxlZFNlc3Npb25JZDogc3RyaW5nIHwgbnVsbFxuKTogYm9vbGVhbiA9PlxuICAhbG9hZGluZ01lc3NhZ2VzICYmIEJvb2xlYW4oaW5pdGlhbENoYXRJZCkgJiYgbWVzc2FnZXNMZW5ndGggPiAwICYmIGxhc3RTY3JvbGxlZFNlc3Npb25JZCAhPT0gaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzID0gKHdhc0xvYWRpbmc6IGJvb2xlYW4sIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgd2FzTG9hZGluZyAmJiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCA9IChqdXN0RmluaXNoZWRMb2FkaW5nOiBib29sZWFuLCBtZXNzYWdlc0xlbmd0aDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBqdXN0RmluaXNoZWRMb2FkaW5nICYmIG1lc3NhZ2VzTGVuZ3RoID4gMFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQgPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDbGVhclNjcm9sbFJlc3RvcmVXaXRob3V0Q2hhdCA9IChpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiAhaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiA9IChcbiAgc2Vzc2lvbjogeyBzY3JvbGxTZXNzaW9uSWQ/OiBzdHJpbmc7IHNjcm9sbFRvcD86IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGlmICghaW5pdGlhbENoYXRJZCB8fCAhc2Vzc2lvbikgcmV0dXJuIG51bGxcbiAgaWYgKHNlc3Npb24uc2Nyb2xsU2Vzc2lvbklkID09PSBpbml0aWFsQ2hhdElkICYmIHR5cGVvZiBzZXNzaW9uLnNjcm9sbFRvcCA9PT0gJ251bWJlcicgJiYgc2Vzc2lvbi5zY3JvbGxUb3AgPiAwKSB7XG4gICAgcmV0dXJuIHNlc3Npb24uc2Nyb2xsVG9wXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUgPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgcGVuZGluZ1Njcm9sbFRvcDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgcGVuZGluZ1Njcm9sbFRvcCAhPSBudWxsICYmIHBlbmRpbmdTY3JvbGxUb3AgPiAwICYmIGhhc0NvbnRhaW5lclxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UgPSAoXG4gIHByZXZpb3VzRXhwYW5kZWQ6IGJvb2xlYW4sXG4gIGV4cGFuZGVkOiBib29sZWFuLFxuICBoYXNDb250YWluZXI6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gcHJldmlvdXNFeHBhbmRlZCAhPT0gZXhwYW5kZWQgJiYgaGFzQ29udGFpbmVyXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5ID0gKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+XG4gIG1lc3NhZ2VJZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSAoXG4gIGZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IGZvbGxvd1VwPy5hZ2VudElkXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nVGV4dEhvb2tJZCA9IChcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXI6IGJvb2xlYW4sXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsID0+IChpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gbWVzc2FnZUlkIDogbnVsbClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCA9IChpc0Fzc2lzdGFudDogYm9vbGVhbiwgaXNBY3RpdmVTdHJlYW1pbmc6IGJvb2xlYW4sIGlkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgPyBpZCA6ICcnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlID0gKGV4cGFuZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiBCb29sZWFuKGV4cGFuZGVkKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUxhc3RVc2VyTWVzc2FnZUZvckF0dGFjaG1lbnRzID0gPFQgZXh0ZW5kcyB7IHJvbGU/OiBDaGF0SGlzdG9yeVJvbGU7IHVzZXI6IHsgaWQ6IHN0cmluZyB9IH0+KFxuICBtZXNzYWdlczogVFtdLFxuICBhdXRoVXNlcklkOiBzdHJpbmdcbik6IFQgfCB1bmRlZmluZWQgPT5cbiAgbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VySWQudG9TdHJpbmcoKSkuYXQoLTEpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSA9IChcbiAgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50OiBib29sZWFuLFxuICBhZ2VudFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IChpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnRUeXBlKVxuXG5leHBvcnQgdHlwZSBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0ID0ge1xuICBzY3JvbGxUb3A6IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXJcbiAgc2Nyb2xsVGhyZXNob2xkOiBudW1iZXJcbiAgYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgcHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lID0gKGlucHV0OiBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0KSA9PiB7XG4gIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBpc1Njcm9sbGluZ1Vwd2FyZChpbnB1dC5zY3JvbGxUb3AsIGlucHV0Lmxhc3RTY3JvbGxUb3ApXG4gIGNvbnN0IGlzTmVhckJvdHRvbSA9IGlzTmVhclNjcm9sbEJvdHRvbShcbiAgICBpbnB1dC5zY3JvbGxIZWlnaHQsXG4gICAgaW5wdXQuc2Nyb2xsVG9wLFxuICAgIGlucHV0LmNsaWVudEhlaWdodCxcbiAgICBpbnB1dC5zY3JvbGxUaHJlc2hvbGRcbiAgKVxuICBjb25zdCBuZXh0U2Nyb2xsVGhyZXNob2xkID0gcmVzb2x2ZVNjcm9sbE5lYXJCb3R0b21UaHJlc2hvbGQoaW5wdXQuc2Nyb2xsVGhyZXNob2xkLCBpc1Njcm9sbGluZ1VwLCBpc05lYXJCb3R0b20pXG5cbiAgcmV0dXJuIHtcbiAgICBuZXh0U2Nyb2xsVGhyZXNob2xkLFxuICAgIGxhc3RTY3JvbGxUb3A6IGlucHV0LnNjcm9sbFRvcCxcbiAgICBzaG91bGREcmFpblR1cm5TcGFjZTogc2hvdWxkRHJhaW5UdXJuU3BhY2VPblNjcm9sbChpbnB1dC5hbmNob3JlZFR1cm5JZCksXG4gICAgc2hvdWxkU2NoZWR1bGVTY3JvbGxQZXJzaXN0OiBzaG91bGRQZXJzaXN0TWFpYVBhbmVsU2Nyb2xsKGlucHV0LmluaXRpYWxDaGF0SWQsIGlucHV0LnNjcm9sbFRvcCksXG4gICAgc2hvdWxkTm90aWZ5U2Nyb2xsVG9Cb3R0b206IGlzTmVhckJvdHRvbSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0ID0gKHBhcmFtczoge1xuICBjb250YWluZXJUb3A6IG51bWJlclxuICBxdWVzdGlvblRvcDogbnVtYmVyXG4gIGNvbnRlbnRCb3R0b206IG51bWJlclxuICBzY3JvbGxUb3A6IG51bWJlclxufSk6IHsgcXVlc3Rpb25Ub3A6IG51bWJlcjsgdHVybkhlaWdodDogbnVtYmVyIH0gPT4ge1xuICBjb25zdCBxdWVzdGlvblNjcm9sbFRvcCA9IHBhcmFtcy5xdWVzdGlvblRvcCAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIGNvbnN0IGNvbnRlbnRCb3R0b21TY3JvbGwgPSBwYXJhbXMuY29udGVudEJvdHRvbSAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIHJldHVybiB7IHF1ZXN0aW9uVG9wOiBxdWVzdGlvblNjcm9sbFRvcCwgdHVybkhlaWdodDogY29udGVudEJvdHRvbVNjcm9sbCAtIHF1ZXN0aW9uU2Nyb2xsVG9wIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPVxuICB7IGtpbmQ6ICdza2lwLXJlc2VydmF0aW9uJyB9IHwgeyBraW5kOiAncmVzZXJ2ZSc7IHNwYWNlckhlaWdodDogbnVtYmVyOyB0YXJnZXRTY3JvbGxUb3A6IG51bWJlciB9XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPSAocGFyYW1zOiB7XG4gIGN1cnJlbnRTY3JvbGxUb3A6IG51bWJlclxuICB0YXJnZXRTY3JvbGxUb3A6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICB0dXJuSGVpZ2h0OiBudW1iZXJcbn0pOiBSZXNlcnZlVHVyblNwYWNlUGxhbiA9PiB7XG4gIGlmIChzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24ocGFyYW1zLmN1cnJlbnRTY3JvbGxUb3AsIHBhcmFtcy50YXJnZXRTY3JvbGxUb3ApKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ3NraXAtcmVzZXJ2YXRpb24nIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdyZXNlcnZlJyxcbiAgICBzcGFjZXJIZWlnaHQ6IGNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZShwYXJhbXMuY2xpZW50SGVpZ2h0LCBwYXJhbXMudHVybkhlaWdodCwgcGFyYW1zLmNsaWVudEhlaWdodCksXG4gICAgdGFyZ2V0U2Nyb2xsVG9wOiBwYXJhbXMudGFyZ2V0U2Nyb2xsVG9wLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AgPSAoc2Nyb2xsSGVpZ2h0OiBudW1iZXIsIGNsaWVudEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+XG4gIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodFxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsU0FBU0EsUUFBUSxRQUFRLG9DQUFvQztBQUM3RCxTQUFTQyxlQUFlLFFBQThDLHFCQUFxQjtBQUUzRixTQUFTQywrQkFBK0IsUUFBUSx1Q0FBdUM7QUFFdkYsT0FBTyxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFJQyxjQUFzQjtFQUFBLE9BQWFDLElBQUksQ0FBQ0MsR0FBRyxDQUFDRixjQUFjLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUFBO0FBRXhHLE9BQU8sSUFBTUcsdUJBQXVCLEdBQUcsR0FBRztBQUMxQyxPQUFPLElBQU1DLDJCQUEyQixHQUFHLEdBQUc7QUFDOUMsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxJQUFJO0FBRWhELE9BQU8sSUFBTUMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUMsUUFBZ0I7RUFBQSxPQUMxREosdUJBQXVCLEdBQ3ZCLENBQUNDLDJCQUEyQixHQUFHRCx1QkFBdUIsSUFDcERGLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDTyxHQUFHLENBQUNELFFBQVEsQ0FBQyxHQUFHRiw0QkFBNEIsQ0FBQztBQUFBO0FBRWxFLE9BQU8sSUFBTUkseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FDcENDLFlBQW9CLEVBQ3BCQyxZQUFvQixFQUNwQkMsU0FBaUIsRUFDakJDLFlBQW9CO0VBQUEsT0FDVEgsWUFBWSxHQUFHQyxZQUFZLEdBQUdDLFNBQVMsR0FBR0MsWUFBWTtBQUFBO0FBRW5FLE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSUMsa0JBQTBCO0VBQUEsSUFBRUMsU0FBUyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxFQUFFO0VBQUEsT0FDakZGLGtCQUFrQixHQUFHQyxTQUFTO0FBQUE7QUFFaEMsT0FBTyxJQUFNSSw0QkFBNEIsR0FBRyxDQUFDO0FBQzdDLE9BQU8sSUFBTUMsb0NBQW9DLEdBQUcsRUFBRTtBQUN0RCxPQUFPLElBQU1DLCtCQUErQixHQUFHLEVBQUU7QUFDakQsT0FBTyxJQUFNQyw2QkFBNkIsR0FBRyxHQUFHO0FBQ2hELE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsQ0FBQztBQUV6QyxPQUFPLElBQU1DLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBMkJBLENBQUliLFNBQWlCO0VBQUEsSUFBRUksU0FBUyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBR0csNEJBQTRCO0VBQUEsT0FDckdSLFNBQVMsR0FBR0ksU0FBUztBQUFBO0FBRXZCLE9BQU8sSUFBTVUsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDekNYLGtCQUEwQjtFQUFBLElBQzFCQyxTQUFTLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHRyw0QkFBNEI7RUFBQSxPQUM1Qkwsa0JBQWtCLEdBQUdDLFNBQVM7QUFBQTtBQUU1QyxPQUFPLElBQU1XLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlmLFNBQWlCLEVBQUVnQixhQUFxQjtFQUFBLE9BQWNoQixTQUFTLEdBQUdnQixhQUFhO0FBQUE7QUFFakgsT0FBTyxJQUFNQyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUM3Qm5CLFlBQW9CLEVBQ3BCRSxTQUFpQixFQUNqQkMsWUFBb0IsRUFDcEJHLFNBQWlCO0VBQUEsT0FDTE4sWUFBWSxHQUFHRSxTQUFTLEdBQUdDLFlBQVksR0FBR0csU0FBUztBQUFBO0FBRWpFLE9BQU8sSUFBTWMsZ0NBQWdDLEdBQUcsU0FBbkNBLGdDQUFnQ0EsQ0FDM0NDLGdCQUF3QixFQUN4QkMsYUFBc0IsRUFDdEJDLFlBQXFCLEVBQ1Y7RUFDWCxJQUFJQSxZQUFZLEVBQUUsT0FBT1osb0NBQW9DO0VBQzdELElBQUlXLGFBQWEsRUFBRSxPQUFPViwrQkFBK0I7RUFDekQsT0FBT1MsZ0JBQWdCO0FBQ3pCLENBQUM7QUFFRCxPQUFPLElBQU1HLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQUkzQixRQUFnQjtFQUFBLE9BQWNOLElBQUksQ0FBQ08sR0FBRyxDQUFDRCxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFFbEcsT0FBTyxJQUFNNEIseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSUMsUUFBZ0I7RUFBQSxPQUFjQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUFuQyxJQUFBLENBQUFvQyxHQUFBLENBQUcsQ0FBQyxFQUFLLENBQUMsRUFBRSxHQUFHRCxRQUFRLENBQUM7QUFBQSxDQUFDO0FBRXZILE9BQU8sSUFBTUUsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FBSUMsV0FBbUIsRUFBRXZDLGNBQXNCLEVBQWE7RUFDakcsSUFBTXdDLE1BQU0sR0FBR3pDLGdCQUFnQixDQUFDQyxjQUFjLENBQUM7RUFDL0MsT0FBT0MsSUFBSSxDQUFDd0MsR0FBRyxDQUFDLENBQUMsRUFBRUYsV0FBVyxHQUFHQyxNQUFNLENBQUM7QUFDMUMsQ0FBQztBQUVELE9BQU8sSUFBTUUsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FBSUMsZ0JBQXdCLEVBQUVDLGVBQXVCO0VBQUEsT0FDOUZBLGVBQWUsSUFBSUQsZ0JBQWdCO0FBQUE7QUFFckMsT0FBTyxJQUFNRSx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJQyxhQUFxQixFQUFFQyxVQUFrQjtFQUFBLE9BQ2hGOUMsSUFBSSxDQUFDTyxHQUFHLENBQUNzQyxhQUFhLEdBQUdDLFVBQVUsQ0FBQyxJQUFJdkIsd0JBQXdCO0FBQUE7QUFFbEUsT0FBTyxJQUFNd0IsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FDeENuQyxZQUFvQixFQUNwQm9DLFVBQWtCLEVBQ2xCQyxtQkFBMkIsRUFDaEI7RUFDWCxJQUFNVixNQUFNLEdBQUd6QyxnQkFBZ0IsQ0FBQ2MsWUFBWSxDQUFDO0VBQzdDLElBQU1zQyxRQUFRLEdBQUdsRCxJQUFJLENBQUN3QyxHQUFHLENBQUMsQ0FBQyxFQUFFNUIsWUFBWSxHQUFHb0MsVUFBVSxHQUFHVCxNQUFNLENBQUM7RUFDaEUsT0FBT3ZDLElBQUksQ0FBQ0MsR0FBRyxDQUFDZ0QsbUJBQW1CLEVBQUVDLFFBQVEsQ0FBQztBQUNoRCxDQUFDO0FBRUQsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUFJQyxjQUE2QjtFQUFBLE9BQWMsQ0FBQ0EsY0FBYztBQUFBO0FBRXZHLE9BQU8sSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSUQsY0FBNkIsRUFBRTFDLFlBQW9CO0VBQUEsT0FDeEY0QyxPQUFPLENBQUNGLGNBQWMsQ0FBQyxJQUFJMUMsWUFBWSxHQUFHLENBQUM7QUFBQTtBQUU3QyxPQUFPLElBQU02Qyw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUFJQyxhQUF3QyxFQUFFN0MsU0FBaUI7RUFBQSxPQUN0RzJDLE9BQU8sQ0FBQ0UsYUFBYSxDQUFDLElBQUk3QyxTQUFTLEdBQUcsQ0FBQztBQUFBO0FBRXpDLE9BQU8sSUFBTThDLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDaEQsWUFBb0IsRUFDcEJFLFNBQWlCLEVBQ2pCQyxZQUFvQjtFQUFBLElBQ3BCOEMsU0FBUyxHQUFBMUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdNLDZCQUE2QjtFQUFBLE9BQzdCYixZQUFZLEdBQUdFLFNBQVMsSUFBSUMsWUFBWSxHQUFHOEMsU0FBUztBQUFBO0FBRWxFLE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaENDLE1BQXFCLEVBQ3JCQyxNQUFxQixFQUNyQkMsY0FBc0IsRUFDdEJDLFVBQWtCO0VBQUEsT0FDTkgsTUFBTSxLQUFLQyxNQUFNLElBQUlDLGNBQWMsS0FBS0MsVUFBVTtBQUFBO0FBRWhFLE9BQU8sSUFBTUMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUMsUUFBZ0M7RUFBQSxPQUMxRUEsUUFBUSxDQUFDQyxJQUFJLENBQUMsVUFBQUMsR0FBRztJQUFBLE9BQUlBLEdBQUcsQ0FBQ0MsRUFBRSxLQUFLLHNCQUFzQjtFQUFBLEVBQUM7QUFBQTtBQUV6RCxPQUFPLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLE9BQStEO0VBQUEsSUFBQUMsV0FBQTtFQUFBLE9BQ25HakIsT0FBTyxDQUFDZ0IsT0FBTyxLQUFLLEVBQUFDLFdBQUEsR0FBQUQsT0FBTyxDQUFDRixFQUFFLGNBQUFHLFdBQUEsdUJBQVZBLFdBQUEsQ0FBWUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFJRixPQUFPLENBQUNHLFFBQVEsQ0FBQyxDQUFDO0FBQUE7QUFFL0UsT0FBTyxJQUFNQywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJQyxTQUE2QjtFQUFBLE9BQzNFckIsT0FBTyxDQUFDLENBQUFxQixTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRUgsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFJRyxTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRUgsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFDO0FBQUE7QUFFakYsT0FBTyxJQUFNSSxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQWdDQSxDQUFJQyxNQVdoRCxFQUFrRDtFQUNqRCxJQUFJLENBQUNBLE1BQU0sQ0FBQ0MsWUFBWSxFQUFFLE9BQU8sa0JBQWtCO0VBQ25ELElBQUlELE1BQU0sQ0FBQ3pCLGNBQWMsRUFBRSxPQUFPLFdBQVc7RUFDN0MsSUFBSXlCLE1BQU0sQ0FBQ0UsZUFBZSxJQUFJRixNQUFNLENBQUNHLFNBQVMsRUFBRSxPQUFPLGtCQUFrQjtFQUN6RSxJQUFJSCxNQUFNLENBQUNJLGtCQUFrQixJQUFJSixNQUFNLENBQUNLLFVBQVUsRUFBRSxPQUFPLFFBQVE7RUFDbkUsSUFDRSxDQUFDTCxNQUFNLENBQUNJLGtCQUFrQixJQUMxQixDQUFDSixNQUFNLENBQUNNLFVBQVUsSUFDbEIsQ0FBQ04sTUFBTSxDQUFDTyxpQkFBaUIsSUFDekJQLE1BQU0sQ0FBQ2YsY0FBYyxHQUFHZSxNQUFNLENBQUNRLGtCQUFrQixFQUNqRDtJQUNBLE9BQU8sUUFBUTtFQUNqQjtFQUNBLE9BQU8sa0JBQWtCO0FBQzNCLENBQUM7QUFFRCxPQUFPLElBQU1DLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQUlQLGVBQXdCLEVBQUVDLFNBQWtCO0VBQUEsT0FDeEZELGVBQWUsSUFBSUMsU0FBUztBQUFBO0FBRTlCLE9BQU8sSUFBTU8sOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDekNDLGFBQWlDLEVBQ2pDVCxlQUF3QixFQUN4QkMsU0FBa0I7RUFBQSxPQUNOMUIsT0FBTyxDQUFDa0MsYUFBYSxJQUFJM0YsK0JBQStCLENBQUMyRixhQUFhLENBQUMsS0FBS1QsZUFBZSxJQUFJQyxTQUFTLENBQUMsQ0FBQztBQUFBO0FBRXhILE9BQU8sSUFBTVMsc0NBQXNDLEdBQUcsU0FBekNBLHNDQUFzQ0EsQ0FDakRDLHdCQUFpQyxFQUNqQ0Msb0JBQTZCO0VBQUEsT0FDakIsQ0FBQ0Qsd0JBQXdCLElBQUlwQyxPQUFPLENBQUNxQyxvQkFBb0IsQ0FBQztBQUFBO0FBRXhFLE9BQU8sSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUMsSUFBaUMsRUFBRUMsTUFBYyxFQUFFQyxVQUFrQjtFQUFBLE9BQ3hHRixJQUFJLEtBQUtqRyxlQUFlLENBQUNvRyxJQUFJLElBQUlGLE1BQU0sS0FBS0MsVUFBVTtBQUFBO0FBRXhELE9BQU8sSUFBTUUsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSUosSUFBaUMsRUFBRUMsTUFBYztFQUFBLE9BQ3RGRCxJQUFJLEtBQUtqRyxlQUFlLENBQUNzRyxTQUFTLElBQUlKLE1BQU0sS0FBSyxXQUFXO0FBQUE7QUFFOUQsT0FBTyxJQUFNSyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJQyxXQUFnQyxFQUFFQyxzQkFBK0I7RUFBQSxPQUN0Ry9DLE9BQU8sQ0FBQzhDLFdBQVcsQ0FBQyxJQUFJQyxzQkFBc0I7QUFBQTtBQUVoRCxPQUFPLElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDQyxpQkFBMEIsRUFDMUJDLGFBQXNCLEVBQ3RCQyx5QkFBa0M7RUFBQSxPQUN0QkYsaUJBQWlCLElBQUlDLGFBQWEsSUFBSSxDQUFDQyx5QkFBeUI7QUFBQTtBQUU5RSxPQUFPLElBQU1DLGlDQUFpQyxHQUFHLFNBQXBDQSxpQ0FBaUNBLENBQzVDQyxXQUFvQixFQUNwQkosaUJBQTBCLEVBQzFCSyxjQUF1QjtFQUFBLE9BQ1hELFdBQVcsSUFBSUosaUJBQWlCLElBQUlqRCxPQUFPLENBQUNzRCxjQUFjLENBQUM7QUFBQTtBQUV6RSxPQUFPLElBQU1DLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQzNDQyxlQUFvQyxFQUNwQ0MsT0FBcUM7RUFBQSxPQUN6QnpELE9BQU8sQ0FBQ3dELGVBQWUsSUFBSUMsT0FBTyxDQUFDO0FBQUE7QUFFakQsT0FBTyxJQUFNQywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJQyxlQUF1QjtFQUFBLE9BQWNBLGVBQWUsR0FBRyxDQUFDO0FBQUE7QUFFeEcsT0FBTyxJQUFNQywyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJckMsTUFLM0M7RUFBQSxPQUNDdkIsT0FBTyxDQUFDdUIsTUFBTSxDQUFDc0MsV0FBVyxJQUFJdEMsTUFBTSxDQUFDdUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFdkMsTUFBTSxDQUFDOEIsV0FBVyxJQUFJOUIsTUFBTSxDQUFDb0MsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUFBO0FBRWhILE9BQU8sSUFBTUkseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FBSTVDLFFBQTBEO0VBQUEsT0FDbEduQixPQUFPLENBQUNtQixRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRTZDLGVBQWUsQ0FBQztBQUFBO0FBRXBDLE9BQU8sSUFBTUMsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FBSUMsV0FBbUIsRUFBRXBCLFdBQW9CO0VBQUEsT0FDcEYsQ0FBQ29CLFdBQVcsSUFBSSxDQUFDcEIsV0FBVztBQUFBO0FBRTlCLE9BQU8sSUFBTXFCLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQUk1QyxNQVE3QztFQUFBLE9BQ0NBLE1BQU0sQ0FBQzhCLFdBQVcsSUFDbEIsQ0FBQzlCLE1BQU0sQ0FBQzZDLE9BQU8sSUFDZixDQUFDN0MsTUFBTSxDQUFDSixRQUFRLElBQ2hCLENBQUNJLE1BQU0sQ0FBQzhDLGNBQWMsSUFDdEIsQ0FBQzlDLE1BQU0sQ0FBQ3VCLFdBQVcsS0FDbEIsQ0FBQ3ZCLE1BQU0sQ0FBQytDLG1CQUFtQixJQUFJdEUsT0FBTyxDQUFDdUIsTUFBTSxDQUFDZ0QsT0FBTyxDQUFDLENBQUM7QUFBQTtBQUUxRCxPQUFPLElBQU1DLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQUlqRCxNQU9oRDtFQUFBLE9BQ0NBLE1BQU0sQ0FBQzhCLFdBQVcsSUFDbEIsQ0FBQzlCLE1BQU0sQ0FBQytDLG1CQUFtQixJQUMzQixDQUFDL0MsTUFBTSxDQUFDSixRQUFRO0VBQ2hCO0VBQ0E7RUFDQSxDQUFDSSxNQUFNLENBQUM4QyxjQUFjLEtBQ3JCLENBQUM5QyxNQUFNLENBQUM2QyxPQUFPLElBQUk3QyxNQUFNLENBQUNrRCxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFBQTtBQUVuRCxPQUFPLElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDNUIsV0FBb0IsRUFDcEI2QixhQUFrQyxFQUNsQ0MsbUJBQXdDO0VBQUEsT0FDNUI1RSxPQUFPLENBQUM4QyxXQUFXLElBQUksQ0FBQzZCLGFBQWEsSUFBSUMsbUJBQW1CLENBQUM7QUFBQTtBQWEzRSxJQUFNQyxtQkFBbUIsR0FBRyw4Q0FBOEM7O0FBRTFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQTZCQSxDQUFJQyxJQUF3QixFQUFvQjtFQUN4RixJQUFNQyxLQUFLLEdBQUcsQ0FBQ0QsSUFBSSxhQUFKQSxJQUFJLGNBQUpBLElBQUksR0FBSSxFQUFFLEVBQ3RCRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQ1hDLEdBQUcsQ0FBQyxVQUFBQyxJQUFJO0lBQUEsT0FBSUEsSUFBSSxDQUFDQyxPQUFPLENBQUNQLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDUSxJQUFJLENBQUMsQ0FBQztFQUFBLEVBQUMsQ0FDekRDLE1BQU0sQ0FBQ3RGLE9BQU8sQ0FBQztFQUNsQixJQUFNdUYsUUFBUSxHQUFHQyxrQkFBQSxDQUFJUixLQUFLLEVBQUVTLE9BQU8sQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFBUCxJQUFJO0lBQUEsT0FBSUEsSUFBSSxDQUFDUSxRQUFRLENBQUMsR0FBRyxDQUFDO0VBQUEsRUFBQztFQUN0RSxPQUFPSixRQUFRLGFBQVJBLFFBQVEsY0FBUkEsUUFBUSxHQUFJLElBQUk7QUFDekIsQ0FBQzs7QUFFRDtBQUNBLE9BQU8sSUFBTUssNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FBSXJFLE1BSTVDLEVBQW1DO0VBQUEsSUFBQXNFLG9CQUFBO0VBQ2xDLElBQUl0RSxNQUFNLENBQUN1QixXQUFXLEVBQUUsT0FBTyxJQUFJO0VBQ25DLElBQU1nRCxJQUFJLEdBQUd2RSxNQUFNLENBQUNaLFFBQVEsQ0FBQ1ksTUFBTSxDQUFDWixRQUFRLENBQUNoRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ3hELElBQUksQ0FBQ21JLElBQUksSUFBSSxDQUFDbkQsc0JBQXNCLENBQUNtRCxJQUFJLENBQUN2RCxJQUFJLEVBQUV1RCxJQUFJLENBQUNDLElBQUksQ0FBQ2pGLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUMxRSxJQUFJZ0YsSUFBSSxDQUFDMUIsT0FBTyxJQUFJMEIsSUFBSSxDQUFDeEIsbUJBQW1CLElBQUl3QixJQUFJLENBQUMzRSxRQUFRLEVBQUUsT0FBTyxJQUFJO0VBQzFFLElBQUlJLE1BQU0sQ0FBQ3lFLG1CQUFtQixDQUFDRixJQUFJLENBQUNoRixFQUFFLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDcEQsSUFBTTJDLE9BQU8sSUFBQW9DLG9CQUFBLEdBQUdDLElBQUksQ0FBQ3pCLGNBQWMsY0FBQXdCLG9CQUFBLHVCQUFuQkEsb0JBQUEsQ0FBcUJwQyxPQUFPO0VBQzVDLElBQUksQ0FBQ3dDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDekMsT0FBTyxDQUFDLElBQUlBLE9BQU8sQ0FBQzlGLE1BQU0sR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJO0VBQzlELE9BQU87SUFBRTBELFNBQVMsRUFBRXlFLElBQUksQ0FBQ2hGLEVBQUU7SUFBRXlFLFFBQVEsRUFBRVQsNkJBQTZCLENBQUNnQixJQUFJLENBQUM5RSxPQUFPLENBQUM7SUFBRXlDLE9BQU8sRUFBUEE7RUFBUSxDQUFDO0FBQy9GLENBQUM7O0FBRUQ7O0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sSUFBTTBDLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDeEYsUUFBeUMsRUFJdEM7RUFDSCxJQUFNeUYsT0FBcUQsR0FBRyxDQUFDLENBQUM7RUFDaEUsSUFBTUMsZ0JBQXNDLEdBQUcsQ0FBQyxDQUFDO0VBQ2pEMUYsUUFBUSxDQUFDMkYsT0FBTyxDQUFDLFVBQUN0RixPQUFPLEVBQUV1RixLQUFLLEVBQUs7SUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxjQUFBO0lBQ25DLElBQU1qRCxPQUFPLElBQUErQyxxQkFBQSxHQUFHeEYsT0FBTyxDQUFDcUQsY0FBYyxjQUFBbUMscUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3Qi9DLE9BQU87SUFDL0MsSUFBTWtELEtBQUssR0FBR2hHLFFBQVEsQ0FBQzRGLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxFQUFDOUMsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRTlGLE1BQU0sS0FBSSxDQUFDZ0Ysc0JBQXNCLENBQUMzQixPQUFPLENBQUN1QixJQUFJLEVBQUV2QixPQUFPLENBQUMrRSxJQUFJLENBQUNqRixFQUFFLENBQUMsRUFBRTtJQUNoRixJQUFJLEVBQUM2RixLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFQyxvQkFBb0IsS0FBSWpFLHNCQUFzQixDQUFDZ0UsS0FBSyxDQUFDcEUsSUFBSSxFQUFFb0UsS0FBSyxDQUFDWixJQUFJLENBQUNqRixFQUFFLENBQUMsRUFBRTtJQUN2RixJQUFBK0YscUJBQUEsR0FBeUJGLEtBQUssQ0FBQ0Msb0JBQW9CO01BQTNDRSxHQUFHLEdBQUFELHFCQUFBLENBQUhDLEdBQUc7TUFBRUMsT0FBTyxHQUFBRixxQkFBQSxDQUFQRSxPQUFPO0lBQ3BCLElBQU1DLFdBQVcsR0FBR0YsR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsR0FBR3JELE9BQU8sQ0FBQ3dELFNBQVMsQ0FBQyxVQUFBQyxNQUFNO01BQUEsT0FBSUEsTUFBTSxDQUFDSixHQUFHLEtBQUtBLEdBQUc7SUFBQSxFQUFDO0lBQ3RGLElBQU1JLE1BQU0sR0FBR3pELE9BQU8sQ0FBQ3VELFdBQVcsQ0FBQztJQUNuQyxJQUFJRCxPQUFPLEVBQUVYLE9BQU8sQ0FBQ3BGLE9BQU8sQ0FBQ0YsRUFBRSxDQUFDLEdBQUc7TUFBRXFHLE1BQU0sRUFBRSxJQUFJO01BQUVwQyxJQUFJLEVBQUUsRUFBRTtNQUFFZ0MsT0FBTyxFQUFFO0lBQUssQ0FBQyxNQUN2RSxJQUFJRyxNQUFNLEVBQ2JkLE9BQU8sQ0FBQ3BGLE9BQU8sQ0FBQ0YsRUFBRSxDQUFDLEdBQUc7TUFBRXFHLE1BQU0sRUFBRUgsV0FBVyxHQUFHLENBQUM7TUFBRWpDLElBQUksRUFBRW1DLE1BQU0sQ0FBQ25DLElBQUk7TUFBRXFDLFdBQVcsRUFBRUYsTUFBTSxDQUFDRTtJQUFZLENBQUMsTUFDbEdoQixPQUFPLENBQUNwRixPQUFPLENBQUNGLEVBQUUsQ0FBQyxHQUFHO01BQUVxRyxNQUFNLEVBQUUsSUFBSTtNQUFFcEMsSUFBSSxHQUFBMEIsbUJBQUEsSUFBQUMsY0FBQSxHQUFFQyxLQUFLLENBQUMzRixPQUFPLGNBQUEwRixjQUFBLHVCQUFiQSxjQUFBLENBQWVyQixJQUFJLENBQUMsQ0FBQyxjQUFBb0IsbUJBQUEsY0FBQUEsbUJBQUEsR0FBSTtJQUFHLENBQUM7SUFDOUVKLGdCQUFnQixDQUFDTSxLQUFLLENBQUM3RixFQUFFLENBQUMsR0FBRyxJQUFJO0VBQ25DLENBQUMsQ0FBQztFQUNGLE9BQU87SUFBRXNGLE9BQU8sRUFBUEEsT0FBTztJQUFFQyxnQkFBZ0IsRUFBaEJBO0VBQWlCLENBQUM7QUFDdEMsQ0FBQzs7QUFFRDtBQUNBLE9BQU8sSUFBTWdCLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCMUcsUUFBMEIsRUFDMUIyRyxVQUF5QixFQUN6QmpCLGdCQUFzQyxFQUNwQjtFQUNsQixJQUFJLENBQUNpQixVQUFVLElBQUksQ0FBQ2pCLGdCQUFnQixDQUFDaUIsVUFBVSxDQUFDLEVBQUUsT0FBT0EsVUFBVTtFQUNuRSxJQUFNZixLQUFLLEdBQUc1RixRQUFRLENBQUNzRyxTQUFTLENBQUMsVUFBQWpHLE9BQU87SUFBQSxPQUFJQSxPQUFPLENBQUNGLEVBQUUsS0FBS3dHLFVBQVU7RUFBQSxFQUFDO0VBQ3RFLE9BQU9mLEtBQUssR0FBRyxDQUFDLEdBQUc1RixRQUFRLENBQUM0RixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUN6RixFQUFFLEdBQUd3RyxVQUFVO0FBQ3hELENBQUM7QUFFRCxPQUFPLElBQU1DLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBMkJBLENBQ3RDQyxDQUErQixFQUMvQkMsQ0FBK0I7RUFBQSxPQUNuQixDQUFBRCxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRW5HLFNBQVMsT0FBS29HLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFcEcsU0FBUyxLQUFJLENBQUFtRyxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRWpDLFFBQVEsT0FBS2tDLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFbEMsUUFBUSxLQUFJLENBQUFpQyxDQUFDLGFBQURBLENBQUMsdUJBQURBLENBQUMsQ0FBRS9ELE9BQU8sT0FBS2dFLENBQUMsYUFBREEsQ0FBQyx1QkFBREEsQ0FBQyxDQUFFaEUsT0FBTztBQUFBO0FBRXZHLE9BQU8sSUFBTWlFLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUluRyxNQU05QztFQUFBLE9BQ0NBLE1BQU0sQ0FBQzhCLFdBQVcsSUFBSSxDQUFDOUIsTUFBTSxDQUFDNkMsT0FBTyxJQUFJLENBQUM3QyxNQUFNLENBQUMrQyxtQkFBbUIsSUFBSSxDQUFDL0MsTUFBTSxDQUFDSixRQUFRLElBQUluQixPQUFPLENBQUN1QixNQUFNLENBQUNvRyxPQUFPLENBQUM7QUFBQTtBQUVySCxPQUFPLElBQU1DLGlDQUFpQyxHQUFHLFNBQXBDQSxpQ0FBaUNBLENBQUlyRyxNQU9qRCxFQUFnRTtFQUMvRCxJQUFNOEIsV0FBVyxHQUFHVixzQkFBc0IsQ0FBQ3BCLE1BQU0sQ0FBQ2dCLElBQUksRUFBRWhCLE1BQU0sQ0FBQ2lCLE1BQU0sQ0FBQztFQUN0RSxJQUFNTyxzQkFBc0IsR0FDMUJNLFdBQVcsSUFBSTlCLE1BQU0sQ0FBQ29ELGFBQWEsSUFBSXBJLCtCQUErQixDQUFDZ0YsTUFBTSxDQUFDRixTQUFTLENBQUM7RUFDMUYsT0FBTztJQUNMMEIsc0JBQXNCLEVBQXRCQSxzQkFBc0I7SUFDdEJELFdBQVcsRUFBRUMsc0JBQXNCLEtBQUt4QixNQUFNLENBQUNFLGVBQWUsSUFBSUYsTUFBTSxDQUFDRyxTQUFTO0VBQ3BGLENBQUM7QUFDSCxDQUFDO0FBT0QsT0FBTyxJQUFNbUcsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSTdHLE9BQXdELEVBQWE7RUFDL0csSUFBSSxDQUFDQSxPQUFPLEVBQUUsT0FBTyxDQUFDO0VBQ3RCLElBQU0yQyxlQUFlLEdBQUdzQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ2xGLE9BQU8sQ0FBQzhHLFdBQVcsQ0FBQyxHQUFHOUcsT0FBTyxDQUFDOEcsV0FBVyxDQUFDbkssTUFBTSxHQUFHLENBQUM7RUFDM0YsSUFBTW9LLFdBQVcsR0FBRzlCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDbEYsT0FBTyxDQUFDZ0gsT0FBTyxDQUFDLEdBQUdoSCxPQUFPLENBQUNnSCxPQUFPLENBQUNySyxNQUFNLEdBQUcsQ0FBQztFQUMvRSxPQUFPZ0csZUFBZSxJQUFJb0UsV0FBVztBQUN2QyxDQUFDO0FBRUQsT0FBTyxJQUFNRSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJQyxVQUFrQixFQUFFQyxlQUF3QjtFQUFBLE9BQ3RGLEVBQUNELFVBQVUsYUFBVkEsVUFBVSxlQUFWQSxVQUFVLENBQUU3QyxJQUFJLENBQUMsQ0FBQyxLQUFJOEMsZUFBZTtBQUFBO0FBRXhDLE9BQU8sSUFBTUMsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckNoRSxPQUE0QixFQUM1QjhELFVBQWtCLEVBQ2xCRyxVQUFrQjtFQUFBLE9BQ05ySSxPQUFPLENBQUNvRSxPQUFPLElBQUk4RCxVQUFVLEtBQUtHLFVBQVUsQ0FBQztBQUFBO0FBRTNELE9BQU8sSUFBTUMsc0NBQXNDLEdBQUcsU0FBekNBLHNDQUFzQ0EsQ0FBSUMsV0FHdEQsRUFBdUI7RUFDdEIsSUFBSXRDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcUMsV0FBVyxDQUFDVCxXQUFXLENBQUMsRUFBRSxPQUFPUyxXQUFXLENBQUNULFdBQVc7RUFDMUUsSUFBSTdCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcUMsV0FBVyxDQUFDUCxPQUFPLENBQUMsRUFBRSxPQUFPTyxXQUFXLENBQUNQLE9BQU87RUFDbEUsT0FBTyxFQUFFO0FBQ1gsQ0FBQztBQUVELE9BQU8sSUFBTVEsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBSUMsY0FBdUI7RUFBQSxPQUFjLENBQUNBLGNBQWM7QUFBQTtBQUU1RixPQUFPLElBQU1DLHFDQUFxQyxHQUFHLFNBQXhDQSxxQ0FBcUNBLENBQ2hEQyxPQUEyQixFQUMzQkMsSUFBYSxFQUMwQjtFQUN2QyxJQUFJRCxPQUFPLEVBQUUsT0FBTyxZQUFZO0VBQ2hDLElBQUlDLElBQUksWUFBWUMsSUFBSSxFQUFFLE9BQU8sWUFBWTtFQUM3QyxPQUFPLElBQUk7QUFDYixDQUFDO0FBRUQsT0FBTyxJQUFNQyx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJekgsU0FBaUI7RUFBQSxPQUN4REEsU0FBUyxDQUNONEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUNWSyxNQUFNLENBQUMsVUFBQWdDLFVBQVU7SUFBQSxPQUFJQSxVQUFVLEtBQUssUUFBUTtFQUFBLEVBQUMsQ0FDN0N5QixJQUFJLENBQUMsR0FBRyxDQUFDO0FBQUE7QUFFZCxJQUFNQyxnQkFBZ0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQVU7QUFDcEcsSUFBTUMsV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBVTtBQUV2RixPQUFPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlDLFVBQWlELEVBQWM7RUFBQSxJQUFBQyxnQkFBQSxFQUFBQyxnQkFBQTtFQUMvRixJQUFNQyxjQUFjLEdBQUcsQ0FBQUgsVUFBVSxhQUFWQSxVQUFVLGdCQUFBQyxnQkFBQSxHQUFWRCxVQUFVLENBQUVJLElBQUksY0FBQUgsZ0JBQUEsdUJBQWhCQSxnQkFBQSxDQUFrQkksV0FBVyxDQUFDLENBQUMsS0FBSSxFQUFFO0VBQzVELElBQU1DLGNBQWMsR0FBRyxDQUFBTixVQUFVLGFBQVZBLFVBQVUsZ0JBQUFFLGdCQUFBLEdBQVZGLFVBQVUsQ0FBRU8sSUFBSSxjQUFBTCxnQkFBQSx1QkFBaEJBLGdCQUFBLENBQWtCRyxXQUFXLENBQUMsQ0FBQyxLQUFJLEVBQUU7RUFFNUQsT0FDRUYsY0FBYyxDQUFDcEksVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUNuQytILFdBQVcsQ0FBQ1UsUUFBUSxDQUFDTCxjQUE4QyxDQUFDLElBQ3BFTixnQkFBZ0IsQ0FBQ3BJLElBQUksQ0FBQyxVQUFBZ0osR0FBRztJQUFBLE9BQUlILGNBQWMsQ0FBQzlELFFBQVEsQ0FBQ2lFLEdBQUcsQ0FBQztFQUFBLEVBQUM7QUFFOUQsQ0FBQztBQUVELE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSVYsVUFBMEI7RUFBQSxPQUNqRUEsVUFBVSxDQUFDUCxJQUFJLFlBQVlDLElBQUksSUFDL0JNLFVBQVUsQ0FBQ1csWUFBWSxZQUFZakIsSUFBSSxJQUN2QzdJLE9BQU8sQ0FBQ21KLFVBQVUsQ0FBQ1ksYUFBYSxJQUFJWixVQUFVLENBQUNhLFlBQVksSUFBSWIsVUFBVSxDQUFDYyxRQUFRLENBQUM7QUFBQTtBQUVyRixPQUFPLElBQU1DLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUl2SixRQUFnQyxFQUFvQjtFQUNyRixLQUFLLElBQUk0RixLQUFLLEdBQUc1RixRQUFRLENBQUNoRCxNQUFNLEdBQUcsQ0FBQyxFQUFFNEksS0FBSyxJQUFJLENBQUMsRUFBRUEsS0FBSyxJQUFJLENBQUMsRUFBRTtJQUFBLElBQUE0RCxlQUFBO0lBQzVELElBQU05SSxTQUFTLElBQUE4SSxlQUFBLEdBQUd4SixRQUFRLENBQUM0RixLQUFLLENBQUMsY0FBQTRELGVBQUEsdUJBQWZBLGVBQUEsQ0FBaUJySixFQUFFO0lBQ3JDLElBQUlPLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUVILFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtNQUN0QyxPQUFPRyxTQUFTO0lBQ2xCO0VBQ0Y7RUFDQSxPQUFPLElBQUk7QUFDYixDQUFDO0FBRUQsT0FBTyxJQUFNK0ksd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSTlNLFlBQW9CLEVBQUVvQyxVQUFrQixFQUFFakQsY0FBc0IsRUFBYTtFQUNwSCxJQUFNd0MsTUFBTSxHQUFHekMsZ0JBQWdCLENBQUNDLGNBQWMsQ0FBQztFQUMvQyxPQUFPQyxJQUFJLENBQUN3QyxHQUFHLENBQUMsQ0FBQyxFQUFFNUIsWUFBWSxHQUFHb0MsVUFBVSxHQUFHVCxNQUFNLENBQUM7QUFDeEQsQ0FBQztBQUVELE9BQU8sSUFBTW9MLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDdkMsV0FBeUMsRUFDekN6RSxXQUFvQixFQUNwQjJFLE9BQWdCLEVBQ0s7RUFDckIsSUFBSUYsV0FBVyxJQUFJQSxXQUFXLENBQUNuSyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQ3pDLE9BQU9tSyxXQUFXO0VBQ3BCO0VBQ0EsSUFBSSxDQUFDekUsV0FBVyxJQUFJNEMsS0FBSyxDQUFDQyxPQUFPLENBQUM4QixPQUFPLENBQUMsRUFBRTtJQUMxQyxPQUFPQSxPQUFPO0VBQ2hCO0VBQ0EsT0FBTyxFQUFFO0FBQ1gsQ0FBQztBQUVELE9BQU8sSUFBTXNDLGlDQUFpQyxHQUFHLFNBQXBDQSxpQ0FBaUNBLENBQUluQixVQUFpRCxFQUFhO0VBQzlHLElBQU1vQixTQUFTLEdBQUdwQixVQUFVLENBQUNPLElBQUksQ0FBQ0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBQWEsTUFBQSxDQUFPckIsVUFBVSxDQUFDSSxJQUFJLENBQUU7RUFDNUUsVUFBQWlCLE1BQUEsQ0FBVXJCLFVBQVUsQ0FBQ08sSUFBSSxFQUFBYyxNQUFBLENBQUdELFNBQVM7QUFDdkMsQ0FBQztBQUVELE9BQU8sSUFBTUUsNEJBQTRCLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkN0QixVQUErRTtFQUFBLE9BQ3hEQSxVQUFVLENBQUNhLFlBQVksSUFBSWIsVUFBVSxDQUFDYyxRQUFRLElBQUlkLFVBQVUsQ0FBQ1ksYUFBYTtBQUFBO0FBRW5HLE9BQU8sSUFBTVcsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FBSW5KLE1BUzlDLEVBQWM7RUFDYixJQUFJQSxNQUFNLENBQUN3QixzQkFBc0IsSUFBSXhCLE1BQU0sQ0FBQ3VCLFdBQVcsRUFBRSxPQUFPLEtBQUs7RUFDckUsSUFBSXZCLE1BQU0sQ0FBQ29DLGVBQWUsR0FBRyxDQUFDLElBQUlwQyxNQUFNLENBQUN3RyxXQUFXLEdBQUcsQ0FBQyxFQUFFLE9BQU8sS0FBSztFQUN0RSxJQUFJeEcsTUFBTSxDQUFDc0MsV0FBVyxFQUFFLE9BQU8sS0FBSztFQUNwQyxJQUFJdEMsTUFBTSxDQUFDb0osV0FBVyxFQUFFLE9BQU8sS0FBSztFQUNwQyxJQUFJcEosTUFBTSxDQUFDcUosV0FBVyxFQUFFLE9BQU8sS0FBSztFQUNwQyxJQUFJckosTUFBTSxDQUFDc0osaUJBQWlCLEVBQUUsT0FBTyxLQUFLO0VBQzFDLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU1DLG9DQUFvQyxHQUFHLFNBQXZDQSxvQ0FBb0NBLENBQUlDLFVBQXNDLEVBQXNCO0VBQy9HLElBQUlBLFVBQVUsS0FBS25OLFNBQVMsSUFBSW1OLFVBQVUsS0FBSyxJQUFJLEVBQUUsT0FBTyxJQUFJO0VBQ2hFLE9BQU9BLFVBQVUsR0FBRzFPLFFBQVEsQ0FBQzJPLFNBQVMsR0FBRzNPLFFBQVEsQ0FBQzRPLFdBQVc7QUFDL0QsQ0FBQztBQUVELE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSTNKLE1BUXhDLEVBQWM7RUFDYixJQUFJLENBQUNBLE1BQU0sQ0FBQzRKLHNCQUFzQixJQUFJNUosTUFBTSxDQUFDdUIsV0FBVyxJQUFJdkIsTUFBTSxDQUFDNkMsT0FBTyxJQUFJN0MsTUFBTSxDQUFDcUosV0FBVyxFQUFFO0lBQ2hHLE9BQU8sS0FBSztFQUNkO0VBQ0EsT0FBTzVLLE9BQU8sQ0FBQ3VCLE1BQU0sQ0FBQytDLG1CQUFtQixJQUFLLENBQUMvQyxNQUFNLENBQUM2SixXQUFXLElBQUk3SixNQUFNLENBQUM4SixNQUFPLENBQUM7QUFDdEYsQ0FBQztBQUVELE9BQU8sSUFBTUMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FDcENuTyxZQUFvQixFQUNwQkcsWUFBb0IsRUFDcEJELFNBQWlCLEVBQ2pCc0MsbUJBQTJCLEVBQ2hCO0VBQ1gsSUFBSUEsbUJBQW1CLElBQUksQ0FBQyxFQUFFLE9BQU9BLG1CQUFtQjtFQUN4RCxJQUFNNEwsU0FBUyxHQUFHN08sSUFBSSxDQUFDd0MsR0FBRyxDQUFDLENBQUMsRUFBRS9CLFlBQVksR0FBR0csWUFBWSxHQUFHRCxTQUFTLENBQUM7RUFDdEUsT0FBT1gsSUFBSSxDQUFDd0MsR0FBRyxDQUFDLENBQUMsRUFBRVMsbUJBQW1CLEdBQUc0TCxTQUFTLENBQUM7QUFDckQsQ0FBQztBQVVELE9BQU8sSUFBTUMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBQSxFQUFrQztFQUN4RSxJQUFJLE9BQU9DLE1BQU0sS0FBSyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDNUMsT0FBT0EsTUFBTTtBQUNmLENBQUM7QUFFRCxPQUFPLElBQU1DLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDQyxLQUE4QixFQUM5QjdJLFdBQW9CO0VBQUEsT0FBQThJLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtJQVdwQkMsT0FBTyxFQUFFL0ksV0FBVztJQUNwQmdKLGdCQUFnQixFQUFFLEVBQUU7SUFDcEJDLGtCQUFrQixFQUFFO0VBQUksR0FDcEJKLEtBQUssQ0FBQ0ssV0FBVyxJQUFJLElBQUksSUFBSTtJQUFFQyxXQUFXLEVBQUVOLEtBQUssQ0FBQ0s7RUFBWSxDQUFDLEdBQy9ETCxLQUFLLENBQUNPLFdBQVcsSUFBSSxJQUFJLElBQUk7SUFBRUMsa0JBQWtCLEVBQUVSLEtBQUssQ0FBQ087RUFBWSxDQUFDLEdBQ3RFUCxLQUFLLENBQUNTLGNBQWMsSUFBSSxJQUFJLElBQUk7SUFBRUMsY0FBYyxFQUFFVixLQUFLLENBQUNTO0VBQWUsQ0FBQyxHQUN4RVQsS0FBSyxDQUFDVyxlQUFlLElBQUksSUFBSSxJQUFJO0lBQUVDLGNBQWMsRUFBRVosS0FBSyxDQUFDVztFQUFnQixDQUFDLEdBQzFFWCxLQUFLLENBQUNhLGNBQWMsSUFBSSxJQUFJLElBQUk7SUFBRUMsUUFBUSxFQUFFZCxLQUFLLENBQUNhO0VBQWUsQ0FBQztBQUFBLENBQ3RFO0FBRUYsT0FBTyxJQUFNRSx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJNUosV0FBb0IsRUFBRTZKLGFBQXFCLEVBQUUzTCxPQUFlO0VBQUEsT0FDbEc4QixXQUFXLEdBQUc2SixhQUFhLEdBQUczTCxPQUFPO0FBQUE7QUFFdkMsT0FBTyxJQUFNNEwsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FBSUMsV0FBb0IsRUFBRUMsWUFBcUI7RUFBQSxPQUN4RjlNLE9BQU8sQ0FBQzZNLFdBQVcsSUFBSUMsWUFBWSxDQUFDO0FBQUE7QUFFdEMsT0FBTyxJQUFNQyxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQWdDQSxDQUMzQ3pJLG1CQUF3QyxFQUN4QzBELE9BQWlCLEVBQ2pCZ0YsbUJBQTZCO0VBQUEsT0FDZ0Q7SUFDN0VoRixPQUFPLEVBQUUxRCxtQkFBbUIsR0FBRzFHLFNBQVMsR0FBR29LLE9BQU87SUFDbERpRixjQUFjLEVBQUUzSSxtQkFBbUIsR0FBRzFHLFNBQVMsR0FBR29QO0VBQ3BELENBQUM7QUFBQSxDQUFDO0FBRUYsT0FBTyxJQUFNRSw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQTZCQSxDQUFJcEssV0FBb0IsRUFBRXpCLFNBQWlCO0VBQUEsT0FDbkZ5QixXQUFXLEdBQUd6QixTQUFTLEdBQUcsSUFBSTtBQUFBO0FBRWhDLE9BQU8sSUFBTThMLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlDLGtCQUEyQjtFQUFBLE9BQWMsQ0FBQ0Esa0JBQWtCO0FBQUE7QUFFakcsT0FBTyxJQUFNQywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJQyxlQUF3QjtFQUFBLE9BQWNBLGVBQWU7QUFBQTtBQUVyRyxPQUFPLElBQU1DLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQzdDRCxlQUF3QixFQUN4QkUscUJBQThCLEVBQzlCbEcsVUFBeUIsRUFDekJtRyxzQkFBcUM7RUFBQSxPQUN6QixDQUFDSCxlQUFlLElBQUksQ0FBQ0UscUJBQXFCLElBQUl4TixPQUFPLENBQUNzSCxVQUFVLENBQUMsSUFBSUEsVUFBVSxLQUFLbUcsc0JBQXNCO0FBQUE7QUFFeEgsT0FBTyxJQUFNQyw4QkFBOEIsR0FBRyxTQUFqQ0EsOEJBQThCQSxDQUN6Q0MsWUFBcUIsRUFDckJMLGVBQXdCLEVBQ3hCRSxxQkFBOEIsRUFDOUJJLGdCQUF5QjtFQUFBLE9BQ2IsQ0FBQ0QsWUFBWSxJQUFJTCxlQUFlLElBQUlFLHFCQUFxQixJQUFJSSxnQkFBZ0I7QUFBQTtBQUUzRixPQUFPLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQ25DQyxTQUErRjtFQUFBLE9BRS9GQSxTQUFTLEdBQUczTix5QkFBeUIsQ0FBQzJOLFNBQVMsQ0FBQzNRLFlBQVksRUFBRTJRLFNBQVMsQ0FBQ3pRLFNBQVMsRUFBRXlRLFNBQVMsQ0FBQ3hRLFlBQVksQ0FBQyxHQUFHLEtBQUs7QUFBQTtBQUVwSCxPQUFPLElBQU15USxtQ0FBbUMsR0FBRyxTQUF0Q0EsbUNBQW1DQSxDQUM5Q1QsZUFBd0IsRUFDeEJwTixhQUF3QyxFQUN4Q00sY0FBc0IsRUFDdEJ3TixxQkFBb0M7RUFBQSxPQUVwQyxDQUFDVixlQUFlLElBQUl0TixPQUFPLENBQUNFLGFBQWEsQ0FBQyxJQUFJTSxjQUFjLEdBQUcsQ0FBQyxJQUFJd04scUJBQXFCLEtBQUs5TixhQUFhO0FBQUE7QUFFN0csT0FBTyxJQUFNK04saUNBQWlDLEdBQUcsU0FBcENBLGlDQUFpQ0EsQ0FBSUMsVUFBbUIsRUFBRVosZUFBd0I7RUFBQSxPQUM3RlksVUFBVSxJQUFJLENBQUNaLGVBQWU7QUFBQTtBQUVoQyxPQUFPLElBQU1hLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQUlDLG1CQUE0QixFQUFFNU4sY0FBc0I7RUFBQSxPQUNoRzROLG1CQUFtQixJQUFJNU4sY0FBYyxHQUFHLENBQUM7QUFBQTtBQUUzQyxPQUFPLElBQU02TixzQ0FBc0MsR0FBRyxTQUF6Q0Esc0NBQXNDQSxDQUFJZixlQUF3QjtFQUFBLE9BQWMsQ0FBQ0EsZUFBZTtBQUFBO0FBRTdHLE9BQU8sSUFBTWdCLG1DQUFtQyxHQUFHLFNBQXRDQSxtQ0FBbUNBLENBQUlwTyxhQUF3QztFQUFBLE9BQWMsQ0FBQ0EsYUFBYTtBQUFBO0FBRXhILE9BQU8sSUFBTXFPLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQzdDQyxPQUE0RSxFQUM1RXRPLGFBQXdDLEVBQ3RCO0VBQ2xCLElBQUksQ0FBQ0EsYUFBYSxJQUFJLENBQUNzTyxPQUFPLEVBQUUsT0FBTyxJQUFJO0VBQzNDLElBQUlBLE9BQU8sQ0FBQ0MsZUFBZSxLQUFLdk8sYUFBYSxJQUFJLE9BQU9zTyxPQUFPLENBQUNuUixTQUFTLEtBQUssUUFBUSxJQUFJbVIsT0FBTyxDQUFDblIsU0FBUyxHQUFHLENBQUMsRUFBRTtJQUMvRyxPQUFPbVIsT0FBTyxDQUFDblIsU0FBUztFQUMxQjtFQUNBLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU1xUiwrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ3BCLGVBQXdCLEVBQ3hCcUIsZ0JBQTJDLEVBQzNDaEIsWUFBcUI7RUFBQSxPQUNULENBQUNMLGVBQWUsSUFBSXFCLGdCQUFnQixJQUFJLElBQUksSUFBSUEsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJaEIsWUFBWTtBQUFBO0FBRWxHLE9BQU8sSUFBTWlCLG1DQUFtQyxHQUFHLFNBQXRDQSxtQ0FBbUNBLENBQzlDQyxnQkFBeUIsRUFDekJDLFFBQWlCLEVBQ2pCbkIsWUFBcUI7RUFBQSxPQUNUa0IsZ0JBQWdCLEtBQUtDLFFBQVEsSUFBSW5CLFlBQVk7QUFBQTtBQUUzRCxPQUFPLElBQU1vQix5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJMU4sU0FBNkIsRUFBRWtGLEtBQWE7RUFBQSxPQUNwRmxGLFNBQVMsYUFBVEEsU0FBUyxjQUFUQSxTQUFTLFVBQUFtSixNQUFBLENBQVdqRSxLQUFLO0FBQUEsQ0FBRTtBQUU3QixPQUFPLElBQU15SSxnQ0FBZ0MsR0FBRyxTQUFuQ0EsZ0NBQWdDQSxDQUMzQ0MsUUFBZ0Q7RUFBQSxPQUN6QkEsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUV0SCxPQUFPO0FBQUE7QUFFMUMsT0FBTyxJQUFNdUgsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FDckNwTSxXQUFvQixFQUNwQkMsc0JBQStCLEVBQy9CMUIsU0FBaUI7RUFBQSxPQUNFeUIsV0FBVyxJQUFJQyxzQkFBc0IsR0FBRzFCLFNBQVMsR0FBRyxJQUFJO0FBQUEsQ0FBQztBQUU5RSxPQUFPLElBQU04TiwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFJOUwsV0FBb0IsRUFBRUosaUJBQTBCLEVBQUVuQyxFQUFVO0VBQUEsT0FDdEd1QyxXQUFXLElBQUlKLGlCQUFpQixHQUFHbkMsRUFBRSxHQUFHLEVBQUU7QUFBQTtBQUU1QyxPQUFPLElBQU1zTyx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJTixRQUE2QjtFQUFBLE9BQWM5TyxPQUFPLENBQUM4TyxRQUFRLENBQUM7QUFBQTtBQUV0RyxPQUFPLElBQU1PLG9DQUFvQyxHQUFHLFNBQXZDQSxvQ0FBb0NBLENBQy9DMU8sUUFBYSxFQUNiOEIsVUFBa0I7RUFBQSxPQUVsQjlCLFFBQVEsQ0FBQzJFLE1BQU0sQ0FBQyxVQUFBekUsR0FBRztJQUFBLE9BQUlBLEdBQUcsQ0FBQzBCLElBQUksS0FBS2pHLGVBQWUsQ0FBQ29HLElBQUksSUFBSTdCLEdBQUcsQ0FBQ2tGLElBQUksQ0FBQ2pGLEVBQUUsS0FBSzJCLFVBQVUsQ0FBQzZNLFFBQVEsQ0FBQyxDQUFDO0VBQUEsRUFBQyxDQUFDQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQTtBQUUzRyxPQUFPLElBQU1DLG1DQUFtQyxHQUFHLFNBQXRDQSxtQ0FBbUNBLENBQzlDQyx3QkFBaUMsRUFDakNDLFNBQTZCO0VBQUEsT0FDTEQsd0JBQXdCLEdBQUcsYUFBYSxHQUFHQyxTQUFTO0FBQUEsQ0FBQztBQVkvRSxPQUFPLElBQU1DLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUlDLEtBQW1DLEVBQUs7RUFDckYsSUFBTW5SLGFBQWEsR0FBR0wsaUJBQWlCLENBQUN3UixLQUFLLENBQUN2UyxTQUFTLEVBQUV1UyxLQUFLLENBQUN2UixhQUFhLENBQUM7RUFDN0UsSUFBTUssWUFBWSxHQUFHSixrQkFBa0IsQ0FDckNzUixLQUFLLENBQUN6UyxZQUFZLEVBQ2xCeVMsS0FBSyxDQUFDdlMsU0FBUyxFQUNmdVMsS0FBSyxDQUFDdFMsWUFBWSxFQUNsQnNTLEtBQUssQ0FBQ0MsZUFDUixDQUFDO0VBQ0QsSUFBTUMsbUJBQW1CLEdBQUd2UixnQ0FBZ0MsQ0FBQ3FSLEtBQUssQ0FBQ0MsZUFBZSxFQUFFcFIsYUFBYSxFQUFFQyxZQUFZLENBQUM7RUFFaEgsT0FBTztJQUNMb1IsbUJBQW1CLEVBQW5CQSxtQkFBbUI7SUFDbkJ6UixhQUFhLEVBQUV1UixLQUFLLENBQUN2UyxTQUFTO0lBQzlCMFMsb0JBQW9CLEVBQUVsUSw0QkFBNEIsQ0FBQytQLEtBQUssQ0FBQzlQLGNBQWMsQ0FBQztJQUN4RWtRLDJCQUEyQixFQUFFL1AsNEJBQTRCLENBQUMyUCxLQUFLLENBQUMxUCxhQUFhLEVBQUUwUCxLQUFLLENBQUN2UyxTQUFTLENBQUM7SUFDL0Y0UywwQkFBMEIsRUFBRXZSO0VBQzlCLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxJQUFNd1Isd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSTNPLE1BS3hDLEVBQWtEO0VBQ2pELElBQU00TyxpQkFBaUIsR0FBRzVPLE1BQU0sQ0FBQ3ZDLFdBQVcsR0FBR3VDLE1BQU0sQ0FBQzZPLFlBQVksR0FBRzdPLE1BQU0sQ0FBQ2xFLFNBQVM7RUFDckYsSUFBTWdULG1CQUFtQixHQUFHOU8sTUFBTSxDQUFDK08sYUFBYSxHQUFHL08sTUFBTSxDQUFDNk8sWUFBWSxHQUFHN08sTUFBTSxDQUFDbEUsU0FBUztFQUN6RixPQUFPO0lBQUUyQixXQUFXLEVBQUVtUixpQkFBaUI7SUFBRXpRLFVBQVUsRUFBRTJRLG1CQUFtQixHQUFHRjtFQUFrQixDQUFDO0FBQ2hHLENBQUM7QUFLRCxPQUFPLElBQU1JLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBMkJBLENBQUloUCxNQUszQyxFQUEyQjtFQUMxQixJQUFJcEMsOEJBQThCLENBQUNvQyxNQUFNLENBQUNuQyxnQkFBZ0IsRUFBRW1DLE1BQU0sQ0FBQ2xDLGVBQWUsQ0FBQyxFQUFFO0lBQ25GLE9BQU87TUFBRW1SLElBQUksRUFBRTtJQUFtQixDQUFDO0VBQ3JDO0VBQ0EsT0FBTztJQUNMQSxJQUFJLEVBQUUsU0FBUztJQUNmcFQsWUFBWSxFQUFFZ04sd0JBQXdCLENBQUM3SSxNQUFNLENBQUNqRSxZQUFZLEVBQUVpRSxNQUFNLENBQUM3QixVQUFVLEVBQUU2QixNQUFNLENBQUNqRSxZQUFZLENBQUM7SUFDbkcrQixlQUFlLEVBQUVrQyxNQUFNLENBQUNsQztFQUMxQixDQUFDO0FBQ0gsQ0FBQztBQUVELE9BQU8sSUFBTW9SLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUl0VCxZQUFvQixFQUFFRyxZQUFvQjtFQUFBLE9BQ3ZGSCxZQUFZLEdBQUdHLFlBQVk7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==