UNPKG

botframework-webchat-component

Version:
207 lines (173 loc) 23.4 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireWildcard(require("react")); var _CollapseIcon = _interopRequireDefault(require("./Toast/CollapseIcon")); var _ExpandIcon = _interopRequireDefault(require("./Toast/ExpandIcon")); var _NotificationIcon = _interopRequireDefault(require("./Toast/NotificationIcon")); var _randomId = _interopRequireDefault(require("./Utils/randomId")); var _useStyleSet3 = _interopRequireDefault(require("./hooks/useStyleSet")); var _useStyleToEmotionObject = _interopRequireDefault(require("./hooks/internal/useStyleToEmotionObject")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var useDebouncedNotifications = _botframeworkWebchatApi.hooks.useDebouncedNotifications, useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer, useRenderToast = _botframeworkWebchatApi.hooks.useRenderToast; var ROOT_STYLE = { display: 'flex', flexDirection: 'column', '& .webchat__toaster__header': { display: 'flex', flexShrink: 0 }, '& .webchat__toaster__expandText': { flex: 1 }, '& .webchat__toaster__list': { display: 'block', listStyleType: 'none' } }; var LEVEL_AS_NUMBER = { error: 1, warn: 2, info: 3, success: 4 }; function getLevelAsNumber(level) { return LEVEL_AS_NUMBER[level] || 5; } function compareLevel(x, y) { return getLevelAsNumber(x) - getLevelAsNumber(y); } function sortNotifications(map) { return Object.values(map) // We want the order reversed, most recent on top. .sort(function (_ref, _ref2) { var x = _ref.timestamp; var y = _ref2.timestamp; return y - x; }); } var PASSTHRU_FN = function PASSTHRU_FN(value) { return value; }; var TOAST_ACCORDION_IDS = { two: 'TOAST_ACCORDION_TWO', few: 'TOAST_ACCORDION_FEW', many: 'TOAST_ACCORDION_MANY', other: 'TOAST_ACCORDION_OTHER' }; var BasicToaster = function BasicToaster() { var instanceId = (0, _react.useMemo)(_randomId.default, []); var _useStyleSet = (0, _useStyleSet3.default)(), _useStyleSet2 = _slicedToArray(_useStyleSet, 1), toasterStyleSet = _useStyleSet2[0].toaster; var _useDebouncedNotifica = useDebouncedNotifications(), _useDebouncedNotifica2 = _slicedToArray(_useDebouncedNotifica, 1), debouncedNotifications = _useDebouncedNotifica2[0]; var _useState = (0, _react.useState)(false), _useState2 = _slicedToArray(_useState, 2), expanded = _useState2[0], setExpanded = _useState2[1]; var localizeWithPlural = useLocalizer({ plural: true }); var renderToast = useRenderToast(); var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + ''; var handleToggleExpand = (0, _react.useCallback)(function () { return setExpanded(!expanded); }, [expanded, setExpanded]); var sortedNotifications = (0, _react.useMemo)(function () { return sortNotifications(debouncedNotifications); }, [debouncedNotifications]); var sortedNotificationsWithChildren = (0, _react.useMemo)(function () { return sortedNotifications.map(function (notification) { var children = renderToast({ notification: notification }); return children && { children: children, notification: notification }; }).filter(PASSTHRU_FN); }, [renderToast, sortedNotifications]); var expandable = sortedNotificationsWithChildren.length > 1; var _sortedNotificationsW = sortedNotificationsWithChildren.map(function (_ref3) { var level = _ref3.notification.level; return level; }).sort(compareLevel), _sortedNotificationsW2 = _slicedToArray(_sortedNotificationsW, 1), highestLevel = _sortedNotificationsW2[0]; var expandableElementId = (0, _react.useMemo)(function () { return !expandable || expanded ? "webchat__toaster__list__".concat(instanceId) : undefined; }, [expandable, expanded, instanceId]); var headerElementId = (0, _react.useMemo)(function () { return expandable ? "webchat__toaster__header__".concat(instanceId) : undefined; }, [expandable, instanceId]); (0, _react.useEffect)(function () { !expandable && setExpanded(false); }, [expandable]); return /*#__PURE__*/_react.default.createElement("div", { "aria-labelledby": headerElementId, "aria-live": "polite", "aria-relevant": "all", className: (0, _classnames.default)('webchat__toaster', { 'webchat__toaster--expandable': expandable, 'webchat__toaster--expanded': expanded, 'webchat__toaster--error': highestLevel === 'error', 'webchat__toaster--info': highestLevel === 'info', 'webchat__toaster--success': highestLevel === 'success', 'webchat__toaster--warn': highestLevel === 'warn' }, rootClassName, toasterStyleSet + ''), role: "log" }, expandable && /*#__PURE__*/_react.default.createElement("button", { "aria-controls": expandableElementId, "aria-expanded": expanded, className: "webchat__toaster__header", id: headerElementId, onClick: handleToggleExpand, type: "button" }, /*#__PURE__*/_react.default.createElement("div", { "aria-hidden": true, className: "webchat__toaster__expandLevelIconBox" }, /*#__PURE__*/_react.default.createElement(_NotificationIcon.default, { className: "webchat__toaster__expandLevelIcon", level: highestLevel })), /*#__PURE__*/_react.default.createElement("div", { className: "webchat__toaster__expandText" }, localizeWithPlural(TOAST_ACCORDION_IDS, sortedNotificationsWithChildren.length)), /*#__PURE__*/_react.default.createElement("div", { "aria-hidden": true, className: "webchat__toaster__expandIcon" }, /*#__PURE__*/_react.default.createElement("div", { className: "webchat__toaster__expandIconFocus" }, expanded ? /*#__PURE__*/_react.default.createElement(_CollapseIcon.default, null) : /*#__PURE__*/_react.default.createElement(_ExpandIcon.default, null)))), (!expandable || expanded) && /*#__PURE__*/_react.default.createElement("ul", { "aria-labelledby": headerElementId, className: "webchat__toaster__list", id: expandableElementId, role: "region" }, sortedNotificationsWithChildren.map(function (_ref4) { var children = _ref4.children, id = _ref4.notification.id; return /*#__PURE__*/_react.default.createElement("li", { "aria-atomic": true, className: "webchat__toaster__listItem", key: id, role: "none" }, children); }))); }; var _default = BasicToaster; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RvYXN0ZXIuanMiXSwibmFtZXMiOlsidXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucyIsImhvb2tzIiwidXNlTG9jYWxpemVyIiwidXNlUmVuZGVyVG9hc3QiLCJST09UX1NUWUxFIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJmbGV4U2hyaW5rIiwiZmxleCIsImxpc3RTdHlsZVR5cGUiLCJMRVZFTF9BU19OVU1CRVIiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwic3VjY2VzcyIsImdldExldmVsQXNOdW1iZXIiLCJsZXZlbCIsImNvbXBhcmVMZXZlbCIsIngiLCJ5Iiwic29ydE5vdGlmaWNhdGlvbnMiLCJtYXAiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwidGltZXN0YW1wIiwiUEFTU1RIUlVfRk4iLCJ2YWx1ZSIsIlRPQVNUX0FDQ09SRElPTl9JRFMiLCJ0d28iLCJmZXciLCJtYW55Iiwib3RoZXIiLCJCYXNpY1RvYXN0ZXIiLCJpbnN0YW5jZUlkIiwicmFuZG9tSWQiLCJ0b2FzdGVyU3R5bGVTZXQiLCJ0b2FzdGVyIiwiZGVib3VuY2VkTm90aWZpY2F0aW9ucyIsImV4cGFuZGVkIiwic2V0RXhwYW5kZWQiLCJsb2NhbGl6ZVdpdGhQbHVyYWwiLCJwbHVyYWwiLCJyZW5kZXJUb2FzdCIsInJvb3RDbGFzc05hbWUiLCJoYW5kbGVUb2dnbGVFeHBhbmQiLCJzb3J0ZWROb3RpZmljYXRpb25zIiwic29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiIsIm5vdGlmaWNhdGlvbiIsImNoaWxkcmVuIiwiZmlsdGVyIiwiZXhwYW5kYWJsZSIsImxlbmd0aCIsImhpZ2hlc3RMZXZlbCIsImV4cGFuZGFibGVFbGVtZW50SWQiLCJ1bmRlZmluZWQiLCJoZWFkZXJFbGVtZW50SWQiLCJpZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7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cEJKLEVBdUNHLENBQUMsQ0FBQ1ksVUFBRCxJQUFlWixRQUFoQixrQkFDQztBQUFJLHVCQUFpQmlCLGVBQXJCO0FBQXNDLElBQUEsU0FBUyxFQUFDLHdCQUFoRDtBQUF5RSxJQUFBLEVBQUUsRUFBRUYsbUJBQTdFO0FBQWtHLElBQUEsSUFBSSxFQUFDO0FBQXZHLEtBQ0dQLCtCQUErQixDQUFDMUIsR0FBaEMsQ0FBb0M7QUFBQSxRQUFHNEIsUUFBSCxTQUFHQSxRQUFIO0FBQUEsUUFBNkJRLEVBQTdCLFNBQWFULFlBQWIsQ0FBNkJTLEVBQTdCO0FBQUEsd0JBQ25DO0FBQUkscUJBQWEsSUFBakI7QUFBdUIsTUFBQSxTQUFTLEVBQUMsNEJBQWpDO0FBQThELE1BQUEsR0FBRyxFQUFFQSxFQUFuRTtBQUF1RSxNQUFBLElBQUksRUFBQztBQUE1RSxPQUNHUixRQURILENBRG1DO0FBQUEsR0FBcEMsQ0FESCxDQXhDSixDQURGO0FBbURELENBMUZEOztlQTRGZWhCLFkiLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1tYWdpYy1udW1iZXJzOiBbXCJlcnJvclwiLCB7IFwiaWdub3JlXCI6IFswLCAxLCAyLCAzLCA0LCA1XSB9XSAqL1xuLyogZXNsaW50IHJlYWN0L2ZvcmJpZC1kb20tcHJvcHM6IFwib2ZmXCIgKi9cblxuaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBDb2xsYXBzZUljb24gZnJvbSAnLi9Ub2FzdC9Db2xsYXBzZUljb24nO1xuaW1wb3J0IEV4cGFuZEljb24gZnJvbSAnLi9Ub2FzdC9FeHBhbmRJY29uJztcbmltcG9ydCBOb3RpZmljYXRpb25JY29uIGZyb20gJy4vVG9hc3QvTm90aWZpY2F0aW9uSWNvbic7XG5pbXBvcnQgcmFuZG9tSWQgZnJvbSAnLi9VdGlscy9yYW5kb21JZCc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi9ob29rcy91c2VTdHlsZVNldCc7XG5pbXBvcnQgdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCc7XG5cbmNvbnN0IHsgdXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucywgdXNlTG9jYWxpemVyLCB1c2VSZW5kZXJUb2FzdCB9ID0gaG9va3M7XG5cbmNvbnN0IFJPT1RfU1RZTEUgPSB7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG5cbiAgJyYgLndlYmNoYXRfX3RvYXN0ZXJfX2hlYWRlcic6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFNocmluazogMFxuICB9LFxuXG4gICcmIC53ZWJjaGF0X190b2FzdGVyX19leHBhbmRUZXh0Jzoge1xuICAgIGZsZXg6IDFcbiAgfSxcblxuICAnJiAud2ViY2hhdF9fdG9hc3Rlcl9fbGlzdCc6IHtcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIGxpc3RTdHlsZVR5cGU6ICdub25lJ1xuICB9XG59O1xuXG5jb25zdCBMRVZFTF9BU19OVU1CRVIgPSB7XG4gIGVycm9yOiAxLFxuICB3YXJuOiAyLFxuICBpbmZvOiAzLFxuICBzdWNjZXNzOiA0XG59O1xuXG5mdW5jdGlvbiBnZXRMZXZlbEFzTnVtYmVyKGxldmVsKSB7XG4gIHJldHVybiBMRVZFTF9BU19OVU1CRVJbbGV2ZWxdIHx8IDU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVMZXZlbCh4LCB5KSB7XG4gIHJldHVybiBnZXRMZXZlbEFzTnVtYmVyKHgpIC0gZ2V0TGV2ZWxBc051bWJlcih5KTtcbn1cblxuZnVuY3Rpb24gc29ydE5vdGlmaWNhdGlvbnMobWFwKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnZhbHVlcyhtYXApXG4gICAgICAvLyBXZSB3YW50IHRoZSBvcmRlciByZXZlcnNlZCwgbW9zdCByZWNlbnQgb24gdG9wLlxuICAgICAgLnNvcnQoKHsgdGltZXN0YW1wOiB4IH0sIHsgdGltZXN0YW1wOiB5IH0pID0+IHkgLSB4KVxuICApO1xufVxuXG5jb25zdCBQQVNTVEhSVV9GTiA9IHZhbHVlID0+IHZhbHVlO1xuY29uc3QgVE9BU1RfQUNDT1JESU9OX0lEUyA9IHtcbiAgdHdvOiAnVE9BU1RfQUNDT1JESU9OX1RXTycsXG4gIGZldzogJ1RPQVNUX0FDQ09SRElPTl9GRVcnLFxuICBtYW55OiAnVE9BU1RfQUNDT1JESU9OX01BTlknLFxuICBvdGhlcjogJ1RPQVNUX0FDQ09SRElPTl9PVEhFUidcbn07XG5cbmNvbnN0IEJhc2ljVG9hc3RlciA9ICgpID0+IHtcbiAgY29uc3QgaW5zdGFuY2VJZCA9IHVzZU1lbW8ocmFuZG9tSWQsIFtdKTtcbiAgY29uc3QgW3sgdG9hc3RlcjogdG9hc3RlclN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgY29uc3QgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdID0gdXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucygpO1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbG9jYWxpemVXaXRoUGx1cmFsID0gdXNlTG9jYWxpemVyKHsgcGx1cmFsOiB0cnVlIH0pO1xuICBjb25zdCByZW5kZXJUb2FzdCA9IHVzZVJlbmRlclRvYXN0KCk7XG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRXhwYW5kID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0RXhwYW5kZWQoIWV4cGFuZGVkKSwgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0pO1xuICBjb25zdCBzb3J0ZWROb3RpZmljYXRpb25zID0gdXNlTWVtbygoKSA9PiBzb3J0Tm90aWZpY2F0aW9ucyhkZWJvdW5jZWROb3RpZmljYXRpb25zKSwgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdKTtcbiAgY29uc3Qgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNvcnRlZE5vdGlmaWNhdGlvbnNcbiAgICAgICAgLm1hcChub3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVuZGVyVG9hc3QoeyBub3RpZmljYXRpb24gfSk7XG5cbiAgICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgeyBjaGlsZHJlbiwgbm90aWZpY2F0aW9uIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoUEFTU1RIUlVfRk4pLFxuICAgIFtyZW5kZXJUb2FzdCwgc29ydGVkTm90aWZpY2F0aW9uc11cbiAgKTtcblxuICBjb25zdCBleHBhbmRhYmxlID0gc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGggPiAxO1xuICBjb25zdCBbaGlnaGVzdExldmVsXSA9IHNvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IG5vdGlmaWNhdGlvbjogeyBsZXZlbCB9IH0pID0+IGxldmVsKS5zb3J0KGNvbXBhcmVMZXZlbCk7XG5cbiAgY29uc3QgZXhwYW5kYWJsZUVsZW1lbnRJZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkID8gYHdlYmNoYXRfX3RvYXN0ZXJfX2xpc3RfXyR7aW5zdGFuY2VJZH1gIDogdW5kZWZpbmVkKSxcbiAgICBbZXhwYW5kYWJsZSwgZXhwYW5kZWQsIGluc3RhbmNlSWRdXG4gICk7XG4gIGNvbnN0IGhlYWRlckVsZW1lbnRJZCA9IHVzZU1lbW8oKCkgPT4gKGV4cGFuZGFibGUgPyBgd2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyX18ke2luc3RhbmNlSWR9YCA6IHVuZGVmaW5lZCksIFtcbiAgICBleHBhbmRhYmxlLFxuICAgIGluc3RhbmNlSWRcbiAgXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAhZXhwYW5kYWJsZSAmJiBzZXRFeHBhbmRlZChmYWxzZSk7XG4gIH0sIFtleHBhbmRhYmxlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlckVsZW1lbnRJZH1cbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICBhcmlhLXJlbGV2YW50PVwiYWxsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXInLFxuICAgICAgICB7XG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLWV4cGFuZGFibGUnOiBleHBhbmRhYmxlLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1leHBhbmRlZCc6IGV4cGFuZGVkLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1lcnJvcic6IGhpZ2hlc3RMZXZlbCA9PT0gJ2Vycm9yJyxcbiAgICAgICAgICAnd2ViY2hhdF9fdG9hc3Rlci0taW5mbyc6IGhpZ2hlc3RMZXZlbCA9PT0gJ2luZm8nLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1zdWNjZXNzJzogaGlnaGVzdExldmVsID09PSAnc3VjY2VzcycsXG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLXdhcm4nOiBoaWdoZXN0TGV2ZWwgPT09ICd3YXJuJ1xuICAgICAgICB9LFxuICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICB0b2FzdGVyU3R5bGVTZXQgKyAnJ1xuICAgICAgKX1cbiAgICAgIHJvbGU9XCJsb2dcIlxuICAgID5cbiAgICAgIHtleHBhbmRhYmxlICYmIChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGFibGVFbGVtZW50SWR9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyXCJcbiAgICAgICAgICBpZD17aGVhZGVyRWxlbWVudElkfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUV4cGFuZH1cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZExldmVsSWNvbkJveFwiPlxuICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkljb24gY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kTGV2ZWxJY29uXCIgbGV2ZWw9e2hpZ2hlc3RMZXZlbH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZFRleHRcIj5cbiAgICAgICAgICAgIHtsb2NhbGl6ZVdpdGhQbHVyYWwoVE9BU1RfQUNDT1JESU9OX0lEUywgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZEljb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kSWNvbkZvY3VzXCI+e2V4cGFuZGVkID8gPENvbGxhcHNlSWNvbiAvPiA6IDxFeHBhbmRJY29uIC8+fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICl9XG4gICAgICB7KCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkKSAmJiAoXG4gICAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlckVsZW1lbnRJZH0gY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fbGlzdFwiIGlkPXtleHBhbmRhYmxlRWxlbWVudElkfSByb2xlPVwicmVnaW9uXCI+XG4gICAgICAgICAge3NvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IGNoaWxkcmVuLCBub3RpZmljYXRpb246IHsgaWQgfSB9KSA9PiAoXG4gICAgICAgICAgICA8bGkgYXJpYS1hdG9taWM9e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2xpc3RJdGVtXCIga2V5PXtpZH0gcm9sZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBCYXNpY1RvYXN0ZXI7XG4iXX0=