matrix-react-sdk
Version:
SDK for matrix.org using React
134 lines (130 loc) • 24.5 kB
JavaScript
"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 _languageHandler = require("../../../languageHandler");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _InteractiveAuth = _interopRequireWildcard(require("../../structures/InteractiveAuth"));
var _InteractiveAuthEntryComponents = require("../auth/InteractiveAuthEntryComponents");
var _BaseDialog = _interopRequireDefault(require("./BaseDialog"));
var _Linkify = require("../../../Linkify");
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; }
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
Copyright 2017 Vector Creations Ltd
Copyright 2016 OpenMarket Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
class InteractiveAuthDialog extends _react.default.Component {
constructor(props) {
super(props);
(0, _defineProperty2.default)(this, "onAuthFinished", async (success, result) => {
if (success) {
this.props.onFinished(true, result);
} else {
if (result === _InteractiveAuth.ERROR_USER_CANCELLED) {
this.props.onFinished(false, null);
} else {
this.setState({
authError: result
});
}
}
});
(0, _defineProperty2.default)(this, "onUpdateStagePhase", (newStage, newPhase) => {
// We copy the stage and stage phase params into state for title selection in render()
this.setState({
uiaStage: newStage,
uiaStagePhase: newPhase
});
});
(0, _defineProperty2.default)(this, "onDismissClick", () => {
this.props.onFinished(false);
});
this.state = {
authError: null,
// See _onUpdateStagePhase()
uiaStage: null,
uiaStagePhase: null
};
}
getDefaultDialogAesthetics() {
const ssoAesthetics = {
[_InteractiveAuthEntryComponents.SSOAuthEntry.PHASE_PREAUTH]: {
title: (0, _languageHandler._t)("auth|uia|sso_title"),
body: (0, _languageHandler._t)("auth|uia|sso_preauth_body"),
continueText: (0, _languageHandler._t)("auth|sso"),
continueKind: "primary"
},
[_InteractiveAuthEntryComponents.SSOAuthEntry.PHASE_POSTAUTH]: {
title: (0, _languageHandler._t)("auth|uia|sso_postauth_title"),
body: (0, _languageHandler._t)("auth|uia|sso_postauth_body"),
continueText: (0, _languageHandler._t)("action|confirm"),
continueKind: "primary"
}
};
return {
[_InteractiveAuthEntryComponents.SSOAuthEntry.LOGIN_TYPE]: ssoAesthetics,
[_InteractiveAuthEntryComponents.SSOAuthEntry.UNSTABLE_LOGIN_TYPE]: ssoAesthetics
};
}
render() {
// Let's pick a title, body, and other params text that we'll show to the user. The order
// is most specific first, so stagePhase > our props > defaults.
let title = this.state.authError ? "Error" : this.props.title || (0, _languageHandler._t)("common|authentication");
let body = this.state.authError ? null : this.props.body;
let continueText;
let continueKind;
const dialogAesthetics = this.props.aestheticsForStagePhases || this.getDefaultDialogAesthetics();
if (!this.state.authError && dialogAesthetics) {
if (this.state.uiaStage !== null && this.state.uiaStagePhase !== null && dialogAesthetics[this.state.uiaStage]) {
const aesthetics = dialogAesthetics[this.state.uiaStage][this.state.uiaStagePhase];
if (aesthetics) {
if (aesthetics.title) title = aesthetics.title;
if (aesthetics.body) body = aesthetics.body;
if (aesthetics.continueText) continueText = aesthetics.continueText;
if (aesthetics.continueKind) continueKind = aesthetics.continueKind;
}
}
}
let content;
if (this.state.authError) {
content = /*#__PURE__*/_react.default.createElement("div", {
id: "mx_Dialog_content"
}, /*#__PURE__*/_react.default.createElement(_Linkify.Linkify, null, /*#__PURE__*/_react.default.createElement("div", {
role: "alert"
}, this.state.authError.message || this.state.authError.toString())), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
onClick: this.onDismissClick,
className: "mx_GeneralButton",
autoFocus: true
}, (0, _languageHandler._t)("action|dismiss")));
} else {
content = /*#__PURE__*/_react.default.createElement("div", {
id: "mx_Dialog_content"
}, body, /*#__PURE__*/_react.default.createElement(_InteractiveAuth.default, {
matrixClient: this.props.matrixClient,
authData: this.props.authData,
makeRequest: this.props.makeRequest,
onAuthFinished: this.onAuthFinished,
onStagePhaseChange: this.onUpdateStagePhase,
continueText: continueText,
continueKind: continueKind
}));
}
return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, {
className: "mx_InteractiveAuthDialog",
onFinished: this.props.onFinished,
title: title,
contentId: "mx_Dialog_content"
}, content);
}
}
exports.default = InteractiveAuthDialog;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9JbnRlcmFjdGl2ZUF1dGgiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9JbnRlcmFjdGl2ZUF1dGhFbnRyeUNvbXBvbmVudHMiLCJfQmFzZURpYWxvZyIsIl9MaW5raWZ5IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiSW50ZXJhY3RpdmVBdXRoRGlhbG9nIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsInN1Y2Nlc3MiLCJyZXN1bHQiLCJvbkZpbmlzaGVkIiwiRVJST1JfVVNFUl9DQU5DRUxMRUQiLCJzZXRTdGF0ZSIsImF1dGhFcnJvciIsIm5ld1N0YWdlIiwibmV3UGhhc2UiLCJ1aWFTdGFnZSIsInVpYVN0YWdlUGhhc2UiLCJzdGF0ZSIsImdldERlZmF1bHREaWFsb2dBZXN0aGV0aWNzIiwic3NvQWVzdGhldGljcyIsIlNTT0F1dGhFbnRyeSIsIlBIQVNFX1BSRUFVVEgiLCJ0aXRsZSIsIl90IiwiYm9keSIsImNvbnRpbnVlVGV4dCIsImNvbnRpbnVlS2luZCIsIlBIQVNFX1BPU1RBVVRIIiwiTE9HSU5fVFlQRSIsIlVOU1RBQkxFX0xPR0lOX1RZUEUiLCJyZW5kZXIiLCJkaWFsb2dBZXN0aGV0aWNzIiwiYWVzdGhldGljc0ZvclN0YWdlUGhhc2VzIiwiYWVzdGhldGljcyIsImNvbnRlbnQiLCJjcmVhdGVFbGVtZW50IiwiaWQiLCJMaW5raWZ5Iiwicm9sZSIsIm1lc3NhZ2UiLCJ0b1N0cmluZyIsIm9uQ2xpY2siLCJvbkRpc21pc3NDbGljayIsImNsYXNzTmFtZSIsImF1dG9Gb2N1cyIsIm1hdHJpeENsaWVudCIsImF1dGhEYXRhIiwibWFrZVJlcXVlc3QiLCJvbkF1dGhGaW5pc2hlZCIsIm9uU3RhZ2VQaGFzZUNoYW5nZSIsIm9uVXBkYXRlU3RhZ2VQaGFzZSIsImNvbnRlbnRJZCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL0ludGVyYWN0aXZlQXV0aERpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDE3IFZlY3RvciBDcmVhdGlvbnMgTHRkXG5Db3B5cmlnaHQgMjAxNiBPcGVuTWFya2V0IEx0ZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBNYXRyaXhDbGllbnQsIFVJQVJlc3BvbnNlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgQXV0aFR5cGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvaW50ZXJhY3RpdmUtYXV0aFwiO1xuXG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBBY2Nlc3NpYmxlQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlQnV0dG9uXCI7XG5pbXBvcnQgSW50ZXJhY3RpdmVBdXRoLCB7XG4gICAgRVJST1JfVVNFUl9DQU5DRUxMRUQsXG4gICAgSW50ZXJhY3RpdmVBdXRoQ2FsbGJhY2ssXG4gICAgSW50ZXJhY3RpdmVBdXRoUHJvcHMsXG59IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVzL0ludGVyYWN0aXZlQXV0aFwiO1xuaW1wb3J0IHsgQ29udGludWVLaW5kLCBTU09BdXRoRW50cnkgfSBmcm9tIFwiLi4vYXV0aC9JbnRlcmFjdGl2ZUF1dGhFbnRyeUNvbXBvbmVudHNcIjtcbmltcG9ydCBCYXNlRGlhbG9nIGZyb20gXCIuL0Jhc2VEaWFsb2dcIjtcbmltcG9ydCB7IExpbmtpZnkgfSBmcm9tIFwiLi4vLi4vLi4vTGlua2lmeVwiO1xuXG50eXBlIERpYWxvZ0Flc3RoZXRpY3MgPSBQYXJ0aWFsPHtcbiAgICBbeCBpbiBBdXRoVHlwZV06IHtcbiAgICAgICAgW3g6IG51bWJlcl06IHtcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICBib2R5OiBzdHJpbmc7XG4gICAgICAgICAgICBjb250aW51ZVRleHQ6IHN0cmluZztcbiAgICAgICAgICAgIGNvbnRpbnVlS2luZDogQ29udGludWVLaW5kO1xuICAgICAgICB9O1xuICAgIH07XG59PjtcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmFjdGl2ZUF1dGhEaWFsb2dQcm9wczxUID0gdW5rbm93bj5cbiAgICBleHRlbmRzIFBpY2s8SW50ZXJhY3RpdmVBdXRoUHJvcHM8VD4sIFwibWFrZVJlcXVlc3RcIiB8IFwiYXV0aERhdGFcIj4ge1xuICAgIC8vIG1hdHJpeCBjbGllbnQgdG8gdXNlIGZvciBVSSBhdXRoIHJlcXVlc3RzXG4gICAgbWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQ7XG5cbiAgICAvLyBPcHRpb25hbCB0aXRsZSBhbmQgYm9keSB0byBzaG93IHdoZW4gbm90IHNob3dpbmcgYSBwYXJ0aWN1bGFyIHN0YWdlXG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgYm9keT86IHN0cmluZztcblxuICAgIC8vIE9wdGlvbmFsIHRpdGxlIGFuZCBib2R5IHBhaXJzIGZvciBwYXJ0aWN1bGFyIHN0YWdlcyBhbmQgcGhhc2VzIHdpdGhpblxuICAgIC8vIHRob3NlIHN0YWdlcy4gT2JqZWN0IHN0cnVjdHVyZS9leGFtcGxlIGlzOlxuICAgIC8vIHtcbiAgICAvLyAgICAgXCJvcmcuZXhhbXBsZS5zdGFnZV90eXBlXCI6IHtcbiAgICAvLyAgICAgICAgIDE6IHtcbiAgICAvLyAgICAgICAgICAgICBcImJvZHlcIjogXCJUaGlzIGlzIGEgYm9keSBmb3IgcGhhc2UgMVwiIG9mIG9yZy5leGFtcGxlLnN0YWdlX3R5cGUsXG4gICAgLy8gICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlRpdGxlIGZvciBwaGFzZSAxIG9mIG9yZy5leGFtcGxlLnN0YWdlX3R5cGVcIlxuICAgIC8vICAgICAgICAgfSxcbiAgICAvLyAgICAgICAgIDI6IHtcbiAgICAvLyAgICAgICAgICAgICBcImJvZHlcIjogXCJUaGlzIGlzIGEgYm9keSBmb3IgcGhhc2UgMiBvZiBvcmcuZXhhbXBsZS5zdGFnZV90eXBlXCIsXG4gICAgLy8gICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIlRpdGxlIGZvciBwaGFzZSAyIG9mIG9yZy5leGFtcGxlLnN0YWdlX3R5cGVcIlxuICAgIC8vICAgICAgICAgICAgIFwiY29udGludWVUZXh0XCI6IFwiQ29uZmlybSBpZGVudGl0eSB3aXRoIEV4YW1wbGUgQXV0aFwiLFxuICAgIC8vICAgICAgICAgICAgIFwiY29udGludWVLaW5kXCI6IFwiZGFuZ2VyXCJcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIERlZmF1bHQgaXMgZGVmaW5lZCBpbiBfZ2V0RGVmYXVsdERpYWxvZ0Flc3RoZXRpY3MoKVxuICAgIGFlc3RoZXRpY3NGb3JTdGFnZVBoYXNlcz86IERpYWxvZ0Flc3RoZXRpY3M7XG5cbiAgICBvbkZpbmlzaGVkKHN1Y2Nlc3M/OiBib29sZWFuLCByZXN1bHQ/OiBVSUFSZXNwb25zZTxUPiB8IEVycm9yIHwgbnVsbCk6IHZvaWQ7XG59XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIGF1dGhFcnJvcjogRXJyb3IgfCBudWxsO1xuXG4gICAgLy8gU2VlIF9vblVwZGF0ZVN0YWdlUGhhc2UoKVxuICAgIHVpYVN0YWdlOiBBdXRoVHlwZSB8IG51bGw7XG4gICAgdWlhU3RhZ2VQaGFzZTogbnVtYmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJhY3RpdmVBdXRoRGlhbG9nPFQ+IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEludGVyYWN0aXZlQXV0aERpYWxvZ1Byb3BzPFQ+LCBJU3RhdGU+IHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IEludGVyYWN0aXZlQXV0aERpYWxvZ1Byb3BzPFQ+KSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgYXV0aEVycm9yOiBudWxsLFxuXG4gICAgICAgICAgICAvLyBTZWUgX29uVXBkYXRlU3RhZ2VQaGFzZSgpXG4gICAgICAgICAgICB1aWFTdGFnZTogbnVsbCxcbiAgICAgICAgICAgIHVpYVN0YWdlUGhhc2U6IG51bGwsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0RGlhbG9nQWVzdGhldGljcygpOiBEaWFsb2dBZXN0aGV0aWNzIHtcbiAgICAgICAgY29uc3Qgc3NvQWVzdGhldGljcyA9IHtcbiAgICAgICAgICAgIFtTU09BdXRoRW50cnkuUEhBU0VfUFJFQVVUSF06IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogX3QoXCJhdXRofHVpYXxzc29fdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgYm9keTogX3QoXCJhdXRofHVpYXxzc29fcHJlYXV0aF9ib2R5XCIpLFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlVGV4dDogX3QoXCJhdXRofHNzb1wiKSxcbiAgICAgICAgICAgICAgICBjb250aW51ZUtpbmQ6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtTU09BdXRoRW50cnkuUEhBU0VfUE9TVEFVVEhdOiB7XG4gICAgICAgICAgICAgICAgdGl0bGU6IF90KFwiYXV0aHx1aWF8c3NvX3Bvc3RhdXRoX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgIGJvZHk6IF90KFwiYXV0aHx1aWF8c3NvX3Bvc3RhdXRoX2JvZHlcIiksXG4gICAgICAgICAgICAgICAgY29udGludWVUZXh0OiBfdChcImFjdGlvbnxjb25maXJtXCIpLFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlS2luZDogXCJwcmltYXJ5XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbU1NPQXV0aEVudHJ5LkxPR0lOX1RZUEVdOiBzc29BZXN0aGV0aWNzLFxuICAgICAgICAgICAgW1NTT0F1dGhFbnRyeS5VTlNUQUJMRV9MT0dJTl9UWVBFXTogc3NvQWVzdGhldGljcyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXV0aEZpbmlzaGVkOiBJbnRlcmFjdGl2ZUF1dGhDYWxsYmFjazxUPiA9IGFzeW5jIChzdWNjZXNzLCByZXN1bHQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25GaW5pc2hlZCh0cnVlLCByZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gRVJST1JfVVNFUl9DQU5DRUxMRUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uRmluaXNoZWQoZmFsc2UsIG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgYXV0aEVycm9yOiByZXN1bHQgYXMgRXJyb3IsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvblVwZGF0ZVN0YWdlUGhhc2UgPSAobmV3U3RhZ2U6IEF1dGhUeXBlLCBuZXdQaGFzZTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIC8vIFdlIGNvcHkgdGhlIHN0YWdlIGFuZCBzdGFnZSBwaGFzZSBwYXJhbXMgaW50byBzdGF0ZSBmb3IgdGl0bGUgc2VsZWN0aW9uIGluIHJlbmRlcigpXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB1aWFTdGFnZTogbmV3U3RhZ2UsIHVpYVN0YWdlUGhhc2U6IG5ld1BoYXNlIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uRGlzbWlzc0NsaWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLm9uRmluaXNoZWQoZmFsc2UpO1xuICAgIH07XG5cbiAgICBwdWJsaWMgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIC8vIExldCdzIHBpY2sgYSB0aXRsZSwgYm9keSwgYW5kIG90aGVyIHBhcmFtcyB0ZXh0IHRoYXQgd2UnbGwgc2hvdyB0byB0aGUgdXNlci4gVGhlIG9yZGVyXG4gICAgICAgIC8vIGlzIG1vc3Qgc3BlY2lmaWMgZmlyc3QsIHNvIHN0YWdlUGhhc2UgPiBvdXIgcHJvcHMgPiBkZWZhdWx0cy5cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLnN0YXRlLmF1dGhFcnJvciA/IFwiRXJyb3JcIiA6IHRoaXMucHJvcHMudGl0bGUgfHwgX3QoXCJjb21tb258YXV0aGVudGljYXRpb25cIik7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy5zdGF0ZS5hdXRoRXJyb3IgPyBudWxsIDogdGhpcy5wcm9wcy5ib2R5O1xuICAgICAgICBsZXQgY29udGludWVUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBjb250aW51ZUtpbmQ6IENvbnRpbnVlS2luZCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZGlhbG9nQWVzdGhldGljcyA9IHRoaXMucHJvcHMuYWVzdGhldGljc0ZvclN0YWdlUGhhc2VzIHx8IHRoaXMuZ2V0RGVmYXVsdERpYWxvZ0Flc3RoZXRpY3MoKTtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmF1dGhFcnJvciAmJiBkaWFsb2dBZXN0aGV0aWNzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS51aWFTdGFnZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUudWlhU3RhZ2VQaGFzZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIGRpYWxvZ0Flc3RoZXRpY3NbdGhpcy5zdGF0ZS51aWFTdGFnZV1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFlc3RoZXRpY3MgPSBkaWFsb2dBZXN0aGV0aWNzW3RoaXMuc3RhdGUudWlhU3RhZ2VdIVt0aGlzLnN0YXRlLnVpYVN0YWdlUGhhc2VdO1xuICAgICAgICAgICAgICAgIGlmIChhZXN0aGV0aWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZXN0aGV0aWNzLnRpdGxlKSB0aXRsZSA9IGFlc3RoZXRpY3MudGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZXN0aGV0aWNzLmJvZHkpIGJvZHkgPSBhZXN0aGV0aWNzLmJvZHk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZXN0aGV0aWNzLmNvbnRpbnVlVGV4dCkgY29udGludWVUZXh0ID0gYWVzdGhldGljcy5jb250aW51ZVRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZXN0aGV0aWNzLmNvbnRpbnVlS2luZCkgY29udGludWVLaW5kID0gYWVzdGhldGljcy5jb250aW51ZUtpbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5hdXRoRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cIm14X0RpYWxvZ19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxMaW5raWZ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwiYWxlcnRcIj57dGhpcy5zdGF0ZS5hdXRoRXJyb3IubWVzc2FnZSB8fCB0aGlzLnN0YXRlLmF1dGhFcnJvci50b1N0cmluZygpfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0xpbmtpZnk+XG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvbiBvbkNsaWNrPXt0aGlzLm9uRGlzbWlzc0NsaWNrfSBjbGFzc05hbWU9XCJteF9HZW5lcmFsQnV0dG9uXCIgYXV0b0ZvY3VzPXt0cnVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcImFjdGlvbnxkaXNtaXNzXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGVudCA9IChcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibXhfRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAge2JvZHl9XG4gICAgICAgICAgICAgICAgICAgIDxJbnRlcmFjdGl2ZUF1dGhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeENsaWVudD17dGhpcy5wcm9wcy5tYXRyaXhDbGllbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoRGF0YT17dGhpcy5wcm9wcy5hdXRoRGF0YX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VSZXF1ZXN0PXt0aGlzLnByb3BzLm1ha2VSZXF1ZXN0fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25BdXRoRmluaXNoZWQ9e3RoaXMub25BdXRoRmluaXNoZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblN0YWdlUGhhc2VDaGFuZ2U9e3RoaXMub25VcGRhdGVTdGFnZVBoYXNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVUZXh0PXtjb250aW51ZVRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZUtpbmQ9e2NvbnRpbnVlS2luZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEJhc2VEaWFsb2dcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9JbnRlcmFjdGl2ZUF1dGhEaWFsb2dcIlxuICAgICAgICAgICAgICAgIG9uRmluaXNoZWQ9e3RoaXMucHJvcHMub25GaW5pc2hlZH1cbiAgICAgICAgICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgICAgICAgICAgY29udGVudElkPVwibXhfRGlhbG9nX2NvbnRlbnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgPC9CYXNlRGlhbG9nPlxuICAgICAgICApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFVQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFJQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFDLHVCQUFBLENBQUFKLE9BQUE7QUFLQSxJQUFBSywrQkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFB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