87 lines
401 KiB
JavaScript
87 lines
401 KiB
JavaScript
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
/******/ (() => { // webpackBootstrap
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "./resources/js/admin/dashboard.js"
|
|
/*!*****************************************!*\
|
|
!*** ./resources/js/admin/dashboard.js ***!
|
|
\*****************************************/
|
|
() {
|
|
|
|
eval("{window.Dashboard = function () {\n var Opts = {\n active: false,\n containerCssSelector: \".dashboard\",\n testFileMod: false,\n isAdmin: false,\n URL: {\n create: '',\n store: '',\n getDataTableContent: '',\n destroy: ''\n }\n };\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n debug('Dashboard constructor called');\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.init = function (options) {\n console.log('Dashboard init called');\n $.extend(Opts, options);\n /*\r\n APP.setOpts({\r\n afterLoadMainContent:root.initEditor,\r\n })\r\n */\n /*\r\n Init list view\r\n */\n root.initEditorButtons();\n };\n this.initEditorButtons = function () {\n $('.DashboardEditable button.edit').off('click');\n $('.DashboardEditable button.edit').on('click', function () {\n root.initEditor();\n $('.btnGroupEdit').toggleClass('d-none');\n $('.btnGroupModify').toggleClass('d-none');\n });\n $('.DashboardEditable button.btnSave').off('click');\n $('.DashboardEditable button.btnSave').on('click', function () {\n /*$('.btnGroupEdit').toggleClass('d-none');\r\n $('.btnGroupModify').toggleClass('d-none');\r\n */\n root.saveCustomContent();\n //tinymce.activeEditor.isDirty() //true when modified\n });\n $('.DashboardEditable button.btnCancel').off('click');\n $('.DashboardEditable button.btnCancel').on('click', function () {\n $('.btnGroupEdit').toggleClass('d-none');\n $('.btnGroupModify').toggleClass('d-none');\n root.removeEditor();\n });\n };\n this.saveCustomContent = function () {\n var ajaxData = new FormData($('.dashboardForm')[0]);\n ajaxData.append('stored_data', tinymce.activeEditor.getContent());\n var ajaxUrl = Opts.URL.update.replace('%id%', $('div.dashboardCustomContent').data('id'));\n ajaxData.append('_method', 'PUT');\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n Toast.create({\n title: \"Siekeres mentés!\",\n message: 'Új tartalom elmentve.',\n status: TOAST_STATUS.INFO,\n timeout: 5000\n });\n },\n error: function error(data) {\n console.log(data.responseJSON);\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.loadTinymce = function () {\n $.getScript('https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js', function () {\n root.initEditor();\n });\n };\n this.removeEditor = function (options) {\n if (typeof tinymce !== \"undefined\") {\n tinymce.remove();\n }\n };\n this.initEditor = function (options) {\n if (typeof tinymce === \"undefined\") {\n root.loadTinymce();\n return;\n }\n tinymce.init({\n selector: 'div.dashboardCustomContent',\n // Replace this CSS selector to match the placeholder element for TinyMCE\n language: 'hu_HU',\n plugins: 'code table lists',\n toolbar: ' undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table'\n\n /*\r\n toolbar: 'customInsertButton | undo redo | formatselect| bold italic | alignleft aligncenter alignright | indent outdent | bullist numlist | code | table',\r\n setup: function (editor) {\r\n editor.ui.registry.addButton('customInsertButton', {\r\n text: 'My Button',\r\n onAction: function (_) {\r\n editor.insertContent(' <strong>It\\'s my button!</strong> ');\r\n }});\r\n }\r\n */\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJEYXNoYm9hcmQiLCJPcHRzIiwiYWN0aXZlIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0RmlsZU1vZCIsImlzQWRtaW4iLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95Iiwicm9vdCIsImNvbnN0cnVjdCIsIm9wdGlvbnMiLCJkZWJ1ZyIsIiQiLCJleHRlbmQiLCJnZXRPcHRzIiwiaW5pdCIsImNvbnNvbGUiLCJsb2ciLCJpbml0RWRpdG9yQnV0dG9ucyIsIm9mZiIsIm9uIiwiaW5pdEVkaXRvciIsInRvZ2dsZUNsYXNzIiwic2F2ZUN1c3RvbUNvbnRlbnQiLCJyZW1vdmVFZGl0b3IiLCJhamF4RGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwidGlueW1jZSIsImFjdGl2ZUVkaXRvciIsImdldENvbnRlbnQiLCJhamF4VXJsIiwidXBkYXRlIiwicmVwbGFjZSIsImRhdGEiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsIlRvYXN0IiwidGl0bGUiLCJtZXNzYWdlIiwic3RhdHVzIiwiVE9BU1RfU1RBVFVTIiwiSU5GTyIsInRpbWVvdXQiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImxvYWRUaW55bWNlIiwiZ2V0U2NyaXB0IiwicmVtb3ZlIiwic2VsZWN0b3IiLCJsYW5ndWFnZSIsInBsdWdpbnMiLCJ0b29sYmFyIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9kYXNoYm9hcmQuanM/ZTBkOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cuRGFzaGJvYXJkPWZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6XCIuZGFzaGJvYXJkXCIsXHJcbiAgICAgICAgdGVzdEZpbGVNb2Q6ZmFsc2UsXHJcbiAgICAgICAgaXNBZG1pbjpmYWxzZSxcclxuICAgICAgICBVUkw6e1xyXG4gICAgICAgICAgICBjcmVhdGU6JycsXHJcbiAgICAgICAgICAgIHN0b3JlOicnLFxyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxyXG4gICAgICAgICAgICBkZXN0cm95OicnLFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGRlYnVnKCdEYXNoYm9hcmQgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnRGFzaGJvYXJkIGluaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbi8qXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBhZnRlckxvYWRNYWluQ29udGVudDpyb290LmluaXRFZGl0b3IsXHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAvKlxyXG4gICAgICAgIEluaXQgbGlzdCB2aWV3XHJcbiAgICAgICAgKi9cclxuICAgICAgICByb290LmluaXRFZGl0b3JCdXR0b25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0RWRpdG9yQnV0dG9ucz1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuRGFzaGJvYXJkRWRpdGFibGUgYnV0dG9uLmVkaXQnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5lZGl0Jykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgcm9vdC5pbml0RWRpdG9yKCk7XHJcbiAgICAgICAgICAgICQoJy5idG5Hcm91cEVkaXQnKS50b2dnbGVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5idG5Hcm91cE1vZGlmeScpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5TYXZlJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5EYXNoYm9hcmRFZGl0YWJsZSBidXR0b24uYnRuU2F2ZScpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIC8qJCgnLmJ0bkdyb3VwRWRpdCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICByb290LnNhdmVDdXN0b21Db250ZW50KCk7XHJcbiAgICAgICAgICAgIC8vdGlueW1jZS5hY3RpdmVFZGl0b3IuaXNEaXJ0eSgpIC8vdHJ1ZSB3aGVuIG1vZGlmaWVkXHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5DYW5jZWwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLkRhc2hib2FyZEVkaXRhYmxlIGJ1dHRvbi5idG5DYW5jZWwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG5cclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwRWRpdCcpLnRvZ2dsZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgJCgnLmJ0bkdyb3VwTW9kaWZ5JykudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICByb290LnJlbW92ZUVkaXRvcigpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmVDdXN0b21Db250ZW50PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBhamF4RGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5kYXNoYm9hcmRGb3JtJylbMF0pO1xyXG4gICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3RvcmVkX2RhdGEnLHRpbnltY2UuYWN0aXZlRWRpdG9yLmdldENvbnRlbnQoKSk7XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLCQoJ2Rpdi5kYXNoYm9hcmRDdXN0b21Db250ZW50JykuZGF0YSgnaWQnKSk7XHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxyXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpZWtlcmVzIG1lbnTDqXMhXCIsIG1lc3NhZ2U6ICfDmmogdGFydGFsb20gZWxtZW50dmUuJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuSU5GTywgdGltZW91dDogNTAwMCB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRUaW55bWNlPSBmdW5jdGlvbiAoKXtcclxuICAgICAgICAkLmdldFNjcmlwdCgnaHR0cHM6Ly9jZG4udGlueS5jbG91ZC8xL25vLWFwaS1rZXkvdGlueW1jZS81L3RpbnltY2UubWluLmpzJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICByb290LmluaXRFZGl0b3IoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMucmVtb3ZlRWRpdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICAgICAgICBpZih0eXBlb2YgdGlueW1jZSE9PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICB0aW55bWNlLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5pdEVkaXRvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiB0aW55bWNlPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHJvb3QubG9hZFRpbnltY2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGlueW1jZS5pbml0KHtcclxuICAgICAgICAgICAgc2VsZWN0b3I6ICdkaXYuZGFzaGJvYXJkQ3VzdG9tQ29udGVudCcsIC8vIFJlcGxhY2UgdGhpcyBDU1Mgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQgZm9yIFRpbnlNQ0VcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6ICdodV9IVScsXHJcbiAgICAgICAgICAgIHBsdWdpbnM6ICdjb2RlIHRhYmxlIGxpc3RzJyxcclxuICAgICAgICAgICAgdG9vbGJhcjogJyB1bmRvIHJlZG8gfCBmb3JtYXRzZWxlY3R8IGJvbGQgaXRhbGljIHwgYWxpZ25sZWZ0IGFsaWduY2VudGVyIGFsaWducmlnaHQgfCBpbmRlbnQgb3V0ZGVudCB8IGJ1bGxpc3QgbnVtbGlzdCB8IGNvZGUgfCB0YWJsZScsXHJcblxyXG4vKlxyXG4gICAgICAgICAgICB0b29sYmFyOiAnY3VzdG9tSW5zZXJ0QnV0dG9uIHwgdW5kbyByZWRvIHwgZm9ybWF0c2VsZWN0fCBib2xkIGl0YWxpYyB8IGFsaWdubGVmdCBhbGlnbmNlbnRlciBhbGlnbnJpZ2h0IHwgaW5kZW50IG91dGRlbnQgfCBidWxsaXN0IG51bWxpc3QgfCBjb2RlIHwgdGFibGUnLFxyXG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24gKGVkaXRvcikge1xyXG4gICAgICAgICAgICAgICAgZWRpdG9yLnVpLnJlZ2lzdHJ5LmFkZEJ1dHRvbignY3VzdG9tSW5zZXJ0QnV0dG9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdNeSBCdXR0b24nLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQWN0aW9uOiBmdW5jdGlvbiAoXykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuaW5zZXJ0Q29udGVudCgnJm5ic3A7PHN0cm9uZz5JdFxcJ3MgbXkgYnV0dG9uITwvc3Ryb25nPiZuYnNwOycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgfVxyXG4qL1xyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuIl0sIm1hcHBpbmdzIjoiQUFBQUEsTUFBTSxDQUFDQyxTQUFTLEdBQUMsWUFBWTtFQUN6QixJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsWUFBWTtJQUNqQ0MsV0FBVyxFQUFDLEtBQUs7SUFD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UUFBUTtNQUNiWSxJQUFJLEVBQUMsTUFBTTtNQUNYQyxXQUFXLEVBQUMsS0FBSztNQUNqQkMsV0FBVyxFQUFFLEtBQUs7TUFDbEJDLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFBLEVBQWEsQ0FFdkIsQ0FBQztNQUNEQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBV1AsSUFBSSxFQUFFO1FBQ3BCUSxLQUFLLENBQUN0QyxNQUFNLENBQUM7VUFBRXVDLEtBQUssRUFBRSxrQkFBa0I7VUFBRUMsT0FBTyxFQUFFLHVCQUF1QjtVQUFFQyxNQUFNLEVBQUVDLFlBQVksQ0FBQ0MsSUFBSTtVQUFFQyxPQUFPLEVBQUU7UUFBSyxDQUFDLENBQUM7TUFDM0gsQ0FBQztNQUNEQyxLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBV2YsSUFBSSxFQUFFO1FBQ2xCbEIsT0FBTyxDQUFDQyxHQUFHLENBQUNpQixJQUFJLENBQUNnQixZQUFZLENBQUM7UUFDOUJDLHFCQUFxQixDQUFDakIsSUFBSSxDQUFDZ0IsWUFBWSxDQUFDRCxLQUFLLENBQUM7TUFDbEQ7SUFDSixDQUFDLENBQUM7RUFFTixDQUFDO0VBRUQsSUFBSSxDQUFDRyxXQUFXLEdBQUUsWUFBVztJQUN6QnhDLENBQUMsQ0FBQ3lDLFNBQVMsQ0FBQyw4REFBOEQsRUFBQyxZQUFXO01BQ25GN0MsSUFBSSxDQUFDYSxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUM7RUFDTixDQUFDO0VBQ0QsSUFBSSxDQUFDRyxZQUFZLEdBQUcsVUFBVWQsT0FBTyxFQUFFO0lBQ25DLElBQUcsT0FBT2tCLE9BQU8sS0FBRyxXQUFXLEVBQUM7TUFDNUJBLE9BQU8sQ0FBQzBCLE1BQU0sQ0FBQyxDQUFDO0lBQ3BCO0VBQ0osQ0FBQztFQUNELElBQUksQ0FBQ2pDLFVBQVUsR0FBRyxVQUFVWCxPQUFPLEVBQUU7SUFFakMsSUFBRyxPQUFPa0IsT0FBTyxLQUFHLFdBQVcsRUFBQztNQUM1QnBCLElBQUksQ0FBQzRDLFdBQVcsQ0FBQyxDQUFDO01BQ2xCO0lBQ0o7SUFFQXhCLE9BQU8sQ0FBQ2IsSUFBSSxDQUFDO01BQ1R3QyxRQUFRLEVBQUUsNEJBQTRCO01BQUU7TUFDeENDLFFBQVEsRUFBRSxPQUFPO01BQ2pCQyxPQUFPLEVBQUUsa0JBQWtCO01BQzNCQyxPQUFPLEVBQUU7O01BRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBRVEsQ0FBQyxDQUFDO0VBQ04sQ0FBQztBQUNMLENBQUMiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL2Rhc2hib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/dashboard.js\n\n}");
|
|
|
|
/***/ },
|
|
|
|
/***/ "./resources/js/admin/priceList.js"
|
|
/*!*****************************************!*\
|
|
!*** ./resources/js/admin/priceList.js ***!
|
|
\*****************************************/
|
|
() {
|
|
|
|
eval("{window.PriceListAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n active: false,\n containerCssSelector: \".priceListForm\",\n testFileMod: false,\n URL: {\n create: '',\n store: '',\n getDataTableContent: '',\n destroy: ''\n }\n };\n var PriceList = {};\n var root = this;\n var dataTableCSSSelector = null;\n\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n debug('PriceListAdmin constructor called');\n $.extend(Opts, options);\n };\n var errorRowPointer = null;\n var errorRowCount = 0;\n this.initErrorNavigationButton = function () {\n errorRowCount = $('.statusError').length;\n errorRowPointer = null;\n $('.priceListForm .buttonPrevError .buttonNextError').off('click');\n $('.priceListForm .buttonPrevError').on('click', function () {\n if (errorRowPointer == null) {\n errorRowPointer = 0;\n } else {\n if (errorRowPointer > 0) {\n errorRowPointer--;\n } else {\n return;\n }\n }\n $('.statusError').removeClass('highlightedErrorRow');\n $('.priceListTableWrapper').scrollTop($($('.statusError')[errorRowPointer]).position().top);\n $($('.statusError')[errorRowPointer]).addClass('highlightedErrorRow');\n });\n $('.priceListForm .buttonNextError').off('click');\n $('.priceListForm .buttonNextError').on('click', function () {\n if (errorRowPointer == null) {\n errorRowPointer = 0;\n } else {\n if (errorRowPointer < errorRowCount - 1) {\n errorRowPointer++;\n } else {\n return;\n }\n }\n $('.statusError').removeClass('highlightedErrorRow');\n $('.priceListTableWrapper').scrollTop($($('.statusError')[errorRowPointer]).position().top);\n $($('.statusError')[errorRowPointer]).addClass('highlightedErrorRow');\n });\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.priceListTable > tbody').empty();\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.clickNewPriceListCallBack = function () {\n root.initViewDetails();\n };\n this.clickNewPriceList = function () {\n APP.loadMainContent(Opts.URL.create, root.clickNewPriceListCallBack);\n };\n this.datatableRowActionButtonClick = function (event) {\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n //_token\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n /*\r\n */\n };\n this.initViewList = function (options) {\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNewPriceList,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n APP.dataTablePriceList = $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n //buttons+=APP.datatableAddRowEditButton(0,arguments);\n return buttons;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: [\n //'createState', 'savedStates',\n 'excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"available\"\n }, {\n \"data\": \"created_at\"\n }, {\n \"data\": \"note\"\n }, null],\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n };\n this.initViewDetails = function (options) {\n $(Opts.containerCssSelector + ' .datePickerClick').off('click');\n $(Opts.containerCssSelector + ' .datePickerClick').on('click', function () {\n $(Opts.containerCssSelector + ' .datePicker').datepicker('show');\n });\n $(Opts.containerCssSelector + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n onSelect: function onSelect(dateText) {\n console.log(dateText);\n $('.selectedDateText').text(dateText.replaceAll('-', '.'));\n $('input[name=\"availableDate\"]').val(dateText);\n }\n });\n $(Opts.containerCssSelector + ' .buttonNewUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonNewUpload').on('click', function () {\n root.selectedUploadFileToggle();\n });\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.log('------------------');\n root.selectedUploadFileToggle();\n var data = new FormData($('.priceListForm')[0]);\n if ($('.supplierSelect').val().length < 1) {\n Toast.create({\n title: \"Hiba!\",\n message: 'Adjon meg beszállítót!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n return;\n }\n var fileInput = $('#inputGroupPriceListFile');\n console.log(fileInput[0].files.length < 1);\n\n /* teszteles miatt kikapcsolva a fajl ellenorzes\r\n */\n if (!Opts.testFileMod) {\n console.log(fileInput[0].files.length < 1);\n if (fileInput[0].files.length < 1) {\n Toast.create({\n title: \"Hiba!\",\n message: 'Vállaszon ki fájlt!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n return;\n }\n }\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n $.ajax({\n url: Opts.URL.store,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.processCheckedPriceListResponse(data);\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n $(Opts.containerCssSelector + ' .buttonFinalization').on('click', function () {\n var data = new FormData($('.priceListForm')[0]);\n var fileInput = $('#inputGroupPriceListFile');\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n data.append('finalization', 1);\n $.ajax({\n url: Opts.URL.store,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success) {\n $('.priceListTable tbody tr').remove();\n $('.uploadStatusRow >.canFinish').hide();\n $('.uploadStatusRow').addClass('d-none');\n $('.priceListTable tbody').append('<tr><td colspan=\"99\" style=\"text-align: center;' + ' font-size: 2em;\"> Árlistát elmentettük.</td></tr>');\n }\n /*\r\n if(data.success==1){\r\n root.processCheckedPriceListResponse(data);\r\n }\r\n */\n },\n error: function error(data) {\n console.log(data.responseJSON);\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.init = function (options) {\n console.log('PriceListAdmin init called');\n $.extend(Opts, options);\n console.log('Opt extended');\n console.log(Opts);\n /*\r\n Init list view\r\n */\n console.log('call list view Init');\n root.initViewList(options);\n };\n this.getOpts = function () {\n return Opts;\n };\n var priceListHasError = false;\n this.processCheckedPriceListResponse = function (responseData) {\n priceListHasError = false;\n root.processCheckedPriceListResponseRows(responseData.rows);\n if (priceListHasError) {\n $('.uploadStatusRow >.canFinish').hide();\n $('.uploadStatusRow >.canFinishError').show();\n root.initErrorNavigationButton();\n } else {\n $('.uploadStatusRow >.canFinish').show();\n $('.uploadStatusRow >.canFinishError').hide();\n }\n $('.uploadStatusRow').removeClass('d-none');\n $('.containerUploadedSpinner').addClass('d-none');\n };\n this.processCheckedPriceListResponseRows = function (responseRowsData) {\n console.log('processingRows');\n for (var key in responseRowsData) {\n var rowData = responseRowsData[key];\n var templateData = rowData.originalData;\n templateData.rowNum = rowData.rowNum;\n var template = $('template[data-name=\"priceListTableRow\"]').html();\n var render = Mustache.render(template, templateData);\n $('.priceListTable tbody').append(render);\n $('tr[data-rownum=' + rowData.rowNum + ']').addClass('status' + $.ucFirst(rowData.status));\n root.processResponseRowErrors(rowData.error, rowData.rowNum);\n if (rowData.changed) {\n root.processResponseRowChanged(rowData.changed, rowData.rowNum);\n }\n }\n };\n this.processResponseRowChanged = function (changedArray, rowNum) {\n if (changedArray.length < 1) {\n return;\n }\n console.log(changedArray);\n //fields error resz\n var trNode = $('tr[data-rownum=' + rowNum + ']');\n for (var key in changedArray) {\n var tdNode = trNode.find('td[data-pointer=\"' + key + '\"]');\n tdNode.addClass('bg-primary');\n var changedTxtNode = $(document.createElement(\"span\")).text(changedArray[key].old).addClass('fieldChanged');\n tdNode.append(changedTxtNode);\n }\n };\n this.processResponseRowErrors = function (errorArray, rowNum) {\n if (errorArray.length < 1) {\n return;\n }\n //general error resz\n console.log(errorArray);\n priceListHasError = true;\n\n //fields error resz\n if (typeof errorArray.fields == 'undefined') {\n return;\n }\n var trNode = $('tr[data-rownum=' + rowNum + ']');\n for (var key in errorArray.fields) {\n var tdNode = trNode.find('td[data-pointer=\"' + key + '\"]');\n tdNode.addClass('bg-danger');\n var errorTxtNode = $(document.createElement(\"span\")).text(errorArray.fields[key]).addClass('fieldError');\n tdNode.append(errorTxtNode);\n }\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJQcmljZUxpc3RBZG1pbiIsIm9wdGlvbnMiLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsImFjdGl2ZSIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdEZpbGVNb2QiLCJVUkwiLCJjcmVhdGUiLCJzdG9yZSIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJkZXN0cm95IiwiUHJpY2VMaXN0Iiwicm9vdCIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiY29uc3RydWN0IiwiZGVidWciLCIkIiwiZXh0ZW5kIiwiZXJyb3JSb3dQb2ludGVyIiwiZXJyb3JSb3dDb3VudCIsImluaXRFcnJvck5hdmlnYXRpb25CdXR0b24iLCJsZW5ndGgiLCJvZmYiLCJvbiIsInJlbW92ZUNsYXNzIiwic2Nyb2xsVG9wIiwicG9zaXRpb24iLCJ0b3AiLCJhZGRDbGFzcyIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwidGV4dCIsIm5hbWUiLCJlbXB0eSIsImNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2siLCJpbml0Vmlld0RldGFpbHMiLCJjbGlja05ld1ByaWNlTGlzdCIsIkFQUCIsImxvYWRNYWluQ29udGVudCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJub2RlIiwiY3VycmVudFRhcmdldCIsInJvdyIsIkRhdGFUYWJsZSIsInBhcmVudHMiLCJyb3dEYXRhIiwiZGF0YSIsImFqYXhEYXRhIiwiYWpheFVybCIsInJlcGxhY2UiLCJpZCIsIl90b2tlbiIsInZhbCIsImFqYXgiLCJ1cmwiLCJtZXRob2QiLCJzdWNjZXNzIiwicmVtb3ZlIiwiZHJhdyIsImluaXRWaWV3TGlzdCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGFUYWJsZVByaWNlTGlzdCIsImxhbmd1YWdlIiwicmVuZGVyIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImFyZ3VtZW50cyIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImF0dHIiLCJpbml0IiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJkYXRlcGlja2VyIiwiZGF0ZUZvcm1hdCIsIm9uU2VsZWN0IiwiZGF0ZVRleHQiLCJjb25zb2xlIiwibG9nIiwicmVwbGFjZUFsbCIsIkZvcm1EYXRhIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiYXBwZW5kIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJwcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlIiwiZXJyb3IiLCJyZXNwb25zZUpTT04iLCJhamF4RXJyb3JGaWVsZEhhbmRsZXIiLCJoaWRlIiwiZ2V0T3B0cyIsInByaWNlTGlzdEhhc0Vycm9yIiwicmVzcG9uc2VEYXRhIiwicHJvY2Vzc0NoZWNrZWRQcmljZUxpc3RSZXNwb25zZVJvd3MiLCJyb3dzIiwic2hvdyIsInJlc3BvbnNlUm93c0RhdGEiLCJrZXkiLCJ0ZW1wbGF0ZURhdGEiLCJvcmlnaW5hbERhdGEiLCJyb3dOdW0iLCJ0ZW1wbGF0ZSIsImh0bWwiLCJNdXN0YWNoZSIsInVjRmlyc3QiLCJwcm9jZXNzUmVzcG9uc2VSb3dFcnJvcnMiLCJjaGFuZ2VkIiwicHJvY2Vzc1Jlc3BvbnNlUm93Q2hhbmdlZCIsImNoYW5nZWRBcnJheSIsInRyTm9kZSIsInRkTm9kZSIsImZpbmQiLCJjaGFuZ2VkVHh0Tm9kZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm9sZCIsImVycm9yQXJyYXkiLCJmaWVsZHMiLCJlcnJvclR4dE5vZGUiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3ByaWNlTGlzdC5qcz9jYWQ2Il0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5QcmljZUxpc3RBZG1pbj1mdW5jdGlvbiAob3B0aW9ucyxQcm9maXRDZW50ZXJJdGVtKSB7XHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOlwiLnByaWNlTGlzdEZvcm1cIixcclxuICAgICAgICB0ZXN0RmlsZU1vZDpmYWxzZSxcclxuICAgICAgICBVUkw6e1xyXG4gICAgICAgICAgICBjcmVhdGU6JycsXHJcbiAgICAgICAgICAgIHN0b3JlOicnLFxyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxyXG4gICAgICAgICAgICBkZXN0cm95OicnLFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgUHJpY2VMaXN0ID0ge307XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9bnVsbDtcclxuXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgZGVidWcoJ1ByaWNlTGlzdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgZXJyb3JSb3dQb2ludGVyPW51bGw7XHJcbiAgICBsZXQgZXJyb3JSb3dDb3VudD0wO1xyXG5cclxuICAgIHRoaXMuaW5pdEVycm9yTmF2aWdhdGlvbkJ1dHRvbj1mdW5jdGlvbiAoKXtcclxuXHJcbiAgICAgICAgZXJyb3JSb3dDb3VudD0kKCcuc3RhdHVzRXJyb3InKS5sZW5ndGg7XHJcbiAgICAgICAgZXJyb3JSb3dQb2ludGVyPW51bGw7XHJcbiAgICAgICAgJCgnLnByaWNlTGlzdEZvcm0gLmJ1dHRvblByZXZFcnJvciAuYnV0dG9uTmV4dEVycm9yJykub2ZmKCdjbGljaycpXHJcbiAgICAgICAgJCgnLnByaWNlTGlzdEZvcm0gLmJ1dHRvblByZXZFcnJvcicpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGlmKGVycm9yUm93UG9pbnRlcj09bnVsbCl7XHJcbiAgICAgICAgICAgICAgICBlcnJvclJvd1BvaW50ZXI9MDtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI+MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyLS07XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm47fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoJy5zdGF0dXNFcnJvcicpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHRlZEVycm9yUm93Jyk7XHJcbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZVdyYXBwZXInKS5zY3JvbGxUb3AoJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5wb3NpdGlvbigpLnRvcCk7XHJcbiAgICAgICAgICAgICQoJCgnLnN0YXR1c0Vycm9yJylbZXJyb3JSb3dQb2ludGVyXSkuYWRkQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKCcucHJpY2VMaXN0Rm9ybSAuYnV0dG9uTmV4dEVycm9yJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5wcmljZUxpc3RGb3JtIC5idXR0b25OZXh0RXJyb3InKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBpZihlcnJvclJvd1BvaW50ZXI9PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyPTA7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoZXJyb3JSb3dQb2ludGVyPGVycm9yUm93Q291bnQtMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSb3dQb2ludGVyKys7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm47fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoJy5zdGF0dXNFcnJvcicpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHRlZEVycm9yUm93Jyk7XHJcbiAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZVdyYXBwZXInKS5zY3JvbGxUb3AoJCgkKCcuc3RhdHVzRXJyb3InKVtlcnJvclJvd1BvaW50ZXJdKS5wb3NpdGlvbigpLnRvcCk7XHJcbiAgICAgICAgICAgICQoJCgnLnN0YXR1c0Vycm9yJylbZXJyb3JSb3dQb2ludGVyXSkuYWRkQ2xhc3MoJ2hpZ2hsaWdodGVkRXJyb3JSb3cnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGU9ZnVuY3Rpb24gKGZpbGVJbnB1dCl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXQuYXR0cignbmFtZScpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXS5uYW1lKTtcclxuICAgICAgICAqL1xyXG4gICAgICAgIGlmKGZpbGVJbnB1dCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXNbMF0pe1xyXG4gICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkRmlsZU5hbWUnKS50ZXh0KGZpbGVJbnB1dFswXS5maWxlc1swXS5uYW1lKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWRTdGFydGVkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRTcGlubmVyJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcblxyXG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgPiB0Ym9keScpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3UHJpY2VMaXN0Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWNrTmV3UHJpY2VMaXN0PWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld1ByaWNlTGlzdENhbGxCYWNrKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2s9ZnVuY3Rpb24oZXZlbnQpe1xyXG4gICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICBsZXQgcm93RGF0YT1yb3cuZGF0YSgpO1xyXG4gICAgICAgIC8vX3Rva2VuXHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIH0pO1xyXG4vKlxyXG4qL1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3UHJpY2VMaXN0LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICBBUFAuZGF0YVRhYmxlUHJpY2VMaXN0PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgLy8nY3JlYXRlU3RhdGUnLCAnc2F2ZWRTdGF0ZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdleGNlbCcsJ3BkZicsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGV4dDogJ1ByaW50IGN1cnJlbnQgcGFnZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1ByaW50OiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAvKiovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ8OaaiBmZWx2aXRlbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLXN1Y2Nlc3MgbmV3SXRlbScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYToxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOjJcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzonbmV3SXRlbSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oYXBpLCBub2RlLCBjb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQobm9kZSkucmVtb3ZlQ2xhc3MoJ3VpLWJ1dHRvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKCBlLCBkdCwgbm9kZSwgY29uZmlnICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGR0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb25maWcpOyovXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImF2YWlsYWJsZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJub3RlXCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRlUGlja2VyQ2xpY2snKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXJDbGljaycpLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKCdzaG93Jyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRlUGlja2VyJykuZGF0ZXBpY2tlcih7XHJcbiAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsXHJcbiAgICAgICAgICAgIG9uU2VsZWN0OmZ1bmN0aW9uIChkYXRlVGV4dCl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAkKCcuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsJy4nKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJCgnaW5wdXRbbmFtZT1cImF2YWlsYWJsZURhdGVcIl0nKS52YWwoZGF0ZVRleHQpO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25OZXdVcGxvYWQnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvbk5ld1VwbG9hZCcpLm9uKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tLScpO1xyXG4gICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKCcucHJpY2VMaXN0Rm9ybScpWzBdKTtcclxuICAgICAgICAgICAgaWYoJCgnLnN1cHBsaWVyU2VsZWN0JykudmFsKCkubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiSGliYSFcIiwgbWVzc2FnZTogJ0Fkam9uIG1lZyBiZXN6w6FsbMOtdMOzdCEnLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDEwMDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBQcmljZUxpc3RGaWxlJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSk7XHJcblxyXG4gICAgICAgICAgICAvKiB0ZXN6dGVsZXMgbWlhdHQga2lrYXBjc29sdmEgYSBmYWpsIGVsbGVub3J6ZXNcclxuICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYoIU9wdHMudGVzdEZpbGVNb2Qpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzLmxlbmd0aDwxKTtcclxuICAgICAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSl7XHJcbiAgICAgICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiSGliYSFcIiwgbWVzc2FnZTogJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUiwgdGltZW91dDogMTAwMDAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcblxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25GaW5hbGl6YXRpb24nKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoJy5wcmljZUxpc3RGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwUHJpY2VMaXN0RmlsZScpO1xyXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmaWxlSW5wdXQuYXR0cignbmFtZScpLGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKCdmaW5hbGl6YXRpb24nLDEpO1xyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOk9wdHMuVVJMLnN0b3JlLFxyXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICAgICAgdHlwZTonUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnByaWNlTGlzdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cgPi5jYW5GaW5pc2gnKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5wcmljZUxpc3RUYWJsZSB0Ym9keScpLmFwcGVuZCgnPHRyPjx0ZCBjb2xzcGFuPVwiOTlcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZm9udC1zaXplOiAyZW07XCI+IMOBcmxpc3TDoXQgZWxtZW50ZXR0w7xrLjwvdGQ+PC90cj4nKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290LnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2UoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1ByaWNlTGlzdEFkbWluIGluaXQgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ09wdCBleHRlbmRlZCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKE9wdHMpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgSW5pdCBsaXN0IHZpZXdcclxuICAgICAgICAqL1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsIGxpc3QgdmlldyBJbml0Jyk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3Qob3B0aW9ucyk7XHJcblxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuICAgIGxldCBwcmljZUxpc3RIYXNFcnJvcj1mYWxzZTtcclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2U9ZnVuY3Rpb24gKHJlc3BvbnNlRGF0YSl7XHJcbiAgICAgICAgcHJpY2VMaXN0SGFzRXJyb3I9ZmFsc2U7XHJcbiAgICAgICAgcm9vdC5wcm9jZXNzQ2hlY2tlZFByaWNlTGlzdFJlc3BvbnNlUm93cyhyZXNwb25zZURhdGEucm93cyk7XHJcbiAgICAgICAgaWYocHJpY2VMaXN0SGFzRXJyb3Ipe1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuaGlkZSgpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5zaG93KCk7XHJcbiAgICAgICAgICAgIHJvb3QuaW5pdEVycm9yTmF2aWdhdGlvbkJ1dHRvbigpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoJykuc2hvdygpO1xyXG4gICAgICAgICAgICAkKCcudXBsb2FkU3RhdHVzUm93ID4uY2FuRmluaXNoRXJyb3InKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgJCgnLmNvbnRhaW5lclVwbG9hZGVkU3Bpbm5lcicpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2Nlc3NDaGVja2VkUHJpY2VMaXN0UmVzcG9uc2VSb3dzPWZ1bmN0aW9uIChyZXNwb25zZVJvd3NEYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJvY2Vzc2luZ1Jvd3MnKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcmVzcG9uc2VSb3dzRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YT1yZXNwb25zZVJvd3NEYXRhW2tleV07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZURhdGE9cm93RGF0YS5vcmlnaW5hbERhdGE7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRGF0YS5yb3dOdW09cm93RGF0YS5yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcmljZUxpc3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSx0ZW1wbGF0ZURhdGEpO1xyXG4gICAgICAgICAgICAkKCcucHJpY2VMaXN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgJCgndHJbZGF0YS1yb3dudW09Jytyb3dEYXRhLnJvd051bSsnXScpLmFkZENsYXNzKCdzdGF0dXMnKyQudWNGaXJzdChyb3dEYXRhLnN0YXR1cykpO1xyXG4gICAgICAgICAgICByb290LnByb2Nlc3NSZXNwb25zZVJvd0Vycm9ycyhyb3dEYXRhLmVycm9yLHJvd0RhdGEucm93TnVtKTtcclxuICAgICAgICAgICAgaWYocm93RGF0YS5jaGFuZ2VkKXtcclxuICAgICAgICAgICAgICAgIHJvb3QucHJvY2Vzc1Jlc3BvbnNlUm93Q2hhbmdlZChyb3dEYXRhLmNoYW5nZWQscm93RGF0YS5yb3dOdW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dDaGFuZ2VkPWZ1bmN0aW9uIChjaGFuZ2VkQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihjaGFuZ2VkQXJyYXkubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYW5nZWRBcnJheSk7XHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGxldCB0ck5vZGU9JCgndHJbZGF0YS1yb3dudW09Jytyb3dOdW0rJ10nKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gY2hhbmdlZEFycmF5KSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1wcmltYXJ5Jyk7XHJcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGNoYW5nZWRBcnJheVtrZXldLm9sZCkuYWRkQ2xhc3MoJ2ZpZWxkQ2hhbmdlZCcpO1xyXG4gICAgICAgICAgICB0ZE5vZGUuYXBwZW5kKGNoYW5nZWRUeHROb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUmVzcG9uc2VSb3dFcnJvcnM9ZnVuY3Rpb24gKGVycm9yQXJyYXkscm93TnVtKXtcclxuICAgICAgICBpZihlcnJvckFycmF5Lmxlbmd0aDwxKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2dlbmVyYWwgZXJyb3IgcmVzelxyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yQXJyYXkpO1xyXG4gICAgICAgIHByaWNlTGlzdEhhc0Vycm9yID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy9maWVsZHMgZXJyb3IgcmVzelxyXG4gICAgICAgIGlmKHR5cGVvZiBlcnJvckFycmF5LmZpZWxkcyA9PSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdHJOb2RlPSQoJ3RyW2RhdGEtcm93bnVtPScrcm93TnVtKyddJyk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGVycm9yQXJyYXkuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZE5vZGU9dHJOb2RlLmZpbmQoJ3RkW2RhdGEtcG9pbnRlcj1cIicra2V5KydcIl0nKTtcclxuICAgICAgICAgICAgdGROb2RlLmFkZENsYXNzKCdiZy1kYW5nZXInKTtcclxuICAgICAgICAgICAgbGV0IGVycm9yVHh0Tm9kZT0kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKS50ZXh0KGVycm9yQXJyYXkuZmllbGRzW2tleV0pLmFkZENsYXNzKCdmaWVsZEVycm9yJyk7XHJcbiAgICAgICAgICAgIHRkTm9kZS5hcHBlbmQoZXJyb3JUeHROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLE1BQU0sQ0FBQ0MsY0FBYyxHQUFDLFVBQVVDLE9BQU8sRUFBQ0MsZ0JBQWdCLEVBQUU7RUFDdEQ7QUFDSjtBQUNBO0FBQ0E7RUFDSSxJQUFJQyxJQUFJLEdBQUc7SUFDUEMsTUFBTSxFQUFFLEtBQUs7SUFDYkMsb0JBQW9CLEVBQUMsZ0JBQWdCO0lBQ3JDQyxXQUFXLEVBQUMsS0FBSztJQUNqQkMsR0FBRyxFQUFDO01BQ0FDLE1BQU0sRUFBQyxFQUFFO01BQ1RDLEtBQUssRUFBQyxFQUFFO01BQ1JDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLE9BQU8sRUFBQztJQUNaO0VBQ0osQ0FBQztFQUNELElBQUlDLFNBQVMsR0FBRyxDQUFDLENBQUM7RUFDbEIsSUFBSUMsSUFBSSxHQUFHLElBQUk7RUFDZixJQUFJQyxvQkFBb0IsR0FBQyxJQUFJOztFQUk3QjtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUNDLFNBQVMsR0FBRyxVQUFVZCxPQUFPLEVBQUU7SUFDaENlLEtBQUssQ0FBQyxt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\n//# sourceURL=webpack-internal:///./resources/js/admin/priceList.js\n\n}");
|
|
|
|
/***/ },
|
|
|
|
/***/ "./resources/js/admin/priceListProfitCenter.js"
|
|
/*!*****************************************************!*\
|
|
!*** ./resources/js/admin/priceListProfitCenter.js ***!
|
|
\*****************************************************/
|
|
() {
|
|
|
|
eval("{window.PriceListProfitCenterAdmin = function (options) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerPriceListProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n getProductGroupHTML: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var root = this;\n /*\n * Constructor\n */\n this.construct = function (options, SupplierItem) {\n console.log('PriceListProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n var changeParameter = {\n supplier: '',\n deliveryDate: ''\n /*\n supplier:26,\n deliveryDate:'2023-09-10',\n */\n };\n this.checkRefreshPossible = function () {\n console.log('check need parameter');\n var needRefresh = true;\n $.each(changeParameter, function (name, data) {\n if (data === '') {\n needRefresh = false;\n }\n });\n if (needRefresh) {\n root.refreshDatatable();\n root.refreshProductGroup();\n root.setDatatableHeaderText('');\n }\n };\n this.setDatatableHeaderText = function (text) {\n $('.tableHeaderText').text(text);\n };\n this.getTreePathName = function (node) {\n var res = '';\n var items = $(node).parents('li').toArray();\n items.shift();\n items.reverse();\n for (var item in items) {\n if ($(items[item]).children('a.categoryItem').length > 0) {\n res += $(items[item]).children('a.categoryItem').text() + '/';\n }\n }\n res += $(node).text();\n return res;\n };\n this.bindProductGroupItem = function () {\n $('.sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').off('click');\n $('.sidebar-menu .sidebar-dropdown .sidebar-submenu li a.categoryItem.clickable').on('click', function () {\n var groupId = $(this).data('id');\n selectedProductGroup = groupId;\n root.setDatatableHeaderText(root.getTreePathName(this));\n /*\n console.log(groupId);\n console.log(root.getTreePathName(this));\n */\n root.refreshDatatable();\n });\n };\n this.refreshProductGroup = function () {\n var ajaxData = {\n 'supplierId': changeParameter.supplier,\n 'deliveryDate': changeParameter.deliveryDate\n };\n var ajaxUrl = Opts.URL.getProductGroupHTML;\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: 'GET',\n contentType: false,\n processData: true,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n $('.sidebar-menu .productGroup').find('ul').html(data);\n root.bindProductGroupItem();\n },\n error: function error(data) {\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.refreshDatatable = function () {\n $('.dataTableOrderProductSelect').DataTable().ajax.reload();\n };\n this.changePriceListProfitCenterParameter = function (e, obj) {\n if (typeof obj == 'undefined') {\n obj = $(this);\n }\n var objName = obj.attr(\"name\");\n if (objName == 'supplier') {\n selectedProductGroup = null;\n }\n var data = '';\n if (obj.get(0).nodeName == 'SELECT') {\n if (obj.select2('data').length > 0) {\n data = obj.select2('data')[0].id;\n }\n ;\n } else {\n data = obj.val();\n }\n if (changeParameter[objName] != data) {\n changeParameter[objName] = data;\n root.checkRefreshPossible();\n }\n };\n this.init = function (options) {\n $.extend(Opts, options);\n var CSSSelectorForm = Opts.containerCssSelector;\n $(CSSSelectorForm + ' .datePickerClick').click(function () {\n $(CSSSelectorForm + ' .datePicker').datepicker('show');\n });\n $('.supplierSelect').on('change', root.changePriceListProfitCenterParameter);\n\n //$('input[name=\"deliveryDate\"]').on('change',changePriceListProfitCenterParameter);\n\n $(\".supplierSelect\").select2({\n maximumSelectionLength: 1\n });\n /*\n */\n\n $(CSSSelectorForm + ' .datePicker').datepicker({\n dateFormat: 'yy-mm-dd',\n minDate: new Date(),\n onSelect: function onSelect(dateText, obj) {\n $(CSSSelectorForm + ' .selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n $(CSSSelectorForm + ' input[name=\"deliveryDate\"]').val(dateText);\n root.changePriceListProfitCenterParameter(null, $(obj.input));\n }\n });\n //root.initViewList();\n var table = root.getDatatables('');\n $('.dataTableOrderProductSelect').on('draw.dt', root.productSelectDataTableDrawDT).dataTable();\n /*\n /!*\n ----------------------------------------------------------\n Add event listener for opening and closing details\n *!/\n $('.dataTableOrderProductSelect tbody').on('click', 'td.details-control', function () {\n let tr = $(this).closest('tr');\n let row = table.row( tr );\n if ( row.child.isShown() ) {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n }\n else {\n // Open this row\n row.child( root.productSelectDatatablesRowFormatter(row.data()) ).show();\n tr.addClass('shown');\n root.bindProductDetailsAction();\n }\n } );*/\n };\n this.productSelectDataTableDrawDT = function (e) {\n //debug( 'Table draw complete: '+new Date().getTime() );\n\n $('td:contains(\"*\")').html('<i class=\"bi bi-check-circle-fill\"></i>');\n $('td.details-control').removeClass('details-control');\n };\n var selectedProductGroup = null;\n this.getDatatables = function (orderType) {\n var columns = APP.OrderModule.productSelectDataTableColumn();\n var lastCol = columns[columns.length - 1];\n lastCol.render = function (data, type, row) {\n if (row.stock_status === 'out_of_stock') {\n return '<i class=\"bi bi-x-circle-fill\" title=\"Nincs raktáron\" style=\"color:#dc3545;\"></i>';\n }\n return '<i class=\"bi bi-check-circle-fill\" title=\"Raktáron\" style=\"color:#28a745;\"></i>';\n };\n var table = $('.dataTableOrderProductSelect').DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContent,\n data: function data(_data) {\n /*\n data.searchStr=dataTableSearchStr;\n data.krel=dataTableSearchKrel;\n data.groupId=selectedProductGroup;\n */\n _data.supplierId = changeParameter.supplier;\n _data.deliveryDate = changeParameter.deliveryDate;\n _data.groupId = selectedProductGroup;\n }\n },\n buttons: {\n buttons: []\n },\n \"columnDefs\": APP.OrderModule.productSelectDataTableColumnDefs(),\n \"columns\": columns,\n \"order\": [[1, 'asc']]\n });\n return table;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJpY2VMaXN0UHJvZml0Q2VudGVyLmpzIiwibmFtZXMiOlsid2luZG93IiwiUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW4iLCJvcHRpb25zIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJnZXRQcm9kdWN0R3JvdXBIVE1MIiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb25zdHJ1Y3QiLCJTdXBwbGllckl0ZW0iLCJjb25zb2xlIiwibG9nIiwiJCIsImV4dGVuZCIsImdldE9wdHMiLCJjaGFuZ2VQYXJhbWV0ZXIiLCJzdXBwbGllciIsImRlbGl2ZXJ5RGF0ZSIsImNoZWNrUmVmcmVzaFBvc3NpYmxlIiwibmVlZFJlZnJlc2giLCJlYWNoIiwibmFtZSIsImRhdGEiLCJyZWZyZXNoRGF0YXRhYmxlIiwicmVmcmVzaFByb2R1Y3RHcm91cCIsInNldERhdGF0YWJsZUhlYWRlclRleHQiLCJ0ZXh0IiwiZ2V0VHJlZVBhdGhOYW1lIiwibm9kZSIsInJlcyIsIml0ZW1zIiwicGFyZW50cyIsInRvQXJyYXkiLCJzaGlmdCIsInJldmVyc2UiLCJpdGVtIiwiY2hpbGRyZW4iLCJsZW5ndGgiLCJiaW5kUHJvZHVjdEdyb3VwSXRlbSIsIm9mZiIsIm9uIiwiZ3JvdXBJZCIsInNlbGVjdGVkUHJvZHVjdEdyb3VwIiwiYWpheERhdGEiLCJhamF4VXJsIiwiYWpheCIsInVybCIsInR5cGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInN1Y2Nlc3MiLCJmaW5kIiwiaHRtbCIsImVycm9yIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwicmVzcG9uc2VKU09OIiwiRGF0YVRhYmxlIiwicmVsb2FkIiwiY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyIiwiZSIsIm9iaiIsIm9iak5hbWUiLCJhdHRyIiwiZ2V0Iiwibm9kZU5hbWUiLCJzZWxlY3QyIiwiaWQiLCJ2YWwiLCJpbml0IiwiQ1NTU2VsZWN0b3JGb3JtIiwiY2xpY2siLCJkYXRlcGlja2VyIiwibWF4aW11bVNlbGVjdGlvbkxlbmd0aCIsImRhdGVGb3JtYXQiLCJtaW5EYXRlIiwiRGF0ZSIsIm9uU2VsZWN0IiwiZGF0ZVRleHQiLCJyZXBsYWNlQWxsIiwiaW5wdXQiLCJ0YWJsZSIsImdldERhdGF0YWJsZXMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUIiwicmVtb3ZlQ2xhc3MiLCJvcmRlclR5cGUiLCJjb2x1bW5zIiwiQVBQIiwiT3JkZXJNb2R1bGUiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uIiwibGFzdENvbCIsInJlbmRlciIsInJvdyIsInN0b2NrX3N0YXR1cyIsImxhbmd1YWdlIiwic3VwcGxpZXJJZCIsImJ1dHRvbnMiLCJwcm9kdWN0U2VsZWN0RGF0YVRhYmxlQ29sdW1uRGVmcyJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3ByaWNlTGlzdFByb2ZpdENlbnRlci5qcz8xY2JhIl0sInNvdXJjZXNDb250ZW50IjpbIndpbmRvdy5QcmljZUxpc3RQcm9maXRDZW50ZXJBZG1pbj1mdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8qXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcbiAgICAgKiBpbiB0aGUgY2xhc3NcbiAgICAgKi9cbiAgICBsZXQgT3B0cyA9IHtcbiAgICAgICAgdG9rZW46IG51bGwsXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByaWNlTGlzdFByb2ZpdENlbnRlcicsXG4gICAgICAgIHRlc3RNb2RlOiBmYWxzZSxcbiAgICAgICAgVVJMOiB7XG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcbiAgICAgICAgICAgIGdldFByb2R1Y3RHcm91cEhUTUw6ICcnLFxuICAgICAgICAgICAgaW5kZXg6ICcnLFxuICAgICAgICAgICAgc2hvdzogJycsXG4gICAgICAgICAgICBlZGl0OiAnJyxcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXG4gICAgICAgICAgICBzdG9yZTogJycsXG4gICAgICAgICAgICB1cGRhdGU6ICcnLFxuICAgICAgICAgICAgZGVzdHJveTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFUYWJsZToge1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ11cbiAgICAgICAgfSxcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczogZnVuY3Rpb24gKCkge1xuICAgICAgICB9XG4gICAgfTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgLypcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24gKG9wdGlvbnMsIFN1cHBsaWVySXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJpY2VMaXN0UHJvZml0Q2VudGVyQWRtaW4gY29uc3RydWN0b3IgY2FsbGVkJyk7XG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgbGV0IGNoYW5nZVBhcmFtZXRlcj17XG4gICAgICAgIHN1cHBsaWVyOicnLFxuICAgICAgICBkZWxpdmVyeURhdGU6JycsXG4gICAgICAgIC8qXG4gICAgICAgIHN1cHBsaWVyOjI2LFxuICAgICAgICBkZWxpdmVyeURhdGU6JzIwMjMtMDktMTAnLFxuICAgICAgICAqL1xuXG4gICAgfVxuXG4gICAgdGhpcy5jaGVja1JlZnJlc2hQb3NzaWJsZT1mdW5jdGlvbiAoKXtcbiAgICAgICAgY29uc29sZS5sb2coJ2NoZWNrIG5lZWQgcGFyYW1ldGVyJyk7XG4gICAgICAgIGxldCBuZWVkUmVmcmVzaD10cnVlO1xuICAgICAgICAkLmVhY2goY2hhbmdlUGFyYW1ldGVyLGZ1bmN0aW9uIChuYW1lLGRhdGEpe1xuICAgICAgICAgICAgaWYoZGF0YT09PScnKXtcbiAgICAgICAgICAgICAgICBuZWVkUmVmcmVzaD1mYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmKG5lZWRSZWZyZXNoKXtcbiAgICAgICAgICAgIHJvb3QucmVmcmVzaERhdGF0YWJsZSgpXG4gICAgICAgICAgICByb290LnJlZnJlc2hQcm9kdWN0R3JvdXAoKTtcbiAgICAgICAgICAgIHJvb3Quc2V0RGF0YXRhYmxlSGVhZGVyVGV4dCgnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXREYXRhdGFibGVIZWFkZXJUZXh0PWZ1bmN0aW9uKHRleHQpe1xuICAgICAgICAkKCcudGFibGVIZWFkZXJUZXh0JykudGV4dCh0ZXh0KTtcbiAgICB9XG5cbiAgICB0aGlzLmdldFRyZWVQYXRoTmFtZT1mdW5jdGlvbiAobm9kZSl7XG4gICAgICAgIGxldCByZXM9Jyc7XG4gICAgICAgIGxldCBpdGVtcz0kKG5vZGUpLnBhcmVudHMoJ2xpJykudG9BcnJheSgpO1xuICAgICAgICBpdGVtcy5zaGlmdCgpO1xuICAgICAgICBpdGVtcy5yZXZlcnNlKCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBpbiBpdGVtcykge1xuICAgICAgICAgICAgaWYoJChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgIHJlcys9JChpdGVtc1tpdGVtXSkuY2hpbGRyZW4oJ2EuY2F0ZWdvcnlJdGVtJykudGV4dCgpKycvJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlcys9JChub2RlKS50ZXh0KCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kUHJvZHVjdEdyb3VwSXRlbT1mdW5jdGlvbigpe1xuICAgICAgICAkKCcuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCcuc2lkZWJhci1tZW51IC5zaWRlYmFyLWRyb3Bkb3duIC5zaWRlYmFyLXN1Ym1lbnUgbGkgYS5jYXRlZ29yeUl0ZW0uY2xpY2thYmxlJykub24oJ2NsaWNrJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3JvdXBJZD0kKHRoaXMpLmRhdGEoJ2lkJyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9Z3JvdXBJZDtcbiAgICAgICAgICAgICAgICByb290LnNldERhdGF0YWJsZUhlYWRlclRleHQocm9vdC5nZXRUcmVlUGF0aE5hbWUodGhpcykpO1xuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZ3JvdXBJZCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5nZXRUcmVlUGF0aE5hbWUodGhpcykpO1xuICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgcm9vdC5yZWZyZXNoRGF0YXRhYmxlKCk7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFByb2R1Y3RHcm91cD1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IGFqYXhEYXRhPXtcbiAgICAgICAgICAgICdzdXBwbGllcklkJzpjaGFuZ2VQYXJhbWV0ZXIuc3VwcGxpZXIsXG4gICAgICAgICAgICAnZGVsaXZlcnlEYXRlJzpjaGFuZ2VQYXJhbWV0ZXIuZGVsaXZlcnlEYXRlXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZ2V0UHJvZHVjdEdyb3VwSFRNTDtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIHR5cGU6J0dFVCcsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiB0cnVlLFxuICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgJCgnLnNpZGViYXItbWVudSAucHJvZHVjdEdyb3VwJykuZmluZCgndWwnKS5odG1sKGRhdGEpO1xuICAgICAgICAgICAgICAgIHJvb3QuYmluZFByb2R1Y3RHcm91cEl0ZW0oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoRGF0YXRhYmxlPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0JykuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICB9XG5cblxuICAgIHRoaXMuY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyPWZ1bmN0aW9uKGUsb2JqKXtcbiAgICAgICAgaWYodHlwZW9mIG9iaiA9PSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgIG9iaj0kKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvYmpOYW1lPW9iai5hdHRyKFwibmFtZVwiKTtcbiAgICAgICAgaWYob2JqTmFtZT09J3N1cHBsaWVyJyl7XG4gICAgICAgICAgICBzZWxlY3RlZFByb2R1Y3RHcm91cD1udWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhPScnO1xuICAgICAgICBpZihvYmouZ2V0KDApLm5vZGVOYW1lPT0nU0VMRUNUJyl7XG4gICAgICAgICAgICBpZihvYmouc2VsZWN0MignZGF0YScpLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICBkYXRhPW9iai5zZWxlY3QyKCdkYXRhJylbMF0uaWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGRhdGE9b2JqLnZhbCgpXG4gICAgICAgIH1cbiAgICAgICAgaWYoY2hhbmdlUGFyYW1ldGVyW29iak5hbWVdIT1kYXRhKXtcbiAgICAgICAgICAgIGNoYW5nZVBhcmFtZXRlcltvYmpOYW1lXT1kYXRhO1xuICAgICAgICAgICAgcm9vdC5jaGVja1JlZnJlc2hQb3NzaWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0PWZ1bmN0aW9uIChvcHRpb25zKXtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcjtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuZGF0ZVBpY2tlckNsaWNrJykuY2xpY2soZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmRhdGVQaWNrZXInKS5kYXRlcGlja2VyKCdzaG93Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJy5zdXBwbGllclNlbGVjdCcpLm9uKCdjaGFuZ2UnLHJvb3QuY2hhbmdlUHJpY2VMaXN0UHJvZml0Q2VudGVyUGFyYW1ldGVyKTtcblxuICAgICAgICAvLyQoJ2lucHV0W25hbWU9XCJkZWxpdmVyeURhdGVcIl0nKS5vbignY2hhbmdlJyxjaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIpO1xuXG5cbiAgICAgICAgJChcIi5zdXBwbGllclNlbGVjdFwiKS5zZWxlY3QyKHtcbiAgICAgICAgICAgIG1heGltdW1TZWxlY3Rpb25MZW5ndGg6IDEsXG4gICAgICAgIH0pO1xuICAgICAgICAvKlxuICAgICAgICAqL1xuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuZGF0ZVBpY2tlcicpLmRhdGVwaWNrZXIoe1xuICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJyxcbiAgICAgICAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKGRhdGVUZXh0LG9iaikge1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyAuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xuICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtICsgJyBpbnB1dFtuYW1lPVwiZGVsaXZlcnlEYXRlXCJdJykudmFsKGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICByb290LmNoYW5nZVByaWNlTGlzdFByb2ZpdENlbnRlclBhcmFtZXRlcihudWxsLCQob2JqLmlucHV0KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgLy9yb290LmluaXRWaWV3TGlzdCgpO1xuICAgICAgICBsZXQgdGFibGUgPSByb290LmdldERhdGF0YWJsZXMoJycpO1xuICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0Jykub24oICdkcmF3LmR0Jyxyb290LnByb2R1Y3RTZWxlY3REYXRhVGFibGVEcmF3RFQpLmRhdGFUYWJsZSgpO1xuICAgICAgICAvKlxuICAgICAgICAgIC8hKlxuICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgQWRkIGV2ZW50IGxpc3RlbmVyIGZvciBvcGVuaW5nIGFuZCBjbG9zaW5nIGRldGFpbHNcbiAgICAgICAgICAgKiEvXG5cbiAgICAgICAgICAkKCcuZGF0YVRhYmxlT3JkZXJQcm9kdWN0U2VsZWN0IHRib2R5Jykub24oJ2NsaWNrJywgJ3RkLmRldGFpbHMtY29udHJvbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgbGV0IHRyID0gJCh0aGlzKS5jbG9zZXN0KCd0cicpO1xuICAgICAgICAgICAgICBsZXQgcm93ID0gdGFibGUucm93KCB0ciApO1xuXG4gICAgICAgICAgICAgIGlmICggcm93LmNoaWxkLmlzU2hvd24oKSApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcm93IGlzIGFscmVhZHkgb3BlbiAtIGNsb3NlIGl0XG4gICAgICAgICAgICAgICAgICByb3cuY2hpbGQuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgdHIucmVtb3ZlQ2xhc3MoJ3Nob3duJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBPcGVuIHRoaXMgcm93XG4gICAgICAgICAgICAgICAgICByb3cuY2hpbGQoIHJvb3QucHJvZHVjdFNlbGVjdERhdGF0YWJsZXNSb3dGb3JtYXR0ZXIocm93LmRhdGEoKSkgKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICB0ci5hZGRDbGFzcygnc2hvd24nKTtcbiAgICAgICAgICAgICAgICAgIHJvb3QuYmluZFByb2R1Y3REZXRhaWxzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICk7Ki9cbiAgICB9XG4gICAgdGhpcy5wcm9kdWN0U2VsZWN0RGF0YVRhYmxlRHJhd0RUPWZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vZGVidWcoICdUYWJsZSBkcmF3IGNvbXBsZXRlOiAnK25ldyBEYXRlKCkuZ2V0VGltZSgpICk7XG5cbiAgICAgICAgJCgndGQ6Y29udGFpbnMoXCIqXCIpJykuaHRtbCgnPGkgY2xhc3M9XCJiaSBiaS1jaGVjay1jaXJjbGUtZmlsbFwiPjwvaT4nKTtcbiAgICAgICAgJCgndGQuZGV0YWlscy1jb250cm9sJykucmVtb3ZlQ2xhc3MoJ2RldGFpbHMtY29udHJvbCcpO1xuXG5cblxuICAgIH1cbiAgICBsZXQgc2VsZWN0ZWRQcm9kdWN0R3JvdXA9bnVsbDtcblxuICAgIHRoaXMuZ2V0RGF0YXRhYmxlcz1mdW5jdGlvbiAob3JkZXJUeXBlKXtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBBUFAuT3JkZXJNb2R1bGUucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbigpO1xuICAgICAgICBsZXQgbGFzdENvbCA9IGNvbHVtbnNbY29sdW1ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGFzdENvbC5yZW5kZXIgPSBmdW5jdGlvbiAoZGF0YSwgdHlwZSwgcm93KSB7XG4gICAgICAgICAgICBpZiAocm93LnN0b2NrX3N0YXR1cyA9PT0gJ291dF9vZl9zdG9jaycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzxpIGNsYXNzPVwiYmkgYmkteC1jaXJjbGUtZmlsbFwiIHRpdGxlPVwiTmluY3MgcmFrdMOhcm9uXCIgc3R5bGU9XCJjb2xvcjojZGMzNTQ1O1wiPjwvaT4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICc8aSBjbGFzcz1cImJpIGJpLWNoZWNrLWNpcmNsZS1maWxsXCIgdGl0bGU9XCJSYWt0w6Fyb25cIiBzdHlsZT1cImNvbG9yOiMyOGE3NDU7XCI+PC9pPic7XG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHRhYmxlID0gJCgnLmRhdGFUYWJsZU9yZGVyUHJvZHVjdFNlbGVjdCcpLkRhdGFUYWJsZSgge1xuICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXG4gICAgICAgICAgICBcImFqYXhcIjoge1xuICAgICAgICAgICAgICAgIHVybDpPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxuICAgICAgICAgICAgICAgIGRhdGE6ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zZWFyY2hTdHI9ZGF0YVRhYmxlU2VhcmNoU3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmtyZWw9ZGF0YVRhYmxlU2VhcmNoS3JlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5ncm91cElkPXNlbGVjdGVkUHJvZHVjdEdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnN1cHBsaWVySWQ9Y2hhbmdlUGFyYW1ldGVyLnN1cHBsaWVyO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmRlbGl2ZXJ5RGF0ZT1jaGFuZ2VQYXJhbWV0ZXIuZGVsaXZlcnlEYXRlO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmdyb3VwSWQ9c2VsZWN0ZWRQcm9kdWN0R3JvdXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBBUFAuT3JkZXJNb2R1bGUucHJvZHVjdFNlbGVjdERhdGFUYWJsZUNvbHVtbkRlZnMoKSxcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBjb2x1bW5zLFxuICAgICAgICAgICAgXCJvcmRlclwiOiBbWzEsICdhc2MnXV0sXG4gICAgICAgIH0gKTtcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgIH1cblxuXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBQSxNQUFNLENBQUNDLDBCQUEwQixHQUFDLFVBQVVDLE9BQU8sRUFBRTtFQUNqRDtBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUlDLElBQUksR0FBRztJQUNQQyxLQUFLLEVBQUUsSUFBSTtJQUNYQyxvQkFBb0IsRUFBRSxpQ0FBaUM7SUFDdkRDLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLEdBQUcsRUFBRTtNQUNEQyxtQkFBbUIsRUFBRSxFQUFFO01BQ3ZCQyxtQkFBbUIsRUFBRSxFQUFFO01BQ3ZCQyxLQUFLLEVBQUUsRUFBRTtNQUNUQyxJQUFJLEVBQUUsRUFBRTtNQUNSQyxJQUFJLEVBQUUsRUFBRTtNQUNSQyxNQUFNLEVBQUUsRUFBRTtNQUNWQyxLQUFLLEVBQUUsRUFBRTtNQUNUQyxNQUFNLEVBQUUsRUFBRTtNQUNWQyxPQUFPLEVBQUU7SUFDYixDQUFDO0lBQ0RDLFNBQVMsRUFBRTtNQUNQQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSztJQUM3QixDQUFDO0lBQ0RDLHNCQUFzQixFQUFFLFNBQXhCQSxzQkFBc0JBLENBQUEsRUFBYyxDQUNwQztFQUNKLENBQUM7RUFDRCxJQUFJQyxJQUFJLEdBQUcsSUFBSTtFQUNmO0FBQ0o7QUFDQTtFQUNJLElBQUksQ0FBQ0MsU0FBUyxHQUFHLFVBQVVuQixPQUFPLEVBQUVvQixZQUFZLEVBQUU7SUFDOUNDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLCtDQUErQyxDQUFDO0lBQzVEQyxDQUFDLENBQUNDLE1BQU0sQ0FBQ3ZCLElBQUksRUFBRUQsT0FBTyxDQUFDO0VBQzNCLENBQUM7RUFDRCxJQUFJLENBQUN5QixPQUFPLEdBQUcsWUFBWTtJQUN2QixPQUFPeEIsSUFBSTtFQUNmLENBQUM7RUFDRCxJQUFJeUIsZUFBZSxHQUFDO0lBQ2hCQyxRQUFRLEVBQUMsRUFBRTtJQUNYQyxZ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\n//# sourceURL=webpack-internal:///./resources/js/admin/priceListProfitCenter.js\n\n}");
|
|
|
|
/***/ },
|
|
|
|
/***/ "./resources/js/admin/product.js"
|
|
/*!***************************************!*\
|
|
!*** ./resources/js/admin/product.js ***!
|
|
\***************************************/
|
|
() {
|
|
|
|
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Product === 'undefined') {\n var _Product = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function _Product(data, options) {\n var _this;\n _classCallCheck(this, _Product);\n _this = _callSuper(this, _Product, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Product constructor called');\n return _this;\n }\n _inherits(_Product, _DataModel);\n return _createClass(_Product);\n }(DataModel);\n ;\n window.Product = _Product;\n}\nwindow.ProductAdmin = function (options, ProductItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProduct',\n container: null,\n resultContainerSelector: '.containerProduct .containerResult',\n resultContainer: null,\n testMode: false,\n filters: {\n Product: {}\n },\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Product = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var dataTable = null;\n /*\n * Constructor\n */\n this.construct = function (options, ProductItem) {\n console.log('ProductAdmin constructor called');\n $.extend(Opts, options);\n if (!ProductItem) {\n console.log('Product letre kellet hozni ');\n if (!APP.Product) {\n APP.Product = new window.Product();\n }\n root.Product = APP.Product;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.initViewListOld = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('initViewSearch inicialization 1');\n root.container.find('select.supplierSelect, select.profitCenterSelect, select.productGroupSelect, select.producerSelect, select.hooreycaNamesSelect, select.specialOfferSelect').select2();\n root.container.find('select.productSelect').select2({\n placeholder: '...',\n allowClear: true,\n ajax: {\n url: Opts.URL.getProductSearch,\n dataType: 'json',\n data: function data(params) {\n return {\n term: params.term || '',\n page: params.page || 1,\n supplierId: root.container.find('select.supplierSelect').val()\n };\n },\n cache: true\n }\n });\n root.container.find('.datePickerFrom, .datePickerTo').datepicker({\n dateFormat: 'yy-mm-dd',\n onSelect: function onSelect(dateText, obj) {\n debug(this);\n debug(obj.input);\n /*\n root.container.find('.selectedDateText').text(dateText);\n $('.deliveryDatePlace').text(dateText.replaceAll('-', '.') + '.');\n root.container.find(' input[name=\"deliveryDate\"]').val(dateText);\n */\n //root.changePriceListProfitCenterParameter(null,$(obj.input));\n }\n });\n root.container.find('.datePickerClick').click(function () {\n debug($(this).data('action'));\n root.container.find('input[name=\"' + $(this).data('action') + '\"]').datepicker('show');\n });\n var button = root.container.find('.FormSendButton');\n button.off('click');\n button.on('click', function () {\n debug('FormSendButton click');\n root.loadingResultContainer();\n root.requestProducts();\n });\n root.setVisibleFilters('Product');\n if (root.loadFiltersFromLocalStorage()) {\n root.loadingResultContainer();\n root.requestProducts();\n }\n debug('initViewSearch end');\n };\n this.loadingResultContainer = function () {\n debug('clearResultContainer');\n debug(root.resultContainer);\n root.hideResultContainer();\n root.container.find('.containerLoading').show();\n /*\n let template=root.container.find('template[data-name=\"loading\"]').html()\n root.resultContainer.html(template);\n */\n };\n this.hideResultContainer = function () {\n debug('hide containerResult');\n debug(root.resultContainer);\n root.resultContainer.hide();\n };\n this.showResultContainer = function () {\n root.container.find('.containerLoading').hide();\n root.resultContainer.show();\n };\n this.init = function (options, ProductItem) {\n console.log('ProductAdmin init');\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProductItem) {\n root.Product = ProductItem;\n }\n root.dataTable = null;\n root.container = $(Opts.containerCssSelector);\n root.resultContainer = $(Opts.resultContainerSelector);\n root.initViewList();\n };\n this.initViewDetails = function (options, ProductItem) {\n debug('**call initViewDetails ');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n if (root.Product.picture) {\n console.log('*****//////////////////****************');\n console.log(root.Product.picture);\n console.log(CSSSelectorForm);\n var picUrl = root.Product.picture.PublicUrl + '/' + root.Product.picture.filename;\n console.log(picUrl);\n console.log($(CSSSelectorForm + ' img.imageProduct'));\n $(CSSSelectorForm + ' img.imageProduct').attr('src', picUrl);\n }\n if (root.Product.specification) {\n console.log('*****//////////////////****************');\n console.log(root.Product.specification);\n var docUrl = root.Product.specification.PublicUrl + '/' + root.Product.specification.filename;\n root.addAttachment(root.Product.specification);\n }\n var FormSaveButton = $(CSSSelectorForm + ' button.FormSaveButton');\n FormSaveButton.off('click');\n FormSaveButton.on('click', root.clickSaveButton);\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n //root.Supplier.attachment.push(attachmentData);\n //attachmentData.rowNum=root.Supplier.attachment.length;\n attachmentData.rowNum = 1;\n var dateStr = new Date(attachmentData.updated_at);\n dateStr = dateStr.toLocaleString('hu-HU', {});\n attachmentData.date = dateStr;\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"productAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n //root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Fájl hozzáadva!\",\n message: attachmentData.original_filename + \" fájl hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.setVisibleFilters = function (type) {\n console.log('setVisibleFilters');\n console.log(Opts.filters[type]);\n console.log(root.container);\n $(root.container).find('div[class*=\"filter\"]').hide();\n for (var typeIndex in Opts.filters[type]) {\n var typeName = Opts.filters[type][typeIndex];\n debug(typeName);\n console.log($(root.container).find('.filter_' + typeName));\n $(root.container).find('.filter_' + typeName).show();\n }\n };\n this.c = function (CSSSelectorForm) {\n console.log('c called');\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find('form'));\n console.log(root.container.find(CSSSelectorForm));\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n console.log(CSSSelectorForm);\n console.log(root.container);\n console.log(root.container.find(CSSSelectorForm));\n console.log(root.container.find('form'));\n console.log(root.container.find('form' + CSSSelectorForm)[0]);\n //return;\n var ajaxData = new FormData(root.container.find('form' + CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('suppliers[]', value);\n });\n ajaxData[\"delete\"]('supplier');\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenters[]', value);\n });\n ajaxData[\"delete\"]('profitCenter');\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroups[]', value);\n });\n ajaxData[\"delete\"]('productGroup');\n $.each(ajaxData.getAll('product'), function (key, value) {\n ajaxData.append('products[]', value);\n });\n ajaxData[\"delete\"]('product');\n $.each(ajaxData.getAll('producer'), function (key, value) {\n ajaxData.append('producers[]', value);\n });\n ajaxData[\"delete\"]('producer');\n $.each(ajaxData.getAll('hooreycaName'), function (key, value) {\n ajaxData.append('hooreycaNames[]', value);\n });\n ajaxData[\"delete\"]('hooreycaName');\n\n //ajaxData.append('_token', root.container.find('input[name=_token]').val());\n\n /*\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n let indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n */\n return ajaxData;\n };\n this.getAjaxDataJson = function () {\n var ajaxData = root.formDataToDataObjectAPICall('.ProductListForm');\n console.log('======================');\n var _iterator = _createForOfIteratorHelper(ajaxData.entries()),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var pair = _step.value;\n console.log(pair[0] + ', ' + pair[1]);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var object = {};\n ajaxData.forEach(function (value, key) {\n // Reflect.has in favor of: object.hasOwnProperty(key)\n if (!Reflect.has(object, key)) {\n object[key] = value;\n return;\n }\n if (!Array.isArray(object[key])) {\n object[key] = [object[key]];\n }\n object[key].push(value);\n });\n var ajaxDataJson = JSON.stringify(object);\n return ajaxDataJson;\n };\n this.requestProducts = function () {\n var ajaxUrl = Opts.URL.getDataTableContent;\n var ajaxMethod = 'GET';\n //token formdataba!\n debug(ajaxUrl);\n ajaxDataJson = root.getAjaxDataJson();\n console.log(ajaxDataJson);\n\n // Save filters to localStorage\n var form = root.container.find('form.ProductListForm');\n if (form.length > 0) {\n var formData = new FormData(form[0]);\n var filterData = {};\n formData.forEach(function (value, key) {\n if (!Reflect.has(filterData, key)) {\n filterData[key] = value;\n return;\n }\n if (!Array.isArray(filterData[key])) {\n filterData[key] = [filterData[key]];\n }\n filterData[key].push(value);\n });\n localStorage.setItem('product_admin_filters', JSON.stringify(filterData));\n }\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n console.log(dataTableCSSSelector);\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n /*\n if(typeof options['orderDirective']!='undefined'){\n orderDirective=options['orderDirective'];\n }\n */\n\n if (!root.dataTable) {\n console.log('XXXXXXXXXXXXXXXXXXXX Nincs Datatable');\n root.dataTable = $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": {\n url: Opts.URL.getDataTableContent,\n data: function data(d) {\n console.log('---******----');\n console.log(APP.ProductAdmin.getAjaxDataJson());\n return $.extend({}, d, {\n ajaxData: APP.ProductAdmin.getAjaxDataJson\n });\n },\n type: ajaxMethod\n /*\n data: ajaxData,\n */\n },\n serverSide: true,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n orderable: false,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"productGroup\"\n }, {\n \"data\": \"supplierName\"\n }, {\n \"data\": \"price\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n root.showResultContainer();\n console.log('drawCallback');\n }\n });\n } else {\n console.log('XXXXXXXXXXXXXXXXXXXX van Datatable');\n //root.dataTable.ajax.reload();\n root.dataTable.draw();\n }\n };\n this.loadFiltersFromLocalStorage = function () {\n var filters = localStorage.getItem('product_admin_filters');\n if (filters) {\n var filterData = JSON.parse(filters);\n var form = root.container.find('form.ProductListForm');\n if (form.length === 0) return false;\n var _loop = function _loop() {\n var value = filterData[key];\n var fields = form.find('[name=\"' + key + '\"]');\n if (fields.length) {\n if (fields.is('select')) {\n fields.val(value).trigger('change');\n } else if (fields.is(':checkbox') || fields.is(':radio')) {\n fields.each(function () {\n if (Array.isArray(value)) {\n $(this).prop('checked', value.includes($(this).val()));\n } else {\n $(this).prop('checked', $(this).val() == value);\n }\n });\n } else {\n fields.val(value);\n }\n }\n };\n for (var key in filterData) {\n _loop();\n }\n return true;\n }\n return false;\n };\n this.processResponse = function () {};\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .productForm';\n event.preventDefault();\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall('.productForm');\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Product.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Product.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n //'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n 'X-CSRF-TOKEN': Opts.token\n },\n success: function success(data) {\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű termék elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n // APP.loadMainContent(Opts.URL.index+'?init=0',root.initViewList);\n }\n }\n });\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9kdWN0IiwiX0RhdGFNb2RlbCIsIl9Qcm9kdWN0IiwiZGF0YSIsIm9wdGlvbnMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjayIsIl9jYWxsU3VwZXIiLCJjb250YWN0IiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlByb2R1Y3RBZG1pbiIsIlByb2R1Y3RJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJjb250YWluZXIiLCJyZXN1bHRDb250YWluZXJTZWxlY3RvciIsInJlc3VsdENvbnRhaW5lciIsInRlc3RNb2RlIiwiZmlsdGVycyIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiYXR0YWNoRmlsZSIsImRldGFjaEZpbGUiLCJkYXRhVGFibGUiLCJvcmRlckRpcmVjdGl2ZSIsIm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMiLCJyb290IiwiY29udGFjdFBvcHVwV29ya2Zsb3ciLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJkZWJ1ZyIsIm5vZGUiLCJjdXJyZW50VGFyZ2V0Iiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwicm93RGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiaWQiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0RldGFpbHMiLCJpbml0Vmlld0xpc3RPbGQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwidXJsIiwic2VydmVyU2lkZSIsIm9yZGVyYWJsZSIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJpbml0Vmlld0xpc3QiLCJmaW5kIiwic2VsZWN0MiIsInBsYWNlaG9sZGVyIiwiYWxsb3dDbGVhciIsImFqYXgiLCJnZXRQcm9kdWN0U2VhcmNoIiwiZGF0YVR5cGUiLCJwYXJhbXMiLCJ0ZXJtIiwicGFnZSIsInN1cHBsaWVySWQiLCJ2YWwiLCJjYWNoZSIsImRhdGVwaWNrZXIiLCJkYXRlRm9ybWF0Iiwib25TZWxlY3QiLCJkYXRlVGV4dCIsIm9iaiIsImlucHV0IiwiY2xpY2siLCJidXR0b24iLCJvZmYiLCJvbiIsImxvYWRpbmdSZXN1bHRDb250YWluZXIiLCJyZXF1ZXN0UHJvZHVjdHMiLCJzZXRWaXNpYmxlRmlsdGVycyIsImxvYWRGaWx0ZXJzRnJvbUxvY2FsU3RvcmFnZSIsImhpZGVSZXN1bHRDb250YWluZXIiLCJoaWRlIiwic2hvd1Jlc3VsdENvbnRhaW5lciIsImluaXQiLCJDU1NTZWxlY3RvckZvcm0iLCJwaWN0dXJlIiwicGljVXJsIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJhdHRyIiwic3BlY2lmaWNhdGlvbiIsImRvY1VybCIsImFkZEF0dGFjaG1lbnQiLCJGb3JtU2F2ZUJ1dHRvbiIsImNsaWNrU2F2ZUJ1dHRvbiIsImF0dGFjaG1lbnREYXRhIiwicm93TnVtIiwiZGF0ZVN0ciIsIkRhdGUiLCJ1cGRhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJkYXRlIiwibGluayIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiVG9hc3QiLCJlbmFibGVUaW1lcnMiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbF9maWxlbmFtZSIsInN0YXR1cyIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJ0aW1lb3V0IiwidHlwZUluZGV4IiwidHlwZU5hbWUiLCJjIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiYWpheERhdGEiLCJGb3JtRGF0YSIsImVhY2giLCJnZXRBbGwiLCJrZXkiLCJ2YWx1ZSIsImdldEFqYXhEYXRhSnNvbiIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiZW50cmllcyIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwicGFpciIsImVyciIsImUiLCJmIiwib2JqZWN0IiwiZm9yRWFjaCIsIlJlZmxlY3QiLCJoYXMiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwiYWpheERhdGFKc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsImFqYXhNZXRob2QiLCJmb3JtIiwiZm9ybURhdGEiLCJmaWx0ZXJEYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImQiLCJkcmF3IiwiZ2V0SXRlbSIsInBhcnNlIiwiX2xvb3AiLCJmaWVsZHMiLCJpcyIsInRyaWdnZXIiLCJwcm9wIiwiaW5jbHVkZXMiLCJwcm9jZXNzUmVzcG9uc2UiLCJwcmV2ZW50RGVmYXVsdCIsImNoZWNrVmFsaWRpdHkiLCJzdG9wUHJvcGFnYXRpb24iLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsInN1Y2Nlc3MiLCJnZXQiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2R1Y3QuanM/OWI1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgUHJvZHVjdD09PSd1bmRlZmluZWQnKXtcbiAgICBjbGFzcyBQcm9kdWN0IGV4dGVuZHMgRGF0YU1vZGVse1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIENvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdD1bXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0IGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICB9O1xuICAgIH07XG4gICAgd2luZG93LlByb2R1Y3Q9UHJvZHVjdDtcbn1cbndpbmRvdy5Qcm9kdWN0QWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pIHtcbiAgICAvKlxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXG4gICAgICogaW4gdGhlIGNsYXNzXG4gICAgICovXG4gICAgbGV0IE9wdHMgPSB7XG4gICAgICAgIHRva2VuOiBudWxsLFxuICAgICAgICBjb250YWluZXJDc3NTZWxlY3RvcjogJy5jb250YWluZXJQcm9kdWN0JyxcbiAgICAgICAgY29udGFpbmVyOm51bGwsXG4gICAgICAgIHJlc3VsdENvbnRhaW5lclNlbGVjdG9yOicuY29udGFpbmVyUHJvZHVjdCAuY29udGFpbmVyUmVzdWx0JyxcbiAgICAgICAgcmVzdWx0Q29udGFpbmVyOm51bGwsXG5cbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxuICAgICAgICBmaWx0ZXJzOntcbiAgICAgICAgICAgIFByb2R1Y3Q6e30sXG4gICAgICAgIH0sXG4gICAgICAgIFVSTDoge1xuICAgICAgICAgICAgZ2V0RGF0YVRhYmxlQ29udGVudDogJycsXG4gICAgICAgICAgICBpbmRleDogJycsXG4gICAgICAgICAgICBzaG93OiAnJyxcbiAgICAgICAgICAgIGVkaXQ6ICcnLFxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcbiAgICAgICAgICAgIHVwZGF0ZTogJycsXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6ICcnLFxuICAgICAgICAgICAgZGV0YWNoRmlsZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFUYWJsZToge1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ10sXG4gICAgICAgIH0sXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IFByb2R1Y3QgPSB7fTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XG4gICAgbGV0IGRhdGFUYWJsZT1udWxsO1xuICAgIC8qXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBQcm9kdWN0SXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnUHJvZHVjdEFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFQcm9kdWN0SXRlbSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2R1Y3QgbGV0cmUga2VsbGV0IGhvem5pICcpO1xuICAgICAgICAgICAgaWYgKCFBUFAuUHJvZHVjdCkge1xuICAgICAgICAgICAgICAgIEFQUC5Qcm9kdWN0ID0gbmV3IHdpbmRvdy5Qcm9kdWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290LlByb2R1Y3QgPSBBUFAuUHJvZHVjdDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcbiAgICAgICAgbGV0IHJvd0RhdGE9cm93LmRhdGEoKTtcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3RbYWN0aW9uTmFtZV0ocm93RGF0YSxub2RlKVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRWRpdD1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxyb3dEYXRhLmlkKTtcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XG4gICAgfVxuICAgIHRoaXMuaW5pdFZpZXdMaXN0T2xkID0gZnVuY3Rpb24gKG9wdGlvbnM9e30pIHtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJzb3J0XCIgPyBkYXRhLmxhdGluaXNlKCkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy97IFwidmlzaWJsZVwiOiBmYWxzZSwgIFwidGFyZ2V0c1wiOiBbIDAgXSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQ6ICdwcmludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlVG9wJzogJ01lc3NhZ2UgT24gVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIn0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxuICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJwcm9kdWN0R3JvdXBcIn0sXG4gICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInN1cHBsaWVyTmFtZVwifSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFZpZXdMaXN0PWZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XG4gICAgICAgIGRlYnVnKCdpbml0Vmlld1NlYXJjaCBpbmljaWFsaXphdGlvbiAxJyk7XG5cbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnc2VsZWN0LnN1cHBsaWVyU2VsZWN0LCBzZWxlY3QucHJvZml0Q2VudGVyU2VsZWN0LCBzZWxlY3QucHJvZHVjdEdyb3VwU2VsZWN0LCBzZWxlY3QucHJvZHVjZXJTZWxlY3QsIHNlbGVjdC5ob29yZXljYU5hbWVzU2VsZWN0LCBzZWxlY3Quc3BlY2lhbE9mZmVyU2VsZWN0Jykuc2VsZWN0MigpO1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCdzZWxlY3QucHJvZHVjdFNlbGVjdCcpLnNlbGVjdDIoe1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcuLi4nLFxuICAgICAgICAgICAgYWxsb3dDbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgIGFqYXg6IHtcbiAgICAgICAgICAgICAgICB1cmw6IE9wdHMuVVJMLmdldFByb2R1Y3RTZWFyY2gsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlcm06IHBhcmFtcy50ZXJtIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFyYW1zLnBhZ2UgfHwgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVySWQ6IHJvb3QuY29udGFpbmVyLmZpbmQoJ3NlbGVjdC5zdXBwbGllclNlbGVjdCcpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjYWNoZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmRhdGVQaWNrZXJGcm9tLCAuZGF0ZVBpY2tlclRvJykuZGF0ZXBpY2tlcih7XG4gICAgICAgICAgICBkYXRlRm9ybWF0OiAneXktbW0tZGQnLFxuXG4gICAgICAgICAgICBvblNlbGVjdDogZnVuY3Rpb24gKGRhdGVUZXh0LG9iaikge1xuICAgICAgICAgICAgICAgIGRlYnVnKHRoaXMpO1xuICAgICAgICAgICAgICAgIGRlYnVnKG9iai5pbnB1dCk7XG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuc2VsZWN0ZWREYXRlVGV4dCcpLnRleHQoZGF0ZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5kZWxpdmVyeURhdGVQbGFjZScpLnRleHQoZGF0ZVRleHQucmVwbGFjZUFsbCgnLScsICcuJykgKyAnLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJyBpbnB1dFtuYW1lPVwiZGVsaXZlcnlEYXRlXCJdJykudmFsKGRhdGVUZXh0KTtcbiAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIC8vcm9vdC5jaGFuZ2VQcmljZUxpc3RQcm9maXRDZW50ZXJQYXJhbWV0ZXIobnVsbCwkKG9iai5pbnB1dCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuY29udGFpbmVyLmZpbmQoJy5kYXRlUGlja2VyQ2xpY2snKS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgICAgICAgZGVidWcoJCh0aGlzKS5kYXRhKCdhY3Rpb24nKSk7XG4gICAgICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCdpbnB1dFtuYW1lPVwiJyskKHRoaXMpLmRhdGEoJ2FjdGlvbicpKydcIl0nKS5kYXRlcGlja2VyKCdzaG93Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgYnV0dG9uPXJvb3QuY29udGFpbmVyLmZpbmQoJy5Gb3JtU2VuZEJ1dHRvbicpO1xuICAgICAgICBidXR0b24ub2ZmKCdjbGljaycpO1xuICAgICAgICBidXR0b24ub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGRlYnVnICgnRm9ybVNlbmRCdXR0b24gY2xpY2snKTtcbiAgICAgICAgICAgIHJvb3QubG9hZGluZ1Jlc3VsdENvbnRhaW5lcigpO1xuICAgICAgICAgICAgcm9vdC5yZXF1ZXN0UHJvZHVjdHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3Quc2V0VmlzaWJsZUZpbHRlcnMoJ1Byb2R1Y3QnKTtcblxuICAgICAgICBpZiAocm9vdC5sb2FkRmlsdGVyc0Zyb21Mb2NhbFN0b3JhZ2UoKSkge1xuICAgICAgICAgICAgcm9vdC5sb2FkaW5nUmVzdWx0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICByb290LnJlcXVlc3RQcm9kdWN0cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJ2luaXRWaWV3U2VhcmNoIGVuZCcpO1xuICAgIH1cblxuXG4gICAgdGhpcy5sb2FkaW5nUmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xuICAgICAgICBkZWJ1ZygnY2xlYXJSZXN1bHRDb250YWluZXInKTtcbiAgICAgICAgZGVidWcocm9vdC5yZXN1bHRDb250YWluZXIpO1xuICAgICAgICByb290LmhpZGVSZXN1bHRDb250YWluZXIoKTtcbiAgICAgICAgcm9vdC5jb250YWluZXIuZmluZCgnLmNvbnRhaW5lckxvYWRpbmcnKS5zaG93KCk7XG4gICAgICAgIC8qXG4gICAgICAgIGxldCB0ZW1wbGF0ZT1yb290LmNvbnRhaW5lci5maW5kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJsb2FkaW5nXCJdJykuaHRtbCgpXG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmh0bWwodGVtcGxhdGUpO1xuXG4gICAgICAgICAqL1xuICAgIH1cbiAgICB0aGlzLmhpZGVSZXN1bHRDb250YWluZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGRlYnVnKCdoaWRlIGNvbnRhaW5lclJlc3VsdCcpO1xuICAgICAgICBkZWJ1Zyhyb290LnJlc3VsdENvbnRhaW5lcik7XG4gICAgICAgIHJvb3QucmVzdWx0Q29udGFpbmVyLmhpZGUoKTtcbiAgICB9XG4gICAgdGhpcy5zaG93UmVzdWx0Q29udGFpbmVyPWZ1bmN0aW9uICgpe1xuICAgICAgICByb290LmNvbnRhaW5lci5maW5kKCcuY29udGFpbmVyTG9hZGluZycpLmhpZGUoKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXIuc2hvdygpO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxQcm9kdWN0SXRlbSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9kdWN0QWRtaW4gaW5pdCcpO1xuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcblxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoUHJvZHVjdEl0ZW0pe1xuICAgICAgICAgICAgcm9vdC5Qcm9kdWN0PVByb2R1Y3RJdGVtXG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5kYXRhVGFibGU9bnVsbDtcbiAgICAgICAgcm9vdC5jb250YWluZXI9JChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKTtcbiAgICAgICAgcm9vdC5yZXN1bHRDb250YWluZXI9JChPcHRzLnJlc3VsdENvbnRhaW5lclNlbGVjdG9yKTtcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZHVjdEl0ZW0pe1xuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnBpY3R1cmUpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqLy8vLy8vLy8vLy8vLy8vLy8vKioqKioqKioqKioqKioqKicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnBpY3R1cmUpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcbiAgICAgICAgICAgIGxldCBwaWNVcmw9cm9vdC5Qcm9kdWN0LnBpY3R1cmUuUHVibGljVXJsKycvJytyb290LlByb2R1Y3QucGljdHVyZS5maWxlbmFtZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHBpY1VybCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZVByb2R1Y3QnKSk7XG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZVByb2R1Y3QnKS5hdHRyKCdzcmMnLHBpY1VybCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqLy8vLy8vLy8vLy8vLy8vLy8vKioqKioqKioqKioqKioqKicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9kdWN0LnNwZWNpZmljYXRpb24pO1xuICAgICAgICAgICAgbGV0IGRvY1VybD1yb290LlByb2R1Y3Quc3BlY2lmaWNhdGlvbi5QdWJsaWNVcmwrJy8nK3Jvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uLmZpbGVuYW1lO1xuICAgICAgICAgICAgcm9vdC5hZGRBdHRhY2htZW50KHJvb3QuUHJvZHVjdC5zcGVjaWZpY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgRm9ybVNhdmVCdXR0b249JChDU1NTZWxlY3RvckZvcm0rJyBidXR0b24uRm9ybVNhdmVCdXR0b24nKTtcbiAgICAgICAgRm9ybVNhdmVCdXR0b24ub2ZmKCdjbGljaycpO1xuICAgICAgICBGb3JtU2F2ZUJ1dHRvbi5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcblxuICAgIH1cblxuICAgIHRoaXMuYWRkQXR0YWNobWVudD1mdW5jdGlvbiAoYXR0YWNobWVudERhdGEpe1xuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9kdWN0Rm9ybSc7XG4gICAgICAgIC8vcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xuICAgICAgICAvL2F0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xuICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09MTtcbiAgICAgICAgbGV0IGRhdGVTdHI9bmV3IERhdGUoYXR0YWNobWVudERhdGEudXBkYXRlZF9hdCk7XG4gICAgICAgIGRhdGVTdHI9ZGF0ZVN0ci50b0xvY2FsZVN0cmluZygnaHUtSFUnLCB7fSk7XG4gICAgICAgIGF0dGFjaG1lbnREYXRhLmRhdGU9ZGF0ZVN0cjtcbiAgICAgICAgYXR0YWNobWVudERhdGEubGluaz1hdHRhY2htZW50RGF0YS5QdWJsaWNVcmwrJy8nK2F0dGFjaG1lbnREYXRhLmZpbGVuYW1lO1xuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZHVjdEF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxhdHRhY2htZW50RGF0YSk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAvL3Jvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJGw6FqbCBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBhdHRhY2htZW50RGF0YS5vcmlnaW5hbF9maWxlbmFtZStcIiBmw6FqbCBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRWaXNpYmxlRmlsdGVycz1mdW5jdGlvbiAodHlwZSl7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzZXRWaXNpYmxlRmlsdGVycycpO1xuICAgICAgICBjb25zb2xlLmxvZyhPcHRzLmZpbHRlcnNbdHlwZV0pO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lcik7XG4gICAgICAgICQocm9vdC5jb250YWluZXIpLmZpbmQoJ2RpdltjbGFzcyo9XCJmaWx0ZXJcIl0nKS5oaWRlKClcbiAgICAgICAgZm9yIChjb25zdCB0eXBlSW5kZXggaW4gT3B0cy5maWx0ZXJzW3R5cGVdKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlTmFtZT1PcHRzLmZpbHRlcnNbdHlwZV1bdHlwZUluZGV4XTtcbiAgICAgICAgICAgIGRlYnVnKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQocm9vdC5jb250YWluZXIpLmZpbmQoJy5maWx0ZXJfJyt0eXBlTmFtZSkpO1xuICAgICAgICAgICAgJChyb290LmNvbnRhaW5lcikuZmluZCgnLmZpbHRlcl8nK3R5cGVOYW1lKS5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jPWZ1bmN0aW9uIChDU1NTZWxlY3RvckZvcm0pe1xuICAgICAgICBjb25zb2xlLmxvZygnYyBjYWxsZWQnKTtcbiAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKENTU1NlbGVjdG9yRm9ybSkpO1xuXG4gICAgfVxuXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coQ1NTU2VsZWN0b3JGb3JtKTtcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5jb250YWluZXIpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKENTU1NlbGVjdG9yRm9ybSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJytDU1NTZWxlY3RvckZvcm0pWzBdKTtcbiAgICAgICAgLy9yZXR1cm47XG4gICAgICAgIGxldCBhamF4RGF0YSA9IG5ldyBGb3JtRGF0YShyb290LmNvbnRhaW5lci5maW5kKCdmb3JtJytDU1NTZWxlY3RvckZvcm0pWzBdKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3VwcGxpZXJzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgnc3VwcGxpZXInKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2ZpdENlbnRlcnNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9maXRDZW50ZXInKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cHNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdwcm9kdWN0R3JvdXAnKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdCcpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdwcm9kdWN0c1tdJywgdmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgICBhamF4RGF0YS5kZWxldGUoJ3Byb2R1Y3QnKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjZXInKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjZXJzW10nLCB2YWx1ZSk7XG4gICAgICAgIH0pXG4gICAgICAgIGFqYXhEYXRhLmRlbGV0ZSgncHJvZHVjZXInKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnaG9vcmV5Y2FOYW1lJyksIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2hvb3JleWNhTmFtZXNbXScsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgYWpheERhdGEuZGVsZXRlKCdob29yZXljYU5hbWUnKTtcblxuICAgICAgICAvL2FqYXhEYXRhLmFwcGVuZCgnX3Rva2VuJywgcm9vdC5jb250YWluZXIuZmluZCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCkpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSArICcgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4S2V5ID0gJCh0aGlzKS5hdHRyKCduYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFqYXhEYXRhLmdldChpbmRleEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LCBhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICovXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcblxuICAgIH1cbiAgICB0aGlzLmdldEFqYXhEYXRhSnNvbj1mdW5jdGlvbigpe1xuXG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCgnLlByb2R1Y3RMaXN0Rm9ybScpO1xuICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgICBmb3IgKGxldCBwYWlyIG9mIGFqYXhEYXRhLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9iamVjdCA9IHt9O1xuICAgICAgICBhamF4RGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICAgICAgICAgIGlmKCFSZWZsZWN0LmhhcyhvYmplY3QsIGtleSkpe1xuICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkob2JqZWN0W2tleV0pKXtcbiAgICAgICAgICAgICAgICBvYmplY3Rba2V5XSA9IFtvYmplY3Rba2V5XV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmplY3Rba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBhamF4RGF0YUpzb24gPSBKU09OLnN0cmluZ2lmeShvYmplY3QpO1xuICAgICAgICByZXR1cm4gYWpheERhdGFKc29uO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdFByb2R1Y3RzPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudDtcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9J0dFVCc7XG4gICAgICAgIC8vdG9rZW4gZm9ybWRhdGFiYSFcbiAgICAgICAgZGVidWcoYWpheFVybCk7XG5cbiAgICAgICAgYWpheERhdGFKc29uPXJvb3QuZ2V0QWpheERhdGFKc29uKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhEYXRhSnNvbik7XG5cbiAgICAgICAgLy8gU2F2ZSBmaWx0ZXJzIHRvIGxvY2FsU3RvcmFnZVxuICAgICAgICBsZXQgZm9ybSA9IHJvb3QuY29udGFpbmVyLmZpbmQoJ2Zvcm0uUHJvZHVjdExpc3RGb3JtJyk7XG4gICAgICAgIGlmIChmb3JtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtWzBdKTtcbiAgICAgICAgICAgIGxldCBmaWx0ZXJEYXRhID0ge307XG4gICAgICAgICAgICBmb3JtRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKGZpbHRlckRhdGEsIGtleSkpe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShmaWx0ZXJEYXRhW2tleV0pKXtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGF0YVtrZXldID0gW2ZpbHRlckRhdGFba2V5XV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlckRhdGFba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Byb2R1Y3RfYWRtaW5fZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KGZpbHRlckRhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cbiAgICAgICAgY29uc29sZS5sb2coZGF0YVRhYmxlQ1NTU2VsZWN0b3IgKTtcblxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICAvKlxuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgICAgIGlmKCFyb290LmRhdGFUYWJsZSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggTmluY3MgRGF0YXRhYmxlJyk7XG4gICAgICAgICAgICByb290LmRhdGFUYWJsZT1cbiAgICAgICAgICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYWpheFwiOntcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLSoqKioqKi0tLS0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhBUFAuUHJvZHVjdEFkbWluLmdldEFqYXhEYXRhSnNvbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIGQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheERhdGE6IEFQUC5Qcm9kdWN0QWRtaW4uZ2V0QWpheERhdGFKc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYWpheE1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogYWpheERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB9ICxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyU2lkZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uczp7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJpZFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1wiZGF0YVwiOiBcInByb2R1Y3RHcm91cFwifSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcImRhdGFcIjogXCJzdXBwbGllck5hbWVcIn0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByaWNlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiY3JlYXRlZF9hdFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBcInN0YXRlU2F2ZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2hvd1Jlc3VsdENvbnRhaW5lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RyYXdDYWxsYmFjaycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuXG5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnWFhYWFhYWFhYWFhYWFhYWFhYWFggdmFuIERhdGF0YWJsZScpO1xuICAgICAgICAgICAgLy9yb290LmRhdGFUYWJsZS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgcm9vdC5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHRoaXMubG9hZEZpbHRlcnNGcm9tTG9jYWxTdG9yYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCBmaWx0ZXJzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Byb2R1Y3RfYWRtaW5fZmlsdGVycycpO1xuICAgICAgICBpZiAoZmlsdGVycykge1xuICAgICAgICAgICAgbGV0IGZpbHRlckRhdGEgPSBKU09OLnBhcnNlKGZpbHRlcnMpO1xuICAgICAgICAgICAgbGV0IGZvcm0gPSByb290LmNvbnRhaW5lci5maW5kKCdmb3JtLlByb2R1Y3RMaXN0Rm9ybScpO1xuXG4gICAgICAgICAgICBpZiAoZm9ybS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGZpbHRlckRhdGEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWx0ZXJEYXRhW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkcyA9IGZvcm0uZmluZCgnW25hbWU9XCInICsga2V5ICsgJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5pcygnc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkcy5pcygnOmNoZWNrYm94JykgfHwgZmllbGRzLmlzKCc6cmFkaW8nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnY2hlY2tlZCcsIHZhbHVlLmluY2x1ZGVzKCQodGhpcykudmFsKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCAkKHRoaXMpLnZhbCgpID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy52YWwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc1Jlc3BvbnNlPWZ1bmN0aW9uICgpIHtcblxuICAgIH1cblxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBkZWJ1ZygnU2F2ZSBjbGlja2VkJyk7XG5cbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2R1Y3RGb3JtJztcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCQoQ1NTU2VsZWN0b3JGb3JtKVswXS5jaGVja1ZhbGlkaXR5KCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gb2snKTtcbiAgICAgICAgICAgIC8vZG8geW91ciBhamF4IHN1Ym1pdGlvbiBoZXJlXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYWpheERhdGE9cm9vdC5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5wcm9kdWN0Rm9ybScpO1xuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XG4gICAgICAgIGlmKHJvb3QuUHJvZHVjdC5pZCl7XG4gICAgICAgICAgICBhamF4VXJsPU9wdHMuVVJMLnVwZGF0ZS5yZXBsYWNlKCclaWQlJyxyb290LlByb2R1Y3QuaWQpO1xuICAgICAgICAgICAgLy9hamF4TWV0aG9kPVwiUFVUXCI7XG4gICAgICAgICAgICAvL2FqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcbiAgICAgICAgZGVidWcoYWpheERhdGEpO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXG4gICAgICAgICAgICBjb250ZW50VHlwZTpmYWxzZSxcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAvLydYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcbiAgICAgICAgICAgICAgICAnWC1DU1JGLVRPS0VOJzogT3B0cy50b2tlblxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XG4gICAgICAgICAgICAgICAgZGVidWcoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJTaWtlcmVzIHLDtmd6w610w6lzIVwiLCBtZXNzYWdlOiBhamF4RGF0YS5nZXQoJ25hbWUnKStcIiBuZXbFsSB0ZXJtw6lrIGVsbWVudHZlXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLE9BQU8sS0FBRyxXQUFXLEVBQUM7RUFBQSxJQUN0QkEsUUFBTywwQkFBQUMsVUFBQTtJQUVUO0FBQ1I7QUFDQTtJQUNRLFNBQUFDLFNBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBQyxlQUFBLE9BQUFKLFFBQUE7TUFDdkJHLEtBQUEsR0FBQUUsVUFBQSxPQUFBTCxRQUFBLEdBQU1DLElBQUksRUFBQ0MsT0FBTztNQUNsQixJQUFHLE9BQU9DLEtBQUEsQ0FBS0csT0FBTyxLQUFJLFdBQVcsRUFBQztRQUNsQ0gsS0FBQSxDQUFLRyxPQUFPLEdBQUMsRUFBRTtNQUNuQjtNQUNBQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztNQUFDLE9BQUFMLEtBQUE7SUFDOUM7SUFBQ00sU0FBQSxDQUFBVCxRQUFBLEVBQUFELFVBQUE7SUFBQSxPQUFBVyxZQUFBLENBQUFWLFFBQUE7RUFBQSxFQVhpQlcsU0FBUztFQVk5QjtFQUNEQyxNQUFNLENBQUNkLE9BQU8sR0FBQ0EsUUFBTztBQUMxQjtBQUNBYyxNQUFNLENBQUNDLFlBQVksR0FBQyxVQUFVWCxPQUFPLEVBQUNZLFdBQVcsRUFBRTtFQUMvQztBQUNKO0FBQ0E7QUFDQTtFQUNJLElBQUlDLElBQUksR0FBRztJQUNQQyxLQUFLLEVBQUUsSUFBSTtJQUNYQyxvQkFBb0IsRUFBRSxtQkFBbUI7SUFDekNDLFNBQVMsRUFBQyxJQUFJO0lBQ2RDLHVCQUF1QixFQUFDLG9DQUFvQztJQUM1REMsZUFBZSxFQUFDLElBQUk7SUFFcEJDLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLE9BQU8sRUFBQztNQUNKeEIsT0FBTyxFQUFDLENBQUM7SUFDYixDQUFDO0lBQ0R5QixHQUFHLEVB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\n//# sourceURL=webpack-internal:///./resources/js/admin/product.js\n\n}");
|
|
|
|
/***/ },
|
|
|
|
/***/ "./resources/js/admin/profitCenter.js"
|
|
/*!********************************************!*\
|
|
!*** ./resources/js/admin/profitCenter.js ***!
|
|
\********************************************/
|
|
() {
|
|
|
|
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof DataModelProfitCenter === 'undefined') {\n var _DataModelProfitCenter = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _DataModelProfitCenter(data, options) {\n var _this;\n _classCallCheck(this, _DataModelProfitCenter);\n _this = _callSuper(this, _DataModelProfitCenter, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.address === \"undefined\") {\n _this.address = [];\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(_DataModelProfitCenter, _DataModel);\n return _createClass(_DataModelProfitCenter);\n }(DataModel);\n ;\n window.DataModelProfitCenter = _DataModelProfitCenter;\n}\nwindow.ProfitCenterAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var ProfitCenter = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var addressPopupWorkflow = 'new';\n var CSSSelectorForm = '';\n var dataTableCSSSelector = '';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, ProfitCenterItem) {\n console.log('ProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n if (!ProfitCenterItem) {\n console.log('ProfitCentert letre kellet hozni ');\n if (!APP.ProfitCenter) {\n APP.ProfitCenter = new window.DataModelProfitCenter();\n }\n root.ProfitCenter = APP.ProfitCenter;\n }\n CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n };\n this.getOpts = function () {\n return Opts;\n };\n this.getData = function () {\n return root.ProfitCenter;\n };\n this.init = function (options, ProfitCenterItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProfitCenterItem) {\n root.ProfitCenter = ProfitCenterItem;\n }\n root.initViewList();\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.ProfitCenter = new window.DataModelProfitCenter();\n root.initViewDetails();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n /**\r\n * Contact Popup setup\r\n */\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $(CSSSelectorForm + ' .buttonNewContact').bind('click', function () {\n APP.ProfitCenterAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n /**\r\n * Address Popup setup\r\n */\n if (!APP.AddressPopUp) {\n console.log('nincs APP.AddressPopUp');\n APP.AddressPopUp = new window.AddressPopUp();\n } else {\n console.log('mar van APP.AddressPopUp');\n }\n APP.AddressPopUp.init({\n active: true,\n onAfterSave: root.addressAction\n });\n root.renderAddress();\n $(CSSSelectorForm + ' .buttonNewAddress').bind('click', function () {\n APP.ProfitCenterAdmin.setAddressPopupWorkflow('new');\n APP.AddressPopUp.clearData();\n APP.AddressPopUp.show();\n });\n /**\r\n *\r\n */\n\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons({\n onChange: function onChange(value, node) {\n debug(value);\n debug(node);\n /*\r\n if(node==='profitCenterMultiAddress'){\r\n if(value==1){\r\n $('.containerMultiAddress').removeClass('d-none');\r\n }else{\r\n $('.containerMultiAddress').addClass('d-none');\r\n }\r\n }\r\n */\n if (node === 'addressEqual') {\n if (value == 1) {\n $(CSSSelectorForm + ' .containerMultiAddress').addClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').addClass('d-none');\n } else {\n $(CSSSelectorForm + ' .containerMultiAddress').removeClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').removeClass('d-none');\n }\n }\n }\n });\n $(CSSSelectorForm + \" :input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $(CSSSelectorForm + ' button.FormSaveButton').off('click');\n $(CSSSelectorForm + ' button.FormSaveButton').on('click', root.clickSaveButton);\n /*\r\n $(\"input[name=logoFile]\").change(function(){\r\n setImageFromLocal(this,Opts.containerCssSelector+' .imageLogo');\r\n });\r\n */\n\n //Opts.onAfterInitViewDetails();\n debug('**end initViewDetails ');\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n var CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'email', 'postCode', 'city', 'street', 'phone', 'mobil'];\n $.each(needToSet, function () {\n // debug(this); //alapadatok beallitasanak logolasa\n if (typeof root.ProfitCenter[this] != 'undefined') {\n /* //alapadatok beallitasanak logolasa\r\n debug(root.ProfitCenter[this]);\r\n debug(CSSSelectorForm+' input[name='+this+']');\r\n debug($(CSSSelectorForm+' input[name='+this+']'));\r\n */\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.ProfitCenter[this]);\n }\n });\n if (typeof root.ProfitCenter['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.ProfitCenter.note);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.ProfitCenter.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.ProfitCenter.hooreycaDataActive + ']').click();\n if (typeof root.ProfitCenter['logoFile'] != 'undefined' && root.ProfitCenter['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.ProfitCenter['logoFile']);\n }\n $(CSSSelectorForm + ' *[data-toggle=addressEqual][data-title=' + root.ProfitCenter.addressEqual + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=multiAddress][data-title=' + root.ProfitCenter.multiAddress + ']').click();\n /*debug(root.ProfitCenter.address.length);\r\n if(root.ProfitCenter.address.length>0){\r\n $(CSSSelectorForm+' *[data-toggle=addressEqual][data-title=0]').click();\r\n if(root.ProfitCenter.address.length>1){\r\n $(CSSSelectorForm+' *[data-toggle=multiAddress][data-title=1]').click();\r\n }\r\n }\r\n */\n var supplier = [];\n $.each(root.ProfitCenter.suppliers, function () {\n supplier.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n $.each(supplier, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n };\n this.resetContactTable = function () {\n $(CSSSelectorForm + ' .contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.ProfitCenter.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n $('.contactTable .buttonDelete').unbind('click');\n $('.contactTable .buttonDelete').bind('click', root.contactDeleteClick);\n $('.contactTable .buttonEdit').unbind('click');\n $('.contactTable .buttonEdit').bind('click', root.contactEditClick);\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.ProfitCenter.contact = root.ProfitCenter.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n console.log(root.ProfitCenter.contact);\n row.remove();\n root.resetContactTable();\n };\n this.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n this.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.contact.push(contactData);\n contactData.rowNum = root.ProfitCenter.contact.length;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $(CSSSelectorForm + ' .contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Kapcsolat tartó hozzáadva!\",\n message: contactData.name + \" nevű kapocsolattartó hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.ProfitCenter.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.ProfitCenter.contact = newContacts;\n root.resetContactTable();\n Toast.create({\n title: \"Kapcsolat adatai módosítva!\",\n message: contactData.name + \" nevű kapocsolattartó módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n\n /***************\r\n *\r\n * Address function\r\n *\r\n */\n this.resetAddressTable = function () {\n $(CSSSelectorForm + ' .addressTable tbody tr').remove();\n root.renderAddress();\n };\n this.renderAddress = function () {\n var rowNum = 1;\n console.log('renderingAddress');\n $.each(root.ProfitCenter.getData('address'), function () {\n var itemData = this;\n itemData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n debug(itemData);\n var render = Mustache.render(template, itemData);\n $('.addressTable tbody').append(render);\n rowNum++;\n });\n root.bindAddressClickAction();\n };\n this.bindAddressClickAction = function () {\n $('.addressTable .buttonDelete').unbind('click');\n $('.addressTable .buttonDelete').bind('click', root.addressDeleteClick);\n $('.addressTable .buttonEdit').unbind('click');\n $('.addressTable .buttonEdit').bind('click', root.addressEditClick);\n };\n this.addressDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.ProfitCenter.address = root.ProfitCenter.address.filter(function (value, index, arr) {\n if (value.id != id) return true;\n });\n console.log(root.ProfitCenter.address);\n row.remove();\n root.resetAddressTable();\n };\n this.getAddressPopupWorkflow = function () {\n return addressPopupWorkflow;\n };\n this.setAddressPopupWorkflow = function (status) {\n addressPopupWorkflow = status;\n };\n this.addressEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.setAddressPopupWorkflow('edit');\n APP.AddressPopUp.loadData(id);\n };\n this.addressAction = function (itemData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getAddressPopupWorkflow() == 'new') {\n root.addAddress(itemData);\n } else if (root.getAddressPopupWorkflow() == 'edit') {\n root.editAddress(itemData.id, itemData);\n }\n };\n this.addAddress = function (ItemData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.address.push(ItemData);\n ItemData.rowNum = root.ProfitCenter.address.length;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n var render = Mustache.render(template, ItemData);\n $(CSSSelectorForm + ' .addressTable tbody').append(render);\n root.bindAddressClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Cím hozzáadva!\",\n message: ItemData.street + \" hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.editAddress = function (id, itemData) {\n var newItem = [];\n $.each(root.ProfitCenter.getData('address'), function (index) {\n if (this.id == id) {\n newItem.push(itemData);\n } else {\n newItem.push(this);\n }\n });\n root.ProfitCenter.address = newItem;\n root.resetAddressTable();\n Toast.create({\n title: \"cím adatai módosítva!\",\n message: itemData.street + \" módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n //\"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n /*\r\n console.log(Opts.URL);\r\n console.log(ajaxUrl);\r\n */\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n event.preventDefault();\n debug(CSSSelectorForm);\n debug($(CSSSelectorForm));\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n $(CSSSelectorForm).addClass('was-validated');\n $(CSSSelectorForm)[0].reportValidity();\n Toast.create({\n title: \"Validációs hiba!\",\n message: \"Kérjük, töltse ki a kötelező mezőket!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n $(CSSSelectorForm).removeClass('was-validated');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.ProfitCenter.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.ProfitCenter.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n /*\r\n debug(ajaxUrl);\r\n debug(ajaxMethod);\r\n debug(ajaxData.entries());\r\n for (var pair of ajaxData.entries()) {\r\n console.log(pair[0]+ ', ' + pair[1]);\r\n }\r\n */\n\n console.table(Object.fromEntries(ajaxData));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű profitcenter elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n /*\r\n $.each(ajaxData.getAll('productGroup'),function(key,value){\r\n ajaxData.append('productGroup[]',value);\r\n })\r\n */\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('supplier[]', value);\n });\n return ajaxData;\n };\n this.construct(options, ProfitCenterItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhTW9kZWxQcm9maXRDZW50ZXIiLCJfRGF0YU1vZGVsIiwiX0RhdGFNb2RlbFByb2ZpdENlbnRlciIsImRhdGEiLCJvcHRpb25zIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiY29udGFjdCIsImFkZHJlc3MiLCJjb25zb2xlIiwibG9nIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiUHJvZml0Q2VudGVyQWRtaW4iLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwiUHJvZml0Q2VudGVyIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiYWRkcmVzc1BvcHVwV29ya2Zsb3ciLCJDU1NTZWxlY3RvckZvcm0iLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZ2V0RGF0YSIsImluaXQiLCJpbml0Vmlld0xpc3QiLCJjbGlja05ldyIsImRlYnVnIiwibG9hZE1haW5Db250ZW50IiwiY2xpY2tOZXdDYWxsQmFjayIsImluaXRWaWV3RGV0YWlscyIsIlN1cHBsaWVySXRlbSIsIkNvbnRhY3RQb3BVcCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJBZGRyZXNzUG9wVXAiLCJhZGRyZXNzQWN0aW9uIiwicmVuZGVyQWRkcmVzcyIsInNldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwidG9vbHRpcCIsImluaXRSYWRpb0J1dHRvbnMiLCJvbkNoYW5nZSIsInZhbHVlIiwibm9kZSIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJpbnB1dG1hc2siLCJvbmluY29tcGxldGUiLCJ2YWwiLCJsZW5ndGgiLCJvbmNvbXBsZXRlIiwib25jbGVhcmVkIiwib2ZmIiwib24iLCJjbGlja1NhdmVCdXR0b24iLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJlYWNoIiwibm90ZSIsImNhblNlZSIsImNsaWNrIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwiYXR0ciIsImFkZHJlc3NFcXVhbCIsIm11bHRpQWRkcmVzcyIsInN1cHBsaWVyIiwic3VwcGxpZXJzIiwicHVzaCIsImVzY2FwZVNlbGVjdG9yIiwicHJvcCIsInJlc2V0Q29udGFjdFRhYmxlIiwicmVtb3ZlIiwicm93TnVtIiwiY29udGFjdERhdGEiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJyZW5kZXIiLCJNdXN0YWNoZSIsImFwcGVuZCIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiZXZlbnQiLCJyb3ciLCJjbG9zZXN0IiwiaWQiLCJmaW5kIiwiZmlsdGVyIiwiYXJyIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJzdGF0dXMiLCJsb2FkRGF0YSIsImFkZENvbnRhY3QiLCJlZGl0Q29udGFjdCIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwidGl0bGUiLCJtZXNzYWdlIiwiVE9BU1RfU1RBVFVTIiwiU1VDQ0VTUyIsInRpbWVvdXQiLCJuZXdDb250YWN0cyIsInJlc2V0QWRkcmVzc1RhYmxlIiwiaXRlbURhdGEiLCJiaW5kQWRkcmVzc0NsaWNrQWN0aW9uIiwiYWRkcmVzc0RlbGV0ZUNsaWNrIiwiYWRkcmVzc0VkaXRDbGljayIsImdldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwiYWRkQWRkcmVzcyIsImVkaXRBZGRyZXNzIiwiSXRlbURhdGEiLCJzdHJlZXQiLCJuZXdJdGVtIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJEYXRhVGFibGUiLCJsYW5ndWFnZSIsInVybCIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24iLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJ0ZXh0IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJjdXJyZW50VGFyZ2V0IiwicGFyZW50cyIsInJvd0RhdGEiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJhamF4VXJsIiwicmVwbGFjZSIsImRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSIsImFqYXhEYXRhIiwiX3Rva2VuIiwiYWpheCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJkcmF3IiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5IiwicmVwb3J0VmFsaWRpdHkiLCJEQU5HRVIiLCJzdG9wUHJvcGFnYXRpb24iLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJhamF4TWV0aG9kIiwidGFibGUiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwiZ2V0IiwiRm9ybURhdGEiLCJnZXRBbGwiLCJrZXkiLCJpbmRleEtleSIsInNldCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzP2NkMTUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIERhdGFNb2RlbFByb2ZpdENlbnRlcj09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIERhdGFNb2RlbFByb2ZpdENlbnRlciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmFkZHJlc3MgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3M9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyPURhdGFNb2RlbFByb2ZpdENlbnRlcjtcclxufVxyXG5cclxud2luZG93LlByb2ZpdENlbnRlckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByb2ZpdENlbnRlcicsXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcclxuICAgICAgICAgICAgaW5kZXg6ICcnLFxyXG4gICAgICAgICAgICBzaG93OiAnJyxcclxuICAgICAgICAgICAgZWRpdDogJycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXHJcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcclxuICAgICAgICAgICAgdXBkYXRlOiAnJyxcclxuICAgICAgICAgICAgZGVzdHJveTogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhVGFibGU6IHtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbGV0IFByb2ZpdENlbnRlciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XHJcbiAgICBsZXQgYWRkcmVzc1BvcHVwV29ya2Zsb3cgPSAnbmV3JztcclxuICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jyc7XHJcbiAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9Jyc7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9maXRDZW50ZXJBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBpZiAoIVByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2ZpdENlbnRlcnQgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZiAoIUFQUC5Qcm9maXRDZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXIgPSBuZXcgd2luZG93LkRhdGFNb2RlbFByb2ZpdENlbnRlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuUHJvZml0Q2VudGVyID0gQVBQLlByb2ZpdENlbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZml0Q2VudGVyRm9ybSc7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXREYXRhPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiByb290LlByb2ZpdENlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQ9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihQcm9maXRDZW50ZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXI9UHJvZml0Q2VudGVySXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrTmV3Jyk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld0NhbGxCYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyPW5ldyB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyKCk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhY3QgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFkZHJlc3MgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkFkZHJlc3NQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcCA9IG5ldyB3aW5kb3cuQWRkcmVzc1BvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuYWRkcmVzc0FjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQWRkcmVzcygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0FkZHJlc3MnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgICQoJ1tkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIl0nKS50b29sdGlwKCk7XHJcbiAgICAgICAgaW5pdFJhZGlvQnV0dG9ucyh7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUsbm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZGVidWcodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9kZT09PSdwcm9maXRDZW50ZXJNdWx0aUFkZHJlc3MnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyTXVsdGlBZGRyZXNzJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZihub2RlPT09J2FkZHJlc3NFcXVhbCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3NTd2l0Y2gnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzU3dpdGNoJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybStcIiA6aW5wdXRcIikuaW5wdXRtYXNrKHtcclxuICAgICAgICAgICAgXCJvbmluY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpKTtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA+IDAgfHwgJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJvbmNsZWFyZWRcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsZWFyZWQnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xyXG4vKlxyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG4qL1xyXG5cclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgICAgIGRlYnVnKCcqKmVuZCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9maXRDZW50ZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ2VtYWlsJywncG9zdENvZGUnLCdjaXR5Jywnc3RyZWV0JywncGhvbmUnLCdtb2JpbCdcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBkZWJ1Zyh0aGlzKTsgLy9hbGFwYWRhdG9rIGJlYWxsaXRhc2FuYWsgbG9nb2xhc2FcclxuICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XHJcbi8qIC8vYWxhcGFkYXRvayBiZWFsbGl0YXNhbmFrIGxvZ29sYXNhXHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyhyb290LlByb2ZpdENlbnRlclt0aGlzXSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpKTtcclxuKi9cclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5Qcm9maXRDZW50ZXJbdGhpc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwocm9vdC5Qcm9maXRDZW50ZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5jYW5TZWUrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5ob29yZXljYURhdGFBY3RpdmUrJ10nKS5jbGljaygpO1xyXG5cclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuUHJvZml0Q2VudGVyWydsb2dvRmlsZSddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1hZGRyZXNzRXF1YWxdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5hZGRyZXNzRXF1YWwrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1tdWx0aUFkZHJlc3NdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5tdWx0aUFkZHJlc3MrJ10nKS5jbGljaygpO1xyXG4gICAgICAgIC8qZGVidWcocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGgpO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9YWRkcmVzc0VxdWFsXVtkYXRhLXRpdGxlPTBdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg+MSl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9bXVsdGlBZGRyZXNzXVtkYXRhLXRpdGxlPTFdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIGxldCBzdXBwbGllcj1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuc3VwcGxpZXJzLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc3VwcGxpZXIucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XHJcbiAgICAgICAgJC5lYWNoKHN1cHBsaWVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdmFsdWU9XCInKyQuZXNjYXBlU2VsZWN0b3IodGhpcykrJ1wiXScpLnByb3AoIFwiY2hlY2tlZFwiLCB0cnVlICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWN0VGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlbmRlckNvbnRhY3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyQ29udGFjdD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0NvbnRhY3RzJyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3REZWxldGVDbGljayk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRWRpdCcpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0JykuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdEVkaXRDbGljayk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250YWN0RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0PXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdCk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBjb250YWN0UG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ2VkaXQnKTtcclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmxvYWREYXRhKGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGFjdEFjdGlvbj1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQ29udGFjdChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlByb2ZpdENlbnRlci5jb250YWN0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiS2FwY3NvbGF0IHRhcnTDsyBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0Q29udGFjdD1mdW5jdGlvbiAoaWQsY29udGFjdERhdGEpe1xyXG5cclxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdD1uZXdDb250YWN0cztcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiS2FwY3NvbGF0IGFkYXRhaSBtw7Nkb3PDrXR2YSFcIiwgbWVzc2FnZTogY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBvY3NvbGF0dGFydMOzIG3Ds2Rvc8OtdHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKioqKioqKioqKioqKipcclxuICAgICAqXHJcbiAgICAgKiBBZGRyZXNzIGZ1bmN0aW9uXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc2V0QWRkcmVzc1RhYmxlPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmFkZHJlc3NUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQWRkcmVzcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJBZGRyZXNzPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQWRkcmVzcycpO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdhZGRyZXNzJyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBpdGVtRGF0YT10aGlzO1xyXG4gICAgICAgICAgICBpdGVtRGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQWRkcmVzc1RhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGRlYnVnKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsaXRlbURhdGEpO1xyXG4gICAgICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZEFkZHJlc3NDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZEFkZHJlc3NDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRGVsZXRlJykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmFkZHJlc3NEZWxldGVDbGljayk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRWRpdCcpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25FZGl0JykuYmluZCgnY2xpY2snLHJvb3QuYWRkcmVzc0VkaXRDbGljayk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRyZXNzRGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9XCJhZGRyZXNzSWRbXVwiXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPXJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9aWQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2ZpdENlbnRlci5hZGRyZXNzKTtcclxuICAgICAgICByb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZXNldEFkZHJlc3NUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRBZGRyZXNzUG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gYWRkcmVzc1BvcHVwV29ya2Zsb3c7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEFkZHJlc3NQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGFkZHJlc3NQb3B1cFdvcmtmbG93PXN0YXR1cztcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5hZGRyZXNzRWRpdENsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPVwiYWRkcmVzc0lkW11cIl0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpZCk7XHJcbiAgICAgICAgcm9vdC5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5BZGRyZXNzUG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRyZXNzQWN0aW9uPWZ1bmN0aW9uIChpdGVtRGF0YSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25haCBtb3N0IGtlbGxlbmUgbWVnIHZhbGFtaXQgY3NpbmFsbmkuJylcclxuICAgICAgICBpZihyb290LmdldEFkZHJlc3NQb3B1cFdvcmtmbG93KCk9PSduZXcnKXtcclxuICAgICAgICAgICAgcm9vdC5hZGRBZGRyZXNzKGl0ZW1EYXRhKTtcclxuICAgICAgICB9ZWxzZSBpZihyb290LmdldEFkZHJlc3NQb3B1cFdvcmtmbG93KCk9PSdlZGl0Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuZWRpdEFkZHJlc3MoaXRlbURhdGEuaWQsaXRlbURhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWRkQWRkcmVzcz1mdW5jdGlvbiAoSXRlbURhdGEpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MucHVzaChJdGVtRGF0YSk7XHJcbiAgICAgICAgSXRlbURhdGEucm93TnVtPXJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJBZGRyZXNzVGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxJdGVtRGF0YSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYWRkcmVzc1RhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQWRkcmVzc0NsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJDw61tIGhvenrDoWFkdmEhXCIsIG1lc3NhZ2U6IEl0ZW1EYXRhLnN0cmVldCtcIiBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRBZGRyZXNzPWZ1bmN0aW9uIChpZCxpdGVtRGF0YSl7XHJcblxyXG4gICAgICAgIGxldCBuZXdJdGVtPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdhZGRyZXNzJyksZnVuY3Rpb24gKGluZGV4KXtcclxuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xyXG4gICAgICAgICAgICAgICAgbmV3SXRlbS5wdXNoKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPW5ld0l0ZW07XHJcbiAgICAgICAgcm9vdC5yZXNldEFkZHJlc3NUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcImPDrW0gYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBtZXNzYWdlOiBpdGVtRGF0YS5zdHJlZXQrXCIgbcOzZG9zw610dmFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zdWNjZXNzIG5ld0l0ZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6J25ld0l0ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5vZGUpLnJlbW92ZUNsYXNzKCd1aS1idXR0b24nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnKTsqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgLy9cInN0YXRlU2F2ZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XHJcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKTtcclxuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgZW5kJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKE9wdHMuVVJMKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIENhbGxlZCcpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZGVidWcoQ1NTU2VsZWN0b3JGb3JtKTtcclxuICAgICAgICBkZWJ1ZygkKENTU1NlbGVjdG9yRm9ybSkpO1xyXG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5hZGRDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSlbMF0ucmVwb3J0VmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiVmFsaWTDoWNpw7NzIGhpYmEhXCIsIG1lc3NhZ2U6IFwiS8OpcmrDvGssIHTDtmx0c2Uga2kgYSBrw7Z0ZWxlesWRIG1lesWRa2V0IVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkucmVtb3ZlQ2xhc3MoJ3dhcy12YWxpZGF0ZWQnKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9maXRDZW50ZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG4vKlxyXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xyXG4gICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgY29uc29sZS50YWJsZShPYmplY3QuZnJvbUVudHJpZXMoYWpheERhdGEpKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHByb2ZpdGNlbnRlciBlbG1lbnR2ZVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuLypcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsIFByb2ZpdENlbnRlckl0ZW0pO1xyXG5cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLHFCQUFxQixLQUFHLFdBQVcsRUFBQztFQUFBLElB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S0FBSyxFQUFFLG1CQUFtQjtZQUFFQyxPQUFPLEVBQUVtRCxRQUFRLENBQUNtQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUMsNkJBQTZCO1lBQUU3RSxNQUFNLEVBQUVRLFlBQVksQ0FBQ0MsT0FBTztZQUFFQyxPQUFPLEVBQUU7VUFBSyxDQUFDLENBQUM7VUFDdEpyRixHQUFHLENBQUNPLGVBQWUsQ0FBQ2hDLElBQUksQ0FBQ0ksR0FBRyxDQUFDRSxLQUFLLEdBQUMsU0FBUyxFQUFDVyxJQUFJLENBQUNZLFlBQVksQ0FBQztRQUNuRTtNQUNKO0lBQ0osQ0FBQyxDQUFDO0VBQ04sQ0FBQztFQUVELElBQUksQ0FBQzRJLDJCQUEyQixHQUFHLFVBQVVySixlQUFlLEVBQUU7SUFDMUQsSUFBSTBJLFFBQVEsR0FBQyxJQUFJb0IsUUFBUSxDQUFDM0osQ0FBQyxDQUFDSCxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ1FHLENBQUMsQ0FBQzJDLElBQUksQ0FBQzRGLFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBQyxVQUFTQyxHQUFHLEVBQUNqSSxLQUFLLEVBQUM7TUFDbkQyRyxRQUFRLENBQUN2RSxNQUFNLENBQUMsYUFBYSxFQUFDcEMsS0FBSyxDQUFDO0lBQ3hDLENBQUMsQ0FBQztJQUVGMkcsUUFBUSxDQUFDdkUsTUFBTSxDQUFDLFFBQVEsRUFBQ2hFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDa0MsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV2RGxDLENBQUMsQ0FBQ0gsZUFBZSxHQUFDLHdCQUF3QixDQUFDLENBQUM4QyxJQUFJLENBQUMsWUFBVztNQUN4RCxJQUFJbUgsUUFBUSxHQUFDOUosQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDZ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQztNQUNqQyxJQUFHdUYsUUFBUSxDQUFDbUIsR0FBRyxDQUFDSSxRQUFRLENBQUMsRUFBQztRQUN0QnZCLFFBQVEsQ0FBQ3dCLEdBQUcsQ0FBQ0QsUUFBUSxFQUFDdkIsUUFBUSxDQUFDbUIsR0FBRyxDQUFDSSxRQUFRLENBQUMsQ0FBQ3pCLE9BQU8sQ0FBQyxTQUFTLEVBQUMsRUFBRSxDQUFDLENBQUM7TUFDdkU7SUFDSixDQUFDLENBQUM7SUFDRnJJLENBQUMsQ0FBQzJDLElBQUksQ0FBQzRGLFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBQyxVQUFTQyxHQUFHLEVBQUNqSSxLQUFLLEVBQUM7TUFDbEQyRyxRQUFRLENBQUN2RSxNQUFNLENBQUMsWUFBWSxFQUFDcEMsS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztJQUNGLE9BQU8yRyxRQUFRO0VBQ25CLENBQUM7RUFDRCxJQUFJLENBQUN4SSxTQUFTLENBQUN0QyxPQUFPLEVBQUVlLGdCQUFnQixDQUFDO0FBRTdDLENBQUMiLCJpZ25vcmVMaXN0IjpbXSwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL2FkbWluL3Byb2ZpdENlbnRlci5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/profitCenter.js\n\n}");
|
|
|
|
/***/ },
|
|
|
|
/***/ "./resources/js/admin/supplier.js"
|
|
/*!****************************************!*\
|
|
!*** ./resources/js/admin/supplier.js ***!
|
|
\****************************************/
|
|
() {
|
|
|
|
eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n /*\n * Constructor\n */\n function _Supplier(data, options) {\n var _this;\n _classCallCheck(this, _Supplier);\n _this = _callSuper(this, _Supplier, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.canSee === \"undefined\") {\n _this.canSee = 1;\n }\n if (typeof _this.canSeeInOrder === \"undefined\") {\n _this.canSeeInOrder = 1;\n }\n if (typeof _this.hasDeliveryConstraint === \"undefined\") {\n _this.hasDeliveryConstraint = 0;\n }\n if (typeof _this.orderCutOffTime === \"undefined\") {\n _this.orderCutOffTime = 12;\n }\n if (typeof _this.deliveryLeadTime === \"undefined\") {\n _this.deliveryLeadTime = 48;\n }\n console.log('Supplier constructor called');\n return _this;\n }\n _inherits(_Supplier, _DataModel);\n return _createClass(_Supplier);\n }(DataModel);\n ;\n window.Supplier = _Supplier;\n}\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\n * Variables accessible\n * in the class\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerSupplier',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: '',\n createUser: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\n * Constructor\n */\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n root.Supplier = APP.Supplier;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector));\n //let formJSON = Object.fromEntries(data.entries());\n var formJSON = {};\n data.forEach(function (value, key) {\n // Reflect.has in favor of: formJSON.hasOwnProperty(key)\n if (!Reflect.has(formJSON, key)) {\n formJSON[key] = value;\n return;\n }\n if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\n }\n formJSON[key].push(value);\n });\n $(CSSSelector + ' input[data-inputmask]').each(function () {\n if (formJSON[$(this).attr('name')]) {\n formJSON[$(this).attr('name')] = formJSON[$(this).attr('name')].replace(/[_ ]+$/g, \"\");\n }\n });\n //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\n formJSON.multiselectName = data.getAll('multiselectName');\n $.each(formJSON, function (item, value) {\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\n delete formJSON[item];\n });\n if(formJSON.phone){\n formJSON.phone=formJSON.phone.replaceAll('_','');\n }\n if(formJSON.email){\n formJSON.email=formJSON.email.replaceAll('_','');\n }\n */\n return formJSON;\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenter[]', value);\n });\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroup[]', value);\n });\n $.each(ajaxData.getAll('supplierService'), function (key, value) {\n ajaxData.append('supplierService[]', value);\n });\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\n if ($(CSSSelectorForm + ' input[name=\"canSeeInOrder\"]').val() == 1 && $(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n $(CSSSelectorForm).addClass('was-validated');\n $(CSSSelectorForm)[0].reportValidity();\n Toast.create({\n title: \"Validációs hiba!\",\n message: \"Kérjük, töltse ki a kötelező mezőket!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n $(CSSSelectorForm).removeClass('was-validated');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug('d1: Save success ');\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű beszálllító elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n console.log(Supplier);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'orderEmail', 'orderEmail2', 'address', 'mailingAddress', 'phone', 'fax', 'customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue'];\n $.each(needToSet, function () {\n if (typeof root.Supplier[this] != 'undefined') {\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.Supplier[this]);\n $(CSSSelectorForm + ' textarea[name=' + this + ']').val(root.Supplier[this]);\n }\n });\n if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.Supplier.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=canSeeInOrder][data-title=' + root.Supplier.canSeeInOrder + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.Supplier.hooreycaDataActive + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hasDeliveryConstraint][data-title=' + root.Supplier.hasDeliveryConstraint + ']').click();\n $(CSSSelectorForm + ' input[name=orderCutOffTime]').val(root.Supplier.orderCutOffTime);\n $(CSSSelectorForm + ' select[name=deliveryLeadTime]').val(root.Supplier.deliveryLeadTime);\n var productGroup = [];\n $.each(root.Supplier.product_group, function () {\n productGroup.push(this.name);\n });\n $(CSSSelectorForm + ' .productCategorySelect').val(productGroup).change();\n var service = [];\n $.each(root.Supplier.service, function () {\n service.push(this.name);\n });\n $(CSSSelectorForm + ' .serviceSelect').val(service).change();\n var profitCenter = [];\n $.each(root.Supplier.profit_center, function () {\n profitCenter.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n }\n if (typeof root.Supplier.users !== 'undefined') {\n root.resetUserTable();\n }\n\n //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']);\n //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change();\n //root.setDetailsViewData();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $('.supplierForm .buttonNewContact').bind('click', function () {\n APP.SupplierAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons();\n $(\":input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $('form.supplierForm button.FormSaveButton').off('click');\n $('form.supplierForm button.FormSaveButton').on('click', root.clickSaveButton);\n root.setDetailsViewData();\n root.initUserCreate();\n $(\".productCategorySelect\").select2();\n $(\".serviceSelect\").select2({\n tags: true,\n createTag: function createTag(params) {\n var term = $.trim(params.term);\n if (term === '') {\n return null;\n }\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n };\n }\n });\n\n //$(\".profitCenterSelect\").select2();\n $(\"input[name=logoFile]\").change(function () {\n setImageFromLocal(this, Opts.containerCssSelector + ' .imageLogo');\n });\n $('form.supplierForm .profitCenterSelectCheckboxAll').off('click');\n $('form.supplierForm .profitCenterSelectCheckboxAll').on('click', function () {\n //console.log();\n //let checked=$(this).is(\":checked\")\n $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked', $(this).is(\":checked\"));\n });\n root.renderAttachment();\n //Opts.onAfterInitViewDetails();\n root.initFileAttachmentFeature();\n root.initDeliveryConstraintToggle();\n debug('**end initViewDetails ');\n };\n this.initDeliveryConstraintToggle = function () {\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var toggleDeliveryFields = function toggleDeliveryFields() {\n var val = $(CSSSelectorForm + ' input[name=\"hasDeliveryConstraint\"]').val();\n if (val == 1) {\n $(CSSSelectorForm + ' .deliveryConstraintFields').show();\n } else {\n $(CSSSelectorForm + ' .deliveryConstraintFields').hide();\n }\n };\n $(CSSSelectorForm + ' a[data-toggle=\"hasDeliveryConstraint\"]').off('click.deliveryConstraint');\n $(CSSSelectorForm + ' a[data-toggle=\"hasDeliveryConstraint\"]').on('click.deliveryConstraint', function () {\n setTimeout(toggleDeliveryFields, 0);\n });\n toggleDeliveryFields();\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\n console.log(fileInput.attr('name'));\n console.log(fileInput[0].files[0]);\n console.log(fileInput[0].files[0].name);\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.custom-file-label.selected').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n if (fileInput[0].files.length < 1) {\n Toast.create({\n title: \"Hiba!\",\n message: 'Vállaszon ki fájlt!',\n status: TOAST_STATUS.DANGER,\n timeout: 10000\n });\n return;\n }\n console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n var data = new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n var ajaxUrl = Opts.URL.attachFile.replace('%id%', root.Supplier.id);\n console.groupEnd();\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.addAttachment(data.data.attachment);\n root.selectedUploadFileToggle();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickSupplierDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n ajaxData._token = $('input[name=_token]').val();\n console.log(ajaxUrl);\n console.log(ajaxData);\n var row = $(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr'));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n root.dadatatableRowActionCallerNode = false;\n }\n }\n });\n };\n var datatableRowActionCallerNode = false;\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n root.dadatatableRowActionCallerNode = node;\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a beszállítót?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: rowData.id\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\n data:{\n a:1,\n b:2\n }\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\n console.log(dt);\n console.log(node);\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\n }, null],\n \"order\": orderDirective,\n \"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n };\n this.autofillDetails = function () {\n debug('nyeresre allunk');\n var randomNumber = getRandomInt(9999);\n $('input[name=name]').val('Beszalító' + randomNumber);\n $('input[name=hooreycaId]').val('hb' + randomNumber);\n $('input[name=nameId]').val('be' + randomNumber);\n $('input[name=orderEmail]').val('kapcsolat' + randomNumber + '@beszallito.hu');\n $('input[name=orderEmail2]').val('informacio' + randomNumber + '@beszallito.hu');\n $('input[name=address]').val('8989 Supplier utca ' + randomNumber);\n $('input[name=mailingAddress]').val('8989 Postai út' + randomNumber);\n $('input[name=phone]').val('+36301234567');\n $('input[name=fax]').val('36308889999');\n $('input[name=customerServicePhone]').val('+36761234444');\n $('textarea[name=note]').val('Megjegyzem ' + randomNumber);\n };\n this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\n {\n id:3,\n name:'Kósa Veronika',\n email:'szamlazas4@funkcio.hu',\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\n }\n */]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n root.initViewList();\n };\n this.renderAttachment = function () {\n var rowNum = 1;\n console.log('renderingAttachment');\n $.each(root.Supplier.getData('attachment'), function () {\n var attachmentData = this;\n attachmentData.rowNum = rowNum;\n date = new Date(attachmentData.created_at);\n attachmentData.date = date.toLocaleString();\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $('.attachmentTable tbody').append(render);\n rowNum++;\n });\n root.bindAttachmentClickAction();\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n root.Supplier.attachment.push(attachmentData);\n attachmentData.rowNum = root.Supplier.attachment.length;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Fájl hozzáadva!\",\n message: attachmentData.original_filename + \" fájl hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n //console.log(contactData);\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n var node = $('.contactTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.contactDeleteClick);\n node = $('.contactTable .buttonEdit');\n node.unbind('click');\n node.bind('click', root.contactEditClick);\n };\n this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n var currentAttachmentRow = false;\n this.attachmentDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=attachmentId]').val();\n var ajaxUrl = Opts.URL.detachFile.replace('%id%', root.Supplier.id);\n //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\n var data = {};\n data._token = $('input[name=\"_token\"]').val();\n data.attachemntId = id;\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n //contentType:false,\n //processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.Supplier.attachment = root.Supplier.attachment.filter(function (value, index, arr) {\n if (value.id !== data.data.attachment.id * 1) {\n return true;\n }\n return false;\n });\n /*\n */\n //row.remove();\n root.resetAttachmentTable();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.Supplier.contact = root.Supplier.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n row.remove();\n root.resetContactTable();\n };\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n //console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.getSupplier = function () {\n return root.Supplier;\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.Supplier.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.Supplier.contact = newContacts;\n root.resetContactTable();\n Toast.create({\n title: \"Kapcsolat adatai módosítva!\",\n message: contactData.name + \" nevű kapcsolattartó módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.addContact = function (contactData) {\n /*\n fel kell venni a sorba\n */\n root.Supplier.contact.push(contactData);\n contactData.rowNum = root.Supplier.contact.length;\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Kapcsolattartó hozzáadva!\",\n message: contactData.name + \" nevű kapcsolattartó hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.resetUserTable = function () {\n $('.supplierUserTable tbody tr').remove();\n root.renderUsers();\n };\n this.renderUsers = function () {\n var rowNum = 1;\n var users = root.Supplier.users || [];\n $.each(users, function () {\n var userData = $.extend({}, this);\n userData.rowNum = rowNum;\n var template = $('template[data-name=\"supplierUserTableRow\"]').html();\n var render = Mustache.render(template, userData);\n $('.supplierUserTable tbody').append(render);\n rowNum++;\n });\n root.bindUserClickAction();\n };\n this.bindUserClickAction = function () {\n var node = $('.supplierUserTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.userDeleteClick);\n };\n this.userDeleteClick = function () {\n var row = $(this).closest('tr');\n var id = row.find('input[name=userId]').val() * 1;\n root.Supplier.users = root.Supplier.users.filter(function (value) {\n return value.id !== id;\n });\n row.remove();\n root.resetUserTable();\n };\n this.addUser = function (userData) {\n if (!root.Supplier.users) {\n root.Supplier.users = [];\n }\n var alreadyAdded = root.Supplier.users.some(function (u) {\n return u.id === userData.id;\n });\n if (alreadyAdded) {\n return;\n }\n root.Supplier.users.push(userData);\n userData.rowNum = root.Supplier.users.length;\n var template = $('template[data-name=\"supplierUserTableRow\"]').html();\n var render = Mustache.render(template, userData);\n $('.supplierUserTable tbody').append(render);\n root.bindUserClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: 'Felhasználó hozzáadva!',\n message: userData.name + ' hozzárendelve',\n status: TOAST_STATUS.SUCCESS,\n timeout: 3000\n });\n };\n this.initUserCreate = function () {\n var createUrl = Opts.URL.createUser || '';\n var container = $(Opts.containerCssSelector);\n function clearForm() {\n container.find('.supplierNewUserName').val('');\n container.find('.supplierNewUserEmail').val('');\n container.find('.supplierNewUserPassword').val('');\n container.find('.supplierNewUserError').hide().text('');\n }\n container.find('.buttonCreateUser').off('click').on('click', function () {\n var name = container.find('.supplierNewUserName').val().trim();\n var email = container.find('.supplierNewUserEmail').val().trim();\n var password = container.find('.supplierNewUserPassword').val();\n var errorEl = container.find('.supplierNewUserError');\n errorEl.hide().text('');\n if (!name || !email || !password) {\n errorEl.text('Minden mező kitöltése kötelező!').show();\n return;\n }\n $.ajax({\n url: createUrl,\n type: 'POST',\n data: {\n name: name,\n email: email,\n password: password\n },\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n if (data.success) {\n root.addUser(data.user);\n clearForm();\n } else {\n errorEl.text('Hiba történt a felhasználó létrehozásakor!').show();\n }\n },\n error: function error(xhr) {\n var msg = 'Hiba történt!';\n if (xhr.responseJSON && xhr.responseJSON.errors) {\n var errors = xhr.responseJSON.errors;\n var firstKey = Object.keys(errors)[0];\n msg = errors[firstKey][0];\n }\n errorEl.text(msg).show();\n }\n });\n });\n };\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjYW5TZWUiLCJjYW5TZWVJbk9yZGVyIiwiaGFzRGVsaXZlcnlDb25zdHJhaW50Iiwib3JkZXJDdXRPZmZUaW1lIiwiZGVsaXZlcnlMZWFkVGltZSIsImNvbnNvbGUiLCJsb2ciLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJEYXRhTW9kZWwiLCJ3aW5kb3ciLCJTdXBwbGllckFkbWluIiwiU3VwcGxpZXJJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiYXR0YWNoRmlsZSIsImRldGFjaEZpbGUiLCJjcmVhdGVVc2VyIiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsIkFQUCIsImdldE9wdHMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQiLCJDU1NTZWxlY3RvciIsIkZvcm1EYXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZm9ybUpTT04iLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJSZWZsZWN0IiwiaGFzIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsImVhY2giLCJhdHRyIiwicmVwbGFjZSIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsIkNTU1NlbGVjdG9yRm9ybSIsImFqYXhEYXRhIiwiZ2V0QWxsIiwiYXBwZW5kIiwidmFsIiwiaW5kZXhLZXkiLCJnZXQiLCJzZXQiLCJjbGlja1NhdmVCdXR0b24iLCJldmVudCIsImRlYnVnIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5IiwiYWRkQ2xhc3MiLCJyZXBvcnRWYWxpZGl0eSIsIlRvYXN0IiwidGl0bGUiLCJtZXNzYWdlIiwic3RhdHVzIiwiVE9BU1RfU1RBVFVTIiwiREFOR0VSIiwidGltZW91dCIsInN0b3BQcm9wYWdhdGlvbiIsInJlbW92ZUNsYXNzIiwiYWpheFVybCIsImFqYXhNZXRob2QiLCJpZCIsImFqYXgiLCJ1cmwiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiU1VDQ0VTUyIsImxvYWRNYWluQ29udGVudCIsImluaXRWaWV3TGlzdCIsInNldERldGFpbHNWaWV3RGF0YSIsIm5lZWRUb1NldCIsIm5vdGUiLCJwcm9wIiwiY2xpY2siLCJob29yZXljYURhdGFBY3RpdmUiLCJwcm9kdWN0R3JvdXAiLCJwcm9kdWN0X2dyb3VwIiwibmFtZSIsImNoYW5nZSIsInNlcnZpY2UiLCJwcm9maXRDZW50ZXIiLCJwcm9maXRfY2VudGVyIiwiZXNjYXBlU2VsZWN0b3IiLCJ1c2VycyIsInJlc2V0VXNlclRhYmxlIiwiaW5pdFZpZXdEZXRhaWxzIiwiQ29udGFjdFBvcFVwIiwiaW5pdCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJ0b29sdGlwIiwiaW5pdFJhZGlvQnV0dG9ucyIsImlucHV0bWFzayIsIm9uaW5jb21wbGV0ZSIsImxlbmd0aCIsIm9uY29tcGxldGUiLCJvbmNsZWFyZWQiLCJvZmYiLCJvbiIsImluaXRVc2VyQ3JlYXRlIiwic2VsZWN0MiIsInRhZ3MiLCJjcmVhdGVUYWciLCJwYXJhbXMiLCJ0ZXJtIiwidHJpbSIsInRleHQiLCJuZXdUYWciLCJzZXRJbWFnZUZyb21Mb2NhbCIsImlzIiwicmVuZGVyQXR0YWNobWVudCIsImluaXRGaWxlQXR0YWNobWVudEZlYXR1cmUiLCJpbml0RGVsaXZlcnlDb25zdHJhaW50VG9nZ2xlIiwidG9nZ2xlRGVsaXZlcnlGaWVsZHMiLCJoaWRlIiwic2V0VGltZW91dCIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwiZ3JvdXAiLCJmaW5kIiwiZ3JvdXBFbmQiLCJiZWZvcmVTZW5kIiwiYWRkQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImNsaWNrTmV3IiwiY2xpY2tOZXdDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJyb3dEYXRhIiwibm9kZSIsImNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQiLCJtb2RhbCIsIl90b2tlbiIsInJvdyIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiRGF0YVRhYmxlIiwiZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwicGFyZW50cyIsIm1ldGhvZCIsInJlbW92ZSIsImRyYXciLCJkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwiZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJsYW5ndWFnZSIsInJlbmRlciIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJsYXRpbmlzZSIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImFwaSIsImNvbmZpZyIsImFjdGlvbiIsImUiLCJkdCIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwiYXV0b2ZpbGxEZXRhaWxzIiwicmFuZG9tTnVtYmVyIiwiZ2V0UmFuZG9tSW50Iiwicm93TnVtIiwiZ2V0RGF0YSIsImF0dGFjaG1lbnREYXRhIiwiZGF0ZSIsIkRhdGUiLCJjcmVhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJsaW5rIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJNdXN0YWNoZSIsImJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24iLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwiZW5hYmxlVGltZXJzIiwib3JpZ2luYWxfZmlsZW5hbWUiLCJyZXNldENvbnRhY3RUYWJsZSIsImNvbnRhY3REYXRhIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImF0dGFjaG1lbnREZWxldGVDbGljayIsImN1cnJlbnRBdHRhY2htZW50Um93IiwiY2xvc2VzdCIsImF0dGFjaGVtbnRJZCIsImZpbHRlciIsImFyciIsInJlc2V0QXR0YWNobWVudFRhYmxlIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJsb2FkRGF0YSIsImdldFN1cHBsaWVyIiwiYWRkQ29udGFjdCIsImVkaXRDb250YWN0IiwibmV3Q29udGFjdHMiLCJyZW5kZXJVc2VycyIsInVzZXJEYXRhIiwiYmluZFVzZXJDbGlja0FjdGlvbiIsInVzZXJEZWxldGVDbGljayIsImFkZFVzZXIiLCJhbHJlYWR5QWRkZWQiLCJzb21lIiwidSIsImNyZWF0ZVVybCIsImNvbnRhaW5lciIsImNsZWFyRm9ybSIsImVtYWlsIiwicGFzc3dvcmQiLCJlcnJvckVsIiwidXNlciIsInhociIsIm1zZyIsImVycm9ycyIsImZpcnN0S2V5IiwiT2JqZWN0Iiwia2V5cyJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanM/YTdjNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgU3VwcGxpZXI9PT0ndW5kZWZpbmVkJyl7XG4gICAgY2xhc3MgU3VwcGxpZXIgZXh0ZW5kcyBEYXRhTW9kZWx7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQ29uc3RydWN0b3JcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHN1cGVyKGRhdGEsb3B0aW9ucylcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuY2FuU2VlID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuU2VlPTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jYW5TZWVJbk9yZGVyID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuU2VlSW5PcmRlcj0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuaGFzRGVsaXZlcnlDb25zdHJhaW50ID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzRGVsaXZlcnlDb25zdHJhaW50PTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5vcmRlckN1dE9mZlRpbWUgPT09XCJ1bmRlZmluZWRcIil7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlckN1dE9mZlRpbWU9MTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5kZWxpdmVyeUxlYWRUaW1lID09PVwidW5kZWZpbmVkXCIpe1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsaXZlcnlMZWFkVGltZT00ODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllciBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHdpbmRvdy5TdXBwbGllcj1TdXBwbGllcjtcbn1cblxuXG53aW5kb3cuU3VwcGxpZXJBZG1pbj1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pIHtcbiAgICAvKlxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXG4gICAgICogaW4gdGhlIGNsYXNzXG4gICAgICovXG4gICAgbGV0IE9wdHMgPSB7XG4gICAgICAgIHRva2VuOm51bGwsXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclN1cHBsaWVyJyxcbiAgICAgICAgdGVzdE1vZGU6ZmFsc2UsXG4gICAgICAgIFVSTDp7XG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxuICAgICAgICAgICAgaW5kZXg6JycsXG4gICAgICAgICAgICBzaG93OicnLFxuICAgICAgICAgICAgZWRpdDonJyxcbiAgICAgICAgICAgIGNyZWF0ZTonJyxcbiAgICAgICAgICAgIHN0b3JlOicnLFxuICAgICAgICAgICAgdXBkYXRlOicnLFxuICAgICAgICAgICAgZGVzdHJveTonJyxcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6JycsXG4gICAgICAgICAgICBkZXRhY2hGaWxlOicnLFxuICAgICAgICAgICAgY3JlYXRlVXNlcjonJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YVRhYmxlOntcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlOlsxLCAnYXNjJ11cbiAgICAgICAgfSxcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczpmdW5jdGlvbiAoKXt9XG4gICAgfTtcbiAgICBsZXQgU3VwcGxpZXIgPSB7fTtcbiAgICBsZXQgcm9vdCA9IHRoaXM7XG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93PSduZXcnO1xuICAgIC8qXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xuICAgICAgICBjb25zb2xlLmxvZygnU3VwcGxpZXJBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG4gICAgICAgIGlmKCFTdXBwbGllckl0ZW0pe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1cHBsaWVyIGxldHJlIGtlbGxldCBob3puaSAnKTtcbiAgICAgICAgICAgIGlmKCFBUFAuU3VwcGxpZXIpe1xuICAgICAgICAgICAgICAgIEFQUC5TdXBwbGllcj1uZXcgd2luZG93LlN1cHBsaWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290LlN1cHBsaWVyPUFQUC5TdXBwbGllcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uICgpe1xuICAgICAgICByZXR1cm4gT3B0cztcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbE9sZD0gZnVuY3Rpb24gKENTU1NlbGVjdG9yKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQ1NTU2VsZWN0b3IpKTtcbiAgICAgICAgLy9sZXQgZm9ybUpTT04gPSBPYmplY3QuZnJvbUVudHJpZXMoZGF0YS5lbnRyaWVzKCkpO1xuICAgICAgICB2YXIgZm9ybUpTT04gPSB7fTtcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAvLyBSZWZsZWN0LmhhcyBpbiBmYXZvciBvZjogZm9ybUpTT04uaGFzT3duUHJvcGVydHkoa2V5KVxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKGZvcm1KU09OLCBrZXkpKXtcbiAgICAgICAgICAgICAgICBmb3JtSlNPTltrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZm9ybUpTT05ba2V5XSkpe1xuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSBbZm9ybUpTT05ba2V5XV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3JtSlNPTltrZXldLnB1c2godmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKENTU1NlbGVjdG9yKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGlmKGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXSl7XG4gICAgICAgICAgICAgICAgZm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldPWZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXS5yZXBsYWNlKC9bXyBdKyQvZyxcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vZm9ybUpTT04ucHJvZHVjdEdyb3Vwcz0kKFwiLnByb2R1Y3RDYXRlZ29yeVNlbGVjdFwiKS5zZWxlY3QyKCkudmFsKCk7XG5cblxuICAgICAgICAvKk11bHRpc2VsZWN0IG9yIGNoZWNrYm94IHRvIGFycmF5OlxuICAgICAgICBhamF4RGF0YVsncHJvZHVjdEdyb3VwJ109JChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpLnZhbCgpO1xuXG4gICAgICAgIGZvcm1KU09OLm11bHRpc2VsZWN0TmFtZSA9IGRhdGEuZ2V0QWxsKCdtdWx0aXNlbGVjdE5hbWUnKTtcbiAgICAgICAgJC5lYWNoKGZvcm1KU09OLCBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGZvcm1KU09OWyQubGNGaXJzdChpdGVtLnJlcGxhY2UoJ2NvbnRhY3QnLCAnJykpXSA9IHZhbHVlO1xuICAgICAgICAgICAgZGVsZXRlIGZvcm1KU09OW2l0ZW1dO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYoZm9ybUpTT04ucGhvbmUpe1xuICAgICAgICAgICAgZm9ybUpTT04ucGhvbmU9Zm9ybUpTT04ucGhvbmUucmVwbGFjZUFsbCgnXycsJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGZvcm1KU09OLmVtYWlsKXtcbiAgICAgICAgICAgIGZvcm1KU09OLmVtYWlsPWZvcm1KU09OLmVtYWlsLnJlcGxhY2VBbGwoJ18nLCcnKTtcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICByZXR1cm4gZm9ybUpTT047XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZml0Q2VudGVyJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZml0Q2VudGVyW10nLHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgncHJvZHVjdEdyb3VwJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjdEdyb3VwW10nLHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXJTZXJ2aWNlJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3VwcGxpZXJTZXJ2aWNlW10nLHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnY29udGFjdElkJyksZnVuY3Rpb24oa2V5LHZhbHVlKXtcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnY29udGFjdElkW10nLHZhbHVlKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ190b2tlbicsJCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCkpO1xuXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGxldCBpbmRleEtleT0kKHRoaXMpLmF0dHIoJ25hbWUnKTtcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xuICAgICAgICAgICAgICAgIGFqYXhEYXRhLnNldChpbmRleEtleSxhamF4RGF0YS5nZXQoaW5kZXhLZXkpLnJlcGxhY2UoL1tfIF0rJC9nLFwiXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhO1xuICAgIH1cblxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBkZWJ1ZygnU2F2ZSBjbGlja2VkJyk7XG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5zdXBwbGllckZvcm0nO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9XCJjYW5TZWVJbk9yZGVyXCJdJykudmFsKCk9PTEgJiYgJChDU1NTZWxlY3RvckZvcm0pWzBdLmNoZWNrVmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gZmFsc2UnKTtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5hZGRDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0pWzBdLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJWYWxpZMOhY2nDs3MgaGliYSFcIiwgbWVzc2FnZTogXCJLw6lyasO8aywgdMO2bHRzZSBraSBhIGvDtnRlbGV6xZEgbWV6xZFrZXQhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUiwgdGltZW91dDogNTAwMCB9KTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0pLnJlbW92ZUNsYXNzKCd3YXMtdmFsaWRhdGVkJyk7XG4gICAgICAgICAgICAvL2RvIHlvdXIgYWpheCBzdWJtaXRpb24gaGVyZVxuICAgICAgICB9XG4gICAgICAgIGxldCBhamF4RGF0YT1yb290LmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbChDU1NTZWxlY3RvckZvcm0pO1xuXG5cblxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5zdG9yZTtcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcbiAgICAgICAgICAgIC8vYWpheERhdGE9bmV3IEZvcm1EYXRhKCQoQ1NTU2VsZWN0b3JGb3JtKVswXSk7XG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ19tZXRob2QnLCdQVVQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICAgICAgICAgIGRlYnVnKCdkMTogU2F2ZSBzdWNjZXNzICcpO1xuICAgICAgICAgICAgICAgIGRlYnVnKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHM9cm9vdC5hdXRvZmlsbERldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xuICAgICAgICAgICAgICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJTaWtlcmVzIHLDtmd6w610w6lzIVwiLCBtZXNzYWdlOiBhamF4RGF0YS5nZXQoJ25hbWUnKStcIiBuZXbFsSBiZXN6w6FsbGzDrXTDsyBlbG1lbnR2ZVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgICAgICAgICAgICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmluZGV4Kyc/aW5pdD0wJyxyb290LmluaXRWaWV3TGlzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXREZXRhaWxzVmlld0RhdGE9ZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1Zygnc2V0RGV0YWlsc1ZpZXdEYXRhJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKFN1cHBsaWVyKTtcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XG4gICAgICAgIGxldCBuZWVkVG9TZXQ9W1xuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcbiAgICAgICAgICAgICdvcmRlckVtYWlsJywnb3JkZXJFbWFpbDInLCdhZGRyZXNzJywnbWFpbGluZ0FkZHJlc3MnLCdwaG9uZScsJ2ZheCcsJ2N1c3RvbWVyU2VydmljZVBob25lJyxcbiAgICAgICAgICAgICduYW1lMjInLFxuICAgICAgICAgICAgJ29wZW5Ib3VycycsICdvcmRlcnNEZWFkbGluZScsICdtaW5PcmRlclZhbHVlJyxcbiAgICAgICAgXTtcbiAgICAgICAgJC5lYWNoKG5lZWRUb1NldCxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclt0aGlzXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuU3VwcGxpZXIubm90ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXJbJ2VtYWlsQXR0YWNobWVudFR5cGUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWVtYWlsQXR0YWNobWVudFR5cGVdW3ZhbHVlPScrcm9vdC5TdXBwbGllclsnZW1haWxBdHRhY2htZW50VHlwZSddKyddJykucHJvcCgnY2hlY2tlZCcsdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZV1bZGF0YS10aXRsZT0nK3Jvb3QuU3VwcGxpZXIuY2FuU2VlKyddJykuY2xpY2soKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZUluT3JkZXJdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZUluT3JkZXIrJ10nKS5jbGljaygpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9aG9vcmV5Y2FEYXRhQWN0aXZlXVtkYXRhLXRpdGxlPScrcm9vdC5TdXBwbGllci5ob29yZXljYURhdGFBY3RpdmUrJ10nKS5jbGljaygpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9aGFzRGVsaXZlcnlDb25zdHJhaW50XVtkYXRhLXRpdGxlPScrcm9vdC5TdXBwbGllci5oYXNEZWxpdmVyeUNvbnN0cmFpbnQrJ10nKS5jbGljaygpO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9b3JkZXJDdXRPZmZUaW1lXScpLnZhbChyb290LlN1cHBsaWVyLm9yZGVyQ3V0T2ZmVGltZSk7XG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgc2VsZWN0W25hbWU9ZGVsaXZlcnlMZWFkVGltZV0nKS52YWwocm9vdC5TdXBwbGllci5kZWxpdmVyeUxlYWRUaW1lKTtcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZHVjdF9ncm91cCxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwcm9kdWN0R3JvdXAucHVzaCh0aGlzLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZHVjdENhdGVnb3J5U2VsZWN0JykudmFsKHByb2R1Y3RHcm91cCkuY2hhbmdlKCk7XG5cbiAgICAgICAgbGV0IHNlcnZpY2U9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnNlcnZpY2UsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VydmljZS5wdXNoKHRoaXMubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5zZXJ2aWNlU2VsZWN0JykudmFsKHNlcnZpY2UpLmNoYW5nZSgpO1xuXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLnByb2ZpdF9jZW50ZXIsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcHJvZml0Q2VudGVyLnB1c2godGhpcy5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XG4gICAgICAgIC8vZGVidWcocHJvZml0Q2VudGVyKTtcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCdpbnB1dFt2YWx1ZT1cIicrJC5lc2NhcGVTZWxlY3Rvcih0aGlzKSsnXCJdJykucHJvcCggXCJjaGVja2VkXCIsIHRydWUgKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSE9J3VuZGVmaW5lZCcgJiYgKHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pKXtcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mIHJvb3QuU3VwcGxpZXIudXNlcnMgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgIHJvb3QucmVzZXRVc2VyVGFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vZGVidWcoQVBQLlN1cHBsaWVyQWRtaW4uZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKCcuc3VwcGxpZXJGb3JtJylbJ3Byb2R1Y3RHcm91cCddKTtcbiAgICAgICAgLy8kKCdbbmFtZT1wcm9kdWN0R3JvdXBdJykudmFsKFsnQsO8ZsOpw6FydV/DqWRlc2lwYXJpX3Rlcm3DqWtlaycsJ1RvasOhcyddKS5jaGFuZ2UoKTtcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcbiAgICAgICAgaWYoIUFQUC5Db250YWN0UG9wVXApe1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxuICAgICAgICB9XG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAuaW5pdCh7XG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBBUFAuU3VwcGxpZXJBZG1pbi5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnbmV3Jyk7XG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmNsZWFyRGF0YSgpO1xuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XG4gICAgICAgIH0pO1xuICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJ0b29sdGlwXCJdJykudG9vbHRpcCgpO1xuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XG4gICAgICAgICQoXCI6aW5wdXRcIikuaW5wdXRtYXNrKHtcbiAgICAgICAgICAgIFwib25pbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA+IDAgfHwgJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWludmFsaWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJvbmNvbXBsZXRlXCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsZWFyZWQnKTtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub24oJ2NsaWNrJyxyb290LmNsaWNrU2F2ZUJ1dHRvbik7XG4gICAgICAgIHJvb3Quc2V0RGV0YWlsc1ZpZXdEYXRhKCk7XG4gICAgICAgIHJvb3QuaW5pdFVzZXJDcmVhdGUoKTtcbiAgICAgICAgJChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpO1xuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XG4gICAgICAgICAgICB0YWdzOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRlVGFnOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRlcm0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0ZXJtLFxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8kKFwiLnByb2ZpdENlbnRlclNlbGVjdFwiKS5zZWxlY3QyKCk7XG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHNldEltYWdlRnJvbUxvY2FsKHRoaXMsT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5pbWFnZUxvZ28nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub2ZmKCdjbGljaycpO1xuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIC8vbGV0IGNoZWNrZWQ9JCh0aGlzKS5pcyhcIjpjaGVja2VkXCIpXG4gICAgICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBpbnB1dC5wcm9maXRDZW50ZXJTZWxlY3RDaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCQodGhpcykuaXMoXCI6Y2hlY2tlZFwiKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LnJlbmRlckF0dGFjaG1lbnQoKTtcbiAgICAgICAgLy9PcHRzLm9uQWZ0ZXJJbml0Vmlld0RldGFpbHMoKTtcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XG5cbiAgICAgICAgcm9vdC5pbml0RGVsaXZlcnlDb25zdHJhaW50VG9nZ2xlKCk7XG5cbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXREZWxpdmVyeUNvbnN0cmFpbnRUb2dnbGU9ZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcbiAgICAgICAgbGV0IHRvZ2dsZURlbGl2ZXJ5RmllbGRzPWZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB2YWw9JChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPVwiaGFzRGVsaXZlcnlDb25zdHJhaW50XCJdJykudmFsKCk7XG4gICAgICAgICAgICBpZih2YWw9PTEpe1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmRlbGl2ZXJ5Q29uc3RyYWludEZpZWxkcycpLnNob3coKTtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmRlbGl2ZXJ5Q29uc3RyYWludEZpZWxkcycpLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBhW2RhdGEtdG9nZ2xlPVwiaGFzRGVsaXZlcnlDb25zdHJhaW50XCJdJykub2ZmKCdjbGljay5kZWxpdmVyeUNvbnN0cmFpbnQnKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBhW2RhdGEtdG9nZ2xlPVwiaGFzRGVsaXZlcnlDb25zdHJhaW50XCJdJykub24oJ2NsaWNrLmRlbGl2ZXJ5Q29uc3RyYWludCcsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHRvZ2dsZURlbGl2ZXJ5RmllbGRzLDApO1xuICAgICAgICB9KTtcbiAgICAgICAgdG9nZ2xlRGVsaXZlcnlGaWVsZHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcbiAgICAgICAgLypcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0LmF0dHIoJ25hbWUnKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXS5uYW1lKTtcbiAgICAgICAgKi9cbiAgICAgICAgaWYoZmlsZUlucHV0KXtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgaWYoZmlsZUlucHV0WzBdLmZpbGVzWzBdKXtcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRTcGlubmVyJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XG4gICAgICAgICAgICAkKCcuY3VzdG9tLWZpbGUtbGFiZWwuc2VsZWN0ZWQnKS50ZXh0KCcnKTtcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkU3RhcnRlZCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZCcpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZT1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XG4gICAgICAgIGlmKHJvb3QuU3VwcGxpZXIuaWQpe1xuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgIH1cblxuXG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5idXR0b25VcGxvYWQnKS5vbignY2xpY2snLGZ1bmN0aW9uICgpe1xuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XG4gICAgICAgICAgICBsZXQgZmlsZUlucHV0PSQoJyNpbnB1dEdyb3VwQXR0YWNoZUZpbGUnKTtcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlcy5sZW5ndGg8MSl7XG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiSGliYSFcIiwgbWVzc2FnZTogJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUiwgdGltZW91dDogMTAwMDAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKS5maW5kKCdmb3JtLnN1cHBsaWVyRm9ybScpWzBdKTtcbiAgICAgICAgICAgIGxldCBkYXRhPSBuZXcgRm9ybURhdGEoJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKS5maW5kKCdmb3JtLnN1cHBsaWVyRm9ybScpWzBdKTtcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcblxuICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoZmlsZUlucHV0KTtcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOmFqYXhVcmwsXG4gICAgICAgICAgICAgICAgZGF0YTpkYXRhLFxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290LnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcihkYXRhLnJlc3BvbnNlSlNPTi5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2xpY2tOZXcnKTtcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld0NhbGxCYWNrKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWNrTmV3Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcbiAgICAgICAgcm9vdC5TdXBwbGllcj1uZXcgd2luZG93LlN1cHBsaWVyKCk7XG4gICAgICAgIHJvb3QuaW5pdFZpZXdEZXRhaWxzKCk7XG4gICAgfVxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRWRpdD1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZWRpdC5yZXBsYWNlKCclaWQlJyxyb3dEYXRhLmlkKTtcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIGRlYnVnKCdjbGlja1N1cHBsaWVyRGVsZXRlQ29uZmlybWVkJyk7XG4gICAgICAgIGRlYnVnKGV2ZW50KTtcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XG4gICAgICAgIGxldCBhamF4RGF0YT17fTtcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScsZXZlbnQuZGF0YS5pZCk7XG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj0kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKTtcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGFqYXhEYXRhKTtcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cocm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUucGFyZW50cygndHInKSk7XG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6YWpheFVybCxcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlPWZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgbGV0IGRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XG5cbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25EZWxldGUgQ2FsbGVkJyk7XG4gICAgICAgIHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlPW5vZGU7XG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAvLyBJZiBuZWNlc3NhcnksIHlvdSBjb3VsZCBpbml0aWF0ZSBhbiBBSkFYIHJlcXVlc3QgaGVyZSAoYW5kIHRoZW4gZG8gdGhlIHVwZGF0aW5nIGluIGEgY2FsbGJhY2spLlxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtb2RhbCdzIGNvbnRlbnQuIFdlJ2xsIHVzZSBqUXVlcnkgaGVyZSwgYnV0IHlvdSBjb3VsZCB1c2UgYSBkYXRhIGJpbmRpbmcgbGlicmFyeSBvciBvdGhlciBtZXRob2RzIGluc3RlYWQuXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLXRpdGxlJykudGV4dCgnTWVnZXLFkXPDrXTDqXMgJyk7XG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtYm9keScpLnRleHQoJ0JpenRvc2FuIHTDtnJsaSBhIGJlc3rDoWxsw610w7N0PycpO1xuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcbiAgICAgICAgICAgIG1vZGFsLmZpbmQoJy5idXR0b25ZZXMnKS5vbignY2xpY2snLHtpZDpyb3dEYXRhLmlkfSxyb290LmNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIGRlYnVnKCdkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaycpO1xuICAgICAgICBsZXQgbm9kZT0kKGV2ZW50WzBdLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xuICAgICAgICBsZXQgcm93RGF0YT1yb3cuZGF0YSgpO1xuICAgICAgICBsZXQgYWN0aW9uTmFtZT0nZGF0YXRhYmxlUm93QWN0aW9uJytub2RlLmRhdGEoJ2J1dHRvbnR5cGUnKS5jYXBpdGFsaXplKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdFthY3Rpb25OYW1lXShyb3dEYXRhLG5vZGUpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xuICAgICAgICBkYXRhVGFibGVDU1NTZWxlY3Rvcj1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmRhdGFUYWJsZSc7IC8vXG5cbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxuICAgICAgICBBUFAuc2V0T3B0cyh7XG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXG5cbiAgICAgICAgfSlcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xuICAgICAgICBpZih0eXBlb2Ygb3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXSE9J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcbiAgICAgICAgfVxuICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxuICAgICAgICAgICAgXCJhamF4XCI6IE9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQsXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IGNvbE51bS0xLFxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zKz1BUFAuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbigwLGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGJ1dHRvbnM6e1xuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICd0aXRsZSBjdXN0b20gdGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xuXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHI6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYToxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb25maWcpOyovXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNvbHVtbnNcIjogW1xuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJob29yZXljYUlkXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXG4gICAgICAgICAgICBcInN0YXRlU2F2ZVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ICk7XG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcbiAgICAgICAgZGVidWcoJ255ZXJlc3JlIGFsbHVuaycpO1xuICAgICAgICBsZXQgcmFuZG9tTnVtYmVyPWdldFJhbmRvbUludCg5OTk5KTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XG4gICAgICAgICQoJ2lucHV0W25hbWU9aG9vcmV5Y2FJZF0nKS52YWwoJ2hiJytyYW5kb21OdW1iZXIpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPW5hbWVJZF0nKS52YWwoJ2JlJytyYW5kb21OdW1iZXIpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1vcmRlckVtYWlsMl0nKS52YWwoJ2luZm9ybWFjaW8nK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1hZGRyZXNzXScpLnZhbCgnODk4OSBTdXBwbGllciB1dGNhICcrcmFuZG9tTnVtYmVyKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1waG9uZV0nKS52YWwoJyszNjMwMTIzNDU2NycpO1xuICAgICAgICAkKCdpbnB1dFtuYW1lPWZheF0nKS52YWwoJzM2MzA4ODg5OTk5Jyk7XG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcbiAgICAgICAgJCgndGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbCgnTWVnamVneXplbSAnK3JhbmRvbU51bWJlcik7XG5cbiAgICB9XG4gICAgdGhpcy50ZXN0TW9kZT1mdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJyEhISF0ZXN0bW9kZSAhISEhJyk7XG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcbiAgICAgICAgICAgICdjb250YWN0JzpbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZDoyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZDozLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6MyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6J0vDs3NhIFZlcm9uaWthJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmU6J3t7Zm9ybWF0dGVyUGhvbmVOdW1iZXIoXCIrMzYyMDQ1ODkxODBcIil9fSdcbiAgICAgICAgICAgIH1cbiovXG5cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICAgIE9wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5pbml0Vmlld0RldGFpbHMpO1xuICAgIH1cbiAgICB0aGlzLmluaXQ9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYoT3B0cy50ZXN0TW9kZSl7XG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKFN1cHBsaWVySXRlbSl7XG4gICAgICAgICAgICByb290LlN1cHBsaWVyPVN1cHBsaWVySXRlbVxuICAgICAgICB9XG4gICAgICAgIHJvb3QuaW5pdFZpZXdMaXN0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXJBdHRhY2htZW50PWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgcm93TnVtPTE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2F0dGFjaG1lbnQnKSxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGxldCBhdHRhY2htZW50RGF0YT10aGlzO1xuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcbiAgICAgICAgICAgIGRhdGU9bmV3IERhdGUoYXR0YWNobWVudERhdGEuY3JlYXRlZF9hdCk7XG4gICAgICAgICAgICBhdHRhY2htZW50RGF0YS5kYXRlPWRhdGUudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsYXR0YWNobWVudERhdGEpO1xuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICAgICAgcm93TnVtKys7XG4gICAgICAgIH0pO1xuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcbiAgICAgICAgY29uc29sZS5sb2coYXR0YWNobWVudERhdGEpO1xuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xuICAgICAgICBhdHRhY2htZW50RGF0YS5yb3dOdW09cm9vdC5TdXBwbGllci5hdHRhY2htZW50Lmxlbmd0aDtcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYXR0YWNobWVudFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJGw6FqbCBob3p6w6FhZHZhIVwiLCBtZXNzYWdlOiBhdHRhY2htZW50RGF0YS5vcmlnaW5hbF9maWxlbmFtZStcIiBmw6FqbCBob3p6w6FhZHZhXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XG4gICAgfVxuXG5cbiAgICB0aGlzLnJlc2V0Q29udGFjdFRhYmxlPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlckNvbnRhY3Q9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCByb3dOdW09MTtcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0NvbnRhY3RzJyk7XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xuICAgICAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvd051bTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29udGFjdERhdGEpO1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgICAgICByb3dOdW0rKztcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RGVsZXRlQ2xpY2spO1xuXG4gICAgICAgIG5vZGU9JCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRWRpdCcpO1xuICAgICAgICBub2RlLnVuYmluZCgnY2xpY2snKTtcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcblxuICAgIH1cblxuICAgIHRoaXMuYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbj1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IG5vZGU9JCgnLmF0dGFjaG1lbnRUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xuICAgICAgICBub2RlLmJpbmQoJ2NsaWNrJyxyb290LmF0dGFjaG1lbnREZWxldGVDbGljayk7XG4gICAgfVxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcbiAgICB0aGlzLmF0dGFjaG1lbnREZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGV0YWNoRmlsZS5yZXBsYWNlKCclaWQlJyxyb290LlN1cHBsaWVyLmlkKTtcbiAgICAgICAgLy9sZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xuICAgICAgICBsZXQgZGF0YT17fTtcbiAgICAgICAgZGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1cIl90b2tlblwiXScpLnZhbCgpO1xuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxuICAgICAgICAgICAgZGF0YTpkYXRhLFxuICAgICAgICAgICAgdHlwZTonUE9TVCcsXG4gICAgICAgICAgICAvL2NvbnRlbnRUeXBlOmZhbHNlLFxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xuICAgICAgICAgICAgICAgICAgICByb290LlN1cHBsaWVyLmF0dGFjaG1lbnQ9cm9vdC5TdXBwbGllci5hdHRhY2htZW50LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgLy9yb3cucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnJlc3BvbnNlSlNPTik7XG4gICAgICAgICAgICAgICAgcm9vdC5zZWxlY3RlZFVwbG9hZEZpbGVUb2dnbGUoKTtcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgfVxuXG5cbiAgICB0aGlzLnJlc2V0QXR0YWNobWVudFRhYmxlPWZ1bmN0aW9uICgpe1xuICAgICAgICAkKCcuYXR0YWNobWVudFRhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcm93LnJlbW92ZSgpO1xuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XG4gICAgfVxuICAgIHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcbiAgICB9XG4gICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xuICAgIH1cblxuXG4gICAgdGhpcy5jb250YWN0RWRpdENsaWNrPWZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xuICAgICAgICByb290LnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xuICAgIH1cblxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XG4gICAgICAgIHJldHVybiByb290LlN1cHBsaWVyO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcbiAgICAgICAgY29uc29sZS5sb2coJ25haCBtb3N0IGtlbGxlbmUgbWVnIHZhbGFtaXQgY3NpbmFsbmkuJylcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xuICAgICAgICB9ZWxzZSBpZihyb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93KCk9PSdlZGl0Jyl7XG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcblxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xuICAgICAgICAgICAgICAgIG5ld0NvbnRhY3RzLnB1c2goY29udGFjdERhdGEpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgbmV3Q29udGFjdHMucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuU3VwcGxpZXIuY29udGFjdD1uZXdDb250YWN0cztcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcGNzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcbiAgICAgICAgLypcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxuICAgICAgICAgKi9cbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xuICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm9vdC5TdXBwbGllci5jb250YWN0Lmxlbmd0aDtcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiS2FwY3NvbGF0dGFydMOzIGhvenrDoWFkdmEhXCIsIG1lc3NhZ2U6IGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2FwY3NvbGF0dGFydMOzIGhvenrDoWFkdmFcIiwgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogNTAwMCB9KTtcbiAgICB9XG5cblxuICAgIHRoaXMucmVzZXRVc2VyVGFibGU9ZnVuY3Rpb24gKCl7XG4gICAgICAgICQoJy5zdXBwbGllclVzZXJUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xuICAgICAgICByb290LnJlbmRlclVzZXJzKCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyVXNlcnM9ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCByb3dOdW09MTtcbiAgICAgICAgbGV0IHVzZXJzPXJvb3QuU3VwcGxpZXIudXNlcnN8fFtdO1xuICAgICAgICAkLmVhY2godXNlcnMsZnVuY3Rpb24gKCl7XG4gICAgICAgICAgICBsZXQgdXNlckRhdGE9JC5leHRlbmQoe30sdGhpcyk7XG4gICAgICAgICAgICB1c2VyRGF0YS5yb3dOdW09cm93TnVtO1xuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyVXNlclRhYmxlUm93XCJdJykuaHRtbCgpO1xuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsdXNlckRhdGEpO1xuICAgICAgICAgICAgJCgnLnN1cHBsaWVyVXNlclRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XG4gICAgICAgICAgICByb3dOdW0rKztcbiAgICAgICAgfSk7XG4gICAgICAgIHJvb3QuYmluZFVzZXJDbGlja0FjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmJpbmRVc2VyQ2xpY2tBY3Rpb249ZnVuY3Rpb24gKCl7XG4gICAgICAgIGxldCBub2RlPSQoJy5zdXBwbGllclVzZXJUYWJsZSAuYnV0dG9uRGVsZXRlJyk7XG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xuICAgICAgICBub2RlLmJpbmQoJ2NsaWNrJyxyb290LnVzZXJEZWxldGVDbGljayk7XG4gICAgfVxuICAgIHRoaXMudXNlckRlbGV0ZUNsaWNrPWZ1bmN0aW9uICgpe1xuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPXVzZXJJZF0nKS52YWwoKSoxO1xuICAgICAgICByb290LlN1cHBsaWVyLnVzZXJzPXJvb3QuU3VwcGxpZXIudXNlcnMuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSl7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuaWQhPT1pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJvdy5yZW1vdmUoKTtcbiAgICAgICAgcm9vdC5yZXNldFVzZXJUYWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLmFkZFVzZXI9ZnVuY3Rpb24gKHVzZXJEYXRhKXtcbiAgICAgICAgaWYoIXJvb3QuU3VwcGxpZXIudXNlcnMpeyByb290LlN1cHBsaWVyLnVzZXJzPVtdOyB9XG4gICAgICAgIGxldCBhbHJlYWR5QWRkZWQ9cm9vdC5TdXBwbGllci51c2Vycy5zb21lKGZ1bmN0aW9uKHUpeyByZXR1cm4gdS5pZD09PXVzZXJEYXRhLmlkOyB9KTtcbiAgICAgICAgaWYoYWxyZWFkeUFkZGVkKXsgcmV0dXJuOyB9XG4gICAgICAgIHJvb3QuU3VwcGxpZXIudXNlcnMucHVzaCh1c2VyRGF0YSk7XG4gICAgICAgIHVzZXJEYXRhLnJvd051bT1yb290LlN1cHBsaWVyLnVzZXJzLmxlbmd0aDtcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyVXNlclRhYmxlUm93XCJdJykuaHRtbCgpO1xuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSx1c2VyRGF0YSk7XG4gICAgICAgICQoJy5zdXBwbGllclVzZXJUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xuICAgICAgICByb290LmJpbmRVc2VyQ2xpY2tBY3Rpb24oKTtcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcbiAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6ICdGZWxoYXN6bsOhbMOzIGhvenrDoWFkdmEhJywgbWVzc2FnZTogdXNlckRhdGEubmFtZSsnIGhvenrDoXJlbmRlbHZlJywgc3RhdHVzOiBUT0FTVF9TVEFUVVMuU1VDQ0VTUywgdGltZW91dDogMzAwMCB9KTtcbiAgICB9XG4gICAgdGhpcy5pbml0VXNlckNyZWF0ZT1mdW5jdGlvbiAoKXtcbiAgICAgICAgbGV0IGNyZWF0ZVVybD1PcHRzLlVSTC5jcmVhdGVVc2VyfHwnJztcbiAgICAgICAgbGV0IGNvbnRhaW5lcj0kKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpO1xuICAgICAgICBmdW5jdGlvbiBjbGVhckZvcm0oKXtcbiAgICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuc3VwcGxpZXJOZXdVc2VyTmFtZScpLnZhbCgnJyk7XG4gICAgICAgICAgICBjb250YWluZXIuZmluZCgnLnN1cHBsaWVyTmV3VXNlckVtYWlsJykudmFsKCcnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5maW5kKCcuc3VwcGxpZXJOZXdVc2VyUGFzc3dvcmQnKS52YWwoJycpO1xuICAgICAgICAgICAgY29udGFpbmVyLmZpbmQoJy5zdXBwbGllck5ld1VzZXJFcnJvcicpLmhpZGUoKS50ZXh0KCcnKTtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIuZmluZCgnLmJ1dHRvbkNyZWF0ZVVzZXInKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGV0IG5hbWU9Y29udGFpbmVyLmZpbmQoJy5zdXBwbGllck5ld1VzZXJOYW1lJykudmFsKCkudHJpbSgpO1xuICAgICAgICAgICAgbGV0IGVtYWlsPWNvbnRhaW5lci5maW5kKCcuc3VwcGxpZXJOZXdVc2VyRW1haWwnKS52YWwoKS50cmltKCk7XG4gICAgICAgICAgICBsZXQgcGFzc3dvcmQ9Y29udGFpbmVyLmZpbmQoJy5zdXBwbGllck5ld1VzZXJQYXNzd29yZCcpLnZhbCgpO1xuICAgICAgICAgICAgbGV0IGVycm9yRWw9Y29udGFpbmVyLmZpbmQoJy5zdXBwbGllck5ld1VzZXJFcnJvcicpO1xuICAgICAgICAgICAgZXJyb3JFbC5oaWRlKCkudGV4dCgnJyk7XG4gICAgICAgICAgICBpZighbmFtZXx8IWVtYWlsfHwhcGFzc3dvcmQpe1xuICAgICAgICAgICAgICAgIGVycm9yRWwudGV4dCgnTWluZGVuIG1lesWRIGtpdMO2bHTDqXNlIGvDtnRlbGV6xZEhJykuc2hvdygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOmNyZWF0ZVVybCxcbiAgICAgICAgICAgICAgICB0eXBlOidQT1NUJyxcbiAgICAgICAgICAgICAgICBkYXRhOntuYW1lOm5hbWUsIGVtYWlsOmVtYWlsLCBwYXNzd29yZDpwYXNzd29yZH0sXG4gICAgICAgICAgICAgICAgaGVhZGVyczp7J1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKX0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkVXNlcihkYXRhLnVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JFbC50ZXh0KCdIaWJhIHTDtnJ0w6ludCBhIGZlbGhhc3puw6Fsw7MgbMOpdHJlaG96w6FzYWtvciEnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOmZ1bmN0aW9uKHhocil7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtc2c9J0hpYmEgdMO2cnTDqW50ISc7XG4gICAgICAgICAgICAgICAgICAgIGlmKHhoci5yZXNwb25zZUpTT04mJnhoci5yZXNwb25zZUpTT04uZXJyb3JzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvcnM9eGhyLnJlc3BvbnNlSlNPTi5lcnJvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmlyc3RLZXk9T2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJvcnNbZmlyc3RLZXldWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVycm9yRWwudGV4dChtc2cpLnNob3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsU3VwcGxpZXJJdGVtKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLFFBQVEsS0FBRyxXQUFXLEVBQUM7RUFBQSxJQUN2QkEsU0FBUSwwQkFBQUMsVUFBQTtJQUVWO0FBQ1I7QUFDQTtJQUNRLFNBQUFDLFVBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBQyxlQUFBLE9BQUFKLFNBQUE7TUFDdkJHLEtBQUEsR0FBQUUsVUFBQSxPQUFBTCxTQUFBLEdBQU1DLElBQUksRUFBQ0MsT0FBTztNQUNsQixJQUFHLE9BQU9DLEtB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QyxDQUFDcEgsSUFBSSxDQUFDLENBQUM7UUFDdEQ7TUFDSjtNQUNBZSxDQUFDLENBQUNpRCxJQUFJLENBQUM7UUFDSEMsR0FBRyxFQUFDbUssU0FBUztRQUNibEssSUFBSSxFQUFDLE1BQU07UUFDWDVGLElBQUksRUFBQztVQUFDNEcsSUFBSSxFQUFDQSxJQUFJO1VBQUVxSixLQUFLLEVBQUNBLEtBQUs7VUFBRUMsUUFBUSxFQUFDQTtRQUFRLENBQUM7UUFDaERuSyxPQUFPLEVBQUM7VUFBQyxjQUFjLEVBQUV0RCxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQzBCLEdBQUcsQ0FBQztRQUFDLENBQUM7UUFDekQ2QixPQUFPLEVBQUMsU0FBUkEsT0FBT0EsQ0FBVWhHLElBQUksRUFBQztVQUNsQixJQUFHQSxJQUFJLENBQUNnRyxPQUFPLEVBQUM7WUFDWjFELElBQUksQ0FBQ29OLE9BQU8sQ0FBQzFQLElBQUksQ0FBQ29RLElBQUksQ0FBQztZQUN2QkosU0FBUyxDQUFDLENBQUM7VUFDZixDQUFDLE1BQUk7WUFDREcsT0FBTyxDQUFDckgsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUNwSCxJQUFJLENBQUMsQ0FBQztVQUNyRTtRQUNKLENBQUM7UUFDRHVJLEtBQUssRUFBQyxTQUFOQSxLQUFLQSxDQUFVb0csR0FBRyxFQUFDO1VBQ2YsSUFBSUMsR0FBRyxHQUFDLGVBQWU7VUFDdkIsSUFBR0QsR0FBRyxDQUFDbkcsWUFBWSxJQUFFbUcsR0FBRyxDQUFDbkcsWUFBWSxDQUFDcUcsTUFBTSxFQUFDO1lBQ3pDLElBQUlBLE1BQU0sR0FBQ0YsR0FBRyxDQUFDbkcsWUFBWSxDQUFDcUcsTUFBTTtZQUNsQyxJQUFJQyxRQUFRLEdBQUNDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkNELEdBQUcsR0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDM0I7VUFDQUwsT0FBTyxDQUFDckgsSUFBSSxDQUFDd0gsR0FBRyxDQUFDLENBQUM1TyxJQUFJLENBQUMsQ0FBQztRQUM1QjtNQUNKLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztFQUNOLENBQUM7RUFDRCxJQUFJLENBQUNjLFNBQVMsQ0FBQ3ZDLE9BQU8sRUFBQ2lCLFlBQVksQ0FBQztBQUN4QyxDQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9hZG1pbi9zdXBwbGllci5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}");
|
|
|
|
/***/ }
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/
|
|
/******/ // startup
|
|
/******/ // Load entry module and return exports
|
|
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
|
/******/ __webpack_modules__["./resources/js/admin/dashboard.js"]();
|
|
/******/ __webpack_modules__["./resources/js/admin/priceList.js"]();
|
|
/******/ __webpack_modules__["./resources/js/admin/priceListProfitCenter.js"]();
|
|
/******/ __webpack_modules__["./resources/js/admin/product.js"]();
|
|
/******/ __webpack_modules__["./resources/js/admin/profitCenter.js"]();
|
|
/******/ var __webpack_exports__ = {};
|
|
/******/ __webpack_modules__["./resources/js/admin/supplier.js"]();
|
|
/******/
|
|
/******/ })()
|
|
; |