genassist-chat-react 1.0.34-rc.3 → 1.0.35

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.
@@ -69,8 +69,10 @@ import chatLogo from '../assets/chat-logo.png';
69
69
  // Type for attachment with file reference
70
70
  import { resolveLanguage, mergeTranslations, getTranslationString, getTranslationArray, getTranslationsForLanguage, } from '../utils/i18n';
71
71
  import { GoogleReCaptcha, GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';
72
+ // can be used to hide the language selector on the chat box
73
+ var SHOW_CHAT_LANGUAGE_SELECTOR = true;
72
74
  export var GenAgentChat = function (_a) {
73
- var baseUrl = _a.baseUrl, websocketUrl = _a.websocketUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, _b = _a.useWs, useWs = _b === void 0 ? true : _b, _c = _a.usePoll, usePoll = _c === void 0 ? false : _c, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize, theme = _a.theme, _d = _a.headerTitle, headerTitle = _d === void 0 ? 'Genassist' : _d, description = _a.description, placeholder = _a.placeholder, agentName = _a.agentName, logoUrl = _a.logoUrl, _e = _a.mode, mode = _e === void 0 ? 'embedded' : _e, _f = _a.floatingConfig, floatingConfig = _f === void 0 ? {} : _f, language = _a.language, customTranslations = _a.translations, reCaptchaKey = _a.reCaptchaKey, _g = _a.widget, widget = _g === void 0 ? false : _g, _h = _a.useAudio, useAudio = _h === void 0 ? false : _h, _j = _a.useFile, useFile = _j === void 0 ? false : _j, _k = _a.noColorAnimation, noColorAnimation = _k === void 0 ? false : _k, _l = _a.showWelcomeBeforeStart, showWelcomeBeforeStart = _l === void 0 ? true : _l, _m = _a.allowedExtensions, allowedExtensions = _m === void 0 ? [] : _m, serverUnavailableMessage = _a.serverUnavailableMessage, serverUnavailableContactUrl = _a.serverUnavailableContactUrl, serverUnavailableContactLabel = _a.serverUnavailableContactLabel, _o = _a.formDisplay, formDisplay = _o === void 0 ? 'footer' : _o, onConfigLoaded = _a.onConfigLoaded;
75
+ var baseUrl = _a.baseUrl, websocketUrl = _a.websocketUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, _b = _a.useWs, useWs = _b === void 0 ? true : _b, _c = _a.usePoll, usePoll = _c === void 0 ? false : _c, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize, theme = _a.theme, _d = _a.headerTitle, headerTitle = _d === void 0 ? 'Genassist' : _d, description = _a.description, placeholder = _a.placeholder, agentName = _a.agentName, logoUrl = _a.logoUrl, _e = _a.mode, mode = _e === void 0 ? 'embedded' : _e, onExitFullscreen = _a.onExitFullscreen, _f = _a.floatingConfig, floatingConfig = _f === void 0 ? {} : _f, language = _a.language, customTranslations = _a.translations, reCaptchaKey = _a.reCaptchaKey, _g = _a.widget, widget = _g === void 0 ? false : _g, _h = _a.useAudio, useAudio = _h === void 0 ? false : _h, _j = _a.useFile, useFile = _j === void 0 ? false : _j, _k = _a.noColorAnimation, noColorAnimation = _k === void 0 ? false : _k, _l = _a.showWelcomeBeforeStart, showWelcomeBeforeStart = _l === void 0 ? true : _l, _m = _a.allowedExtensions, allowedExtensions = _m === void 0 ? [] : _m, serverUnavailableMessage = _a.serverUnavailableMessage, serverUnavailableContactUrl = _a.serverUnavailableContactUrl, serverUnavailableContactLabel = _a.serverUnavailableContactLabel, _o = _a.formDisplay, formDisplay = _o === void 0 ? 'footer' : _o, onConfigLoaded = _a.onConfigLoaded;
74
76
  // Language selection state (with localStorage persistence)
75
77
  var _p = useState(function () {
76
78
  if (language)
@@ -111,11 +113,7 @@ export var GenAgentChat = function (_a) {
111
113
  };
112
114
  // Get translated placeholder or use provided/default
113
115
  // Make it reactive to language changes
114
- var inputPlaceholder = useMemo(function () {
115
- // If placeholder prop is explicitly provided, use it
116
- // Otherwise, use the translation which will update with language changes
117
- return placeholder || t('input.placeholder', 'Ask a question');
118
- }, [placeholder, translations]);
116
+ var inputPlaceholder = useMemo(function () { return placeholder || t('input.placeholder', 'Ask a question'); }, [placeholder, translations]);
119
117
  var _r = useState(''), inputValue = _r[0], setInputValue = _r[1];
120
118
  var _s = useState(false), showResetConfirm = _s[0], setShowResetConfirm = _s[1];
121
119
  var _t = useState(false), showMenu = _t[0], setShowMenu = _t[1];
@@ -780,7 +778,7 @@ export var GenAgentChat = function (_a) {
780
778
  };
781
779
  // Track window / visual viewport size for layout and mobile detection
782
780
  var _8 = useState(typeof window !== 'undefined' ? window.innerWidth : 1024), windowWidth = _8[0], setWindowWidth = _8[1];
783
- var _9 = useState(typeof window !== 'undefined' ? window.innerHeight : 800), windowHeight = _9[0], setWindowHeight = _9[1];
781
+ var _9 = useState(typeof window !== 'undefined' ? window.innerHeight : 700), windowHeight = _9[0], setWindowHeight = _9[1];
784
782
  // Automatically determine if should be fullscreen (mobile devices or widget mode or manual toggle or fullscreen mode)
785
783
  var isFullscreen = useMemo(function () {
786
784
  // If mode is fullscreen, always fullscreen
@@ -795,6 +793,54 @@ export var GenAgentChat = function (_a) {
795
793
  // Otherwise, use mobile detection
796
794
  return windowWidth <= 768;
797
795
  }, [windowWidth, widget, isFullscreenToggled, mode]);
796
+ // Escape: close overlays first, then exit UI fullscreen when applicable
797
+ useEffect(function () {
798
+ if (typeof window === 'undefined')
799
+ return;
800
+ if (mode === 'floating' && !isFloatingOpen)
801
+ return;
802
+ var onKeyDown = function (e) {
803
+ if (e.key !== 'Escape')
804
+ return;
805
+ if (showResetConfirm) {
806
+ e.preventDefault();
807
+ setShowResetConfirm(false);
808
+ return;
809
+ }
810
+ if (showLanguageDropdown) {
811
+ e.preventDefault();
812
+ setShowLanguageDropdown(false);
813
+ return;
814
+ }
815
+ if (showMenu) {
816
+ e.preventDefault();
817
+ setShowMenu(false);
818
+ return;
819
+ }
820
+ if (!isFullscreen)
821
+ return;
822
+ if (isFullscreenToggled) {
823
+ e.preventDefault();
824
+ setIsFullscreenToggled(false);
825
+ return;
826
+ }
827
+ if (mode === 'fullscreen' && onExitFullscreen) {
828
+ e.preventDefault();
829
+ onExitFullscreen();
830
+ }
831
+ };
832
+ window.addEventListener('keydown', onKeyDown);
833
+ return function () { return window.removeEventListener('keydown', onKeyDown); };
834
+ }, [
835
+ isFloatingOpen,
836
+ isFullscreen,
837
+ isFullscreenToggled,
838
+ mode,
839
+ onExitFullscreen,
840
+ showLanguageDropdown,
841
+ showMenu,
842
+ showResetConfirm,
843
+ ]);
798
844
  useEffect(function () {
799
845
  var updateViewport = function () {
800
846
  setWindowWidth(window.innerWidth);
@@ -1203,7 +1249,6 @@ export var GenAgentChat = function (_a) {
1203
1249
  position: 'fixed',
1204
1250
  borderRadius: '32px',
1205
1251
  zIndex: 1004,
1206
- maxHeight: 'calc(100vh - 20px)',
1207
1252
  };
1208
1253
  switch (position) {
1209
1254
  case 'bottom-right':
@@ -1229,7 +1274,7 @@ export var GenAgentChat = function (_a) {
1229
1274
  var agentDisclaimerContent = showAgentDisclaimer && (_jsx("span", { dangerouslySetInnerHTML: { __html: inputDisclaimerHtml } }));
1230
1275
  var getResponsiveDimensions = function () {
1231
1276
  var screenWidth = typeof window !== 'undefined' ? window.innerWidth : 1024;
1232
- var fallbackHeight = isFullscreen ? '100vh' : 'calc(100vh - 80px)';
1277
+ var fallbackHeight = isFullscreen ? '100vh' : '60vh';
1233
1278
  if (isFullscreen) {
1234
1279
  return { width: '100vw', height: fallbackHeight, borderRadius: '0' };
1235
1280
  }
@@ -1254,8 +1299,8 @@ export var GenAgentChat = function (_a) {
1254
1299
  /** Max height for open floating chat ≈ viewport minus corner offset; updates with resize / visualViewport. */
1255
1300
  var getFloatingShellStyle = function () {
1256
1301
  var margin = 12;
1257
- var usable = Math.max(280, windowHeight - offsetY - margin);
1258
- return __assign({ display: 'flex', flexDirection: 'column', maxHeight: usable, height: usable }, (position === 'top-right' || position === 'top-left'
1302
+ var usableHeight = Math.max(280, windowHeight - offsetY - margin * 10);
1303
+ return __assign({ display: 'flex', flexDirection: 'column', maxHeight: usableHeight, height: usableHeight }, (position === 'top-right' || position === 'top-left'
1259
1304
  ? { top: offsetY, bottom: 'auto' }
1260
1305
  : { top: 'auto', bottom: offsetY }));
1261
1306
  };
@@ -1271,6 +1316,18 @@ export var GenAgentChat = function (_a) {
1271
1316
  zIndex: 9999,
1272
1317
  }
1273
1318
  : __assign(__assign(__assign({}, getChatPositionStyles()), getResponsiveDimensions()), (mode === 'floating' && !isFullscreen ? getFloatingShellStyle() : {}))));
1319
+ var renderLanguageSelector = function () {
1320
+ // ------------------------------------------------------------
1321
+ // Show language selector only when SHOW_CHAT_LANGUAGE_SELECTOR is true
1322
+ // ------------------------------------------------------------
1323
+ if (!SHOW_CHAT_LANGUAGE_SELECTOR) {
1324
+ return null;
1325
+ }
1326
+ if (!hasLanguageOptions || (conversationId && !isFinalized) || messages.length > 0 || hasUserMessages) {
1327
+ return null;
1328
+ }
1329
+ return (_jsx(_Fragment, { children: _jsx(LanguageSelector, { availableLanguages: availableLanguages, selectedLanguage: resolvedLanguage, onLanguageChange: handleLanguageChange, translations: translations, theme: theme }) }));
1330
+ };
1274
1331
  /**
1275
1332
  * Render the component with ReCaptcha
1276
1333
  * @param children - The children to be rendered
@@ -1345,14 +1402,13 @@ export var GenAgentChat = function (_a) {
1345
1402
  handleLanguageChange(lang.code);
1346
1403
  setShowLanguageDropdown(false);
1347
1404
  setShowMenu(false);
1348
- }, children: lang.name }, lang.code)); }) }))] }))] })), _jsxs("div", { style: contentCardStyle, children: [_jsxs("div", { style: chatContainerStyle, ref: chatContainerRef, children: [hasLanguageOptions && (!conversationId || isFinalized) && messages.length === 0 && !hasUserMessages && (_jsx(LanguageSelector, { availableLanguages: availableLanguages, selectedLanguage: resolvedLanguage, onLanguageChange: handleLanguageChange, translations: translations, theme: theme })), (function () {
1349
- return null;
1350
- })(), (function () {
1405
+ }, children: lang.name }, lang.code)); }) }))] }))] })), _jsxs("div", { style: contentCardStyle, children: [_jsxs("div", { style: chatContainerStyle, ref: chatContainerRef, children: [renderLanguageSelector(), (function () {
1351
1406
  // show welcome card (only when showWelcomeBeforeStart is true)
1352
1407
  var shouldShowSyntheticWelcome = showWelcomeBeforeStart &&
1353
1408
  !hasUserMessages &&
1354
1409
  (messages.length === 0 || messages[0].speaker !== 'agent') &&
1355
- (Boolean(welcomeTitle) || Boolean(welcomeImageUrl) || Boolean(welcomeMessage));
1410
+ (Boolean(welcomeTitle) || Boolean(welcomeImageUrl) || Boolean(welcomeMessage))
1411
+ && conversationId;
1356
1412
  if (!shouldShowSyntheticWelcome)
1357
1413
  return null;
1358
1414
  var now = Math.floor(Date.now() / 1000);
@@ -1392,7 +1448,9 @@ export var GenAgentChat = function (_a) {
1392
1448
  var isNextSameSpeaker = index < messages.length - 1 && messages[index + 1].speaker === message.speaker;
1393
1449
  var isPrevSameSpeaker = index > 0 && messages[index - 1].speaker === message.speaker;
1394
1450
  var isFirstAgentMessage = index === firstAgentIndex && message.speaker === 'agent' && !hasUserMessages;
1395
- return (_jsx(ChatMessageComponent, { message: message, theme: theme, onPlayAudio: message.speaker === 'agent' ? playResponseAudio : undefined, isPlayingAudio: isPlayingAudio, isFirstMessage: isFirstAgentMessage, isNextSameSpeaker: isNextSameSpeaker, isPrevSameSpeaker: isPrevSameSpeaker, onFeedback: function (messageId, value) { return addFeedback(messageId, value); }, enableTypewriter: index === messages.length - 1 && message.speaker === 'agent', welcomeImageUrl: isFirstAgentMessage ? (welcomeImageUrl || undefined) : undefined, welcomeTitle: isFirstAgentMessage ? (welcomeTitle || undefined) : undefined, possibleQueries: isFirstAgentMessage ? possibleQueries : undefined, onQuickQuery: handleQueryClick, onQuickAction: handleQuickAction, onScheduleConfirm: handleScheduleConfirm, isLastMessage: index === messages.length - 1 && message.speaker === 'agent', translations: translations, language: resolvedLanguage, agentName: agentName, isAgentTyping: isAgentTyping }, index));
1451
+ var displayMessage = isFirstAgentMessage && welcomeMessage
1452
+ ? __assign(__assign({}, message), { text: welcomeMessage }) : message;
1453
+ return (_jsx(ChatMessageComponent, { message: displayMessage, theme: theme, onPlayAudio: message.speaker === 'agent' ? playResponseAudio : undefined, isPlayingAudio: isPlayingAudio, isFirstMessage: isFirstAgentMessage, isNextSameSpeaker: isNextSameSpeaker, isPrevSameSpeaker: isPrevSameSpeaker, onFeedback: function (messageId, value) { return addFeedback(messageId, value); }, enableTypewriter: index === messages.length - 1 && message.speaker === 'agent', welcomeImageUrl: isFirstAgentMessage ? (welcomeImageUrl || undefined) : undefined, welcomeTitle: isFirstAgentMessage ? (welcomeTitle || undefined) : undefined, possibleQueries: isFirstAgentMessage ? possibleQueries : undefined, onQuickQuery: handleQueryClick, onQuickAction: handleQuickAction, onScheduleConfirm: handleScheduleConfirm, isLastMessage: index === messages.length - 1 && message.speaker === 'agent', translations: translations, language: resolvedLanguage, agentName: agentName, isAgentTyping: isAgentTyping }, index));
1396
1454
  });
1397
1455
  })(), isAgentTyping && currentThinkingParts.length > 0 && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', maxWidth: '80%' }, children: [_jsx("div", { style: { fontSize: '14px', color: '#000000', fontWeight: 600, marginBottom: 4 }, children: agentName || t('labels.agent') }), _jsx("div", { style: {
1398
1456
  backgroundColor: 'transparent',
@@ -1440,4 +1498,4 @@ export var GenAgentChat = function (_a) {
1440
1498
  }
1441
1499
  return renderWithReCaptcha(renderChatComponent());
1442
1500
  };
1443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sUUFBUSxNQUFNLHlCQUF5QixDQUFDO0FBRS9DLDBDQUEwQztBQUUxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixHQUMzQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLHVC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Y2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEdlbkFnZW50Q2hhdFByb3BzLCBTY2hlZHVsZUl0ZW0sIEF0dGFjaG1lbnQsIEF0dGFjaG1lbnRXaXRoRmlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIEdsb2JlLCBYLCBBcnJvd1VwLCBNYXhpbWl6ZTIsIE1pbmltaXplMiwgQWxlcnRDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgQ2hhdEJ1YmJsZSB9IGZyb20gJy4vQ2hhdEJ1YmJsZSc7XG5pbXBvcnQgRHluYW1pY0Zvcm1NZXNzYWdlIGZyb20gJy4vRHluYW1pY0Zvcm1NZXNzYWdlJztcbmltcG9ydCB7IExhbmd1YWdlU2VsZWN0b3IgfSBmcm9tICcuL0xhbmd1YWdlU2VsZWN0b3InO1xuaW1wb3J0IGNoYXRMb2dvIGZyb20gJy4uL2Fzc2V0cy9jaGF0LWxvZ28ucG5nJztcblxuLy8gVHlwZSBmb3IgYXR0YWNobWVudCB3aXRoIGZpbGUgcmVmZXJlbmNlXG5cbmltcG9ydCB7XG4gIHJlc29sdmVMYW5ndWFnZSxcbiAgbWVyZ2VUcmFuc2xhdGlvbnMsXG4gIGdldFRyYW5zbGF0aW9uU3RyaW5nLFxuICBnZXRUcmFuc2xhdGlvbkFycmF5LFxuICBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZSxcbn0gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgeyBHb29nbGVSZUNhcHRjaGEsIEdvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyIH0gZnJvbSAncmVhY3QtZ29vZ2xlLXJlY2FwdGNoYS12Myc7XG5cblxuZXhwb3J0IGNvbnN0IEdlbkFnZW50Q2hhdDogUmVhY3QuRkM8R2VuQWdlbnRDaGF0UHJvcHM+ID0gKHtcbiAgYmFzZVVybCxcbiAgd2Vic29ja2V0VXJsLFxuICBhcGlLZXksXG4gIHRlbmFudCxcbiAgbWV0YWRhdGEsXG4gIHVzZVdzID0gdHJ1ZSxcbiAgdXNlUG9sbCA9IGZhbHNlLFxuICBvbkVycm9yLFxuICBvblRha2VvdmVyLFxuICBvbkZpbmFsaXplLFxuICB0aGVtZSxcbiAgaGVhZGVyVGl0bGUgPSAnR2VuYXNzaXN0JyxcbiAgZGVzY3JpcHRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBhZ2VudE5hbWUsXG4gIGxvZ29VcmwsXG4gIG1vZGUgPSAnZW1iZWRkZWQnLFxuICBmbG9hdGluZ0NvbmZpZyA9IHt9LFxuICBsYW5ndWFnZSxcbiAgdHJhbnNsYXRpb25zOiBjdXN0b21UcmFuc2xhdGlvbnMsXG4gIHJlQ2FwdGNoYUtleSxcbiAgd2lkZ2V0ID0gZmFsc2UsXG4gIHVzZUF1ZGlvID0gZmFsc2UsXG4gIHVzZUZpbGUgPSBmYWxzZSxcbiAgbm9Db2xvckFuaW1hdGlvbiA9IGZhbHNlLFxuICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ID0gdHJ1ZSxcbiAgYWxsb3dlZEV4dGVuc2lvbnMgPSBbXSxcbiAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsLFxuICBmb3JtRGlzcGxheSA9ICdmb290ZXInLFxuICBvbkNvbmZpZ0xvYWRlZCxcbn0pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICAvLyBMYW5ndWFnZSBzZWxlY3Rpb24gc3RhdGUgKHdpdGggbG9jYWxTdG9yYWdlIHBlcnNpc3RlbmNlKVxuICBjb25zdCBbc2VsZWN0ZWRMYW5ndWFnZSwgc2V0U2VsZWN0ZWRMYW5ndWFnZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybiBsYW5ndWFnZTtcbiAgICBjb25zdCBzdG9yZWQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdnZW5hc3Npc3RfbGFuZ3VhZ2UnKSA6IG51bGw7XG4gICAgaWYgKHN0b3JlZCkgcmV0dXJuIHN0b3JlZDtcbiAgICByZXR1cm4gcmVzb2x2ZUxhbmd1YWdlKCk7XG4gIH0pO1xuXG4gIC8vIFNhdmUgbGFuZ3VhZ2UgdG8gbG9jYWxTdG9yYWdlIHdoZW4gaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhbGFuZ3VhZ2UpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdnZW5hc3Npc3RfbGFuZ3VhZ2UnLCBzZWxlY3RlZExhbmd1YWdlKTtcbiAgICB9XG4gIH0sIFtzZWxlY3RlZExhbmd1YWdlLCBsYW5ndWFnZV0pO1xuXG4gIC8vIFN0YXRlIGZvciB0cmFja2luZyBzZWxlY3RlZCBGQVEgcXVlcnlcbiAgY29uc3QgW3NlbGVjdGVkRmFxUXVlcnksIHNldFNlbGVjdGVkRmFxUXVlcnldID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gUmVzb2x2ZSBsYW5ndWFnZTogcHJvcCA+IHNlbGVjdGVkID4gYnJvd3NlciA+ICdlbidcbiAgY29uc3QgcmVzb2x2ZWRMYW5ndWFnZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIHJldHVybiBzZWxlY3RlZExhbmd1YWdlIHx8IHJlc29sdmVMYW5ndWFnZSgpIHx8ICdlbic7XG4gIH0sIFtsYW5ndWFnZSwgc2VsZWN0ZWRMYW5ndWFnZV0pO1xuXG4gIC8vIE1lcmdlIGxhbmd1YWdlIGFuZCBGQVEgcXVlcnkgaW50byBtZXRhZGF0YVxuICBjb25zdCBtZXRhZGF0YVdpdGhMYW5ndWFnZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4obWV0YWRhdGEgfHwge30pLFxuICAgICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgICAuLi4oc2VsZWN0ZWRGYXFRdWVyeSA/IHsgZmFxX3F1ZXJ5OiBzZWxlY3RlZEZhcVF1ZXJ5IH0gOiB7fSksXG4gICAgfTtcbiAgfSwgW21ldGFkYXRhLCByZXNvbHZlZExhbmd1YWdlLCBzZWxlY3RlZEZhcVF1ZXJ5XSk7XG5cbiAgLy8gR2V0IHRyYW5zbGF0aW9ucyBiYXNlZCBvbiByZXNvbHZlZCBsYW5ndWFnZSwgdGhlbiBtZXJnZSB3aXRoIGN1c3RvbSB0cmFuc2xhdGlvbnNcbiAgY29uc3QgdHJhbnNsYXRpb25zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gRmlyc3QgZ2V0IGJhc2UgdHJhbnNsYXRpb25zIGZvciB0aGUgbGFuZ3VhZ2VcbiAgICBjb25zdCBiYXNlVHJhbnNsYXRpb25zID0gZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UocmVzb2x2ZWRMYW5ndWFnZSk7XG4gICAgLy8gVGhlbiBtZXJnZSB3aXRoIGFueSBjdXN0b20gdHJhbnNsYXRpb25zIHByb3ZpZGVkXG4gICAgcmV0dXJuIG1lcmdlVHJhbnNsYXRpb25zKGN1c3RvbVRyYW5zbGF0aW9ucywgYmFzZVRyYW5zbGF0aW9ucyk7XG4gIH0sIFtyZXNvbHZlZExhbmd1YWdlLCBjdXN0b21UcmFuc2xhdGlvbnNdKTtcblxuICAvLyBUcmFuc2xhdGlvbiBoZWxwZXIgZnVuY3Rpb25cbiAgY29uc3QgdCA9IChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvblN0cmluZyhrZXksIHRyYW5zbGF0aW9ucywgZmFsbGJhY2spO1xuICB9O1xuXG4gIC8vIEdldCB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIG9yIHVzZSBwcm92aWRlZC9kZWZhdWx0XG4gIC8vIE1ha2UgaXQgcmVhY3RpdmUgdG8gbGFuZ3VhZ2UgY2hhbmdlc1xuICBjb25zdCBpbnB1dFBsYWNlaG9sZGVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gSWYgcGxhY2Vob2xkZXIgcHJvcCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkLCB1c2UgaXRcbiAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgdHJhbnNsYXRpb24gd2hpY2ggd2lsbCB1cGRhdGUgd2l0aCBsYW5ndWFnZSBjaGFuZ2VzXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IHQoJ2lucHV0LnBsYWNlaG9sZGVyJywgJ0FzayBhIHF1ZXN0aW9uJyk7XG4gIH0sIFtwbGFjZWhvbGRlciwgdHJhbnNsYXRpb25zXSk7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dSZXNldENvbmZpcm0sIHNldFNob3dSZXNldENvbmZpcm1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd01lbnUsIHNldFNob3dNZW51XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dMYW5ndWFnZURyb3Bkb3duLCBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1BsYXlpbmdBdWRpbywgc2V0SXNQbGF5aW5nQXVkaW9dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGbG9hdGluZ09wZW4sIHNldElzRmxvYXRpbmdPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2F0dGFjaG1lbnRzLCBzZXRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50V2l0aEZpbGVbXT4oW10pO1xuICBjb25zdCBbc3VibWl0dGVkRm9ybXMsIHNldFN1Ym1pdHRlZEZvcm1zXSA9IHVzZVN0YXRlPFNldDxudW1iZXI+PihuZXcgU2V0KCkpO1xuICBjb25zdCBbc3VibWl0dGluZ0Zvcm1JbmRleCwgc2V0U3VibWl0dGluZ0Zvcm1JbmRleF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3VwbG9hZGluZ0ZpbGVzLCBzZXRVcGxvYWRpbmdGaWxlc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgY29uc3QgW2ZpbGVFcnJvclRvYXN0LCBzZXRGaWxlRXJyb3JUb2FzdF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRleHRBcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoZWFkZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaGVhZGVySGVpZ2h0LCBzZXRIZWFkZXJIZWlnaHRdID0gdXNlU3RhdGUoNTYpO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Z1bGxzY3JlZW5Ub2dnbGVkLCBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBkZWZhdWx0IHRoaW5raW5nIG1lc3NhZ2VzIGlmIG5vbmUgcHJvdmlkZWQgYnkgd29ya2Zsb3dcbiAgY29uc3QgREVGQVVMVF9USElOS0lOR19NRVNTQUdFUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0VHJhbnNsYXRpb25BcnJheSgndGhpbmtpbmcubWVzc2FnZXMnLCB0cmFuc2xhdGlvbnMsIFtcbiAgICAgIFwiVGhpbmtpbmfigKZcIixcbiAgICAgIFwiQW5hbHl6aW5nIHlvdXIgcXVlc3Rpb27igKZcIixcbiAgICAgIFwiU2VhcmNoaW5nIGtub3dsZWRnZeKAplwiLFxuICAgICAgXCJQdWxsaW5nIHJlbGV2YW50IGluZm/igKZcIixcbiAgICAgIFwiRHJhZnRpbmcgdGhlIGFuc3dlcuKAplwiLFxuICAgICAgXCJEb3VibGXigJFjaGVja2luZyBkZXRhaWxz4oCmXCIsXG4gICAgICBcIlR5aW5nIGl0IHRvZ2V0aGVy4oCmXCIsXG4gICAgICBcIkFsbW9zdCB0aGVyZeKAplwiLFxuICAgIF0pLFxuICAgIFt0cmFuc2xhdGlvbnNdXG4gICk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0cywgc2V0Q3VycmVudFRoaW5raW5nUGFydHNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGd1ZXN0VG9rZW4sXG4gICAgcG9zc2libGVRdWVyaWVzLFxuICAgIGlzRmluYWxpemVkLFxuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgYWRkRmVlZGJhY2ssXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIGlucHV0RGlzY2xhaW1lckh0bWwsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgd2Vic29ja2V0VXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIHVzZVBvbGwsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemUsXG4gICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgICBvbkNvbmZpZ0xvYWRlZCxcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybjtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMpIHx8IGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nKSA9PiBsYW5nLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghbm9ybWFsaXplZC5pbmNsdWRlcyhzZWxlY3RlZExhbmd1YWdlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBzZXRTZWxlY3RlZExhbmd1YWdlKG5vcm1hbGl6ZWRbMF0pO1xuICAgIH1cbiAgfSwgW2FnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLCBsYW5ndWFnZSwgc2VsZWN0ZWRMYW5ndWFnZV0pO1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgaGFzQW5jaG9yZWRIaXN0b3J5ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgY2hhdENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHJlQ2FwdGNoYVRva2VuUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgaXNVc2VyQXRCb3R0b21SZWYgPSB1c2VSZWYodHJ1ZSk7XG5cbiAgY29uc3QgYW5jaG9ySGlzdG9yeSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsIHx8ICFtZXNzYWdlcy5sZW5ndGggfHwgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAoZWwuY2xpZW50SGVpZ2h0ID09PSAwKSByZXR1cm47IC8vIGhpZGRlbiwgd2FpdCBmb3IgdmlzaWJpbGl0eS9zaXplXG4gICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0O1xuICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IChiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSAnc21vb3RoJywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzRW5kUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVsKSByZXR1cm47XG5cbiAgICAvLyBPbmx5IHNjcm9sbCBpZiB1c2VyIGlzIGF0IGJvdHRvbSBvciBpZiBmb3JjZWQgKGUuZy4sIGZvciBhZ2VudCB0eXBpbmcpXG4gICAgaWYgKCFmb3JjZSAmJiAhaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRvU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnNjcm9sbFRvKHsgdG9wOiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0LCBiZWhhdmlvciB9KTtcbiAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH07XG4gICAgaWYgKGJlaGF2aW9yID09PSAnYXV0bycpIHtcbiAgICAgIGRvU2Nyb2xsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShkb1Njcm9sbCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhc1VzZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcicpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQgPSBuZXcgQXVkaW9TZXJ2aWNlKHsgYmFzZVVybCwgd2Vic29ja2V0VXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCB3ZWJzb2NrZXRVcmwsIGFwaUtleV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQ/LnNldEd1ZXN0VG9rZW4oZ3Vlc3RUb2tlbiA/PyBudWxsKTtcbiAgfSwgW2d1ZXN0VG9rZW5dKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIC8vIEZvcmNlIHNjcm9sbCB3aGVuIGFnZW50IGlzIHR5cGluZ1xuICAgIHNjcm9sbFRvQm90dG9tKCdhdXRvJywgdHJ1ZSk7XG4gIH0sIFtpc0FnZW50VHlwaW5nLCBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIEVuc3VyZSBjaGF0IGlzIGFsd2F5cyBvcGVuIHdoZW4gbW9kZSBpcyBmdWxsc2NyZWVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJyAmJiAhaXNGbG9hdGluZ09wZW4pIHtcbiAgICAgIHNldElzRmxvYXRpbmdPcGVuKHRydWUpO1xuICAgIH1cbiAgfSwgW21vZGUsIGlzRmxvYXRpbmdPcGVuXSk7XG5cbiAgLy8gU2Nyb2xsIHRvIGJvdHRvbSB3aGVuIGNoYXQgaXMgcmVvcGVuZWQgaW4gZmxvYXRpbmcgbW9kZVxuICBjb25zdCBwcmV2SXNGbG9hdGluZ09wZW5SZWYgPSB1c2VSZWYoaXNGbG9hdGluZ09wZW4pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIE9ubHkgdHJpZ2dlciB3aGVuIGNoYXQgdHJhbnNpdGlvbnMgZnJvbSBjbG9zZWQgdG8gb3BlblxuICAgIGlmICgobW9kZSA9PT0gJ2Zsb2F0aW5nJyB8fCBtb2RlID09PSAnZnVsbHNjcmVlbicpICYmIGlzRmxvYXRpbmdPcGVuICYmICFwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXNldCB0aGUgYW5jaG9yIGZsYWcgc28gaXQgY2FuIHNjcm9sbCB0byBib3R0b21cbiAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgLy8gV2FpdCBmb3IgY29udGFpbmVyIHRvIGJlIHZpc2libGUgYW5kIHRoZW4gc2Nyb2xsXG4gICAgICBjb25zdCBzY3JvbGxXaGVuVmlzaWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udGFpbmVyIGlzIHZpc2libGVcbiAgICAgICAgaWYgKGNvbnRhaW5lci5jbGllbnRIZWlnaHQgPT09IDApIHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNjcm9sbCB0byBib3R0b21cbiAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHdhaXQgZm9yIHJlbmRlclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCA9IGlzRmxvYXRpbmdPcGVuO1xuICB9LCBbaXNGbG9hdGluZ09wZW4sIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgLy8gT2JzZXJ2ZSBzaXplL3Zpc2liaWxpdHkgY2hhbmdlcyB0byBhbmNob3IgY2hhdCB2aWV3LlxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcblxuICAgIGFuY2hvckhpc3RvcnkoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfSwgW21lc3NhZ2VzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSAodGhyZXNob2xkOiBudW1iZXIgPSAxMDApOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyO1xuICAgICAgcmV0dXJuIHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8PSB0aHJlc2hvbGQ7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gaXNBdEJvdHRvbSgpO1xuICAgIH07XG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGhhbmRsZVNjcm9sbCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUhlYWRlckhlaWdodCA9ICgpID0+IHtcbiAgICAgIHNldEhlYWRlckhlaWdodChoZWFkZXJSZWYuY3VycmVudD8ub2Zmc2V0SGVpZ2h0IHx8IDU2KTtcbiAgICB9O1xuICAgIHVwZGF0ZUhlYWRlckhlaWdodCgpO1xuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHVwZGF0ZUhlYWRlckhlaWdodCgpKTtcbiAgICBpZiAoaGVhZGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaGVhZGVyUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFNtb290aGx5IHNob3cvaGlkZSB0aGUgYmFja2xpZ2h0IHdoaWxlIHRoZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0U2hvd0JhY2tsaWdodCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4gc2V0U2hvd0JhY2tsaWdodChmYWxzZSksIDQyMCk7IC8vIGFsbG93IGZhZGUtb3V0XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0KTtcbiAgfSwgW2lzQWdlbnRUeXBpbmddKTtcblxuICAvLyBTaG93IFwidGhpbmtpbmdcIiBwaHJhc2VzIHdoaWxlIGFnZW50IGlzIHR5cGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydHMoW10pO1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJhbmRvbWx5IHNlbGVjdCBhIHBocmFzZSBmcm9tIHRoZSBsaXN0XG4gICAgY29uc3QgbGlzdCA9ICh0aGlua2luZ1BocmFzZXMgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApID8gdGhpbmtpbmdQaHJhc2VzIDogREVGQVVMVF9USElOS0lOR19NRVNTQUdFUztcbiAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxpc3QubGVuZ3RoKTtcbiAgICBjb25zdCBzZWxlY3RlZFBocmFzZSA9IGxpc3RbcmFuZG9tSW5kZXhdO1xuXG4gICAgLy8gU3BsaXQgYnkgfCB0byBnZXQgcGFydHMsIG9yIHVzZSB0aGUgcGhyYXNlIGFzIGEgc2luZ2xlIHBhcnQgaWYgbm8gfCBmb3VuZFxuICAgIGNvbnN0IHBhcnRzID0gc2VsZWN0ZWRQaHJhc2UuaW5jbHVkZXMoJ3wnKVxuICAgICAgPyBzZWxlY3RlZFBocmFzZS5zcGxpdCgnfCcpLm1hcChwYXJ0ID0+IHBhcnQudHJpbSgpKS5maWx0ZXIocGFydCA9PiBwYXJ0Lmxlbmd0aCA+IDApXG4gICAgICA6IFtzZWxlY3RlZFBocmFzZS50cmltKCldO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGZpcnN0IHBhcnRcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhwYXJ0cyk7XG4gICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuXG4gICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBwYXJ0LCBubyBuZWVkIHRvIHByb2dyZXNzXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICAvLyBQcm9ncmVzcyB0aHJvdWdoIHBhcnRzIHdpdGggZGVsYXksIGJ1dCBzdG9wIGF0IHRoZSBsYXN0IG9uZVxuICAgIGNvbnN0IHJvdERlbGF5ID0gTWF0aC5tYXgoMjUwLCB0aGlua2luZ0RlbGF5TXMgfHwgMTAwMCk7XG4gICAgY29uc3QgdGltZW91dElkczogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5bXSA9IFtdO1xuXG4gICAgLy8gU2V0IHVwIHRpbWVvdXRzIGZvciBlYWNoIHBhcnQgdHJhbnNpdGlvblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoaSk7XG4gICAgICB9LCByb3REZWxheSAqIGkpO1xuICAgICAgdGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRpbWVvdXRJZHMuZm9yRWFjaChpZCA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICB9O1xuICB9LCBbaXNBZ2VudFR5cGluZywgdGhpbmtpbmdQaHJhc2VzLCB0aGlua2luZ0RlbGF5TXNdKTtcblxuICBjb25zdCBzdWJtaXRNZXNzYWdlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuICAgIGNvbnN0IHRleHRUb1NlbmQgPSBpbnB1dFZhbHVlO1xuICAgIC8vIE5PVEVTOiB3ZSBkb24ndCB1cGxvYWQgZmlsZXMgYW55bW9yZSwgd2UganVzdCBzZW5kIHRoZSBjb250ZW50IGJsb2Nrc1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpO1xuICAgIC8vIGNvbnN0IGZpbGVBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG5cbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgLy8gUmVzZXQgdGhlIGZpbGUgaW5wdXQgdmFsdWUgc28gdGhlIHNhbWUgZmlsZSBjYW4gYmUgc2VsZWN0ZWQgYWdhaW5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluY2x1ZGUgRkFRIHF1ZXJ5IGluIG1ldGFkYXRhIGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZWxlY3RlZFxuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGYXFRdWVyeSkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmZhcV9xdWVyeSA9IHNlbGVjdGVkRmFxUXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlc1RvVXBsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNlbmQgbWVzc2FnZSB3aXRoIGF0dGFjaG1lbnRzXG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0VG9TZW5kLCBmaWxlc1RvVXBsb2FkLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlZm9jdXMgdGhlIGlucHV0IGZpZWxkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRleHRBcmVhUmVmLmN1cnJlbnQ/LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHN1Ym1pdE1lc3NhZ2UoKTtcbiAgfTtcblxuICBjb25zdCBnZXRGb3JtTm9kZUlkID0gKG1lc3NhZ2VJbmRleDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlc1ttZXNzYWdlSW5kZXhdO1xuICAgIGlmIChtc2c/LnR5cGUgPT09ICdmb3JtX3JlcXVlc3QnICYmIG1zZy50ZXh0KSB7XG4gICAgICB0cnkgeyByZXR1cm4gSlNPTi5wYXJzZShtc2cudGV4dCkubm9kZV9pZDsgfSBjYXRjaCB7IC8qIHNraXAgKi8gfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvcm1TdWJtaXQgPSBhc3luYyAoZm9ybURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtZXNzYWdlSW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGlmIChzdWJtaXR0aW5nRm9ybUluZGV4ICE9PSBudWxsIHx8IGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG1lc3NhZ2VJbmRleCk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJ1aWxkIGEgcmVhZGFibGUgc3VtbWFyeSBmcm9tIHRoZSBmb3JtIGRhdGFcbiAgICAgIGNvbnN0IHN1bW1hcnlUZXh0ID0gT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGdldEZvcm1Ob2RlSWQobWVzc2FnZUluZGV4KTtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnlUZXh0LCBbXSwge1xuICAgICAgICBodW1hbl9pbl90aGVfbG9vcF9mcm9tX2Zvcm06IGZvcm1EYXRhLFxuICAgICAgICAuLi4obm9kZUlkICYmIHsgaHVtYW5faW5fdGhlX2xvb3Bfbm9kZV9pZDogbm9kZUlkIH0pLFxuICAgICAgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgICBzZXRTdWJtaXR0ZWRGb3JtcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQobWVzc2FnZUluZGV4KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG51bGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb3JtQ2FuY2VsID0gYXN5bmMgKG1lc3NhZ2VJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHN1Ym1pdHRpbmdGb3JtSW5kZXggIT09IG51bGwgfHwgaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobWVzc2FnZUluZGV4KTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9kZUlkID0gZ2V0Rm9ybU5vZGVJZChtZXNzYWdlSW5kZXgpO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UoJ1NraXBwZWQnLCBbXSwge1xuICAgICAgICBodW1hbl9pbl90aGVfbG9vcF9mcm9tX2Zvcm06IHt9LFxuICAgICAgICBodW1hbl9pbl90aGVfbG9vcF9jYW5jZWxsZWQ6IHRydWUsXG4gICAgICAgIC4uLihub2RlSWQgJiYgeyBodW1hbl9pbl90aGVfbG9vcF9ub2RlX2lkOiBub2RlSWQgfSksXG4gICAgICB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICAgIHNldFN1Ym1pdHRlZEZvcm1zKChwcmV2KSA9PiBuZXcgU2V0KHByZXYpLmFkZChtZXNzYWdlSW5kZXgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1aWNrQWN0aW9uID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghdGV4dC50cmltKCkpIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluY2x1ZGUgRkFRIHF1ZXJ5IGluIG1ldGFkYXRhIGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZWxlY3RlZFxuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YSA9IHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDogdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dCwgW10sIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmUgcXVpY2sgYWN0aW9uIGVycm9ycyB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgdGhlIGZsb3dcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2NoZWR1bGVDb25maXJtID0gYXN5bmMgKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYFNjaGVkdWxlIGNvbmZpcm1lZCB3aXRoICR7c2NoZWR1bGUucmVzdGF1cmFudHMubGVuZ3RofSByZXN0YXVyYW50c2A7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnksIFtdLCB7IGNvbmZpcm1TY2hlZHVsZTogSlNPTi5zdHJpbmdpZnkoc2NoZWR1bGUpIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IGFzeW5jIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdGaWxlcyA9IEFycmF5LmZyb20oZS50YXJnZXQuZmlsZXMpO1xuXG4gICAgICAvLyBJbml0aWFsaXplIGF0dGFjaG1lbnRzIHdpdGggZmlsZXMgKGF0dGFjaG1lbnQgcmVmZXJlbmNlIHdpbGwgYmUgbnVsbCBpbml0aWFsbHkpXG4gICAgICBjb25zdCBuZXdBdHRhY2htZW50czogQXR0YWNobWVudFdpdGhGaWxlW10gPSBuZXdGaWxlcy5tYXAoZmlsZSA9PiAoe2ZpbGUsIGF0dGFjaG1lbnQ6IG51bGx9KSk7XG4gICAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IFsuLi5wcmV2LCAuLi5uZXdBdHRhY2htZW50c10pO1xuXG4gICAgICBjb25zdCBuZXdVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IG5ld1VwbG9hZGluZ0ZpbGVzLmFkZChmaWxlLm5hbWUpKTtcbiAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKG5ld1VwbG9hZGluZ0ZpbGVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVXBsb2FkIGZpbGVzIGFuZCBnZXQgYXR0YWNobWVudCByZWZlcmVuY2VzICh1c2UgYWxsU2V0dGxlZCBzbyBvbmUgZmFpbHVyZSBkb2Vzbid0IHNraXAgdGhlIHJlc3QpXG4gICAgICAgIGNvbnN0IHNldHRsZWQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgbmV3RmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiAoeyBmaWxlLCBhdHRhY2htZW50OiBhd2FpdCB1cGxvYWRGaWxlKGZpbGUpIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZpbGVUb0F0dGFjaG1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQXR0YWNobWVudCB8IG51bGw+KCk7XG4gICAgICAgIGNvbnN0IGZhaWxlZEZpbGVLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIHNldHRsZWQuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlc1tpbmRleF07XG4gICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2ZpbGUubmFtZX06JHtmaWxlLnNpemV9OiR7ZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICAgICAgZmlsZVRvQXR0YWNobWVudE1hcC5zZXQoZmlsZUtleSwgbnVsbCk7XG4gICAgICAgICAgICBmYWlsZWRGaWxlS2V5cy5hZGQoZmlsZUtleSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgYXR0YWNobWVudCB9ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgIGZpbGVUb0F0dGFjaG1lbnRNYXAuc2V0KGZpbGVLZXksIGF0dGFjaG1lbnQpO1xuICAgICAgICAgIGlmIChhdHRhY2htZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBmYWlsZWRGaWxlS2V5cy5hZGQoZmlsZUtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoYXNGYWlsZWRVcGxvYWRzID0gZmFpbGVkRmlsZUtleXMuc2l6ZSA+IDA7XG5cbiAgICAgICAgLy8gVXBkYXRlIGF0dGFjaG1lbnRzOiByZW1vdmUgZmFpbGVkIGZpbGVzLCBzZXQgYXR0YWNobWVudCBmb3Igc3VjY2Vzc2Z1bCBvbmVzXG4gICAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgICAgICAuZmlsdGVyKGF0dCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVLZXkgPSBgJHthdHQuZmlsZS5uYW1lfToke2F0dC5maWxlLnNpemV9OiR7YXR0LmZpbGUubGFzdE1vZGlmaWVkfWA7XG4gICAgICAgICAgICAgIHJldHVybiAhZmFpbGVkRmlsZUtleXMuaGFzKGZpbGVLZXkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoYXR0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2F0dC5maWxlLm5hbWV9OiR7YXR0LmZpbGUuc2l6ZX06JHthdHQuZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICAgICAgY29uc3QgdXBsb2FkZWRBdHRhY2htZW50ID0gZmlsZVRvQXR0YWNobWVudE1hcC5nZXQoZmlsZUtleSk7XG4gICAgICAgICAgICAgIGlmICh1cGxvYWRlZEF0dGFjaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmF0dCwgYXR0YWNobWVudDogdXBsb2FkZWRBdHRhY2htZW50IH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGF0dDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGFzRmFpbGVkVXBsb2Fkcykge1xuICAgICAgICAgIGlmIChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0RmlsZUVycm9yVG9hc3QodCgnZmlsZVVwbG9hZC5maWxlVHlwZU5vdFN1cHBvcnRlZCcsICdUaGlzIGZpbGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICAgICAgICBmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0RmlsZUVycm9yVG9hc3QobnVsbCk7XG4gICAgICAgICAgICBmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfSwgNDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGxvYWRpbmcgZmlsZScsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IGZpbmFsVXBsb2FkaW5nRmlsZXMuZGVsZXRlKGZpbGUubmFtZSkpO1xuICAgICAgICBzZXRVcGxvYWRpbmdGaWxlcyhmaW5hbFVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGZpbGUgaW5wdXQgdmFsdWUgc28gdGhlIHNhbWUgZmlsZSBjYW4gYmUgc2VsZWN0ZWQgYWdhaW5cbiAgICAgICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQhLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlQXR0YWNobWVudCA9IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBwcmV2LmZpbHRlcihhdHQgPT4gYXR0LmZpbGUubmFtZSAhPT0gZmlsZU5hbWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVWb2ljZUVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGxheVJlc3BvbnNlQXVkaW8gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhdWRpb1NlcnZpY2UuY3VycmVudCB8fCBpc1BsYXlpbmdBdWRpbykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgY29uc3QgYXVkaW9CbG9iID0gYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQudGV4dFRvU3BlZWNoKHRleHQpO1xuICAgICAgYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQucGxheUF1ZGlvKGF1ZGlvQmxvYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1ZXJ5Q2xpY2sgPSBhc3luYyAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc0FnZW50VHlwaW5nIHx8IGlzTG9hZGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG5cbiAgICAvLyBTdG9yZSB0aGUgRkFRIHF1ZXJ5IGZvciBhbGwgc3Vic2VxdWVudCBtZXNzYWdlc1xuICAgIHNldFNlbGVjdGVkRmFxUXVlcnkocXVlcnkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHF1ZXJ5LCBbXSwgeyBmYXFfcXVlcnk6IHF1ZXJ5IH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3RhcnRDb252ZXJzYXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgaW5wdXQgdGV4dCBhbmQgZmlsZSBhdHRhY2htZW50cyB3aGVuIHN0YXJ0aW5nIGEgY29udmVyc2F0aW9uXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhcnRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIGNvbnZlcnNhdGlvbicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTWVudUNsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KHByZXYgPT4gIXByZXYpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgIHNldFNob3dSZXNldENvbmZpcm0odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybVJlc2V0ID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIENsZWFyIGlucHV0IHRleHQgYW5kIGZpbGUgYXR0YWNobWVudHMgd2hlbiByZXN0YXJ0aW5nXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KG51bGwpOyAvLyBDbGVhciBGQVEgcXVlcnkgb24gcmVzZXRcbiAgICBzZXRTdWJtaXR0ZWRGb3JtcyhuZXcgU2V0KCkpOyAvLyBDbGVhciBmb3JtIHN1Ym1pc3Npb24gc3RhdGUgc28gbmV3IGZvcm1zIGFyZSBpbnRlcmFjdGl2ZVxuICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobnVsbCk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlID0gKCkgPT4ge1xuICAgIHNldElzRnVsbHNjcmVlblRvZ2dsZWQocHJldiA9PiAhcHJldik7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICB9O1xuXG4gIC8vIFRyYWNrIHdpbmRvdyAvIHZpc3VhbCB2aWV3cG9ydCBzaXplIGZvciBsYXlvdXQgYW5kIG1vYmlsZSBkZXRlY3Rpb25cbiAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNCk7XG4gIGNvbnN0IFt3aW5kb3dIZWlnaHQsIHNldFdpbmRvd0hlaWdodF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IDgwMCk7XG5cbiAgLy8gQXV0b21hdGljYWxseSBkZXRlcm1pbmUgaWYgc2hvdWxkIGJlIGZ1bGxzY3JlZW4gKG1vYmlsZSBkZXZpY2VzIG9yIHdpZGdldCBtb2RlIG9yIG1hbnVhbCB0b2dnbGUgb3IgZnVsbHNjcmVlbiBtb2RlKVxuICBjb25zdCBpc0Z1bGxzY3JlZW4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBtb2RlIGlzIGZ1bGxzY3JlZW4sIGFsd2F5cyBmdWxsc2NyZWVuXG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgd2lkZ2V0IHByb3AgaXMgdHJ1ZSwgYWx3YXlzIGZ1bGxzY3JlZW5cbiAgICBpZiAod2lkZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBJZiBtYW51YWxseSB0b2dnbGVkLCB1c2UgdG9nZ2xlIHN0YXRlXG4gICAgaWYgKGlzRnVsbHNjcmVlblRvZ2dsZWQpIHJldHVybiB0cnVlO1xuICAgIC8vIE90aGVyd2lzZSwgdXNlIG1vYmlsZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gd2luZG93V2lkdGggPD0gNzY4O1xuICB9LCBbd2luZG93V2lkdGgsIHdpZGdldCwgaXNGdWxsc2NyZWVuVG9nZ2xlZCwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlVmlld3BvcnQgPSAoKSA9PiB7XG4gICAgICBzZXRXaW5kb3dXaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgICBzZXRXaW5kb3dIZWlnaHQod2luZG93LmlubmVySGVpZ2h0KTtcbiAgICB9O1xuICAgIHVwZGF0ZVZpZXdwb3J0KCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVZpZXdwb3J0KTtcbiAgICBjb25zdCB2diA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnZpc3VhbFZpZXdwb3J0IDogbnVsbDtcbiAgICB2dj8uYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlVmlld3BvcnQpO1xuICAgIHZ2Py5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGVWaWV3cG9ydCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVWaWV3cG9ydCk7XG4gICAgICB2dj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlVmlld3BvcnQpO1xuICAgICAgdnY/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZVZpZXdwb3J0KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gTG9jayBib2R5IHNjcm9sbCB3aGVuIGZ1bGxzY3JlZW4gaXMgYWN0aXZlIG9uIG1vYmlsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0Z1bGxzY3JlZW4gJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm92ZXJmbG93O1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IG9yaWdpbmFsU3R5bGU7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2lzRnVsbHNjcmVlbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVJlQ2FwdGNoYVZlcmlmeSA9IHVzZUNhbGxiYWNrKCh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCA9IHRva2VuO1xuICB9LCBbXSk7XG5cbiAgLy8gQXZhaWxhYmxlIGxhbmd1YWdlcyAoY2FuIGJlIGV4dGVuZGVkKVxuICBjb25zdCBhbGxMYW5ndWFnZXMgPSBbXG4gICAgeyBjb2RlOiAnZW4nLCBuYW1lOiAnRW5nbGlzaCcgfSxcbiAgICB7IGNvZGU6ICdlcycsIG5hbWU6ICdFc3Bhw7FvbCcgfSxcbiAgICB7IGNvZGU6ICdmcicsIG5hbWU6ICdGcmFuw6dhaXMnIH0sXG4gICAgeyBjb2RlOiAnZGUnLCBuYW1lOiAnRGV1dHNjaCcgfSxcbiAgICB7IGNvZGU6ICdpdCcsIG5hbWU6ICdJdGFsaWFubycgfSxcbiAgICB7IGNvZGU6ICdwdCcsIG5hbWU6ICdQb3J0dWd1w6pzJyB9LFxuICAgIHsgY29kZTogJ3poJywgbmFtZTogJ+S4reaWhycgfSxcbiAgXTtcbiAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMpKSB7XG4gICAgICBjb25zdCBhbGxvd2VkID0gbmV3IFNldChcbiAgICAgICAgYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nKSA9PiBsYW5nLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhbGxMYW5ndWFnZXMuZmlsdGVyKChsYW5nKSA9PiBhbGxvd2VkLmhhcyhsYW5nLmNvZGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbExhbmd1YWdlcztcbiAgfSwgW2FnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzXSk7XG4gIGNvbnN0IGhhc0xhbmd1YWdlT3B0aW9ucyA9IGF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPiAwO1xuXG4gIGNvbnN0IHByaW1hcnlDb2xvciA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZT8uYmFja2dyb3VuZENvbG9yIHx8ICcjZmZmZmZmJztcbiAgY29uc3QgdGV4dENvbG9yID0gdGhlbWU/LnRleHRDb2xvciB8fCAnIzAwMDAwMCc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNHB4JztcbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSB0eXBlb2YgZm9udFNpemUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoZm9udFNpemUsIDEwKSA6ICh0eXBlb2YgZm9udFNpemUgPT09ICdudW1iZXInID8gZm9udFNpemUgOiAxNCk7XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgaGV4IGNvbG9yIHRvIHJnYmFcbiAgY29uc3QgaGV4VG9SZ2JhID0gKGhleDogc3RyaW5nLCBhbHBoYTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEsIDMpLCAxNik7XG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zbGljZSgzLCA1KSwgMTYpO1xuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc2xpY2UoNSwgNyksIDE2KTtcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcbiAgfTtcblxuICBjb25zdCBwb3NpdGlvbiA9IGZsb2F0aW5nQ29uZmlnLnBvc2l0aW9uIHx8ICdib3R0b20tcmlnaHQnO1xuICBjb25zdCBvZmZzZXQgPSBmbG9hdGluZ0NvbmZpZy5vZmZzZXQgfHwgeyB4OiAyMCwgeTogMjAgfTtcbiAgY29uc3Qgb2Zmc2V0WCA9IG9mZnNldC54IHx8IDIwO1xuICBjb25zdCBvZmZzZXRZID0gb2Zmc2V0LnkgfHwgMjA7XG5cbiAgY29uc3QgaXNGbG9hdGluZ0RvY2tlZCA9IG1vZGUgPT09ICdmbG9hdGluZycgJiYgIWlzRnVsbHNjcmVlbjtcblxuICBjb25zdCBjb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgLy8gV2hlbiBmdWxsc2NyZWVuLCBsZXQgaGVpZ2h0IGJlIGNhbGN1bGF0ZWQgZnJvbSB0b3AvYm90dG9tLCBvdGhlcndpc2UgdXNlIHNwZWNpZmllZCBoZWlnaHRcbiAgICBoZWlnaHQ6IGlzRnVsbHNjcmVlbiA/IHVuZGVmaW5lZCA6ICcxMDAlJyxcbiAgICBtYXhIZWlnaHQ6IGlzRnVsbHNjcmVlblxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogaXNGbG9hdGluZ0RvY2tlZFxuICAgICAgICA/ICcxMDAlJ1xuICAgICAgICA6IHdpbmRvd1dpZHRoID4gNzY4XG4gICAgICAgICAgPyAnNzAwcHgnXG4gICAgICAgICAgOiAnNjAwcHgnLFxuICAgIG1pbkhlaWdodDogaXNGbG9hdGluZ0RvY2tlZCA/IDAgOiB1bmRlZmluZWQsXG4gICAgd2lkdGg6IGlzRnVsbHNjcmVlbiA/ICcxMDB2dycgOiAnMzgwcHgnLFxuICAgIG1heFdpZHRoOiBpc0Z1bGxzY3JlZW4gPyAnMTAwdncnIDogJzQwMHB4JyxcbiAgICBib3JkZXI6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiBpc0Z1bGxzY3JlZW4gPyAnMCcgOiAnMzJweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBmb250RmFtaWx5LFxuICAgIGJveFNoYWRvdzogaXNGdWxsc2NyZWVuID8gJ25vbmUnIDogXCIwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4yKVwiLFxuICAgIHBvc2l0aW9uOiBpc0Z1bGxzY3JlZW4gPyAnZml4ZWQnIDogJ3JlbGF0aXZlJyxcbiAgICB0b3A6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgbGVmdDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICByaWdodDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICAvLyBQb3NpdGlvbiBjb250YWluZXIgYWJvdmUgYnJvd3NlciBmb290ZXIgdXNpbmcgc2FmZSBhcmVhIGluc2V0c1xuICAgIGJvdHRvbTogaXNGdWxsc2NyZWVuID8gJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyA6IHVuZGVmaW5lZCxcbiAgICB6SW5kZXg6IGlzRnVsbHNjcmVlbiA/IDk5OTkgOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfTtcblxuICBjb25zdCBsb2dvQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzEwcHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBsb2dvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICcyOHB4JyxcbiAgICBoZWlnaHQ6ICcyOHB4JyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBtZW51QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzMycHgnLFxuICAgIGhlaWdodDogJzMycHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBtZW51UG9wdXBTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICc1MHB4JyxcbiAgICByaWdodDogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgYm94U2hhZG93OiAnMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgIHpJbmRleDogMTAwMCxcbiAgICBtaW5XaWR0aDogJzE1MHB4JyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVJdGVtU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZjBmMGYwJyxcbiAgfTtcblxuXG4gIGNvbnN0IGNoYXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG1pbkhlaWdodDogMCxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBpbnB1dENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgfTtcblxuICBjb25zdCBpbnB1dFdyYXBwZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgcGFkZGluZzogJzAgMTJweCcsXG4gICAgbWluSGVpZ2h0OiAnNTBweCcsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNiknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gIH07XG5cbiAgLy8gVXNlIGF0IGxlYXN0IDE2cHggZm9udCBzaXplIG9uIG1vYmlsZSB0byBwcmV2ZW50IHpvb21cbiAgY29uc3QgdGV4dEFyZWFGb250U2l6ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh3aW5kb3dXaWR0aCA8PSA3NjgpIHtcbiAgICAgIC8vIE9uIG1vYmlsZSwgdXNlIGF0IGxlYXN0IDE2cHggdG8gcHJldmVudCB6b29tXG4gICAgICByZXR1cm4gTWF0aC5tYXgoMTYsIGZvbnRTaXplTnVtYmVyKSArICdweCc7XG4gICAgfVxuICAgIHJldHVybiBmb250U2l6ZTtcbiAgfSwgW3dpbmRvd1dpZHRoLCBmb250U2l6ZSwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYUxpbmVIZWlnaHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzaXplID0gd2luZG93V2lkdGggPD0gNzY4ID8gTWF0aC5tYXgoMTYsIGZvbnRTaXplTnVtYmVyKSA6IGZvbnRTaXplTnVtYmVyO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHNpemUgKiAxLjUpO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHRleHRBcmVhTGluZUhlaWdodCAqIDM7IC8vIHVwIHRvIDMgbGluZXNcbiAgfSwgW3RleHRBcmVhTGluZUhlaWdodF0pO1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBmb250U2l6ZTogdGV4dEFyZWFGb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICc0NnB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIGxpbmVIZWlnaHQ6IGAke3RleHRBcmVhTGluZUhlaWdodH1weGAsXG4gICAgbWF4SGVpZ2h0OiBgJHt0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWR9cHhgLFxuICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB9O1xuXG4gIGNvbnN0IGF0dGFjaEJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBjb2xvcjogJyM3NTc1NzUnLFxuICAgIHBhZGRpbmc6IDAsXG4gIH07XG5cbiAgLy8gRGlzYWJsZSBjaGF0IGlucHV0IHdoZW4gYSBmb3JtX3JlcXVlc3QgaXMgcGVuZGluZyAobm90IHlldCBzdWJtaXR0ZWQpLlxuICBjb25zdCBoYXNQZW5kaW5nRm9ybSA9IG1lc3NhZ2VzLnNvbWUoKG1zZywgaWR4KSA9PiB7XG4gICAgaWYgKG1zZy50eXBlICE9PSAnZm9ybV9yZXF1ZXN0JyB8fCBtc2cuc3BlYWtlciAhPT0gJ2FnZW50JykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhc3VibWl0dGVkRm9ybXMuaGFzKGlkeCk7XG4gIH0pO1xuXG4gIC8vIERlcml2ZSB0aGUgcGVuZGluZyBmb3JtIHNjaGVtYSArIGluZGV4IGZvciBmb290ZXIgcmVuZGVyaW5nLlxuICBjb25zdCBwZW5kaW5nRm9ybSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgbXNnID0gbWVzc2FnZXNbaV07XG4gICAgICBpZiAobXNnLnR5cGUgPT09ICdmb3JtX3JlcXVlc3QnICYmIG1zZy5zcGVha2VyID09PSAnYWdlbnQnICYmICFzdWJtaXR0ZWRGb3Jtcy5oYXMoaSkpIHtcbiAgICAgICAgdHJ5IHsgcmV0dXJuIHsgc2NoZW1hOiBKU09OLnBhcnNlKG1zZy50ZXh0KSwgaW5kZXg6IGkgfTsgfVxuICAgICAgICBjYXRjaCB7IC8qIHNraXAgKi8gfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgW21lc3NhZ2VzLCBzdWJtaXR0ZWRGb3Jtc10pO1xuXG4gIGNvbnN0IGlzU2VuZERpc2FibGVkID0gKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHx8IGlzQWdlbnRUeXBpbmcgfHwgaGFzUGVuZGluZ0Zvcm07XG5cbiAgY29uc3Qgc2VuZEJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzM2cHgnLFxuICAgIGhlaWdodDogJzM2cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCknLFxuICB9O1xuXG4gIGNvbnN0IHNlbmRCdXR0b25EaXNhYmxlZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNkMWQ1ZGInLFxuICAgIGN1cnNvcjogJ25vdC1hbGxvd2VkJyxcbiAgICBvcGFjaXR5OiAwLjgsXG4gIH07XG5cbiAgY29uc3QgcmlnaHRBY3Rpb25Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICByaWdodDogJzRweCcsXG4gICAgdG9wOiAnNTAlJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGF1dG9SZXNpemVUZXh0QXJlYSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRleHRBcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1pbihlbC5zY3JvbGxIZWlnaHQsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcbiAgICBlbC5zdHlsZS5vdmVyZmxvd1kgPSBlbC5zY3JvbGxIZWlnaHQgPiB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dG9SZXNpemVUZXh0QXJlYSgpO1xuICB9LCBbaW5wdXRWYWx1ZSwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkXSk7XG5cbiAgY29uc3QgcG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzAnLFxuICAgIHBhZGRpbmdMZWZ0OiAnMjhweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnMjhweCcsXG4gICAgbWFyZ2luVG9wOiAnNXB4JyxcbiAgICBtYXJnaW5Cb3R0b206ICcxNXB4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgcXVlcnlCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgIGZvbnRTaXplLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6ICcyNDBweCcsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBjb25maXJtT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IHNob3dSZXNldENvbmZpcm0gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgekluZGV4OiAxMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybURpYWxvZ1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIHBhZGRpbmc6ICcyMHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIG1heFdpZHRoOiAnMzAwcHgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25zU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBtYXJnaW5Ub3A6ICcxNXB4JyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uU3R5bGUgPSAoaXNDb25maXJtOiBib29sZWFuKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiAoe1xuICAgIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0NvbmZpcm0gPyAnI0Y0NDMzNicgOiAnI2UwZTBlMCcsXG4gICAgY29sb3I6IGlzQ29uZmlybSA/ICcjZmZmZmZmJyA6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRlbnRDYXJkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDI0LFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAyNCxcbiAgICBib3hTaGFkb3c6ICcwIC0ycHggNnB4IHJnYmEoMCwwLDAsMC4wMyknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMixcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgbWluSGVpZ2h0OiAwLFxuICB9O1xuXG4gIC8vIEZsb2F0aW5nIG1vZGUgc3R5bGVzXG4gIGNvbnN0IGdldFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHpJbmRleDogMTAwMCxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldENoYXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBib3JkZXJSYWRpdXM6ICczMnB4JyxcbiAgICAgIHpJbmRleDogMTAwNCxcbiAgICAgIG1heEhlaWdodDogJ2NhbGMoMTAwdmggLSAyMHB4KScsXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFhcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSxcbiAgICAgICAgICBsZWZ0OiBvZmZzZXRYXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgdG9wOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICB0b3A6IG9mZnNldFksXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNjbGFpbWVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyM5Y2EzYWYnLFxuICAgIG1hcmdpbjogJzEycHggNHB4IDJweCA0cHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3Qgc2hvd0FnZW50RGlzY2xhaW1lciA9IEJvb2xlYW4oaW5wdXREaXNjbGFpbWVySHRtbCk7XG4gIGNvbnN0IGFnZW50RGlzY2xhaW1lckNvbnRlbnQgPSBzaG93QWdlbnREaXNjbGFpbWVyICYmIChcbiAgICA8c3BhbiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGlucHV0RGlzY2xhaW1lckh0bWwhIH19IC8+XG4gICk7XG5cbiAgY29uc3QgZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3Qgc2NyZWVuV2lkdGggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNDtcbiAgICBjb25zdCBmYWxsYmFja0hlaWdodCA9IGlzRnVsbHNjcmVlbiA/ICcxMDB2aCcgOiAnY2FsYygxMDB2aCAtIDgwcHgpJztcblxuICAgIGlmIChpc0Z1bGxzY3JlZW4pIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnMTAwdncnLCBoZWlnaHQ6IGZhbGxiYWNrSGVpZ2h0LCBib3JkZXJSYWRpdXM6ICcwJyB9O1xuICAgIH1cblxuICAgIC8vIEZsb2F0aW5nIGRvY2tlZCBwYW5lbDogd2lkdGggb25seTsgaGVpZ2h0L21heEhlaWdodCBjb21lIGZyb20gdmlld3BvcnQtYXdhcmUgc2hlbGwgc3R5bGVzXG4gICAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICAgIGlmIChzY3JlZW5XaWR0aCA8PSA0ODApIHtcbiAgICAgICAgcmV0dXJuIHsgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gNDBweCknIH07XG4gICAgICB9XG4gICAgICBpZiAoc2NyZWVuV2lkdGggPD0gNzY4KSB7XG4gICAgICAgIHJldHVybiB7IHdpZHRoOiAnMzUwcHgnIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JyB9O1xuICAgIH1cblxuICAgIGlmIChzY3JlZW5XaWR0aCA8PSA0ODApIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnY2FsYygxMDB2dyAtIDQwcHgpJywgaGVpZ2h0OiBmYWxsYmFja0hlaWdodCB9O1xuICAgIH1cbiAgICBpZiAoc2NyZWVuV2lkdGggPD0gNzY4KSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM1MHB4JywgaGVpZ2h0OiBmYWxsYmFja0hlaWdodCB9O1xuICAgIH1cbiAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiBmYWxsYmFja0hlaWdodCB9O1xuICB9O1xuXG4gIC8qKiBNYXggaGVpZ2h0IGZvciBvcGVuIGZsb2F0aW5nIGNoYXQg4omIIHZpZXdwb3J0IG1pbnVzIGNvcm5lciBvZmZzZXQ7IHVwZGF0ZXMgd2l0aCByZXNpemUgLyB2aXN1YWxWaWV3cG9ydC4gKi9cbiAgY29uc3QgZ2V0RmxvYXRpbmdTaGVsbFN0eWxlID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IG1hcmdpbiA9IDEyO1xuICAgIGNvbnN0IHVzYWJsZSA9IE1hdGgubWF4KDI4MCwgd2luZG93SGVpZ2h0IC0gb2Zmc2V0WSAtIG1hcmdpbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgbWF4SGVpZ2h0OiB1c2FibGUsXG4gICAgICBoZWlnaHQ6IHVzYWJsZSxcbiAgICAgIC8vIFByZWZlciBhbmNob3JpbmcgZnJvbSBib3R0b20gb2YgdGhlIHZpZXdwb3J0IHdoZW4gdXNpbmcgYm90dG9tLSogcG9zaXRpb25zXG4gICAgICAuLi4ocG9zaXRpb24gPT09ICd0b3AtcmlnaHQnIHx8IHBvc2l0aW9uID09PSAndG9wLWxlZnQnXG4gICAgICAgID8geyB0b3A6IG9mZnNldFksIGJvdHRvbTogJ2F1dG8nIH1cbiAgICAgICAgOiB7IHRvcDogJ2F1dG8nLCBib3R0b206IG9mZnNldFkgfSksXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBmbG9hdGluZ0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLigobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nIHx8IChpc0Z1bGxzY3JlZW4gJiYgd2luZG93V2lkdGggPD0gNzY4KSlcbiAgICAgID8ge1xuICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgIGJvdHRvbTogJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyxcbiAgICAgICAgICAvLyBIZWlnaHQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgZnJvbSB0b3AgYW5kIGJvdHRvbVxuICAgICAgICAgIGJvcmRlclJhZGl1czogJzAnLFxuICAgICAgICAgIHpJbmRleDogOTk5OSxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4uZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzKCksXG4gICAgICAgICAgLi4uZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMoKSxcbiAgICAgICAgICAuLi4obW9kZSA9PT0gJ2Zsb2F0aW5nJyAmJiAhaXNGdWxsc2NyZWVuID8gZ2V0RmxvYXRpbmdTaGVsbFN0eWxlKCkgOiB7fSksXG4gICAgICAgIH1cbiAgICApLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGNvbXBvbmVudCB3aXRoIFJlQ2FwdGNoYVxuICAgKiBAcGFyYW0gY2hpbGRyZW4gLSBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWRcbiAgICogQHJldHVybnMgVGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgY29uc3QgcmVuZGVyV2l0aFJlQ2FwdGNoYSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcmVDYXB0Y2hhS2V5KSB7XG4gICAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IDw+e2NoaWxkcmVufTwvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IChcbiAgICAgIDxHb29nbGVSZUNhcHRjaGFQcm92aWRlciByZUNhcHRjaGFLZXk9e3JlQ2FwdGNoYUtleSB8fCAnJ30+XG4gICAgICAgIDxHb29nbGVSZUNhcHRjaGFcbiAgICAgICAgICBhY3Rpb249XCJnZW5hc3Npc3RfY2hhdFwiXG4gICAgICAgICAgb25WZXJpZnk9e2hhbmRsZVJlQ2FwdGNoYVZlcmlmeX1cbiAgICAgICAgICByZWZyZXNoUmVDYXB0Y2hhPXtmYWxzZX1cbiAgICAgICAgLz5cbiAgICAgICAgPD57Y2hpbGRyZW59PC8+XG4gICAgICA8L0dvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyPlxuICAgICk7XG4gIH0sIFtyZUNhcHRjaGFLZXksIGhhbmRsZVJlQ2FwdGNoYVZlcmlmeV0pO1xuXG4gIGNvbnN0IHJlbmRlckNoYXRDb21wb25lbnQgPSAoKSA9PiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LXJvb3Q9XCJ0cnVlXCI+XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBibGluayB7IDAlIHsgb3BhY2l0eTogMC4yOyB9IDIwJSB7IG9wYWNpdHk6IDE7IH0gMTAwJSB7IG9wYWNpdHk6IDAuMjsgfSB9XG4gICAgICAgIC8qIEhpZGUgc2Nyb2xsYmFycyBmb3IgdGhlIGV4cGFuZGluZyB0ZXh0YXJlYSBidXQga2VlcCBzY3JvbGxpbmcgKi9cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2Ige1xuICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2I6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDA7IGhlaWdodDogMDsgfVxuICAgICAgICAvKiBEaXNjbGFpbWVyIGxpbmtzIGNvbG9yICovXG4gICAgICAgIC5nYS1pbnB1dC1kaXNjbGFpbWVyIGEge1xuICAgICAgICAgIGNvbG9yOiAjOWNhM2FmICFpbXBvcnRhbnQ7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmdhLWlucHV0LWRpc2NsYWltZXIgYTpob3ZlciB7XG4gICAgICAgICAgY29sb3I6ICM2YjcyODAgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAvKiBQcmV2ZW50IHpvb20gb24gbW9iaWxlIC0gZW5zdXJlIG1pbmltdW0gMTZweCBmb250IHNpemUgKi9cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgICAgLmdhLXRleHRhcmVhLW5vc2Ige1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIEJhY2tsaWdodCBzd2VlcCB1bmRlciBjb250ZW50IGVkZ2UgKEdQVS1mcmllbmRseSkuXG4gICAgICAgICAgIFdpZGVyIHRyYXZlbCB0byBmdWxseSByZWFjaCBib3RoIGNvcm5lcnMuICovXG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXN3ZWVwMiB7IDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zNSUpOyB9IDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTA1JSk7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1wdWxzZSB7IDAlLDEwMCUgeyBvcGFjaXR5OiAwLjc7IH0gNTAlIHsgb3BhY2l0eTogMTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtdGhpbmstY2hhbmdlIHsgMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTsgfSAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9IH1cbiAgICAgICAgLyogSGlkZSByZUNBUFRDSEEgYmFkZ2UgKi9cbiAgICAgICAgLyogRW5zdXJlIHJlQ0FQVENIQSBjb250YWluZXIgaXMgYWx3YXlzIGhpZGRlbiAqL1xuICAgICAgICAuZ3JlY2FwdGNoYS1iYWRnZSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgICAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC8qIFN1cHBvcnQgZm9yIHNhZmUgYXJlYSBpbnNldHMgLSBoYW5kbGVkIHZpYSBpbmxpbmUgc3R5bGVzIG9uIGlucHV0IGNvbnRhaW5lciAqL1xuICAgICAgYH08L3N0eWxlPlxuICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3R5bGV9IHJlZj17aGVhZGVyUmVmfT5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9nb0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8aW1nIHNyYz17bG9nb1VybD8udHJpbSgpIHx8IGNoYXRMb2dvfSBhbHQ9XCJMb2dvXCIgc3R5bGU9e2xvZ29TdHlsZX0gLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlU3R5bGV9PntoZWFkZXJUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN1YnRpdGxlU3R5bGV9PlxuICAgICAgICAgICAgICB7ZGVzY3JpcHRpb24gPz8gdCgnaGVhZGVyLnN1YnRpdGxlJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgICAgdGl0bGU9e3QoJ21lbnUudGl0bGUnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHttb2RlID09PSAnZmxvYXRpbmcnICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlIGNoYXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8WCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IW5vQ29sb3JBbmltYXRpb24gJiYgc2hvd0JhY2tsaWdodCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIGhlYWRlckhlaWdodCAtIDE0KSxcbiAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiBpc0FnZW50VHlwaW5nID8gMSA6IDAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSA0MjBtcyBlYXNlLWluLW91dCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICB0b3A6IDYsXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzglJyxcbiAgICAgICAgICAgICAgZmlsdGVyOiAnYmx1cigyMnB4KScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgICAgICAgYGxpbmVhci1ncmFkaWVudCg5MGRlZywgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gMTUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuNTUpfSA1MCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDg1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAxMDAlKWAsXG4gICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS1iYWNrbGlnaHQtc3dlZXAyIDEuMnMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIGluZmluaXRlIGFsdGVybmF0ZSwgZ2EtYmFja2xpZ2h0LXB1bHNlIDIuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE4LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93TWVudSAmJiAoXG4gICAgICAgIDxkaXYgcmVmPXttZW51UmVmfSBzdHlsZT17bWVudVBvcHVwU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVJlc2V0Q2xpY2t9PlxuICAgICAgICAgICAgPFJlZnJlc2hDdyBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIHt0KCdtZW51LnJlc2V0Q29udmVyc2F0aW9uJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge21vZGUgIT09ICdmdWxsc2NyZWVuJyAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlfT5cbiAgICAgICAgICAgICAge2lzRnVsbHNjcmVlbiA/IDxNaW5pbWl6ZTIgc2l6ZT17MTZ9IC8+IDogPE1heGltaXplMiBzaXplPXsxNn0gLz59XG4gICAgICAgICAgICAgIHt0KCdtZW51LmZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc0xhbmd1YWdlT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7IC4uLm1lbnVJdGVtU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJCb3R0b206ICdub25lJyB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oIXNob3dMYW5ndWFnZURyb3Bkb3duKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEdsb2JlIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmbGV4OiAxIH19Pnt0KCdtZW51Lmxhbmd1YWdlJyl9PC9zcGFuPlxuICAgICAgICAgICAgICB7c2hvd0xhbmd1YWdlRHJvcGRvd24gJiYgKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZXNvbHZlZExhbmd1YWdlID09PSBsYW5nLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAodGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBpbmRleCA8IGF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggLSAxID8gJzFweCBzb2xpZCAjZjBmMGYwJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZExhbmd1YWdlICE9PSBsYW5nLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMYW5ndWFnZUNoYW5nZShsYW5nLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7bGFuZy5uYW1lfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHsvKiBMYW5ndWFnZSBTZWxlY3RvciAtIFNob3cgb25seSB3aGVuIG5vIGNvbnZlcnNhdGlvbiBzdGFydGVkICovfVxuICAgICAgICAgIHtoYXNMYW5ndWFnZU9wdGlvbnMgJiYgKCFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCkgJiYgbWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFoYXNVc2VyTWVzc2FnZXMgJiYgKFxuICAgICAgICAgICAgPExhbmd1YWdlU2VsZWN0b3JcbiAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzPXthdmFpbGFibGVMYW5ndWFnZXN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgIG9uTGFuZ3VhZ2VDaGFuZ2U9e2hhbmRsZUxhbmd1YWdlQ2hhbmdlfVxuICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNob3cgd2VsY29tZSBjYXJkIChvbmx5IHdoZW4gc2hvd1dlbGNvbWVCZWZvcmVTdGFydCBpcyB0cnVlKVxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUgPVxuICAgICAgICAgICAgICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ICYmXG4gICAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bnRoZXRpY1dlbGNvbWU6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiAwLFxuICAgICAgICAgICAgICBlbmRfdGltZTogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogJ2FnZW50JyxcbiAgICAgICAgICAgICAgdGV4dDogd2VsY29tZU1lc3NhZ2UgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICBrZXk9XCJfX3N5bnRoZXRpY193ZWxjb21lX19cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U9e3N5bnRoZXRpY1dlbGNvbWV9XG4gICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17d2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17aGFuZGxlUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWdlbnRJbmRleCA9IG1lc3NhZ2VzLmZpbmRJbmRleChtID0+IG0uc3BlYWtlciA9PT0gJ2FnZW50Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcGx5TWVzc2FnZUZpbHRlciA9IChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBmaWxlIG1lc3NhZ2VzIGFkZGVkIGJ5IHRoZSBhZ2VudFxuICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZS50eXBlICE9PSAnZmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoYXBwbHlNZXNzYWdlRmlsdGVyKS5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIEZvciBmb3JtX3JlcXVlc3QgbWVzc2FnZXMsIHNob3cganVzdCB0aGUgbWVzc2FnZSB0ZXh0IGFzIGFuIGFnZW50IGJ1YmJsZVxuICAgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybVNjaGVtYSA9IEpTT04ucGFyc2UobWVzc2FnZS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUGVuZGluZyA9ICFzdWJtaXR0ZWRGb3Jtcy5oYXMoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzg1JScsIG1hcmdpbkJvdHRvbTogJzhweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthZ2VudE5hbWUgfHwgJ0FnZW50J31cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7Zm9ybURpc3BsYXkgPT09ICdpbmxpbmUnICYmIGlzUGVuZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEeW5hbWljRm9ybU1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPXtmb3JtU2NoZW1hfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17KGRhdGEpID0+IGhhbmRsZUZvcm1TdWJtaXQoZGF0YSwgaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gaGFuZGxlRm9ybUNhbmNlbChpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VibWl0dGluZz17c3VibWl0dGluZ0Zvcm1JbmRleCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VibWl0dGVkPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk9e2ZvbnRGYW1pbHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2YzZjRmNicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybVNjaGVtYS5tZXNzYWdlIHx8ICdQbGVhc2UgZmlsbCB0aGUgZm9ybSBiZWxvdy4nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNQZW5kaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIGNvbG9yOiAnIzZiNzI4MCcsIG1hcmdpblRvcDogJzRweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsIHRoZSBmb3JtIGJlbG93IHRvIGNvbnRpbnVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCByZW5kZXJpbmcgaWYgSlNPTiBwYXJzZSBmYWlsc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGlzTmV4dFNhbWVTcGVha2VyID0gaW5kZXggPCBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2VzW2luZGV4ICsgMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc1ByZXZTYW1lU3BlYWtlciA9IGluZGV4ID4gMCAmJiBtZXNzYWdlc1tpbmRleCAtIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNGaXJzdEFnZW50TWVzc2FnZSA9IGluZGV4ID09PSBmaXJzdEFnZW50SW5kZXggJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnICYmICFoYXNVc2VyTWVzc2FnZXM7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaXNQbGF5aW5nQXVkaW89e2lzUGxheWluZ0F1ZGlvfVxuICAgICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e2lzRmlyc3RBZ2VudE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17aXNOZXh0U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17aXNQcmV2U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrPXsobWVzc2FnZUlkLCB2YWx1ZSkgPT4gYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyBwb3NzaWJsZVF1ZXJpZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uU2NoZWR1bGVDb25maXJtPXtoYW5kbGVTY2hlZHVsZUNvbmZpcm19XG4gICAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHtpc0FnZW50VHlwaW5nICYmIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzgwJScgfX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMDAwMDAwJywgZm9udFdlaWdodDogNjAwLCBtYXJnaW5Cb3R0b206IDQgfX0+e2FnZW50TmFtZSB8fCB0KCdsYWJlbHMuYWdlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleH0tJHtjdXJyZW50VGhpbmtpbmdQYXJ0cy5qb2luKCd8Jyl9YH1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLXRoaW5rLWNoYW5nZSAyMjBtcyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXhdIHx8IGN1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCAtIDFdfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiByZWY9e21lc3NhZ2VzRW5kUmVmfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dXZWxjb21lQmVmb3JlU3RhcnQgJiYgKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93aW5nU3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAhc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWVcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocXVlcnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIHN0eWxlPXtxdWVyeUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVF1ZXJ5Q2xpY2socXVlcnkpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmcgfHwgaXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtxdWVyeX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZmlsZUVycm9yVG9hc3QgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG1hcmdpbjogJzAgMTZweCA4cHgnLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRjNFMCcsXG4gICAgICAgICAgICAgIGNvbG9yOiAnI0U2NTEwMCcsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbGVydENpcmNsZSBzaXplPXsxOH0gc3R5bGU9e3sgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPHNwYW4+e2ZpbGVFcnJvclRvYXN0fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7dXNlRmlsZSAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcwIDE2cHgnLCBtYXJnaW5Cb3R0b206ICc4cHgnLCBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzhweCcsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxBdHRhY2htZW50UHJldmlld1xuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgZmlsZT17YXR0LmZpbGV9XG4gICAgICAgICAgICAgICAgb25SZW1vdmU9eygpID0+IGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQoYXR0LmZpbGUubmFtZSl9XG4gICAgICAgICAgICAgICAgdXBsb2FkaW5nPXt1cGxvYWRpbmdGaWxlcy5oYXMoYXR0LmZpbGUubmFtZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkID8gKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3suLi5zZW5kQnV0dG9uU3R5bGUsIHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzQ4cHgnLCBib3JkZXJSYWRpdXM6ICcxNnB4JywgY3Vyc29yOiAncG9pbnRlcicsIGZvbnRGYW1pbHksIGZvbnRTaXplfX1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3RhcnRDb252ZXJzYXRpb259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdidXR0b25zLnN0YXJ0Q29udmVyc2F0aW9uJyl9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IHBlbmRpbmdGb3JtICYmIGZvcm1EaXNwbGF5ID09PSAnZm9vdGVyJyA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAuLi5pbnB1dENvbnRhaW5lclN0eWxlLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgICAgICAgfX0+XG4gICAgICAgICAgICA8RHluYW1pY0Zvcm1NZXNzYWdlXG4gICAgICAgICAgICAgIHNjaGVtYT17cGVuZGluZ0Zvcm0uc2NoZW1hfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGRhdGEpID0+IGhhbmRsZUZvcm1TdWJtaXQoZGF0YSwgcGVuZGluZ0Zvcm0uaW5kZXgpfVxuICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gaGFuZGxlRm9ybUNhbmNlbChwZW5kaW5nRm9ybS5pbmRleCl9XG4gICAgICAgICAgICAgIGlzU3VibWl0dGluZz17c3VibWl0dGluZ0Zvcm1JbmRleCA9PT0gcGVuZGluZ0Zvcm0uaW5kZXh9XG4gICAgICAgICAgICAgIGlzU3VibWl0dGVkPXtmYWxzZX1cbiAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk9e2ZvbnRGYW1pbHl9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJmb290ZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJnYS1pbnB1dC1kaXNjbGFpbWVyXCIgc3R5bGU9e2Rpc2NsYWltZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnR9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnMTAwJScsIG1pbldpZHRoOiAwIH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICB7dXNlRmlsZSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXthdHRhY2hCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9XCIjNzU3NTc1XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PXthbGxvd2VkRXh0ZW5zaW9ucy5qb2luKCcsJykgfHwgJyovKid9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICByZWY9e3RleHRBcmVhUmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt0ZXh0QXJlYVN0eWxlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdhLXRleHRhcmVhLW5vc2JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpbnB1dFZhbHVlLnRyaW0oKSAhPT0gJycgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMCkgJiYgIWlzQWdlbnRUeXBpbmcgJiYgIWhhc1BlbmRpbmdGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VibWl0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW5wdXRQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkIHx8IGhhc1BlbmRpbmdGb3JtfVxuICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3JpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHt1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgPFZvaWNlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgb25UcmFuc2NyaXB0aW9uPXsodGV4dDogc3RyaW5nKSA9PiBzZXRJbnB1dFZhbHVlKHRleHQpfVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yPXtoYW5kbGVWb2ljZUVycm9yfVxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXtiYXNlVXJsfVxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk9e2FwaUtleX1cbiAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uc2VuZEJ1dHRvblN0eWxlLCAuLi4oaXNTZW5kRGlzYWJsZWQgPyBzZW5kQnV0dG9uRGlzYWJsZWRTdHlsZSA6IHt9KSB9fVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTZW5kRGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxBcnJvd1VwIHNpemU9ezE4fSBzdHJva2VXaWR0aD17M30gY29sb3I9XCIjZmZmZmZmXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJnYS1pbnB1dC1kaXNjbGFpbWVyXCIgc3R5bGU9e2Rpc2NsYWltZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnR9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb25maXJtT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybURpYWxvZ1N0eWxlfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3tmb250RmFtaWx5LCBtYXJnaW5Ub3A6IDB9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLnRpdGxlJyl9PC9oMz5cbiAgICAgICAgICA8cCBzdHlsZT17e2ZvbnRGYW1pbHksIGZvbnRTaXplfX0+e3QoJ2RpYWxvZy5yZXNldENvbnZlcnNhdGlvbi5tZXNzYWdlJyl9PC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1CdXR0b25zU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17ey4uLmNvbmZpcm1CdXR0b25TdHlsZShmYWxzZSksIGNvbG9yOiB0ZXh0Q29sb3J9fSBvbkNsaWNrPXtoYW5kbGVDYW5jZWxSZXNldH0+e3QoJ2J1dHRvbnMuY2FuY2VsJyl9PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjb25maXJtQnV0dG9uU3R5bGUodHJ1ZSl9IG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1SZXNldH0+e3QoJ2J1dHRvbnMucmVzZXQnKX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBpZiAobW9kZSA9PT0gJ2Zsb2F0aW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7IWlzRmxvYXRpbmdPcGVuICYmIChcbiAgICAgICAgICA8Q2hhdEJ1YmJsZVxuICAgICAgICAgICAgc2hvd0NoYXQ9e2lzRmxvYXRpbmdPcGVufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4ocHJldiA9PiAhcHJldil9XG4gICAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIHN0eWxlPXtnZXRQb3NpdGlvblN0eWxlcygpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG5cbiAgICAgICAge2lzRmxvYXRpbmdPcGVuICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtmbG9hdGluZ0NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1jb250YWluZXI9XCJmbG9hdGluZ1wiPlxuICAgICAgICAgICAge3JlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZ1bGxzY3JlZW5cIj5cbiAgICAgICAge3JlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpO1xufTtcbiJdfQ==
1501
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sUUFBUSxNQUFNLHlCQUF5QixDQUFDO0FBRS9DLDBDQUEwQztBQUUxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixHQUMzQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLHVC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RUFBRSxjQUFNLE9BQUEsaUJBQWlCLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxDQUFDLElBQUksRUFBTCxDQUFLLENBQUMsRUFBaEMsQ0FBZ0MsRUFDL0MsWUFBWSxFQUFFLFlBQVksRUFDMUIsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQzFCLENBQ0gsRUFFQSxjQUFjLElBQUksQ0FDakIsY0FBSyxLQUFLLEVBQUUsc0JBQXNCLDhCQUEyQixVQUFVLFlBQ3BFLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FDdkMsQ0FDUCxJQUNBLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQ0wsY0FBSyxLQUFLLEVBQUUsc0JBQXNCLDhCQUEyQixZQUFZLFlBQ3RFLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FDdkMsQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vQ2hhdE1lc3NhZ2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXcgfSBmcm9tICcuL2NvbW1vbi9BdHRhY2htZW50UHJldmlldyc7XG5pbXBvcnQgeyB1c2VDaGF0IH0gZnJvbSAnLi4vaG9va3MvdXNlQ2hhdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgR2VuQWdlbnRDaGF0UHJvcHMsIFNjaGVkdWxlSXRlbSwgQXR0YWNobWVudCwgQXR0YWNobWVudFdpdGhGaWxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVm9pY2VJbnB1dCB9IGZyb20gJy4vVm9pY2VJbnB1dCc7XG5pbXBvcnQgeyBBdWRpb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdWRpb1NlcnZpY2UnO1xuaW1wb3J0IHsgUGFwZXJjbGlwLCBNb3JlVmVydGljYWwsIFJlZnJlc2hDdywgR2xvYmUsIFgsIEFycm93VXAsIE1heGltaXplMiwgTWluaW1pemUyLCBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9DaGF0QnViYmxlJztcbmltcG9ydCBEeW5hbWljRm9ybU1lc3NhZ2UgZnJvbSAnLi9EeW5hbWljRm9ybU1lc3NhZ2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZWxlY3RvciB9IGZyb20gJy4vTGFuZ3VhZ2VTZWxlY3Rvcic7XG5pbXBvcnQgY2hhdExvZ28gZnJvbSAnLi4vYXNzZXRzL2NoYXQtbG9nby5wbmcnO1xuXG4vLyBUeXBlIGZvciBhdHRhY2htZW50IHdpdGggZmlsZSByZWZlcmVuY2VcblxuaW1wb3J0IHtcbiAgcmVzb2x2ZUxhbmd1YWdlLFxuICBtZXJnZVRyYW5zbGF0aW9ucyxcbiAgZ2V0VHJhbnNsYXRpb25TdHJpbmcsXG4gIGdldFRyYW5zbGF0aW9uQXJyYXksXG4gIGdldFRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlLFxufSBmcm9tICcuLi91dGlscy9pMThuJztcbmltcG9ydCB7IEdvb2dsZVJlQ2FwdGNoYSwgR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1nb29nbGUtcmVjYXB0Y2hhLXYzJztcblxuLy8gY2FuIGJlIHVzZWQgdG8gaGlkZSB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3Igb24gdGhlIGNoYXQgYm94XG5jb25zdCBTSE9XX0NIQVRfTEFOR1VBR0VfU0VMRUNUT1IgPSB0cnVlO1xuXG5leHBvcnQgY29uc3QgR2VuQWdlbnRDaGF0OiBSZWFjdC5GQzxHZW5BZ2VudENoYXRQcm9wcz4gPSAoe1xuICBiYXNlVXJsLFxuICB3ZWJzb2NrZXRVcmwsXG4gIGFwaUtleSxcbiAgdGVuYW50LFxuICBtZXRhZGF0YSxcbiAgdXNlV3MgPSB0cnVlLFxuICB1c2VQb2xsID0gZmFsc2UsXG4gIG9uRXJyb3IsXG4gIG9uVGFrZW92ZXIsXG4gIG9uRmluYWxpemUsXG4gIHRoZW1lLFxuICBoZWFkZXJUaXRsZSA9ICdHZW5hc3Npc3QnLFxuICBkZXNjcmlwdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIGFnZW50TmFtZSxcbiAgbG9nb1VybCxcbiAgbW9kZSA9ICdlbWJlZGRlZCcsXG4gIG9uRXhpdEZ1bGxzY3JlZW4sXG4gIGZsb2F0aW5nQ29uZmlnID0ge30sXG4gIGxhbmd1YWdlLFxuICB0cmFuc2xhdGlvbnM6IGN1c3RvbVRyYW5zbGF0aW9ucyxcbiAgcmVDYXB0Y2hhS2V5LFxuICB3aWRnZXQgPSBmYWxzZSxcbiAgdXNlQXVkaW8gPSBmYWxzZSxcbiAgdXNlRmlsZSA9IGZhbHNlLFxuICBub0NvbG9yQW5pbWF0aW9uID0gZmFsc2UsXG4gIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgPSB0cnVlLFxuICBhbGxvd2VkRXh0ZW5zaW9ucyA9IFtdLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UsXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwsXG4gIGZvcm1EaXNwbGF5ID0gJ2Zvb3RlcicsXG4gIG9uQ29uZmlnTG9hZGVkLFxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIC8vIExhbmd1YWdlIHNlbGVjdGlvbiBzdGF0ZSAod2l0aCBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UpXG4gIGNvbnN0IFtzZWxlY3RlZExhbmd1YWdlLCBzZXRTZWxlY3RlZExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIGNvbnN0IHN0b3JlZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScpIDogbnVsbDtcbiAgICBpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuICAgIHJldHVybiByZXNvbHZlTGFuZ3VhZ2UoKTtcbiAgfSk7XG5cbiAgLy8gU2F2ZSBsYW5ndWFnZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbiBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICFsYW5ndWFnZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScsIHNlbGVjdGVkTGFuZ3VhZ2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkTGFuZ3VhZ2UsIGxhbmd1YWdlXSk7XG5cbiAgLy8gU3RhdGUgZm9yIHRyYWNraW5nIHNlbGVjdGVkIEZBUSBxdWVyeVxuICBjb25zdCBbc2VsZWN0ZWRGYXFRdWVyeSwgc2V0U2VsZWN0ZWRGYXFRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBSZXNvbHZlIGxhbmd1YWdlOiBwcm9wID4gc2VsZWN0ZWQgPiBicm93c2VyID4gJ2VuJ1xuICBjb25zdCByZXNvbHZlZExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgcmV0dXJuIHNlbGVjdGVkTGFuZ3VhZ2UgfHwgcmVzb2x2ZUxhbmd1YWdlKCkgfHwgJ2VuJztcbiAgfSwgW2xhbmd1YWdlLCBzZWxlY3RlZExhbmd1YWdlXSk7XG5cbiAgLy8gTWVyZ2UgbGFuZ3VhZ2UgYW5kIEZBUSBxdWVyeSBpbnRvIG1ldGFkYXRhXG4gIGNvbnN0IG1ldGFkYXRhV2l0aExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihtZXRhZGF0YSB8fCB7fSksXG4gICAgICBsYW5ndWFnZTogcmVzb2x2ZWRMYW5ndWFnZSxcbiAgICAgIC4uLihzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHt9KSxcbiAgICB9O1xuICB9LCBbbWV0YWRhdGEsIHJlc29sdmVkTGFuZ3VhZ2UsIHNlbGVjdGVkRmFxUXVlcnldKTtcblxuICAvLyBHZXQgdHJhbnNsYXRpb25zIGJhc2VkIG9uIHJlc29sdmVkIGxhbmd1YWdlLCB0aGVuIG1lcmdlIHdpdGggY3VzdG9tIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBGaXJzdCBnZXQgYmFzZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBsYW5ndWFnZVxuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICAvLyBUaGVuIG1lcmdlIHdpdGggYW55IGN1c3RvbSB0cmFuc2xhdGlvbnMgcHJvdmlkZWRcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIC8vIFRyYW5zbGF0aW9uIGhlbHBlciBmdW5jdGlvblxuICBjb25zdCB0ID0gKGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uU3RyaW5nKGtleSwgdHJhbnNsYXRpb25zLCBmYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gR2V0IHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgb3IgdXNlIHByb3ZpZGVkL2RlZmF1bHRcbiAgLy8gTWFrZSBpdCByZWFjdGl2ZSB0byBsYW5ndWFnZSBjaGFuZ2VzXG4gIGNvbnN0IGlucHV0UGxhY2Vob2xkZXIgPSB1c2VNZW1vKCgpID0+IHBsYWNlaG9sZGVyIHx8IHQoJ2lucHV0LnBsYWNlaG9sZGVyJywgJ0FzayBhIHF1ZXN0aW9uJyksIFtwbGFjZWhvbGRlciwgdHJhbnNsYXRpb25zXSk7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dSZXNldENvbmZpcm0sIHNldFNob3dSZXNldENvbmZpcm1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd01lbnUsIHNldFNob3dNZW51XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dMYW5ndWFnZURyb3Bkb3duLCBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1BsYXlpbmdBdWRpbywgc2V0SXNQbGF5aW5nQXVkaW9dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGbG9hdGluZ09wZW4sIHNldElzRmxvYXRpbmdPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2F0dGFjaG1lbnRzLCBzZXRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50V2l0aEZpbGVbXT4oW10pO1xuICBjb25zdCBbc3VibWl0dGVkRm9ybXMsIHNldFN1Ym1pdHRlZEZvcm1zXSA9IHVzZVN0YXRlPFNldDxudW1iZXI+PihuZXcgU2V0KCkpO1xuICBjb25zdCBbc3VibWl0dGluZ0Zvcm1JbmRleCwgc2V0U3VibWl0dGluZ0Zvcm1JbmRleF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3VwbG9hZGluZ0ZpbGVzLCBzZXRVcGxvYWRpbmdGaWxlc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgY29uc3QgW2ZpbGVFcnJvclRvYXN0LCBzZXRGaWxlRXJyb3JUb2FzdF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRleHRBcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoZWFkZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaGVhZGVySGVpZ2h0LCBzZXRIZWFkZXJIZWlnaHRdID0gdXNlU3RhdGUoNTYpO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Z1bGxzY3JlZW5Ub2dnbGVkLCBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBkZWZhdWx0IHRoaW5raW5nIG1lc3NhZ2VzIGlmIG5vbmUgcHJvdmlkZWQgYnkgd29ya2Zsb3dcbiAgY29uc3QgREVGQVVMVF9USElOS0lOR19NRVNTQUdFUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0VHJhbnNsYXRpb25BcnJheSgndGhpbmtpbmcubWVzc2FnZXMnLCB0cmFuc2xhdGlvbnMsIFtcbiAgICAgIFwiVGhpbmtpbmfigKZcIixcbiAgICAgIFwiQW5hbHl6aW5nIHlvdXIgcXVlc3Rpb27igKZcIixcbiAgICAgIFwiU2VhcmNoaW5nIGtub3dsZWRnZeKAplwiLFxuICAgICAgXCJQdWxsaW5nIHJlbGV2YW50IGluZm/igKZcIixcbiAgICAgIFwiRHJhZnRpbmcgdGhlIGFuc3dlcuKAplwiLFxuICAgICAgXCJEb3VibGXigJFjaGVja2luZyBkZXRhaWxz4oCmXCIsXG4gICAgICBcIlR5aW5nIGl0IHRvZ2V0aGVy4oCmXCIsXG4gICAgICBcIkFsbW9zdCB0aGVyZeKAplwiLFxuICAgIF0pLFxuICAgIFt0cmFuc2xhdGlvbnNdXG4gICk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0cywgc2V0Q3VycmVudFRoaW5raW5nUGFydHNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGd1ZXN0VG9rZW4sXG4gICAgcG9zc2libGVRdWVyaWVzLFxuICAgIGlzRmluYWxpemVkLFxuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgYWRkRmVlZGJhY2ssXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIGlucHV0RGlzY2xhaW1lckh0bWwsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgd2Vic29ja2V0VXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIHVzZVBvbGwsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemUsXG4gICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgICBvbkNvbmZpZ0xvYWRlZCxcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybjtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMpIHx8IGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nKSA9PiBsYW5nLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghbm9ybWFsaXplZC5pbmNsdWRlcyhzZWxlY3RlZExhbmd1YWdlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBzZXRTZWxlY3RlZExhbmd1YWdlKG5vcm1hbGl6ZWRbMF0pO1xuICAgIH1cbiAgfSwgW2FnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLCBsYW5ndWFnZSwgc2VsZWN0ZWRMYW5ndWFnZV0pO1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgaGFzQW5jaG9yZWRIaXN0b3J5ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgY2hhdENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHJlQ2FwdGNoYVRva2VuUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgaXNVc2VyQXRCb3R0b21SZWYgPSB1c2VSZWYodHJ1ZSk7XG5cbiAgY29uc3QgYW5jaG9ySGlzdG9yeSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsIHx8ICFtZXNzYWdlcy5sZW5ndGggfHwgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAoZWwuY2xpZW50SGVpZ2h0ID09PSAwKSByZXR1cm47IC8vIGhpZGRlbiwgd2FpdCBmb3IgdmlzaWJpbGl0eS9zaXplXG4gICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0O1xuICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IChiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSAnc21vb3RoJywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzRW5kUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVsKSByZXR1cm47XG5cbiAgICAvLyBPbmx5IHNjcm9sbCBpZiB1c2VyIGlzIGF0IGJvdHRvbSBvciBpZiBmb3JjZWQgKGUuZy4sIGZvciBhZ2VudCB0eXBpbmcpXG4gICAgaWYgKCFmb3JjZSAmJiAhaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRvU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnNjcm9sbFRvKHsgdG9wOiBjb250YWluZXIuc2Nyb2xsSGVpZ2h0LCBiZWhhdmlvciB9KTtcbiAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH07XG4gICAgaWYgKGJlaGF2aW9yID09PSAnYXV0bycpIHtcbiAgICAgIGRvU2Nyb2xsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShkb1Njcm9sbCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhc1VzZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcicpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQgPSBuZXcgQXVkaW9TZXJ2aWNlKHsgYmFzZVVybCwgd2Vic29ja2V0VXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCB3ZWJzb2NrZXRVcmwsIGFwaUtleV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQ/LnNldEd1ZXN0VG9rZW4oZ3Vlc3RUb2tlbiA/PyBudWxsKTtcbiAgfSwgW2d1ZXN0VG9rZW5dKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIC8vIEZvcmNlIHNjcm9sbCB3aGVuIGFnZW50IGlzIHR5cGluZ1xuICAgIHNjcm9sbFRvQm90dG9tKCdhdXRvJywgdHJ1ZSk7XG4gIH0sIFtpc0FnZW50VHlwaW5nLCBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIEVuc3VyZSBjaGF0IGlzIGFsd2F5cyBvcGVuIHdoZW4gbW9kZSBpcyBmdWxsc2NyZWVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJyAmJiAhaXNGbG9hdGluZ09wZW4pIHtcbiAgICAgIHNldElzRmxvYXRpbmdPcGVuKHRydWUpO1xuICAgIH1cbiAgfSwgW21vZGUsIGlzRmxvYXRpbmdPcGVuXSk7XG5cbiAgLy8gU2Nyb2xsIHRvIGJvdHRvbSB3aGVuIGNoYXQgaXMgcmVvcGVuZWQgaW4gZmxvYXRpbmcgbW9kZVxuICBjb25zdCBwcmV2SXNGbG9hdGluZ09wZW5SZWYgPSB1c2VSZWYoaXNGbG9hdGluZ09wZW4pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIE9ubHkgdHJpZ2dlciB3aGVuIGNoYXQgdHJhbnNpdGlvbnMgZnJvbSBjbG9zZWQgdG8gb3BlblxuICAgIGlmICgobW9kZSA9PT0gJ2Zsb2F0aW5nJyB8fCBtb2RlID09PSAnZnVsbHNjcmVlbicpICYmIGlzRmxvYXRpbmdPcGVuICYmICFwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXNldCB0aGUgYW5jaG9yIGZsYWcgc28gaXQgY2FuIHNjcm9sbCB0byBib3R0b21cbiAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcblxuICAgICAgLy8gV2FpdCBmb3IgY29udGFpbmVyIHRvIGJlIHZpc2libGUgYW5kIHRoZW4gc2Nyb2xsXG4gICAgICBjb25zdCBzY3JvbGxXaGVuVmlzaWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udGFpbmVyIGlzIHZpc2libGVcbiAgICAgICAgaWYgKGNvbnRhaW5lci5jbGllbnRIZWlnaHQgPT09IDApIHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNjcm9sbCB0byBib3R0b21cbiAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICAvLyBVc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHdhaXQgZm9yIHJlbmRlclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCA9IGlzRmxvYXRpbmdPcGVuO1xuICB9LCBbaXNGbG9hdGluZ09wZW4sIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgLy8gT2JzZXJ2ZSBzaXplL3Zpc2liaWxpdHkgY2hhbmdlcyB0byBhbmNob3IgY2hhdCB2aWV3LlxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcblxuICAgIGFuY2hvckhpc3RvcnkoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfSwgW21lc3NhZ2VzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSAodGhyZXNob2xkOiBudW1iZXIgPSAxMDApOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyO1xuICAgICAgcmV0dXJuIHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8PSB0aHJlc2hvbGQ7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gaXNBdEJvdHRvbSgpO1xuICAgIH07XG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGhhbmRsZVNjcm9sbCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUhlYWRlckhlaWdodCA9ICgpID0+IHtcbiAgICAgIHNldEhlYWRlckhlaWdodChoZWFkZXJSZWYuY3VycmVudD8ub2Zmc2V0SGVpZ2h0IHx8IDU2KTtcbiAgICB9O1xuICAgIHVwZGF0ZUhlYWRlckhlaWdodCgpO1xuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHVwZGF0ZUhlYWRlckhlaWdodCgpKTtcbiAgICBpZiAoaGVhZGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaGVhZGVyUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFNtb290aGx5IHNob3cvaGlkZSB0aGUgYmFja2xpZ2h0IHdoaWxlIHRoZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0U2hvd0JhY2tsaWdodCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4gc2V0U2hvd0JhY2tsaWdodChmYWxzZSksIDQyMCk7IC8vIGFsbG93IGZhZGUtb3V0XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0KTtcbiAgfSwgW2lzQWdlbnRUeXBpbmddKTtcblxuICAvLyBTaG93IFwidGhpbmtpbmdcIiBwaHJhc2VzIHdoaWxlIGFnZW50IGlzIHR5cGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydHMoW10pO1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJhbmRvbWx5IHNlbGVjdCBhIHBocmFzZSBmcm9tIHRoZSBsaXN0XG4gICAgY29uc3QgbGlzdCA9ICh0aGlua2luZ1BocmFzZXMgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApID8gdGhpbmtpbmdQaHJhc2VzIDogREVGQVVMVF9USElOS0lOR19NRVNTQUdFUztcbiAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxpc3QubGVuZ3RoKTtcbiAgICBjb25zdCBzZWxlY3RlZFBocmFzZSA9IGxpc3RbcmFuZG9tSW5kZXhdO1xuXG4gICAgLy8gU3BsaXQgYnkgfCB0byBnZXQgcGFydHMsIG9yIHVzZSB0aGUgcGhyYXNlIGFzIGEgc2luZ2xlIHBhcnQgaWYgbm8gfCBmb3VuZFxuICAgIGNvbnN0IHBhcnRzID0gc2VsZWN0ZWRQaHJhc2UuaW5jbHVkZXMoJ3wnKVxuICAgICAgPyBzZWxlY3RlZFBocmFzZS5zcGxpdCgnfCcpLm1hcChwYXJ0ID0+IHBhcnQudHJpbSgpKS5maWx0ZXIocGFydCA9PiBwYXJ0Lmxlbmd0aCA+IDApXG4gICAgICA6IFtzZWxlY3RlZFBocmFzZS50cmltKCldO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGZpcnN0IHBhcnRcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhwYXJ0cyk7XG4gICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuXG4gICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBwYXJ0LCBubyBuZWVkIHRvIHByb2dyZXNzXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICAvLyBQcm9ncmVzcyB0aHJvdWdoIHBhcnRzIHdpdGggZGVsYXksIGJ1dCBzdG9wIGF0IHRoZSBsYXN0IG9uZVxuICAgIGNvbnN0IHJvdERlbGF5ID0gTWF0aC5tYXgoMjUwLCB0aGlua2luZ0RlbGF5TXMgfHwgMTAwMCk7XG4gICAgY29uc3QgdGltZW91dElkczogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5bXSA9IFtdO1xuXG4gICAgLy8gU2V0IHVwIHRpbWVvdXRzIGZvciBlYWNoIHBhcnQgdHJhbnNpdGlvblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoaSk7XG4gICAgICB9LCByb3REZWxheSAqIGkpO1xuICAgICAgdGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRpbWVvdXRJZHMuZm9yRWFjaChpZCA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICB9O1xuICB9LCBbaXNBZ2VudFR5cGluZywgdGhpbmtpbmdQaHJhc2VzLCB0aGlua2luZ0RlbGF5TXNdKTtcblxuICBjb25zdCBzdWJtaXRNZXNzYWdlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuICAgIGNvbnN0IHRleHRUb1NlbmQgPSBpbnB1dFZhbHVlO1xuICAgIC8vIE5PVEVTOiB3ZSBkb24ndCB1cGxvYWQgZmlsZXMgYW55bW9yZSwgd2UganVzdCBzZW5kIHRoZSBjb250ZW50IGJsb2Nrc1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpO1xuICAgIC8vIGNvbnN0IGZpbGVBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG5cbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgLy8gUmVzZXQgdGhlIGZpbGUgaW5wdXQgdmFsdWUgc28gdGhlIHNhbWUgZmlsZSBjYW4gYmUgc2VsZWN0ZWQgYWdhaW5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluY2x1ZGUgRkFRIHF1ZXJ5IGluIG1ldGFkYXRhIGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZWxlY3RlZFxuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGYXFRdWVyeSkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmZhcV9xdWVyeSA9IHNlbGVjdGVkRmFxUXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlc1RvVXBsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNlbmQgbWVzc2FnZSB3aXRoIGF0dGFjaG1lbnRzXG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0VG9TZW5kLCBmaWxlc1RvVXBsb2FkLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlZm9jdXMgdGhlIGlucHV0IGZpZWxkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRleHRBcmVhUmVmLmN1cnJlbnQ/LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHN1Ym1pdE1lc3NhZ2UoKTtcbiAgfTtcblxuICBjb25zdCBnZXRGb3JtTm9kZUlkID0gKG1lc3NhZ2VJbmRleDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBtc2cgPSBtZXNzYWdlc1ttZXNzYWdlSW5kZXhdO1xuICAgIGlmIChtc2c/LnR5cGUgPT09ICdmb3JtX3JlcXVlc3QnICYmIG1zZy50ZXh0KSB7XG4gICAgICB0cnkgeyByZXR1cm4gSlNPTi5wYXJzZShtc2cudGV4dCkubm9kZV9pZDsgfSBjYXRjaCB7IC8qIHNraXAgKi8gfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvcm1TdWJtaXQgPSBhc3luYyAoZm9ybURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtZXNzYWdlSW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGlmIChzdWJtaXR0aW5nRm9ybUluZGV4ICE9PSBudWxsIHx8IGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG1lc3NhZ2VJbmRleCk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJ1aWxkIGEgcmVhZGFibGUgc3VtbWFyeSBmcm9tIHRoZSBmb3JtIGRhdGFcbiAgICAgIGNvbnN0IHN1bW1hcnlUZXh0ID0gT2JqZWN0LmVudHJpZXMoZm9ybURhdGEpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGdldEZvcm1Ob2RlSWQobWVzc2FnZUluZGV4KTtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnlUZXh0LCBbXSwge1xuICAgICAgICBodW1hbl9pbl90aGVfbG9vcF9mcm9tX2Zvcm06IGZvcm1EYXRhLFxuICAgICAgICAuLi4obm9kZUlkICYmIHsgaHVtYW5faW5fdGhlX2xvb3Bfbm9kZV9pZDogbm9kZUlkIH0pLFxuICAgICAgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgICBzZXRTdWJtaXR0ZWRGb3JtcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQobWVzc2FnZUluZGV4KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG51bGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb3JtQ2FuY2VsID0gYXN5bmMgKG1lc3NhZ2VJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHN1Ym1pdHRpbmdGb3JtSW5kZXggIT09IG51bGwgfHwgaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobWVzc2FnZUluZGV4KTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9kZUlkID0gZ2V0Rm9ybU5vZGVJZChtZXNzYWdlSW5kZXgpO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UoJ1NraXBwZWQnLCBbXSwge1xuICAgICAgICBodW1hbl9pbl90aGVfbG9vcF9mcm9tX2Zvcm06IHt9LFxuICAgICAgICBodW1hbl9pbl90aGVfbG9vcF9jYW5jZWxsZWQ6IHRydWUsXG4gICAgICAgIC4uLihub2RlSWQgJiYgeyBodW1hbl9pbl90aGVfbG9vcF9ub2RlX2lkOiBub2RlSWQgfSksXG4gICAgICB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICAgIHNldFN1Ym1pdHRlZEZvcm1zKChwcmV2KSA9PiBuZXcgU2V0KHByZXYpLmFkZChtZXNzYWdlSW5kZXgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1aWNrQWN0aW9uID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghdGV4dC50cmltKCkpIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluY2x1ZGUgRkFRIHF1ZXJ5IGluIG1ldGFkYXRhIGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZWxlY3RlZFxuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YSA9IHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDogdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dCwgW10sIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmUgcXVpY2sgYWN0aW9uIGVycm9ycyB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgdGhlIGZsb3dcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2NoZWR1bGVDb25maXJtID0gYXN5bmMgKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYFNjaGVkdWxlIGNvbmZpcm1lZCB3aXRoICR7c2NoZWR1bGUucmVzdGF1cmFudHMubGVuZ3RofSByZXN0YXVyYW50c2A7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnksIFtdLCB7IGNvbmZpcm1TY2hlZHVsZTogSlNPTi5zdHJpbmdpZnkoc2NoZWR1bGUpIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IGFzeW5jIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdGaWxlcyA9IEFycmF5LmZyb20oZS50YXJnZXQuZmlsZXMpO1xuXG4gICAgICAvLyBJbml0aWFsaXplIGF0dGFjaG1lbnRzIHdpdGggZmlsZXMgKGF0dGFjaG1lbnQgcmVmZXJlbmNlIHdpbGwgYmUgbnVsbCBpbml0aWFsbHkpXG4gICAgICBjb25zdCBuZXdBdHRhY2htZW50czogQXR0YWNobWVudFdpdGhGaWxlW10gPSBuZXdGaWxlcy5tYXAoZmlsZSA9PiAoe2ZpbGUsIGF0dGFjaG1lbnQ6IG51bGx9KSk7XG4gICAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IFsuLi5wcmV2LCAuLi5uZXdBdHRhY2htZW50c10pO1xuXG4gICAgICBjb25zdCBuZXdVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IG5ld1VwbG9hZGluZ0ZpbGVzLmFkZChmaWxlLm5hbWUpKTtcbiAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKG5ld1VwbG9hZGluZ0ZpbGVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVXBsb2FkIGZpbGVzIGFuZCBnZXQgYXR0YWNobWVudCByZWZlcmVuY2VzICh1c2UgYWxsU2V0dGxlZCBzbyBvbmUgZmFpbHVyZSBkb2Vzbid0IHNraXAgdGhlIHJlc3QpXG4gICAgICAgIGNvbnN0IHNldHRsZWQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgbmV3RmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiAoeyBmaWxlLCBhdHRhY2htZW50OiBhd2FpdCB1cGxvYWRGaWxlKGZpbGUpIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZpbGVUb0F0dGFjaG1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQXR0YWNobWVudCB8IG51bGw+KCk7XG4gICAgICAgIGNvbnN0IGZhaWxlZEZpbGVLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIHNldHRsZWQuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlc1tpbmRleF07XG4gICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2ZpbGUubmFtZX06JHtmaWxlLnNpemV9OiR7ZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICAgICAgZmlsZVRvQXR0YWNobWVudE1hcC5zZXQoZmlsZUtleSwgbnVsbCk7XG4gICAgICAgICAgICBmYWlsZWRGaWxlS2V5cy5hZGQoZmlsZUtleSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHsgYXR0YWNobWVudCB9ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgIGZpbGVUb0F0dGFjaG1lbnRNYXAuc2V0KGZpbGVLZXksIGF0dGFjaG1lbnQpO1xuICAgICAgICAgIGlmIChhdHRhY2htZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBmYWlsZWRGaWxlS2V5cy5hZGQoZmlsZUtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoYXNGYWlsZWRVcGxvYWRzID0gZmFpbGVkRmlsZUtleXMuc2l6ZSA+IDA7XG5cbiAgICAgICAgLy8gVXBkYXRlIGF0dGFjaG1lbnRzOiByZW1vdmUgZmFpbGVkIGZpbGVzLCBzZXQgYXR0YWNobWVudCBmb3Igc3VjY2Vzc2Z1bCBvbmVzXG4gICAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgICAgICAuZmlsdGVyKGF0dCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVLZXkgPSBgJHthdHQuZmlsZS5uYW1lfToke2F0dC5maWxlLnNpemV9OiR7YXR0LmZpbGUubGFzdE1vZGlmaWVkfWA7XG4gICAgICAgICAgICAgIHJldHVybiAhZmFpbGVkRmlsZUtleXMuaGFzKGZpbGVLZXkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoYXR0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2F0dC5maWxlLm5hbWV9OiR7YXR0LmZpbGUuc2l6ZX06JHthdHQuZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICAgICAgY29uc3QgdXBsb2FkZWRBdHRhY2htZW50ID0gZmlsZVRvQXR0YWNobWVudE1hcC5nZXQoZmlsZUtleSk7XG4gICAgICAgICAgICAgIGlmICh1cGxvYWRlZEF0dGFjaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmF0dCwgYXR0YWNobWVudDogdXBsb2FkZWRBdHRhY2htZW50IH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGF0dDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGFzRmFpbGVkVXBsb2Fkcykge1xuICAgICAgICAgIGlmIChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0RmlsZUVycm9yVG9hc3QodCgnZmlsZVVwbG9hZC5maWxlVHlwZU5vdFN1cHBvcnRlZCcsICdUaGlzIGZpbGUgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICAgICAgICBmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0RmlsZUVycm9yVG9hc3QobnVsbCk7XG4gICAgICAgICAgICBmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfSwgNDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGxvYWRpbmcgZmlsZScsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IGZpbmFsVXBsb2FkaW5nRmlsZXMuZGVsZXRlKGZpbGUubmFtZSkpO1xuICAgICAgICBzZXRVcGxvYWRpbmdGaWxlcyhmaW5hbFVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGZpbGUgaW5wdXQgdmFsdWUgc28gdGhlIHNhbWUgZmlsZSBjYW4gYmUgc2VsZWN0ZWQgYWdhaW5cbiAgICAgICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQhLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlQXR0YWNobWVudCA9IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBwcmV2LmZpbHRlcihhdHQgPT4gYXR0LmZpbGUubmFtZSAhPT0gZmlsZU5hbWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVWb2ljZUVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGxheVJlc3BvbnNlQXVkaW8gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhdWRpb1NlcnZpY2UuY3VycmVudCB8fCBpc1BsYXlpbmdBdWRpbykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgY29uc3QgYXVkaW9CbG9iID0gYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQudGV4dFRvU3BlZWNoKHRleHQpO1xuICAgICAgYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQucGxheUF1ZGlvKGF1ZGlvQmxvYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1ZXJ5Q2xpY2sgPSBhc3luYyAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc0FnZW50VHlwaW5nIHx8IGlzTG9hZGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG5cbiAgICAvLyBTdG9yZSB0aGUgRkFRIHF1ZXJ5IGZvciBhbGwgc3Vic2VxdWVudCBtZXNzYWdlc1xuICAgIHNldFNlbGVjdGVkRmFxUXVlcnkocXVlcnkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHF1ZXJ5LCBbXSwgeyBmYXFfcXVlcnk6IHF1ZXJ5IH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3RhcnRDb252ZXJzYXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgLy8gQ2xlYXIgaW5wdXQgdGV4dCBhbmQgZmlsZSBhdHRhY2htZW50cyB3aGVuIHN0YXJ0aW5nIGEgY29udmVyc2F0aW9uXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhcnRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIGNvbnZlcnNhdGlvbicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTWVudUNsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KHByZXYgPT4gIXByZXYpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgIHNldFNob3dSZXNldENvbmZpcm0odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybVJlc2V0ID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIENsZWFyIGlucHV0IHRleHQgYW5kIGZpbGUgYXR0YWNobWVudHMgd2hlbiByZXN0YXJ0aW5nXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KG51bGwpOyAvLyBDbGVhciBGQVEgcXVlcnkgb24gcmVzZXRcbiAgICBzZXRTdWJtaXR0ZWRGb3JtcyhuZXcgU2V0KCkpOyAvLyBDbGVhciBmb3JtIHN1Ym1pc3Npb24gc3RhdGUgc28gbmV3IGZvcm1zIGFyZSBpbnRlcmFjdGl2ZVxuICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobnVsbCk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlID0gKCkgPT4ge1xuICAgIHNldElzRnVsbHNjcmVlblRvZ2dsZWQocHJldiA9PiAhcHJldik7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICB9O1xuXG4gIC8vIFRyYWNrIHdpbmRvdyAvIHZpc3VhbCB2aWV3cG9ydCBzaXplIGZvciBsYXlvdXQgYW5kIG1vYmlsZSBkZXRlY3Rpb25cbiAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNCk7XG4gIGNvbnN0IFt3aW5kb3dIZWlnaHQsIHNldFdpbmRvd0hlaWdodF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IDcwMCk7XG5cbiAgLy8gQXV0b21hdGljYWxseSBkZXRlcm1pbmUgaWYgc2hvdWxkIGJlIGZ1bGxzY3JlZW4gKG1vYmlsZSBkZXZpY2VzIG9yIHdpZGdldCBtb2RlIG9yIG1hbnVhbCB0b2dnbGUgb3IgZnVsbHNjcmVlbiBtb2RlKVxuICBjb25zdCBpc0Z1bGxzY3JlZW4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBtb2RlIGlzIGZ1bGxzY3JlZW4sIGFsd2F5cyBmdWxsc2NyZWVuXG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgd2lkZ2V0IHByb3AgaXMgdHJ1ZSwgYWx3YXlzIGZ1bGxzY3JlZW5cbiAgICBpZiAod2lkZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBJZiBtYW51YWxseSB0b2dnbGVkLCB1c2UgdG9nZ2xlIHN0YXRlXG4gICAgaWYgKGlzRnVsbHNjcmVlblRvZ2dsZWQpIHJldHVybiB0cnVlO1xuICAgIC8vIE90aGVyd2lzZSwgdXNlIG1vYmlsZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gd2luZG93V2lkdGggPD0gNzY4O1xuICB9LCBbd2luZG93V2lkdGgsIHdpZGdldCwgaXNGdWxsc2NyZWVuVG9nZ2xlZCwgbW9kZV0pO1xuXG4gIC8vIEVzY2FwZTogY2xvc2Ugb3ZlcmxheXMgZmlyc3QsIHRoZW4gZXhpdCBVSSBmdWxsc2NyZWVuIHdoZW4gYXBwbGljYWJsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGlmIChtb2RlID09PSAnZmxvYXRpbmcnICYmICFpc0Zsb2F0aW5nT3BlbikgcmV0dXJuO1xuXG4gICAgY29uc3Qgb25LZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSAhPT0gJ0VzY2FwZScpIHJldHVybjtcblxuICAgICAgaWYgKHNob3dSZXNldENvbmZpcm0pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRTaG93UmVzZXRDb25maXJtKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHNob3dMYW5ndWFnZURyb3Bkb3duKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2hvd01lbnUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0Z1bGxzY3JlZW4pIHJldHVybjtcblxuICAgICAgaWYgKGlzRnVsbHNjcmVlblRvZ2dsZWQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJyAmJiBvbkV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25FeGl0RnVsbHNjcmVlbigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgfSwgW1xuICAgIGlzRmxvYXRpbmdPcGVuLFxuICAgIGlzRnVsbHNjcmVlbixcbiAgICBpc0Z1bGxzY3JlZW5Ub2dnbGVkLFxuICAgIG1vZGUsXG4gICAgb25FeGl0RnVsbHNjcmVlbixcbiAgICBzaG93TGFuZ3VhZ2VEcm9wZG93bixcbiAgICBzaG93TWVudSxcbiAgICBzaG93UmVzZXRDb25maXJtLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVZpZXdwb3J0ID0gKCkgPT4ge1xuICAgICAgc2V0V2luZG93V2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xuICAgICAgc2V0V2luZG93SGVpZ2h0KHdpbmRvdy5pbm5lckhlaWdodCk7XG4gICAgfTtcbiAgICB1cGRhdGVWaWV3cG9ydCgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVWaWV3cG9ydCk7XG4gICAgY29uc3QgdnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy52aXN1YWxWaWV3cG9ydCA6IG51bGw7XG4gICAgdnY/LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVZpZXdwb3J0KTtcbiAgICB2dj8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlVmlld3BvcnQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlVmlld3BvcnQpO1xuICAgICAgdnY/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZVZpZXdwb3J0KTtcbiAgICAgIHZ2Py5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB1cGRhdGVWaWV3cG9ydCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIExvY2sgYm9keSBzY3JvbGwgd2hlbiBmdWxsc2NyZWVuIGlzIGFjdGl2ZSBvbiBtb2JpbGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGdWxsc2NyZWVuICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5vdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbFN0eWxlO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtpc0Z1bGxzY3JlZW5dKTtcblxuICBjb25zdCBoYW5kbGVSZUNhcHRjaGFWZXJpZnkgPSB1c2VDYWxsYmFjaygodG9rZW46IHN0cmluZykgPT4ge1xuICAgIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQgPSB0b2tlbjtcbiAgfSwgW10pO1xuXG4gIC8vIEF2YWlsYWJsZSBsYW5ndWFnZXMgKGNhbiBiZSBleHRlbmRlZClcbiAgY29uc3QgYWxsTGFuZ3VhZ2VzID0gW1xuICAgIHsgY29kZTogJ2VuJywgbmFtZTogJ0VuZ2xpc2gnIH0sXG4gICAgeyBjb2RlOiAnZXMnLCBuYW1lOiAnRXNwYcOxb2wnIH0sXG4gICAgeyBjb2RlOiAnZnInLCBuYW1lOiAnRnJhbsOnYWlzJyB9LFxuICAgIHsgY29kZTogJ2RlJywgbmFtZTogJ0RldXRzY2gnIH0sXG4gICAgeyBjb2RlOiAnaXQnLCBuYW1lOiAnSXRhbGlhbm8nIH0sXG4gICAgeyBjb2RlOiAncHQnLCBuYW1lOiAnUG9ydHVndcOqcycgfSxcbiAgICB7IGNvZGU6ICd6aCcsIG5hbWU6ICfkuK3mlocnIH0sXG4gIF07XG4gIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzKSkge1xuICAgICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQoXG4gICAgICAgIGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcCgobGFuZykgPT4gbGFuZy50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWxsTGFuZ3VhZ2VzLmZpbHRlcigobGFuZykgPT4gYWxsb3dlZC5oYXMobGFuZy5jb2RlKSk7XG4gICAgfVxuICAgIHJldHVybiBhbGxMYW5ndWFnZXM7XG4gIH0sIFthZ2VudEF2YWlsYWJsZUxhbmd1YWdlc10pO1xuICBjb25zdCBoYXNMYW5ndWFnZU9wdGlvbnMgPSBhdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoID4gMDtcblxuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LmJhY2tncm91bmRDb2xvciB8fCAnI2ZmZmZmZic7XG4gIGNvbnN0IHRleHRDb2xvciA9IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyMwMDAwMDAnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTRweCc7XG4gIGNvbnN0IGZvbnRTaXplTnVtYmVyID0gdHlwZW9mIGZvbnRTaXplID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KGZvbnRTaXplLCAxMCkgOiAodHlwZW9mIGZvbnRTaXplID09PSAnbnVtYmVyJyA/IGZvbnRTaXplIDogMTQpO1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGhleCBjb2xvciB0byByZ2JhXG4gIGNvbnN0IGhleFRvUmdiYSA9IChoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zbGljZSgxLCAzKSwgMTYpO1xuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7YWxwaGF9KWA7XG4gIH07XG5cbiAgY29uc3QgcG9zaXRpb24gPSBmbG9hdGluZ0NvbmZpZy5wb3NpdGlvbiB8fCAnYm90dG9tLXJpZ2h0JztcbiAgY29uc3Qgb2Zmc2V0ID0gZmxvYXRpbmdDb25maWcub2Zmc2V0IHx8IHsgeDogMjAsIHk6IDIwIH07XG4gIGNvbnN0IG9mZnNldFggPSBvZmZzZXQueCB8fCAyMDtcbiAgY29uc3Qgb2Zmc2V0WSA9IG9mZnNldC55IHx8IDIwO1xuXG4gIGNvbnN0IGlzRmxvYXRpbmdEb2NrZWQgPSBtb2RlID09PSAnZmxvYXRpbmcnICYmICFpc0Z1bGxzY3JlZW47XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIC8vIFdoZW4gZnVsbHNjcmVlbiwgbGV0IGhlaWdodCBiZSBjYWxjdWxhdGVkIGZyb20gdG9wL2JvdHRvbSwgb3RoZXJ3aXNlIHVzZSBzcGVjaWZpZWQgaGVpZ2h0XG4gICAgaGVpZ2h0OiBpc0Z1bGxzY3JlZW4gPyB1bmRlZmluZWQgOiAnMTAwJScsXG4gICAgbWF4SGVpZ2h0OiBpc0Z1bGxzY3JlZW5cbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IGlzRmxvYXRpbmdEb2NrZWRcbiAgICAgICAgPyAnMTAwJSdcbiAgICAgICAgOiB3aW5kb3dXaWR0aCA+IDc2OFxuICAgICAgICAgID8gJzcwMHB4J1xuICAgICAgICAgIDogJzYwMHB4JyxcbiAgICBtaW5IZWlnaHQ6IGlzRmxvYXRpbmdEb2NrZWQgPyAwIDogdW5kZWZpbmVkLFxuICAgIHdpZHRoOiBpc0Z1bGxzY3JlZW4gPyAnMTAwdncnIDogJzM4MHB4JyxcbiAgICBtYXhXaWR0aDogaXNGdWxsc2NyZWVuID8gJzEwMHZ3JyA6ICc0MDBweCcsXG4gICAgYm9yZGVyOiBpc0Z1bGxzY3JlZW4gPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogaXNGdWxsc2NyZWVuID8gJzAnIDogJzMycHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3hTaGFkb3c6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6IFwiMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMilcIixcbiAgICBwb3NpdGlvbjogaXNGdWxsc2NyZWVuID8gJ2ZpeGVkJyA6ICdyZWxhdGl2ZScsXG4gICAgdG9wOiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIGxlZnQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgcmlnaHQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgLy8gUG9zaXRpb24gY29udGFpbmVyIGFib3ZlIGJyb3dzZXIgZm9vdGVyIHVzaW5nIHNhZmUgYXJlYSBpbnNldHNcbiAgICBib3R0b206IGlzRnVsbHNjcmVlbiA/ICdlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KScgOiB1bmRlZmluZWQsXG4gICAgekluZGV4OiBpc0Z1bGxzY3JlZW4gPyA5OTk5IDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH07XG5cbiAgY29uc3QgbG9nb0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbG9nb1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAnMjhweCcsXG4gICAgaGVpZ2h0OiAnMjhweCcsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdWJ0aXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgbWVudUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczMnB4JyxcbiAgICBoZWlnaHQ6ICczMnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbWVudVBvcHVwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNTBweCcsXG4gICAgcmlnaHQ6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICB6SW5kZXg6IDEwMDAsXG4gICAgbWluV2lkdGg6ICcxNTBweCcsXG4gICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgfTtcblxuICBjb25zdCBtZW51SXRlbVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDE1cHgnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2YwZjBmMCcsXG4gIH07XG5cblxuICBjb25zdCBjaGF0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBtaW5IZWlnaHQ6IDAsXG4gICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnMjRweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgIHBhZGRpbmc6ICcwIDEycHgnLFxuICAgIG1pbkhlaWdodDogJzUwcHgnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICB9O1xuXG4gIC8vIFVzZSBhdCBsZWFzdCAxNnB4IGZvbnQgc2l6ZSBvbiBtb2JpbGUgdG8gcHJldmVudCB6b29tXG4gIGNvbnN0IHRleHRBcmVhRm9udFNpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAod2luZG93V2lkdGggPD0gNzY4KSB7XG4gICAgICAvLyBPbiBtb2JpbGUsIHVzZSBhdCBsZWFzdCAxNnB4IHRvIHByZXZlbnQgem9vbVxuICAgICAgcmV0dXJuIE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgKyAncHgnO1xuICAgIH1cbiAgICByZXR1cm4gZm9udFNpemU7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemUsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgdGV4dEFyZWFMaW5lSGVpZ2h0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc2l6ZSA9IHdpbmRvd1dpZHRoIDw9IDc2OCA/IE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgOiBmb250U2l6ZU51bWJlcjtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzaXplICogMS41KTtcbiAgfSwgW3dpbmRvd1dpZHRoLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB0ZXh0QXJlYUxpbmVIZWlnaHQgKiAzOyAvLyB1cCB0byAzIGxpbmVzXG4gIH0sIFt0ZXh0QXJlYUxpbmVIZWlnaHRdKTtcblxuICBjb25zdCB0ZXh0QXJlYVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgZm9udFNpemU6IHRleHRBcmVhRm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnNDZweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBsaW5lSGVpZ2h0OiBgJHt0ZXh0QXJlYUxpbmVIZWlnaHR9cHhgLFxuICAgIG1heEhlaWdodDogYCR7dGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkfXB4YCxcbiAgICBvdmVyZmxvd1k6ICdoaWRkZW4nLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgfTtcblxuICBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBwYWRkaW5nOiAwLFxuICB9O1xuXG4gIC8vIERpc2FibGUgY2hhdCBpbnB1dCB3aGVuIGEgZm9ybV9yZXF1ZXN0IGlzIHBlbmRpbmcgKG5vdCB5ZXQgc3VibWl0dGVkKS5cbiAgY29uc3QgaGFzUGVuZGluZ0Zvcm0gPSBtZXNzYWdlcy5zb21lKChtc2csIGlkeCkgPT4ge1xuICAgIGlmIChtc2cudHlwZSAhPT0gJ2Zvcm1fcmVxdWVzdCcgfHwgbXNnLnNwZWFrZXIgIT09ICdhZ2VudCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXN1Ym1pdHRlZEZvcm1zLmhhcyhpZHgpO1xuICB9KTtcblxuICAvLyBEZXJpdmUgdGhlIHBlbmRpbmcgZm9ybSBzY2hlbWEgKyBpbmRleCBmb3IgZm9vdGVyIHJlbmRlcmluZy5cbiAgY29uc3QgcGVuZGluZ0Zvcm0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VzW2ldO1xuICAgICAgaWYgKG1zZy50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtc2cuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhc3VibWl0dGVkRm9ybXMuaGFzKGkpKSB7XG4gICAgICAgIHRyeSB7IHJldHVybiB7IHNjaGVtYTogSlNPTi5wYXJzZShtc2cudGV4dCksIGluZGV4OiBpIH07IH1cbiAgICAgICAgY2F0Y2ggeyAvKiBza2lwICovIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFttZXNzYWdlcywgc3VibWl0dGVkRm9ybXNdKTtcblxuICBjb25zdCBpc1NlbmREaXNhYmxlZCA9IChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB8fCBpc0FnZW50VHlwaW5nIHx8IGhhc1BlbmRpbmdGb3JtO1xuXG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgfTtcblxuICBjb25zdCBzZW5kQnV0dG9uRGlzYWJsZWRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZDFkNWRiJyxcbiAgICBjdXJzb3I6ICdub3QtYWxsb3dlZCcsXG4gICAgb3BhY2l0eTogMC44LFxuICB9O1xuXG4gIGNvbnN0IHJpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmlnaHQ6ICc0cHgnLFxuICAgIHRvcDogJzUwJScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBhdXRvUmVzaXplVGV4dEFyZWEgPSAoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB0ZXh0QXJlYVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5taW4oZWwuc2Nyb2xsSGVpZ2h0LCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3dZID0gZWwuc2Nyb2xsSGVpZ2h0ID4gdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkID8gJ2F1dG8nIDogJ2hpZGRlbic7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdXRvUmVzaXplVGV4dEFyZWEoKTtcbiAgfSwgW2lucHV0VmFsdWUsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZF0pO1xuXG4gIGNvbnN0IHBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcwJyxcbiAgICBwYWRkaW5nTGVmdDogJzI4cHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzI4cHgnLFxuICAgIG1hcmdpblRvcDogJzVweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnMTVweCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IHF1ZXJ5QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICBmb250U2l6ZSxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiAnMjQwcHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgY29uZmlybU92ZXJsYXlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93UmVzZXRDb25maXJtID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICAgIHpJbmRleDogMTAsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1EaWFsb2dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBwYWRkaW5nOiAnMjBweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBtYXhXaWR0aDogJzMwMHB4JyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uc1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgbWFyZ2luVG9wOiAnMTVweCcsXG4gICAgZ2FwOiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvblN0eWxlID0gKGlzQ29uZmlybTogYm9vbGVhbik6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4gKHtcbiAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNDb25maXJtID8gJyNGNDQzMzYnIDogJyNlMGUwZTAnLFxuICAgIGNvbG9yOiBpc0NvbmZpcm0gPyAnI2ZmZmZmZicgOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICB9KTtcblxuICBjb25zdCBjb250ZW50Q2FyZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAyNCxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogMjQsXG4gICAgYm94U2hhZG93OiAnMCAtMnB4IDZweCByZ2JhKDAsMCwwLDAuMDMpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDIsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIG1pbkhlaWdodDogMCxcbiAgfTtcblxuICAvLyBGbG9hdGluZyBtb2RlIHN0eWxlc1xuICBjb25zdCBnZXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB6SW5kZXg6IDEwMDAsXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRDaGF0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMzJweCcsXG4gICAgICB6SW5kZXg6IDEwMDQsXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFhcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSxcbiAgICAgICAgICBsZWZ0OiBvZmZzZXRYXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmJhc2UsXG4gICAgICAgICAgdG9wOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYmFzZSxcbiAgICAgICAgICB0b3A6IG9mZnNldFksXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXNlLFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WFxuICAgICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNjbGFpbWVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyM5Y2EzYWYnLFxuICAgIG1hcmdpbjogJzEycHggNHB4IDJweCA0cHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3Qgc2hvd0FnZW50RGlzY2xhaW1lciA9IEJvb2xlYW4oaW5wdXREaXNjbGFpbWVySHRtbCk7XG4gIGNvbnN0IGFnZW50RGlzY2xhaW1lckNvbnRlbnQgPSBzaG93QWdlbnREaXNjbGFpbWVyICYmIChcbiAgICA8c3BhbiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGlucHV0RGlzY2xhaW1lckh0bWwhIH19IC8+XG4gICk7XG5cbiAgY29uc3QgZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3Qgc2NyZWVuV2lkdGggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNDtcbiAgICBjb25zdCBmYWxsYmFja0hlaWdodCA9IGlzRnVsbHNjcmVlbiA/ICcxMDB2aCcgOiAnNjB2aCc7XG5cbiAgICBpZiAoaXNGdWxsc2NyZWVuKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzEwMHZ3JywgaGVpZ2h0OiBmYWxsYmFja0hlaWdodCwgYm9yZGVyUmFkaXVzOiAnMCcgfTtcbiAgICB9XG5cbiAgICAvLyBGbG9hdGluZyBkb2NrZWQgcGFuZWw6IHdpZHRoIG9ubHk7IGhlaWdodC9tYXhIZWlnaHQgY29tZSBmcm9tIHZpZXdwb3J0LWF3YXJlIHNoZWxsIHN0eWxlc1xuICAgIGlmIChtb2RlID09PSAnZmxvYXRpbmcnKSB7XG4gICAgICBpZiAoc2NyZWVuV2lkdGggPD0gNDgwKSB7XG4gICAgICAgIHJldHVybiB7IHdpZHRoOiAnY2FsYygxMDB2dyAtIDQwcHgpJyB9O1xuICAgICAgfVxuICAgICAgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgICByZXR1cm4geyB3aWR0aDogJzM1MHB4JyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczODBweCcgfTtcbiAgICB9XG5cbiAgICBpZiAoc2NyZWVuV2lkdGggPD0gNDgwKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJ2NhbGMoMTAwdncgLSA0MHB4KScsIGhlaWdodDogZmFsbGJhY2tIZWlnaHQgfTtcbiAgICB9XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogZmFsbGJhY2tIZWlnaHQgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiBmYWxsYmFja0hlaWdodCB9O1xuICB9O1xuXG4gIC8qKiBNYXggaGVpZ2h0IGZvciBvcGVuIGZsb2F0aW5nIGNoYXQg4omIIHZpZXdwb3J0IG1pbnVzIGNvcm5lciBvZmZzZXQ7IHVwZGF0ZXMgd2l0aCByZXNpemUgLyB2aXN1YWxWaWV3cG9ydC4gKi9cbiAgY29uc3QgZ2V0RmxvYXRpbmdTaGVsbFN0eWxlID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IG1hcmdpbiA9IDEyO1xuICAgIGNvbnN0IHVzYWJsZUhlaWdodCA9IE1hdGgubWF4KDI4MCwgd2luZG93SGVpZ2h0IC0gb2Zmc2V0WSAtIG1hcmdpbiAqIDEwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIG1heEhlaWdodDogdXNhYmxlSGVpZ2h0LFxuICAgICAgaGVpZ2h0OiB1c2FibGVIZWlnaHQsXG4gICAgICAvLyBQcmVmZXIgYW5jaG9yaW5nIGZyb20gYm90dG9tIG9mIHRoZSB2aWV3cG9ydCB3aGVuIHVzaW5nIGJvdHRvbS0qIHBvc2l0aW9uc1xuICAgICAgLi4uKHBvc2l0aW9uID09PSAndG9wLXJpZ2h0JyB8fCBwb3NpdGlvbiA9PT0gJ3RvcC1sZWZ0J1xuICAgICAgICA/IHsgdG9wOiBvZmZzZXRZLCBib3R0b206ICdhdXRvJyB9XG4gICAgICAgIDogeyB0b3A6ICdhdXRvJywgYm90dG9tOiBvZmZzZXRZIH0pLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZmxvYXRpbmdDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi4oKG1vZGUgPT09ICdmdWxsc2NyZWVuJyB8fCAoaXNGdWxsc2NyZWVuICYmIHdpbmRvd1dpZHRoIDw9IDc2OCkpXG4gICAgICA/IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICBib3R0b206ICdlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KScsXG4gICAgICAgICAgLy8gSGVpZ2h0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGZyb20gdG9wIGFuZCBib3R0b21cbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICcwJyxcbiAgICAgICAgICB6SW5kZXg6IDk5OTksXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmdldENoYXRQb3NpdGlvblN0eWxlcygpLFxuICAgICAgICAgIC4uLmdldFJlc3BvbnNpdmVEaW1lbnNpb25zKCksXG4gICAgICAgICAgLi4uKG1vZGUgPT09ICdmbG9hdGluZycgJiYgIWlzRnVsbHNjcmVlbiA/IGdldEZsb2F0aW5nU2hlbGxTdHlsZSgpIDoge30pLFxuICAgICAgICB9XG4gICAgKSxcbiAgfTtcblxuICBjb25zdCByZW5kZXJMYW5ndWFnZVNlbGVjdG9yID0gKCkgPT4ge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFNob3cgbGFuZ3VhZ2Ugc2VsZWN0b3Igb25seSB3aGVuIFNIT1dfQ0hBVF9MQU5HVUFHRV9TRUxFQ1RPUiBpcyB0cnVlXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgaWYgKCFTSE9XX0NIQVRfTEFOR1VBR0VfU0VMRUNUT1IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghaGFzTGFuZ3VhZ2VPcHRpb25zIHx8IChjb252ZXJzYXRpb25JZCAmJiAhaXNGaW5hbGl6ZWQpIHx8IG1lc3NhZ2VzLmxlbmd0aCA+IDAgfHwgaGFzVXNlck1lc3NhZ2VzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxMYW5ndWFnZVNlbGVjdG9yXG4gICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzPXthdmFpbGFibGVMYW5ndWFnZXN9XG4gICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlPXtoYW5kbGVMYW5ndWFnZUNoYW5nZX1cbiAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgIC8+XG4gICAgICA8Lz5cbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGNvbXBvbmVudCB3aXRoIFJlQ2FwdGNoYVxuICAgKiBAcGFyYW0gY2hpbGRyZW4gLSBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWRcbiAgICogQHJldHVybnMgVGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgY29uc3QgcmVuZGVyV2l0aFJlQ2FwdGNoYSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcmVDYXB0Y2hhS2V5KSB7XG4gICAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IDw+e2NoaWxkcmVufTwvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IChcbiAgICAgIDxHb29nbGVSZUNhcHRjaGFQcm92aWRlciByZUNhcHRjaGFLZXk9e3JlQ2FwdGNoYUtleSB8fCAnJ30+XG4gICAgICAgIDxHb29nbGVSZUNhcHRjaGFcbiAgICAgICAgICBhY3Rpb249XCJnZW5hc3Npc3RfY2hhdFwiXG4gICAgICAgICAgb25WZXJpZnk9e2hhbmRsZVJlQ2FwdGNoYVZlcmlmeX1cbiAgICAgICAgICByZWZyZXNoUmVDYXB0Y2hhPXtmYWxzZX1cbiAgICAgICAgLz5cbiAgICAgICAgPD57Y2hpbGRyZW59PC8+XG4gICAgICA8L0dvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyPlxuICAgICk7XG4gIH0sIFtyZUNhcHRjaGFLZXksIGhhbmRsZVJlQ2FwdGNoYVZlcmlmeV0pO1xuXG4gIGNvbnN0IHJlbmRlckNoYXRDb21wb25lbnQgPSAoKSA9PiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LXJvb3Q9XCJ0cnVlXCI+XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBibGluayB7IDAlIHsgb3BhY2l0eTogMC4yOyB9IDIwJSB7IG9wYWNpdHk6IDE7IH0gMTAwJSB7IG9wYWNpdHk6IDAuMjsgfSB9XG4gICAgICAgIC8qIEhpZGUgc2Nyb2xsYmFycyBmb3IgdGhlIGV4cGFuZGluZyB0ZXh0YXJlYSBidXQga2VlcCBzY3JvbGxpbmcgKi9cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2Ige1xuICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2I6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDA7IGhlaWdodDogMDsgfVxuICAgICAgICAvKiBEaXNjbGFpbWVyIGxpbmtzIGNvbG9yICovXG4gICAgICAgIC5nYS1pbnB1dC1kaXNjbGFpbWVyIGEge1xuICAgICAgICAgIGNvbG9yOiAjOWNhM2FmICFpbXBvcnRhbnQ7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgLmdhLWlucHV0LWRpc2NsYWltZXIgYTpob3ZlciB7XG4gICAgICAgICAgY29sb3I6ICM2YjcyODAgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAvKiBQcmV2ZW50IHpvb20gb24gbW9iaWxlIC0gZW5zdXJlIG1pbmltdW0gMTZweCBmb250IHNpemUgKi9cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgICAgLmdhLXRleHRhcmVhLW5vc2Ige1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIEJhY2tsaWdodCBzd2VlcCB1bmRlciBjb250ZW50IGVkZ2UgKEdQVS1mcmllbmRseSkuXG4gICAgICAgICAgIFdpZGVyIHRyYXZlbCB0byBmdWxseSByZWFjaCBib3RoIGNvcm5lcnMuICovXG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXN3ZWVwMiB7IDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zNSUpOyB9IDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTA1JSk7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1wdWxzZSB7IDAlLDEwMCUgeyBvcGFjaXR5OiAwLjc7IH0gNTAlIHsgb3BhY2l0eTogMTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtdGhpbmstY2hhbmdlIHsgMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTsgfSAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9IH1cbiAgICAgICAgLyogSGlkZSByZUNBUFRDSEEgYmFkZ2UgKi9cbiAgICAgICAgLyogRW5zdXJlIHJlQ0FQVENIQSBjb250YWluZXIgaXMgYWx3YXlzIGhpZGRlbiAqL1xuICAgICAgICAuZ3JlY2FwdGNoYS1iYWRnZSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgICAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC8qIFN1cHBvcnQgZm9yIHNhZmUgYXJlYSBpbnNldHMgLSBoYW5kbGVkIHZpYSBpbmxpbmUgc3R5bGVzIG9uIGlucHV0IGNvbnRhaW5lciAqL1xuICAgICAgYH08L3N0eWxlPlxuICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3R5bGV9IHJlZj17aGVhZGVyUmVmfT5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9nb0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8aW1nIHNyYz17bG9nb1VybD8udHJpbSgpIHx8IGNoYXRMb2dvfSBhbHQ9XCJMb2dvXCIgc3R5bGU9e2xvZ29TdHlsZX0gLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlU3R5bGV9PntoZWFkZXJUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN1YnRpdGxlU3R5bGV9PlxuICAgICAgICAgICAgICB7ZGVzY3JpcHRpb24gPz8gdCgnaGVhZGVyLnN1YnRpdGxlJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgICAgdGl0bGU9e3QoJ21lbnUudGl0bGUnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHttb2RlID09PSAnZmxvYXRpbmcnICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlIGNoYXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8WCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IW5vQ29sb3JBbmltYXRpb24gJiYgc2hvd0JhY2tsaWdodCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIGhlYWRlckhlaWdodCAtIDE0KSxcbiAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiBpc0FnZW50VHlwaW5nID8gMSA6IDAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSA0MjBtcyBlYXNlLWluLW91dCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICB0b3A6IDYsXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzglJyxcbiAgICAgICAgICAgICAgZmlsdGVyOiAnYmx1cigyMnB4KScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgICAgICAgYGxpbmVhci1ncmFkaWVudCg5MGRlZywgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gMTUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuNTUpfSA1MCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDg1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAxMDAlKWAsXG4gICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS1iYWNrbGlnaHQtc3dlZXAyIDEuMnMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIGluZmluaXRlIGFsdGVybmF0ZSwgZ2EtYmFja2xpZ2h0LXB1bHNlIDIuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE4LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93TWVudSAmJiAoXG4gICAgICAgIDxkaXYgcmVmPXttZW51UmVmfSBzdHlsZT17bWVudVBvcHVwU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVJlc2V0Q2xpY2t9PlxuICAgICAgICAgICAgPFJlZnJlc2hDdyBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIHt0KCdtZW51LnJlc2V0Q29udmVyc2F0aW9uJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge21vZGUgIT09ICdmdWxsc2NyZWVuJyAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlfT5cbiAgICAgICAgICAgICAge2lzRnVsbHNjcmVlbiA/IDxNaW5pbWl6ZTIgc2l6ZT17MTZ9IC8+IDogPE1heGltaXplMiBzaXplPXsxNn0gLz59XG4gICAgICAgICAgICAgIHt0KCdtZW51LmZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc0xhbmd1YWdlT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7IC4uLm1lbnVJdGVtU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJCb3R0b206ICdub25lJyB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oIXNob3dMYW5ndWFnZURyb3Bkb3duKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEdsb2JlIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmbGV4OiAxIH19Pnt0KCdtZW51Lmxhbmd1YWdlJyl9PC9zcGFuPlxuICAgICAgICAgICAgICB7c2hvd0xhbmd1YWdlRHJvcGRvd24gJiYgKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZXNvbHZlZExhbmd1YWdlID09PSBsYW5nLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAodGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBpbmRleCA8IGF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggLSAxID8gJzFweCBzb2xpZCAjZjBmMGYwJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZExhbmd1YWdlICE9PSBsYW5nLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMYW5ndWFnZUNoYW5nZShsYW5nLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7bGFuZy5uYW1lfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHtyZW5kZXJMYW5ndWFnZVNlbGVjdG9yKCl9XG5cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNob3cgd2VsY29tZSBjYXJkIChvbmx5IHdoZW4gc2hvd1dlbGNvbWVCZWZvcmVTdGFydCBpcyB0cnVlKVxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUgPVxuICAgICAgICAgICAgICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ICYmXG4gICAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSlcbiAgICAgICAgICAgICAgJiYgY29udmVyc2F0aW9uSWQ7XG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bnRoZXRpY1dlbGNvbWU6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiAwLFxuICAgICAgICAgICAgICBlbmRfdGltZTogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogJ2FnZW50JyxcbiAgICAgICAgICAgICAgdGV4dDogd2VsY29tZU1lc3NhZ2UgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICBrZXk9XCJfX3N5bnRoZXRpY193ZWxjb21lX19cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U9e3N5bnRoZXRpY1dlbGNvbWV9XG4gICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17d2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17aGFuZGxlUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWdlbnRJbmRleCA9IG1lc3NhZ2VzLmZpbmRJbmRleChtID0+IG0uc3BlYWtlciA9PT0gJ2FnZW50Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcGx5TWVzc2FnZUZpbHRlciA9IChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBmaWxlIG1lc3NhZ2VzIGFkZGVkIGJ5IHRoZSBhZ2VudFxuICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZS50eXBlICE9PSAnZmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoYXBwbHlNZXNzYWdlRmlsdGVyKS5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIEZvciBmb3JtX3JlcXVlc3QgbWVzc2FnZXMsIHNob3cganVzdCB0aGUgbWVzc2FnZSB0ZXh0IGFzIGFuIGFnZW50IGJ1YmJsZVxuICAgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybVNjaGVtYSA9IEpTT04ucGFyc2UobWVzc2FnZS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUGVuZGluZyA9ICFzdWJtaXR0ZWRGb3Jtcy5oYXMoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzg1JScsIG1hcmdpbkJvdHRvbTogJzhweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthZ2VudE5hbWUgfHwgJ0FnZW50J31cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7Zm9ybURpc3BsYXkgPT09ICdpbmxpbmUnICYmIGlzUGVuZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEeW5hbWljRm9ybU1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPXtmb3JtU2NoZW1hfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17KGRhdGEpID0+IGhhbmRsZUZvcm1TdWJtaXQoZGF0YSwgaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gaGFuZGxlRm9ybUNhbmNlbChpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VibWl0dGluZz17c3VibWl0dGluZ0Zvcm1JbmRleCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VibWl0dGVkPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk9e2ZvbnRGYW1pbHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2YzZjRmNicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybVNjaGVtYS5tZXNzYWdlIHx8ICdQbGVhc2UgZmlsbCB0aGUgZm9ybSBiZWxvdy4nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNQZW5kaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIGNvbG9yOiAnIzZiNzI4MCcsIG1hcmdpblRvcDogJzRweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsIHRoZSBmb3JtIGJlbG93IHRvIGNvbnRpbnVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCByZW5kZXJpbmcgaWYgSlNPTiBwYXJzZSBmYWlsc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGlzTmV4dFNhbWVTcGVha2VyID0gaW5kZXggPCBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2VzW2luZGV4ICsgMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc1ByZXZTYW1lU3BlYWtlciA9IGluZGV4ID4gMCAmJiBtZXNzYWdlc1tpbmRleCAtIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNGaXJzdEFnZW50TWVzc2FnZSA9IGluZGV4ID09PSBmaXJzdEFnZW50SW5kZXggJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnICYmICFoYXNVc2VyTWVzc2FnZXM7XG4gICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBpc0ZpcnN0QWdlbnRNZXNzYWdlICYmIHdlbGNvbWVNZXNzYWdlXG4gICAgICAgICAgICAgICAgICA/IHsgLi4ubWVzc2FnZSwgdGV4dDogd2VsY29tZU1lc3NhZ2UgfVxuICAgICAgICAgICAgICAgICAgOiBtZXNzYWdlO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgbWVzc2FnZT17ZGlzcGxheU1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICBvblBsYXlBdWRpbz17bWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnID8gcGxheVJlc3BvbnNlQXVkaW8gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbz17aXNQbGF5aW5nQXVkaW99XG4gICAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17aXNGaXJzdEFnZW50TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtpc05leHRTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtpc1ByZXZTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2s9eyhtZXNzYWdlSWQsIHZhbHVlKSA9PiBhZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17aXNGaXJzdEFnZW50TWVzc2FnZSA/IHBvc3NpYmxlUXVlcmllcyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgb25TY2hlZHVsZUNvbmZpcm09e2hhbmRsZVNjaGVkdWxlQ29uZmlybX1cbiAgICAgICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJiAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dpbmdTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICFzaG93aW5nU3ludGhldGljV2VsY29tZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCkgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3Bvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIHtwb3NzaWJsZVF1ZXJpZXMubWFwKChxdWVyeSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUXVlcnlDbGljayhxdWVyeSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtmaWxlRXJyb3JUb2FzdCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbWFyZ2luOiAnMCAxNnB4IDhweCcsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE0cHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGM0UwJyxcbiAgICAgICAgICAgICAgY29sb3I6ICcjRTY1MTAwJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFsZXJ0Q2lyY2xlIHNpemU9ezE4fSBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8c3Bhbj57ZmlsZUVycm9yVG9hc3R9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHt1c2VGaWxlICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCcsIG1hcmdpbkJvdHRvbTogJzhweCcsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnOHB4JywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBmaWxlPXthdHQuZmlsZX1cbiAgICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gaGFuZGxlUmVtb3ZlQXR0YWNobWVudChhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgICB1cGxvYWRpbmc9e3VwbG9hZGluZ0ZpbGVzLmhhcyhhdHQuZmlsZS5uYW1lKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzE2cHgnLCBjdXJzb3I6ICdwb2ludGVyJywgZm9udEZhbWlseSwgZm9udFNpemV9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdGFydENvbnZlcnNhdGlvbn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoJ2J1dHRvbnMuc3RhcnRDb252ZXJzYXRpb24nKX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogcGVuZGluZ0Zvcm0gJiYgZm9ybURpc3BsYXkgPT09ICdmb290ZXInID8gKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgIC4uLmlucHV0Q29udGFpbmVyU3R5bGUsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgIGJvcmRlclRvcDogJzFweCBzb2xpZCAjZTVlN2ViJyxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICAgIDxEeW5hbWljRm9ybU1lc3NhZ2VcbiAgICAgICAgICAgICAgc2NoZW1hPXtwZW5kaW5nRm9ybS5zY2hlbWF9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXsoZGF0YSkgPT4gaGFuZGxlRm9ybVN1Ym1pdChkYXRhLCBwZW5kaW5nRm9ybS5pbmRleCl9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBoYW5kbGVGb3JtQ2FuY2VsKHBlbmRpbmdGb3JtLmluZGV4KX1cbiAgICAgICAgICAgICAgaXNTdWJtaXR0aW5nPXtzdWJtaXR0aW5nRm9ybUluZGV4ID09PSBwZW5kaW5nRm9ybS5pbmRleH1cbiAgICAgICAgICAgICAgaXNTdWJtaXR0ZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgICAgZm9udEZhbWlseT17Zm9udEZhbWlseX1cbiAgICAgICAgICAgICAgdmFyaWFudD1cImZvb3RlclwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdhLWlucHV0LWRpc2NsYWltZXJcIiBzdHlsZT17ZGlzY2xhaW1lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6ICcxMDAlJywgbWluV2lkdGg6IDAgfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICAgIHt1c2VGaWxlICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2F0dGFjaEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8UGFwZXJjbGlwIHNpemU9ezIyfSBjb2xvcj1cIiM3NTc1NzVcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9e2FsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywnKSB8fCAnKi8qJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17dGV4dEFyZWFSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RleHRBcmVhU3R5bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2EtdGV4dGFyZWEtbm9zYlwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0VmFsdWUudHJpbSgpICE9PSAnJyB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwKSAmJiAhaXNBZ2VudFR5cGluZyAmJiAhaGFzUGVuZGluZ0Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJtaXRNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnB1dFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQgfHwgaGFzUGVuZGluZ0Zvcm19XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cmlnaHRBY3Rpb25Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge3VzZUF1ZGlvICYmIGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICBvblRyYW5zY3JpcHRpb249eyh0ZXh0OiBzdHJpbmcpID0+IHNldElucHV0VmFsdWUodGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e2Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleT17YXBpS2V5fVxuICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyAuLi5zZW5kQnV0dG9uU3R5bGUsIC4uLihpc1NlbmREaXNhYmxlZCA/IHNlbmRCdXR0b25EaXNhYmxlZFN0eWxlIDoge30pIH19XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1NlbmREaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFycm93VXAgc2l6ZT17MTh9IHN0cm9rZVdpZHRoPXszfSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdhLWlucHV0LWRpc2NsYWltZXJcIiBzdHlsZT17ZGlzY2xhaW1lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1PdmVybGF5U3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtRGlhbG9nU3R5bGV9PlxuICAgICAgICAgIDxoMyBzdHlsZT17e2ZvbnRGYW1pbHksIG1hcmdpblRvcDogMH19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24udGl0bGUnKX08L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLm1lc3NhZ2UnKX08L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybUJ1dHRvbnNTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7Li4uY29uZmlybUJ1dHRvblN0eWxlKGZhbHNlKSwgY29sb3I6IHRleHRDb2xvcn19IG9uQ2xpY2s9e2hhbmRsZUNhbmNlbFJlc2V0fT57dCgnYnV0dG9ucy5jYW5jZWwnKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2NvbmZpcm1CdXR0b25TdHlsZSh0cnVlKX0gb25DbGljaz17aGFuZGxlQ29uZmlybVJlc2V0fT57dCgnYnV0dG9ucy5yZXNldCcpfTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xuXG4gIGlmIChtb2RlID09PSAnZmxvYXRpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHshaXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxDaGF0QnViYmxlXG4gICAgICAgICAgICBzaG93Q2hhdD17aXNGbG9hdGluZ09wZW59XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgc3R5bGU9e2dldFBvc2l0aW9uU3R5bGVzKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZsb2F0aW5nXCI+XG4gICAgICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZnVsbHNjcmVlblwiPlxuICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSk7XG59O1xuIl19