UNPKG

botframework-webchat-component

Version:
176 lines (175 loc) 30.2 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _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(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_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; } /* eslint no-magic-numbers: ["error", { "ignore": [0, 1, 2, 3, 4, 5] }] */ /* eslint react/forbid-dom-props: "off" */ 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 }; var LEVEL_AS_NUMBER_KEYS = Object.keys(LEVEL_AS_NUMBER); function getLevelAsNumber(level) { // Mitigated through allowlisting. // eslint-disable-next-line security/detect-object-injection return LEVEL_AS_NUMBER_KEYS.includes(level) ? 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("div", { "aria-labelledby": headerElementId, className: "webchat__toaster__list", id: expandableElementId }, sortedNotificationsWithChildren.map(function (_ref4) { var children = _ref4.children, id = _ref4.notification.id; return /*#__PURE__*/_react.default.createElement("div", { "aria-atomic": true, className: "webchat__toaster__listItem", key: id }, children); }))); }; var _default = BasicToaster; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9Db2xsYXBzZUljb24iLCJfRXhwYW5kSWNvbiIsIl9Ob3RpZmljYXRpb25JY29uIiwiX3JhbmRvbUlkIiwiX3VzZVN0eWxlU2V0MyIsIl91c2VTdHlsZVRvRW1vdGlvbk9iamVjdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiX3NsaWNlZFRvQXJyYXkiLCJhcnIiLCJpIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsIm8iLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsIm4iLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbiIsImxlbmd0aCIsImFycjIiLCJfaSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnIiLCJpc0FycmF5IiwidXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucyIsImhvb2tzIiwidXNlTG9jYWxpemVyIiwidXNlUmVuZGVyVG9hc3QiLCJST09UX1NUWUxFIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJmbGV4U2hyaW5rIiwiZmxleCIsImxpc3RTdHlsZVR5cGUiLCJMRVZFTF9BU19OVU1CRVIiLCJlcnJvciIsIndhcm4iLCJpbmZvIiwic3VjY2VzcyIsIkxFVkVMX0FTX05VTUJFUl9LRVlTIiwia2V5cyIsImdldExldmVsQXNOdW1iZXIiLCJsZXZlbCIsImluY2x1ZGVzIiwiY29tcGFyZUxldmVsIiwieCIsInkiLCJzb3J0Tm90aWZpY2F0aW9ucyIsIm1hcCIsInZhbHVlcyIsInNvcnQiLCJfcmVmIiwiX3JlZjIiLCJ0aW1lc3RhbXAiLCJQQVNTVEhSVV9GTiIsIlRPQVNUX0FDQ09SRElPTl9JRFMiLCJ0d28iLCJmZXciLCJtYW55Iiwib3RoZXIiLCJCYXNpY1RvYXN0ZXIiLCJpbnN0YW5jZUlkIiwidXNlTWVtbyIsInJhbmRvbUlkIiwiX3VzZVN0eWxlU2V0IiwidXNlU3R5bGVTZXQiLCJfdXNlU3R5bGVTZXQyIiwidG9hc3RlclN0eWxlU2V0IiwidG9hc3RlciIsIl91c2VEZWJvdW5jZWROb3RpZmljYSIsIl91c2VEZWJvdW5jZWROb3RpZmljYTIiLCJkZWJvdW5jZWROb3RpZmljYXRpb25zIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiZXhwYW5kZWQiLCJzZXRFeHBhbmRlZCIsImxvY2FsaXplV2l0aFBsdXJhbCIsInBsdXJhbCIsInJlbmRlclRvYXN0Iiwicm9vdENsYXNzTmFtZSIsInVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IiwiaGFuZGxlVG9nZ2xlRXhwYW5kIiwidXNlQ2FsbGJhY2siLCJzb3J0ZWROb3RpZmljYXRpb25zIiwic29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiIsIm5vdGlmaWNhdGlvbiIsImNoaWxkcmVuIiwiZmlsdGVyIiwiZXhwYW5kYWJsZSIsIl9zb3J0ZWROb3RpZmljYXRpb25zVyIsIl9yZWYzIiwiX3NvcnRlZE5vdGlmaWNhdGlvbnNXMiIsImhpZ2hlc3RMZXZlbCIsImV4cGFuZGFibGVFbGVtZW50SWQiLCJjb25jYXQiLCJ1bmRlZmluZWQiLCJoZWFkZXJFbGVtZW50SWQiLCJ1c2VFZmZlY3QiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY2xhc3NOYW1lcyIsInJvbGUiLCJpZCIsIm9uQ2xpY2siLCJ0eXBlIiwiX3JlZjQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzIjpbIi4uL3NyYy9CYXNpY1RvYXN0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLW1hZ2ljLW51bWJlcnM6IFtcImVycm9yXCIsIHsgXCJpZ25vcmVcIjogWzAsIDEsIDIsIDMsIDQsIDVdIH1dICovXG4vKiBlc2xpbnQgcmVhY3QvZm9yYmlkLWRvbS1wcm9wczogXCJvZmZcIiAqL1xuXG5pbXBvcnQgeyBob29rcyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWFwaSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IENvbGxhcHNlSWNvbiBmcm9tICcuL1RvYXN0L0NvbGxhcHNlSWNvbic7XG5pbXBvcnQgRXhwYW5kSWNvbiBmcm9tICcuL1RvYXN0L0V4cGFuZEljb24nO1xuaW1wb3J0IE5vdGlmaWNhdGlvbkljb24gZnJvbSAnLi9Ub2FzdC9Ob3RpZmljYXRpb25JY29uJztcbmltcG9ydCByYW5kb21JZCBmcm9tICcuL1V0aWxzL3JhbmRvbUlkJztcbmltcG9ydCB1c2VTdHlsZVNldCBmcm9tICcuL2hvb2tzL3VzZVN0eWxlU2V0JztcbmltcG9ydCB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9FbW90aW9uT2JqZWN0JztcblxuY29uc3QgeyB1c2VEZWJvdW5jZWROb3RpZmljYXRpb25zLCB1c2VMb2NhbGl6ZXIsIHVzZVJlbmRlclRvYXN0IH0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcblxuICAnJiAud2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyJzoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4U2hyaW5rOiAwXG4gIH0sXG5cbiAgJyYgLndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZFRleHQnOiB7XG4gICAgZmxleDogMVxuICB9LFxuXG4gICcmIC53ZWJjaGF0X190b2FzdGVyX19saXN0Jzoge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgbGlzdFN0eWxlVHlwZTogJ25vbmUnXG4gIH1cbn07XG5cbmNvbnN0IExFVkVMX0FTX05VTUJFUiA9IHtcbiAgZXJyb3I6IDEsXG4gIHdhcm46IDIsXG4gIGluZm86IDMsXG4gIHN1Y2Nlc3M6IDRcbn07XG5cbmNvbnN0IExFVkVMX0FTX05VTUJFUl9LRVlTID0gT2JqZWN0LmtleXMoTEVWRUxfQVNfTlVNQkVSKTtcblxuZnVuY3Rpb24gZ2V0TGV2ZWxBc051bWJlcihsZXZlbCkge1xuICAvLyBNaXRpZ2F0ZWQgdGhyb3VnaCBhbGxvd2xpc3RpbmcuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICByZXR1cm4gTEVWRUxfQVNfTlVNQkVSX0tFWVMuaW5jbHVkZXMobGV2ZWwpID8gTEVWRUxfQVNfTlVNQkVSW2xldmVsXSA6IDU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVMZXZlbCh4LCB5KSB7XG4gIHJldHVybiBnZXRMZXZlbEFzTnVtYmVyKHgpIC0gZ2V0TGV2ZWxBc051bWJlcih5KTtcbn1cblxuZnVuY3Rpb24gc29ydE5vdGlmaWNhdGlvbnMobWFwKSB7XG4gIHJldHVybiAoXG4gICAgT2JqZWN0LnZhbHVlcyhtYXApXG4gICAgICAvLyBXZSB3YW50IHRoZSBvcmRlciByZXZlcnNlZCwgbW9zdCByZWNlbnQgb24gdG9wLlxuICAgICAgLnNvcnQoKHsgdGltZXN0YW1wOiB4IH0sIHsgdGltZXN0YW1wOiB5IH0pID0+IHkgLSB4KVxuICApO1xufVxuXG5jb25zdCBQQVNTVEhSVV9GTiA9IHZhbHVlID0+IHZhbHVlO1xuY29uc3QgVE9BU1RfQUNDT1JESU9OX0lEUyA9IHtcbiAgdHdvOiAnVE9BU1RfQUNDT1JESU9OX1RXTycsXG4gIGZldzogJ1RPQVNUX0FDQ09SRElPTl9GRVcnLFxuICBtYW55OiAnVE9BU1RfQUNDT1JESU9OX01BTlknLFxuICBvdGhlcjogJ1RPQVNUX0FDQ09SRElPTl9PVEhFUidcbn07XG5cbmNvbnN0IEJhc2ljVG9hc3RlciA9ICgpID0+IHtcbiAgY29uc3QgaW5zdGFuY2VJZCA9IHVzZU1lbW8ocmFuZG9tSWQsIFtdKTtcbiAgY29uc3QgW3sgdG9hc3RlcjogdG9hc3RlclN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgY29uc3QgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdID0gdXNlRGVib3VuY2VkTm90aWZpY2F0aW9ucygpO1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbG9jYWxpemVXaXRoUGx1cmFsID0gdXNlTG9jYWxpemVyKHsgcGx1cmFsOiB0cnVlIH0pO1xuICBjb25zdCByZW5kZXJUb2FzdCA9IHVzZVJlbmRlclRvYXN0KCk7XG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlRXhwYW5kID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0RXhwYW5kZWQoIWV4cGFuZGVkKSwgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0pO1xuICBjb25zdCBzb3J0ZWROb3RpZmljYXRpb25zID0gdXNlTWVtbygoKSA9PiBzb3J0Tm90aWZpY2F0aW9ucyhkZWJvdW5jZWROb3RpZmljYXRpb25zKSwgW2RlYm91bmNlZE5vdGlmaWNhdGlvbnNdKTtcbiAgY29uc3Qgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbiA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNvcnRlZE5vdGlmaWNhdGlvbnNcbiAgICAgICAgLm1hcChub3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVuZGVyVG9hc3QoeyBub3RpZmljYXRpb24gfSk7XG5cbiAgICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgeyBjaGlsZHJlbiwgbm90aWZpY2F0aW9uIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoUEFTU1RIUlVfRk4pLFxuICAgIFtyZW5kZXJUb2FzdCwgc29ydGVkTm90aWZpY2F0aW9uc11cbiAgKTtcblxuICBjb25zdCBleHBhbmRhYmxlID0gc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGggPiAxO1xuICBjb25zdCBbaGlnaGVzdExldmVsXSA9IHNvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IG5vdGlmaWNhdGlvbjogeyBsZXZlbCB9IH0pID0+IGxldmVsKS5zb3J0KGNvbXBhcmVMZXZlbCk7XG5cbiAgY29uc3QgZXhwYW5kYWJsZUVsZW1lbnRJZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkID8gYHdlYmNoYXRfX3RvYXN0ZXJfX2xpc3RfXyR7aW5zdGFuY2VJZH1gIDogdW5kZWZpbmVkKSxcbiAgICBbZXhwYW5kYWJsZSwgZXhwYW5kZWQsIGluc3RhbmNlSWRdXG4gICk7XG4gIGNvbnN0IGhlYWRlckVsZW1lbnRJZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKGV4cGFuZGFibGUgPyBgd2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyX18ke2luc3RhbmNlSWR9YCA6IHVuZGVmaW5lZCksXG4gICAgW2V4cGFuZGFibGUsIGluc3RhbmNlSWRdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAhZXhwYW5kYWJsZSAmJiBzZXRFeHBhbmRlZChmYWxzZSk7XG4gIH0sIFtleHBhbmRhYmxlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlckVsZW1lbnRJZH1cbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICBhcmlhLXJlbGV2YW50PVwiYWxsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXInLFxuICAgICAgICB7XG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLWV4cGFuZGFibGUnOiBleHBhbmRhYmxlLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1leHBhbmRlZCc6IGV4cGFuZGVkLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1lcnJvcic6IGhpZ2hlc3RMZXZlbCA9PT0gJ2Vycm9yJyxcbiAgICAgICAgICAnd2ViY2hhdF9fdG9hc3Rlci0taW5mbyc6IGhpZ2hlc3RMZXZlbCA9PT0gJ2luZm8nLFxuICAgICAgICAgICd3ZWJjaGF0X190b2FzdGVyLS1zdWNjZXNzJzogaGlnaGVzdExldmVsID09PSAnc3VjY2VzcycsXG4gICAgICAgICAgJ3dlYmNoYXRfX3RvYXN0ZXItLXdhcm4nOiBoaWdoZXN0TGV2ZWwgPT09ICd3YXJuJ1xuICAgICAgICB9LFxuICAgICAgICByb290Q2xhc3NOYW1lLFxuICAgICAgICB0b2FzdGVyU3R5bGVTZXQgKyAnJ1xuICAgICAgKX1cbiAgICAgIHJvbGU9XCJsb2dcIlxuICAgID5cbiAgICAgIHtleHBhbmRhYmxlICYmIChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGFibGVFbGVtZW50SWR9XG4gICAgICAgICAgYXJpYS1leHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9faGVhZGVyXCJcbiAgICAgICAgICBpZD17aGVhZGVyRWxlbWVudElkfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZUV4cGFuZH1cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZExldmVsSWNvbkJveFwiPlxuICAgICAgICAgICAgPE5vdGlmaWNhdGlvbkljb24gY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kTGV2ZWxJY29uXCIgbGV2ZWw9e2hpZ2hlc3RMZXZlbH0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZFRleHRcIj5cbiAgICAgICAgICAgIHtsb2NhbGl6ZVdpdGhQbHVyYWwoVE9BU1RfQUNDT1JESU9OX0lEUywgc29ydGVkTm90aWZpY2F0aW9uc1dpdGhDaGlsZHJlbi5sZW5ndGgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49e3RydWV9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2V4cGFuZEljb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fdG9hc3Rlcl9fZXhwYW5kSWNvbkZvY3VzXCI+e2V4cGFuZGVkID8gPENvbGxhcHNlSWNvbiAvPiA6IDxFeHBhbmRJY29uIC8+fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICl9XG4gICAgICB7KCFleHBhbmRhYmxlIHx8IGV4cGFuZGVkKSAmJiAoXG4gICAgICAgIDxkaXYgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkZXJFbGVtZW50SWR9IGNsYXNzTmFtZT1cIndlYmNoYXRfX3RvYXN0ZXJfX2xpc3RcIiBpZD17ZXhwYW5kYWJsZUVsZW1lbnRJZH0+XG4gICAgICAgICAge3NvcnRlZE5vdGlmaWNhdGlvbnNXaXRoQ2hpbGRyZW4ubWFwKCh7IGNoaWxkcmVuLCBub3RpZmljYXRpb246IHsgaWQgfSB9KSA9PiAoXG4gICAgICAgICAgICA8ZGl2IGFyaWEtYXRvbWljPXt0cnVlfSBjbGFzc05hbWU9XCJ3ZWJjaGF0X190b2FzdGVyX19saXN0SXRlbVwiIGtleT17aWR9PlxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQmFzaWNUb2FzdGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsSUFBQUEsdUJBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUVBLElBQUFLLGFBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLFdBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLGlCQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxTQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSx3QkFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQStFLFNBQUFXLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdB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