@projectcor/maia-components 2.11.109-1 → 2.11.109-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58,6 +58,9 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
58
58
  var turnAnchorOffset = function turnAnchorOffset(viewportHeight) {
59
59
  return Math.min(viewportHeight * 0.18, 200);
60
60
  };
61
+
62
+ /** Duración del scroll al anclar el turno. Más lento que el `smooth` nativo, que se siente brusco. */
63
+ var TURN_SCROLL_DURATION_MS = 550;
61
64
  var MessageWrapper = function MessageWrapper(_ref) {
62
65
  var isCurrentUser = _ref.isCurrentUser,
63
66
  children = _ref.children,
@@ -424,6 +427,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
424
427
  var anchoredTurnIdRef = useRef(null);
425
428
  var spacerElRef = useRef(null);
426
429
  var spacerHeightRef = useRef(0);
430
+ var turnScrollRafRef = useRef(null);
427
431
  var wasLoadingMessagesRef = useRef(false);
428
432
  var lastScrolledSessionRef = useRef(null);
429
433
  var _useState5 = useState(false),
@@ -467,32 +471,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
467
471
  var handleSelectOption = useCallback(function (option) {
468
472
  changeProject(option);
469
473
  }, [changeProject]);
470
- var handleSuggestionClick = useCallback(function (messageId, suggestion) {
471
- if (!(suggestion !== null && suggestion !== void 0 && suggestion.trim())) return;
472
- if (selectedSuggestionMessageIds[messageId]) return;
473
- var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
474
- event(EVENTS.aiChatSuggestedAnswer, {
475
- agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
476
- });
477
- setSelectedSuggestionMessageIds(function (prev) {
478
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
479
- });
480
- var targetMessage = messages.find(function (msg) {
481
- return msg.id === messageId;
482
- });
483
- var isRetrySuggestion = !!(targetMessage !== null && targetMessage !== void 0 && targetMessage.isError) && suggestion === t('chat.retry');
484
- if (isRetrySuggestion) {
485
- var _lastUserMessage = messages.filter(function (msg) {
486
- return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
487
- }).at(-1);
488
- if (_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message) {
489
- var retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
490
- sendMessage(_lastUserMessage.message, retryAttachments);
491
- return;
492
- }
493
- }
494
- sendMessage(suggestion);
495
- }, [sendMessage, selectedSuggestionMessageIds, event, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type, messages, t, authUser.id]);
496
474
 
497
475
  /**
498
476
  * Recalcula el botón "scroll to bottom" y los gradientes de borde a partir de
@@ -547,6 +525,36 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
547
525
  };
548
526
  if (delayMs > 0) setTimeout(run, delayMs);else run();
549
527
  }, [updateScrollAffordances]);
528
+ var cancelTurnScroll = useCallback(function () {
529
+ if (turnScrollRafRef.current === null) return;
530
+ cancelAnimationFrame(turnScrollRafRef.current);
531
+ turnScrollRafRef.current = null;
532
+ }, []);
533
+
534
+ /**
535
+ * Scroll animado con easing propio: `behavior: 'smooth'` no permite regular la
536
+ * duración y el salto al anclar el turno queda demasiado seco.
537
+ */
538
+ var animateScrollTo = useCallback(function (top) {
539
+ cancelTurnScroll();
540
+ var el = messagesRef.current;
541
+ if (!el) return;
542
+ var from = el.scrollTop;
543
+ var distance = top - from;
544
+ if (Math.abs(distance) < 1) return;
545
+ var startedAt = performance.now();
546
+ var _step = function step(now) {
547
+ var progress = Math.min(1, (now - startedAt) / TURN_SCROLL_DURATION_MS);
548
+ var eased = 1 - Math.pow(1 - progress, 3);
549
+ el.scrollTop = from + distance * eased;
550
+ updateScrollAffordances();
551
+ turnScrollRafRef.current = progress < 1 ? requestAnimationFrame(_step) : null;
552
+ };
553
+ turnScrollRafRef.current = requestAnimationFrame(_step);
554
+ }, [cancelTurnScroll, updateScrollAffordances]);
555
+ useEffect(function () {
556
+ return cancelTurnScroll;
557
+ }, [cancelTurnScroll]);
550
558
  var setSpacerHeight = useCallback(function (next) {
551
559
  if (Math.abs(spacerHeightRef.current - next) < 1) return;
552
560
  spacerHeightRef.current = next;
@@ -593,11 +601,12 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
593
601
  return;
594
602
  }
595
603
 
596
- // Reservamos lo mínimo para que `targetScrollTop` sea alcanzable.
604
+ // Reservamos lo mínimo para que `targetScrollTop` sea alcanzable. El
605
+ // spacer se inserta de una (es alto reservado, no contenido visible);
606
+ // lo único que se percibe es el desplazamiento animado.
597
607
  setSpacerHeight(Math.max(0, el.clientHeight - turnHeight - offset));
598
- el.scrollTop = targetScrollTop;
599
- updateScrollAffordances();
600
- }, [measureTurn, setSpacerHeight, updateScrollAffordances]);
608
+ animateScrollTo(targetScrollTop);
609
+ }, [measureTurn, setSpacerHeight, updateScrollAffordances, animateScrollTo]);
601
610
 
602
611
  /**
603
612
  * Encoge el spacer a medida que crece la respuesta: el alto total del scroll
@@ -670,6 +679,45 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
670
679
  sendMessageRef.current = sendMessage;
671
680
  stopGenerationRef.current = stopGeneration;
672
681
  onSendMessageReadyRef.current = onSendMessageReady;
682
+
683
+ /**
684
+ * `handleSuggestionClick` se pasa a TODOS los MessageItem, así que su identidad
685
+ * decide si el `memo` de la lista sostiene. Leemos por ref lo que cambia en cada
686
+ * update (`messages`, `sendMessage`, las sugerencias ya elegidas) para que el
687
+ * callback sea estable: si no, al terminar el stream se repinta el chat entero
688
+ * y cada MaiaStreamdown vuelve a parsear su markdown.
689
+ */
690
+ var messagesDataRef = useRef(messages);
691
+ messagesDataRef.current = messages;
692
+ var selectedSuggestionMessageIdsRef = useRef(selectedSuggestionMessageIds);
693
+ selectedSuggestionMessageIdsRef.current = selectedSuggestionMessageIds;
694
+ var handleSuggestionClick = useCallback(function (messageId, suggestion) {
695
+ if (!(suggestion !== null && suggestion !== void 0 && suggestion.trim())) return;
696
+ if (selectedSuggestionMessageIdsRef.current[messageId]) return;
697
+ var currentMessages = messagesDataRef.current;
698
+ var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
699
+ event(EVENTS.aiChatSuggestedAnswer, {
700
+ agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
701
+ });
702
+ setSelectedSuggestionMessageIds(function (prev) {
703
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
704
+ });
705
+ var targetMessage = currentMessages.find(function (msg) {
706
+ return msg.id === messageId;
707
+ });
708
+ var isRetrySuggestion = !!(targetMessage !== null && targetMessage !== void 0 && targetMessage.isError) && suggestion === t('chat.retry');
709
+ if (isRetrySuggestion) {
710
+ var _lastUserMessage = currentMessages.filter(function (msg) {
711
+ return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
712
+ }).at(-1);
713
+ if (_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message) {
714
+ var retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
715
+ sendMessageRef.current(_lastUserMessage.message, retryAttachments);
716
+ return;
717
+ }
718
+ }
719
+ sendMessageRef.current(suggestion);
720
+ }, [event, agent, t, authUser.id]);
673
721
  useEffect(function () {
674
722
  if (onSendMessageReadyRef.current) {
675
723
  onSendMessageReadyRef.current(sendMessageProxyRef.current, stopGenerationProxyRef.current, waitingResponse, isWriting);
@@ -952,36 +1000,43 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
952
1000
  "aria-hidden": "true"
953
1001
  })]
954
1002
  });
955
- return /*#__PURE__*/_jsxs(SCMessagesOuter, {
956
- $scrollOnParent: isScrollOnParent,
957
- children: [/*#__PURE__*/_jsx(SCMessagesGradientTop, {
958
- $show: showTopGradient,
959
- "aria-hidden": "true"
960
- }), isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
961
- ref: messagesRef,
962
- onScroll: handleScrollToBottom,
963
- children: /*#__PURE__*/_jsx(SCMessagesInner, {
964
- $scrollOnParent: isScrollOnParent,
1003
+ return (
1004
+ /*#__PURE__*/
1005
+ // Si el usuario mueve el scroll durante la animación, abortamos: no le
1006
+ // peleamos el control del contenedor.
1007
+ _jsxs(SCMessagesOuter, {
1008
+ $scrollOnParent: isScrollOnParent,
1009
+ onWheel: cancelTurnScroll,
1010
+ onTouchStart: cancelTurnScroll,
1011
+ children: [/*#__PURE__*/_jsx(SCMessagesGradientTop, {
1012
+ $show: showTopGradient,
1013
+ "aria-hidden": "true"
1014
+ }), isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
1015
+ ref: messagesRef,
1016
+ onScroll: handleScrollToBottom,
1017
+ children: /*#__PURE__*/_jsx(SCMessagesInner, {
1018
+ $scrollOnParent: isScrollOnParent,
1019
+ children: messagesContent
1020
+ })
1021
+ }) : /*#__PURE__*/_jsx(SCMessagesInner, {
1022
+ ref: messagesRef,
1023
+ onScroll: handleScrollToBottom,
1024
+ $scrollOnParent: false,
965
1025
  children: messagesContent
966
- })
967
- }) : /*#__PURE__*/_jsx(SCMessagesInner, {
968
- ref: messagesRef,
969
- onScroll: handleScrollToBottom,
970
- $scrollOnParent: false,
971
- children: messagesContent
972
- }), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
973
- $show: showBottomGradient,
974
- "aria-hidden": "true"
975
- }), showScrollToBottom && /*#__PURE__*/_jsx(ScrollToBottomButton, {
976
- type: "button",
977
- onClick: handleClickScrollToBottom,
978
- children: /*#__PURE__*/_jsx(ArrowSmallDown, {
979
- color: "#666",
980
- width: "20px",
981
- height: "20px"
982
- })
983
- })]
984
- });
1026
+ }), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
1027
+ $show: showBottomGradient,
1028
+ "aria-hidden": "true"
1029
+ }), showScrollToBottom && /*#__PURE__*/_jsx(ScrollToBottomButton, {
1030
+ type: "button",
1031
+ onClick: handleClickScrollToBottom,
1032
+ children: /*#__PURE__*/_jsx(ArrowSmallDown, {
1033
+ color: "#666",
1034
+ width: "20px",
1035
+ height: "20px"
1036
+ })
1037
+ })]
1038
+ })
1039
+ );
985
1040
  };
986
1041
  export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
987
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJNYWlhU3RyZWFtZG93biIsIkNoYXRIaXN0b3J5Um9sZSIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJSZWFzb25pbmdCbG9jayIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJyZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJMb2FkZXIiLCJGYWRlIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ1R1cm5TcGFjZXIiLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbiIsIlNDTWVzc2FnZXNHcmFkaWVudFRvcCIsIlNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIkVudGl0eUxpbmtDdXN0b21MaW5rIiwiZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUiLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsInR1cm5BbmNob3JPZmZzZXQiLCJ2aWV3cG9ydEhlaWdodCIsIk1hdGgiLCJtaW4iLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwiY2hpbGRyZW4iLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJTdHJlYW1pbmdNZXNzYWdlQm9keSIsIl9wcm9wcyRjcmVhdGVBZ2VudEZvbCIsIl9wcm9wcyRzdWdnZXN0aW9ucyIsInN0cmVhbWluZ1RleHQiLCJpc1N0cmVhbWluZyIsIm1lc3NhZ2VJZCIsInJhd1RleHQiLCJtZXNzYWdlIiwid2luRmxhZ3MiLCJ3aW5kb3ciLCJkaXNwbGF5VGV4dCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwiZGlzcGxheSIsInZhcmlhbnQiLCJjb21wb25lbnRzIiwiYSIsImlzQW5pbWF0aW5nIiwiaXNBc3Npc3RhbnQiLCJpc0Vycm9yIiwiYXBwcm92YWwiLCJjb250ZW50Iiwic291cmNlcyIsImhhbmRsZUZlZWRiYWNrIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImRpc2FibGVGZWVkYmFjayIsInN1Z2dlc3Rpb25zIiwibGVuZ3RoIiwib25TZWxlY3RTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbiIsImhhbmRsZVN1Z2dlc3Rpb25DbGljayIsImRpc2FibGVkIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsImhpZGRlbiIsImlzTGFzdE1lc3NhZ2UiLCJNZXNzYWdlSXRlbSIsIl9wcm9wcyRyZWFzb25pbmciLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJzdHJlYW1BY3Rpdml0eSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIlVTRVIiLCJ0b1N0cmluZyIsIkFTU0lTVEFOVCIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXIiLCJpc0FjdGl2ZVN0cmVhbWluZyIsImhhc1N0cmVhbVRleHQiLCJCb29sZWFuIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV4dGVuc2lvbiIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiaW5jbHVkZXMiLCJjb25jYXQiLCJ0eXBlIiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImFicnVwdCIsImRvY3VtZW50IiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhc0ZlZWRiYWNrIiwiJGlzQXNzaXN0YW50IiwibWVzc2FnZUV4dHJhQ29udGVudCIsImZlZWRiYWNrIiwic2Vzc2lvbklkIiwic3BsaXQiLCJmaWx0ZXIiLCJxdWVzdGlvbklkIiwiam9pbiIsInRyYWNlIiwicmVhc29uaW5nIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwiYWN0aXZpdHkiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNSIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzaG93VG9wR3JhZGllbnRSZWYiLCJzaG93Qm90dG9tR3JhZGllbnRSZWYiLCJzY3JvbGxSYWZSZWYiLCJhbmNob3JlZFR1cm5JZFJlZiIsInNwYWNlckVsUmVmIiwic3BhY2VySGVpZ2h0UmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInRyaW0iLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJpc1JldHJ5U3VnZ2VzdGlvbiIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwicmV0cnlBdHRhY2htZW50cyIsImVudGl0eSIsInVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzIiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsIm5leHRUb3BHcmFkaWVudCIsIm5leHRCb3R0b21HcmFkaWVudCIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFNwYWNlckhlaWdodCIsImFicyIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwibWVhc3VyZVR1cm4iLCJzcGFjZXJFbCIsInF1ZXN0aW9uRWwiLCJxdWVyeVNlbGVjdG9yIiwiY29udGFpbmVyVG9wIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwicXVlc3Rpb25Ub3AiLCJjb250ZW50Qm90dG9tIiwidHVybkhlaWdodCIsInJlc2VydmVUdXJuU3BhY2UiLCJtZWFzdXJlZCIsIm9mZnNldCIsInRhcmdldFNjcm9sbFRvcCIsIm1heCIsInN5bmNUdXJuU3BhY2UiLCJyZXNlcnZlZCIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJzZW5kTWVzc2FnZVByb3h5UmVmIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwic3RvcEdlbmVyYXRpb25Qcm94eVJlZiIsInJhZklkIiwibGFzdEhlaWdodCIsInRpY2siLCJjdXJyZW50SGVpZ2h0IiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5Iiwia2V5IiwicmVmIiwiJHNjcm9sbE9uUGFyZW50IiwiJHNob3ciLCJvblNjcm9sbCIsImNvbG9yIiwid2lkdGgiLCJDaGF0QUlNZXNzYWdlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlNZXNzYWdlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFycm93U21hbGxEb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXJyb3dTbWFsbERvd24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NUdXJuU3BhY2VyLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NNZXNzYWdlc0dyYWRpZW50VG9wLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgRW50aXR5TGlua0N1c3RvbUxpbmssIGdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW50aXR5TGlua1JlbmRlcidcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogQWwgYW5jbGFyIGVsIHR1cm5vLCBsYSBwcmVndW50YSBubyBzZSBwZWdhIGFsIGJvcmRlIHN1cGVyaW9yOiBkZWphbW9zIGFzb21hclxuICogbGEgY29sYSBkZWwgbWVuc2FqZSBhbnRlcmlvciBwYXJhIG5vIHBlcmRlciBlbCBoaWxvIGRlIGxhIGNvbnZlcnNhY2nDs24uXG4gKiBSZWxhdGl2byBhbCB2aWV3cG9ydCBwb3JxdWUgdW4gdmFsb3IgZmlqbyBzZSBjb21lIGRlbWFzaWFkbyBlbiBwYW50YWxsYXMgY29ydGFzLlxuICovXG5jb25zdCB0dXJuQW5jaG9yT2Zmc2V0ID0gKHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5taW4odmlld3BvcnRIZWlnaHQgKiAwLjE4LCAyMDApXG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKHRocmVhZElkczogc3RyaW5nW10sIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JykgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBzdHJlYW1BY3Rpdml0eT86IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ09wdGlvbnNMaXN0PlxuICAgICAgeyhvcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgPFNDT3B0aW9uSXRlbVxuICAgICAgICAgICRoYXNTZWxlY3Rpb249eyEhc2VsZWN0ZWRPcHRpb259XG4gICAgICAgICAgJGRpbW1lZD17ISFzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbj8uaWQgIT09IG9wdGlvbi5pZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3Qob3B0aW9uKX1cbiAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9TQ09wdGlvbkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1NDT3B0aW9uc0xpc3Q+XG4gIClcbn1cblxuLyoqIFNvbG8gZXN0ZSBjb21wb25lbnRlIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhIGVsIHRleHRvIGVuIHN0cmVhbWluZyAobGVlIGRlbCBjb250ZXh0KS4gKi9cbmNvbnN0IFN0cmVhbWluZ01lc3NhZ2VCb2R5ID0gbWVtbyhcbiAgKHByb3BzOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gICAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICAgIGFwcHJvdmFsPzogTWVzc2FnZUl0ZW1Qcm9wc1snYXBwcm92YWwnXVxuICAgIGlzRXJyb3I/OiBib29sZWFuXG4gICAgc291cmNlcz86IE1lc3NhZ2VJdGVtUHJvcHNbJ3NvdXJjZXMnXVxuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocHJvcHMuaXNTdHJlYW1pbmcgPyBwcm9wcy5tZXNzYWdlSWQgOiBudWxsKVxuICAgIGNvbnN0IHJhd1RleHQgPSBwcm9wcy5pc1N0cmVhbWluZyA/IHN0cmVhbWluZ1RleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgLy8gU21vb3RoIHN0cmVhbWluZzogZGVzYWNvcGxhIGxhIGNhZGVuY2lhIGRlbCBiYWNrZW5kIGRlbCByZW5kZXIuXG4gICAgLy8gRHVyYW50ZSBlbCBzdHJlYW1pbmcgbGliZXJhIGNoYXJzIGEgcml0bW8gY29uc3RhbnRlIHbDrWEgckFGOyBjdWFuZG9cbiAgICAvLyB0ZXJtaW5hLCBtdWVzdHJhIGVsIHRleHRvIGZpbmFsIGFsIGluc3RhbnRlIChzaW4gYW5pbWFjacOzbiByZXNpZHVhbCkuXG4gICAgLy8gTG9zIGRlZmF1bHRzIGRlbCBob29rIHNlIGFqdXN0YXJvbiBlbXDDrXJpY2FtZW50ZSBlbiBzdGFnaW5nOyBhdW4gYXPDrVxuICAgIC8vIHNlIGV4cG9uZW4gZmxhZ3MgZGUgcnVudGltZSAod2luZG93LiopIHBhcmEgcG9kZXIgdHVuZWFyIHNpbiByZWNvbXBpbGFyXG4gICAgLy8gc2kgYWxnw7puIGJhY2tlbmQgcHJlc2VudGEgdW5hIGNhZGVuY2lhIG11eSBkaXN0aW50YSBlbiBwcm9kdWNjacOzbi5cbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1BZGFwdCA9IGZhbHNlICAgICAgLy8gZGVzYWN0aXZhIGFkYXB0YWNpw7NuIGFsIGJhY2tlbmRcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1CdWZmZXJNcyA9IDYwMCAgICAgLy8gY29sY2jDs24gb2JqZXRpdm8gKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbUxhZ01zID0gNDUwICAgICAgICAvLyBsYWcgbcOheGltbyBiYXNlIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1NaW5CdWZmZXIgPSA3MCAgICAgLy8gcGlzbyBkZWwgY29sY2jDs24gZW4gY2hhcnNcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1XYXJtdXBNcyA9IDQwMCAgICAgLy8gd2FybXVwIGluaWNpYWwgKG1zKVxuICAgIGNvbnN0IHdpbkZsYWdzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gKHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIHN0cmVhbUFkYXB0PzogYm9vbGVhblxuICAgICAgICAgICAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbUxhZ01zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1NaW5CdWZmZXI/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7fVxuICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlU21vb3RoU3RyZWFtVGV4dChyYXdUZXh0LCB7XG4gICAgICBlbmFibGVkOiAhIXByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgbWF4Q2hhcnNQZXJGcmFtZTogMjQsXG4gICAgICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTGFnTXMgIT0gbnVsbCAmJiB7IHRhcmdldExhZ01zOiB3aW5GbGFncy5zdHJlYW1MYWdNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1BZGFwdCAhPSBudWxsICYmIHsgYWRhcHRUb0JhY2tlbmRSYXRlOiB3aW5GbGFncy5zdHJlYW1BZGFwdCB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciAhPSBudWxsICYmIHsgbWluQnVmZmVyQ2hhcnM6IHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyAhPSBudWxsICYmIHsgd2FybXVwTXM6IHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zIH0pLFxuICAgIH0pXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcblxuICAgIGlmICghZGlzcGxheVRleHQgJiYgIXByb3BzLmlzU3RyZWFtaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGhhc01lbnRpb25zID0gaGFzSW5saW5lTWFya2VycyhkaXNwbGF5VGV4dClcbiAgICBjb25zdCBtZW50aW9uTm9kZXMgPSBoYXNNZW50aW9ucyA/IHJlbmRlclRleHRXaXRoTWVudGlvbnMoZGlzcGxheVRleHQpIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2dldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lKGRpc3BsYXlUZXh0KX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoYXNNZW50aW9ucyAmJiBtZW50aW9uTm9kZXMgPyAoXG4gICAgICAgICAgICAvLyBTaSBoYXkgbWVudGlvbnMsIHJlbmRlcml6YXIgZGlyZWN0YW1lbnRlIChzaW4gbWFya2Rvd24gZW4gZWwgbWlzbW8gcMOhcnJhZm8pXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lJyB9fT57bWVudGlvbk5vZGVzfTwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgLy8gU2luIG1lbnRpb25zLCBwYXNhciBhIFN0cmVhbWRvd24gcGFyYSBtYXJrZG93biBzdXBwb3J0XG4gICAgICAgICAgICA8TWFpYVN0cmVhbWRvd25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImNoYXRcIlxuICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IGE6IEVudGl0eUxpbmtDdXN0b21MaW5rIH0gYXMgTWFpYVN0cmVhbWRvd25Qcm9wc1snY29tcG9uZW50cyddfVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgPC9NYWlhU3RyZWFtZG93bj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJiAhcHJvcHMuaXNFcnJvciAmJiAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhcHJvcHMuYXBwcm92YWwgJiYgIXByb3BzLmlzU3RyZWFtaW5nICYmIChcbiAgICAgICAgICA8TWVzc2FnZUZlZWRiYWNrXG4gICAgICAgICAgICBjb250ZW50PXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIHNvdXJjZXM9e3Byb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17cHJvcHMuaGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17cHJvcHMuZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgKCFwcm9wcy5pc0Vycm9yIHx8IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGgpICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlTdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Vycm9yICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhIWNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgJiYgKFxuICAgICAgICAgICAgPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1xuICAgICAgICAgICAgICBhZ2VudElkPXtjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5jb25zdCBNZXNzYWdlSXRlbSA9IG1lbW8oKHByb3BzOiBNZXNzYWdlSXRlbVByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB1c2VyLFxuICAgIG1lc3NhZ2UsXG4gICAgaXNTdHJlYW1pbmcsXG4gICAgaXNFcnJvcixcbiAgICBhdXRoVXNlcixcbiAgICBvcHRpb25zLFxuICAgIGlzQ2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbixcbiAgICBpc0xhc3RNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IHVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKClcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IHVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGlkKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gaWQgOiBudWxsKVxuICBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZyA9ICEhaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlclxuICBjb25zdCBoYXNTdHJlYW1UZXh0ID0gQm9vbGVhbihzdHJlYW1pbmdUZXh0KVxuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPVxuICAgIGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYXR0YWNobWVudHNcbiAgICAgIDogIWlzQXNzaXN0YW50ICYmIEFycmF5LmlzQXJyYXkoc291cmNlcylcbiAgICAgICAgPyAoc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFtdXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxuICAgIGNvbnN0IGZpbGVVcmwgPSBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBpZiAoZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYXR0YWNobWVudC5maWxlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWJsb2JVcmwpIHJldHVyblxuXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSBibG9iVXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgbGluay5jbGljaygpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybClcbiAgICAgIH0sIDEwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGF0dGFjaG1lbnQnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gICAgICA8L01lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrQ2xpY2sgPSAoZmVlZGJhY2s6IEZlZWRiYWNrKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gaWRcbiAgICAgIC5zcGxpdCgnLScpXG4gICAgICAuZmlsdGVyKHF1ZXN0aW9uSWQgPT4gcXVlc3Rpb25JZCAhPT0gJ2Fuc3dlcicpXG4gICAgICAuam9pbignLScpXG4gICAgaGFuZGxlRmVlZGJhY2s/LihmZWVkYmFjaywgc2Vzc2lvbklkKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0gZGF0YS1tZXNzYWdlLWlkPXtpZH0+XG4gICAgICA8U0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgICB7aXNBc3Npc3RhbnQgJiYgIWlzQWN0aXZlU3RyZWFtaW5nICYmIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+fVxuICAgICAgICB7ISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8U0NBdHRhY2htZW50c1JvdyAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlQXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZXRlY3RhciBzaSBlcyB1biBhcmNoaXZvIGRlIGF1ZGlvXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgaXNBdWRpb0ZpbGUgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgICAgICAgICAgICAgWydmbGFjJywgJ200YScsICdtcDMnLCAnbXA0JywgJ29nYScsICdvZ2cnLCAnd2F2JywgJ3dlYm0nXS5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uc29tZShleHQgPT5cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9GaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkRvd25sb2FkPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQoYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0F0dGFjaG1lbnRzUm93PlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCAoaXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dCkpICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHR9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXtpc0FjdGl2ZVN0cmVhbWluZyB8fCAhIWhhc1NlbGVjdGVkU3VnZ2VzdGlvbn1cbiAgICAgICAgICAgIG1lc3NhZ2VJZD17aWR9XG4gICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHsvKiBMYSBhY2Npw7NuIHZhIERFQkFKTyBkZWwgdGV4dG86IHByaW1lcm8gc2UgbGVlIHF1w6kgdmEgYSBoYWNlciB5IGFiYWpvXG4gICAgICAgICAgICBxdcOpIGVzdMOhIGhhY2llbmRvLCBjb21vIGVuIENoYXRHUFQuIExvIHRlbsOtYW1vcyBhbCByZXbDqXMuXG4gICAgICAgICAgICBTaW4gU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW46IHN1IGBtYXJnaW4tdG9wOiAtMjRweGAgZXN0w6EgY2FsaWJyYWRvXG4gICAgICAgICAgICBwYXJhIGVsIGdhcCBkZSAzNnB4IGRlIFNDTWVzc2FnZXNJbm5lciwgeSBhY8OhIGVsIHBhZHJlIGVzXG4gICAgICAgICAgICBTQ01lc3NhZ2VJdGVtSW5uZXIgY29uIGdhcCA4cHgg4oCUIHBpbnRhYmEgZWwgaW5kaWNhZG9yIGVuY2ltYS4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiBzdHJlYW1BY3Rpdml0eSAmJiA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IC8+fVxuICAgICAgICB7YXBwcm92YWwgJiYgYXBwcm92YWwucGVuZGluZ19hY3Rpb25zICYmIChcbiAgICAgICAgICA8U0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgYWN0aW9ucz17YXBwcm92YWwucGVuZGluZ19hY3Rpb25zfVxuICAgICAgICAgICAgICBzdGF0dXM9e2FwcHJvdmFsU3RhdHVzfVxuICAgICAgICAgICAgICBvbkFwcHJvdmU9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ2FwcHJvdmUnKX1cbiAgICAgICAgICAgICAgb25SZWplY3Q9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ3JlamVjdCcpfVxuICAgICAgICAgICAgICBpc1Byb2plY3REZWxldGVkPXtwcm9wcy5wcm9qZWN0TWV0YWRhdGE/LmlzX2RlbGV0ZWQgPT09IHRydWV9XG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e3Byb3BzLmV4cGFuZGVkfVxuICAgICAgICAgICAgICBoaXRsSW5zdGFuY2VJZD17YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfVxuICAgICAgICAgICAgICB3YXJuaW5nTWVzc2FnZT17YXBwcm92YWwud2FybmluZ19tZXNzYWdlfVxuICAgICAgICAgICAgICBtYW51YWxBcHByb3ZhbERldGVjdGVkPXthcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCB1c2VyU2Nyb2xsaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93VG9wR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dCb3R0b21HcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBUdXJubyBjb24gZWwgc2Nyb2xsIGJham8gY29udHJvbCBkZWwgdXN1YXJpbzogZGVzZGUgcXVlIGVudsOtYSBlbCBtZW5zYWplIHlcbiAgICogaGFzdGEgZWwgcHLDs3hpbW8gZW52w61vIG5vIG1vdmVtb3MgZWwgc2Nyb2xsIHBvciBuaW5nw7puIG1vdGl2by4gRXNcbiAgICogaW5kZXBlbmRpZW50ZSBkZSBsYSBhbHR1cmEgZGVsIHNwYWNlciwgcXVlIHB1ZWRlIGxsZWdhciBhIDAgc2luIGRlc2FuY2xhci5cbiAgICovXG4gIGNvbnN0IGFuY2hvcmVkVHVybklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckVsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VySGVpZ2h0UmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcywgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcblxuICAgICAgY29uc3QgdGFyZ2V0TWVzc2FnZSA9IG1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb24gPSAhIXRhcmdldE1lc3NhZ2U/LmlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gdCgnY2hhdC5yZXRyeScpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLmF0KC0xKVxuICAgICAgICBpZiAobGFzdFVzZXJNZXNzYWdlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmV0cnlBdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKVxuICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHNcbiAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlc1xuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgc2VuZE1lc3NhZ2UobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2Uoc3VnZ2VzdGlvbilcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyxcbiAgICAgIGV2ZW50LFxuICAgICAgYWdlbnQ/LmVudGl0eSxcbiAgICAgIGFnZW50Py5uYW1lLFxuICAgICAgYWdlbnQ/LnR5cGUsXG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHQsXG4gICAgICBhdXRoVXNlci5pZCxcbiAgICBdXG4gIClcblxuICAvKipcbiAgICogUmVjYWxjdWxhIGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiB5IGxvcyBncmFkaWVudGVzIGRlIGJvcmRlIGEgcGFydGlyIGRlXG4gICAqIGxhIHBvc2ljacOzbiBkZWwgc2Nyb2xsLiBMb3MgcmVmcyBldml0YW4gYHNldFN0YXRlYCBjdWFuZG8gZWwgdmFsb3Igbm8gY2FtYmlhOlxuICAgKiBlc3RvIGNvcnJlIGVuIGNhZGEgZnJhbWUgZGVsIHN0cmVhbS5cbiAgICovXG4gIGNvbnN0IHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gZWxcbiAgICAvLyBFbCBzcGFjZXIgZGVsIHR1cm5vIGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG86IHNpIG5vIGxvIGRlc2NvbnRhbW9zXG4gICAgLy8gbGEgZmxlY2hhIHkgZWwgZ3JhZGllbnRlIGRlIGFiYWpvIHF1ZWRhbiBlbmNlbmRpZG9zIGR1cmFudGUgdG9kbyBlbCB0dXJuby5cbiAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuXG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRUb3BHcmFkaWVudCA9IHNjcm9sbFRvcCA+IDFcbiAgICBpZiAoc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRUb3BHcmFkaWVudCkge1xuICAgICAgc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0VG9wR3JhZGllbnRcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChuZXh0VG9wR3JhZGllbnQpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEJvdHRvbUdyYWRpZW50ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gMVxuICAgIGlmIChzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dEJvdHRvbUdyYWRpZW50KSB7XG4gICAgICBzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRCb3R0b21HcmFkaWVudFxuICAgICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KG5leHRCb3R0b21HcmFkaWVudClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgaW5tZWRpYXRvIGFsIGZvbmRvIChkZW50cm8gZGUgckFGIHBhcmEgY29vcmRpbmFyIGNvbiBlbCBwYWludClcbiAgICogeSBhY3R1YWxpemEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi4gUmVzcGV0YSBgc2tpcElmVXNlclNjcm9sbGluZ2AgcGFyYVxuICAgKiBubyBzb2JyZXNjcmliaXIgZWwgc2Nyb2xsIG1hbnVhbCBkZWwgdXN1YXJpbyBkdXJhbnRlIGVsIHN0cmVhbWluZy5cbiAgICovXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tUmFmID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdHM6IHsgc2tpcElmVXNlclNjcm9sbGluZz86IGJvb2xlYW47IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHNraXBJZlVzZXJTY3JvbGxpbmcgPSBmYWxzZSwgZGVsYXlNcyA9IDAgfSA9IG9wdHNcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgICAgICBpZiAoc2tpcElmVXNlclNjcm9sbGluZyAmJiB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICBjb25zdCBzZXRTcGFjZXJIZWlnaHQgPSB1c2VDYWxsYmFjaygobmV4dDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKE1hdGguYWJzKHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gbmV4dCkgPCAxKSByZXR1cm5cbiAgICBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA9IG5leHRcbiAgICBpZiAoc3BhY2VyRWxSZWYuY3VycmVudCkge1xuICAgICAgc3BhY2VyRWxSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBgJHtuZXh0fXB4YFxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgY2xlYXJUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgfSwgW3NldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgbWVhc3VyZVR1cm4gPSB1c2VDYWxsYmFjaygocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3Qgc3BhY2VyRWwgPSBzcGFjZXJFbFJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCAhc3BhY2VyRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBxdWVzdGlvbkVsID0gZWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYFtkYXRhLW1lc3NhZ2UtaWQ9XCIke3F1ZXN0aW9uSWR9XCJdYClcbiAgICBpZiAoIXF1ZXN0aW9uRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBjb250YWluZXJUb3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICBjb25zdCBxdWVzdGlvblRvcCA9IHF1ZXN0aW9uRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gY29udGFpbmVyVG9wICsgZWwuc2Nyb2xsVG9wXG4gICAgY29uc3QgY29udGVudEJvdHRvbSA9IHNwYWNlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGNvbnRhaW5lclRvcCArIGVsLnNjcm9sbFRvcFxuICAgIHJldHVybiB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodDogY29udGVudEJvdHRvbSAtIHF1ZXN0aW9uVG9wIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgcmVzZXJ2ZVR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKFxuICAgIChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4ocXVlc3Rpb25JZClcbiAgICAgIGlmICghbWVhc3VyZWQpIHJldHVyblxuICAgICAgY29uc3QgeyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQgfSA9IG1lYXN1cmVkXG5cbiAgICAgIC8vIEFuY2xhbW9zIHNpZW1wcmUsIGluY2x1c28gY3VhbmRvIG5vIGhhZ2EgZmFsdGEgcmVzZXJ2YXI6IGR1cmFudGUgZWxcbiAgICAgIC8vIHR1cm5vIGVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvIGVuIG5pbmfDum4gY2Fzby5cbiAgICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG5cbiAgICAgIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQoZWwuY2xpZW50SGVpZ2h0KVxuICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgcXVlc3Rpb25Ub3AgLSBvZmZzZXQpXG4gICAgICAvLyBDaGF0IHJlY2nDqW4gaW5pY2lhZG8gbyBjb252ZXJzYWNpw7NuIHF1ZSBhw7puIGVudHJhIGVuIHBhbnRhbGxhOiBsYVxuICAgICAgLy8gcHJlZ3VudGEgeWEgZXN0w6EgYXJyaWJhLCBubyBoYXkgbmFkYSBxdWUgc3ViaXIgbmkgcXVlIHJlc2VydmFyLlxuICAgICAgaWYgKHRhcmdldFNjcm9sbFRvcCA8PSBlbC5zY3JvbGxUb3ApIHtcbiAgICAgICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFJlc2VydmFtb3MgbG8gbcOtbmltbyBwYXJhIHF1ZSBgdGFyZ2V0U2Nyb2xsVG9wYCBzZWEgYWxjYW56YWJsZS5cbiAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBlbC5jbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KSlcbiAgICAgIGVsLnNjcm9sbFRvcCA9IHRhcmdldFNjcm9sbFRvcFxuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgLyoqXG4gICAqIEVuY29nZSBlbCBzcGFjZXIgYSBtZWRpZGEgcXVlIGNyZWNlIGxhIHJlc3B1ZXN0YTogZWwgYWx0byB0b3RhbCBkZWwgc2Nyb2xsXG4gICAqIHF1ZWRhIGNvbnN0YW50ZSB5IGxhIHZpc3RhIG5vIHNlIG11ZXZlIHNvbGEuIFNvbG8gYWNoaWNhLCBudW5jYSBhZ3JhbmRhLFxuICAgKiBwYXJhIG5vIGlueWVjdGFyIGVzcGFjaW8gZW4gdHVybm9zIHF1ZSBhcnJhbmNhcm9uIHNpbiByZXNlcnZhLlxuICAgKiBEZXZ1ZWx2ZSBzaSBlbCB0dXJubyBzaWd1ZSBhbmNsYWRvIChhdW5xdWUgZWwgc3BhY2VyIHlhIHNlYSAwKS5cbiAgICovXG4gIGNvbnN0IHN5bmNUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KSByZXR1cm4gZmFsc2VcbiAgICBpZiAoc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPiAwKSB7XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IG1lYXN1cmVUdXJuKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpXG4gICAgICBpZiAobWVhc3VyZWQpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldChtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQpXG4gICAgICAgIGNvbnN0IHJlc2VydmVkID0gTWF0aC5tYXgoMCwgbWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0IC0gbWVhc3VyZWQudHVybkhlaWdodCAtIG9mZnNldClcbiAgICAgICAgc2V0U3BhY2VySGVpZ2h0KE1hdGgubWluKHNwYWNlckhlaWdodFJlZi5jdXJyZW50LCByZXNlcnZlZCkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sIFttZWFzdXJlVHVybiwgc2V0U3BhY2VySGVpZ2h0XSlcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG8oe1xuICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KVxuICAgIC8vIERhciB0aWVtcG8gYWwgc21vb3RoLXNjcm9sbCBhbnRlcyBkZSByZWNhbGN1bGFyIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uXG4gICAgc2V0VGltZW91dCh1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcywgNTAwKVxuICB9LCBbY2xlYXJUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5VSUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZS5jdXJyZW50VGFyZ2V0XG5cbiAgICAgIGlmIChzY3JvbGxSYWZSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShzY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICAgIH1cblxuICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcblxuICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1VwID0gc2Nyb2xsVG9wIDwgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzU2Nyb2xsaW5nVXApIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDE1XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc05lYXJCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPCBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20pIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgICAgIH1cblxuICAgICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSAhaXNOZWFyQm90dG9tXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbFRvcFxuXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KFxuICAgICAgICBzZW5kTWVzc2FnZVByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHN0b3BHZW5lcmF0aW9uUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBpc1dyaXRpbmdcbiAgICAgIClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgLy8gQ3VhbmRvIGVsIGFnZW50ZSBlbXBpZXphIGEgcmVzcG9uZGVyLCByZXNldGVhciBlbCBmbGFnIHkgZWwgdW1icmFsIHBhcmEgYWN0aXZhciBlbCBhdXRvLXNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQXV0b3Njcm9sbCBtaWVudHJhcyBlbCB0ZXh0byBkZWwgc3RyZWFtIGNyZWNlLiBFbCB0ZXh0byBzZSBwaW50YSBhbCByaXRtb1xuICAvLyBkZSBgdXNlU21vb3RoU3RyZWFtVGV4dGAgKH42MGZwcyksIG5vIGFsIHJpdG1vIGRlIGxsZWdhZGEgZGUgdG9rZW5zIGRlbFxuICAvLyBiYWNrZW5kOiBwb3IgZXNvIGFjw6EgdXNhbW9zIHVuIGxvb3AgZGUgckFGIHF1ZSBjb21wYXJhIGBzY3JvbGxIZWlnaHRgXG4gIC8vIGNvbnRyYSBlbCDDumx0aW1vIHZhbG9yIG9ic2VydmFkbyB5IGFqdXN0YSBzb2xvIGN1YW5kbyBjYW1iaWEuIEFzw60gZWxcbiAgLy8gc2Nyb2xsIHF1ZWRhIHBlcmZlY3RhbWVudGUgc2luY3Jvbml6YWRvIGNvbiBsYSBhbmltYWNpw7NuIGRlbCB0ZXh0byBzaW5cbiAgLy8gZGVwZW5kZXIgZGUgbGEgY2FkZW5jaWEgZGVsIHN0cmVhbWluZ1N0b3JlLlxuICAvLyBDb24gZWwgdHVybm8gYW5jbGFkbyBlc3RlIGxvb3Agc29sbyBlbmNvZ2UgZWwgc3BhY2VyOiBubyB0b2NhIGVsIHNjcm9sbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXdhaXRpbmdSZXNwb25zZSAmJiAhaXNXcml0aW5nKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgbGV0IGxhc3RIZWlnaHQgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc3luY1R1cm5TcGFjZSgpKSB7XG4gICAgICAgIC8vIEVsIHNjcm9sbCBubyBzZSBtdWV2ZSwgcGVybyBlbCBjb250ZW5pZG8gY3JlY2U6IGxhIGZsZWNoYSB5IGVsXG4gICAgICAgIC8vIGdyYWRpZW50ZSBkZSBhYmFqbyB0aWVuZW4gcXVlIGVuY2VuZGVyc2UgYXBlbmFzIHNlIHBhc2EgZGVsIHZpZXdwb3J0LlxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgIT09IGxhc3RIZWlnaHQpIHtcbiAgICAgICAgbGFzdEhlaWdodCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgaWYgKCF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgfVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICB9XG5cbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmFmSWQgIT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcsIHN5bmNUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBBbCBjb21lbnphciBhIGVzcGVyYXIgbGEgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLCBzY3JvbGwgaW5pY2lhbCBhbCBmb25kby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgc2tpcElmVXNlclNjcm9sbGluZzogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHJldHVyblxuXG4gICAgbGV0IHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChsZXQgaW5kZXggPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgICBpZiAobWVzc2FnZXNbaW5kZXhdPy5pZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgICAgcXVlc3Rpb25JZCA9IG1lc3NhZ2VzW2luZGV4XS5pZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXF1ZXN0aW9uSWQgfHwgcXVlc3Rpb25JZCA9PT0gbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlc2VydmVUdXJuU3BhY2UocXVlc3Rpb25JZCkpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHJlc2VydmVUdXJuU3BhY2VdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBBbCBjYW1iaWFyIGRlIHNlc2nDs24sIHJlc2V0ZWFyIGVzdGFkbyBkZSBzY3JvbGwgbWFudWFsIHBhcmEgbm8gaGVyZWRhciBlbCBjaGF0IGFudGVyaW9yLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gMFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IDBcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIFJlc3RhdXJhY2nDs24gZGVzZGUgY2FjaGUgKHNpbiBMb2FkZXIpOiBiYWphciBhbCBmb25kbyBhbCByZWFicmlyIHNlc2nDs24gdmlzaXRhZGEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCAhaW5pdGlhbENoYXRJZCB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGlmIChsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPT09IGluaXRpYWxDaGF0SWQpIHJldHVyblxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcblxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVHVybm8gYW5jbGFkbzogbmkgZWwgcmVlbXBsYXpvIGRlbCBwbGFjZWhvbGRlciBwb3IgZWwgbWVuc2FqZSBmaW5hbCwgbmkgbGFcbiAgICAvLyBhcGFyaWNpw7NuIGRlbCBBcHByb3ZhbEJveCBtdWV2ZW4gZWwgc2Nyb2xsLiBTb2xvIHNlIGFqdXN0YSBlbCBzcGFjZXIuXG4gICAgaWYgKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG4gICAgY29uc3QgaXNBcHByb3ZhbCA9ICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uID1cbiAgICAgICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSlcblxuICAgIC8vIE51ZXZvcyBhbnN3ZXIvcXVlc3Rpb246IHNjcm9sbCBzaSBlbCB1c3VhcmlvIHlhIGVzdGFiYSBhbCBmb25kby5cbiAgICBpZiAoaXNBbnN3ZXJPclF1ZXN0aW9uICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhc28gYm9yZGU6IGNhbWJpb3MgZGUgbWVuc2FqZXMgc2luIHNlciBudWV2byBhbnN3ZXIvdXNlci9hcHByb3ZhbFxuICAgIC8vIHBlcm8gc8OtIHVuIG1lbnNhamUgbnVldm8gKG5vIGVsIFwidXNlci1pbml0aWFsLW1lc3NhZ2VcIikuIFNjcm9sbGVhLlxuICAgIGlmICghaXNBbnN3ZXJPclF1ZXN0aW9uICYmICFpc0FwcHJvdmFsICYmICFoYXNJbml0aWFsTWVzc2FnZSAmJiBtZXNzYWdlcy5sZW5ndGggPiBwcmV2TGVuKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmLCBzeW5jVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlc1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gbG9hZGluZ01lc3NhZ2VzXG5cbiAgICBpZiAoIWp1c3RGaW5pc2hlZExvYWRpbmcgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICAvLyBFc3RhZG8gaW5pY2lhbCBkZWwgYm90w7NuIHNjcm9sbC10by1ib3R0b20gYWwgdGVybWluYXIgbG9hZGluZ01lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgYXR0YWNobWVudHNDb3VudCA9XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5hdHRhY2htZW50cykgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoIDogMCkgfHxcbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LnNvdXJjZXMpID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMubGVuZ3RoIDogMClcblxuICBjb25zdCBzdHJlYW1Mb2FkaW5nRGlzcGxheSA9IHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSh7XG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3M6IGFjdGl2ZUxvYWRpbmdzIHx8IHt9LFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHNDb3VudCksXG4gICAgYXR0YWNobWVudHNDb3VudCxcbiAgICB0LFxuICB9KVxuXG4gIGNvbnN0IGlzU2Nyb2xsT25QYXJlbnQgPSAhIWV4cGFuZGVkXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciA9XG4gICAgISFsYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGxhc3RNZXNzYWdlLmlkKSAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICBrZXk9e21lc3NhZ2VLZXl9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbn1cbiAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHN0cmVhbUFjdGl2aXR5PXtpc1N0cmVhbWluZyA/IHN0cmVhbUxvYWRpbmdEaXNwbGF5IDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICAgIHsvKiBFc3BhY2lvIHF1ZSBsZSBwZXJtaXRlIGEgbGEgcHJlZ3VudGEgc3ViaXIgYWwgdG9wZS4gQWx0dXJhIG1hbmVqYWRhXG4gICAgICAgICAgaW1wZXJhdGl2YW1lbnRlIGRlc2RlIGBzZXRTcGFjZXJIZWlnaHRgOyBhcnJhbmNhIGVuIDAuICovfVxuICAgICAgPFNDVHVyblNwYWNlciByZWY9e3NwYWNlckVsUmVmfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlc091dGVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+e21lc3NhZ2VzQ29udGVudH08L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lciByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219ICRzY3JvbGxPblBhcmVudD17ZmFsc2V9PlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM3RyxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBRWhGLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBQ3BGLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFHM0QsU0FBc0JDLGVBQWUsUUFBUSxxQkFBcUI7QUFDbEUsU0FBU0Msc0JBQXNCLEVBQUVDLGdCQUFnQixRQUFRLHNDQUFzQztBQUUvRixTQUFTQyxjQUFjLFFBQVEsaUNBQWlDO0FBQ2hFLFNBQWtCQyxPQUFPLFFBQVEsMkJBQTJCO0FBRTVELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0Ms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
1042
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJNYWlhU3RyZWFtZG93biIsIkNoYXRIaXN0b3J5Um9sZSIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJSZWFzb25pbmdCbG9jayIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJyZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJMb2FkZXIiLCJGYWRlIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ1R1cm5TcGFjZXIiLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbiIsIlNDTWVzc2FnZXNHcmFkaWVudFRvcCIsIlNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIkVudGl0eUxpbmtDdXN0b21MaW5rIiwiZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUiLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsInR1cm5BbmNob3JPZmZzZXQiLCJ2aWV3cG9ydEhlaWdodCIsIk1hdGgiLCJtaW4iLCJUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJjaGlsZHJlbiIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJGNyZWF0ZUFnZW50Rm9sIiwiX3Byb3BzJHN1Z2dlc3Rpb25zIiwic3RyZWFtaW5nVGV4dCIsImlzU3RyZWFtaW5nIiwibWVzc2FnZUlkIiwicmF3VGV4dCIsIm1lc3NhZ2UiLCJ3aW5GbGFncyIsIndpbmRvdyIsImRpc3BsYXlUZXh0IiwiZW5hYmxlZCIsIm1heENoYXJzUGVyRnJhbWUiLCJzbmFwVG9Xb3JkQm91bmRhcnkiLCJzdHJlYW1MYWdNcyIsInRhcmdldExhZ01zIiwic3RyZWFtQWRhcHQiLCJhZGFwdFRvQmFja2VuZFJhdGUiLCJzdHJlYW1CdWZmZXJNcyIsInRhcmdldEJ1ZmZlck1zIiwic3RyZWFtTWluQnVmZmVyIiwibWluQnVmZmVyQ2hhcnMiLCJzdHJlYW1XYXJtdXBNcyIsIndhcm11cE1zIiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJhZ2VudElkIiwiaGFzTWVudGlvbnMiLCJtZW50aW9uTm9kZXMiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwidmFyaWFudCIsImNvbXBvbmVudHMiLCJhIiwiaXNBbmltYXRpbmciLCJpc0Fzc2lzdGFudCIsImlzRXJyb3IiLCJhcHByb3ZhbCIsImNvbnRlbnQiLCJzb3VyY2VzIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsInN0cmVhbUFjdGl2aXR5IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlciIsImlzQWN0aXZlU3RyZWFtaW5nIiwiaGFzU3RyZWFtVGV4dCIsIkJvb2xlYW4iLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsInBlbmRpbmdfYWN0aW9ucyIsImFjdGlvbnMiLCJzdGF0dXMiLCJvbkFwcHJvdmUiLCJ0aHJlYWRJZHMiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY1IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJ1c2VyU2Nyb2xsaW5nUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNob3dUb3BHcmFkaWVudFJlZiIsInNob3dCb3R0b21HcmFkaWVudFJlZiIsInNjcm9sbFJhZlJlZiIsImFuY2hvcmVkVHVybklkUmVmIiwic3BhY2VyRWxSZWYiLCJzcGFjZXJIZWlnaHRSZWYiLCJ0dXJuU2Nyb2xsUmFmUmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzIiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsIm5leHRUb3BHcmFkaWVudCIsIm5leHRCb3R0b21HcmFkaWVudCIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImFicyIsInN0YXJ0ZWRBdCIsInBlcmZvcm1hbmNlIiwibm93Iiwic3RlcCIsInByb2dyZXNzIiwiZWFzZWQiLCJwb3ciLCJzZXRTcGFjZXJIZWlnaHQiLCJoZWlnaHQiLCJjbGVhclR1cm5TcGFjZSIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJtYXgiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiZSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInNlbmRNZXNzYWdlUHJveHlSZWYiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJzdG9wR2VuZXJhdGlvblByb3h5UmVmIiwibWVzc2FnZXNEYXRhUmVmIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiIsInRyaW0iLCJjdXJyZW50TWVzc2FnZXMiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJpc1JldHJ5U3VnZ2VzdGlvbiIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwicmV0cnlBdHRhY2htZW50cyIsInJhZklkIiwibGFzdEhlaWdodCIsInRpY2siLCJjdXJyZW50SGVpZ2h0IiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5Iiwia2V5IiwicmVmIiwiJHNjcm9sbE9uUGFyZW50Iiwib25XaGVlbCIsIm9uVG91Y2hTdGFydCIsIiRzaG93Iiwib25TY3JvbGwiLCJjb2xvciIsIndpZHRoIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBcnJvd1NtYWxsRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93U21hbGxEb3duJ1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHR5cGUgeyBNYWlhU3RyZWFtZG93blByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgcmVuZGVyVGV4dFdpdGhNZW50aW9ucywgaGFzSW5saW5lTWFya2VycyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcblxuaW1wb3J0IHsgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgdXNlU3RyZWFtaW5nTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbmltcG9ydCB7IFJlYXNvbmluZ0Jsb2NrIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2snXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDVHVyblNwYWNlcixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDTWVzc2FnZXNHcmFkaWVudFRvcCxcbiAgU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG4vKipcbiAqIEFsIGFuY2xhciBlbCB0dXJubywgbGEgcHJlZ3VudGEgbm8gc2UgcGVnYSBhbCBib3JkZSBzdXBlcmlvcjogZGVqYW1vcyBhc29tYXJcbiAqIGxhIGNvbGEgZGVsIG1lbnNhamUgYW50ZXJpb3IgcGFyYSBubyBwZXJkZXIgZWwgaGlsbyBkZSBsYSBjb252ZXJzYWNpw7NuLlxuICogUmVsYXRpdm8gYWwgdmlld3BvcnQgcG9ycXVlIHVuIHZhbG9yIGZpam8gc2UgY29tZSBkZW1hc2lhZG8gZW4gcGFudGFsbGFzIGNvcnRhcy5cbiAqL1xuY29uc3QgdHVybkFuY2hvck9mZnNldCA9ICh2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IE1hdGgubWluKHZpZXdwb3J0SGVpZ2h0ICogMC4xOCwgMjAwKVxuXG4vKiogRHVyYWNpw7NuIGRlbCBzY3JvbGwgYWwgYW5jbGFyIGVsIHR1cm5vLiBNw6FzIGxlbnRvIHF1ZSBlbCBgc21vb3RoYCBuYXRpdm8sIHF1ZSBzZSBzaWVudGUgYnJ1c2NvLiAqL1xuY29uc3QgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgPSA1NTBcblxudHlwZSBNZXNzYWdlSXRlbVByb3BzID0gQ2hhdE1lc3NhZ2UgJiB7XG4gIGF1dGhVc2VyOiBDT1JVc2VyXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj86IGJvb2xlYW5cbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWRzOiBzdHJpbmdbXSwgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICAvLyBMb3MgZGVmYXVsdHMgZGVsIGhvb2sgc2UgYWp1c3Rhcm9uIGVtcMOtcmljYW1lbnRlIGVuIHN0YWdpbmc7IGF1biBhc8OtXG4gICAgLy8gc2UgZXhwb25lbiBmbGFncyBkZSBydW50aW1lICh3aW5kb3cuKikgcGFyYSBwb2RlciB0dW5lYXIgc2luIHJlY29tcGlsYXJcbiAgICAvLyBzaSBhbGfDum4gYmFja2VuZCBwcmVzZW50YSB1bmEgY2FkZW5jaWEgbXV5IGRpc3RpbnRhIGVuIHByb2R1Y2Npw7NuLlxuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gZmFsc2UgICAgICAvLyBkZXNhY3RpdmEgYWRhcHRhY2nDs24gYWwgYmFja2VuZFxuICAgIC8vICAgd2luZG93LnN0cmVhbUJ1ZmZlck1zID0gNjAwICAgICAvLyBjb2xjaMOzbiBvYmpldGl2byAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSA0NTAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDcwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gNDAwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpXG4gICAgY29uc3Qgd2luRmxhZ3MgPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IHdpbkZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9IG51bGwgJiYgeyBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0IH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zICE9IG51bGwgJiYgeyB3YXJtdXBNczogd2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgfSksXG4gICAgfSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZFxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgc291cmNlcz17cHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRXJyb3IgfHwgcHJvcHMuc3VnZ2VzdGlvbnM/Lmxlbmd0aCkgJiYgKFxuICAgICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGhhc1N0cmVhbVRleHQgPSBCb29sZWFuKHN0cmVhbWluZ1RleHQpXG4gIGNvbnN0IG1lc3NhZ2VBdHRhY2htZW50cyA9XG4gICAgYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgICAgPyBhdHRhY2htZW50c1xuICAgICAgOiAhaXNBc3Npc3RhbnQgJiYgQXJyYXkuaXNBcnJheShzb3VyY2VzKVxuICAgICAgICA/IChzb3VyY2VzIGFzIEF0dGFjaG1lbnRGaWxlW10pXG4gICAgICAgIDogW11cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCA9IGFzeW5jIChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGF0dGFjaG1lbnQubmFtZS5pbmNsdWRlcygnLicpID8gJycgOiBgLiR7YXR0YWNobWVudC50eXBlfWBcbiAgICBjb25zdCBmaWxlTmFtZSA9IGAke2F0dGFjaG1lbnQubmFtZX0ke2V4dGVuc2lvbn1gXG4gICAgY29uc3QgZmlsZVVybCA9IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8IGF0dGFjaG1lbnQudXJsX2ZpbGUgfHwgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgICAgIGlmIChmaWxlVXJsKSB7XG4gICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlID0gYXdhaXQgZG93bmxvYWRGaWxlRnJvbVVybChmaWxlVXJsLCBmaWxlTmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb3dubG9hZGVkRmlsZSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChhdHRhY2htZW50LmZpbGUpXG4gICAgICB9XG5cbiAgICAgIGlmICghYmxvYlVybCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGxpbmsuaHJlZiA9IGJsb2JVcmxcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZVxuICAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKVxuICAgICAgfSwgMTAwKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZG93bmxvYWQgYXR0YWNobWVudCcsIGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc0NoYW5nZVByb2plY3QgJiYgb3B0aW9ucykge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVdyYXBwZXIga2V5PXtpZH0gaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn0gZGF0YS1tZXNzYWdlLWlkPXtpZH0gaGFzRmVlZGJhY2s9e2ZhbHNlfT5cbiAgICAgICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfT5cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNBY3RpdmVTdHJlYW1pbmcgJiYgPFJlYXNvbmluZ0Jsb2NrIG1lc3NhZ2VJZD17aWR9IHRyYWNlPXtwcm9wcy5yZWFzb25pbmcgPz8gbnVsbH0gLz59XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IChpc0FjdGl2ZVN0cmVhbWluZyAmJiBoYXNTdHJlYW1UZXh0KSkgJiYgIShpc0Fzc2lzdGFudCAmJiAhIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGgpICYmIChcbiAgICAgICAgICA8U3RyZWFtaW5nTWVzc2FnZUJvZHlcbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2UgPz8gJyd9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dH1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgey8qIExhIGFjY2nDs24gdmEgREVCQUpPIGRlbCB0ZXh0bzogcHJpbWVybyBzZSBsZWUgcXXDqSB2YSBhIGhhY2VyIHkgYWJham9cbiAgICAgICAgICAgIHF1w6kgZXN0w6EgaGFjaWVuZG8sIGNvbW8gZW4gQ2hhdEdQVC4gTG8gdGVuw61hbW9zIGFsIHJldsOpcy5cbiAgICAgICAgICAgIFNpbiBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbjogc3UgYG1hcmdpbi10b3A6IC0yNHB4YCBlc3TDoSBjYWxpYnJhZG9cbiAgICAgICAgICAgIHBhcmEgZWwgZ2FwIGRlIDM2cHggZGUgU0NNZXNzYWdlc0lubmVyLCB5IGFjw6EgZWwgcGFkcmUgZXNcbiAgICAgICAgICAgIFNDTWVzc2FnZUl0ZW1Jbm5lciBjb24gZ2FwIDhweCDigJQgcGludGFiYSBlbCBpbmRpY2Fkb3IgZW5jaW1hLiAqL31cbiAgICAgICAge2lzQXNzaXN0YW50ICYmIGlzQWN0aXZlU3RyZWFtaW5nICYmIHN0cmVhbUFjdGl2aXR5ICYmIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gLz59XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dUb3BHcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd0JvdHRvbUdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIFR1cm5vIGNvbiBlbCBzY3JvbGwgYmFqbyBjb250cm9sIGRlbCB1c3VhcmlvOiBkZXNkZSBxdWUgZW52w61hIGVsIG1lbnNhamUgeVxuICAgKiBoYXN0YSBlbCBwcsOzeGltbyBlbnbDrW8gbm8gbW92ZW1vcyBlbCBzY3JvbGwgcG9yIG5pbmfDum4gbW90aXZvLiBFc1xuICAgKiBpbmRlcGVuZGllbnRlIGRlIGxhIGFsdHVyYSBkZWwgc3BhY2VyLCBxdWUgcHVlZGUgbGxlZ2FyIGEgMCBzaW4gZGVzYW5jbGFyLlxuICAgKi9cbiAgY29uc3QgYW5jaG9yZWRUdXJuSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VyRWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJIZWlnaHRSZWYgPSB1c2VSZWYoMClcbiAgY29uc3QgdHVyblNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCB3YXNMb2FkaW5nTWVzc2FnZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGxhc3RTY3JvbGxlZFNlc3Npb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYSBlbCBib3TDs24gXCJzY3JvbGwgdG8gYm90dG9tXCIgeSBsb3MgZ3JhZGllbnRlcyBkZSBib3JkZSBhIHBhcnRpciBkZVxuICAgKiBsYSBwb3NpY2nDs24gZGVsIHNjcm9sbC4gTG9zIHJlZnMgZXZpdGFuIGBzZXRTdGF0ZWAgY3VhbmRvIGVsIHZhbG9yIG5vIGNhbWJpYTpcbiAgICogZXN0byBjb3JyZSBlbiBjYWRhIGZyYW1lIGRlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgLy8gRWwgc3BhY2VyIGRlbCB0dXJubyBlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvOiBzaSBubyBsbyBkZXNjb250YW1vc1xuICAgIC8vIGxhIGZsZWNoYSB5IGVsIGdyYWRpZW50ZSBkZSBhYmFqbyBxdWVkYW4gZW5jZW5kaWRvcyBkdXJhbnRlIHRvZG8gZWwgdHVybm8uXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcblxuICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgIGlmIChzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvdykge1xuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VG9wR3JhZGllbnQgPSBzY3JvbGxUb3AgPiAxXG4gICAgaWYgKHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0VG9wR3JhZGllbnQpIHtcbiAgICAgIHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dFRvcEdyYWRpZW50XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQobmV4dFRvcEdyYWRpZW50KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRCb3R0b21HcmFkaWVudCA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDFcbiAgICBpZiAoc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRCb3R0b21HcmFkaWVudCkge1xuICAgICAgc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0Qm90dG9tR3JhZGllbnRcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChuZXh0Qm90dG9tR3JhZGllbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFJlc3BldGEgYHNraXBJZlVzZXJTY3JvbGxpbmdgIHBhcmFcbiAgICogbm8gc29icmVzY3JpYmlyIGVsIHNjcm9sbCBtYW51YWwgZGVsIHVzdWFyaW8gZHVyYW50ZSBlbCBzdHJlYW1pbmcuXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IHNraXBJZlVzZXJTY3JvbGxpbmc/OiBib29sZWFuOyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBza2lwSWZVc2VyU2Nyb2xsaW5nID0gZmFsc2UsIGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgaWYgKHNraXBJZlVzZXJTY3JvbGxpbmcgJiYgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgY29uc3QgY2FuY2VsVHVyblNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID09PSBudWxsKSByZXR1cm5cbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGFuaW1hZG8gY29uIGVhc2luZyBwcm9waW86IGBiZWhhdmlvcjogJ3Ntb290aCdgIG5vIHBlcm1pdGUgcmVndWxhciBsYVxuICAgKiBkdXJhY2nDs24geSBlbCBzYWx0byBhbCBhbmNsYXIgZWwgdHVybm8gcXVlZGEgZGVtYXNpYWRvIHNlY28uXG4gICAqL1xuICBjb25zdCBhbmltYXRlU2Nyb2xsVG8gPSB1c2VDYWxsYmFjayhcbiAgICAodG9wOiBudW1iZXIpID0+IHtcbiAgICAgIGNhbmNlbFR1cm5TY3JvbGwoKVxuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgIGNvbnN0IGZyb20gPSBlbC5zY3JvbGxUb3BcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gdG9wIC0gZnJvbVxuICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlKSA8IDEpIHJldHVyblxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpXG4gICAgICAgIGNvbnN0IGVhc2VkID0gMSAtICgxIC0gcHJvZ3Jlc3MpICoqIDNcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gZnJvbSArIGRpc3RhbmNlICogZWFzZWRcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBwcm9ncmVzcyA8IDEgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCkgOiBudWxsXG4gICAgICB9XG4gICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbiAgICB9LFxuICAgIFtjYW5jZWxUdXJuU2Nyb2xsLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWxUdXJuU2Nyb2xsLCBbY2FuY2VsVHVyblNjcm9sbF0pXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChNYXRoLmFicyhzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIG5leHQpIDwgMSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIGNvbnN0IG1lYXN1cmVUdXJuID0gdXNlQ2FsbGJhY2soKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNwYWNlckVsID0gc3BhY2VyRWxSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgIXNwYWNlckVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcXVlc3Rpb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1tZXNzYWdlLWlkPVwiJHtxdWVzdGlvbklkfVwiXWApXG4gICAgaWYgKCFxdWVzdGlvbkVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY29udGFpbmVyVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgY29uc3QgcXVlc3Rpb25Ub3AgPSBxdWVzdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGNvbnRhaW5lclRvcCArIGVsLnNjcm9sbFRvcFxuICAgIGNvbnN0IGNvbnRlbnRCb3R0b20gPSBzcGFjZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICByZXR1cm4geyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQ6IGNvbnRlbnRCb3R0b20gLSBxdWVzdGlvblRvcCB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2VydmVUdXJuU3BhY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IG1lYXN1cmVUdXJuKHF1ZXN0aW9uSWQpXG4gICAgICBpZiAoIW1lYXN1cmVkKSByZXR1cm5cbiAgICAgIGNvbnN0IHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH0gPSBtZWFzdXJlZFxuXG4gICAgICAvLyBBbmNsYW1vcyBzaWVtcHJlLCBpbmNsdXNvIGN1YW5kbyBubyBoYWdhIGZhbHRhIHJlc2VydmFyOiBkdXJhbnRlIGVsXG4gICAgICAvLyB0dXJubyBlbCBzY3JvbGwgbm8gc2UgbXVldmUgc29sbyBlbiBuaW5nw7puIGNhc28uXG4gICAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuXG4gICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KGVsLmNsaWVudEhlaWdodClcbiAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHF1ZXN0aW9uVG9wIC0gb2Zmc2V0KVxuICAgICAgLy8gQ2hhdCByZWNpw6luIGluaWNpYWRvIG8gY29udmVyc2FjacOzbiBxdWUgYcO6biBlbnRyYSBlbiBwYW50YWxsYTogbGFcbiAgICAgIC8vIHByZWd1bnRhIHlhIGVzdMOhIGFycmliYSwgbm8gaGF5IG5hZGEgcXVlIHN1YmlyIG5pIHF1ZSByZXNlcnZhci5cbiAgICAgIGlmICh0YXJnZXRTY3JvbGxUb3AgPD0gZWwuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodCgwKVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBSZXNlcnZhbW9zIGxvIG3DrW5pbW8gcGFyYSBxdWUgYHRhcmdldFNjcm9sbFRvcGAgc2VhIGFsY2FuemFibGUuIEVsXG4gICAgICAvLyBzcGFjZXIgc2UgaW5zZXJ0YSBkZSB1bmEgKGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG8gdmlzaWJsZSk7XG4gICAgICAvLyBsbyDDum5pY28gcXVlIHNlIHBlcmNpYmUgZXMgZWwgZGVzcGxhemFtaWVudG8gYW5pbWFkby5cbiAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBlbC5jbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KSlcbiAgICAgIGFuaW1hdGVTY3JvbGxUbyh0YXJnZXRTY3JvbGxUb3ApXG4gICAgfSxcbiAgICBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIGFuaW1hdGVTY3JvbGxUb11cbiAgKVxuXG4gIC8qKlxuICAgKiBFbmNvZ2UgZWwgc3BhY2VyIGEgbWVkaWRhIHF1ZSBjcmVjZSBsYSByZXNwdWVzdGE6IGVsIGFsdG8gdG90YWwgZGVsIHNjcm9sbFxuICAgKiBxdWVkYSBjb25zdGFudGUgeSBsYSB2aXN0YSBubyBzZSBtdWV2ZSBzb2xhLiBTb2xvIGFjaGljYSwgbnVuY2EgYWdyYW5kYSxcbiAgICogcGFyYSBubyBpbnllY3RhciBlc3BhY2lvIGVuIHR1cm5vcyBxdWUgYXJyYW5jYXJvbiBzaW4gcmVzZXJ2YS5cbiAgICogRGV2dWVsdmUgc2kgZWwgdHVybm8gc2lndWUgYW5jbGFkbyAoYXVucXVlIGVsIHNwYWNlciB5YSBzZWEgMCkuXG4gICAqL1xuICBjb25zdCBzeW5jVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID4gMCkge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KVxuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQobWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0KVxuICAgICAgICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodCAtIG1lYXN1cmVkLnR1cm5IZWlnaHQgLSBvZmZzZXQpXG4gICAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1pbihzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgcmVzZXJ2ZWQpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSlcbiAgICAvLyBEYXIgdGllbXBvIGFsIHNtb290aC1zY3JvbGwgYW50ZXMgZGUgcmVjYWxjdWxhciBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLlxuICAgIHNldFRpbWVvdXQodXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIDUwMClcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGwsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgLy8gcmVmcyB0byBzdGFiaWxpemUgZnVuY3Rpb25zIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gIGNvbnN0IHNlbmRNZXNzYWdlUmVmID0gdXNlUmVmKHNlbmRNZXNzYWdlKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblJlZiA9IHVzZVJlZihzdG9wR2VuZXJhdGlvbilcbiAgY29uc3Qgb25TZW5kTWVzc2FnZVJlYWR5UmVmID0gdXNlUmVmKG9uU2VuZE1lc3NhZ2VSZWFkeSlcbiAgY29uc3Qgc2VuZE1lc3NhZ2VQcm94eVJlZiA9IHVzZVJlZihcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblByb3h5UmVmID0gdXNlUmVmKCgpID0+IHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQoKSlcblxuICAvLyB1cGRhdGUgcmVmcyB3aGVuIGZ1bmN0aW9ucyBjaGFuZ2VcbiAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudCA9IHNlbmRNZXNzYWdlXG4gIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQgPSBzdG9wR2VuZXJhdGlvblxuICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCA9IG9uU2VuZE1lc3NhZ2VSZWFkeVxuXG4gIC8qKlxuICAgKiBgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrYCBzZSBwYXNhIGEgVE9ET1MgbG9zIE1lc3NhZ2VJdGVtLCBhc8OtIHF1ZSBzdSBpZGVudGlkYWRcbiAgICogZGVjaWRlIHNpIGVsIGBtZW1vYCBkZSBsYSBsaXN0YSBzb3N0aWVuZS4gTGVlbW9zIHBvciByZWYgbG8gcXVlIGNhbWJpYSBlbiBjYWRhXG4gICAqIHVwZGF0ZSAoYG1lc3NhZ2VzYCwgYHNlbmRNZXNzYWdlYCwgbGFzIHN1Z2VyZW5jaWFzIHlhIGVsZWdpZGFzKSBwYXJhIHF1ZSBlbFxuICAgKiBjYWxsYmFjayBzZWEgZXN0YWJsZTogc2kgbm8sIGFsIHRlcm1pbmFyIGVsIHN0cmVhbSBzZSByZXBpbnRhIGVsIGNoYXQgZW50ZXJvXG4gICAqIHkgY2FkYSBNYWlhU3RyZWFtZG93biB2dWVsdmUgYSBwYXJzZWFyIHN1IG1hcmtkb3duLlxuICAgKi9cbiAgY29uc3QgbWVzc2FnZXNEYXRhUmVmID0gdXNlUmVmKG1lc3NhZ2VzKVxuICBtZXNzYWdlc0RhdGFSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG4gIGNvbnN0IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcylcbiAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50ID0gc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1xuXG4gIGNvbnN0IGhhbmRsZVN1Z2dlc3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24/LnRyaW0oKSkgcmV0dXJuXG4gICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50W21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb24gPSAhIXRhcmdldE1lc3NhZ2U/LmlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gdCgnY2hhdC5yZXRyeScpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW2V2ZW50LCBhZ2VudCwgdCwgYXV0aFVzZXIuaWRdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBdXRvc2Nyb2xsIG1pZW50cmFzIGVsIHRleHRvIGRlbCBzdHJlYW0gY3JlY2UuIEVsIHRleHRvIHNlIHBpbnRhIGFsIHJpdG1vXG4gIC8vIGRlIGB1c2VTbW9vdGhTdHJlYW1UZXh0YCAofjYwZnBzKSwgbm8gYWwgcml0bW8gZGUgbGxlZ2FkYSBkZSB0b2tlbnMgZGVsXG4gIC8vIGJhY2tlbmQ6IHBvciBlc28gYWPDoSB1c2Ftb3MgdW4gbG9vcCBkZSByQUYgcXVlIGNvbXBhcmEgYHNjcm9sbEhlaWdodGBcbiAgLy8gY29udHJhIGVsIMO6bHRpbW8gdmFsb3Igb2JzZXJ2YWRvIHkgYWp1c3RhIHNvbG8gY3VhbmRvIGNhbWJpYS4gQXPDrSBlbFxuICAvLyBzY3JvbGwgcXVlZGEgcGVyZmVjdGFtZW50ZSBzaW5jcm9uaXphZG8gY29uIGxhIGFuaW1hY2nDs24gZGVsIHRleHRvIHNpblxuICAvLyBkZXBlbmRlciBkZSBsYSBjYWRlbmNpYSBkZWwgc3RyZWFtaW5nU3RvcmUuXG4gIC8vIENvbiBlbCB0dXJubyBhbmNsYWRvIGVzdGUgbG9vcCBzb2xvIGVuY29nZSBlbCBzcGFjZXI6IG5vIHRvY2EgZWwgc2Nyb2xsLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgbGFzdEhlaWdodCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG5cbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChzeW5jVHVyblNwYWNlKCkpIHtcbiAgICAgICAgLy8gRWwgc2Nyb2xsIG5vIHNlIG11ZXZlLCBwZXJvIGVsIGNvbnRlbmlkbyBjcmVjZTogbGEgZmxlY2hhIHkgZWxcbiAgICAgICAgLy8gZ3JhZGllbnRlIGRlIGFiYWpvIHRpZW5lbiBxdWUgZW5jZW5kZXJzZSBhcGVuYXMgc2UgcGFzYSBkZWwgdmlld3BvcnQuXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICBpZiAoY3VycmVudEhlaWdodCAhPT0gbGFzdEhlaWdodCkge1xuICAgICAgICBsYXN0SGVpZ2h0ID0gY3VycmVudEhlaWdodFxuICAgICAgICBpZiAoIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkge1xuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICB9XG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIEFsIGNvbWVuemFyIGEgZXNwZXJhciBsYSByZXNwdWVzdGEgZGVsIGJhY2tlbmQsIHNjcm9sbCBpbmljaWFsIGFsIGZvbmRvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCAmJiAhYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBza2lwSWZVc2VyU2Nyb2xsaW5nOiB0cnVlIH0pXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgY29uc3QgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICAvLyBDYW1iaW8gZGUgY2hhdDogZWwgYW5jbGEgeSBlbCBzcGFjZXIgZGVsIHR1cm5vIGFudGVyaW9yIGRlamFuIGRlIGFwbGljYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBjbGVhclR1cm5TcGFjZV0pXG5cbiAgLy8gQWwgZW52aWFyIHVuIG1lbnNhamU6IGFuY2xhbW9zIGVsIHR1cm5vIHkgaGFjZW1vcyBlbCDDum5pY28gc2Nyb2xsIGRlbCBjaWNsby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcykgcmV0dXJuXG5cbiAgICBsZXQgcXVlc3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICBmb3IgKGxldCBpbmRleCA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICAgIGlmIChtZXNzYWdlc1tpbmRleF0/LmlkPy5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSkge1xuICAgICAgICBxdWVzdGlvbklkID0gbWVzc2FnZXNbaW5kZXhdLmlkXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcXVlc3Rpb25JZCB8fCBxdWVzdGlvbklkID09PSBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50KSByZXR1cm5cblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzZXJ2ZVR1cm5TcGFjZShxdWVzdGlvbklkKSlcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgcmVzZXJ2ZVR1cm5TcGFjZV0pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBjYW1iaWFuIGxvcyBtZW5zYWplczogZGlzdGluZ3VlIFwibnVldm8gbWVuc2FqZVwiIChhZ3JlZ2FkbylcbiAgLy8gZGUgXCJyZWVtcGxhem9cIiAobWlzbW8gaWQvbGVuZ3RoLCBlai4gZmVlZGJhY2sgbyBhcHByb3ZhbFN0YXR1cykuIEVuXG4gIC8vIHJlZW1wbGF6b3Mgc29sbyBzZSByZWNhbGN1bGEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbiBzaW4gZm9yemFyIHNjcm9sbC5cbiAgY29uc3QgbGFzdE1lc3NhZ2VJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBsYXN0TWVzc2FnZXNMZW5ndGhSZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgc2VzacOzbiwgcmVzZXRlYXIgZXN0YWRvIGRlIHNjcm9sbCBtYW51YWwgcGFyYSBubyBoZXJlZGFyIGVsIGNoYXQgYW50ZXJpb3IuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IG51bGxcbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSAwXG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gMFxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gUmVzdGF1cmFjacOzbiBkZXNkZSBjYWNoZSAoc2luIExvYWRlcik6IGJhamFyIGFsIGZvbmRvIGFsIHJlYWJyaXIgc2VzacOzbiB2aXNpdGFkYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8ICFpbml0aWFsQ2hhdElkIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgaWYgKGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9PT0gaW5pdGlhbENoYXRJZCkgcmV0dXJuXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgbWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RNZXNzYWdlPy5pZCA/PyBudWxsXG4gICAgY29uc3QgcHJldklkID0gbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgcHJldkxlbiA9IGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbGFzdElkXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIGNvbnN0IGlzTmV3TWVzc2FnZSA9IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzLmxlbmd0aCAhPT0gcHJldkxlblxuICAgIGlmICghaXNOZXdNZXNzYWdlKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUdXJubyBhbmNsYWRvOiBuaSBlbCByZWVtcGxhem8gZGVsIHBsYWNlaG9sZGVyIHBvciBlbCBtZW5zYWplIGZpbmFsLCBuaSBsYVxuICAgIC8vIGFwYXJpY2nDs24gZGVsIEFwcHJvdmFsQm94IG11ZXZlbiBlbCBzY3JvbGwuIFNvbG8gc2UgYWp1c3RhIGVsIHNwYWNlci5cbiAgICBpZiAoYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN5bmNUdXJuU3BhY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcbiAgICBjb25zdCBpc0FwcHJvdmFsID0gISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb24gPVxuICAgICAgISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWYsIHN5bmNUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBBbCBhYnJpci9jYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24gZWwgY29udGVuZWRvciBzZSByZW1vbnRhIChMb2FkZXIg4oaSIGxpc3RhKSBjb25cbiAgLy8gc2Nyb2xsVG9wPTAuIEZvcnphbW9zIGlyIGFsIGZvbmRvIGFsIHRlcm1pbmFyIGxvYWRNZXNzYWdlcywgc2luIGFmZWN0YXIgcGFnaW5hY2nDs24gaGFjaWEgYXJyaWJhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGp1c3RGaW5pc2hlZExvYWRpbmcgPSB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCAmJiAhbG9hZGluZ01lc3NhZ2VzXG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBsb2FkaW5nTWVzc2FnZXNcblxuICAgIGlmICghanVzdEZpbmlzaGVkTG9hZGluZyB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcblxuICAvLyBBbCBleHBhbmRpci9jb250cmFlciBlbCBtb2RhbCBlbCByZWYgcGFzYSBhIG90cm8gY29udGVuZWRvciAoc2Nyb2xsVG9wIHNlIHJlc2V0ZWEgYSAwKS5cbiAgLy8gUmVzdGF1cmFyIGxhIHBvc2ljacOzbiBkZSBzY3JvbGwgYW50ZXMgZGVsIHBhaW50IHBhcmEgZXZpdGFyIHF1ZSBsYSBjb252ZXJzYWNpw7NuIHNhbHRlIGFycmliYS5cbiAgY29uc3QgZXhwYW5kZWRSZWYgPSB1c2VSZWYoZXhwYW5kZWQpXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV4cGFuZGVkUmVmLmN1cnJlbnQgIT09IGV4cGFuZGVkICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHNhdmVkU2Nyb2xsVG9wID0gbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IHNhdmVkU2Nyb2xsVG9wXG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfVxuICB9LCBbZXhwYW5kZWRdKVxuXG4gIGlmIChsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZhZGUgZmlsbD5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9GYWRlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yID1cbiAgICAhIWxhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobGFzdE1lc3NhZ2UuaWQpICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobWVzc2FnZS5pZClcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgICAgICAgICAvLyBObyBmaWx0cmFyIGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZzogc3UgdGV4dG8gdml2ZVxuICAgICAgICAgIC8vIGVuIGVsIHN0cmVhbWluZ1N0b3JlIHkgYG1lc3NhZ2UubWVzc2FnZWAgZXMgJycgaGFzdGEgZWwgY29tcGxldGUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgICAgc3RyZWFtQWN0aXZpdHk9e2lzU3RyZWFtaW5nID8gc3RyZWFtTG9hZGluZ0Rpc3BsYXkgOiBudWxsfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC8+XG4gICAgICB7IWhhc01lc3NhZ2VMZXZlbEluZGljYXRvciAmJiBzdHJlYW1Mb2FkaW5nRGlzcGxheSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtTG9hZGluZ0Rpc3BsYXl9IC8+XG4gICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICApfVxuICAgICAgey8qIEVzcGFjaW8gcXVlIGxlIHBlcm1pdGUgYSBsYSBwcmVndW50YSBzdWJpciBhbCB0b3BlLiBBbHR1cmEgbWFuZWphZGFcbiAgICAgICAgICBpbXBlcmF0aXZhbWVudGUgZGVzZGUgYHNldFNwYWNlckhlaWdodGA7IGFycmFuY2EgZW4gMC4gKi99XG4gICAgICA8U0NUdXJuU3BhY2VyIHJlZj17c3BhY2VyRWxSZWZ9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIC8vIFNpIGVsIHVzdWFyaW8gbXVldmUgZWwgc2Nyb2xsIGR1cmFudGUgbGEgYW5pbWFjacOzbiwgYWJvcnRhbW9zOiBubyBsZVxuICAgIC8vIHBlbGVhbW9zIGVsIGNvbnRyb2wgZGVsIGNvbnRlbmVkb3IuXG4gICAgPFNDTWVzc2FnZXNPdXRlciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9IG9uV2hlZWw9e2NhbmNlbFR1cm5TY3JvbGx9IG9uVG91Y2hTdGFydD17Y2FuY2VsVHVyblNjcm9sbH0+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+e21lc3NhZ2VzQ29udGVudH08L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lciByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219ICRzY3JvbGxPblBhcmVudD17ZmFsc2V9PlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM3RyxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBRWhGLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBQ3BGLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFHM0QsU0FBc0JDLGVBQWUsUUFBUSxxQkFBcUI7QUFDbEUsU0FBU0Msc0JBQXNCLEVBQUVDLGdCQUFnQixRQUFRLHNDQUFzQztBQUUvRixTQUFTQyxjQUFjLFFBQVEsaUNBQWlDO0FBQ2hFLFNBQWtCQyxPQUFPLFFBQVEsMkJBQTJCO0FBRTVELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsY0FBYyxRQUFRLDhDQUE4QztBQUM3RSxTQUFTQyxtQkFBbUIsUUFBUSxvQ0FBb0M7QUFDeEUsU0FBU0MsbUJBQW1CLFFBQVEsb0NBQW9DO0FBRXhFLFNBQVNDLFdBQVcsUUFBUSx5QkFBeUI7QUFDckQsU0FBU0Msc0JBQXNCLFFBQVEsb0NBQW9DO0FBQzNFLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFFM0QsU0FBU0MsK0JBQStCLEVBQUVDLDJCQUEyQixRQUFRLHVDQUF1QztBQUNwSCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLElBQUksUUFBUSxrQkFBa0I7QUFJdkMsU0FBU0MsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRUMsc0JBQXNCLEVBQUVDLHVCQUF1QixRQUFRLFVBQVU7QUFDN0csU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUNFQyxtQkFBbUIsRUFDbkJDLG9CQUFvQixFQUNwQkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGVBQWUsRUFDZkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLFlBQVksRUFDWkMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMsdUJBQXVCLEVBQ3ZCQyx1QkFBdUIsRUFDdkJDLHFCQUFxQixFQUNyQkMsd0JBQXdCLFFBQ25CLGFBQWE7QUFDcEIsU0FBU0MsUUFBUSxRQUFRLG9DQUFvQztBQUM3RCxTQUFTQyxnQkFBZ0IsUUFBUSxpQ0FBaUM7QUFJbEUsU0FBU0Msb0JBQW9CLEVBQUVDLDZCQUE2QixRQUFRLGlDQUFpQztBQUNyRyxTQUFTQyxpQkFBaUIsUUFBUSxxQkFBcUI7QUFDdkQsU0FBU0Msd0JBQXdCLFFBQVEsNEJBQTRCO0FBQ3JFLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUMxRCxTQUFTQyxtQkFBbUIsUUFBUSxtQ0FBbUM7QUFBQSxTQUFBQyxHQUFBLElBQUFDLElBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQTtBQW1DdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlDLGNBQXNCO0VBQUEsT0FBYUMsSUFBSSxDQUFDQyxHQUFHLENBQUNGLGNBQWMsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBQUE7O0FBRWpHO0FBQ0EsSUFBTUcsdUJBQXVCLEdBQUcsR0FBRztBQStCbkMsSUFBTUMsY0FBdUMsR0FBRyxTQUExQ0EsY0FBdUNBLENBQUFDLElBQUEsRUFBOEM7RUFBQSxJQUF4Q0MsYUFBYSxHQUFBRCxJQUFBLENBQWJDLGFBQWE7SUFBRUMsUUFBUSxHQUFBRixJQUFBLENBQVJFLFFBQVE7SUFBS0MsS0FBSyxHQUFBQyx3QkFBQSxDQUFBSixJQUFBLEVBQUFLLFNBQUE7RUFDbEYsSUFBTUMsZ0JBQWdCLEdBQUdMLGFBQWEsR0FBRzFDLGVBQWUsR0FBR0MsZ0JBQWdCO0VBQzNFLG9CQUFPNkIsSUFBQSxDQUFDaUIsZ0JBQWdCLEVBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUFLSixLQUFLO0lBQUFELFFBQUEsRUFBR0E7RUFBUSxFQUFtQixDQUFDO0FBQ25FLENBQUM7QUFFRCxJQUFNTSxxQkFBcUQsR0FBRyxTQUF4REEscUJBQXFEQSxDQUFBQyxLQUFBLEVBQW9DO0VBQUEsSUFBOUJSLGFBQWEsR0FBQVEsS0FBQSxDQUFiUixhQUFhO0lBQUtFLEtBQUssR0FBQUMsd0JBQUEsQ0FBQUssS0FBQSxFQUFBQyxVQUFBO0VBQ3RGLElBQU1DLHVCQUF1QixHQUFHVixhQUFhLEdBQUd4QyxzQkFBc0IsR0FBR0MsdUJBQXVCO0VBQ2hHLG9CQUFPMkIsSUFBQSxDQUFDc0IsdUJBQXVCLEVBQUFKLGFBQUEsS0FBS0osS0FBSyxDQUFHLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVNTLGNBQWNBLENBQUFDLEtBQUEsRUFNcEI7RUFBQSxJQUxEQyxPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztJQUNQQyxrQkFBa0IsR0FBQUYsS0FBQSxDQUFsQkUsa0JBQWtCO0VBS2xCLElBQUFDLFNBQUEsR0FBNENsRixRQUFRLENBQWlCLElBQUksQ0FBQztJQUFBbUYsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBbkVHLGNBQWMsR0FBQUYsVUFBQTtJQUFFRyxpQkFBaUIsR0FBQUgsVUFBQTtFQUV4QyxJQUFNSSxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsTUFBZSxFQUFLO0lBQ3hDLElBQUlILGNBQWMsRUFBRTtJQUNwQkMsaUJBQWlCLENBQUNFLE1BQU0sQ0FBQztJQUN6QlAsa0JBQWtCLENBQUNPLE1BQU0sQ0FBQztFQUM1QixDQUFDO0VBRUQsb0JBQ0VqQyxJQUFBLENBQUNuQixhQUFhO0lBQUFnQyxRQUFBLEVBQ1gsQ0FBQ1ksT0FBTyxJQUFJLEVBQUUsRUFBRVMsR0FBRyxDQUFDLFVBQUFELE1BQU07TUFBQSxvQkFDekJqQyxJQUFBLENBQUNsQixZQUFZO1FBQ1hxRCxhQUFhLEVBQUUsQ0FBQyxDQUFDTCxjQUFlO1FBQ2hDTSxPQUFPLEVBQUUsQ0FBQyxDQUFDTixjQUFjLElBQUksQ0FBQUEsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVPLEVBQUUsTUFBS0osTUFBTSxDQUFDSSxFQUFHO1FBQzlEQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVFOLFlBQVksQ0FBQ0MsTUFBTSxDQUFDO1FBQUEsQ0FBQztRQUFBcEIsUUFBQSxFQUduQ29CLE1BQU0sQ0FBQ007TUFBSSxHQUZQTixNQUFNLENBQUNJLEVBR0EsQ0FBQztJQUFBLENBQ2hCO0VBQUMsQ0FDVyxDQUFDO0FBRXBCOztBQUVBO0FBQ0EsSUFBTUcsb0JBQW9CLGdCQUFHcEcsSUFBSSxDQUMvQixVQUFDMEUsS0FpQkEsRUFBSztFQUFBLElBQUEyQixxQkFBQSxFQUFBQyxrQkFBQTtFQUNKO0VBQ0E7RUFDQTtFQUNBLElBQU1DLGFBQWEsR0FBR2pGLG1CQUFtQixDQUFDb0QsS0FBSyxDQUFDOEIsV0FBVyxHQUFHOUIsS0FBSyxDQUFDK0IsU0FBUyxHQUFHLElBQUksQ0FBQztFQUNyRixJQUFNQyxPQUFPLEdBQUdoQyxLQUFLLENBQUM4QixXQUFXLEdBQUdELGFBQWEsR0FBRzdCLEtBQUssQ0FBQ2lDLE9BQU87RUFDakU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1DLFFBQVEsR0FDWixPQUFPQyxNQUFNLEtBQUssV0FBVyxHQUN4QkEsTUFBTSxHQU9QLENBQUMsQ0FBQztFQUNSLElBQU1DLFdBQVcsR0FBR3pGLG1CQUFtQixDQUFDcUYsT0FBTyxFQUFBNUIsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO0lBQzdDaUMsT0FBTyxFQUFFLENBQUMsQ0FBQ3JDLEtBQUssQ0FBQzhCLFdBQVc7SUFDNUJRLGdCQUFnQixFQUFFLEVBQUU7SUFDcEJDLGtCQUFrQixFQUFFO0VBQUksR0FDcEJMLFFBQVEsQ0FBQ00sV0FBVyxJQUFJLElBQUksSUFBSTtJQUFFQyxXQUFXLEVBQUVQLFFBQVEsQ0FBQ007RUFBWSxDQUFDLEdBQ3JFTixRQUFRLENBQUNRLFdBQVcsSUFBSSxJQUFJLElBQUk7SUFBRUMsa0JBQWtCLEVBQUVULFFBQVEsQ0FBQ1E7RUFBWSxDQUFDLEdBQzVFUixRQUFRLENBQUNVLGNBQWMsSUFBSSxJQUFJLElBQUk7SUFBRUMsY0FBYyxFQUFFWCxRQUFRLENBQUNVO0VBQWUsQ0FBQyxHQUM5RVYsUUFBUSxDQUFDWSxlQUFlLElBQUksSUFBSSxJQUFJO0lBQUVDLGNBQWMsRUFBRWIsUUFBUSxDQUFDWTtFQUFnQixDQUFDLEdBQ2hGWixRQUFRLENBQUNjLGNBQWMsSUFBSSxJQUFJLElBQUk7SUFBRUMsUUFBUSxFQUFFZixRQUFRLENBQUNjO0VBQWUsQ0FBQyxDQUM3RSxDQUFDO0VBQ0YsSUFBTUUseUJBQXlCLElBQUF2QixxQkFBQSxHQUFHM0IsS0FBSyxDQUFDbUQsbUJBQW1CLGNBQUF4QixxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCeUIsT0FBTztFQUVwRSxJQUFJLENBQUNoQixXQUFXLElBQUksQ0FBQ3BDLEtBQUssQ0FBQzhCLFdBQVcsRUFBRSxPQUFPLElBQUk7RUFDbkQsSUFBTXVCLFdBQVcsR0FBRy9HLGdCQUFnQixDQUFDOEYsV0FBVyxDQUFDO0VBQ2pELElBQU1rQixZQUFZLEdBQUdELFdBQVcsR0FBR2hILHNCQUFzQixDQUFDK0YsV0FBVyxDQUFDLEdBQUcsSUFBSTtFQUM3RSxvQkFDRTlDLEtBQUEsQ0FBQUYsU0FBQTtJQUFBVyxRQUFBLGdCQUNFYixJQUFBLENBQUN6QixtQkFBbUI7TUFDbEJxQyxhQUFhLEVBQUVFLEtBQUssQ0FBQ0YsYUFBYztNQUNuQ3lELG1CQUFtQixFQUFFdkQsS0FBSyxDQUFDdUQsbUJBQW9CO01BQy9DQyxTQUFTLEVBQUU3RSw2QkFBNkIsQ0FBQ3lELFdBQVcsQ0FBRTtNQUFBckMsUUFBQSxFQUVyRHNELFdBQVcsSUFBSUMsWUFBWTtNQUFBO01BQzFCO01BQ0FwRSxJQUFBO1FBQU11RSxLQUFLLEVBQUU7VUFBRUMsT0FBTyxFQUFFO1FBQVMsQ0FBRTtRQUFBM0QsUUFBQSxFQUFFdUQ7TUFBWSxDQUFPLENBQUM7TUFBQTtNQUV6RDtNQUNBcEUsSUFBQSxDQUFDL0MsY0FBYztRQUNid0gsT0FBTyxFQUFDLE1BQU07UUFDZDdELGFBQWEsRUFBRUUsS0FBSyxDQUFDRixhQUFjO1FBQ25DeUQsbUJBQW1CLEVBQUV2RCxLQUFLLENBQUN1RCxtQkFBb0I7UUFDL0NLLFVBQVUsRUFBRTtVQUFFQyxDQUFDLEVBQUVuRjtRQUFxQixDQUF1QztRQUM3RW9GLFdBQVcsRUFBRSxDQUFDLENBQUM5RCxLQUFLLENBQUM4QixXQUFZO1FBQUEvQixRQUFBLEVBRWhDcUM7TUFBVyxDQUNFO0lBQ2pCLENBQ2tCLENBQUMsRUFDckJwQyxLQUFLLENBQUMrRCxXQUFXLElBQUksQ0FBQy9ELEtBQUssQ0FBQ2dFLE9BQU8sSUFBSSxDQUFDaEUsS0FBSyxDQUFDdUQsbUJBQW1CLElBQUksQ0FBQ3ZELEtBQUssQ0FBQ2lFLFFBQVEsSUFBSSxDQUFDakUsS0FBSyxDQUFDOEIsV0FBVyxpQkFDekc1QyxJQUFBLENBQUMxQixlQUFlO01BQ2QwRyxPQUFPLEVBQUU5QixXQUFZO01BQ3JCK0IsT0FBTyxFQUFFbkUsS0FBSyxDQUFDbUUsT0FBUTtNQUN2QkMsY0FBYyxFQUFFcEUsS0FBSyxDQUFDcUUsbUJBQW9CO01BQzFDQyxlQUFlLEVBQUV0RSxLQUFLLENBQUNzRTtJQUFnQixDQUN4QyxDQUNGLEVBQ0F0RSxLQUFLLENBQUMrRCxXQUFXLElBQ2hCLENBQUMvRCxLQUFLLENBQUN1RCxtQkFBbUIsSUFDMUIsQ0FBQ3ZELEtBQUssQ0FBQ2lFLFFBQVEsS0FDZCxDQUFDakUsS0FBSyxDQUFDZ0UsT0FBTyxNQUFBcEMsa0JBQUEsR0FBSTVCLEtBQUssQ0FBQ3VFLFdBQVcsY0FBQTNDLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUI0QyxNQUFNLEVBQUMsaUJBQzNDdEYsSUFBQSxDQUFDTixpQkFBaUI7TUFDaEIyRixXQUFXLEVBQUV2RSxLQUFLLENBQUN1RSxXQUFXLElBQUksRUFBRztNQUNyQ0Usa0JBQWtCLEVBQUUsU0FBcEJBLGtCQUFrQkEsQ0FBRUMsVUFBVTtRQUFBLE9BQUkxRSxLQUFLLENBQUMyRSxxQkFBcUIsQ0FBQzNFLEtBQUssQ0FBQytCLFNBQVMsRUFBRTJDLFVBQVUsQ0FBQztNQUFBLENBQUM7TUFDM0ZFLFFBQVEsRUFBRTVFLEtBQUssQ0FBQzZFLG1CQUFvQjtNQUNwQ0MsTUFBTSxFQUFFLENBQUMsQ0FBQzlFLEtBQUssQ0FBQzhCLFdBQVcsSUFBSSxDQUFDOUIsS0FBSyxDQUFDK0UsYUFBYSxJQUFJLENBQUMsQ0FBQy9FLEtBQUssQ0FBQzZFO0lBQW9CLENBQ3BGLENBQ0YsRUFDRjdFLEtBQUssQ0FBQytELFdBQVcsSUFDaEIsQ0FBQy9ELEtBQUssQ0FBQ2dFLE9BQU8sSUFDZCxDQUFDaEUsS0FBSyxDQUFDdUQsbUJBQW1CLElBQzFCLENBQUN2RCxLQUFLLENBQUNpRSxRQUFRLElBQ2YsQ0FBQyxDQUFDZix5QkFBeUIsaUJBQ3pCaEUsSUFBQSxDQUFDTCx3QkFBd0I7TUFDdkJ1RSxPQUFPLEVBQUVGLHlCQUEwQjtNQUNuQzBCLFFBQVEsRUFBRTVFLEtBQUssQ0FBQzZFLG1CQUFvQjtNQUNwQ0MsTUFBTSxFQUFFLENBQUMsQ0FBQzlFLEtBQUssQ0FBQzhCLFdBQVcsSUFBSSxDQUFDOUIsS0FBSyxDQUFDK0UsYUFBYSxJQUFJLENBQUMsQ0FBQy9FLEtBQUssQ0FBQzZFO0lBQW9CLENBQ3BGLENBQ0Y7RUFBQSxDQUNILENBQUM7QUFFUCxDQUNGLENBQUM7QUFFRCxJQUFNRyxXQUFXLGdCQUFHMUosSUFBSSxDQUFDLFVBQUMwRSxLQUF1QixFQUFLO0VBQUEsSUFBQWlGLGdCQUFBLEVBQUFDLHFCQUFBO0VBQ3BELElBQ0UzRCxFQUFFLEdBdUJBdkIsS0FBSyxDQXZCUHVCLEVBQUU7SUFDRjRELElBQUksR0FzQkZuRixLQUFLLENBdEJQbUYsSUFBSTtJQUNKbEQsT0FBTyxHQXFCTGpDLEtBQUssQ0FyQlBpQyxPQUFPO0lBQ1BILFdBQVcsR0FvQlQ5QixLQUFLLENBcEJQOEIsV0FBVztJQUNYa0MsT0FBTyxHQW1CTGhFLEtBQUssQ0FuQlBnRSxPQUFPO0lBQ1BvQixRQUFRLEdBa0JOcEYsS0FBSyxDQWxCUG9GLFFBQVE7SUFDUnpFLE9BQU8sR0FpQkxYLEtBQUssQ0FqQlBXLE9BQU87SUFDUDBFLGVBQWUsR0FnQmJyRixLQUFLLENBaEJQcUYsZUFBZTtJQUNmekUsa0JBQWtCLEdBZWhCWixLQUFLLENBZlBZLGtCQUFrQjtJQUNsQitELHFCQUFxQixHQWNuQjNFLEtBQUssQ0FkUDJFLHFCQUFxQjtJQUNyQlAsY0FBYyxHQWFacEUsS0FBSyxDQWJQb0UsY0FBYztJQUNka0Isc0JBQXNCLEdBWXBCdEYsS0FBSyxDQVpQc0Ysc0JBQXNCO0lBQ3RCaEIsZUFBZSxHQVdidEUsS0FBSyxDQVhQc0UsZUFBZTtJQUNmaUIsSUFBSSxHQVVGdkYsS0FBSyxDQVZQdUYsSUFBSTtJQUNKcEIsT0FBTyxHQVNMbkUsS0FBSyxDQVRQbUUsT0FBTztJQUNQcUIsV0FBVyxHQVFUeEYsS0FBSyxDQVJQd0YsV0FBVztJQUNYdkIsUUFBUSxHQU9OakUsS0FBSyxDQVBQaUUsUUFBUTtJQUNSd0IsY0FBYyxHQU1aekYsS0FBSyxDQU5QeUYsY0FBYztJQUNkbEIsV0FBVyxHQUtUdkUsS0FBSyxDQUxQdUUsV0FBVztJQUNYcEIsbUJBQW1CLEdBSWpCbkQsS0FBSyxDQUpQbUQsbUJBQW1CO0lBQ25CdUMscUJBQXFCLEdBR25CMUYsS0FBSyxDQUhQMEYscUJBQXFCO0lBQ3JCWCxhQUFhLEdBRVgvRSxLQUFLLENBRlArRSxhQUFhO0lBQ2JZLGNBQWMsR0FDWjNGLEtBQUssQ0FEUDJGLGNBQWM7RUFHaEIsSUFBQUMsVUFBQSxHQUFrRGpLLFFBQVEsQ0FBd0IsSUFBSSxDQUFDO0lBQUFrSyxVQUFBLEdBQUE5RSxjQUFBLENBQUE2RSxVQUFBO0lBQWhGRSxpQkFBaUIsR0FBQUQsVUFBQTtJQUFFRSxvQkFBb0IsR0FBQUYsVUFBQTtFQUM5QyxJQUFNL0YsYUFBYSxHQUFHeUYsSUFBSSxLQUFLbkosZUFBZSxDQUFDNEosSUFBSSxJQUFJYixJQUFJLENBQUM1RCxFQUFFLEtBQUs2RCxRQUFRLENBQUM3RCxFQUFFLENBQUMwRSxRQUFRLENBQUMsQ0FBQztFQUN6RixJQUFNbEMsV0FBVyxHQUFHd0IsSUFBSSxLQUFLbkosZUFBZSxDQUFDOEosU0FBUyxJQUFJZixJQUFJLENBQUM1RCxFQUFFLEtBQUssV0FBVztFQUNqRixJQUFNNEUsc0JBQXNCLEdBQUduSiwrQkFBK0IsQ0FBQ3VFLEVBQUUsQ0FBQztFQUNsRSxJQUFNTSxhQUFhLEdBQUdqRixtQkFBbUIsQ0FBQ2tGLFdBQVcsSUFBSXFFLHNCQUFzQixHQUFHNUUsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM1RixJQUFNNkUsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDdEUsV0FBVyxJQUFJcUUsc0JBQXNCO0VBQ2pFLElBQU1FLGFBQWEsR0FBR0MsT0FBTyxDQUFDekUsYUFBYSxDQUFDO0VBQzVDLElBQU0wRSxrQkFBa0IsR0FDdEJmLFdBQVcsSUFBSUEsV0FBVyxDQUFDaEIsTUFBTSxHQUFHLENBQUMsR0FDakNnQixXQUFXLEdBQ1gsQ0FBQ3pCLFdBQVcsSUFBSXlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdEMsT0FBTyxDQUFDLEdBQ25DQSxPQUFPLEdBQ1IsRUFBRTtFQUVWLElBQU11QyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJQyxVQUEwQixFQUFLO0lBQzVEO0lBQ0EsSUFDRUEsVUFBVSxDQUFDQyxJQUFJLFlBQVlDLElBQUksSUFDL0JGLFVBQVUsQ0FBQ0csWUFBWSxZQUFZRCxJQUFJLElBQ3ZDRixVQUFVLENBQUNJLGFBQWEsSUFDeEJKLFVBQVUsQ0FBQ0ssWUFBWSxJQUN2QkwsVUFBVSxDQUFDTSxRQUFRLEVBQ25CO01BQ0FsQixvQkFBb0IsQ0FBQ1ksVUFBVSxDQUFDO0lBQ2xDO0VBQ0YsQ0FBQztFQUVELElBQU1PLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUEsRUFBUztJQUMvQm5CLG9CQUFvQixDQUFDLElBQUksQ0FBQztFQUM1QixDQUFDO0VBRUQsSUFBTW9CLHdCQUF3QjtJQUFBLElBQUFDLEtBQUEsR0FBQUMsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUFDLFFBQU9iLFVBQTBCO01BQUEsSUFBQWMsU0FBQSxFQUFBQyxRQUFBLEVBQUFDLE9BQUEsRUFBQUMsT0FBQSxFQUFBQyxjQUFBLEVBQUFDLElBQUEsRUFBQUMsRUFBQTtNQUFBLE9BQUFULG1CQUFBLENBQUFVLElBQUEsV0FBQUMsUUFBQTtRQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1VBQUE7WUFDMURWLFNBQVMsR0FBR2QsVUFBVSxDQUFDbEYsSUFBSSxDQUFDMkcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBQUMsTUFBQSxDQUFPMUIsVUFBVSxDQUFDMkIsSUFBSSxDQUFFO1lBQ3RFWixRQUFRLE1BQUFXLE1BQUEsQ0FBTTFCLFVBQVUsQ0FBQ2xGLElBQUksRUFBQTRHLE1BQUEsQ0FBR1osU0FBUztZQUN6Q0UsT0FBTyxHQUFHaEIsVUFBVSxDQUFDSyxZQUFZLElBQUlMLFVBQVUsQ0FBQ00sUUFBUSxJQUFJTixVQUFVLENBQUNJLGFBQWE7WUFBQWtCLFFBQUEsQ0FBQUMsSUFBQTtZQUdwRk4sT0FBc0IsR0FBRyxJQUFJO1lBQUEsS0FFN0JELE9BQU87Y0FBQU0sUUFBQSxDQUFBRSxJQUFBO2NBQUE7WUFBQTtZQUFBRixRQUFBLENBQUFFLElBQUE7WUFBQSxPQUNvQm5KLG1CQUFtQixDQUFDMkksT0FBTyxFQUFFRCxRQUFRLEVBQUVmLFVBQVUsQ0FBQzJCLElBQUksQ0FBQztVQUFBO1lBQTlFVCxjQUFjLEdBQUFJLFFBQUEsQ0FBQU0sSUFBQTtZQUNwQlgsT0FBTyxHQUFHWSxHQUFHLENBQUNDLGVBQWUsQ0FBQ1osY0FBYyxDQUFDO1lBQUFJLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7WUFDeEMsSUFBSXhCLFVBQVUsQ0FBQ0MsSUFBSSxZQUFZQyxJQUFJLEVBQUU7Y0FDMUNlLE9BQU8sR0FBR1ksR0FBRyxDQUFDQyxlQUFlLENBQUM5QixVQUFVLENBQUNDLElBQUksQ0FBQztZQUNoRDtVQUFDO1lBQUEsSUFFSWdCLE9BQU87Y0FBQUssUUFBQSxDQUFBRSxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUFGLFFBQUEsQ0FBQVMsTUFBQTtVQUFBO1lBRU5aLElBQUksR0FBR2EsUUFBUSxDQUFDL00sYUFBYSxDQUFDLEdBQUcsQ0FBQztZQUN4Q2tNLElBQUksQ0FBQ2MsSUFBSSxHQUFHaEIsT0FBTztZQUNuQkUsSUFBSSxDQUFDZSxRQUFRLEdBQUduQixRQUFRO1lBQ3hCSSxJQUFJLENBQUNyRSxLQUFLLENBQUNDLE9BQU8sR0FBRyxNQUFNO1lBQzNCaUYsUUFBUSxDQUFDRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ2pCLElBQUksQ0FBQztZQUMvQkEsSUFBSSxDQUFDa0IsS0FBSyxDQUFDLENBQUM7WUFFWkMsVUFBVSxDQUFDLFlBQU07Y0FDZk4sUUFBUSxDQUFDRyxJQUFJLENBQUNJLFdBQVcsQ0FBQ3BCLElBQUksQ0FBQztjQUMvQlUsR0FBRyxDQUFDVyxlQUFlLENBQUN2QixPQUFPLENBQUM7WUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUFBSyxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1lBQUFGLFFBQUEsQ0FBQUMsSUFBQTtZQUFBSCxFQUFBLEdBQUFFLFFBQUE7WUFFUG1CLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLCtCQUErQixFQUFBdEIsRUFBTyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFFLFFBQUEsQ0FBQXFCLElBQUE7UUFBQTtNQUFBLEdBQUE5QixPQUFBO0lBQUEsQ0FFeEQ7SUFBQSxnQkEvQktMLHdCQUF3QkEsQ0FBQW9DLEVBQUE7TUFBQSxPQUFBbkMsS0FBQSxDQUFBb0MsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQStCN0I7RUFFRCxJQUFJcEUsZUFBZSxJQUFJMUUsT0FBTyxFQUFFO0lBQzlCLG9CQUNFekIsSUFBQSxDQUFDVSxjQUFjO01BQVVFLGFBQWEsRUFBRUEsYUFBYztNQUFDLG1CQUFpQnlCLEVBQUc7TUFBQ21JLFdBQVcsRUFBRSxLQUFNO01BQUEzSixRQUFBLGVBQzdGYixJQUFBLENBQUNqQixvQkFBb0I7UUFBQzBMLFlBQVksRUFBRTVGLFdBQVk7UUFBQWhFLFFBQUEsZUFDOUNiLElBQUEsQ0FBQ21CLHFCQUFxQjtVQUNwQmdGLGVBQWUsRUFBRUEsZUFBZ0I7VUFDakNwRCxPQUFPLEVBQUVBLE9BQVE7VUFDakJuQyxhQUFhLEVBQUVBLGFBQWM7VUFDN0JrRSxPQUFPLEVBQUVBLE9BQVE7VUFDakI0RixtQkFBbUIsZUFBRTFLLElBQUEsQ0FBQ3VCLGNBQWM7WUFBQ0UsT0FBTyxFQUFFQSxPQUFlO1lBQUNDLGtCQUFrQixFQUFFQTtVQUFtQixDQUFFO1FBQUUsQ0FDMUc7TUFBQyxDQUNrQjtJQUFDLEdBVEpXLEVBVUwsQ0FBQztFQUVyQjtFQUVBLElBQU04QyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJd0YsUUFBa0IsRUFBSztJQUNsRCxJQUFNQyxTQUFTLEdBQUd2SSxFQUFFLENBQ2pCd0ksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUNWQyxNQUFNLENBQUMsVUFBQUMsVUFBVTtNQUFBLE9BQUlBLFVBQVUsS0FBSyxRQUFRO0lBQUEsRUFBQyxDQUM3Q0MsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNaOUYsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBR3lGLFFBQVEsRUFBRUMsU0FBUyxDQUFDO0VBQ3ZDLENBQUM7RUFFRCxvQkFDRXhLLEtBQUEsQ0FBQ3JCLG9CQUFvQjtJQUFDMEwsWUFBWSxFQUFFNUYsV0FBWTtJQUFDLG1CQUFpQnhDLEVBQUc7SUFBQXhCLFFBQUEsZ0JBQ25FVCxLQUFBLENBQUNwQixrQkFBa0I7TUFBQTZCLFFBQUEsR0FDaEJnRSxXQUFXLElBQUksQ0FBQ3FDLGlCQUFpQixpQkFBSWxILElBQUEsQ0FBQ25DLGNBQWM7UUFBQ2dGLFNBQVMsRUFBRVIsRUFBRztRQUFDNEksS0FBSyxHQUFBbEYsZ0JBQUEsR0FBRWpGLEtBQUssQ0FBQ29LLFNBQVMsY0FBQW5GLGdCQUFBLGNBQUFBLGdCQUFBLEdBQUk7TUFBSyxDQUFFLENBQUMsRUFDdEcsQ0FBQyxDQUFDc0Isa0JBQWtCLENBQUMvQixNQUFNLGlCQUMxQnRGLElBQUEsQ0FBQ2YsZ0JBQWdCO1FBQUN3TCxZQUFZLEVBQUU1RixXQUFZO1FBQUFoRSxRQUFBLEVBQ3pDd0csa0JBQWtCLENBQUNuRixHQUFHLENBQUMsVUFBQ3VGLFVBQVUsRUFBRTBELEtBQUssRUFBSztVQUFBLElBQUFDLGdCQUFBLEVBQUFDLGdCQUFBO1VBQzdDO1VBQ0EsSUFBTUMsY0FBYyxHQUFHLENBQUE3RCxVQUFVLGFBQVZBLFVBQVUsZ0JBQUEyRCxnQkFBQSxHQUFWM0QsVUFBVSxDQUFFMkIsSUFBSSxjQUFBZ0MsZ0JBQUEsdUJBQWhCQSxnQkFBQSxDQUFrQkcsV0FBVyxDQUFDLENBQUMsS0FBSSxFQUFFO1VBQzVELElBQU1DLGNBQWMsR0FBRyxDQUFBL0QsVUFBVSxhQUFWQSxVQUFVLGdCQUFBNEQsZ0JBQUEsR0FBVjVELFVBQVUsQ0FBRWxGLElBQUksY0FBQThJLGdCQUFBLHVCQUFoQkEsZ0JBQUEsQ0FBa0JFLFdBQVcsQ0FBQyxDQUFDLEtBQUksRUFBRTtVQUM1RCxJQUFNRSxXQUFXLEdBQ2ZILGNBQWMsQ0FBQ0ksVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUNuQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQ3hDLFFBQVEsQ0FBQ29DLGNBQWMsQ0FBQyxJQUNuRixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQ0ssSUFBSSxDQUFDLFVBQUFDLEdBQUc7WUFBQSxPQUN6RUosY0FBYyxDQUFDSyxRQUFRLENBQUNELEdBQUcsQ0FBQztVQUFBLENBQzlCLENBQUM7VUFFSCxJQUFJSCxXQUFXLEVBQUU7WUFDZixvQkFBT3pMLElBQUEsQ0FBQ2hELG1CQUFtQjtjQUE2Q3lLLFVBQVUsRUFBRUE7WUFBVyxNQUFBMEIsTUFBQSxDQUEzRDFCLFVBQVUsQ0FBQ3BGLEVBQUUsT0FBQThHLE1BQUEsQ0FBSTFCLFVBQVUsQ0FBQ2xGLElBQUksQ0FBNkIsQ0FBQztVQUNwRztVQUVBLG9CQUNFdkMsSUFBQSxDQUFDbkQsY0FBYztZQUViNEssVUFBVSxFQUFFQSxVQUFXO1lBQ3ZCcUUsYUFBYSxFQUFFWCxLQUFNO1lBQ3JCWSxVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBQTtjQUFBLE9BQVE5RCx3QkFBd0IsQ0FBQ1IsVUFBVSxDQUFDO1lBQUEsQ0FBQztZQUN2RG5GLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2NBQUEsT0FBUWtGLHFCQUFxQixDQUFDQyxVQUFVLENBQUM7WUFBQTtVQUFDLE1BQUEwQixNQUFBLENBSnpDMUIsVUFBVSxDQUFDcEYsRUFBRSxPQUFBOEcsTUFBQSxDQUFJMUIsVUFBVSxDQUFDbEYsSUFBSSxDQUt6QyxDQUFDO1FBRU4sQ0FBQztNQUFDLENBQ2MsQ0FDbkIsRUFDQSxDQUFDLENBQUMsQ0FBQ1EsT0FBTyxJQUFLbUUsaUJBQWlCLElBQUlDLGFBQWMsS0FBSyxFQUFFdEMsV0FBVyxJQUFJLENBQUMsQ0FBQ3dDLGtCQUFrQixDQUFDL0IsTUFBTSxDQUFDLGlCQUNuR3RGLElBQUEsQ0FBQ3dDLG9CQUFvQjtRQUNuQk8sT0FBTyxFQUFFQSxPQUFPLGFBQVBBLE9BQU8sY0FBUEEsT0FBTyxHQUFJLEVBQUc7UUFDdkJILFdBQVcsRUFBRXNFLGlCQUFpQixJQUFJQyxhQUFjO1FBQ2hEdkcsYUFBYSxFQUFFQSxhQUFjO1FBQzdCaUUsV0FBVyxFQUFFQSxXQUFZO1FBQ3pCUixtQkFBbUIsRUFBRXZELEtBQUssQ0FBQ3VELG1CQUFvQjtRQUMvQ1UsUUFBUSxFQUFFQSxRQUFTO1FBQ25CRCxPQUFPLEVBQUVBLE9BQVE7UUFDakJHLE9BQU8sRUFBRUEsT0FBUTtRQUNqQkksV0FBVyxFQUFFQSxXQUFZO1FBQ3pCcEIsbUJBQW1CLEVBQUVBLG1CQUFvQjtRQUN6Q2tCLG1CQUFtQixFQUFFQSxtQkFBb0I7UUFDekNDLGVBQWUsRUFBRUEsZUFBZSxhQUFmQSxlQUFlLGNBQWZBLGVBQWUsR0FBSSxJQUFLO1FBQ3pDSyxxQkFBcUIsRUFBRUEscUJBQXNCO1FBQzdDRSxtQkFBbUIsRUFBRXVCLGlCQUFpQixJQUFJLENBQUMsQ0FBQ1YscUJBQXNCO1FBQ2xFM0QsU0FBUyxFQUFFUixFQUFHO1FBQ2R3RCxhQUFhLEVBQUVBO01BQWMsQ0FDOUIsQ0FDRixFQU1BaEIsV0FBVyxJQUFJcUMsaUJBQWlCLElBQUlULGNBQWMsaUJBQUl6RyxJQUFBLENBQUNwQyxzQkFBc0I7UUFBQ29PLFFBQVEsRUFBRXZGO01BQWUsQ0FBRSxDQUFDLEVBQzFHMUIsUUFBUSxJQUFJQSxRQUFRLENBQUNrSCxlQUFlLGlCQUNuQ2pNLElBQUEsQ0FBQ2QsdUJBQXVCO1FBQUEyQixRQUFBLGVBQ3RCYixJQUFBLENBQUNsRCxXQUFXO1VBQ1ZvUCxPQUFPLEVBQUVuSCxRQUFRLENBQUNrSCxlQUFnQjtVQUNsQ0UsTUFBTSxFQUFFNUYsY0FBZTtVQUN2QjZGLFNBQVMsRUFBRSxTQUFYQSxTQUFTQSxDQUFFQyxTQUFTO1lBQUEsT0FBSWpHLHNCQUFzQixDQUFDaUcsU0FBUyxFQUFFLFNBQVMsQ0FBQztVQUFBLENBQUM7VUFDckVDLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFRCxTQUFTO1lBQUEsT0FBSWpHLHNCQUFzQixDQUFDaUcsU0FBUyxFQUFFLFFBQVEsQ0FBQztVQUFBLENBQUM7VUFDbkVFLGdCQUFnQixFQUFFLEVBQUF2RyxxQkFBQSxHQUFBbEYsS0FBSyxDQUFDMEwsZUFBZSxjQUFBeEcscUJBQUEsdUJBQXJCQSxxQkFBQSxDQUF1QnlHLFVBQVUsTUFBSyxJQUFLO1VBQzdEQyxVQUFVLEVBQUU1TCxLQUFLLENBQUM2TCxRQUFTO1VBQzNCQyxjQUFjLEVBQUU3SCxRQUFRLENBQUM4SCxrQkFBbUI7VUFDNUNDLGNBQWMsRUFBRS9ILFFBQVEsQ0FBQ2dJLGVBQWdCO1VBQ3pDQyxzQkFBc0IsRUFBRWpJLFFBQVEsQ0FBQ2tJO1FBQXlCLENBQzNEO01BQUMsQ0FDcUIsQ0FDMUI7SUFBQSxDQUNpQixDQUFDLGVBQ3JCak4sSUFBQSxDQUFDakQsc0JBQXNCO01BQ3JCbVEsTUFBTSxFQUFFLENBQUMsQ0FBQ3RHLGlCQUFrQjtNQUM1QnVHLE9BQU8sRUFBRW5GLGtCQUFtQjtNQUM1QlAsVUFBVSxFQUFFYjtJQUFrQixDQUMvQixDQUFDO0VBQUEsQ0FDa0IsQ0FBQztBQUUzQixDQUFDLENBQUM7QUFFRixJQUFNd0csbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBQUMsS0FBQSxFQVNFO0VBQUEsSUFSekJDLGtCQUFrQixHQUFBRCxLQUFBLENBQWxCQyxrQkFBa0I7SUFDbEJDLGFBQWEsR0FBQUYsS0FBQSxDQUFiRSxhQUFhO0lBQ2JDLE9BQU8sR0FBQUgsS0FBQSxDQUFQRyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBSixLQUFBLENBQWxCSSxrQkFBa0I7SUFDbEJDLGdCQUFnQixHQUFBTCxLQUFBLENBQWhCSyxnQkFBZ0I7SUFDaEJwSCxXQUFXLEdBQUErRyxLQUFBLENBQVgvRyxXQUFXO0lBQ1hxSCxNQUFNLEdBQUFOLEtBQUEsQ0FBTk0sTUFBTTtJQUNOaEIsUUFBUSxHQUFBVSxLQUFBLENBQVJWLFFBQVE7RUFFUixJQUFBaUIsS0FBQSxHQUFjclEsSUFBSSxDQUFDLENBQUM7SUFBWnNRLENBQUMsR0FBQUQsS0FBQSxDQUFEQyxDQUFDO0VBQ1QsSUFBQUMsaUJBQUEsR0FBeUR2TyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQW5Fd08saUJBQWlCLEdBQUFELGlCQUFBLENBQWpCQyxpQkFBaUI7SUFBRUMsa0JBQWtCLEdBQUFGLGlCQUFBLENBQWxCRSxrQkFBa0I7SUFBRUMsS0FBSyxHQUFBSCxpQkFBQSxDQUFMRyxLQUFLO0VBQ3BELElBQU1DLEtBQUssR0FBR3JPLFFBQVEsQ0FBQyxDQUFDO0VBQ3hCLElBQU1xRyxRQUFRLEdBQUc1SSxPQUFPLENBQUMsQ0FBQztFQUMxQixJQUFNNlEsV0FBVyxHQUFHM1IsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDaEQsSUFBTTRSLGtCQUFrQixHQUFHNVIsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUN4QyxJQUFNNlIsZ0JBQWdCLEdBQUc3UixNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ3RDLElBQU04UixnQkFBZ0IsR0FBRzlSLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDdEMsSUFBTStSLGtCQUFrQixHQUFHL1IsTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUNyQyxJQUFNZ1MsZ0JBQWdCLEdBQUdoUyxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ2xDLElBQU1pUyxxQkFBcUIsR0FBR2pTLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDM0MsSUFBTWtTLGtCQUFrQixHQUFHbFMsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUN4QyxJQUFNbVMscUJBQXFCLEdBQUduUyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzNDLElBQU1vUyxZQUFZLEdBQUdwUyxNQUFNLENBQWdCLElBQUksQ0FBQztFQUNoRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTXFTLGlCQUFpQixHQUFHclMsTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDckQsSUFBTXNTLFdBQVcsR0FBR3RTLE1BQU0sQ0FBd0IsSUFBSSxDQUFDO0VBQ3ZELElBQU11UyxlQUFlLEdBQUd2UyxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ2pDLElBQU13UyxnQkFBZ0IsR0FBR3hTLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQ3BELElBQU15UyxxQkFBcUIsR0FBR3pTLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDM0MsSUFBTTBTLHNCQUFzQixHQUFHMVMsTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDMUQsSUFBQTJTLFVBQUEsR0FBb0QxUyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUEyUyxVQUFBLEdBQUF2TixjQUFBLENBQUFzTixVQUFBO0lBQTVERSxrQkFBa0IsR0FBQUQsVUFBQTtJQUFFRSxxQkFBcUIsR0FBQUYsVUFBQTtFQUNoRCxJQUFBRyxVQUFBLEdBQThDOVMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBK1MsVUFBQSxHQUFBM04sY0FBQSxDQUFBME4sVUFBQTtJQUF0REUsZUFBZSxHQUFBRCxVQUFBO0lBQUVFLGtCQUFrQixHQUFBRixVQUFBO0VBQzFDLElBQUFHLFVBQUEsR0FBb0RsVCxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFtVCxVQUFBLEdBQUEvTixjQUFBLENBQUE4TixVQUFBO0lBQTVERSxrQkFBa0IsR0FBQUQsVUFBQTtJQUFFRSxxQkFBcUIsR0FBQUYsVUFBQTtFQUNoRCxJQUFBRyxVQUFBLEdBQXdFdFQsUUFBUSxDQUEwQixDQUFDLENBQUMsQ0FBQztJQUFBdVQsV0FBQSxHQUFBbk8sY0FBQSxDQUFBa08sVUFBQTtJQUF0R0UsNEJBQTRCLEdBQUFELFdBQUE7SUFBRUUsK0JBQStCLEdBQUFGLFdBQUE7RUFFcEUsSUFBQUcsZUFBQSxHQWdCSTNTLGNBQWMsQ0FBQztNQUNqQjRTLE1BQU0sRUFBRTdDLGFBQWEsSUFBSThDLFNBQVM7TUFDbEMvQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtNQUNsQkUsT0FBTyxFQUFQQSxPQUFPO01BQ1BsSCxXQUFXLEVBQVhBLFdBQVc7TUFDWHFILE1BQU0sRUFBTkE7SUFDRixDQUFDLENBQUM7SUFyQkEyQyxRQUFRLEdBQUFILGVBQUEsQ0FBUkcsUUFBUTtJQUNSQyxlQUFlLEdBQUFKLGVBQUEsQ0FBZkksZUFBZTtJQUNmQyxxQkFBcUIsR0FBQUwsZUFBQSxDQUFyQksscUJBQXFCO0lBQ3JCQyxlQUFlLEdBQUFOLGVBQUEsQ0FBZk0sZUFBZTtJQUNmQyxTQUFTLEdBQUFQLGVBQUEsQ0FBVE8sU0FBUztJQUNUQyxjQUFjLEdBQUFSLGVBQUEsQ0FBZFEsY0FBYztJQUNkbEssY0FBYyxHQUFBMEosZUFBQSxDQUFkMUosY0FBYztJQUNkbUssY0FBYyxHQUFBVCxlQUFBLENBQWRTLGNBQWM7SUFDZEMsV0FBVyxHQUFBVixlQUFBLENBQVhVLFdBQVc7SUFDWEMsYUFBYSxHQUFBWCxlQUFBLENBQWJXLGFBQWE7SUFDYjVMLGNBQWMsR0FBQWlMLGVBQUEsQ0FBZGpMLGNBQWM7SUFDZGtCLHNCQUFzQixHQUFBK0osZUFBQSxDQUF0Qi9KLHNCQUFzQjtJQUN0QjJLLGNBQWMsR0FBQVosZUFBQSxDQUFkWSxjQUFjO0lBQ2RDLFlBQVksR0FBQWIsZUFBQSxDQUFaYSxZQUFZO0lBQ1pDLGNBQWMsR0FBQWQsZUFBQSxDQUFkYyxjQUFjO0VBU2hCLElBQU12UCxrQkFBa0IsR0FBR3JGLFdBQVcsQ0FDcEMsVUFBQzRGLE1BQWUsRUFBSztJQUNuQjZPLGFBQWEsQ0FBQzdPLE1BQU0sQ0FBQztFQUN2QixDQUFDLEVBQ0QsQ0FBQzZPLGFBQWEsQ0FDaEIsQ0FBQzs7RUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTUksdUJBQXVCLEdBQUc3VSxXQUFXLENBQUMsWUFBTTtJQUNoRCxJQUFNOFUsRUFBRSxHQUFHaEQsV0FBVyxDQUFDaUQsT0FBTztJQUM5QixJQUFJLENBQUNELEVBQUUsRUFBRTtJQUNULElBQVFFLFNBQVMsR0FBaUNGLEVBQUUsQ0FBNUNFLFNBQVM7TUFBRUMsWUFBWSxHQUFtQkgsRUFBRSxDQUFqQ0csWUFBWTtNQUFFQyxZQUFZLEdBQUtKLEVBQUUsQ0FBbkJJLFlBQVk7SUFDN0M7SUFDQTtJQUNBLElBQU1DLGtCQUFrQixHQUFHRixZQUFZLEdBQUd2QyxlQUFlLENBQUNxQyxPQUFPLEdBQUdDLFNBQVMsR0FBR0UsWUFBWTtJQUU1RixJQUFNRSxVQUFVLEdBQUdELGtCQUFrQixHQUFHLEVBQUU7SUFDMUMsSUFBSS9DLHFCQUFxQixDQUFDMkMsT0FBTyxLQUFLSyxVQUFVLEVBQUU7TUFDaERoRCxxQkFBcUIsQ0FBQzJDLE9BQU8sR0FBR0ssVUFBVTtNQUMxQ25DLHFCQUFxQixDQUFDbUMsVUFBVSxDQUFDO0lBQ25DO0lBRUEsSUFBTUMsZUFBZSxHQUFHTCxTQUFTLEdBQUcsQ0FBQztJQUNyQyxJQUFJM0Msa0JBQWtCLENBQUMwQyxPQUFPLEtBQUtNLGVBQWUsRUFBRTtNQUNsRGhELGtCQUFrQixDQUFDMEMsT0FBTyxHQUFHTSxlQUFlO01BQzVDaEMsa0JBQWtCLENBQUNnQyxlQUFlLENBQUM7SUFDckM7SUFFQSxJQUFNQyxrQkFBa0IsR0FBR0gsa0JBQWtCLEdBQUcsQ0FBQztJQUNqRCxJQUFJN0MscUJBQXFCLENBQUN5QyxPQUFPLEtBQUtPLGtCQUFrQixFQUFFO01BQ3hEaEQscUJBQXFCLENBQUN5QyxPQUFPLEdBQUdPLGtCQUFrQjtNQUNsRDdCLHFCQUFxQixDQUFDNkIsa0JBQWtCLENBQUM7SUFDM0M7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNQyxpQkFBaUIsR0FBR3ZWLFdBQVcsQ0FDbkMsWUFBb0U7SUFBQSxJQUFuRXdWLElBQXlELEdBQUF0SCxTQUFBLENBQUFqRixNQUFBLFFBQUFpRixTQUFBLFFBQUE4RixTQUFBLEdBQUE5RixTQUFBLE1BQUcsQ0FBQyxDQUFDO0lBQzdELElBQUF1SCxxQkFBQSxHQUFxREQsSUFBSSxDQUFqREUsbUJBQW1CO01BQW5CQSxtQkFBbUIsR0FBQUQscUJBQUEsY0FBRyxLQUFLLEdBQUFBLHFCQUFBO01BQUFFLGFBQUEsR0FBa0JILElBQUksQ0FBcEJJLE9BQU87TUFBUEEsT0FBTyxHQUFBRCxhQUFBLGNBQUcsQ0FBQyxHQUFBQSxhQUFBO0lBQ2hELElBQU1FLEdBQUcsR0FBRyxTQUFOQSxHQUFHQSxDQUFBLEVBQVM7TUFDaEJDLHFCQUFxQixDQUFDLFlBQU07UUFDMUIsSUFBTWhCLEVBQUUsR0FBR2hELFdBQVcsQ0FBQ2lELE9BQU87UUFDOUIsSUFBSSxDQUFDRCxFQUFFLEVBQUU7UUFDVCxJQUFJWSxtQkFBbUIsSUFBSXpELGdCQUFnQixDQUFDOEMsT0FBTyxFQUFFO1FBQ3JERCxFQUFFLENBQUNFLFNBQVMsR0FBR0YsRUFBRSxDQUFDRyxZQUFZO1FBQzlCSix1QkFBdUIsQ0FBQyxDQUFDO01BQzNCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJZSxPQUFPLEdBQUcsQ0FBQyxFQUFFbEksVUFBVSxDQUFDbUksR0FBRyxFQUFFRCxPQUFPLENBQUMsTUFDcENDLEdBQUcsQ0FBQyxDQUFDO0VBQ1osQ0FBQyxFQUNELENBQUNoQix1QkFBdUIsQ0FDMUIsQ0FBQztFQUVELElBQU1rQixnQkFBZ0IsR0FBRy9WLFdBQVcsQ0FBQyxZQUFNO0lBQ3pDLElBQUkyUyxnQkFBZ0IsQ0FBQ29DLE9BQU8sS0FBSyxJQUFJLEVBQUU7SUFDdkNpQixvQkFBb0IsQ0FBQ3JELGdCQUFnQixDQUFDb0MsT0FBTyxDQUFDO0lBQzlDcEMsZ0JBQWdCLENBQUNvQyxPQUFPLEdBQUcsSUFBSTtFQUNqQyxDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0FBQ0Y7QUFDQTtBQUNBO0VBQ0UsSUFBTWtCLGVBQWUsR0FBR2pXLFdBQVcsQ0FDakMsVUFBQ2tXLEdBQVcsRUFBSztJQUNmSCxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xCLElBQU1qQixFQUFFLEdBQUdoRCxXQUFXLENBQUNpRCxPQUFPO0lBQzlCLElBQUksQ0FBQ0QsRUFBRSxFQUFFO0lBQ1QsSUFBTXFCLElBQUksR0FBR3JCLEVBQUUsQ0FBQ0UsU0FBUztJQUN6QixJQUFNb0IsUUFBUSxHQUFHRixHQUFHLEdBQUdDLElBQUk7SUFDM0IsSUFBSWpTLElBQUksQ0FBQ21TLEdBQUcsQ0FBQ0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBRTVCLElBQU1FLFNBQVMsR0FBR0MsV0FBVyxDQUFDQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFNQyxLQUFJLEdBQUcsU0FBUEEsSUFBSUEsQ0FBSUQsR0FBVyxFQUFLO01BQzVCLElBQU1FLFFBQVEsR0FBR3hTLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDcVMsR0FBRyxHQUFHRixTQUFTLElBQUlsUyx1QkFBdUIsQ0FBQztNQUN6RSxJQUFNdVMsS0FBSyxHQUFHLENBQUMsR0FBQXpTLElBQUEsQ0FBQTBTLEdBQUEsQ0FBSSxDQUFDLEdBQUdGLFFBQVEsRUFBSyxDQUFDO01BQ3JDNUIsRUFBRSxDQUFDRSxTQUFTLEdBQUdtQixJQUFJLEdBQUdDLFFBQVEsR0FBR08sS0FBSztNQUN0QzlCLHVCQUF1QixDQUFDLENBQUM7TUFDekJsQyxnQkFBZ0IsQ0FBQ29DLE9BQU8sR0FBRzJCLFFBQVEsR0FBRyxDQUFDLEdBQUdaLHFCQUFxQixDQUFDVyxLQUFJLENBQUMsR0FBRyxJQUFJO0lBQzlFLENBQUM7SUFDRDlELGdCQUFnQixDQUFDb0MsT0FBTyxHQUFHZSxxQkFBcUIsQ0FBQ1csS0FBSSxDQUFDO0VBQ3hELENBQUMsRUFDRCxDQUFDVixnQkFBZ0IsRUFBRWxCLHVCQUF1QixDQUM1QyxDQUFDO0VBRUQ1VSxTQUFTLENBQUM7SUFBQSxPQUFNOFYsZ0JBQWdCO0VBQUEsR0FBRSxDQUFDQSxnQkFBZ0IsQ0FBQyxDQUFDO0VBRXJELElBQU1jLGVBQWUsR0FBRzdXLFdBQVcsQ0FBQyxVQUFDNE0sSUFBWSxFQUFLO0lBQ3BELElBQUkxSSxJQUFJLENBQUNtUyxHQUFHLENBQUMzRCxlQUFlLENBQUNxQyxPQUFPLEdBQUduSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDbEQ4RixlQUFlLENBQUNxQyxPQUFPLEdBQUduSSxJQUFJO0lBQzlCLElBQUk2RixXQUFXLENBQUNzQyxPQUFPLEVBQUU7TUFDdkJ0QyxXQUFXLENBQUNzQyxPQUFPLENBQUM3TSxLQUFLLENBQUM0TyxNQUFNLE1BQUFoSyxNQUFBLENBQU1GLElBQUksT0FBSTtJQUNoRDtFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNbUssY0FBYyxHQUFHL1csV0FBVyxDQUFDLFlBQU07SUFDdkN3UyxpQkFBaUIsQ0FBQ3VDLE9BQU8sR0FBRyxJQUFJO0lBQ2hDOEIsZUFBZSxDQUFDLENBQUMsQ0FBQztFQUNwQixDQUFDLEVBQUUsQ0FBQ0EsZUFBZSxDQUFDLENBQUM7RUFFckIsSUFBTUcsV0FBVyxHQUFHaFgsV0FBVyxDQUFDLFVBQUMwTyxVQUFrQixFQUFLO0lBQ3RELElBQU1vRyxFQUFFLEdBQUdoRCxXQUFXLENBQUNpRCxPQUFPO0lBQzlCLElBQU1rQyxRQUFRLEdBQUd4RSxXQUFXLENBQUNzQyxPQUFPO0lBQ3BDLElBQUksQ0FBQ0QsRUFBRSxJQUFJLENBQUNtQyxRQUFRLEVBQUUsT0FBTyxJQUFJO0lBRWpDLElBQU1DLFVBQVUsR0FBR3BDLEVBQUUsQ0FBQ3FDLGFBQWEsdUJBQUFySyxNQUFBLENBQW1DNEIsVUFBVSxRQUFJLENBQUM7SUFDckYsSUFBSSxDQUFDd0ksVUFBVSxFQUFFLE9BQU8sSUFBSTtJQUU1QixJQUFNRSxZQUFZLEdBQUd0QyxFQUFFLENBQUN1QyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNuQixHQUFHO0lBQ25ELElBQU1vQixXQUFXLEdBQUdKLFVBQVUsQ0FBQ0cscUJBQXFCLENBQUMsQ0FBQyxDQUFDbkIsR0FBRyxHQUFHa0IsWUFBWSxHQUFHdEMsRUFBRSxDQUFDRSxTQUFTO0lBQ3hGLElBQU11QyxhQUFhLEdBQUdOLFFBQVEsQ0FBQ0kscUJBQXFCLENBQUMsQ0FBQyxDQUFDbkIsR0FBRyxHQUFHa0IsWUFBWSxHQUFHdEMsRUFBRSxDQUFDRSxTQUFTO0lBQ3hGLE9BQU87TUFBRUYsRUFBRSxFQUFGQSxFQUFFO01BQUV3QyxXQUFXLEVBQVhBLFdBQVc7TUFBRUUsVUFBVSxFQUFFRCxhQUFhLEdBQUdEO0lBQVksQ0FBQztFQUNyRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTUcsZ0JBQWdCLEdBQUd6WCxXQUFXLENBQ2xDLFVBQUMwTyxVQUFrQixFQUFLO0lBQ3RCLElBQU1nSixRQUFRLEdBQUdWLFdBQVcsQ0FBQ3RJLFVBQVUsQ0FBQztJQUN4QyxJQUFJLENBQUNnSixRQUFRLEVBQUU7SUFDZixJQUFRNUMsRUFBRSxHQUE4QjRDLFFBQVEsQ0FBeEM1QyxFQUFFO01BQUV3QyxXQUFXLEdBQWlCSSxRQUFRLENBQXBDSixXQUFXO01BQUVFLFVBQVUsR0FBS0UsUUFBUSxDQUF2QkYsVUFBVTs7SUFFbkM7SUFDQTtJQUNBaEYsaUJBQWlCLENBQUN1QyxPQUFPLEdBQUdyRyxVQUFVO0lBRXRDLElBQU1pSixNQUFNLEdBQUczVCxnQkFBZ0IsQ0FBQzhRLEVBQUUsQ0FBQ0ksWUFBWSxDQUFDO0lBQ2hELElBQU0wQyxlQUFlLEdBQUcxVCxJQUFJLENBQUMyVCxHQUFHLENBQUMsQ0FBQyxFQUFFUCxXQUFXLEdBQUdLLE1BQU0sQ0FBQztJQUN6RDtJQUNBO0lBQ0EsSUFBSUMsZUFBZSxJQUFJOUMsRUFBRSxDQUFDRSxTQUFTLEVBQUU7TUFDbkM2QixlQUFlLENBQUMsQ0FBQyxDQUFDO01BQ2xCaEMsdUJBQXVCLENBQUMsQ0FBQztNQUN6QjtJQUNGOztJQUVBO0lBQ0E7SUFDQTtJQUNBZ0MsZUFBZSxDQUFDM1MsSUFBSSxDQUFDMlQsR0FBRyxDQUFDLENBQUMsRUFBRS9DLEVBQUUsQ0FBQ0ksWUFBWSxHQUFHc0MsVUFBVSxHQUFHRyxNQUFNLENBQUMsQ0FBQztJQUNuRTFCLGVBQWUsQ0FBQzJCLGVBQWUsQ0FBQztFQUNsQyxDQUFDLEVBQ0QsQ0FBQ1osV0FBVyxFQUFFSCxlQUFlLEVBQUVoQyx1QkFBdUIsRUFBRW9CLGVBQWUsQ0FDekUsQ0FBQzs7RUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNNkIsYUFBYSxHQUFHOVgsV0FBVyxDQUFDLFlBQWU7SUFDL0MsSUFBSSxDQUFDd1MsaUJBQWlCLENBQUN1QyxPQUFPLEVBQUUsT0FBTyxLQUFLO0lBQzVDLElBQUlyQyxlQUFlLENBQUNxQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO01BQy9CLElBQU0yQyxRQUFRLEdBQUdWLFdBQVcsQ0FBQ3hFLGlCQUFpQixDQUFDdUMsT0FBTyxDQUFDO01BQ3ZELElBQUkyQyxRQUFRLEVBQUU7UUFDWixJQUFNQyxNQUFNLEdBQUczVCxnQkFBZ0IsQ0FBQzBULFFBQVEsQ0FBQzVDLEVBQUUsQ0FBQ0ksWUFBWSxDQUFDO1FBQ3pELElBQU02QyxRQUFRLEdBQUc3VCxJQUFJLENBQUMyVCxHQUFHLENBQUMsQ0FBQyxFQUFFSCxRQUFRLENBQUM1QyxFQUFFLENBQUNJLFlBQVksR0FBR3dDLFFBQVEsQ0FBQ0YsVUFBVSxHQUFHRyxNQUFNLENBQUM7UUFDckZkLGVBQWUsQ0FBQzNTLElBQUksQ0FBQ0MsR0FBRyxDQUFDdU8sZUFBZSxDQUFDcUMsT0FBTyxFQUFFZ0QsUUFBUSxDQUFDLENBQUM7TUFDOUQ7SUFDRjtJQUNBLE9BQU8sSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDZixXQUFXLEVBQUVILGVBQWUsQ0FBQyxDQUFDO0VBRWxDLElBQU1tQix5QkFBeUIsR0FBR2hZLFdBQVcsQ0FBQyxZQUFNO0lBQ2xELElBQUksQ0FBQzhSLFdBQVcsQ0FBQ2lELE9BQU8sRUFBRTtJQUMxQmdDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hCakYsV0FBVyxDQUFDaUQsT0FBTyxDQUFDa0QsUUFBUSxDQUFDO01BQzNCL0IsR0FBRyxFQUFFcEUsV0FBVyxDQUFDaUQsT0FBTyxDQUFDRSxZQUFZO01BQ3JDaUQsUUFBUSxFQUFFO0lBQ1osQ0FBQyxDQUFDO0lBQ0Y7SUFDQXhLLFVBQVUsQ0FBQ21ILHVCQUF1QixFQUFFLEdBQUcsQ0FBQztFQUMxQyxDQUFDLEVBQUUsQ0FBQ2tDLGNBQWMsRUFBRWxDLHVCQUF1QixDQUFDLENBQUM7RUFFN0MsSUFBTXNELG9CQUFvQixHQUFHblksV0FBVyxDQUN0QyxVQUFDb1ksQ0FBZ0MsRUFBSztJQUNwQyxJQUFNQyxTQUFTLEdBQUdELENBQUMsQ0FBQ0UsYUFBYTtJQUVqQyxJQUFJL0YsWUFBWSxDQUFDd0MsT0FBTyxLQUFLLElBQUksRUFBRTtNQUNqQ2lCLG9CQUFvQixDQUFDekQsWUFBWSxDQUFDd0MsT0FBTyxDQUFDO0lBQzVDO0lBRUF4QyxZQUFZLENBQUN3QyxPQUFPLEdBQUdlLHFCQUFxQixDQUFDLFlBQU07TUFDakR2RCxZQUFZLENBQUN3QyxPQUFPLEdBQUcsSUFBSTtNQUMzQixJQUFRQyxTQUFTLEdBQWlDcUQsU0FBUyxDQUFuRHJELFNBQVM7UUFBRUMsWUFBWSxHQUFtQm9ELFNBQVMsQ0FBeENwRCxZQUFZO1FBQUVDLFlBQVksR0FBS21ELFNBQVMsQ0FBMUJuRCxZQUFZO01BRTdDLElBQU1xRCxhQUFhLEdBQUd2RCxTQUFTLEdBQUc3QyxnQkFBZ0IsQ0FBQzRDLE9BQU87TUFFMUQsSUFBSXdELGFBQWEsRUFBRTtRQUNqQnJHLGtCQUFrQixDQUFDNkMsT0FBTyxHQUFHLEVBQUU7TUFDakM7TUFFQSxJQUFNeUQsWUFBWSxHQUFHdkQsWUFBWSxHQUFHRCxTQUFTLEdBQUdFLFlBQVksR0FBR2hELGtCQUFrQixDQUFDNkMsT0FBTztNQUV6RixJQUFJeUQsWUFBWSxFQUFFO1FBQ2hCdEcsa0JBQWtCLENBQUM2QyxPQUFPLEdBQUcsRUFBRTtNQUNqQztNQUVBOUMsZ0JBQWdCLENBQUM4QyxPQUFPLEdBQUcsQ0FBQ3lELFlBQVk7TUFDeENyRyxnQkFBZ0IsQ0FBQzRDLE9BQU8sR0FBR0MsU0FBUztNQUVwQ0gsdUJBQXVCLENBQUMsQ0FBQztNQUV6QixJQUFJMkQsWUFBWSxJQUFJbkgsZ0JBQWdCLEVBQUU7UUFDcENBLGdCQUFnQixDQUFDLENBQUM7TUFDcEI7TUFFQXNELFlBQVksQ0FBQzBELFNBQVMsQ0FBQztJQUN6QixDQUFDLENBQUM7RUFDSixDQUFDLEVBQ0QsQ0FBQ2hILGdCQUFnQixFQUFFc0QsWUFBWSxFQUFFRSx1QkFBdUIsQ0FDMUQsQ0FBQzs7RUFFRDtFQUNBLElBQU00RCxjQUFjLEdBQUd0WSxNQUFNLENBQUNxVSxXQUFXLENBQUM7RUFDMUMsSUFBTWtFLGlCQUFpQixHQUFHdlksTUFBTSxDQUFDeVUsY0FBYyxDQUFDO0VBQ2hELElBQU0rRCxxQkFBcUIsR0FBR3hZLE1BQU0sQ0FBQ2lSLGtCQUFrQixDQUFDO0VBQ3hELElBQU13SCxtQkFBbUIsR0FBR3pZLE1BQU0sQ0FDaEMsVUFDRXVHLE9BQWUsRUFDZnVELFdBQThCLEVBQzlCNE8sS0FBYyxFQUNkQyxpQkFBMEIsRUFDMUJDLFFBQTJCLEVBQzNCQyxLQUFjLEVBQ2RDLElBQWE7SUFBQSxPQUNWUixjQUFjLENBQUMxRCxPQUFPLENBQUNyTyxPQUFPLEVBQUV1RCxXQUFXLEVBQUU0TyxLQUFLLEVBQUVDLGlCQUFpQixFQUFFQyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxDQUFDO0VBQUEsQ0FDcEcsQ0FBQztFQUNELElBQU1DLHNCQUFzQixHQUFHL1ksTUFBTSxDQUFDO0lBQUEsT0FBTXVZLGlCQUFpQixDQUFDM0QsT0FBTyxDQUFDLENBQUM7RUFBQSxFQUFDOztFQUV4RTtFQUNBMEQsY0FBYyxDQUFDMUQsT0FBTyxHQUFHUCxXQUFXO0VBQ3BDa0UsaUJBQWlCLENBQUMzRCxPQUFPLEdBQUdILGNBQWM7RUFDMUMrRCxxQkFBcUIsQ0FBQzVELE9BQU8sR0FBRzNELGtCQUFrQjs7RUFFbEQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNK0gsZUFBZSxHQUFHaFosTUFBTSxDQUFDOFQsUUFBUSxDQUFDO0VBQ3hDa0YsZUFBZSxDQUFDcEUsT0FBTyxHQUFHZCxRQUFRO0VBQ2xDLElBQU1tRiwrQkFBK0IsR0FBR2paLE1BQU0sQ0FBQ3lULDRCQUE0QixDQUFDO0VBQzVFd0YsK0JBQStCLENBQUNyRSxPQUFPLEdBQUduQiw0QkFBNEI7RUFFdEUsSUFBTXhLLHFCQUFxQixHQUFHcEosV0FBVyxDQUN2QyxVQUFDd0csU0FBaUIsRUFBRTJDLFVBQWtCLEVBQUs7SUFDekMsSUFBSSxFQUFDQSxVQUFVLGFBQVZBLFVBQVUsZUFBVkEsVUFBVSxDQUFFa1EsSUFBSSxDQUFDLENBQUMsR0FBRTtJQUN6QixJQUFJRCwrQkFBK0IsQ0FBQ3JFLE9BQU8sQ0FBQ3ZPLFNBQVMsQ0FBQyxFQUFFO0lBQ3hELElBQU04UyxlQUFlLEdBQUdILGVBQWUsQ0FBQ3BFLE9BQU87SUFDL0MsSUFBTXdFLHdCQUF3QixHQUFHdlksY0FBYyxDQUFDNFEsS0FBSyxDQUFDO0lBQ3REQyxLQUFLLENBQUN0TyxNQUFNLENBQUNpVyxxQkFBcUIsRUFBRTtNQUNsQ0MsVUFBVSxFQUFFRix3QkFBd0IsR0FBRyxhQUFhLEdBQUczSCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTdFO0lBQ2hFLENBQUMsQ0FBQztJQUNGOEcsK0JBQStCLENBQUMsVUFBQWxILElBQUk7TUFBQSxPQUFBOUgsYUFBQSxDQUFBQSxhQUFBLEtBQVU4SCxJQUFJLE9BQUErTSxlQUFBLEtBQUdsVCxTQUFTLEVBQUcsSUFBSTtJQUFBLENBQUcsQ0FBQztJQUV6RSxJQUFNbVQsYUFBYSxHQUFHTCxlQUFlLENBQUNNLElBQUksQ0FBQyxVQUFBQyxHQUFHO01BQUEsT0FBSUEsR0FBRyxDQUFDN1QsRUFBRSxLQUFLUSxTQUFTO0lBQUEsRUFBQztJQUN2RSxJQUFNc1QsaUJBQWlCLEdBQUcsQ0FBQyxFQUFDSCxhQUFhLGFBQWJBLGFBQWEsZUFBYkEsYUFBYSxDQUFFbFIsT0FBTyxLQUFJVSxVQUFVLEtBQUtxSSxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3BGLElBQUlzSSxpQkFBaUIsRUFBRTtNQUNyQixJQUFNQyxnQkFBZSxHQUFHVCxlQUFlLENBQ3BDN0ssTUFBTSxDQUFDLFVBQUFvTCxHQUFHO1FBQUEsT0FBSUEsR0FBRyxDQUFDN1AsSUFBSSxLQUFLbkosZUFBZSxDQUFDNEosSUFBSSxJQUFJb1AsR0FBRyxDQUFDalEsSUFBSSxDQUFDNUQsRUFBRSxLQUFLNkQsUUFBUSxDQUFDN0QsRUFBRSxDQUFDMEUsUUFBUSxDQUFDLENBQUM7TUFBQSxFQUFDLENBQzFGc1AsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1QsSUFBSUQsZ0JBQWUsYUFBZkEsZ0JBQWUsZUFBZkEsZ0JBQWUsQ0FBRXJULE9BQU8sRUFBRTtRQUM1QixJQUFNdVQsZ0JBQWdCLEdBQUdoUCxLQUFLLENBQUNDLE9BQU8sQ0FBQzZPLGdCQUFlLENBQUM5UCxXQUFXLENBQUMsR0FDL0Q4UCxnQkFBZSxDQUFDOVAsV0FBVyxHQUMzQmdCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNk8sZ0JBQWUsQ0FBQ25SLE9BQU8sQ0FBQyxHQUNwQ21SLGdCQUFlLENBQUNuUixPQUFPLEdBQ3ZCLEVBQUU7UUFDUjZQLGNBQWMsQ0FBQzFELE9BQU8sQ0FBQ2dGLGdCQUFlLENBQUNyVCxPQUFPLEVBQUV1VCxnQkFBZ0IsQ0FBQztRQUNqRTtNQUNGO0lBQ0Y7SUFFQXhCLGNBQWMsQ0FBQzFELE9BQU8sQ0FBQzVMLFVBQVUsQ0FBQztFQUNwQyxDQUFDLEVBQ0QsQ0FBQzBJLEtBQUssRUFBRUQsS0FBSyxFQUFFSixDQUFDLEVBQUUzSCxRQUFRLENBQUM3RCxFQUFFLENBQy9CLENBQUM7RUFFRC9GLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSTBZLHFCQUFxQixDQUFDNUQsT0FBTyxFQUFFO01BQ2pDNEQscUJBQXFCLENBQUM1RCxPQUFPLENBQzNCNkQsbUJBQW1CLENBQUM3RCxPQUFPLEVBQzNCbUUsc0JBQXNCLENBQUNuRSxPQUFPLEVBQzlCWCxlQUFlLEVBQ2ZDLFNBQ0YsQ0FBQztJQUNIO0VBQ0YsQ0FBQyxFQUFFLENBQUNELGVBQWUsRUFBRUMsU0FBUyxDQUFDLENBQUM7RUFFaENwVSxTQUFTLENBQUMsWUFBTTtJQUNkK1IsZ0JBQWdCLENBQUMrQyxPQUFPLEdBQUdaLHFCQUFxQjtFQUNsRCxDQUFDLEVBQUUsQ0FBQ0EscUJBQXFCLENBQUMsQ0FBQzs7RUFFM0I7RUFDQWxVLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSW1VLGVBQWUsRUFBRTtNQUNuQm5DLGdCQUFnQixDQUFDOEMsT0FBTyxHQUFHLEtBQUs7TUFDaEM3QyxrQkFBa0IsQ0FBQzZDLE9BQU8sR0FBRyxFQUFFO0lBQ2pDO0VBQ0YsQ0FBQyxFQUFFLENBQUNYLGVBQWUsQ0FBQyxDQUFDO0VBRXJCblUsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUM4UixrQkFBa0IsQ0FBQ2dELE9BQU8sRUFBRTtNQUMvQmhELGtCQUFrQixDQUFDZ0QsT0FBTyxHQUFHLElBQUk7TUFDakNMLGNBQWMsQ0FBQyxDQUFDO0lBQ2xCO0VBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7RUFFTjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBelUsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUNtVSxlQUFlLElBQUksQ0FBQ0MsU0FBUyxFQUFFLE9BQU9MLFNBQVM7SUFDcEQsSUFBSSxDQUFDbEMsV0FBVyxDQUFDaUQsT0FBTyxFQUFFLE9BQU9mLFNBQVM7SUFFMUMsSUFBSWtHLEtBQW9CLEdBQUcsSUFBSTtJQUMvQixJQUFJQyxVQUFVLEdBQUdySSxXQUFXLENBQUNpRCxPQUFPLENBQUNFLFlBQVk7SUFFakQsSUFBTW1GLEtBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFBLEVBQVM7TUFDakIsSUFBTXRGLEVBQUUsR0FBR2hELFdBQVcsQ0FBQ2lELE9BQU87TUFDOUIsSUFBSSxDQUFDRCxFQUFFLEVBQUU7UUFDUG9GLEtBQUssR0FBRyxJQUFJO1FBQ1o7TUFDRjtNQUNBLElBQUlwQyxhQUFhLENBQUMsQ0FBQyxFQUFFO1FBQ25CO1FBQ0E7UUFDQWpELHVCQUF1QixDQUFDLENBQUM7UUFDekJxRixLQUFLLEdBQUdwRSxxQkFBcUIsQ0FBQ3NFLEtBQUksQ0FBQztRQUNuQztNQUNGO01BQ0EsSUFBTUMsYUFBYSxHQUFHdkYsRUFBRSxDQUFDRyxZQUFZO01BQ3JDLElBQUlvRixhQUFhLEtBQUtGLFVBQVUsRUFBRTtRQUNoQ0EsVUFBVSxHQUFHRSxhQUFhO1FBQzFCLElBQUksQ0FBQ3BJLGdCQUFnQixDQUFDOEMsT0FBTyxFQUFFO1VBQzdCRCxFQUFFLENBQUNFLFNBQVMsR0FBR3FGLGFBQWE7UUFDOUI7UUFDQXhGLHVCQUF1QixDQUFDLENBQUM7TUFDM0I7TUFDQXFGLEtBQUssR0FBR3BFLHFCQUFxQixDQUFDc0UsS0FBSSxDQUFDO0lBQ3JDLENBQUM7SUFFREYsS0FBSyxHQUFHcEUscUJBQXFCLENBQUNzRSxLQUFJLENBQUM7SUFDbkMsT0FBTyxZQUFNO01BQ1gsSUFBSUYsS0FBSyxJQUFJLElBQUksRUFBRWxFLG9CQUFvQixDQUFDa0UsS0FBSyxDQUFDO0lBQ2hELENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQzlGLGVBQWUsRUFBRUMsU0FBUyxFQUFFeUQsYUFBYSxFQUFFakQsdUJBQXVCLENBQUMsQ0FBQzs7RUFFeEU7RUFDQTVVLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSW1VLGVBQWUsSUFBSXRDLFdBQVcsQ0FBQ2lELE9BQU8sSUFBSSxDQUFDdkMsaUJBQWlCLENBQUN1QyxPQUFPLEVBQUU7TUFDeEVRLGlCQUFpQixDQUFDO1FBQUVHLG1CQUFtQixFQUFFO01BQUssQ0FBQyxDQUFDO0lBQ2xEO0VBQ0YsQ0FBQyxFQUFFLENBQUN0QixlQUFlLEVBQUVtQixpQkFBaUIsQ0FBQyxDQUFDO0VBRXhDLElBQU0rRSx1QkFBdUIsR0FBR25hLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDOztFQUUzRDtFQUNBRixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQ2lVLGVBQWUsRUFBRTtJQUN0Qm9HLHVCQUF1QixDQUFDdkYsT0FBTyxHQUFHLElBQUk7SUFDdENnQyxjQUFjLENBQUMsQ0FBQztFQUNsQixDQUFDLEVBQUUsQ0FBQzdDLGVBQWUsRUFBRTZDLGNBQWMsQ0FBQyxDQUFDOztFQUVyQztFQUNBOVcsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJaVUsZUFBZSxJQUFJQyxxQkFBcUIsRUFBRTtJQUU5QyxJQUFJekYsVUFBeUIsR0FBRyxJQUFJO0lBQ3BDLEtBQUssSUFBSUksS0FBSyxHQUFHbUYsUUFBUSxDQUFDaEwsTUFBTSxHQUFHLENBQUMsRUFBRTZGLEtBQUssSUFBSSxDQUFDLEVBQUVBLEtBQUssSUFBSSxDQUFDLEVBQUU7TUFBQSxJQUFBeUwsZUFBQTtNQUM1RCxLQUFBQSxlQUFBLEdBQUl0RyxRQUFRLENBQUNuRixLQUFLLENBQUMsY0FBQXlMLGVBQUEsZ0JBQUFBLGVBQUEsR0FBZkEsZUFBQSxDQUFpQnZVLEVBQUUsY0FBQXVVLGVBQUEsZUFBbkJBLGVBQUEsQ0FBcUJsTCxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDaERYLFVBQVUsR0FBR3VGLFFBQVEsQ0FBQ25GLEtBQUssQ0FBQyxDQUFDOUksRUFBRTtRQUMvQjtNQUNGO0lBQ0Y7SUFDQSxJQUFJLENBQUMwSSxVQUFVLElBQUlBLFVBQVUsS0FBSzRMLHVCQUF1QixDQUFDdkYsT0FBTyxFQUFFO0lBRW5FdUYsdUJBQXVCLENBQUN2RixPQUFPLEdBQUdyRyxVQUFVO0lBQzVDdUQsZ0JBQWdCLENBQUM4QyxPQUFPLEdBQUcsS0FBSztJQUNoQ2UscUJBQXFCLENBQUM7TUFBQSxPQUFNMkIsZ0JBQWdCLENBQUMvSSxVQUFVLENBQUM7SUFBQSxFQUFDO0VBQzNELENBQUMsRUFBRSxDQUFDdUYsUUFBUSxFQUFFQyxlQUFlLEVBQUVDLHFCQUFxQixFQUFFc0QsZ0JBQWdCLENBQUMsQ0FBQzs7RUFFeEU7RUFDQTtFQUNBO0VBQ0EsSUFBTStDLGdCQUFnQixHQUFHcmEsTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDcEQsSUFBTXNhLHFCQUFxQixHQUFHdGEsTUFBTSxDQUFTLENBQUMsQ0FBQzs7RUFFL0M7RUFDQUYsU0FBUyxDQUFDLFlBQU07SUFDZDJTLHFCQUFxQixDQUFDbUMsT0FBTyxHQUFHLEtBQUs7SUFDckNsQyxzQkFBc0IsQ0FBQ2tDLE9BQU8sR0FBRyxJQUFJO0lBQ3JDOUMsZ0JBQWdCLENBQUM4QyxPQUFPLEdBQUcsS0FBSztJQUNoQzdDLGtCQUFrQixDQUFDNkMsT0FBTyxHQUFHLEVBQUU7SUFDL0I1QyxnQkFBZ0IsQ0FBQzRDLE9BQU8sR0FBRyxDQUFDO0lBQzVCeUYsZ0JBQWdCLENBQUN6RixPQUFPLEdBQUcsSUFBSTtJQUMvQjBGLHFCQUFxQixDQUFDMUYsT0FBTyxHQUFHLENBQUM7RUFDbkMsQ0FBQyxFQUFFLENBQUM3RCxhQUFhLENBQUMsQ0FBQzs7RUFFbkI7RUFDQWhSLGVBQWUsQ0FBQyxZQUFNO0lBQUEsSUFBQXdhLFlBQUEsRUFBQUMsU0FBQTtJQUNwQixJQUFJekcsZUFBZSxJQUFJLENBQUNoRCxhQUFhLElBQUkrQyxRQUFRLENBQUNoTCxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ2hFLElBQUk0SixzQkFBc0IsQ0FBQ2tDLE9BQU8sS0FBSzdELGFBQWEsRUFBRTtJQUN0RDJCLHNCQUFzQixDQUFDa0MsT0FBTyxHQUFHN0QsYUFBYTtJQUU5Q2UsZ0JBQWdCLENBQUM4QyxPQUFPLEdBQUcsS0FBSztJQUNoQzdDLGtCQUFrQixDQUFDNkMsT0FBTyxHQUFHLEVBQUU7SUFDL0J5RixnQkFBZ0IsQ0FBQ3pGLE9BQU8sSUFBQTJGLFlBQUEsSUFBQUMsU0FBQSxHQUFHMUcsUUFBUSxDQUFDQSxRQUFRLENBQUNoTCxNQUFNLEdBQUcsQ0FBQyxDQUFDLGNBQUEwUixTQUFBLHVCQUE3QkEsU0FBQSxDQUErQjNVLEVBQUUsY0FBQTBVLFlBQUEsY0FBQUEsWUFBQSxHQUFJLElBQUk7SUFDcEVELHFCQUFxQixDQUFDMUYsT0FBTyxHQUFHZCxRQUFRLENBQUNoTCxNQUFNO0lBRS9Dc00saUJBQWlCLENBQUMsQ0FBQztJQUNuQkEsaUJBQWlCLENBQUM7TUFBRUssT0FBTyxFQUFFO0lBQUksQ0FBQyxDQUFDO0VBQ3JDLENBQUMsRUFBRSxDQUFDMUUsYUFBYSxFQUFFZ0QsZUFBZSxFQUFFRCxRQUFRLENBQUNoTCxNQUFNLEVBQUVnTCxRQUFRLEVBQUVzQixpQkFBaUIsQ0FBQyxDQUFDO0VBRWxGdFYsU0FBUyxDQUFDLFlBQU07SUFBQSxJQUFBMmEsZUFBQTtJQUNkLElBQUksQ0FBQzlJLFdBQVcsQ0FBQ2lELE9BQU8sSUFBSWIsZUFBZSxJQUFJQyxxQkFBcUIsSUFBSW5DLGdCQUFnQixDQUFDK0MsT0FBTyxFQUFFO01BQ2hHO0lBQ0Y7SUFFQSxJQUFNOEYsV0FBVyxHQUFHNUcsUUFBUSxDQUFDQSxRQUFRLENBQUNoTCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQU02UixNQUFNLElBQUFGLGVBQUEsR0FBR0MsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUU3VSxFQUFFLGNBQUE0VSxlQUFBLGNBQUFBLGVBQUEsR0FBSSxJQUFJO0lBQ3RDLElBQU1HLE1BQU0sR0FBR1AsZ0JBQWdCLENBQUN6RixPQUFPO0lBQ3ZDLElBQU1pRyxPQUFPLEdBQUdQLHFCQUFxQixDQUFDMUYsT0FBTztJQUM3Q3lGLGdCQUFnQixDQUFDekYsT0FBTyxHQUFHK0YsTUFBTTtJQUNqQ0wscUJBQXFCLENBQUMxRixPQUFPLEdBQUdkLFFBQVEsQ0FBQ2hMLE1BQU07SUFFL0MsSUFBTWdTLFlBQVksR0FBR0gsTUFBTSxLQUFLQyxNQUFNLElBQUk5RyxRQUFRLENBQUNoTCxNQUFNLEtBQUsrUixPQUFPO0lBQ3JFLElBQUksQ0FBQ0MsWUFBWSxFQUFFO01BQ2pCcEcsdUJBQXVCLENBQUMsQ0FBQztNQUN6QjtJQUNGOztJQUVBO0lBQ0E7SUFDQSxJQUFJckMsaUJBQWlCLENBQUN1QyxPQUFPLEVBQUU7TUFDN0JlLHFCQUFxQixDQUFDZ0MsYUFBYSxDQUFDO01BQ3BDO0lBQ0Y7SUFFQSxJQUFNTyxTQUFTLEdBQUd2RyxXQUFXLENBQUNpRCxPQUFPO0lBQ3JDLElBQU1tRyxVQUFVLEdBQUc3QyxTQUFTLENBQUNwRCxZQUFZLEdBQUdvRCxTQUFTLENBQUNyRCxTQUFTLElBQUlxRCxTQUFTLENBQUNuRCxZQUFZLEdBQUcsR0FBRztJQUMvRixJQUFNaUcsaUJBQWlCLEdBQUdsSCxRQUFRLENBQUMzRSxJQUFJLENBQUMsVUFBQXVLLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUM3VCxFQUFFLEtBQUssc0JBQXNCO0lBQUEsRUFBQztJQUNqRixJQUFNb1YsVUFBVSxHQUFHLENBQUMsQ0FBQ1AsV0FBVyxLQUFLQSxXQUFXLENBQUM3VSxFQUFFLENBQUNxSixVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDd0wsV0FBVyxDQUFDblMsUUFBUSxDQUFDO0lBQ3RHLElBQU0yUyxrQkFBa0IsR0FDdEIsQ0FBQyxDQUFDUixXQUFXLEtBQUtBLFdBQVcsQ0FBQzdVLEVBQUUsQ0FBQ3FKLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSXdMLFdBQVcsQ0FBQzdVLEVBQUUsQ0FBQ3FKLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7SUFFbkc7SUFDQSxJQUFJZ00sa0JBQWtCLElBQUlILFVBQVUsRUFBRTtNQUNwQzNGLGlCQUFpQixDQUFDLENBQUM7TUFDbkI7SUFDRjs7SUFFQTtJQUNBO0lBQ0EsSUFBSSxDQUFDOEYsa0JBQWtCLElBQUksQ0FBQ0QsVUFBVSxJQUFJLENBQUNELGlCQUFpQixJQUFJbEgsUUFBUSxDQUFDaEwsTUFBTSxHQUFHK1IsT0FBTyxFQUFFO01BQ3pGekYsaUJBQWlCLENBQUMsQ0FBQztNQUNuQjtJQUNGO0lBRUFWLHVCQUF1QixDQUFDLENBQUM7RUFDM0IsQ0FBQyxFQUFFLENBQUNaLFFBQVEsRUFBRUMsZUFBZSxFQUFFQyxxQkFBcUIsRUFBRW9CLGlCQUFpQixFQUFFdUMsYUFBYSxFQUFFakQsdUJBQXVCLENBQUMsQ0FBQzs7RUFFakg7RUFDQTtFQUNBM1UsZUFBZSxDQUFDLFlBQU07SUFBQSxJQUFBb2IsYUFBQSxFQUFBQyxVQUFBO0lBQ3BCLElBQU1DLG1CQUFtQixHQUFHNUkscUJBQXFCLENBQUNtQyxPQUFPLElBQUksQ0FBQ2IsZUFBZTtJQUM3RXRCLHFCQUFxQixDQUFDbUMsT0FBTyxHQUFHYixlQUFlO0lBRS9DLElBQUksQ0FBQ3NILG1CQUFtQixJQUFJdkgsUUFBUSxDQUFDaEwsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUVuRGdKLGdCQUFnQixDQUFDOEMsT0FBTyxHQUFHLEtBQUs7SUFDaEM3QyxrQkFBa0IsQ0FBQzZDLE9BQU8sR0FBRyxFQUFFO0lBQy9CeUYsZ0JBQWdCLENBQUN6RixPQUFPLElBQUF1RyxhQUFBLElBQUFDLFVBQUEsR0FBR3RILFFBQVEsQ0FBQ0EsUUFBUSxDQUFDaEwsTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFBc1MsVUFBQSx1QkFBN0JBLFVBQUEsQ0FBK0J2VixFQUFFLGNBQUFzVixhQUFBLGNBQUFBLGFBQUEsR0FBSSxJQUFJO0lBQ3BFYixxQkFBcUIsQ0FBQzFGLE9BQU8sR0FBR2QsUUFBUSxDQUFDaEwsTUFBTTtJQUUvQ3NNLGlCQUFpQixDQUFDLENBQUM7SUFDbkJBLGlCQUFpQixDQUFDO01BQUVLLE9BQU8sRUFBRTtJQUFJLENBQUMsQ0FBQztFQUNyQyxDQUFDLEVBQUUsQ0FBQzFCLGVBQWUsRUFBRUQsUUFBUSxDQUFDaEwsTUFBTSxFQUFFc00saUJBQWlCLENBQUMsQ0FBQzs7RUFFekQ7RUFDQXRWLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSSxDQUFDaVUsZUFBZSxFQUFFO01BQ3BCVyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzNCO0VBQ0YsQ0FBQyxFQUFFLENBQUNYLGVBQWUsRUFBRUQsUUFBUSxDQUFDaEwsTUFBTSxFQUFFNEwsdUJBQXVCLENBQUMsQ0FBQzs7RUFFL0Q7RUFDQSxJQUFNa0YsZUFBZSxHQUFHOUYsUUFBUSxDQUM3QnhGLE1BQU0sQ0FBQyxVQUFBb0wsR0FBRztJQUFBLE9BQUlBLEdBQUcsQ0FBQzdQLElBQUksS0FBS25KLGVBQWUsQ0FBQzRKLElBQUksSUFBSW9QLEdBQUcsQ0FBQ2pRLElBQUksQ0FBQzVELEVBQUUsS0FBSzZELFFBQVEsQ0FBQzdELEVBQUUsQ0FBQzBFLFFBQVEsQ0FBQyxDQUFDO0VBQUEsRUFBQyxDQUMxRnNQLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVULElBQU15QixnQkFBZ0IsR0FDcEIsQ0FBQ3hRLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNk8sZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUU5UCxXQUFXLENBQUMsR0FBRzhQLGVBQWUsQ0FBQzlQLFdBQVcsQ0FBQ2hCLE1BQU0sR0FBRyxDQUFDLE1BQ3BGZ0MsS0FBSyxDQUFDQyxPQUFPLENBQUM2TyxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRW5SLE9BQU8sQ0FBQyxHQUFHbVIsZUFBZSxDQUFDblIsT0FBTyxDQUFDSyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRWhGLElBQU15UyxvQkFBb0IsR0FBR2hhLDJCQUEyQixDQUFDO0lBQ3ZEMEksY0FBYyxFQUFkQSxjQUFjO0lBQ2RrSyxjQUFjLEVBQWRBLGNBQWM7SUFDZEMsY0FBYyxFQUFFQSxjQUFjLElBQUksQ0FBQyxDQUFDO0lBQ3BDSCxlQUFlLEVBQWZBLGVBQWU7SUFDZjFDLGlCQUFpQixFQUFqQkEsaUJBQWlCO0lBQ2pCQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUNsQmdLLGNBQWMsRUFBRTVRLE9BQU8sQ0FBQzBRLGdCQUFnQixDQUFDO0lBQ3pDQSxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtJQUNoQmpLLENBQUMsRUFBREE7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNb0ssZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDdEwsUUFBUTs7RUFFbkM7RUFDQTtFQUNBLElBQU11TCxXQUFXLEdBQUcxYixNQUFNLENBQUNtUSxRQUFRLENBQUM7RUFDcENwUSxlQUFlLENBQUMsWUFBTTtJQUNwQixJQUFJMmIsV0FBVyxDQUFDOUcsT0FBTyxLQUFLekUsUUFBUSxJQUFJd0IsV0FBVyxDQUFDaUQsT0FBTyxFQUFFO01BQzNELElBQU0rRyxjQUFjLEdBQUczSixnQkFBZ0IsQ0FBQzRDLE9BQU87TUFDL0NqRCxXQUFXLENBQUNpRCxPQUFPLENBQUNDLFNBQVMsR0FBRzhHLGNBQWM7TUFDOUNELFdBQVcsQ0FBQzlHLE9BQU8sR0FBR3pFLFFBQVE7SUFDaEMsQ0FBQyxNQUFNO01BQ0x1TCxXQUFXLENBQUM5RyxPQUFPLEdBQUd6RSxRQUFRO0lBQ2hDO0VBQ0YsQ0FBQyxFQUFFLENBQUNBLFFBQVEsQ0FBQyxDQUFDO0VBRWQsSUFBSTRELGVBQWUsRUFBRTtJQUNuQixvQkFDRXZRLElBQUEsQ0FBQy9CLElBQUk7TUFBQ21hLElBQUk7TUFBQXZYLFFBQUEsZUFDUmIsSUFBQSxDQUFDaEMsTUFBTSxJQUFFO0lBQUMsQ0FDTixDQUFDO0VBRVg7RUFFQSxJQUFNa1osV0FBVyxHQUFHNUcsUUFBUSxDQUFDQSxRQUFRLENBQUNoTCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2pELElBQU0rUyx3QkFBd0IsR0FDNUIsQ0FBQyxDQUFDbkIsV0FBVyxJQUFJcFosK0JBQStCLENBQUNvWixXQUFXLENBQUM3VSxFQUFFLENBQUMsS0FBS29PLGVBQWUsSUFBSUMsU0FBUyxDQUFDO0VBRXBHLElBQU00SCxlQUFlLGdCQUNuQmxZLEtBQUEsQ0FBQUYsU0FBQTtJQUFBVyxRQUFBLEdBQ0cyUCxxQkFBcUIsaUJBQUl4USxJQUFBLENBQUNyQyxXQUFXO01BQUM0YSxJQUFJLEVBQUUxSyxDQUFDLENBQUMsa0JBQWtCO0lBQUUsQ0FBRSxDQUFDLGVBQ3RFN04sSUFBQSxDQUFBRSxTQUFBO01BQUFXLFFBQUEsRUFDR3lQLFFBQVEsQ0FBQ3BPLEdBQUcsQ0FBQyxVQUFDYSxPQUFPLEVBQUVvSSxLQUFLLEVBQUs7UUFBQSxJQUFBcU4sb0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsV0FBQTtRQUNoQyxJQUFNQyxrQkFBa0IsR0FBRzdWLE9BQU8sQ0FBQ3NELElBQUksS0FBS25KLGVBQWUsQ0FBQzhKLFNBQVMsSUFBSWpFLE9BQU8sQ0FBQ2tELElBQUksQ0FBQzVELEVBQUUsS0FBSyxXQUFXO1FBQ3hHLElBQU13RCxhQUFhLEdBQUdzRixLQUFLLEtBQUttRixRQUFRLENBQUNoTCxNQUFNLEdBQUcsQ0FBQztRQUNuRCxJQUFNMkIsc0JBQXNCLEdBQzFCMlIsa0JBQWtCLElBQUkvUyxhQUFhLElBQUkvSCwrQkFBK0IsQ0FBQ2lGLE9BQU8sQ0FBQ1YsRUFBRSxDQUFDO1FBQ3BGLElBQU1PLFdBQVcsR0FBR3FFLHNCQUFzQixLQUFLd0osZUFBZSxJQUFJQyxTQUFTLENBQUM7O1FBRTVFO1FBQ0E7UUFDQSxJQUNFLENBQUN6SixzQkFBc0IsSUFDdkIsQ0FBQ3JFLFdBQVcsSUFDWixFQUFFLENBQUE0VixvQkFBQSxHQUFBelYsT0FBTyxDQUFDdUQsV0FBVyxjQUFBa1Msb0JBQUEsZUFBbkJBLG9CQUFBLENBQXFCbFQsTUFBTSxLQUFBbVQsZ0JBQUEsR0FBSTFWLE9BQU8sQ0FBQ2tDLE9BQU8sY0FBQXdULGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCblQsTUFBTSxDQUFDLElBQ3pELENBQUN2QyxPQUFPLENBQUNBLE9BQU8sSUFDaEIsR0FBQTJWLGdCQUFBLEdBQUMzVixPQUFPLENBQUM4VixPQUFPLGNBQUFILGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCblcsSUFBSSxLQUN0QixDQUFDUSxPQUFPLENBQUNnQyxRQUFRLEVBRWpCLE9BQU8sSUFBSTtRQUViLElBQU0rVCxlQUFlLEdBQ25CLENBQUEvVixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRWdXLFVBQVUsTUFBSzFJLFNBQVMsSUFBSXROLE9BQU8sQ0FBQ2dXLFVBQVUsS0FBSyxJQUFJLEdBQzVELElBQUksR0FDSmhXLE9BQU8sQ0FBQ2dXLFVBQVUsR0FDaEJ6WixRQUFRLENBQUMwWixTQUFTLEdBQ2xCMVosUUFBUSxDQUFDMlosV0FBVzs7UUFFNUI7UUFDQSxJQUFNQyxVQUFVLElBQUFQLFdBQUEsR0FBRzVWLE9BQU8sQ0FBQ1YsRUFBRSxjQUFBc1csV0FBQSxjQUFBQSxXQUFBLFVBQUF4UCxNQUFBLENBQVdnQyxLQUFLLENBQUU7UUFFL0Msb0JBQ0V4TyxjQUFBLENBQUNtSixXQUFXLEVBQUE1RSxhQUFBLENBQUFBLGFBQUEsS0FDTjZCLE9BQU87VUFDWG9XLEdBQUcsRUFBRUQsVUFBVztVQUNoQmhULFFBQVEsRUFBRUEsUUFBUztVQUNuQnhFLGtCQUFrQixFQUFFQSxrQkFBbUI7VUFDdkN3RCxjQUFjLEVBQUVBLGNBQWU7VUFDL0JrQixzQkFBc0IsRUFBRUEsc0JBQXVCO1VBQy9DWCxxQkFBcUIsRUFBRUEscUJBQXNCO1VBQzdDZSxxQkFBcUIsRUFBRSxDQUFDLENBQUN5Siw0QkFBNEIsQ0FBQ2xOLE9BQU8sQ0FBQ1YsRUFBRSxDQUFFO1VBQ2xFK0MsZUFBZSxFQUFFMFQsZUFBZ0I7VUFDakNsVyxXQUFXLEVBQUVBLFdBQVk7VUFDekJpRCxhQUFhLEVBQUVBLGFBQWM7VUFDN0I4RyxRQUFRLEVBQUVBLFFBQVM7VUFDbkJsRyxjQUFjLEVBQUU3RCxXQUFXLEdBQUdtVixvQkFBb0IsR0FBRztRQUFLLEVBQzNELENBQUM7TUFFTixDQUFDO0lBQUMsQ0FDRixDQUFDLEVBQ0YsQ0FBQ00sd0JBQXdCLElBQUlOLG9CQUFvQixpQkFDaEQvWCxJQUFBLENBQUNiLHVCQUF1QjtNQUFBMEIsUUFBQSxlQUN0QmIsSUFBQSxDQUFDcEMsc0JBQXNCO1FBQUNvTyxRQUFRLEVBQUUrTDtNQUFxQixDQUFFO0lBQUMsQ0FDbkMsQ0FDMUIsZUFHRC9YLElBQUEsQ0FBQ3BCLFlBQVk7TUFBQ3dhLEdBQUcsRUFBRXRLLFdBQVk7TUFBQyxlQUFZO0lBQU0sQ0FBRSxDQUFDO0VBQUEsQ0FDckQsQ0FDSDtFQUVEO0lBQUE7SUFDRTtJQUNBO0lBQ0ExTyxLQUFBLENBQUMzQixlQUFlO01BQUM0YSxlQUFlLEVBQUVwQixnQkFBaUI7TUFBQ3FCLE9BQU8sRUFBRWxILGdCQUFpQjtNQUFDbUgsWUFBWSxFQUFFbkgsZ0JBQWlCO01BQUF2UixRQUFBLGdCQUM1R2IsSUFBQSxDQUFDWixxQkFBcUI7UUFBQ29hLEtBQUssRUFBRS9KLGVBQWdCO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxFQUNuRXdJLGdCQUFnQixnQkFDZmpZLElBQUEsQ0FBQ3RCLGdCQUFnQjtRQUFDMGEsR0FBRyxFQUFFakwsV0FBWTtRQUFDc0wsUUFBUSxFQUFFakYsb0JBQXFCO1FBQUEzVCxRQUFBLGVBQ2pFYixJQUFBLENBQUNyQixlQUFlO1VBQUMwYSxlQUFlLEVBQUVwQixnQkFBaUI7VUFBQXBYLFFBQUEsRUFBRXlYO1FBQWUsQ0FBa0I7TUFBQyxDQUN2RSxDQUFDLGdCQUVuQnRZLElBQUEsQ0FBQ3JCLGVBQWU7UUFBQ3lhLEdBQUcsRUFBRWpMLFdBQVk7UUFBQ3NMLFFBQVEsRUFBRWpGLG9CQUFxQjtRQUFDNkUsZUFBZSxFQUFFLEtBQU07UUFBQXhZLFFBQUEsRUFDdkZ5WDtNQUFlLENBQ0QsQ0FDbEIsZUFFRHRZLElBQUEsQ0FBQ1gsd0JBQXdCO1FBQUNtYSxLQUFLLEVBQUUzSixrQkFBbUI7UUFBQyxlQUFZO01BQU0sQ0FBRSxDQUFDLEVBRXpFUixrQkFBa0IsaUJBQ2pCclAsSUFBQSxDQUFDeEIsb0JBQW9CO1FBQUM0SyxJQUFJLEVBQUMsUUFBUTtRQUFDOUcsT0FBTyxFQUFFK1IseUJBQTBCO1FBQUF4VCxRQUFBLGVBQ3JFYixJQUFBLENBQUNwRCxjQUFjO1VBQUM4YyxLQUFLLEVBQUMsTUFBTTtVQUFDQyxLQUFLLEVBQUMsTUFBTTtVQUFDeEcsTUFBTSxFQUFDO1FBQU0sQ0FBRTtNQUFDLENBQ3RDLENBQ3ZCO0lBQUEsQ0FDYztFQUFDO0FBRXRCLENBQUM7QUFFRCxPQUFPLElBQU15RyxjQUFjLGdCQUFHemQsS0FBSyxDQUFDQyxJQUFJLENBQUNnUixtQkFBbUIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==