UNPKG

matrix-react-sdk

Version:
121 lines (116 loc) 19.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _lodash = require("lodash"); var _languageHandler = require("../languageHandler"); var _AutocompleteProvider = _interopRequireDefault(require("./AutocompleteProvider")); var _MatrixClientPeg = require("../MatrixClientPeg"); var _QueryMatcher = _interopRequireDefault(require("./QueryMatcher")); var _Components = require("./Components"); var _Permalinks = require("../utils/permalinks/Permalinks"); var _RoomAvatar = _interopRequireDefault(require("../components/views/avatars/RoomAvatar")); var _SettingsStore = _interopRequireDefault(require("../settings/SettingsStore")); /* Copyright 2024 New Vector Ltd. Copyright 2017-2023 The Matrix.org Foundation C.I.C. Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> Copyright 2016 Aviral Dasgupta SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const ROOM_REGEX = /\B#\S*/g; // Prefer canonical aliases over non-canonical ones function canonicalScore(displayedAlias, room) { return displayedAlias === room.getCanonicalAlias() ? 0 : 1; } function matcherObject(room, displayedAlias, matchName = "") { return { room, matchName, displayedAlias }; } class RoomProvider extends _AutocompleteProvider.default { constructor(room, renderingType) { super({ commandRegex: ROOM_REGEX, renderingType }); (0, _defineProperty2.default)(this, "matcher", void 0); this.room = room; this.matcher = new _QueryMatcher.default([], { keys: ["displayedAlias", "matchName"] }); } getRooms() { const cli = _MatrixClientPeg.MatrixClientPeg.safeGet(); // filter out spaces here as they get their own autocomplete provider return cli.getVisibleRooms(_SettingsStore.default.getValue("feature_dynamic_room_predecessors")).filter(r => !r.isSpaceRoom()); } async getCompletions(query, selection, force = false, limit = -1) { const { command, range } = this.getCurrentCommand(query, selection, force); if (command) { // the only reason we need to do this is because Fuse only matches on properties let matcherObjects = this.getRooms().reduce((aliases, room) => { if (room.getCanonicalAlias()) { aliases = aliases.concat(matcherObject(room, room.getCanonicalAlias(), room.name)); } if (room.getAltAliases().length) { const altAliases = room.getAltAliases().map(alias => matcherObject(room, alias)); aliases = aliases.concat(altAliases); } return aliases; }, []); // Filter out any matches where the user will have also autocompleted new rooms matcherObjects = matcherObjects.filter(r => { const tombstone = r.room.currentState.getStateEvents("m.room.tombstone", ""); if (tombstone && tombstone.getContent() && tombstone.getContent()["replacement_room"]) { const hasReplacementRoom = matcherObjects.some(r2 => r2.room.roomId === tombstone.getContent()["replacement_room"]); return !hasReplacementRoom; } return true; }); this.matcher.setObjects(matcherObjects); const matchedString = command[0]; let completions = this.matcher.match(matchedString, limit); completions = (0, _lodash.sortBy)(completions, [c => canonicalScore(c.displayedAlias, c.room), c => c.displayedAlias.length]); completions = (0, _lodash.uniqBy)(completions, match => match.room); return completions.map(room => ({ completion: room.displayedAlias, completionId: room.room.roomId, type: "room", suffix: " ", href: (0, _Permalinks.makeRoomPermalink)(this.room.client, room.displayedAlias), component: /*#__PURE__*/_react.default.createElement(_Components.PillCompletion, { title: room.room.name, description: room.displayedAlias }, /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, { size: "24px", room: room.room })), range: range })).filter(completion => !!completion.completion && completion.completion.length > 0); } return []; } getName() { return (0, _languageHandler._t)("common|rooms"); } renderCompletions(completions) { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_Autocomplete_Completion_container_pill mx_Autocomplete_Completion_container_truncate", role: "presentation", "aria-label": (0, _languageHandler._t)("composer|autocomplete|room_a11y") }, completions); } } exports.default = RoomProvider; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX0F1dG9jb21wbGV0ZVByb3ZpZGVyIiwiX01hdHJpeENsaWVudFBlZyIsIl9RdWVyeU1hdGNoZXIiLCJfQ29tcG9uZW50cyIsIl9QZXJtYWxpbmtzIiwiX1Jvb21BdmF0YXIiLCJfU2V0dGluZ3NTdG9yZSIsIlJPT01fUkVHRVgiLCJjYW5vbmljYWxTY29yZSIsImRpc3BsYXllZEFsaWFzIiwicm9vbSIsImdldENhbm9uaWNhbEFsaWFzIiwibWF0Y2hlck9iamVjdCIsIm1hdGNoTmFtZSIsIlJvb21Qcm92aWRlciIsIkF1dG9jb21wbGV0ZVByb3ZpZGVyIiwiY29uc3RydWN0b3IiLCJyZW5kZXJpbmdUeXBlIiwiY29tbWFuZFJlZ2V4IiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJtYXRjaGVyIiwiUXVlcnlNYXRjaGVyIiwia2V5cyIsImdldFJvb21zIiwiY2xpIiwiTWF0cml4Q2xpZW50UGVnIiwic2FmZUdldCIsImdldFZpc2libGVSb29tcyIsIlNldHRpbmdzU3RvcmUiLCJnZXRWYWx1ZSIsImZpbHRlciIsInIiLCJpc1NwYWNlUm9vbSIsImdldENvbXBsZXRpb25zIiwicXVlcnkiLCJzZWxlY3Rpb24iLCJmb3JjZSIsImxpbWl0IiwiY29tbWFuZCIsInJhbmdlIiwiZ2V0Q3VycmVudENvbW1hbmQiLCJtYXRjaGVyT2JqZWN0cyIsInJlZHVjZSIsImFsaWFzZXMiLCJjb25jYXQiLCJuYW1lIiwiZ2V0QWx0QWxpYXNlcyIsImxlbmd0aCIsImFsdEFsaWFzZXMiLCJtYXAiLCJhbGlhcyIsInRvbWJzdG9uZSIsImN1cnJlbnRTdGF0ZSIsImdldFN0YXRlRXZlbnRzIiwiZ2V0Q29udGVudCIsImhhc1JlcGxhY2VtZW50Um9vbSIsInNvbWUiLCJyMiIsInJvb21JZCIsInNldE9iamVjdHMiLCJtYXRjaGVkU3RyaW5nIiwiY29tcGxldGlvbnMiLCJtYXRjaCIsInNvcnRCeSIsImMiLCJ1bmlxQnkiLCJjb21wbGV0aW9uIiwiY29tcGxldGlvbklkIiwidHlwZSIsInN1ZmZpeCIsImhyZWYiLCJtYWtlUm9vbVBlcm1hbGluayIsImNsaWVudCIsImNvbXBvbmVudCIsImNyZWF0ZUVsZW1lbnQiLCJQaWxsQ29tcGxldGlvbiIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJzaXplIiwiZ2V0TmFtZSIsIl90IiwicmVuZGVyQ29tcGxldGlvbnMiLCJjbGFzc05hbWUiLCJyb2xlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRvY29tcGxldGUvUm9vbVByb3ZpZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAxNy0yMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5Db3B5cmlnaHQgMjAxOCBNaWNoYWVsIFRlbGF0eW5za2kgPDd0M2NoZ3V5QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAyMDE2IEF2aXJhbCBEYXNndXB0YVxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBzb3J0QnksIHVuaXFCeSB9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IFJvb20gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IEF1dG9jb21wbGV0ZVByb3ZpZGVyIGZyb20gXCIuL0F1dG9jb21wbGV0ZVByb3ZpZGVyXCI7XG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tIFwiLi4vTWF0cml4Q2xpZW50UGVnXCI7XG5pbXBvcnQgUXVlcnlNYXRjaGVyIGZyb20gXCIuL1F1ZXJ5TWF0Y2hlclwiO1xuaW1wb3J0IHsgUGlsbENvbXBsZXRpb24gfSBmcm9tIFwiLi9Db21wb25lbnRzXCI7XG5pbXBvcnQgeyBtYWtlUm9vbVBlcm1hbGluayB9IGZyb20gXCIuLi91dGlscy9wZXJtYWxpbmtzL1Blcm1hbGlua3NcIjtcbmltcG9ydCB7IElDb21wbGV0aW9uLCBJU2VsZWN0aW9uUmFuZ2UgfSBmcm9tIFwiLi9BdXRvY29tcGxldGVyXCI7XG5pbXBvcnQgUm9vbUF2YXRhciBmcm9tIFwiLi4vY29tcG9uZW50cy92aWV3cy9hdmF0YXJzL1Jvb21BdmF0YXJcIjtcbmltcG9ydCB7IFRpbWVsaW5lUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuLi9jb250ZXh0cy9Sb29tQ29udGV4dFwiO1xuaW1wb3J0IFNldHRpbmdzU3RvcmUgZnJvbSBcIi4uL3NldHRpbmdzL1NldHRpbmdzU3RvcmVcIjtcblxuY29uc3QgUk9PTV9SRUdFWCA9IC9cXEIjXFxTKi9nO1xuXG4vLyBQcmVmZXIgY2Fub25pY2FsIGFsaWFzZXMgb3ZlciBub24tY2Fub25pY2FsIG9uZXNcbmZ1bmN0aW9uIGNhbm9uaWNhbFNjb3JlKGRpc3BsYXllZEFsaWFzOiBzdHJpbmcsIHJvb206IFJvb20pOiBudW1iZXIge1xuICAgIHJldHVybiBkaXNwbGF5ZWRBbGlhcyA9PT0gcm9vbS5nZXRDYW5vbmljYWxBbGlhcygpID8gMCA6IDE7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJPYmplY3QoXG4gICAgcm9vbTogUm9vbSxcbiAgICBkaXNwbGF5ZWRBbGlhczogc3RyaW5nLFxuICAgIG1hdGNoTmFtZSA9IFwiXCIsXG4pOiB7XG4gICAgcm9vbTogUm9vbTtcbiAgICBtYXRjaE5hbWU6IHN0cmluZztcbiAgICBkaXNwbGF5ZWRBbGlhczogc3RyaW5nO1xufSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcm9vbSxcbiAgICAgICAgbWF0Y2hOYW1lLFxuICAgICAgICBkaXNwbGF5ZWRBbGlhcyxcbiAgICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb29tUHJvdmlkZXIgZXh0ZW5kcyBBdXRvY29tcGxldGVQcm92aWRlciB7XG4gICAgcHJvdGVjdGVkIG1hdGNoZXI6IFF1ZXJ5TWF0Y2hlcjxSZXR1cm5UeXBlPHR5cGVvZiBtYXRjaGVyT2JqZWN0Pj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm9vbTogUm9vbSxcbiAgICAgICAgcmVuZGVyaW5nVHlwZT86IFRpbWVsaW5lUmVuZGVyaW5nVHlwZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoeyBjb21tYW5kUmVnZXg6IFJPT01fUkVHRVgsIHJlbmRlcmluZ1R5cGUgfSk7XG4gICAgICAgIHRoaXMubWF0Y2hlciA9IG5ldyBRdWVyeU1hdGNoZXI8UmV0dXJuVHlwZTx0eXBlb2YgbWF0Y2hlck9iamVjdD4+KFtdLCB7XG4gICAgICAgICAgICBrZXlzOiBbXCJkaXNwbGF5ZWRBbGlhc1wiLCBcIm1hdGNoTmFtZVwiXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJvb21zKCk6IFJvb21bXSB7XG4gICAgICAgIGNvbnN0IGNsaSA9IE1hdHJpeENsaWVudFBlZy5zYWZlR2V0KCk7XG5cbiAgICAgICAgLy8gZmlsdGVyIG91dCBzcGFjZXMgaGVyZSBhcyB0aGV5IGdldCB0aGVpciBvd24gYXV0b2NvbXBsZXRlIHByb3ZpZGVyXG4gICAgICAgIHJldHVybiBjbGlcbiAgICAgICAgICAgIC5nZXRWaXNpYmxlUm9vbXMoU2V0dGluZ3NTdG9yZS5nZXRWYWx1ZShcImZlYXR1cmVfZHluYW1pY19yb29tX3ByZWRlY2Vzc29yc1wiKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHIpID0+ICFyLmlzU3BhY2VSb29tKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb21wbGV0aW9ucyhcbiAgICAgICAgcXVlcnk6IHN0cmluZyxcbiAgICAgICAgc2VsZWN0aW9uOiBJU2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgIGZvcmNlID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ID0gLTEsXG4gICAgKTogUHJvbWlzZTxJQ29tcGxldGlvbltdPiB7XG4gICAgICAgIGNvbnN0IHsgY29tbWFuZCwgcmFuZ2UgfSA9IHRoaXMuZ2V0Q3VycmVudENvbW1hbmQocXVlcnksIHNlbGVjdGlvbiwgZm9yY2UpO1xuICAgICAgICBpZiAoY29tbWFuZCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgcmVhc29uIHdlIG5lZWQgdG8gZG8gdGhpcyBpcyBiZWNhdXNlIEZ1c2Ugb25seSBtYXRjaGVzIG9uIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGxldCBtYXRjaGVyT2JqZWN0cyA9IHRoaXMuZ2V0Um9vbXMoKS5yZWR1Y2U8UmV0dXJuVHlwZTx0eXBlb2YgbWF0Y2hlck9iamVjdD5bXT4oKGFsaWFzZXMsIHJvb20pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm9vbS5nZXRDYW5vbmljYWxBbGlhcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBhbGlhc2VzLmNvbmNhdChtYXRjaGVyT2JqZWN0KHJvb20sIHJvb20uZ2V0Q2Fub25pY2FsQWxpYXMoKSEsIHJvb20ubmFtZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm9vbS5nZXRBbHRBbGlhc2VzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsdEFsaWFzZXMgPSByb29tLmdldEFsdEFsaWFzZXMoKS5tYXAoKGFsaWFzKSA9PiBtYXRjaGVyT2JqZWN0KHJvb20sIGFsaWFzKSk7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBhbGlhc2VzLmNvbmNhdChhbHRBbGlhc2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzZXM7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IGFueSBtYXRjaGVzIHdoZXJlIHRoZSB1c2VyIHdpbGwgaGF2ZSBhbHNvIGF1dG9jb21wbGV0ZWQgbmV3IHJvb21zXG4gICAgICAgICAgICBtYXRjaGVyT2JqZWN0cyA9IG1hdGNoZXJPYmplY3RzLmZpbHRlcigocikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvbWJzdG9uZSA9IHIucm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoXCJtLnJvb20udG9tYnN0b25lXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmICh0b21ic3RvbmUgJiYgdG9tYnN0b25lLmdldENvbnRlbnQoKSAmJiB0b21ic3RvbmUuZ2V0Q29udGVudCgpW1wicmVwbGFjZW1lbnRfcm9vbVwiXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNSZXBsYWNlbWVudFJvb20gPSBtYXRjaGVyT2JqZWN0cy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHIyKSA9PiByMi5yb29tLnJvb21JZCA9PT0gdG9tYnN0b25lLmdldENvbnRlbnQoKVtcInJlcGxhY2VtZW50X3Jvb21cIl0sXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaGFzUmVwbGFjZW1lbnRSb29tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLm1hdGNoZXIuc2V0T2JqZWN0cyhtYXRjaGVyT2JqZWN0cyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gY29tbWFuZFswXTtcbiAgICAgICAgICAgIGxldCBjb21wbGV0aW9ucyA9IHRoaXMubWF0Y2hlci5tYXRjaChtYXRjaGVkU3RyaW5nLCBsaW1pdCk7XG4gICAgICAgICAgICBjb21wbGV0aW9ucyA9IHNvcnRCeShjb21wbGV0aW9ucywgW1xuICAgICAgICAgICAgICAgIChjKSA9PiBjYW5vbmljYWxTY29yZShjLmRpc3BsYXllZEFsaWFzLCBjLnJvb20pLFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRpc3BsYXllZEFsaWFzLmxlbmd0aCxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29tcGxldGlvbnMgPSB1bmlxQnkoY29tcGxldGlvbnMsIChtYXRjaCkgPT4gbWF0Y2gucm9vbSk7XG4gICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbnNcbiAgICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgICAgICAocm9vbSk6IElDb21wbGV0aW9uID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOiByb29tLmRpc3BsYXllZEFsaWFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbklkOiByb29tLnJvb20ucm9vbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyb29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IFwiIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogbWFrZVJvb21QZXJtYWxpbmsodGhpcy5yb29tLmNsaWVudCwgcm9vbS5kaXNwbGF5ZWRBbGlhcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UGlsbENvbXBsZXRpb24gdGl0bGU9e3Jvb20ucm9vbS5uYW1lfSBkZXNjcmlwdGlvbj17cm9vbS5kaXNwbGF5ZWRBbGlhc30+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb29tQXZhdGFyIHNpemU9XCIyNHB4XCIgcm9vbT17cm9vbS5yb29tfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUGlsbENvbXBsZXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlISxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbXBsZXRpb24pID0+ICEhY29tcGxldGlvbi5jb21wbGV0aW9uICYmIGNvbXBsZXRpb24uY29tcGxldGlvbi5sZW5ndGggPiAwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIF90KFwiY29tbW9ufHJvb21zXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXJDb21wbGV0aW9ucyhjb21wbGV0aW9uczogUmVhY3QuUmVhY3ROb2RlW10pOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X0F1dG9jb21wbGV0ZV9Db21wbGV0aW9uX2NvbnRhaW5lcl9waWxsIG14X0F1dG9jb21wbGV0ZV9Db21wbGV0aW9uX2NvbnRhaW5lcl90cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17X3QoXCJjb21wb3NlcnxhdXRvY29tcGxldGV8cm9vbV9hMTF5XCIpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtjb21wbGV0aW9uc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFVQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFHQSxJQUFBRSxnQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcscUJBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNB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