matrix-react-sdk
Version:
SDK for matrix.org using React
209 lines (170 loc) • 25.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _event = require("matrix-js-sdk/src/@types/event");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _RoomContext = _interopRequireDefault(require("../../../contexts/RoomContext"));
var _DMRoomMap = _interopRequireDefault(require("../../../utils/DMRoomMap"));
var _languageHandler = require("../../../languageHandler");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _MiniAvatarUploader = _interopRequireWildcard(require("../elements/MiniAvatarUploader"));
var _RoomAvatar = _interopRequireDefault(require("../avatars/RoomAvatar"));
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _actions = require("../../../dispatcher/actions");
var _SpaceStore = _interopRequireDefault(require("../../../stores/SpaceStore"));
var _space = require("../../../utils/space");
/*
Copyright 2020, 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
const NewRoomIntro = () => {
const cli = (0, _react.useContext)(_MatrixClientContext.default);
const {
room,
roomId
} = (0, _react.useContext)(_RoomContext.default);
const dmPartner = _DMRoomMap.default.shared().getUserIdForRoomId(roomId);
let body;
if (dmPartner) {
let caption;
if (room.getJoinedMemberCount() + room.getInvitedMemberCount() === 2) {
caption = (0, _languageHandler._t)("Only the two of you are in this conversation, unless either of you invites anyone to join.");
}
const member = room?.getMember(dmPartner);
const displayName = member?.rawDisplayName || dmPartner;
body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, {
room: room,
width: _MiniAvatarUploader.AVATAR_SIZE,
height: _MiniAvatarUploader.AVATAR_SIZE,
onClick: () => {
_dispatcher.default.dispatch({
action: _actions.Action.ViewUser,
// XXX: We should be using a real member object and not assuming what the receiver wants.
member: member || {
userId: dmPartner
}
});
}
}), /*#__PURE__*/_react.default.createElement("h2", null, room.name), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("This is the beginning of your direct message history with <displayName/>.", {}, {
displayName: () => /*#__PURE__*/_react.default.createElement("b", null, displayName)
})), caption && /*#__PURE__*/_react.default.createElement("p", null, caption));
} else {
const inRoom = room && room.getMyMembership() === "join";
const topic = room.currentState.getStateEvents(_event.EventType.RoomTopic, "")?.getContent()?.topic;
const canAddTopic = inRoom && room.currentState.maySendStateEvent(_event.EventType.RoomTopic, cli.getUserId());
const onTopicClick = () => {
_dispatcher.default.dispatch({
action: "open_room_settings",
room_id: roomId
}, true); // focus the topic field to help the user find it as it'll gain an outline
setImmediate(() => {
window.document.getElementById("profileTopic").focus();
});
};
let topicText;
if (canAddTopic && topic) {
topicText = (0, _languageHandler._t)("Topic: %(topic)s (<a>edit</a>)", {
topic
}, {
a: sub => /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "link",
onClick: onTopicClick
}, sub)
});
} else if (topic) {
topicText = (0, _languageHandler._t)("Topic: %(topic)s ", {
topic
});
} else if (canAddTopic) {
topicText = (0, _languageHandler._t)("<a>Add a topic</a> to help people know what it is about.", {}, {
a: sub => /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "link",
onClick: onTopicClick
}, sub)
});
}
const creator = room.currentState.getStateEvents(_event.EventType.RoomCreate, "")?.getSender();
const creatorName = room?.getMember(creator)?.rawDisplayName || creator;
let createdText;
if (creator === cli.getUserId()) {
createdText = (0, _languageHandler._t)("You created this room.");
} else {
createdText = (0, _languageHandler._t)("%(displayName)s created this room.", {
displayName: creatorName
});
}
let parentSpace;
if (_SpaceStore.default.instance.activeSpace?.canInvite(cli.getUserId()) && _SpaceStore.default.instance.getSpaceFilteredRoomIds(_SpaceStore.default.instance.activeSpace).has(room.roomId)) {
parentSpace = _SpaceStore.default.instance.activeSpace;
}
let buttons;
if (parentSpace) {
buttons = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_NewRoomIntro_buttons"
}, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_NewRoomIntro_inviteButton",
kind: "primary",
onClick: () => {
(0, _space.showSpaceInvite)(parentSpace);
}
}, (0, _languageHandler._t)("Invite to %(spaceName)s", {
spaceName: parentSpace.name
})), room.canInvite(cli.getUserId()) && /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_NewRoomIntro_inviteButton",
kind: "primary_outline",
onClick: () => {
_dispatcher.default.dispatch({
action: "view_invite",
roomId
});
}
}, (0, _languageHandler._t)("Invite to just this room")));
} else if (room.canInvite(cli.getUserId())) {
buttons = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_NewRoomIntro_buttons"
}, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_NewRoomIntro_inviteButton",
kind: "primary",
onClick: () => {
_dispatcher.default.dispatch({
action: "view_invite",
roomId
});
}
}, (0, _languageHandler._t)("Invite to this room")));
}
const avatarUrl = room.currentState.getStateEvents(_event.EventType.RoomAvatar, "")?.getContent()?.url;
body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_MiniAvatarUploader.default, {
hasAvatar: !!avatarUrl,
noAvatarLabel: (0, _languageHandler._t)("Add a photo, so people can easily spot your room."),
setAvatarUrl: url => cli.sendStateEvent(roomId, _event.EventType.RoomAvatar, {
url
}, '')
}, /*#__PURE__*/_react.default.createElement(_RoomAvatar.default, {
room: room,
width: _MiniAvatarUploader.AVATAR_SIZE,
height: _MiniAvatarUploader.AVATAR_SIZE
})), /*#__PURE__*/_react.default.createElement("h2", null, room.name), /*#__PURE__*/_react.default.createElement("p", null, createdText, " ", (0, _languageHandler._t)("This is the start of <roomName/>.", {}, {
roomName: () => /*#__PURE__*/_react.default.createElement("b", null, room.name)
})), /*#__PURE__*/_react.default.createElement("p", null, topicText), buttons);
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_NewRoomIntro"
}, body);
};
var _default = NewRoomIntro;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL05ld1Jvb21JbnRyby50c3giXSwibmFtZXMiOlsiTmV3Um9vbUludHJvIiwiY2xpIiwiTWF0cml4Q2xpZW50Q29udGV4dCIsInJvb20iLCJyb29tSWQiLCJSb29tQ29udGV4dCIsImRtUGFydG5lciIsIkRNUm9vbU1hcCIsInNoYXJlZCIsImdldFVzZXJJZEZvclJvb21JZCIsImJvZHkiLCJjYXB0aW9uIiwiZ2V0Sm9pbmVkTWVtYmVyQ291bnQiLCJnZXRJbnZpdGVkTWVtYmVyQ291bnQiLCJtZW1iZXIiLCJnZXRNZW1iZXIiLCJkaXNwbGF5TmFtZSIsInJhd0Rpc3BsYXlOYW1lIiwiQVZBVEFSX1NJWkUiLCJkZWZhdWx0RGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiYWN0aW9uIiwiQWN0aW9uIiwiVmlld1VzZXIiLCJ1c2VySWQiLCJuYW1lIiwiaW5Sb29tIiwiZ2V0TXlNZW1iZXJzaGlwIiwidG9waWMiLCJjdXJyZW50U3RhdGUiLCJnZXRTdGF0ZUV2ZW50cyIsIkV2ZW50VHlwZSIsIlJvb21Ub3BpYyIsImdldENvbnRlbnQiLCJjYW5BZGRUb3BpYyIsIm1heVNlbmRTdGF0ZUV2ZW50IiwiZ2V0VXNlcklkIiwib25Ub3BpY0NsaWNrIiwiZGlzIiwicm9vbV9pZCIsInNldEltbWVkaWF0ZSIsIndpbmRvdyIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJmb2N1cyIsInRvcGljVGV4dCIsImEiLCJzdWIiLCJjcmVhdG9yIiwiUm9vbUNyZWF0ZSIsImdldFNlbmRlciIsImNyZWF0b3JOYW1lIiwiY3JlYXRlZFRleHQiLCJwYXJlbnRTcGFjZSIsIlNwYWNlU3RvcmUiLCJpbnN0YW5jZSIsImFjdGl2ZVNwYWNlIiwiY2FuSW52aXRlIiwiZ2V0U3BhY2VGaWx0ZXJlZFJvb21JZHMiLCJoYXMiLCJidXR0b25zIiwic3BhY2VOYW1lIiwiYXZhdGFyVXJsIiwiUm9vbUF2YXRhciIsInVybCIs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QUFHLG1DQUFILEVBQXdDLEVBQXhDLEVBQTRDO0FBQzFEYyxNQUFBQSxRQUFRLEVBQUUsbUJBQU0sd0NBQUsvRCxJQUFJLENBQUNzQixJQUFWO0FBRDBDLEtBQTVDLENBQWxCLENBWEcsZUFjSCx3Q0FBSW9CLFNBQUosQ0FkRyxFQWVEZSxPQWZDLENBQVA7QUFpQkg7O0FBRUQsc0JBQU87QUFBSyxJQUFBLFNBQVMsRUFBQztBQUFmLEtBQ0RsRCxJQURDLENBQVA7QUFHSCxDQTFJRDs7ZUE0SWVWLFkiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjAsIDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgUmVhY3QsIHt1c2VDb250ZXh0fSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7RXZlbnRUeXBlfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvQHR5cGVzL2V2ZW50XCI7XG5cbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0IGZyb20gXCIuLi8uLi8uLi9jb250ZXh0cy9NYXRyaXhDbGllbnRDb250ZXh0XCI7XG5pbXBvcnQgUm9vbUNvbnRleHQgZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL1Jvb21Db250ZXh0XCI7XG5pbXBvcnQgRE1Sb29tTWFwIGZyb20gXCIuLi8uLi8uLi91dGlscy9ETVJvb21NYXBcIjtcbmltcG9ydCB7X3R9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgTWluaUF2YXRhclVwbG9hZGVyLCB7QVZBVEFSX1NJWkV9IGZyb20gXCIuLi9lbGVtZW50cy9NaW5pQXZhdGFyVXBsb2FkZXJcIjtcbmltcG9ydCBSb29tQXZhdGFyIGZyb20gXCIuLi9hdmF0YXJzL1Jvb21BdmF0YXJcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQge1ZpZXdVc2VyUGF5bG9hZH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvcGF5bG9hZHMvVmlld1VzZXJQYXlsb2FkXCI7XG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IGRpcyBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgU3BhY2VTdG9yZSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVzL1NwYWNlU3RvcmVcIjtcbmltcG9ydCB7c2hvd1NwYWNlSW52aXRlfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvc3BhY2VcIjtcblxuY29uc3QgTmV3Um9vbUludHJvID0gKCkgPT4ge1xuICAgIGNvbnN0IGNsaSA9IHVzZUNvbnRleHQoTWF0cml4Q2xpZW50Q29udGV4dCk7XG4gICAgY29uc3Qge3Jvb20sIHJvb21JZH0gPSB1c2VDb250ZXh0KFJvb21Db250ZXh0KTtcblxuICAgIGNvbnN0IGRtUGFydG5lciA9IERNUm9vbU1hcC5zaGFyZWQoKS5nZXRVc2VySWRGb3JSb29tSWQocm9vbUlkKTtcbiAgICBsZXQgYm9keTtcbiAgICBpZiAoZG1QYXJ0bmVyKSB7XG4gICAgICAgIGxldCBjYXB0aW9uO1xuICAgICAgICBpZiAoKHJvb20uZ2V0Sm9pbmVkTWVtYmVyQ291bnQoKSArIHJvb20uZ2V0SW52aXRlZE1lbWJlckNvdW50KCkpID09PSAyKSB7XG4gICAgICAgICAgICBjYXB0aW9uID0gX3QoXCJPbmx5IHRoZSB0d28gb2YgeW91IGFyZSBpbiB0aGlzIGNvbnZlcnNhdGlvbiwgdW5sZXNzIGVpdGhlciBvZiB5b3UgaW52aXRlcyBhbnlvbmUgdG8gam9pbi5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZW1iZXIgPSByb29tPy5nZXRNZW1iZXIoZG1QYXJ0bmVyKTtcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBtZW1iZXI/LnJhd0Rpc3BsYXlOYW1lIHx8IGRtUGFydG5lcjtcbiAgICAgICAgYm9keSA9IDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxSb29tQXZhdGFyIHJvb209e3Jvb219IHdpZHRoPXtBVkFUQVJfU0laRX0gaGVpZ2h0PXtBVkFUQVJfU0laRX0gb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoPFZpZXdVc2VyUGF5bG9hZD4oe1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IEFjdGlvbi5WaWV3VXNlcixcbiAgICAgICAgICAgICAgICAgICAgLy8gWFhYOiBXZSBzaG91bGQgYmUgdXNpbmcgYSByZWFsIG1lbWJlciBvYmplY3QgYW5kIG5vdCBhc3N1bWluZyB3aGF0IHRoZSByZWNlaXZlciB3YW50cy5cbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyOiBtZW1iZXIgfHwge3VzZXJJZDogZG1QYXJ0bmVyfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH19IC8+XG5cbiAgICAgICAgICAgIDxoMj57IHJvb20ubmFtZSB9PC9oMj5cblxuICAgICAgICAgICAgPHA+e190KFwiVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHlvdXIgZGlyZWN0IG1lc3NhZ2UgaGlzdG9yeSB3aXRoIDxkaXNwbGF5TmFtZS8+LlwiLCB7fSwge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAoKSA9PiA8Yj57IGRpc3BsYXlOYW1lIH08L2I+LFxuICAgICAgICAgICAgfSl9PC9wPlxuICAgICAgICAgICAgeyBjYXB0aW9uICYmIDxwPnsgY2FwdGlvbiB9PC9wPiB9XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluUm9vbSA9IHJvb20gJiYgcm9vbS5nZXRNeU1lbWJlcnNoaXAoKSA9PT0gXCJqb2luXCI7XG4gICAgICAgIGNvbnN0IHRvcGljID0gcm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoRXZlbnRUeXBlLlJvb21Ub3BpYywgXCJcIik/LmdldENvbnRlbnQoKT8udG9waWM7XG4gICAgICAgIGNvbnN0IGNhbkFkZFRvcGljID0gaW5Sb29tICYmIHJvb20uY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KEV2ZW50VHlwZS5Sb29tVG9waWMsIGNsaS5nZXRVc2VySWQoKSk7XG5cbiAgICAgICAgY29uc3Qgb25Ub3BpY0NsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgZGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IFwib3Blbl9yb29tX3NldHRpbmdzXCIsXG4gICAgICAgICAgICAgICAgcm9vbV9pZDogcm9vbUlkLFxuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBmb2N1cyB0aGUgdG9waWMgZmllbGQgdG8gaGVscCB0aGUgdXNlciBmaW5kIGl0IGFzIGl0J2xsIGdhaW4gYW4gb3V0bGluZVxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcm9maWxlVG9waWNcIikuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCB0b3BpY1RleHQ7XG4gICAgICAgIGlmIChjYW5BZGRUb3BpYyAmJiB0b3BpYykge1xuICAgICAgICAgICAgdG9waWNUZXh0ID0gX3QoXCJUb3BpYzogJSh0b3BpYylzICg8YT5lZGl0PC9hPilcIiwgeyB0b3BpYyB9LCB7XG4gICAgICAgICAgICAgICAgYTogc3ViID0+IDxBY2Nlc3NpYmxlQnV0dG9uIGtpbmQ9XCJsaW5rXCIgb25DbGljaz17b25Ub3BpY0NsaWNrfT57IHN1YiB9PC9BY2Nlc3NpYmxlQnV0dG9uPixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRvcGljKSB7XG4gICAgICAgICAgICB0b3BpY1RleHQgPSBfdChcIlRvcGljOiAlKHRvcGljKXMgXCIsIHsgdG9waWMgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2FuQWRkVG9waWMpIHtcbiAgICAgICAgICAgIHRvcGljVGV4dCA9IF90KFwiPGE+QWRkIGEgdG9waWM8L2E+IHRvIGhlbHAgcGVvcGxlIGtub3cgd2hhdCBpdCBpcyBhYm91dC5cIiwge30sIHtcbiAgICAgICAgICAgICAgICBhOiBzdWIgPT4gPEFjY2Vzc2libGVCdXR0b24ga2luZD1cImxpbmtcIiBvbkNsaWNrPXtvblRvcGljQ2xpY2t9Pnsgc3ViIH08L0FjY2Vzc2libGVCdXR0b24+LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjcmVhdG9yID0gcm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoRXZlbnRUeXBlLlJvb21DcmVhdGUsIFwiXCIpPy5nZXRTZW5kZXIoKTtcbiAgICAgICAgY29uc3QgY3JlYXRvck5hbWUgPSByb29tPy5nZXRNZW1iZXIoY3JlYXRvcik/LnJhd0Rpc3BsYXlOYW1lIHx8IGNyZWF0b3I7XG5cbiAgICAgICAgbGV0IGNyZWF0ZWRUZXh0O1xuICAgICAgICBpZiAoY3JlYXRvciA9PT0gY2xpLmdldFVzZXJJZCgpKSB7XG4gICAgICAgICAgICBjcmVhdGVkVGV4dCA9IF90KFwiWW91IGNyZWF0ZWQgdGhpcyByb29tLlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNyZWF0ZWRUZXh0ID0gX3QoXCIlKGRpc3BsYXlOYW1lKXMgY3JlYXRlZCB0aGlzIHJvb20uXCIsIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogY3JlYXRvck5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJlbnRTcGFjZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgU3BhY2VTdG9yZS5pbnN0YW5jZS5hY3RpdmVTcGFjZT8uY2FuSW52aXRlKGNsaS5nZXRVc2VySWQoKSkgJiZcbiAgICAgICAgICAgIFNwYWNlU3RvcmUuaW5zdGFuY2UuZ2V0U3BhY2VGaWx0ZXJlZFJvb21JZHMoU3BhY2VTdG9yZS5pbnN0YW5jZS5hY3RpdmVTcGFjZSkuaGFzKHJvb20ucm9vbUlkKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHBhcmVudFNwYWNlID0gU3BhY2VTdG9yZS5pbnN0YW5jZS5hY3RpdmVTcGFjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidXR0b25zO1xuICAgICAgICBpZiAocGFyZW50U3BhY2UpIHtcbiAgICAgICAgICAgIGJ1dHRvbnMgPSA8ZGl2IGNsYXNzTmFtZT1cIm14X05ld1Jvb21JbnRyb19idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfTmV3Um9vbUludHJvX2ludml0ZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NwYWNlSW52aXRlKHBhcmVudFNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtfdChcIkludml0ZSB0byAlKHNwYWNlTmFtZSlzXCIsIHsgc3BhY2VOYW1lOiBwYXJlbnRTcGFjZS5uYW1lIH0pfVxuICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICB7IHJvb20uY2FuSW52aXRlKGNsaS5nZXRVc2VySWQoKSkgJiYgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfTmV3Um9vbUludHJvX2ludml0ZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJwcmltYXJ5X291dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXMuZGlzcGF0Y2goeyBhY3Rpb246IFwidmlld19pbnZpdGVcIiwgcm9vbUlkIH0pO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge190KFwiSW52aXRlIHRvIGp1c3QgdGhpcyByb29tXCIpfVxuICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj4gfVxuICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9IGVsc2UgaWYgKHJvb20uY2FuSW52aXRlKGNsaS5nZXRVc2VySWQoKSkpIHtcbiAgICAgICAgICAgIGJ1dHRvbnMgPSA8ZGl2IGNsYXNzTmFtZT1cIm14X05ld1Jvb21JbnRyb19idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfTmV3Um9vbUludHJvX2ludml0ZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzLmRpc3BhdGNoKHsgYWN0aW9uOiBcInZpZXdfaW52aXRlXCIsIHJvb21JZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtfdChcIkludml0ZSB0byB0aGlzIHJvb21cIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXZhdGFyVXJsID0gcm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoRXZlbnRUeXBlLlJvb21BdmF0YXIsIFwiXCIpPy5nZXRDb250ZW50KCk/LnVybDtcbiAgICAgICAgYm9keSA9IDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxNaW5pQXZhdGFyVXBsb2FkZXJcbiAgICAgICAgICAgICAgICBoYXNBdmF0YXI9eyEhYXZhdGFyVXJsfVxuICAgICAgICAgICAgICAgIG5vQXZhdGFyTGFiZWw9e190KFwiQWRkIGEgcGhvdG8sIHNvIHBlb3BsZSBjYW4gZWFzaWx5IHNwb3QgeW91ciByb29tLlwiKX1cbiAgICAgICAgICAgICAgICBzZXRBdmF0YXJVcmw9e3VybCA9PiBjbGkuc2VuZFN0YXRlRXZlbnQocm9vbUlkLCBFdmVudFR5cGUuUm9vbUF2YXRhciwgeyB1cmwgfSwgJycpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxSb29tQXZhdGFyIHJvb209e3Jvb219IHdpZHRoPXtBVkFUQVJfU0laRX0gaGVpZ2h0PXtBVkFUQVJfU0laRX0gLz5cbiAgICAgICAgICAgIDwvTWluaUF2YXRhclVwbG9hZGVyPlxuXG4gICAgICAgICAgICA8aDI+eyByb29tLm5hbWUgfTwvaDI+XG5cbiAgICAgICAgICAgIDxwPntjcmVhdGVkVGV4dH0ge190KFwiVGhpcyBpcyB0aGUgc3RhcnQgb2YgPHJvb21OYW1lLz4uXCIsIHt9LCB7XG4gICAgICAgICAgICAgICAgcm9vbU5hbWU6ICgpID0+IDxiPnsgcm9vbS5uYW1lIH08L2I+LFxuICAgICAgICAgICAgfSl9PC9wPlxuICAgICAgICAgICAgPHA+e3RvcGljVGV4dH08L3A+XG4gICAgICAgICAgICB7IGJ1dHRvbnMgfVxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PjtcbiAgICB9XG5cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJteF9OZXdSb29tSW50cm9cIj5cbiAgICAgICAgeyBib2R5IH1cbiAgICA8L2Rpdj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBOZXdSb29tSW50cm87XG4iXX0=