UNPKG

matrix-react-sdk

Version:
159 lines (157 loc) 27.2 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 _classnames = _interopRequireDefault(require("classnames")); var _matrix = require("matrix-js-sdk/src/matrix"); var _DateUtils = require("../../../../DateUtils"); var _languageHandler = require("../../../../languageHandler"); var _AccessibleButton = _interopRequireDefault(require("../../elements/AccessibleButton")); var _Spinner = _interopRequireDefault(require("../../elements/Spinner")); var _ToggleSwitch = _interopRequireDefault(require("../../elements/ToggleSwitch")); var _DeviceDetailHeading = require("./DeviceDetailHeading"); var _DeviceVerificationStatusCard = require("./DeviceVerificationStatusCard"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2024 New Vector Ltd. Copyright 2022 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 DeviceDetails = ({ device, pusher, localNotificationSettings, isSigningOut, onVerifyDevice, onSignOutDevice, saveDeviceName, setPushNotifications, supportsMSC3881, className, isCurrentDevice }) => { const metadata = [{ id: "session", values: [{ label: (0, _languageHandler._t)("settings|sessions|session_id"), value: device.device_id }, { label: (0, _languageHandler._t)("settings|sessions|last_activity"), value: device.last_seen_ts && (0, _DateUtils.formatDate)(new Date(device.last_seen_ts)) }] }, { id: "application", heading: (0, _languageHandler._t)("common|application"), values: [{ label: (0, _languageHandler._t)("common|name"), value: device.appName }, { label: (0, _languageHandler._t)("common|version"), value: device.appVersion }, { label: (0, _languageHandler._t)("settings|sessions|url"), value: device.url }] }, { id: "device", heading: (0, _languageHandler._t)("common|device"), values: [{ label: (0, _languageHandler._t)("common|model"), value: device.deviceModel }, { label: (0, _languageHandler._t)("settings|sessions|os"), value: device.deviceOperatingSystem }, { label: (0, _languageHandler._t)("settings|sessions|browser"), value: device.client }, { label: (0, _languageHandler._t)("settings|sessions|ip"), value: device.last_seen_ip }] }].map(section => // filter out falsy values _objectSpread(_objectSpread({}, section), {}, { values: section.values.filter(row => !!row.value) })).filter(section => // then filter out sections with no values section.values.length); const showPushNotificationSection = !!pusher || !!localNotificationSettings; function isPushNotificationsEnabled(pusher, notificationSettings) { if (pusher) return !!pusher[_matrix.PUSHER_ENABLED.name]; if (localNotificationSettings) return !localNotificationSettings.is_silenced; return true; } function isCheckboxDisabled(pusher, notificationSettings) { if (localNotificationSettings) return false; if (pusher && !supportsMSC3881) return true; return false; } return /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)("mx_DeviceDetails", className), "data-testid": `device-detail-${device.device_id}` }, /*#__PURE__*/_react.default.createElement("section", { className: "mx_DeviceDetails_section" }, /*#__PURE__*/_react.default.createElement(_DeviceDetailHeading.DeviceDetailHeading, { device: device, saveDeviceName: saveDeviceName }), /*#__PURE__*/_react.default.createElement(_DeviceVerificationStatusCard.DeviceVerificationStatusCard, { device: device, onVerifyDevice: onVerifyDevice, isCurrentDevice: true })), /*#__PURE__*/_react.default.createElement("section", { className: "mx_DeviceDetails_section" }, /*#__PURE__*/_react.default.createElement("p", { className: "mx_DeviceDetails_sectionHeading" }, (0, _languageHandler._t)("settings|sessions|details_heading")), metadata.map(({ heading, values, id }, index) => /*#__PURE__*/_react.default.createElement("table", { className: "mx_DeviceDetails_metadataTable", key: index, "data-testid": `device-detail-metadata-${id}` }, heading && /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("th", null, heading))), /*#__PURE__*/_react.default.createElement("tbody", null, values.map(({ label, value }) => /*#__PURE__*/_react.default.createElement("tr", { key: label }, /*#__PURE__*/_react.default.createElement("td", { className: "mxDeviceDetails_metadataLabel" }, label), /*#__PURE__*/_react.default.createElement("td", { className: "mxDeviceDetails_metadataValue" }, value))))))), showPushNotificationSection && /*#__PURE__*/_react.default.createElement("section", { className: "mx_DeviceDetails_section mx_DeviceDetails_pushNotifications", "data-testid": "device-detail-push-notification" }, /*#__PURE__*/_react.default.createElement(_ToggleSwitch.default // For backwards compatibility, if `enabled` is missing // default to `true` , { checked: isPushNotificationsEnabled(pusher, localNotificationSettings), disabled: isCheckboxDisabled(pusher, localNotificationSettings), onChange: checked => setPushNotifications?.(device.device_id, checked), title: (0, _languageHandler._t)("settings|sessions|push_toggle"), "data-testid": "device-detail-push-notification-checkbox" }), /*#__PURE__*/_react.default.createElement("p", { className: "mx_DeviceDetails_sectionHeading" }, (0, _languageHandler._t)("settings|sessions|push_heading"), /*#__PURE__*/_react.default.createElement("small", { className: "mx_DeviceDetails_sectionSubheading" }, (0, _languageHandler._t)("settings|sessions|push_subheading")))), /*#__PURE__*/_react.default.createElement("section", { className: "mx_DeviceDetails_section" }, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: onSignOutDevice, kind: "danger_inline", disabled: isSigningOut, "data-testid": "device-detail-sign-out-cta" }, /*#__PURE__*/_react.default.createElement("span", { className: "mx_DeviceDetails_signOutButtonContent" }, (0, _languageHandler._t)("settings|sessions|sign_out"), isSigningOut && /*#__PURE__*/_react.default.createElement(_Spinner.default, { w: 16, h: 16 }))))); }; var _default = exports.default = DeviceDetails; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jbGFzc25hbWVzIiwiX21hdHJpeCIsIl9EYXRlVXRpbHMiLCJfbGFuZ3VhZ2VIYW5kbGVyIiwiX0FjY2Vzc2libGVCdXR0b24iLCJfU3Bpbm5lciIsIl9Ub2dnbGVTd2l0Y2giLCJfRGV2aWNlRGV0YWlsSGVhZGluZyIsIl9EZXZpY2VWZXJpZmljYXRpb25TdGF0dXNDYXJkIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiRGV2aWNlRGV0YWlscyIsImRldmljZSIsInB1c2hlciIsImxvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3MiLCJpc1NpZ25pbmdPdXQiLCJvblZlcmlmeURldmljZSIsIm9uU2lnbk91dERldmljZSIsInNhdmVEZXZpY2VOYW1lIiwic2V0UHVzaE5vdGlmaWNhdGlvbnMiLCJzdXBwb3J0c01TQzM4ODEiLCJjbGFzc05hbWUiLCJpc0N1cnJlbnREZXZpY2UiLCJtZXRhZGF0YSIsImlkIiwidmFsdWVzIiwibGFiZWwiLCJfdCIsInZhbHVlIiwiZGV2aWNlX2lkIiwibGFzdF9zZWVuX3RzIiwiZm9ybWF0RGF0ZSIsIkRhdGUiLCJoZWFkaW5nIiwiYXBwTmFtZSIsImFwcFZlcnNpb24iLCJ1cmwiLCJkZXZpY2VNb2RlbCIsImRldmljZU9wZXJhdGluZ1N5c3RlbSIsImNsaWVudCIsImxhc3Rfc2Vlbl9pcCIsIm1hcCIsInNlY3Rpb24iLCJyb3ciLCJzaG93UHVzaE5vdGlmaWNhdGlvblNlY3Rpb24iLCJpc1B1c2hOb3RpZmljYXRpb25zRW5hYmxlZCIsIm5vdGlmaWNhdGlvblNldHRpbmdzIiwiUFVTSEVSX0VOQUJMRUQiLCJuYW1lIiwiaXNfc2lsZW5jZWQiLCJpc0NoZWNrYm94RGlzYWJsZWQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lcyIsIkRldmljZURldGFpbEhlYWRpbmciLCJEZXZpY2VWZXJpZmljYXRpb25TdGF0dXNDYXJkIiwiaW5kZXgiLCJrZXkiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJvbkNoYW5nZSIsInRpdGxlIiwib25DbGljayIsImtpbmQiLCJ3IiwiaCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3NldHRpbmdzL2RldmljZXMvRGV2aWNlRGV0YWlscy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCB7IElQdXNoZXIsIFBVU0hFUl9FTkFCTEVELCBMb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0RhdGVVdGlsc1wiO1xuaW1wb3J0IHsgX3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgQWNjZXNzaWJsZUJ1dHRvbiBmcm9tIFwiLi4vLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4uLy4uL2VsZW1lbnRzL1NwaW5uZXJcIjtcbmltcG9ydCBUb2dnbGVTd2l0Y2ggZnJvbSBcIi4uLy4uL2VsZW1lbnRzL1RvZ2dsZVN3aXRjaFwiO1xuaW1wb3J0IHsgRGV2aWNlRGV0YWlsSGVhZGluZyB9IGZyb20gXCIuL0RldmljZURldGFpbEhlYWRpbmdcIjtcbmltcG9ydCB7IERldmljZVZlcmlmaWNhdGlvblN0YXR1c0NhcmQgfSBmcm9tIFwiLi9EZXZpY2VWZXJpZmljYXRpb25TdGF0dXNDYXJkXCI7XG5pbXBvcnQgeyBFeHRlbmRlZERldmljZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gICAgZGV2aWNlOiBFeHRlbmRlZERldmljZTtcbiAgICBwdXNoZXI/OiBJUHVzaGVyO1xuICAgIGxvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3M/OiBMb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzO1xuICAgIGlzU2lnbmluZ091dDogYm9vbGVhbjtcbiAgICBvblZlcmlmeURldmljZT86ICgpID0+IHZvaWQ7XG4gICAgb25TaWduT3V0RGV2aWNlOiAoKSA9PiB2b2lkO1xuICAgIHNhdmVEZXZpY2VOYW1lOiAoZGV2aWNlTmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHNldFB1c2hOb3RpZmljYXRpb25zPzogKGRldmljZUlkOiBzdHJpbmcsIGVuYWJsZWQ6IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD47XG4gICAgc3VwcG9ydHNNU0MzODgxPzogYm9vbGVhbjtcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgaXNDdXJyZW50RGV2aWNlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIE1ldGFkYXRhVGFibGUge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgaGVhZGluZz86IHN0cmluZztcbiAgICB2YWx1ZXM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmcgfCBSZWFjdC5SZWFjdE5vZGUgfVtdO1xufVxuXG5jb25zdCBEZXZpY2VEZXRhaWxzOiBSZWFjdC5GQzxQcm9wcz4gPSAoe1xuICAgIGRldmljZSxcbiAgICBwdXNoZXIsXG4gICAgbG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncyxcbiAgICBpc1NpZ25pbmdPdXQsXG4gICAgb25WZXJpZnlEZXZpY2UsXG4gICAgb25TaWduT3V0RGV2aWNlLFxuICAgIHNhdmVEZXZpY2VOYW1lLFxuICAgIHNldFB1c2hOb3RpZmljYXRpb25zLFxuICAgIHN1cHBvcnRzTVNDMzg4MSxcbiAgICBjbGFzc05hbWUsXG4gICAgaXNDdXJyZW50RGV2aWNlLFxufSkgPT4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBNZXRhZGF0YVRhYmxlW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcInNlc3Npb25cIixcbiAgICAgICAgICAgIHZhbHVlczogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6IF90KFwic2V0dGluZ3N8c2Vzc2lvbnN8c2Vzc2lvbl9pZFwiKSwgdmFsdWU6IGRldmljZS5kZXZpY2VfaWQgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfGxhc3RfYWN0aXZpdHlcIiksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkZXZpY2UubGFzdF9zZWVuX3RzICYmIGZvcm1hdERhdGUobmV3IERhdGUoZGV2aWNlLmxhc3Rfc2Vlbl90cykpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJhcHBsaWNhdGlvblwiLFxuICAgICAgICAgICAgaGVhZGluZzogX3QoXCJjb21tb258YXBwbGljYXRpb25cIiksXG4gICAgICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcImNvbW1vbnxuYW1lXCIpLCB2YWx1ZTogZGV2aWNlLmFwcE5hbWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcImNvbW1vbnx2ZXJzaW9uXCIpLCB2YWx1ZTogZGV2aWNlLmFwcFZlcnNpb24gfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfHVybFwiKSwgdmFsdWU6IGRldmljZS51cmwgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBcImRldmljZVwiLFxuICAgICAgICAgICAgaGVhZGluZzogX3QoXCJjb21tb258ZGV2aWNlXCIpLFxuICAgICAgICAgICAgdmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogX3QoXCJjb21tb258bW9kZWxcIiksIHZhbHVlOiBkZXZpY2UuZGV2aWNlTW9kZWwgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfG9zXCIpLCB2YWx1ZTogZGV2aWNlLmRldmljZU9wZXJhdGluZ1N5c3RlbSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IF90KFwic2V0dGluZ3N8c2Vzc2lvbnN8YnJvd3NlclwiKSwgdmFsdWU6IGRldmljZS5jbGllbnQgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiBfdChcInNldHRpbmdzfHNlc3Npb25zfGlwXCIpLCB2YWx1ZTogZGV2aWNlLmxhc3Rfc2Vlbl9pcCB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICBdXG4gICAgICAgIC5tYXAoKHNlY3Rpb24pID0+XG4gICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IGZhbHN5IHZhbHVlc1xuICAgICAgICAgICAgKHsgLi4uc2VjdGlvbiwgdmFsdWVzOiBzZWN0aW9uLnZhbHVlcy5maWx0ZXIoKHJvdykgPT4gISFyb3cudmFsdWUpIH0pLFxuICAgICAgICApXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAoc2VjdGlvbikgPT5cbiAgICAgICAgICAgICAgICAvLyB0aGVuIGZpbHRlciBvdXQgc2VjdGlvbnMgd2l0aCBubyB2YWx1ZXNcbiAgICAgICAgICAgICAgICBzZWN0aW9uLnZhbHVlcy5sZW5ndGgsXG4gICAgICAgICk7XG5cbiAgICBjb25zdCBzaG93UHVzaE5vdGlmaWNhdGlvblNlY3Rpb24gPSAhIXB1c2hlciB8fCAhIWxvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3M7XG5cbiAgICBmdW5jdGlvbiBpc1B1c2hOb3RpZmljYXRpb25zRW5hYmxlZChwdXNoZXI/OiBJUHVzaGVyLCBub3RpZmljYXRpb25TZXR0aW5ncz86IExvY2FsTm90aWZpY2F0aW9uU2V0dGluZ3MpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHB1c2hlcikgcmV0dXJuICEhcHVzaGVyW1BVU0hFUl9FTkFCTEVELm5hbWVdO1xuICAgICAgICBpZiAobG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncykgcmV0dXJuICFsb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzLmlzX3NpbGVuY2VkO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NoZWNrYm94RGlzYWJsZWQocHVzaGVyPzogSVB1c2hlciwgbm90aWZpY2F0aW9uU2V0dGluZ3M/OiBMb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChsb2NhbE5vdGlmaWNhdGlvblNldHRpbmdzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChwdXNoZXIgJiYgIXN1cHBvcnRzTVNDMzg4MSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcIm14X0RldmljZURldGFpbHNcIiwgY2xhc3NOYW1lKX0gZGF0YS10ZXN0aWQ9e2BkZXZpY2UtZGV0YWlsLSR7ZGV2aWNlLmRldmljZV9pZH1gfT5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cIm14X0RldmljZURldGFpbHNfc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxEZXZpY2VEZXRhaWxIZWFkaW5nIGRldmljZT17ZGV2aWNlfSBzYXZlRGV2aWNlTmFtZT17c2F2ZURldmljZU5hbWV9IC8+XG4gICAgICAgICAgICAgICAgPERldmljZVZlcmlmaWNhdGlvblN0YXR1c0NhcmQgZGV2aWNlPXtkZXZpY2V9IG9uVmVyaWZ5RGV2aWNlPXtvblZlcmlmeURldmljZX0gaXNDdXJyZW50RGV2aWNlIC8+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25IZWFkaW5nXCI+e190KFwic2V0dGluZ3N8c2Vzc2lvbnN8ZGV0YWlsc19oZWFkaW5nXCIpfTwvcD5cbiAgICAgICAgICAgICAgICB7bWV0YWRhdGEubWFwKCh7IGhlYWRpbmcsIHZhbHVlcywgaWQgfSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX21ldGFkYXRhVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgZGV2aWNlLWRldGFpbC1tZXRhZGF0YS0ke2lkfWB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtoZWFkaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57aGVhZGluZ308L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2YWx1ZXMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e2xhYmVsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJteERldmljZURldGFpbHNfbWV0YWRhdGFMYWJlbFwiPntsYWJlbH08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cIm14RGV2aWNlRGV0YWlsc19tZXRhZGF0YVZhbHVlXCI+e3ZhbHVlfTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAge3Nob3dQdXNoTm90aWZpY2F0aW9uU2VjdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfRGV2aWNlRGV0YWlsc19zZWN0aW9uIG14X0RldmljZURldGFpbHNfcHVzaE5vdGlmaWNhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRldmljZS1kZXRhaWwtcHVzaC1ub3RpZmljYXRpb25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFRvZ2dsZVN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZiBgZW5hYmxlZGAgaXMgbWlzc2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBgdHJ1ZWBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzUHVzaE5vdGlmaWNhdGlvbnNFbmFibGVkKHB1c2hlciwgbG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNDaGVja2JveERpc2FibGVkKHB1c2hlciwgbG9jYWxOb3RpZmljYXRpb25TZXR0aW5ncyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGNoZWNrZWQpID0+IHNldFB1c2hOb3RpZmljYXRpb25zPy4oZGV2aWNlLmRldmljZV9pZCwgY2hlY2tlZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJzZXR0aW5nc3xzZXNzaW9uc3xwdXNoX3RvZ2dsZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGV2aWNlLWRldGFpbC1wdXNoLW5vdGlmaWNhdGlvbi1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm14X0RldmljZURldGFpbHNfc2VjdGlvbkhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtfdChcInNldHRpbmdzfHNlc3Npb25zfHB1c2hfaGVhZGluZ1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25TdWJoZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge190KFwic2V0dGluZ3N8c2Vzc2lvbnN8cHVzaF9zdWJoZWFkaW5nXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvblNpZ25PdXREZXZpY2V9XG4gICAgICAgICAgICAgICAgICAgIGtpbmQ9XCJkYW5nZXJfaW5saW5lXCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU2lnbmluZ091dH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkZXZpY2UtZGV0YWlsLXNpZ24tb3V0LWN0YVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteF9EZXZpY2VEZXRhaWxzX3NpZ25PdXRCdXR0b25Db250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7X3QoXCJzZXR0aW5nc3xzZXNzaW9uc3xzaWduX291dFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1NpZ25pbmdPdXQgJiYgPFNwaW5uZXIgdz17MTZ9IGg9ezE2fSAvPn1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvQWNjZXNzaWJsZUJ1dHRvbj5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERldmljZURldGFpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FB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Q1YsQ0FDSSxDQUFDLEVBQ1RnQiwyQkFBMkIsaUJBQ3hCbkUsTUFBQSxDQUFBOEIsT0FBQSxDQUFBNEMsYUFBQTtJQUNJOUIsU0FBUyxFQUFDLDZEQUE2RDtJQUN2RSxlQUFZO0VBQWlDLGdCQUU3QzVDLE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUEsQ0FBQ2pFLGFBQUEsQ0FBQXFCO0VBQ0c7RUFDQTtFQUFBO0lBQ0FrRCxPQUFPLEVBQUVaLDBCQUEwQixDQUFDaEMsTUFBTSxFQUFFQyx5QkFBeUIsQ0FBRTtJQUN2RTRDLFFBQVEsRUFBRVIsa0JBQWtCLENBQUNyQyxNQUFNLEVBQUVDLHlCQUF5QixDQUFFO0lBQ2hFNkMsUUFBUSxFQUFHRixPQUFPLElBQUt0QyxvQkFBb0IsR0FBR1AsTUFBTSxDQUFDaUIsU0FBUyxFQUFFNEIsT0FBTyxDQUFFO0lBQ3pFRyxLQUFLLEVBQUUsSUFBQWpDLG1CQUFFLEVBQUMsK0JBQStCLENBQUU7SUFDM0MsZUFBWTtFQUEwQyxDQUN6RCxDQUFDLGVBQ0ZsRCxNQUFBLENBQUE4QixPQUFBLENBQUE0QyxhQUFBO0lBQUc5QixTQUFTLEVBQUM7RUFBaUMsR0FDekMsSUFBQU0sbUJBQUUsRUFBQyxnQ0FBZ0MsQ0FBQyxlQUNyQ2xELE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUE7SUFBTzlCLFNBQVMsRUFBQztFQUFvQyxHQUNoRCxJQUFBTSxtQkFBRSxFQUFDLG1DQUFtQyxDQUNwQyxDQUNSLENBQ0UsQ0FDWixlQUNEbEQsTUFBQSxDQUFBOEIsT0FBQSxDQUFBNEMsYUFBQTtJQUFTOUIsU0FBUyxFQUFDO0VBQTBCLGdCQUN6QzVDLE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUEsQ0FBQ25FLGlCQUFBLENBQUF1QixPQUFnQjtJQUNic0QsT0FBTyxFQUFFNUMsZUFBZ0I7SUFDekI2QyxJQUFJLEVBQUMsZUFBZTtJQUNwQkosUUFBUSxFQUFFM0MsWUFBYTtJQUN2QixlQUFZO0VBQTRCLGdCQUV4Q3RDLE1BQUEsQ0FBQThCLE9BQUEsQ0FBQTRDLGFBQUE7SUFBTTlCLFNBQVMsRUFBQztFQUF1QyxHQUNsRCxJQUFBTSxtQkFBRSxFQUFDLDRCQUE0QixDQUFDLEVBQ2hDWixZQUFZLGlCQUFJdEMsTUFBQSxDQUFBOEIsT0FBQSxDQUFBNEMsYUFBQSxDQUFDbEUsUUFBQSxDQUFBc0IsT0FBTztJQUFDd0QsQ0FBQyxFQUFFLEVBQUc7SUFBQ0MsQ0FBQyxFQUFFO0VBQUcsQ0FBRSxDQUN2QyxDQUNRLENBQ2IsQ0FDUixDQUFDO0FBRWQsQ0FBQztBQUFDLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxDQUFBM0QsT0FBQSxHQUVhSSxhQUFhIiwiaWdub3JlTGlzdCI6W119