UNPKG

botframework-webchat-component

Version:
99 lines (96 loc) 20.9 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 _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireWildcard(require("react")); var _reactSay = _interopRequireWildcard(require("react-say")); var _SayAlt = _interopRequireDefault(require("./SayAlt")); 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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } 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; } // TODO: [P1] Interop between Babel and esbuild. var Say = 'default' in _reactSay.default ? _reactSay.default.default : _reactSay.default; var useMarkActivityAsSpoken = _botframeworkWebchatApi.hooks.useMarkActivityAsSpoken, useStyleOptions = _botframeworkWebchatApi.hooks.useStyleOptions, useVoiceSelector = _botframeworkWebchatApi.hooks.useVoiceSelector; // TODO: [P4] Consider moving this feature into BasicActivity // And it has better DOM position for showing visual spoken text var Speak = function Speak(_ref) { var _activity$channelData; var activity = _ref.activity; var _useStyleOptions = useStyleOptions(), _useStyleOptions2 = _slicedToArray(_useStyleOptions, 1), showSpokenText = _useStyleOptions2[0].showSpokenText; var markActivityAsSpoken = useMarkActivityAsSpoken(); var selectVoice = useVoiceSelector(activity); var markAsSpoken = (0, _react.useCallback)(function () { markActivityAsSpoken(activity); }, [activity, markActivityAsSpoken]); var singleLine = (0, _react.useMemo)(function () { if (activity.type !== 'message') { return false; } var _activity$attachments = activity.attachments, attachments = _activity$attachments === void 0 ? [] : _activity$attachments, speak = activity.speak, text = activity.text; return [speak || text].concat(_toConsumableArray(attachments.filter(function (_ref2) { var contentType = _ref2.contentType; return contentType === 'application/vnd.microsoft.card.adaptive'; }).map(function (attachment) { var _attachment$content; return attachment === null || attachment === void 0 ? void 0 : (_attachment$content = attachment.content) === null || _attachment$content === void 0 ? void 0 : _attachment$content.speak; }))).filter(function (line) { return line; }).join('\r\n'); }, [activity]); var speechSynthesisUtterance = activity.type === 'message' && ((_activity$channelData = activity.channelData) === null || _activity$channelData === void 0 ? void 0 : _activity$channelData.speechSynthesisUtterance); return !!activity && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, speechSynthesisUtterance ? /*#__PURE__*/_react.default.createElement(_reactSay.SayUtterance, { onEnd: markAsSpoken, onError: markAsSpoken, utterance: speechSynthesisUtterance }) : /*#__PURE__*/_react.default.createElement(Say, { onEnd: markAsSpoken, onError: markAsSpoken, text: singleLine, voice: selectVoice }), !!showSpokenText && /*#__PURE__*/_react.default.createElement(_SayAlt.default, { speak: singleLine })); }; Speak.propTypes = { // PropTypes cannot fully capture TypeScript types. // @ts-ignore activity: _propTypes.default.shape({ attachments: _propTypes.default.arrayOf(_propTypes.default.shape({ speak: _propTypes.default.string, subtitle: _propTypes.default.string, text: _propTypes.default.string, title: _propTypes.default.string })), channelData: _propTypes.default.shape({ speechSynthesisUtterance: _propTypes.default.any }), speak: _propTypes.default.string, text: _propTypes.default.string, type: _propTypes.default.string.isRequired }).isRequired }; Speak.displayName = 'SpeakActivity'; var _default = /*#__PURE__*/(0, _react.memo)(Speak); exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3JlYWN0U2F5IiwiX1NheUFsdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsIml0ZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9zbGljZWRUb0FycmF5IiwiaSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJvIiwibWluTGVuIiwibiIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwibGVuIiwibGVuZ3RoIiwiYXJyMiIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnIiLCJTYXkiLCJSZWFjdFNheSIsInVzZU1hcmtBY3Rpdml0eUFzU3Bva2VuIiwiaG9va3MiLCJ1c2VTdHlsZU9wdGlvbnMiLCJ1c2VWb2ljZVNlbGVjdG9yIiwiU3BlYWsiLCJfcmVmIiwiX2FjdGl2aXR5JGNoYW5uZWxEYXRhIiwiYWN0aXZpdHkiLCJfdXNlU3R5bGVPcHRpb25zIiwiX3VzZVN0eWxlT3B0aW9uczIiLCJzaG93U3Bva2VuVGV4dCIsIm1hcmtBY3Rpdml0eUFzU3Bva2VuIiwic2VsZWN0Vm9pY2UiLCJtYXJrQXNTcG9rZW4iLCJ1c2VDYWxsYmFjayIsInNpbmdsZUxpbmUiLCJ1c2VNZW1vIiwidHlwZSIsIl9hY3Rpdml0eSRhdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwic3BlYWsiLCJ0ZXh0IiwiY29uY2F0IiwiZmlsdGVyIiwiX3JlZjIiLCJjb250ZW50VHlwZSIsIm1hcCIsImF0dGFjaG1lbnQiLCJfYXR0YWNobWVudCRjb250ZW50IiwiY29udGVudCIsImxpbmUiLCJqb2luIiwic3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIiwiY2hhbm5lbERhdGEiLCJjcmVhdGVFbGVtZW50IiwiRnJhZ21lbnQiLCJTYXlVdHRlcmFuY2UiLCJvbkVuZCIsIm9uRXJyb3IiLCJ1dHRlcmFuY2UiLCJ2b2ljZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInNoYXBlIiwiYXJyYXlPZiIsInN0cmluZyIsInN1YnRpdGxlIiwidGl0bGUiLCJhbnkiLCJpc1JlcXVpcmVkIiwiZGlzcGxheU5hbWUiLCJfZGVmYXVsdCIsIm1lbW8iLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiJjb21wb25lbnQ6Ly8vIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQWN0aXZpdHkvU3BlYWsudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhvb2tzIH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtYXBpJztcbmltcG9ydCB0eXBlIHsgV2ViQ2hhdEFjdGl2aXR5IH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdFNheSwgeyBTYXlVdHRlcmFuY2UgfSBmcm9tICdyZWFjdC1zYXknO1xuXG5pbXBvcnQgU2F5QWx0IGZyb20gJy4vU2F5QWx0JztcblxuLy8gVE9ETzogW1AxXSBJbnRlcm9wIGJldHdlZW4gQmFiZWwgYW5kIGVzYnVpbGQuXG5jb25zdCBTYXkgPSAnZGVmYXVsdCcgaW4gUmVhY3RTYXkgPyBSZWFjdFNheS5kZWZhdWx0IDogUmVhY3RTYXk7XG5jb25zdCB7IHVzZU1hcmtBY3Rpdml0eUFzU3Bva2VuLCB1c2VTdHlsZU9wdGlvbnMsIHVzZVZvaWNlU2VsZWN0b3IgfSA9IGhvb2tzO1xuXG4vLyBUT0RPOiBbUDRdIENvbnNpZGVyIG1vdmluZyB0aGlzIGZlYXR1cmUgaW50byBCYXNpY0FjdGl2aXR5XG4vLyAgICAgICBBbmQgaXQgaGFzIGJldHRlciBET00gcG9zaXRpb24gZm9yIHNob3dpbmcgdmlzdWFsIHNwb2tlbiB0ZXh0XG5cbnR5cGUgU3BlYWtQcm9wcyA9IHtcbiAgYWN0aXZpdHk6IFdlYkNoYXRBY3Rpdml0eTtcbn07XG5cbmNvbnN0IFNwZWFrOiBGQzxTcGVha1Byb3BzPiA9ICh7IGFjdGl2aXR5IH0pID0+IHtcbiAgY29uc3QgW3sgc2hvd1Nwb2tlblRleHQgfV0gPSB1c2VTdHlsZU9wdGlvbnMoKTtcbiAgY29uc3QgbWFya0FjdGl2aXR5QXNTcG9rZW4gPSB1c2VNYXJrQWN0aXZpdHlBc1Nwb2tlbigpO1xuICBjb25zdCBzZWxlY3RWb2ljZSA9IHVzZVZvaWNlU2VsZWN0b3IoYWN0aXZpdHkpO1xuXG4gIGNvbnN0IG1hcmtBc1Nwb2tlbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBtYXJrQWN0aXZpdHlBc1Nwb2tlbihhY3Rpdml0eSk7XG4gIH0sIFthY3Rpdml0eSwgbWFya0FjdGl2aXR5QXNTcG9rZW5dKTtcblxuICBjb25zdCBzaW5nbGVMaW5lOiBmYWxzZSB8IHN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChhY3Rpdml0eS50eXBlICE9PSAnbWVzc2FnZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF0dGFjaG1lbnRzID0gW10sIHNwZWFrLCB0ZXh0IH0gPSBhY3Rpdml0eTtcblxuICAgIHJldHVybiBbXG4gICAgICBzcGVhayB8fCB0ZXh0LFxuICAgICAgLi4uYXR0YWNobWVudHNcbiAgICAgICAgLmZpbHRlcigoeyBjb250ZW50VHlwZSB9KSA9PiBjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZScpXG4gICAgICAgIC5tYXAoYXR0YWNobWVudCA9PiBhdHRhY2htZW50Py5jb250ZW50Py5zcGVhaylcbiAgICBdXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSlcbiAgICAgIC5qb2luKCdcXHJcXG4nKTtcbiAgfSwgW2FjdGl2aXR5XSk7XG5cbiAgY29uc3Qgc3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOiBmYWxzZSB8IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSB8IHVuZGVmaW5lZCA9XG4gICAgYWN0aXZpdHkudHlwZSA9PT0gJ21lc3NhZ2UnICYmIGFjdGl2aXR5LmNoYW5uZWxEYXRhPy5zcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U7XG5cbiAgcmV0dXJuIChcbiAgICAhIWFjdGl2aXR5ICYmIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAge3NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSA/IChcbiAgICAgICAgICA8U2F5VXR0ZXJhbmNlIG9uRW5kPXttYXJrQXNTcG9rZW59IG9uRXJyb3I9e21hcmtBc1Nwb2tlbn0gdXR0ZXJhbmNlPXtzcGVlY2hTeW50aGVzaXNVdHRlcmFuY2V9IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNheSBvbkVuZD17bWFya0FzU3Bva2VufSBvbkVycm9yPXttYXJrQXNTcG9rZW59IHRleHQ9e3NpbmdsZUxpbmV9IHZvaWNlPXtzZWxlY3RWb2ljZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyEhc2hvd1Nwb2tlblRleHQgJiYgPFNheUFsdCBzcGVhaz17c2luZ2xlTGluZX0gLz59XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgIClcbiAgKTtcbn07XG5cblNwZWFrLnByb3BUeXBlcyA9IHtcbiAgLy8gUHJvcFR5cGVzIGNhbm5vdCBmdWxseSBjYXB0dXJlIFR5cGVTY3JpcHQgdHlwZXMuXG4gIC8vIEB0cy1pZ25vcmVcbiAgYWN0aXZpdHk6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXR0YWNobWVudHM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgc3BlYWs6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHN1YnRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZ1xuICAgICAgfSlcbiAgICApLFxuICAgIGNoYW5uZWxEYXRhOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgc3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOiBQcm9wVHlwZXMuYW55XG4gICAgfSksXG4gICAgc3BlYWs6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZFxufTtcblxuU3BlYWsuZGlzcGxheU5hbWUgPSAnU3BlYWtBY3Rpdml0eSc7XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oU3BlYWspO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQUQsdUJBQUEsQ0FBQUosT0FBQTtBQUVBLElBQUFNLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUE4QixTQUFBTyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLFdBQUEsV0FBQUEsV0FBQSxHQUFBRyxnQkFBQSxHQUFBRCxpQkFBQSxLQUFBRixXQUFBO0FBQUEsU0FBQUosd0JBQUFRLEdBQUEsRUFBQUosV0FBQSxTQUFBQSxXQUFBLElBQUFJLEdBQUEsSUFBQUEsR0FBQSxDQUFBQyxVQUFBLFdBQUFELEdBQUEsUUFBQUEsR0FBQSxhQUFBRSxPQUFBLENBQUFGLEdBQUEseUJBQUFBLEdBQUEsNEJBQUFHLE9BQUEsRUFBQUgsR0FBQSxVQUFBSSxLQUFBLEdBQUFULHdCQUFBLENBQUFDLFdBQUEsT0FBQVEsS0FBQSxJQUFBQSxLQUFBLENBQUFDLEdBQUEsQ0FBQUwsR0FBQSxZQUFBSSxLQUFBLENBQUFFLEdBQUEsQ0FBQU4sR0FBQSxTQUFBTyxNQUFBLFdBQUFDLHFCQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLEdBQUEsSUFBQVosR0FBQSxRQUFBWSxHQUFBLGtCQUFBSCxNQUFBLENBQUFJLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFmLEdBQUEsRUFBQVksR0FBQSxTQUFBSSxJQUFBLEdBQUFSLHFCQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQVgsR0FBQSxFQUFBWSxHQUFBLGNBQUFJLElBQUEsS0FBQUEsSUFBQSxDQUFBVixHQUFBLElBQUFVLElBQUEsQ0FBQUMsR0FBQSxLQUFBUixNQUFBLENBQUFDLGNBQUEsQ0FBQUgsTUFBQSxFQUFBSyxHQUFBLEVBQUFJLElBQUEsWUFBQVQsTUFBQSxDQUFBSyxHQUFBLElBQUFaLEdBQUEsQ0FBQVksR0FBQSxTQUFBTCxNQUFBLENBQUFKLE9BQUEsR0FBQUgsR0FBQSxNQUFBSSxLQUFBLElBQUFBLEtBQUEsQ0FBQWEsR0FBQSxDQUFBakIsR0FBQSxFQUFBTyxNQUFBLFlBQUFBLE1BQUE7QUFBQSxTQUFBakIsdUJBQUFVLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRyxPQUFBLEVBQUFILEdBQUE7QUFBQSxTQUFBa0IsbUJBQUFDLEdBQUEsV0FBQUMsa0JBQUEsQ0FBQUQsR0FBQSxLQUFBRSxnQkFBQSxDQUFBRixHQUFBLEtBQUFHLDJCQUFBLENBQUFILEdBQUEsS0FBQUksa0JBQUE7QUFBQSxTQUFBQSxtQkFBQSxjQUFBQyxTQUFBO0FBQUEsU0FBQUgsaUJBQUFJLElBQUEsZUFBQUMsTUFBQSxvQkFBQUQsSUFBQSxDQUFBQyxNQUFBLENBQUFDLFFBQUEsYUFBQUYsSUFBQSwrQkFBQUcsS0FBQSxDQUFBQyxJQUFBLENBQUFKLElBQUE7QUFBQSxTQUFBTCxtQkFBQUQsR0FBQSxRQUFBUyxLQUFBLENBQUFFLE9BQUEsQ0FBQVgsR0FBQSxVQUFBWSxpQkFBQSxDQUFBWixHQUFBO0FBQUEsU0FBQWEsZUFBQWIsR0FBQSxFQUFBYyxDQUFBLFdBQUFDLGVBQUEsQ0FBQWYsR0FBQSxLQUFBZ0IscUJBQUEsQ0FBQWhCLEdBQUEsRUFBQWMsQ0FBQSxLQUFBWCwyQkFBQSxDQUFBSCxHQUFBLEVBQUFjLENBQUEsS0FBQUcsZ0JBQUE7QUFBQSxTQUFBQSxpQkFBQSxjQUFBWixTQUFBO0FBQUEsU0FBQUYsNEJBQUFlLENBQUEsRUFBQUMsTUFBQSxTQUFBRCxDQUFBLHFCQUFBQSxDQUFBLHNCQUFBTixpQkFBQSxDQUFBTSxDQUFBLEVBQUFDLE1BQUEsT0FBQUMsQ0FBQSxHQUFBOUIsTUFBQSxDQUFBSSxTQUFBLENBQUEyQixRQUFBLENBQUF6QixJQUFBLENBQUFzQixDQUFBLEVBQUFJLEtBQUEsYUFBQUYsQ0FBQSxpQkFBQUYsQ0FBQSxDQUFBSyxXQUFBLEVBQUFILENBQUEsR0FBQUYsQ0FBQSxDQUFBSyxXQUFBLENBQUFDLElBQUEsTUFBQUosQ0FBQSxjQUFBQSxDQUFBLG1CQUFBWCxLQUFBLENBQUFDLElBQUEsQ0FBQVEsQ0FBQSxPQUFBRSxDQUFBLCtEQUFBSyxJQUFBLENBQUFMLENBQUEsVUFBQVIsaUJBQUEsQ0FBQU0sQ0FBQSxFQUFBQyxNQUFBO0FBQUEsU0FBQVAsa0JBQUFaLEdBQUEsRUFBQTBCLEdBQUEsUUFBQUEsR0FBQSxZQUFBQSxHQUFBLEdBQUExQixHQUFBLENBQUEyQixNQUFBLEVBQUFELEdBQUEsR0FBQTFCLEdBQUEsQ0FBQTJCLE1BQUEsV0FBQWIsQ0FBQSxNQUFBYyxJQUFBLE9BQUFuQixLQUFBLENBQUFpQixHQUFBLEdBQUFaLENBQUEsR0FBQVksR0FBQSxFQUFBWixDQUFBLE1BQUFjLElBQUEsQ0FBQWQsQ0FBQSxJQUFBZCxHQUFBLENBQUFjLENBQUEsWUFBQWMsSUFBQTtBQUFBLFNBQUFaLHNCQUFBaEIsR0FBQSxFQUFBYyxDQUFBLFFBQUFlLEVBQUEsR0FBQTdCLEdBQUEseUJBQUFPLE1BQUEsb0JBQUFQLEdBQUEsQ0FBQU8sTUFBQSxDQUFBQyxRQUFBLEtBQUFSLEdBQUEsb0JBQUE2QixFQUFBLHNCQUFBQyxJQUFBLFdBQUFDLEVBQUEsYUFBQUMsRUFBQSxjQUFBQyxFQUFBLEVBQUFDLEVBQUEsYUFBQUwsRUFBQSxHQUFBQSxFQUFBLENBQUFqQyxJQUFBLENBQUFJLEdBQUEsS0FBQStCLEVBQUEsSUFBQUUsRUFBQSxHQUFBSixFQUFBLENBQUFNLElBQUEsSUFBQUMsSUFBQSxHQUFBTCxFQUFBLFdBQUFELElBQUEsQ0FBQU8sSUFBQSxDQUFBSixFQUFBLENBQUFLLEtBQUEsT0FBQXhCLENBQUEsSUFBQWdCLElBQUEsQ0FBQUgsTUFBQSxLQUFBYixDQUFBLG9CQUFBeUIsR0FBQSxJQUFBUCxFQUFBLFNBQUFFLEVBQUEsR0FBQUssR0FBQSx5QkFBQVIsRUFBQSxJQUFBRixFQUFBLG9CQUFBQSxFQUFBLDhCQUFBRyxFQUFBLFFBQUFFLEVBQUEsYUFBQUosSUFBQTtBQUFBLFNBQUFmLGdCQUFBZixHQUFBLFFBQUFTLEtBQUEsQ0FBQUUsT0FBQSxDQUFBWCxHQUFBLFVBQUFBLEdBQUE7QUFFOUI7QUFDQSxJQUFNd0MsR0FBRyxHQUFHLFNBQVMsSUFBSUMsaUJBQVEsR0FBR0EsaUJBQVEsQ0FBQ3pELE9BQU8sR0FBR3lELGlCQUFRO0FBQy9ELElBQVFDLHVCQUF1QixHQUF3Q0MsNkJBQUssQ0FBcEVELHVCQUF1QjtFQUFFRSxlQUFlLEdBQXVCRCw2QkFBSyxDQUEzQ0MsZUFBZTtFQUFFQyxnQkFBZ0IsR0FBS0YsNkJBQUssQ0FBMUJFLGdCQUFnQjs7QUFFbEU7QUFDQTs7QUFNQSxJQUFNQyxLQUFxQixHQUFHLFNBQXhCQSxLQUFxQkEsQ0FBQUMsSUFBQSxFQUFxQjtFQUFBLElBQUFDLHFCQUFBO0VBQUEsSUFBZkMsUUFBUSxHQUFBRixJQUFBLENBQVJFLFFBQVE7RUFDdkMsSUFBQUMsZ0JBQUEsR0FBNkJOLGVBQWUsQ0FBQyxDQUFDO0lBQUFPLGlCQUFBLEdBQUF0QyxjQUFBLENBQUFxQyxnQkFBQTtJQUFyQ0UsY0FBYyxHQUFBRCxpQkFBQSxJQUFkQyxjQUFjO0VBQ3ZCLElBQU1DLG9CQUFvQixHQUFHWCx1QkFBdUIsQ0FBQyxDQUFDO0VBQ3RELElBQU1ZLFdBQVcsR0FBR1QsZ0JBQWdCLENBQUNJLFFBQVEsQ0FBQztFQUU5QyxJQUFNTSxZQUFZLEdBQUcsSUFBQUMsa0JBQVcsRUFBQyxZQUFNO0lBQ3JDSCxvQkFBb0IsQ0FBQ0osUUFBUSxDQUFDO0VBQ2hDLENBQUMsRUFBRSxDQUFDQSxRQUFRLEVBQUVJLG9CQUFvQixDQUFDLENBQUM7RUFFcEMsSUFBTUksVUFBMEIsR0FBRyxJQUFBQyxjQUFPLEVBQUMsWUFBTTtJQUMvQyxJQUFJVCxRQUFRLENBQUNVLElBQUksS0FBSyxTQUFTLEVBQUU7TUFDL0IsT0FBTyxLQUFLO0lBQ2Q7SUFFQSxJQUFBQyxxQkFBQSxHQUEwQ1gsUUFBUSxDQUExQ1ksV0FBVztNQUFYQSxXQUFXLEdBQUFELHFCQUFBLGNBQUcsRUFBRSxHQUFBQSxxQkFBQTtNQUFFRSxLQUFLLEdBQVdiLFFBQVEsQ0FBeEJhLEtBQUs7TUFBRUMsSUFBSSxHQUFLZCxRQUFRLENBQWpCYyxJQUFJO0lBRXJDLE9BQU8sQ0FDTEQsS0FBSyxJQUFJQyxJQUFJLEVBQUFDLE1BQUEsQ0FBQWpFLGtCQUFBLENBQ1Y4RCxXQUFXLENBQ1hJLE1BQU0sQ0FBQyxVQUFBQyxLQUFBO01BQUEsSUFBR0MsV0FBVyxHQUFBRCxLQUFBLENBQVhDLFdBQVc7TUFBQSxPQUFPQSxXQUFXLEtBQUsseUNBQXlDO0lBQUEsRUFBQyxDQUN0RkMsR0FBRyxDQUFDLFVBQUFDLFVBQVU7TUFBQSxJQUFBQyxtQkFBQTtNQUFBLE9BQUlELFVBQVUsYUFBVkEsVUFBVSx3QkFBQUMsbUJBQUEsR0FBVkQsVUFBVSxDQUFFRSxPQUFPLGNBQUFELG1CQUFBLHVCQUFuQkEsbUJBQUEsQ0FBcUJSLEtBQUs7SUFBQSxFQUFDLEdBRS9DRyxNQUFNLENBQUMsVUFBQU8sSUFBSTtNQUFBLE9BQUlBLElBQUk7SUFBQSxFQUFDLENBQ3BCQyxJQUFJLENBQUMsTUFBTSxDQUFDO0VBQ2pCLENBQUMsRUFBRSxDQUFDeEIsUUFBUSxDQUFDLENBQUM7RUFFZCxJQUFNeUIsd0JBQXNFLEdBQzFFekIsUUFBUSxDQUFDVSxJQUFJLEtBQUssU0FBUyxNQUFBWCxxQkFBQSxHQUFJQyxRQUFRLENBQUMwQixXQUFXLGNBQUEzQixxQkFBQSx1QkFBcEJBLHFCQUFBLENBQXNCMEIsd0JBQXdCO0VBRS9FLE9BQ0UsQ0FBQyxDQUFDekIsUUFBUSxpQkFDUjdFLE1BQUEsQ0FBQVksT0FBQSxDQUFBNEYsYUFBQSxDQUFDeEcsTUFBQSxDQUFBWSxPQUFLLENBQUM2RixRQUFRLFFBQ1pILHdCQUF3QixnQkFDdkJ0RyxNQUFBLENBQUFZLE9BQUEsQ0FBQTRGLGFBQUEsQ0FBQ3RHLFNBQUEsQ0FBQXdHLFlBQVk7SUFBQ0MsS0FBSyxFQUFFeEIsWUFBYTtJQUFDeUIsT0FBTyxFQUFFekIsWUFBYTtJQUFDMEIsU0FBUyxFQUFFUDtFQUF5QixDQUFFLENBQUMsZ0JBRWpHdEcsTUFBQSxDQUFBWSxPQUFBLENBQUE0RixhQUFBLENBQUNwQyxHQUFHO0lBQUN1QyxLQUFLLEVBQUV4QixZQUFhO0lBQUN5QixPQUFPLEVBQUV6QixZQUFhO0lBQUNRLElBQUksRUFBRU4sVUFBVztJQUFDeUIsS0FBSyxFQUFFNUI7RUFBWSxDQUFFLENBQ3pGLEVBQ0EsQ0FBQyxDQUFDRixjQUFjLGlCQUFJaEYsTUFBQSxDQUFBWSxPQUFBLENBQUE0RixhQUFBLENBQUNyRyxPQUFBLENBQUFTLE9BQU07SUFBQzhFLEtBQUssRUFBRUw7RUFBVyxDQUFFLENBQ25DLENBQ2pCO0FBRUwsQ0FBQztBQUVEWCxLQUFLLENBQUNxQyxTQUFTLEdBQUc7RUFDaEI7RUFDQTtFQUNBbEMsUUFBUSxFQUFFbUMsa0JBQVMsQ0FBQ0MsS0FBSyxDQUFDO0lBQ3hCeEIsV0FBVyxFQUFFdUIsa0JBQVMsQ0FBQ0UsT0FBTyxDQUM1QkYsa0JBQVMsQ0FBQ0MsS0FBSyxDQUFDO01BQ2R2QixLQUFLLEVBQUVzQixrQkFBUyxDQUFDRyxNQUFNO01BQ3ZCQyxRQUFRLEVBQUVKLGtCQUFTLENBQUNHLE1BQU07TUFDMUJ4QixJQUFJLEVBQUVxQixrQkFBUyxDQUFDRyxNQUFNO01BQ3RCRSxLQUFLLEVBQUVMLGtCQUFTLENBQUNHO0lBQ25CLENBQUMsQ0FDSCxDQUFDO0lBQ0RaLFdBQVcsRUFBRVMsa0JBQVMsQ0FBQ0MsS0FBSyxDQUFDO01BQzNCWCx3QkFBd0IsRUFBRVUsa0JBQVMsQ0FBQ007SUFDdEMsQ0FBQyxDQUFDO0lBQ0Y1QixLQUFLLEVBQUVzQixrQkFBUyxDQUFDRyxNQUFNO0lBQ3ZCeEIsSUFBSSxFQUFFcUIsa0JBQVMsQ0FBQ0csTUFBTTtJQUN0QjVCLElBQUksRUFBRXlCLGtCQUFTLENBQUNHLE1BQU0sQ0FBQ0k7RUFDekIsQ0FBQyxDQUFDLENBQUNBO0FBQ0wsQ0FBQztBQUVEN0MsS0FBSyxDQUFDOEMsV0FBVyxHQUFHLGVBQWU7QUFBQyxJQUFBQyxRQUFBLGdCQUVyQixJQUFBQyxXQUFJLEVBQUNoRCxLQUFLLENBQUM7QUFBQWlELE9BQUEsQ0FBQS9HLE9BQUEsR0FBQTZHLFFBQUEifQ==