UNPKG

surveyjs-widgets

Version:

Custom widgets for the SurveyJS library

201 lines (188 loc) 17.4 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("widgets/ck-editor", [], factory); else if(typeof exports === 'object') exports["widgets/ck-editor"] = factory(); else root["widgets/ck-editor"] = factory(); })(self, () => { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./node_modules/svg-inline-loader/index.js!./src/images/editor.svg": /*!*************************************************************************!*\ !*** ./node_modules/svg-inline-loader/index.js!./src/images/editor.svg ***! \*************************************************************************/ /***/ ((module) => { module.exports = "<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><g><polygon points=\"1,3 3,3 3,8 2,8 2,9 3,9 5,9 6,9 6,8 5,8 5,3 7,3 7,4 8,4 8,1 7,1 0,1 0,2 0,3 0,4 1,4 \"></polygon><rect x=\"10\" y=\"5\" width=\"6\" height=\"1\"></rect><rect x=\"10\" y=\"8\" width=\"6\" height=\"1\"></rect><rect y=\"11\" width=\"16\" height=\"1\"></rect><rect y=\"14\" width=\"16\" height=\"1\"></rect></g></svg>" /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { "use strict"; /*!**************************!*\ !*** ./src/ck-editor.js ***! \**************************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); function init(Survey) { const iconId = "icon-editor"; const componentName = "editor"; Survey.SvgRegistry && Survey.SvgRegistry.registerIconFromSvg(iconId, __webpack_require__(/*! svg-inline-loader!./images/editor.svg */ "./node_modules/svg-inline-loader/index.js!./src/images/editor.svg"), ""); var widget = { name: componentName, title: "Editor", iconName: iconId, widgetIsLoaded: function () { return typeof CKEDITOR != "undefined"; }, isFit: function (question) { return question.getType() === componentName; }, htmlTemplate: "<textarea rows='10' cols='80' style: {width:'100%'}></textarea>", activatedByChanged: function (activatedBy) { Survey.Serializer.addClass(componentName, [], null, "empty"); let registerQuestion = Survey.ElementFactory.Instance.registerCustomQuestion; if(!!registerQuestion) registerQuestion(componentName); Survey.Serializer.addProperty(componentName, { name: "height", default: 300, category: "general", }); }, afterRender: function (question, el) { var name = question.inputId; CKEDITOR.editorConfig = function (config) { config.language = "es"; config.height = question.height; config.toolbarCanCollapse = true; }; el.name = name; if (CKEDITOR.instances[name]) { CKEDITOR.instances[name].removeAllListeners(); CKEDITOR.remove(CKEDITOR.instances[name]); } var editor = CKEDITOR.replace(el); CKEDITOR.instances[name].config.readOnly = question.isReadOnly; var isValueChanging = false; var updateValueHandler = function () { if (isValueChanging || typeof question.value === "undefined") return; editor.setData(question.value); }; editor.on("change", function () { isValueChanging = true; question.value = editor.getData(); isValueChanging = false; }); question.valueChangedCallback = updateValueHandler; question.readOnlyChangedCallback = function () { if (question.isReadOnly) { editor.setReadOnly(true); } else { editor.setReadOnly(false); } }; updateValueHandler(); }, willUnmount: function (question, el) { question.readOnlyChangedCallback = null; CKEDITOR.instances[question.inputId].destroy(false); }, pdfRender: function (survey, options) { if (options.question.getType() === componentName) { const loc = new Survey.LocalizableString(survey, true); loc.text = options.question.value || options.question.defaultValue; options.question["locHtml"] = loc; if ( options.question.renderAs === "standard" || options.question.renderAs === "image" ) { options.question["renderAs"] = options.question.renderAs; } else options.question["renderAs"] = "auto"; const flatHtml = options.repository.create( survey, options.question, options.controller, "html" ); return new Promise(function (resolve) { flatHtml.generateFlats(options.point).then(function (htmlBricks) { options.bricks = htmlBricks; resolve(); }); }); } }, }; Survey.CustomWidgetCollection.Instance.addCustomWidget(widget, "customtype"); } if (typeof Survey !== "undefined") { init(Survey); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (init); })(); /******/ return __webpack_exports__; /******/ })() ; }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy9jay1lZGl0b3IuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3RCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHlDQUF5Qyx3Q0FBd0M7V0FDakY7V0FDQTtXQUNBOzs7OztXQ1BBOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLG1CQUFPLENBQUMsZ0hBQXVDO0FBQ3RIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkNBQTZDLGFBQWE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxJQUFJLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL2ltYWdlcy9lZGl0b3Iuc3ZnIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc3VydmV5anMtd2lkZ2V0cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3N1cnZleWpzLXdpZGdldHMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9zdXJ2ZXlqcy13aWRnZXRzLy4vc3JjL2NrLWVkaXRvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIndpZGdldHMvY2stZWRpdG9yXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIndpZGdldHMvY2stZWRpdG9yXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIndpZGdldHMvY2stZWRpdG9yXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIm1vZHVsZS5leHBvcnRzID0gXCI8c3ZnIHZpZXdCb3g9XFxcIjAgMCAxNiAxNlxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj48Zz48cG9seWdvbiBwb2ludHM9XFxcIjEsMyAzLDMgMyw4IDIsOCAyLDkgMyw5IDUsOSA2LDkgNiw4IDUsOCA1LDMgNywzIDcsNCA4LDQgOCwxIDcsMSAwLDEgMCwyIDAsMyAwLDQgMSw0IFxcXCI+PC9wb2x5Z29uPjxyZWN0IHg9XFxcIjEwXFxcIiB5PVxcXCI1XFxcIiB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCIxXFxcIj48L3JlY3Q+PHJlY3QgeD1cXFwiMTBcXFwiIHk9XFxcIjhcXFwiIHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjFcXFwiPjwvcmVjdD48cmVjdCB5PVxcXCIxMVxcXCIgd2lkdGg9XFxcIjE2XFxcIiBoZWlnaHQ9XFxcIjFcXFwiPjwvcmVjdD48cmVjdCB5PVxcXCIxNFxcXCIgd2lkdGg9XFxcIjE2XFxcIiBoZWlnaHQ9XFxcIjFcXFwiPjwvcmVjdD48L2c+PC9zdmc+XCIiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIGNvbnN0IGljb25JZCA9IFwiaWNvbi1lZGl0b3JcIjtcbiAgY29uc3QgY29tcG9uZW50TmFtZSA9IFwiZWRpdG9yXCI7XG4gIFN1cnZleS5TdmdSZWdpc3RyeSAmJiBTdXJ2ZXkuU3ZnUmVnaXN0cnkucmVnaXN0ZXJJY29uRnJvbVN2ZyhpY29uSWQsIHJlcXVpcmUoJ3N2Zy1pbmxpbmUtbG9hZGVyIS4vaW1hZ2VzL2VkaXRvci5zdmcnKSwgXCJcIik7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogY29tcG9uZW50TmFtZSxcbiAgICB0aXRsZTogXCJFZGl0b3JcIixcbiAgICBpY29uTmFtZTogaWNvbklkLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIENLRURJVE9SICE9IFwidW5kZWZpbmVkXCI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBjb21wb25lbnROYW1lO1xuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOlxuICAgICAgXCI8dGV4dGFyZWEgcm93cz0nMTAnIGNvbHM9JzgwJyBzdHlsZToge3dpZHRoOicxMDAlJ30+PC90ZXh0YXJlYT5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkQ2xhc3MoY29tcG9uZW50TmFtZSwgW10sIG51bGwsIFwiZW1wdHlcIik7XG4gICAgICBsZXQgcmVnaXN0ZXJRdWVzdGlvbiA9IFN1cnZleS5FbGVtZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckN1c3RvbVF1ZXN0aW9uO1xuICAgICAgaWYoISFyZWdpc3RlclF1ZXN0aW9uKSByZWdpc3RlclF1ZXN0aW9uKGNvbXBvbmVudE5hbWUpO1xuICAgICAgU3VydmV5LlNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoY29tcG9uZW50TmFtZSwge1xuICAgICAgICBuYW1lOiBcImhlaWdodFwiLFxuICAgICAgICBkZWZhdWx0OiAzMDAsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciBuYW1lID0gcXVlc3Rpb24uaW5wdXRJZDtcbiAgICAgIENLRURJVE9SLmVkaXRvckNvbmZpZyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgY29uZmlnLmxhbmd1YWdlID0gXCJlc1wiO1xuICAgICAgICBjb25maWcuaGVpZ2h0ID0gcXVlc3Rpb24uaGVpZ2h0O1xuICAgICAgICBjb25maWcudG9vbGJhckNhbkNvbGxhcHNlID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBlbC5uYW1lID0gbmFtZTtcblxuICAgICAgaWYgKENLRURJVE9SLmluc3RhbmNlc1tuYW1lXSkge1xuICAgICAgICBDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIENLRURJVE9SLnJlbW92ZShDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0pO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWRpdG9yID0gQ0tFRElUT1IucmVwbGFjZShlbCk7XG4gICAgICBDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0uY29uZmlnLnJlYWRPbmx5ID0gcXVlc3Rpb24uaXNSZWFkT25seTtcblxuICAgICAgdmFyIGlzVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzVmFsdWVDaGFuZ2luZyB8fCB0eXBlb2YgcXVlc3Rpb24udmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICAgICAgZWRpdG9yLnNldERhdGEocXVlc3Rpb24udmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGVkaXRvci5vbihcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzVmFsdWVDaGFuZ2luZyA9IHRydWU7XG4gICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gZWRpdG9yLmdldERhdGEoKTtcbiAgICAgICAgaXNWYWx1ZUNoYW5naW5nID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICBlZGl0b3Iuc2V0UmVhZE9ubHkodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWRpdG9yLnNldFJlYWRPbmx5KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICAgIENLRURJVE9SLmluc3RhbmNlc1txdWVzdGlvbi5pbnB1dElkXS5kZXN0cm95KGZhbHNlKTtcbiAgICB9LFxuICAgIHBkZlJlbmRlcjogZnVuY3Rpb24gKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMucXVlc3Rpb24uZ2V0VHlwZSgpID09PSBjb21wb25lbnROYW1lKSB7XG4gICAgICAgIGNvbnN0IGxvYyA9IG5ldyBTdXJ2ZXkuTG9jYWxpemFibGVTdHJpbmcoc3VydmV5LCB0cnVlKTtcbiAgICAgICAgbG9jLnRleHQgPSBvcHRpb25zLnF1ZXN0aW9uLnZhbHVlIHx8IG9wdGlvbnMucXVlc3Rpb24uZGVmYXVsdFZhbHVlO1xuICAgICAgICBvcHRpb25zLnF1ZXN0aW9uW1wibG9jSHRtbFwiXSA9IGxvYztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24ucmVuZGVyQXMgPT09IFwic3RhbmRhcmRcIiB8fFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24ucmVuZGVyQXMgPT09IFwiaW1hZ2VcIlxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uW1wicmVuZGVyQXNcIl0gPSBvcHRpb25zLnF1ZXN0aW9uLnJlbmRlckFzO1xuICAgICAgICB9IGVsc2Ugb3B0aW9ucy5xdWVzdGlvbltcInJlbmRlckFzXCJdID0gXCJhdXRvXCI7XG4gICAgICAgIGNvbnN0IGZsYXRIdG1sID0gb3B0aW9ucy5yZXBvc2l0b3J5LmNyZWF0ZShcbiAgICAgICAgICBzdXJ2ZXksXG4gICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbixcbiAgICAgICAgICBvcHRpb25zLmNvbnRyb2xsZXIsXG4gICAgICAgICAgXCJodG1sXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgZmxhdEh0bWwuZ2VuZXJhdGVGbGF0cyhvcHRpb25zLnBvaW50KS50aGVuKGZ1bmN0aW9uIChodG1sQnJpY2tzKSB7XG4gICAgICAgICAgICBvcHRpb25zLmJyaWNrcyA9IGh0bWxCcmlja3M7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=