UNPKG

matrix-react-sdk

Version:
117 lines (113 loc) 21.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _logger = require("matrix-js-sdk/src/logger"); var _matrix = require("matrix-js-sdk/src/matrix"); var _languageHandler = require("../../../languageHandler"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _actions = require("../../../dispatcher/actions"); var _BaseDialog = _interopRequireDefault(require("../dialogs/BaseDialog")); var _InfoDialog = _interopRequireDefault(require("../dialogs/InfoDialog")); var _DialogButtons = _interopRequireDefault(require("../elements/DialogButtons")); var _StyledCheckbox = _interopRequireDefault(require("../elements/StyledCheckbox")); 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; } /* Copyright 2024 New Vector Ltd. Copyright 2021 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. */ const BulkRedactDialog = props => { const { matrixClient: cli, room, member, onFinished } = props; const [keepStateEvents, setKeepStateEvents] = (0, _react.useState)(true); let timeline = room.getLiveTimeline(); let eventsToRedact = []; while (timeline) { eventsToRedact = [...eventsToRedact, ...timeline.getEvents().filter(event => event.getSender() === member.userId && !event.isRedacted() && !event.isRedaction() && event.getType() !== _matrix.EventType.RoomCreate && // Don't redact ACLs because that'll obliterate the room // See https://github.com/matrix-org/synapse/issues/4042 for details. event.getType() !== _matrix.EventType.RoomServerAcl && // Redacting encryption events is equally bad event.getType() !== _matrix.EventType.RoomEncryption)]; timeline = timeline.getNeighbouringTimeline(_matrix.EventTimeline.BACKWARDS); } if (eventsToRedact.length === 0) { return /*#__PURE__*/_react.default.createElement(_InfoDialog.default, { onFinished: onFinished, title: (0, _languageHandler._t)("user_info|redact|no_recent_messages_title", { user: member.name }), description: /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("user_info|redact|no_recent_messages_description"))) }); } else { eventsToRedact = eventsToRedact.filter(event => !(keepStateEvents && event.isState())); const count = eventsToRedact.length; const user = member.name; const redact = async () => { _logger.logger.info(`Started redacting recent ${count} messages for ${member.userId} in ${room.roomId}`); _dispatcher.default.dispatch({ action: _actions.Action.BulkRedactStart, room_id: room.roomId }); // Submitting a large number of redactions freezes the UI, // so first yield to allow to rerender after closing the dialog. await Promise.resolve(); await Promise.all(eventsToRedact.reverse().map(async event => { try { await cli.redactEvent(room.roomId, event.getId()); } catch (err) { // log and swallow errors _logger.logger.error("Could not redact", event.getId()); _logger.logger.error(err); } })); _logger.logger.info(`Finished redacting recent ${count} messages for ${member.userId} in ${room.roomId}`); _dispatcher.default.dispatch({ action: _actions.Action.BulkRedactEnd, room_id: room.roomId }); }; return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { className: "mx_BulkRedactDialog", onFinished: onFinished, title: (0, _languageHandler._t)("user_info|redact|confirm_title", { user }), contentId: "mx_Dialog_content" }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_Dialog_content", id: "mx_Dialog_content" }, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("user_info|redact|confirm_description_1", { count, user })), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("user_info|redact|confirm_description_2")), /*#__PURE__*/_react.default.createElement(_StyledCheckbox.default, { checked: keepStateEvents, onChange: e => setKeepStateEvents(e.target.checked) }, (0, _languageHandler._t)("user_info|redact|confirm_keep_state_label")), /*#__PURE__*/_react.default.createElement("div", { className: "mx_BulkRedactDialog_checkboxMicrocopy" }, (0, _languageHandler._t)("user_info|redact|confirm_keep_state_explainer"))), /*#__PURE__*/_react.default.createElement(_DialogButtons.default, { primaryButton: (0, _languageHandler._t)("user_info|redact|confirm_button", { count }), primaryButtonClass: "danger", primaryDisabled: count === 0, onPrimaryButtonClick: () => { setTimeout(redact, 0); onFinished(true); }, onCancel: () => onFinished(false) })); } }; var _default = exports.default = BulkRedactDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX21hdHJpeCIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfZGlzcGF0Y2hlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfYWN0aW9ucyIsIl9CYXNlRGlhbG9nIiwiX0luZm9EaWFsb2ciLCJfRGlhbG9nQnV0dG9ucyIsIl9TdHlsZWRDaGVja2JveCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkJ1bGtSZWRhY3REaWFsb2ciLCJwcm9wcyIsIm1hdHJpeENsaWVudCIsImNsaSIsInJvb20iLCJtZW1iZXIiLCJvbkZpbmlzaGVkIiwia2VlcFN0YXRlRXZlbnRzIiwic2V0S2VlcFN0YXRlRXZlbnRzIiwidXNlU3RhdGUiLCJ0aW1lbGluZSIsImdldExpdmVUaW1lbGluZSIsImV2ZW50c1RvUmVkYWN0IiwiZ2V0RXZlbnRzIiwiZmlsdGVyIiwiZXZlbnQiLCJnZXRTZW5kZXIiLCJ1c2VySWQiLCJpc1JlZGFjdGVkIiwiaXNSZWRhY3Rpb24iLCJnZXRUeXBlIiwiRXZlbnRUeXBlIiwiUm9vbUNyZWF0ZSIsIlJvb21TZXJ2ZXJBY2wiLCJSb29tRW5jcnlwdGlvbiIsImdldE5laWdoYm91cmluZ1RpbWVsaW5lIiwiRXZlbnRUaW1lbGluZSIsIkJBQ0tXQVJEUyIsImxlbmd0aCIsImNyZWF0ZUVsZW1lbnQiLCJ0aXRsZSIsIl90IiwidXNlciIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImlzU3RhdGUiLCJjb3VudCIsInJlZGFjdCIsImxvZ2dlciIsImluZm8iLCJyb29tSWQiLCJkaXMiLCJkaXNwYXRjaCIsImFjdGlvbiIsIkFjdGlvbiIsIkJ1bGtSZWRhY3RTdGFydCIsInJvb21faWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFsbCIsInJldmVyc2UiLCJtYXAiLCJyZWRhY3RFdmVudCIsImdldElkIiwiZXJyIiwiZXJyb3IiLCJCdWxrUmVkYWN0RW5kIiwiY2xhc3NOYW1lIiwiY29udGVudElkIiwiaWQiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJwcmltYXJ5QnV0dG9uIiwicHJpbWFyeUJ1dHRvbkNsYXNzIiwicHJpbWFyeURpc2FibGVkIiwib25QcmltYXJ5QnV0dG9uQ2xpY2siLCJzZXRUaW1lb3V0Iiwib25DYW5jZWwiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL0J1bGtSZWRhY3REaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuaW1wb3J0IHsgTWF0cml4Q2xpZW50LCBSb29tTWVtYmVyLCBSb29tLCBNYXRyaXhFdmVudCwgRXZlbnRUaW1lbGluZSwgRXZlbnRUeXBlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBkaXMgZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IEJhc2VEaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvQmFzZURpYWxvZ1wiO1xuaW1wb3J0IEluZm9EaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvSW5mb0RpYWxvZ1wiO1xuaW1wb3J0IERpYWxvZ0J1dHRvbnMgZnJvbSBcIi4uL2VsZW1lbnRzL0RpYWxvZ0J1dHRvbnNcIjtcbmltcG9ydCBTdHlsZWRDaGVja2JveCBmcm9tIFwiLi4vZWxlbWVudHMvU3R5bGVkQ2hlY2tib3hcIjtcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudDtcbiAgICByb29tOiBSb29tO1xuICAgIG1lbWJlcjogUm9vbU1lbWJlcjtcbiAgICBvbkZpbmlzaGVkKHJlZGFjdD86IGJvb2xlYW4pOiB2b2lkO1xufVxuXG5jb25zdCBCdWxrUmVkYWN0RGlhbG9nOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IG1hdHJpeENsaWVudDogY2xpLCByb29tLCBtZW1iZXIsIG9uRmluaXNoZWQgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtrZWVwU3RhdGVFdmVudHMsIHNldEtlZXBTdGF0ZUV2ZW50c10gPSB1c2VTdGF0ZSh0cnVlKTtcblxuICAgIGxldCB0aW1lbGluZTogRXZlbnRUaW1lbGluZSB8IG51bGwgPSByb29tLmdldExpdmVUaW1lbGluZSgpO1xuICAgIGxldCBldmVudHNUb1JlZGFjdDogTWF0cml4RXZlbnRbXSA9IFtdO1xuICAgIHdoaWxlICh0aW1lbGluZSkge1xuICAgICAgICBldmVudHNUb1JlZGFjdCA9IFtcbiAgICAgICAgICAgIC4uLmV2ZW50c1RvUmVkYWN0LFxuICAgICAgICAgICAgLi4udGltZWxpbmUuZ2V0RXZlbnRzKCkuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChldmVudCkgPT5cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0U2VuZGVyKCkgPT09IG1lbWJlci51c2VySWQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWV2ZW50LmlzUmVkYWN0ZWQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZXZlbnQuaXNSZWRhY3Rpb24oKSAmJlxuICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5Sb29tQ3JlYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlZGFjdCBBQ0xzIGJlY2F1c2UgdGhhdCdsbCBvYmxpdGVyYXRlIHRoZSByb29tXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWF0cml4LW9yZy9zeW5hcHNlL2lzc3Vlcy80MDQyIGZvciBkZXRhaWxzLlxuICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5Sb29tU2VydmVyQWNsICYmXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZGFjdGluZyBlbmNyeXB0aW9uIGV2ZW50cyBpcyBlcXVhbGx5IGJhZFxuICAgICAgICAgICAgICAgICAgICBldmVudC5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5Sb29tRW5jcnlwdGlvbixcbiAgICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICAgIHRpbWVsaW5lID0gdGltZWxpbmUuZ2V0TmVpZ2hib3VyaW5nVGltZWxpbmUoRXZlbnRUaW1lbGluZS5CQUNLV0FSRFMpO1xuICAgIH1cblxuICAgIGlmIChldmVudHNUb1JlZGFjdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxJbmZvRGlhbG9nXG4gICAgICAgICAgICAgICAgb25GaW5pc2hlZD17b25GaW5pc2hlZH1cbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJ1c2VyX2luZm98cmVkYWN0fG5vX3JlY2VudF9tZXNzYWdlc190aXRsZVwiLCB7IHVzZXI6IG1lbWJlci5uYW1lIH0pfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPntfdChcInVzZXJfaW5mb3xyZWRhY3R8bm9fcmVjZW50X21lc3NhZ2VzX2Rlc2NyaXB0aW9uXCIpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHNUb1JlZGFjdCA9IGV2ZW50c1RvUmVkYWN0LmZpbHRlcigoZXZlbnQpID0+ICEoa2VlcFN0YXRlRXZlbnRzICYmIGV2ZW50LmlzU3RhdGUoKSkpO1xuICAgICAgICBjb25zdCBjb3VudCA9IGV2ZW50c1RvUmVkYWN0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgdXNlciA9IG1lbWJlci5uYW1lO1xuXG4gICAgICAgIGNvbnN0IHJlZGFjdCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBTdGFydGVkIHJlZGFjdGluZyByZWNlbnQgJHtjb3VudH0gbWVzc2FnZXMgZm9yICR7bWVtYmVyLnVzZXJJZH0gaW4gJHtyb29tLnJvb21JZH1gKTtcbiAgICAgICAgICAgIGRpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uQnVsa1JlZGFjdFN0YXJ0LFxuICAgICAgICAgICAgICAgIHJvb21faWQ6IHJvb20ucm9vbUlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFN1Ym1pdHRpbmcgYSBsYXJnZSBudW1iZXIgb2YgcmVkYWN0aW9ucyBmcmVlemVzIHRoZSBVSSxcbiAgICAgICAgICAgIC8vIHNvIGZpcnN0IHlpZWxkIHRvIGFsbG93IHRvIHJlcmVuZGVyIGFmdGVyIGNsb3NpbmcgdGhlIGRpYWxvZy5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZXZlbnRzVG9SZWRhY3QucmV2ZXJzZSgpLm1hcChhc3luYyAoZXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNsaS5yZWRhY3RFdmVudChyb29tLnJvb21JZCwgZXZlbnQuZ2V0SWQoKSEpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyBhbmQgc3dhbGxvdyBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkNvdWxkIG5vdCByZWRhY3RcIiwgZXZlbnQuZ2V0SWQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYEZpbmlzaGVkIHJlZGFjdGluZyByZWNlbnQgJHtjb3VudH0gbWVzc2FnZXMgZm9yICR7bWVtYmVyLnVzZXJJZH0gaW4gJHtyb29tLnJvb21JZH1gKTtcbiAgICAgICAgICAgIGRpcy5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uQnVsa1JlZGFjdEVuZCxcbiAgICAgICAgICAgICAgICByb29tX2lkOiByb29tLnJvb21JZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8QmFzZURpYWxvZ1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0J1bGtSZWRhY3REaWFsb2dcIlxuICAgICAgICAgICAgICAgIG9uRmluaXNoZWQ9e29uRmluaXNoZWR9XG4gICAgICAgICAgICAgICAgdGl0bGU9e190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX3RpdGxlXCIsIHsgdXNlciB9KX1cbiAgICAgICAgICAgICAgICBjb250ZW50SWQ9XCJteF9EaWFsb2dfY29udGVudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9EaWFsb2dfY29udGVudFwiIGlkPVwibXhfRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+e190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX2Rlc2NyaXB0aW9uXzFcIiwgeyBjb3VudCwgdXNlciB9KX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPntfdChcInVzZXJfaW5mb3xyZWRhY3R8Y29uZmlybV9kZXNjcmlwdGlvbl8yXCIpfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZENoZWNrYm94IGNoZWNrZWQ9e2tlZXBTdGF0ZUV2ZW50c30gb25DaGFuZ2U9eyhlKSA9PiBzZXRLZWVwU3RhdGVFdmVudHMoZS50YXJnZXQuY2hlY2tlZCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX2tlZXBfc3RhdGVfbGFiZWxcIil9XG4gICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfQnVsa1JlZGFjdERpYWxvZ19jaGVja2JveE1pY3JvY29weVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwidXNlcl9pbmZvfHJlZGFjdHxjb25maXJtX2tlZXBfc3RhdGVfZXhwbGFpbmVyXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8RGlhbG9nQnV0dG9uc1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5QnV0dG9uPXtfdChcInVzZXJfaW5mb3xyZWRhY3R8Y29uZmlybV9idXR0b25cIiwgeyBjb3VudCB9KX1cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeUJ1dHRvbkNsYXNzPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeURpc2FibGVkPXtjb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgb25QcmltYXJ5QnV0dG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocmVkYWN0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRmluaXNoZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBvbkZpbmlzaGVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICAgICApO1xuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJ1bGtSZWRhY3REaWFsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxnQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBRixzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBSCxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVMsY0FBQSxHQUFBSixzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBTCxzQkFB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