UNPKG

matrix-react-sdk

Version:
156 lines (152 loc) 27.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 _matrix = require("matrix-js-sdk/src/matrix"); var _languageHandler = require("../../../languageHandler"); var _DialogButtons = _interopRequireDefault(require("../elements/DialogButtons")); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); var _ExternalLink = _interopRequireDefault(require("../elements/ExternalLink")); var _UrlUtils = require("../../../utils/UrlUtils"); /* Copyright 2024 New Vector Ltd. Copyright 2019 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 TermsCheckbox extends _react.default.PureComponent { constructor(...args) { super(...args); (0, _defineProperty2.default)(this, "onChange", ev => { this.props.onChange(this.props.url, ev.currentTarget.checked); }); } render() { return /*#__PURE__*/_react.default.createElement("input", { type: "checkbox", onChange: this.onChange, checked: this.props.checked }); } } class TermsDialog extends _react.default.PureComponent { constructor(props) { super(props); (0, _defineProperty2.default)(this, "onCancelClick", () => { this.props.onFinished(false); }); (0, _defineProperty2.default)(this, "onNextClick", () => { this.props.onFinished(true, Object.keys(this.state.agreedUrls).filter(url => this.state.agreedUrls[url])); }); (0, _defineProperty2.default)(this, "onTermsCheckboxChange", (url, checked) => { this.setState({ agreedUrls: Object.assign({}, this.state.agreedUrls, { [url]: checked }) }); }); this.state = { // url -> boolean agreedUrls: {} }; for (const url of props.agreedUrls) { this.state.agreedUrls[url] = true; } } nameForServiceType(serviceType, host) { switch (serviceType) { case _matrix.SERVICE_TYPES.IS: return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("common|identity_server"), /*#__PURE__*/_react.default.createElement("br", null), "(", host, ")"); case _matrix.SERVICE_TYPES.IM: return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("common|integration_manager"), /*#__PURE__*/_react.default.createElement("br", null), "(", host, ")"); } } summaryForServiceType(serviceType) { switch (serviceType) { case _matrix.SERVICE_TYPES.IS: return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("terms|summary_identity_server_1"), /*#__PURE__*/_react.default.createElement("br", null), (0, _languageHandler._t)("terms|summary_identity_server_2")); case _matrix.SERVICE_TYPES.IM: return /*#__PURE__*/_react.default.createElement("div", null, (0, _languageHandler._t)("terms|integration_manager")); } } render() { const rows = []; for (const policiesAndService of this.props.policiesAndServicePairs) { const parsedBaseUrl = (0, _UrlUtils.parseUrl)(policiesAndService.service.baseUrl); const policyValues = Object.values(policiesAndService.policies); for (let i = 0; i < policyValues.length; ++i) { const termDoc = policyValues[i]; const termsLang = (0, _languageHandler.pickBestLanguage)(Object.keys(termDoc).filter(k => k !== "version")); let serviceName; let summary; if (i === 0) { serviceName = this.nameForServiceType(policiesAndService.service.serviceType, parsedBaseUrl.host); summary = this.summaryForServiceType(policiesAndService.service.serviceType); } rows.push( /*#__PURE__*/_react.default.createElement("tr", { key: termDoc[termsLang].url }, /*#__PURE__*/_react.default.createElement("td", { className: "mx_TermsDialog_service" }, serviceName), /*#__PURE__*/_react.default.createElement("td", { className: "mx_TermsDialog_summary" }, summary), /*#__PURE__*/_react.default.createElement("td", null, /*#__PURE__*/_react.default.createElement(_ExternalLink.default, { rel: "noreferrer noopener", target: "_blank", href: termDoc[termsLang].url }, termDoc[termsLang].name)), /*#__PURE__*/_react.default.createElement("td", null, /*#__PURE__*/_react.default.createElement(TermsCheckbox, { url: termDoc[termsLang].url, onChange: this.onTermsCheckboxChange, checked: Boolean(this.state.agreedUrls[termDoc[termsLang].url]) })))); } } // if all the documents for at least one service have been checked, we can enable // the submit button let enableSubmit = false; for (const policiesAndService of this.props.policiesAndServicePairs) { let docsAgreedForService = 0; for (const terms of Object.values(policiesAndService.policies)) { let docAgreed = false; for (const lang of Object.keys(terms)) { if (lang === "version") continue; if (this.state.agreedUrls[terms[lang].url]) { docAgreed = true; break; } } if (docAgreed) { ++docsAgreedForService; } } if (docsAgreedForService === Object.keys(policiesAndService.policies).length) { enableSubmit = true; break; } } return /*#__PURE__*/_react.default.createElement(_BaseDialog.default, { fixedWidth: false, onFinished: this.onCancelClick, title: (0, _languageHandler._t)("terms|tos"), contentId: "mx_Dialog_content", hasCancel: false }, /*#__PURE__*/_react.default.createElement("div", { id: "mx_Dialog_content" }, /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("terms|intro")), /*#__PURE__*/_react.default.createElement("table", { className: "mx_TermsDialog_termsTable" }, /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", { className: "mx_TermsDialog_termsTableHeader" }, /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("terms|column_service")), /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("terms|column_summary")), /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("terms|column_document")), /*#__PURE__*/_react.default.createElement("th", null, (0, _languageHandler._t)("action|accept"))), rows))), /*#__PURE__*/_react.default.createElement(_DialogButtons.default, { primaryButton: (0, _languageHandler._t)("action|next"), hasCancel: true, onCancel: this.onCancelClick, onPrimaryButtonClick: this.onNextClick, primaryDisabled: !enableSubmit })); } } exports.default = TermsDialog; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9tYXRyaXgiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX0RpYWxvZ0J1dHRvbnMiLCJfQmFzZURpYWxvZyIsIl9FeHRlcm5hbExpbmsiLCJfVXJsVXRpbHMiLCJUZXJtc0NoZWNrYm94IiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJhcmdzIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJldiIsInByb3BzIiwib25DaGFuZ2UiLCJ1cmwiLCJjdXJyZW50VGFyZ2V0IiwiY2hlY2tlZCIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiVGVybXNEaWFsb2ciLCJvbkZpbmlzaGVkIiwiT2JqZWN0Iiwia2V5cyIsInN0YXRlIiwiYWdyZWVkVXJscyIsImZpbHRlciIsInNldFN0YXRlIiwiYXNzaWduIiwibmFtZUZvclNlcnZpY2VUeXBlIiwic2VydmljZVR5cGUiLCJob3N0IiwiU0VSVklDRV9UWVBFUyIsIklTIiwiX3QiLCJJTSIsInN1bW1hcnlGb3JTZXJ2aWNlVHlwZSIsInJvd3MiLCJwb2xpY2llc0FuZFNlcnZpY2UiLCJwb2xpY2llc0FuZFNlcnZpY2VQYWlycyIsInBhcnNlZEJhc2VVcmwiLCJwYXJzZVVybCIsInNlcnZpY2UiLCJiYXNlVXJsIiwicG9saWN5VmFsdWVzIiwidmFsdWVzIiwicG9saWNpZXMiLCJpIiwibGVuZ3RoIiwidGVybURvYyIsInRlcm1zTGFuZyIsInBpY2tCZXN0TGFuZ3VhZ2UiLCJrIiwic2VydmljZU5hbWUiLCJzdW1tYXJ5IiwicHVzaCIsImtleSIsImNsYXNzTmFtZSIsInJlbCIsInRhcmdldCIsImhyZWYiLCJuYW1lIiwib25UZXJtc0NoZWNrYm94Q2hhbmdlIiwiQm9vbGVhbiIsImVuYWJsZVN1Ym1pdCIsImRvY3NBZ3JlZWRGb3JTZXJ2aWNlIiwidGVybXMiLCJkb2NBZ3JlZWQiLCJsYW5nIiwiZml4ZWRXaWR0aCIsIm9uQ2FuY2VsQ2xpY2siLCJ0aXRsZSIsImNvbnRlbnRJZCIsImhhc0NhbmNlbCIsImlkIiwicHJpbWFyeUJ1dHRvbiIsIm9uQ2FuY2VsIiwib25QcmltYXJ5QnV0dG9uQ2xpY2siLCJvbk5leHRDbGljayIsInByaW1hcnlEaXNhYmxlZCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9kaWFsb2dzL1Rlcm1zRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAxOSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBTRVJWSUNFX1RZUEVTIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBfdCwgcGlja0Jlc3RMYW5ndWFnZSB9IGZyb20gXCIuLi8uLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCBEaWFsb2dCdXR0b25zIGZyb20gXCIuLi9lbGVtZW50cy9EaWFsb2dCdXR0b25zXCI7XG5pbXBvcnQgQmFzZURpYWxvZyBmcm9tIFwiLi9CYXNlRGlhbG9nXCI7XG5pbXBvcnQgeyBTZXJ2aWNlUG9saWN5UGFpciB9IGZyb20gXCIuLi8uLi8uLi9UZXJtc1wiO1xuaW1wb3J0IEV4dGVybmFsTGluayBmcm9tIFwiLi4vZWxlbWVudHMvRXh0ZXJuYWxMaW5rXCI7XG5pbXBvcnQgeyBwYXJzZVVybCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9VcmxVdGlsc1wiO1xuXG5pbnRlcmZhY2UgSVRlcm1zQ2hlY2tib3hQcm9wcyB7XG4gICAgb25DaGFuZ2U6ICh1cmw6IHN0cmluZywgY2hlY2tlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICB1cmw6IHN0cmluZztcbiAgICBjaGVja2VkOiBib29sZWFuO1xufVxuXG5jbGFzcyBUZXJtc0NoZWNrYm94IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxJVGVybXNDaGVja2JveFByb3BzPiB7XG4gICAgcHJpdmF0ZSBvbkNoYW5nZSA9IChldjogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy51cmwsIGV2LmN1cnJlbnRUYXJnZXQuY2hlY2tlZCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgcmV0dXJuIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gY2hlY2tlZD17dGhpcy5wcm9wcy5jaGVja2VkfSAvPjtcbiAgICB9XG59XG5cbmludGVyZmFjZSBJVGVybXNEaWFsb2dQcm9wcyB7XG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgW1NlcnZpY2UsIHBvbGljaWVzXSBwYWlycywgd2hlcmUgcG9saWNpZXMgaXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlXG4gICAgICogL3Rlcm1zIGVuZHBvaW50IGZvciB0aGF0IHNlcnZpY2VcbiAgICAgKi9cbiAgICBwb2xpY2llc0FuZFNlcnZpY2VQYWlyczogU2VydmljZVBvbGljeVBhaXJbXTtcblxuICAgIC8qKlxuICAgICAqIHVybHMgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSBhZ3JlZWQgdG9cbiAgICAgKi9cbiAgICBhZ3JlZWRVcmxzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aXRoOlxuICAgICAqICAgICAqIHN1Y2Nlc3Mge2Jvb2x9IFRydWUgaWYgdGhlIHVzZXIgYWNjZXB0ZWQgYW55IGRvdW1lbnRzLCBmYWxzZSBpZiBjYW5jZWxsZWRcbiAgICAgKiAgICAgKiBhZ3JlZWRVcmxzIHtzdHJpbmdbXX0gTGlzdCBvZiBhZ3JlZWQgVVJMc1xuICAgICAqL1xuICAgIG9uRmluaXNoZWQ6IChzdWNjZXNzOiBib29sZWFuLCBhZ3JlZWRVcmxzPzogc3RyaW5nW10pID0+IHZvaWQ7XG59XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIGFncmVlZFVybHM6IGFueTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybXNEaWFsb2cgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50PElUZXJtc0RpYWxvZ1Byb3BzLCBJU3RhdGU+IHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElUZXJtc0RpYWxvZ1Byb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIC8vIHVybCAtPiBib29sZWFuXG4gICAgICAgICAgICBhZ3JlZWRVcmxzOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgcHJvcHMuYWdyZWVkVXJscykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hZ3JlZWRVcmxzW3VybF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNhbmNlbENsaWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLm9uRmluaXNoZWQoZmFsc2UpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uTmV4dENsaWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLm9uRmluaXNoZWQoXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zdGF0ZS5hZ3JlZWRVcmxzKS5maWx0ZXIoKHVybCkgPT4gdGhpcy5zdGF0ZS5hZ3JlZWRVcmxzW3VybF0pLFxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG5hbWVGb3JTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZTogU0VSVklDRV9UWVBFUywgaG9zdDogc3RyaW5nKTogSlNYLkVsZW1lbnQge1xuICAgICAgICBzd2l0Y2ggKHNlcnZpY2VUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFNFUlZJQ0VfVFlQRVMuSVM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcImNvbW1vbnxpZGVudGl0eV9zZXJ2ZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz4oe2hvc3R9KVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBTRVJWSUNFX1RZUEVTLklNOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJjb21tb258aW50ZWdyYXRpb25fbWFuYWdlclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPih7aG9zdH0pXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1bW1hcnlGb3JTZXJ2aWNlVHlwZShzZXJ2aWNlVHlwZTogU0VSVklDRV9UWVBFUyk6IEpTWC5FbGVtZW50IHtcbiAgICAgICAgc3dpdGNoIChzZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTRVJWSUNFX1RZUEVTLklTOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJ0ZXJtc3xzdW1tYXJ5X2lkZW50aXR5X3NlcnZlcl8xXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJ0ZXJtc3xzdW1tYXJ5X2lkZW50aXR5X3NlcnZlcl8yXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBTRVJWSUNFX1RZUEVTLklNOlxuICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2PntfdChcInRlcm1zfGludGVncmF0aW9uX21hbmFnZXJcIil9PC9kaXY+O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblRlcm1zQ2hlY2tib3hDaGFuZ2UgPSAodXJsOiBzdHJpbmcsIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBhZ3JlZWRVcmxzOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnN0YXRlLmFncmVlZFVybHMsIHsgW3VybF06IGNoZWNrZWQgfSksXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwdWJsaWMgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIGNvbnN0IHJvd3M6IEpTWC5FbGVtZW50W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwb2xpY2llc0FuZFNlcnZpY2Ugb2YgdGhpcy5wcm9wcy5wb2xpY2llc0FuZFNlcnZpY2VQYWlycykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQmFzZVVybCA9IHBhcnNlVXJsKHBvbGljaWVzQW5kU2VydmljZS5zZXJ2aWNlLmJhc2VVcmwpO1xuXG4gICAgICAgICAgICBjb25zdCBwb2xpY3lWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHBvbGljaWVzQW5kU2VydmljZS5wb2xpY2llcyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbGljeVZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1Eb2MgPSBwb2xpY3lWYWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgdGVybXNMYW5nID0gcGlja0Jlc3RMYW5ndWFnZShPYmplY3Qua2V5cyh0ZXJtRG9jKS5maWx0ZXIoKGspID0+IGsgIT09IFwidmVyc2lvblwiKSk7XG4gICAgICAgICAgICAgICAgbGV0IHNlcnZpY2VOYW1lOiBKU1guRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsZXQgc3VtbWFyeTogSlNYLkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWUgPSB0aGlzLm5hbWVGb3JTZXJ2aWNlVHlwZShwb2xpY2llc0FuZFNlcnZpY2Uuc2VydmljZS5zZXJ2aWNlVHlwZSwgcGFyc2VkQmFzZVVybC5ob3N0KTtcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IHRoaXMuc3VtbWFyeUZvclNlcnZpY2VUeXBlKHBvbGljaWVzQW5kU2VydmljZS5zZXJ2aWNlLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3dzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e3Rlcm1Eb2NbdGVybXNMYW5nXS51cmx9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cIm14X1Rlcm1zRGlhbG9nX3NlcnZpY2VcIj57c2VydmljZU5hbWV9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJteF9UZXJtc0RpYWxvZ19zdW1tYXJ5XCI+e3N1bW1hcnl9PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RXh0ZXJuYWxMaW5rIHJlbD1cIm5vcmVmZXJyZXIgbm9vcGVuZXJcIiB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPXt0ZXJtRG9jW3Rlcm1zTGFuZ10udXJsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Rlcm1Eb2NbdGVybXNMYW5nXS5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRXh0ZXJuYWxMaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGVybXNDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9e3Rlcm1Eb2NbdGVybXNMYW5nXS51cmx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uVGVybXNDaGVja2JveENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Qm9vbGVhbih0aGlzLnN0YXRlLmFncmVlZFVybHNbdGVybURvY1t0ZXJtc0xhbmddLnVybF0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYWxsIHRoZSBkb2N1bWVudHMgZm9yIGF0IGxlYXN0IG9uZSBzZXJ2aWNlIGhhdmUgYmVlbiBjaGVja2VkLCB3ZSBjYW4gZW5hYmxlXG4gICAgICAgIC8vIHRoZSBzdWJtaXQgYnV0dG9uXG4gICAgICAgIGxldCBlbmFibGVTdWJtaXQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBwb2xpY2llc0FuZFNlcnZpY2Ugb2YgdGhpcy5wcm9wcy5wb2xpY2llc0FuZFNlcnZpY2VQYWlycykge1xuICAgICAgICAgICAgbGV0IGRvY3NBZ3JlZWRGb3JTZXJ2aWNlID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVybXMgb2YgT2JqZWN0LnZhbHVlcyhwb2xpY2llc0FuZFNlcnZpY2UucG9saWNpZXMpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRvY0FncmVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbGFuZyBvZiBPYmplY3Qua2V5cyh0ZXJtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmcgPT09IFwidmVyc2lvblwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuYWdyZWVkVXJsc1t0ZXJtc1tsYW5nXS51cmxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2NBZ3JlZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRvY0FncmVlZCkge1xuICAgICAgICAgICAgICAgICAgICArK2RvY3NBZ3JlZWRGb3JTZXJ2aWNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkb2NzQWdyZWVkRm9yU2VydmljZSA9PT0gT2JqZWN0LmtleXMocG9saWNpZXNBbmRTZXJ2aWNlLnBvbGljaWVzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVTdWJtaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCYXNlRGlhbG9nXG4gICAgICAgICAgICAgICAgZml4ZWRXaWR0aD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgb25GaW5pc2hlZD17dGhpcy5vbkNhbmNlbENsaWNrfVxuICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcInRlcm1zfHRvc1wiKX1cbiAgICAgICAgICAgICAgICBjb250ZW50SWQ9XCJteF9EaWFsb2dfY29udGVudFwiXG4gICAgICAgICAgICAgICAgaGFzQ2FuY2VsPXtmYWxzZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwibXhfRGlhbG9nX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+e190KFwidGVybXN8aW50cm9cIil9PC9wPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJteF9UZXJtc0RpYWxvZ190ZXJtc1RhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cIm14X1Rlcm1zRGlhbG9nX3Rlcm1zVGFibGVIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPntfdChcInRlcm1zfGNvbHVtbl9zZXJ2aWNlXCIpfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57X3QoXCJ0ZXJtc3xjb2x1bW5fc3VtbWFyeVwiKX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e190KFwidGVybXN8Y29sdW1uX2RvY3VtZW50XCIpfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57X3QoXCJhY3Rpb258YWNjZXB0XCIpfTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cm93c31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8RGlhbG9nQnV0dG9uc1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5QnV0dG9uPXtfdChcImFjdGlvbnxuZXh0XCIpfVxuICAgICAgICAgICAgICAgICAgICBoYXNDYW5jZWw9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsPXt0aGlzLm9uQ2FuY2VsQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIG9uUHJpbWFyeUJ1dHRvbkNsaWNrPXt0aGlzLm9uTmV4dENsaWNrfVxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5RGlzYWJsZWQ9eyFlbmFibGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQmFzZURpYWxvZz5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsZ0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFLLGFBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQWhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFrQkEsTUFBTU8sYUFBYSxTQUFTQyxjQUFLLENBQUNDLGFBQWEsQ0FBc0I7RUFBQUMsWUFBQSxHQUFBQyxJQUFBO0lBQUEsU0FBQUEsSUFBQTtJQUFBLElBQUFDLGdCQUFBLENBQUFDLE9BQUEsb0JBQzdDQyxFQUFxQyxJQUFXO01BQ2hFLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDRCxLQUFLLENBQUNFLEdBQUcsRUFBRUgsRUFBRSxDQUFDSSxhQUFhLENBQUNDLE9BQU8sQ0FBQztJQUNqRSxDQUFDO0VBQUE7RUFFTUMsTUFBTUEsQ0FBQSxFQUFvQjtJQUM3QixvQkFBT3RCLE1BQUEsQ0FBQWUsT0FBQSxDQUFBUSxhQUFBO01BQU9DLElBQUksRUFBQyxVQUFVO01BQUNOLFFBQVEsRUFBRSxJQUFJLENBQUNBLFFBQVM7TUFB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