matrix-react-sdk
Version:
SDK for matrix.org using React
125 lines (122 loc) • 23.8 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.ThreadMessagePreview = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = _interopRequireWildcard(require("react"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _compoundWeb = require("@vector-im/compound-web");
var _threadsSolid = _interopRequireDefault(require("@vector-im/compound-design-tokens/assets/web/icons/threads-solid"));
var _languageHandler = require("../../../languageHandler");
var _context = require("../right_panel/context");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _PosthogTrackers = _interopRequireDefault(require("../../../PosthogTrackers"));
var _useEventEmitter = require("../../../hooks/useEventEmitter");
var _RoomContext = _interopRequireDefault(require("../../../contexts/RoomContext"));
var _MessagePreviewStore = require("../../../stores/room-list/MessagePreviewStore");
var _MemberAvatar = _interopRequireDefault(require("../avatars/MemberAvatar"));
var _useAsyncMemo = require("../../../hooks/useAsyncMemo");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _actions = require("../../../dispatcher/actions");
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _useUnreadNotifications = require("../../../hooks/useUnreadNotifications");
var _notifications = require("../../../utils/notifications");
const _excluded = ["mxEvent", "thread"];
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
const ThreadSummary = _ref => {
let {
mxEvent,
thread
} = _ref,
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
const roomContext = (0, _react.useContext)(_RoomContext.default);
const cardContext = (0, _react.useContext)(_context.CardContext);
const count = (0, _useEventEmitter.useTypedEventEmitterState)(thread, _matrix.ThreadEvent.Update, () => thread.length);
const {
level
} = (0, _useUnreadNotifications.useUnreadNotifications)(thread.room, thread.id);
if (!count) return null; // We don't want to show a thread summary if the thread doesn't have replies yet
let countSection = count;
if (!roomContext.narrow) {
countSection = (0, _languageHandler._t)("threads|count_of_reply", {
count
});
}
return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, (0, _extends2.default)({}, props, {
className: "mx_ThreadSummary",
onClick: ev => {
_dispatcher.default.dispatch({
action: _actions.Action.ShowThread,
rootEvent: mxEvent,
push: cardContext.isCard
});
_PosthogTrackers.default.trackInteraction("WebRoomTimelineThreadSummaryButton", ev);
},
"aria-label": (0, _languageHandler._t)("threads|open_thread")
}), /*#__PURE__*/_react.default.createElement(_compoundWeb.IndicatorIcon, {
size: "24px",
indicator: (0, _notifications.notificationLevelToIndicator)(level)
}, /*#__PURE__*/_react.default.createElement(_threadsSolid.default, null)), /*#__PURE__*/_react.default.createElement("span", {
className: "mx_ThreadSummary_replies_amount"
}, countSection), /*#__PURE__*/_react.default.createElement(ThreadMessagePreview, {
thread: thread,
showDisplayname: !roomContext.narrow
}), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_ThreadSummary_chevron"
}));
};
const ThreadMessagePreview = ({
thread,
showDisplayname = false
}) => {
const cli = (0, _react.useContext)(_MatrixClientContext.default);
const lastReply = (0, _useEventEmitter.useTypedEventEmitterState)(thread, _matrix.ThreadEvent.Update, () => thread.replyToEvent) ?? undefined;
// track the content as a means to regenerate the thread message preview upon edits & decryption
const [content, setContent] = (0, _react.useState)(lastReply?.getContent());
(0, _useEventEmitter.useTypedEventEmitter)(lastReply, _matrix.MatrixEventEvent.Replaced, () => {
setContent(lastReply.getContent());
});
const awaitDecryption = lastReply?.shouldAttemptDecryption() || lastReply?.isBeingDecrypted();
(0, _useEventEmitter.useTypedEventEmitter)(awaitDecryption ? lastReply : undefined, _matrix.MatrixEventEvent.Decrypted, () => {
setContent(lastReply.getContent());
});
const preview = (0, _useAsyncMemo.useAsyncMemo)(async () => {
if (!lastReply) return;
await cli.decryptEventIfNeeded(lastReply);
return _MessagePreviewStore.MessagePreviewStore.instance.generatePreviewForEvent(lastReply);
}, [lastReply, content]);
if (!preview || !lastReply) {
return null;
}
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_MemberAvatar.default, {
member: lastReply.sender,
fallbackUserId: lastReply.getSender(),
size: "24px",
className: "mx_ThreadSummary_avatar"
}), showDisplayname && /*#__PURE__*/_react.default.createElement("div", {
className: "mx_ThreadSummary_sender"
}, lastReply.sender?.name ?? lastReply.getSender()), lastReply.isDecryptionFailure() ? /*#__PURE__*/_react.default.createElement("div", {
className: "mx_ThreadSummary_content mx_DecryptionFailureBody",
title: (0, _languageHandler._t)("timeline|decryption_failure|unable_to_decrypt")
}, /*#__PURE__*/_react.default.createElement("span", {
className: "mx_ThreadSummary_message-preview"
}, (0, _languageHandler._t)("timeline|decryption_failure|unable_to_decrypt"))) : /*#__PURE__*/_react.default.createElement("div", {
className: "mx_ThreadSummary_content",
title: preview
}, /*#__PURE__*/_react.default.createElement("span", {
className: "mx_ThreadSummary_message-preview"
}, preview)));
};
exports.ThreadMessagePreview = ThreadMessagePreview;
var _default = exports.default = ThreadSummary;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX2NvbXBvdW5kV2ViIiwiX3RocmVhZHNTb2xpZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX2NvbnRleHQiLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9Qb3N0aG9nVHJhY2tlcnMiLCJfdXNlRXZlbnRFbWl0dGVyIiwiX1Jvb21Db250ZXh0IiwiX01lc3NhZ2VQcmV2aWV3U3RvcmUiLCJfTWVtYmVyQXZhdGFyIiwiX3VzZUFzeW5jTWVtbyIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX2FjdGlvbnMiLCJfZGlzcGF0Y2hlciIsIl91c2VVbnJlYWROb3RpZmljYXRpb25zIiwiX25vdGlmaWNhdGlvbnMiLCJfZXhjbHVkZWQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJUaHJlYWRTdW1tYXJ5IiwiX3JlZiIsIm14RXZlbnQiLCJ0aHJlYWQiLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJyb29tQ29udGV4dCIsInVzZUNvbnRleHQiLCJSb29tQ29udGV4dCIsImNhcmRDb250ZXh0IiwiQ2FyZENvbnRleHQiLCJjb3VudCIsInVzZVR5cGVkRXZlbnRFbWl0dGVyU3RhdGUiLCJUaHJlYWRFdmVudCIsIlVwZGF0ZSIsImxlbmd0aCIsImxldmVsIiwidXNlVW5yZWFkTm90aWZpY2F0aW9ucyIsInJvb20iLCJpZCIsImNvdW50U2VjdGlvbiIsIm5hcnJvdyIsIl90IiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzMiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJldiIsImRlZmF1bHREaXNwYXRjaGVyIiwiZGlzcGF0Y2giLCJhY3Rpb24iLCJBY3Rpb24iLCJTaG93VGhyZWFkIiwicm9vdEV2ZW50IiwicHVzaCIsImlzQ2FyZCIsIlBvc3Rob2dUcmFja2VycyIsInRyYWNrSW50ZXJhY3Rpb24iLCJJbmRpY2F0b3JJY29uIiwic2l6ZSIsImluZGljYXRvciIsIm5vdGlmaWNhdGlvbkxldmVsVG9JbmRpY2F0b3IiLCJUaHJlYWRNZXNzYWdlUHJldmlldyIsInNob3dEaXNwbGF5bmFtZSIsImNsaSIsIk1hdHJpeENsaWVudENvbnRleHQiLCJsYXN0UmVwbHkiLCJyZXBseVRvRXZlbnQiLCJ1bmRlZmluZWQiLCJjb250ZW50Iiwic2V0Q29udGVudCIsInVzZVN0YXRlIiwiZ2V0Q29udGVudCIsInVzZVR5cGVkRXZlbnRFbWl0dGVyIiwiTWF0cml4RXZlbnRFdmVudCIsIlJlcGxhY2VkIiwiYXdhaXREZWNyeXB0aW9uIiwic2hvdWxkQXR0ZW1wdERlY3J5cHRpb24iLCJpc0JlaW5nRGVjcnlwdGVkIiwiRGVjcnlwdGVkIiwicHJldmlldyIsInVzZUFzeW5jTWVtbyIsImRlY3J5cHRFdmVudElmTmVlZGVkIiwiTWVzc2FnZVByZXZpZXdTdG9yZSIsImluc3RhbmNlIiwiZ2VuZXJhdGVQcmV2aWV3Rm9yRXZlbnQiLCJGcmFnbWVudCIsIm1lbWJlciIsInNlbmRlciIsImZhbGxiYWNrVXNlcklkIiwiZ2V0U2VuZGVyIiwibmFtZSIsImlzRGVjcnlwdGlvbkZhaWx1cmUiLCJ0aXRsZSIsImV4cG9ydHMiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL1RocmVhZFN1bW1hcnkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgVGhyZWFkLCBUaHJlYWRFdmVudCwgSUNvbnRlbnQsIE1hdHJpeEV2ZW50LCBNYXRyaXhFdmVudEV2ZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgSW5kaWNhdG9ySWNvbiB9IGZyb20gXCJAdmVjdG9yLWltL2NvbXBvdW5kLXdlYlwiO1xuaW1wb3J0IFRocmVhZEljb25Tb2xpZCBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC1kZXNpZ24tdG9rZW5zL2Fzc2V0cy93ZWIvaWNvbnMvdGhyZWFkcy1zb2xpZFwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IENhcmRDb250ZXh0IH0gZnJvbSBcIi4uL3JpZ2h0X3BhbmVsL2NvbnRleHRcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uLCB7IEJ1dHRvbkV2ZW50IH0gZnJvbSBcIi4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcbmltcG9ydCBQb3N0aG9nVHJhY2tlcnMgZnJvbSBcIi4uLy4uLy4uL1Bvc3Rob2dUcmFja2Vyc1wiO1xuaW1wb3J0IHsgdXNlVHlwZWRFdmVudEVtaXR0ZXIsIHVzZVR5cGVkRXZlbnRFbWl0dGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vLi4vaG9va3MvdXNlRXZlbnRFbWl0dGVyXCI7XG5pbXBvcnQgUm9vbUNvbnRleHQgZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL1Jvb21Db250ZXh0XCI7XG5pbXBvcnQgeyBNZXNzYWdlUHJldmlld1N0b3JlIH0gZnJvbSBcIi4uLy4uLy4uL3N0b3Jlcy9yb29tLWxpc3QvTWVzc2FnZVByZXZpZXdTdG9yZVwiO1xuaW1wb3J0IE1lbWJlckF2YXRhciBmcm9tIFwiLi4vYXZhdGFycy9NZW1iZXJBdmF0YXJcIjtcbmltcG9ydCB7IHVzZUFzeW5jTWVtbyB9IGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VBc3luY01lbW9cIjtcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9NYXRyaXhDbGllbnRDb250ZXh0XCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9hY3Rpb25zXCI7XG5pbXBvcnQgeyBTaG93VGhyZWFkUGF5bG9hZCB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL3BheWxvYWRzL1Nob3dUaHJlYWRQYXlsb2FkXCI7XG5pbXBvcnQgZGVmYXVsdERpc3BhdGNoZXIgZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdXNlVW5yZWFkTm90aWZpY2F0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VVbnJlYWROb3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBub3RpZmljYXRpb25MZXZlbFRvSW5kaWNhdG9yIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL25vdGlmaWNhdGlvbnNcIjtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgbXhFdmVudDogTWF0cml4RXZlbnQ7XG4gICAgdGhyZWFkOiBUaHJlYWQ7XG59XG5cbmNvbnN0IFRocmVhZFN1bW1hcnk6IFJlYWN0LkZDPElQcm9wcz4gPSAoeyBteEV2ZW50LCB0aHJlYWQsIC4uLnByb3BzIH0pID0+IHtcbiAgICBjb25zdCByb29tQ29udGV4dCA9IHVzZUNvbnRleHQoUm9vbUNvbnRleHQpO1xuICAgIGNvbnN0IGNhcmRDb250ZXh0ID0gdXNlQ29udGV4dChDYXJkQ29udGV4dCk7XG4gICAgY29uc3QgY291bnQgPSB1c2VUeXBlZEV2ZW50RW1pdHRlclN0YXRlKHRocmVhZCwgVGhyZWFkRXZlbnQuVXBkYXRlLCAoKSA9PiB0aHJlYWQubGVuZ3RoKTtcbiAgICBjb25zdCB7IGxldmVsIH0gPSB1c2VVbnJlYWROb3RpZmljYXRpb25zKHRocmVhZC5yb29tLCB0aHJlYWQuaWQpO1xuXG4gICAgaWYgKCFjb3VudCkgcmV0dXJuIG51bGw7IC8vIFdlIGRvbid0IHdhbnQgdG8gc2hvdyBhIHRocmVhZCBzdW1tYXJ5IGlmIHRoZSB0aHJlYWQgZG9lc24ndCBoYXZlIHJlcGxpZXMgeWV0XG5cbiAgICBsZXQgY291bnRTZWN0aW9uOiBzdHJpbmcgfCBudW1iZXIgPSBjb3VudDtcbiAgICBpZiAoIXJvb21Db250ZXh0Lm5hcnJvdykge1xuICAgICAgICBjb3VudFNlY3Rpb24gPSBfdChcInRocmVhZHN8Y291bnRfb2ZfcmVwbHlcIiwgeyBjb3VudCB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfVGhyZWFkU3VtbWFyeVwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoZXY6IEJ1dHRvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdERpc3BhdGNoZXIuZGlzcGF0Y2g8U2hvd1RocmVhZFBheWxvYWQ+KHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uU2hvd1RocmVhZCxcbiAgICAgICAgICAgICAgICAgICAgcm9vdEV2ZW50OiBteEV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBwdXNoOiBjYXJkQ29udGV4dC5pc0NhcmQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgUG9zdGhvZ1RyYWNrZXJzLnRyYWNrSW50ZXJhY3Rpb24oXCJXZWJSb29tVGltZWxpbmVUaHJlYWRTdW1tYXJ5QnV0dG9uXCIsIGV2KTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtfdChcInRocmVhZHN8b3Blbl90aHJlYWRcIil9XG4gICAgICAgID5cbiAgICAgICAgICAgIDxJbmRpY2F0b3JJY29uIHNpemU9XCIyNHB4XCIgaW5kaWNhdG9yPXtub3RpZmljYXRpb25MZXZlbFRvSW5kaWNhdG9yKGxldmVsKX0+XG4gICAgICAgICAgICAgICAgPFRocmVhZEljb25Tb2xpZCAvPlxuICAgICAgICAgICAgPC9JbmRpY2F0b3JJY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfVGhyZWFkU3VtbWFyeV9yZXBsaWVzX2Ftb3VudFwiPntjb3VudFNlY3Rpb259PC9zcGFuPlxuICAgICAgICAgICAgPFRocmVhZE1lc3NhZ2VQcmV2aWV3IHRocmVhZD17dGhyZWFkfSBzaG93RGlzcGxheW5hbWU9eyFyb29tQ29udGV4dC5uYXJyb3d9IC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1RocmVhZFN1bW1hcnlfY2hldnJvblwiIC8+XG4gICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICApO1xufTtcblxuaW50ZXJmYWNlIElQcmV2aWV3UHJvcHMge1xuICAgIHRocmVhZDogVGhyZWFkO1xuICAgIHNob3dEaXNwbGF5bmFtZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBUaHJlYWRNZXNzYWdlUHJldmlldzogUmVhY3QuRkM8SVByZXZpZXdQcm9wcz4gPSAoeyB0aHJlYWQsIHNob3dEaXNwbGF5bmFtZSA9IGZhbHNlIH0pID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VDb250ZXh0KE1hdHJpeENsaWVudENvbnRleHQpO1xuXG4gICAgY29uc3QgbGFzdFJlcGx5ID0gdXNlVHlwZWRFdmVudEVtaXR0ZXJTdGF0ZSh0aHJlYWQsIFRocmVhZEV2ZW50LlVwZGF0ZSwgKCkgPT4gdGhyZWFkLnJlcGx5VG9FdmVudCkgPz8gdW5kZWZpbmVkO1xuICAgIC8vIHRyYWNrIHRoZSBjb250ZW50IGFzIGEgbWVhbnMgdG8gcmVnZW5lcmF0ZSB0aGUgdGhyZWFkIG1lc3NhZ2UgcHJldmlldyB1cG9uIGVkaXRzICYgZGVjcnlwdGlvblxuICAgIGNvbnN0IFtjb250ZW50LCBzZXRDb250ZW50XSA9IHVzZVN0YXRlPElDb250ZW50IHwgdW5kZWZpbmVkPihsYXN0UmVwbHk/LmdldENvbnRlbnQoKSk7XG4gICAgdXNlVHlwZWRFdmVudEVtaXR0ZXIobGFzdFJlcGx5LCBNYXRyaXhFdmVudEV2ZW50LlJlcGxhY2VkLCAoKSA9PiB7XG4gICAgICAgIHNldENvbnRlbnQobGFzdFJlcGx5IS5nZXRDb250ZW50KCkpO1xuICAgIH0pO1xuICAgIGNvbnN0IGF3YWl0RGVjcnlwdGlvbiA9IGxhc3RSZXBseT8uc2hvdWxkQXR0ZW1wdERlY3J5cHRpb24oKSB8fCBsYXN0UmVwbHk/LmlzQmVpbmdEZWNyeXB0ZWQoKTtcbiAgICB1c2VUeXBlZEV2ZW50RW1pdHRlcihhd2FpdERlY3J5cHRpb24gPyBsYXN0UmVwbHkgOiB1bmRlZmluZWQsIE1hdHJpeEV2ZW50RXZlbnQuRGVjcnlwdGVkLCAoKSA9PiB7XG4gICAgICAgIHNldENvbnRlbnQobGFzdFJlcGx5IS5nZXRDb250ZW50KCkpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJldmlldyA9IHVzZUFzeW5jTWVtbyhhc3luYyAoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICAgICAgaWYgKCFsYXN0UmVwbHkpIHJldHVybjtcbiAgICAgICAgYXdhaXQgY2xpLmRlY3J5cHRFdmVudElmTmVlZGVkKGxhc3RSZXBseSk7XG4gICAgICAgIHJldHVybiBNZXNzYWdlUHJldmlld1N0b3JlLmluc3RhbmNlLmdlbmVyYXRlUHJldmlld0ZvckV2ZW50KGxhc3RSZXBseSk7XG4gICAgfSwgW2xhc3RSZXBseSwgY29udGVudF0pO1xuICAgIGlmICghcHJldmlldyB8fCAhbGFzdFJlcGx5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8TWVtYmVyQXZhdGFyXG4gICAgICAgICAgICAgICAgbWVtYmVyPXtsYXN0UmVwbHkuc2VuZGVyfVxuICAgICAgICAgICAgICAgIGZhbGxiYWNrVXNlcklkPXtsYXN0UmVwbHkuZ2V0U2VuZGVyKCl9XG4gICAgICAgICAgICAgICAgc2l6ZT1cIjI0cHhcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1RocmVhZFN1bW1hcnlfYXZhdGFyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7c2hvd0Rpc3BsYXluYW1lICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1RocmVhZFN1bW1hcnlfc2VuZGVyXCI+e2xhc3RSZXBseS5zZW5kZXI/Lm5hbWUgPz8gbGFzdFJlcGx5LmdldFNlbmRlcigpfTwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge2xhc3RSZXBseS5pc0RlY3J5cHRpb25GYWlsdXJlKCkgPyAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9UaHJlYWRTdW1tYXJ5X2NvbnRlbnQgbXhfRGVjcnlwdGlvbkZhaWx1cmVCb2R5XCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e190KFwidGltZWxpbmV8ZGVjcnlwdGlvbl9mYWlsdXJlfHVuYWJsZV90b19kZWNyeXB0XCIpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfVGhyZWFkU3VtbWFyeV9tZXNzYWdlLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInRpbWVsaW5lfGRlY3J5cHRpb25fZmFpbHVyZXx1bmFibGVfdG9fZGVjcnlwdFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1RocmVhZFN1bW1hcnlfY29udGVudFwiIHRpdGxlPXtwcmV2aWV3fT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfVGhyZWFkU3VtbWFyeV9tZXNzYWdlLXByZXZpZXdcIj57cHJldmlld308L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGhyZWFkU3VtbWFyeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsYUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBRUEsSUFBQUssZ0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGlCQUFBLEdBQUFILHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBUSxnQkFBQSxHQUFBSixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVMsZ0JBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQU4sc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFXLG9CQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxhQUFBLEdBQUFSLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBYSxhQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxvQkFBQSxHQUFBVixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQWUsUUFBQSxHQUFBZixPQUFBO0FBRUEsSUFBQWdCLFdBQUEsR0FBQVosc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFpQix1QkFBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixjQUFBLEdBQUFsQixPQUFBO0FBQTRFLE1BQUFtQixT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