botframework-webchat-component
Version:
React component of botframework-webchat
277 lines (222 loc) • 25.5 kB
JavaScript
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.connectUploadButton = exports.default = void 0;
var _botframeworkWebchatApi = require("botframework-webchat-api");
var _classnames = _interopRequireDefault(require("classnames"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _react = _interopRequireWildcard(require("react"));
var _AttachmentIcon = _interopRequireDefault(require("./Assets/AttachmentIcon"));
var _connectToWebChat = _interopRequireDefault(require("../connectToWebChat"));
var _index = _interopRequireDefault(require("../Utils/downscaleImageToDataURL/index"));
var _IconButton = _interopRequireDefault(require("./IconButton"));
var _useSendFiles = _interopRequireDefault(require("../hooks/useSendFiles"));
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; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (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 = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { 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; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var useDisabled = _botframeworkWebchatApi.hooks.useDisabled,
useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer;
var ROOT_STYLE = {
'&.webchat__upload-button': {
display: 'flex',
overflow: 'hidden',
position: 'relative',
'& .webchat__upload-button--file-input': {
height: 0,
width: 0,
opacity: 0,
position: 'absolute',
left: 0,
top: 0
}
}
};
var PREVENT_DEFAULT_HANDLER = function PREVENT_DEFAULT_HANDLER(event) {
return event.preventDefault();
};
function makeThumbnail(_x, _x2, _x3, _x4, _x5) {
return _makeThumbnail.apply(this, arguments);
}
function _makeThumbnail() {
_makeThumbnail = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(file, width, height, contentType, quality) {
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (!/\.(gif|jpe?g|png)$/i.test(file.name)) {
_context3.next = 10;
break;
}
_context3.prev = 1;
_context3.next = 4;
return (0, _index.default)(file, width, height, contentType, quality);
case 4:
return _context3.abrupt("return", _context3.sent);
case 7:
_context3.prev = 7;
_context3.t0 = _context3["catch"](1);
console.warn("Web Chat: Failed to downscale image due to ".concat(_context3.t0, "."));
case 10:
case "end":
return _context3.stop();
}
}
}, _callee3, null, [[1, 7]]);
}));
return _makeThumbnail.apply(this, arguments);
}
var connectUploadButton = function connectUploadButton() {
for (var _len = arguments.length, selectors = new Array(_len), _key = 0; _key < _len; _key++) {
selectors[_key] = arguments[_key];
}
return _connectToWebChat.default.apply(void 0, [function (_ref) {
var disabled = _ref.disabled,
language = _ref.language,
_sendFiles = _ref.sendFiles,
_ref$styleSet$options = _ref.styleSet.options,
enableUploadThumbnail = _ref$styleSet$options.enableUploadThumbnail,
uploadThumbnailContentType = _ref$styleSet$options.uploadThumbnailContentType,
uploadThumbnailHeight = _ref$styleSet$options.uploadThumbnailHeight,
uploadThumbnailQuality = _ref$styleSet$options.uploadThumbnailQuality,
uploadThumbnailWidth = _ref$styleSet$options.uploadThumbnailWidth;
return {
disabled: disabled,
language: language,
sendFiles: function () {
var _sendFiles2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(files) {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(files && files.length)) {
_context2.next = 6;
break;
}
_context2.t0 = _sendFiles;
_context2.next = 4;
return Promise.all([].map.call(files, /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(file) {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.t0 = _objectSpread;
_context.t1 = {
name: file.name,
size: file.size,
url: window.URL.createObjectURL(file)
};
_context.t2 = enableUploadThumbnail;
if (!_context.t2) {
_context.next = 8;
break;
}
_context.next = 6;
return makeThumbnail(file, uploadThumbnailWidth, uploadThumbnailHeight, uploadThumbnailContentType, uploadThumbnailQuality);
case 6:
_context.t3 = _context.sent;
_context.t2 = {
thumbnail: _context.t3
};
case 8:
_context.t4 = _context.t2;
return _context.abrupt("return", (0, _context.t0)(_context.t1, _context.t4));
case 10:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x7) {
return _ref2.apply(this, arguments);
};
}()));
case 4:
_context2.t1 = _context2.sent;
(0, _context2.t0)(_context2.t1);
case 6:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
function sendFiles(_x6) {
return _sendFiles2.apply(this, arguments);
}
return sendFiles;
}()
};
}].concat(selectors));
};
exports.connectUploadButton = connectUploadButton;
var UploadButton = function UploadButton(_ref3) {
var className = _ref3.className;
var _useStyleSet = (0, _useStyleSet3.default)(),
_useStyleSet2 = _slicedToArray(_useStyleSet, 1),
uploadButtonStyleSet = _useStyleSet2[0].uploadButton;
var _useDisabled = useDisabled(),
_useDisabled2 = _slicedToArray(_useDisabled, 1),
disabled = _useDisabled2[0];
var inputRef = (0, _react.useRef)();
var localize = useLocalizer();
var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + '';
var sendFiles = (0, _useSendFiles.default)();
var current = inputRef.current;
var uploadFileString = localize('TEXT_INPUT_UPLOAD_BUTTON_ALT');
var handleClick = (0, _react.useCallback)(function () {
current && current.click();
}, [current]);
var handleFileChange = (0, _react.useCallback)(function (_ref4) {
var files = _ref4.target.files;
sendFiles(files);
if (current) {
current.value = null;
}
}, [current, sendFiles]);
return /*#__PURE__*/_react.default.createElement("div", {
className: (0, _classnames.default)(rootClassName, 'webchat__upload-button', uploadButtonStyleSet + '', className)
}, /*#__PURE__*/_react.default.createElement("input", {
"aria-disabled": disabled,
"aria-hidden": "true",
className: "webchat__upload-button--file-input",
multiple: true,
onChange: disabled ? undefined : handleFileChange,
onClick: disabled ? PREVENT_DEFAULT_HANDLER : undefined,
readOnly: disabled,
ref: inputRef,
role: "button",
tabIndex: -1,
type: "file"
}), /*#__PURE__*/_react.default.createElement(_IconButton.default, {
alt: uploadFileString,
"aria-label": uploadFileString,
disabled: disabled,
onClick: handleClick
}, /*#__PURE__*/_react.default.createElement(_AttachmentIcon.default, null)));
};
UploadButton.defaultProps = {
className: undefined
};
UploadButton.propTypes = {
className: _propTypes.default.string
};
var _default = UploadButton;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TZW5kQm94L1VwbG9hZEJ1dHRvbi5qcyJdLCJuYW1lcyI6WyJ1c2VEaXNhYmxlZCIsImhvb2tzIiwidXNlTG9jYWxpemVyIiwiUk9PVF9TVFlMRSIsImRpc3BsYXkiLCJvdmVyZmxvdyIsInBvc2l0aW9uIiwiaGVpZ2h0Iiwid2lkdGgiLCJvcGFjaXR5IiwibGVmdCIsInRvcCIsIlBSRVZFTlRfREVGQVVMVF9IQU5ETEVSIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm1ha2VUaHVtYm5haWwiLCJmaWxlIiwiY29udGVudFR5cGUiLCJxdWFsaXR5IiwidGVzdCIsIm5hbWUiLCJjb25zb2xlIiwid2FybiIsImNvbm5lY3RVcGxvYWRCdXR0b24iLCJzZWxlY3RvcnMiLCJjb25uZWN0VG9XZWJDaGF0IiwiZGlzYWJsZWQiLCJsYW5ndWFnZSIsInNlbmRGaWxlcyIsInN0eWxlU2V0Iiwib3B0aW9ucyIsImVuYWJsZVVwbG9hZFRodW1ibmFpbCIsInVwbG9hZFRodW1ibmFpbENvbnRlbnRUeXBlIiwidXBsb2FkVGh1bWJuYWlsSGVpZ2h0IiwidXBsb2FkVGh1bWJuYWlsUXVhbGl0eSIsInVwbG9hZFRodW1ibmFpbFdpZHRoIiwiZmlsZXMiLCJsZW5ndGgiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiY2FsbCIsInNpemUiLCJ1cmwiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJ0aHVtYm5haWwiLCJVcGxvYWRCdXR0b24iLCJjbGFzc05hbWUiLCJ1cGxvYWRCdXR0b25TdHlsZVNldCIsInVwbG9hZEJ1dHRvbiIsImlucHV0UmVmIiwibG9jYWxpemUiLCJyb290Q2xhc3NOYW1lIiwiY3VycmVudCIsInVwbG9hZEZpbGVTdHJpbmciLCJoYW5kbGVDbGljayIsImNsaWNrIiwiaGFuZGxlRmlsZUNoYW5nZSIsInRhcmdldCIsInZhbHVlIiwidW5kZWZpbmVkIiwiZGVmYXVsdFByb3BzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwi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QmQsRUFBQUEsU0FBUyxFQUFFYTtBQURlLENBQTVCO0FBSUFkLFlBQVksQ0FBQ2dCLFNBQWIsR0FBeUI7QUFDdkJmLEVBQUFBLFNBQVMsRUFBRWdCLG1CQUFVQztBQURFLENBQXpCO2VBSWVsQixZIiwic291cmNlUm9vdCI6ImNvbXBvbmVudDovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob29rcyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWFwaSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEF0dGFjaG1lbnRJY29uIGZyb20gJy4vQXNzZXRzL0F0dGFjaG1lbnRJY29uJztcbmltcG9ydCBjb25uZWN0VG9XZWJDaGF0IGZyb20gJy4uL2Nvbm5lY3RUb1dlYkNoYXQnO1xuaW1wb3J0IGRvd25zY2FsZUltYWdlVG9EYXRhVVJMIGZyb20gJy4uL1V0aWxzL2Rvd25zY2FsZUltYWdlVG9EYXRhVVJML2luZGV4JztcbmltcG9ydCBJY29uQnV0dG9uIGZyb20gJy4vSWNvbkJ1dHRvbic7XG5pbXBvcnQgdXNlU2VuZEZpbGVzIGZyb20gJy4uL2hvb2tzL3VzZVNlbmRGaWxlcyc7XG5pbXBvcnQgdXNlU3R5bGVTZXQgZnJvbSAnLi4vaG9va3MvdXNlU3R5bGVTZXQnO1xuaW1wb3J0IHVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IGZyb20gJy4uL2hvb2tzL2ludGVybmFsL3VzZVN0eWxlVG9FbW90aW9uT2JqZWN0JztcblxuY29uc3QgeyB1c2VEaXNhYmxlZCwgdXNlTG9jYWxpemVyIH0gPSBob29rcztcblxuY29uc3QgUk9PVF9TVFlMRSA9IHtcbiAgJyYud2ViY2hhdF9fdXBsb2FkLWJ1dHRvbic6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuXG4gICAgJyYgLndlYmNoYXRfX3VwbG9hZC1idXR0b24tLWZpbGUtaW5wdXQnOiB7XG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICB3aWR0aDogMCxcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDBcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IFBSRVZFTlRfREVGQVVMVF9IQU5ETEVSID0gZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuYXN5bmMgZnVuY3Rpb24gbWFrZVRodW1ibmFpbChmaWxlLCB3aWR0aCwgaGVpZ2h0LCBjb250ZW50VHlwZSwgcXVhbGl0eSkge1xuICBpZiAoL1xcLihnaWZ8anBlP2d8cG5nKSQvaXUudGVzdChmaWxlLm5hbWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBkb3duc2NhbGVJbWFnZVRvRGF0YVVSTChmaWxlLCB3aWR0aCwgaGVpZ2h0LCBjb250ZW50VHlwZSwgcXVhbGl0eSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihgV2ViIENoYXQ6IEZhaWxlZCB0byBkb3duc2NhbGUgaW1hZ2UgZHVlIHRvICR7ZXJyb3J9LmApO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBjb25uZWN0VXBsb2FkQnV0dG9uID0gKC4uLnNlbGVjdG9ycykgPT5cbiAgY29ubmVjdFRvV2ViQ2hhdChcbiAgICAoe1xuICAgICAgZGlzYWJsZWQsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIHNlbmRGaWxlcyxcbiAgICAgIHN0eWxlU2V0OiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbmFibGVVcGxvYWRUaHVtYm5haWwsXG4gICAgICAgICAgdXBsb2FkVGh1bWJuYWlsQ29udGVudFR5cGUsXG4gICAgICAgICAgdXBsb2FkVGh1bWJuYWlsSGVpZ2h0LFxuICAgICAgICAgIHVwbG9hZFRodW1ibmFpbFF1YWxpdHksXG4gICAgICAgICAgdXBsb2FkVGh1bWJuYWlsV2lkdGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pID0+ICh7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgc2VuZEZpbGVzOiBhc3luYyBmaWxlcyA9PiB7XG4gICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBUT0RPOiBbUDNdIFdlIG5lZWQgdG8gZmluZCByZXZva2VPYmplY3RVUkwgb24gdGhlIFVJIHNpZGVcbiAgICAgICAgICAvLyAgICAgICBSZWR1eCBzdG9yZSBzaG91bGQgbm90IGtub3cgYWJvdXQgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAgICAgICAvLyAgICAgICBPbmUgZml4IGlzIHRvIHVzZSBBcnJheUJ1ZmZlciBpbnN0ZWFkIG9mIG9iamVjdCBVUkwsIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmVzIGNoYW5nZSB0byBEaXJlY3RMaW5lSlNcbiAgICAgICAgICBzZW5kRmlsZXMoXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgW10ubWFwLmNhbGwoZmlsZXMsIGFzeW5jIGZpbGUgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIHVybDogd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSksXG4gICAgICAgICAgICAgICAgLi4uKGVuYWJsZVVwbG9hZFRodW1ibmFpbCAmJiB7XG4gICAgICAgICAgICAgICAgICB0aHVtYm5haWw6IGF3YWl0IG1ha2VUaHVtYm5haWwoXG4gICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFRodW1ibmFpbFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRUaHVtYm5haWxIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFRodW1ibmFpbENvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRUaHVtYm5haWxRdWFsaXR5XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuICAgIC4uLnNlbGVjdG9yc1xuICApO1xuXG5jb25zdCBVcGxvYWRCdXR0b24gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCBbeyB1cGxvYWRCdXR0b246IHVwbG9hZEJ1dHRvblN0eWxlU2V0IH1dID0gdXNlU3R5bGVTZXQoKTtcbiAgY29uc3QgW2Rpc2FibGVkXSA9IHVzZURpc2FibGVkKCk7XG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGxvY2FsaXplID0gdXNlTG9jYWxpemVyKCk7XG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG4gIGNvbnN0IHNlbmRGaWxlcyA9IHVzZVNlbmRGaWxlcygpO1xuXG4gIGNvbnN0IHsgY3VycmVudCB9ID0gaW5wdXRSZWY7XG4gIGNvbnN0IHVwbG9hZEZpbGVTdHJpbmcgPSBsb2NhbGl6ZSgnVEVYVF9JTlBVVF9VUExPQURfQlVUVE9OX0FMVCcpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGN1cnJlbnQgJiYgY3VycmVudC5jbGljaygpO1xuICB9LCBbY3VycmVudF0pO1xuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoeyB0YXJnZXQ6IHsgZmlsZXMgfSB9KSA9PiB7XG4gICAgICBzZW5kRmlsZXMoZmlsZXMpO1xuXG4gICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICBjdXJyZW50LnZhbHVlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjdXJyZW50LCBzZW5kRmlsZXNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhyb290Q2xhc3NOYW1lLCAnd2ViY2hhdF9fdXBsb2FkLWJ1dHRvbicsIHVwbG9hZEJ1dHRvblN0eWxlU2V0ICsgJycsIGNsYXNzTmFtZSl9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBjbGFzc05hbWU9XCJ3ZWJjaGF0X191cGxvYWQtYnV0dG9uLS1maWxlLWlucHV0XCJcbiAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgIG9uQ2hhbmdlPXtkaXNhYmxlZCA/IHVuZGVmaW5lZCA6IGhhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgIG9uQ2xpY2s9e2Rpc2FibGVkID8gUFJFVkVOVF9ERUZBVUxUX0hBTkRMRVIgOiB1bmRlZmluZWR9XG4gICAgICAgIHJlYWRPbmx5PXtkaXNhYmxlZH1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgLz5cbiAgICAgIDxJY29uQnV0dG9uIGFsdD17dXBsb2FkRmlsZVN0cmluZ30gYXJpYS1sYWJlbD17dXBsb2FkRmlsZVN0cmluZ30gZGlzYWJsZWQ9e2Rpc2FibGVkfSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgIDxBdHRhY2htZW50SWNvbiAvPlxuICAgICAgPC9JY29uQnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuVXBsb2FkQnV0dG9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWRcbn07XG5cblVwbG9hZEJ1dHRvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVXBsb2FkQnV0dG9uO1xuXG5leHBvcnQgeyBjb25uZWN0VXBsb2FkQnV0dG9uIH07XG4iXX0=
;