UNPKG

matrix-react-sdk

Version:
114 lines (111 loc) 20.1 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 _matrixWidgetApi = require("matrix-widget-api"); var _utils = require("matrix-js-sdk/src/utils"); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); var _languageHandler = require("../../../languageHandler"); var _objects = require("../../../utils/objects"); var _StyledCheckbox = _interopRequireDefault(require("../elements/StyledCheckbox")); var _DialogButtons = _interopRequireDefault(require("../elements/DialogButtons")); var _LabelledToggleSwitch = _interopRequireDefault(require("../elements/LabelledToggleSwitch")); var _CapabilityText = require("../../../widgets/CapabilityText"); /* Copyright 2024 New Vector Ltd. Copyright 2020, 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. */ class WidgetCapabilitiesPromptDialog extends _react.default.PureComponent { constructor(props) { super(props); (0, _defineProperty2.default)(this, "eventPermissionsMap", new Map()); (0, _defineProperty2.default)(this, "onToggle", capability => { const newStates = (0, _objects.objectShallowClone)(this.state.booleanStates); newStates[capability] = !newStates[capability]; this.setState({ booleanStates: newStates }); }); (0, _defineProperty2.default)(this, "onRememberSelectionChange", newVal => { this.setState({ rememberSelection: newVal }); }); (0, _defineProperty2.default)(this, "onSubmit", async () => { this.closeAndTryRemember(Object.entries(this.state.booleanStates).filter(([_, isSelected]) => isSelected).map(([cap]) => cap)); }); (0, _defineProperty2.default)(this, "onReject", async () => { this.closeAndTryRemember([]); // nothing was approved }); const parsedEvents = _matrixWidgetApi.WidgetEventCapability.findEventCapabilities(this.props.requestedCapabilities); parsedEvents.forEach(e => this.eventPermissionsMap.set(e.raw, e)); const states = {}; this.props.requestedCapabilities.forEach(c => states[c] = true); this.state = { booleanStates: states, rememberSelection: true }; } closeAndTryRemember(approved) { this.props.onFinished({ approved, remember: this.state.rememberSelection }); } render() { // We specifically order the timeline capabilities down to the bottom. The capability text // generation cares strongly about this. const orderedCapabilities = Object.entries(this.state.booleanStates).sort(([capA], [capB]) => { const isTimelineA = (0, _matrixWidgetApi.isTimelineCapability)(capA); const isTimelineB = (0, _matrixWidgetApi.isTimelineCapability)(capB); if (!isTimelineA && !isTimelineB) return (0, _utils.lexicographicCompare)(capA, capB); if (isTimelineA && !isTimelineB) return 1; if (!isTimelineA && isTimelineB) return -1; if (isTimelineA && isTimelineB) return (0, _utils.lexicographicCompare)(capA, capB); return 0; }); const checkboxRows = orderedCapabilities.map(([cap, isChecked], i) => { const text = _CapabilityText.CapabilityText.for(cap, this.props.widgetKind); const byline = text.byline ? /*#__PURE__*/_react.default.createElement("span", { className: "mx_WidgetCapabilitiesPromptDialog_byline" }, text.byline) : null; return /*#__PURE__*/_react.default.createElement("div", { className: "mx_WidgetCapabilitiesPromptDialog_cap", key: cap + i }, /*#__PURE__*/_react.default.createElement(_StyledCheckbox.default, { checked: isChecked, onChange: () => this.onToggle(cap) }, text.primary), byline); }); return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { className: "mx_WidgetCapabilitiesPromptDialog", onFinished: this.props.onFinished, title: (0, _languageHandler._t)("widget|capabilities_dialog|title") }, /*#__PURE__*/_react.default.createElement("form", { onSubmit: this.onSubmit }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_Dialog_content" }, /*#__PURE__*/_react.default.createElement("div", { className: "text-muted" }, (0, _languageHandler._t)("widget|capabilities_dialog|content_starting_text")), checkboxRows, /*#__PURE__*/_react.default.createElement(_DialogButtons.default, { primaryButton: (0, _languageHandler._t)("action|approve"), cancelButton: (0, _languageHandler._t)("widget|capabilities_dialog|decline_all_permission"), onPrimaryButtonClick: this.onSubmit, onCancel: this.onReject, additive: /*#__PURE__*/_react.default.createElement(_LabelledToggleSwitch.default, { value: this.state.rememberSelection, toggleInFront: true, onChange: this.onRememberSelectionChange, label: (0, _languageHandler._t)("widget|capabilities_dialog|remember_Selection") }) })))); } } exports.default = WidgetCapabilitiesPromptDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9tYXRyaXhXaWRnZXRBcGkiLCJfdXRpbHMiLCJfQmFzZURpYWxvZyIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfb2JqZWN0cyIsIl9TdHlsZWRDaGVja2JveCIsIl9EaWFsb2dCdXR0b25zIiwiX0xhYmVsbGVkVG9nZ2xlU3dpdGNoIiwiX0NhcGFiaWxpdHlUZXh0IiwiV2lkZ2V0Q2FwYWJpbGl0aWVzUHJvbXB0RGlhbG9nIiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiTWFwIiwiY2FwYWJpbGl0eSIsIm5ld1N0YXRlcyIsIm9iamVjdFNoYWxsb3dDbG9uZSIsInN0YXRlIiwiYm9vbGVhblN0YXRlcyIsInNldFN0YXRlIiwibmV3VmFsIiwicmVtZW1iZXJTZWxlY3Rpb24iLCJjbG9zZUFuZFRyeVJlbWVtYmVyIiwiT2JqZWN0IiwiZW50cmllcyIsImZpbHRlciIsIl8iLCJpc1NlbGVjdGVkIiwibWFwIiwiY2FwIiwicGFyc2VkRXZlbnRzIiwiV2lkZ2V0RXZlbnRDYXBhYmlsaXR5IiwiZmluZEV2ZW50Q2FwYWJpbGl0aWVzIiwicmVxdWVzdGVkQ2FwYWJpbGl0aWVzIiwiZm9yRWFjaCIsImUiLCJldmVudFBlcm1pc3Npb25zTWFwIiwic2V0IiwicmF3Iiwic3RhdGVzIiwiYyIsImFwcHJvdmVkIiwib25GaW5pc2hlZCIsInJlbWVtYmVyIiwicmVuZGVyIiwib3JkZXJlZENhcGFiaWxpdGllcyIsInNvcnQiLCJjYXBBIiwiY2FwQiIsImlzVGltZWxpbmVBIiwiaXNUaW1lbGluZUNhcGFiaWxpdHkiLCJpc1RpbWVsaW5lQiIsImxleGljb2dyYXBoaWNDb21wYXJlIiwiY2hlY2tib3hSb3dzIiwiaXNDaGVja2VkIiwiaSIsInRleHQiLCJDYXBhYmlsaXR5VGV4dCIsImZvciIsIndpZGdldEtpbmQiLCJieWxpbmUiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwia2V5IiwiY2hlY2tlZCIsIm9uQ2hhbmdlIiwib25Ub2dnbGUiLCJwcmltYXJ5IiwidGl0bGUiLCJfdCIsIm9uU3VibWl0IiwicHJpbWFyeUJ1dHRvbiIsImNhbmNlbEJ1dHRvbiIsIm9uUHJpbWFyeUJ1dHRvbkNsaWNrIiwib25DYW5jZWwiLCJvblJlamVjdCIsImFkZGl0aXZlIiwidmFsdWUiLCJ0b2dnbGVJbkZyb250Iiwib25SZW1lbWJlclNlbGVjdGlvbkNoYW5nZSIsImxhYmVsIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2RpYWxvZ3MvV2lkZ2V0Q2FwYWJpbGl0aWVzUHJvbXB0RGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCwgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBDYXBhYmlsaXR5LCBpc1RpbWVsaW5lQ2FwYWJpbGl0eSwgV2lkZ2V0LCBXaWRnZXRFdmVudENhcGFiaWxpdHksIFdpZGdldEtpbmQgfSBmcm9tIFwibWF0cml4LXdpZGdldC1hcGlcIjtcbmltcG9ydCB7IGxleGljb2dyYXBoaWNDb21wYXJlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3V0aWxzXCI7XG5cbmltcG9ydCBCYXNlRGlhbG9nIGZyb20gXCIuL0Jhc2VEaWFsb2dcIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgb2JqZWN0U2hhbGxvd0Nsb25lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL29iamVjdHNcIjtcbmltcG9ydCBTdHlsZWRDaGVja2JveCBmcm9tIFwiLi4vZWxlbWVudHMvU3R5bGVkQ2hlY2tib3hcIjtcbmltcG9ydCBEaWFsb2dCdXR0b25zIGZyb20gXCIuLi9lbGVtZW50cy9EaWFsb2dCdXR0b25zXCI7XG5pbXBvcnQgTGFiZWxsZWRUb2dnbGVTd2l0Y2ggZnJvbSBcIi4uL2VsZW1lbnRzL0xhYmVsbGVkVG9nZ2xlU3dpdGNoXCI7XG5pbXBvcnQgeyBDYXBhYmlsaXR5VGV4dCB9IGZyb20gXCIuLi8uLi8uLi93aWRnZXRzL0NhcGFiaWxpdHlUZXh0XCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIHJlcXVlc3RlZENhcGFiaWxpdGllczogU2V0PENhcGFiaWxpdHk+O1xuICAgIHdpZGdldDogV2lkZ2V0O1xuICAgIHdpZGdldEtpbmQ6IFdpZGdldEtpbmQ7IC8vIFRPRE86IFJlZmFjdG9yIGludG8gdGhlIFdpZGdldCBjbGFzc1xuICAgIG9uRmluaXNoZWQocmVzdWx0PzogeyBhcHByb3ZlZDogQ2FwYWJpbGl0eVtdOyByZW1lbWJlcjogYm9vbGVhbiB9KTogdm9pZDtcbn1cblxudHlwZSBCb29sZWFuU3RhdGVzID0gUGFydGlhbDx7XG4gICAgW2NhcGFiaWxpdHkgaW4gQ2FwYWJpbGl0eV06IGJvb2xlYW47XG59PjtcblxuaW50ZXJmYWNlIElTdGF0ZSB7XG4gICAgYm9vbGVhblN0YXRlczogQm9vbGVhblN0YXRlcztcbiAgICByZW1lbWJlclNlbGVjdGlvbjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lkZ2V0Q2FwYWJpbGl0aWVzUHJvbXB0RGlhbG9nIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIHByaXZhdGUgZXZlbnRQZXJtaXNzaW9uc01hcCA9IG5ldyBNYXA8Q2FwYWJpbGl0eSwgV2lkZ2V0RXZlbnRDYXBhYmlsaXR5PigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBJUHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlZEV2ZW50cyA9IFdpZGdldEV2ZW50Q2FwYWJpbGl0eS5maW5kRXZlbnRDYXBhYmlsaXRpZXModGhpcy5wcm9wcy5yZXF1ZXN0ZWRDYXBhYmlsaXRpZXMpO1xuICAgICAgICBwYXJzZWRFdmVudHMuZm9yRWFjaCgoZSkgPT4gdGhpcy5ldmVudFBlcm1pc3Npb25zTWFwLnNldChlLnJhdywgZSkpO1xuXG4gICAgICAgIGNvbnN0IHN0YXRlczogQm9vbGVhblN0YXRlcyA9IHt9O1xuICAgICAgICB0aGlzLnByb3BzLnJlcXVlc3RlZENhcGFiaWxpdGllcy5mb3JFYWNoKChjKSA9PiAoc3RhdGVzW2NdID0gdHJ1ZSkpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBib29sZWFuU3RhdGVzOiBzdGF0ZXMsXG4gICAgICAgICAgICByZW1lbWJlclNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVG9nZ2xlID0gKGNhcGFiaWxpdHk6IENhcGFiaWxpdHkpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbmV3U3RhdGVzID0gb2JqZWN0U2hhbGxvd0Nsb25lKHRoaXMuc3RhdGUuYm9vbGVhblN0YXRlcyk7XG4gICAgICAgIG5ld1N0YXRlc1tjYXBhYmlsaXR5XSA9ICFuZXdTdGF0ZXNbY2FwYWJpbGl0eV07XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBib29sZWFuU3RhdGVzOiBuZXdTdGF0ZXMgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25SZW1lbWJlclNlbGVjdGlvbkNoYW5nZSA9IChuZXdWYWw6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlbWVtYmVyU2VsZWN0aW9uOiBuZXdWYWwgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25TdWJtaXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VBbmRUcnlSZW1lbWJlcihcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuc3RhdGUuYm9vbGVhblN0YXRlcylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChbXywgaXNTZWxlY3RlZF0pID0+IGlzU2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgLm1hcCgoW2NhcF0pID0+IGNhcCksXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25SZWplY3QgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VBbmRUcnlSZW1lbWJlcihbXSk7IC8vIG5vdGhpbmcgd2FzIGFwcHJvdmVkXG4gICAgfTtcblxuICAgIHByaXZhdGUgY2xvc2VBbmRUcnlSZW1lbWJlcihhcHByb3ZlZDogQ2FwYWJpbGl0eVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcHMub25GaW5pc2hlZCh7IGFwcHJvdmVkLCByZW1lbWJlcjogdGhpcy5zdGF0ZS5yZW1lbWJlclNlbGVjdGlvbiB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIC8vIFdlIHNwZWNpZmljYWxseSBvcmRlciB0aGUgdGltZWxpbmUgY2FwYWJpbGl0aWVzIGRvd24gdG8gdGhlIGJvdHRvbS4gVGhlIGNhcGFiaWxpdHkgdGV4dFxuICAgICAgICAvLyBnZW5lcmF0aW9uIGNhcmVzIHN0cm9uZ2x5IGFib3V0IHRoaXMuXG4gICAgICAgIGNvbnN0IG9yZGVyZWRDYXBhYmlsaXRpZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLnN0YXRlLmJvb2xlYW5TdGF0ZXMpLnNvcnQoKFtjYXBBXSwgW2NhcEJdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1RpbWVsaW5lQSA9IGlzVGltZWxpbmVDYXBhYmlsaXR5KGNhcEEpO1xuICAgICAgICAgICAgY29uc3QgaXNUaW1lbGluZUIgPSBpc1RpbWVsaW5lQ2FwYWJpbGl0eShjYXBCKTtcblxuICAgICAgICAgICAgaWYgKCFpc1RpbWVsaW5lQSAmJiAhaXNUaW1lbGluZUIpIHJldHVybiBsZXhpY29ncmFwaGljQ29tcGFyZShjYXBBLCBjYXBCKTtcbiAgICAgICAgICAgIGlmIChpc1RpbWVsaW5lQSAmJiAhaXNUaW1lbGluZUIpIHJldHVybiAxO1xuICAgICAgICAgICAgaWYgKCFpc1RpbWVsaW5lQSAmJiBpc1RpbWVsaW5lQikgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGlzVGltZWxpbmVBICYmIGlzVGltZWxpbmVCKSByZXR1cm4gbGV4aWNvZ3JhcGhpY0NvbXBhcmUoY2FwQSwgY2FwQik7XG5cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hlY2tib3hSb3dzID0gb3JkZXJlZENhcGFiaWxpdGllcy5tYXAoKFtjYXAsIGlzQ2hlY2tlZF0sIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBDYXBhYmlsaXR5VGV4dC5mb3IoY2FwLCB0aGlzLnByb3BzLndpZGdldEtpbmQpO1xuICAgICAgICAgICAgY29uc3QgYnlsaW5lID0gdGV4dC5ieWxpbmUgPyAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXhfV2lkZ2V0Q2FwYWJpbGl0aWVzUHJvbXB0RGlhbG9nX2J5bGluZVwiPnt0ZXh0LmJ5bGluZX08L3NwYW4+XG4gICAgICAgICAgICApIDogbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1dpZGdldENhcGFiaWxpdGllc1Byb21wdERpYWxvZ19jYXBcIiBrZXk9e2NhcCArIGl9PlxuICAgICAgICAgICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3ggY2hlY2tlZD17aXNDaGVja2VkfSBvbkNoYW5nZT17KCkgPT4gdGhpcy5vblRvZ2dsZShjYXApfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0ZXh0LnByaW1hcnl9XG4gICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIHtieWxpbmV9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJhc2VEaWFsb2dcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9XaWRnZXRDYXBhYmlsaXRpZXNQcm9tcHREaWFsb2dcIlxuICAgICAgICAgICAgICAgIG9uRmluaXNoZWQ9e3RoaXMucHJvcHMub25GaW5pc2hlZH1cbiAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJ3aWRnZXR8Y2FwYWJpbGl0aWVzX2RpYWxvZ3x0aXRsZVwiKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5vblN1Ym1pdH0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZFwiPntfdChcIndpZGdldHxjYXBhYmlsaXRpZXNfZGlhbG9nfGNvbnRlbnRfc3RhcnRpbmdfdGV4dFwiKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjaGVja2JveFJvd3N9XG4gICAgICAgICAgICAgICAgICAgICAgICA8RGlhbG9nQnV0dG9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlCdXR0b249e190KFwiYWN0aW9ufGFwcHJvdmVcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uPXtfdChcIndpZGdldHxjYXBhYmlsaXRpZXNfZGlhbG9nfGRlY2xpbmVfYWxsX3Blcm1pc3Npb25cIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QcmltYXJ5QnV0dG9uQ2xpY2s9e3RoaXMub25TdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw9e3RoaXMub25SZWplY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpdmU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxsZWRUb2dnbGVTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnJlbWVtYmVyU2VsZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlSW5Gcm9udD17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uUmVtZW1iZXJTZWxlY3Rpb25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJ3aWRnZXR8Y2FwYWJpbGl0aWVzX2RpYWxvZ3xyZW1lbWJlcl9TZWxlY3Rpb25cIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICAgICApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsV0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFB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