UNPKG

matrix-react-sdk

Version:
242 lines (202 loc) 28.9 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); 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 = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _event = require("matrix-js-sdk/src/@types/event"); var _reactFocusLock = _interopRequireDefault(require("react-focus-lock")); var _languageHandler = require("../../../languageHandler"); var _AccessibleTooltipButton = _interopRequireDefault(require("../elements/AccessibleTooltipButton")); var _ContextMenu = require("../../structures/ContextMenu"); var _createRoom = _interopRequireWildcard(require("../../../createRoom")); var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext")); var _SpaceBasicSettings = require("./SpaceBasicSettings"); var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton")); var _BetaCard = require("../beta/BetaCard"); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _actions = require("../../../dispatcher/actions"); var _UserSettingsDialog = require("../dialogs/UserSettingsDialog"); var _Field = _interopRequireDefault(require("../elements/Field")); var _Validation = _interopRequireDefault(require("../elements/Validation")); var _SpaceRoomView = require("../../structures/SpaceRoomView"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } const SpaceCreateMenuType = ({ title, description, className, onClick }) => { return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { className: (0, _classnames.default)("mx_SpaceCreateMenuType", className), onClick: onClick }, /*#__PURE__*/_react.default.createElement("h3", null, title), /*#__PURE__*/_react.default.createElement("span", null, description)); }; var Visibility; (function (Visibility) { Visibility[Visibility["Public"] = 0] = "Public"; Visibility[Visibility["Private"] = 1] = "Private"; })(Visibility || (Visibility = {})); const spaceNameValidator = (0, _Validation.default)({ rules: [{ key: "required", test: async ({ value }) => !!value, invalid: () => (0, _languageHandler._t)("Please enter a name for the space") }] }); const SpaceCreateMenu = ({ onFinished }) => { const cli = (0, _react.useContext)(_MatrixClientContext.default); const [visibility, setVisibility] = (0, _react.useState)(null); const [busy, setBusy] = (0, _react.useState)(false); const [name, setName] = (0, _react.useState)(""); const spaceNameField = (0, _react.useRef)(); const [avatar, setAvatar] = (0, _react.useState)(null); const [topic, setTopic] = (0, _react.useState)(""); const onSpaceCreateClick = async e => { e.preventDefault(); if (busy) return; setBusy(true); // require & validate the space name field if (!(await spaceNameField.current.validate({ allowEmpty: false }))) { spaceNameField.current.focus(); spaceNameField.current.validate({ allowEmpty: false, focused: true }); setBusy(false); return; } const initialState /*: IStateEvent[]*/ = [{ type: _event.EventType.RoomHistoryVisibility, content: { "history_visibility": visibility === Visibility.Public ? "world_readable" : "invited" } }]; if (avatar) { const url = await cli.uploadContent(avatar); initialState.push({ type: _event.EventType.RoomAvatar, content: { url } }); } if (topic) { initialState.push({ type: _event.EventType.RoomTopic, content: { topic } }); } try { await (0, _createRoom.default)({ createOpts: { preset: visibility === Visibility.Public ? _createRoom.Preset.PublicChat : _createRoom.Preset.PrivateChat, name, creation_content: { // Based on MSC1840 [_event.RoomCreateTypeField]: _event.RoomType.Space }, initial_state: initialState, power_level_content_override: _objectSpread({ // Only allow Admins to write to the timeline to prevent hidden sync spam events_default: 100 }, Visibility.Public ? { invite: 0 } : {}) }, spinner: false, encryption: false, andView: true, inlineErrors: true }); onFinished(); } catch (e) { console.error(e); } }; let body; if (visibility === null) { body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h2", null, (0, _languageHandler._t)("Create a space")), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("Spaces are a new way to group rooms and people. " + "To join an existing space you'll need an invite.")), /*#__PURE__*/_react.default.createElement(SpaceCreateMenuType, { title: (0, _languageHandler._t)("Public"), description: (0, _languageHandler._t)("Open space for anyone, best for communities"), className: "mx_SpaceCreateMenuType_public", onClick: () => setVisibility(Visibility.Public) }), /*#__PURE__*/_react.default.createElement(SpaceCreateMenuType, { title: (0, _languageHandler._t)("Private"), description: (0, _languageHandler._t)("Invite only, best for yourself or teams"), className: "mx_SpaceCreateMenuType_private", onClick: () => setVisibility(Visibility.Private) }), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("You can change this later")), /*#__PURE__*/_react.default.createElement(_SpaceRoomView.SpaceFeedbackPrompt, { onClick: onFinished })); } else { body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AccessibleTooltipButton.default, { className: "mx_SpaceCreateMenu_back", onClick: () => setVisibility(null), title: (0, _languageHandler._t)("Go back") }), /*#__PURE__*/_react.default.createElement("h2", null, visibility === Visibility.Public ? (0, _languageHandler._t)("Your public space") : (0, _languageHandler._t)("Your private space")), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("Add some details to help people recognise it."), " ", (0, _languageHandler._t)("You can change these anytime.")), /*#__PURE__*/_react.default.createElement("form", { className: "mx_SpaceBasicSettings", onSubmit: onSpaceCreateClick }, /*#__PURE__*/_react.default.createElement(_SpaceBasicSettings.SpaceAvatar, { setAvatar: setAvatar, avatarDisabled: busy }), /*#__PURE__*/_react.default.createElement(_Field.default, { name: "spaceName", label: (0, _languageHandler._t)("Name"), autoFocus: true, value: name, onChange: ev => setName(ev.target.value), ref: spaceNameField, onValidate: spaceNameValidator, disabled: busy }), /*#__PURE__*/_react.default.createElement(_Field.default, { name: "spaceTopic", element: "textarea", label: (0, _languageHandler._t)("Description"), value: topic, onChange: ev => setTopic(ev.target.value), rows: 3, disabled: busy })), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { kind: "primary", onClick: onSpaceCreateClick, disabled: busy }, busy ? (0, _languageHandler._t)("Creating...") : (0, _languageHandler._t)("Create"))); } return /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenu, { left: 72, top: 62, chevronOffset: 0, chevronFace: _ContextMenu.ChevronFace.None, onFinished: onFinished, wrapperClassName: "mx_SpaceCreateMenu_wrapper", managed: false }, /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, { returnFocus: true }, /*#__PURE__*/_react.default.createElement(_BetaCard.BetaPill, { onClick: () => { onFinished(); _dispatcher.default.dispatch({ action: _actions.Action.ViewUserSettings, initialTabId: _UserSettingsDialog.USER_LABS_TAB }); } }), body)); }; var _default = SpaceCreateMenu; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NwYWNlcy9TcGFjZUNyZWF0ZU1lbnUudHN4Il0sIm5hbWVzIjpbIlNwYWNlQ3JlYXRlTWVudVR5cGUiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiY2xhc3NOYW1lIiwib25DbGljayIsIlZpc2liaWxpdHkiLCJzcGFjZU5hbWVWYWxpZGF0b3IiLCJydWxlcyIsImtleSIsInRlc3QiLCJ2YWx1ZSIsImludmFsaWQiLCJTcGFjZUNyZWF0ZU1lbnUiLCJvbkZpbmlzaGVkIiwiY2xpIiwiTWF0cml4Q2xpZW50Q29udGV4dCIsInZpc2liaWxpdHkiLCJzZXRWaXNpYmlsaXR5IiwiYnVzeSIsInNldEJ1c3kiLCJuYW1lIiwic2V0TmFtZSIsInNwYWNlTmFtZUZpZWxkIiwiYXZhdGFyIiwic2V0QXZhdGFyIiwidG9waWMiLCJzZXRUb3BpYyIsIm9uU3BhY2VDcmVhdGVDbGljayIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImN1cnJlbnQiLCJ2YWxpZGF0ZSIsImFsbG93RW1wdHkiLCJmb2N1cyIsImZvY3VzZWQiLCJpbml0aWFsU3RhdGUiLCJ0eXBlIiwiRXZlbnRUeXBlIiwiUm9vbUhpc3RvcnlWaXNpYmlsaXR5IiwiY29udGVudCIsIlB1YmxpYyIsInVybCIsInVwbG9hZENvbnRlbnQiLCJwdXNoIiwiUm9vbUF2YXRhciIsIlJvb21Ub3BpYyIsImNyZWF0ZU9wdHMiLCJwcmVzZXQiLCJQcmVzZXQiLCJQdWJsaWNDaGF0IiwiUHJpdmF0ZUNoYXQiLCJjcmVhdGlvbl9jb250ZW50IiwiUm9vbUNyZWF0ZVR5cGVGaWVsZCIsIlJvb21UeXBlIiwiU3BhY2UiLCJpbml0aWFsX3N0YXRlIiwicG93ZXJfbGV2ZWxfY29udGVudF9vdmVycmlkZSIsImV2ZW50c19kZWZhdWx0IiwiaW52aXRlIiwic3Bpbm5lciIsImVuY3J5cHRpb24iLCJhbmRWaWV3IiwiaW5saW5lRXJyb3JzIiwiY29uc29sZSIsImVycm9yIiwiYm9keSIsIlByaXZhdGUiLCJldiIsInRhcmdldCIsIkNoZXZyb25GYWNlIiwiTm9uZSIsImRlZmF1bHREaXNwYXRjaGVyIiwiZGlzcGF0Y2giLCJhY3Rpb24iLCJBY3Rpb24iLCJWaWV3VXNlclNldHRpbmdzIiwiaW5pdGlhbFRhYklkIiwiVVNFUl9MQUJTX1RBQiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWdCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsbUJBQW1CLEdBQUcsQ0FBQztBQUFFQyxFQUFBQSxLQUFGO0FBQVNDLEVBQUFBLFdBQVQ7QUFBc0JDLEVBQUFBLFNBQXRCO0FBQWlDQyxFQUFBQTtBQUFqQyxDQUFELEtBQWdEO0FBQ3hFLHNCQUNJLDZCQUFDLHlCQUFEO0FBQWtCLElBQUEsU0FBUyxFQUFFLHlCQUFXLHdCQUFYLEVBQXFDRCxTQUFyQyxDQUE3QjtBQUE4RSxJQUFBLE9BQU8sRUFBRUM7QUFBdkYsa0JBQ0kseUNBQU1ILEtBQU4sQ0FESixlQUVJLDJDQUFRQyxXQUFSLENBRkosQ0FESjtBQU1ILENBUEQ7O0lBU0tHLFU7O1dBQUFBLFU7QUFBQUEsRUFBQUEsVSxDQUFBQSxVO0FBQUFBLEVBQUFBLFUsQ0FBQUEsVTtHQUFBQSxVLEtBQUFBLFU7O0FBS0wsTUFBTUMsa0JBQWtCLEdBQUcseUJBQWU7QUFDdENDLEVBQUFBLEtBQUssRUFBRSxDQUNIO0FBQ0lDLElBQUFBLEdBQUcsRUFBRSxVQURUO0FBRUlDLElBQUFBLElBQUksRUFBRSxPQUFPO0FBQUVDLE1BQUFBO0FBQUYsS0FBUCxLQUFxQixDQUFDLENBQUNBLEtBRmpDO0FBR0lDLElBQUFBLE9BQU8sRUFBRSxNQUFNLHlCQUFHLG1DQUFIO0FBSG5CLEdBREc7QUFEK0IsQ0FBZixDQUEzQjs7QUFVQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQztBQUFFQyxFQUFB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QSxJQUFJLEVBQUUsQ0FOVjtBQU9JLE1BQUEsUUFBUSxFQUFFUTtBQVBkLE1BZEosQ0FwQkcsZUE2Q0gsNkJBQUMseUJBQUQ7QUFBa0IsTUFBQSxJQUFJLEVBQUMsU0FBdkI7QUFBaUMsTUFBQSxPQUFPLEVBQUVTLGtCQUExQztBQUE4RCxNQUFBLFFBQVEsRUFBRVQ7QUFBeEUsT0FDTUEsSUFBSSxHQUFHLHlCQUFHLGFBQUgsQ0FBSCxHQUF1Qix5QkFBRyxRQUFILENBRGpDLENBN0NHLENBQVA7QUFpREg7O0FBRUQsc0JBQU8sNkJBQUMsd0JBQUQ7QUFDSCxJQUFBLElBQUksRUFBRSxFQURIO0FBRUgsSUFBQSxHQUFHLEVBQUUsRUFGRjtBQUdILElBQUEsYUFBYSxFQUFFLENBSFo7QUFJSCxJQUFBLFdBQVcsRUFBRW1ELHlCQUFZQyxJQUp0QjtBQUtILElBQUEsVUFBVSxFQUFFekQsVUFMVDtBQU1ILElBQUEsZ0JBQWdCLEVBQUMsNEJBTmQ7QUFPSCxJQUFBLE9BQU8sRUFBRTtBQVBOLGtCQVNILDZCQUFDLHVCQUFEO0FBQVcsSUFBQSxXQUFXLEVBQUU7QUFBeEIsa0JBQ0ksNkJBQUMsa0JBQUQ7QUFBVSxJQUFBLE9BQU8sRUFBRSxNQUFNO0FBQ3JCQSxNQUFBQSxVQUFVOztBQUNWMEQsMEJBQWtCQyxRQUFsQixDQUEyQjtBQUN2QkMsUUFBQUEsTUFBTSxFQUFFQyxnQkFBT0MsZ0JBRFE7QUFFdkJDLFFBQUFBLFlBQVksRUFBRUM7QUFGUyxPQUEzQjtBQUlIO0FBTkQsSUFESixFQVFNWixJQVJOLENBVEcsQ0FBUDtBQW9CSCxDQTFLRDs7ZUE0S2VyRCxlIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7dXNlQ29udGV4dCwgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHtFdmVudFR5cGUsIFJvb21UeXBlLCBSb29tQ3JlYXRlVHlwZUZpZWxkfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvQHR5cGVzL2V2ZW50XCI7XG5pbXBvcnQgRm9jdXNMb2NrIGZyb20gXCJyZWFjdC1mb2N1cy1sb2NrXCI7XG5cbmltcG9ydCB7X3R9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBBY2Nlc3NpYmxlVG9vbHRpcEJ1dHRvbiBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZVRvb2x0aXBCdXR0b25cIjtcbmltcG9ydCB7Q2hldnJvbkZhY2UsIENvbnRleHRNZW51fSBmcm9tIFwiLi4vLi4vc3RydWN0dXJlcy9Db250ZXh0TWVudVwiO1xuaW1wb3J0IGNyZWF0ZVJvb20sIHtJU3RhdGVFdmVudCwgUHJlc2V0fSBmcm9tIFwiLi4vLi4vLi4vY3JlYXRlUm9vbVwiO1xuaW1wb3J0IE1hdHJpeENsaWVudENvbnRleHQgZnJvbSBcIi4uLy4uLy4uL2NvbnRleHRzL01hdHJpeENsaWVudENvbnRleHRcIjtcbmltcG9ydCB7U3BhY2VBdmF0YXJ9IGZyb20gXCIuL1NwYWNlQmFzaWNTZXR0aW5nc1wiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4uL2VsZW1lbnRzL0FjY2Vzc2libGVCdXR0b25cIjtcbmltcG9ydCB7QmV0YVBpbGx9IGZyb20gXCIuLi9iZXRhL0JldGFDYXJkXCI7XG5pbXBvcnQgZGVmYXVsdERpc3BhdGNoZXIgZnJvbSBcIi4uLy4uLy4uL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi8uLi8uLi9kaXNwYXRjaGVyL2FjdGlvbnNcIjtcbmltcG9ydCB7VVNFUl9MQUJTX1RBQn0gZnJvbSBcIi4uL2RpYWxvZ3MvVXNlclNldHRpbmdzRGlhbG9nXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcIi4uL2VsZW1lbnRzL0ZpZWxkXCI7XG5pbXBvcnQgd2l0aFZhbGlkYXRpb24gZnJvbSBcIi4uL2VsZW1lbnRzL1ZhbGlkYXRpb25cIjtcbmltcG9ydCB7U3BhY2VGZWVkYmFja1Byb21wdH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZXMvU3BhY2VSb29tVmlld1wiO1xuXG5jb25zdCBTcGFjZUNyZWF0ZU1lbnVUeXBlID0gKHsgdGl0bGUsIGRlc2NyaXB0aW9uLCBjbGFzc05hbWUsIG9uQ2xpY2sgfSkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcIm14X1NwYWNlQ3JlYXRlTWVudVR5cGVcIiwgY2xhc3NOYW1lKX0gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8aDM+eyB0aXRsZSB9PC9oMz5cbiAgICAgICAgICAgIDxzcGFuPnsgZGVzY3JpcHRpb24gfTwvc3Bhbj5cbiAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICk7XG59O1xuXG5lbnVtIFZpc2liaWxpdHkge1xuICAgIFB1YmxpYyxcbiAgICBQcml2YXRlLFxufVxuXG5jb25zdCBzcGFjZU5hbWVWYWxpZGF0b3IgPSB3aXRoVmFsaWRhdGlvbih7XG4gICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInJlcXVpcmVkXCIsXG4gICAgICAgICAgICB0ZXN0OiBhc3luYyAoeyB2YWx1ZSB9KSA9PiAhIXZhbHVlLFxuICAgICAgICAgICAgaW52YWxpZDogKCkgPT4gX3QoXCJQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGUgc3BhY2VcIiksXG4gICAgICAgIH0sXG4gICAgXSxcbn0pO1xuXG5jb25zdCBTcGFjZUNyZWF0ZU1lbnUgPSAoeyBvbkZpbmlzaGVkIH0pID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VDb250ZXh0KE1hdHJpeENsaWVudENvbnRleHQpO1xuICAgIGNvbnN0IFt2aXNpYmlsaXR5LCBzZXRWaXNpYmlsaXR5XSA9IHVzZVN0YXRlPFZpc2liaWxpdHk+KG51bGwpO1xuICAgIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIGNvbnN0IFtuYW1lLCBzZXROYW1lXSA9IHVzZVN0YXRlKFwiXCIpO1xuICAgIGNvbnN0IHNwYWNlTmFtZUZpZWxkID0gdXNlUmVmPEZpZWxkPigpO1xuICAgIGNvbnN0IFthdmF0YXIsIHNldEF2YXRhcl0gPSB1c2VTdGF0ZTxGaWxlPihudWxsKTtcbiAgICBjb25zdCBbdG9waWMsIHNldFRvcGljXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgICBjb25zdCBvblNwYWNlQ3JlYXRlQ2xpY2sgPSBhc3luYyAoZSkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChidXN5KSByZXR1cm47XG5cbiAgICAgICAgc2V0QnVzeSh0cnVlKTtcbiAgICAgICAgLy8gcmVxdWlyZSAmIHZhbGlkYXRlIHRoZSBzcGFjZSBuYW1lIGZpZWxkXG4gICAgICAgIGlmICghYXdhaXQgc3BhY2VOYW1lRmllbGQuY3VycmVudC52YWxpZGF0ZSh7IGFsbG93RW1wdHk6IGZhbHNlIH0pKSB7XG4gICAgICAgICAgICBzcGFjZU5hbWVGaWVsZC5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgICBzcGFjZU5hbWVGaWVsZC5jdXJyZW50LnZhbGlkYXRlKHsgYWxsb3dFbXB0eTogZmFsc2UsIGZvY3VzZWQ6IHRydWUgfSk7XG4gICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogSVN0YXRlRXZlbnRbXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuUm9vbUhpc3RvcnlWaXNpYmlsaXR5LFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJoaXN0b3J5X3Zpc2liaWxpdHlcIjogdmlzaWJpbGl0eSA9PT0gVmlzaWJpbGl0eS5QdWJsaWMgPyBcIndvcmxkX3JlYWRhYmxlXCIgOiBcImludml0ZWRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGF2YXRhcikge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgY2xpLnVwbG9hZENvbnRlbnQoYXZhdGFyKTtcblxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5Sb29tQXZhdGFyLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHsgdXJsIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9waWMpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuUm9vbVRvcGljLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHsgdG9waWMgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGNyZWF0ZVJvb20oe1xuICAgICAgICAgICAgICAgIGNyZWF0ZU9wdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0OiB2aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5LlB1YmxpYyA/IFByZXNldC5QdWJsaWNDaGF0IDogUHJlc2V0LlByaXZhdGVDaGF0LFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbl9jb250ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCYXNlZCBvbiBNU0MxODQwXG4gICAgICAgICAgICAgICAgICAgICAgICBbUm9vbUNyZWF0ZVR5cGVGaWVsZF06IFJvb21UeXBlLlNwYWNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsX3N0YXRlOiBpbml0aWFsU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHBvd2VyX2xldmVsX2NvbnRlbnRfb3ZlcnJpZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYWxsb3cgQWRtaW5zIHRvIHdyaXRlIHRvIHRoZSB0aW1lbGluZSB0byBwcmV2ZW50IGhpZGRlbiBzeW5jIHNwYW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c19kZWZhdWx0OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5WaXNpYmlsaXR5LlB1YmxpYyA/IHsgaW52aXRlOiAwIH0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNwaW5uZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVuY3J5cHRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFuZFZpZXc6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5saW5lRXJyb3JzOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBsZXQgYm9keTtcbiAgICBpZiAodmlzaWJpbGl0eSA9PT0gbnVsbCkge1xuICAgICAgICBib2R5ID0gPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPGgyPnsgX3QoXCJDcmVhdGUgYSBzcGFjZVwiKSB9PC9oMj5cbiAgICAgICAgICAgIDxwPnsgX3QoXCJTcGFjZXMgYXJlIGEgbmV3IHdheSB0byBncm91cCByb29tcyBhbmQgcGVvcGxlLiBcIiArXG4gICAgICAgICAgICAgICAgXCJUbyBqb2luIGFuIGV4aXN0aW5nIHNwYWNlIHlvdSdsbCBuZWVkIGFuIGludml0ZS5cIikgfTwvcD5cblxuICAgICAgICAgICAgPFNwYWNlQ3JlYXRlTWVudVR5cGVcbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJQdWJsaWNcIil9XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e190KFwiT3BlbiBzcGFjZSBmb3IgYW55b25lLCBiZXN0IGZvciBjb21tdW5pdGllc1wiKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVUeXBlX3B1YmxpY1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0VmlzaWJpbGl0eShWaXNpYmlsaXR5LlB1YmxpYyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFNwYWNlQ3JlYXRlTWVudVR5cGVcbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJQcml2YXRlXCIpfVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfdChcIkludml0ZSBvbmx5LCBiZXN0IGZvciB5b3Vyc2VsZiBvciB0ZWFtc1wiKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVUeXBlX3ByaXZhdGVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpc2liaWxpdHkoVmlzaWJpbGl0eS5Qcml2YXRlKX1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxwPnsgX3QoXCJZb3UgY2FuIGNoYW5nZSB0aGlzIGxhdGVyXCIpIH08L3A+XG5cbiAgICAgICAgICAgIDxTcGFjZUZlZWRiYWNrUHJvbXB0IG9uQ2xpY2s9e29uRmluaXNoZWR9IC8+XG4gICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGJvZHkgPSA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8QWNjZXNzaWJsZVRvb2x0aXBCdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVfYmFja1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0VmlzaWJpbGl0eShudWxsKX1cbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJHbyBiYWNrXCIpfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPGgyPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eSA9PT0gVmlzaWJpbGl0eS5QdWJsaWMgPyBfdChcIllvdXIgcHVibGljIHNwYWNlXCIpIDogX3QoXCJZb3VyIHByaXZhdGUgc3BhY2VcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBfdChcIkFkZCBzb21lIGRldGFpbHMgdG8gaGVscCBwZW9wbGUgcmVjb2duaXNlIGl0LlwiKVxuICAgICAgICAgICAgICAgIH0ge1xuICAgICAgICAgICAgICAgICAgICBfdChcIllvdSBjYW4gY2hhbmdlIHRoZXNlIGFueXRpbWUuXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICA8Zm9ybSBjbGFzc05hbWU9XCJteF9TcGFjZUJhc2ljU2V0dGluZ3NcIiBvblN1Ym1pdD17b25TcGFjZUNyZWF0ZUNsaWNrfT5cbiAgICAgICAgICAgICAgICA8U3BhY2VBdmF0YXIgc2V0QXZhdGFyPXtzZXRBdmF0YXJ9IGF2YXRhckRpc2FibGVkPXtidXN5fSAvPlxuXG4gICAgICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJzcGFjZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJOYW1lXCIpfVxuICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXYgPT4gc2V0TmFtZShldi50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICByZWY9e3NwYWNlTmFtZUZpZWxkfVxuICAgICAgICAgICAgICAgICAgICBvblZhbGlkYXRlPXtzcGFjZU5hbWVWYWxpZGF0b3J9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8RmllbGRcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNwYWNlVG9waWNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PVwidGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJEZXNjcmlwdGlvblwiKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RvcGljfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXYgPT4gc2V0VG9waWMoZXYudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZm9ybT5cblxuICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24ga2luZD1cInByaW1hcnlcIiBvbkNsaWNrPXtvblNwYWNlQ3JlYXRlQ2xpY2t9IGRpc2FibGVkPXtidXN5fT5cbiAgICAgICAgICAgICAgICB7IGJ1c3kgPyBfdChcIkNyZWF0aW5nLi4uXCIpIDogX3QoXCJDcmVhdGVcIikgfVxuICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PjtcbiAgICB9XG5cbiAgICByZXR1cm4gPENvbnRleHRNZW51XG4gICAgICAgIGxlZnQ9ezcyfVxuICAgICAgICB0b3A9ezYyfVxuICAgICAgICBjaGV2cm9uT2Zmc2V0PXswfVxuICAgICAgICBjaGV2cm9uRmFjZT17Q2hldnJvbkZhY2UuTm9uZX1cbiAgICAgICAgb25GaW5pc2hlZD17b25GaW5pc2hlZH1cbiAgICAgICAgd3JhcHBlckNsYXNzTmFtZT1cIm14X1NwYWNlQ3JlYXRlTWVudV93cmFwcGVyXCJcbiAgICAgICAgbWFuYWdlZD17ZmFsc2V9XG4gICAgPlxuICAgICAgICA8Rm9jdXNMb2NrIHJldHVybkZvY3VzPXt0cnVlfT5cbiAgICAgICAgICAgIDxCZXRhUGlsbCBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgb25GaW5pc2hlZCgpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1VzZXJTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFRhYklkOiBVU0VSX0xBQlNfVEFCLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfX0gLz5cbiAgICAgICAgICAgIHsgYm9keSB9XG4gICAgICAgIDwvRm9jdXNMb2NrPlxuICAgIDwvQ29udGV4dE1lbnU+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTcGFjZUNyZWF0ZU1lbnU7XG4iXX0=