UNPKG

matrix-react-sdk

Version:
204 lines (202 loc) 35.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = 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 _IconizedContextMenu = _interopRequireWildcard(require("./IconizedContextMenu")); var _languageHandler = require("../../../languageHandler"); var _space = require("../../../utils/space"); var _leaveBehaviour = require("../../../utils/leave-behaviour"); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _BetaCard = require("../beta/BetaCard"); var _SettingsStore = _interopRequireDefault(require("../../../settings/SettingsStore")); var _useSettings = require("../../../hooks/useSettings"); var _actions = require("../../../dispatcher/actions"); var _UIComponents = require("../../../customisations/helpers/UIComponents"); var _UIFeature = require("../../../settings/UIFeature"); var _PosthogTrackers = _interopRequireDefault(require("../../../PosthogTrackers")); const _excluded = ["space", "hideHeader", "onFinished"]; /* 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. */ 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 SpaceContextMenu = _ref => { let { space, hideHeader, onFinished } = _ref, props = (0, _objectWithoutProperties2.default)(_ref, _excluded); const cli = (0, _react.useContext)(_MatrixClientContext.default); const userId = cli.getSafeUserId(); const videoRoomsEnabled = (0, _useSettings.useFeatureEnabled)("feature_video_rooms"); const elementCallVideoRoomsEnabled = (0, _useSettings.useFeatureEnabled)("feature_element_call_video_rooms"); if (!space) return null; let inviteOption = null; if (space.getJoinRule() === "public" || space.canInvite(userId)) { const onInviteClick = ev => { ev.preventDefault(); ev.stopPropagation(); (0, _space.showSpaceInvite)(space); onFinished(); }; inviteOption = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { "data-testid": "invite-option", className: "mx_SpacePanel_contextMenu_inviteButton", iconClassName: "mx_SpacePanel_iconInvite", label: (0, _languageHandler._t)("action|invite"), onClick: onInviteClick }); } let settingsOption = null; let leaveOption = null; if ((0, _space.shouldShowSpaceSettings)(space)) { const onSettingsClick = ev => { ev.preventDefault(); ev.stopPropagation(); (0, _space.showSpaceSettings)(space); onFinished(); }; settingsOption = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { "data-testid": "settings-option", iconClassName: "mx_SpacePanel_iconSettings", label: (0, _languageHandler._t)("common|settings"), onClick: onSettingsClick }); } else { const onLeaveClick = ev => { ev.preventDefault(); ev.stopPropagation(); (0, _leaveBehaviour.leaveSpace)(space); onFinished(); }; leaveOption = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { "data-testid": "leave-option", iconClassName: "mx_SpacePanel_iconLeave", className: "mx_IconizedContextMenu_option_red", label: (0, _languageHandler._t)("space|leave_dialog_action"), onClick: onLeaveClick }); } let devtoolsOption = null; if (_SettingsStore.default.getValue("developerMode")) { const onViewTimelineClick = ev => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, room_id: space.roomId, forceTimeline: true, metricsTrigger: undefined // room doesn't change }); onFinished(); }; devtoolsOption = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_SpacePanel_iconSettings", label: (0, _languageHandler._t)("space|context_menu|devtools_open_timeline"), onClick: onViewTimelineClick }); } const hasPermissionToAddSpaceChild = space.currentState.maySendStateEvent(_matrix.EventType.SpaceChild, userId); const canAddRooms = hasPermissionToAddSpaceChild && (0, _UIComponents.shouldShowComponent)(_UIFeature.UIComponent.CreateRooms); const canAddVideoRooms = canAddRooms && videoRoomsEnabled; const canAddSubSpaces = hasPermissionToAddSpaceChild && (0, _UIComponents.shouldShowComponent)(_UIFeature.UIComponent.CreateSpaces); let newRoomSection = null; if (canAddRooms || canAddSubSpaces) { const onNewRoomClick = ev => { ev.preventDefault(); ev.stopPropagation(); _PosthogTrackers.default.trackInteraction("WebSpaceContextMenuNewRoomItem", ev); (0, _space.showCreateNewRoom)(space); onFinished(); }; const onNewVideoRoomClick = ev => { ev.preventDefault(); ev.stopPropagation(); (0, _space.showCreateNewRoom)(space, elementCallVideoRoomsEnabled ? _matrix.RoomType.UnstableCall : _matrix.RoomType.ElementVideo); onFinished(); }; const onNewSubspaceClick = ev => { ev.preventDefault(); ev.stopPropagation(); (0, _space.showCreateNewSubspace)(space); onFinished(); }; newRoomSection = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { "data-testid": "add-to-space-header", className: "mx_SpacePanel_contextMenu_separatorLabel" }, (0, _languageHandler._t)("action|add")), canAddRooms && /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { "data-testid": "new-room-option", iconClassName: "mx_SpacePanel_iconPlus", label: (0, _languageHandler._t)("common|room"), onClick: onNewRoomClick }), canAddVideoRooms && /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { "data-testid": "new-video-room-option", iconClassName: "mx_SpacePanel_iconPlus", label: (0, _languageHandler._t)("common|video_room"), onClick: onNewVideoRoomClick }, /*#__PURE__*/_react.default.createElement(_BetaCard.BetaPill, null)), canAddSubSpaces && /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { "data-testid": "new-subspace-option", iconClassName: "mx_SpacePanel_iconPlus", label: (0, _languageHandler._t)("common|space"), onClick: onNewSubspaceClick }, /*#__PURE__*/_react.default.createElement(_BetaCard.BetaPill, null))); } const onPreferencesClick = ev => { ev.preventDefault(); ev.stopPropagation(); (0, _space.showSpacePreferences)(space); onFinished(); }; const openSpace = ev => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: _actions.Action.ViewRoom, room_id: space.roomId, metricsTrigger: undefined // other }); onFinished(); }; const onExploreRoomsClick = ev => { _PosthogTrackers.default.trackInteraction("WebSpaceContextMenuExploreRoomsItem", ev); openSpace(ev); }; const onHomeClick = ev => { _PosthogTrackers.default.trackInteraction("WebSpaceContextMenuHomeItem", ev); openSpace(ev); }; return /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.default, (0, _extends2.default)({}, props, { onFinished: onFinished, className: "mx_SpacePanel_contextMenu", compact: true }), !hideHeader && /*#__PURE__*/_react.default.createElement("div", { className: "mx_SpacePanel_contextMenu_header" }, space.name), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, { first: true }, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_SpacePanel_iconHome", label: (0, _languageHandler._t)("space|context_menu|home"), onClick: onHomeClick }), inviteOption, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_SpacePanel_iconExplore", label: canAddRooms ? (0, _languageHandler._t)("space|context_menu|manage_and_explore") : (0, _languageHandler._t)("space|context_menu|explore"), onClick: onExploreRoomsClick }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_SpacePanel_iconPreferences", label: (0, _languageHandler._t)("common|preferences"), onClick: onPreferencesClick }), devtoolsOption, settingsOption, leaveOption, newRoomSection)); }; var _default = exports.default = SpaceContextMenu; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX0ljb25pemVkQ29udGV4dE1lbnUiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX3NwYWNlIiwiX2xlYXZlQmVoYXZpb3VyIiwiX01hdHJpeENsaWVudENvbnRleHQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2Rpc3BhdGNoZXIiLCJfQmV0YUNhcmQiLCJfU2V0dGluZ3NTdG9yZSIsIl91c2VTZXR0aW5ncyIsIl9hY3Rpb25zIiwiX1VJQ29tcG9uZW50cyIsIl9VSUZlYXR1cmUiLCJfUG9zdGhvZ1RyYWNrZXJzIiwiX2V4Y2x1ZGVkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3BhY2VDb250ZXh0TWVudSIsIl9yZWYiLCJzcGFjZSIsImhpZGVIZWFkZXIiLCJvbkZpbmlzaGVkIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiY2xpIiwidXNlQ29udGV4dCIsIk1hdHJpeENsaWVudENvbnRleHQiLCJ1c2VySWQiLCJnZXRTYWZlVXNlcklkIiwidmlkZW9Sb29tc0VuYWJsZWQiLCJ1c2VGZWF0dXJlRW5hYmxlZCIsImVsZW1lbnRDYWxsVmlkZW9Sb29tc0VuYWJsZWQiLCJpbnZpdGVPcHRpb24iLCJnZXRKb2luUnVsZSIsImNhbkludml0ZSIsIm9uSW52aXRlQ2xpY2siLCJldiIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwic2hvd1NwYWNlSW52aXRlIiwiY3JlYXRlRWxlbWVudCIsIkljb25pemVkQ29udGV4dE1lbnVPcHRpb24iLCJjbGFzc05hbWUiLCJpY29uQ2xhc3NOYW1lIiwibGFiZWwiLCJfdCIsIm9uQ2xpY2siLCJzZXR0aW5nc09wdGlvbiIsImxlYXZlT3B0aW9uIiwic2hvdWxkU2hvd1NwYWNlU2V0dGluZ3MiLCJvblNldHRpbmdzQ2xpY2siLCJzaG93U3BhY2VTZXR0aW5ncyIsIm9uTGVhdmVDbGljayIsImxlYXZlU3BhY2UiLCJkZXZ0b29sc09wdGlvbiIsIlNldHRpbmdzU3RvcmUiLCJnZXRWYWx1ZSIsIm9uVmlld1RpbWVsaW5lQ2xpY2siLCJkZWZhdWx0RGlzcGF0Y2hlciIsImRpc3BhdGNoIiwiYWN0aW9uIiwiQWN0aW9uIiwiVmlld1Jvb20iLCJyb29tX2lkIiwicm9vbUlkIiwiZm9yY2VUaW1lbGluZSIsIm1ldHJpY3NUcmlnZ2VyIiwidW5kZWZpbmVkIiwiaGFzUGVybWlzc2lvblRvQWRkU3BhY2VDaGlsZCIsImN1cnJlbnRTdGF0ZSIsIm1heVNlbmRTdGF0ZUV2ZW50IiwiRXZlbnRUeXBlIiwiU3BhY2VDaGlsZCIsImNhbkFkZFJvb21zIiwic2hvdWxkU2hvd0NvbXBvbmVudCIsIlVJQ29tcG9uZW50IiwiQ3JlYXRlUm9vbXMiLCJjYW5BZGRWaWRlb1Jvb21zIiwiY2FuQWRkU3ViU3BhY2VzIiwiQ3JlYXRlU3BhY2VzIiwibmV3Um9vbVNlY3Rpb24iLCJvbk5ld1Jvb21DbGljayIsIlBvc3Rob2dUcmFja2VycyIsInRyYWNrSW50ZXJhY3Rpb24iLCJzaG93Q3JlYXRlTmV3Um9vbSIsIm9uTmV3VmlkZW9Sb29tQ2xpY2siLCJSb29tVHlwZSIsIlVuc3RhYmxlQ2FsbCIsIkVsZW1lbnRWaWRlbyIsIm9uTmV3U3Vic3BhY2VDbGljayIsInNob3dDcmVhdGVOZXdTdWJzcGFjZSIsIkZyYWdtZW50IiwiQmV0YVBpbGwiLCJvblByZWZlcmVuY2VzQ2xpY2siLCJzaG93U3BhY2VQcmVmZXJlbmNlcyIsIm9wZW5TcGFjZSIsIm9uRXhwbG9yZVJvb21zQ2xpY2siLCJvbkhvbWVDbGljayIsIl9leHRlbmRzMiIsImNvbXBhY3QiLCJuYW1lIiwiSWNvbml6ZWRDb250ZXh0TWVudU9wdGlvbkxpc3QiLCJmaXJzdCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2NvbnRleHRfbWVudXMvU3BhY2VDb250ZXh0TWVudS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvb20sIEV2ZW50VHlwZSwgUm9vbVR5cGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7IElQcm9wcyBhcyBJQ29udGV4dE1lbnVQcm9wcyB9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVzL0NvbnRleHRNZW51XCI7XG5pbXBvcnQgSWNvbml6ZWRDb250ZXh0TWVudSwgeyBJY29uaXplZENvbnRleHRNZW51T3B0aW9uLCBJY29uaXplZENvbnRleHRNZW51T3B0aW9uTGlzdCB9IGZyb20gXCIuL0ljb25pemVkQ29udGV4dE1lbnVcIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHtcbiAgICBzaG91bGRTaG93U3BhY2VTZXR0aW5ncyxcbiAgICBzaG93Q3JlYXRlTmV3Um9vbSxcbiAgICBzaG93Q3JlYXRlTmV3U3Vic3BhY2UsXG4gICAgc2hvd1NwYWNlSW52aXRlLFxuICAgIHNob3dTcGFjZVByZWZlcmVuY2VzLFxuICAgIHNob3dTcGFjZVNldHRpbmdzLFxufSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvc3BhY2VcIjtcbmltcG9ydCB7IGxlYXZlU3BhY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbGVhdmUtYmVoYXZpb3VyXCI7XG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgQnV0dG9uRXZlbnQgfSBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IGRlZmF1bHREaXNwYXRjaGVyIGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7IEJldGFQaWxsIH0gZnJvbSBcIi4uL2JldGEvQmV0YUNhcmRcIjtcbmltcG9ydCBTZXR0aW5nc1N0b3JlIGZyb20gXCIuLi8uLi8uLi9zZXR0aW5ncy9TZXR0aW5nc1N0b3JlXCI7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRW5hYmxlZCB9IGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IHsgc2hvdWxkU2hvd0NvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9jdXN0b21pc2F0aW9ucy9oZWxwZXJzL1VJQ29tcG9uZW50c1wiO1xuaW1wb3J0IHsgVUlDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vc2V0dGluZ3MvVUlGZWF0dXJlXCI7XG5pbXBvcnQgUG9zdGhvZ1RyYWNrZXJzIGZyb20gXCIuLi8uLi8uLi9Qb3N0aG9nVHJhY2tlcnNcIjtcbmltcG9ydCB7IFZpZXdSb29tUGF5bG9hZCB9IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL3BheWxvYWRzL1ZpZXdSb29tUGF5bG9hZFwiO1xuXG5pbnRlcmZhY2UgSVByb3BzIGV4dGVuZHMgSUNvbnRleHRNZW51UHJvcHMge1xuICAgIHNwYWNlPzogUm9vbTtcbiAgICBoaWRlSGVhZGVyPzogYm9vbGVhbjtcbn1cblxuY29uc3QgU3BhY2VDb250ZXh0TWVudTogUmVhY3QuRkM8SVByb3BzPiA9ICh7IHNwYWNlLCBoaWRlSGVhZGVyLCBvbkZpbmlzaGVkLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgY29uc3QgY2xpID0gdXNlQ29udGV4dChNYXRyaXhDbGllbnRDb250ZXh0KTtcbiAgICBjb25zdCB1c2VySWQgPSBjbGkuZ2V0U2FmZVVzZXJJZCgpO1xuICAgIGNvbnN0IHZpZGVvUm9vbXNFbmFibGVkID0gdXNlRmVhdHVyZUVuYWJsZWQoXCJmZWF0dXJlX3ZpZGVvX3Jvb21zXCIpO1xuICAgIGNvbnN0IGVsZW1lbnRDYWxsVmlkZW9Sb29tc0VuYWJsZWQgPSB1c2VGZWF0dXJlRW5hYmxlZChcImZlYXR1cmVfZWxlbWVudF9jYWxsX3ZpZGVvX3Jvb21zXCIpO1xuXG4gICAgaWYgKCFzcGFjZSkgcmV0dXJuIG51bGw7XG5cbiAgICBsZXQgaW52aXRlT3B0aW9uOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChzcGFjZS5nZXRKb2luUnVsZSgpID09PSBcInB1YmxpY1wiIHx8IHNwYWNlLmNhbkludml0ZSh1c2VySWQpKSB7XG4gICAgICAgIGNvbnN0IG9uSW52aXRlQ2xpY2sgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHNob3dTcGFjZUludml0ZShzcGFjZSk7XG4gICAgICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW52aXRlT3B0aW9uID0gKFxuICAgICAgICAgICAgPEljb25pemVkQ29udGV4dE1lbnVPcHRpb25cbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImludml0ZS1vcHRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1NwYWNlUGFuZWxfY29udGV4dE1lbnVfaW52aXRlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lPVwibXhfU3BhY2VQYW5lbF9pY29uSW52aXRlXCJcbiAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJhY3Rpb258aW52aXRlXCIpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uSW52aXRlQ2xpY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGxldCBzZXR0aW5nc09wdGlvbjogSlNYLkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgbGVhdmVPcHRpb246IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHNob3VsZFNob3dTcGFjZVNldHRpbmdzKHNwYWNlKSkge1xuICAgICAgICBjb25zdCBvblNldHRpbmdzQ2xpY2sgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHNob3dTcGFjZVNldHRpbmdzKHNwYWNlKTtcbiAgICAgICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZXR0aW5nc09wdGlvbiA9IChcbiAgICAgICAgICAgIDxJY29uaXplZENvbnRleHRNZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJzZXR0aW5ncy1vcHRpb25cIlxuICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWU9XCJteF9TcGFjZVBhbmVsX2ljb25TZXR0aW5nc1wiXG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tbW9ufHNldHRpbmdzXCIpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uU2V0dGluZ3NDbGlja31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb25MZWF2ZUNsaWNrID0gKGV2OiBCdXR0b25FdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBsZWF2ZVNwYWNlKHNwYWNlKTtcbiAgICAgICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBsZWF2ZU9wdGlvbiA9IChcbiAgICAgICAgICAgIDxJY29uaXplZENvbnRleHRNZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJsZWF2ZS1vcHRpb25cIlxuICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWU9XCJteF9TcGFjZVBhbmVsX2ljb25MZWF2ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfSWNvbml6ZWRDb250ZXh0TWVudV9vcHRpb25fcmVkXCJcbiAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJzcGFjZXxsZWF2ZV9kaWFsb2dfYWN0aW9uXCIpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uTGVhdmVDbGlja31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGRldnRvb2xzT3B0aW9uOiBKU1guRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChTZXR0aW5nc1N0b3JlLmdldFZhbHVlKFwiZGV2ZWxvcGVyTW9kZVwiKSkge1xuICAgICAgICBjb25zdCBvblZpZXdUaW1lbGluZUNsaWNrID0gKGV2OiBCdXR0b25FdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICBkZWZhdWx0RGlzcGF0Y2hlci5kaXNwYXRjaDxWaWV3Um9vbVBheWxvYWQ+KHtcbiAgICAgICAgICAgICAgICBhY3Rpb246IEFjdGlvbi5WaWV3Um9vbSxcbiAgICAgICAgICAgICAgICByb29tX2lkOiBzcGFjZS5yb29tSWQsXG4gICAgICAgICAgICAgICAgZm9yY2VUaW1lbGluZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZXRyaWNzVHJpZ2dlcjogdW5kZWZpbmVkLCAvLyByb29tIGRvZXNuJ3QgY2hhbmdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBkZXZ0b29sc09wdGlvbiA9IChcbiAgICAgICAgICAgIDxJY29uaXplZENvbnRleHRNZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzTmFtZT1cIm14X1NwYWNlUGFuZWxfaWNvblNldHRpbmdzXCJcbiAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJzcGFjZXxjb250ZXh0X21lbnV8ZGV2dG9vbHNfb3Blbl90aW1lbGluZVwiKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvblZpZXdUaW1lbGluZUNsaWNrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNQZXJtaXNzaW9uVG9BZGRTcGFjZUNoaWxkID0gc3BhY2UuY3VycmVudFN0YXRlLm1heVNlbmRTdGF0ZUV2ZW50KEV2ZW50VHlwZS5TcGFjZUNoaWxkLCB1c2VySWQpO1xuICAgIGNvbnN0IGNhbkFkZFJvb21zID0gaGFzUGVybWlzc2lvblRvQWRkU3BhY2VDaGlsZCAmJiBzaG91bGRTaG93Q29tcG9uZW50KFVJQ29tcG9uZW50LkNyZWF0ZVJvb21zKTtcbiAgICBjb25zdCBjYW5BZGRWaWRlb1Jvb21zID0gY2FuQWRkUm9vbXMgJiYgdmlkZW9Sb29tc0VuYWJsZWQ7XG4gICAgY29uc3QgY2FuQWRkU3ViU3BhY2VzID0gaGFzUGVybWlzc2lvblRvQWRkU3BhY2VDaGlsZCAmJiBzaG91bGRTaG93Q29tcG9uZW50KFVJQ29tcG9uZW50LkNyZWF0ZVNwYWNlcyk7XG5cbiAgICBsZXQgbmV3Um9vbVNlY3Rpb246IEpTWC5FbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKGNhbkFkZFJvb21zIHx8IGNhbkFkZFN1YlNwYWNlcykge1xuICAgICAgICBjb25zdCBvbk5ld1Jvb21DbGljayA9IChldjogQnV0dG9uRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgUG9zdGhvZ1RyYWNrZXJzLnRyYWNrSW50ZXJhY3Rpb24oXCJXZWJTcGFjZUNvbnRleHRNZW51TmV3Um9vbUl0ZW1cIiwgZXYpO1xuICAgICAgICAgICAgc2hvd0NyZWF0ZU5ld1Jvb20oc3BhY2UpO1xuICAgICAgICAgICAgb25GaW5pc2hlZCgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG9uTmV3VmlkZW9Sb29tQ2xpY2sgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHNob3dDcmVhdGVOZXdSb29tKHNwYWNlLCBlbGVtZW50Q2FsbFZpZGVvUm9vbXNFbmFibGVkID8gUm9vbVR5cGUuVW5zdGFibGVDYWxsIDogUm9vbVR5cGUuRWxlbWVudFZpZGVvKTtcbiAgICAgICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbk5ld1N1YnNwYWNlQ2xpY2sgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHNob3dDcmVhdGVOZXdTdWJzcGFjZShzcGFjZSk7XG4gICAgICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgbmV3Um9vbVNlY3Rpb24gPSAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJhZGQtdG8tc3BhY2UtaGVhZGVyXCIgY2xhc3NOYW1lPVwibXhfU3BhY2VQYW5lbF9jb250ZXh0TWVudV9zZXBhcmF0b3JMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICB7X3QoXCJhY3Rpb258YWRkXCIpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtjYW5BZGRSb29tcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxJY29uaXplZENvbnRleHRNZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm5ldy1yb29tLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lPVwibXhfU3BhY2VQYW5lbF9pY29uUGx1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJjb21tb258cm9vbVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uTmV3Um9vbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2NhbkFkZFZpZGVvUm9vbXMgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SWNvbml6ZWRDb250ZXh0TWVudU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJuZXctdmlkZW8tcm9vbS1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzTmFtZT1cIm14X1NwYWNlUGFuZWxfaWNvblBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tbW9ufHZpZGVvX3Jvb21cIil9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbk5ld1ZpZGVvUm9vbUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QmV0YVBpbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9JY29uaXplZENvbnRleHRNZW51T3B0aW9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2NhbkFkZFN1YlNwYWNlcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxJY29uaXplZENvbnRleHRNZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm5ldy1zdWJzcGFjZS1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzTmFtZT1cIm14X1NwYWNlUGFuZWxfaWNvblBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tbW9ufHNwYWNlXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25OZXdTdWJzcGFjZUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QmV0YVBpbGwgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9JY29uaXplZENvbnRleHRNZW51T3B0aW9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBvblByZWZlcmVuY2VzQ2xpY2sgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHNob3dTcGFjZVByZWZlcmVuY2VzKHNwYWNlKTtcbiAgICAgICAgb25GaW5pc2hlZCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcGVuU3BhY2UgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoPFZpZXdSb29tUGF5bG9hZD4oe1xuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICByb29tX2lkOiBzcGFjZS5yb29tSWQsXG4gICAgICAgICAgICBtZXRyaWNzVHJpZ2dlcjogdW5kZWZpbmVkLCAvLyBvdGhlclxuICAgICAgICB9KTtcbiAgICAgICAgb25GaW5pc2hlZCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkV4cGxvcmVSb29tc0NsaWNrID0gKGV2OiBCdXR0b25FdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBQb3N0aG9nVHJhY2tlcnMudHJhY2tJbnRlcmFjdGlvbihcIldlYlNwYWNlQ29udGV4dE1lbnVFeHBsb3JlUm9vbXNJdGVtXCIsIGV2KTtcbiAgICAgICAgb3BlblNwYWNlKGV2KTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25Ib21lQ2xpY2sgPSAoZXY6IEJ1dHRvbkV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIFBvc3Rob2dUcmFja2Vycy50cmFja0ludGVyYWN0aW9uKFwiV2ViU3BhY2VDb250ZXh0TWVudUhvbWVJdGVtXCIsIGV2KTtcbiAgICAgICAgb3BlblNwYWNlKGV2KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEljb25pemVkQ29udGV4dE1lbnUgey4uLnByb3BzfSBvbkZpbmlzaGVkPXtvbkZpbmlzaGVkfSBjbGFzc05hbWU9XCJteF9TcGFjZVBhbmVsX2NvbnRleHRNZW51XCIgY29tcGFjdD5cbiAgICAgICAgICAgIHshaGlkZUhlYWRlciAmJiA8ZGl2IGNsYXNzTmFtZT1cIm14X1NwYWNlUGFuZWxfY29udGV4dE1lbnVfaGVhZGVyXCI+e3NwYWNlLm5hbWV9PC9kaXY+fVxuICAgICAgICAgICAgPEljb25pemVkQ29udGV4dE1lbnVPcHRpb25MaXN0IGZpcnN0PlxuICAgICAgICAgICAgICAgIDxJY29uaXplZENvbnRleHRNZW51T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzc05hbWU9XCJteF9TcGFjZVBhbmVsX2ljb25Ib21lXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwic3BhY2V8Y29udGV4dF9tZW51fGhvbWVcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uSG9tZUNsaWNrfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge2ludml0ZU9wdGlvbn1cbiAgICAgICAgICAgICAgICA8SWNvbml6ZWRDb250ZXh0TWVudU9wdGlvblxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lPVwibXhfU3BhY2VQYW5lbF9pY29uRXhwbG9yZVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtjYW5BZGRSb29tcyA/IF90KFwic3BhY2V8Y29udGV4dF9tZW51fG1hbmFnZV9hbmRfZXhwbG9yZVwiKSA6IF90KFwic3BhY2V8Y29udGV4dF9tZW51fGV4cGxvcmVcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uRXhwbG9yZVJvb21zQ2xpY2t9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8SWNvbml6ZWRDb250ZXh0TWVudU9wdGlvblxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3NOYW1lPVwibXhfU3BhY2VQYW5lbF9pY29uUHJlZmVyZW5jZXNcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJjb21tb258cHJlZmVyZW5jZXNcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uUHJlZmVyZW5jZXNDbGlja31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtkZXZ0b29sc09wdGlvbn1cbiAgICAgICAgICAgICAgICB7c2V0dGluZ3NPcHRpb259XG4gICAgICAgICAgICAgICAge2xlYXZlT3B0aW9ufVxuICAgICAgICAgICAgICAgIHtuZXdSb29tU2VjdGlvbn1cbiAgICAgICAgICAgIDwvSWNvbml6ZWRDb250ZXh0TWVudU9wdGlvbkxpc3Q+XG4gICAgICAgIDwvSWNvbml6ZWRDb250ZXh0TWVudT5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU3BhY2VDb250ZXh0TWVudTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBR0EsSUFBQUUsb0JBQUEsR0FBQUgsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFRQSxJQUFBSyxlQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBUCxPQUFBO0FBRUEsSUFBQVEsV0FBQSxHQUFBRCxzQkFBQSxDQUFBUCxPQUFBO0FBQ0EsSUFBQVMsU0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsY0FBQSxHQUFBSCxzQkFBQSxDQUFBUCxPQUFBO0FBQ0EsSUFBQVcsWUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksUUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsYUFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsVUFBQSxHQUFBZCxPQUFBO0FBQ0EsSUFBQWUsZ0JBQUEsR0FBQVIsc0JBQUEsQ0FBQVAsT0FBQTtBQUF1RCxNQUFBZ0IsU0FBQTtBQWhDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxD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