UNPKG

tb-react-live-chat-loader

Version:

Implement live chat in your react app without taking a performance hit.

229 lines (208 loc) 33.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _useChat = _interopRequireDefault(require("../../hooks/useChat")); var _useWindowHeight = _interopRequireDefault(require("../../hooks/useWindowHeight")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const styles = { wrapper: { borderRadius: '55px', height: '60px', width: '60px', bottom: '40px', boxShadow: 'rgba(0, 0, 0, 0.1) 0px 4px 7px', position: 'fixed', right: '40px', top: 'auto', borderStyle: 'none', transition: 'box-shadow 250ms ease 0s, opacity 0.4s ease 0s, transform 0.2s ease-in-out 0s' }, button: { appearance: 'none', alignItems: 'center', bottom: '0px', display: 'block', justifyContent: 'center', position: 'relative', userSelect: 'none', zIndex: 999, color: 'white', cursor: 'pointer', minWidth: '60px', WebkitTapHighlightColor: 'transparent', height: '60px', lineHeight: '60px', borderRadius: '120px', margin: '0px', outline: 'none', padding: '0px', borderStyle: 'none', transition: 'background-color 200ms linear 0s, transform 200ms linear 0s' }, icon: { alignItems: 'center', color: 'white', cursor: 'pointer', display: 'flex', height: '100%', WebkitBoxPack: 'center', justifyContent: 'center', pointerEvents: 'none', position: 'absolute', textIndent: '-99999px', top: '0px', width: '60px', willChange: 'opacity, transform', left: 'auto', right: '0px', opacity: '1 !important', transition: 'opacity 80ms linear 0s, transform 160ms linear 0s' }, close: { WebkitBoxAlign: 'center', alignItems: 'center', color: 'white', cursor: 'pointer', display: 'flex', height: '100%', WebkitBoxPack: 'center', justifyContent: 'center', pointerEvents: 'none', position: 'absolute', textIndent: '-99999px', top: '0px', width: '60px', willChange: 'opacity, transform', left: 'auto', right: '0px', transition: 'opacity 80ms linear 0s, transform 160ms linear 0s' } }; const getIcon = icon => { switch (icon) { case 'message': return /*#__PURE__*/_react.default.createElement("svg", { width: "24", height: "22", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/_react.default.createElement("path", { d: "M20.347 20.871l-.003-.05c0 .017.001.034.003.05zm-.243-4.278a2 2 0 0 1 .513-1.455c1.11-1.226 1.383-2.212 1.383-4.74C22 5.782 18.046 2 13.125 2h-2.25C5.954 2 2 5.78 2 10.399c0 4.675 4.01 8.626 8.875 8.626h2.25c.834 0 1.606-.207 3.212-.798a2 2 0 0 1 1.575.083l2.355 1.161-.163-2.878zM10.875 0h2.25C19.13 0 24 4.656 24 10.399c0 2.6-.25 4.257-1.9 6.08l.243 4.279c.072.845-.807 1.471-1.633 1.162l-3.682-1.816c-1.212.446-2.527.921-3.903.921h-2.25C4.869 21.025 0 16.142 0 10.4 0 4.656 4.869 0 10.875 0z", fill: "#FFF" })); case 'antenna': return /*#__PURE__*/_react.default.createElement("svg", { width: "28", height: "26", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/_react.default.createElement("path", { d: "M14.002 12a3.01 3.01 0 0 0-3.015 3c0 1.654 1.353 3 3.015 3a3.01 3.01 0 0 0 3.014-3c0-1.654-1.353-3-3.014-3m-1.005 7.9c-2.29-.465-4.019-2.485-4.019-4.9 0-2.757 2.254-5 5.024-5s5.023 2.243 5.023 5c0 2.415-1.729 4.435-4.019 4.9V25c0 .552-.45 1-1.004 1a1.003 1.003 0 0 1-1.005-1v-5.1zm9.36-7.345c-.393 0-.768-.232-.928-.617A8.019 8.019 0 0 0 14.001 7a8.018 8.018 0 0 0-7.426 4.936c-.213.51-.8.753-1.314.54a1 1 0 0 1-.543-1.307A10.024 10.024 0 0 1 14 5c4.078 0 7.722 2.422 9.284 6.17a.998.998 0 0 1-.927 1.385M1.005 10.637a1.005 1.005 0 0 1-.928-1.384C2.422 3.632 7.887 0 14.001 0c6.111 0 11.576 3.629 13.922 9.246a.998.998 0 0 1-.542 1.307 1.006 1.006 0 0 1-1.313-.54C24.033 5.146 19.298 2 14.001 2 8.703 2 3.965 5.148 1.933 10.02c-.16.385-.535.617-.928.617", fill: "#FFF", fillRule: "evenodd" })); case 'search': return /*#__PURE__*/_react.default.createElement("svg", { width: "23", height: "24", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/_react.default.createElement("path", { d: "M15.79 15.46C17.184 13.982 18 12.07 18 10a8 8 0 1 0-8 8c1.676 0 3.24-.544 4.578-1.488l.659-.465.554-.588zm6.41 6.326a.999.999 0 0 1-.002 1.412.999.999 0 0 1-1.412.002l-5.095-5.094C14.064 19.256 12.142 19.997 10 20c-5.515.008-10.008-4.485-10-10C.008 4.485 4.485.008 10 0c5.515-.008 10.008 4.485 10 10-.004 2.652-1.105 5-2.794 6.791l4.994 4.995zM14 9c0-1.654-1.346-3-3-3a1 1 0 0 1 0-2c2.757 0 5 2.243 5 5a1 1 0 0 1-2 0z", fill: "#FFF" })); case 'question': return /*#__PURE__*/_react.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "52", height: "52" }, /*#__PURE__*/_react.default.createElement("path", { id: "a", d: "M27.031 32h-2.488v-2.046c0-.635.077-1.21.232-1.72.154-.513.366-.972.639-1.381.272-.41.58-.779.923-1.109.345-.328.694-.652 1.049-.97l.995-.854a6.432 6.432 0 0 0 1.475-1.568c.39-.59.585-1.329.585-2.216 0-.635-.117-1.203-.355-1.703a3.7 3.7 0 0 0-.96-1.263 4.305 4.305 0 0 0-1.401-.783A5.324 5.324 0 0 0 26 16.114c-1.28 0-2.316.375-3.11 1.124-.795.75-1.286 1.705-1.475 2.865L19 19.693c.356-1.772 1.166-3.165 2.434-4.176C22.701 14.507 24.26 14 26.107 14c.947 0 1.842.131 2.682.392.84.262 1.57.648 2.185 1.16a5.652 5.652 0 0 1 1.475 1.892c.368.75.551 1.602.551 2.556 0 .728-.083 1.364-.248 1.909a5.315 5.315 0 0 1-.693 1.467 6.276 6.276 0 0 1-1.048 1.176c-.403.351-.83.71-1.28 1.073-.498.387-.918.738-1.26 1.057a4.698 4.698 0 0 0-.836 1.006 3.847 3.847 0 0 0-.462 1.176c-.095.432-.142.955-.142 1.568V32zM26 37a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z", fill: "#FFF", fillRule: "evenodd" })); case 'beacon': return /*#__PURE__*/_react.default.createElement("svg", { width: "30", height: "30", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/_react.default.createElement("path", { d: "M26.244 21.523l-4.356-4.355a7.192 7.192 0 0 0 0-4.345l4.356-4.355a12.98 12.98 0 0 1 0 13.055zm-.4 3.215l-1.1 1.1a.557.557 0 0 1-.786 0l-4.884-4.884a7.27 7.27 0 0 0 1.885-1.886l4.885 4.885a.55.55 0 0 1 0 .785zM8.471 26.236l4.355-4.354a7.197 7.197 0 0 0 4.347 0l4.355 4.354a12.983 12.983 0 0 1-13.057 0zm-2.43-.398a.556.556 0 0 1-.786 0l-1.1-1.1a.556.556 0 0 1 0-.786l4.884-4.884a7.275 7.275 0 0 0 1.887 1.886L6.04 25.838zm-2.285-4.315a12.98 12.98 0 0 1 0-13.055l4.355 4.354a7.192 7.192 0 0 0 0 4.347l-4.355 4.354zm.399-16.27l1.1-1.1a.554.554 0 0 1 .785 0l4.886 4.884a7.27 7.27 0 0 0-1.887 1.885L4.155 6.039a.556.556 0 0 1 0-.786zm17.373-1.5l-4.355 4.355a7.229 7.229 0 0 0-4.347 0L8.471 3.754a12.99 12.99 0 0 1 13.057 0zm-1.305 11.242A5.228 5.228 0 0 1 15 20.217a5.228 5.228 0 0 1-5.224-5.222A5.228 5.228 0 0 1 15 9.773a5.23 5.23 0 0 1 5.223 5.222zm3.735-10.842a.556.556 0 0 1 .786 0l1.1 1.1a.553.553 0 0 1 0 .786l-4.884 4.883a7.302 7.302 0 0 0-1.886-1.885l4.884-4.884zm3.688 2.786c.23-.39.362-.83.362-1.293 0-.683-.266-1.325-.75-1.807l-1.098-1.1a2.555 2.555 0 0 0-3.101-.387 14.985 14.985 0 0 0-16.125.004c-.973-.548-2.284-.426-3.093.383l-1.101 1.1a2.533 2.533 0 0 0-.387 3.1 14.97 14.97 0 0 0 0 16.114 2.553 2.553 0 0 0 .387 3.099l1.1 1.1A2.549 2.549 0 0 0 5.649 28a2.55 2.55 0 0 0 1.293-.361A14.961 14.961 0 0 0 15 30.002a14.97 14.97 0 0 0 8.059-2.363c.398.234.844.36 1.292.36.655 0 1.31-.25 1.809-.747l1.099-1.1a2.531 2.531 0 0 0 .387-3.1 14.963 14.963 0 0 0 0-16.113z", fill: "#FFF", fillRule: "evenodd" })); case 'close': default: return /*#__PURE__*/_react.default.createElement("svg", { width: 14, height: 14, xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/_react.default.createElement("path", { d: "M13.707.293a.999.999 0 0 0-1.414 0L7 5.586 1.707.293A.999.999 0 1 0 .293 1.707L5.586 7 .293 12.293a.999.999 0 1 0 1.414 1.414L7 8.414l5.293 5.293a.997.997 0 0 0 1.414 0 .999.999 0 0 0 0-1.414L8.414 7l5.293-5.293a.999.999 0 0 0 0-1.414", fill: "#FFF", fillRule: "evenodd" })); } }; const HelpScout = ({ color = '#976ad4', icon = 'beacon', zIndex = '1050', horizontalPosition = 'left' }) => { const [state, loadChat] = (0, _useChat.default)({ loadWhenIdle: true }); const windowHeight = (0, _useWindowHeight.default)(); const [positionStyles, setPositionStyles] = (0, _react.useState)({ opacity: 0, visibility: 'hidden' }); (0, _react.useEffect)(() => { setPositionStyles({ bottom: windowHeight < 740 ? '10px' : '40px', right: horizontalPosition === 'left' ? 'auto' : windowHeight < 740 ? '20px' : '40px', left: horizontalPosition === 'right' ? 'auto' : windowHeight < 740 ? '20px' : '40px' }); }, [windowHeight]); if (state === 'complete') { return null; } return /*#__PURE__*/_react.default.createElement("div", { style: _objectSpread(_objectSpread(_objectSpread({}, styles.wrapper), positionStyles), {}, { zIndex: Number(zIndex) }) }, /*#__PURE__*/_react.default.createElement("button", { role: "button", "aria-label": "Load Chat", "aria-busy": "true", "aria-live": "polite", onClick: () => loadChat({ open: true }), onMouseEnter: () => loadChat({ open: false }), style: _objectSpread(_objectSpread({}, styles.button), {}, { backgroundColor: color }) }, /*#__PURE__*/_react.default.createElement("span", { style: _objectSpread(_objectSpread({}, styles.icon), {}, { transform: state === 'initial' ? 'rotate(0deg) scale(1)' : 'rotate(30deg) scale(0)' }) }, getIcon(icon)), /*#__PURE__*/_react.default.createElement("span", { style: _objectSpread(_objectSpread({}, styles.close), {}, { opacity: state === 'initial' ? 0 : 1, transform: state === 'initial' ? 'rotate(30deg) scale(0)' : 'rotate(0deg) scale(1)' }) }, getIcon('close')))); }; var _default = HelpScout; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL0hlbHBTY291dC9pbmRleC50c3giXSwibmFtZXMiOlsic3R5bGVzIiwid3JhcHBlciIsImJvcmRlclJhZGl1cyIsImhlaWdodCIsIndpZHRoIiwiYm90dG9tIiwiYm94U2hhZG93IiwicG9zaXRpb24iLCJyaWdodCIsInRvcCIsImJvcmRlclN0eWxlIiwidHJhbnNpdGlvbiIsImJ1dHRvbiIsImFwcGVhcmFuY2UiLCJhbGlnbkl0ZW1zIiwiZGlzcGxheSIsImp1c3RpZnlDb250ZW50IiwidXNlclNlbGVjdCIsInpJbmRleCIsImNvbG9yIiwiY3Vyc29yIiwibWluV2lkdGgiLCJXZWJraXRUYXBIaWdobGlnaHRDb2xvciIsImxpbmVIZWlnaHQiLCJtYXJnaW4iLCJvdXRsaW5lIiwicGFkZGluZyIsImljb24iLCJXZWJraXRCb3hQYWNrIiwicG9pbnRlckV2ZW50cyIsInRleHRJbmRlbnQiLCJ3aWxsQ2hhbmdlIiwibGVmdCIsIm9wYWNpdHkiLCJjbG9zZSIsIldlYmtpdEJveEFsaWduIiwiZ2V0SWNvbiIsIkhlbHBTY291dCIsImhvcml6b250YWxQb3NpdGlvbiIsInN0YXRlIiwibG9hZENoYXQiLCJsb2FkV2hlbklkbGUiLCJ3aW5kb3dIZWlnaHQiLCJwb3NpdGlvblN0eWxlcyIsInNldFBvc2l0aW9uU3R5bGVzIiwidmlzaWJpbGl0eSIsIk51bWJlciIsIm9wZW4iLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0cmFuc2Zvcm0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxNQUtMLEdBQUc7QUFDRkMsRUFBQUEsT0FBTyxFQUFFO0FBQ1BDLElBQUFBLFlBQVksRUFBRSxNQURQO0FBRVBDLElBQUFBLE1BQU0sRUFBRSxNQUZEO0FBR1BDLElBQUFBLEtBQUssRUFBRSxNQUhBO0FBSVBDLElBQUFBLE1BQU0sRUFBRSxNQUpEO0FBS1BDLElBQUFBLFNBQVMsRUFB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QU8sQ0FBQyxPQUFELENBVlYsQ0F2QkYsQ0FQRixDQURGO0FBOENELENBakZEOztlQW1GZUMsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDU1NQcm9wZXJ0aWVzLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB1c2VDaGF0IGZyb20gJy4uLy4uL2hvb2tzL3VzZUNoYXQnXG5pbXBvcnQgdXNlV2luZG93SGVpZ2h0IGZyb20gJy4uLy4uL2hvb2tzL3VzZVdpbmRvd0hlaWdodCdcblxuY29uc3Qgc3R5bGVzOiB7XG4gIHdyYXBwZXI6IENTU1Byb3BlcnRpZXNcbiAgYnV0dG9uOiBDU1NQcm9wZXJ0aWVzXG4gIGljb246IENTU1Byb3BlcnRpZXNcbiAgY2xvc2U6IENTU1Byb3BlcnRpZXNcbn0gPSB7XG4gIHdyYXBwZXI6IHtcbiAgICBib3JkZXJSYWRpdXM6ICc1NXB4JyxcbiAgICBoZWlnaHQ6ICc2MHB4JyxcbiAgICB3aWR0aDogJzYwcHgnLFxuICAgIGJvdHRvbTogJzQwcHgnLFxuICAgIGJveFNoYWRvdzogJ3JnYmEoMCwgMCwgMCwgMC4xKSAwcHggNHB4IDdweCcsXG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgcmlnaHQ6ICc0MHB4JyxcbiAgICB0b3A6ICdhdXRvJyxcbiAgICBib3JkZXJTdHlsZTogJ25vbmUnLFxuICAgIHRyYW5zaXRpb246XG4gICAgICAnYm94LXNoYWRvdyAyNTBtcyBlYXNlIDBzLCBvcGFjaXR5IDAuNHMgZWFzZSAwcywgdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQgMHMnXG4gIH0sXG4gIGJ1dHRvbjoge1xuICAgIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBib3R0b206ICcwcHgnLFxuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB6SW5kZXg6IDk5OSxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBtaW5XaWR0aDogJzYwcHgnLFxuICAgIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGhlaWdodDogJzYwcHgnLFxuICAgIGxpbmVIZWlnaHQ6ICc2MHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICcxMjBweCcsXG4gICAgbWFyZ2luOiAnMHB4JyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgcGFkZGluZzogJzBweCcsXG4gICAgYm9yZGVyU3R5bGU6ICdub25lJyxcbiAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciAyMDBtcyBsaW5lYXIgMHMsIHRyYW5zZm9ybSAyMDBtcyBsaW5lYXIgMHMnXG4gIH0sXG4gIGljb246IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgV2Via2l0Qm94UGFjazogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0ZXh0SW5kZW50OiAnLTk5OTk5cHgnLFxuICAgIHRvcDogJzBweCcsXG4gICAgd2lkdGg6ICc2MHB4JyxcbiAgICB3aWxsQ2hhbmdlOiAnb3BhY2l0eSwgdHJhbnNmb3JtJyxcbiAgICBsZWZ0OiAnYXV0bycsXG4gICAgcmlnaHQ6ICcwcHgnLFxuICAgIG9wYWNpdHk6ICcxICFpbXBvcnRhbnQnLFxuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDgwbXMgbGluZWFyIDBzLCB0cmFuc2Zvcm0gMTYwbXMgbGluZWFyIDBzJ1xuICB9LFxuICBjbG9zZToge1xuICAgIFdlYmtpdEJveEFsaWduOiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgV2Via2l0Qm94UGFjazogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0ZXh0SW5kZW50OiAnLTk5OTk5cHgnLFxuICAgIHRvcDogJzBweCcsXG4gICAgd2lkdGg6ICc2MHB4JyxcbiAgICB3aWxsQ2hhbmdlOiAnb3BhY2l0eSwgdHJhbnNmb3JtJyxcbiAgICBsZWZ0OiAnYXV0bycsXG4gICAgcmlnaHQ6ICcwcHgnLFxuICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDgwbXMgbGluZWFyIDBzLCB0cmFuc2Zvcm0gMTYwbXMgbGluZWFyIDBzJ1xuICB9XG59XG5cbnR5cGUgSGVscFNjb3V0SWNvbiA9XG4gIHwgJ21lc3NhZ2UnXG4gIHwgJ2FudGVubmEnXG4gIHwgJ3NlYXJjaCdcbiAgfCAncXVlc3Rpb24nXG4gIHwgJ2JlYWNvbidcbiAgfCAnY2xvc2UnXG5cbmNvbnN0IGdldEljb24gPSAoaWNvbjogSGVscFNjb3V0SWNvbik6IEpTWC5FbGVtZW50ID0+IHtcbiAgc3dpdGNoIChpY29uKSB7XG4gICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk0yMC4zNDcgMjAuODcxbC0uMDAzLS4wNWMwIC4wMTcuMDAxLjAzNC4wMDMuMDV6bS0uMjQzLTQuMjc4YTIgMiAwIDAgMSAuNTEzLTEuNDU1YzEuMTEtMS4yMjYgMS4zODMtMi4yMTIgMS4zODMtNC43NEMyMiA1Ljc4MiAxOC4wNDYgMiAxMy4xMjUgMmgtMi4yNUM1Ljk1NCAyIDIgNS43OCAyIDEwLjM5OWMwIDQuNjc1IDQuMDEgOC42MjYgOC44NzUgOC42MjZoMi4yNWMuODM0IDAgMS42MDYtLjIwNyAzLjIxMi0uNzk4YTIgMiAwIDAgMSAxLjU3NS4wODNsMi4zNTUgMS4xNjEtLjE2My0yLjg3OHpNMTAuODc1IDBoMi4yNUMxOS4xMyAwIDI0IDQuNjU2IDI0IDEwLjM5OWMwIDIuNi0uMjUgNC4yNTctMS45IDYuMDhsLjI0MyA0LjI3OWMuMDcyLjg0NS0uODA3IDEuNDcxLTEuNjMzIDEuMTYybC0zLjY4Mi0xLjgxNmMtMS4yMTIuNDQ2LTIuNTI3LjkyMS0zLjkwMy45MjFoLTIuMjVDNC44NjkgMjEuMDI1IDAgMTYuMTQyIDAgMTAuNCAwIDQuNjU2IDQuODY5IDAgMTAuODc1IDB6XCJcbiAgICAgICAgICAgIGZpbGw9XCIjRkZGXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIClcbiAgICBjYXNlICdhbnRlbm5hJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyOFwiIGhlaWdodD1cIjI2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTE0LjAwMiAxMmEzLjAxIDMuMDEgMCAwIDAtMy4wMTUgM2MwIDEuNjU0IDEuMzUzIDMgMy4wMTUgM2EzLjAxIDMuMDEgMCAwIDAgMy4wMTQtM2MwLTEuNjU0LTEuMzUzLTMtMy4wMTQtM20tMS4wMDUgNy45Yy0yLjI5LS40NjUtNC4wMTktMi40ODUtNC4wMTktNC45IDAtMi43NTcgMi4yNTQtNSA1LjAyNC01czUuMDIzIDIuMjQzIDUuMDIzIDVjMCAyLjQxNS0xLjcyOSA0LjQzNS00LjAxOSA0LjlWMjVjMCAuNTUyLS40NSAxLTEuMDA0IDFhMS4wMDMgMS4wMDMgMCAwIDEtMS4wMDUtMXYtNS4xem05LjM2LTcuMzQ1Yy0uMzkzIDAtLjc2OC0uMjMyLS45MjgtLjYxN0E4LjAxOSA4LjAxOSAwIDAgMCAxNC4wMDEgN2E4LjAxOCA4LjAxOCAwIDAgMC03LjQyNiA0LjkzNmMtLjIxMy41MS0uOC43NTMtMS4zMTQuNTRhMSAxIDAgMCAxLS41NDMtMS4zMDdBMTAuMDI0IDEwLjAyNCAwIDAgMSAxNCA1YzQuMDc4IDAgNy43MjIgMi40MjIgOS4yODQgNi4xN2EuOTk4Ljk5OCAwIDAgMS0uOTI3IDEuMzg1TTEuMDA1IDEwLjYzN2ExLjAwNSAxLjAwNSAwIDAgMS0uOTI4LTEuMzg0QzIuNDIyIDMuNjMyIDcuODg3IDAgMTQuMDAxIDBjNi4xMTEgMCAxMS41NzYgMy42MjkgMTMuOTIyIDkuMjQ2YS45OTguOTk4IDAgMCAxLS41NDIgMS4zMDcgMS4wMDYgMS4wMDYgMCAwIDEtMS4zMTMtLjU0QzI0LjAzMyA1LjE0NiAxOS4yOTggMiAxNC4wMDEgMiA4LjcwMyAyIDMuOTY1IDUuMTQ4IDEuOTMzIDEwLjAyYy0uMTYuMzg1LS41MzUuNjE3LS45MjguNjE3XCJcbiAgICAgICAgICAgIGZpbGw9XCIjRkZGXCJcbiAgICAgICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICApXG4gICAgY2FzZSAnc2VhcmNoJzpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyM1wiIGhlaWdodD1cIjI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTE1Ljc5IDE1LjQ2QzE3LjE4NCAxMy45ODIgMTggMTIuMDcgMTggMTBhOCA4IDAgMSAwLTggOGMxLjY3NiAwIDMuMjQtLjU0NCA0LjU3OC0xLjQ4OGwuNjU5LS40NjUuNTU0LS41ODh6bTYuNDEgNi4zMjZhLjk5OS45OTkgMCAwIDEtLjAwMiAxLjQxMi45OTkuOTk5IDAgMCAxLTEuNDEyLjAwMmwtNS4wOTUtNS4wOTRDMTQuMDY0IDE5LjI1NiAxMi4xNDIgMTkuOTk3IDEwIDIwYy01LjUxNS4wMDgtMTAuMDA4LTQuNDg1LTEwLTEwQy4wMDggNC40ODUgNC40ODUuMDA4IDEwIDBjNS41MTUtLjAwOCAxMC4wMDggNC40ODUgMTAgMTAtLjAwNCAyLjY1Mi0xLjEwNSA1LTIuNzk0IDYuNzkxbDQuOTk0IDQuOTk1ek0xNCA5YzAtMS42NTQtMS4zNDYtMy0zLTNhMSAxIDAgMCAxIDAtMmMyLjc1NyAwIDUgMi4yNDMgNSA1YTEgMSAwIDAgMS0yIDB6XCJcbiAgICAgICAgICAgIGZpbGw9XCIjRkZGXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIClcbiAgICBjYXNlICdxdWVzdGlvbic6XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjUyXCIgaGVpZ2h0PVwiNTJcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgaWQ9XCJhXCJcbiAgICAgICAgICAgIGQ9XCJNMjcuMDMxIDMyaC0yLjQ4OHYtMi4wNDZjMC0uNjM1LjA3Ny0xLjIxLjIzMi0xLjcyLjE1NC0uNTEzLjM2Ni0uOTcyLjYzOS0xLjM4MS4yNzItLjQxLjU4LS43NzkuOTIzLTEuMTA5LjM0NS0uMzI4LjY5NC0uNjUyIDEuMDQ5LS45N2wuOTk1LS44NTRhNi40MzIgNi40MzIgMCAwIDAgMS40NzUtMS41NjhjLjM5LS41OS41ODUtMS4zMjkuNTg1LTIuMjE2IDAtLjYzNS0uMTE3LTEuMjAzLS4zNTUtMS43MDNhMy43IDMuNyAwIDAgMC0uOTYtMS4yNjMgNC4zMDUgNC4zMDUgMCAwIDAtMS40MDEtLjc4M0E1LjMyNCA1LjMyNCAwIDAgMCAyNiAxNi4xMTRjLTEuMjggMC0yLjMxNi4zNzUtMy4xMSAxLjEyNC0uNzk1Ljc1LTEuMjg2IDEuNzA1LTEuNDc1IDIuODY1TDE5IDE5LjY5M2MuMzU2LTEuNzcyIDEuMTY2LTMuMTY1IDIuNDM0LTQuMTc2QzIyLjcwMSAxNC41MDcgMjQuMjYgMTQgMjYuMTA3IDE0Yy45NDcgMCAxLjg0Mi4xMzEgMi42ODIuMzkyLjg0LjI2MiAxLjU3LjY0OCAyLjE4NSAxLjE2YTUuNjUyIDUuNjUyIDAgMCAxIDEuNDc1IDEuODkyYy4zNjguNzUuNTUxIDEuNjAyLjU1MSAyLjU1NiAwIC43MjgtLjA4MyAxLjM2NC0uMjQ4IDEuOTA5YTUuMzE1IDUuMzE1IDAgMCAxLS42OTMgMS40NjcgNi4yNzYgNi4yNzYgMCAwIDEtMS4wNDggMS4xNzZjLS40MDMuMzUxLS44My43MS0xLjI4IDEuMDczLS40OTguMzg3LS45MTguNzM4LTEuMjYgMS4wNTdhNC42OTggNC42OTggMCAwIDAtLjgzNiAxLjAwNiAzLjg0NyAzLjg0NyAwIDAgMC0uNDYyIDEuMTc2Yy0uMDk1LjQzMi0uMTQyLjk1NS0uMTQyIDEuNTY4VjMyek0yNiAzN2ExLjUgMS41IDAgMSAxIDAtMyAxLjUgMS41IDAgMCAxIDAgM3pcIlxuICAgICAgICAgICAgZmlsbD1cIiNGRkZcIlxuICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIClcbiAgICBjYXNlICdiZWFjb24nOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMjYuMjQ0IDIxLjUyM2wtNC4zNTYtNC4zNTVhNy4xOTIgNy4xOTIgMCAwIDAgMC00LjM0NWw0LjM1Ni00LjM1NWExMi45OCAxMi45OCAwIDAgMSAwIDEzLjA1NXptLS40IDMuMjE1bC0xLjEgMS4xYS41NTcuNTU3IDAgMCAxLS43ODYgMGwtNC44ODQtNC44ODRhNy4yNyA3LjI3IDAgMCAwIDEuODg1LTEuODg2bDQuODg1IDQuODg1YS41NS41NSAwIDAgMSAwIC43ODV6TTguNDcxIDI2LjIzNmw0LjM1NS00LjM1NGE3LjE5NyA3LjE5NyAwIDAgMCA0LjM0NyAwbDQuMzU1IDQuMzU0YTEyLjk4MyAxMi45ODMgMCAwIDEtMTMuMDU3IDB6bS0yLjQzLS4zOThhLjU1Ni41NTYgMCAwIDEtLjc4NiAwbC0xLjEtMS4xYS41NTYuNTU2IDAgMCAxIDAtLjc4Nmw0Ljg4NC00Ljg4NGE3LjI3NSA3LjI3NSAwIDAgMCAxLjg4NyAxLjg4Nkw2LjA0IDI1LjgzOHptLTIuMjg1LTQuMzE1YTEyLjk4IDEyLjk4IDAgMCAxIDAtMTMuMDU1bDQuMzU1IDQuMzU0YTcuMTkyIDcuMTkyIDAgMCAwIDAgNC4zNDdsLTQuMzU1IDQuMzU0em0uMzk5LTE2LjI3bDEuMS0xLjFhLjU1NC41NTQgMCAwIDEgLjc4NSAwbDQuODg2IDQuODg0YTcuMjcgNy4yNyAwIDAgMC0xLjg4NyAxLjg4NUw0LjE1NSA2LjAzOWEuNTU2LjU1NiAwIDAgMSAwLS43ODZ6bTE3LjM3My0xLjVsLTQuMzU1IDQuMzU1YTcuMjI5IDcuMjI5IDAgMCAwLTQuMzQ3IDBMOC40NzEgMy43NTRhMTIuOTkgMTIuOTkgMCAwIDEgMTMuMDU3IDB6bS0xLjMwNSAxMS4yNDJBNS4yMjggNS4yMjggMCAwIDEgMTUgMjAuMjE3YTUuMjI4IDUuMjI4IDAgMCAxLTUuMjI0LTUuMjIyQTUuMjI4IDUuMjI4IDAgMCAxIDE1IDkuNzczYTUuMjMgNS4yMyAwIDAgMSA1LjIyMyA1LjIyMnptMy43MzUtMTAuODQyYS41NTYuNTU2IDAgMCAxIC43ODYgMGwxLjEgMS4xYS41NTMuNTUzIDAgMCAxIDAgLjc4NmwtNC44ODQgNC44ODNhNy4zMDIgNy4zMDIgMCAwIDAtMS44ODYtMS44ODVsNC44ODQtNC44ODR6bTMuNjg4IDIuNzg2Yy4yMy0uMzkuMzYyLS44My4zNjItMS4yOTMgMC0uNjgzLS4yNjYtMS4zMjUtLjc1LTEuODA3bC0xLjA5OC0xLjFhMi41NTUgMi41NTUgMCAwIDAtMy4xMDEtLjM4NyAxNC45ODUgMTQuOTg1IDAgMCAwLTE2LjEyNS4wMDRjLS45NzMtLjU0OC0yLjI4NC0uNDI2LTMuMDkzLjM4M2wtMS4xMDEgMS4xYTIuNTMzIDIuNTMzIDAgMCAwLS4zODcgMy4xIDE0Ljk3IDE0Ljk3IDAgMCAwIDAgMTYuMTE0IDIuNTUzIDIuNTUzIDAgMCAwIC4zODcgMy4wOTlsMS4xIDEuMUEyLjU0OSAyLjU0OSAwIDAgMCA1LjY0OSAyOGEyLjU1IDIuNTUgMCAwIDAgMS4yOTMtLjM2MUExNC45NjEgMTQuOTYxIDAgMCAwIDE1IDMwLjAwMmExNC45NyAxNC45NyAwIDAgMCA4LjA1OS0yLjM2M2MuMzk4LjIzNC44NDQuMzYgMS4yOTIuMzYuNjU1IDAgMS4zMS0uMjUgMS44MDktLjc0N2wxLjA5OS0xLjFhMi41MzEgMi41MzEgMCAwIDAgLjM4Ny0zLjEgMTQuOTYzIDE0Ljk2MyAwIDAgMCAwLTE2LjExM3pcIlxuICAgICAgICAgICAgZmlsbD1cIiNGRkZcIlxuICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIClcbiAgICBjYXNlICdjbG9zZSc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzdmcgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTMuNzA3LjI5M2EuOTk5Ljk5OSAwIDAgMC0xLjQxNCAwTDcgNS41ODYgMS43MDcuMjkzQS45OTkuOTk5IDAgMSAwIC4yOTMgMS43MDdMNS41ODYgNyAuMjkzIDEyLjI5M2EuOTk5Ljk5OSAwIDEgMCAxLjQxNCAxLjQxNEw3IDguNDE0bDUuMjkzIDUuMjkzYS45OTcuOTk3IDAgMCAwIDEuNDE0IDAgLjk5OS45OTkgMCAwIDAgMC0xLjQxNEw4LjQxNCA3bDUuMjkzLTUuMjkzYS45OTkuOTk5IDAgMCAwIDAtMS40MTRcIlxuICAgICAgICAgICAgZmlsbD1cIiNGRkZcIlxuICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIClcbiAgfVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBjb2xvcj86IHN0cmluZ1xuICBpY29uPzogSGVscFNjb3V0SWNvblxuICB6SW5kZXg6IHN0cmluZ1xuICBob3Jpem9udGFsUG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCdcbn1cblxuY29uc3QgSGVscFNjb3V0ID0gKHtcbiAgY29sb3IgPSAnIzk3NmFkNCcsXG4gIGljb24gPSAnYmVhY29uJyxcbiAgekluZGV4ID0gJzEwNTAnLFxuICBob3Jpem9udGFsUG9zaXRpb24gPSAnbGVmdCdcbn06IFByb3BzKTogSlNYLkVsZW1lbnQgfCBudWxsID0+IHtcbiAgY29uc3QgW3N0YXRlLCBsb2FkQ2hhdF0gPSB1c2VDaGF0KHsgbG9hZFdoZW5JZGxlOiB0cnVlIH0pXG4gIGNvbnN0IHdpbmRvd0hlaWdodCA9IHVzZVdpbmRvd0hlaWdodCgpXG4gIGNvbnN0IFtwb3NpdGlvblN0eWxlcywgc2V0UG9zaXRpb25TdHlsZXNdID0gdXNlU3RhdGU8Q1NTUHJvcGVydGllcz4oe1xuICAgIG9wYWNpdHk6IDAsXG4gICAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvc2l0aW9uU3R5bGVzKHtcbiAgICAgIGJvdHRvbTogd2luZG93SGVpZ2h0IDwgNzQwID8gJzEwcHgnIDogJzQwcHgnLFxuICAgICAgcmlnaHQ6XG4gICAgICAgIGhvcml6b250YWxQb3NpdGlvbiA9PT0gJ2xlZnQnXG4gICAgICAgICAgPyAnYXV0bydcbiAgICAgICAgICA6IHdpbmRvd0hlaWdodCA8IDc0MFxuICAgICAgICAgID8gJzIwcHgnXG4gICAgICAgICAgOiAnNDBweCcsXG4gICAgICBsZWZ0OlxuICAgICAgICBob3Jpem9udGFsUG9zaXRpb24gPT09ICdyaWdodCdcbiAgICAgICAgICA/ICdhdXRvJ1xuICAgICAgICAgIDogd2luZG93SGVpZ2h0IDwgNzQwXG4gICAgICAgICAgPyAnMjBweCdcbiAgICAgICAgICA6ICc0MHB4J1xuICAgIH0pXG4gIH0sIFt3aW5kb3dIZWlnaHRdKVxuXG4gIGlmIChzdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIC4uLnN0eWxlcy53cmFwcGVyLFxuICAgICAgICAuLi5wb3NpdGlvblN0eWxlcyxcbiAgICAgICAgekluZGV4OiBOdW1iZXIoekluZGV4KVxuICAgICAgfX1cbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTG9hZCBDaGF0XCJcbiAgICAgICAgYXJpYS1idXN5PVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IGxvYWRDaGF0KHsgb3BlbjogdHJ1ZSB9KX1cbiAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBsb2FkQ2hhdCh7IG9wZW46IGZhbHNlIH0pfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIC4uLnN0eWxlcy5idXR0b24sXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvclxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAuLi5zdHlsZXMuaWNvbixcbiAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgc3RhdGUgPT09ICdpbml0aWFsJ1xuICAgICAgICAgICAgICAgID8gJ3JvdGF0ZSgwZGVnKSBzY2FsZSgxKSdcbiAgICAgICAgICAgICAgICA6ICdyb3RhdGUoMzBkZWcpIHNjYWxlKDApJ1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7Z2V0SWNvbihpY29uKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAuLi5zdHlsZXMuY2xvc2UsXG4gICAgICAgICAgICBvcGFjaXR5OiBzdGF0ZSA9PT0gJ2luaXRpYWwnID8gMCA6IDEsXG4gICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgIHN0YXRlID09PSAnaW5pdGlhbCdcbiAgICAgICAgICAgICAgICA/ICdyb3RhdGUoMzBkZWcpIHNjYWxlKDApJ1xuICAgICAgICAgICAgICAgIDogJ3JvdGF0ZSgwZGVnKSBzY2FsZSgxKSdcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge2dldEljb24oJ2Nsb3NlJyl9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlbHBTY291dFxuIl19