genassist-chat-react 1.0.38 → 1.0.39

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.
@@ -45,6 +45,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
45
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
46
  }
47
47
  };
48
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ };
48
57
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
49
58
  import React, { useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react';
50
59
  import { ChatMessageComponent } from './ChatMessage';
@@ -55,6 +64,8 @@ import { useThinkingAnimation } from '../hooks/useThinkingAnimation';
55
64
  import { useViewportManager } from '../hooks/useViewportManager';
56
65
  import { useFileAttachments } from '../hooks/useFileAttachments';
57
66
  import { VoiceInput } from './VoiceInput';
67
+ import { LiveCallControl } from './LiveCallControl';
68
+ import { useLiveVoice as useLiveVoiceSession } from '../hooks/useLiveVoice';
58
69
  import { AudioService } from '../services/audioService';
59
70
  import { Paperclip, MoreVertical, RefreshCw, Globe, X, ArrowUp, Maximize2, Minimize2, AlertCircle } from 'lucide-react';
60
71
  import { ChatBubble } from './ChatBubble';
@@ -63,8 +74,10 @@ import { LanguageSelector } from './LanguageSelector';
63
74
  import chatLogo from '../assets/chat-logo.png';
64
75
  import { resolveLanguage, mergeTranslations, getTranslationString, getTranslationsForLanguage, } from '../utils/i18n';
65
76
  import { GoogleReCaptcha, GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';
66
- import { resolveTheme, hexToRgba, getContainerStyle, getHeaderStyle, logoContainerStyle, logoStyle, headerTitleContainerStyle, getHeaderTitleStyle, getHeaderSubtitleStyle, menuButtonStyle, getMenuPopupStyle, getMenuItemStyle, chatContainerStyle, inputContainerStyle, inputWrapperStyle, getTextAreaStyle, attachButtonStyle, getSendButtonStyle, sendButtonDisabledStyle, rightActionContainerStyle, getPossibleQueriesContainerStyle, getQueryButtonStyle, getConfirmOverlayStyle, getConfirmDialogStyle, confirmButtonsStyle, getConfirmButtonStyle, getContentCardStyle, getDisclaimerStyle, getPositionStyles, getFloatingContainerStyle, CSS_KEYFRAMES, } from '../styles/genAgentChatStyles';
77
+ import { resolveTheme, hexToRgba, getContainerStyle, getHeaderStyle, logoContainerStyle, logoStyle, headerTitleContainerStyle, getHeaderTitleStyle, getHeaderSubtitleStyle, menuButtonStyle, getMenuPopupStyle, getMenuItemStyle, chatContainerStyle, inputContainerStyle, inputWrapperStyle, getTextAreaStyle, getLiveVoiceHintStyle, attachButtonStyle, getSendButtonStyle, sendButtonDisabledStyle, rightActionContainerStyle, getPossibleQueriesContainerStyle, getQueryButtonStyle, getConfirmOverlayStyle, getConfirmDialogStyle, confirmButtonsStyle, getConfirmButtonStyle, getContentCardStyle, getDisclaimerStyle, getPositionStyles, getFloatingContainerStyle, CSS_KEYFRAMES, } from '../styles/genAgentChatStyles';
67
78
  var SHOW_CHAT_LANGUAGE_SELECTOR = true;
79
+ /** Current time in epoch seconds (the timestamp format ChatMessage expects). */
80
+ var nowSec = function () { return Math.floor(Date.now() / 1000); };
68
81
  export var GenAgentChat = function (_a) {
69
82
  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;
70
83
  // Language selection state (with localStorage persistence)
@@ -132,7 +145,7 @@ export var GenAgentChat = function (_a) {
132
145
  serverUnavailableContactUrl: serverUnavailableContactUrl,
133
146
  serverUnavailableContactLabel: serverUnavailableContactLabel,
134
147
  onConfigLoaded: onConfigLoaded,
135
- }), messages = _1.messages, isLoading = _1.isLoading, sendMessage = _1.sendMessage, sendAudioMessage = _1.sendAudioMessage, uploadFile = _1.uploadFile, resetConversation = _1.resetConversation, startConversation = _1.startConversation, conversationId = _1.conversationId, guestToken = _1.guestToken, possibleQueries = _1.possibleQueries, isFinalized = _1.isFinalized, isAgentTyping = _1.isAgentTyping, addFeedback = _1.addFeedback, agentAvailableLanguages = _1.availableLanguages, welcomeTitle = _1.welcomeTitle, welcomeImageUrl = _1.welcomeImageUrl, welcomeMessage = _1.welcomeMessage, inputDisclaimerHtml = _1.inputDisclaimerHtml, thinkingPhrases = _1.thinkingPhrases, thinkingDelayMs = _1.thinkingDelayMs;
148
+ }), messages = _1.messages, isLoading = _1.isLoading, sendMessage = _1.sendMessage, sendAudioMessage = _1.sendAudioMessage, uploadFile = _1.uploadFile, resetConversation = _1.resetConversation, startConversation = _1.startConversation, conversationId = _1.conversationId, guestToken = _1.guestToken, possibleQueries = _1.possibleQueries, isFinalized = _1.isFinalized, isAgentTyping = _1.isAgentTyping, addFeedback = _1.addFeedback, agentAvailableLanguages = _1.availableLanguages, agentId = _1.agentId, agentLiveVoiceEnabled = _1.agentLiveVoiceEnabled, agentLiveVoiceReady = _1.agentLiveVoiceReady, welcomeTitle = _1.welcomeTitle, welcomeImageUrl = _1.welcomeImageUrl, welcomeMessage = _1.welcomeMessage, inputDisclaimerHtml = _1.inputDisclaimerHtml, thinkingPhrases = _1.thinkingPhrases, thinkingDelayMs = _1.thinkingDelayMs;
136
149
  var _2 = useThinkingAnimation({
137
150
  isAgentTyping: isAgentTyping,
138
151
  thinkingPhrases: thinkingPhrases,
@@ -377,11 +390,96 @@ export var GenAgentChat = function (_a) {
377
390
  }
378
391
  });
379
392
  }); };
393
+ // Neutral, user-facing notice shown when a live call can't start / fails. The
394
+ // message is already neutral (the backend never sends internal config detail), so
395
+ // it's safe for public widgets — it just avoids a confusing silent close.
396
+ var _6 = useState(null), liveVoiceNotice = _6[0], setLiveVoiceNotice = _6[1];
380
397
  var handleVoiceError = function (error) {
398
+ setLiveVoiceNotice(error.message || 'Voice is currently unavailable');
381
399
  if (onError) {
382
400
  onError(error);
383
401
  }
384
402
  };
403
+ // Voice-only mode is driven purely by the agent: it's on when the agent's
404
+ // workflow contains a Voice Agent node (auto-detected by the backend and
405
+ // surfaced through `agentLiveVoiceEnabled`). No integrator prop is involved.
406
+ var liveVoiceEnabled = agentLiveVoiceEnabled;
407
+ // Whether live voice can actually run (a Gemini provider with a key is configured).
408
+ // When false we keep voice-only mode but disable the call control with a neutral
409
+ // message — the specific reason stays server-side, never shown to public users.
410
+ var liveVoiceReady = agentLiveVoiceReady;
411
+ // Live (continuous) voice conversation against the agent's Voice Agent node.
412
+ // `liveCaption` is the in-progress turn (streams as you speak); `liveTurns` are
413
+ // completed turns kept locally so they stay on screen across turns. `createTime`
414
+ // is captured once per turn so the bubble timestamp doesn't jitter on re-render.
415
+ var _7 = useState({ user: '', agent: '', createTime: 0 }), liveCaption = _7[0], setLiveCaption = _7[1];
416
+ var _8 = useState([]), liveTurns = _8[0], setLiveTurns = _8[1];
417
+ var liveVoice = useLiveVoiceSession({
418
+ baseUrl: baseUrl,
419
+ apiKey: apiKey,
420
+ guestToken: guestToken,
421
+ tenant: tenant,
422
+ agentId: agentId,
423
+ conversationId: conversationId,
424
+ language: resolvedLanguage,
425
+ onError: handleVoiceError,
426
+ onInputTranscript: function (text) {
427
+ return setLiveCaption(function (c) { return (__assign(__assign({}, c), { user: c.user + text, createTime: c.createTime || nowSec() })); });
428
+ },
429
+ onOutputTranscript: function (text) {
430
+ return setLiveCaption(function (c) { return (__assign(__assign({}, c), { agent: c.agent + text, createTime: c.createTime || nowSec() })); });
431
+ },
432
+ onTurnComplete: function (turn) {
433
+ // Commit the finished turn so it stays visible; clear the in-progress caption.
434
+ setLiveTurns(function (prev) { return __spreadArray(__spreadArray([], prev, true), [{ user: turn.transcript, agent: turn.response, createTime: nowSec() }], false); });
435
+ setLiveCaption({ user: '', agent: '', createTime: 0 });
436
+ },
437
+ });
438
+ // Full conversation reset: new thread + cleared input/attachments/forms and any
439
+ // live-voice transcript. Shared by the reset-confirm dialog and the end-call button.
440
+ var performReset = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
441
+ return __generator(this, function (_a) {
442
+ switch (_a.label) {
443
+ case 0:
444
+ setInputValue('');
445
+ clearAttachments();
446
+ return [4 /*yield*/, resetConversation(reCaptchaTokenRef.current)];
447
+ case 1:
448
+ _a.sent();
449
+ setSelectedFaqQuery(null);
450
+ setSubmittedForms(new Set());
451
+ setSubmittingFormIndex(null);
452
+ setLiveTurns([]);
453
+ return [2 /*return*/];
454
+ }
455
+ });
456
+ }); }, [clearAttachments, resetConversation]);
457
+ // Starting a fresh call clears the previous call's transcript bubbles + caption.
458
+ var startLiveCall = useCallback(function () {
459
+ setLiveVoiceNotice(null);
460
+ setLiveCaption({ user: '', agent: '', createTime: 0 });
461
+ setLiveTurns([]);
462
+ liveVoice.start();
463
+ }, [liveVoice]);
464
+ // Ending a call stops the audio stream and resets the conversation — same as the
465
+ // "reset conversation" action — so the next call starts from a clean thread.
466
+ var endLiveCall = useCallback(function () {
467
+ liveVoice.stop();
468
+ setLiveCaption({ user: '', agent: '', createTime: 0 });
469
+ void performReset();
470
+ }, [liveVoice, performReset]);
471
+ // Keep the live transcript in view as it grows (the scroll manager only reacts
472
+ // to committed chat messages, not these local live bubbles).
473
+ useEffect(function () {
474
+ if (!liveVoice.isActive)
475
+ return;
476
+ var el = chatContainerRef.current;
477
+ if (el)
478
+ el.scrollTop = el.scrollHeight;
479
+ }, [liveCaption, liveTurns, liveVoice.isActive, chatContainerRef]);
480
+ // Render a single live-voice bubble (committed turn or streaming caption) as an
481
+ // ordinary chat message, so it looks identical to text-mode bubbles.
482
+ var renderLiveBubble = function (speaker, text, createTime, key) { return (_jsx(ChatMessageComponent, { message: { create_time: createTime, start_time: 0, end_time: 0.01, speaker: speaker, text: text }, theme: theme, enableTypewriter: false, translations: translations, language: resolvedLanguage, agentName: agentName }, key)); };
385
483
  var playResponseAudio = function (text) { return __awaiter(void 0, void 0, void 0, function () {
386
484
  var audioBlob, error_6;
387
485
  return __generator(this, function (_a) {
@@ -417,14 +515,18 @@ export var GenAgentChat = function (_a) {
417
515
  return "".concat(baseUrl, "/api/conversations/").concat(conversationId, "/messages/").concat(messageId, "/audio");
418
516
  }, [baseUrl, conversationId]);
419
517
  var audioHeaders = useMemo(function () {
420
- var h = { 'x-api-key': apiKey };
518
+ var h = {};
519
+ if (guestToken) {
520
+ h['Authorization'] = "Bearer ".concat(guestToken);
521
+ }
522
+ else {
523
+ h['x-api-key'] = apiKey;
524
+ }
421
525
  if (tenant)
422
526
  h['x-tenant-id'] = tenant;
423
- if (guestToken)
424
- h['Authorization'] = "Bearer ".concat(guestToken);
425
527
  return h;
426
528
  }, [apiKey, tenant, guestToken]);
427
- var _6 = useState(null), autoPlayAudioMessageId = _6[0], setAutoPlayAudioMessageId = _6[1];
529
+ var _9 = useState(null), autoPlayAudioMessageId = _9[0], setAutoPlayAudioMessageId = _9[1];
428
530
  var prevMessageCountRef = useRef(0);
429
531
  var initialLoadDoneRef = useRef(false);
430
532
  React.useEffect(function () {
@@ -496,23 +598,12 @@ export var GenAgentChat = function (_a) {
496
598
  setShowMenu(false);
497
599
  setShowResetConfirm(true);
498
600
  };
499
- var handleConfirmReset = function () { return __awaiter(void 0, void 0, void 0, function () {
500
- return __generator(this, function (_a) {
501
- switch (_a.label) {
502
- case 0:
503
- setInputValue('');
504
- clearAttachments();
505
- return [4 /*yield*/, resetConversation(reCaptchaTokenRef.current)];
506
- case 1:
507
- _a.sent();
508
- setSelectedFaqQuery(null);
509
- setSubmittedForms(new Set());
510
- setSubmittingFormIndex(null);
511
- setShowResetConfirm(false);
512
- return [2 /*return*/];
513
- }
514
- });
515
- }); };
601
+ var handleConfirmReset = function () {
602
+ setShowResetConfirm(false);
603
+ // endLiveCall stops any active call and runs the full reset; harmless if no
604
+ // call is active, so both entry points share one code path.
605
+ endLiveCall();
606
+ };
516
607
  var handleCancelReset = function () {
517
608
  setShowResetConfirm(false);
518
609
  };
@@ -720,8 +811,23 @@ export var GenAgentChat = function (_a) {
720
811
  return (_jsx(ChatMessageComponent, { message: syntheticWelcome, theme: theme, isFirstMessage: true, isNextSameSpeaker: false, isPrevSameSpeaker: false, enableTypewriter: false, welcomeImageUrl: welcomeImageUrl || undefined, welcomeTitle: welcomeTitle || undefined, possibleQueries: possibleQueries, onQuickQuery: handleQueryClick, onQuickAction: handleQuickAction, translations: translations, language: resolvedLanguage, agentName: agentName, isAgentTyping: isAgentTyping }, "__synthetic_welcome__"));
721
812
  })(), (function () {
722
813
  var firstAgentIndex = messages.findIndex(function (m) { return m.speaker === 'agent'; });
814
+ // Live-voice turns are rendered locally (below) the moment they finish.
815
+ // Each is also persisted and broadcast back into `messages`; suppress that
816
+ // copy so a turn isn't shown twice (and never blinks as the two swap).
817
+ var liveTurnKeys = new Set();
818
+ for (var _i = 0, liveTurns_1 = liveTurns; _i < liveTurns_1.length; _i++) {
819
+ var turn = liveTurns_1[_i];
820
+ if (turn.user.trim())
821
+ liveTurnKeys.add("customer:".concat(turn.user.trim()));
822
+ if (turn.agent.trim())
823
+ liveTurnKeys.add("agent:".concat(turn.agent.trim()));
824
+ }
723
825
  var applyMessageFilter = function (message) {
724
- return message.type !== 'file';
826
+ if (message.type === 'file')
827
+ return false;
828
+ if (liveTurnKeys.has("".concat(message.speaker, ":").concat((message.text || '').trim())))
829
+ return false;
830
+ return true;
725
831
  };
726
832
  return messages.filter(applyMessageFilter).map(function (message, index) {
727
833
  if (message.type === 'form_request' && message.speaker === 'agent') {
@@ -758,7 +864,9 @@ export var GenAgentChat = function (_a) {
758
864
  willChange: 'transform, opacity',
759
865
  color: '#6b7280',
760
866
  fontSize: '13px',
761
- }, children: currentThinkingParts[currentThinkingPartIndex] || currentThinkingParts[currentThinkingParts.length - 1] }, "".concat(currentThinkingPartIndex, "-").concat(currentThinkingParts.join('|'))) })] })), _jsx("div", { ref: messagesEndRef })] }), showWelcomeBeforeStart && (function () {
867
+ }, children: currentThinkingParts[currentThinkingPartIndex] || currentThinkingParts[currentThinkingParts.length - 1] }, "".concat(currentThinkingPartIndex, "-").concat(currentThinkingParts.join('|'))) })] })), liveTurns.map(function (turn, i) { return (_jsxs(React.Fragment, { children: [turn.user.trim() !== '' && renderLiveBubble('customer', turn.user, turn.createTime), turn.agent.trim() !== '' && renderLiveBubble('agent', turn.agent, turn.createTime)] }, "live-turn-".concat(i))); }), liveVoice.isActive && liveCaption.user.trim() !== '' &&
868
+ renderLiveBubble('customer', liveCaption.user, liveCaption.createTime, '__live_caption_user__'), liveVoice.isActive && liveCaption.agent.trim() !== '' &&
869
+ renderLiveBubble('agent', liveCaption.agent, liveCaption.createTime, '__live_caption_agent__'), _jsx("div", { ref: messagesEndRef })] }), showWelcomeBeforeStart && (function () {
762
870
  var showingSyntheticWelcome = !hasUserMessages &&
763
871
  (messages.length === 0 || messages[0].speaker !== 'agent') &&
764
872
  (Boolean(welcomeTitle) || Boolean(welcomeImageUrl) || Boolean(welcomeMessage));
@@ -778,7 +886,24 @@ export var GenAgentChat = function (_a) {
778
886
  alignItems: 'center',
779
887
  gap: '8px',
780
888
  flexShrink: 0,
781
- }, role: "alert", children: [_jsx(AlertCircle, { size: 18, style: { flexShrink: 0 } }), _jsx("span", { children: fileErrorToast })] })), useFile && attachments.length > 0 && (_jsx("div", { style: { padding: '0 16px', marginBottom: '8px', display: 'flex', gap: '8px', flexWrap: 'wrap' }, children: attachments.map(function (att, index) { return (_jsx(AttachmentPreview, { file: att.file, onRemove: function () { return handleRemoveAttachment(att.file.name); }, uploading: uploadingFiles.has(att.file.name) }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { type: "button", style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '16px', cursor: 'pointer', fontFamily: fontFamily, fontSize: fontSize }), onClick: handleStartConversation, disabled: isLoading, children: t('buttons.startConversation') }) })) : pendingForm && formDisplay === 'footer' ? (_jsxs("div", { style: __assign(__assign({}, inputContainerStyle), { flexDirection: 'column', borderTop: '1px solid #e5e7eb' }), children: [_jsx(DynamicFormMessage, { schema: pendingForm.schema, onSubmit: function (data) { return handleFormSubmit(data, pendingForm.index); }, onCancel: function () { return handleFormCancel(pendingForm.index); }, isSubmitting: submittingFormIndex === pendingForm.index, isSubmitted: false, primaryColor: primaryColor, fontFamily: fontFamily, variant: "footer" }), agentDisclaimerContent && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: agentDisclaimerContent }))] })) : (_jsx("form", { onSubmit: handleSubmit, style: inputContainerStyle, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '100%', minWidth: 0 }, children: [_jsxs("div", { style: inputWrapperStyle, children: [useFile && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: attachButtonStyle, title: "Attach", onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: _jsx(Paperclip, { size: 22, color: "#757575" }) }), _jsx("input", { type: "file", multiple: true, ref: fileInputRef, style: { display: 'none' }, onChange: handleFileChange, accept: allowedExtensions.join(',') || '*/*' })] })), _jsx("textarea", { ref: textAreaRef, style: textAreaStyle, className: "ga-textarea-nosb", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, onKeyDown: function (e) {
889
+ }, role: "alert", children: [_jsx(AlertCircle, { size: 18, style: { flexShrink: 0 } }), _jsx("span", { children: fileErrorToast })] })), liveVoiceNotice && (_jsxs("div", { style: {
890
+ margin: '0 16px 8px',
891
+ padding: '10px 14px',
892
+ backgroundColor: '#FFF3E0',
893
+ color: '#E65100',
894
+ borderRadius: '12px',
895
+ fontSize: fontSize,
896
+ fontFamily: fontFamily,
897
+ display: 'flex',
898
+ alignItems: 'center',
899
+ gap: '8px',
900
+ flexShrink: 0,
901
+ }, role: "alert", children: [_jsx(AlertCircle, { size: 18, style: { flexShrink: 0 } }), _jsx("span", { children: liveVoiceNotice })] })), useFile && attachments.length > 0 && (_jsx("div", { style: { padding: '0 16px', marginBottom: '8px', display: 'flex', gap: '8px', flexWrap: 'wrap' }, children: attachments.map(function (att, index) { return (_jsx(AttachmentPreview, { file: att.file, onRemove: function () { return handleRemoveAttachment(att.file.name); }, uploading: uploadingFiles.has(att.file.name) }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { type: "button", style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '16px', cursor: 'pointer', fontFamily: fontFamily, fontSize: fontSize }), onClick: handleStartConversation, disabled: isLoading, children: t('buttons.startConversation') }) })) : pendingForm && formDisplay === 'footer' ? (_jsxs("div", { style: __assign(__assign({}, inputContainerStyle), { flexDirection: 'column', borderTop: '1px solid #e5e7eb' }), children: [_jsx(DynamicFormMessage, { schema: pendingForm.schema, onSubmit: function (data) { return handleFormSubmit(data, pendingForm.index); }, onCancel: function () { return handleFormCancel(pendingForm.index); }, isSubmitting: submittingFormIndex === pendingForm.index, isSubmitted: false, primaryColor: primaryColor, fontFamily: fontFamily, variant: "footer" }), agentDisclaimerContent && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: agentDisclaimerContent }))] })) : liveVoiceEnabled ? (
902
+ // Live voice mode is voice-only: no text box, attach, or send button —
903
+ // the only way to talk to the agent is to start a live call.
904
+ _jsx("div", { style: inputContainerStyle, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '100%', minWidth: 0 }, children: [_jsxs("div", { style: inputWrapperStyle, children: [_jsx("span", { style: getLiveVoiceHintStyle(textAreaFontSize, fontFamily), children: liveVoiceReady
905
+ ? t('liveVoice.tapToStart', 'Tap to start a voice conversation')
906
+ : t('liveVoice.unavailable', 'Voice is currently unavailable') }), _jsx(LiveCallControl, { status: liveVoice.status, isActive: liveVoice.isActive, onStart: startLiveCall, onStop: endLiveCall, theme: theme, disabled: !agentId || !liveVoiceReady })] }), agentDisclaimerContent && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: agentDisclaimerContent }))] }) })) : (_jsx("form", { onSubmit: handleSubmit, style: inputContainerStyle, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', width: '100%', minWidth: 0 }, children: [_jsxs("div", { style: inputWrapperStyle, children: [useFile && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: attachButtonStyle, title: "Attach", onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: _jsx(Paperclip, { size: 22, color: "#757575" }) }), _jsx("input", { type: "file", multiple: true, ref: fileInputRef, style: { display: 'none' }, onChange: handleFileChange, accept: allowedExtensions.join(',') || '*/*' })] })), _jsx("textarea", { ref: textAreaRef, style: textAreaStyle, className: "ga-textarea-nosb", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, onKeyDown: function (e) {
782
907
  if (e.key === 'Enter' && !e.shiftKey) {
783
908
  e.preventDefault();
784
909
  if ((inputValue.trim() !== '' || attachments.length > 0) && !isAgentTyping && !hasPendingForm) {
@@ -807,11 +932,11 @@ export var GenAgentChat = function (_a) {
807
932
  });
808
933
  }); }, onError: handleVoiceError, theme: theme }))] }), agentDisclaimerContent && (_jsx("div", { className: "ga-input-disclaimer", style: disclaimerStyle, children: agentDisclaimerContent }))] }) }))] }), _jsx("div", { style: confirmOverlayStyle, children: _jsxs("div", { style: confirmDialogStyle, children: [_jsx("h3", { style: { fontFamily: fontFamily, marginTop: 0 }, children: t('dialog.resetConversation.title') }), _jsx("p", { style: { fontFamily: fontFamily, fontSize: fontSize }, children: t('dialog.resetConversation.message') }), _jsxs("div", { style: confirmButtonsStyle, children: [_jsx("button", { style: __assign(__assign({}, getConfirmButtonStyle(false, themeParams)), { color: textColor }), onClick: handleCancelReset, children: t('buttons.cancel') }), _jsx("button", { style: getConfirmButtonStyle(true, themeParams), onClick: handleConfirmReset, children: t('buttons.reset') })] })] }) })] })); };
809
934
  if (mode === 'floating') {
810
- return (_jsxs(_Fragment, { children: [!isFloatingOpen && (_jsx(ChatBubble, { showChat: isFloatingOpen, onClick: function () { return setIsFloatingOpen(function (prev) { return !prev; }); }, primaryColor: primaryColor, style: getPositionStyles({ position: position, offsetX: offsetX, offsetY: offsetY }) })), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, "data-genassist-container": "floating", children: renderWithReCaptcha(renderChatComponent()) }))] }));
935
+ return (_jsxs(_Fragment, { children: [!isFloatingOpen && (_jsx(ChatBubble, { showChat: isFloatingOpen, onClick: function () { return setIsFloatingOpen(function (prev) { return !prev; }); }, primaryColor: primaryColor, style: getPositionStyles({ position: position, offsetX: offsetX, offsetY: offsetY }), chatBubbleIcon: theme === null || theme === void 0 ? void 0 : theme.chatBubbleIcon })), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, "data-genassist-container": "floating", children: renderWithReCaptcha(renderChatComponent()) }))] }));
811
936
  }
812
937
  if (mode === 'fullscreen') {
813
938
  return (_jsx("div", { style: floatingContainerStyle, "data-genassist-container": "fullscreen", children: renderWithReCaptcha(renderChatComponent()) }));
814
939
  }
815
940
  return renderWithReCaptcha(renderChatComponent());
816
941
  };
817
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxrQkFBa0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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QyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgdXNlU2Nyb2xsTWFuYWdlbWVudCB9IGZyb20gJy4uL2hvb2tzL3VzZVNjcm9sbE1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgdXNlVGhpbmtpbmdBbmltYXRpb24gfSBmcm9tICcuLi9ob29rcy91c2VUaGlua2luZ0FuaW1hdGlvbic7XG5pbXBvcnQgeyB1c2VWaWV3cG9ydE1hbmFnZXIgfSBmcm9tICcuLi9ob29rcy91c2VWaWV3cG9ydE1hbmFnZXInO1xuaW1wb3J0IHsgdXNlRmlsZUF0dGFjaG1lbnRzIH0gZnJvbSAnLi4vaG9va3MvdXNlRmlsZUF0dGFjaG1lbnRzJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcywgU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVm9pY2VJbnB1dCB9IGZyb20gJy4vVm9pY2VJbnB1dCc7XG5pbXBvcnQgeyBBdWRpb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdWRpb1NlcnZpY2UnO1xuaW1wb3J0IHsgUGFwZXJjbGlwLCBNb3JlVmVydGljYWwsIFJlZnJlc2hDdywgR2xvYmUsIFgsIEFycm93VXAsIE1heGltaXplMiwgTWluaW1pemUyLCBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9DaGF0QnViYmxlJztcbmltcG9ydCBEeW5hbWljRm9ybU1lc3NhZ2UgZnJvbSAnLi9EeW5hbWljRm9ybU1lc3NhZ2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZWxlY3RvciB9IGZyb20gJy4vTGFuZ3VhZ2VTZWxlY3Rvcic7XG5pbXBvcnQgY2hhdExvZ28gZnJvbSAnLi4vYXNzZXRzL2NoYXQtbG9nby5wbmcnO1xuXG5pbXBvcnQge1xuICByZXNvbHZlTGFuZ3VhZ2UsXG4gIG1lcmdlVHJhbnNsYXRpb25zLFxuICBnZXRUcmFuc2xhdGlvblN0cmluZyxcbiAgZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UsXG59IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgR29vZ2xlUmVDYXB0Y2hhLCBHb29nbGVSZUNhcHRjaGFQcm92aWRlciB9IGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMnO1xuXG5pbXBvcnQge1xuICByZXNvbHZlVGhlbWUsXG4gIGhleFRvUmdiYSxcbiAgZ2V0Q29udGFpbmVyU3R5bGUsXG4gIGdldEhlYWRlclN0eWxlLFxuICBsb2dvQ29udGFpbmVyU3R5bGUsXG4gIGxvZ29TdHlsZSxcbiAgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZSxcbiAgZ2V0SGVhZGVyVGl0bGVTdHlsZSxcbiAgZ2V0SGVhZGVyU3VidGl0bGVTdHlsZSxcbiAgbWVudUJ1dHRvblN0eWxlLFxuICBnZXRNZW51UG9wdXBTdHlsZSxcbiAgZ2V0TWVudUl0ZW1TdHlsZSxcbiAgY2hhdENvbnRhaW5lclN0eWxlLFxuICBpbnB1dENvbnRhaW5lclN0eWxlLFxuICBpbnB1dFdyYXBwZXJTdHlsZSxcbiAgZ2V0VGV4dEFyZWFTdHlsZSxcbiAgYXR0YWNoQnV0dG9uU3R5bGUsXG4gIGdldFNlbmRCdXR0b25TdHlsZSxcbiAgc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGUsXG4gIHJpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGUsXG4gIGdldFBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlLFxuICBnZXRRdWVyeUJ1dHRvblN0eWxlLFxuICBnZXRDb25maXJtT3ZlcmxheVN0eWxlLFxuICBnZXRDb25maXJtRGlhbG9nU3R5bGUsXG4gIGNvbmZpcm1CdXR0b25zU3R5bGUsXG4gIGdldENvbmZpcm1CdXR0b25TdHlsZSxcbiAgZ2V0Q29udGVudENhcmRTdHlsZSxcbiAgZ2V0RGlzY2xhaW1lclN0eWxlLFxuICBnZXRQb3NpdGlvblN0eWxlcyxcbiAgZ2V0RmxvYXRpbmdDb250YWluZXJTdHlsZSxcbiAgQ1NTX0tFWUZSQU1FUyxcbn0gZnJvbSAnLi4vc3R5bGVzL2dlbkFnZW50Q2hhdFN0eWxlcyc7XG5cbmNvbnN0IFNIT1dfQ0hBVF9MQU5HVUFHRV9TRUxFQ1RPUiA9IHRydWU7XG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIHdlYnNvY2tldFVybCxcbiAgYXBpS2V5LFxuICB0ZW5hbnQsXG4gIG1ldGFkYXRhLFxuICB1c2VXcyA9IHRydWUsXG4gIHVzZVBvbGwgPSBmYWxzZSxcbiAgb25FcnJvcixcbiAgb25UYWtlb3ZlcixcbiAgb25GaW5hbGl6ZSxcbiAgdGhlbWUsXG4gIGhlYWRlclRpdGxlID0gJ0dlbmFzc2lzdCcsXG4gIGRlc2NyaXB0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgYWdlbnROYW1lLFxuICBsb2dvVXJsLFxuICBtb2RlID0gJ2VtYmVkZGVkJyxcbiAgb25FeGl0RnVsbHNjcmVlbixcbiAgZmxvYXRpbmdDb25maWcgPSB7fSxcbiAgbGFuZ3VhZ2UsXG4gIHRyYW5zbGF0aW9uczogY3VzdG9tVHJhbnNsYXRpb25zLFxuICByZUNhcHRjaGFLZXksXG4gIHdpZGdldCA9IGZhbHNlLFxuICB1c2VBdWRpbyA9IGZhbHNlLFxuICB1c2VGaWxlID0gZmFsc2UsXG4gIG5vQ29sb3JBbmltYXRpb24gPSBmYWxzZSxcbiAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydCA9IHRydWUsXG4gIGFsbG93ZWRFeHRlbnNpb25zID0gW10sXG4gIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSxcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgZm9ybURpc3BsYXkgPSAnZm9vdGVyJyxcbiAgb25Db25maWdMb2FkZWQsXG59KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgLy8gTGFuZ3VhZ2Ugc2VsZWN0aW9uIHN0YXRlICh3aXRoIGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSlcbiAgY29uc3QgW3NlbGVjdGVkTGFuZ3VhZ2UsIHNldFNlbGVjdGVkTGFuZ3VhZ2VdID0gdXNlU3RhdGU8c3RyaW5nPigoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgY29uc3Qgc3RvcmVkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJykgOiBudWxsO1xuICAgIGlmIChzdG9yZWQpIHJldHVybiBzdG9yZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVMYW5ndWFnZSgpO1xuICB9KTtcblxuICAvLyBTYXZlIGxhbmd1YWdlIHRvIGxvY2FsU3RvcmFnZSB3aGVuIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWxhbmd1YWdlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJywgc2VsZWN0ZWRMYW5ndWFnZSk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRMYW5ndWFnZSwgbGFuZ3VhZ2VdKTtcblxuICAvLyBTdGF0ZSBmb3IgdHJhY2tpbmcgc2VsZWN0ZWQgRkFRIHF1ZXJ5XG4gIGNvbnN0IFtzZWxlY3RlZEZhcVF1ZXJ5LCBzZXRTZWxlY3RlZEZhcVF1ZXJ5XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFJlc29sdmUgbGFuZ3VhZ2U6IHByb3AgPiBzZWxlY3RlZCA+IGJyb3dzZXIgPiAnZW4nXG4gIGNvbnN0IHJlc29sdmVkTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybiBsYW5ndWFnZTtcbiAgICByZXR1cm4gc2VsZWN0ZWRMYW5ndWFnZSB8fCByZXNvbHZlTGFuZ3VhZ2UoKSB8fCAnZW4nO1xuICB9LCBbbGFuZ3VhZ2UsIHNlbGVjdGVkTGFuZ3VhZ2VdKTtcblxuICAvLyBNZXJnZSBsYW5ndWFnZSBhbmQgRkFRIHF1ZXJ5IGludG8gbWV0YWRhdGFcbiAgY29uc3QgbWV0YWRhdGFXaXRoTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG1ldGFkYXRhIHx8IHt9KSxcbiAgICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgICAgLi4uKHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDoge30pLFxuICAgIH07XG4gIH0sIFttZXRhZGF0YSwgcmVzb2x2ZWRMYW5ndWFnZSwgc2VsZWN0ZWRGYXFRdWVyeV0pO1xuXG4gIC8vIEdldCB0cmFuc2xhdGlvbnMgYmFzZWQgb24gcmVzb2x2ZWQgbGFuZ3VhZ2UsIHRoZW4gbWVyZ2Ugd2l0aCBjdXN0b20gdHJhbnNsYXRpb25zXG4gIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIGNvbnN0IHQgPSAoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb25TdHJpbmcoa2V5LCB0cmFuc2xhdGlvbnMsIGZhbGxiYWNrKTtcbiAgfTtcblxuICBjb25zdCBpbnB1dFBsYWNlaG9sZGVyID0gdXNlTWVtbygoKSA9PiBwbGFjZWhvbGRlciB8fCB0KCdpbnB1dC5wbGFjZWhvbGRlcicsICdBc2sgYSBxdWVzdGlvbicpLCBbcGxhY2Vob2xkZXIsIHRyYW5zbGF0aW9uc10pO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzaG93UmVzZXRDb25maXJtLCBzZXRTaG93UmVzZXRDb25maXJtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dNZW51LCBzZXRTaG93TWVudV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TGFuZ3VhZ2VEcm9wZG93biwgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd25dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNQbGF5aW5nQXVkaW8sIHNldElzUGxheWluZ0F1ZGlvXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzRmxvYXRpbmdPcGVuLCBzZXRJc0Zsb2F0aW5nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdWJtaXR0ZWRGb3Jtcywgc2V0U3VibWl0dGVkRm9ybXNdID0gdXNlU3RhdGU8U2V0PG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IFtzdWJtaXR0aW5nRm9ybUluZGV4LCBzZXRTdWJtaXR0aW5nRm9ybUluZGV4XSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgdGV4dEFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGhlYWRlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtoZWFkZXJIZWlnaHQsIHNldEhlYWRlckhlaWdodF0gPSB1c2VTdGF0ZSg1Nik7XG4gIGNvbnN0IFtzaG93QmFja2xpZ2h0LCBzZXRTaG93QmFja2xpZ2h0XSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHNlbmRBdWRpb01lc3NhZ2UsXG4gICAgdXBsb2FkRmlsZSxcbiAgICByZXNldENvbnZlcnNhdGlvbixcbiAgICBzdGFydENvbnZlcnNhdGlvbixcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBndWVzdFRva2VuLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgd2VsY29tZVRpdGxlLFxuICAgIHdlbGNvbWVJbWFnZVVybCxcbiAgICB3ZWxjb21lTWVzc2FnZSxcbiAgICBpbnB1dERpc2NsYWltZXJIdG1sLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIHdlYnNvY2tldFVybCxcbiAgICBhcGlLZXksXG4gICAgdGVuYW50LFxuICAgIG1ldGFkYXRhOiBtZXRhZGF0YVdpdGhMYW5ndWFnZSxcbiAgICB1c2VXcyxcbiAgICB1c2VQb2xsLFxuICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgIG9uRXJyb3IsXG4gICAgb25UYWtlb3ZlcixcbiAgICBvbkZpbmFsaXplLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gICAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwsXG4gICAgb25Db25maWdMb2FkZWQsXG4gIH0pO1xuXG4gIGNvbnN0IHsgY3VycmVudFRoaW5raW5nUGFydHMsIGN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCB9ID0gdXNlVGhpbmtpbmdBbmltYXRpb24oe1xuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgICB0cmFuc2xhdGlvbnMsXG4gIH0pO1xuXG4gIGNvbnN0IHsgbWVzc2FnZXNFbmRSZWYsIGNoYXRDb250YWluZXJSZWYgfSA9IHVzZVNjcm9sbE1hbmFnZW1lbnQoe1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgY3VycmVudFRoaW5raW5nUGFydEluZGV4LFxuICAgIGN1cnJlbnRUaGlua2luZ1BhcnRzTGVuZ3RoOiBjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGgsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaXNGbG9hdGluZ09wZW4sXG4gICAgbW9kZSxcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIHdpbmRvd1dpZHRoLFxuICAgIHdpbmRvd0hlaWdodCxcbiAgICBpc0Z1bGxzY3JlZW4sXG4gICAgaGFuZGxlRnVsbHNjcmVlblRvZ2dsZSxcbiAgfSA9IHVzZVZpZXdwb3J0TWFuYWdlcih7XG4gICAgbW9kZSxcbiAgICB3aWRnZXQsXG4gICAgaXNGbG9hdGluZ09wZW4sXG4gICAgc2hvd1Jlc2V0Q29uZmlybSxcbiAgICBzaG93TGFuZ3VhZ2VEcm9wZG93bixcbiAgICBzaG93TWVudSxcbiAgICBvbkV4aXRGdWxsc2NyZWVuLFxuICAgIHNldFNob3dSZXNldENvbmZpcm0sXG4gICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24sXG4gICAgc2V0U2hvd01lbnUsXG4gIH0pO1xuXG4gIGNvbnN0IHtcbiAgICBhdHRhY2htZW50cyxcbiAgICBzZXRBdHRhY2htZW50cyxcbiAgICB1cGxvYWRpbmdGaWxlcyxcbiAgICBmaWxlRXJyb3JUb2FzdCxcbiAgICBmaWxlSW5wdXRSZWYsXG4gICAgaGFuZGxlRmlsZUNoYW5nZSxcbiAgICBoYW5kbGVSZW1vdmVBdHRhY2htZW50LFxuICAgIGNsZWFyQXR0YWNobWVudHMsXG4gIH0gPSB1c2VGaWxlQXR0YWNobWVudHMoeyB1cGxvYWRGaWxlLCB0IH0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm47XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzKSB8fCBhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcCgobGFuZykgPT4gbGFuZy50b0xvd2VyQ2FzZSgpKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQuaW5jbHVkZXMoc2VsZWN0ZWRMYW5ndWFnZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShub3JtYWxpemVkWzBdKTtcbiAgICB9XG4gIH0sIFthZ2VudEF2YWlsYWJsZUxhbmd1YWdlcywgbGFuZ3VhZ2UsIHNlbGVjdGVkTGFuZ3VhZ2VdKTtcblxuICBjb25zdCBhdWRpb1NlcnZpY2UgPSB1c2VSZWY8QXVkaW9TZXJ2aWNlIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlQ2FwdGNoYVRva2VuUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBjb25zdCBoYXNVc2VyTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKG1lc3NhZ2UgPT4gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1ZGlvU2VydmljZS5jdXJyZW50ID0gbmV3IEF1ZGlvU2VydmljZSh7IGJhc2VVcmwsIHdlYnNvY2tldFVybCwgYXBpS2V5IH0pO1xuICB9LCBbYmFzZVVybCwgd2Vic29ja2V0VXJsLCBhcGlLZXldKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1ZGlvU2VydmljZS5jdXJyZW50Py5zZXRHdWVzdFRva2VuKGd1ZXN0VG9rZW4gPz8gbnVsbCk7XG4gIH0sIFtndWVzdFRva2VuXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nICYmICFpc0Zsb2F0aW5nT3Blbikge1xuICAgICAgc2V0SXNGbG9hdGluZ09wZW4odHJ1ZSk7XG4gICAgfVxuICB9LCBbbW9kZSwgaXNGbG9hdGluZ09wZW5dKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUhlYWRlckhlaWdodCA9ICgpID0+IHtcbiAgICAgIHNldEhlYWRlckhlaWdodChoZWFkZXJSZWYuY3VycmVudD8ub2Zmc2V0SGVpZ2h0IHx8IDU2KTtcbiAgICB9O1xuICAgIHVwZGF0ZUhlYWRlckhlaWdodCgpO1xuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHVwZGF0ZUhlYWRlckhlaWdodCgpKTtcbiAgICBpZiAoaGVhZGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaGVhZGVyUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldFNob3dCYWNrbGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBzZXRTaG93QmFja2xpZ2h0KGZhbHNlKSwgNDIwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW2lzQWdlbnRUeXBpbmddKTtcblxuICBjb25zdCBzdWJtaXRNZXNzYWdlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0VG9TZW5kID0gaW5wdXRWYWx1ZTtcbiAgICBjb25zdCBmaWxlc1RvVXBsb2FkID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5maWxlKTtcblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4dHJhTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgICAgaWYgKHNlbGVjdGVkRmFxUXVlcnkpIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5mYXFfcXVlcnkgPSBzZWxlY3RlZEZhcVF1ZXJ5O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNUb1VwbG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4dHJhTWV0YWRhdGEuYXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmF0dGFjaG1lbnQpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0VG9TZW5kLCBmaWxlc1RvVXBsb2FkLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGV4dEFyZWFSZWYuY3VycmVudD8uZm9jdXMoKSwgMCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IGFzeW5jIChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgYXdhaXQgc3VibWl0TWVzc2FnZSgpO1xuICB9O1xuXG4gIGNvbnN0IGdldEZvcm1Ob2RlSWQgPSAobWVzc2FnZUluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VzW21lc3NhZ2VJbmRleF07XG4gICAgaWYgKG1zZz8udHlwZSA9PT0gJ2Zvcm1fcmVxdWVzdCcgJiYgbXNnLnRleHQpIHtcbiAgICAgIHRyeSB7IHJldHVybiBKU09OLnBhcnNlKG1zZy50ZXh0KS5ub2RlX2lkOyB9IGNhdGNoIHsgLyogc2tpcCAqLyB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRm9ybVN1Ym1pdCA9IGFzeW5jIChmb3JtRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG1lc3NhZ2VJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHN1Ym1pdHRpbmdGb3JtSW5kZXggIT09IG51bGwgfHwgaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobWVzc2FnZUluZGV4KTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3VtbWFyeVRleHQgPSBPYmplY3QuZW50cmllcyhmb3JtRGF0YSlcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgY29uc3Qgbm9kZUlkID0gZ2V0Rm9ybU5vZGVJZChtZXNzYWdlSW5kZXgpO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2Uoc3VtbWFyeVRleHQsIFtdLCB7XG4gICAgICAgIGh1bWFuX2luX3RoZV9sb29wX2Zyb21fZm9ybTogZm9ybURhdGEsXG4gICAgICAgIC4uLihub2RlSWQgJiYgeyBodW1hbl9pbl90aGVfbG9vcF9ub2RlX2lkOiBub2RlSWQgfSksXG4gICAgICB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICAgIHNldFN1Ym1pdHRlZEZvcm1zKChwcmV2KSA9PiBuZXcgU2V0KHByZXYpLmFkZChtZXNzYWdlSW5kZXgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFN1Ym1pdHRpbmdGb3JtSW5kZXgobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZvcm1DYW5jZWwgPSBhc3luYyAobWVzc2FnZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoc3VibWl0dGluZ0Zvcm1JbmRleCAhPT0gbnVsbCB8fCBpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChtZXNzYWdlSW5kZXgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBnZXRGb3JtTm9kZUlkKG1lc3NhZ2VJbmRleCk7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSgnU2tpcHBlZCcsIFtdLCB7XG4gICAgICAgIGh1bWFuX2luX3RoZV9sb29wX2Zyb21fZm9ybToge30sXG4gICAgICAgIGh1bWFuX2luX3RoZV9sb29wX2NhbmNlbGxlZDogdHJ1ZSxcbiAgICAgICAgLi4uKG5vZGVJZCAmJiB7IGh1bWFuX2luX3RoZV9sb29wX25vZGVfaWQ6IG5vZGVJZCB9KSxcbiAgICAgIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgICAgc2V0U3VibWl0dGVkRm9ybXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKG1lc3NhZ2VJbmRleCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVpY2tBY3Rpb24gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCF0ZXh0LnRyaW0oKSkgcmV0dXJuO1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4dHJhTWV0YWRhdGEgPSBzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHQsIFtdLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlIHF1aWNrIGFjdGlvbiBlcnJvcnMgdG8gYXZvaWQgaW50ZXJydXB0aW5nIHRoZSBmbG93XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNjaGVkdWxlQ29uZmlybSA9IGFzeW5jIChzY2hlZHVsZTogU2NoZWR1bGVJdGVtKSA9PiB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGBTY2hlZHVsZSBjb25maXJtZWQgd2l0aCAke3NjaGVkdWxlLnJlc3RhdXJhbnRzLmxlbmd0aH0gcmVzdGF1cmFudHNgO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShzdW1tYXJ5LCBbXSwgeyBjb25maXJtU2NoZWR1bGU6IEpTT04uc3RyaW5naWZ5KHNjaGVkdWxlKSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVZvaWNlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwbGF5UmVzcG9uc2VBdWRpbyA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWF1ZGlvU2VydmljZS5jdXJyZW50IHx8IGlzUGxheWluZ0F1ZGlvKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8odHJ1ZSk7XG4gICAgICBjb25zdCBhdWRpb0Jsb2IgPSBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC50ZXh0VG9TcGVlY2godGV4dCk7XG4gICAgICBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC5wbGF5QXVkaW8oYXVkaW9CbG9iKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXVkaW9VcmxCdWlsZGVyID0gdXNlQ2FsbGJhY2soKG1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9hdWRpb2A7XG4gIH0sIFtiYXNlVXJsLCBjb252ZXJzYXRpb25JZF0pO1xuXG4gIGNvbnN0IGF1ZGlvSGVhZGVycyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGg6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7ICd4LWFwaS1rZXknOiBhcGlLZXkgfTtcbiAgICBpZiAodGVuYW50KSBoWyd4LXRlbmFudC1pZCddID0gdGVuYW50O1xuICAgIGlmIChndWVzdFRva2VuKSBoWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Z3Vlc3RUb2tlbn1gO1xuICAgIHJldHVybiBoO1xuICB9LCBbYXBpS2V5LCB0ZW5hbnQsIGd1ZXN0VG9rZW5dKTtcblxuICBjb25zdCBbYXV0b1BsYXlBdWRpb01lc3NhZ2VJZCwgc2V0QXV0b1BsYXlBdWRpb01lc3NhZ2VJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcHJldk1lc3NhZ2VDb3VudFJlZiA9IHVzZVJlZjxudW1iZXI+KDApO1xuICBjb25zdCBpbml0aWFsTG9hZERvbmVSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghdXNlQXVkaW8gfHwgIW1lc3NhZ2VzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IHByZXZDb3VudCA9IHByZXZNZXNzYWdlQ291bnRSZWYuY3VycmVudDtcbiAgICBwcmV2TWVzc2FnZUNvdW50UmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGg7XG4gICAgaWYgKCFpbml0aWFsTG9hZERvbmVSZWYuY3VycmVudCkge1xuICAgICAgaW5pdGlhbExvYWREb25lUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZXMubGVuZ3RoIDw9IHByZXZDb3VudCkgcmV0dXJuO1xuICAgIGNvbnN0IGxhc3QgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXTtcbiAgICBpZiAobGFzdC5zcGVha2VyID09PSAnYWdlbnQnICYmIGxhc3QudHlwZSA9PT0gJ2F1ZGlvJyAmJiBsYXN0Lm1lc3NhZ2VfaWQpIHtcbiAgICAgIHNldEF1dG9QbGF5QXVkaW9NZXNzYWdlSWQobGFzdC5tZXNzYWdlX2lkKTtcbiAgICB9XG4gIH0sIFttZXNzYWdlcywgdXNlQXVkaW9dKTtcblxuICBjb25zdCBoYW5kbGVRdWVyeUNsaWNrID0gYXN5bmMgKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZyB8fCBpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIHNldFNlbGVjdGVkRmFxUXVlcnkocXVlcnkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHF1ZXJ5LCBbXSwgeyBmYXFfcXVlcnk6IHF1ZXJ5IH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3RhcnRDb252ZXJzYXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgY2xlYXJBdHRhY2htZW50cygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyBjb252ZXJzYXRpb24nLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShwcmV2ID0+ICFwcmV2KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldENsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1SZXNldCA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBjbGVhckF0dGFjaG1lbnRzKCk7XG5cbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KG51bGwpO1xuICAgIHNldFN1Ym1pdHRlZEZvcm1zKG5ldyBTZXQoKSk7XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDYW5jZWxSZXNldCA9ICgpID0+IHtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVMYW5ndWFnZUNoYW5nZSA9IChsYW5nOiBzdHJpbmcpID0+IHtcbiAgICBzZXRTZWxlY3RlZExhbmd1YWdlKGxhbmcpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlQ2FwdGNoYVZlcmlmeSA9IHVzZUNhbGxiYWNrKCh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCA9IHRva2VuO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgYWxsTGFuZ3VhZ2VzID0gW1xuICAgIHsgY29kZTogJ2VuJywgbmFtZTogJ0VuZ2xpc2gnIH0sXG4gICAgeyBjb2RlOiAnZXMnLCBuYW1lOiAnRXNwYcOxb2wnIH0sXG4gICAgeyBjb2RlOiAnZnInLCBuYW1lOiAnRnJhbsOnYWlzJyB9LFxuICAgIHsgY29kZTogJ2RlJywgbmFtZTogJ0RldXRzY2gnIH0sXG4gICAgeyBjb2RlOiAnaXQnLCBuYW1lOiAnSXRhbGlhbm8nIH0sXG4gICAgeyBjb2RlOiAncHQnLCBuYW1lOiAnUG9ydHVndcOqcycgfSxcbiAgICB7IGNvZGU6ICd6aCcsIG5hbWU6ICfkuK3mlocnIH0sXG4gIF07XG4gIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzKSkge1xuICAgICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQoXG4gICAgICAgIGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcCgobGFuZykgPT4gbGFuZy50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWxsTGFuZ3VhZ2VzLmZpbHRlcigobGFuZykgPT4gYWxsb3dlZC5oYXMobGFuZy5jb2RlKSk7XG4gICAgfVxuICAgIHJldHVybiBhbGxMYW5ndWFnZXM7XG4gIH0sIFthZ2VudEF2YWlsYWJsZUxhbmd1YWdlc10pO1xuICBjb25zdCBoYXNMYW5ndWFnZU9wdGlvbnMgPSBhdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoID4gMDtcblxuICAvLyBSZXNvbHZlIHRoZW1lIHZhbHVlc1xuICBjb25zdCB0aGVtZVBhcmFtcyA9IHJlc29sdmVUaGVtZSh0aGVtZSk7XG4gIGNvbnN0IHsgcHJpbWFyeUNvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsIHRleHRDb2xvciwgZm9udEZhbWlseSwgZm9udFNpemUgfSA9IHRoZW1lUGFyYW1zO1xuICBjb25zdCBmb250U2l6ZU51bWJlciA9IHR5cGVvZiBmb250U2l6ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChmb250U2l6ZSwgMTApIDogKHR5cGVvZiBmb250U2l6ZSA9PT0gJ251bWJlcicgPyBmb250U2l6ZSA6IDE0KTtcblxuICBjb25zdCBwb3NpdGlvbiA9IGZsb2F0aW5nQ29uZmlnLnBvc2l0aW9uIHx8ICdib3R0b20tcmlnaHQnO1xuICBjb25zdCBvZmZzZXQgPSBmbG9hdGluZ0NvbmZpZy5vZmZzZXQgfHwgeyB4OiAyMCwgeTogMjAgfTtcbiAgY29uc3Qgb2Zmc2V0WCA9IG9mZnNldC54IHx8IDIwO1xuICBjb25zdCBvZmZzZXRZID0gb2Zmc2V0LnkgfHwgMjA7XG5cbiAgY29uc3QgaXNGbG9hdGluZ0RvY2tlZCA9IG1vZGUgPT09ICdmbG9hdGluZycgJiYgIWlzRnVsbHNjcmVlbjtcblxuICAvLyBDb21wdXRlZCBzdHlsZXNcbiAgY29uc3QgY29udGFpbmVyU3R5bGUgPSBnZXRDb250YWluZXJTdHlsZSh7IGlzRnVsbHNjcmVlbiwgaXNGbG9hdGluZ0RvY2tlZCwgd2luZG93V2lkdGgsIHQ6IHRoZW1lUGFyYW1zIH0pO1xuICBjb25zdCBoZWFkZXJTdHlsZSA9IGdldEhlYWRlclN0eWxlKHRoZW1lUGFyYW1zKTtcbiAgY29uc3QgaGVhZGVyVGl0bGVTdHlsZSA9IGdldEhlYWRlclRpdGxlU3R5bGUoZm9udEZhbWlseSk7XG4gIGNvbnN0IGhlYWRlclN1YnRpdGxlU3R5bGUgPSBnZXRIZWFkZXJTdWJ0aXRsZVN0eWxlKGZvbnRGYW1pbHkpO1xuICBjb25zdCBtZW51UG9wdXBTdHlsZSA9IGdldE1lbnVQb3B1cFN0eWxlKGJhY2tncm91bmRDb2xvcik7XG4gIGNvbnN0IG1lbnVJdGVtU3R5bGUgPSBnZXRNZW51SXRlbVN0eWxlKHRoZW1lUGFyYW1zKTtcbiAgY29uc3QgY29udGVudENhcmRTdHlsZSA9IGdldENvbnRlbnRDYXJkU3R5bGUoYmFja2dyb3VuZENvbG9yKTtcbiAgY29uc3Qgc2VuZEJ1dHRvblN0eWxlID0gZ2V0U2VuZEJ1dHRvblN0eWxlKHByaW1hcnlDb2xvcik7XG4gIGNvbnN0IHBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlID0gZ2V0UG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGUoZm9udEZhbWlseSk7XG4gIGNvbnN0IHF1ZXJ5QnV0dG9uU3R5bGUgPSBnZXRRdWVyeUJ1dHRvblN0eWxlKHRoZW1lUGFyYW1zKTtcbiAgY29uc3QgY29uZmlybU92ZXJsYXlTdHlsZSA9IGdldENvbmZpcm1PdmVybGF5U3R5bGUoc2hvd1Jlc2V0Q29uZmlybSk7XG4gIGNvbnN0IGNvbmZpcm1EaWFsb2dTdHlsZSA9IGdldENvbmZpcm1EaWFsb2dTdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGRpc2NsYWltZXJTdHlsZSA9IGdldERpc2NsYWltZXJTdHlsZShmb250RmFtaWx5KTtcblxuICBjb25zdCB0ZXh0QXJlYUZvbnRTaXplID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHdpbmRvd1dpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgKyAncHgnO1xuICAgIH1cbiAgICByZXR1cm4gZm9udFNpemU7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemUsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgdGV4dEFyZWFMaW5lSGVpZ2h0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc2l6ZSA9IHdpbmRvd1dpZHRoIDw9IDc2OCA/IE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgOiBmb250U2l6ZU51bWJlcjtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzaXplICogMS41KTtcbiAgfSwgW3dpbmRvd1dpZHRoLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB0ZXh0QXJlYUxpbmVIZWlnaHQgKiAzO1xuICB9LCBbdGV4dEFyZWFMaW5lSGVpZ2h0XSk7XG5cbiAgY29uc3QgdGV4dEFyZWFTdHlsZSA9IGdldFRleHRBcmVhU3R5bGUoe1xuICAgIHRleHRBcmVhRm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICB0ZXh0QXJlYUxpbmVIZWlnaHQsXG4gICAgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkLFxuICAgIHRleHRDb2xvcixcbiAgfSk7XG5cbiAgY29uc3QgaGFzUGVuZGluZ0Zvcm0gPSBtZXNzYWdlcy5zb21lKChtc2csIGlkeCkgPT4ge1xuICAgIGlmIChtc2cudHlwZSAhPT0gJ2Zvcm1fcmVxdWVzdCcgfHwgbXNnLnNwZWFrZXIgIT09ICdhZ2VudCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXN1Ym1pdHRlZEZvcm1zLmhhcyhpZHgpO1xuICB9KTtcblxuICBjb25zdCBwZW5kaW5nRm9ybSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgbXNnID0gbWVzc2FnZXNbaV07XG4gICAgICBpZiAobXNnLnR5cGUgPT09ICdmb3JtX3JlcXVlc3QnICYmIG1zZy5zcGVha2VyID09PSAnYWdlbnQnICYmICFzdWJtaXR0ZWRGb3Jtcy5oYXMoaSkpIHtcbiAgICAgICAgdHJ5IHsgcmV0dXJuIHsgc2NoZW1hOiBKU09OLnBhcnNlKG1zZy50ZXh0KSwgaW5kZXg6IGkgfTsgfVxuICAgICAgICBjYXRjaCB7IC8qIHNraXAgKi8gfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgW21lc3NhZ2VzLCBzdWJtaXR0ZWRGb3Jtc10pO1xuXG4gIGNvbnN0IGlzU2VuZERpc2FibGVkID0gKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHx8IGlzQWdlbnRUeXBpbmcgfHwgaGFzUGVuZGluZ0Zvcm07XG5cbiAgY29uc3QgYXV0b1Jlc2l6ZVRleHRBcmVhID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGV4dEFyZWFSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKGVsLnNjcm9sbEhlaWdodCwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkKTtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93WSA9IGVsLnNjcm9sbEhlaWdodCA+IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA/ICdhdXRvJyA6ICdoaWRkZW4nO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXV0b1Jlc2l6ZVRleHRBcmVhKCk7XG4gIH0sIFtpbnB1dFZhbHVlLCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWRdKTtcblxuICBjb25zdCBzaG93QWdlbnREaXNjbGFpbWVyID0gQm9vbGVhbihpbnB1dERpc2NsYWltZXJIdG1sKTtcbiAgY29uc3QgYWdlbnREaXNjbGFpbWVyQ29udGVudCA9IHNob3dBZ2VudERpc2NsYWltZXIgJiYgKFxuICAgIDxzcGFuIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaW5wdXREaXNjbGFpbWVySHRtbCEgfX0gLz5cbiAgKTtcblxuICBjb25zdCBmbG9hdGluZ0NvbnRhaW5lclN0eWxlID0gZ2V0RmxvYXRpbmdDb250YWluZXJTdHlsZSh7XG4gICAgbW9kZSxcbiAgICBpc0Z1bGxzY3JlZW4sXG4gICAgd2luZG93V2lkdGgsXG4gICAgd2luZG93SGVpZ2h0LFxuICAgIHBvc2l0aW9uLFxuICAgIG9mZnNldFgsXG4gICAgb2Zmc2V0WSxcbiAgfSk7XG5cbiAgY29uc3QgcmVuZGVyTGFuZ3VhZ2VTZWxlY3RvciA9ICgpID0+IHtcbiAgICBpZiAoIVNIT1dfQ0hBVF9MQU5HVUFHRV9TRUxFQ1RPUikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNMYW5ndWFnZU9wdGlvbnMgfHwgKGNvbnZlcnNhdGlvbklkICYmICFpc0ZpbmFsaXplZCkgfHwgbWVzc2FnZXMubGVuZ3RoID4gMCB8fCBoYXNVc2VyTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPExhbmd1YWdlU2VsZWN0b3JcbiAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzPXthdmFpbGFibGVMYW5ndWFnZXN9XG4gICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgIG9uTGFuZ3VhZ2VDaGFuZ2U9e2hhbmRsZUxhbmd1YWdlQ2hhbmdlfVxuICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlcldpdGhSZUNhcHRjaGEgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXJlQ2FwdGNoYUtleSkge1xuICAgICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiA8PntjaGlsZHJlbn08Lz47XG4gICAgfVxuXG4gICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICA8R29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgcmVDYXB0Y2hhS2V5PXtyZUNhcHRjaGFLZXkgfHwgJyd9PlxuICAgICAgICA8R29vZ2xlUmVDYXB0Y2hhXG4gICAgICAgICAgYWN0aW9uPVwiZ2VuYXNzaXN0X2NoYXRcIlxuICAgICAgICAgIG9uVmVyaWZ5PXtoYW5kbGVSZUNhcHRjaGFWZXJpZnl9XG4gICAgICAgICAgcmVmcmVzaFJlQ2FwdGNoYT17ZmFsc2V9XG4gICAgICAgIC8+XG4gICAgICAgIDw+e2NoaWxkcmVufTwvPlxuICAgICAgPC9Hb29nbGVSZUNhcHRjaGFQcm92aWRlcj5cbiAgICApO1xuICB9LCBbcmVDYXB0Y2hhS2V5LCBoYW5kbGVSZUNhcHRjaGFWZXJpZnldKTtcblxuICBjb25zdCByZW5kZXJDaGF0Q29tcG9uZW50ID0gKCkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1yb290PVwidHJ1ZVwiPlxuICAgICAgPHN0eWxlPntDU1NfS0VZRlJBTUVTfTwvc3R5bGU+XG4gICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdHlsZX0gcmVmPXtoZWFkZXJSZWZ9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtsb2dvQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIDxpbWcgc3JjPXtsb2dvVXJsPy50cmltKCkgfHwgY2hhdExvZ299IGFsdD1cIkxvZ29cIiBzdHlsZT17bG9nb1N0eWxlfSAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVTdHlsZX0+e2hlYWRlclRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3VidGl0bGVTdHlsZX0+XG4gICAgICAgICAgICAgIHtkZXNjcmlwdGlvbiA/PyB0KCdoZWFkZXIuc3VidGl0bGUnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVNZW51Q2xpY2t9XG4gICAgICAgICAgICB0aXRsZT17dCgnbWVudS50aXRsZScpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNb3JlVmVydGljYWwgc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge21vZGUgPT09ICdmbG9hdGluZycgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2UgY2hhdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxYIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHshbm9Db2xvckFuaW1hdGlvbiAmJiBzaG93QmFja2xpZ2h0ICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgaGVhZGVySGVpZ2h0IC0gMTQpLFxuICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgIG9wYWNpdHk6IGlzQWdlbnRUeXBpbmcgPyAxIDogMCxcbiAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDQyMG1zIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIHRvcDogNixcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgd2lkdGg6ICc3OCUnLFxuICAgICAgICAgICAgICBmaWx0ZXI6ICdibHVyKDIycHgpJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICAgICAgICBgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMCl9IDAlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMzUpfSAxNSUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC41NSl9IDUwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gODUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMCl9IDEwMCUpYCxcbiAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLWJhY2tsaWdodC1zd2VlcDIgMS4ycyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkgaW5maW5pdGUgYWx0ZXJuYXRlLCBnYS1iYWNrbGlnaHQtcHVsc2UgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTgsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge3Nob3dNZW51ICYmIChcbiAgICAgICAgPGRpdiByZWY9e21lbnVSZWZ9IHN0eWxlPXttZW51UG9wdXBTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlUmVzZXRDbGlja30+XG4gICAgICAgICAgICA8UmVmcmVzaEN3IHNpemU9ezE2fSAvPlxuICAgICAgICAgICAge3QoJ21lbnUucmVzZXRDb252ZXJzYXRpb24nKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bW9kZSAhPT0gJ2Z1bGxzY3JlZW4nICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZUZ1bGxzY3JlZW5Ub2dnbGV9PlxuICAgICAgICAgICAgICB7aXNGdWxsc2NyZWVuID8gPE1pbmltaXplMiBzaXplPXsxNn0gLz4gOiA8TWF4aW1pemUyIHNpemU9ezE2fSAvPn1cbiAgICAgICAgICAgICAge3QoJ21lbnUuZnVsbHNjcmVlbicpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aGFzTGFuZ3VhZ2VPcHRpb25zICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3sgLi4ubWVudUl0ZW1TdHlsZSwgcG9zaXRpb246ICdyZWxhdGl2ZScsIGJvcmRlckJvdHRvbTogJ25vbmUnIH19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bighc2hvd0xhbmd1YWdlRHJvcGRvd24pO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8R2xvYmUgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZsZXg6IDEgfX0+e3QoJ21lbnUubGFuZ3VhZ2UnKX08L3NwYW4+XG4gICAgICAgICAgICAgIHtzaG93TGFuZ3VhZ2VEcm9wZG93biAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6ICcxODBweCcsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogMTAwMSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcCgobGFuZywgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17bGFuZy5jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJlc29sdmVkTGFuZ3VhZ2UgPT09IGxhbmcuY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IGluZGV4IDwgYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCAtIDEgPyAnMXB4IHNvbGlkICNmMGYwZjAnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZExhbmd1YWdlICE9PSBsYW5nLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUxhbmd1YWdlQ2hhbmdlKGxhbmcuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtsYW5nLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbnRlbnRDYXJkU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjaGF0Q29udGFpbmVyU3R5bGV9IHJlZj17Y2hhdENvbnRhaW5lclJlZn0+XG4gICAgICAgICAge3JlbmRlckxhbmd1YWdlU2VsZWN0b3IoKX1cblxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUgPVxuICAgICAgICAgICAgICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ICYmXG4gICAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSlcbiAgICAgICAgICAgICAgJiYgY29udmVyc2F0aW9uSWQ7XG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bnRoZXRpY1dlbGNvbWU6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiAwLFxuICAgICAgICAgICAgICBlbmRfdGltZTogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogJ2FnZW50JyxcbiAgICAgICAgICAgICAgdGV4dDogd2VsY29tZU1lc3NhZ2UgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICBrZXk9XCJfX3N5bnRoZXRpY193ZWxjb21lX19cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U9e3N5bnRoZXRpY1dlbGNvbWV9XG4gICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17d2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17aGFuZGxlUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWdlbnRJbmRleCA9IG1lc3NhZ2VzLmZpbmRJbmRleChtID0+IG0uc3BlYWtlciA9PT0gJ2FnZW50Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcGx5TWVzc2FnZUZpbHRlciA9IChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UudHlwZSAhPT0gJ2ZpbGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKGFwcGx5TWVzc2FnZUZpbHRlcikubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybVNjaGVtYSA9IEpTT04ucGFyc2UobWVzc2FnZS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUGVuZGluZyA9ICFzdWJtaXR0ZWRGb3Jtcy5oYXMoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2luZGV4fSBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzg1JScsIG1hcmdpbkJvdHRvbTogJzhweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthZ2VudE5hbWUgfHwgJ0FnZW50J31cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB7Zm9ybURpc3BsYXkgPT09ICdpbmxpbmUnICYmIGlzUGVuZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxEeW5hbWljRm9ybU1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPXtmb3JtU2NoZW1hfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17KGRhdGEpID0+IGhhbmRsZUZvcm1TdWJtaXQoZGF0YSwgaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gaGFuZGxlRm9ybUNhbmNlbChpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VibWl0dGluZz17c3VibWl0dGluZ0Zvcm1JbmRleCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VibWl0dGVkPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk9e2ZvbnRGYW1pbHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2YzZjRmNicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybVNjaGVtYS5tZXNzYWdlIHx8ICdQbGVhc2UgZmlsbCB0aGUgZm9ybSBiZWxvdy4nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNQZW5kaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIGNvbG9yOiAnIzZiNzI4MCcsIG1hcmdpblRvcDogJzRweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxsIHRoZSBmb3JtIGJlbG93IHRvIGNvbnRpbnVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCByZW5kZXJpbmcgaWYgSlNPTiBwYXJzZSBmYWlsc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGlzTmV4dFNhbWVTcGVha2VyID0gaW5kZXggPCBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2VzW2luZGV4ICsgMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc1ByZXZTYW1lU3BlYWtlciA9IGluZGV4ID4gMCAmJiBtZXNzYWdlc1tpbmRleCAtIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNGaXJzdEFnZW50TWVzc2FnZSA9IGluZGV4ID09PSBmaXJzdEFnZW50SW5kZXggJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnICYmICFoYXNVc2VyTWVzc2FnZXM7XG4gICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBpc0ZpcnN0QWdlbnRNZXNzYWdlICYmIHdlbGNvbWVNZXNzYWdlXG4gICAgICAgICAgICAgICAgICA/IHsgLi4ubWVzc2FnZSwgdGV4dDogd2VsY29tZU1lc3NhZ2UgfVxuICAgICAgICAgICAgICAgICAgOiBtZXNzYWdlO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgbWVzc2FnZT17ZGlzcGxheU1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICBvblBsYXlBdWRpbz17bWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnID8gcGxheVJlc3BvbnNlQXVkaW8gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbz17aXNQbGF5aW5nQXVkaW99XG4gICAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17aXNGaXJzdEFnZW50TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtpc05leHRTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtpc1ByZXZTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2s9eyhtZXNzYWdlSWQsIHZhbHVlKSA9PiBhZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17aXNGaXJzdEFnZW50TWVzc2FnZSA/IHBvc3NpYmxlUXVlcmllcyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgb25TY2hlZHVsZUNvbmZpcm09e2hhbmRsZVNjaGVkdWxlQ29uZmlybX1cbiAgICAgICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgICBhdWRpb1VybEJ1aWxkZXI9e21lc3NhZ2UudHlwZSA9PT0gJ2F1ZGlvJyAmJiB1c2VBdWRpbyA/IGF1ZGlvVXJsQnVpbGRlciA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIGF1ZGlvSGVhZGVycz17bWVzc2FnZS50eXBlID09PSAnYXVkaW8nICYmIHVzZUF1ZGlvID8gYXVkaW9IZWFkZXJzIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgYXV0b1BsYXlBdWRpb01lc3NhZ2VJZD17YXV0b1BsYXlBdWRpb01lc3NhZ2VJZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7aXNBZ2VudFR5cGluZyAmJiBjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWF4V2lkdGg6ICc4MCUnIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcsIGNvbG9yOiAnIzAwMDAwMCcsIGZvbnRXZWlnaHQ6IDYwMCwgbWFyZ2luQm90dG9tOiA0IH19PnthZ2VudE5hbWUgfHwgdCgnbGFiZWxzLmFnZW50Jyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXh9LSR7Y3VycmVudFRoaW5raW5nUGFydHMuam9pbignfCcpfWB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS10aGluay1jaGFuZ2UgMjIwbXMgZWFzZScsXG4gICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydEluZGV4XSB8fCBjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggLSAxXX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgcmVmPXttZXNzYWdlc0VuZFJlZn0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzaG93V2VsY29tZUJlZm9yZVN0YXJ0ICYmICgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWUgPVxuICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgKEJvb2xlYW4od2VsY29tZVRpdGxlKSB8fCBCb29sZWFuKHdlbGNvbWVJbWFnZVVybCkgfHwgQm9vbGVhbih3ZWxjb21lTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgIXNob3dpbmdTeW50aGV0aWNXZWxjb21lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkoKSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17cG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcy5tYXAoKHF1ZXJ5LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzdHlsZT17cXVlcnlCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVRdWVyeUNsaWNrKHF1ZXJ5KX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cXVlcnl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAge2ZpbGVFcnJvclRvYXN0ICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBtYXJnaW46ICcwIDE2cHggOHB4JyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTRweCcsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkYzRTAnLFxuICAgICAgICAgICAgICBjb2xvcjogJyNFNjUxMDAnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGdhcDogJzhweCcsXG4gICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IHN0eWxlPXt7IGZsZXhTaHJpbms6IDAgfX0gLz5cbiAgICAgICAgICAgIDxzcGFuPntmaWxlRXJyb3JUb2FzdH08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAge3VzZUZpbGUgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4JywgbWFyZ2luQm90dG9tOiAnOHB4JywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8QXR0YWNobWVudFByZXZpZXdcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIGZpbGU9e2F0dC5maWxlfVxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmVBdHRhY2htZW50KGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7Li4uc2VuZEJ1dHRvblN0eWxlLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0OHB4JywgYm9yZGVyUmFkaXVzOiAnMTZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250RmFtaWx5LCBmb250U2l6ZX19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnYnV0dG9ucy5zdGFydENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBwZW5kaW5nRm9ybSAmJiBmb3JtRGlzcGxheSA9PT0gJ2Zvb3RlcicgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgLi4uaW5wdXRDb250YWluZXJTdHlsZSxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgYm9yZGVyVG9wOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgICAgICAgIH19PlxuICAgICAgICAgICAgPER5bmFtaWNGb3JtTWVzc2FnZVxuICAgICAgICAgICAgICBzY2hlbWE9e3BlbmRpbmdGb3JtLnNjaGVtYX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhkYXRhKSA9PiBoYW5kbGVGb3JtU3VibWl0KGRhdGEsIHBlbmRpbmdGb3JtLmluZGV4KX1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IGhhbmRsZUZvcm1DYW5jZWwocGVuZGluZ0Zvcm0uaW5kZXgpfVxuICAgICAgICAgICAgICBpc1N1Ym1pdHRpbmc9e3N1Ym1pdHRpbmdGb3JtSW5kZXggPT09IHBlbmRpbmdGb3JtLmluZGV4fVxuICAgICAgICAgICAgICBpc1N1Ym1pdHRlZD17ZmFsc2V9XG4gICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICBmb250RmFtaWx5PXtmb250RmFtaWx5fVxuICAgICAgICAgICAgICB2YXJpYW50PVwiZm9vdGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtaW5wdXQtZGlzY2xhaW1lclwiIHN0eWxlPXtkaXNjbGFpbWVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzEwMCUnLCBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0V3JhcHBlclN0eWxlfT5cbiAgICAgICAgICAgICAge3VzZUZpbGUgJiYgKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17YXR0YWNoQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKCl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQYXBlcmNsaXAgc2l6ZT17MjJ9IGNvbG9yPVwiIzc1NzU3NVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD17YWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCcpIHx8ICcqLyonfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgcmVmPXt0ZXh0QXJlYVJlZn1cbiAgICAgICAgICAgICAgICBzdHlsZT17dGV4dEFyZWFTdHlsZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJnYS10ZXh0YXJlYS1ub3NiXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaW5wdXRWYWx1ZS50cmltKCkgIT09ICcnIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDApICYmICFpc0FnZW50VHlwaW5nICYmICFoYXNQZW5kaW5nRm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2lucHV0UGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCB8fCBoYXNQZW5kaW5nRm9ybX1cbiAgICAgICAgICAgICAgICByb3dzPXsxfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtyaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7ISh1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyAuLi5zZW5kQnV0dG9uU3R5bGUsIC4uLihpc1NlbmREaXNhYmxlZCA/IHNlbmRCdXR0b25EaXNhYmxlZFN0eWxlIDoge30pIH19XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1NlbmREaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFycm93VXAgc2l6ZT17MTh9IHN0cm9rZVdpZHRoPXszfSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHt1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgb25BdWRpb1JlYWR5PXthc3luYyAoYmxvYjogQmxvYiwgZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZW5kQXVkaW9NZXNzYWdlKGJsb2IsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9yIGhhbmRsZWQgaW5zaWRlIHNlbmRBdWRpb01lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1BsYXlpbmdBdWRpbyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvbkVycm9yPXtoYW5kbGVWb2ljZUVycm9yfVxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdhLWlucHV0LWRpc2NsYWltZXJcIiBzdHlsZT17ZGlzY2xhaW1lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1PdmVybGF5U3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtRGlhbG9nU3R5bGV9PlxuICAgICAgICAgIDxoMyBzdHlsZT17e2ZvbnRGYW1pbHksIG1hcmdpblRvcDogMH19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24udGl0bGUnKX08L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLm1lc3NhZ2UnKX08L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybUJ1dHRvbnNTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7Li4uZ2V0Q29uZmlybUJ1dHRvblN0eWxlKGZhbHNlLCB0aGVtZVBhcmFtcyksIGNvbG9yOiB0ZXh0Q29sb3J9fSBvbkNsaWNrPXtoYW5kbGVDYW5jZWxSZXNldH0+e3QoJ2J1dHRvbnMuY2FuY2VsJyl9PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtnZXRDb25maXJtQnV0dG9uU3R5bGUodHJ1ZSwgdGhlbWVQYXJhbXMpfSBvbkNsaWNrPXtoYW5kbGVDb25maXJtUmVzZXR9Pnt0KCdidXR0b25zLnJlc2V0Jyl9PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgeyFpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPENoYXRCdWJibGVcbiAgICAgICAgICAgIHNob3dDaGF0PXtpc0Zsb2F0aW5nT3Blbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKHByZXYgPT4gIXByZXYpfVxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICBzdHlsZT17Z2V0UG9zaXRpb25TdHlsZXMoeyBwb3NpdGlvbiwgb2Zmc2V0WCwgb2Zmc2V0WSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIHtpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZmxvYXRpbmdcIj5cbiAgICAgICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtmbG9hdGluZ0NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1jb250YWluZXI9XCJmdWxsc2NyZWVuXCI+XG4gICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKTtcbn07XG4iXX0=
942
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7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bUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsSUFDQSxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUNMLGNBQUssS0FBSyxFQUFFLHNCQUFzQiw4QkFBMkIsWUFBWSxZQUN0RSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgdXNlU2Nyb2xsTWFuYWdlbWVudCB9IGZyb20gJy4uL2hvb2tzL3VzZVNjcm9sbE1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgdXNlVGhpbmtpbmdBbmltYXRpb24gfSBmcm9tICcuLi9ob29rcy91c2VUaGlua2luZ0FuaW1hdGlvbic7XG5pbXBvcnQgeyB1c2VWaWV3cG9ydE1hbmFnZXIgfSBmcm9tICcuLi9ob29rcy91c2VWaWV3cG9ydE1hbmFnZXInO1xuaW1wb3J0IHsgdXNlRmlsZUF0dGFjaG1lbnRzIH0gZnJvbSAnLi4vaG9va3MvdXNlRmlsZUF0dGFjaG1lbnRzJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcywgU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVm9pY2VJbnB1dCB9IGZyb20gJy4vVm9pY2VJbnB1dCc7XG5pbXBvcnQgeyBMaXZlQ2FsbENvbnRyb2wgfSBmcm9tICcuL0xpdmVDYWxsQ29udHJvbCc7XG5pbXBvcnQgeyB1c2VMaXZlVm9pY2UgYXMgdXNlTGl2ZVZvaWNlU2Vzc2lvbiB9IGZyb20gJy4uL2hvb2tzL3VzZUxpdmVWb2ljZSc7XG5pbXBvcnQgeyBBdWRpb1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdWRpb1NlcnZpY2UnO1xuaW1wb3J0IHsgUGFwZXJjbGlwLCBNb3JlVmVydGljYWwsIFJlZnJlc2hDdywgR2xvYmUsIFgsIEFycm93VXAsIE1heGltaXplMiwgTWluaW1pemUyLCBBbGVydENpcmNsZSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9DaGF0QnViYmxlJztcbmltcG9ydCBEeW5hbWljRm9ybU1lc3NhZ2UgZnJvbSAnLi9EeW5hbWljRm9ybU1lc3NhZ2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZWxlY3RvciB9IGZyb20gJy4vTGFuZ3VhZ2VTZWxlY3Rvcic7XG5pbXBvcnQgY2hhdExvZ28gZnJvbSAnLi4vYXNzZXRzL2NoYXQtbG9nby5wbmcnO1xuXG5pbXBvcnQge1xuICByZXNvbHZlTGFuZ3VhZ2UsXG4gIG1lcmdlVHJhbnNsYXRpb25zLFxuICBnZXRUcmFuc2xhdGlvblN0cmluZyxcbiAgZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UsXG59IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgR29vZ2xlUmVDYXB0Y2hhLCBHb29nbGVSZUNhcHRjaGFQcm92aWRlciB9IGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMnO1xuXG5pbXBvcnQge1xuICByZXNvbHZlVGhlbWUsXG4gIGhleFRvUmdiYSxcbiAgZ2V0Q29udGFpbmVyU3R5bGUsXG4gIGdldEhlYWRlclN0eWxlLFxuICBsb2dvQ29udGFpbmVyU3R5bGUsXG4gIGxvZ29TdHlsZSxcbiAgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZSxcbiAgZ2V0SGVhZGVyVGl0bGVTdHlsZSxcbiAgZ2V0SGVhZGVyU3VidGl0bGVTdHlsZSxcbiAgbWVudUJ1dHRvblN0eWxlLFxuICBnZXRNZW51UG9wdXBTdHlsZSxcbiAgZ2V0TWVudUl0ZW1TdHlsZSxcbiAgY2hhdENvbnRhaW5lclN0eWxlLFxuICBpbnB1dENvbnRhaW5lclN0eWxlLFxuICBpbnB1dFdyYXBwZXJTdHlsZSxcbiAgZ2V0VGV4dEFyZWFTdHlsZSxcbiAgZ2V0TGl2ZVZvaWNlSGludFN0eWxlLFxuICBhdHRhY2hCdXR0b25TdHlsZSxcbiAgZ2V0U2VuZEJ1dHRvblN0eWxlLFxuICBzZW5kQnV0dG9uRGlzYWJsZWRTdHlsZSxcbiAgcmlnaHRBY3Rpb25Db250YWluZXJTdHlsZSxcbiAgZ2V0UG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGUsXG4gIGdldFF1ZXJ5QnV0dG9uU3R5bGUsXG4gIGdldENvbmZpcm1PdmVybGF5U3R5bGUsXG4gIGdldENvbmZpcm1EaWFsb2dTdHlsZSxcbiAgY29uZmlybUJ1dHRvbnNTdHlsZSxcbiAgZ2V0Q29uZmlybUJ1dHRvblN0eWxlLFxuICBnZXRDb250ZW50Q2FyZFN0eWxlLFxuICBnZXREaXNjbGFpbWVyU3R5bGUsXG4gIGdldFBvc2l0aW9uU3R5bGVzLFxuICBnZXRGbG9hdGluZ0NvbnRhaW5lclN0eWxlLFxuICBDU1NfS0VZRlJBTUVTLFxufSBmcm9tICcuLi9zdHlsZXMvZ2VuQWdlbnRDaGF0U3R5bGVzJztcblxuY29uc3QgU0hPV19DSEFUX0xBTkdVQUdFX1NFTEVDVE9SID0gdHJ1ZTtcblxuLyoqIE9uZSBjb21wbGV0ZWQgKG9yIGluLXByb2dyZXNzKSBsaXZlLXZvaWNlIGV4Y2hhbmdlOiB3aGF0IHRoZSB1c2VyIHNhaWQgKyB0aGUgcmVwbHkuICovXG50eXBlIExpdmVUdXJuID0geyB1c2VyOiBzdHJpbmc7IGFnZW50OiBzdHJpbmc7IGNyZWF0ZVRpbWU6IG51bWJlciB9O1xuXG4vKiogQ3VycmVudCB0aW1lIGluIGVwb2NoIHNlY29uZHMgKHRoZSB0aW1lc3RhbXAgZm9ybWF0IENoYXRNZXNzYWdlIGV4cGVjdHMpLiAqL1xuY29uc3Qgbm93U2VjID0gKCkgPT4gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIHdlYnNvY2tldFVybCxcbiAgYXBpS2V5LFxuICB0ZW5hbnQsXG4gIG1ldGFkYXRhLFxuICB1c2VXcyA9IHRydWUsXG4gIHVzZVBvbGwgPSBmYWxzZSxcbiAgb25FcnJvcixcbiAgb25UYWtlb3ZlcixcbiAgb25GaW5hbGl6ZSxcbiAgdGhlbWUsXG4gIGhlYWRlclRpdGxlID0gJ0dlbmFzc2lzdCcsXG4gIGRlc2NyaXB0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgYWdlbnROYW1lLFxuICBsb2dvVXJsLFxuICBtb2RlID0gJ2VtYmVkZGVkJyxcbiAgb25FeGl0RnVsbHNjcmVlbixcbiAgZmxvYXRpbmdDb25maWcgPSB7fSxcbiAgbGFuZ3VhZ2UsXG4gIHRyYW5zbGF0aW9uczogY3VzdG9tVHJhbnNsYXRpb25zLFxuICByZUNhcHRjaGFLZXksXG4gIHdpZGdldCA9IGZhbHNlLFxuICB1c2VBdWRpbyA9IGZhbHNlLFxuICB1c2VGaWxlID0gZmFsc2UsXG4gIG5vQ29sb3JBbmltYXRpb24gPSBmYWxzZSxcbiAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydCA9IHRydWUsXG4gIGFsbG93ZWRFeHRlbnNpb25zID0gW10sXG4gIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSxcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgZm9ybURpc3BsYXkgPSAnZm9vdGVyJyxcbiAgb25Db25maWdMb2FkZWQsXG59KTogUmVhY3QuUmVhY3RFbGVtZW50ID0+IHtcbiAgLy8gTGFuZ3VhZ2Ugc2VsZWN0aW9uIHN0YXRlICh3aXRoIGxvY2FsU3RvcmFnZSBwZXJzaXN0ZW5jZSlcbiAgY29uc3QgW3NlbGVjdGVkTGFuZ3VhZ2UsIHNldFNlbGVjdGVkTGFuZ3VhZ2VdID0gdXNlU3RhdGU8c3RyaW5nPigoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgY29uc3Qgc3RvcmVkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJykgOiBudWxsO1xuICAgIGlmIChzdG9yZWQpIHJldHVybiBzdG9yZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVMYW5ndWFnZSgpO1xuICB9KTtcblxuICAvLyBTYXZlIGxhbmd1YWdlIHRvIGxvY2FsU3RvcmFnZSB3aGVuIGl0IGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIWxhbmd1YWdlKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ2VuYXNzaXN0X2xhbmd1YWdlJywgc2VsZWN0ZWRMYW5ndWFnZSk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRMYW5ndWFnZSwgbGFuZ3VhZ2VdKTtcblxuICAvLyBTdGF0ZSBmb3IgdHJhY2tpbmcgc2VsZWN0ZWQgRkFRIHF1ZXJ5XG4gIGNvbnN0IFtzZWxlY3RlZEZhcVF1ZXJ5LCBzZXRTZWxlY3RlZEZhcVF1ZXJ5XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIFJlc29sdmUgbGFuZ3VhZ2U6IHByb3AgPiBzZWxlY3RlZCA+IGJyb3dzZXIgPiAnZW4nXG4gIGNvbnN0IHJlc29sdmVkTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybiBsYW5ndWFnZTtcbiAgICByZXR1cm4gc2VsZWN0ZWRMYW5ndWFnZSB8fCByZXNvbHZlTGFuZ3VhZ2UoKSB8fCAnZW4nO1xuICB9LCBbbGFuZ3VhZ2UsIHNlbGVjdGVkTGFuZ3VhZ2VdKTtcblxuICAvLyBNZXJnZSBsYW5ndWFnZSBhbmQgRkFRIHF1ZXJ5IGludG8gbWV0YWRhdGFcbiAgY29uc3QgbWV0YWRhdGFXaXRoTGFuZ3VhZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG1ldGFkYXRhIHx8IHt9KSxcbiAgICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgICAgLi4uKHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDoge30pLFxuICAgIH07XG4gIH0sIFttZXRhZGF0YSwgcmVzb2x2ZWRMYW5ndWFnZSwgc2VsZWN0ZWRGYXFRdWVyeV0pO1xuXG4gIC8vIEdldCB0cmFuc2xhdGlvbnMgYmFzZWQgb24gcmVzb2x2ZWQgbGFuZ3VhZ2UsIHRoZW4gbWVyZ2Ugd2l0aCBjdXN0b20gdHJhbnNsYXRpb25zXG4gIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIGNvbnN0IHQgPSAoa2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gZ2V0VHJhbnNsYXRpb25TdHJpbmcoa2V5LCB0cmFuc2xhdGlvbnMsIGZhbGxiYWNrKTtcbiAgfTtcblxuICBjb25zdCBpbnB1dFBsYWNlaG9sZGVyID0gdXNlTWVtbygoKSA9PiBwbGFjZWhvbGRlciB8fCB0KCdpbnB1dC5wbGFjZWhvbGRlcicsICdBc2sgYSBxdWVzdGlvbicpLCBbcGxhY2Vob2xkZXIsIHRyYW5zbGF0aW9uc10pO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzaG93UmVzZXRDb25maXJtLCBzZXRTaG93UmVzZXRDb25maXJtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dNZW51LCBzZXRTaG93TWVudV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TGFuZ3VhZ2VEcm9wZG93biwgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd25dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNQbGF5aW5nQXVkaW8sIHNldElzUGxheWluZ0F1ZGlvXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzRmxvYXRpbmdPcGVuLCBzZXRJc0Zsb2F0aW5nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdWJtaXR0ZWRGb3Jtcywgc2V0U3VibWl0dGVkRm9ybXNdID0gdXNlU3RhdGU8U2V0PG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IFtzdWJtaXR0aW5nRm9ybUluZGV4LCBzZXRTdWJtaXR0aW5nRm9ybUluZGV4XSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgdGV4dEFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGhlYWRlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtoZWFkZXJIZWlnaHQsIHNldEhlYWRlckhlaWdodF0gPSB1c2VTdGF0ZSg1Nik7XG4gIGNvbnN0IFtzaG93QmFja2xpZ2h0LCBzZXRTaG93QmFja2xpZ2h0XSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHNlbmRBdWRpb01lc3NhZ2UsXG4gICAgdXBsb2FkRmlsZSxcbiAgICByZXNldENvbnZlcnNhdGlvbixcbiAgICBzdGFydENvbnZlcnNhdGlvbixcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBndWVzdFRva2VuLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIGF2YWlsYWJsZUxhbmd1YWdlczogYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgYWdlbnRJZCxcbiAgICBhZ2VudExpdmVWb2ljZUVuYWJsZWQsXG4gICAgYWdlbnRMaXZlVm9pY2VSZWFkeSxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIGlucHV0RGlzY2xhaW1lckh0bWwsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgd2Vic29ja2V0VXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIHVzZVBvbGwsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemUsXG4gICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCxcbiAgICBvbkNvbmZpZ0xvYWRlZCxcbiAgfSk7XG5cbiAgY29uc3QgeyBjdXJyZW50VGhpbmtpbmdQYXJ0cywgY3VycmVudFRoaW5raW5nUGFydEluZGV4IH0gPSB1c2VUaGlua2luZ0FuaW1hdGlvbih7XG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICB0aGlua2luZ1BocmFzZXMsXG4gICAgdGhpbmtpbmdEZWxheU1zLFxuICAgIHRyYW5zbGF0aW9ucyxcbiAgfSk7XG5cbiAgY29uc3QgeyBtZXNzYWdlc0VuZFJlZiwgY2hhdENvbnRhaW5lclJlZiB9ID0gdXNlU2Nyb2xsTWFuYWdlbWVudCh7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsXG4gICAgY3VycmVudFRoaW5raW5nUGFydHNMZW5ndGg6IGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBpc0Zsb2F0aW5nT3BlbixcbiAgICBtb2RlLFxuICB9KTtcblxuICBjb25zdCB7XG4gICAgd2luZG93V2lkdGgsXG4gICAgd2luZG93SGVpZ2h0LFxuICAgIGlzRnVsbHNjcmVlbixcbiAgICBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlLFxuICB9ID0gdXNlVmlld3BvcnRNYW5hZ2VyKHtcbiAgICBtb2RlLFxuICAgIHdpZGdldCxcbiAgICBpc0Zsb2F0aW5nT3BlbixcbiAgICBzaG93UmVzZXRDb25maXJtLFxuICAgIHNob3dMYW5ndWFnZURyb3Bkb3duLFxuICAgIHNob3dNZW51LFxuICAgIG9uRXhpdEZ1bGxzY3JlZW4sXG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSxcbiAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bixcbiAgICBzZXRTaG93TWVudSxcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIGF0dGFjaG1lbnRzLFxuICAgIHNldEF0dGFjaG1lbnRzLFxuICAgIHVwbG9hZGluZ0ZpbGVzLFxuICAgIGZpbGVFcnJvclRvYXN0LFxuICAgIGZpbGVJbnB1dFJlZixcbiAgICBoYW5kbGVGaWxlQ2hhbmdlLFxuICAgIGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQsXG4gICAgY2xlYXJBdHRhY2htZW50cyxcbiAgfSA9IHVzZUZpbGVBdHRhY2htZW50cyh7IHVwbG9hZEZpbGUsIHQgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybjtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMpIHx8IGFnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gYWdlbnRBdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nKSA9PiBsYW5nLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghbm9ybWFsaXplZC5pbmNsdWRlcyhzZWxlY3RlZExhbmd1YWdlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICBzZXRTZWxlY3RlZExhbmd1YWdlKG5vcm1hbGl6ZWRbMF0pO1xuICAgIH1cbiAgfSwgW2FnZW50QXZhaWxhYmxlTGFuZ3VhZ2VzLCBsYW5ndWFnZSwgc2VsZWN0ZWRMYW5ndWFnZV0pO1xuXG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVDYXB0Y2hhVG9rZW5SZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIGNvbnN0IGhhc1VzZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcicpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQgPSBuZXcgQXVkaW9TZXJ2aWNlKHsgYmFzZVVybCwgd2Vic29ja2V0VXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCB3ZWJzb2NrZXRVcmwsIGFwaUtleV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQ/LnNldEd1ZXN0VG9rZW4oZ3Vlc3RUb2tlbiA/PyBudWxsKTtcbiAgfSwgW2d1ZXN0VG9rZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicgJiYgIWlzRmxvYXRpbmdPcGVuKSB7XG4gICAgICBzZXRJc0Zsb2F0aW5nT3Blbih0cnVlKTtcbiAgICB9XG4gIH0sIFttb2RlLCBpc0Zsb2F0aW5nT3Blbl0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgc2V0SGVhZGVySGVpZ2h0KGhlYWRlclJlZi5jdXJyZW50Py5vZmZzZXRIZWlnaHQgfHwgNTYpO1xuICAgIH07XG4gICAgdXBkYXRlSGVhZGVySGVpZ2h0KCk7XG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdXBkYXRlSGVhZGVySGVpZ2h0KCkpO1xuICAgIGlmIChoZWFkZXJSZWYuY3VycmVudCkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShoZWFkZXJSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0U2hvd0JhY2tsaWdodCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dCYWNrbGlnaHQoZmFsc2UpLCA0MjApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9LCBbaXNBZ2VudFR5cGluZ10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIGNvbnN0IHRleHRUb1NlbmQgPSBpbnB1dFZhbHVlO1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpO1xuXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGYXFRdWVyeSkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmZhcV9xdWVyeSA9IHNlbGVjdGVkRmFxUXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlc1RvVXBsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQsIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0ZXh0QXJlYVJlZi5jdXJyZW50Py5mb2N1cygpLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCBzdWJtaXRNZXNzYWdlKCk7XG4gIH07XG5cbiAgY29uc3QgZ2V0Rm9ybU5vZGVJZCA9IChtZXNzYWdlSW5kZXg6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgbXNnID0gbWVzc2FnZXNbbWVzc2FnZUluZGV4XTtcbiAgICBpZiAobXNnPy50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtc2cudGV4dCkge1xuICAgICAgdHJ5IHsgcmV0dXJuIEpTT04ucGFyc2UobXNnLnRleHQpLm5vZGVfaWQ7IH0gY2F0Y2ggeyAvKiBza2lwICovIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGb3JtU3VibWl0ID0gYXN5bmMgKGZvcm1EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbWVzc2FnZUluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoc3VibWl0dGluZ0Zvcm1JbmRleCAhPT0gbnVsbCB8fCBpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChtZXNzYWdlSW5kZXgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdW1tYXJ5VGV4dCA9IE9iamVjdC5lbnRyaWVzKGZvcm1EYXRhKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICBjb25zdCBub2RlSWQgPSBnZXRGb3JtTm9kZUlkKG1lc3NhZ2VJbmRleCk7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShzdW1tYXJ5VGV4dCwgW10sIHtcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfZnJvbV9mb3JtOiBmb3JtRGF0YSxcbiAgICAgICAgLi4uKG5vZGVJZCAmJiB7IGh1bWFuX2luX3RoZV9sb29wX25vZGVfaWQ6IG5vZGVJZCB9KSxcbiAgICAgIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgICAgc2V0U3VibWl0dGVkRm9ybXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKG1lc3NhZ2VJbmRleCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRm9ybUNhbmNlbCA9IGFzeW5jIChtZXNzYWdlSW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGlmIChzdWJtaXR0aW5nRm9ybUluZGV4ICE9PSBudWxsIHx8IGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG1lc3NhZ2VJbmRleCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGdldEZvcm1Ob2RlSWQobWVzc2FnZUluZGV4KTtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKCdTa2lwcGVkJywgW10sIHtcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfZnJvbV9mb3JtOiB7fSxcbiAgICAgICAgaHVtYW5faW5fdGhlX2xvb3BfY2FuY2VsbGVkOiB0cnVlLFxuICAgICAgICAuLi4obm9kZUlkICYmIHsgaHVtYW5faW5fdGhlX2xvb3Bfbm9kZV9pZDogbm9kZUlkIH0pLFxuICAgICAgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgICBzZXRTdWJtaXR0ZWRGb3JtcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQobWVzc2FnZUluZGV4KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRTdWJtaXR0aW5nRm9ybUluZGV4KG51bGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVRdWlja0FjdGlvbiA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXRleHQudHJpbSgpKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YSA9IHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDogdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dCwgW10sIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmUgcXVpY2sgYWN0aW9uIGVycm9ycyB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgdGhlIGZsb3dcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2NoZWR1bGVDb25maXJtID0gYXN5bmMgKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYFNjaGVkdWxlIGNvbmZpcm1lZCB3aXRoICR7c2NoZWR1bGUucmVzdGF1cmFudHMubGVuZ3RofSByZXN0YXVyYW50c2A7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnksIFtdLCB7IGNvbmZpcm1TY2hlZHVsZTogSlNPTi5zdHJpbmdpZnkoc2NoZWR1bGUpIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgLy8gTmV1dHJhbCwgdXNlci1mYWNpbmcgbm90aWNlIHNob3duIHdoZW4gYSBsaXZlIGNhbGwgY2FuJ3Qgc3RhcnQgLyBmYWlscy4gVGhlXG4gIC8vIG1lc3NhZ2UgaXMgYWxyZWFkeSBuZXV0cmFsICh0aGUgYmFja2VuZCBuZXZlciBzZW5kcyBpbnRlcm5hbCBjb25maWcgZGV0YWlsKSwgc29cbiAgLy8gaXQncyBzYWZlIGZvciBwdWJsaWMgd2lkZ2V0cyDigJQgaXQganVzdCBhdm9pZHMgYSBjb25mdXNpbmcgc2lsZW50IGNsb3NlLlxuICBjb25zdCBbbGl2ZVZvaWNlTm90aWNlLCBzZXRMaXZlVm9pY2VOb3RpY2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlVm9pY2VFcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZXRMaXZlVm9pY2VOb3RpY2UoZXJyb3IubWVzc2FnZSB8fCAnVm9pY2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlJyk7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICAvLyBWb2ljZS1vbmx5IG1vZGUgaXMgZHJpdmVuIHB1cmVseSBieSB0aGUgYWdlbnQ6IGl0J3Mgb24gd2hlbiB0aGUgYWdlbnQnc1xuICAvLyB3b3JrZmxvdyBjb250YWlucyBhIFZvaWNlIEFnZW50IG5vZGUgKGF1dG8tZGV0ZWN0ZWQgYnkgdGhlIGJhY2tlbmQgYW5kXG4gIC8vIHN1cmZhY2VkIHRocm91Z2ggYGFnZW50TGl2ZVZvaWNlRW5hYmxlZGApLiBObyBpbnRlZ3JhdG9yIHByb3AgaXMgaW52b2x2ZWQuXG4gIGNvbnN0IGxpdmVWb2ljZUVuYWJsZWQgPSBhZ2VudExpdmVWb2ljZUVuYWJsZWQ7XG4gIC8vIFdoZXRoZXIgbGl2ZSB2b2ljZSBjYW4gYWN0dWFsbHkgcnVuIChhIEdlbWluaSBwcm92aWRlciB3aXRoIGEga2V5IGlzIGNvbmZpZ3VyZWQpLlxuICAvLyBXaGVuIGZhbHNlIHdlIGtlZXAgdm9pY2Utb25seSBtb2RlIGJ1dCBkaXNhYmxlIHRoZSBjYWxsIGNvbnRyb2wgd2l0aCBhIG5ldXRyYWxcbiAgLy8gbWVzc2FnZSDigJQgdGhlIHNwZWNpZmljIHJlYXNvbiBzdGF5cyBzZXJ2ZXItc2lkZSwgbmV2ZXIgc2hvd24gdG8gcHVibGljIHVzZXJzLlxuICBjb25zdCBsaXZlVm9pY2VSZWFkeSA9IGFnZW50TGl2ZVZvaWNlUmVhZHk7XG5cbiAgLy8gTGl2ZSAoY29udGludW91cykgdm9pY2UgY29udmVyc2F0aW9uIGFnYWluc3QgdGhlIGFnZW50J3MgVm9pY2UgQWdlbnQgbm9kZS5cbiAgLy8gYGxpdmVDYXB0aW9uYCBpcyB0aGUgaW4tcHJvZ3Jlc3MgdHVybiAoc3RyZWFtcyBhcyB5b3Ugc3BlYWspOyBgbGl2ZVR1cm5zYCBhcmVcbiAgLy8gY29tcGxldGVkIHR1cm5zIGtlcHQgbG9jYWxseSBzbyB0aGV5IHN0YXkgb24gc2NyZWVuIGFjcm9zcyB0dXJucy4gYGNyZWF0ZVRpbWVgXG4gIC8vIGlzIGNhcHR1cmVkIG9uY2UgcGVyIHR1cm4gc28gdGhlIGJ1YmJsZSB0aW1lc3RhbXAgZG9lc24ndCBqaXR0ZXIgb24gcmUtcmVuZGVyLlxuICBjb25zdCBbbGl2ZUNhcHRpb24sIHNldExpdmVDYXB0aW9uXSA9IHVzZVN0YXRlPExpdmVUdXJuPih7IHVzZXI6ICcnLCBhZ2VudDogJycsIGNyZWF0ZVRpbWU6IDAgfSk7XG4gIGNvbnN0IFtsaXZlVHVybnMsIHNldExpdmVUdXJuc10gPSB1c2VTdGF0ZTxMaXZlVHVybltdPihbXSk7XG4gIGNvbnN0IGxpdmVWb2ljZSA9IHVzZUxpdmVWb2ljZVNlc3Npb24oe1xuICAgIGJhc2VVcmwsXG4gICAgYXBpS2V5LFxuICAgIGd1ZXN0VG9rZW4sXG4gICAgdGVuYW50LFxuICAgIGFnZW50SWQsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcjogaGFuZGxlVm9pY2VFcnJvcixcbiAgICBvbklucHV0VHJhbnNjcmlwdDogKHRleHQpID0+XG4gICAgICBzZXRMaXZlQ2FwdGlvbigoYykgPT4gKHsgLi4uYywgdXNlcjogYy51c2VyICsgdGV4dCwgY3JlYXRlVGltZTogYy5jcmVhdGVUaW1lIHx8IG5vd1NlYygpIH0pKSxcbiAgICBvbk91dHB1dFRyYW5zY3JpcHQ6ICh0ZXh0KSA9PlxuICAgICAgc2V0TGl2ZUNhcHRpb24oKGMpID0+ICh7IC4uLmMsIGFnZW50OiBjLmFnZW50ICsgdGV4dCwgY3JlYXRlVGltZTogYy5jcmVhdGVUaW1lIHx8IG5vd1NlYygpIH0pKSxcbiAgICBvblR1cm5Db21wbGV0ZTogKHR1cm4pID0+IHtcbiAgICAgIC8vIENvbW1pdCB0aGUgZmluaXNoZWQgdHVybiBzbyBpdCBzdGF5cyB2aXNpYmxlOyBjbGVhciB0aGUgaW4tcHJvZ3Jlc3MgY2FwdGlvbi5cbiAgICAgIHNldExpdmVUdXJucygocHJldikgPT4gWy4uLnByZXYsIHsgdXNlcjogdHVybi50cmFuc2NyaXB0LCBhZ2VudDogdHVybi5yZXNwb25zZSwgY3JlYXRlVGltZTogbm93U2VjKCkgfV0pO1xuICAgICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIEZ1bGwgY29udmVyc2F0aW9uIHJlc2V0OiBuZXcgdGhyZWFkICsgY2xlYXJlZCBpbnB1dC9hdHRhY2htZW50cy9mb3JtcyBhbmQgYW55XG4gIC8vIGxpdmUtdm9pY2UgdHJhbnNjcmlwdC4gU2hhcmVkIGJ5IHRoZSByZXNldC1jb25maXJtIGRpYWxvZyBhbmQgdGhlIGVuZC1jYWxsIGJ1dHRvbi5cbiAgY29uc3QgcGVyZm9ybVJlc2V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIGNsZWFyQXR0YWNobWVudHMoKTtcbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KG51bGwpO1xuICAgIHNldFN1Ym1pdHRlZEZvcm1zKG5ldyBTZXQoKSk7XG4gICAgc2V0U3VibWl0dGluZ0Zvcm1JbmRleChudWxsKTtcbiAgICBzZXRMaXZlVHVybnMoW10pO1xuICB9LCBbY2xlYXJBdHRhY2htZW50cywgcmVzZXRDb252ZXJzYXRpb25dKTtcblxuICAvLyBTdGFydGluZyBhIGZyZXNoIGNhbGwgY2xlYXJzIHRoZSBwcmV2aW91cyBjYWxsJ3MgdHJhbnNjcmlwdCBidWJibGVzICsgY2FwdGlvbi5cbiAgY29uc3Qgc3RhcnRMaXZlQ2FsbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRMaXZlVm9pY2VOb3RpY2UobnVsbCk7XG4gICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIHNldExpdmVUdXJucyhbXSk7XG4gICAgbGl2ZVZvaWNlLnN0YXJ0KCk7XG4gIH0sIFtsaXZlVm9pY2VdKTtcbiAgLy8gRW5kaW5nIGEgY2FsbCBzdG9wcyB0aGUgYXVkaW8gc3RyZWFtIGFuZCByZXNldHMgdGhlIGNvbnZlcnNhdGlvbiDigJQgc2FtZSBhcyB0aGVcbiAgLy8gXCJyZXNldCBjb252ZXJzYXRpb25cIiBhY3Rpb24g4oCUIHNvIHRoZSBuZXh0IGNhbGwgc3RhcnRzIGZyb20gYSBjbGVhbiB0aHJlYWQuXG4gIGNvbnN0IGVuZExpdmVDYWxsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGxpdmVWb2ljZS5zdG9wKCk7XG4gICAgc2V0TGl2ZUNhcHRpb24oeyB1c2VyOiAnJywgYWdlbnQ6ICcnLCBjcmVhdGVUaW1lOiAwIH0pO1xuICAgIHZvaWQgcGVyZm9ybVJlc2V0KCk7XG4gIH0sIFtsaXZlVm9pY2UsIHBlcmZvcm1SZXNldF0pO1xuXG4gIC8vIEtlZXAgdGhlIGxpdmUgdHJhbnNjcmlwdCBpbiB2aWV3IGFzIGl0IGdyb3dzICh0aGUgc2Nyb2xsIG1hbmFnZXIgb25seSByZWFjdHNcbiAgLy8gdG8gY29tbWl0dGVkIGNoYXQgbWVzc2FnZXMsIG5vdCB0aGVzZSBsb2NhbCBsaXZlIGJ1YmJsZXMpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGl2ZVZvaWNlLmlzQWN0aXZlKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGVsKSBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gIH0sIFtsaXZlQ2FwdGlvbiwgbGl2ZVR1cm5zLCBsaXZlVm9pY2UuaXNBY3RpdmUsIGNoYXRDb250YWluZXJSZWZdKTtcblxuICAvLyBSZW5kZXIgYSBzaW5nbGUgbGl2ZS12b2ljZSBidWJibGUgKGNvbW1pdHRlZCB0dXJuIG9yIHN0cmVhbWluZyBjYXB0aW9uKSBhcyBhblxuICAvLyBvcmRpbmFyeSBjaGF0IG1lc3NhZ2UsIHNvIGl0IGxvb2tzIGlkZW50aWNhbCB0byB0ZXh0LW1vZGUgYnViYmxlcy5cbiAgY29uc3QgcmVuZGVyTGl2ZUJ1YmJsZSA9IChcbiAgICBzcGVha2VyOiAnY3VzdG9tZXInIHwgJ2FnZW50JyxcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgY3JlYXRlVGltZTogbnVtYmVyLFxuICAgIGtleT86IHN0cmluZyxcbiAgKSA9PiAoXG4gICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICBrZXk9e2tleX1cbiAgICAgIG1lc3NhZ2U9e3sgY3JlYXRlX3RpbWU6IGNyZWF0ZVRpbWUsIHN0YXJ0X3RpbWU6IDAsIGVuZF90aW1lOiAwLjAxLCBzcGVha2VyLCB0ZXh0IH19XG4gICAgICB0aGVtZT17dGhlbWV9XG4gICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAvPlxuICApO1xuXG4gIGNvbnN0IHBsYXlSZXNwb25zZUF1ZGlvID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghYXVkaW9TZXJ2aWNlLmN1cnJlbnQgfHwgaXNQbGF5aW5nQXVkaW8pIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgIGNvbnN0IGF1ZGlvQmxvYiA9IGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnRleHRUb1NwZWVjaCh0ZXh0KTtcbiAgICAgIGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnBsYXlBdWRpbyhhdWRpb0Jsb2IpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8oZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdWRpb1VybEJ1aWxkZXIgPSB1c2VDYWxsYmFjaygobWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYCR7YmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L2F1ZGlvYDtcbiAgfSwgW2Jhc2VVcmwsIGNvbnZlcnNhdGlvbklkXSk7XG5cbiAgY29uc3QgYXVkaW9IZWFkZXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGlmIChndWVzdFRva2VuKSB7XG4gICAgICBoWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Z3Vlc3RUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBoWyd4LWFwaS1rZXknXSA9IGFwaUtleTtcbiAgICB9XG4gICAgaWYgKHRlbmFudCkgaFsneC10ZW5hbnQtaWQnXSA9IHRlbmFudDtcbiAgICByZXR1cm4gaDtcbiAgfSwgW2FwaUtleSwgdGVuYW50LCBndWVzdFRva2VuXSk7XG5cbiAgY29uc3QgW2F1dG9QbGF5QXVkaW9NZXNzYWdlSWQsIHNldEF1dG9QbGF5QXVkaW9NZXNzYWdlSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHByZXZNZXNzYWdlQ291bnRSZWYgPSB1c2VSZWY8bnVtYmVyPigwKTtcbiAgY29uc3QgaW5pdGlhbExvYWREb25lUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXVzZUF1ZGlvIHx8ICFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBwcmV2Q291bnQgPSBwcmV2TWVzc2FnZUNvdW50UmVmLmN1cnJlbnQ7XG4gICAgcHJldk1lc3NhZ2VDb3VudFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoO1xuICAgIGlmICghaW5pdGlhbExvYWREb25lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxMb2FkRG9uZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA8PSBwcmV2Q291bnQpIHJldHVybjtcbiAgICBjb25zdCBsYXN0ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3Quc3BlYWtlciA9PT0gJ2FnZW50JyAmJiBsYXN0LnR5cGUgPT09ICdhdWRpbycgJiYgbGFzdC5tZXNzYWdlX2lkKSB7XG4gICAgICBzZXRBdXRvUGxheUF1ZGlvTWVzc2FnZUlkKGxhc3QubWVzc2FnZV9pZCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIHVzZUF1ZGlvXSk7XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcgfHwgaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KHF1ZXJ5KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSwgW10sIHsgZmFxX3F1ZXJ5OiBxdWVyeSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0Q29udmVyc2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIGNsZWFyQXR0YWNobWVudHMoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uJywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUocHJldiA9PiAhcHJldik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gICAgLy8gZW5kTGl2ZUNhbGwgc3RvcHMgYW55IGFjdGl2ZSBjYWxsIGFuZCBydW5zIHRoZSBmdWxsIHJlc2V0OyBoYXJtbGVzcyBpZiBub1xuICAgIC8vIGNhbGwgaXMgYWN0aXZlLCBzbyBib3RoIGVudHJ5IHBvaW50cyBzaGFyZSBvbmUgY29kZSBwYXRoLlxuICAgIGVuZExpdmVDYWxsKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZUNhcHRjaGFWZXJpZnkgPSB1c2VDYWxsYmFjaygodG9rZW46IHN0cmluZykgPT4ge1xuICAgIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQgPSB0b2tlbjtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGFsbExhbmd1YWdlcyA9IFtcbiAgICB7IGNvZGU6ICdlbicsIG5hbWU6ICdFbmdsaXNoJyB9LFxuICAgIHsgY29kZTogJ2VzJywgbmFtZTogJ0VzcGHDsW9sJyB9LFxuICAgIHsgY29kZTogJ2ZyJywgbmFtZTogJ0ZyYW7Dp2FpcycgfSxcbiAgICB7IGNvZGU6ICdkZScsIG5hbWU6ICdEZXV0c2NoJyB9LFxuICAgIHsgY29kZTogJ2l0JywgbmFtZTogJ0l0YWxpYW5vJyB9LFxuICAgIHsgY29kZTogJ3B0JywgbmFtZTogJ1BvcnR1Z3XDqnMnIH0sXG4gICAgeyBjb2RlOiAnemgnLCBuYW1lOiAn5Lit5paHJyB9LFxuICBdO1xuICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcykpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBuZXcgU2V0KFxuICAgICAgICBhZ2VudEF2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcpID0+IGxhbmcudG9Mb3dlckNhc2UoKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFsbExhbmd1YWdlcy5maWx0ZXIoKGxhbmcpID0+IGFsbG93ZWQuaGFzKGxhbmcuY29kZSkpO1xuICAgIH1cbiAgICByZXR1cm4gYWxsTGFuZ3VhZ2VzO1xuICB9LCBbYWdlbnRBdmFpbGFibGVMYW5ndWFnZXNdKTtcbiAgY29uc3QgaGFzTGFuZ3VhZ2VPcHRpb25zID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA+IDA7XG5cbiAgLy8gUmVzb2x2ZSB0aGVtZSB2YWx1ZXNcbiAgY29uc3QgdGhlbWVQYXJhbXMgPSByZXNvbHZlVGhlbWUodGhlbWUpO1xuICBjb25zdCB7IHByaW1hcnlDb2xvciwgYmFja2dyb3VuZENvbG9yLCB0ZXh0Q29sb3IsIGZvbnRGYW1pbHksIGZvbnRTaXplIH0gPSB0aGVtZVBhcmFtcztcbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSB0eXBlb2YgZm9udFNpemUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoZm9udFNpemUsIDEwKSA6ICh0eXBlb2YgZm9udFNpemUgPT09ICdudW1iZXInID8gZm9udFNpemUgOiAxNCk7XG5cbiAgY29uc3QgcG9zaXRpb24gPSBmbG9hdGluZ0NvbmZpZy5wb3NpdGlvbiB8fCAnYm90dG9tLXJpZ2h0JztcbiAgY29uc3Qgb2Zmc2V0ID0gZmxvYXRpbmdDb25maWcub2Zmc2V0IHx8IHsgeDogMjAsIHk6IDIwIH07XG4gIGNvbnN0IG9mZnNldFggPSBvZmZzZXQueCB8fCAyMDtcbiAgY29uc3Qgb2Zmc2V0WSA9IG9mZnNldC55IHx8IDIwO1xuXG4gIGNvbnN0IGlzRmxvYXRpbmdEb2NrZWQgPSBtb2RlID09PSAnZmxvYXRpbmcnICYmICFpc0Z1bGxzY3JlZW47XG5cbiAgLy8gQ29tcHV0ZWQgc3R5bGVzXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlID0gZ2V0Q29udGFpbmVyU3R5bGUoeyBpc0Z1bGxzY3JlZW4sIGlzRmxvYXRpbmdEb2NrZWQsIHdpbmRvd1dpZHRoLCB0OiB0aGVtZVBhcmFtcyB9KTtcbiAgY29uc3QgaGVhZGVyU3R5bGUgPSBnZXRIZWFkZXJTdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGhlYWRlclRpdGxlU3R5bGUgPSBnZXRIZWFkZXJUaXRsZVN0eWxlKGZvbnRGYW1pbHkpO1xuICBjb25zdCBoZWFkZXJTdWJ0aXRsZVN0eWxlID0gZ2V0SGVhZGVyU3VidGl0bGVTdHlsZShmb250RmFtaWx5KTtcbiAgY29uc3QgbWVudVBvcHVwU3R5bGUgPSBnZXRNZW51UG9wdXBTdHlsZShiYWNrZ3JvdW5kQ29sb3IpO1xuICBjb25zdCBtZW51SXRlbVN0eWxlID0gZ2V0TWVudUl0ZW1TdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGNvbnRlbnRDYXJkU3R5bGUgPSBnZXRDb250ZW50Q2FyZFN0eWxlKGJhY2tncm91bmRDb2xvcik7XG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZSA9IGdldFNlbmRCdXR0b25TdHlsZShwcmltYXJ5Q29sb3IpO1xuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZSA9IGdldFBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlKGZvbnRGYW1pbHkpO1xuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlID0gZ2V0UXVlcnlCdXR0b25TdHlsZSh0aGVtZVBhcmFtcyk7XG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGUgPSBnZXRDb25maXJtT3ZlcmxheVN0eWxlKHNob3dSZXNldENvbmZpcm0pO1xuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGUgPSBnZXRDb25maXJtRGlhbG9nU3R5bGUodGhlbWVQYXJhbXMpO1xuICBjb25zdCBkaXNjbGFpbWVyU3R5bGUgPSBnZXREaXNjbGFpbWVyU3R5bGUoZm9udEZhbWlseSk7XG5cbiAgY29uc3QgdGV4dEFyZWFGb250U2l6ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh3aW5kb3dXaWR0aCA8PSA3NjgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpICsgJ3B4JztcbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTGluZUhlaWdodCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB3aW5kb3dXaWR0aCA8PSA3NjggPyBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpIDogZm9udFNpemVOdW1iZXI7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc2l6ZSAqIDEuNSk7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGV4dEFyZWFMaW5lSGVpZ2h0ICogMztcbiAgfSwgW3RleHRBcmVhTGluZUhlaWdodF0pO1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGUgPSBnZXRUZXh0QXJlYVN0eWxlKHtcbiAgICB0ZXh0QXJlYUZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgdGV4dEFyZWFMaW5lSGVpZ2h0LFxuICAgIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCxcbiAgICB0ZXh0Q29sb3IsXG4gIH0pO1xuXG4gIGNvbnN0IGhhc1BlbmRpbmdGb3JtID0gbWVzc2FnZXMuc29tZSgobXNnLCBpZHgpID0+IHtcbiAgICBpZiAobXNnLnR5cGUgIT09ICdmb3JtX3JlcXVlc3QnIHx8IG1zZy5zcGVha2VyICE9PSAnYWdlbnQnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFzdWJtaXR0ZWRGb3Jtcy5oYXMoaWR4KTtcbiAgfSk7XG5cbiAgY29uc3QgcGVuZGluZ0Zvcm0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IG1zZyA9IG1lc3NhZ2VzW2ldO1xuICAgICAgaWYgKG1zZy50eXBlID09PSAnZm9ybV9yZXF1ZXN0JyAmJiBtc2cuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhc3VibWl0dGVkRm9ybXMuaGFzKGkpKSB7XG4gICAgICAgIHRyeSB7IHJldHVybiB7IHNjaGVtYTogSlNPTi5wYXJzZShtc2cudGV4dCksIGluZGV4OiBpIH07IH1cbiAgICAgICAgY2F0Y2ggeyAvKiBza2lwICovIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFttZXNzYWdlcywgc3VibWl0dGVkRm9ybXNdKTtcblxuICBjb25zdCBpc1NlbmREaXNhYmxlZCA9IChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB8fCBpc0FnZW50VHlwaW5nIHx8IGhhc1BlbmRpbmdGb3JtO1xuXG4gIGNvbnN0IGF1dG9SZXNpemVUZXh0QXJlYSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRleHRBcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1pbihlbC5zY3JvbGxIZWlnaHQsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcbiAgICBlbC5zdHlsZS5vdmVyZmxvd1kgPSBlbC5zY3JvbGxIZWlnaHQgPiB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dG9SZXNpemVUZXh0QXJlYSgpO1xuICB9LCBbaW5wdXRWYWx1ZSwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkXSk7XG5cbiAgY29uc3Qgc2hvd0FnZW50RGlzY2xhaW1lciA9IEJvb2xlYW4oaW5wdXREaXNjbGFpbWVySHRtbCk7XG4gIGNvbnN0IGFnZW50RGlzY2xhaW1lckNvbnRlbnQgPSBzaG93QWdlbnREaXNjbGFpbWVyICYmIChcbiAgICA8c3BhbiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGlucHV0RGlzY2xhaW1lckh0bWwhIH19IC8+XG4gICk7XG5cbiAgY29uc3QgZmxvYXRpbmdDb250YWluZXJTdHlsZSA9IGdldEZsb2F0aW5nQ29udGFpbmVyU3R5bGUoe1xuICAgIG1vZGUsXG4gICAgaXNGdWxsc2NyZWVuLFxuICAgIHdpbmRvd1dpZHRoLFxuICAgIHdpbmRvd0hlaWdodCxcbiAgICBwb3NpdGlvbixcbiAgICBvZmZzZXRYLFxuICAgIG9mZnNldFksXG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlckxhbmd1YWdlU2VsZWN0b3IgPSAoKSA9PiB7XG4gICAgaWYgKCFTSE9XX0NIQVRfTEFOR1VBR0VfU0VMRUNUT1IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghaGFzTGFuZ3VhZ2VPcHRpb25zIHx8IChjb252ZXJzYXRpb25JZCAmJiAhaXNGaW5hbGl6ZWQpIHx8IG1lc3NhZ2VzLmxlbmd0aCA+IDAgfHwgaGFzVXNlck1lc3NhZ2VzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxMYW5ndWFnZVNlbGVjdG9yXG4gICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlcz17YXZhaWxhYmxlTGFuZ3VhZ2VzfVxuICAgICAgICBzZWxlY3RlZExhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlPXtoYW5kbGVMYW5ndWFnZUNoYW5nZX1cbiAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJXaXRoUmVDYXB0Y2hhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFyZUNhcHRjaGFLZXkpIHtcbiAgICAgIHJldHVybiAoY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSkgPT4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH1cblxuICAgIHJldHVybiAoY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSkgPT4gKFxuICAgICAgPEdvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyIHJlQ2FwdGNoYUtleT17cmVDYXB0Y2hhS2V5IHx8ICcnfT5cbiAgICAgICAgPEdvb2dsZVJlQ2FwdGNoYVxuICAgICAgICAgIGFjdGlvbj1cImdlbmFzc2lzdF9jaGF0XCJcbiAgICAgICAgICBvblZlcmlmeT17aGFuZGxlUmVDYXB0Y2hhVmVyaWZ5fVxuICAgICAgICAgIHJlZnJlc2hSZUNhcHRjaGE9e2ZhbHNlfVxuICAgICAgICAvPlxuICAgICAgICA8PntjaGlsZHJlbn08Lz5cbiAgICAgIDwvR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXI+XG4gICAgKTtcbiAgfSwgW3JlQ2FwdGNoYUtleSwgaGFuZGxlUmVDYXB0Y2hhVmVyaWZ5XSk7XG5cbiAgY29uc3QgcmVuZGVyQ2hhdENvbXBvbmVudCA9ICgpID0+IChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3Qtcm9vdD1cInRydWVcIj5cbiAgICAgIDxzdHlsZT57Q1NTX0tFWUZSQU1FU308L3N0eWxlPlxuICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3R5bGV9IHJlZj17aGVhZGVyUmVmfT5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9nb0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8aW1nIHNyYz17bG9nb1VybD8udHJpbSgpIHx8IGNoYXRMb2dvfSBhbHQ9XCJMb2dvXCIgc3R5bGU9e2xvZ29TdHlsZX0gLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlU3R5bGV9PntoZWFkZXJUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN1YnRpdGxlU3R5bGV9PlxuICAgICAgICAgICAgICB7ZGVzY3JpcHRpb24gPz8gdCgnaGVhZGVyLnN1YnRpdGxlJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgICAgdGl0bGU9e3QoJ21lbnUudGl0bGUnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHttb2RlID09PSAnZmxvYXRpbmcnICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlIGNoYXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8WCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IW5vQ29sb3JBbmltYXRpb24gJiYgc2hvd0JhY2tsaWdodCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIGhlYWRlckhlaWdodCAtIDE0KSxcbiAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiBpc0FnZW50VHlwaW5nID8gMSA6IDAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSA0MjBtcyBlYXNlLWluLW91dCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICB0b3A6IDYsXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzglJyxcbiAgICAgICAgICAgICAgZmlsdGVyOiAnYmx1cigyMnB4KScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgICAgICAgYGxpbmVhci1ncmFkaWVudCg5MGRlZywgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gMTUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuNTUpfSA1MCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDg1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAxMDAlKWAsXG4gICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS1iYWNrbGlnaHQtc3dlZXAyIDEuMnMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIGluZmluaXRlIGFsdGVybmF0ZSwgZ2EtYmFja2xpZ2h0LXB1bHNlIDIuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE4LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93TWVudSAmJiAoXG4gICAgICAgIDxkaXYgcmVmPXttZW51UmVmfSBzdHlsZT17bWVudVBvcHVwU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVJlc2V0Q2xpY2t9PlxuICAgICAgICAgICAgPFJlZnJlc2hDdyBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIHt0KCdtZW51LnJlc2V0Q29udmVyc2F0aW9uJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge21vZGUgIT09ICdmdWxsc2NyZWVuJyAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlfT5cbiAgICAgICAgICAgICAge2lzRnVsbHNjcmVlbiA/IDxNaW5pbWl6ZTIgc2l6ZT17MTZ9IC8+IDogPE1heGltaXplMiBzaXplPXsxNn0gLz59XG4gICAgICAgICAgICAgIHt0KCdtZW51LmZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc0xhbmd1YWdlT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7IC4uLm1lbnVJdGVtU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJCb3R0b206ICdub25lJyB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oIXNob3dMYW5ndWFnZURyb3Bkb3duKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEdsb2JlIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmbGV4OiAxIH19Pnt0KCdtZW51Lmxhbmd1YWdlJyl9PC9zcGFuPlxuICAgICAgICAgICAgICB7c2hvd0xhbmd1YWdlRHJvcGRvd24gJiYgKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2F2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZXNvbHZlZExhbmd1YWdlID09PSBsYW5nLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAodGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBpbmRleCA8IGF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggLSAxID8gJzFweCBzb2xpZCAjZjBmMGYwJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZExhbmd1YWdlICE9PSBsYW5nLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMYW5ndWFnZUNoYW5nZShsYW5nLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7bGFuZy5uYW1lfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHtyZW5kZXJMYW5ndWFnZVNlbGVjdG9yKCl9XG5cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJlxuICAgICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICAgKEJvb2xlYW4od2VsY29tZVRpdGxlKSB8fCBCb29sZWFuKHdlbGNvbWVJbWFnZVVybCkgfHwgQm9vbGVhbih3ZWxjb21lTWVzc2FnZSkpXG4gICAgICAgICAgICAgICYmIGNvbnZlcnNhdGlvbklkO1xuXG4gICAgICAgICAgICBpZiAoIXNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICBjb25zdCBzeW50aGV0aWNXZWxjb21lOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6ICdhZ2VudCcsXG4gICAgICAgICAgICAgIHRleHQ6IHdlbGNvbWVNZXNzYWdlIHx8ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAga2V5PVwiX19zeW50aGV0aWNfd2VsY29tZV9fXCJcbiAgICAgICAgICAgICAgICBtZXNzYWdlPXtzeW50aGV0aWNXZWxjb21lfVxuICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaXNQcmV2U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17d2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e3dlbGNvbWVUaXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtwb3NzaWJsZVF1ZXJpZXN9XG4gICAgICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtoYW5kbGVRdWVyeUNsaWNrfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgIGFnZW50TmFtZT17YWdlbnROYW1lfVxuICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFnZW50SW5kZXggPSBtZXNzYWdlcy5maW5kSW5kZXgobSA9PiBtLnNwZWFrZXIgPT09ICdhZ2VudCcpO1xuXG4gICAgICAgICAgICAvLyBMaXZlLXZvaWNlIHR1cm5zIGFyZSByZW5kZXJlZCBsb2NhbGx5IChiZWxvdykgdGhlIG1vbWVudCB0aGV5IGZpbmlzaC5cbiAgICAgICAgICAgIC8vIEVhY2ggaXMgYWxzbyBwZXJzaXN0ZWQgYW5kIGJyb2FkY2FzdCBiYWNrIGludG8gYG1lc3NhZ2VzYDsgc3VwcHJlc3MgdGhhdFxuICAgICAgICAgICAgLy8gY29weSBzbyBhIHR1cm4gaXNuJ3Qgc2hvd24gdHdpY2UgKGFuZCBuZXZlciBibGlua3MgYXMgdGhlIHR3byBzd2FwKS5cbiAgICAgICAgICAgIGNvbnN0IGxpdmVUdXJuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0dXJuIG9mIGxpdmVUdXJucykge1xuICAgICAgICAgICAgICBpZiAodHVybi51c2VyLnRyaW0oKSkgbGl2ZVR1cm5LZXlzLmFkZChgY3VzdG9tZXI6JHt0dXJuLnVzZXIudHJpbSgpfWApO1xuICAgICAgICAgICAgICBpZiAodHVybi5hZ2VudC50cmltKCkpIGxpdmVUdXJuS2V5cy5hZGQoYGFnZW50OiR7dHVybi5hZ2VudC50cmltKCl9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcGx5TWVzc2FnZUZpbHRlciA9IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSAnZmlsZScpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGxpdmVUdXJuS2V5cy5oYXMoYCR7bWVzc2FnZS5zcGVha2VyfTokeyhtZXNzYWdlLnRleHQgfHwgJycpLnRyaW0oKX1gKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcihhcHBseU1lc3NhZ2VGaWx0ZXIpLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2Zvcm1fcmVxdWVzdCcgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1TY2hlbWEgPSBKU09OLnBhcnNlKG1lc3NhZ2UudGV4dCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1BlbmRpbmcgPSAhc3VibWl0dGVkRm9ybXMuaGFzKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpbmRleH0gc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWF4V2lkdGg6ICc4NSUnLCBtYXJnaW5Cb3R0b206ICc4cHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMDAwMDAwJywgZm9udFdlaWdodDogNjAwLCBtYXJnaW5Cb3R0b206IDQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YWdlbnROYW1lIHx8ICdBZ2VudCd9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1EaXNwbGF5ID09PSAnaW5saW5lJyAmJiBpc1BlbmRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHluYW1pY0Zvcm1NZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT17Zm9ybVNjaGVtYX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9eyhkYXRhKSA9PiBoYW5kbGVGb3JtU3VibWl0KGRhdGEsIGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IGhhbmRsZUZvcm1DYW5jZWwoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Ym1pdHRpbmc9e3N1Ym1pdHRpbmdGb3JtSW5kZXggPT09IGluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N1Ym1pdHRlZD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5PXtmb250RmFtaWx5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmM2Y0ZjYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzM3NDE1MScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1TY2hlbWEubWVzc2FnZSB8fCAnUGxlYXNlIGZpbGwgdGhlIGZvcm0gYmVsb3cuJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2lzUGVuZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzEycHgnLCBjb2xvcjogJyM2YjcyODAnLCBtYXJnaW5Ub3A6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsbCB0aGUgZm9ybSBiZWxvdyB0byBjb250aW51ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgcmVuZGVyaW5nIGlmIEpTT04gcGFyc2UgZmFpbHNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBpc05leHRTYW1lU3BlYWtlciA9IGluZGV4IDwgbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlc1tpbmRleCArIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcmV2U2FtZVNwZWFrZXIgPSBpbmRleCA+IDAgJiYgbWVzc2FnZXNbaW5kZXggLSAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RBZ2VudE1lc3NhZ2UgPSBpbmRleCA9PT0gZmlyc3RBZ2VudEluZGV4ICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhaGFzVXNlck1lc3NhZ2VzO1xuICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgaXNGaXJzdEFnZW50TWVzc2FnZSAmJiB3ZWxjb21lTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgPyB7IC4uLm1lc3NhZ2UsIHRleHQ6IHdlbGNvbWVNZXNzYWdlIH1cbiAgICAgICAgICAgICAgICAgIDogbWVzc2FnZTtcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e2Rpc3BsYXlNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaXNQbGF5aW5nQXVkaW89e2lzUGxheWluZ0F1ZGlvfVxuICAgICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e2lzRmlyc3RBZ2VudE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17aXNOZXh0U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17aXNQcmV2U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrPXsobWVzc2FnZUlkLCB2YWx1ZSkgPT4gYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyBwb3NzaWJsZVF1ZXJpZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uU2NoZWR1bGVDb25maXJtPXtoYW5kbGVTY2hlZHVsZUNvbmZpcm19XG4gICAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgICAgYXVkaW9VcmxCdWlsZGVyPXttZXNzYWdlLnR5cGUgPT09ICdhdWRpbycgJiYgdXNlQXVkaW8gPyBhdWRpb1VybEJ1aWxkZXIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBhdWRpb0hlYWRlcnM9e21lc3NhZ2UudHlwZSA9PT0gJ2F1ZGlvJyAmJiB1c2VBdWRpbyA/IGF1ZGlvSGVhZGVycyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIGF1dG9QbGF5QXVkaW9NZXNzYWdlSWQ9e2F1dG9QbGF5QXVkaW9NZXNzYWdlSWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7LyogQ29tcGxldGVkIGxpdmUtdm9pY2UgdHVybnMsIHJlbmRlcmVkIGFzIG9yZGluYXJ5IGNoYXQgYnViYmxlcyBhbmQga2VwdFxuICAgICAgICAgICAgICBpbiBsb2NhbCBzdGF0ZSBzbyB0aGV5IHN0YXkgdmlzaWJsZSBhY3Jvc3MgdHVybnMuIFRoZSBwZXJzaXN0ZWQgY29weSBvZlxuICAgICAgICAgICAgICBlYWNoIHR1cm4gaXMgZmlsdGVyZWQgb3V0IG9mIGBtZXNzYWdlc2AgYWJvdmUsIHNvIHRoZXNlIGFyZSB0aGUgc2luZ2xlXG4gICAgICAgICAgICAgIHNvdXJjZSBvZiB0cnV0aCBvbiBzY3JlZW4g4oCUIHRoZXkgbmV2ZXIgZ2V0IGhpZGRlbiwgc28gbm90aGluZyBibGlua3MuICovfVxuICAgICAgICAgIHtsaXZlVHVybnMubWFwKCh0dXJuLCBpKSA9PiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtgbGl2ZS10dXJuLSR7aX1gfT5cbiAgICAgICAgICAgICAge3R1cm4udXNlci50cmltKCkgIT09ICcnICYmIHJlbmRlckxpdmVCdWJibGUoJ2N1c3RvbWVyJywgdHVybi51c2VyLCB0dXJuLmNyZWF0ZVRpbWUpfVxuICAgICAgICAgICAgICB7dHVybi5hZ2VudC50cmltKCkgIT09ICcnICYmIHJlbmRlckxpdmVCdWJibGUoJ2FnZW50JywgdHVybi5hZ2VudCwgdHVybi5jcmVhdGVUaW1lKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgey8qIEluLXByb2dyZXNzIHR1cm46IHN0cmVhbXMgdGhlIHBhcnRpYWwgdHJhbnNjcmlwdCBsaXZlIChDaGF0TWVzc2FnZSBub3dcbiAgICAgICAgICAgICAgdHJhY2tzIGl0cyB0ZXh0IHByb3AsIHNvIHRoZXNlIHVwZGF0ZSBpbiBwbGFjZSBhcyBjaHVua3MgYXJyaXZlKS4gKi99XG4gICAgICAgICAge2xpdmVWb2ljZS5pc0FjdGl2ZSAmJiBsaXZlQ2FwdGlvbi51c2VyLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgICAgIHJlbmRlckxpdmVCdWJibGUoJ2N1c3RvbWVyJywgbGl2ZUNhcHRpb24udXNlciwgbGl2ZUNhcHRpb24uY3JlYXRlVGltZSwgJ19fbGl2ZV9jYXB0aW9uX3VzZXJfXycpfVxuICAgICAgICAgIHtsaXZlVm9pY2UuaXNBY3RpdmUgJiYgbGl2ZUNhcHRpb24uYWdlbnQudHJpbSgpICE9PSAnJyAmJlxuICAgICAgICAgICAgcmVuZGVyTGl2ZUJ1YmJsZSgnYWdlbnQnLCBsaXZlQ2FwdGlvbi5hZ2VudCwgbGl2ZUNhcHRpb24uY3JlYXRlVGltZSwgJ19fbGl2ZV9jYXB0aW9uX2FnZW50X18nKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJiAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dpbmdTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICFzaG93aW5nU3ludGhldGljV2VsY29tZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCkgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3Bvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIHtwb3NzaWJsZVF1ZXJpZXMubWFwKChxdWVyeSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUXVlcnlDbGljayhxdWVyeSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtmaWxlRXJyb3JUb2FzdCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbWFyZ2luOiAnMCAxNnB4IDhweCcsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE0cHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGM0UwJyxcbiAgICAgICAgICAgICAgY29sb3I6ICcjRTY1MTAwJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFsZXJ0Q2lyY2xlIHNpemU9ezE4fSBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8c3Bhbj57ZmlsZUVycm9yVG9hc3R9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtsaXZlVm9pY2VOb3RpY2UgJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG1hcmdpbjogJzAgMTZweCA4cHgnLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNHB4JyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRjNFMCcsXG4gICAgICAgICAgICAgIGNvbG9yOiAnI0U2NTEwMCcsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbGVydENpcmNsZSBzaXplPXsxOH0gc3R5bGU9e3sgZmxleFNocmluazogMCB9fSAvPlxuICAgICAgICAgICAgPHNwYW4+e2xpdmVWb2ljZU5vdGljZX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAge3VzZUZpbGUgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4JywgbWFyZ2luQm90dG9tOiAnOHB4JywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8QXR0YWNobWVudFByZXZpZXdcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICAgIGZpbGU9e2F0dC5maWxlfVxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmVBdHRhY2htZW50KGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7Li4uc2VuZEJ1dHRvblN0eWxlLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0OHB4JywgYm9yZGVyUmFkaXVzOiAnMTZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250RmFtaWx5LCBmb250U2l6ZX19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnYnV0dG9ucy5zdGFydENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBwZW5kaW5nRm9ybSAmJiBmb3JtRGlzcGxheSA9PT0gJ2Zvb3RlcicgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgLi4uaW5wdXRDb250YWluZXJTdHlsZSxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgYm9yZGVyVG9wOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgICAgICAgIH19PlxuICAgICAgICAgICAgPER5bmFtaWNGb3JtTWVzc2FnZVxuICAgICAgICAgICAgICBzY2hlbWE9e3BlbmRpbmdGb3JtLnNjaGVtYX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhkYXRhKSA9PiBoYW5kbGVGb3JtU3VibWl0KGRhdGEsIHBlbmRpbmdGb3JtLmluZGV4KX1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IGhhbmRsZUZvcm1DYW5jZWwocGVuZGluZ0Zvcm0uaW5kZXgpfVxuICAgICAgICAgICAgICBpc1N1Ym1pdHRpbmc9e3N1Ym1pdHRpbmdGb3JtSW5kZXggPT09IHBlbmRpbmdGb3JtLmluZGV4fVxuICAgICAgICAgICAgICBpc1N1Ym1pdHRlZD17ZmFsc2V9XG4gICAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICBmb250RmFtaWx5PXtmb250RmFtaWx5fVxuICAgICAgICAgICAgICB2YXJpYW50PVwiZm9vdGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtaW5wdXQtZGlzY2xhaW1lclwiIHN0eWxlPXtkaXNjbGFpbWVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBsaXZlVm9pY2VFbmFibGVkID8gKFxuICAgICAgICAgIC8vIExpdmUgdm9pY2UgbW9kZSBpcyB2b2ljZS1vbmx5OiBubyB0ZXh0IGJveCwgYXR0YWNoLCBvciBzZW5kIGJ1dHRvbiDigJRcbiAgICAgICAgICAvLyB0aGUgb25seSB3YXkgdG8gdGFsayB0byB0aGUgYWdlbnQgaXMgdG8gc3RhcnQgYSBsaXZlIGNhbGwuXG4gICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnMTAwJScsIG1pbldpZHRoOiAwIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e2dldExpdmVWb2ljZUhpbnRTdHlsZSh0ZXh0QXJlYUZvbnRTaXplLCBmb250RmFtaWx5KX0+XG4gICAgICAgICAgICAgICAgICB7bGl2ZVZvaWNlUmVhZHlcbiAgICAgICAgICAgICAgICAgICAgPyB0KCdsaXZlVm9pY2UudGFwVG9TdGFydCcsICdUYXAgdG8gc3RhcnQgYSB2b2ljZSBjb252ZXJzYXRpb24nKVxuICAgICAgICAgICAgICAgICAgICA6IHQoJ2xpdmVWb2ljZS51bmF2YWlsYWJsZScsICdWb2ljZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUnKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPExpdmVDYWxsQ29udHJvbFxuICAgICAgICAgICAgICAgICAgc3RhdHVzPXtsaXZlVm9pY2Uuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e2xpdmVWb2ljZS5pc0FjdGl2ZX1cbiAgICAgICAgICAgICAgICAgIG9uU3RhcnQ9e3N0YXJ0TGl2ZUNhbGx9XG4gICAgICAgICAgICAgICAgICBvblN0b3A9e2VuZExpdmVDYWxsfVxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFhZ2VudElkIHx8ICFsaXZlVm9pY2VSZWFkeX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtaW5wdXQtZGlzY2xhaW1lclwiIHN0eWxlPXtkaXNjbGFpbWVyU3R5bGV9PlxuICAgICAgICAgICAgICAgICAge2FnZW50RGlzY2xhaW1lckNvbnRlbnR9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHdpZHRoOiAnMTAwJScsIG1pbldpZHRoOiAwIH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICB7dXNlRmlsZSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXthdHRhY2hCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9XCIjNzU3NTc1XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PXthbGxvd2VkRXh0ZW5zaW9ucy5qb2luKCcsJykgfHwgJyovKid9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICByZWY9e3RleHRBcmVhUmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt0ZXh0QXJlYVN0eWxlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdhLXRleHRhcmVhLW5vc2JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpbnB1dFZhbHVlLnRyaW0oKSAhPT0gJycgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMCkgJiYgIWlzQWdlbnRUeXBpbmcgJiYgIWhhc1BlbmRpbmdGb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VibWl0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW5wdXRQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkIHx8IGhhc1BlbmRpbmdGb3JtfVxuICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3JpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHshKHVzZUF1ZGlvICYmIGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLnNlbmRCdXR0b25TdHlsZSwgLi4uKGlzU2VuZERpc2FibGVkID8gc2VuZEJ1dHRvbkRpc2FibGVkU3R5bGUgOiB7fSkgfX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU2VuZERpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8QXJyb3dVcCBzaXplPXsxOH0gc3Ryb2tlV2lkdGg9ezN9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge3VzZUF1ZGlvICYmIGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxWb2ljZUlucHV0XG4gICAgICAgICAgICAgICAgICBvbkF1ZGlvUmVhZHk9e2FzeW5jIChibG9iOiBCbG9iLCBmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlbmRBdWRpb01lc3NhZ2UoYmxvYiwgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgaGFuZGxlZCBpbnNpZGUgc2VuZEF1ZGlvTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7YWdlbnREaXNjbGFpbWVyQ29udGVudCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtaW5wdXQtZGlzY2xhaW1lclwiIHN0eWxlPXtkaXNjbGFpbWVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHthZ2VudERpc2NsYWltZXJDb250ZW50fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT17Y29uZmlybU92ZXJsYXlTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1EaWFsb2dTdHlsZX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXt7Zm9udEZhbWlseSwgbWFyZ2luVG9wOiAwfX0+e3QoJ2RpYWxvZy5yZXNldENvbnZlcnNhdGlvbi50aXRsZScpfTwvaDM+XG4gICAgICAgICAgPHAgc3R5bGU9e3tmb250RmFtaWx5LCBmb250U2l6ZX19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24ubWVzc2FnZScpfTwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtQnV0dG9uc1N0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3suLi5nZXRDb25maXJtQnV0dG9uU3R5bGUoZmFsc2UsIHRoZW1lUGFyYW1zKSwgY29sb3I6IHRleHRDb2xvcn19IG9uQ2xpY2s9e2hhbmRsZUNhbmNlbFJlc2V0fT57dCgnYnV0dG9ucy5jYW5jZWwnKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2dldENvbmZpcm1CdXR0b25TdHlsZSh0cnVlLCB0aGVtZVBhcmFtcyl9IG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1SZXNldH0+e3QoJ2J1dHRvbnMucmVzZXQnKX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBpZiAobW9kZSA9PT0gJ2Zsb2F0aW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7IWlzRmxvYXRpbmdPcGVuICYmIChcbiAgICAgICAgICA8Q2hhdEJ1YmJsZVxuICAgICAgICAgICAgc2hvd0NoYXQ9e2lzRmxvYXRpbmdPcGVufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4ocHJldiA9PiAhcHJldil9XG4gICAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIHN0eWxlPXtnZXRQb3NpdGlvblN0eWxlcyh7IHBvc2l0aW9uLCBvZmZzZXRYLCBvZmZzZXRZIH0pfVxuICAgICAgICAgICAgY2hhdEJ1YmJsZUljb249e3RoZW1lPy5jaGF0QnViYmxlSWNvbn1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIHtpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZmxvYXRpbmdcIj5cbiAgICAgICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtmbG9hdGluZ0NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1jb250YWluZXI9XCJmdWxsc2NyZWVuXCI+XG4gICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKTtcbn07XG4iXX0=