matrix-react-sdk
Version:
SDK for matrix.org using React
178 lines (176 loc) • 23.6 kB
JavaScript
"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 = _interopRequireDefault(require("react"));
var _lodash = require("lodash");
var _classnames = _interopRequireDefault(require("classnames"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _PlatformPeg = _interopRequireDefault(require("../../../PlatformPeg"));
var _AccessibleButton = _interopRequireDefault(require("./AccessibleButton"));
var _languageHandler = require("../../../languageHandler");
var _Media = require("../../../customisations/Media");
var _PosthogAnalytics = require("../../../PosthogAnalytics");
const _excluded = ["matrixClient", "loginType", "fragmentAfterLogin", "idp", "primary", "mini", "action", "flow"];
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 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.
*/
const getIcon = brand => {
switch (brand) {
case _matrix.IdentityProviderBrand.Apple:
return require(`../../../../res/img/element-icons/brands/apple.svg`).default;
case _matrix.IdentityProviderBrand.Facebook:
return require(`../../../../res/img/element-icons/brands/facebook.svg`).default;
case _matrix.IdentityProviderBrand.Github:
return require(`../../../../res/img/element-icons/brands/github.svg`).default;
case _matrix.IdentityProviderBrand.Gitlab:
return require(`../../../../res/img/element-icons/brands/gitlab.svg`).default;
case _matrix.IdentityProviderBrand.Google:
return require(`../../../../res/img/element-icons/brands/google.svg`).default;
case _matrix.IdentityProviderBrand.Twitter:
return require(`../../../../res/img/element-icons/brands/twitter.svg`).default;
default:
return null;
}
};
const getAuthenticationType = brand => {
switch (brand) {
case _matrix.IdentityProviderBrand.Apple:
return "Apple";
case _matrix.IdentityProviderBrand.Facebook:
return "Facebook";
case _matrix.IdentityProviderBrand.Github:
return "GitHub";
case _matrix.IdentityProviderBrand.Gitlab:
return "GitLab";
case _matrix.IdentityProviderBrand.Google:
return "Google";
// Not supported on the analytics SDK at the moment.
// case IdentityProviderBrand.Twitter:
// return "Twitter";
default:
return "SSO";
}
};
const SSOButton = _ref => {
let {
matrixClient,
loginType,
fragmentAfterLogin,
idp,
primary,
mini,
action,
flow
} = _ref,
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
let label;
if (idp) {
label = (0, _languageHandler._t)("auth|continue_with_idp", {
provider: idp.name
});
} else if (_matrix.DELEGATED_OIDC_COMPATIBILITY.findIn(flow)) {
label = (0, _languageHandler._t)("action|continue");
} else {
label = (0, _languageHandler._t)("auth|sign_in_with_sso");
}
const onClick = () => {
const authenticationType = getAuthenticationType(idp?.brand ?? "");
_PosthogAnalytics.PosthogAnalytics.instance.setAuthenticationType(authenticationType);
_PlatformPeg.default.get()?.startSingleSignOn(matrixClient, loginType, fragmentAfterLogin, idp?.id, action);
};
let icon;
let brandClass;
const brandIcon = idp?.brand ? getIcon(idp.brand) : null;
if (idp?.brand && brandIcon) {
const brandName = idp.brand.split(".").pop();
brandClass = `mx_SSOButton_brand_${brandName}`;
icon = /*#__PURE__*/_react.default.createElement("img", {
src: brandIcon,
height: "24",
width: "24",
alt: brandName
});
} else if (typeof idp?.icon === "string" && idp.icon.startsWith("mxc://")) {
const src = (0, _Media.mediaFromMxc)(idp.icon, matrixClient).getSquareThumbnailHttp(24) ?? undefined;
icon = /*#__PURE__*/_react.default.createElement("img", {
src: src,
height: "24",
width: "24",
alt: idp.name
});
}
const brandPart = brandClass ? {
[brandClass]: brandClass
} : undefined;
const classes = (0, _classnames.default)("mx_SSOButton", {
mx_SSOButton_mini: mini,
mx_SSOButton_default: !idp,
mx_SSOButton_primary: primary
}, brandPart);
if (mini) {
// TODO fallback icon
return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, (0, _extends2.default)({}, props, {
title: label,
className: classes,
onClick: onClick
}), icon);
}
return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, (0, _extends2.default)({}, props, {
className: classes,
onClick: onClick
}), icon, label);
};
const MAX_PER_ROW = 6;
const SSOButtons = ({
matrixClient,
flow,
loginType,
fragmentAfterLogin,
primary,
action,
disabled
}) => {
const providers = flow.identity_providers || [];
if (providers.length < 2) {
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_SSOButtons"
}, /*#__PURE__*/_react.default.createElement(SSOButton, {
matrixClient: matrixClient,
loginType: loginType,
fragmentAfterLogin: fragmentAfterLogin,
idp: providers[0],
primary: primary,
action: action,
flow: flow,
disabled: disabled
}));
}
const rows = Math.ceil(providers.length / MAX_PER_ROW);
const size = Math.ceil(providers.length / rows);
return /*#__PURE__*/_react.default.createElement("div", {
className: "mx_SSOButtons"
}, (0, _lodash.chunk)(providers, size).map(chunk => /*#__PURE__*/_react.default.createElement("div", {
key: chunk[0].id,
className: "mx_SSOButtons_row"
}, chunk.map(idp => /*#__PURE__*/_react.default.createElement(SSOButton, {
key: idp.id,
matrixClient: matrixClient,
loginType: loginType,
fragmentAfterLogin: fragmentAfterLogin,
idp: idp,
mini: true,
primary: primary,
action: action,
flow: flow
})))));
};
var _default = exports.default = SSOButtons;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY2xhc3NuYW1lcyIsIl9tYXRyaXgiLCJfUGxhdGZvcm1QZWciLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfTWVkaWEiLCJfUG9zdGhvZ0FuYWx5dGljcyIsIl9leGNsdWRlZCIsImdldEljb24iLCJicmFuZCIsIklkZW50aXR5UHJvdmlkZXJCcmFuZCIsIkFwcGxlIiwiZGVmYXVsdCIsIkZhY2Vib29rIiwiR2l0aHViIiwiR2l0bGFiIiwiR29vZ2xlIiwiVHdpdHRlciIsImdldEF1dGhlbnRpY2F0aW9uVHlwZSIsIlNTT0J1dHRvbiIsIl9yZWYiLCJtYXRyaXhDbGllbnQiLCJsb2dpblR5cGUiLCJmcmFnbWVudEFmdGVyTG9naW4iLCJpZHAiLCJwcmltYXJ5IiwibWluaSIsImFjdGlvbiIsImZsb3ciLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJsYWJlbCIsIl90IiwicHJvdmlkZXIiLCJuYW1lIiwiREVMRUdBVEVEX09JRENfQ09NUEFUSUJJTElUWSIsImZpbmRJbiIsIm9uQ2xpY2siLCJhdXRoZW50aWNhdGlvblR5cGUiLCJQb3N0aG9nQW5hbHl0aWNzIiwiaW5zdGFuY2UiLCJzZXRBdXRoZW50aWNhdGlvblR5cGUiLCJQbGF0Zm9ybVBlZyIsImdldCIsInN0YXJ0U2luZ2xlU2lnbk9uIiwiaWQiLCJpY29uIiwiYnJhbmRDbGFzcyIsImJyYW5kSWNvbiIsImJyYW5kTmFtZSIsInNwbGl0IiwicG9wIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsImhlaWdodCIsIndpZHRoIiwiYWx0Iiwic3RhcnRzV2l0aCIsIm1lZGlhRnJvbU14YyIsImdldFNxdWFyZVRodW1ibmFpbEh0dHAiLCJ1bmRlZmluZWQiLCJicmFuZFBhcnQiLCJjbGFzc2VzIiwiY2xhc3NOYW1lcyIsIm14X1NTT0J1dHRvbl9taW5pIiwibXhfU1NPQnV0dG9uX2RlZmF1bHQiLCJteF9TU09CdXR0b25fcHJpbWFyeSIsIl9leHRlbmRzMiIsInRpdGxlIiwiY2xhc3NOYW1lIiwiTUFYX1BFUl9ST1ciLCJTU09CdXR0b25zIiwiZGlzYWJsZWQiLCJwcm92aWRlcnMiLCJpZGVudGl0eV9wcm92aWRlcnMiLCJsZW5ndGgiLCJyb3dzIiwiTWF0aCIsImNlaWwiLCJzaXplIiwiY2h1bmsiLCJtYXAiLCJrZXkiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWV3cy9lbGVtZW50cy9TU09CdXR0b25zLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjaHVuayB9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQge1xuICAgIE1hdHJpeENsaWVudCxcbiAgICBJZGVudGl0eVByb3ZpZGVyQnJhbmQsXG4gICAgU1NPRmxvdyxcbiAgICBTU09BY3Rpb24sXG4gICAgSUlkZW50aXR5UHJvdmlkZXIsXG4gICAgREVMRUdBVEVEX09JRENfQ09NUEFUSUJJTElUWSxcbn0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgU2lnbnVwIH0gZnJvbSBcIkBtYXRyaXgtb3JnL2FuYWx5dGljcy1ldmVudHMvdHlwZXMvdHlwZXNjcmlwdC9TaWdudXBcIjtcblxuaW1wb3J0IFBsYXRmb3JtUGVnIGZyb20gXCIuLi8uLi8uLi9QbGF0Zm9ybVBlZ1wiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4vQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgeyBtZWRpYUZyb21NeGMgfSBmcm9tIFwiLi4vLi4vLi4vY3VzdG9taXNhdGlvbnMvTWVkaWFcIjtcbmltcG9ydCB7IFBvc3Rob2dBbmFseXRpY3MgfSBmcm9tIFwiLi4vLi4vLi4vUG9zdGhvZ0FuYWx5dGljc1wiO1xuXG5pbnRlcmZhY2UgSVNTT0J1dHRvblByb3BzIGV4dGVuZHMgSVByb3BzIHtcbiAgICBpZHA/OiBJSWRlbnRpdHlQcm92aWRlcjtcbiAgICBtaW5pPzogYm9vbGVhbjtcbiAgICBhY3Rpb24/OiBTU09BY3Rpb247XG59XG5cbmNvbnN0IGdldEljb24gPSAoYnJhbmQ6IElkZW50aXR5UHJvdmlkZXJCcmFuZCB8IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIHN3aXRjaCAoYnJhbmQpIHtcbiAgICAgICAgY2FzZSBJZGVudGl0eVByb3ZpZGVyQnJhbmQuQXBwbGU6XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZShgLi4vLi4vLi4vLi4vcmVzL2ltZy9lbGVtZW50LWljb25zL2JyYW5kcy9hcHBsZS5zdmdgKS5kZWZhdWx0O1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5GYWNlYm9vazpcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKGAuLi8uLi8uLi8uLi9yZXMvaW1nL2VsZW1lbnQtaWNvbnMvYnJhbmRzL2ZhY2Vib29rLnN2Z2ApLmRlZmF1bHQ7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLkdpdGh1YjpcbiAgICAgICAgICAgIHJldHVybiByZXF1aXJlKGAuLi8uLi8uLi8uLi9yZXMvaW1nL2VsZW1lbnQtaWNvbnMvYnJhbmRzL2dpdGh1Yi5zdmdgKS5kZWZhdWx0O1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5HaXRsYWI6XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZShgLi4vLi4vLi4vLi4vcmVzL2ltZy9lbGVtZW50LWljb25zL2JyYW5kcy9naXRsYWIuc3ZnYCkuZGVmYXVsdDtcbiAgICAgICAgY2FzZSBJZGVudGl0eVByb3ZpZGVyQnJhbmQuR29vZ2xlOlxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUoYC4uLy4uLy4uLy4uL3Jlcy9pbWcvZWxlbWVudC1pY29ucy9icmFuZHMvZ29vZ2xlLnN2Z2ApLmRlZmF1bHQ7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLlR3aXR0ZXI6XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZShgLi4vLi4vLi4vLi4vcmVzL2ltZy9lbGVtZW50LWljb25zL2JyYW5kcy90d2l0dGVyLnN2Z2ApLmRlZmF1bHQ7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5jb25zdCBnZXRBdXRoZW50aWNhdGlvblR5cGUgPSAoYnJhbmQ6IElkZW50aXR5UHJvdmlkZXJCcmFuZCB8IHN0cmluZyk6IFNpZ251cFtcImF1dGhlbnRpY2F0aW9uVHlwZVwiXSA9PiB7XG4gICAgc3dpdGNoIChicmFuZCkge1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5BcHBsZTpcbiAgICAgICAgICAgIHJldHVybiBcIkFwcGxlXCI7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLkZhY2Vib29rOlxuICAgICAgICAgICAgcmV0dXJuIFwiRmFjZWJvb2tcIjtcbiAgICAgICAgY2FzZSBJZGVudGl0eVByb3ZpZGVyQnJhbmQuR2l0aHViOlxuICAgICAgICAgICAgcmV0dXJuIFwiR2l0SHViXCI7XG4gICAgICAgIGNhc2UgSWRlbnRpdHlQcm92aWRlckJyYW5kLkdpdGxhYjpcbiAgICAgICAgICAgIHJldHVybiBcIkdpdExhYlwiO1xuICAgICAgICBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5Hb29nbGU6XG4gICAgICAgICAgICByZXR1cm4gXCJHb29nbGVcIjtcbiAgICAgICAgLy8gTm90IHN1cHBvcnRlZCBvbiB0aGUgYW5hbHl0aWNzIFNESyBhdCB0aGUgbW9tZW50LlxuICAgICAgICAvLyBjYXNlIElkZW50aXR5UHJvdmlkZXJCcmFuZC5Ud2l0dGVyOlxuICAgICAgICAvLyAgICAgcmV0dXJuIFwiVHdpdHRlclwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiU1NPXCI7XG4gICAgfVxufTtcblxuY29uc3QgU1NPQnV0dG9uOiBSZWFjdC5GQzxJU1NPQnV0dG9uUHJvcHM+ID0gKHtcbiAgICBtYXRyaXhDbGllbnQsXG4gICAgbG9naW5UeXBlLFxuICAgIGZyYWdtZW50QWZ0ZXJMb2dpbixcbiAgICBpZHAsXG4gICAgcHJpbWFyeSxcbiAgICBtaW5pLFxuICAgIGFjdGlvbixcbiAgICBmbG93LFxuICAgIC4uLnByb3BzXG59KSA9PiB7XG4gICAgbGV0IGxhYmVsOiBzdHJpbmc7XG4gICAgaWYgKGlkcCkge1xuICAgICAgICBsYWJlbCA9IF90KFwiYXV0aHxjb250aW51ZV93aXRoX2lkcFwiLCB7IHByb3ZpZGVyOiBpZHAubmFtZSB9KTtcbiAgICB9IGVsc2UgaWYgKERFTEVHQVRFRF9PSURDX0NPTVBBVElCSUxJVFkuZmluZEluPGJvb2xlYW4+KGZsb3cpKSB7XG4gICAgICAgIGxhYmVsID0gX3QoXCJhY3Rpb258Y29udGludWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGFiZWwgPSBfdChcImF1dGh8c2lnbl9pbl93aXRoX3Nzb1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkNsaWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBhdXRoZW50aWNhdGlvblR5cGUgPSBnZXRBdXRoZW50aWNhdGlvblR5cGUoaWRwPy5icmFuZCA/PyBcIlwiKTtcbiAgICAgICAgUG9zdGhvZ0FuYWx5dGljcy5pbnN0YW5jZS5zZXRBdXRoZW50aWNhdGlvblR5cGUoYXV0aGVudGljYXRpb25UeXBlKTtcbiAgICAgICAgUGxhdGZvcm1QZWcuZ2V0KCk/LnN0YXJ0U2luZ2xlU2lnbk9uKG1hdHJpeENsaWVudCwgbG9naW5UeXBlLCBmcmFnbWVudEFmdGVyTG9naW4sIGlkcD8uaWQsIGFjdGlvbik7XG4gICAgfTtcblxuICAgIGxldCBpY29uOiBKU1guRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYnJhbmRDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJyYW5kSWNvbiA9IGlkcD8uYnJhbmQgPyBnZXRJY29uKGlkcC5icmFuZCkgOiBudWxsO1xuICAgIGlmIChpZHA/LmJyYW5kICYmIGJyYW5kSWNvbikge1xuICAgICAgICBjb25zdCBicmFuZE5hbWUgPSBpZHAuYnJhbmQuc3BsaXQoXCIuXCIpLnBvcCgpO1xuICAgICAgICBicmFuZENsYXNzID0gYG14X1NTT0J1dHRvbl9icmFuZF8ke2JyYW5kTmFtZX1gO1xuICAgICAgICBpY29uID0gPGltZyBzcmM9e2JyYW5kSWNvbn0gaGVpZ2h0PVwiMjRcIiB3aWR0aD1cIjI0XCIgYWx0PXticmFuZE5hbWV9IC8+O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlkcD8uaWNvbiA9PT0gXCJzdHJpbmdcIiAmJiBpZHAuaWNvbi5zdGFydHNXaXRoKFwibXhjOi8vXCIpKSB7XG4gICAgICAgIGNvbnN0IHNyYyA9IG1lZGlhRnJvbU14YyhpZHAuaWNvbiwgbWF0cml4Q2xpZW50KS5nZXRTcXVhcmVUaHVtYm5haWxIdHRwKDI0KSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGljb24gPSA8aW1nIHNyYz17c3JjfSBoZWlnaHQ9XCIyNFwiIHdpZHRoPVwiMjRcIiBhbHQ9e2lkcC5uYW1lfSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBicmFuZFBhcnQgPSBicmFuZENsYXNzID8geyBbYnJhbmRDbGFzc106IGJyYW5kQ2xhc3MgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lcyhcbiAgICAgICAgXCJteF9TU09CdXR0b25cIixcbiAgICAgICAge1xuICAgICAgICAgICAgbXhfU1NPQnV0dG9uX21pbmk6IG1pbmksXG4gICAgICAgICAgICBteF9TU09CdXR0b25fZGVmYXVsdDogIWlkcCxcbiAgICAgICAgICAgIG14X1NTT0J1dHRvbl9wcmltYXJ5OiBwcmltYXJ5LFxuICAgICAgICB9LFxuICAgICAgICBicmFuZFBhcnQsXG4gICAgKTtcblxuICAgIGlmIChtaW5pKSB7XG4gICAgICAgIC8vIFRPRE8gZmFsbGJhY2sgaWNvblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gey4uLnByb3BzfSB0aXRsZT17bGFiZWx9IGNsYXNzTmFtZT17Y2xhc3Nlc30gb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICAgICAge2ljb259XG4gICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gey4uLnByb3BzfSBjbGFzc05hbWU9e2NsYXNzZXN9IG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAge2ljb259XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICApO1xufTtcblxuaW50ZXJmYWNlIElQcm9wcyB7XG4gICAgbWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQ7XG4gICAgZmxvdzogU1NPRmxvdztcbiAgICBsb2dpblR5cGU6IFwic3NvXCIgfCBcImNhc1wiO1xuICAgIGZyYWdtZW50QWZ0ZXJMb2dpbj86IHN0cmluZztcbiAgICBwcmltYXJ5PzogYm9vbGVhbjtcbiAgICBhY3Rpb24/OiBTU09BY3Rpb247XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBNQVhfUEVSX1JPVyA9IDY7XG5cbmNvbnN0IFNTT0J1dHRvbnM6IFJlYWN0LkZDPElQcm9wcz4gPSAoe1xuICAgIG1hdHJpeENsaWVudCxcbiAgICBmbG93LFxuICAgIGxvZ2luVHlwZSxcbiAgICBmcmFnbWVudEFmdGVyTG9naW4sXG4gICAgcHJpbWFyeSxcbiAgICBhY3Rpb24sXG4gICAgZGlzYWJsZWQsXG59KSA9PiB7XG4gICAgY29uc3QgcHJvdmlkZXJzID0gZmxvdy5pZGVudGl0eV9wcm92aWRlcnMgfHwgW107XG4gICAgaWYgKHByb3ZpZGVycy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NTT0J1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8U1NPQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeENsaWVudD17bWF0cml4Q2xpZW50fVxuICAgICAgICAgICAgICAgICAgICBsb2dpblR5cGU9e2xvZ2luVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRBZnRlckxvZ2luPXtmcmFnbWVudEFmdGVyTG9naW59XG4gICAgICAgICAgICAgICAgICAgIGlkcD17cHJvdmlkZXJzWzBdfVxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5PXtwcmltYXJ5fVxuICAgICAgICAgICAgICAgICAgICBhY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgZmxvdz17Zmxvd31cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzID0gTWF0aC5jZWlsKHByb3ZpZGVycy5sZW5ndGggLyBNQVhfUEVSX1JPVyk7XG4gICAgY29uc3Qgc2l6ZSA9IE1hdGguY2VpbChwcm92aWRlcnMubGVuZ3RoIC8gcm93cyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1NTT0J1dHRvbnNcIj5cbiAgICAgICAgICAgIHtjaHVuayhwcm92aWRlcnMsIHNpemUpLm1hcCgoY2h1bmspID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17Y2h1bmtbMF0uaWR9IGNsYXNzTmFtZT1cIm14X1NTT0J1dHRvbnNfcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIHtjaHVuay5tYXAoKGlkcCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNTT0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aWRwLmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeENsaWVudD17bWF0cml4Q2xpZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2luVHlwZT17bG9naW5UeXBlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50QWZ0ZXJMb2dpbj17ZnJhZ21lbnRBZnRlckxvZ2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcD17aWRwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmk9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeT17cHJpbWFyeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249e2FjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG93PXtmbG93fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNTT0J1dHRvbnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FB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